Pārlūkot izejas kodu

chore(portraitManagement): 删除7个冗余的图表组件文件

移除了不再使用的查获物品分布、每日查获数量等7个ECharts图表组件文件,清理无用代码以减少项目冗余
huoyi 3 nedēļas atpakaļ
vecāks
revīzija
2a6ecd29e7

+ 0 - 184
src/views/portraitManagement/components/ProfileDailySeizedArea.vue

@@ -1,184 +0,0 @@
1
-<template>
2
-  <InfoCard title="每日查获数量(个人对比)">
3
-    <div ref="dailySeizedAreaRef" class="daily-chart"></div>
4
-  </InfoCard>
5
-</template>
6
-
7
-<script setup>
8
-import { ref, onMounted, onUnmounted, nextTick } from 'vue'
9
-import * as echarts from 'echarts'
10
-import InfoCard from './card.vue'
11
-
12
-const props = defineProps({
13
-  chartData1: {
14
-    type: Array,
15
-    default: () => []
16
-  },
17
-  chartData2: {
18
-    type: Array,
19
-    default: () => []
20
-  },
21
-  chartData3: {
22
-    type: Array,
23
-    default: () => []
24
-  },
25
-  chartData4: {
26
-    type: Array,
27
-    default: () => []
28
-  },
29
-  chartData5: {
30
-    type: Array,
31
-    default: () => []
32
-  }
33
-})
34
-
35
-const defaultCategories = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
36
-const defaultPersonA = [120, 132, 101, 134, 90, 230, 210, 182, 191, 234, 290, 330]
37
-const defaultPersonB = [220, 182, 191, 234, 290, 330, 310, 123, 144, 210, 182, 191]
38
-const defaultPersonC = [150, 232, 201, 154, 190, 330, 410, 201, 154, 190, 330, 410]
39
-const defaultPersonD = [320, 332, 301, 334, 390, 330, 320, 332, 301, 334, 390, 330]
40
-const defaultPersonE = [820, 932, 901, 934, 1290, 1330, 1320, 820, 932, 901, 934, 1290]
41
-
42
-const dailySeizedAreaRef = ref(null)
43
-let dailySeizedArea = null
44
-
45
-const initChart = () => {
46
-  if (!dailySeizedAreaRef.value) return
47
-  dailySeizedArea = echarts.init(dailySeizedAreaRef.value)
48
-  const option = {
49
-    tooltip: {
50
-      trigger: 'axis',
51
-      backgroundColor: 'rgba(13,80,122,0.95)',
52
-      borderColor: '#70CFE7',
53
-      textStyle: { color: '#fff' }
54
-    },
55
-    legend: {
56
-      data: ['人员A', '人员B', '人员C', '人员D', '人员E'],
57
-      textStyle: { color: '#a0c4ff' },
58
-      top: 0
59
-    },
60
-    grid: {
61
-      left: '3%',
62
-      right: '4%',
63
-      bottom: '3%',
64
-      containLabel: true
65
-    },
66
-    xAxis: {
67
-      type: 'category',
68
-      boundaryGap: false,
69
-      data: defaultCategories,
70
-      axisLabel: { color: '#a0c4ff' },
71
-      axisLine: { lineStyle: { color: 'rgba(15,70,250,0.3)' } }
72
-    },
73
-    yAxis: {
74
-      type: 'value',
75
-      axisLabel: { color: '#a0c4ff' },
76
-      axisLine: { lineStyle: { color: 'rgba(15,70,250,0.3)' } },
77
-      splitLine: { lineStyle: { color: 'rgba(15,70,250,0.2)' } }
78
-    },
79
-    series: [
80
-      {
81
-        name: '人员A',
82
-        type: 'line',
83
-        stack: 'Total',
84
-        smooth: true,
85
-        areaStyle: {
86
-          color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
87
-            { offset: 0, color: 'rgba(77, 166, 255, 0.5)' },
88
-            { offset: 1, color: 'rgba(77, 166, 255, 0.1)' }
89
-          ])
90
-        },
91
-        itemStyle: { color: '#4da6ff' },
92
-        lineStyle: { color: '#4da6ff', width: 2 },
93
-        data: props.chartData1.length > 0 ? props.chartData1 : defaultPersonA
94
-      },
95
-      {
96
-        name: '人员B',
97
-        type: 'line',
98
-        stack: 'Total',
99
-        smooth: true,
100
-        areaStyle: {
101
-          color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
102
-            { offset: 0, color: 'rgba(189, 3, 251, 0.5)' },
103
-            { offset: 1, color: 'rgba(189, 3, 251, 0.1)' }
104
-          ])
105
-        },
106
-        itemStyle: { color: '#bd03fb' },
107
-        lineStyle: { color: '#bd03fb', width: 2 },
108
-        data: props.chartData2.length > 0 ? props.chartData2 : defaultPersonB
109
-      },
110
-      {
111
-        name: '人员C',
112
-        type: 'line',
113
-        stack: 'Total',
114
-        smooth: true,
115
-        areaStyle: {
116
-          color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
117
-            { offset: 0, color: 'rgba(126, 255, 126, 0.5)' },
118
-            { offset: 1, color: 'rgba(126, 255, 126, 0.1)' }
119
-          ])
120
-        },
121
-        itemStyle: { color: '#7eff7e' },
122
-        lineStyle: { color: '#7eff7e', width: 2 },
123
-        data: props.chartData3.length > 0 ? props.chartData3 : defaultPersonC
124
-      },
125
-      {
126
-        name: '人员D',
127
-        type: 'line',
128
-        stack: 'Total',
129
-        smooth: true,
130
-        areaStyle: {
131
-          color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
132
-            { offset: 0, color: 'rgba(255, 217, 62, 0.5)' },
133
-            { offset: 1, color: 'rgba(255, 217, 62, 0.1)' }
134
-          ])
135
-        },
136
-        itemStyle: { color: '#ffd93e' },
137
-        lineStyle: { color: '#ffd93e', width: 2 },
138
-        data: props.chartData4.length > 0 ? props.chartData4 : defaultPersonD
139
-      },
140
-      {
141
-        name: '人员E',
142
-        type: 'line',
143
-        stack: 'Total',
144
-        smooth: true,
145
-        areaStyle: {
146
-          color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
147
-            { offset: 0, color: 'rgba(126, 196, 255, 0.5)' },
148
-            { offset: 1, color: 'rgba(126, 196, 255, 0.1)' }
149
-          ])
150
-        },
151
-        itemStyle: { color: '#7ec4ff' },
152
-        lineStyle: { color: '#7ec4ff', width: 2 },
153
-        data: props.chartData5.length > 0 ? props.chartData5 : defaultPersonE
154
-      }
155
-    ]
156
-  }
157
-  dailySeizedArea.setOption(option)
158
-}
159
-
160
-const handleResize = () => {
161
-  if (dailySeizedArea) dailySeizedArea.resize()
162
-}
163
-
164
-onMounted(() => {
165
-  nextTick(() => {
166
-    setTimeout(() => {
167
-      initChart()
168
-      window.addEventListener('resize', handleResize)
169
-    }, 100)
170
-  })
171
-})
172
-
173
-onUnmounted(() => {
174
-  window.removeEventListener('resize', handleResize)
175
-  if (dailySeizedArea) dailySeizedArea.dispose()
176
-})
177
-</script>
178
-
179
-<style lang="scss" scoped>
180
-.daily-chart {
181
-  width: 100%;
182
-  height: 320px;
183
-}
184
-</style>

