吉安感知网项目-前端
张含笑
2026-01-27 28a31aa284e190ec812863a442139bd4cab4ad95
feat:加载数据回显
1 files modified
71 ■■■■■ changed files
applications/task-work-order/src/views/orderView/organizational/agenciesManagement/FormDiaLog.vue 71 ●●●●● patch | view | raw | blame | history
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)
  }
}
// 打开弹框
@@ -192,8 +251,17 @@
    
    // 处理返回的节点数据
    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
      }
@@ -222,7 +290,6 @@
    })
  } catch (error) {
    console.error('获取区域数据失败:', error)
    ElMessage.error('获取区域数据失败')
  }
}
defineExpose({ open })