<template> <div style="width: 100%; padding: 0px 15px"> <byForm :formConfig="formConfig" :formOption="formOption" v-model="formData.data" :rules="rules" ref="formDom"> <template #commodity> <div style="width: 100%"> <el-table :data="formData.data.outboundRecordList" style="width: 100%; "> <el-table-column label="商品图片" width="80"> <template #default="{ row }"> <div v-if="row.fileUrl"> <img :src="row.fileUrl" class="pic" @click="openImg(row.fileUrl)" /> </div> <div v-else></div> </template> </el-table-column> <el-table-column prop="productName" label="商品名称" min-width="150" /> <el-table-column prop="productCode" label="商品编码" width="200" /> <el-table-column label="规格尺寸 (cm)" width="130"> <template #default="{ row, $index }"> <div style="width: 100%"> {{row.productLength}} * {{row.productWidth}} * {{row.productHeight}} </div> </template> </el-table-column> <el-table-column prop="productColor" label="颜色" width="150" /> <el-table-column prop="productFrontalTexture" label="纹路" width="130" :formatter="(row) => dictKeyValue(row.productFrontalTexture, frontLinesData)" /> <el-table-column prop="productNetWeight" label="净重" width="100" /> <el-table-column prop="productUnit" label="单位" width="100" /> <el-table-column label="订单数量" width="100" prop="orderQuantity" /> <el-table-column label="单价" width="100" prop="price" /> <el-table-column label="已出库数量" width="100" prop="saleOutboundQuantity" fixed="right" /> <el-table-column prop="quantity" label="出库数量" width="140" fixed="right"> <template #default="{ row, $index }"> <el-form-item :prop="'outboundRecordList.' + $index + '.quantity'" :rules="rules.quantity" :inline-message="true" class="margin-b-0"> <el-input-number onmousewheel="return false;" v-model="row.quantity" placeholder="请输入" style="width: 100%" :precision="0" :controls="false" :min="0" @change="totalAmount()" /> </el-form-item> </template> </el-table-column> <el-table-column label="小计" width="100" prop="amount" fixed="right" /> <el-table-column label="备注" min-width="200" prop="remark" /> </el-table> </div> </template> </byForm> </div> </template> <script setup> import byForm from "@/components/byForm/index"; const route = useRoute(); // 接收父组件的传值 const props = defineProps({ queryData: Object, }); const { proxy } = getCurrentInstance(); const frontLinesData = computed( () => proxy.useUserStore().allDict["front_lines"] ); const formData = reactive({ data: {}, }); const formDom = ref(null); const judgeStatus = () => { if (route.query.processType == 20 || route.query.processType == 10) { return true; } if (props.queryData.recordList && props.queryData.recordList.length > 0) { let data = props.queryData.recordList.filter( (item) => item.status === 2 && item.nodeType !== 1 ); if (data && data.length > 0) { return true; } } return false; }; const formOption = reactive({ inline: true, labelWidth: 100, itemWidth: 100, disabled: false, }); const formConfig = computed(() => { return [ { type: "title1", title: "商品信息", haveLine: true, }, { type: "slot", slotName: "commodity", label: "", }, { type: "title1", title: "出库总金额", haveLine: true, }, { type: "input", label: "出库总金额", prop: "amount", itemWidth: 25, disabled: true, }, ]; }); const rules = ref({ quantity: [{ required: true, message: "请输入数量", trigger: "blur" }], }); const totalAmount = () => { let money = 0; if ( formData.data.outboundRecordList && formData.data.outboundRecordList.length > 0 ) { for (let i = 0; i < formData.data.outboundRecordList.length; i++) { formData.data.outboundRecordList[i].amount = parseFloat( Number(formData.data.outboundRecordList[i].quantity) * Number(formData.data.outboundRecordList[i].price) ).toFixed(2); money = parseFloat( Number(money) + Number(formData.data.outboundRecordList[i].amount) ).toFixed(2); } } formData.data.amount = money; }; const handleSubmit = async () => { let flag = await formDom.value.handleSubmit(() => {}); if (flag) { if ( formData.data.outboundRecordList && formData.data.outboundRecordList.length > 0 ) { let total = 0; for (let i = 0; i < formData.data.outboundRecordList.length; i++) { const ele = formData.data.outboundRecordList[i]; total += Number(ele.quantity); if ( Number(ele.quantity) + Number(ele.saleOutboundQuantity) > Number(ele.orderQuantity) ) { proxy.msgTip("出库数量加已出库数量不能大于订单数量", 2); return false; } } if (!(total > 0)) { proxy.msgTip("出库数量不能为0", 2); return false; } } return true; } else { setTimeout(() => { const errorDiv = document.getElementsByClassName("is-error"); errorDiv[0].scrollIntoView(); }, 0); } return flag; }; const getFormData = () => { return proxy.deepClone(formData.data); }; // 向父组件暴露 defineExpose({ getFormData, handleSubmit, }); const getAllData = (businessId) => { let obj = {}; if (route.query && route.query.obj) { obj = JSON.parse(route.query.obj); } proxy.post("/contract/detail", { id: businessId }).then((res) => { formData.data = { contractId: businessId, outboundRecordList: res.contractProductList.map((x) => ({ ...x, contractProductId: x.id, orderQuantity: x.quantity, quantity: obj[x.id] || null, amount: "", })), amount: "", }; totalAmount(); if ( formData.data.outboundRecordList && formData.data.outboundRecordList.length > 0 ) { let productIds = formData.data.outboundRecordList.map((x) => x.productId); proxy.getFileData({ businessIdList: productIds, data: formData.data.outboundRecordList, att: "productId", businessType: "0", fileAtt: "fileList", filePathAtt: "fileUrl", }); } }); }; onMounted(() => { formOption.disabled = judgeStatus(); if (route.query && route.query.businessId && !route.query.processType) { let businessId = route.query.businessId; getAllData(businessId); } else if (route.query && route.query.businessId && route.query.processType) { proxy .post("/contractOutboundInfo/detail", { id: route.query.businessId }) .then((res) => { formData.data = res; totalAmount(); if ( formData.data.outboundRecordList && formData.data.outboundRecordList.length > 0 ) { let productIds = formData.data.outboundRecordList.map( (x) => x.productId ); proxy.getFileData({ businessIdList: productIds, data: formData.data.outboundRecordList, att: "productId", businessType: "0", fileAtt: "fileList", filePathAtt: "fileUrl", }); } }); } }); </script> <style lang="scss" scoped> .table { border-collapse: collapse; border-spacing: 0; td { text-align: center; padding: 2px 4px; // padding: 5px 10px; } } .small-title { padding-left: 15px; margin-bottom: 10px; color: #3366ff; font-size: 14px; } :deep(.el-checkbox) { margin-right: 0px; } // :deep(.el-collapse-item) { // margin-bottom: 10px; // } :deep(.el-collapse-item__header) { background-color: #eee; } </style>