From e5e9b84b800f1623f85be45a3565689917898c78 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期五, 10 三月 2023 18:12:12 +0800
Subject: [PATCH] Default Changelist

---
 src/views/riskWarningSys/warningBigScreen/components/risk.vue |  623 +++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 410 insertions(+), 213 deletions(-)

diff --git a/src/views/riskWarningSys/warningBigScreen/components/risk.vue b/src/views/riskWarningSys/warningBigScreen/components/risk.vue
index 038699b..c689cad 100644
--- a/src/views/riskWarningSys/warningBigScreen/components/risk.vue
+++ b/src/views/riskWarningSys/warningBigScreen/components/risk.vue
@@ -1,15 +1,17 @@
 <template>
 	<div class="charts-cont">
-		<el-select :class="selector" v-model="month" placeholder="Select" :teleported="false" size="default">
-			<el-option
-					v-for="item in optionList"
-					:key="item.value"
-					:label="item.label"
-					:value="item.value"
+		<div :class="selector">
+			<el-cascader
+					class="timeSe"
+					:teleported="false"
+					v-model="timeValue"
+					:options="optionList"
+					:props="riskProps"
+					@change="changeTime"
 			/>
-		</el-select>
-		<div v-show="curValue===true" class="risk" :id="risk1"></div>
-		<div v-show="curValue===false" class="risk" :id="risk2"></div>
+		</div>
+		<div class="risk" :id="risk1"></div>
+<!--		<div v-show="curValue===false" class="risk" :id="risk2"></div>-->
 	</div>
 </template>
 
@@ -25,21 +27,32 @@
 	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
 	import * as echarts from 'echarts';
 	import '/@/theme/bigScreen.css'
-	import {useScreenTheme} from "/@/stores/screenTheme";
+	import { useScreenTheme } from "/@/stores/screenTheme";
+  import { riskWarningApi } from '/@/api/riskWarning';
+  import {teamManageApi} from "/@/api/systemManage/basicDateManage/personShiftManage/teamManage";
 
 
 	interface stateType {
 		curValue: boolean,
-		month: number,
+		timeValue: Array<any>,
 		optionList: Array<any>,
-		selector: string
+		selector: string,
+		riskData: Array<any>,
+		riskProps: object,
+    departmentList: Array<any>,
+    departmentRecursionList: Array<DepartmentState>;
 	}
