Browse Source

refactor(runData): 统一后端接口地址并新增运行数据大屏API

1.  新增runScreen.js封装大屏所有后端接口
2.  替换四个业务模块的API接口路径为统一的/item前缀接口
3.  调整导入导出接口的请求方式和参数格式
4.  重构runScreen页面,接入真实后端数据替代 mock 数据
huoyi 1 month ago
parent
commit
a83409c64c

+ 19 - 19
src/api/runData/collectWaitingAreaData.js

@@ -3,7 +3,7 @@ import request from '@/utils/request'
3
 // 查询候检区数据列表
3
 // 查询候检区数据列表
4
 export function listCollectWaitingAreaData(query) {
4
 export function listCollectWaitingAreaData(query) {
5
   return request({
5
   return request({
6
-    url: '/runData/collectWaitingAreaData/list',
6
+    url: '/item/hkPendingConfiscate/list',
7
     method: 'get',
7
     method: 'get',
8
     params: query
8
     params: query
9
   })
9
   })
@@ -12,7 +12,7 @@ export function listCollectWaitingAreaData(query) {
12
 // 查询候检区数据详细
12
 // 查询候检区数据详细
13
 export function getCollectWaitingAreaData(id) {
13
 export function getCollectWaitingAreaData(id) {
14
   return request({
14
   return request({
15
-    url: '/runData/collectWaitingAreaData/' + id,
15
+    url: '/item/hkPendingConfiscate/' + id,
16
     method: 'get'
16
     method: 'get'
17
   })
17
   })
18
 }
18
 }
@@ -20,7 +20,7 @@ export function getCollectWaitingAreaData(id) {
20
 // 新增候检区数据
20
 // 新增候检区数据
21
 export function addCollectWaitingAreaData(data) {
21
 export function addCollectWaitingAreaData(data) {
22
   return request({
22
   return request({
23
-    url: '/runData/collectWaitingAreaData',
23
+    url: '/item/hkPendingConfiscate',
24
     method: 'post',
24
     method: 'post',
25
     data: data
25
     data: data
26
   })
26
   })
@@ -29,7 +29,7 @@ export function addCollectWaitingAreaData(data) {
29
 // 修改候检区数据
29
 // 修改候检区数据
30
 export function updateCollectWaitingAreaData(data) {
30
 export function updateCollectWaitingAreaData(data) {
31
   return request({
31
   return request({
32
-    url: '/runData/collectWaitingAreaData',
32
+    url: '/item/hkPendingConfiscate',
33
     method: 'put',
33
     method: 'put',
34
     data: data
34
     data: data
35
   })
35
   })
@@ -38,35 +38,35 @@ export function updateCollectWaitingAreaData(data) {
38
 // 删除候检区数据
38
 // 删除候检区数据
39
 export function delCollectWaitingAreaData(id) {
39
 export function delCollectWaitingAreaData(id) {
40
   return request({
40
   return request({
41
-    url: '/runData/collectWaitingAreaData/' + id,
41
+    url: '/item/hkPendingConfiscate/' + id,
42
     method: 'delete'
42
     method: 'delete'
43
   })
43
   })
44
 }
44
 }
45
 
45
 
46
 // 导出候检区数据
46
 // 导出候检区数据
47
-export function exportCollectWaitingAreaData(query) {
47
+export function exportCollectWaitingAreaData(data) {
48
   return request({
48
   return request({
49
-    url: '/runData/collectWaitingAreaData/export',
50
-    method: 'get',
51
-    params: query,
49
+    url: '/item/hkPendingConfiscate/export',
50
+    method: 'post',
51
+    data: data,
52
     responseType: 'blob'
52
     responseType: 'blob'
53
   })
53
   })
54
 }
54
 }
55
 
55
 
56
-// 导入候检区数据
57
-export function importCollectWaitingAreaData(data) {
56
+// 下载导入模板
57
+export function importTemplate() {
58
   return request({
58
   return request({
59
-    url: '/runData/collectWaitingAreaData/importData',
59
+    url: '/item/hkPendingConfiscate/importTemplate',
60
     method: 'post',
60
     method: 'post',
61
-    data: data
61
+    responseType: 'blob'
62
   })
62
   })
63
 }
63
 }
64
 
64
 
65
-// 下载导入模板
66
-export function importTemplate() {
65
+// 导入候检区数据
66
+export function importCollectWaitingAreaData(data) {
67
   return request({
67
   return request({
68
-    url: '/runData/collectWaitingAreaData/importTemplate',
69
-    method: 'get',
70
-    responseType: 'blob'
68
+    url: '/item/hkPendingConfiscate/importData',
69
+    method: 'post',
70
+    data: data
71
   })
71
   })
72
-}
72
+}

+ 19 - 19
src/api/runData/dailyRunData.js

@@ -3,7 +3,7 @@ import request from '@/utils/request'
3
 // 查询日常运行数据列表
3
 // 查询日常运行数据列表
4
 export function listDailyRunData(query) {
4
 export function listDailyRunData(query) {
5
   return request({
5
   return request({
6
-    url: '/runData/dailyRunData/list',
6
+    url: '/item/hkOperationData/list',
7
     method: 'get',
7
     method: 'get',
8
     params: query
8
     params: query
9
   })
9
   })
@@ -12,7 +12,7 @@ export function listDailyRunData(query) {
12
 // 查询日常运行数据详细
12
 // 查询日常运行数据详细
13
 export function getDailyRunData(id) {
13
 export function getDailyRunData(id) {
14
   return request({
14
   return request({
15
-    url: '/runData/dailyRunData/' + id,
15
+    url: '/item/hkOperationData/' + id,
16
     method: 'get'
16
     method: 'get'
17
   })
17
   })
18
 }
18
 }
@@ -20,7 +20,7 @@ export function getDailyRunData(id) {
20
 // 新增日常运行数据
20
 // 新增日常运行数据
21
 export function addDailyRunData(data) {
21
 export function addDailyRunData(data) {
22
   return request({
22
   return request({
23
-    url: '/runData/dailyRunData',
23
+    url: '/item/hkOperationData',
24
     method: 'post',
24
     method: 'post',
25
     data: data
25
     data: data
26
   })
26
   })
@@ -29,7 +29,7 @@ export function addDailyRunData(data) {
29
 // 修改日常运行数据
29
 // 修改日常运行数据
30
 export function updateDailyRunData(data) {
30
 export function updateDailyRunData(data) {
31
   return request({
31
   return request({
32
-    url: '/runData/dailyRunData',
32
+    url: '/item/hkOperationData',
33
     method: 'put',
33
     method: 'put',
34
     data: data
34
     data: data
35
   })
35
   })
@@ -38,35 +38,35 @@ export function updateDailyRunData(data) {
38
 // 删除日常运行数据
38
 // 删除日常运行数据
39
 export function delDailyRunData(id) {
39
 export function delDailyRunData(id) {
40
   return request({
40
   return request({
41
-    url: '/runData/dailyRunData/' + id,
41
+    url: '/item/hkOperationData/' + id,
42
     method: 'delete'
42
     method: 'delete'
43
   })
43
   })
44
 }
44
 }
45
 
45
 
46
 // 导出日常运行数据
46
 // 导出日常运行数据
47
-export function exportDailyRunData(query) {
47
+export function exportDailyRunData(data) {
48
   return request({
48
   return request({
49
-    url: '/runData/dailyRunData/export',
50
-    method: 'get',
51
-    params: query,
49
+    url: '/item/hkOperationData/export',
50
+    method: 'post',
51
+    data: data,
52
     responseType: 'blob'
52
     responseType: 'blob'
53
   })
53
   })
54
 }
54
 }
55
 
55
 
56
-// 导入日常运行数据
57
-export function importDailyRunData(data) {
56
+// 下载导入模板
57
+export function importTemplate() {
58
   return request({
58
   return request({
59
-    url: '/runData/dailyRunData/importData',
59
+    url: '/item/hkOperationData/importTemplate',
60
     method: 'post',
60
     method: 'post',
61
-    data: data
61
+    responseType: 'blob'
62
   })
62
   })
63
 }
63
 }
64
 
64
 
65
-// 下载导入模板
66
-export function importTemplate() {
65
+// 导入日常运行数据
66
+export function importDailyRunData(data) {
67
   return request({
67
   return request({
68
-    url: '/runData/dailyRunData/importTemplate',
69
-    method: 'get',
70
-    responseType: 'blob'
68
+    url: '/item/hkOperationData/importData',
69
+    method: 'post',
70
+    data: data
71
   })
71
   })
72
-}
72
+}

+ 19 - 19
src/api/runData/discouragePowerBanksData.js

@@ -3,7 +3,7 @@ import request from '@/utils/request'
3
 // 查询劝阻充电宝数据列表
3
 // 查询劝阻充电宝数据列表
4
 export function listDiscouragePowerBanksData(query) {
4
 export function listDiscouragePowerBanksData(query) {
5
   return request({
5
   return request({
6
-    url: '/runData/discouragePowerBanksData/list',
6
+    url: '/item/hkPersuadePowerBank/list',
7
     method: 'get',
7
     method: 'get',
8
     params: query
8
     params: query
9
   })
9
   })
@@ -12,7 +12,7 @@ export function listDiscouragePowerBanksData(query) {
12
 // 查询劝阻充电宝数据详细
12
 // 查询劝阻充电宝数据详细
13
 export function getDiscouragePowerBanksData(id) {
13
 export function getDiscouragePowerBanksData(id) {
14
   return request({
14
   return request({
15
-    url: '/runData/discouragePowerBanksData/' + id,
15
+    url: '/item/hkPersuadePowerBank/' + id,
16
     method: 'get'
16
     method: 'get'
17
   })
17
   })
18
 }
18
 }
@@ -20,7 +20,7 @@ export function getDiscouragePowerBanksData(id) {
20
 // 新增劝阻充电宝数据
20
 // 新增劝阻充电宝数据
21
 export function addDiscouragePowerBanksData(data) {
21
 export function addDiscouragePowerBanksData(data) {
22
   return request({
22
   return request({
23
-    url: '/runData/discouragePowerBanksData',
23
+    url: '/item/hkPersuadePowerBank',
24
     method: 'post',
24
     method: 'post',
25
     data: data
25
     data: data
26
   })
26
   })
@@ -29,7 +29,7 @@ export function addDiscouragePowerBanksData(data) {
29
 // 修改劝阻充电宝数据
29
 // 修改劝阻充电宝数据
30
 export function updateDiscouragePowerBanksData(data) {
30
 export function updateDiscouragePowerBanksData(data) {
31
   return request({
31
   return request({
32
-    url: '/runData/discouragePowerBanksData',
32
+    url: '/item/hkPersuadePowerBank',
33
     method: 'put',
33
     method: 'put',
34
     data: data
34
     data: data
35
   })
35
   })
@@ -38,35 +38,35 @@ export function updateDiscouragePowerBanksData(data) {
38
 // 删除劝阻充电宝数据
38
 // 删除劝阻充电宝数据
39
 export function delDiscouragePowerBanksData(id) {
39
 export function delDiscouragePowerBanksData(id) {
40
   return request({
40
   return request({
41
-    url: '/runData/discouragePowerBanksData/' + id,
41
+    url: '/item/hkPersuadePowerBank/' + id,
42
     method: 'delete'
42
     method: 'delete'
43
   })
43
   })
44
 }
44
 }
45
 
45
 
46
 // 导出劝阻充电宝数据
46
 // 导出劝阻充电宝数据
47
-export function exportDiscouragePowerBanksData(query) {
47
+export function exportDiscouragePowerBanksData(data) {
48
   return request({
48
   return request({
49
-    url: '/runData/discouragePowerBanksData/export',
50
-    method: 'get',
51
-    params: query,
49
+    url: '/item/hkPersuadePowerBank/export',
50
+    method: 'post',
51
+    data: data,
52
     responseType: 'blob'
52
     responseType: 'blob'
53
   })
53
   })
54
 }
54
 }
55
 
55
 
56
-// 导入劝阻充电宝数据
57
-export function importDiscouragePowerBanksData(data) {
56
+// 下载导入模板
57
+export function importTemplate() {
58
   return request({
58
   return request({
59
-    url: '/runData/discouragePowerBanksData/importData',
59
+    url: '/item/hkPersuadePowerBank/importTemplate',
60
     method: 'post',
60
     method: 'post',
61
-    data: data
61
+    responseType: 'blob'
62
   })
62
   })
63
 }
63
 }
64
 
64
 
65
-// 下载导入模板
66
-export function importTemplate() {
65
+// 导入劝阻充电宝数据
66
+export function importDiscouragePowerBanksData(data) {
67
   return request({
67
   return request({
68
-    url: '/runData/discouragePowerBanksData/importTemplate',
69
-    method: 'get',
70
-    responseType: 'blob'
68
+    url: '/item/hkPersuadePowerBank/importData',
69
+    method: 'post',
70
+    data: data
71
   })
71
   })
72
-}
72
+}

+ 95 - 0
src/api/runData/runScreen.js

@@ -0,0 +1,95 @@
1
+import request from '@/utils/request'
2
+
3
+// 模块一:运行数据
4
+
5
+// 运行数据汇总(5个数字卡片)
6
+export function getOperationSummary(query) {
7
+  return request({
8
+    url: '/hk/screen/operationSummary',
9
+    method: 'get',
10
+    params: query
11
+  })
12
+}
13
+
14
+// T1旅检过检人数趋势(A区/B区折线图)
15
+export function getT1PassengerTrend(query) {
16
+  return request({
17
+    url: '/hk/screen/t1PassengerTrend',
18
+    method: 'get',
19
+    params: query
20
+  })
21
+}
22
+
23
+// T2旅检过检人数趋势(国内/国际旅检折线图)
24
+export function getT2PassengerTrend(query) {
25
+  return request({
26
+    url: '/hk/screen/t2PassengerTrend',
27
+    method: 'get',
28
+    params: query
29
+  })
30
+}
31
+
32
+// 行检过检数趋势(T1/T2行检折线图)
33
+export function getLuggageCheckTrend(query) {
34
+  return request({
35
+    url: '/hk/screen/luggageCheckTrend',
36
+    method: 'get',
37
+    params: query
38
+  })
39
+}
40
+
41
+// 货物过检数趋势(国内/国际货站折线图)
42
+export function getCargoTrend(query) {
43
+  return request({
44
+    url: '/hk/screen/cargoTrend',
45
+    method: 'get',
46
+    params: query
47
+  })
48
+}
49
+
50
+// 车辆过检数趋势(南侧/北侧车检折线图)
51
+export function getVehicleCheckTrend(query) {
52
+  return request({
53
+    url: '/hk/screen/vehicleCheckTrend',
54
+    method: 'get',
55
+    params: query
56
+  })
57
+}
58
+
59
+// 模块二:查获/收缴数据
60
+
61
+// 查获数据分类(环形图)
62
+export function getSeizureCategory(query) {
63
+  return request({
64
+    url: '/hk/screen/seizureCategory',
65
+    method: 'get',
66
+    params: query
67
+  })
68
+}
69
+
70
+// 大队查获数对比(柱状图)
71
+export function getBrigadeSeizureCompare(query) {
72
+  return request({
73
+    url: '/hk/screen/brigadeSeizureCompare',
74
+    method: 'get',
75
+    params: query
76
+  })
77
+}
78
+
79
+// 不合规充电宝数据(环形图)
80
+export function getPowerBankSummary(query) {
81
+  return request({
82
+    url: '/hk/screen/powerBankSummary',
83
+    method: 'get',
84
+    params: query
85
+  })
86
+}
87
+
88
+// 待检区收缴物品数据(环形图)
89
+export function getPendingConfiscate(query) {
90
+  return request({
91
+    url: '/hk/screen/pendingConfiscate',
92
+    method: 'get',
93
+    params: query
94
+  })
95
+}

+ 19 - 19
src/api/runData/seizeData.js

@@ -3,7 +3,7 @@ import request from '@/utils/request'
3
 // 查询查获数据列表
3
 // 查询查获数据列表
4
 export function listSeizeData(query) {
4
 export function listSeizeData(query) {
5
   return request({
5
   return request({
6
-    url: '/runData/seizeData/list',
6
+    url: '/item/hkSeizureStat/list',
7
     method: 'get',
7
     method: 'get',
8
     params: query
8
     params: query
9
   })
9
   })
@@ -12,7 +12,7 @@ export function listSeizeData(query) {
12
 // 查询查获数据详细
12
 // 查询查获数据详细
13
 export function getSeizeData(id) {
13
 export function getSeizeData(id) {
14
   return request({
14
   return request({
15
-    url: '/runData/seizeData/' + id,
15
+    url: '/item/hkSeizureStat/' + id,
16
     method: 'get'
16
     method: 'get'
17
   })
17
   })
18
 }
18
 }
@@ -20,7 +20,7 @@ export function getSeizeData(id) {
20
 // 新增查获数据
20
 // 新增查获数据
21
 export function addSeizeData(data) {
21
 export function addSeizeData(data) {
22
   return request({
22
   return request({
23
-    url: '/runData/seizeData',
23
+    url: '/item/hkSeizureStat',
24
     method: 'post',
24
     method: 'post',
25
     data: data
25
     data: data
26
   })
26
   })
@@ -29,7 +29,7 @@ export function addSeizeData(data) {
29
 // 修改查获数据
29
 // 修改查获数据
30
 export function updateSeizeData(data) {
30
 export function updateSeizeData(data) {
31
   return request({
31
   return request({
32
-    url: '/runData/seizeData',
32
+    url: '/item/hkSeizureStat',
33
     method: 'put',
33
     method: 'put',
34
     data: data
34
     data: data
35
   })
35
   })
@@ -38,35 +38,35 @@ export function updateSeizeData(data) {
38
 // 删除查获数据
38
 // 删除查获数据
39
 export function delSeizeData(id) {
39
 export function delSeizeData(id) {
40
   return request({
40
   return request({
41
-    url: '/runData/seizeData/' + id,
41
+    url: '/item/hkSeizureStat/' + id,
42
     method: 'delete'
42
     method: 'delete'
43
   })
43
   })
44
 }
44
 }
45
 
45
 
46
 // 导出查获数据
46
 // 导出查获数据
47
-export function exportSeizeData(query) {
47
+export function exportSeizeData(data) {
48
   return request({
48
   return request({
49
-    url: '/runData/seizeData/export',
50
-    method: 'get',
51
-    params: query,
49
+    url: '/item/hkSeizureStat/export',
50
+    method: 'post',
51
+    data: data,
52
     responseType: 'blob'
52
     responseType: 'blob'
53
   })
53
   })
54
 }
54
 }
55
 
55
 
56
-// 导入查获数据
57
-export function importSeizeData(data) {
56
+// 下载导入模板
57
+export function importTemplate() {
58
   return request({
58
   return request({
59
-    url: '/runData/seizeData/importData',
59
+    url: '/item/hkSeizureStat/importTemplate',
60
     method: 'post',
60
     method: 'post',
61
-    data: data
61
+    responseType: 'blob'
62
   })
62
   })
63
 }
63
 }
64
 
64
 
65
-// 下载导入模板
66
-export function importTemplate() {
65
+// 导入查获数据
66
+export function importSeizeData(data) {
67
   return request({
67
   return request({
68
-    url: '/runData/seizeData/importTemplate',
69
-    method: 'get',
70
-    responseType: 'blob'
68
+    url: '/item/hkSeizureStat/importData',
69
+    method: 'post',
70
+    data: data
71
   })
71
   })
72
-}
72
+}

+ 256 - 78
src/views/runData/runScreen/index.vue

@@ -171,6 +171,18 @@
171
 <script setup name="RunScreen">
171
 <script setup name="RunScreen">
172
 import { ref, onMounted, onUnmounted, nextTick } from 'vue'
172
 import { ref, onMounted, onUnmounted, nextTick } from 'vue'
173
 import * as echarts from 'echarts'
173
 import * as echarts from 'echarts'
174
+import {
175
+  getOperationSummary,
176
+  getT1PassengerTrend,
177
+  getT2PassengerTrend,
178
+  getLuggageCheckTrend,
179
+  getCargoTrend,
180
+  getVehicleCheckTrend,
181
+  getSeizureCategory,
182
+  getBrigadeSeizureCompare,
183
+  getPowerBankSummary,
184
+  getPendingConfiscate
185
+} from '@/api/runData/runScreen.js'
174
 
186
 
175
 // 图表引用
187
 // 图表引用
176
 const t1TravelChart = ref(null)
188
 const t1TravelChart = ref(null)
@@ -200,118 +212,265 @@ let waitingAreaPieChartInstance = null
200
 
212
 
201
 // 运行数据
213
 // 运行数据
202
 const runData = ref({
214
 const runData = ref({
203
-  travelInspectionTotal: 12580,
204
-  luggageInspectionTotal: 8920,
205
-  domesticCargoTotal: 1560,
206
-  internationalCargoTotal: 980,
207
-  vehicleInspectionTotal: 450
215
+  travelInspectionTotal: 0,
216
+  luggageInspectionTotal: 0,
217
+  domesticCargoTotal: 0,
218
+  internationalCargoTotal: 0,
219
+  vehicleInspectionTotal: 0
208
 })
220
 })
209
 
221
 
222
+const t1PassengerData = ref([])
223
+const t2PassengerData = ref([])
224
+const luggageCheckData = ref([])
225
+const cargoData = ref([])
226
+const vehicleCheckData = ref([])
227
+const seizureCategoryData = ref([])
228
+const brigadeSeizureData = ref([])
229
+const powerBankData = ref({})
230
+const pendingConfiscateData = ref({})
231
+
232
+async function loadData() {
233
+  try {
234
+    const query = {}
235
+    
236
+    const [
237
+      summaryRes,
238
+      t1PassengerRes,
239
+      t2PassengerRes,
240
+      luggageRes,
241
+      cargoRes,
242
+      vehicleRes,
243
+      seizureRes,
244
+      brigadeRes,
245
+      powerBankRes,
246
+      pendingRes
247
+    ] = await Promise.all([
248
+      getOperationSummary(query),
249
+      getT1PassengerTrend(query),
250
+      getT2PassengerTrend(query),
251
+      getLuggageCheckTrend(query),
252
+      getCargoTrend(query),
253
+      getVehicleCheckTrend(query),
254
+      getSeizureCategory(query),
255
+      getBrigadeSeizureCompare(query),
256
+      getPowerBankSummary(query),
257
+      getPendingConfiscate(query)
258
+    ])
259
+    
260
+    if (summaryRes.data) {
261
+      runData.value = summaryRes.data
262
+    }
263
+    
264
+    if (t1PassengerRes.data) {
265
+      t1PassengerData.value = t1PassengerRes.data
266
+    }
267
+    
268
+    if (t2PassengerRes.data) {
269
+      t2PassengerData.value = t2PassengerRes.data
270
+    }
271
+    
272
+    if (luggageRes.data) {
273
+      luggageCheckData.value = luggageRes.data
274
+    }
275
+    
276
+    if (cargoRes.data) {
277
+      cargoData.value = cargoRes.data
278
+    }
279
+    
280
+    if (vehicleRes.data) {
281
+      vehicleCheckData.value = vehicleRes.data
282
+    }
283
+    
284
+    if (seizureRes.data) {
285
+      seizureCategoryData.value = seizureRes.data
286
+    }
287
+    
288
+    if (brigadeRes.data) {
289
+      brigadeSeizureData.value = brigadeRes.data
290
+    }
291
+    
292
+    if (powerBankRes.data) {
293
+      powerBankData.value = powerBankRes.data
294
+    }
295
+    
296
+    if (pendingRes.data) {
297
+      pendingConfiscateData.value = pendingRes.data
298
+    }
299
+    
300
+    nextTick(() => {
301
+      initCharts()
302
+    })
303
+  } catch (error) {
304
+    console.error('加载数据失败:', error)
305
+  }
306
+}
307
+
210
 // 初始化所有图表
308
 // 初始化所有图表
211
 function initCharts() {
309
 function initCharts() {
212
   // T1旅检过检人数折线图
310
   // T1旅检过检人数折线图
213
   if (t1TravelChart.value) {
311
   if (t1TravelChart.value) {
214
     t1TravelChartInstance = echarts.init(t1TravelChart.value)
312
     t1TravelChartInstance = echarts.init(t1TravelChart.value)
313
+    const t1Data = t1PassengerData.value || []
215
     t1TravelChartInstance.setOption({
314
     t1TravelChartInstance.setOption({
216
       tooltip: { trigger: 'axis' },
315
       tooltip: { trigger: 'axis' },
217
       xAxis: {
316
       xAxis: {
218
         type: 'category',
317
         type: 'category',
219
-        data: ['08:00', '10:00', '12:00', '14:00', '16:00', '18:00', '20:00']
318
+        data: t1Data.map(item => item.recordDate || item.aZone || '')
220
       },
319
       },
221
       yAxis: { type: 'value' },
320
       yAxis: { type: 'value' },
222
-      series: [{
223
-        data: [820, 932, 901, 934, 1290, 1330, 1320],
224
-        type: 'line',
225
-        smooth: true,
226
-        lineStyle: { color: '#5470c6' },
227
-        areaStyle: { color: 'rgba(84, 112, 198, 0.2)' }
228
-      }]
321
+      series: [
322
+        {
323
+          name: 'A区',
324
+          data: t1Data.map(item => item.aZone || 0),
325
+          type: 'line',
326
+          smooth: true,
327
+          lineStyle: { color: '#E8B140' },
328
+          areaStyle: { color: 'rgba(232, 177, 64, 0.2)' }
329
+        },
330
+        {
331
+          name: 'B区',
332
+          data: t1Data.map(item => item.bZone || 0),
333
+          type: 'line',
334
+          smooth: true,
335
+          lineStyle: { color: '#5470c6' },
336
+          areaStyle: { color: 'rgba(84, 112, 198, 0.2)' }
337
+        }
338
+      ]
229
     })
339
     })
230
   }
340
   }
231
 
341
 
232
   // T2旅检过检人数折线图
342
   // T2旅检过检人数折线图
233
   if (t2TravelChart.value) {
343
   if (t2TravelChart.value) {
234
     t2TravelChartInstance = echarts.init(t2TravelChart.value)
344
     t2TravelChartInstance = echarts.init(t2TravelChart.value)
345
+    const t2Data = t2PassengerData.value || []
235
     t2TravelChartInstance.setOption({
346
     t2TravelChartInstance.setOption({
236
       tooltip: { trigger: 'axis' },
347
       tooltip: { trigger: 'axis' },
237
       xAxis: {
348
       xAxis: {
238
         type: 'category',
349
         type: 'category',
239
-        data: ['08:00', '10:00', '12:00', '14:00', '16:00', '18:00', '20:00']
350
+        data: t2Data.map(item => item.recordDate || '')
240
       },
351
       },
241
       yAxis: { type: 'value' },
352
       yAxis: { type: 'value' },
242
-      series: [{
243
-        data: [620, 732, 701, 734, 890, 930, 920],
244
-        type: 'line',
245
-        smooth: true,
246
-        lineStyle: { color: '#91cc75' },
247
-        areaStyle: { color: 'rgba(145, 204, 117, 0.2)' }
248
-      }]
353
+      series: [
354
+        {
355
+          name: '国内旅检',
356
+          data: t2Data.map(item => item.domesticPassenger || 0),
357
+          type: 'line',
358
+          smooth: true,
359
+          lineStyle: { color: '#91cc75' },
360
+          areaStyle: { color: 'rgba(145, 204, 117, 0.2)' }
361
+        },
362
+        {
363
+          name: '国际旅检',
364
+          data: t2Data.map(item => item.intlPassenger || 0),
365
+          type: 'line',
366
+          smooth: true,
367
+          lineStyle: { color: '#fac858' },
368
+          areaStyle: { color: 'rgba(250, 200, 88, 0.2)' }
369
+        }
370
+      ]
249
     })
371
     })
250
   }
372
   }
251
 
373
 
252
   // 行检过检数折线图
374
   // 行检过检数折线图
253
   if (luggageChart.value) {
375
   if (luggageChart.value) {
254
     luggageChartInstance = echarts.init(luggageChart.value)
376
     luggageChartInstance = echarts.init(luggageChart.value)
377
+    const luggageData = luggageCheckData.value || []
255
     luggageChartInstance.setOption({
378
     luggageChartInstance.setOption({
256
       tooltip: { trigger: 'axis' },
379
       tooltip: { trigger: 'axis' },
257
       xAxis: {
380
       xAxis: {
258
         type: 'category',
381
         type: 'category',
259
-        data: ['08:00', '10:00', '12:00', '14:00', '16:00', '18:00', '20:00']
382
+        data: luggageData.map(item => item.recordDate || '')
260
       },
383
       },
261
       yAxis: { type: 'value' },
384
       yAxis: { type: 'value' },
262
-      series: [{
263
-        data: [620, 832, 701, 834, 1090, 1130, 1120],
264
-        type: 'line',
265
-        smooth: true,
266
-        lineStyle: { color: '#fac858' },
267
-        areaStyle: { color: 'rgba(250, 200, 88, 0.2)' }
268
-      }]
385
+      series: [
386
+        {
387
+          name: 'T1行检',
388
+          data: luggageData.map(item => item.t1LuggageCheck || 0),
389
+          type: 'line',
390
+          smooth: true,
391
+          lineStyle: { color: '#ee6666' },
392
+          areaStyle: { color: 'rgba(238, 102, 102, 0.2)' }
393
+        },
394
+        {
395
+          name: 'T2行检',
396
+          data: luggageData.map(item => item.t2LuggageCheck || 0),
397
+          type: 'line',
398
+          smooth: true,
399
+          lineStyle: { color: '#73c0de' },
400
+          areaStyle: { color: 'rgba(115, 192, 222, 0.2)' }
401
+        }
402
+      ]
269
     })
403
     })
270
   }
404
   }
271
 
405
 
272
   // 货物过检数折线图
406
   // 货物过检数折线图
273
   if (cargoChart.value) {
407
   if (cargoChart.value) {
274
     cargoChartInstance = echarts.init(cargoChart.value)
408
     cargoChartInstance = echarts.init(cargoChart.value)
409
+    const cargoTrendData = cargoData.value || []
275
     cargoChartInstance.setOption({
410
     cargoChartInstance.setOption({
276
       tooltip: { trigger: 'axis' },
411
       tooltip: { trigger: 'axis' },
277
       xAxis: {
412
       xAxis: {
278
         type: 'category',
413
         type: 'category',
279
-        data: ['08:00', '10:00', '12:00', '14:00', '16:00', '18:00', '20:00']
414
+        data: cargoTrendData.map(item => item.recordDate || '')
280
       },
415
       },
281
       yAxis: { type: 'value' },
416
       yAxis: { type: 'value' },
282
-      series: [{
283
-        data: [120, 232, 201, 234, 290, 330, 320],
284
-        type: 'line',
285
-        smooth: true,
286
-        lineStyle: { color: '#ee6666' },
287
-        areaStyle: { color: 'rgba(238, 102, 102, 0.2)' }
288
-      }]
417
+      series: [
418
+        {
419
+          name: '国内货站',
420
+          data: cargoTrendData.map(item => item.domesticCargo || 0),
421
+          type: 'line',
422
+          smooth: true,
423
+          lineStyle: { color: '#E8B140' },
424
+          areaStyle: { color: 'rgba(232, 177, 64, 0.2)' }
425
+        },
426
+        {
427
+          name: '国际货站',
428
+          data: cargoTrendData.map(item => item.intlCargo || 0),
429
+          type: 'line',
430
+          smooth: true,
431
+          lineStyle: { color: '#26B6BE' },
432
+          areaStyle: { color: 'rgba(38, 182, 190, 0.2)' }
433
+        }
434
+      ]
289
     })
435
     })
290
   }
436
   }
291
 
437
 
292
   // 车辆过检数折线图
438
   // 车辆过检数折线图
293
   if (vehicleChart.value) {
439
   if (vehicleChart.value) {
294
     vehicleChartInstance = echarts.init(vehicleChart.value)
440
     vehicleChartInstance = echarts.init(vehicleChart.value)
441
+    const vehicleData = vehicleCheckData.value || []
295
     vehicleChartInstance.setOption({
442
     vehicleChartInstance.setOption({
296
       tooltip: { trigger: 'axis' },
443
       tooltip: { trigger: 'axis' },
297
       xAxis: {
444
       xAxis: {
298
         type: 'category',
445
         type: 'category',
299
-        data: ['08:00', '10:00', '12:00', '14:00', '16:00', '18:00', '20:00']
446
+        data: vehicleData.map(item => item.recordDate || '')
300
       },
447
       },
301
       yAxis: { type: 'value' },
448
       yAxis: { type: 'value' },
302
-      series: [{
303
-        data: [30, 52, 41, 54, 70, 83, 80],
304
-        type: 'line',
305
-        smooth: true,
306
-        lineStyle: { color: '#73c0de' },
307
-        areaStyle: { color: 'rgba(115, 192, 222, 0.2)' }
308
-      }]
449
+      series: [
450
+        {
451
+          name: '南侧车检',
452
+          data: vehicleData.map(item => item.southVehicleCheck || 0),
453
+          type: 'line',
454
+          smooth: true,
455
+          lineStyle: { color: '#E8B140' },
456
+          areaStyle: { color: 'rgba(232, 177, 64, 0.2)' }
457
+        },
458
+        {
459
+          name: '北侧车检',
460
+          data: vehicleData.map(item => item.northVehicleCheck || 0),
461
+          type: 'line',
462
+          smooth: true,
463
+          lineStyle: { color: '#5470c6' },
464
+          areaStyle: { color: 'rgba(84, 112, 198, 0.2)' }
465
+        }
466
+      ]
309
     })
467
     })
310
   }
468
   }
311
 
469
 
312
   // 查获数据环形图
470
   // 查获数据环形图
313
   if (seizePieChart.value) {
471
   if (seizePieChart.value) {
314
     seizePieChartInstance = echarts.init(seizePieChart.value)
472
     seizePieChartInstance = echarts.init(seizePieChart.value)
473
+    const seizureData = seizureCategoryData.value || []
315
     seizePieChartInstance.setOption({
474
     seizePieChartInstance.setOption({
316
       tooltip: { trigger: 'item' },
475
       tooltip: { trigger: 'item' },
317
       legend: { orient: 'vertical', right: 10, top: 'center' },
476
       legend: { orient: 'vertical', right: 10, top: 'center' },
@@ -320,13 +479,7 @@ function initCharts() {
320
         type: 'pie',
479
         type: 'pie',
321
         radius: ['40%', '70%'],
480
         radius: ['40%', '70%'],
322
         center: ['40%', '50%'],
481
         center: ['40%', '50%'],
323
-        data: [
324
-          { value: 1048, name: '火种' },
325
-          { value: 735, name: '刀具' },
326
-          { value: 580, name: '警械器具' },
327
-          { value: 484, name: '烟花爆竹' },
328
-          { value: 300, name: '其他' }
329
-        ],
482
+        data: seizureData.map(item => ({ name: item.name, value: item.total })),
330
         emphasis: {
483
         emphasis: {
331
           itemStyle: {
484
           itemStyle: {
332
             shadowBlur: 10,
485
             shadowBlur: 10,
@@ -341,33 +494,49 @@ function initCharts() {
341
   // 大队查获数对比柱状图
494
   // 大队查获数对比柱状图
342
   if (teamSeizeBarChart.value) {
495
   if (teamSeizeBarChart.value) {
343
     teamSeizeBarChartInstance = echarts.init(teamSeizeBarChart.value)
496
     teamSeizeBarChartInstance = echarts.init(teamSeizeBarChart.value)
497
+    const brigadeData = brigadeSeizureData.value || []
344
     teamSeizeBarChartInstance.setOption({
498
     teamSeizeBarChartInstance.setOption({
345
       tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },
499
       tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },
500
+      legend: { data: ['T1区', 'T2区', '总量'] },
346
       xAxis: {
501
       xAxis: {
347
         type: 'category',
502
         type: 'category',
348
-        data: ['一大队', '二大队', '三大队', '四大队', '五大队', '六大队']
503
+        data: [...new Set(brigadeData.map(item => item.brigade))]
349
       },
504
       },
350
       yAxis: { type: 'value' },
505
       yAxis: { type: 'value' },
351
-      series: [{
352
-        data: [120, 200, 150, 80, 70, 110],
353
-        type: 'bar',
354
-        itemStyle: { color: '#5470c6' }
355
-      }]
506
+      series: [
507
+        {
508
+          name: 'T1区',
509
+          data: brigadeData.filter(item => item.shift === '白班').map(item => ({ value: item.t1Total, brigade: item.brigade })),
510
+          type: 'bar'
511
+        },
512
+        {
513
+          name: 'T2区',
514
+          data: brigadeData.filter(item => item.shift === '白班').map(item => ({ value: item.t2Total, brigade: item.brigade })),
515
+          type: 'bar'
516
+        },
517
+        {
518
+          name: '总量',
519
+          data: brigadeData.filter(item => item.shift === '白班').map(item => ({ value: item.grandTotal, brigade: item.brigade })),
520
+          type: 'bar'
521
+        }
522
+      ]
356
     })
523
     })
357
   }
524
   }
358
 
525
 
359
   // T1区域各大队查获数对比柱状图
526
   // T1区域各大队查获数对比柱状图
360
   if (t1TeamBarChart.value) {
527
   if (t1TeamBarChart.value) {
361
     t1TeamBarChartInstance = echarts.init(t1TeamBarChart.value)
528
     t1TeamBarChartInstance = echarts.init(t1TeamBarChart.value)
529
+    const t1BrigadeData = (brigadeSeizureData.value || []).filter(item => item.shift === '白班')
362
     t1TeamBarChartInstance.setOption({
530
     t1TeamBarChartInstance.setOption({
363
       tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },
531
       tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },
364
       xAxis: {
532
       xAxis: {
365
         type: 'category',
533
         type: 'category',
366
-        data: ['一大队', '二大队', '三大队', '四大队']
534
+        data: [...new Set(t1BrigadeData.map(item => item.brigade))]
367
       },
535
       },
368
       yAxis: { type: 'value' },
536
       yAxis: { type: 'value' },
369
       series: [{
537
       series: [{
370
-        data: [80, 120, 90, 60],
538
+        name: 'T1查获数',
539
+        data: t1BrigadeData.map(item => item.t1Total),
371
         type: 'bar',
540
         type: 'bar',
372
         itemStyle: { color: '#91cc75' }
541
         itemStyle: { color: '#91cc75' }
373
       }]
542
       }]
@@ -377,15 +546,17 @@ function initCharts() {
377
   // T2区域各大队查获数对比柱状图
546
   // T2区域各大队查获数对比柱状图
378
   if (t2TeamBarChart.value) {
547
   if (t2TeamBarChart.value) {
379
     t2TeamBarChartInstance = echarts.init(t2TeamBarChart.value)
548
     t2TeamBarChartInstance = echarts.init(t2TeamBarChart.value)
549
+    const t2BrigadeData = (brigadeSeizureData.value || []).filter(item => item.shift === '夜班')
380
     t2TeamBarChartInstance.setOption({
550
     t2TeamBarChartInstance.setOption({
381
       tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },
551
       tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },
382
       xAxis: {
552
       xAxis: {
383
         type: 'category',
553
         type: 'category',
384
-        data: ['五大队', '六大队', '七大队', '八大队']
554
+        data: [...new Set(t2BrigadeData.map(item => item.brigade))]
385
       },
555
       },
386
       yAxis: { type: 'value' },
556
       yAxis: { type: 'value' },
387
       series: [{
557
       series: [{
388
-        data: [70, 90, 80, 50],
558
+        name: 'T2查获数',
559
+        data: t2BrigadeData.map(item => item.t2Total),
389
         type: 'bar',
560
         type: 'bar',
390
         itemStyle: { color: '#fac858' }
561
         itemStyle: { color: '#fac858' }
391
       }]
562
       }]
@@ -395,6 +566,18 @@ function initCharts() {
395
   // 不合格充电宝劝阻数组环形图
566
   // 不合格充电宝劝阻数组环形图
396
   if (powerBankPieChart.value) {
567
   if (powerBankPieChart.value) {
397
     powerBankPieChartInstance = echarts.init(powerBankPieChart.value)
568
     powerBankPieChartInstance = echarts.init(powerBankPieChart.value)
569
+    const pbData = powerBankData.value || {}
570
+    const powerBankChartData = [
571
+      { name: '邮寄', value: pbData.mailTotal || 0 },
572
+      { name: '暂存', value: pbData.tempStoreTotal || 0 },
573
+      { name: '自弃', value: pbData.abandonTotal || 0 },
574
+      { name: '召回', value: pbData.recallTotal || 0 },
575
+      { name: '无3C标识', value: pbData.no3cTotal || 0 },
576
+      { name: '标识不清', value: pbData.unclearMarkTotal || 0 },
577
+      { name: '超规数量', value: pbData.excessQtyTotal || 0 },
578
+      { name: '其他', value: pbData.bothTotal || 0 }
579
+    ].filter(item => item.value > 0)
580
+    
398
     powerBankPieChartInstance.setOption({
581
     powerBankPieChartInstance.setOption({
399
       tooltip: { trigger: 'item' },
582
       tooltip: { trigger: 'item' },
400
       legend: { orient: 'vertical', right: 10, top: 'center' },
583
       legend: { orient: 'vertical', right: 10, top: 'center' },
@@ -403,12 +586,7 @@ function initCharts() {
403
         type: 'pie',
586
         type: 'pie',
404
         radius: ['40%', '70%'],
587
         radius: ['40%', '70%'],
405
         center: ['40%', '50%'],
588
         center: ['40%', '50%'],
406
-        data: [
407
-          { value: 320, name: '无3C标识' },
408
-          { value: 240, name: '标识不清' },
409
-          { value: 180, name: '超规数量' },
410
-          { value: 150, name: '其他' }
411
-        ],
589
+        data: powerBankChartData,
412
         emphasis: {
590
         emphasis: {
413
           itemStyle: {
591
           itemStyle: {
414
             shadowBlur: 10,
592
             shadowBlur: 10,
@@ -423,6 +601,13 @@ function initCharts() {
423
   // 待检区收缴禁限带物品数据表环形图
601
   // 待检区收缴禁限带物品数据表环形图
424
   if (waitingAreaPieChart.value) {
602
   if (waitingAreaPieChart.value) {
425
     waitingAreaPieChartInstance = echarts.init(waitingAreaPieChart.value)
603
     waitingAreaPieChartInstance = echarts.init(waitingAreaPieChart.value)
604
+    const pendingData = pendingConfiscateData.value || {}
605
+    const pendingChartData = [
606
+      { name: '火种', value: pendingData.fireSourceTotal || 0 },
607
+      { name: '液态物品', value: pendingData.liquidTotal || 0 },
608
+      { name: '其他', value: pendingData.otherTotal || 0 }
609
+    ].filter(item => item.value > 0)
610
+    
426
     waitingAreaPieChartInstance.setOption({
611
     waitingAreaPieChartInstance.setOption({
427
       tooltip: { trigger: 'item' },
612
       tooltip: { trigger: 'item' },
428
       legend: { orient: 'vertical', right: 10, top: 'center' },
613
       legend: { orient: 'vertical', right: 10, top: 'center' },
@@ -431,12 +616,7 @@ function initCharts() {
431
         type: 'pie',
616
         type: 'pie',
432
         radius: ['40%', '70%'],
617
         radius: ['40%', '70%'],
433
         center: ['40%', '50%'],
618
         center: ['40%', '50%'],
434
-        data: [
435
-          { value: 420, name: '火种' },
436
-          { value: 280, name: '液态物品' },
437
-          { value: 190, name: '其他物品' },
438
-          { value: 120, name: '其他' }
439
-        ],
619
+        data: pendingChartData,
440
         emphasis: {
620
         emphasis: {
441
           itemStyle: {
621
           itemStyle: {
442
             shadowBlur: 10,
622
             shadowBlur: 10,
@@ -467,10 +647,8 @@ function handleResize() {
467
 
647
 
468
 // 组件挂载时初始化图表
648
 // 组件挂载时初始化图表
469
 onMounted(() => {
649
 onMounted(() => {
470
-  nextTick(() => {
471
-    initCharts()
472
-    window.addEventListener('resize', handleResize)
473
-  })
650
+  loadData()
651
+  window.addEventListener('resize', handleResize)
474
 })
652
 })
475
 
653
 
476
 // 组件卸载时销毁图表
654
 // 组件卸载时销毁图表