+ 0 - 103
src/views/portraitManagement/components/ProfileDailySeizedBar.vue

@@ -1,103 +0,0 @@
1
-<template>
2
-  <InfoCard title="每日查获数量(总表)">
3
-    <div ref="dailySeizedBarRef" class="daily-bar-chart"></div>
4
-  </InfoCard>
5
-</template>
6
-
7
-<script setup>
8
-import { ref, onMounted, onUnmounted, nextTick } from 'vue'
9
-import * as echarts from 'echarts'
10
-import InfoCard from './card.vue'
11
-
12
-const props = defineProps({
13
-  chartData1: {
14
-    type: Array,
15
-    default: () => []
16
-  }
17
-})
18
-
19
-const defaultCategories = ['T3国内出发(4层)', 'T3(8层出发)', 'T3国际出发', 'T3国际转国内', '旅检A区', 'T3要客服务区东', 'T3要客服务区西', 'T1要客服务区东', 'T2要客服务区东', '旅检B区', '重检C区']
20
-const defaultData = [120, 200, 150, 80, 70, 110, 130, 90, 160, 140, 180]
21
-
22
-const dailySeizedBarRef = ref(null)
23
-let dailySeizedBar = null
24
-
25
-const initChart = () => {
26
-  if (!dailySeizedBarRef.value) return
27
-  dailySeizedBar = echarts.init(dailySeizedBarRef.value)
28
-  const data = props.chartData1.length > 0 ? props.chartData1 : defaultData
29
-  const option = {
30
-    tooltip: {
31
-      trigger: 'axis',
32
-      backgroundColor: 'rgba(13,80,122,0.95)',
33
-      borderColor: '#70CFE7',
34
-      textStyle: { color: '#fff' }
35
-    },
36
-    legend: {
37
-      data: ['查获数量'],
38
-      textStyle: { color: '#a0c4ff' },
39
-      top: 0
40
-    },
41
-    grid: {
42
-      left: '3%',
43
-      right: '4%',
44
-      bottom: '15%',
45
-      containLabel: true
46
-    },
47
-    xAxis: {
48
-      type: 'category',
49
-      data: defaultCategories,
50
-      axisLabel: {
51
-        color: '#a0c4ff',
52
-        rotate: 30,
53
-        fontSize: 10
54
-      },
55
-      axisLine: { lineStyle: { color: 'rgba(15,70,250,0.3)' } }
56
-    },
57
-    yAxis: {
58
-      type: 'value',
59
-      axisLabel: { color: '#a0c4ff' },
60
-      axisLine: { lineStyle: { color: 'rgba(15,70,250,0.3)' } },
61
-      splitLine: { lineStyle: { color: 'rgba(15,70,250,0.2)' } }
62
-    },
63
-    series: [{
64
-      name: '查获数量',
65
-      type: 'bar',
66
-      data: data,
67
-      itemStyle: {
68
-        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
69
-          { offset: 0, color: '#bd03fb' },
70
-          { offset: 1, color: '#0f46fa' }
71
-        ])
72
-      },
73
-      barWidth: '40%'
74
-    }]
75
-  }
76
-  dailySeizedBar.setOption(option)
77
-}
78
-
79
-const handleResize = () => {
80
-  if (dailySeizedBar) dailySeizedBar.resize()
81
-}
82
-
83
-onMounted(() => {
84
-  nextTick(() => {
85
-    setTimeout(() => {
86
-      initChart()
87
-      window.addEventListener('resize', handleResize)
88
-    }, 100)
89
-  })
90
-})
91
-
92
-onUnmounted(() => {
93
-  window.removeEventListener('resize', handleResize)
94
-  if (dailySeizedBar) dailySeizedBar.dispose()
95
-})
96
-</script>
97
-
98
-<style lang="scss" scoped>
99
-.daily-bar-chart {
100
-  width: 100%;
101
-  height: 380px;
102
-}
103
-</style>