+  interface DepartmentState {
+    depId: number;
+    depName: string;
+  }
 	export default defineComponent({
 		name: 'risk',
 		components: {},
 		props:{
 			size: Number,
-			theme: Boolean
+			theme: Boolean,
+      dep: Array
 		},
 		setup(props) {
 			const userInfo = useUserInfo()
@@ -47,76 +60,192 @@
 			const screenThemes = useScreenTheme()
 			const { screenTheme }  = storeToRefs(screenThemes);
 			const risk1 = ref("eChartRisk1" + Date.now() + Math.random())
-			const risk2 = ref("eChartRisk2" + Date.now() + Math.random())
+			// const risk2 = ref("eChartRisk2" + Date.now() + Math.random())
 			const state = reactive<stateType>({
 				curValue: true,
-				month: 0,
-				optionList: [
-					{
-						label: '年度',
-						value: 0
-					},
-					{
-						label: '一月',
-						value: 1
-					},
-					{
-						label: '二月',
-						value: 2
-					},
-					{
-						label: '三月',
-						value: 3
-					},
-					{
-						label: '四月',
-						value: 4
-					},
-					{
-						label: '五月',
-						value: 5
-					},
-					{
-						label: '六月',
-						value: 6
-					},
-					{
-						label: '七月',
-						value: 7
-					},
-					{
-						label: '八月',
-						value: 8
-					},
-					{
-						label: '九月',
-						value: 9
-					},
-					{
-						label: '十月',
-						value: 10
-					}
-				],
-				selector: 'select-dark'
+				timeValue: [],
+				optionList: [],
+				riskProps: {
+					expandTrigger: 'hover'
+				},
+				selector: 'select-dark',
+				riskData: [],
+        departmentList: [],
+        departmentRecursionList: [],
+        myVar: 0
 			})
+      const timeForm = {
+        hour12: false,
+        year: 'numeric',
+        month: 'numeric',
+        day: '2-digit',
+        hour: '2-digit',
+        minute: '2-digit',
+        second: '2-digit'
+      };
+      const makeList = () =>{
+        for(let i=0;i<=60;i++){
+          const newObj = {
+            label: 1990 + i + '',
+            value: 1990 + i + '',
+            children: [
+              {
+                label: '年度',
+                value: 0
+              },
+              {
+                label: '一月',
+                value: 1
+              },
+              {
+                label: '二月',
+                value: 2
+              },
+              {
+                label: '三月',
+                value: 3
+              },
+              {
+                label: '四月',
+                value: 4
+              },
+              {
+                label: '五月',
+                value: 5
+              },
+              {
+                label: '六月',
+                value: 6
+              },
+              {
+                label: '七月',
+                value: 7
+              },
+              {
+                label: '八月',
+                value: 8
+              },
+              {
+                label: '九月',
+                value: 9
+              },
+              {
+                label: '十月',
+                value: 10
+              },
+              {
+                label: '十一月',
+                value: 11
+              },
+              {
+                label: '十二月',
+                value: 12
+              }
+            ]
+          }
+          state.optionList.push(newObj)
+        }
+      }
+			// const swi = setInterval(()=>{
+			// 	state.curValue = !state.curValue
+			// 	if(state.curValue == true){
+			// 		nextTick(()=>{
+			// 			initRisk1()
+			// 		})
+			// 	}else{
+			// 		nextTick(()=>{
+			// 			initRisk2()
+			// 		})
+			// 	}
+      //
+			// },5000)
+      // 获取部门列表
+      const getAllDepartment = async () => {
+        let res = await teamManageApi().getAllDepartment();
+        if (res.data.code === '200') {
+          state.departmentList = JSON.parse(JSON.stringify(res.data.data))
+          recursion(state.departmentList);
+        } else {
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          });
+        }
+      };
 
-			const swi = setInterval(()=>{
-				state.curValue = !state.curValue
-				if(state.curValue == true){
-					nextTick(()=>{
-						initRisk1()
-					})
-				}else{
-					nextTick(()=>{
-						initRisk2()
-					})
-				}
+      const recursion = (value: any) => {
+        for (let i of value) {
+          if (i.children.length !== 0) {
+            state.departmentRecursionList.push(i);
+            recursion(i.children);
+          } else {
+            state.departmentRecursionList.push(i);
+          }
+        }
+      };
+      // const recursion = (value: any) => {
+      //   for (let i of value) {
+      //     if (i.children.length !== 0) {
+      //       state.departmentRecursionList.push(i);
+      //       recursion(i.children);
+      //     } else {
+      //       state.departmentRecursionList.push(i);
+      //     }
+      //   }
+      // };
+      const getDataByYearId = async () => {
+        getTime()
+        const data = {
+          depId: screenTheme.value.depId || 1,
+          beginYear: state.timeValue[0],
+          beginMonth: state.timeValue[1],
+          endYear: state.timeValue[0],
+          endMonth: state.timeValue[1]
+        }
+        if(state.timeValue[1] == 0){
+          data.beginMonth = 1
+          data.endMonth = 12
+        }
+        let res = await riskWarningApi().getPreventByTimeDep(data);
+        if (res.data.code === '200') {
+          state.riskData = res.data.data
+          const depList = []
+          const deathList = []
+          const hardList = []
+          const lightList = []
+          for(let index in state.riskData){
+            state.riskData[index].depId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.riskData[index].depId))?.depName;
+            depList.push(state.riskData[index].depId)
+            deathList.push(state.riskData[index].detail.deathCount)
+            hardList.push(state.riskData[index].detail.heavyInjureCount)
+            lightList.push(state.riskData[index].detail.lightInjureCount)
+          }
+          // state.departmentList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName;
+          if(depList.length == 0){
+            depList.push('该部门不包含子部门数据')
+            deathList.push(0)
+            hardList.push(0)
+            lightList.push(0)
+          }
+          initRisk1(depList,deathList,hardList,lightList)
+        } else {
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          });
+        }
+      }
 
-			},5000)
+			const changeTime = (value)=>{
+				state.timeValue[0] = value[0]
+				state.timeValue[1] = value[1]
+				getDataByYearId()
+			}
+
 
 			type EChartsOption = echarts.EChartsOption
 			// 隐患整改情况
