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/training.vue |  168 +++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 135 insertions(+), 33 deletions(-)

diff --git a/src/views/riskWarningSys/warningBigScreen/components/training.vue b/src/views/riskWarningSys/warningBigScreen/components/training.vue
index 68eab0b..2410257 100644
--- a/src/views/riskWarningSys/warningBigScreen/components/training.vue
+++ b/src/views/riskWarningSys/warningBigScreen/components/training.vue
@@ -1,5 +1,7 @@
 <template>
 	<div class="charts-cont">
+    <span v-if="lastDays == -1" :class="tip">该部门本年未进行应急演练</span>
+    <span v-else :class="tip">距本年度上次演练结束{{lastDays}}天</span>
 		<div v-show="curTab === 1" class="train" :id="train1"></div>
 		<div v-show="curTab === 2" class="train" :id="train2"></div>
 		<div v-show="curTab === 3" class="train" :id="train3"></div>
@@ -7,59 +9,138 @@
 </template>
 
 <script lang="ts">
-	import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted, nextTick, onBeforeUnmount} from 'vue';
+import {
+  toRefs,
+  reactive,
+  defineComponent,
+  ref,
+  defineAsyncComponent,
+  onMounted,
+  nextTick,
+  onBeforeUnmount,
+  watchEffect
+} from 'vue';
 	import { storeToRefs } from 'pinia';
 	import { initBackEndControlRoutes } from '/@/router/backEnd';
 	import {useUserInfo} from "/@/stores/userInfo";
 	import { Session } from '/@/utils/storage';
 	import { Search } from '@element-plus/icons-vue'
+  import {useScreenTheme} from "/@/stores/screenTheme"
 	import { ElMessage } from 'element-plus'
 	import type { FormInstance, FormRules } from 'element-plus'
 	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
