Browse Source

feat: 运行数据图表联调

lixiangrui 3 weeks ago
parent
commit
93743a2f88

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

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

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

@@ -31,18 +31,20 @@ const setChartsOptionsBar = computed(() => {
31
       textStyle: { color: '#fff' }
31
       textStyle: { color: '#fff' }
32
     },
32
     },
33
     legend: {
33
     legend: {
34
-      top: 'center',
34
+      top: '10%',
35
       left: '0%',
35
       left: '0%',
36
       orient: 'vertical',
36
       orient: 'vertical',
37
       textStyle: { color: '#fff' }
37
       textStyle: { color: '#fff' }
38
     },
38
     },
39
     series: [{
39
     series: [{
40
       type: 'pie',
40
       type: 'pie',
41
+      avoidLabelOverlap: true, 
41
       radius: ['40%', '60%'],
42
       radius: ['40%', '60%'],
43
+      center: ['50%', '50%'], 
42
       data: props.chartsData.map(item => {
44
       data: props.chartsData.map(item => {
43
         return {
45
         return {
44
-          value: item.num,
45
-          name: item.name
46
+          value: item.itemNum,
47
+          name: item.itemName
46
         }
48
         }
47
       }),
49
       }),
48
       label: { show: true, color: '#fff', fontSize: 16, lineHeight: 20, formatter: '{b}\n{c}'  },
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
       textStyle: { color: '#fff' }
31
       textStyle: { color: '#fff' }
32
     },
32
     },
33
     legend: {
33
     legend: {
34
-      top: 'center',
34
+      top: '10%',
35
       left: '0%',
35
       left: '0%',
36
       orient: 'vertical',
36
       orient: 'vertical',
37
       textStyle: { color: '#fff' }
37
       textStyle: { color: '#fff' }
@@ -39,10 +39,11 @@ const setChartsOptionsBar = computed(() => {
39
     series: [{
39
     series: [{
40
       type: 'pie',
40
       type: 'pie',
41
       radius: ['40%', '60%'],
41
       radius: ['40%', '60%'],
42
+      center: ['50%', '50%'], 
42
       data: props.chartsData.map(item => {
43
       data: props.chartsData.map(item => {
43
         return {
44
         return {
44
-          value: item.num,
45
-          name: item.name
45
+          value: item.eventTypeNum,
46
+          name: item.eventTypeName
46
         }
47
         }
47
       }),
48
       }),
48
       label: { show: true, color: '#fff', fontSize: 16, lineHeight: 20, formatter: '{b}\n{c}'  },
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
 const setChartsOptionsBar = computed(() => {
18
 const setChartsOptionsBar = computed(() => {
19
-  const labels = props.chartsData.map(item => item.name)
19
+  const labels = props.chartsData.map(item => item.positionName)
20
   return {
20
   return {
21
     grid: {
21
     grid: {
22
       top: 50,
22
       top: 50,
@@ -49,7 +49,7 @@ const setChartsOptionsBar = computed(() => {
49
       {
49
       {
50
         name: '查获数量',
50
         name: '查获数量',
51
         type: 'bar',
51
         type: 'bar',
52
-        data: props.chartsData.map(item => item.num),
52
+        data: props.chartsData.map(item => item.positionNum),
53
         itemStyle: {
53
         itemStyle: {
54
           borderRadius: [5, 5, 0, 0],
54
           borderRadius: [5, 5, 0, 0],
55
           color: '#6DA6FE',
55
           color: '#6DA6FE',

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

@@ -1,5 +1,6 @@
1
 <template>
1
 <template>
2
   <div class="ep-topbar" @click="visible = false">
2
   <div class="ep-topbar" @click="visible = false">
3
+    <div class="ep-topbar-content">
3
     <div class="time-btns">
4
     <div class="time-btns">
4
       <div :class="currentTime === 'week' ? 'primary' : 'default'" @click="selectTime('week')">近一周</div>
5
       <div :class="currentTime === 'week' ? 'primary' : 'default'" @click="selectTime('week')">近一周</div>
5
       <div :class="currentTime === 'month' ? 'primary' : 'default'" @click="selectTime('month')">近一月</div>
6
       <div :class="currentTime === 'month' ? 'primary' : 'default'" @click="selectTime('month')">近一月</div>
@@ -38,6 +39,7 @@
38
         </div>
39
         </div>
39
       </div>
40
       </div>
40
     </el-popover>
41
     </el-popover>
42
+    </div>
41
   </div>
43
   </div>
42
 </template>
44
 </template>
43
 
45
 
@@ -136,6 +138,7 @@ const searchHandler = (query = {}) => {
136
     }
138
     }
137
   } else {
139
   } else {
138
     emit('search', queryParams)
140
     emit('search', queryParams)
141
+    visible.value = false
139
   }
142
   }
140
 }
143
 }
141
 
144
 
@@ -212,14 +215,22 @@ defineExpose({
212
 
215
 
213
 <style lang="scss" scoped>
216
 <style lang="scss" scoped>
214
 .ep-topbar {
217
 .ep-topbar {
215
-  display: flex;
216
-  align-items: center;
217
-  justify-content: flex-start;
218
+
218
   height: 60px;
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
   .time-btns {
235
   .time-btns {
225
     display: flex;
236
     display: flex;

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

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

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

@@ -41,8 +41,8 @@ const setChartsOptionsBar = computed(() => {
41
       radius: ['40%', '70%'],
41
       radius: ['40%', '70%'],
42
       data: props.chartsData.map(item => {
42
       data: props.chartsData.map(item => {
43
         return {
43
         return {
44
-          value: item.num,
45
-          name: item.name
44
+          value: item.itemNum,
45
+          name: item.itemName
46
         }
46
         }
47
       }),
47
       }),
48
       label: { show: true, color: '#fff', fontSize: 16, lineHeight: 20, formatter: '{b}\n{c}'  },
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
 </template>
5
 </template>
6
 
6
 
7
 <script setup>
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
           type: 'linear',
28
           type: 'linear',
51
           x: 0,
29
           x: 0,
52
           y: 0,
30
           y: 0,
53
           x2: 0,
31
           x2: 0,
54
           y2: 1,
32
           y2: 1,
55
           colorStops: [{
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
           global: false
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
 </script>
101
 </script>
118
 
102
 
119
 <style lang="scss" scoped></style>
103
 <style lang="scss" scoped></style>

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

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

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

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

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

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

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

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

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

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

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

@@ -1,47 +1,47 @@
1
 <template>
1
 <template>
2
   <div class="operation-data">
2
   <div class="operation-data">
3
     <div class="row">
3
     <div class="row">
4
-      <ChannelCheckChart :chartsData="chartsData" />
4
+      <ChannelCheckChart :chartsData="channelCheckData" />
5
     </div>
5
     </div>
6
     <div class="row">
6
     <div class="row">
7
       <div class="col">
7
       <div class="col">
8
-        <SeizedInfo :chartsData="chartsData"/>
8
+        <SeizedInfo :chartsData="countSeizureInfoItemData"/>
9
       </div>
9
       </div>
10
       <div class="col">
10
       <div class="col">
11
-        <SeizedItems :chartsData="chartsData" />
11
+        <SeizedItems :chartsData="countSeizeSubjectCategoryQuantityData" />
12
       </div>
12
       </div>
13
     </div>
13
     </div>
14
     <div class="row">
14
     <div class="row">
15
       <div class="col">
15
       <div class="col">
16
-        <SeizedNumAll :chartsData="chartsData"/>
16
+        <SeizedNumAll :chartsData="countSeizureTotalQuantityData"/>
17
       </div>
17
       </div>
18
       <div class="col">
18
       <div class="col">
19
-        <SeizedNum :chartsData="chartsData" />
19
+        <SeizedNum :chartsData="countSeizureSingleQuantityData" />
20
       </div>
20
       </div>
21
     </div>
21
     </div>
22
     <div class="row">
22
     <div class="row">
23
-      <SeizedWorkArea :chartsData="chartsData" />
23
+      <SeizedWorkArea :chartsData="countSeizeAreaQuantityData" />
24
     </div>
24
     </div>
25
     <div class="row">
25
     <div class="row">
26
       <div class="col">
26
       <div class="col">
27
-        <EventItems :chartsData="chartsData"  />
27
+        <EventItems :chartsData="countSeizureStatsItemData"  />
28
       </div>
28
       </div>
29
       <div class="col">
29
       <div class="col">
30
-        <EventType :chartsData="chartsData"  />
30
+        <EventType :chartsData="countSeizureStatsTypeData"  />
31
       </div>
31
       </div>
32
       <div class="col">
32
       <div class="col">
33
-        <EventWorkArea :chartsData="chartsData"  />
33
+        <EventWorkArea :chartsData="countSeizureStatsPostData"  />
34
       </div>
34
       </div>
35
     </div>
35
     </div>
36
     <div class="row">
36
     <div class="row">
37
       <div class="col">
37
       <div class="col">
38
-        <TestItems :chartsData="chartsData"  />
38
+        <TestItems :chartsData="securityTestItemClassificationData"  />
39
       </div>
39
       </div>
40
       <div class="col">
40
       <div class="col">
41
-        <TestResult :chartsData="chartsData"  />
41
+        <TestResult :chartsData="securityTestPassingStatusData"  />
42
       </div>
42
       </div>
43
       <div class="col">
43
       <div class="col">
44
-        <TestArea :chartsData="chartsData"  />
44
+        <TestArea :chartsData="securityTestRegionData"  />
45
       </div>
45
       </div>
46
     </div>
46
     </div>
47
     <div class="row">
47
     <div class="row">
@@ -71,7 +71,23 @@ import TestResult from '../../components/TestResult.vue';
71
 import TestArea from '../../components/TestArea.vue';
71
 import TestArea from '../../components/TestArea.vue';
72
 import SupervisionDistribution from '../../components/SupervisionDistribution.vue';
72
 import SupervisionDistribution from '../../components/SupervisionDistribution.vue';
73
 import InterceptionDistribution from '../../components/InterceptionDistribution.vue';
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
 const props = defineProps({
92
 const props = defineProps({
77
   queryParams: {
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
 const fetchSupervisionData = async () => {
209
 const fetchSupervisionData = async () => {
135
   try {
210
   try {
136
     const res = await supervisionProblemPosition(props.queryParams)
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
 const fetchInterceptionData = async () => {
224
 const fetchInterceptionData = async () => {
149
   try {
225
   try {
150
     const res = await realtimeInterceptionItem(props.queryParams)
226
     const res = await realtimeInterceptionItem(props.queryParams)
@@ -160,10 +236,22 @@ const fetchInterceptionData = async () => {
160
 }
236
 }
161
 
237
 
162
 const fetchData = () => {
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
   fetchSupervisionData()
252
   fetchSupervisionData()
164
   fetchInterceptionData()
253
   fetchInterceptionData()
165
 }
254
 }
166
-
167
 watch(() => props.queryParams, () => {
255
 watch(() => props.queryParams, () => {
168
   fetchData()
256
   fetchData()
169
 }, { deep: true, immediate: true })
257
 }, { deep: true, immediate: true })
@@ -178,10 +266,13 @@ watch(() => props.queryParams, () => {
178
     display: flex;
266
     display: flex;
179
     column-gap: 15px;
267
     column-gap: 15px;
180
     height: 360px;
268
     height: 360px;
269
+    width: 100%;
270
+    overflow: hidden;
181
     margin-bottom: 15px;
271
     margin-bottom: 15px;
182
     .col {
272
     .col {
183
       flex: 1;
273
       flex: 1;
184
       height: 100%;
274
       height: 100%;
275
+      min-width: 0px;
185
       :deep(.info-card) {
276
       :deep(.info-card) {
186
         height: 100%;
277
         height: 100%;
187
       }
278
       }

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

@@ -1,47 +1,47 @@
1
 <template>
1
 <template>
2
   <div class="operation-data">
2
   <div class="operation-data">
3
     <div class="row">
3
     <div class="row">
4
-      <ChannelCheckChart :chartsData="chartsData" />
4
+      <ChannelCheckChart :chartsData="channelCheckData" />
5
     </div>
5
     </div>
6
     <div class="row">
6
     <div class="row">
7
       <div class="col">
7
       <div class="col">
8
-        <SeizedInfo :chartsData="chartsData"/>
8
+        <SeizedInfo :chartsData="countSeizureInfoItemData"/>
9
       </div>
9
       </div>
10
       <div class="col">
10
       <div class="col">
11
-        <SeizedItems :chartsData="chartsData" />
11
+        <SeizedItems :chartsData="countSeizeSubjectCategoryQuantityData" />
12
       </div>
12
       </div>
13
     </div>
13
     </div>
14
     <div class="row">
14
     <div class="row">
15
       <div class="col">
15
       <div class="col">
16
-        <SeizedNumAll :chartsData="chartsData"/>
16
+        <SeizedNumAll :chartsData="countSeizureTotalQuantityData"/>
17
       </div>
17
       </div>
18
       <div class="col">
18
       <div class="col">
19
-        <SeizedNum :chartsData="chartsData" />
19
+        <SeizedNum :chartsData="countSeizureSingleQuantityData" />
20
       </div>
20
       </div>
21
     </div>
21
     </div>
22
     <div class="row">
22
     <div class="row">
23
-      <SeizedWorkArea :chartsData="chartsData" />
23
+      <SeizedWorkArea :chartsData="countSeizeAreaQuantityData" />
24
     </div>
24
     </div>
25
     <div class="row">
25
     <div class="row">
26
       <div class="col">
26
       <div class="col">
27
-        <EventItems :chartsData="chartsData"  />
27
+        <EventItems :chartsData="countSeizureStatsItemData"  />
28
       </div>
28
       </div>
29
       <div class="col">
29
       <div class="col">
30
-        <EventType :chartsData="chartsData"  />
30
+        <EventType :chartsData="countSeizureStatsTypeData"  />
31
       </div>
31
       </div>
32
       <div class="col">
32
       <div class="col">
33
-        <EventWorkArea :chartsData="chartsData"  />
33
+        <EventWorkArea :chartsData="countSeizureStatsPostData"  />
34
       </div>
34
       </div>
35
     </div>
35
     </div>
36
     <div class="row">
36
     <div class="row">
37
       <div class="col">
37
       <div class="col">
38
-        <TestItems :chartsData="chartsData"  />
38
+        <TestItems :chartsData="securityTestItemClassificationData"  />
39
       </div>
39
       </div>
40
       <div class="col">
40
       <div class="col">
41
-        <TestResult :chartsData="chartsData"  />
41
+        <TestResult :chartsData="securityTestPassingStatusData"  />
42
       </div>
42
       </div>
43
       <div class="col">
43
       <div class="col">
44
-        <TestArea :chartsData="chartsData"  />
44
+        <TestArea :chartsData="securityTestRegionData"  />
45
       </div>
45
       </div>
46
     </div>
46
     </div>
47
     <div class="row">
47
     <div class="row">
@@ -71,7 +71,23 @@ import TestResult from '../../components/TestResult.vue';
71
 import TestArea from '../../components/TestArea.vue';
71
 import TestArea from '../../components/TestArea.vue';
72
 import SupervisionDistribution from '../../components/SupervisionDistribution.vue';
72
 import SupervisionDistribution from '../../components/SupervisionDistribution.vue';
73
 import InterceptionDistribution from '../../components/InterceptionDistribution.vue';
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
 const props = defineProps({
92
 const props = defineProps({
77
   queryParams: {
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
 const fetchSupervisionData = async () => {
210
 const fetchSupervisionData = async () => {
135
   try {
211
   try {
136
     const res = await supervisionProblemPosition(props.queryParams)
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
 const fetchInterceptionData = async () => {
225
 const fetchInterceptionData = async () => {
149
   try {
226
   try {
150
     const res = await realtimeInterceptionItem(props.queryParams)
227
     const res = await realtimeInterceptionItem(props.queryParams)
@@ -160,10 +237,22 @@ const fetchInterceptionData = async () => {
160
 }
237
 }
161
 
238
 
162
 const fetchData = () => {
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
   fetchSupervisionData()
253
   fetchSupervisionData()
164
   fetchInterceptionData()
254
   fetchInterceptionData()
165
 }
255
 }
166
-
167
 watch(() => props.queryParams, () => {
256
 watch(() => props.queryParams, () => {
168
   fetchData()
257
   fetchData()
169
 }, { deep: true, immediate: true })
258
 }, { deep: true, immediate: true })
@@ -178,10 +267,13 @@ watch(() => props.queryParams, () => {
178
     display: flex;
267
     display: flex;
179
     column-gap: 15px;
268
     column-gap: 15px;
180
     height: 360px;
269
     height: 360px;
270
+    width: 100%;
271
+    overflow: hidden;
181
     margin-bottom: 15px;
272
     margin-bottom: 15px;
182
     .col {
273
     .col {
183
       flex: 1;
274
       flex: 1;
184
       height: 100%;
275
       height: 100%;
276
+      min-width: 0px;
185
       :deep(.info-card) {
277
       :deep(.info-card) {
186
         height: 100%;
278
         height: 100%;
187
       }
279
       }

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

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

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

@@ -1,47 +1,47 @@
1
 <template>
1
 <template>
2
   <div class="operation-data">
2
   <div class="operation-data">
3
     <div class="row">
3
     <div class="row">
4
-      <ChannelCheckChart :chartsData="chartsData" />
4
+      <ChannelCheckChart :chartsData="channelCheckData" />
5
     </div>
5
     </div>
6
     <div class="row">
6
     <div class="row">
7
       <div class="col">
7
       <div class="col">
8
-        <SeizedInfo :chartsData="chartsData"/>
8
+        <SeizedInfo :chartsData="countSeizureInfoItemData"/>
9
       </div>
9
       </div>
10
       <div class="col">
10
       <div class="col">
11
-        <SeizedItems :chartsData="chartsData" />
11
+        <SeizedItems :chartsData="countSeizeSubjectCategoryQuantityData" />
12
       </div>
12
       </div>
13
     </div>
13
     </div>
14
     <div class="row">
14
     <div class="row">
15
       <div class="col">
15
       <div class="col">
16
-        <SeizedNumAll :chartsData="chartsData"/>
16
+        <SeizedNumAll :chartsData="countSeizureTotalQuantityData"/>
17
       </div>
17
       </div>
18
       <div class="col">
18
       <div class="col">
19
-        <SeizedNum :chartsData="chartsData" />
19
+        <SeizedNum :chartsData="countSeizureSingleQuantityData" />
20
       </div>
20
       </div>
21
     </div>
21
     </div>
22
     <div class="row">
22
     <div class="row">
23
-      <SeizedWorkArea :chartsData="chartsData" />
23
+      <SeizedWorkArea :chartsData="countSeizeAreaQuantityData" />
24
     </div>
24
     </div>
25
     <div class="row">
25
     <div class="row">
26
       <div class="col">
26
       <div class="col">
27
-        <EventItems :chartsData="chartsData"  />
27
+        <EventItems :chartsData="countSeizureStatsItemData"  />
28
       </div>
28
       </div>
29
       <div class="col">
29
       <div class="col">
30
-        <EventType :chartsData="chartsData"  />
30
+        <EventType :chartsData="countSeizureStatsTypeData"  />
31
       </div>
31
       </div>
32
       <div class="col">
32
       <div class="col">
33
-        <EventWorkArea :chartsData="chartsData"  />
33
+        <EventWorkArea :chartsData="countSeizureStatsPostData"  />
34
       </div>
34
       </div>
35
     </div>
35
     </div>
36
     <div class="row">
36
     <div class="row">
37
       <div class="col">
37
       <div class="col">
38
-        <TestItems :chartsData="chartsData"  />
38
+        <TestItems :chartsData="securityTestItemClassificationData"  />
39
       </div>
39
       </div>
40
       <div class="col">
40
       <div class="col">
41
-        <TestResult :chartsData="chartsData"  />
41
+        <TestResult :chartsData="securityTestPassingStatusData"  />
42
       </div>
42
       </div>
43
       <div class="col">
43
       <div class="col">
44
-        <TestArea :chartsData="chartsData"  />
44
+        <TestArea :chartsData="securityTestRegionData"  />
45
       </div>
45
       </div>
46
     </div>
46
     </div>
47
     <div class="row">
47
     <div class="row">
@@ -71,7 +71,23 @@ import TestResult from '../../components/TestResult.vue';
71
 import TestArea from '../../components/TestArea.vue';
71
 import TestArea from '../../components/TestArea.vue';
72
 import SupervisionDistribution from '../../components/SupervisionDistribution.vue';
72
 import SupervisionDistribution from '../../components/SupervisionDistribution.vue';
73
 import InterceptionDistribution from '../../components/InterceptionDistribution.vue';
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
 const props = defineProps({
92
 const props = defineProps({
77
   queryParams: {
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
 const fetchSupervisionData = async () => {
210
 const fetchSupervisionData = async () => {
135
   try {
211
   try {
136
     const res = await supervisionProblemPosition(props.queryParams)
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
 const fetchInterceptionData = async () => {
225
 const fetchInterceptionData = async () => {
149
   try {
226
   try {
150
     const res = await realtimeInterceptionItem(props.queryParams)
227
     const res = await realtimeInterceptionItem(props.queryParams)
@@ -160,10 +237,22 @@ const fetchInterceptionData = async () => {
160
 }
237
 }
161
 
238
 
162
 const fetchData = () => {
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
   fetchSupervisionData()
253
   fetchSupervisionData()
164
   fetchInterceptionData()
254
   fetchInterceptionData()
165
 }
255
 }
166
-
167
 watch(() => props.queryParams, () => {
256
 watch(() => props.queryParams, () => {
168
   fetchData()
257
   fetchData()
169
 }, { deep: true, immediate: true })
258
 }, { deep: true, immediate: true })
@@ -178,10 +267,13 @@ watch(() => props.queryParams, () => {
178
     display: flex;
267
     display: flex;
179
     column-gap: 15px;
268
     column-gap: 15px;
180
     height: 360px;
269
     height: 360px;
270
+    width: 100%;
271
+    overflow: hidden;
181
     margin-bottom: 15px;
272
     margin-bottom: 15px;
182
     .col {
273
     .col {
183
       flex: 1;
274
       flex: 1;
184
       height: 100%;
275
       height: 100%;
276
+      min-width: 0px;
185
       :deep(.info-card) {
277
       :deep(.info-card) {
186
         height: 100%;
278
         height: 100%;
187
       }
279
       }