+ 0 - 101
src/views/portraitManagement/components/ProfileDailySeizedLine.vue

@@ -1,101 +0,0 @@
1
-<template>
2
-  <InfoCard title="每日查获数量(总表)">
3
-    <div ref="dailySeizedLineRef" class="daily-chart"></div>
4
-  </InfoCard>
5
-</template>
6
-
7
-<script setup>
8
-import { ref, onMounted, onUnmounted, nextTick } from 'vue'
9
-import * as echarts from 'echarts'
10
-import InfoCard from './card.vue'
11
-
12
-const props = defineProps({
13
-  chartData1: {
14
-    type: Array,
15
-    default: () => []
16
-  }
17
-})
18
-
19
-const defaultData = [120, 132, 101, 134, 90, 230, 210, 182, 191, 234, 290, 330]
20
-const defaultCategories = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
21
-
22
-const dailySeizedLineRef = ref(null)
23
-let dailySeizedLine = null
24
-
25
-const initChart = () => {
26
-  if (!dailySeizedLineRef.value) return
27
-  dailySeizedLine = echarts.init(dailySeizedLineRef.value)
28
-  const data = props.chartData1.length > 0 ? props.chartData1 : defaultData
29
-  const option = {
30
-    tooltip: {
31
-      trigger: 'axis',
32
-      backgroundColor: 'rgba(13,80,122,0.95)',
33
-      borderColor: '#70CFE7',
34
-      textStyle: { color: '#fff' }
35
-    },
36
-    legend: {
37
-      data: ['查获数量'],
38
-      textStyle: { color: '#a0c4ff' },
39
-      top: 0
40
-    },
41
-    grid: {
42
-      left: '3%',
43
-      right: '4%',
44
-      bottom: '3%',
45
-      containLabel: true
46
-    },
47
-    xAxis: {
48
-      type: 'category',
49
-      boundaryGap: false,
50
-      data: defaultCategories,
51
-      axisLabel: { color: '#a0c4ff' },
52
-      axisLine: { lineStyle: { color: 'rgba(15,70,250,0.3)' } }
53
-    },
54
-    yAxis: {
55
-      type: 'value',
56
-      axisLabel: { color: '#a0c4ff' },
57
-      axisLine: { lineStyle: { color: 'rgba(15,70,250,0.3)' } },
58
-      splitLine: { lineStyle: { color: 'rgba(15,70,250,0.2)' } }
59
-    },
60
-    series: [{
61
-      name: '查获数量',
62
-      type: 'line',
63
-      smooth: true,
64
-      data: data,
65
-      itemStyle: { color: '#bd03fb' },
66
-      areaStyle: {
67
-        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
68
-          { offset: 0, color: 'rgba(189,3,251,0.3)' },
69
-          { offset: 1, color: 'rgba(189,3,251,0.05)' }
70
-        ])
71
-      }
72
-    }]
73
-  }
74
-  dailySeizedLine.setOption(option)
75
-}
76
-
77
-const handleResize = () => {
78
-  if (dailySeizedLine) dailySeizedLine.resize()
79
-}
80
-
81
-onMounted(() => {
82
-  nextTick(() => {
83
-    setTimeout(() => {
84
-      initChart()
85
-      window.addEventListener('resize', handleResize)
86
-    }, 100)
87
-  })
88
-})
89
-
90
-onUnmounted(() => {
91
-  window.removeEventListener('resize', handleResize)
92
-  if (dailySeizedLine) dailySeizedLine.dispose()
93
-})
94
-</script>
95
-
96
-<style lang="scss" scoped>
97
-.daily-chart {
98
-  width: 100%;
99
-  height: 320px;
100
-}
101
-</style>

