董国庆
2026-06-01 e1e7f97e7bb7f31e22d5cf80a3aac170e42b261d
Merge branch 'deploy-1.0' into feat/deploy-1.0
2个文件已修改
80 ■■■■■ 已修改文件
src/views/businessOperations/operationWorkbench/components/FencePanel.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/businessOperations/operationWorkbench/list.vue 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/businessOperations/operationWorkbench/components/FencePanel.vue
@@ -113,15 +113,21 @@
  const baseItems = [
    { label: "启用中", value: getStatNumber(source?.startingUp), color: "success" },
    { label: "待生效", value: getStatNumber(source?.pendingLaunch), color: "warning" },
    // { label: "草稿", value: getStatNumber(source?.draft), color: "muted" },
    { label: "已停用", value: getStatNumber(source?.disabled), color: "muted" },
    { label: "已失效", value: getStatNumber(source?.expired), color: "muted" },
  ];
  if (type === "station") return baseItems;
  if (type === "station") {
    return [
      ...baseItems.slice(0, 2),
      { label: "草稿", value: getStatNumber(source?.draft), color: "muted" },
      ...baseItems.slice(2),
    ];
  }
  return [
    ...baseItems,
    { label: "可运营", value: getStatNumber(source?.canOperate), color: "success" },
    { label: "待测试", value: getStatNumber(source?.toBeTested), color: "info" },
    { label: "测试中", value: getStatNumber(source?.testing), color: "info" },
    {
src/views/businessOperations/operationWorkbench/list.vue
@@ -108,6 +108,7 @@
  electronicAreaId: null as string | null,
  statusList: null as number[] | null,
  type: null as number | null,
  typeStr: null as number[] | null,
  lifecycleRange: null as [number, number] | null,
  startTime: '',
  endTime: '',
@@ -193,6 +194,8 @@
const isPointAreaSelectOpen = ref(false)
const isFenceStatusListOpen = ref(false)
const isFenceElectronicAreaIdOpen = ref(false)
const isFenceStrategyTypeOpen = ref(false)
const isFenceStrategyWeekOpen = ref(false)
const isStationStatusOpen = ref(false)
const isStationPointNumOpen = ref(false)
const isFenceCityOpen = ref(false)
@@ -317,6 +320,28 @@
    return labels.length ? labels.join('、') : '-'
  }
  return fenceStrategyDateTypeOptions.find(option => option.value === Number(item?.type))?.label || '-'
}
function normalizeFenceStrategyWeekFilter(value: Array<number | string> | null | undefined) {
  const normalized = (Array.isArray(value) ? value : [])
    .map(item => Number(item))
    .filter(item => Number.isFinite(item))
  if (normalized.includes(0))
    return [0]
  return Array.from(new Set(normalized)).sort((a, b) => a - b)
}
function handleFenceStrategyTypeFilterChange(value: number | null) {
  fenceModel.value.type = value
  if (value !== 3)
    fenceModel.value.typeStr = null
}
function handleFenceStrategyWeekFilterChange(value: Array<number | string> | null) {
  const normalized = normalizeFenceStrategyWeekFilter(value)
  fenceModel.value.typeStr = normalized.length ? normalized : null
}
function formatFenceStrategyTimeList(item: Record<string, any>) {
@@ -647,6 +672,7 @@
    electronicNumberOrName: fenceModel.value.electronicNumberOrName,
    statusList: fenceModel.value.statusList,
    type: fenceModel.value.type,
    typeStr: fenceModel.value.type === 3 ? fenceModel.value.typeStr : null,
    effectTime: fenceModel.value.lifecycleRange ? dayjs(fenceModel.value.lifecycleRange[0]).startOf('day').format('YYYY-MM-DD HH:mm:ss') : null,
    failureTime: fenceModel.value.lifecycleRange ? dayjs(fenceModel.value.lifecycleRange[1]).endOf('day').format('YYYY-MM-DD HH:mm:ss') : null,
    startTime: fenceModel.value.startTime || null,
@@ -1515,11 +1541,24 @@
        path: 'type',
        render: () => (
          <NSelect
            v-model:value={fenceModel.value.type}
            value={fenceModel.value.type}
            options={fenceStrategyTypeOptions}
            placeholder="请选择"
            clearable
            onUpdate:value={handleFenceStrategyTypeFilterChange}
            onUpdate:show={(val: boolean) => isFenceStrategyTypeOpen.value = val}
          >
            {{
              arrow: () => (
                <img
                  src="https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/e120f81c-9f15-4e1a-9938-22252898edf9.png"
                  class={`arrow-icon ${isFenceStrategyTypeOpen.value ? 'arrow-icon--open' : ''}`}
                  style={{ width: '16px', height: '16px' }}
                  alt="arrow"
          />
              ),
            }}
          </NSelect>
        ),
      },
      {
@@ -1529,6 +1568,35 @@
          <NDatePicker v-model:value={fenceModel.value.lifecycleRange} type="daterange" clearable actions={[]} close-on-select={true} format="yyyy/MM/dd" />
        ),
      },
      ...(fenceModel.value.type === 3
        ? [{
            label: '自定义周',
            path: 'typeStr',
            render: () => (
              <NSelect
                value={fenceModel.value.typeStr}
                options={fenceStrategyWeekOptions}
                placeholder="请选择自定义周"
                clearable
                multiple
                max-tag-count={1}
                onUpdate:show={(val: boolean) => isFenceStrategyWeekOpen.value = val}
                onUpdate:value={handleFenceStrategyWeekFilterChange}
              >
                {{
                  arrow: () => (
                    <img
                      src="https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/e120f81c-9f15-4e1a-9938-22252898edf9.png"
                      class={`arrow-icon ${isFenceStrategyWeekOpen.value ? 'arrow-icon--open' : ''}`}
                      style={{ width: '16px', height: '16px' }}
                      alt="arrow"
                    />
                  ),
                }}
              </NSelect>
            ),
          }]
        : []),
      {
        label: '运营时间',
        path: 'operationTime',