董国庆
2026-06-22 924265c47c373b7dbc1217a0eba18d57e2229b6f
优化运营工作台的状态同步--巡游计划车辆加编码搜索
4个文件已修改
128 ■■■■■ 已修改文件
src/views/businessOperations/cruise/parade-plan/add.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/businessOperations/cruise/parade-plan/detail.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/businessOperations/operationWorkbench/map.vue 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/testDemo/operationWorkbench/map.vue 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/businessOperations/cruise/parade-plan/add.vue
@@ -462,6 +462,7 @@
    <VehicleSelectModal
      v-model:visible="showVehicleModal"
      :existing-vehicles="vehicles"
      show-vehicle-code-search
      @confirm="handleConfirmVehicleSelect"
    />
  </div>
src/views/businessOperations/cruise/parade-plan/detail.vue
@@ -901,6 +901,7 @@
    />
    <VehicleSelectModal
      v-model:visible="showVehicleModal"
      show-vehicle-code-search
      @confirm="handleConfirmVehicleSelect"
    />
  </div>
src/views/businessOperations/operationWorkbench/map.vue
@@ -4662,7 +4662,7 @@
  if (!id)
    return
  if (tab === 'point') {
    await loadPointDetailData(id)
    await loadDetailDataWithListRefresh(tab, id)
    if (type === 'edit') {
      handleEnterPointEdit()
    }
@@ -4680,7 +4680,7 @@
  if (tab === 'fence') {
    stationDetailData.value = null
    selectedStationPointId.value = ''
    await loadFenceDetailData(id)
    await loadDetailDataWithListRefresh(tab, id)
    if (type === 'edit') {
      handleEnterFenceEdit()
    }
@@ -4696,7 +4696,7 @@
  stationCreateMode.value = false
  stationEditSnapshot.value = ''
  cleanupStationEditorState()
  const stationDetail = await loadStationDetailData(id)
  const stationDetail = await loadDetailDataWithListRefresh(tab, id)
  if (stationDetail && type === 'edit') {
    applyStationEditByDetail(stationDetail)
  }
@@ -4782,7 +4782,7 @@
      pointCreateReady.value = false
      pointEditSnapshot.value = ''
      cleanupPointEditMapState()
      await loadPointDetailData(id)
      await loadDetailDataWithListRefresh(tab, id)
      if (pendingWorkbenchType.value === 'edit') {
        handleEnterPointEdit()
      }
@@ -5046,13 +5046,13 @@
  if (isSameSelection) {
    if (activeTab.value === 'point' && !isPointFormMode.value) {
      await loadPointDetailData(id)
      await loadDetailDataWithListRefresh(activeTab.value, id)
    }
    else if (activeTab.value === 'fence' && !isFenceFormMode.value) {
      await loadFenceDetailData(id)
      await loadDetailDataWithListRefresh(activeTab.value, id)
    }
    else if (activeTab.value === 'station' && !isStationFormMode.value) {
      await loadStationDetailData(id)
      await loadDetailDataWithListRefresh(activeTab.value, id)
    }
  }
@@ -5334,13 +5334,13 @@
  if (isSameSelection) {
    if (type === 'point' && !isPointFormMode.value) {
      await loadPointDetailData(id)
      await loadDetailDataWithListRefresh(type, id)
    }
    else if (type === 'fence' && !isFenceFormMode.value) {
      await loadFenceDetailData(id)
      await loadDetailDataWithListRefresh(type, id)
    }
    else if (type === 'station' && !isStationFormMode.value) {
      await loadStationDetailData(id)
      await loadDetailDataWithListRefresh(type, id)
    }
  }
@@ -6552,6 +6552,49 @@
  return null
}
// 进入详情时同步刷新当前 tab 左侧列表,降低服务端定时任务改状态后
// 左侧列表与右侧详情状态不一致的概率。
async function refreshTabListForDetail(tab: WorkbenchTab) {
  if (tab === 'point') {
    const tasks: Promise<unknown>[] = [loadPointResources()]
    if (pointKeywordSearchActive.value && keyword.value.trim())
      tasks.push(loadPointKeywordSearch())
    await Promise.all(tasks)
    return
  }
  if (tab === 'fence') {
    await loadFenceData()
    return
  }
  await loadStationData()
}
async function loadDetailDataWithListRefresh(tab: WorkbenchTab, id: string) {
  if (tab === 'point') {
    const [detail] = await Promise.all([
      loadPointDetailData(id),
      refreshTabListForDetail(tab),
    ])
    return detail
  }
  if (tab === 'fence') {
    await Promise.all([
      loadFenceDetailData(id),
      refreshTabListForDetail(tab),
    ])
    return null
  }
  const [detail] = await Promise.all([
    loadStationDetailData(id),
    refreshTabListForDetail(tab),
  ])
  return detail
}
// 进入点位编辑时先重新渲染地图,再创建临时点位,避免和原始 marker 重叠。
// 进入后右侧表单、临时 marker、地址候选与上传图片状态会一并切到编辑态。
async function handleEnterPointEdit() {
src/views/testDemo/operationWorkbench/map.vue
@@ -4531,7 +4531,7 @@
  if (!id)
    return
  if (tab === 'point') {
    await loadPointDetailData(id)
    await loadDetailDataWithListRefresh(tab, id)
    if (type === 'edit') {
      handleEnterPointEdit()
    }
@@ -4549,7 +4549,7 @@
  if (tab === 'fence') {
    stationDetailData.value = null
    selectedStationPointId.value = ''
    await loadFenceDetailData(id)
    await loadDetailDataWithListRefresh(tab, id)
    if (type === 'edit') {
      handleEnterFenceEdit()
    }
@@ -4565,7 +4565,7 @@
  stationCreateMode.value = false
  stationEditSnapshot.value = ''
  cleanupStationEditorState()
  const stationDetail = await loadStationDetailData(id)
  const stationDetail = await loadDetailDataWithListRefresh(tab, id)
  if (stationDetail && type === 'edit') {
    applyStationEditByDetail(stationDetail)
  }
@@ -4651,7 +4651,7 @@
      pointCreateReady.value = false
      pointEditSnapshot.value = ''
      cleanupPointEditMapState()
      await loadPointDetailData(id)
      await loadDetailDataWithListRefresh(tab, id)
      if (pendingWorkbenchType.value === 'edit') {
        handleEnterPointEdit()
      }
@@ -4927,13 +4927,13 @@
  if (isSameSelection) {
    if (activeTab.value === 'point' && !isPointFormMode.value) {
      await loadPointDetailData(id)
      await loadDetailDataWithListRefresh(activeTab.value, id)
    }
    else if (activeTab.value === 'fence' && !isFenceFormMode.value) {
      await loadFenceDetailData(id)
      await loadDetailDataWithListRefresh(activeTab.value, id)
    }
    else if (activeTab.value === 'station' && !isStationFormMode.value) {
      await loadStationDetailData(id)
      await loadDetailDataWithListRefresh(activeTab.value, id)
    }
  }
@@ -5217,13 +5217,13 @@
  if (isSameSelection) {
    if (type === 'point' && !isPointFormMode.value) {
      await loadPointDetailData(id)
      await loadDetailDataWithListRefresh(type, id)
    }
    else if (type === 'fence' && !isFenceFormMode.value) {
      await loadFenceDetailData(id)
      await loadDetailDataWithListRefresh(type, id)
    }
    else if (type === 'station' && !isStationFormMode.value) {
      await loadStationDetailData(id)
      await loadDetailDataWithListRefresh(type, id)
    }
  }
@@ -6399,6 +6399,49 @@
  return null
}
// 进入详情时同步刷新当前 tab 左侧列表,降低服务端定时任务改状态后
// 左侧列表与右侧详情状态不一致的概率。
async function refreshTabListForDetail(tab: WorkbenchTab) {
  if (tab === 'point') {
    const tasks: Promise<unknown>[] = [loadPointResources()]
    if (pointKeywordSearchActive.value && keyword.value.trim())
      tasks.push(loadPointKeywordSearch())
    await Promise.all(tasks)
    return
  }
  if (tab === 'fence') {
    await loadFenceData()
    return
  }
  await loadStationData()
}
async function loadDetailDataWithListRefresh(tab: WorkbenchTab, id: string) {
  if (tab === 'point') {
    const [detail] = await Promise.all([
      loadPointDetailData(id),
      refreshTabListForDetail(tab),
    ])
    return detail
  }
  if (tab === 'fence') {
    await Promise.all([
      loadFenceDetailData(id),
      refreshTabListForDetail(tab),
    ])
    return null
  }
  const [detail] = await Promise.all([
    loadStationDetailData(id),
    refreshTabListForDetail(tab),
  ])
  return detail
}
// 进入点位编辑时先重新渲染地图,再创建临时点位,避免和原始 marker 重叠。
async function handleEnterPointEdit() {
  if (activeTab.value !== 'point')