From 8c885c21a30c4a39ced32e14048ce65a6a6d57db Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 23 一月 2026 15:06:06 +0800
Subject: [PATCH] fix: 最外层的规则不能被修改
---
src/views/productionManagement/productStructure/Detail/index.vue | 176 +++++++++++++++-------------------------------------------
1 files changed, 46 insertions(+), 130 deletions(-)
diff --git a/src/views/productionManagement/productStructure/Detail/index.vue b/src/views/productionManagement/productStructure/Detail/index.vue
index 7e9e176..e226a75 100644
--- a/src/views/productionManagement/productStructure/Detail/index.vue
+++ b/src/views/productionManagement/productStructure/Detail/index.vue
@@ -2,10 +2,6 @@
<div class="app-container">
<PageHeader content="浜у搧缁撴瀯璇︽儏">
<template #right-button>
- <el-button v-if="dataValue.isEdit && !isOrderPage"
- type="primary"
- @click="addItem">娣诲姞
- </el-button>
<el-button v-if="!dataValue.isEdit && !isOrderPage"
type="primary"
@click="dataValue.isEdit = true">缂栬緫
@@ -47,7 +43,7 @@
<el-select v-model="row.model"
placeholder="璇烽�夋嫨瑙勬牸"
clearable
- :disabled="!dataValue.isEdit"
+ :disabled="!dataValue.isEdit || dataValue.dataList.some(item => (item as any).tempId === row.tempId)"
style="width: 100%"
@visible-change="(v) => { if (v) openDialog(row.tempId) }">
<el-option v-if="row.model"
@@ -57,7 +53,7 @@
</el-form-item>
</template>
</el-table-column>
- <el-table-column prop="processId"
+ <el-table-column prop="processName"
label="娑堣�楀伐搴�">
<template #default="{ row, $index }">
<el-form-item v-if="dataValue.isEdit"
@@ -127,7 +123,7 @@
fixed="right"
width="200">
<template #default="{ row, $index }">
- <el-button v-if="dataValue.isEdit"
+ <el-button v-if="dataValue.isEdit && !dataValue.dataList.some(item => (item as any).tempId === row.tempId)"
type="danger"
text
@click="removeItem(row.tempId)">鍒犻櫎
@@ -178,6 +174,7 @@
const ProductSelectDialog = defineAsyncComponent(
() => import("@/views/basicData/product/ProductSelectDialog.vue")
);
+ const emit = defineEmits(["update:router"]);
const form = ref();
const route = useRoute();
@@ -233,15 +230,18 @@
if (isOrderPage.value) {
// 璁㈠崟鎯呭喌锛氫娇鐢ㄨ鍗曠殑浜у搧缁撴瀯鎺ュ彛
const { data } = await listProcessBom({ orderId: routeOrderId.value });
- dataValue.dataList = data || [];
+ dataValue.dataList = (data as any) || [];
} else {
// 闈炶鍗曟儏鍐碉細浣跨敤鍘熸潵鐨勬帴鍙�
const { data } = await queryList(routeId.value);
- dataValue.dataList = data || [];
+ dataValue.dataList = (data as any) || [];
// 涓烘墍鏈夐」鍙婂叾瀛愰」璁剧疆name灞炴��
const setNameRecursively = items => {
items.forEach(item => {
item.tempId = item.id;
+ item.processName =
+ dataValue.processOptions.find(option => option.id === item.processId)
+ ?.name || "";
if (item.children && item.children.length > 0) {
setNameRecursively(item.children);
}
@@ -249,109 +249,12 @@
};
setNameRecursively(dataValue.dataList);
console.log(dataValue.dataList, "dataValue.dataList");
-
- // dataValue.dataList = [
- // {
- // id: 30,
- // productModelId: 220,
- // processId: 42,
- // unitQuantity: 0.0,
- // demandedQuantity: 0.0,
- // unit: "30",
- // tenantId: 100,
- // bomId: 5,
- // processName: "娴嬭瘯1",
- // productName: "1111",
- // productId: 264,
- // model: "1112233",
- // productStructureList: null,
- // children: [
- // {
- // id: 300,
- // productModelId: 220,
- // processId: 42,
- // unitQuantity: 0.0,
- // demandedQuantity: 0.0,
- // unit: "300",
- // tenantId: 100,
- // bomId: 5,
- // processName: "娴嬭瘯1",
- // productName: "1111",
- // productId: 264,
- // model: "1112233",
- // productStructureList: null,
- // children: [
- // {
- // id: 3000,
- // productModelId: 220,
- // processId: 42,
- // unitQuantity: 0.0,
- // demandedQuantity: 0.0,
- // unit: "3000",
- // tenantId: 100,
- // bomId: 5,
- // processName: "娴嬭瘯1",
- // productName: "1111",
- // productId: 264,
- // model: "1112233",
- // productStructureList: null,
- // },
- // {
- // id: 3200,
- // productModelId: 221,
- // processId: 43,
- // unitQuantity: 0.0,
- // demandedQuantity: 0.0,
- // unit: "3200",
- // tenantId: 100,
- // bomId: 5,
- // processName: "娴嬭瘯2",
- // productName: "xxx",
- // productId: 266,
- // model: "xxx",
- // productStructureList: null,
- // },
- // ],
- // },
- // {
- // id: 320,
- // productModelId: 221,
- // processId: 43,
- // unitQuantity: 0.0,
- // demandedQuantity: 0.0,
- // unit: "320",
- // tenantId: 100,
- // bomId: 5,
- // processName: "娴嬭瘯2",
- // productName: "xxx",
- // productId: 266,
- // model: "xxx",
- // productStructureList: null,
- // },
- // ],
- // },
- // {
- // id: 32,
- // productModelId: 221,
- // processId: 43,
- // unitQuantity: 0.0,
- // demandedQuantity: 0.0,
- // unit: "32",
- // tenantId: 100,
- // bomId: 5,
- // processName: "娴嬭瘯2",
- // productName: "xxx",
- // productId: 266,
- // model: "xxx",
- // productStructureList: null,
- // },
- // ];
}
};
const fetchProcessOptions = async () => {
- const { data } = await list(routeId.value);
- dataValue.processOptions = data;
+ const { data } = await list();
+ dataValue.processOptions = data as any;
};
const handleProduct = row => {
@@ -359,6 +262,24 @@
ElMessage.error("鍙兘閫夋嫨涓�涓骇鍝�");
}
const productData = row[0];
+
+ // 鏈�澶栧眰缁勪欢涓紝涓庡綋鍓嶄骇鍝佺浉鍚岀殑浜у搧鍙兘鏈変竴涓�
+ const isTopLevel = dataValue.dataList.some(item => (item as any).tempId === dataValue.currentRowName);
+ if (isTopLevel) {
+ if (productData.productName === tableData[0].productName &&
+ productData.model === tableData[0].model) {
+ // 鏌ユ壘鏄惁宸茬粡鏈夊叾浠栭《灞傝宸茬粡鏄繖涓骇鍝�
+ const hasOther = dataValue.dataList.some(item =>
+ (item as any).tempId !== dataValue.currentRowName &&
+ (item as any).productName === tableData[0].productName &&
+ (item as any).model === tableData[0].model
+ );
+ if (hasOther) {
+ ElMessage.warning("鏈�澶栧眰鍜屽綋鍓嶄骇鍝佷竴鏍风殑涓�绾у彧鑳芥湁涓�涓�");
+ return;
+ }
+ }
+ }
// dataValue.dataList[dataValue.currentRowIndex].productName =
// row[0].productName;
// dataValue.dataList[dataValue.currentRowIndex].model = row[0].model;
@@ -469,20 +390,7 @@
}
};
- const addItem = () => {
- dataValue.dataList.push({
- productName: "",
- productId: "",
- model: undefined,
- productModelId: undefined,
- processId: "",
- unitQuantity: 0,
- demandedQuantity: 0,
- unit: "",
- tempId: new Date().getTime(),
- });
- };
- const removeItem = tempId => {
+ const removeItem = (tempId:string) => {
// 鍏堝皾璇曚粠椤跺眰鍒犻櫎
const topIndex = dataValue.dataList.findIndex(item => item.tempId === tempId);
if (topIndex !== -1) {
@@ -516,6 +424,9 @@
const addItem2 = tempId => {
dataValue.dataList.map(item => {
if (item.tempId === tempId) {
+ if (!item.children) {
+ item.children = [];
+ }
item.children.push({
parentId: item.id || "",
parentTempId: item.tempId || "",
@@ -524,6 +435,7 @@
model: undefined,
productModelId: undefined,
processId: "",
+ processName: "",
unitQuantity: 0,
demandedQuantity: 0,
unit: "",
@@ -539,7 +451,9 @@
const addchildItem = (item, tempId) => {
if (item.tempId === tempId) {
console.log(item, "item");
-
+ if (!item.children) {
+ item.children = [];
+ }
item.children.push({
parentId: item.id || "",
parentTempId: item.tempId || "",
@@ -580,21 +494,23 @@
const cancelEdit = () => {
dataValue.isEdit = false;
- dataValue.dataList = dataValue.dataList.filter(item => item.id !== undefined);
+ // dataValue.dataList = dataValue.dataList.filter(item => item.id !== undefined);
+ fetchData();
};
- onMounted(() => {
+ onMounted(async () => {
// 浠庤矾鐢卞弬鏁板洖鏄炬暟鎹�
- tableData[0].productName = routeProductName.value;
- tableData[0].model = routeProductModelName.value;
- tableData[0].bomNo = routeBomNo.value;
+ tableData[0].productName = routeProductName.value as string;
+ tableData[0].model = routeProductModelName.value as string;
+ tableData[0].bomNo = routeBomNo.value as string;
// 璁㈠崟鎯呭喌涓嬬鐢ㄧ紪杈�
if (isOrderPage.value) {
dataValue.isEdit = false;
}
- fetchData();
- fetchProcessOptions();
+ // 鍏堝姞杞藉伐搴忛�夐」锛屽啀鍔犺浇鏁版嵁锛岀‘淇漞l-select鑳藉姝g‘鍥炴樉
+ await fetchProcessOptions();
+ await fetchData();
});
</script>
\ No newline at end of file
--
Gitblit v1.9.3