-			const initRisk1 =()=>{
+			const initRisk1 =(depList,deathList,hardList,lightList)=>{
 				let dom = document.getElementById(risk1.value);
 				let myChart = echarts.init(dom);
 
@@ -130,8 +259,33 @@
 							type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
 						}
 					},
+          // dataZoom: {
+          //   type: 'slider',
+          //   show: true,
+          //   textStyle: {
+          //     color: '#fff'
+          //   },
+          //   realtime: true,
+          //   top: 20,
+          //   left: 10,
+          //   height: 12,
+          //   width: 80,
+          //   start: 0,
+          //   end: 100,
+          //   orient: 'horizontal'
+          // },
+          dataZoom: [
+            //滑动条
+            {
+              xAxisIndex: 0, //这里是从X轴的0刻度开始
+              show: false, //是否显示滑动条,不影响使用
+              type: "slider", // 这个 dataZoom 组件是 slider 型 dataZoom 组件
+              startValue: 0, // 从头开始。
+              endValue: 6, // 一次性展示几个。
+            },
+          ],
 					legend: {
-						top: '1%',
+						top: '0',
 						left: 'center',
 						itemWidth: fontSize(10),
 						itemHeight: fontSize(8),
@@ -148,8 +302,7 @@
 					},
 					xAxis: {
 						type: 'category',
-						// data: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
-						data: ['企业总', 'A部门', 'B部门', 'C部门', 'D部门', 'E部门'],
+						data: depList,
 						axisLine:{
 							show: true,
 							lineStyle:{
@@ -157,7 +310,8 @@
 							}
 						},
 						axisLabel:{
-							color: '#999'
+							color: '#999',
+              fontSize: fontSize(9)
 						}
 					},
 					yAxis: {
@@ -186,8 +340,7 @@
 							emphasis: {
 								focus: 'series'
 							},
-							// data: [320, 302, 301, 334, 390, 330, 320, 301, 334, 390, 330, 320]
-							data: [320, 302, 301, 334, 390, 330],
+							data: deathList,
 							barCategoryGap: '50%'
 						},
 						{
@@ -200,8 +353,7 @@
 							emphasis: {
 								focus: 'series'
 							},
-							// data: [120, 132, 101, 134, 90, 230, 210, 132, 101, 134, 90, 230]
-							data: [120, 132, 101, 134, 90, 230],
+							data: hardList,
 							barCategoryGap: '50%'
 						},
 						{
@@ -214,131 +366,138 @@
 							emphasis: {
 								focus: 'series'
 							},
-							// data: [220, 182, 191, 234, 290, 330, 310, 191, 234, 290, 330, 310]
-							data: [220, 182, 191, 234, 290, 330],
+							data: lightList,
 							barCategoryGap: '50%'
 						}
 					]
 				};
-
-				option && myChart.setOption(option);
+				// option && myChart.setOption(option);
+        if (option && typeof option === 'object') {
+          myChart.setOption(option);
+          state.myVar = setInterval(function(){
+            if (option.dataZoom[0].endValue == depList.length ) {
+              option.dataZoom[0].endValue = 4;
+              option.dataZoom[0].startValue = 0;
+            } else {
+              option.dataZoom[0].endValue = option.dataZoom[0].endValue + 1;
+              option.dataZoom[0].startValue = option.dataZoom[0].startValue + 1;
+            }
+            myChart.setOption(option);
+          }, 6000)
+        }
 				window.addEventListener("resize",function (){
 					myChart.resize();
 				});
-				echarts.init(document.getElementById(risk2.value)).dispose()
+				// echarts.init(document.getElementById(risk2.value)).dispose()
 			}
 
