| | |
| | | style="width: 240px;" |
| | | @change="handleQuery" /> |
| | | </el-form-item> |
| | | <el-form-item label="下发状态:" |
| | | prop="status"> |
| | | <el-select v-model="searchForm.status" |
| | | placeholder="请选择状态" |
| | | clearable |
| | | filterable |
| | | style="width: 100px"> |
| | | <el-option label="待下发" |
| | | value="0" /> |
| | | <el-option label="部分下发" |
| | | value="1" /> |
| | | <el-option label="已下发" |
| | | value="2" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <!-- <el-form-item label="下发状态:"--> |
| | | <!-- prop="status">--> |
| | | <!-- <el-select v-model="searchForm.status"--> |
| | | <!-- placeholder="请选择状态"--> |
| | | <!-- clearable--> |
| | | <!-- filterable--> |
| | | <!-- style="width: 100px">--> |
| | | <!-- <el-option label="待下发"--> |
| | | <!-- value="0" />--> |
| | | <!-- <el-option label="部分下发"--> |
| | | <!-- value="1" />--> |
| | | <!-- <el-option label="已下发"--> |
| | | <!-- value="2" />--> |
| | | <!-- </el-select>--> |
| | | <!-- </el-form-item>--> |
| | | <!-- 展开版搜索条件 --> |
| | | <el-form-item label="产品名称:" |
| | | prop="productName"> |
| | |
| | | <el-form-item label="生产数量"> |
| | | <el-input-number v-model="mergeForm.totalAssignedQuantity" |
| | | :min="0" |
| | | :max="sumAssignedQuantity" |
| | | @change="onBlur" |
| | | style="width: 100%" /> |
| | | </el-form-item> |
| | | <el-form-item label="创建时间"> |
| | | <el-date-picker v-model="mergeForm.createTime" |
| | | <el-date-picker v-model="mergeCreateTimeDate" |
| | | type="date" |
| | | value-format="YYYY-MM-DD" |
| | | style="width: 100%" /> |
| | |
| | | </el-form-item> |
| | | <el-form-item label="创建时间" |
| | | prop="createTime"> |
| | | <el-date-picker v-model="form.createTime" |
| | | <el-date-picker v-model="formCreateTimeDate" |
| | | type="date" |
| | | value-format="YYYY-MM-DD" |
| | | style="width: 100%" |
| | |
| | | prop: "unit", |
| | | width: "100px", |
| | | }, |
| | | { |
| | | label: "所需数量", |
| | | prop: "qtyRequired", |
| | | width: "150px", |
| | | dataType: "slot", |
| | | slot: "qtyRequired", |
| | | className: "volume-cell", |
| | | }, |
| | | { |
| | | label: "下发状态", |
| | | prop: "status", |
| | | width: "120px", |
| | | className: "status-cell", |
| | | dataType: "tag", |
| | | formatType: params => { |
| | | const typeMap = { |
| | | 0: "warning", |
| | | 1: "primary", |
| | | 2: "info", |
| | | }; |
| | | return typeMap[params] || "info"; |
| | | }, |
| | | formatData: cell => { |
| | | const statusMap = { |
| | | 0: "待下发", |
| | | 1: "部分下发", |
| | | 2: "已下发", |
| | | }; |
| | | return statusMap[cell] || ""; |
| | | }, |
| | | }, |
| | | // { |
| | | // label: "所需数量", |
| | | // prop: "qtyRequired", |
| | | // width: "150px", |
| | | // dataType: "slot", |
| | | // slot: "qtyRequired", |
| | | // className: "volume-cell", |
| | | // }, |
| | | // { |
| | | // label: "下发状态", |
| | | // prop: "status", |
| | | // width: "120px", |
| | | // className: "status-cell", |
| | | // dataType: "tag", |
| | | // formatType: params => { |
| | | // const typeMap = { |
| | | // 0: "warning", |
| | | // 1: "primary", |
| | | // 2: "info", |
| | | // }; |
| | | // return typeMap[params] || "info"; |
| | | // }, |
| | | // formatData: cell => { |
| | | // const statusMap = { |
| | | // 0: "待下发", |
| | | // 1: "部分下发", |
| | | // 2: "已下发", |
| | | // }; |
| | | // return statusMap[cell] || ""; |
| | | // }, |
| | | // }, |
| | | { |
| | | label: "已下发数量", |
| | | prop: "quantityIssued", |
| | |
| | | name: "下发", |
| | | type: "text", |
| | | showHide: row => { |
| | | return row.status != 2; |
| | | return true; |
| | | }, |
| | | clickFun: row => { |
| | | mergeForm.productName = row.productName || ""; |
| | | mergeForm.model = row.model || ""; |
| | | mergeForm.totalAssignedQuantity = |
| | | Number(row.qtyRequired || 0) - Number(row.quantityIssued || 0); |
| | | mergeForm.totalAssignedQuantity = Math.max( |
| | | 0, |
| | | Number(row.qtyRequired || 0) - Number(row.quantityIssued || 0) |
| | | ); |
| | | mergeForm.planCompleteTime = row.requiredDate || ""; |
| | | mergeForm.productId = row.productId || ""; |
| | | mergeForm.createTime = new Date().toISOString().split("T")[0]; |
| | | mergeForm.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss"); |
| | | mergeForm.ids = [row.id]; |
| | | sumAssignedQuantity.value = |
| | | Number(row.qtyRequired || 0) - Number(row.quantityIssued || 0); |
| | | sumAssignedQuantity.value = Math.max( |
| | | 0, |
| | | Number(row.qtyRequired || 0) - Number(row.quantityIssued || 0) |
| | | ); |
| | | isShowNewModal.value = true; |
| | | }, |
| | | }, |
| | |
| | | type: "danger", |
| | | link: true, |
| | | showHide: row => { |
| | | return row.status == 0; |
| | | return row.status == 0 && row.source != "销售"; |
| | | }, |
| | | clickFun: row => { |
| | | handleDelete(row); |
| | |
| | | productId: "", |
| | | createTime: "", |
| | | }); |
| | | const mergeCreateTimeDate = computed({ |
| | | get: () => |
| | | mergeForm.createTime ? String(mergeForm.createTime).split(" ")[0] : "", |
| | | set: value => { |
| | | mergeForm.createTime = value |
| | | ? `${value} ${dayjs().format("HH:mm:ss")}` |
| | | : ""; |
| | | }, |
| | | }); |
| | | |
| | | // 导入相关 |
| | | const importDialogRef = ref(null); |
| | |
| | | promisedDeliveryDate: "", |
| | | remark: "", |
| | | createTime: "", |
| | | }); |
| | | const formCreateTimeDate = computed({ |
| | | get: () => (form.createTime ? String(form.createTime).split(" ")[0] : ""), |
| | | set: value => { |
| | | form.createTime = value ? `${value} ${dayjs().format("HH:mm:ss")}` : ""; |
| | | }, |
| | | }); |
| | | const rules = reactive({ |
| | | productId: [{ required: true, message: "请选择产品", trigger: "change" }], |
| | |
| | | |
| | | // 判断行是否可选择 |
| | | const isSelectable = row => { |
| | | // 如果是已下发状态,禁止勾选 |
| | | if (row.status == 2) { |
| | | return false; |
| | | } |
| | | // 计算剩余数量 |
| | | const remainingQty = (row.qtyRequired || 0) - (row.quantityIssued || 0); |
| | | // 如果剩余数量小于等于0,禁止选择 |
| | | if (remainingQty <= 0) { |
| | | return false; |
| | | } |
| | | // 如果没有选中的行,所有行都可选择 |
| | | if (!selectedProductModelId.value) { |
| | | return true; |
| | |
| | | const firstRow = selectedRows.value[0]; |
| | | const productName = firstRow.productName || ""; |
| | | |
| | | // 计算总制造数量 (默认qtyRequired的和) |
| | | // 计算总制造数量 (默认qtyRequired剩余数量的和) |
| | | const totalAssignedQuantity = selectedRows.value.reduce((sum, row) => { |
| | | return sum + Number(row.qtyRequired || 0) - Number(row.quantityIssued || 0); |
| | | return ( |
| | | sum + |
| | | Math.max(0, Number(row.qtyRequired || 0) - Number(row.quantityIssued || 0)) |
| | | ); |
| | | }, 0); |
| | | sumAssignedQuantity.value = totalAssignedQuantity; |
| | | console.log(totalAssignedQuantity); |
| | |
| | | mergeForm.totalAssignedQuantity = totalAssignedQuantity; |
| | | mergeForm.planCompleteTime = firstRow.requiredDate || ""; |
| | | mergeForm.productId = firstRow.productId || ""; |
| | | mergeForm.ids = selectedRows.value.map(row => row.id); |
| | | mergeForm.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss"); |
| | | mergeForm.ids = [...new Set(selectedRows.value.map(row => row.id))]; |
| | | |
| | | // 打开弹窗 |
| | | isShowNewModal.value = true; |
| | |
| | | return; |
| | | } |
| | | console.log(sumAssignedQuantity.value, "sumAssignedQuantity"); |
| | | |
| | | // 验证totalAssignedQuantity不能大于总方数 |
| | | if (mergeForm.totalAssignedQuantity > sumAssignedQuantity.value) { |
| | | ElMessage.error("生产数量不能大于当前计算的总值"); |
| | | return; |
| | | } |
| | | |
| | | console.log(mergeForm, "mergeForm"); |
| | | const payload = { |
| | |
| | | requiredDate: "", |
| | | promisedDeliveryDate: "", |
| | | remark: "", |
| | | createTime: new Date().toISOString().split("T")[0], |
| | | createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), |
| | | }); |
| | | dialogVisible.value = true; |
| | | fetchProductOptions(); |
| | |
| | | requiredDate: row.requiredDate || "", |
| | | promisedDeliveryDate: row.promisedDeliveryDate || "", |
| | | remark: row.remark || "", |
| | | createTime: row.createTime || "", |
| | | }); |
| | | dialogVisible.value = true; |
| | | fetchProductOptions(); |