+ 0 - 127
src/views/portraitManagement/components/ProfilePassRate.vue

@@ -1,127 +0,0 @@
1
-<template>
2
-  <InfoCard title="每日通道过检率">
3
-    <div ref="passRateChartRef" class="pass-rate-chart"></div>
4
-  </InfoCard>
5
-</template>
6
-
7
-<script setup>
8
-import { ref, onMounted, onUnmounted, nextTick } from 'vue'
9
-import * as echarts from 'echarts'
10
-import InfoCard from './card.vue'
11
-
12
-const props = defineProps({
13
-  chartData1: {
14
-    type: Array,
15
-    default: () => []
16
-  },
17
-  chartData2: {
18
-    type: Array,
19
-    default: () => []
20
-  }
21
-})
22
-
23
-const defaultHours = Array.from({ length: 24 }, (_, i) => `${i.toString().padStart(2, '0')}:00`)
24
-const defaultPassData = [370, 352, 330, 387, 426, 342, 325, 384, 445, 407, 382, 401, 380, 464, 342, 443, 305, 394, 334, 430, 364, 362, 400, 420]
25
-const defaultLineData = [4.5, 5, 4, 6, 7, 5, 4, 6, 8, 7, 6, 7, 6, 8, 5, 7, 4, 6, 5, 7, 6, 6, 6.5, 7]
26
-
27
-const passRateChartRef = ref(null)
28
-let passRateChart = null
29
-
30
-const initChart = () => {
31
-  if (!passRateChartRef.value) return
32
-  passRateChart = echarts.init(passRateChartRef.value)
33
-
34
-  const passData = props.chartData1.length > 0 ? props.chartData1 : defaultPassData
35
-  const lineData = props.chartData2.length > 0 ? props.chartData2 : defaultLineData
36
-
37
-  const option = {
38
-    xAxis: {
39
-      type: 'category',
40
-      data: defaultHours,
41
-      axisLabel: { color: '#a0c4ff', fontSize: 10 },
42
-      axisLine: { lineStyle: { color: 'rgba(15,70,250,0.3)' } }
43
-    },
44
-    yAxis: [
45
-      {
46
-        type: 'value',
47
-        name: '过检率',
48
-        position: 'left',
49
-        max: 8,
50
-        axisLabel: { color: '#a0c4ff', fontSize: 10 },
51
-        axisLine: { lineStyle: { color: 'rgba(15,70,250,0.3)' } },
52
-        splitLine: { lineStyle: { color: 'rgba(15,70,250,0.2)' } }
53
-      },
54
-      {
55
-        type: 'value',
56
-        name: '数量',
57
-        position: 'right',
58
-        max: 5000,
59
-        axisLabel: { color: '#a0c4ff', fontSize: 10 },
60
-        axisLine: { lineStyle: { color: 'rgba(15,70,250,0.3)' } },
61
-        splitLine: { show: false }
62
-      }
63
-    ],
64
-    series: [
65
-      {
66
-        name: '过检人数',
67
-        type: 'bar',
68
-        yAxisIndex: 1,
69
-        data: passData,
70
-        itemStyle: {
71
-          color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
72
-            { offset: 0, color: '#ffd93d' },
73
-            { offset: 1, color: '#ff9f43' }
74
-          ])
75
-        },
76
-        barWidth: '40%'
77
-      },
78
-      {
79
-        name: '过检率',
80
-        type: 'line',
81
-        yAxisIndex: 0,
82
-        data: lineData,
83
-        smooth: true,
84
-        itemStyle: { color: '#bd03fb' },
85
-        areaStyle: {
86
-          color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
87
-            { offset: 0, color: 'rgba(189,3,251,0.3)' },
88
-            { offset: 1, color: 'rgba(189,3,251,0.05)' }
89
-          ])
90
-        }
91
-      }
92
-    ],
93
-    tooltip: {
94
-      trigger: 'axis',
95
-      backgroundColor: 'rgba(13,80,122,0.95)',
96
-      borderColor: '#70CFE7',
97
-      textStyle: { color: '#fff' }
98
-    }
99
-  }
100
-  passRateChart.setOption(option)
101
-}
102
-
103
-const handleResize = () => {
104
-  if (passRateChart) passRateChart.resize()
105
-}
106
-
107
-onMounted(() => {
108
-  nextTick(() => {
109
-    setTimeout(() => {
110
-      initChart()
111
-      window.addEventListener('resize', handleResize)
112
-    }, 100)
113
-  })
114
-})
115
-
116
-onUnmounted(() => {
117
-  window.removeEventListener('resize', handleResize)
118
-  if (passRateChart) passRateChart.dispose()
119
-})
120
-</script>
121
-
122
-<style lang="scss" scoped>
123
-.pass-rate-chart {
124
-  width: 100%;
125
-  height: 320px;
126
-}
127
-</style>