-			const initRisk2 =()=>{
-				let dom = document.getElementById(risk2.value);
-				let myChart = echarts.init(dom);
-
-				let option: EChartsOption;
-
-				option = {
-					tooltip: {
-						trigger: 'axis',
-						axisPointer: {
-							// Use axis to trigger tooltip
-							type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
-						}
-					},
-					legend: {
-						top: '1%',
-						left: 'center',
-						itemWidth: fontSize(10),
-						itemHeight: fontSize(8),
-						textStyle:{
-							color: 'auto',
-							fontSize: fontSize(12)
-						}
-					},
-					grid: {
-						left: '2%',
-						right: '4%',
-						bottom: '0',
-						containLabel: true
-					},
-					xAxis: {
-						type: 'category',
-						// data: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
-						data: ['F部门', 'G部门', 'H部门', 'I部门', 'J部门', 'K部门'],
-						axisLine:{
-							show: true,
-							lineStyle:{
-								color: '#999'
-							}
-						},
-						axisLabel:{
-							color: '#999'
-						}
-					},
-					yAxis: {
-						type: 'value',
-						axisLine:{
-							show: true,
-							lineStyle:{
-								type: 'dotted'
-							}
-						},
-						axisLabel:{
-							color: '#999'
-						},
-						splitLine:{
-							show: false
-						}
-					},
-					series: [
-						{
-							name: '可能造成死亡的',
-							type: 'bar',
-							stack: 'total',
-							label: {
-								show: false
-							},
-							emphasis: {
-								focus: 'series'
-							},
-							// data: [320, 302, 301, 334, 390, 330, 320, 301, 334, 390, 330, 320]
-							data: [320, 301, 334, 390, 330, 320],
-							barCategoryGap: '50%'
-						},
-						{
-							name: '可能造成重伤的',
-							type: 'bar',
-							stack: 'total',
-							label: {
-								show: false
-							},
-							emphasis: {
-								focus: 'series'
-							},
-							// data: [120, 132, 101, 134, 90, 230, 210, 132, 101, 134, 90, 230]
-							data: [90, 230, 210, 132, 101, 134],
-							barCategoryGap: '50%'
-						},
-						{
-							name: '可能造成轻伤的',
-							type: 'bar',
-							stack: 'total',
-							label: {
-								show: false
-							},
-							emphasis: {
-								focus: 'series'
-							},
-							// data: [220, 182, 191, 234, 290, 330, 310, 191, 234, 290, 330, 310]
-							data: [290, 330, 310, 191, 234, 290],
-							barCategoryGap: '50%'
-						}
-					]
-				};
-
-				option && myChart.setOption(option);
-				window.addEventListener("resize",function (){
-					myChart.resize();
-				});
-				echarts.init(document.getElementById(risk1.value)).dispose()
-			}
+			// const initRisk2 =()=>{
+			// 	let dom = document.getElementById(risk2.value);
+			// 	let myChart = echarts.init(dom);
+      //
+			// 	let option: EChartsOption;
+      //
+			// 	option = {
+			// 		tooltip: {
+			// 			trigger: 'axis',
+			// 			axisPointer: {
+			// 				// Use axis to trigger tooltip
+			// 				type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
+			// 			}
+			// 		},
+			// 		legend: {
+			// 			top: '1%',
+			// 			left: 'center',
+			// 			itemWidth: fontSize(10),
+			// 			itemHeight: fontSize(8),
+			// 			textStyle:{
+			// 				color: 'auto',
+			// 				fontSize: fontSize(12)
+			// 			}
+			// 		},
+			// 		grid: {
+			// 			left: '2%',
+			// 			right: '4%',
+			// 			bottom: '0',
+			// 			containLabel: true
+			// 		},
+			// 		xAxis: {
+			// 			type: 'category',
+			// 			data: ['F部门', 'G部门', 'H部门', 'I部门', 'J部门', 'K部门'],
+			// 			axisLine:{
+			// 				show: true,
+			// 				lineStyle:{
+			// 					color: '#999'
+			// 				}
+			// 			},
+			// 			axisLabel:{
+			// 				color: '#999'
+			// 			}
+			// 		},
+			// 		yAxis: {
+			// 			type: 'value',
+			// 			axisLine:{
+			// 				show: true,
+			// 				lineStyle:{
+			// 					type: 'dotted'
+			// 				}
+			// 			},
+			// 			axisLabel:{
+			// 				color: '#999'
+			// 			},
+			// 			splitLine:{
+			// 				show: false
+			// 			}
+			// 		},
+			// 		series: [
+			// 			{
+			// 				name: '可能造成死亡的',
+			// 				type: 'bar',
+			// 				stack: 'total',
+			// 				label: {
+			// 					show: false
+			// 				},
+			// 				emphasis: {
+			// 					focus: 'series'
+			// 				},
+			// 				data: [320, 301, 334, 390, 330, 320],
+			// 				barCategoryGap: '50%'
+			// 			},
+			// 			{
+			// 				name: '可能造成重伤的',
+			// 				type: 'bar',
+			// 				stack: 'total',
+			// 				label: {
+			// 					show: false
+			// 				},
+			// 				emphasis: {
+			// 					focus: 'series'
+			// 				},
+			// 				data: [90, 230, 210, 132, 101, 134],
+			// 				barCategoryGap: '50%'
+			// 			},
+			// 			{
+			// 				name: '可能造成轻伤的',
+			// 				type: 'bar',
+			// 				stack: 'total',
+			// 				label: {
+			// 					show: false
+			// 				},
+			// 				emphasis: {
+			// 					focus: 'series'
+			// 				},
+			// 				data: [290, 330, 310, 191, 234, 290],
+			// 				barCategoryGap: '50%'
+			// 			}
+			// 		]
+			// 	};
+      //
+			// 	option && myChart.setOption(option);
+			// 	window.addEventListener("resize",function (){
+			// 		myChart.resize();
+			// 	});
+			// 	echarts.init(document.getElementById(risk1.value)).dispose()
+			// }
 
 			const getTheme =()=>{
 				if(screenTheme.value.isDark){
@@ -348,12 +507,20 @@
 				}
 			}
 
