| | |
| | | <el-col :span="6"> |
| | | <el-form-item |
| | | required |
| | | :prop="'detailList.' + index + '.scrapProCode'" |
| | | :rules="{ required: true, message: 'è¯·éæ©äº§åç¼ç ', trigger: 'blur' }" |
| | | label="产åç¼ç ï¼" |
| | | > |
| | | <el-select |
| | | v-model="detail.scrapProCode" |
| | |
| | | style="width: 100%;" |
| | | > |
| | | <el-option |
| | | v-for="(code, index) in proCodeOptions" |
| | | :key="index" |
| | | v-for="(code, idx) in proCodeOptions" |
| | | :key="idx" |
| | | :label="code" |
| | | :value="code" |
| | | ></el-option> |
| | |
| | | <el-col :span="5"> |
| | | <el-form-item |
| | | required |
| | | :prop="'detailList.' + index + '.scrapProVersion'" |
| | | :rules="{ required: true, message: 'è¯·éæ©çæ¬', trigger: 'blur' }" |
| | | label="çæ¬ï¼" |
| | | > |
| | | <el-select |
| | | v-model="detail.scrapProVersion" |
| | |
| | | <el-col :span="5"> |
| | | <el-form-item |
| | | required |
| | | :prop="'detailList.' + index + '.scrapProLotNo'" |
| | | :rules="{ required: true, message: 'è¯·éæ©æ¹æ¬¡å·', trigger: 'blur' }" |
| | | label="æ¹æ¬¡å·ï¼" |
| | | > |
| | | <el-select |
| | | v-model="detail.scrapProLotNo" |
| | |
| | | <el-col :span="4"> |
| | | <el-form-item |
| | | required |
| | | :prop="'detailList.' + index + '.scrapPcsQty'" |
| | | :rules="{ |
| | | required: true, |
| | | message: '请è¾å
¥PCSæ°é', |
| | | trigger: 'blur', |
| | | validator: validateNumber // èªå®ä¹æ°åæ ¡éª |
| | | }" |
| | | label="PCSæ°éï¼" |
| | | > |
| | | <el-input |
| | | v-model="detail.scrapPcsQty" |
| | |
| | | export default { |
| | | components: { VolBox }, |
| | | data() { |
| | | const validateNumber = (rule, value, callback) => { |
| | | if (!value) { |
| | | return callback(new Error('请è¾å
¥æ°é')); |
| | | } |
| | | const numberRegex = /^\d+(\.\d+)?$/; |
| | | if (!numberRegex.test(value)) { |
| | | return callback(new Error('请è¾å
¥ææçæ°å')); |
| | | } |
| | | if (parseFloat(value) <= 0) { |
| | | return callback(new Error('æ°éå¿
须大äº0')); |
| | | } |
| | | callback(); |
| | | }; |
| | | |
| | | return { |
| | | showDetialBox: false, |
| | | warehouses: [], |
| | |
| | | warehouseId: "", |
| | | proScrapSheetOrderNo: "" |
| | | }, |
| | | |
| | | detailList: [ |
| | | { |
| | | scrapProCode: "", |
| | |
| | | versionOptions: [], |
| | | lotNoOptions: [] |
| | | } |
| | | ], |
| | | validateNumber |
| | | ] |
| | | }; |
| | | }, |
| | | methods: { |
| | |
| | | warehouseId: "", |
| | | proScrapSheetOrderNo: "" |
| | | }; |
| | | this.proCodeOptions = []; // æ¸
空产åç¼ç å表 |
| | | this.detailList = [this.createEmptyDetail()]; |
| | | |
| | | // å è½½ä»åºå表 |
| | |
| | | |
| | | // ä»åºåæ´äºä»¶ |
| | | handleWarehouseChange(warehouseId) { |
| | | if (!warehouseId) return; |
| | | if (!warehouseId) { |
| | | this.proCodeOptions = []; // ä»åºä¸ºç©ºæ¶æ¸
空产åç¼ç å表 |
| | | return; |
| | | } |
| | | // æ ¹æ®ä»åºIDå 载产åç¼ç å表 |
| | | this.http |
| | | .post(`api/ProStockInfo/GetProCodeByWarehouse?warehouseId=${this.form.warehouseId}`,null, "å è½½äº§åæ°æ®ä¸") |
| | | .post(`api/ProStockInfo/GetProCodeByWarehouse?warehouseId=${warehouseId}`,null, "å è½½äº§åæ°æ®ä¸") |
| | | .then((res) => { |
| | | if (res.status) { |
| | | this.proCodeOptions = [...new Set(res.data)]; |
| | |
| | | |
| | | // 产åç¼ç åæ´äºä»¶ |
| | | handleProCodeChange(detail, index) { |
| | | // æ¸
ç©ºçæ¬åæ¹æ¬¡å· |
| | | detail.versionOptions = []; |
| | | detail.lotNoOptions = []; |
| | | detail.scrapProVersion = ""; |
| | | detail.scrapProLotNo = ""; |
| | | |
| | | if (!detail.scrapProCode) { |
| | | detail.versionOptions = []; |
| | | detail.lotNoOptions = []; |
| | | return; |
| | | } |
| | | |
| | |
| | | |
| | | // æäº¤è¡¨å |
| | | submitForm() { |
| | | if (!this.form.warehouseId) { |
| | | return this.$message.error("è¯·éæ©æå±ä»åº"); |
| | | } |
| | | // èªå®ä¹éªè¯é»è¾ |
| | | let isValid = true; |
| | | let errorMessage = ''; |
| | | |
| | | const invalidDetail = this.detailList.find(item => |
| | | !item.scrapProCode || !item.scrapProVersion || !item.scrapProLotNo || !item.scrapPcsQty || isNaN(parseFloat(item.scrapPcsQty))|| parseFloat(item.scrapPcsQty) <= 0 |
| | | ); |
| | | |
| | | if (invalidDetail) { |
| | | return this.$message.error("è¯·ä¸ºæææç»è¾å
¥ææçæ°éå¼ï¼å¤§äº0çæ°åï¼"); |
| | | } |
| | | // éªè¯ä»åº |
| | | if (!this.form.warehouseId) { |
| | | isValid = false; |
| | | errorMessage = 'è¯·éæ©æå±ä»åº'; |
| | | } |
| | | |
| | | const submitData = { |
| | | warehouseId: this.form.warehouseId, |
| | | details: this.detailList.map(item => ({ |
| | | scrapProCode: item.scrapProCode, |
| | | scrapProVersion: item.scrapProVersion, |
| | | scrapProLotNo: item.scrapProLotNo, |
| | | scrapPcsQty: parseFloat(item.scrapPcsQty), |
| | | remark: item.remark |
| | | })) |
| | | }; |
| | | // éªè¯æç» |
| | | if (isValid) { |
| | | const invalidDetail = this.detailList.find(item => |
| | | !item.scrapProCode || |
| | | !item.scrapProVersion || |
| | | !item.scrapProLotNo || |
| | | !item.scrapPcsQty || |
| | | isNaN(parseFloat(item.scrapPcsQty)) || |
| | | parseFloat(item.scrapPcsQty) <= 0 |
| | | ); |
| | | |
| | | if (invalidDetail) { |
| | | isValid = false; |
| | | errorMessage = 'æäº¤æ°æ®åå¨ç©ºå¼æè¾å
¥æ°éä¸åæ³ï¼è¯·æ£æ¥ï¼'; |
| | | } |
| | | } |
| | | |
| | | this.http |
| | | .post("api/ErpProScrapSheet/Save", submitData, "æäº¤ä¸") |
| | | .then((res) => { |
| | | // æ ¹æ®éªè¯ç»æå¤ç |
| | | if (!isValid) { |
| | | this.$message.error(errorMessage); |
| | | return; |
| | | } |
| | | |
| | | // éªè¯éè¿ï¼åå¤æäº¤æ°æ® |
| | | const submitData = { |
| | | warehouseId: this.form.warehouseId, |
| | | details: this.detailList.map(item => ({ |
| | | scrapProCode: item.scrapProCode, |
| | | scrapProVersion: item.scrapProVersion, |
| | | scrapProLotNo: item.scrapProLotNo, |
| | | scrapPcsQty: parseFloat(item.scrapPcsQty), |
| | | remark: item.remark |
| | | })) |
| | | }; |
| | | |
| | | this.http |
| | | .post("api/ErpProScrapSheet/Save", submitData, "æäº¤ä¸") |
| | | .then((res) => { |
| | | if (!res.status) return this.$message.error(res.message); |
| | | this.$message.success("æä½æå"); |
| | | this.proCodeOptions = []; |
| | | this.close(); |
| | | this.$emit("parentCall", ($vue) => { |
| | | $vue.refresh(); |
| | |
| | | // å
³éå¼¹çª |
| | | close() { |
| | | this.showDetialBox = false; |
| | | // æ¸
空产åç¼ç å表 |
| | | this.proCodeOptions = []; |
| | | } |
| | | }, |
| | | created() { |
| | |
| | | ::-webkit-scrollbar-track { |
| | | background-color: #f5f5f5; |
| | | } |
| | | |
| | | /* å¢å éæ©æ¡çé¿åº¦ */ |
| | | .el-select { |
| | | width: 100% !important; |
| | | min-width: 150px !important; |
| | | padding-right:10px; |
| | | } |
| | | .el-input { |
| | | width: 100% !important; |
| | | min-width: 150px !important; |
| | | padding-right:10px; |
| | | } |
| | | |
| | | </style> |