From 759f41097324fa1ade4060fc838d700d8c8fa55f Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期五, 24 四月 2026 11:27:57 +0800
Subject: [PATCH] 提交一版
---
src/views/productionPlan/productionPlan/index.vue | 228 ++++++++++++++++++++++++--------------------------------
1 files changed, 98 insertions(+), 130 deletions(-)
diff --git a/src/views/productionPlan/productionPlan/index.vue b/src/views/productionPlan/productionPlan/index.vue
index 182a351..9768093 100644
--- a/src/views/productionPlan/productionPlan/index.vue
+++ b/src/views/productionPlan/productionPlan/index.vue
@@ -2,16 +2,19 @@
<div class="app-container">
<div class="search_form">
<el-form :model="searchForm"
+ ref="queryRef"
:inline="true">
<!-- 绠�鍖栫増鎼滅储鏉′欢 -->
- <el-form-item label="涓荤敓浜ц鍒掑彿:">
+ <el-form-item label="涓荤敓浜ц鍒掑彿:"
+ prop="mpsNo">
<el-input v-model="searchForm.mpsNo"
placeholder="璇疯緭鍏�"
clearable
style="width: 160px;"
@keyup.enter="handleQuery" />
</el-form-item>
- <el-form-item label="闇�姹傛棩鏈熻寖鍥�:">
+ <el-form-item label="闇�姹傛棩鏈熻寖鍥�:"
+ prop="dateRange">
<el-date-picker v-model="searchForm.dateRange"
type="daterange"
range-separator="鑷�"
@@ -21,7 +24,8 @@
style="width: 240px;"
@change="handleQuery" />
</el-form-item>
- <el-form-item label="涓嬪彂鐘舵��:">
+ <el-form-item label="涓嬪彂鐘舵��:"
+ prop="status">
<el-select v-model="searchForm.status"
placeholder="璇烽�夋嫨鐘舵��"
clearable
@@ -36,36 +40,22 @@
</el-select>
</el-form-item>
<!-- 灞曞紑鐗堟悳绱㈡潯浠� -->
- <template v-if="searchFormExpanded">
- <el-form-item label="浜у搧鍚嶇О:">
- <el-input v-model="searchForm.productName"
- placeholder="璇疯緭鍏�"
- clearable
- style="width: 160px;"
- @keyup.enter="handleQuery" />
- </el-form-item>
- <el-form-item label="浜у搧瑙勬牸:">
- <el-input v-model="searchForm.model"
- placeholder="璇疯緭鍏�"
- clearable
- style="width: 160px;"
- @keyup.enter="handleQuery" />
- </el-form-item>
- <el-form-item label="鐗╂枡缂栫爜:">
- <el-input v-model="searchForm.materialCode"
- placeholder="璇疯緭鍏�"
- clearable
- style="width: 160px;"
- @keyup.enter="handleQuery" />
- </el-form-item>
- <el-form-item label="鐢宠鍗曠紪鍙�:">
- <el-input v-model="searchForm.applyNo"
- placeholder="璇疯緭鍏�"
- clearable
- style="width: 160px;"
- @keyup.enter="handleQuery" />
- </el-form-item>
- </template>
+ <el-form-item label="浜у搧鍚嶇О:"
+ prop="productName">
+ <el-input v-model="searchForm.productName"
+ placeholder="璇疯緭鍏�"
+ clearable
+ style="width: 160px;"
+ @keyup.enter="handleQuery" />
+ </el-form-item>
+ <el-form-item label="浜у搧瑙勬牸:"
+ prop="model">
+ <el-input v-model="searchForm.model"
+ placeholder="璇疯緭鍏�"
+ clearable
+ style="width: 160px;"
+ @keyup.enter="handleQuery" />
+ </el-form-item>
<el-form-item>
<el-button type="primary"
@click="handleQuery">鎼滅储</el-button>
@@ -74,6 +64,8 @@
<el-button type="primary"
@click="handleAdd">鏂板</el-button>
<el-button type="warning"
+ @click="handleMerge">鍚堝苟涓嬪彂</el-button>
+ <el-button type="warning"
@click="handleImport">瀵煎叆</el-button>
<el-button type="warning"
@click="handleExport">瀵煎嚭</el-button>
@@ -81,16 +73,6 @@
</el-form>
<div>
</div>
- </div>
- <div class="search-header">
- <el-button type="text"
- @click="toggleSearchForm">
- <el-icon>
- <ArrowUp v-if="searchFormExpanded" />
- <ArrowDown v-else />
- </el-icon>
- {{ searchFormExpanded ? '鏀惰捣鎼滅储鏉′欢' : '灞曞紑鎼滅储鏉′欢' }}
- </el-button>
</div>
<div class="table_list">
<PIMTable rowKey="id"
@@ -117,23 +99,16 @@
label-width="120px">
<el-row :gutter="20">
<el-col :span="10">
- <el-form-item label="鐗╂枡缂栫爜">
- <div class="info-display">{{ mergeForm.materialCode || '-' }}</div>
- </el-form-item>
- </el-col>
- <el-col :span="10">
<el-form-item label="浜у搧鍚嶇О">
<el-tag class="info-display">{{ mergeForm.productName || '-' }}</el-tag>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
- <el-col :span="10">
+ <el-col>
<el-form-item label="浜у搧瑙勬牸">
<div class="info-display">{{ mergeForm.model || '-' }}</div>
</el-form-item>
- </el-col>
- <el-col :span="10">
</el-col>
</el-row>
<el-form-item label="璁″垝瀹屾垚鏃堕棿">
@@ -142,7 +117,7 @@
value-format="YYYY-MM-DD"
style="width: 100%" />
</el-form-item>
- <el-form-item label="鐢熶骇鏂规暟">
+ <el-form-item label="鐢熶骇鏁伴噺">
<el-input-number v-model="mergeForm.totalAssignedQuantity"
:min="0"
:max="sumAssignedQuantity"
@@ -182,16 +157,12 @@
<el-form-item label="涓荤敓浜ц鍒掑彿"
prop="mpsNo">
<el-input v-model="form.mpsNo"
- placeholder="璇疯緭鍏ヤ富鐢熶骇璁″垝鍙�" />
- </el-form-item>
- <el-form-item label="鐢宠鍗曠紪鍙�"
- prop="applyNo">
- <el-input v-model="form.applyNo"
- placeholder="璇疯緭鍏ョ敵璇峰崟缂栧彿" />
+ disabled
+ placeholder="鏂板鍚庤嚜鍔ㄧ敓鎴�" />
</el-form-item>
<el-form-item label="浜у搧鍚嶇О"
- prop="productMaterialId">
- <el-tree-select v-model="form.productMaterialId"
+ prop="productId">
+ <el-tree-select v-model="form.productId"
placeholder="璇烽�夋嫨"
clearable
:data="productOptions"
@@ -279,6 +250,7 @@
productionPlanAdd,
productionPlanUpdate,
productionPlanDelete,
+ productionPlanCombine,
} from "@/api/productionPlan/productionPlan.js";
import { productTreeList, modelListPage } from "@/api/basicData/product.js";
import PIMTable from "./components/PIMTable.vue";
@@ -297,10 +269,10 @@
return Promise.resolve();
};
- const productionPlanCombine = payload => {
- console.log("Mock productionPlanCombine called with:", payload);
- return Promise.resolve({ code: 200, msg: "鍚堝苟涓嬪彂鎴愬姛" });
- };
+ // const productionPlanCombine = payload => {
+ // console.log("Mock productionPlanCombine called with:", payload);
+ // return Promise.resolve({ code: 200, msg: "鍚堝苟涓嬪彂鎴愬姛" });
+ // };
const tableColumn = ref([
{
@@ -309,14 +281,13 @@
width: "150px",
},
{
- label: "鐢宠鍗曠紪鍙�",
- prop: "applyNo",
+ label: "鏉ユ簮",
+ prop: "source",
width: "150px",
- },
- {
- label: "鐗╂枡缂栫爜",
- prop: "materialCode",
- width: "150px",
+ dataType: "tag",
+ formatType: params => {
+ return params == "鍐呴儴" ? "info" : "primary";
+ },
},
{
label: "浜у搧鍚嶇О",
@@ -401,7 +372,7 @@
label: "鎿嶄綔",
align: "center",
fixed: "right",
- width: 150,
+ width: 250,
operation: [
{
name: "缂栬緫",
@@ -412,6 +383,23 @@
},
clickFun: row => {
handleEdit(row);
+ },
+ },
+ {
+ name: "涓嬪彂",
+ type: "text",
+ showHide: row => {
+ return row.status == 0;
+ },
+ clickFun: row => {
+ mergeForm.productName = row.productName || "";
+ mergeForm.model = row.model || "";
+ mergeForm.totalAssignedQuantity = Number(row.qtyRequired || 0);
+ mergeForm.planCompleteTime = row.requiredDate || "";
+ mergeForm.productId = row.productId || "";
+ mergeForm.ids = [row.id];
+ sumAssignedQuantity.value = Number(row.qtyRequired || 0);
+ isShowNewModal.value = true;
},
},
{
@@ -446,12 +434,11 @@
const isShowNewModal = ref(false);
// 鍚堝苟涓嬪彂琛ㄥ崟鏁版嵁
const mergeForm = reactive({
- materialCode: "",
productName: "",
model: "",
totalAssignedQuantity: 0,
planCompleteTime: "",
- productMaterialId: "",
+ productId: "",
});
// 瀵煎叆鐩稿叧
@@ -468,16 +455,15 @@
const operationType = ref("add"); // add | edit
const productOptions = ref([]);
const specificationOptions = ref([]);
+ const queryRef = ref(null);
const formRef = ref(null);
const form = reactive({
id: undefined,
mpsNo: "",
- applyNo: "",
- productMaterialId: undefined,
+ productId: undefined,
productModelId: undefined,
productName: "",
model: "",
- materialCode: "",
qtyRequired: 0,
unit: "鏂�",
requiredDate: "",
@@ -485,11 +471,7 @@
remark: "",
});
const rules = reactive({
- mpsNo: [{ required: true, message: "璇疯緭鍏ヤ富鐢熶骇璁″垝鍙�", trigger: "blur" }],
- applyNo: [{ required: true, message: "璇疯緭鍏ョ敵璇峰崟缂栧彿", trigger: "blur" }],
- productMaterialId: [
- { required: true, message: "璇烽�夋嫨浜у搧", trigger: "change" },
- ],
+ productId: [{ required: true, message: "璇烽�夋嫨浜у搧", trigger: "change" }],
productModelId: [
{ required: true, message: "璇烽�夋嫨浜у搧瑙勬牸", trigger: "change" },
],
@@ -506,7 +488,6 @@
path: "/productionPlan/trackProgress",
query: {
id: row.id,
- applyNo: row.applyNo,
productName: row.productName,
model: row.model,
},
@@ -539,7 +520,6 @@
const handleProductChange = value => {
form.productModelId = undefined;
form.model = undefined;
- form.materialCode = undefined;
// 鏌ユ壘閫変腑鐨勪骇鍝佸悕绉�
const findProductName = (options, val) => {
for (const option of options) {
@@ -569,14 +549,12 @@
};
const handleChangeSpecification = value => {
- form.materialCode = undefined;
form.model = undefined;
form.unit = "";
const selectedModel = specificationOptions.value.find(
item => item.id === value
);
if (selectedModel) {
- form.materialCode = selectedModel.materialCode;
form.model = selectedModel.model;
form.unit = selectedModel.unit || "鏂�";
}
@@ -587,8 +565,7 @@
mpsNo: "",
productName: "",
model: "",
- materialCode: "",
- applyNo: "",
+ status: "",
dateRange: [],
},
searchFormExpanded: false,
@@ -609,12 +586,14 @@
/** 閲嶇疆鎸夐挳鎿嶄綔 */
const handleReset = () => {
+ if (proxy.resetForm) {
+ proxy.resetForm("queryRef");
+ }
Object.assign(searchForm.value, {
mpsNo: "",
productName: "",
model: "",
- materialCode: "",
- applyNo: "",
+ status: "",
dateRange: [],
});
page.current = 1;
@@ -631,16 +610,18 @@
// 閬嶅巻琛ㄦ牸鏁版嵁锛屾寜浜у搧绫诲埆姹囨��
tableData.value.forEach(row => {
- const category = row.materialCode;
+ const category = row.productName || "鏈煡浜у搧";
if (!summary[category]) {
summary[category] = {
materialCode: category,
totalAssignedQuantity: 0,
};
}
- summary[category].totalAssignedQuantity += (
- Number(row.qtyRequired) - Number(row.assignedQuantity)
- ).toFixed(4);
+ summary[category].totalAssignedQuantity += Number(
+ (
+ Number(row.qtyRequired || 0) - Number(row.assignedQuantity || 0)
+ ).toFixed(4)
+ );
});
// 杞崲涓烘暟缁勬牸寮�
@@ -651,8 +632,10 @@
tableLoading.value = true;
// 鏋勯�犳悳绱㈠弬鏁�
const params = { ...searchForm.value, ...page };
- params.requiredDateStart = params.dateRange ? params.dateRange[0] : "";
- params.requiredDateEnd = params.dateRange ? params.dateRange[1] : "";
+ params.requiredDateStart =
+ params.dateRange && params.dateRange.length > 0 ? params.dateRange[0] : "";
+ params.requiredDateEnd =
+ params.dateRange && params.dateRange.length > 1 ? params.dateRange[1] : "";
delete params.dateRange;
productionPlanListPage(params)
.then(res => {
@@ -667,18 +650,18 @@
});
};
- // 閫変腑鐨勫簭鍒楀彿
- const selectedserialNo = ref("");
+ // 閫変腑鐨勪骇鍝佽鏍糏D
+ const selectedProductModelId = ref("");
// 琛ㄦ牸閫夋嫨鏁版嵁
const handleSelectionChange = selection => {
selectedRows.value = selection;
- // 濡傛灉鏈夐�変腑鐨勮锛岃褰曠涓�涓�変腑琛岀殑搴忓垪鍙�
+ // 濡傛灉鏈夐�変腑鐨勮锛岃褰曠涓�涓�変腑琛岀殑浜у搧瑙勬牸ID
if (selection.length > 0) {
- selectedserialNo.value = selection[0].materialCode;
+ selectedProductModelId.value = selection[0].productModelId;
} else {
- // 濡傛灉娌℃湁閫変腑鐨勮锛屾竻绌哄簭鍒楀彿
- selectedserialNo.value = "";
+ // 濡傛灉娌℃湁閫変腑鐨勮锛屾竻绌轰骇鍝佽鏍糏D
+ selectedProductModelId.value = "";
}
};
@@ -691,11 +674,11 @@
return false;
}
// 濡傛灉娌℃湁閫変腑鐨勮锛屾墍鏈夎閮藉彲閫夋嫨
- if (!selectedserialNo.value) {
+ if (!selectedProductModelId.value) {
return true;
}
- // 濡傛灉鏈夐�変腑鐨勮锛屽彧鏈夊簭鍒楀彿鐩稿悓鐨勮鎵嶅彲閫夋嫨
- return row.materialCode === selectedserialNo.value;
+ // 濡傛灉鏈夐�変腑鐨勮锛屽彧鏈変骇鍝佽鏍糏D鐩稿悓鐨勮鎵嶅彲閫夋嫨
+ return row.productModelId === selectedProductModelId.value;
};
// 鎷夊彇鏁版嵁鎸夐挳鎿嶄綔
const loadProdDataLoading = ref(false);
@@ -711,26 +694,18 @@
const firstRow = selectedRows.value[0];
const productName = firstRow.productName || "";
- // 璁$畻鎬诲埗閫犳暟閲�
+ // 璁$畻鎬诲埗閫犳暟閲� (榛樿qtyRequired鐨勫拰)
const totalAssignedQuantity = selectedRows.value.reduce((sum, row) => {
- return (
- sum +
- (row.qtyRequired == null
- ? 0
- : Number(
- Number(row.qtyRequired) - Number(row.assignedQuantity).toFixed(4)
- ))
- );
+ return sum + Number(row.qtyRequired || 0);
}, 0);
sumAssignedQuantity.value = totalAssignedQuantity;
console.log(totalAssignedQuantity);
// 璁剧疆琛ㄥ崟鏁版嵁
- mergeForm.materialCode = selectedserialNo.value;
mergeForm.productName = productName;
mergeForm.model = firstRow.model || "";
mergeForm.totalAssignedQuantity = totalAssignedQuantity;
- mergeForm.planCompleteTime = firstRow.planCompleteTime || "";
- mergeForm.productMaterialId = firstRow.productMaterialId || "";
+ mergeForm.planCompleteTime = firstRow.requiredDate || "";
+ mergeForm.productId = firstRow.productId || "";
mergeForm.ids = selectedRows.value.map(row => row.id);
// 鎵撳紑寮圭獥
@@ -740,18 +715,14 @@
// 澶勭悊鍚堝苟涓嬪彂鎻愪氦
const handleMergeSubmit = () => {
if (mergeForm.totalAssignedQuantity === 0) {
- ElMessage.warning("璇疯緭鍏ョ敓浜ф柟鏁�");
+ ElMessage.warning("璇疯緭鍏ョ敓浜ф暟閲�");
return;
}
console.log(sumAssignedQuantity.value, "sumAssignedQuantity");
- // 璁$畻褰撳墠閫変腑琛岀殑鎬绘暟閲�
- const totalVolume = selectedRows.value.reduce((sum, row) => {
- return sum + (Number(row.qtyRequired) - Number(row.assignedQuantity) || 0);
- }, 0);
// 楠岃瘉totalAssignedQuantity涓嶈兘澶т簬鎬绘柟鏁�
if (mergeForm.totalAssignedQuantity > sumAssignedQuantity.value) {
- ElMessage.error("鐢熶骇鏂规暟涓嶈兘澶т簬褰撳墠璁$畻鐨勬�诲��");
+ ElMessage.error("鐢熶骇鏁伴噺涓嶈兘澶т簬褰撳墠璁$畻鐨勬�诲��");
return;
}
@@ -861,12 +832,10 @@
Object.assign(form, {
id: undefined,
mpsNo: "",
- applyNo: "",
productName: "",
- productMaterialId: undefined,
+ productId: undefined,
productModelId: undefined,
model: "",
- materialCode: "",
qtyRequired: 0,
unit: "鏂�",
requiredDate: "",
@@ -883,12 +852,10 @@
Object.assign(form, {
id: row.id,
mpsNo: row.mpsNo || "",
- applyNo: row.applyNo || "",
productName: row.productName || "",
- productMaterialId: row.productMaterialId || undefined,
+ productId: row.productId || undefined,
productModelId: row.productModelId || undefined,
model: row.model || "",
- materialCode: row.materialCode || "",
qtyRequired: row.qtyRequired || 0,
unit: row.unit || "鏂�",
requiredDate: row.requiredDate || "",
@@ -897,7 +864,7 @@
});
dialogVisible.value = true;
fetchProductOptions();
- fetchSpecificationOptions(row.productMaterialId);
+ fetchSpecificationOptions(row.productId);
};
// 鍒犻櫎
@@ -1178,6 +1145,7 @@
color: #303133;
font-size: 14px;
min-height: 32px;
+ width: 100%;
display: flex;
align-items: center;
}
--
Gitblit v1.9.3