| | |
| | | </div> |
| | | <div class="info-group"> |
| | | <div class="info-item"> |
| | | <span class="info-label">需求数量</span> |
| | | <span class="info-label">预计生产数量</span> |
| | | <span class="info-value">{{ transferCardRowData.planQuantity }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | |
| | | <el-input v-model="reportForm.planQuantity" |
| | | readonly |
| | | style="width: 300px" /> |
| | | </el-form-item> |
| | | <el-form-item label="投入总量(kg)" |
| | | prop="totalInvestment"> |
| | | <el-input v-model.number="reportForm.totalInvestment" |
| | | type="number" |
| | | min="1" |
| | | step="1" |
| | | style="width: 300px" |
| | | placeholder="请输入投入总量" |
| | | @input="handleTotalInvestmentInput" /> |
| | | </el-form-item> |
| | | <el-form-item label="本次生产数量" |
| | | prop="quantity"> |
| | |
| | | prop: "processName", |
| | | }, |
| | | { |
| | | label: "需求数量", |
| | | label: "投入总量(kg)", |
| | | prop: "totalInvestment", |
| | | }, |
| | | { |
| | | label: "预计生产数量", |
| | | prop: "planQuantity", |
| | | width: "140", |
| | | }, |
| | |
| | | const userOptions = ref([]); |
| | | const reportForm = reactive({ |
| | | planQuantity: 0, |
| | | totalInvestment: 0, |
| | | quantity: null, |
| | | scrapQty: null, |
| | | inspectedQuantity: null, |
| | |
| | | productMainId: null, |
| | | }); |
| | | |
| | | // 投入总量验证规则 |
| | | const validateTotalInvestment = (rule, value, callback) => { |
| | | if (value === null || value === undefined || value === "") { |
| | | callback(new Error("请输入投入总量")); |
| | | return; |
| | | } |
| | | const num = Number(value); |
| | | if (isNaN(num) || !Number.isInteger(num) || num < 1) { |
| | | callback(new Error("投入总量必须大于等于1")); |
| | | return; |
| | | } |
| | | if (reportForm.quantity !== null && reportForm.quantity !== undefined && reportForm.quantity !== "") { |
| | | if (num < Number(reportForm.quantity)) { |
| | | callback(new Error("投入总量必须大于本次生产数量")); |
| | | return; |
| | | } |
| | | } |
| | | callback(); |
| | | }; |
| | | |
| | | // 本次生产数量验证规则 |
| | | const validateQuantity = (rule, value, callback) => { |
| | | if (value === null || value === undefined || value === "") { |
| | |
| | | return; |
| | | } |
| | | const num = Number(value); |
| | | // 整数且大于等于1 |
| | | if (isNaN(num) || !Number.isInteger(num) || num < 1) { |
| | | callback(new Error("本次生产数量必须大于等于1")); |
| | | return; |
| | | } |
| | | if (reportForm.totalInvestment !== null && reportForm.totalInvestment !== undefined && reportForm.totalInvestment !== "") { |
| | | if (num > Number(reportForm.totalInvestment)) { |
| | | callback(new Error("本次生产数量必须小于投入总量")); |
| | | return; |
| | | } |
| | | } |
| | | callback(); |
| | | }; |
| | |
| | | |
| | | // 验证规则 |
| | | const reportFormRules = { |
| | | totalInvestment: [{ required: true, validator: validateTotalInvestment, trigger: "blur" }], |
| | | quantity: [{ required: true, validator: validateQuantity, trigger: "blur" }], |
| | | scrapQty: [{ validator: validateScrapQty, trigger: "blur" }], |
| | | }; |
| | | |
| | | // 处理本次生产数量输入,限制必须大于等于1 |
| | | const handleQuantityInput = value => { |
| | | // 处理投入总量输入 |
| | | const handleTotalInvestmentInput = value => { |
| | | if (value === "" || value === null || value === undefined) { |
| | | reportForm.quantity = null; |
| | | reportForm.totalInvestment = null; |
| | | reportForm.scrapQty = null; |
| | | return; |
| | | } |
| | | const num = Number(value); |
| | | if (isNaN(num)) { |
| | | return; |
| | | } |
| | | // 如果小于1,清除 |
| | | if (num < 1) { |
| | | reportForm.quantity = null; |
| | | reportForm.totalInvestment = null; |
| | | reportForm.scrapQty = null; |
| | | return; |
| | | } |
| | | // 如果是小数取整数部分 |
| | | if (!Number.isInteger(num)) { |
| | | const intValue = Math.floor(num); |
| | | // 如果取整后小于1,清除 |
| | | if (intValue < 1) { |
| | | reportForm.totalInvestment = null; |
| | | reportForm.scrapQty = null; |
| | | return; |
| | | } |
| | | reportForm.totalInvestment = intValue; |
| | | } else { |
| | | reportForm.totalInvestment = num; |
| | | } |
| | | // 如果 quantity 有值,自动计算 scrapQty = totalInvestment - quantity |
| | | if (reportForm.quantity !== null && reportForm.quantity !== undefined && reportForm.quantity !== "") { |
| | | const total = Number(reportForm.totalInvestment); |
| | | const qty = Number(reportForm.quantity); |
| | | if (total > qty) { |
| | | reportForm.scrapQty = total - qty; |
| | | } else { |
| | | reportForm.scrapQty = null; |
| | | } |
| | | } |
| | | }; |
| | | |
| | | // 处理本次生产数量输入,限制必须大于等于1 |
| | | const handleQuantityInput = value => { |
| | | if (value === "" || value === null || value === undefined) { |
| | | reportForm.quantity = null; |
| | | reportForm.scrapQty = null; |
| | | return; |
| | | } |
| | | const num = Number(value); |
| | | if (isNaN(num)) { |
| | | return; |
| | | } |
| | | if (num < 1) { |
| | | reportForm.quantity = null; |
| | | reportForm.scrapQty = null; |
| | | return; |
| | | } |
| | | if (!Number.isInteger(num)) { |
| | | const intValue = Math.floor(num); |
| | | if (intValue < 1) { |
| | | reportForm.quantity = null; |
| | | reportForm.scrapQty = null; |
| | | return; |
| | | } |
| | | reportForm.quantity = intValue; |
| | | return; |
| | | } else { |
| | | reportForm.quantity = num; |
| | | } |
| | | reportForm.quantity = num; |
| | | // 如果 totalInvestment 有值,自动计算 scrapQty = totalInvestment - quantity |
| | | if (reportForm.totalInvestment !== null && reportForm.totalInvestment !== undefined && reportForm.totalInvestment !== "") { |
| | | const total = Number(reportForm.totalInvestment); |
| | | const qty = Number(reportForm.quantity); |
| | | if (total > qty) { |
| | | reportForm.scrapQty = total - qty; |
| | | } else { |
| | | reportForm.scrapQty = null; |
| | | } |
| | | } |
| | | }; |
| | | |
| | | // 处理报废数量 |
| | |
| | | return; |
| | | } |
| | | const num = Number(value); |
| | | // 如果是NaN,保持原值 |
| | | if (isNaN(num)) { |
| | | return; |
| | | } |
| | | // 如果是负数,清除输入 |
| | | if (num < 0) { |
| | | reportForm.scrapQty = null; |
| | | return; |
| | | } |
| | | // 如果是小数,取整数部分 |
| | | if (!Number.isInteger(num)) { |
| | | reportForm.scrapQty = Math.floor(num); |
| | | return; |
| | | } |
| | | // 有效的非负整数(包括0) |
| | | reportForm.scrapQty = num; |
| | | }; |
| | | const currentReportRowData = ref(null); |
| | |
| | | const showReportDialog = row => { |
| | | currentReportRowData.value = row; |
| | | reportForm.planQuantity = row.planQuantity; |
| | | reportForm.totalInvestment = row.totalInvestment; |
| | | reportForm.quantity = |
| | | row.quantity !== undefined && row.quantity !== null ? row.quantity : null; |
| | | reportForm.productProcessRouteItemId = row.productProcessRouteItemId; |