From 915aa93d7a0cc8e5cc3eacfe05a81025780fccf5 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期五, 23 一月 2026 16:37:13 +0800
Subject: [PATCH] fix: 完成工单上传附件功能
---
src/views/productionManagement/productStructure/Detail/index.vue | 83 ++++++++++++++++++-----------------------
1 files changed, 36 insertions(+), 47 deletions(-)
diff --git a/src/views/productionManagement/productStructure/Detail/index.vue b/src/views/productionManagement/productStructure/Detail/index.vue
index cdb32ae..3a76e48 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"
@@ -61,14 +57,14 @@
label="娑堣�楀伐搴�">
<template #default="{ row, $index }">
<el-form-item v-if="dataValue.isEdit"
- :rules="[{ required: true, message: '璇烽�夋嫨娑堣�楀伐搴�', trigger: 'change' }]"
+ :rules="dataValue.dataList.some(item => (item as any).tempId === row.tempId) ? [] : [{ required: true, message: '璇烽�夋嫨娑堣�楀伐搴�', trigger: 'change' }]"
style="margin: 0">
<el-select v-model="row.processId"
placeholder="璇烽�夋嫨"
filterable
clearable
style="width: 100%"
- :disabled="!dataValue.isEdit">
+ :disabled="!dataValue.isEdit || dataValue.dataList.some(item => (item as any).tempId === row.tempId)">
<el-option v-for="item in dataValue.processOptions"
:key="item.id"
:label="item.name"
@@ -89,7 +85,7 @@
:step="1"
controls-position="right"
style="width: 100%"
- :disabled="!dataValue.isEdit" />
+ :disabled="!dataValue.isEdit || dataValue.dataList.some(item => (item as any).tempId === row.tempId)" />
</el-form-item>
</template>
</el-table-column>
@@ -106,7 +102,7 @@
:step="1"
controls-position="right"
style="width: 100%"
- :disabled="!dataValue.isEdit" />
+ :disabled="!dataValue.isEdit || dataValue.dataList.some(item => (item as any).tempId === row.tempId)" />
</el-form-item>
</template>
</el-table-column>
@@ -119,7 +115,7 @@
<el-input v-model="row.unit"
placeholder="璇疯緭鍏ュ崟浣�"
clearable
- :disabled="!dataValue.isEdit" />
+ :disabled="!dataValue.isEdit || dataValue.dataList.some(item => (item as any).tempId === row.tempId)" />
</el-form-item>
</template>
</el-table-column>
@@ -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)">鍒犻櫎
@@ -224,7 +220,7 @@
},
]);
- const openDialog = tempId => {
+ const openDialog = (tempId: any) => {
console.log(tempId, "tempId");
dataValue.currentRowName = tempId;
dataValue.showProductDialog = true;
@@ -240,8 +236,8 @@
const { data } = await queryList(routeId.value);
dataValue.dataList = (data as any) || [];
// 涓烘墍鏈夐」鍙婂叾瀛愰」璁剧疆name灞炴��
- const setNameRecursively = items => {
- items.forEach(item => {
+ const setNameRecursively = (items: any[]) => {
+ items.forEach((item: any) => {
item.tempId = item.id;
item.processName =
dataValue.processOptions.find(option => option.id === item.processId)
@@ -261,19 +257,27 @@
dataValue.processOptions = data as any;
};
- const handleProduct = row => {
+ const handleProduct = (row: any) => {
if (row?.length > 1) {
ElMessage.error("鍙兘閫夋嫨涓�涓骇鍝�");
}
const productData = row[0];
- // 鏍¢獙锛氫笉鑳藉湪鏈�澶栧眰閫夋嫨璺熷綋鍓嶄骇鍝佷竴鏍风殑浜у搧
- const isTopLevel = dataValue.dataList.some(item => item.tempId === dataValue.currentRowName);
+ // 鏈�澶栧眰缁勪欢涓紝涓庡綋鍓嶄骇鍝佺浉鍚岀殑浜у搧鍙兘鏈変竴涓�
+ 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) {
- ElMessage.warning("涓嶈兘鍦ㄦ渶澶栧眰閫夋嫨璺熷綋鍓嶄骇鍝佷竴鏍风殑浜у搧");
- return;
+ // 鏌ユ壘鏄惁宸茬粡鏈夊叾浠栭《灞傝宸茬粡鏄繖涓骇鍝�
+ 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 =
@@ -293,7 +297,7 @@
});
dataValue.showProductDialog = false;
};
- const childItem = (item, tempId, productData) => {
+ const childItem = (item: any, tempId: any, productData: any) => {
if (item.tempId === tempId) {
item.productName = productData.productName;
item.model = productData.model;
@@ -316,14 +320,14 @@
let isValid = true;
// 鏍¢獙鍑芥暟
- const validateItem = item => {
+ const validateItem = (item: any, isTopLevel = false) => {
// 鏍¢獙褰撳墠椤圭殑蹇呭~瀛楁
if (!item.model) {
ElMessage.error("璇烽�夋嫨瑙勬牸");
isValid = false;
return;
}
- if (!item.processId) {
+ if (!isTopLevel && !item.processId) {
ElMessage.error("璇烽�夋嫨娑堣�楀伐搴�");
isValid = false;
return;
@@ -338,23 +342,23 @@
isValid = false;
return;
}
- if (!item.unit) {
- ElMessage.error("璇疯緭鍏ュ崟浣�");
- isValid = false;
- return;
- }
+ // if (!item.unit) {
+ // ElMessage.error("璇疯緭鍏ュ崟浣�");
+ // isValid = false;
+ // return;
+ // }
// 閫掑綊鏍¢獙瀛愰」
if (item.children && item.children.length > 0) {
item.children.forEach(child => {
- validateItem(child);
+ validateItem(child, false);
});
}
};
// 閬嶅巻鎵�鏈夐《灞傞」
dataValue.dataList.forEach(item => {
- validateItem(item);
+ validateItem(item, true);
});
return isValid;
@@ -386,22 +390,7 @@
}
};
- const addItem = () => {
- dataValue.dataList.push({
- productName: "",
- productId: "",
- model: undefined,
- productModelId: undefined,
- processId: "",
- processName: "",
- unitQuantity: 0,
- demandedQuantity: 0,
- unit: "",
- children: [],
- tempId: new Date().getTime(),
- });
- };
- const removeItem = tempId => {
+ const removeItem = (tempId:string) => {
// 鍏堝皾璇曚粠椤跺眰鍒犻櫎
const topIndex = dataValue.dataList.findIndex(item => item.tempId === tempId);
if (topIndex !== -1) {
@@ -410,7 +399,7 @@
}
// 閫掑綊鍒犻櫎瀛愰」
- const delchildItem = (items, tempId) => {
+ const delchildItem = (items: any[], tempId: any) => {
for (let i = 0; i < items.length; i++) {
const item = items[i];
if (item.tempId === tempId) {
@@ -459,7 +448,7 @@
addchildItem(item, tempId);
});
};
- const addchildItem = (item, tempId) => {
+ const addchildItem = (item: any, tempId: any) => {
if (item.tempId === tempId) {
console.log(item, "item");
if (!item.children) {
--
Gitblit v1.9.3