From 20b0ce2db27b64a60de60aee05dedd448099e330 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期一, 08 七月 2024 10:12:16 +0800
Subject: [PATCH] xiugai

---
 src/views/riskWarningSys/warningBigScreen/components/stock.vue |  684 ++++++++------------------------------------------------
 1 files changed, 107 insertions(+), 577 deletions(-)

diff --git a/src/views/riskWarningSys/warningBigScreen/components/stock.vue b/src/views/riskWarningSys/warningBigScreen/components/stock.vue
index 1feb3db..70f8696 100644
--- a/src/views/riskWarningSys/warningBigScreen/components/stock.vue
+++ b/src/views/riskWarningSys/warningBigScreen/components/stock.vue
@@ -1,9 +1,6 @@
 <template>
 	<div class="charts-cont">
-		<div v-show="curValue===true" class="stock" :id="stock1">
-
-		</div>
-		<div v-show="curValue===false" class="stock" :id="stock2"></div>
+		<div class="stock" :id="stock1"></div>
 	</div>
 </template>
 
@@ -19,9 +16,11 @@
 	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
 	import * as echarts from 'echarts';
 	import '/@/theme/bigScreen.css'
+  import {riskWarningApi} from "/@/api/riskWarning";
 
 	interface stateType {
-		curValue: boolean
+    stockData: []
+    changeCharts: any
 	}
 	export default defineComponent({
 		name: 'stock',
@@ -29,595 +28,127 @@
 		props:{
 			size: Number
 		},
-		setup(props) {
+		setup(props,context) {
 			const userInfo = useUserInfo()
 			const { userInfos } = storeToRefs(userInfo);
 			const stock1 = ref("eChartStock1" + Date.now() + Math.random())
-			const stock2 = ref("eChartStock2" + Date.now() + Math.random())
 			const state = reactive<stateType>({
-				curValue: true
+        stockData: [],
+        changeCharts: null
 			})
 
-			const swit = setInterval(()=>{
-				state.curValue = !state.curValue
-				if(state.curValue == true){
-					nextTick(()=>{
-						initStock1()
-					})
-				}else{
-					nextTick(()=>{
-						initStock2()
-					})
-				}
-			},5000)
+      const getSupplies = async () => {
+        let res = await riskWarningApi().getEmergencySupplies();
+        if (res.data.code === '200') {
+          state.stockData = res.data.data
+          const chartData = state.stockData.reduce((acc, curr, index) => {
+            if (index % 4 === 0) acc.push([]);
+            acc[acc.length - 1].push(curr);
+            return acc;
+          }, [])
+          const maxNum = Math.max(...state.stockData.map(i=>i.count))
+          let curIndex = 0
+          const renderCharts = () => {
+            const data = chartData[curIndex]
+            initStock(data,maxNum)
+            curIndex = (curIndex + 1) % chartData.length
+          }
+          renderCharts()
+          state.changeCharts = setInterval(renderCharts,5000)
+          context.emit('getData',state.stockData)
+        } else {
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          });
+        }
+      }
+
+
 			type EChartsOption = echarts.EChartsOption
 			// 隐患整改情况
-			const initStock1 =()=>{
+			const initStock =(data,maxNum)=>{
 				let dom = document.getElementById(stock1.value);
 				let myChart = echarts.init(dom);
 
 				let option: EChartsOption;
 
 				option = {
-					series: [
-						{
-							name: '消防耗材',
-							type: 'pie',
-							radius: [fontSize(40), fontSize(50)],
-							data: [
-								{ value: 2103, name: '消防耗材'},
-								{ value: 2310, name: '消防耗材未使用'}
-							],
-							label: {
-								show: true,
-								position: 'center',
-								formatter: '{total|{a}}' + '\n\r' + '{active|2103}',
-								rich: {
-									total:{
-										fontSize: fontSize(12),
-										color:'#999',
-										lineHeight: fontSize(16)
-									},
-									active: {
-										fontSize: fontSize(16),
-										color:'#999',
-									},
-								}
-							},
-							color: [
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#2D74C0" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#21D9DC" // 100% 处的颜色
-									}]
-								},
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#333" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#333" // 100% 处的颜色
-									}]
-								}
-							],
-							center: ['20%','25%']
-						},
-						{
-							name: '安全帽',
-							type: 'pie',
-							radius: [fontSize(40), fontSize(50)],
-							data: [
-								{ value: 23509, name: '安全帽'},
-								{ value: 34312, name: '安全帽未使用'}
-							],
-							label: {
-								show: true,
-								position: 'center',
-								formatter: '{total|{a}}' + '\n\r' + '{active|23509}',
-								rich: {
-									total:{
-										fontSize: fontSize(12),
-										color:'#999',
-										lineHeight: fontSize(16)
-									},
-									active: {
-										fontSize: fontSize(16),
-										color:'#999',
-									},
-								}
-							},
-							color: [
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#0DAA2E" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#4CF475" // 100% 处的颜色
-									}]
-								},
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#333" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#333" // 100% 处的颜色
-									}]
-								}
-							],
-							center: ['50%','25%']
-						},
-						{
-							name: '防护服',
-							type: 'pie',
-							radius: [fontSize(40), fontSize(50)],
-							data: [
-								{ value: 12830, name: '防护服'},
-								{ value: 22140, name: '防护服未使用'}
-							],
-							label: {
-								show: true,
-								position: 'center',
-								formatter: '{total|{a}}' + '\n\r' + '{active|12830}',
-								rich: {
-									total:{
-										fontSize: fontSize(12),
-										color:'#999',
-										lineHeight: fontSize(16)
-									},
-									active: {
-										fontSize: fontSize(16),
-										color:'#999',
-									},
-								}
-							},
-							color: [
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#E8B21D" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#E5DC44" // 100% 处的颜色
-									}],
-									global: false // 缺省为 false
-								},
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#333" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#333" // 100% 处的颜色
-									}],
-									global: false // 缺省为 false
-								}
-							],
-							center: ['80%','25%']
-						},
-						{
-							name: '劳保鞋',
-							type: 'pie',
-							radius: [fontSize(40), fontSize(50)],
-							data: [
-								{ value: 5492, name: '劳保鞋'},
-								{ value: 10842, name: '劳保鞋未使用'}
-							],
-							label: {
-								show: true,
-								position: 'center',
-								formatter: '{total|{a}}' + '\n\r' + '{active|5492}',
-								rich: {
-									total:{
-										fontSize: fontSize(12),
-										color:'#999',
-										lineHeight: fontSize(16)
-									},
-									active: {
-										fontSize: fontSize(16),
-										color:'#999',
-									},
-								}
-							},
-							color: [
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#D65146" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#F58C28" // 100% 处的颜色
-									}]
-								},
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#333" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#333" // 100% 处的颜色
-									}]
-								}
-							],
-							center: ['33.33%','75%']
-						},
-						{
-							name: '动火护具',
-							type: 'pie',
-							radius: [fontSize(40), fontSize(50)],
-							data: [
-								{ value: 44043, name: '动火护具'},
-								{ value: 68102, name: '动火护具未使用' }
-							],
-							label: {
-								show: true,
-								position: 'center',
-								formatter: '{total|{a}}' + '\n\r' + '{active|44043}',
-								rich: {
-									total:{
-										fontSize: fontSize(12),
-										color:'#999',
-										lineHeight: fontSize(16)
-									},
-									active: {
-										fontSize: fontSize(16),
-										color:'#999',
-									},
-								}
-							},
-							color: [
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#4449D1" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#A86DE5" // 100% 处的颜色
-									}]
-								},
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#333" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#333" // 100% 处的颜色
-									}]
-								}
-							],
-							center: ['66.66%','75%']
-						}
-					],
+          series: data.map((item,index)=>{
+            const centerList = [
+              ['30%','25%'],['70%','25%'],['30%','75%'],['70%','75%']
+            ]
+            const i = {
+              type: 'gauge',
+              radius: '40%',
+              startAngle: 90,
+              endAngle: -270,
+              pointer: {
+                show: false
+              },
+              progress: {
+                show: true,
+                overlap: false,
+                roundCap: true,
+                clip: false,
+                itemStyle: {
+                  borderWidth: 0,
+                  borderColor: '#464646'
+                },
+              },
+              axisLine: {
+                lineStyle: {
+                  width: fontSize(10),
+                  color: [[1,'#666']]
+                },
+                show: true
+              },
+              splitLine: {
+                show: false,
+                distance: 0,
+                length: 10
+              },
+              axisTick: {
+                show: false
+              },
+              axisLabel: {
+                show: false,
+                distance: 50
+              },
+              data: [
+                {
+                  value: item.count,
+                  name: item.name,
+                  title: {
+                    offsetCenter: ['0%', '-25%'],
+                    color: '#fff'
+                  },
+                },
+              ],
+              center: centerList[index],
+              // max: maxNum,
+              title: {
+                fontSize: fontSize(11),
+              },
+              detail: {
+                width: 50,
+                height: fontSize(20),
+                fontSize: fontSize(24),
+                color: 'inherit',
+                borderColor: 'inherit',
+                borderRadius: 20,
+                borderWidth: 0,
+                formatter: '{value}'
+              }
+            }
+            return i
+          })
 				};
 
 				option && myChart.setOption(option);
 				window.addEventListener("resize",function (){
 					myChart.resize();
 				});
