From e1e7f97e7bb7f31e22d5cf80a3aac170e42b261d Mon Sep 17 00:00:00 2001
From: 董国庆 <364620639@qq.com>
Date: 星期一, 01 六月 2026 15:49:14 +0800
Subject: [PATCH] Merge branch 'deploy-1.0' into feat/deploy-1.0

---
 src/views/businessOperations/operationWorkbench/components/FencePanel.vue |   10 ++++-
 src/views/businessOperations/operationWorkbench/list.vue                  |   72 +++++++++++++++++++++++++++++++++++-
 2 files changed, 78 insertions(+), 4 deletions(-)

diff --git a/src/views/businessOperations/operationWorkbench/components/FencePanel.vue b/src/views/businessOperations/operationWorkbench/components/FencePanel.vue
index 62016bc..a442d49 100644
--- a/src/views/businessOperations/operationWorkbench/components/FencePanel.vue
+++ b/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" },
     {
diff --git a/src/views/businessOperations/operationWorkbench/list.vue b/src/views/businessOperations/operationWorkbench/list.vue
index 5226d43..e895359 100644
--- a/src/views/businessOperations/operationWorkbench/list.vue
+++ b/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',

--
Gitblit v1.7.1