Bladeren bron

收藏夹名称修改

duy 1 maand geleden
bovenliggende
commit
33a1e63d96
1 gewijzigde bestanden met toevoegingen van 74 en 52 verwijderingen
  1. 74 52
      src/views/data-fill/wbs.vue

+ 74 - 52
src/views/data-fill/wbs.vue

@@ -55,7 +55,7 @@
                                                     ref="editInput"
                                                     v-model="folder.editableName"
                                                     size="small"
-                                                    @blur="handleEditBlur(folder)"
+                                                   
                                                     @keyup.enter="confirmEdit(index, folder)"
                                                 />
 
@@ -3319,6 +3319,8 @@ const initSortable = () => {
     })
   })
 }
+
+
 // 销毁 Sortable 实例
 const destroySortableInstances = () => {
   sortableInstances.value.forEach(instance => {
@@ -3835,7 +3837,7 @@ const collectListClick = async ()=>{
     getCollectList()
        // 点击时显示收藏夹列表
     collectListVisible.value = true
-     setTimeout(initSortableCollect, 0)
+    
 }
 // 触发元素引用
 const triggerRef = ref(null)
@@ -3869,7 +3871,12 @@ if (!newFolderName.value.trim()) return window?.$message?.error('请输入文件
         window?.$message?.success(msg)
         newFolderName.value = ''
         showAddInput.value = false
-        getCollectList()
+          getCollectList().then(() => {
+      // 数据更新后重新初始化拖拽
+            nextTick(() => {
+                initSortableCollect()
+            })
+            })
     } 
 }
 
@@ -3879,27 +3886,34 @@ const cancelAddFolder = async (id) => {
   showAddInput.value = false
     
 }
-const removeCollect = async (id)=>{
-    const { error, code, msg } = await collectApi.deleteFolder({
-        id,
+// 删除文件夹的接口调用
+const removeCollect = async (id) => {
+  const { error, code, msg } = await collectApi.deleteFolder({ id })
+  if (!error && code === 200) {
+    window?.$message?.success(msg)
+    // 等待数据更新完成
+
+      getCollectList().then(() => {
+      // 数据更新后重新初始化拖拽
+      nextTick(() => {
+        initSortableCollect()
+      })
     })
-    if (!error && code === 200) {
-        window?.$message?.success(msg)
-        getCollectList()
-    }
+  }
 }
 
-// 删除文件夹
+// 删除文件夹的交互逻辑
 const deleteFolder = async (index, item) => {
-//   collectList.value.splice(index, 1)
   HcDelMsg(async (resolve) => {
-            await removeCollect(item.id)
-            resolve() //关闭弹窗的回调
-            collectListVisible.value = true
-
-        })
+    // 等待删除接口和数据更新完成
+    await removeCollect(item.id)
+    resolve() // 关闭弹窗
+    collectListVisible.value = true
+    
+    // 关键:等待Vue完成DOM更新后,再初始化拖拽
+  
+  })
 }
-
 // 控制缩放状态的变量
 const isScaling = ref(false)
 
@@ -4025,18 +4039,21 @@ const folderListContainer = ref(null)
 let sortableInstance = null
 
 // 初始化拖拽排序功能
+// 改进初始化拖拽排序功能,先销毁再创建
 const initSortableCollect = () => {
-  // 确保容器已挂载且还没有初始化过
-  if (folderListContainer.value && !sortableInstance) {
+  // 先销毁可能存在的实例
+  destroySortable()
+  
+  // 确保容器已挂载
+  if (folderListContainer.value) {
     sortableInstance = new Sortable(folderListContainer.value, {
-      animation: 150, // 拖拽动画时长
-      handle: '.folder-item', // 指定可以拖拽的元素
-      ghostClass: 'sortable-ghost', // 拖拽时的占位元素类名
-      onEnd: handleSortEnd, // 拖拽结束时的回调
+      animation: 150,
+      handle: '.folder-item',
+      ghostClass: 'sortable-ghost',
+      onEnd: handleSortEnd,
     })
   }
 }
-
 // 处理拖拽结束事件
 const handleSortEnd = async (evt) => {
   // 保存原始顺序,用于出错时恢复
@@ -4066,12 +4083,22 @@ const handleSortEnd = async (evt) => {
     
   
 }
-
+// 添加销毁Sortable实例的函数
+const destroySortable = () => {
+  if (sortableInstance) {
+    sortableInstance.destroy()
+    sortableInstance = null
+  }
+}
 // 监听collectList变化,数据加载完成后初始化拖拽
 watch(collectList, (newVal) => {
+
+    
   if (newVal.length > 0) {
     // 延迟初始化,确保DOM已更新
-    setTimeout(initSortableCollect, 0)
+      nextTick(() => {
+      initSortableCollect()
+    })
   }
 })
 
@@ -4094,7 +4121,7 @@ const getCollectList = async ()=>{
     } else {
         collectList.value = []
     }
-
+    //  setTimeout(initSortableCollect, 0)
 }
 // 开始编辑文件夹名称
 const startEdit = (folder) => {
@@ -4116,34 +4143,34 @@ const startEdit = (folder) => {
 }
 
 // 确认编辑
+// 修改确认编辑函数,添加重新初始化拖拽
 const confirmEdit = async (index, folder) => {
-
+ 
   
-  // 简单验证
   if (!folder.editableName.trim()) {
     window.$message.warning('文件夹名称不能为空')
     return
   }
-  
  
-    // 调用修改文件夹名称的API
-    const { error, code, msg } = await collectApi.saveOrUpdateFolder({
-         nodeId: primaryKeyId.value,
-            contractId: contractId.value,
-            name: folder.editableName.trim(),
-            type:1,
-            id: folder.id,
+  const { error, code, msg } = await collectApi.saveOrUpdateFolder({
+    nodeId: primaryKeyId.value,
+    contractId: contractId.value,
+    name: folder.editableName.trim(),
+    type: 1,
+    id: folder.id,
+  })
+  
+  if (!error && code === 200) {
+    window.$message.success(msg)
+    folder.isEditing = false
+    getCollectList().then(() => {
+      // 数据更新后重新初始化拖拽
+      nextTick(() => {
+        initSortableCollect()
+      })
     })
-    
-    if (!error && code === 200) {
-      // 更新成功,保存新名称
-      
-        window.$message.success(msg)
-          folder.isEditing = false
-          getCollectList()
-
-    } 
   } 
+}
   const folderId = ref(null)
 const selectFolder = async (folder) => {
     collectListVisible.value = false
@@ -4156,12 +4183,7 @@ const selectFolder = async (folder) => {
 
 // 输入框失焦处理
 const handleEditBlur = (folder) => {
-  // 如果仍然处于编辑状态(未通过确认按钮提交),恢复原始名称
-  if (folder.isEditing) {
-    folder.editableName = folder.originalName
-    // folder.isEditing = false
 
-  }
 }
 
 // 获取文件夹列表的方法需要修改,为每个文件夹添加编辑相关属性