+      const getTime = () =>{
+        const curTime = new Date().toLocaleString('zh', timeForm).replace(/\//g, '-');
+        const temp = curTime.split('-')
+        state.timeValue[0] = temp[0]
+        state.timeValue[1] = Number(temp[1])
+      }
+
 			watchEffect(() => {
 				if(props.theme){
 					state.selector =  'select-dark'
 				}else{
 					state.selector =  'select-light'
 				}
+        getDataByYearId()
 			})
 
 			function fontSize(val){
@@ -363,19 +530,23 @@
 
 			// 页面载入时执行方法
 			onMounted(() => {
-				initRisk1();
+				// initRisk1();
 				getTheme();
+        getTime();
+        makeList();
+        getAllDepartment();
+        getDataByYearId()
 			});
 
 			onBeforeUnmount(() =>{
-				clearInterval(swi)
+				clearInterval(state.myVar)
 			})
 
 			return {
 				risk1,
-				risk2,
 				Search,
 				fontSize,
+				changeTime,
 				...toRefs(state)
 			};
 		},
@@ -390,23 +561,36 @@
 		position: relative;
 		.select-dark{
 			position: absolute;
-			z-index: 999;
+			z-index: 99999;
 			top: -20px;
-			right: 1.6rem;
+			right: 3rem;
 			width: 30%;
-			height: 20px;
+			height: 1.5rem;
 			margin-right: 0.8rem;
 
+			::v-deep(.el-cascader){
+				width: 100% !important;
+				line-height: 100%;
+			}
 			::v-deep(.el-popper){
 				background-color: rgba(10,31,92,1);
 				border: 1px solid rgba(17,254,238,.4);
 				color: #11FEEE;
-				.el-select-dropdown__item{
+				z-index: 999999 !important;
+				.el-cascader-node__label{
 					color: #11FEEE;
 				}
-				.el-select-dropdown__item.hover{
-					background: #0049af;
+				.el-icon{
+					color: #11FEEE;
 				}
+				.el-cascader-node{
+					&:hover{
+						background: #0049af;
+					}
+				}
+			}
+			::v-deep(.el-cascader-menu){
+				min-width: 50px !important;
 			}
 			::v-deep(.el-popper__arrow){
 				&::before{
@@ -433,23 +617,36 @@
 
 		.select-light{
 			position: absolute;
-			z-index: 999;
+			z-index: 99999;
 			top: -20px;
-			right: 1.6rem;
+			right: 3rem;
 			width: 30%;
 			height: 20px;
 			margin-right: 0.8rem;
 
+			::v-deep(.el-cascader){
+				width: 100% !important;
+				line-height: 100%;
+			}
 			::v-deep(.el-popper){
 				background-color: rgba(255,255,255,1);
 				border: 1px solid #ccc;
 				color: #fff;
-				.el-select-dropdown__item{
+				z-index: 999999 !important;
+				.el-cascader-node__label{
 					color: #000;
 				}
-				.el-select-dropdown__item.hover{
-					background: #ccc;
+				.el-icon{
+					color: #000;
 				}
+				.el-cascader-node{
+					&:hover{
+						background: #ccc;
+					}
+				}
+			}
+			::v-deep(.el-cascader-menu){
+				min-width: 80px !important;
 			}
 			::v-deep(.el-popper__arrow){
 				&::before{

--
Gitblit v1.9.2