huangxz
2026-08-11 de79e659b53edcfcd6d8ffe4543dd775bc5f1805
fix(workbench): 修复点位关联围栏下拉框为空的问题

- draftFenceOptions 不再强制要求 primaryAreaId,避免草稿/待启用围栏因尚未配置主运营区而被过滤
- 进入点位编辑/新增时若草稿围栏列表尚未加载,主动兜底加载一次
- 保存时若选中围栏没有主运营区,仍正常传递 fenceId,按坐标回退 electronicAreaId
- 增加 [draftFence] 调试日志便于部署后排查
1个文件已修改
27 ■■■■■ 已修改文件
src/views/testDemo/operationWorkbench/map.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/testDemo/operationWorkbench/map.vue
@@ -186,7 +186,7 @@
// 转换后的下拉框选项,value 为围栏 id 字符串,label 为“围栏名称(主运营区名)”。
const draftFenceOptions = computed(() =>
  draftFenceList.value
    .filter((item) => item && (item.primaryAreaId || item.primaryAreaId === 0))
    .filter((item) => !!item)
    .map((item) => ({
      label: item.primaryAreaName
        ? `${item.electronicName}(${item.primaryAreaName})`
@@ -6188,6 +6188,9 @@
  lng?: number
  lat?: number
}) {
  if (!draftFenceList.value || draftFenceList.value.length === 0) {
    await loadDraftFenceList()
  }
  if (
    activeTab.value === 'point'
    && isPointFormMode.value
@@ -7204,6 +7207,10 @@
async function handleEnterPointEdit() {
  if (activeTab.value !== 'point')
    return
  // 兜底:进入点位编辑时若草稿围栏列表尚未加载,主动触发一次,避免下拉框为空。
  if (!draftFenceList.value || draftFenceList.value.length === 0) {
    await loadDraftFenceList()
  }
  const targetId = String(selectedId.value || selectedItem.value?.id || '')
  if (!targetId)
    return
@@ -8014,9 +8021,17 @@
  const selectedFence = selectedFenceId
    ? draftFenceList.value.find(item => String(item.id) === selectedFenceId)
    : null
  if (selectedFence && selectedFence.primaryAreaId) {
    electronicAreaId = String(selectedFence.primaryAreaId)
  if (selectedFence) {
    fenceId = String(selectedFence.id)
    if (selectedFence.primaryAreaId) {
      electronicAreaId = String(selectedFence.primaryAreaId)
    }
    else if (operationArea) {
      electronicAreaId = operationArea.id?.toString() || ''
    }
    else {
      electronicAreaId = '0'
    }
  }
  else if (operationArea) {
    electronicAreaId = operationArea.id?.toString() || ''
@@ -8470,15 +8485,19 @@
// 加载草稿 / 待启用围栏列表,用于点位关联围栏下拉框。
async function loadDraftFenceList() {
  try {
    console.log('[draftFence] begin loadDraftFenceList, cityCode=', cityValue.value)
    const res = await fetchDraftFenceList(cityValue.value || undefined)
    console.log('[draftFence] fetchDraftFenceList response:', res)
    if (res.code === 200 && Array.isArray(res.data)) {
      draftFenceList.value = res.data
      console.log('[draftFence] draftFenceList updated, count=', res.data.length, 'options=', draftFenceOptions.value.length)
      return
    }
    console.warn('[draftFence] unexpected response, fallback to empty', res)
    draftFenceList.value = []
  }
  catch (error) {
    console.error('加载草稿围栏列表失败:', error)
    console.error('[draftFence] 加载草稿围栏列表失败:', error)
    draftFenceList.value = []
  }
}