Kaynağa Gözat

feat: 运行数据图表联调

lixiangrui 3 hafta önce
ebeveyn
işleme
93743a2f88

+ 41 - 0
src/api/portraitManagement/portraitManagement.js

@@ -43,4 +43,45 @@ export function getDeptPositionDistribution(data) {
43 43
 // 维度得分一览
44 44
 export function getDimensionScoreOverview(data) {
45 45
     return request({ url: '/score/dept-portrait/group-portrait', method: 'post', data })
46
+}
47
+
48
+// 1.查询每日通道过检率
49
+export function countLanePeakThroughput(data) {
50
+    return request({ url: '/ledger/operationLanePeakThroughput/countLanePeakThroughput', method: 'post', data })
51
+}
52
+// 2.查询当天开航每小时区域过检人数
53
+export function countStationHourlyThroughput(data) {
54
+    return request({ url: '/ledger/operationStationHourlyThroughput/countStationHourlyThroughput', method: 'get', data })
55
+}
56
+// 3.查获信息展示
57
+export function countSeizureInfoItem(data) {
58
+    return request({ url: '/ledger/seizureStats/countSeizureInfoItem', method: 'post', data })
59
+}
60
+// 4.查获物品分布
61
+export function countSeizeSubjectCategoryQuantity(data) {
62
+    return request({ url: '/ledger/seizureStats/countSeizeSubjectCategoryQuantity', method: 'post', data })
63
+}
64
+// 5.近30天查获数量(总表)
65
+export function countSeizureTotalQuantity(data) {
66
+    return request({ url: '/ledger/seizureStats/countSeizureTotalQuantity', method: 'post', data })
67
+}
68
+// 6.近30天查获数量(员工/小组/班组/部门)
69
+export function countSeizureSingleQuantity(data) {
70
+    return request({ url: '/ledger/seizureStats/countSeizureSingleQuantity', method: 'post', data })
71
+}
72
+// 7.查获工作区域分布
73
+export function countSeizeAreaQuantity(data) {
74
+    return request({ url: '/ledger/seizureStats/countSeizeAreaQuantity', method: 'post', data })
75
+}
76
+// 8.不安全事件物品分布
77
+export function countSeizureStatsItem(data) {
78
+    return request({ url: '/ledger/unsafeEvent/countSeizureStatsItem', method: 'post', data })
79
+}
80
+// 9.不安全事件类型分布
81
+export function countSeizureStatsType(data) {
82
+    return request({ url: '/ledger/unsafeEvent/countSeizureStatsType', method: 'post', data })
83
+}
84
+// 10.不安全事件岗位分布
85
+export function countSeizureStatsPost(data) {
86
+    return request({ url: '/ledger/unsafeEvent/countSeizureStatsPost', method: 'post', data })
46 87
 }

+ 7 - 19
src/views/portraitManagement/components/ChannelCheckChart.vue

@@ -16,7 +16,6 @@ const props = defineProps({
16 16
   }
17 17
 })
