From 7319ec49da9f1490ad35f47e0da62546d1cc7ff4 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Tue, 27 Jan 2026 18:05:34 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 applications/task-work-order/src/views/orderView/organizational/agenciesManagement/FormDiaLog.vue |   98 +++++++++++++++++++++++++++++++++++++------------
 1 files changed, 74 insertions(+), 24 deletions(-)

diff --git a/applications/task-work-order/src/views/orderView/organizational/agenciesManagement/FormDiaLog.vue b/applications/task-work-order/src/views/orderView/organizational/agenciesManagement/FormDiaLog.vue
index 205905a..44f488c 100644
--- a/applications/task-work-order/src/views/orderView/organizational/agenciesManagement/FormDiaLog.vue
+++ b/applications/task-work-order/src/views/orderView/organizational/agenciesManagement/FormDiaLog.vue
@@ -48,6 +48,7 @@
               popper-class="gd-tree-select-popper"
               v-model="formData.areaCode"
               node-key="id"
+              :default-expanded-keys="expandedKeys"
               :props="{
                 value: 'id',
                 label: 'name',
@@ -136,6 +137,8 @@
 const submitting = ref(false) // 提交中
 const dialogReadonly = computed(() => dialogMode.value === 'view')
 const titleEnum = ref({ edit: '编辑', view: '查看', add: '新增' })
+const expandedKeys = ref([]) // 树形选择器展开的节点
+const regionNodeCache = ref(new Map()) // 缓存区域节点及其父节点关系
 
 const rules = {
   deptName: fieldRules(true),
@@ -173,6 +176,62 @@
     data.areaCode = String(data.areaCode)
   }
   formData.value = data
+  
+  // 如果是编辑模式,获取区域节点的路径以展开树形选择器
+  if (dialogMode.value === 'edit' && data.areaCode) {
+    await loadRegionPath(data.areaCode)
+  }
+}
+
+// 加载区域节点路径
+async function loadRegionPath(areaCode) {
+  try {
+    const path = []
+    const queue = [{ code: '360800000000', currentPath: ['360800000000'] }]
+    let found = false
+    
+    // 广度优先搜索,逐层加载节点直到找到目标节点
+    while (queue.length > 0 && !found) {
+      const { code, currentPath } = queue.shift()
+      
+      // 获取当前节点的子节点
+      const res = await regionLazyTreeApi({ parentCode: code })
+      const nodes = res?.data?.data || []
+      
+      for (const node of nodes) {
+        const nodeId = node.id || node.value
+        
+        // 缓存节点及其父节点关系
+        regionNodeCache.value.set(nodeId, {
+          id: nodeId,
+          name: node.name || node.title || node.label,
+          parentId: code,
+          hasChildren: node.hasChildren || false
+        })
+        
+        // 检查是否找到目标节点
+        if (nodeId === areaCode) {
+          path.push(...currentPath, nodeId)
+          found = true
+          break
+        }
+        
+        // 如果有子节点,加入队列继续搜索
+        if (node.hasChildren) {
+          queue.push({
+            code: nodeId,
+            currentPath: [...currentPath, nodeId]
+          })
+        }
+      }
+    }
+    
+    if (path.length > 0) {
+      expandedKeys.value = path
+    }
+  } catch (error) {
+    console.error('加载区域路径失败:', error)
+  }
 }
 
 // 打开弹框
@@ -186,14 +245,25 @@
 // 懒加载获取区域节点数据
 async function loadRegionNode(node, resolve) {
   try {
-    const parentCode = node.data?.id  || '360800000000'
-    const res = await regionLazyTreeApi({ parentCode })
+    // 初始化加载时传递 code 参数,加载子节点时传递 parentCode 参数
+    const params = node.data?.id ? { parentCode: node.data.id } : { code: '360800000000' }
+    const parentCode = node.data?.id || '360800000000'
+    const res = await regionLazyTreeApi(params)
     const nodes = res?.data?.data || []
     
     // 处理返回的节点数据
     const processedNodes = nodes.map(item => {
+      const nodeId = item.id || item.value
+      // 缓存节点及其父节点关系
+      regionNodeCache.value.set(nodeId, {
+        id: nodeId,
+        name: item.name || item.title || item.label,
+        parentId: parentCode,
+        hasChildren: item.hasChildren || false
+      })
+      
       return {
-        id: item.id || item.value,
+        id: nodeId,
         name: item.name || item.title || item.label,
         hasChildren: item.hasChildren || false
       }
@@ -205,30 +275,10 @@
     resolve([])
   }
 }
-// 获取初始区域数据(根节点)
-async function getRegionList() {
-  try {
-    // 懒加载模式下,只需要初始化根节点
-    const res = await regionLazyTreeApi({ parentCode: '360800000000' })
-    const nodes = res?.data?.data || []
-    
-    // 处理根节点数据
-    regionOptions.value = nodes.map(item => {
-      return {
-        id: item.id || item.value,
-        name: item.name || item.title || item.label,
-        hasChildren: item.hasChildren || false
-      }
-    })
-  } catch (error) {
-    console.error('获取区域数据失败:', error)
-    ElMessage.error('获取区域数据失败')
-  }
-}
+
 defineExpose({ open })
 
 onMounted(() => {
-  getRegionList()
 })
 </script>
 

--
Gitblit v1.9.3