+ 0 - 75
src/views/portraitManagement/components/ProfileSeizedDistribution.vue

@@ -1,75 +0,0 @@
1
-<template>
2
-  <InfoCard title="查获物品分布">
3
-    <div class="seized-distribution">
4
-      <div ref="seizedChartRef" class="seized-chart"></div>
5
-    </div>
6
-  </InfoCard>
7
-</template>
8
-
9
-<script setup>
10
-import { ref, onMounted, onUnmounted, nextTick } from 'vue'
11
-import * as echarts from 'echarts'
12
-import InfoCard from './card.vue'
13
-
14
-const props = defineProps({
15
-  chartData1: {
16
-    type: Array,
17
-    default: () => []
18
-  }
19
-})
20
-
21
-const defaultData = [
22
-  { value: 20, name: '打火机', itemStyle: { color: '#ff9f43' } },
23
-  { value: 30, name: '管制刀具', itemStyle: { color: '#ff6b6b' } },
24
-  { value: 50, name: '其他违禁品', itemStyle: { color: '#4da6ff' } }
25
-]
26
-
27
-const seizedChartRef = ref(null)
28
-let seizedChart = null
29
-
30
-const initChart = () => {
31
-  if (!seizedChartRef.value) return
32
-  seizedChart = echarts.init(seizedChartRef.value)
33
-  const data = props.chartData1.length > 0 ? props.chartData1 : defaultData
34
-  const option = {
35
-    series: [{
36
-      type: 'pie',
37
-      radius: ['40%', '70%'],
38
-      data: data,
39
-      label: { show: true, color: '#fff', fontSize: 11 },
40
-      labelLine: { show: true }
41
-    }]
42
-  }
43
-  seizedChart.setOption(option)
44
-}
45
-
46
-const handleResize = () => {
47
-  if (seizedChart) seizedChart.resize()
48
-}
49
-
50
-onMounted(() => {
51
-  nextTick(() => {
52
-    setTimeout(() => {
53
-      initChart()
54
-      window.addEventListener('resize', handleResize)
55
-    }, 100)
56
-  })
57
-})
58
-
59
-onUnmounted(() => {
60
-  window.removeEventListener('resize', handleResize)
61
-  if (seizedChart) seizedChart.dispose()
62
-})
63
-</script>
64
-
65
-<style lang="scss" scoped>
66
-.seized-distribution {
67
-  width: 100%;
68
-  height: 280px;
69
-
70
-  .seized-chart {
71
-    width: 100%;
72
-    height: 100%;
73
-  }
74
-}
75
-</style>