18 18
 const setChartsOptionsBar = computed(() => {
19
-  const hours = Array.from({length: 24}, (_, i) => `${i.toString().padStart(2, '0')}:00`)
20 19
   return {
21 20
     grid: {
22 21
       top: 40,
@@ -26,7 +25,7 @@ const setChartsOptionsBar = computed(() => {
26 25
     },
27 26
     xAxis: {
28 27
       type: 'category',
29
-      data: hours,
28
+      data: props.chartsData.map(item => item.recordDate),
30 29
       axisLabel: { color: '#fff', fontSize: 14 },
31 30
       axisLine: { lineStyle: { color: '#344067' } }
32 31
     },
@@ -44,7 +43,7 @@ const setChartsOptionsBar = computed(() => {
44 43
         type: 'value',
45 44
         name: '数量',
46 45
         position: 'right',
47
-        max: Math.max(...props.chartsData.map(item => item.num)) + 100,
46
+        max: 'dataMax',
48 47
         axisLabel: { color: '#fff', fontSize: 14 },
49 48
         axisLine: {  lineStyle: { color: '#fff' } },
50 49
         splitLine: { show: false }
@@ -52,21 +51,10 @@ const setChartsOptionsBar = computed(() => {
52 51
     ],
53 52
     series: [
54 53
       {
55
-        name: '过检人数',
54
+        name: '本通道过检人数',
56 55
         type: 'bar',
57 56
         yAxisIndex: 1,
58
-        data: props.chartsData.map(item => item.num),
59
-        itemStyle: {
60
-          color: '#6DA6FE',
61
-          borderRadius: [2, 2, 0, 0],
62
-        },
63
-        barWidth: '20%'
64
-      },
65
-      {
66
-        name: '过检人数1',
67
-        type: 'bar',
68
-        yAxisIndex: 1,
69
-        data: props.chartsData.map(item => item.num1),
57
+        data: props.chartsData.map(item => item.totalRecord),
70 58
         itemStyle: {
71 59
           color: '#9963FB',
72 60
           borderRadius: [2, 2, 0, 0],
@@ -74,10 +62,10 @@ const setChartsOptionsBar = computed(() => {
74 62
         barWidth: '20%'
75 63
       },
76 64
       {
77
-        name: '过检人数2',
65
+        name: '过检人数',
78 66
         type: 'bar',
79 67
         yAxisIndex: 1,
80
-        data: props.chartsData.map(item => item.num2),
68
+        data: props.chartsData.map(item => item.totalThroughput),
81 69
         itemStyle: {
82 70
           color: '#FCE661',
83 71
           borderRadius: [2, 2, 0, 0],
@@ -88,7 +76,7 @@ const setChartsOptionsBar = computed(() => {
88 76
         name: '过检率',
89 77
         type: 'line',
90 78
         yAxisIndex: 0,
91
-        data: props.chartsData.map(item => item.rate),
79
+        data: props.chartsData.map(item => item.throughputRate),
92 80
         smooth: true,
93 81
         itemStyle: { color: '#F801FA' },
94 82
         lineStyle: { color: '#F801FA' }

+ 5 - 3
src/views/portraitManagement/components/EventItems.vue

@@ -31,18 +31,20 @@ const setChartsOptionsBar = computed(() => {
31 31
       textStyle: { color: '#fff' }
32 32
     },
33 33
     legend: {
34
-      top: 'center',
34
+      top: '10%',
35 35
       left: '0%',
36 36
       orient: 'vertical',
37 37
       textStyle: { color: '#fff' }
38 38
     },
39 39
     series: [{
40 40
       type: 'pie',
41
+      avoidLabelOverlap: true, 
41 42
       radius: ['40%', '60%'],
43
+      center: ['50%', '50%'], 
42 44
       data: props.chartsData.map(item => {
43 45
         return {
44
-          value: item.num,
45
-          name: item.name
46
+          value: item.itemNum,
47
+          name: item.itemName
46 48
         }
47 49
       }),
48 50
       label: { show: true, color: '#fff', fontSize: 16, lineHeight: 20, formatter: '{b}\n{c}'  },

+ 4 - 3
src/views/portraitManagement/components/EventType.vue

@@ -31,7 +31,7 @@ const setChartsOptionsBar = computed(() => {
31 31
       textStyle: { color: '#fff' }
32 32
     },
33 33
     legend: {
34
-      top: 'center',
34
+      top: '10%',
35 35
       left: '0%',
36 36
       orient: 'vertical',
37 37
       textStyle: { color: '#fff' }
@@ -39,10 +39,11 @@ const setChartsOptionsBar = computed(() => {
39 39
     series: [{
40 40
       type: 'pie',
41 41
       radius: ['40%', '60%'],
42
+      center: ['50%', '50%'], 
42 43
       data: props.chartsData.map(item => {
43 44
         return {
44
-          value: item.num,
45
-          name: item.name
45
+          value: item.eventTypeNum,
46
+          name: item.eventTypeName
46 47
         }
47 48
       }),
48 49
       label: { show: true, color: '#fff', fontSize: 16, lineHeight: 20, formatter: '{b}\n{c}'  },

+ 2 - 2
src/views/portraitManagement/components/EventWorkArea.vue

@@ -16,7 +16,7 @@ const props = defineProps({
16 16
   }
17 17
 })
18 18
 const setChartsOptionsBar = computed(() => {
19
-  const labels = props.chartsData.map(item => item.name)
19
+  const labels = props.chartsData.map(item => item.positionName)
20 20
   return {
21 21
     grid: {
22 22
       top: 50,
@@ -49,7 +49,7 @@ const setChartsOptionsBar = computed(() => {
49 49
       {
50 50
         name: '查获数量',
51 51
         type: 'bar',
52
-        data: props.chartsData.map(item => item.num),
52
+        data: props.chartsData.map(item => item.positionNum),
53 53
         itemStyle: {
54 54
           borderRadius: [5, 5, 0, 0],
55 55
           color: '#6DA6FE',

+ 18 - 7
src/views/portraitManagement/components/SearchBar.vue

@@ -1,5 +1,6 @@
1 1
 <template>
2 2
   <div class="ep-topbar" @click="visible = false">
3
+    <div class="ep-topbar-content">
3 4
     <div class="time-btns">
4 5
       <div :class="currentTime === 'week' ? 'primary' : 'default'" @click="selectTime('week')">近一周</div>
5 6
       <div :class="currentTime === 'month' ? 'primary' : 'default'" @click="selectTime('month')">近一月</div>
@@ -38,6 +39,7 @@
38 39
         </div>
39 40
       </div>
40 41
     </el-popover>
42
+    </div>
41 43
   </div>
42 44
 </template>
43 45
 
@@ -136,6 +138,7 @@ const searchHandler = (query = {}) => {
136 138
     }
137 139
   } else {
138 140
     emit('search', queryParams)
141
+    visible.value = false
139 142
   }
140 143
 }
141 144
 
@@ -212,14 +215,22 @@ defineExpose({
212 215
 
213 216
 <style lang="scss" scoped>
214 217
 .ep-topbar {
215
-  display: flex;
216
-  align-items: center;
217
-  justify-content: flex-start;
218
+
218 219
   height: 60px;
219
-  padding: 0 15px;
220
-  box-sizing: border-box;
221
-  gap: 12px;
222
-  flex-wrap: wrap;
220
+  position: relative;
221
+
222
+  .ep-topbar-content {
223
+    position: absolute;
224
+    padding: 0 15px;
225
+    inset: 0;
226
+    display: flex;
227
+    align-items: center;
228
+    justify-content: flex-start;
229
+    box-sizing: border-box;
230
+    gap: 12px;
231
+    flex-wrap: wrap;
232
+    z-index: 1000;
233
+  }
223 234
 
224 235
   .time-btns {
225 236
     display: flex;

+ 11 - 13
src/views/portraitManagement/components/SeizedInfo.vue

@@ -4,7 +4,7 @@
4 4
       <div class="svgIcon">
5 5
         <Svg></Svg>
6 6
         <div class="svgContent">
7
-          <div class="value">1658</div>
7
+          <div class="value">{{ chartsData.totalSeizeNum }}</div>
8 8
           <div class="tips">
9 9
             <span>查获总数</span>
10 10
             <span>(所有人员)</span>
@@ -27,7 +27,7 @@ const bar = ref(null)
27 27
 const props = defineProps({
28 28
   chartsData: {
29 29
     type: Object,
30
-    default: () => ([])
30
+    default: () => ({ totalSeizeNum: 0, itemList: [] })
31 31
   }
32 32
 })
33 33
 
@@ -74,17 +74,16 @@ const colors = [
74 74
 ]
75 75
 
76 76
 const setChartsOptionsBar = computed(() => {
77
-  const hours = ['等级1', '等级2', '等级3']
78 77
   return {
79 78
     grid: {
80
-      top: 30,
79
+      top: 20,
81 80
       bottom: 40,
82
-      left: 60,
83
-      right: 30
81
+      left: 35,
82
+      right: 15
84 83
     },
85 84
     xAxis: {
86 85
       type: 'category',
87
-      data: hours,
86
+      data: props.chartsData.itemList.map(item => item.name),
88 87
       axisLabel: { color: '#fff', fontSize: 14 },
89 88
       axisLine: { lineStyle: { color: '#344067' } }
90 89
     },
@@ -92,24 +91,23 @@ const setChartsOptionsBar = computed(() => {
92 91
       {
93 92
         type: 'value',
94 93
         position: 'left',
95
-        max: Math.max(...props.chartsData.map(item => item.num)) + 100,
96 94
         axisLabel: { color: '#fff', fontSize: 14 },
97 95
         axisLine: {  lineStyle: { color: '#fff' } },
98
-        splitLine: { show: false }
96
+        splitLine: { lineStyle: { color: '#344067' }  }
99 97
       }
100 98
     ],
101 99
     series: [
102 100
       {
103
-        name: '数',
101
+        name: '查获数',
104 102
         type: 'bar',
105
-        data: props.chartsData.map(item => item.num),
103
+        data: props.chartsData.itemList.map(item => item.seizeNum),
106 104
         itemStyle: {
107 105
           color: (params) => {
108 106
             return colors[params.dataIndex % colors.length]
109 107
           },
110 108
           borderRadius: [5, 5, 0, 0],
111 109
         },
112
-        barWidth: '40px'
110
+        barWidth: '50%'
113 111
       },
114 112
     ],
115 113
     tooltip: {
@@ -129,7 +127,7 @@ useECharts(bar, setChartsOptionsBar);
129 127
   display: flex;
130 128
   width: 100%;
131 129
   height: 100%;
132
-  column-gap: 30px;
130
+  column-gap: 20px;
133 131
   .svgIcon {
134 132
     width: 280px;
135 133
     box-sizing: border-box;

+ 2 - 2
src/views/portraitManagement/components/SeizedItems.vue

@@ -41,8 +41,8 @@ const setChartsOptionsBar = computed(() => {
41 41
       radius: ['40%', '70%'],
42 42
       data: props.chartsData.map(item => {
43 43
         return {
44
-          value: item.num,
45
-          name: item.name
44
+          value: item.itemNum,
45
+          name: item.itemName
46 46
         }
47 47
       }),
48 48
       label: { show: true, color: '#fff', fontSize: 16, lineHeight: 20, formatter: '{b}\n{c}'  },

+ 79 - 95
src/views/portraitManagement/components/SeizedNum.vue

@@ -5,115 +5,99 @@
5 5
 </template>
6 6
 
7 7
 <script setup>
8
-import { computed } from 'vue';
9
-import Card from './card.vue';
10
-import { useECharts } from '@/hooks/useEcharts.js';
11
-const bar = ref(null)
12
-const props = defineProps({
13
-  chartsData: {
14
-    type: Object,
15
-    default: () => ([])
16
-  }
17
-})
18
-const setChartsOptionsBar = computed(() => {
19
-  return {
20
-    grid: {
21
-      top: 40,
22
-      bottom: 30,
23
-      left: 60,
24
-      right: 20
25
-    },
26
-    xAxis: {
27
-      type: 'category',
28
-      axisLabel: { show: false },
29
-      axisLine: { show: false },
30
-      boundaryGap: false
31
-    },
32
-    yAxis: [
33
-      {
34
-        type: 'value',
35
-        position: 'left',
36
-        axisLabel: { color: '#fff', fontSize: 14 },
37
-        axisLine: {  lineStyle: { color: '#fff' } },
38
-        splitLine: { lineStyle: { color: '#344067' } }
39
-      },
40
-    ],
41
-    series: [
42
-      {
43
-        name: '数量1',
44
-        type: 'line',
45
-        data: props.chartsData.map(item => item.num),
46
-        smooth: true,
47
-        itemStyle: { color: '#71B138' },
48
-        lineStyle: { color: '#71B138' },
49
-        areaStyle: { color: {
8
+  import { computed } from 'vue';
9
+  import Card from './card.vue';
10
+  import { useECharts } from '@/hooks/useEcharts.js';
11
+  const bar = ref(null)
12
+  const props = defineProps({
13
+    chartsData: {
14
+      type: Object,
15
+      default: () => ([])
16
+    }
17
+  })
18
+  const countryColors = ['#71B138', '#F801FA', '#6DA6FE', '#95E530', '#9963FB', '#FCE661', '#22C2CC', '#F76723']
19
+  const createItemConfig = (index) => {
20
+    const curColor = countryColors[index % countryColors.length] 
21
+    return {
22
+      type: 'line',
23
+      smooth: true,
24
+      itemStyle: { color: curColor },
25
+      lineStyle: { color: curColor },
26
+      areaStyle: {
27
+        color: {
50 28
           type: 'linear',
51 29
           x: 0,
52 30
           y: 0,
53 31
           x2: 0,
54 32
           y2: 1,
55 33
           colorStops: [{
56
-            offset: 0, color: '#71B138'
34
+            offset: 0, color: curColor
57 35
           }, {
58
-            offset: 1, color: '#71B13800'
36
+            offset: 1, color: curColor + '00'
59 37
           }],
60 38
           global: false
61
-        }}
39
+        }
40
+      }
41
+    }
42
+  }
43
+  const setChartsOptionsBar = computed(() => {
44
+    const group = props.chartsData.reduce((cur,acc) => {
45
+      let curItem = cur.find(item => item.groupName === acc.groupName)
46
+      if (curItem) {
47
+        curItem.seizeNums.push(acc.seizeQuantity)
48
+        curItem.recordDates.push(acc.recordDate)
49
+      } else {
50
+        curItem = {
51
+          groupName: acc.groupName,
52
+          seizeNums: [acc.seizeQuantity],
53
+          recordDates: [acc.recordDate]
54
+        }
55
+        cur.push(curItem)
56
+      }
57
+      return cur
58
+    }, [])
59
+    console.log(group);
60
+    
61
+    return {
62
+      grid: {
63
+        top: 40,
64
+        bottom: 30,
65
+        left: 60,
66
+        right: 20
62 67
       },
63
-      {
64
-        name: '数量2',
65
-        type: 'line',
66
-        data: props.chartsData.map(item => item.num1),
67
-        smooth: true,
68
-        itemStyle: { color: '#F801FA' },
69
-        lineStyle: { color: '#F801FA' },
70
-        areaStyle: { color: {
71
-          type: 'linear',
72
-          x: 0,
73
-          y: 0,
74
-          x2: 0,
75
-          y2: 1,
76
-          colorStops: [{
77
-            offset: 0, color: '#F801FA'
78
-          }, {
79
-            offset: 1, color: '#F801FA00'
80
-          }],
81
-          global: false
82
-        }}
68
+      xAxis: {
69
+        type: 'category',
70
+        axisLabel: { show: false },
71
+        axisLine: { show: false },
72
+        boundaryGap: false,
73
+        data: group.length ? group[0].recordDates : []
83 74
       },
84
-      {
85
-        name: '数量3',
86
-        type: 'line',
87
-        data: props.chartsData.map(item => item.num2),
88
-        smooth: true,
89
-        itemStyle: { color: '#6DA6FE' },
90
-        lineStyle: { color: '#6DA6FE' },
91
-        areaStyle: { color: {
92
-          type: 'linear',
93
-          x: 0,
94
-          y: 0,
95
-          x2: 0,
96
-          y2: 1,
97
-          colorStops: [{
98
-            offset: 0, color: '#6DA6FE'
99
-          }, {
100
-            offset: 1, color: '#6DA6FE00'
101
-          }],
102
-          global: false
103
-        }}
75
+      yAxis: [
76
+        {
77
+          type: 'value',
78
+          position: 'left',
79
+          axisLabel: { color: '#fff', fontSize: 14 },
80
+          axisLine: { lineStyle: { color: '#fff' } },
81
+          splitLine: { lineStyle: { color: '#344067' } }
82
+        },
83
+      ],
84
+      series: group.map((item, index) => {
85
+        return {
86
+          name: item.groupName,
87
+          data: item.seizeNums,
88
+          ...createItemConfig(index)
89
+        }
90
+      }),
91
+      tooltip: {
92
+        trigger: 'axis',
93
+        backgroundColor: 'rgba(13,80,122,1)',
94
+        borderColor: '#70CFE7',
95
+        textStyle: { color: '#fff' }
104 96
       }
105
-    ],
106
-    tooltip: {
107
-      trigger: 'axis',
108
-      backgroundColor: 'rgba(13,80,122,1)',
109
-      borderColor: '#70CFE7',
110
-      textStyle: { color: '#fff' }
111 97
     }
112
-  }
113
-})
114
-
115
-useECharts(bar, setChartsOptionsBar);
98
+  })
116 99
 
100
+  useECharts(bar, setChartsOptionsBar);
117 101
 </script>
118 102
 
119 103
 <style lang="scss" scoped></style>

+ 4 - 2
src/views/portraitManagement/components/SeizedNumAll.vue

@@ -15,8 +15,9 @@ const props = defineProps({
15 15
     default: () => ([])
16 16
   }
17 17
 })
18
+
19
+
18 20
 const setChartsOptionsBar = computed(() => {
19
-  const hours = Array.from({length: 24}, (_, i) => `${i.toString().padStart(2, '0')}:00`)
20 21
   return {
21 22
     grid: {
22 23
       top: 40,
@@ -26,6 +27,7 @@ const setChartsOptionsBar = computed(() => {
26 27
     },
27 28
     xAxis: {
28 29
       type: 'category',
30
+      data: props.chartsData.map(item => item.recordDate ),
29 31
       axisLabel: { show: false },
30 32
       axisLine: { show: false },
31 33
       boundaryGap: false
@@ -43,7 +45,7 @@ const setChartsOptionsBar = computed(() => {
43 45
       {
44 46
         name: '查获数',
45 47
         type: 'line',
46
-        data: props.chartsData.map(item => item.num),
48
+        data: props.chartsData.map(item => item.seizeQuantity),
47 49
         smooth: true,
48 50
         itemStyle: { color: '#71B138' },
49 51
         lineStyle: { color: '#71B138' }

+ 2 - 2
src/views/portraitManagement/components/SeizedWorkArea.vue

@@ -16,7 +16,7 @@ const props = defineProps({
16 16
   }
17 17
 })
18 18
 const setChartsOptionsBar = computed(() => {
19
-  const labels = props.chartsData.map(item => item.name)
19
+  const labels = props.chartsData.map(item => item.workArea)
20 20
   return {
21 21
     grid: {
22 22
       top: 50,
@@ -49,7 +49,7 @@ const setChartsOptionsBar = computed(() => {
49 49
       {
50 50
         name: '查获数量',
51 51
         type: 'bar',
52
-        data: props.chartsData.map(item => item.num),
52
+        data: props.chartsData.map(item => item.areaSeizeNum),
53 53
         itemStyle: {
54 54
           borderRadius: [5, 5, 0, 0],
55 55
           color: '#95E530',

+ 1 - 1
src/views/portraitManagement/components/TestArea.vue

@@ -49,7 +49,7 @@ const setChartsOptionsBar = computed(() => {
49 49
       {
50 50
         name: '查获数量',
51 51
         type: 'bar',
52
-        data: props.chartsData.map(item => item.num),
52
+        data: props.chartsData.map(item => item.total),
53 53
         itemStyle: {
54 54
           borderRadius: [5, 5, 0, 0],
55 55
           color: '#9963FB',

+ 2 - 2
src/views/portraitManagement/components/TestItems.vue

@@ -31,7 +31,7 @@ const setChartsOptionsBar = computed(() => {
31 31
       textStyle: { color: '#fff' }
32 32
     },
33 33
     legend: {
34
-      top: 'center',
34
+      top: '10%',
35 35
       left: '0%',
36 36
       orient: 'vertical',
37 37
       textStyle: { color: '#fff' }
@@ -41,7 +41,7 @@ const setChartsOptionsBar = computed(() => {
41 41
       radius: ['0%', '60%'],
42 42
       data: props.chartsData.map(item => {
43 43
         return {
44
-          value: item.num,
44
+          value: item.total,
45 45
           name: item.name
46 46
         }
47 47
       }),

+ 2 - 2
src/views/portraitManagement/components/TestResult.vue

@@ -31,7 +31,7 @@ const setChartsOptionsBar = computed(() => {
31 31
       textStyle: { color: '#fff' }
32 32
     },
33 33
     legend: {
34
-      top: 'center',
34
+      top: '10%',
35 35
       left: '0%',
36 36
       orient: 'vertical',
37 37
       textStyle: { color: '#fff' }
@@ -41,7 +41,7 @@ const setChartsOptionsBar = computed(() => {
41 41
       radius: ['0%', '60%'],
42 42
       data: props.chartsData.map(item => {
43 43
         return {
44
-          value: item.num,
44
+          value: item.total,
45 45
           name: item.name
46 46
         }
47 47
       }),

+ 154 - 63
src/views/portraitManagement/deptProfile/component/runData.vue

@@ -1,47 +1,47 @@
1 1
 <template>
2 2
   <div class="operation-data">
3 3
     <div class="row">
4
-      <ChannelCheckChart :chartsData="chartsData" />
4
+      <ChannelCheckChart :chartsData="channelCheckData" />
5 5
     </div>
6 6
     <div class="row">
7 7
       <div class="col">
8
-        <SeizedInfo :chartsData="chartsData"/>
8
+        <SeizedInfo :chartsData="countSeizureInfoItemData"/>
9 9
       </div>
10 10
       <div class="col">
11
-        <SeizedItems :chartsData="chartsData" />
11
+        <SeizedItems :chartsData="countSeizeSubjectCategoryQuantityData" />
12 12
       </div>
13 13
     </div>
14 14
     <div class="row">
15 15
       <div class="col">
16
-        <SeizedNumAll :chartsData="chartsData"/>
16
+        <SeizedNumAll :chartsData="countSeizureTotalQuantityData"/>
17 17
       </div>
18 18
       <div class="col">
19
-        <SeizedNum :chartsData="chartsData" />
19
+        <SeizedNum :chartsData="countSeizureSingleQuantityData" />
20 20
       </div>
21 21
     </div>
22 22
     <div class="row">
23
-      <SeizedWorkArea :chartsData="chartsData" />
23
+      <SeizedWorkArea :chartsData="countSeizeAreaQuantityData" />
24 24
     </div>
25 25
     <div class="row">
26 26
       <div class="col">
27
-        <EventItems :chartsData="chartsData"  />
27
+        <EventItems :chartsData="countSeizureStatsItemData"  />
28 28
       </div>
29 29
       <div class="col">
30
-        <EventType :chartsData="chartsData"  />
30
+        <EventType :chartsData="countSeizureStatsTypeData"  />
31 31
       </div>
32 32
       <div class="col">
33
-        <EventWorkArea :chartsData="chartsData"  />
33
+        <EventWorkArea :chartsData="countSeizureStatsPostData"  />
34 34
       </div>
35 35
     </div>
36 36
     <div class="row">
37 37
       <div class="col">
38
-        <TestItems :chartsData="chartsData"  />
38
+        <TestItems :chartsData="securityTestItemClassificationData"  />
39 39
       </div>
40 40
       <div class="col">
41
-        <TestResult :chartsData="chartsData"  />
41
+        <TestResult :chartsData="securityTestPassingStatusData"  />
42 42
       </div>
43 43
       <div class="col">
44
-        <TestArea :chartsData="chartsData"  />
44
+        <TestArea :chartsData="securityTestRegionData"  />
45 45
       </div>
46 46
     </div>
47 47
     <div class="row">
@@ -71,7 +71,23 @@ import TestResult from '../../components/TestResult.vue';
71 71
 import TestArea from '../../components/TestArea.vue';
72 72
 import SupervisionDistribution from '../../components/SupervisionDistribution.vue';
73 73
 import InterceptionDistribution from '../../components/InterceptionDistribution.vue';
74
-import { realtimeInterceptionItem, supervisionProblemPosition } from '@/api/portraitManagement/portraitManagement';
74
+import { 
75
+  countLanePeakThroughput,
76
+  countStationHourlyThroughput,
77
+  countSeizureInfoItem,
78
+  countSeizeSubjectCategoryQuantity,
79
+  countSeizureTotalQuantity,
80
+  countSeizureSingleQuantity,
81
+  countSeizeAreaQuantity,
82
+  countSeizureStatsItem,
83
+  countSeizureStatsType,
84
+  countSeizureStatsPost,
85
+  securityTestItemClassification,
86
+  securityTestPassingStatus,
87
+  securityTestRegion,
88
+  realtimeInterceptionItem,
89
+  supervisionProblemPosition,
90
+} from '@/api/portraitManagement/portraitManagement';
75 91
 
76 92
 const props = defineProps({
77 93
   queryParams: {
@@ -80,57 +96,116 @@ const props = defineProps({
80 96
   }
81 97
 })
82 98
 
83
-const chartsData = ref([
84
-  {
85
-    num: 370,
86
-    num1: 330,
87
-    num2: 120,
88
-    num3: 470,
89
-    num4: 570,
90
-    rate: 30,
91
-    name: '打火机'
92
-  },
93
-  {
94
-    num: 330,
95
-    num1: 430,
96
-    num2: 420,
97
-    num3: 430,
98
-    num4: 150,
99
-    rate: 60,
100
-    name: '火柴'
101
-  },
102
-  {
103
-    num: 410,
104
-    num1: 310,
105
-    num2: 220,
106
-    num3: 370,
107
-    num4: 510,
108
-    rate: 35,
109
-    name: '刀具'
110
-  },
111
-  {
112
-    num: 570,
113
-    num1: 440,
114
-    num2: 420,
115
-    num3: 410,
116
-    num4: 470,
117
-    rate: 80,
118
-    name: '充电宝'
119
-  },
120
-  {
121
-    num: 340,
122
-    num1: 330,
123
-    num2: 620,
124
-    num3: 370,
125
-    num4: 170,
126
-    rate: 60,
127
-    name: '烟火'
128
-  },
129
-])
99
+const channelCheckData = ref([])
100
+const invokerCountLanePeakThroughput = () => {
101
+  countLanePeakThroughput(props.queryParams).then(res => {
102
+    if (res.code === 200 && res.data) {
103
+      channelCheckData.value = res.data || []
104
+    }
105
+  })
106
+}
130 107
 
131
-const supervisionData = ref([])
132
-const interceptionData = ref([])
108
+const countSeizureInfoItemData = ref({ totalSeizeNum: 0, itemList: [] })
109
+const invokerCountSeizureInfoItem = () => {
110
+  countSeizureInfoItem(props.queryParams).then(res => {
111
+    if (res.code === 200 && res.data) {
112
+      countSeizureInfoItemData.value = res.data || { totalSeizeNum: 0, itemList: [] }
113
+    }
114
+  })
115
+}
116
+
117
+const countSeizeSubjectCategoryQuantityData = ref([])
118
+const invokerCountSeizeSubjectCategoryQuantity = () => {
119
+  countSeizeSubjectCategoryQuantity(props.queryParams).then(res => {
120
+    if (res.code === 200 && res.data) {
121
+      countSeizureInfoItemData.value = res.data || []
122
+    }
123
+  })
124
+}
125
+
126
+const countSeizureTotalQuantityData = ref([])
127
+const invokerCountSeizureTotalQuantity = () => {
128
+  countSeizureTotalQuantity(props.queryParams).then(res => {
129
+    if (res.code === 200 && res.data) {
130
+      countSeizureTotalQuantityData.value = res.data || []
131
+      console.log(countSeizureTotalQuantityData.value);
132
+      
133
+    }
134
+  })
135
+}
136
+
137
+const countSeizureSingleQuantityData = ref([])
138
+const invokerCountSeizureSingleQuantity = () => {
139
+  countSeizureSingleQuantity(props.queryParams).then(res => {
140
+    if (res.code === 200 && res.data) {
141
+      countSeizureSingleQuantityData.value = res.data || []
142
+    }
143
+  })
144
+}
133 145
 
146
+const countSeizeAreaQuantityData = ref([])
147
+const invokerCountSeizeAreaQuantity = () => {
148
+  countSeizeAreaQuantity(props.queryParams).then(res => {
149
+    if (res.code === 200 && res.data) {
150
+      countSeizeAreaQuantityData.value = res.data || []
151
+    }
152
+  })
153
+}
154
+
155
+const countSeizureStatsItemData = ref([])
156
+const invokerCountSeizureStatsItem = () => {
157
+  countSeizureStatsItem(props.queryParams).then(res => {
158
+    if (res.code === 200 && res.data) {
159
+      countSeizureStatsItemData.value = res.data || []
160
+    }
161
+  })
162
+}
163
+const countSeizureStatsTypeData = ref([])
164
+const invokerCountSeizureStatsType = () => {
165
+  countSeizureStatsType(props.queryParams).then(res => {
166
+    if (res.code === 200 && res.data) {
167
+      countSeizureStatsTypeData.value = res.data || []
168
+    }
169
+  })
170
+}
171
+const countSeizureStatsPostData = ref([])
172
+const invokerCountSeizureStatsPost = () => {
173
+  countSeizureStatsPost(props.queryParams).then(res => {
174
+    if (res.code === 200 && res.data) {
175
+      countSeizureStatsPostData.value = res.data || []
176
+    }
177
+  })
178
+}
179
+
180
+const securityTestItemClassificationData = ref([])
181
+const invokerSecurityTestItemClassification = () => {
182
+  securityTestItemClassification(props.queryParams).then(res => {
183
+    if (res.code === 200 && res.data) {
184
+      securityTestItemClassificationData.value = res.data || []
185
+    }
186
+  })
187
+}
188
+
189
+const securityTestPassingStatusData = ref([])
190
+const invokerSecurityTestPassingStatus = () => {
191
+    securityTestPassingStatus(props.queryParams).then(res => {
192
+    if (res.code === 200 && res.data) {
193
+      securityTestPassingStatusData.value = res.data || []
194
+    }
195
+  })
196
+}
197
+const securityTestRegionData = ref([])
198
+const invokerSecurityTestRegion = () => {
199
+    securityTestRegion(props.queryParams).then(res => {
200
+    if (res.code === 200 && res.data) {
201
+      securityTestRegionData.value = res.data || []
202
+    }
203
+  })
204
+}
205
+
206
+
207
+
208
+const supervisionData = ref([])
134 209
 const fetchSupervisionData = async () => {
135 210
   try {
136 211
     const res = await supervisionProblemPosition(props.queryParams)
@@ -145,6 +220,7 @@ const fetchSupervisionData = async () => {
145 220
   }
146 221
 }
147 222
 
223
+const interceptionData = ref([])
148 224
 const fetchInterceptionData = async () => {
149 225
   try {
150 226
     const res = await realtimeInterceptionItem(props.queryParams)
@@ -160,10 +236,22 @@ const fetchInterceptionData = async () => {
160 236
 }
161 237
 
162 238
 const fetchData = () => {
239
+
240
+  invokerCountLanePeakThroughput()
241
+  invokerCountSeizureInfoItem()
242
+  invokerCountSeizeSubjectCategoryQuantity()
243
+  invokerCountSeizureTotalQuantity()
244
+  invokerCountSeizureSingleQuantity()
245
+  invokerCountSeizeAreaQuantity()
246
+  invokerCountSeizureStatsItem()
247
+  invokerCountSeizureStatsType()
248
+  invokerCountSeizureStatsPost()
249
+  invokerSecurityTestItemClassification()
250
+  invokerSecurityTestPassingStatus()
251
+  invokerSecurityTestRegion()
163 252
   fetchSupervisionData()
164 253
   fetchInterceptionData()
165 254
 }
166
-
167 255
 watch(() => props.queryParams, () => {
168 256
   fetchData()
169 257
 }, { deep: true, immediate: true })
@@ -178,10 +266,13 @@ watch(() => props.queryParams, () => {
178 266
     display: flex;
179 267
     column-gap: 15px;
180 268
     height: 360px;
269
+    width: 100%;
270
+    overflow: hidden;
181 271
     margin-bottom: 15px;
182 272
     .col {
183 273
       flex: 1;
184 274
       height: 100%;
275
+      min-width: 0px;
185 276
       :deep(.info-card) {
186 277
         height: 100%;
187 278
       }

+ 155 - 63
src/views/portraitManagement/groupProfile/component/runData.vue

@@ -1,47 +1,47 @@
1 1
 <template>
2 2
   <div class="operation-data">
3 3
     <div class="row">
4
-      <ChannelCheckChart :chartsData="chartsData" />
4
+      <ChannelCheckChart :chartsData="channelCheckData" />
5 5
     </div>
6 6
     <div class="row">
7 7
       <div class="col">
8
-        <SeizedInfo :chartsData="chartsData"/>
8
+        <SeizedInfo :chartsData="countSeizureInfoItemData"/>
9 9
       </div>
10 10
       <div class="col">
11
-        <SeizedItems :chartsData="chartsData" />
11
+        <SeizedItems :chartsData="countSeizeSubjectCategoryQuantityData" />
12 12
       </div>
13 13
     </div>
14 14
     <div class="row">
15 15
       <div class="col">
16
-        <SeizedNumAll :chartsData="chartsData"/>
16
+        <SeizedNumAll :chartsData="countSeizureTotalQuantityData"/>
17 17
       </div>
18 18
       <div class="col">
19
-        <SeizedNum :chartsData="chartsData" />
19
+        <SeizedNum :chartsData="countSeizureSingleQuantityData" />
20 20
       </div>
21 21
     </div>
22 22
     <div class="row">
23
-      <SeizedWorkArea :chartsData="chartsData" />
23
+      <SeizedWorkArea :chartsData="countSeizeAreaQuantityData" />
24 24
     </div>
25 25
     <div class="row">
26 26
       <div class="col">
27
-        <EventItems :chartsData="chartsData"  />
27
+        <EventItems :chartsData="countSeizureStatsItemData"  />
28 28
       </div>
29 29
       <div class="col">
30
-        <EventType :chartsData="chartsData"  />
30
+        <EventType :chartsData="countSeizureStatsTypeData"  />
31 31
       </div>
32 32
       <div class="col">
33
-        <EventWorkArea :chartsData="chartsData"  />
33
+        <EventWorkArea :chartsData="countSeizureStatsPostData"  />
34 34
       </div>
35 35
     </div>
36 36
     <div class="row">
37 37
       <div class="col">
38
-        <TestItems :chartsData="chartsData"  />
38
+        <TestItems :chartsData="securityTestItemClassificationData"  />
39 39
       </div>
40 40
       <div class="col">
41
-        <TestResult :chartsData="chartsData"  />
41
+        <TestResult :chartsData="securityTestPassingStatusData"  />
42 42
       </div>
43 43
       <div class="col">
44
-        <TestArea :chartsData="chartsData"  />
44
+        <TestArea :chartsData="securityTestRegionData"  />
45 45
       </div>
46 46
     </div>
47 47
     <div class="row">
@@ -71,7 +71,23 @@ import TestResult from '../../components/TestResult.vue';
71 71
 import TestArea from '../../components/TestArea.vue';
72 72
 import SupervisionDistribution from '../../components/SupervisionDistribution.vue';
73 73
 import InterceptionDistribution from '../../components/InterceptionDistribution.vue';
74
-import { realtimeInterceptionItem, supervisionProblemPosition } from '@/api/portraitManagement/portraitManagement';
74
+import { 
75
+  countLanePeakThroughput,
76
+  countStationHourlyThroughput,
77
+  countSeizureInfoItem,
78
+  countSeizeSubjectCategoryQuantity,
79
+  countSeizureTotalQuantity,
80
+  countSeizureSingleQuantity,
81
+  countSeizeAreaQuantity,
82
+  countSeizureStatsItem,
83
+  countSeizureStatsType,
84
+  countSeizureStatsPost,
85
+  securityTestItemClassification,
86
+  securityTestPassingStatus,
87
+  securityTestRegion,
88
+  realtimeInterceptionItem,
89
+  supervisionProblemPosition,
90
+} from '@/api/portraitManagement/portraitManagement';
75 91
 
76 92
 const props = defineProps({
77 93
   queryParams: {
@@ -80,57 +96,117 @@ const props = defineProps({
80 96
   }
81 97
 })
82 98
 
83
-const chartsData = ref([
84
-  {
85
-    num: 370,
86
-    num1: 330,
87
-    num2: 120,
88
-    num3: 470,
89
-    num4: 570,
90
-    rate: 30,
91
-    name: '打火机'
92
-  },
93
-  {
94
-    num: 330,
95
-    num1: 430,
96
-    num2: 420,
97
-    num3: 430,
98
-    num4: 150,
99
-    rate: 60,
100
-    name: '火柴'
101
-  },
102
-  {
103
-    num: 410,
104
-    num1: 310,
105
-    num2: 220,
106
-    num3: 370,
107
-    num4: 510,
108
-    rate: 35,
109
-    name: '刀具'
110
-  },
111
-  {
112
-    num: 570,
113
-    num1: 440,
114
-    num2: 420,
115
-    num3: 410,
116
-    num4: 470,
117
-    rate: 80,
118
-    name: '充电宝'
119
-  },
120
-  {
121
-    num: 340,
122
-    num1: 330,
123
-    num2: 620,
124
-    num3: 370,
125
-    num4: 170,
126
-    rate: 60,
127
-    name: '烟火'
128
-  },
129
-])
130 99
 
131
-const supervisionData = ref([])
132
-const interceptionData = ref([])
100
+const channelCheckData = ref([])
101
+const invokerCountLanePeakThroughput = () => {
102
+  countLanePeakThroughput(props.queryParams).then(res => {
103
+    if (res.code === 200 && res.data) {
104
+      channelCheckData.value = res.data || []
105
+    }
106
+  })
107
+}
108
+
109
+const countSeizureInfoItemData = ref({ totalSeizeNum: 0, itemList: [] })
110
+const invokerCountSeizureInfoItem = () => {
111
+  countSeizureInfoItem(props.queryParams).then(res => {
112
+    if (res.code === 200 && res.data) {
113
+      countSeizureInfoItemData.value = res.data || { totalSeizeNum: 0, itemList: [] }
114
+    }
115
+  })
116
+}
117
+
118
+const countSeizeSubjectCategoryQuantityData = ref([])
119
+const invokerCountSeizeSubjectCategoryQuantity = () => {
120
+  countSeizeSubjectCategoryQuantity(props.queryParams).then(res => {
121
+    if (res.code === 200 && res.data) {
122
+      countSeizureInfoItemData.value = res.data || []
123
+    }
124
+  })
125
+}
126
+
127
+const countSeizureTotalQuantityData = ref([])
128
+const invokerCountSeizureTotalQuantity = () => {
129
+  countSeizureTotalQuantity(props.queryParams).then(res => {
130
+    if (res.code === 200 && res.data) {
131
+      countSeizureTotalQuantityData.value = res.data || []
132
+      console.log(countSeizureTotalQuantityData.value);
133
+      
134
+    }
135
+  })
136
+}
137
+
138
+const countSeizureSingleQuantityData = ref([])
139
+const invokerCountSeizureSingleQuantity = () => {
140
+  countSeizureSingleQuantity(props.queryParams).then(res => {
141
+    if (res.code === 200 && res.data) {
142
+      countSeizureSingleQuantityData.value = res.data || []
143
+    }
144
+  })
145
+}
146
+
147
+const countSeizeAreaQuantityData = ref([])
148
+const invokerCountSeizeAreaQuantity = () => {
149
+  countSeizeAreaQuantity(props.queryParams).then(res => {
150
+    if (res.code === 200 && res.data) {
151
+      countSeizeAreaQuantityData.value = res.data || []
152
+    }
153
+  })
154
+}
155
+
156
+const countSeizureStatsItemData = ref([])
157
+const invokerCountSeizureStatsItem = () => {
158
+  countSeizureStatsItem(props.queryParams).then(res => {
159
+    if (res.code === 200 && res.data) {
160
+      countSeizureStatsItemData.value = res.data || []
161
+    }
162
+  })
163
+}
164
+const countSeizureStatsTypeData = ref([])
165
+const invokerCountSeizureStatsType = () => {
166
+  countSeizureStatsType(props.queryParams).then(res => {
167
+    if (res.code === 200 && res.data) {
168
+      countSeizureStatsTypeData.value = res.data || []
169
+    }
170
+  })
171
+}
172
+const countSeizureStatsPostData = ref([])
173
+const invokerCountSeizureStatsPost = () => {
174
+  countSeizureStatsPost(props.queryParams).then(res => {
175
+    if (res.code === 200 && res.data) {
176
+      countSeizureStatsPostData.value = res.data || []
177
+    }
178
+  })
179
+}
180
+
181
+const securityTestItemClassificationData = ref([])
182
+const invokerSecurityTestItemClassification = () => {
183
+  securityTestItemClassification(props.queryParams).then(res => {
184
+    if (res.code === 200 && res.data) {
185
+      securityTestItemClassificationData.value = res.data || []
186
+    }
187
+  })
188
+}
133 189
 
190
+const securityTestPassingStatusData = ref([])
191
+const invokerSecurityTestPassingStatus = () => {
192
+    securityTestPassingStatus(props.queryParams).then(res => {
193
+    if (res.code === 200 && res.data) {
194
+      securityTestPassingStatusData.value = res.data || []
195
+    }
196
+  })
197
+}
198
+const securityTestRegionData = ref([])
199
+const invokerSecurityTestRegion = () => {
200
+    securityTestRegion(props.queryParams).then(res => {
201
+    if (res.code === 200 && res.data) {
202
+      securityTestRegionData.value = res.data || []
203
+    }
204
+  })
205
+}
206
+
207
+
208
+
209
+const supervisionData = ref([])
134 210
 const fetchSupervisionData = async () => {
135 211
   try {
136 212
     const res = await supervisionProblemPosition(props.queryParams)
@@ -145,6 +221,7 @@ const fetchSupervisionData = async () => {
145 221
   }
146 222
 }
147 223
 
224
+const interceptionData = ref([])
148 225
 const fetchInterceptionData = async () => {
149 226
   try {
150 227
     const res = await realtimeInterceptionItem(props.queryParams)
@@ -160,10 +237,22 @@ const fetchInterceptionData = async () => {
160 237
 }
161 238
 
162 239
 const fetchData = () => {
240
+
241
+  invokerCountLanePeakThroughput()
242
+  invokerCountSeizureInfoItem()
243
+  invokerCountSeizeSubjectCategoryQuantity()
244
+  invokerCountSeizureTotalQuantity()
245
+  invokerCountSeizureSingleQuantity()
246
+  invokerCountSeizeAreaQuantity()
247
+  invokerCountSeizureStatsItem()
248
+  invokerCountSeizureStatsType()
249
+  invokerCountSeizureStatsPost()
250
+  invokerSecurityTestItemClassification()
251
+  invokerSecurityTestPassingStatus()
252
+  invokerSecurityTestRegion()
163 253
   fetchSupervisionData()
164 254
   fetchInterceptionData()
165 255
 }
166
-
167 256
 watch(() => props.queryParams, () => {
168 257
   fetchData()
169 258
 }, { deep: true, immediate: true })
@@ -178,10 +267,13 @@ watch(() => props.queryParams, () => {
178 267
     display: flex;
179 268
     column-gap: 15px;
180 269
     height: 360px;
270
+    width: 100%;
271
+    overflow: hidden;
181 272
     margin-bottom: 15px;
182 273
     .col {
183 274
       flex: 1;
184 275
       height: 100%;
276
+      min-width: 0px;
185 277
       :deep(.info-card) {
186 278
         height: 100%;
187 279
       }

+ 9 - 6
src/views/portraitManagement/groupProfile/index.vue

@@ -1,7 +1,9 @@
1 1
 <template>
2 2
   <div class="group-profile-page">
3 3
     <Page title="安检人事管理可视化大屏" :tabs="['能力画像', '运行数据']" @tab-change="handleTabChange">
4
-      <SearchBar v-model:visible="searchVisible" @search="handleSearch"  :deptType="'TEAMS'" />
4
+      <div style="margin-bottom: 30px;">
5
+        <SearchBar v-model:visible="searchVisible" @search="handleSearch"  :deptType="'TEAMS'" />
6
+      </div>
5 7
       <PentagonGroup :items="pentagonItems" />
6 8
       <Profile v-if="activeTab === 0" :query-params="queryParams" />
7 9
       <RunData v-else :query-params="queryParams"/>
@@ -11,7 +13,7 @@
11 13
 </template>
12 14
 
13 15
 <script setup>
14
-import { ref } from 'vue'
16
+import { ref, computed } from 'vue'
15 17
 import Page from '../components/page.vue'
16 18
 import SearchBar from '../components/SearchBar.vue'
17 19
 import Profile from './component/profile.vue'
@@ -27,7 +29,7 @@ const activeTab = ref(0)
27 29
 const searchVisible = ref(false)
28 30
 const queryParams = ref({})
29 31
 
30
-const pentagonItems = ref([
32
+const pentagonItems = computed(() => [
31 33
   {
32 34
     value: '88',
33 35
     label: '综合得分',
@@ -74,7 +76,7 @@ const pentagonItems = ref([
74 76
     bgGradientEnd: 'rgba(15,70,250,0.2)'
75 77
   },
76 78
   {
77
-    value: '周游波小组',
79
+    value: groupName.value,
78 80
     label: '',
79 81
     iconPath: zu02Icon,
80 82
     iconStyle: {
@@ -155,9 +157,10 @@ const pentagonItems = ref([
155 157
     bgGradientEnd: 'rgba(15,70,250,0.2)'
156 158
   }
157 159
 ])
158
-
160
+const groupName = ref('')
159 161
 const handleSearch = (params) => {
160
-  queryParams.value = params
162
+  queryParams.value = { startDate: params.beginTime, endDate: params.endTime, groupId: params.groupId}
163
+  groupName.value = params.groupName
161 164
 }
162 165
 
163 166
 const handleTabChange = (index) => {

+ 155 - 63
src/views/portraitManagement/teamProfile/component/runData.vue

@@ -1,47 +1,47 @@
1 1
 <template>
2 2
   <div class="operation-data">
3 3
     <div class="row">
4
-      <ChannelCheckChart :chartsData="chartsData" />
4
+      <ChannelCheckChart :chartsData="channelCheckData" />
5 5
     </div>
6 6
     <div class="row">
7 7
       <div class="col">
8
-        <SeizedInfo :chartsData="chartsData"/>
8
+        <SeizedInfo :chartsData="countSeizureInfoItemData"/>
9 9
       </div>
10 10
       <div class="col">
11
-        <SeizedItems :chartsData="chartsData" />
11
+        <SeizedItems :chartsData="countSeizeSubjectCategoryQuantityData" />
12 12
       </div>
13 13
     </div>
14 14
     <div class="row">
15 15
       <div class="col">
16
-        <SeizedNumAll :chartsData="chartsData"/>
16
+        <SeizedNumAll :chartsData="countSeizureTotalQuantityData"/>
17 17
       </div>
18 18
       <div class="col">
19
-        <SeizedNum :chartsData="chartsData" />
19
+        <SeizedNum :chartsData="countSeizureSingleQuantityData" />
20 20
       </div>
21 21
     </div>
22 22
     <div class="row">
23
-      <SeizedWorkArea :chartsData="chartsData" />
23
+      <SeizedWorkArea :chartsData="countSeizeAreaQuantityData" />
24 24
     </div>
25 25
     <div class="row">
26 26
       <div class="col">
27
-        <EventItems :chartsData="chartsData"  />
27
+        <EventItems :chartsData="countSeizureStatsItemData"  />
28 28
       </div>
29 29
       <div class="col">
30
-        <EventType :chartsData="chartsData"  />
30
+        <EventType :chartsData="countSeizureStatsTypeData"  />
31 31
       </div>
32 32
       <div class="col">
33
-        <EventWorkArea :chartsData="chartsData"  />
33
+        <EventWorkArea :chartsData="countSeizureStatsPostData"  />
34 34
       </div>
35 35
     </div>
36 36
     <div class="row">
37 37
       <div class="col">
38
-        <TestItems :chartsData="chartsData"  />
38
+        <TestItems :chartsData="securityTestItemClassificationData"  />
39 39
       </div>
40 40
       <div class="col">
41
-        <TestResult :chartsData="chartsData"  />
41
+        <TestResult :chartsData="securityTestPassingStatusData"  />
42 42
       </div>
43 43
       <div class="col">
44
-        <TestArea :chartsData="chartsData"  />
44
+        <TestArea :chartsData="securityTestRegionData"  />
45 45
       </div>
46 46
     </div>
47 47
     <div class="row">
@@ -71,7 +71,23 @@ import TestResult from '../../components/TestResult.vue';
71 71
 import TestArea from '../../components/TestArea.vue';
72 72
 import SupervisionDistribution from '../../components/SupervisionDistribution.vue';
73 73
 import InterceptionDistribution from '../../components/InterceptionDistribution.vue';
74
-import { realtimeInterceptionItem, supervisionProblemPosition } from '@/api/portraitManagement/portraitManagement';
74
+import { 
75
+  countLanePeakThroughput,
76
+  countStationHourlyThroughput,
77
+  countSeizureInfoItem,
78
+  countSeizeSubjectCategoryQuantity,
79
+  countSeizureTotalQuantity,
80
+  countSeizureSingleQuantity,
81
+  countSeizeAreaQuantity,
82
+  countSeizureStatsItem,
83
+  countSeizureStatsType,
84
+  countSeizureStatsPost,
85
+  securityTestItemClassification,
86
+  securityTestPassingStatus,
87
+  securityTestRegion,
88
+  realtimeInterceptionItem,
89
+  supervisionProblemPosition,
90
+} from '@/api/portraitManagement/portraitManagement';
75 91
 
76 92
 const props = defineProps({
77 93
   queryParams: {
@@ -80,57 +96,117 @@ const props = defineProps({
80 96
   }
81 97
 })
82 98
 
83
-const chartsData = ref([
84
-  {
85
-    num: 370,
86
-    num1: 330,
87
-    num2: 120,
88
-    num3: 470,
89
-    num4: 570,
90
-    rate: 30,
91
-    name: '打火机'
92
-  },
93
-  {
94
-    num: 330,
95
-    num1: 430,
96
-    num2: 420,
97
-    num3: 430,
98
-    num4: 150,
99
-    rate: 60,
100
-    name: '火柴'
101
-  },
102
-  {
103
-    num: 410,
104
-    num1: 310,
105
-    num2: 220,
106
-    num3: 370,
107
-    num4: 510,
108
-    rate: 35,
109
-    name: '刀具'
110
-  },
111
-  {
112
-    num: 570,
113
-    num1: 440,
114
-    num2: 420,
115
-    num3: 410,
116
-    num4: 470,
117
-    rate: 80,
118
-    name: '充电宝'
119
-  },
120
-  {
121
-    num: 340,
122
-    num1: 330,
123
-    num2: 620,
124
-    num3: 370,
125
-    num4: 170,
126
-    rate: 60,
127
-    name: '烟火'
128
-  },
129
-])
130 99
 
131
-const supervisionData = ref([])
132
-const interceptionData = ref([])
100
+const channelCheckData = ref([])
101
+const invokerCountLanePeakThroughput = () => {
102
+  countLanePeakThroughput(props.queryParams).then(res => {
103
+    if (res.code === 200 && res.data) {
104
+      channelCheckData.value = res.data || []
105
+    }
106
+  })
107
+}
108
+
109
+const countSeizureInfoItemData = ref({ totalSeizeNum: 0, itemList: [] })
110
+const invokerCountSeizureInfoItem = () => {
111
+  countSeizureInfoItem(props.queryParams).then(res => {
112
+    if (res.code === 200 && res.data) {
113
+      countSeizureInfoItemData.value = res.data || { totalSeizeNum: 0, itemList: [] }
114
+    }
115
+  })
116
+}
117
+
118
+const countSeizeSubjectCategoryQuantityData = ref([])
119
+const invokerCountSeizeSubjectCategoryQuantity = () => {
120
+  countSeizeSubjectCategoryQuantity(props.queryParams).then(res => {
121
+    if (res.code === 200 && res.data) {
122
+      countSeizureInfoItemData.value = res.data || []
123
+    }
124
+  })
125
+}
126
+
127
+const countSeizureTotalQuantityData = ref([])
128
+const invokerCountSeizureTotalQuantity = () => {
129
+  countSeizureTotalQuantity(props.queryParams).then(res => {
130
+    if (res.code === 200 && res.data) {
131
+      countSeizureTotalQuantityData.value = res.data || []
132
+      console.log(countSeizureTotalQuantityData.value);
133
+      
134
+    }
135
+  })
136
+}
137
+
138
+const countSeizureSingleQuantityData = ref([])
139
+const invokerCountSeizureSingleQuantity = () => {
140
+  countSeizureSingleQuantity(props.queryParams).then(res => {
141
+    if (res.code === 200 && res.data) {
142
+      countSeizureSingleQuantityData.value = res.data || []
143
+    }
144
+  })
145
+}
146
+
147
+const countSeizeAreaQuantityData = ref([])
148
+const invokerCountSeizeAreaQuantity = () => {
149
+  countSeizeAreaQuantity(props.queryParams).then(res => {
150
+    if (res.code === 200 && res.data) {
151
+      countSeizeAreaQuantityData.value = res.data || []
152
+    }
153
+  })
154
+}
155
+
156
+const countSeizureStatsItemData = ref([])
157
+const invokerCountSeizureStatsItem = () => {
158
+  countSeizureStatsItem(props.queryParams).then(res => {
159
+    if (res.code === 200 && res.data) {
160
+      countSeizureStatsItemData.value = res.data || []
161
+    }
162
+  })
163
+}
164
+const countSeizureStatsTypeData = ref([])
165
+const invokerCountSeizureStatsType = () => {
166
+  countSeizureStatsType(props.queryParams).then(res => {
167
+    if (res.code === 200 && res.data) {
168
+      countSeizureStatsTypeData.value = res.data || []
169
+    }
170
+  })
171
+}
172
+const countSeizureStatsPostData = ref([])
173
+const invokerCountSeizureStatsPost = () => {
174
+  countSeizureStatsPost(props.queryParams).then(res => {
175
+    if (res.code === 200 && res.data) {
176
+      countSeizureStatsPostData.value = res.data || []
177
+    }
178
+  })
179
+}
180
+
181
+const securityTestItemClassificationData = ref([])
182
+const invokerSecurityTestItemClassification = () => {
183
+  securityTestItemClassification(props.queryParams).then(res => {
184
+    if (res.code === 200 && res.data) {
185
+      securityTestItemClassificationData.value = res.data || []
186
+    }
187
+  })
188
+}
133 189
 
190
+const securityTestPassingStatusData = ref([])
191
+const invokerSecurityTestPassingStatus = () => {
192
+    securityTestPassingStatus(props.queryParams).then(res => {
193
+    if (res.code === 200 && res.data) {
194
+      securityTestPassingStatusData.value = res.data || []
195
+    }
196
+  })
197
+}
198
+const securityTestRegionData = ref([])
199
+const invokerSecurityTestRegion = () => {
200
+    securityTestRegion(props.queryParams).then(res => {
201
+    if (res.code === 200 && res.data) {
202
+      securityTestRegionData.value = res.data || []
203
+    }
204
+  })
205
+}
206
+
207
+
208
+
209
+const supervisionData = ref([])
134 210
 const fetchSupervisionData = async () => {
135 211
   try {
136 212
     const res = await supervisionProblemPosition(props.queryParams)
@@ -145,6 +221,7 @@ const fetchSupervisionData = async () => {
145 221
   }
146 222
 }
147 223
 
224
+const interceptionData = ref([])
148 225
 const fetchInterceptionData = async () => {
149 226
   try {
150 227
     const res = await realtimeInterceptionItem(props.queryParams)
@@ -160,10 +237,22 @@ const fetchInterceptionData = async () => {
160 237
 }
161 238
 
162 239
 const fetchData = () => {
240
+
241
+  invokerCountLanePeakThroughput()
242
+  invokerCountSeizureInfoItem()
243
+  invokerCountSeizeSubjectCategoryQuantity()
244
+  invokerCountSeizureTotalQuantity()
245
+  invokerCountSeizureSingleQuantity()
246
+  invokerCountSeizeAreaQuantity()
247
+  invokerCountSeizureStatsItem()
248
+  invokerCountSeizureStatsType()
249
+  invokerCountSeizureStatsPost()
250
+  invokerSecurityTestItemClassification()
251
+  invokerSecurityTestPassingStatus()
252
+  invokerSecurityTestRegion()
163 253
   fetchSupervisionData()
164 254
   fetchInterceptionData()
165 255
 }
166
-
167 256
 watch(() => props.queryParams, () => {
168 257
   fetchData()
169 258
 }, { deep: true, immediate: true })
@@ -178,10 +267,13 @@ watch(() => props.queryParams, () => {
178 267
     display: flex;
179 268
     column-gap: 15px;
180 269
     height: 360px;
270
+    width: 100%;
271
+    overflow: hidden;
181 272
     margin-bottom: 15px;
182 273
     .col {
183 274
       flex: 1;
184 275
       height: 100%;
276
+      min-width: 0px;
185 277
       :deep(.info-card) {
186 278
         height: 100%;
187 279
       }