中航光电热表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.
 
 
 
 

864 lines
28 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">
<el-row>
<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">
<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="picker">
<el-select v-model="stOtherOutRecord.picker" 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">
<el-form-item label="出库工作订单">
<el-input v-model="stOtherOutRecord.woCode" class="item-choose" />
</el-form-item>
</el-col>
<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> </el-row>
<div slot="left" style="margin-bottom: 12px">
<el-button type="primary" @click="insertEvent()">插入一行</el-button>
<el-button type="danger" @click="deleteRow()">删除一行</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="150" align="center">
<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> -->
<jhSelect
@input="val => (scope.row.goodsCode = val)"
:value="scope.row.goodsCode"
placeholder="请搜索选择"
api-url="/blade-wms/stGoods/list"
echo-api="/blade-wms/stGoods/list"
echoParamsKey="goodsCode"
echo-method="get"
api-method="get"
list-key="records"
total-key="total"
label-key="goodsCode"
value-key="goodsCode"
search-key="goodsCode"
:debounce-time="100"
@change="(val, item) => changeCode(val, item, scope.$index)"
:title="'修改'"
/>
</template>
</el-table-column>
<el-table-column label="物料名称" prop="goodsName" align="center">
<template #header>
<span><i style="color: red">*</i>物料名称</span>
</template>
</el-table-column>
<el-table-column label="型号/牌号" prop="materialModel" align="center">
<template #header>
<span><i style="color: red">*</i>型号/牌号</span>
</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>
</template>
</el-table-column>
<el-table-column label="批次号" prop="piNo" align="center">
<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>
</template>
</el-table-column>
<el-table-column label="炉批号" prop="stovePiNo" align="center">
<template #header>
<span><i style="color: red">*</i>炉批号</span>
</template>
</el-table-column>
<el-table-column label="库存数量" prop="quantity" align="center">
<template #header>
<span><i style="color: red">*</i>库存数量</span>
</template>
</el-table-column>
<el-table-column label="出库件数" prop="outQuantity" align="center">
<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>
</template>
</el-table-column>
<el-table-column label="计量单位" prop="unitName" align="center">
<template #header>
<span><i style="color: red">*</i>计量单位</span>
</template>
</el-table-column>
<el-table-column label="到期日期" prop="scrapCycle" align="center">
<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"
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">
<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"
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: {
picker: [{ 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, item, index) {
// let tmp = this.goodsList.find(item => item.goodsCode == val);
// console.log('tmp------------', tmp);
if (item != undefined) {
this.outbankList[index].goodsName = item.goodsName;
this.outbankList[index].materialModel = item.materialModel;
this.outbankList[index].unitName = item.unitName;
this.outbankList[index].goodsId = item.id;
this.outbankList[index].slId = '';
this.outbankList[index].piNo = '';
this.outbankList[index].quantity = '';
}
getLocationData({
shId: this.stOtherOutRecord.shId,
goodsId: item.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;
}
// 新增一行
// 创建一个新行对象,包含所有必要的字段
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;
}
const newRow = {
sirCode: sirCode,
_select: false,
};
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>