+ 0 - 137
src/views/portraitManagement/components/ProfileSeizedInfo.vue

@@ -1,137 +0,0 @@
1
-<template>
2
-  
3
-  <InfoCard title="查获信息展示">
4
-    <div class="seized-info">
5
-      <div class="seized-number">
6
-        <div class="number-circle">
7
-          <div class="number-value">{{ displayNumber }}</div>
8
-          <div class="number-label">查获总数(所有人员)</div>
9
-        </div>
10
-      </div>
11
-      <div class="seized-small-chart">
12
-        <div ref="seizedSmallChartRef" class="small-chart"></div>
13
-      </div>
14
-    </div>
15
-  </InfoCard>
16
-</template>
17
-
18
-<script setup>
19
-import { ref, computed, onMounted, onUnmounted, nextTick } from 'vue'
20
-import * as echarts from 'echarts'
21
-import InfoCard from './card.vue'
22
-
23
-const props = defineProps({
24
-  chartData1: {
25
-    type: [Number, Array],
26
-    default: 1658
27
-  }
28
-})
29
-
30
-const displayNumber = computed(() => {
31
-  return typeof props.chartData1 === 'number' ? props.chartData1 : 1658
32
-})
33
-
34
-const seizedSmallChartRef = ref(null)
35
-let seizedSmallChart = null
36
-
37
-const initChart = () => {
38
-  if (!seizedSmallChartRef.value) return
39
-  seizedSmallChart = echarts.init(seizedSmallChartRef.value)
40
-  const option = {
41
-    xAxis: {
42
-      type: 'category',
43
-      data: ['等级1', '等级3', '等级5'],
44
-      axisLabel: { color: '#a0c4ff', fontSize: 9 },
45
-      axisLine: { show: false },
46
-      axisTick: { show: false }
47
-    },
48
-    yAxis: {
49
-      type: 'value',
50
-      axisLabel: { show: false },
51
-      axisLine: { show: false },
52
-      axisTick: { show: false },
53
-      splitLine: { show: false }
54
-    },
55
-    series: [{
56
-      type: 'bar',
57
-      data: [150, 400, 200],
58
-      itemStyle: {
59
-        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
60
-          { offset: 0, color: '#a55eea' },
61
-          { offset: 1, color: '#4da6ff' }
62
-        ])
63
-      },
64
-      barWidth: '30%'
65
-    }]
66
-  }
67
-  seizedSmallChart.setOption(option)
68
-}
69
-
70
-const handleResize = () => {
71
-  if (seizedSmallChart) seizedSmallChart.resize()
72
-}
73
-
74
-onMounted(() => {
75
-  nextTick(() => {
76
-    setTimeout(() => {
77
-      initChart()
78
-      window.addEventListener('resize', handleResize)
79
-    }, 100)
80
-  })
81
-})
82
-
83
-onUnmounted(() => {
84
-  window.removeEventListener('resize', handleResize)
85
-  if (seizedSmallChart) seizedSmallChart.dispose()
86
-})
87
-</script>
88
-
89
-<style lang="scss" scoped>
90
-.seized-info {
91
-  display: flex;
92
-  gap: 20px;
93
-  min-height: 280px;
94
-  align-items: center;
95
-
96
-  .seized-number {
97
-    flex: 1;
98
-    display: flex;
99
-    justify-content: center;
100
-
101
-    .number-circle {
102
-      width: 200px;
103
-      height: 200px;
104
-      border-radius: 50%;
105
-      background: linear-gradient(135deg, rgba(15, 70, 250, 0.3), rgba(189, 3, 251, 0.3));
106
-      display: flex;
107
-      flex-direction: column;
108
-      align-items: center;
109
-      justify-content: center;
110
-      border: 2px solid rgba(189, 3, 251, 0.5);
111
-
112
-      .number-value {
113
-        font-size: 48px;
114
-        font-weight: bold;
115
-        color: #fff;
116
-        text-shadow: 0 0 20px rgba(189, 3, 251, 0.8);
117
-      }
118
-
119
-      .number-label {
120
-        font-size: 14px;
121
-        color: #a0c4ff;
122
-        text-align: center;
123
-        margin-top: 10px;
124
-      }
125
-    }
126
-  }
127
-
128
-  .seized-small-chart {
129
-    flex: 1;
130
-
131
-    .small-chart {
132
-      width: 100%;
133
-      height: 200px;
134
-    }
135
-  }
136
-}
137
-</style>