中航光电热表web
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

835 lines
34 KiB

<template>
<el-dialog title="新增其他出库" append-to-body :modelValue="openShow" width="70%" @close="closeDialog" fullscreen>
<el-form ref="form" :model="stOtherOutRecord" :rules="rules" label-width="100px" size="mini">
<el-row>
<!-- <el-col :span="8">
<el-form-item label="出库单号" prop="stAccBill.billCode">
<el-input v-model="stOtherOutRecord.stAccBill.billCode" :disabled="true" />
</el-form-item>
</el-col> -->
<!-- <el-col :span="6">
<el-form-item label="出库日期" prop="billDate">
<el-date-picker class="item-choose" v-model="stOtherOutRecord.billDate"
:picker-options="billDatePicker" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" clearable
placeholder="请选择" style="width: 250px;" />
</el-form-item>
</el-col> -->
<el-col :span="6">
<el-form-item label="出库原因" prop="outType">
<el-select v-model="stOtherOutRecord.outType" @change="changeUseType" class="item-choose">
<el-option v-for="(item, index) in useTypeOptions" :key="index" :label="item.label"
:value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="出库仓库" prop="shId">
<!-- <co-store-house-sel ref="storeHouse" v-model="stOtherOutRecord.stAccBill.coStorehouse.shId"
:option="shOption" @itemValue="storeHouseChange" /> -->
<el-select v-model="stOtherOutRecord.shId" @change="storeHouseChange"
class="item-choose">
<el-option v-for="(item, index) in wareList" :key="item.id" :label="item.shName"
:value="item.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="领料人员" prop="userId">
<el-select v-model="stOtherOutRecord.userId" filterable
class="item-choose">
<el-option v-for="(item, index) in userData" :key="item.id"
:label="`${item.realName}(${item.workNo})`" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="工装编号" prop="mid">
<el-select v-model="stOtherOutRecord.mid" value-key="id" filterable class="item-choose">
<el-option v-for="item in treeData" :key="item.mid" :label="item.toolingCode"
:value="item.mid" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6" v-if="isShowInput">
4 months ago
<el-form-item label="出库工作订单">
<el-input v-model="stOtherOutRecord.woCode" class="item-choose" />
</el-form-item>
</el-col>
4 months ago
<el-col :span="12">
<el-form-item label="备注" prop="memo" class="auto-fit">
<el-input placeholder="请输入" :rows="2" v-model="stOtherOutRecord.memo" type="textarea"
minlength="0" maxlength="100" show-word-limit style="width: 100%;" />
</el-form-item>
</el-col>
</el-row>
<el-row>
4 months ago
</el-row>
<div slot="left" style="margin-bottom: 12px;">
<el-button type="success" size="mini" @click="insertEvent()">插入一行</el-button>
<el-button type="danger" size="mini" @click="deleteRow()">删除一行</el-button>
<!-- <el-button type="primary" size="mini" @click="submit()">保存</el-button> -->
</div>
<el-table ref="xTable" :data="outbankList" border @select="selectChange">
<el-table-column type="selection" width="40" />
<el-table-column label="出库单号" prop="sirCode" width="120" align="center"></el-table-column>
<el-table-column label="仓库物料" prop="goodsCode" width="200" align="center" >
4 months ago
<template #header>
<span><i style="color: red">*</i>仓库物料</span>
</template>
<template #default="scope">
<el-select v-model="scope.row.goodsCode" @change="(val) => changeCode(val,scope.$index)">
<el-option v-for="item in goodsList" :key="item.id" :label="item.goodsCode" :value="item.goodsCode"></el-option>
</el-select>
4 months ago
</template>
</el-table-column>
<!-- <template v-slot:edit="scope">
<st-store-goods-out v-model="scope.row.rlsId" :option="[]" :params="goodsParams"
@itemValue="goodsItemValue" />
</template>
<template v-slot="{ row }">{{ row.goodsCodeAndGoodsName }}</template> -->
<el-table-column label="物料名称" prop="goodsName" align="center">
4 months ago
<template #header>
<span><i style="color: red">*</i>物料名称</span>
</template>
<!-- <template #default="scope">
<el-input v-model="scope.row.coGoods.goodsName" disabled placeholder="请输入" />
</template> -->
</el-table-column>
<el-table-column label="型号/牌号" prop="materialModel" align="center">
4 months ago
<template #header>
<span><i style="color: red">*</i>型号/牌号</span>
</template>
<!-- <template #default="scope">
4 months ago
<el-input v-model="scope.row.coGoods.mtltmrk" placeholder="请输入" />
</template> -->
</el-table-column>
<el-table-column label="库位号" prop="slId" align="center">
<template #header>
<span><i style="color: red">*</i>库位号</span>
</template>
<template #default="scope">
<el-select v-model="scope.row.slId" @change="(val) => changeLocation(val,scope.$index)">
<el-option v-for="item in scope.row.locationList" :key="item.id"
:label="item.location" :value="item.slId"></el-option>
</el-select>
<!-- <el-input v-model="scope.row.storageLocation.location" placeholder="请输入" /> -->
4 months ago
</template>
</el-table-column>
<el-table-column label="批次号" prop="piNo" align="center">
4 months ago
<template #header>
<span><i style="color: red">*</i>批号</span>
</template>
<template #default="scope">
<el-select v-model="scope.row.piNo" @change="val => changePiNo(val,scope.$index)">
<el-option v-for="item in scope.row.piNoList" :key="item.piNo"
:label="item.piNo" :value="item.piNo"></el-option>
</el-select>
<!-- <el-input v-model="scope.row.piNo" placeholder="请输入" /> -->
4 months ago
</template>
</el-table-column>
<el-table-column label="炉批号" prop="stovePiNo" align="center">
4 months ago
<template #header>
<span><i style="color: red">*</i>炉批号</span>
</template>
<!-- <template #default="scope">
4 months ago
<el-input v-model="scope.row.stovePiNo" placeholder="请输入" />
</template> -->
4 months ago
</el-table-column>
<el-table-column label="库存数量" prop="quantity" align="center">
4 months ago
<template #header>
<span><i style="color: red">*</i>库存数量</span>
</template>
<!-- <template #default="scope">
4 months ago
<el-input v-model="scope.row.quantity" placeholder="请输入" type="number"/>
</template> -->
4 months ago
</el-table-column>
<!-- <el-table-column label="出库件数" :edit-render="{ type: 'default' }" prop="outQuantity">
<template v-slot:edit="scope">
4 months ago
<vd-input-number v-model="scope.row.outQuantity" :min="-1000000000" :max="1000000000"
:precision="4" />
</template>
<template v-slot="{ row }">{{ row.outQuantity }}</template>
4 months ago
</el-table-column> -->
<el-table-column label="出库件数" prop="outQuantity" align="center">
4 months ago
<template #header>
<span><i style="color: red">*</i>出库件数</span>
</template>
<template #default="scope">
<el-input-number style="width:90%;" v-model="scope.row.outQuantity"
:max="scope.row.quantity" placeholder="请输入" controls-position="right"></el-input-number>
4 months ago
</template>
</el-table-column>
<el-table-column label="计量单位" prop="unitName" align="center">
4 months ago
<template #header>
<span><i style="color: red">*</i>计量单位</span>
</template>
<!-- <template #default="scope">
<el-input v-model="scope.unitName" placeholder="请输入"/>
</template> -->
4 months ago
</el-table-column>
<el-table-column label="到期日期" prop="scrapCycle" align="center">
4 months ago
<template #header>
<span><i style="color: red">*</i>到期日期</span>
</template>
<template #default="scope">
<el-date-picker disabled v-model="scope.row.scrapCycle" format="YYYY-MM-DD HH:mm:ss"
4 months ago
value-format="YYYY-MM-DD HH:mm:ss" type="date" placeholder="选择日期" style="width: 100%" />
</template>
</el-table-column>
<el-table-column label="入库日期" prop="inOutDate" align="center">
4 months ago
<template #header>
<span><i style="color: red">*</i>入库日期</span>
</template>
<template #default="scope">
<el-date-picker disabled v-model="scope.row.inOutDate" format="YYYY-MM-DD HH:mm:ss"
4 months ago
value-format="YYYY-MM-DD HH:mm:ss" type="date" placeholder="选择日期" style="width: 100%" />
</template>
</el-table-column>
</el-table>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script>
import {dateFormat} from '@/utils/date'
import {getOtherOutNo,getWarehouseList,getKeeperList,getGoodsOutList,getLocationList,completeIssue,
getLocationData,addIssue,getShList} from "@/api/storeManagement/otherIssuing"
export default {
props: {
showDialog: {
type: Boolean,
default: false
},
checkCode:{
type: String,
default: ''
}
},
data() {
const assQuantityValid = ({
cellValue,
rule,
rules,
row,
rowIndex,
column,
columnIndex
}) => {
return new Promise((resolve, reject) => {
if (row.coGoods) {
if (row.coGoods.numAcc) {
if (cellValue == null) {
reject(new Error(this.$t("store.goodsMustInputAssQuatity")));
}
}
}
resolve();
});
};
return {
openShow: false,
billCode:null,
userOption: [],
wareList:[],
shOption: [],
moldOption: {},
treeData: [],
goodsList:[],
stOtherOutRecord: {
// billDate:dateFormat(new Date(),'yyyy-MM-dd'),
// stAccBill: {
// billDate: new Date(),
// pfUserInfo: { dept: {} },
// coStorehouse: { shId: null }
// },
mid:null,
outType: 4,
woCode: null,
memo: null
},
btnLoading: false,
outbankList: [],
oldShId: null,
disableTaskCode: true,
billDatePicker: '',
useTypeOptions: [
{
value: 0,
label: "报废出库"
},
{
value: 1,
label: "料头出库"
},
{
value: 2,
label: "超额出库"
},
{
value: 3,
label: "复检出库"
},
{
value: 4,
label: "领用出库"
},
{
value: 5,
label: "库转移"
},
{
value: 6,
label: "退货出库"
},
{
value: 7,
label: "物料出库"
},
{
value: 8,
label: "班组提请"
}
],
goodsParams: {},
piNoParams: {},
rules: {
// stAccBill: {
// coStorehouse: {
shId: [{ required: true,message:"请选择仓库",trigger:"blur" }],
// },
// pfUserInfo: {
userId: [{ required: true,message:"请选择领料人",trigger:"blur" }],
// }
// },
// moId: [],
outType: [{ required: true,message:"请选择出库原因",trigger:"blur" }],
},
gridRules: {
rlsId: [{ required: true }],
shelfNo: [{ required: true }],
assQuantity: [{ validator: assQuantityValid }]
},
isShowInput: false,
userData: []
}
},
mounted() {
this.openShow = this.showDialog
this.getCode()
if(this.checkCode == ""){
this.getWare()
this.getKeeper()
this.getGoods()
}else{
this.getKeeper()
this.getShData()
}
},
methods: {
getShData(){
getShList({
goodsCode:this.checkCode
}).then(res =>{
this.wareList = res.data.data
})
},
getBasicData(){
completeIssue({
barCode:this.checkCode
}).then(res =>{
this.outbankList = [
{sirCode:this.billCode,...res.data.data}
]
this.stOtherOutRecord.shId = res.data.data.shId
})
},
getCode(){
getOtherOutNo().then(res =>{
this.billCode = res.data.data.sirCode
if(this.checkCode != ''){
this.getBasicData()
}
})
},
uniqueById(arr) {
const seen = new Map();
for (const item of arr) {
if (!seen.has(item.slId)) {
seen.set(item.slId, item);
}
}
return Array.from(seen.values());
},
changeCode(val,index){
let tmp = this.goodsList.find(item => item.goodsCode == val)
console.log('tmp------------',tmp)
this.outbankList[index].goodsName = tmp.goodsName
this.outbankList[index].materialModel = tmp.materialModel
this.outbankList[index].unitName = tmp.unitName
this.outbankList[index].goodsId = tmp.id
this.outbankList[index].slId = ""
this.outbankList[index].piNo = ""
this.outbankList[index].quantity = ''
getLocationData({
shId:this.stOtherOutRecord.shId,
goodsId:tmp.id
}).then(res =>{
console.log('res--------',res)
let data = this.uniqueById(res.data.data.records)
this.outbankList[index].locationList = data
})
},
changeLocation(val,index){
this.outbankList[index].piNo = ""
getLocationData({
shId:this.stOtherOutRecord.shId,
goodsId:this.outbankList[index].goodsId,
slId:val
}).then(res =>{
this.outbankList[index].piNoList = res.data.data.records
})
},
changePiNo(val,index){
let tmp = this.outbankList[index].piNoList.find(item => item.piNo == val)
if(tmp){
this.outbankList[index].stovePiNo = tmp.stovePiNo
this.outbankList[index].quantity = tmp.quantity
this.outbankList[index].scrapCycle = tmp.scrapCycle
this.outbankList[index].inOutDate = tmp.inOutDate
this.outbankList[index].id = tmp.id
}
},
getGoods(){
getGoodsOutList().then(res =>{
this.goodsList = res.data.data.records
})
},
getKeeper(){
getKeeperList().then(res =>{
this.userData = res.data.data
})
},
getWare(){
getWarehouseList().then(res =>{
this.wareList = res.data.data.records
})
},
closeDialog(val) {
this.openShow = false
this.$emit('closeDialog',val);
},
userDataFn() {
// this.$ajax.post("sysComBox/user", { "filterValue": null, "paging": { "pageSize": 9999999, "pageNumber": 1 }, "baseParams": {} }).then(res => {
// if (this.$ifAjax(res)) {
// this.userData = res.data.list;
// }
// });
},
opened() {
this.stOtherOutRecord = {
stAccBill: {
billDate: new Date(),
pfUserInfo: { dept: {} },
coStorehouse: { shId: null }
},
mid: null,
outType: 4,
memo: null
};
this.oldShId = null;
this.outbankList = [];
this.$refs.form.resetFields();
if (this.abId == null) {
this.queryDataForAdd();
} else {
this.queryData();
}
this.changeUseType(this.stOtherOutRecord.outType);
this.moldList();
},
moldList() {
// this.$ajax.post("stOtherReceiptRecord/queryMoldList").then(res => {
// if (this.$ifAjax(res)) {
// this.loading = false;
// this.treeData = res.data.list;
// }
// });
// this.$ajax.post("stOtherOutRecord/generateCode").then(res => {
// if (this.$ifAjax(res)) {
// this.stOtherOutRecord.stAccBill.billCode =
// res.data.stAccBill.billCode;
// }
// });
},
queryDataForAdd() {
this.$ajax.get("stOtherOutRecord/preparedForAdd").then(res => {
this.stOtherOutRecord = res.data;
this.userOption = [
{
userId: this.stOtherOutRecord.stAccBill.pfUserInfo.userId,
userName: this.stOtherOutRecord.stAccBill.pfUserInfo.userName
}
];
});
},
queryData() {
// 根据凭证单ID查询入库数据
this.$ajax.get("stOtherOutRecord/queryForEdit/" + this.abId).then(res => {
const { stOtherOutRecord, outbankList, prMoldOrder } = res.data;
this.stOtherOutRecord = stOtherOutRecord;
this.outbankList = outbankList;
this.oldShId = this.stOtherOutRecord.stAccBill.coStorehouse.shId;
this.userOption = [
{
userId: this.stOtherOutRecord.stAccBill.pfUserInfo.userId,
userName: this.stOtherOutRecord.stAccBill.pfUserInfo.userName
}
];
this.shOption = [
{
shId: this.stOtherOutRecord.stAccBill.coStorehouse.shId,
shName: this.stOtherOutRecord.stAccBill.coStorehouse.shName
}
];
this.stOtherOutRecord.moId = prMoldOrder.moId;
this.moldOption[prMoldOrder.moId] = prMoldOrder;
});
},
insertEvent(row = -1) {
if(!this.stOtherOutRecord.shId || this.stOtherOutRecord.shId == ''){
this.$message.error('请选择仓库!');
return
}
// 新增一行
4 months ago
// 创建一个新行对象,包含所有必要的字段
let sirCode = '';
const len = this.outbankList;
if (len.length === 0) {
sirCode = this.billCode;
} else {
const newBoCode = len[len.length - 1].sirCode;
sirCode = Number(newBoCode) + 1;
}
4 months ago
const newRow = {
sirCode:sirCode,
_select:false
4 months ago
};
this.outbankList.push(newRow);
},
selectChange(list, row) {
row._select = !row._select;
},
// 删除选中行
deleteRow() {
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
this.outbankList = this.outbankList.filter(row => !row._select);
});
},
editActived({ row, rowIndex, column, columnIndex, $columnIndex, cell }) {
},
editClosed({ row, rowIndex, column, columnIndex, $columnIndex, cell }) {
// 编辑完成后触发
if (
column.property === "quantity" ||
column.property === "unitPrice" ||
column.property === "abdMoney" ||
column.property === "assQuantity"
) {
this.changeData(row, column.property);
}
},
activeCellMethod({ column, columnIndex }) {
// 文本禁止编辑
if (this.stOtherOutRecord.stAccBill.coStorehouse.shId == null) {
this.$message.error(this.$t("store.pleaseChoseStore"));
return false;
}
var row = this.$refs.xTable.getCurrentRecord();
if (column.property === "assQuantity") {
if (!row.coGoods.numAcc) {
this.$message.error(this.$t("store.pleaseChoseGoodsForNumAcc"));
return false;
}
}
return true;
},
close(isRefresh) {
this.$emit("cancel", isRefresh === true);
},
goodsItemValue(item) {
// 选择完数据,对关联数据进行修改
var row = this.$refs.xTable.getCurrentRecord();
if (item.storageLocation != null) {
this.$set(row, "storageLocation", item.storageLocation);
}
this.$set(row, "quantity", item.quantity);
this.$set(row, "coGoods", item.coGoods);
this.$set(row, "rlsId", item.rlsId);
this.$set(row, "piNo", item.piNo);
this.$set(row, "stovePiNo", item.stovePiNo);
this.$set(row, "goodsCodeAndGoodsName", item.goodsCodeAndGoodsName);
this.$set(row, "createTime", item.createTime);
this.$set(row, "scrapCycle", item.scrapCycle);
},
storeHouseChange(val) {
// console.log("item", item)
console.log('wareList---------',this.wareList)
let tmp = this.wareList.find(item => item.id == val)
if(tmp.shName.indexOf("玻璃饼") !== -1){
this.isShowInput = true;
}else{
this.isShowInput = false;
}
if(this.outbankList.length == 1){
this.outbankList[0].slId = ''
this.outbankList[0].piNo = ''
this.outbankList[0].quantity = ''
getGoodsOutList({
shId:val
}).then(res =>{
this.goodsList = res.data.data.records
if(this.outbankList[0].goodsCode != ''){
let tmp = this.goodsList.find(item => item.goodsCode == this.outbankList[0].goodsCode)
this.outbankList[0].goodsId = tmp.id
if(tmp){
getLocationData({
shId:val,
goodsId:tmp.id
}).then(res =>{
console.log('res--------',res)
let data = this.uniqueById(res.data.data.records)
this.outbankList[0].locationList = data
})
}
}
})
}else{
this.outbankList = []
}
},
changeUseType(outType) {
},
changeData(row, fieldName) {
// 数量
let quantityVal = row.quantity;
// 件数
let assQuantityVal = row.assQuantity;
// 单价
let priceVal = row.unitPrice;
// 金额
let abdMoneyVal = row.abdMoney;
// 件数核算
const numAcc = row.coGoods.numAcc;
if (quantityVal === undefined || quantityVal === null) {
quantityVal = 0;
}
if (assQuantityVal === undefined || assQuantityVal === null) {
assQuantityVal = 0;
}
if (priceVal === undefined || priceVal === null) {
priceVal = 0;
}
const n = this.$number;
if (
fieldName === "quantity" ||
fieldName === "unitPrice" ||
fieldName === "assQuantity"
) {
if (numAcc) {
abdMoneyVal = n.floatMul(priceVal, assQuantityVal, 2);
} else {
abdMoneyVal = n.floatMul(priceVal, quantityVal, 2);
}
this.$set(row, "abdMoney", abdMoneyVal);
} else {
if (numAcc) {
priceVal = n.floatDiv(abdMoneyVal, assQuantityVal, 6);
} else {
priceVal = n.floatDiv(abdMoneyVal, quantityVal, 6);
}
this.$set(row, "abdMoney", abdMoneyVal);
}
},
getMinBillDate() {
const self = this;
return {
disabledDate(time) {
if (self.stOtherOutRecord.stAccBill.billDate) {
return (
new Date(self.stOtherOutRecord.stAccBill.billDate).getTime() >
time.getTime()
);
}
}
};
},
submit() {
this.$refs.form.validate(valid => {
if (valid) {
this.outbankList.map(item =>{
if(item.outQuantity > item.quantity){
this.$message.error('出库数量不可大于库存数量')
return
}
})
// 校验通过:准备提交数据(过滤无用字段)
const submitData = this.outbankList.map(row => {
const { piNoList,locationList,_select, ...validData } = row; // 剔除选择状态字段
return validData;
});
let params = {
outList:submitData,
stOtherOutRecord:this.stOtherOutRecord
}
console.log('params',params)
addIssue(params).then(res =>{
if(res.data.code == 200){
this.$message.success('保存成功')
this.outbankList.map((item,index) =>{
getLocationData({
shId:this.stOtherOutRecord.shId,
goodsId:item.goodsId,
slId:item.slId
}).then(res =>{
item.piNoList = res.data.data.records
let tmp = item.piNoList.find(item1 => item1.piNo == item.piNo)
item.quantity = tmp.quantity
})
})
// this.outbankList = []
// this.stOtherOutRecord = {}
// this.closeDialog(true)
// this.onLoad()
}
})
}
})
// this.$message.success("保存成功");
// this.$refs.form.validate(formValid => {
// if (formValid) {
// if (this.isShowInput) {
// if (
// this.stOtherOutRecord.woCode == null &&
// this.stOtherOutRecord.woCode == undefined
// ) {
// return this.$message.warning("请填写工作订单号");
// }
// }
// let submitList = [];
// const deleteIds = [];
// if (
// this.oldShId != null &&
// this.stOtherOutRecord.stAccBill.coStorehouse.shId !== this.oldShId
// ) {
// const { fullData } = this.$refs.xTable.getTableData();
// if (fullData.length > 0) {
// submitList = submitList.concat(fullData);
// }
// } else {
// const {
// insertRecords,
// updateRecords
// } = this.$refs.xTable.getRecordset();
// if (insertRecords.length > 0) {
// insertRecords.forEach(item => {
// if (item.coGoods.goodsId != null) {
// submitList.push(item);
// }
// });
// }
// if (updateRecords.length > 0) {
// submitList = submitList.concat(updateRecords);
// }
// }
// const removeRecords = this.$refs.xTable.getRemoveRecords();
// if (removeRecords.length) {
// removeRecords.forEach(obj => {
// if (obj.stAccBillDetail.abdId) {
// deleteIds.push(obj.stAccBillDetail.abdId);
// }
// });
// }
// if (
// (this.stOtherOutRecord.abId === undefined ||
// this.stOtherOutRecord.abId === null) &&
// submitList.length === 0
// ) {
// this.$message.warning(
// this.$t("videaVueLib.publics.message.noDataToSave")
// );
// } else {
// this.$refs.xTable.validate(submitList, errMap => {
// if (errMap) {
// return;
// }
// this.btnLoading = true;
// this.$ajax
// .post("stOtherOutRecord/addStOtherOutRecord", {
// stOtherOutRecord: this.stOtherOutRecord,
// list: submitList,
// deleteIds: deleteIds
// })
// .then(res => {
// if (this.$ifAjax(res)) {
// this.$message.success(
// this.$t("videaVueLib.publics.message.success")
// );
// this.close(true);
// }
// this.btnLoading = false;
// });
// });
// }
// }
// });
},
piCodeChange(id, item) {
this.stOtherOutRecord.taskCode = item.moCode;
}
}
}
</script>
<style lang="scss" scoped>
.item-choose {
width: 250px;
}
</style>