| | |
| | | style="width: 160px;" |
| | | @keyup.enter="handleQuery" /> |
| | | </el-form-item> |
| | | <el-form-item label="销售合同号:" |
| | | prop="salesContractNo"> |
| | | <el-input v-model="searchForm.salesContractNo" |
| | | placeholder="请输入" |
| | | clearable |
| | | style="width: 160px;" |
| | | @keyup.enter="handleQuery" /> |
| | | </el-form-item> |
| | | <el-form-item label="需求日期范围:" |
| | | prop="dateRange"> |
| | | <el-date-picker v-model="searchForm.dateRange" |
| | |
| | | style="width: 160px;" |
| | | @keyup.enter="handleQuery" /> |
| | | </el-form-item> |
| | | <el-form-item label="产品规格:" |
| | | <el-form-item label="规格型号:" |
| | | prop="model"> |
| | | <el-input v-model="searchForm.model" |
| | | placeholder="请输入" |
| | |
| | | <template #qtyRequired="{ row }"> |
| | | {{ row.qtyRequired || '-' }}<span style="color:rgba(12, 46, 40, 0.76)"> {{ row.unit || '方' }}</span> |
| | | </template> |
| | | <template #salesContractNo="{ row }"> |
| | | <el-button type="primary" |
| | | text |
| | | link |
| | | @click="showDetail(row)">{{ row.salesContractNo }} |
| | | </el-button> |
| | | </template> |
| | | </PIMTable> |
| | | </div> |
| | | <!-- 合并下发弹窗 --> |
| | |
| | | </el-row> |
| | | <el-row :gutter="20"> |
| | | <el-col> |
| | | <el-form-item label="产品规格"> |
| | | <el-form-item label="规格型号"> |
| | | <div class="info-display">{{ mergeForm.model || '-' }}</div> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | @change="onBlur" |
| | | style="width: 100%" /> |
| | | </el-form-item> |
| | | <el-form-item label="创建时间"> |
| | | <el-date-picker v-model="mergeCreateTimeDate" |
| | | type="date" |
| | | value-format="YYYY-MM-DD" |
| | | style="width: 100%" /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="isShowNewModal = false">取消</el-button> |
| | | <el-button type="primary" |
| | | @click="handleMergeSubmit">确定下发</el-button> |
| | | <el-button @click="isShowNewModal = false">取消</el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | |
| | | prop="mpsNo"> |
| | | <el-input v-model="form.mpsNo" |
| | | disabled |
| | | placeholder="新增后自动生成" /> |
| | | placeholder="保存后自动生成" /> |
| | | </el-form-item> |
| | | <el-form-item label="产品名称" |
| | | prop="productId"> |
| | |
| | | @change="handleProductChange" |
| | | style="width: 100%" /> |
| | | </el-form-item> |
| | | <el-form-item label="产品规格" |
| | | <el-form-item label="规格型号" |
| | | prop="productModelId"> |
| | | <el-select v-model="form.productModelId" |
| | | @change="handleChangeSpecification" |
| | |
| | | style="width: 100%" |
| | | placeholder="请选择承诺日期" /> |
| | | </el-form-item> |
| | | <el-form-item label="创建时间" |
| | | prop="createTime"> |
| | | <el-date-picker v-model="formCreateTimeDate" |
| | | type="date" |
| | | value-format="YYYY-MM-DD" |
| | | style="width: 100%" |
| | | placeholder="请选择创建时间" /> |
| | | </el-form-item> |
| | | <el-form-item label="备注" |
| | | prop="remark"> |
| | | <el-input v-model="form.remark" |
| | |
| | | </el-form> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="dialogVisible = false">取消</el-button> |
| | | <el-button type="primary" |
| | | @click="handleSubmit">确定</el-button> |
| | | <el-button @click="dialogVisible = false">取消</el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | |
| | | productionPlanUpdate, |
| | | productionPlanDelete, |
| | | productionPlanCombine, |
| | | exportProductionPlan, |
| | | } from "@/api/productionPlan/productionPlan.js"; |
| | | import { productTreeList, modelListPage } from "@/api/basicData/product.js"; |
| | | import PIMTable from "./components/PIMTable.vue"; |
| | |
| | | const loadProdData = () => { |
| | | console.log("Mock loadProdData called"); |
| | | return Promise.resolve({ code: 200, msg: "同步成功" }); |
| | | }; |
| | | |
| | | const exportProductionPlan = () => { |
| | | console.log("Mock exportProductionPlan called"); |
| | | return Promise.resolve(); |
| | | }; |
| | | |
| | | // const productionPlanCombine = payload => { |
| | |
| | | }, |
| | | }, |
| | | { |
| | | label: "销售合同号", |
| | | prop: "salesContractNo", |
| | | width: "200px", |
| | | dataType: "slot", |
| | | slot: "salesContractNo", |
| | | }, |
| | | |
| | | { |
| | | label: "产品名称", |
| | | prop: "productName", |
| | | width: "200px", |
| | |
| | | }, |
| | | }, |
| | | { |
| | | label: "产品规格", |
| | | label: "规格型号", |
| | | prop: "model", |
| | | width: "150px", |
| | | className: "spec-cell", |
| | |
| | | label: "所需数量", |
| | | prop: "qtyRequired", |
| | | width: "150px", |
| | | align: "right", |
| | | dataType: "slot", |
| | | slot: "qtyRequired", |
| | | className: "volume-cell", |
| | |
| | | className: "date-cell", |
| | | formatData: cell => (cell ? dayjs(cell).format("YYYY-MM-DD") : ""), |
| | | }, |
| | | |
| | | { |
| | | label: "客户名称", |
| | | prop: "customerName", |
| | | width: "150px", |
| | | }, |
| | | { |
| | | label: "项目名称", |
| | | prop: "projectName", |
| | | width: "150px", |
| | | }, |
| | | { |
| | | label: "备注", |
| | | width: "150px", |
| | |
| | | type: "primary", |
| | | link: true, |
| | | showHide: row => { |
| | | return row.status == 0; |
| | | return row.status == 0 && row.source != "销售"; |
| | | }, |
| | | clickFun: row => { |
| | | handleEdit(row); |
| | |
| | | Number(row.qtyRequired || 0) - Number(row.quantityIssued || 0); |
| | | mergeForm.planCompleteTime = row.requiredDate || ""; |
| | | mergeForm.productId = row.productId || ""; |
| | | mergeForm.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss"); |
| | | mergeForm.ids = [row.id]; |
| | | sumAssignedQuantity.value = |
| | | Number(row.qtyRequired || 0) - Number(row.quantityIssued || 0); |
| | |
| | | totalAssignedQuantity: 0, |
| | | planCompleteTime: "", |
| | | productId: "", |
| | | createTime: "", |
| | | }); |
| | | const mergeCreateTimeDate = computed({ |
| | | get: () => (mergeForm.createTime ? String(mergeForm.createTime).split(" ")[0] : ""), |
| | | set: (value) => { |
| | | mergeForm.createTime = value ? `${value} ${dayjs().format("HH:mm:ss")}` : ""; |
| | | }, |
| | | }); |
| | | |
| | | // 导入相关 |
| | |
| | | requiredDate: "", |
| | | 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" }], |
| | | productModelId: [ |
| | | { required: true, message: "请选择产品规格", trigger: "change" }, |
| | | { required: true, message: "请选择规格型号", trigger: "change" }, |
| | | ], |
| | | qtyRequired: [{ required: true, message: "请输入数量", trigger: "blur" }], |
| | | requiredDate: [ |
| | |
| | | const data = reactive({ |
| | | searchForm: { |
| | | mpsNo: "", |
| | | salesContractNo: "", |
| | | productName: "", |
| | | model: "", |
| | | status: "", |
| | |
| | | } |
| | | Object.assign(searchForm.value, { |
| | | mpsNo: "", |
| | | salesContractNo: "", |
| | | productName: "", |
| | | model: "", |
| | | status: "", |
| | |
| | | }); |
| | | }; |
| | | |
| | | // 选中的产品规格ID |
| | | // 选中的规格型号ID |
| | | const selectedProductModelId = ref(""); |
| | | |
| | | // 表格选择数据 |
| | | const handleSelectionChange = selection => { |
| | | selectedRows.value = selection; |
| | | // 如果有选中的行,记录第一个选中行的产品规格ID |
| | | // 如果有选中的行,记录第一个选中行的规格型号ID |
| | | if (selection.length > 0) { |
| | | selectedProductModelId.value = selection[0].productModelId; |
| | | } else { |
| | | // 如果没有选中的行,清空产品规格ID |
| | | // 如果没有选中的行,清空规格型号ID |
| | | selectedProductModelId.value = ""; |
| | | } |
| | | }; |
| | |
| | | if (!selectedProductModelId.value) { |
| | | return true; |
| | | } |
| | | // 如果有选中的行,只有产品规格ID相同的行才可选择 |
| | | // 如果有选中的行,只有规格型号ID相同的行才可选择 |
| | | return row.productModelId === selectedProductModelId.value; |
| | | }; |
| | | // 拉取数据按钮操作 |
| | |
| | | mergeForm.totalAssignedQuantity = totalAssignedQuantity; |
| | | mergeForm.planCompleteTime = firstRow.requiredDate || ""; |
| | | mergeForm.productId = firstRow.productId || ""; |
| | | mergeForm.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss"); |
| | | mergeForm.ids = selectedRows.value.map(row => row.id); |
| | | |
| | | // 打开弹窗 |
| | | isShowNewModal.value = true; |
| | | }; |
| | | const showDetail = row => { |
| | | router.push({ |
| | | path: "/salesManagement/salesLedger", |
| | | query: { |
| | | salesContractNo: row.salesContractNo, |
| | | }, |
| | | }); |
| | | }; |
| | | |
| | | // 处理合并下发提交 |
| | |
| | | requiredDate: "", |
| | | promisedDeliveryDate: "", |
| | | remark: "", |
| | | 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(); |