From 4fef2b8afba85d8f2f8be70b85ffc105cfc4deda Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期五, 13 三月 2026 11:49:12 +0800
Subject: [PATCH] 生产维护树形结构加载慢改成懒加载
---
src/views/productionPlan/productionPlan/index.vue | 141 +++++++++++++++++++++++++++++++----------------
1 files changed, 93 insertions(+), 48 deletions(-)
diff --git a/src/views/productionPlan/productionPlan/index.vue b/src/views/productionPlan/productionPlan/index.vue
index 04589f3..88aedf3 100644
--- a/src/views/productionPlan/productionPlan/index.vue
+++ b/src/views/productionPlan/productionPlan/index.vue
@@ -244,11 +244,11 @@
@change="handleProductChange"
style="width: 100%" />
</el-form-item>
-
<el-form-item label="浜у搧瑙勬牸"
prop="productMaterialSkuId">
<el-select v-model="form.productMaterialSkuId"
@change="handleChangeSpecification"
+ filterable
placeholder="璇烽�夋嫨">
<el-option v-for="item in specificationOptions"
:key="item.skuId"
@@ -302,8 +302,14 @@
</el-form-item>
<el-form-item label="寮哄害"
prop="strength">
- <el-input v-model="form.strength"
- placeholder="璇疯緭鍏ュ己搴�" />
+ <el-select v-model="form.strength"
+ placeholder="璇烽�夋嫨寮哄害"
+ style="width: 100%">
+ <el-option label="A3.5"
+ value="A3.5" />
+ <el-option label="A5.0"
+ value="A5.0" />
+ </el-select>
</el-form-item>
<el-form-item label="澶囨敞 1"
prop="remarkOne">
@@ -343,7 +349,11 @@
productionPlanCombine,
} from "@/api/productionPlan/productionPlan.js";
import PIMTable from "./components/PIMTable.vue";
- import {modelListPage, productTreeList} from "@/api/basicData/newProduct.js";
+ import {
+ modelListPage,
+ productTreeList,
+ productTreeListQuery,
+ } from "@/api/basicData/newProduct.js";
const { proxy } = getCurrentInstance();
@@ -388,40 +398,46 @@
label: "鍧楁暟",
prop: "quantity",
className: "quantity-cell",
+ formatData: cell => (cell ? `${cell}鍧梎 : ""),
},
{
label: "鏂规暟",
prop: "volume",
width: "150px",
className: "volume-cell",
+ formatData: cell => (cell ? `${cell}鏂筦 : ""),
},
{
label: "宸蹭笅鍙戞柟鏁�",
prop: "assignedQuantity",
width: "150px",
className: "spec-cell",
+ formatData: cell => (cell ? `${cell}鏂筦 : ""),
},
{
label: "闀�",
prop: "length",
className: "dimension-cell",
+ formatData: cell => (cell ? `${cell}mm` : ""),
},
{
label: "瀹�",
prop: "width",
className: "dimension-cell",
+ formatData: cell => (cell ? `${cell}mm` : ""),
},
{
label: "楂�",
prop: "height",
className: "dimension-cell",
+ formatData: cell => (cell ? `${cell}mm` : ""),
},
- {
- label: "娴佹按鍙�",
- prop: "serialNo",
- width: "150px",
- className: "code-cell",
- },
+ // {
+ // label: "娴佹按鍙�",
+ // prop: "serialNo",
+ // width: "150px",
+ // className: "code-cell",
+ // },
{
label: "璁″垝寮�濮嬫棩鏈�",
prop: "startDate",
@@ -440,12 +456,12 @@
label: "寮哄害",
prop: "strength",
},
- // {
- // label: "鏁版嵁鏉ユ簮",
- // width: "100px",
- // prop: "dataSourceType",
- // formatData: cell => (cell == 1 ? "鍚屾" : "鎵嬪姩"),
- // },
+ {
+ label: "鏁版嵁鏉ユ簮",
+ width: "100px",
+ prop: "dataSourceType",
+ formatData: cell => (cell == 1 ? "鍚屾" : "鎵嬪姩"),
+ },
{
label: "澶囨敞 1",
prop: "remarkOne",
@@ -466,6 +482,9 @@
name: "缂栬緫",
type: "primary",
link: true,
+ showHide: row => {
+ return row.status == 0;
+ },
clickFun: row => {
handleEdit(row);
},
@@ -474,6 +493,9 @@
name: "鍒犻櫎",
type: "danger",
link: true,
+ showHide: row => {
+ return row.status == 0;
+ },
clickFun: row => {
handleDelete(row);
},
@@ -481,16 +503,17 @@
{
name: "涓嬪彂",
type: "text",
- disabled: row => {
+ showHide: row => {
// 璁$畻鍓╀綑鏂规暟
const remainingVolume =
(row.volume || 0) - (row.assignedQuantity || 0);
// 濡傛灉鍓╀綑鏂规暟灏忎簬绛変簬0锛岀姝㈤�夋嫨
- return remainingVolume <= 0;
+ return remainingVolume > 0;
},
clickFun: row => {
// 鍗曠嫭涓嬪彂鎿嶄綔
// 璁剧疆琛ㄥ崟鏁版嵁
+ mergeForm.ids = [row.id];
mergeForm.materialCode = row.materialCode;
mergeForm.productName = row.productName || "";
mergeForm.specification = row.specification || "";
@@ -498,7 +521,7 @@
mergeForm.width = row.width || 0;
mergeForm.height = row.height || 0;
mergeForm.totalAssignedQuantity =
- Number(row.volume) - Number(row.assignedQuantity) || 0;
+ (Number(row.volume) - Number(row.assignedQuantity)).toFixed(4) || 0;
mergeForm.planCompleteTime = row.planCompleteTime || "";
sumAssignedQuantity.value = mergeForm.totalAssignedQuantity;
// 鎵撳紑寮圭獥
@@ -566,8 +589,8 @@
// 鏂板/缂栬緫鐩稿叧
const dialogVisible = ref(false);
const operationType = ref("add"); // add | edit
- const productOptions = ref([])
- const specificationOptions = ref([])
+ const productOptions = ref([]);
+ const specificationOptions = ref([]);
const formRef = ref(null);
const form = reactive({
id: undefined,
@@ -626,14 +649,14 @@
};
const fetchProductOptions = () => {
- return productTreeList().then(res => {
+ return productTreeList({ type: 2 }).then(res => {
productOptions.value = convertIdToValue(res.data);
return res;
});
- }
+ };
- const convertIdToValue = (data) => {
- return data.map((item) => {
+ const convertIdToValue = data => {
+ return data.map(item => {
const newItem = {
value: `config_${item.configId}`, // 浣跨敤config_鍓嶇紑纭繚鍞竴鎬�
label: item.configName,
@@ -648,29 +671,43 @@
return newItem;
});
- }
+ };
- const handleProductChange = (value) => {
- form.productMaterialSkuId = undefined
- fetchSpecificationOptions(value)
- }
+ const handleProductChange = value => {
+ form.productMaterialSkuId = undefined;
+ fetchSpecificationOptions(value);
+ };
- const fetchSpecificationOptions = (materialId) => {
- specificationOptions.value = []
+ const fetchSpecificationOptions = materialId => {
+ specificationOptions.value = [];
if (materialId) {
- modelListPage({ materialId: materialId}).then(res => {
- specificationOptions.value = res.data;
- });
+ modelListPage({ materialId: materialId, size: -1, current: -1 }).then(
+ res => {
+ specificationOptions.value = res.data.records;
+ }
+ );
}
- }
+ };
- const handleChangeSpecification = (value) => {
- form.materialCode = undefined
- const selectedModel = specificationOptions.value.find((item) => item.id === value)
+ const handleChangeSpecification = value => {
+ form.materialCode = undefined;
+ const selectedModel = specificationOptions.value.find(
+ item => item.skuId === value
+ );
if (selectedModel) {
- form.materialCode = selectedModel.materialCode
+ form.materialCode = selectedModel.materialCode;
+ // 瑙f瀽瑙勬牸瀛楃涓茶幏鍙栭暱瀹介珮
+ const specification = selectedModel.specification;
+ if (specification) {
+ const dimensions = specification.match(/^(\d+)\*(\d+)\*(\d+)$/);
+ if (dimensions && dimensions.length === 4) {
+ form.length = parseInt(dimensions[1]);
+ form.width = parseInt(dimensions[2]);
+ form.height = parseInt(dimensions[3]);
+ }
+ }
}
- }
+ };
// 鐢熸垚妯℃嫙杩涘害璇︽儏鏁版嵁
const generateProgressDetails = status => {
@@ -793,8 +830,9 @@
totalAssignedQuantity: 0,
};
}
- summary[category].totalAssignedQuantity +=
- Number(row.volume) - Number(row.assignedQuantity);
+ summary[category].totalAssignedQuantity += (
+ Number(row.volume) - Number(row.assignedQuantity)
+ ).toFixed(4);
});
// 杞崲涓烘暟缁勬牸寮�
@@ -855,7 +893,9 @@
// 鎷夊彇鏁版嵁鎸夐挳鎿嶄綔
const getLoadProdData = () => {
loadProdData()
- .then(res => {})
+ .then(res => {
+ getList();
+ })
.catch(() => {});
};
const sumAssignedQuantity = ref(0);
@@ -872,7 +912,7 @@
sum +
(row.volume == null
? 0
- : Number(row.volume) - Number(row.assignedQuantity))
+ : (Number(row.volume) - Number(row.assignedQuantity)).toFixed(4))
);
}, 0);
sumAssignedQuantity.value = totalAssignedQuantity;
@@ -887,6 +927,7 @@
mergeForm.height = firstRow.height || 0;
mergeForm.totalAssignedQuantity = totalAssignedQuantity;
mergeForm.planCompleteTime = firstRow.planCompleteTime || "";
+ mergeForm.ids = selectedRows.value.map(row => row.id);
// 鎵撳紑寮圭獥
isShowNewModal.value = true;
@@ -894,6 +935,10 @@
// 澶勭悊鍚堝苟涓嬪彂鎻愪氦
const handleMergeSubmit = () => {
+ if (mergeForm.totalAssignedQuantity === 0) {
+ ElMessage.warning("璇疯緭鍏ョ敓浜ф柟鏁�");
+ return;
+ }
console.log(sumAssignedQuantity.value, "sumAssignedQuantity");
// 璁$畻褰撳墠閫変腑琛岀殑鎬绘柟鏁�
const totalVolume = selectedRows.value.reduce((sum, row) => {
@@ -906,17 +951,17 @@
return;
}
- mergeForm.ids = selectedRows.value.map(row => row.id);
console.log(mergeForm, "mergeForm");
productionPlanCombine(mergeForm)
.then(res => {
if (res.code === 200) {
- ElMessage.success("鍚堝苟涓嬪彂鎴愬姛");
+ ElMessage.success("涓嬪彂鎴愬姛");
+ getList();
isShowNewModal.value = false;
// 鍙互閫夋嫨鍒锋柊鍒楄〃鎴栧叾浠栨搷浣�
getList();
} else {
- ElMessage.error(res.message || "鍚堝苟涓嬪彂澶辫触");
+ ElMessage.error(res.message || "涓嬪彂澶辫触");
}
})
.catch(err => {
--
Gitblit v1.9.3