From e756e3cc5ddd0ddb42c5f00d6bb3eee76ba73e6f Mon Sep 17 00:00:00 2001
From: ZN <zhang_12370@163.com>
Date: 星期一, 09 三月 2026 14:14:24 +0800
Subject: [PATCH] feat(project-type): 优化附件管理和界面交互

---
 src/views/projectManagement/projectType/components/ProjectTypeDialog.vue |   69 ++++++++++++++++++----------------
 1 files changed, 36 insertions(+), 33 deletions(-)

diff --git a/src/views/projectManagement/projectType/components/ProjectTypeDialog.vue b/src/views/projectManagement/projectType/components/ProjectTypeDialog.vue
index d73f464..2888516 100644
--- a/src/views/projectManagement/projectType/components/ProjectTypeDialog.vue
+++ b/src/views/projectManagement/projectType/components/ProjectTypeDialog.vue
@@ -32,16 +32,19 @@
         <div class="info-item">
           <span class="item-label">闄勪欢</span>
           <el-upload
+            v-if="isEdit"
             :action="uploadUrl"
             :headers="uploadHeaders"
             :on-success="handleUploadSuccess"
             :on-remove="handleRemove"
-            :file-list="form.attachmentList"
+            v-model:file-list="uploadFileList"
+            :limit="3"
             name="files"
             multiple
           >
             <el-button type="primary">涓婁紶闄勪欢</el-button>
           </el-upload>
+          <span v-else class="text-gray-400 text-sm">璇峰厛淇濆瓨鍚庡啀涓婁紶闄勪欢</span>
         </div>
       </div>
 
@@ -130,6 +133,11 @@
               <el-input v-model="scope.row.workContent" placeholder="璇疯緭鍏�" />
             </template>
           </el-table-column>
+          <el-table-column label="鎿嶄綔" min-width="150">
+            <template #default="scope">
+              <el-button type="danger" size="mini" @click="removeStep(scope.$index)">鍒犻櫎</el-button>
+            </template>
+          </el-table-column>
         </el-table>
 
         <div class="add-row-btn" @click="addStep">
@@ -151,7 +159,7 @@
 import { ref, watch, onMounted, nextTick } from 'vue';
 import { Plus, QuestionFilled } from '@element-plus/icons-vue';
 import { userListNoPageByTenantId } from '@/api/system/user';
-import { ElMessage } from 'element-plus';
+import { ElMessage, ElMessageBox } from 'element-plus';
 import { getToken } from '@/utils/auth';
 import Sortable from 'sortablejs';
 
@@ -166,6 +174,7 @@
 const visible = ref(false);
 const formRef = ref(null);
 const userOptions = ref([]);
+const isEdit = ref(false);
 const uploadHeaders = { Authorization: "Bearer " + getToken() };
 // 涓婁紶鍦板潃
 const uploadUrl = import.meta.env.VITE_APP_BASE_API + "/basic/customer-follow/upload";
@@ -176,9 +185,9 @@
   name: '',
   description: '',
   attachmentIds: [],
-  attachmentList: [],
   savePlanNodeList: []
 });
+const uploadFileList = ref([]);
 
 const rules = {
   name: [{ required: true, message: '璇疯緭鍏ュ悕绉�', trigger: 'blur' }]
@@ -190,19 +199,16 @@
   if (val) {
     if (props.data) {
       // 缂栬緫妯″紡 - 鍥炴樉鏁版嵁
+      isEdit.value = true;
       form.value = {
         id: props.data.id,
         name: props.data.name,
         description: props.data.description,
-        attachmentIds: [],
-        attachmentList: props.data.attachmentList || [],
+        attachmentIds: Array.isArray(props.data.attachmentIds)
+          ? props.data.attachmentIds
+          : (props.data.attachmentList || []).map(f => f.id).filter(Boolean),
         savePlanNodeList: []
       };
-      
-      // 鍥炴樉闄勪欢ID
-      if (form.value.attachmentList && form.value.attachmentList.length > 0) {
-        form.value.attachmentIds = form.value.attachmentList.map(item => item.id);
-      }
       
       // 鍥炴樉姝ラ鑺傜偣
       if (props.data.planNodeList && props.data.planNodeList.length > 0) {
@@ -222,6 +228,7 @@
       }
     } else {
       // 鏂板妯″紡
+      isEdit.value = false;
       resetForm();
     }
     // 鍒濆鍖栨嫋鎷�
@@ -273,9 +280,9 @@
     name: '',
     description: '',
     attachmentIds: [],
-    attachmentList: [],
     savePlanNodeList: [createDefaultNode()]
   };
+  uploadFileList.value = [];
   if (formRef.value) {
     formRef.value.resetFields();
   }
@@ -304,19 +311,14 @@
 /** 澶勭悊鏂囦欢涓婁紶鎴愬姛 */
 function handleUploadSuccess(response, file, fileList) {
   if (response.code === 200) {
-    ElMessage.success('涓婁紶鎴愬姛');
-    // 鍋囪鍚庣杩斿洖鐨勬暟鎹粨鏋勪腑鍖呭惈鏂囦欢ID鍜孶RL绛変俊鎭�
-    // 杩欓噷闇�瑕佹牴鎹疄闄呮帴鍙h繑鍥炵粨鏋勮繘琛岃皟鏁�
-    // 閫氬父 response.data 鍖呭惈鏂囦欢淇℃伅
     const newFile = response.data;
-    if (newFile && newFile.id) {
-       form.value.attachmentIds.push(newFile.id);
-       form.value.attachmentList.push({
-         name: file.name,
-         url: newFile.url,
-         id: newFile.id
-       });
-    }
+    const list = Array.isArray(newFile) ? newFile : [newFile];
+    list.forEach(element => {
+      const id = element?.id;
+      if (id && !form.value.attachmentIds.includes(id)) {
+        form.value.attachmentIds.push(id);
+      }
+    });
   } else {
     ElMessage.error(response.msg || '涓婁紶澶辫触');
   }
@@ -324,15 +326,9 @@
 
 /** 澶勭悊鏂囦欢绉婚櫎 */
 function handleRemove(file) {
-  const index = form.value.attachmentList.findIndex(item => item.name === file.name);
-  if (index !== -1) {
-    const fileId = form.value.attachmentList[index].id;
-    form.value.attachmentList.splice(index, 1);
-    const idIndex = form.value.attachmentIds.indexOf(fileId);
-    if (idIndex !== -1) {
-      form.value.attachmentIds.splice(idIndex, 1);
-    }
-  }
+  const removedId = file?.id || file?.response?.data?.id;
+  if (!removedId) return;
+  form.value.attachmentIds = form.value.attachmentIds.filter(id => id !== removedId);
 }
 
 /** 娣诲姞姝ラ */
@@ -346,7 +342,14 @@
     ElMessage.warning('鑷冲皯淇濈暀涓�涓楠�');
     return;
   }
-  form.value.savePlanNodeList.splice(index, 1);
+  
+  ElMessageBox.confirm('鏄惁纭鍒犻櫎璇ユ楠わ紵', '绯荤粺鎻愮ず', {
+    confirmButtonText: '纭畾',
+    cancelButtonText: '鍙栨秷',
+    type: 'warning'
+  }).then(() => {
+    form.value.savePlanNodeList.splice(index, 1);
+  }).catch(() => {});
 }
 
 /** 绉诲姩姝ラ */

--
Gitblit v1.9.3