+  import { riskWarningApi } from '/@/api/riskWarning';
 	import * as echarts from 'echarts';
 	import '/@/theme/bigScreen.css'
 
 	interface stateType {
-		curTab: number
+		curTab: number,
+    timeValue: Array<any>,
+    traData: Array<any>,
+    monthData: Array<any>,
+    lastDays: number | null,
+    tip: string,
 	}
 	export default defineComponent({
 		name: 'accident',
 		components: {},
 		props:{
-			size: Number
+			size: Number,
+      theme: Boolean
 		},
 		setup(props) {
 			const userInfo = useUserInfo()
 			const { userInfos } = storeToRefs(userInfo);
+      const screenThemes = useScreenTheme()
+      const { screenTheme }  = storeToRefs(screenThemes);
 			const train1 = ref("eChartTrain1" + Date.now() + Math.random())
 			const train2 = ref("eChartTrain2" + Date.now() + Math.random())
 			const train3 = ref("eChartTrain3" + Date.now() + Math.random())
 			const state = reactive<stateType>({
-				curTab: 1
+				curTab: 1,
+        timeValue: [],
+        traData: [],
+        monthData: [],
+        lastDays: null,
+        tip: 'tip-dark'
 			})
+      const timeForm = {
+        hour12: false,
+        year: 'numeric',
+        month: 'numeric',
+        day: '2-digit',
+        hour: '2-digit',
+        minute: '2-digit',
+        second: '2-digit'
+      };
 
-			// const changeTab=()=>{
-			// 	setInterval(()=>{
-			// 		if(state.curTab<3){
-			// 			state.curTab = state.curTab + 1
-			// 			if(state.curTab == 2){
-			// 				nextTick(()=>{
-			// 					initTrain2()
-			// 				})
-			// 			}else{
-			// 				nextTick(()=>{
-			// 					initTrain3()
-			// 				})
-			// 			}
-			//
-			// 		}else{
-			// 			state.curTab = 1
-			// 			nextTick(()=>{
-			// 				initTrain1()
-			// 			})
-			// 		}
-			// 	},5000)
-			// }
+      const getDataById = async () => {
+        getTime()
+        const data = {
+          depId: screenTheme.value.depId || 1,
+          beginYear: state.timeValue[0],
+          beginMonth: 1,
+          endYear: state.timeValue[0],
+          endMonth: state.timeValue[1]
+        }
+        let res = await riskWarningApi().getEmergencyByDep(data);
+        if (res.data.code === '200') {
+          state.traData = res.data.data
+          const result = []
+          let lastTime = ''
+          for(let index in state.traData){
+            if(state.traData[index].detail && state.traData[index].detail.length>0){
+              let total = state.traData[index].detail.reduce((pre,cur)=>{
+                return pre+cur.practiceCount
+              },0)
+              result.push(total)
+              state.traData[index].totalCount = total
+            }else{
+              result.push(0)
+            }
+            for(let i in state.traData[index].detail){
+              if(state.traData[index].detail[i].lastPracticeTime != null){
+                lastTime = state.traData[index].detail[i].lastPracticeTime
+              }
+            }
+          }
+          if(!lastTime){
+            state.lastDays = -1
+          }else{
+            const date = new Date(lastTime)
+            const nTime = Date.now() - date.getTime()
+            state.lastDays = Math.floor(nTime / 86400000)
+          }
+          const arrNum = Math.ceil(result.length/4, 10);
+          let index = 0; // 定义初始索引
+          let resIndex = 0; // 用来保存每次拆分的长度
+          while(index< arrNum){
+            state.monthData[index]= result.slice(resIndex,4+resIndex);
+            resIndex += 4;
+            index++;
+          }
+          initTrain1()
+        } else {
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          });
+        }
+      }
+      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])
+      }
+
+      const getTheme =()=>{
+        if(screenTheme.value.isDark){
+          state.tip =  'tip-dark'
+        }else{
+          state.tip =  'tip-light'
+        }
+      }
 			const changeTab = setInterval(()=>{
 				if(state.curTab<3){
 					state.curTab = state.curTab + 1
@@ -119,7 +200,6 @@
 					},
 					yAxis: {
 						type: 'category',
-						// data: ['一月', '二月', '三月', '四月', '五月', '六月','七月', '八月', '九月', '十月', '十一月', '十二月'],
 						data: ['一月', '二月', '三月', '四月'],
 						axisLine:{
 							show: true,
@@ -135,8 +215,7 @@
 						{
 							name: '2011',
 							type: 'bar',
-							// data: [18203, 23489, 29034, 104970, 131744, 630230, 18203, 23489, 29034, 104970, 131744, 630230]
-							data: [18203, 23489, 29034, 104970],
+							data: state.monthData[0],
 							itemStyle:{
 								color: {
 									x: 0,
@@ -212,7 +291,6 @@
 					},
 					yAxis: {
 						type: 'category',
-						// data: ['一月', '二月', '三月', '四月', '五月', '六月','七月', '八月', '九月', '十月', '十一月', '十二月'],
 						data: ['五月', '六月','七月', '八月'],
 						axisLine:{
 							show: true,
@@ -229,7 +307,7 @@
 							name: '2011',
 							type: 'bar',
 							// data: [18203, 23489, 29034, 104970, 131744, 630230, 18203, 23489, 29034, 104970, 131744, 630230]
-							data: [131744, 630230, 18203, 23489],
+							data: state.monthData[1],
 							barCategoryGap: '50%',
 							itemStyle:{
 								color: {
@@ -322,7 +400,7 @@
 							name: '2011',
 							type: 'bar',
 							// data: [18203, 23489, 29034, 104970, 131744, 630230, 18203, 23489, 29034, 104970, 131744, 630230]
-							data: [29034, 104970, 131744, 630230],
+							data: state.monthData[2],
 							barCategoryGap: '50%',
 							itemStyle:{
 								color: {
@@ -366,9 +444,21 @@
 				return val * (nowClientWidth/1920) * Number(props.size);
 			}
 
+
+      watchEffect(() => {
+        if(props.theme){
+          state.tip =  'tip-dark'
+        }else{
+          state.tip =  'tip-light'
+        }
+        getDataById()
+      })
+
 			// 页面载入时执行方法
 			onMounted(() => {
-				initTrain1();
+        getTime();
+        getTheme();
+        getDataById()
 			});
 			onBeforeUnmount(() =>{
 				clearInterval(changeTab)
@@ -397,6 +487,18 @@
 			height: 100%;
 		}
 	}
+  .tip-dark{
+    display: block;
+    font-size: 0.8rem;
+    color: #11feee;
+    height: 1rem;
+  }
+  .tip-light{
+    display: block;
+    font-size: 0.8rem;
+    color: #333;
+    height: 1rem;
+  }
 	.home-container {
 		height: 100%;
 		overflow: hidden;

--
Gitblit v1.9.2