-				echarts.init(document.getElementById(stock2.value)).dispose()
-			}
-
-			const initStock2 =()=>{
-				let dom = document.getElementById(stock2.value);
-				let myChart = echarts.init(dom);
-
-				let option: EChartsOption;
-
-				option = {
-					series: [
-						{
-							name: '急救包',
-							type: 'pie',
-							radius: [fontSize(40), fontSize(50)],
-							data: [
-								{ value: 8603, name: '急救包'},
-								{ value: 12032, name: '急救包未使用'}
-							],
-							label: {
-								show: true,
-								position: 'center',
-								formatter: '{total|{a}}' + '\n\r' + '{active|8603}',
-								rich: {
-									total:{
-										fontSize: fontSize(12),
-										color:'#999',
-										lineHeight: fontSize(16)
-									},
-									active: {
-										fontSize: fontSize(16),
-										color:'#999',
-									},
-								}
-							},
-							color: [
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#2D74C0" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#21D9DC" // 100% 处的颜色
-									}],
-									global: false // 缺省为 false
-								},
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#333" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#333" // 100% 处的颜色
-									}],
-									global: false // 缺省为 false
-								}
-							],
-							center: ['20%','25%']
-						},
-						{
-							name: '人员培训资料',
-							type: 'pie',
-							radius: [fontSize(40), fontSize(50)],
-							data: [
-								{ value: 8960, name: '人员培训资料'},
-								{ value: 9890, name: '人员培训资料未使用'}
-							],
-							label: {
-								show: true,
-								position: 'center',
-								formatter: '{total|{a}}' + '\n\r' + '{active|8960}',
-								rich: {
-									total:{
-										fontSize: fontSize(12),
-										color:'#999',
-										lineHeight: fontSize(16)
-									},
-									active: {
-										fontSize: fontSize(16),
-										color:'#999',
-									},
-								}
-							},
-							color: [
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#0DAA2E" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#4CF475" // 100% 处的颜色
-									}],
-									global: false // 缺省为 false
-								},
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#333" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#333" // 100% 处的颜色
-									}],
-									global: false // 缺省为 false
-								}
-							],
-							center: ['50%','25%']
-						},
-						{
-							name: '安全护具',
-							type: 'pie',
-							radius: [fontSize(40), fontSize(50)],
-							data: [
-								{ value: 12302, name: '安全护具'},
-								{ value: 20130, name: '安全护具未使用'}
-							],
-							label: {
-								show: true,
-								position: 'center',
-								formatter: '{total|{a}}' + '\n\r' + '{active|12302}',
-								rich: {
-									total:{
-										fontSize: fontSize(12),
-										color:'#999',
-										lineHeight: fontSize(16)
-									},
-									active: {
-										fontSize: fontSize(16),
-										color:'#999',
-									},
-								}
-							},
-							color: [
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#E8B21D" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#E5DC44" // 100% 处的颜色
-									}],
-									global: false // 缺省为 false
-								},
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#333" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#333" // 100% 处的颜色
-									}],
-									global: false // 缺省为 false
-								}
-							],
-							center: ['80%','25%']
-						},
-						{
-							name: '高空护具',
-							type: 'pie',
-							radius: [fontSize(40), fontSize(50)],
-							data: [
-								{ value: 42948, name: '高空护具'},
-								{ value: 89342, name: '高空护具未使用'}
-							],
-							label: {
-								show: true,
-								position: 'center',
-								formatter: '{total|{a}}' + '\n\r' + '{active|42948}',
-								rich: {
-									total:{
-										fontSize: fontSize(12),
-										color:'#999',
-										lineHeight: fontSize(16)
-									},
-									active: {
-										fontSize: fontSize(16),
-										color:'#999',
-									},
-								}
-							},
-							color: [
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#D65146" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#F58C28" // 100% 处的颜色
-									}],
-									global: false // 缺省为 false
-								},
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#333" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#333" // 100% 处的颜色
-									}],
-									global: false // 缺省为 false
-								}
-							],
-							center: ['33.33%','75%']
-						},
-						{
-							name: '防尘护具',
-							type: 'pie',
-							radius: [fontSize(40), fontSize(50)],
-							data: [
-								{ value: 1220, name: '防尘护具'},
-								{ value: 5034, name: '防尘护具未使用' }
-							],
-							label: {
-								show: true,
-								position: 'center',
-								formatter: '{total|{a}}' + '\n\r' + '{active|1220}',
-								rich: {
-									total:{
-										fontSize: fontSize(12),
-										color:'#999',
-										lineHeight: fontSize(16)
-									},
-									active: {
-										fontSize: fontSize(16),
-										color:'#999',
-									},
-								}
-							},
-							color: [
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#4449D1" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#A86DE5" // 100% 处的颜色
-									}],
-									global: false // 缺省为 false
-								},
-								{
-									type: 'linear',
-									x: 0,
-									y: 0,
-									x2: 0,
-									y2: 1,
-									colorStops: [{
-										offset: 0, color: "#333" // 0% 处的颜色
-									}, {
-										offset: 1, color: "#333" // 100% 处的颜色
-									}],
-									global: false // 缺省为 false
-								}
-							],
-							center: ['66.66%','75%']
-						}
-					],
-				};
-
-				option && myChart.setOption(option);
-				window.addEventListener("resize",function (){
-					myChart.resize();
-				});
-				echarts.init(document.getElementById(stock1.value)).dispose()
 			}
 
 			function fontSize(val){
@@ -627,14 +158,13 @@
 
 			// 页面载入时执行方法
 			onMounted(() => {
-				initStock1();
+				getSupplies()
 			});
 			onBeforeUnmount(() =>{
-				clearInterval(swit)
+				clearInterval(state.changeCharts)
 			})
 			return {
 				stock1,
-				stock2,
 				Search,
 				fontSize,
 				...toRefs(state)

--
Gitblit v1.9.2