| | |
| | | <template> |
| | | <div class="charts-cont"> |
| | | <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> |
| | | <div class="train" :id="train1"></div> |
| | | </div> |
| | | </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 |
| | | traData: Array<any>, |
| | | changeChart: any |
| | | } |
| | | export default defineComponent({ |
| | | name: 'accident', |
| | | components: {}, |
| | | props:{ |
| | | size: Number |
| | | size: Number, |
| | | theme: Boolean |
| | | }, |
| | | setup(props) { |
| | | setup(props,context) { |
| | | 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 |
| | | traData: [], |
| | | changeChart: null |
| | | }) |
| | | |
| | | // 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 changeTab = setInterval(()=>{ |
| | | if(state.curTab<3){ |
| | | state.curTab = state.curTab + 1 |
| | | if(state.curTab == 2){ |
| | | nextTick(()=>{ |
| | | initTrain2() |
| | | }) |
| | | }else{ |
| | | nextTick(()=>{ |
| | | initTrain3() |
| | | }) |
| | | } |
| | | const getDataById = async () => { |
| | | let res = await riskWarningApi().getSafeCheckTask(); |
| | | if (res.data.code === '200') { |
| | | state.traData = res.data.data |
| | | const chartData = state.traData.reduce((acc, curr, index) => { |
| | | if (index % 4 === 0) acc.push([]); |
| | | acc[acc.length - 1].push(curr); |
| | | return acc; |
| | | }, []) |
| | | let curIndex = 0 |
| | | const renderCharts = () => { |
| | | const data = chartData[curIndex] |
| | | initTrain1(data) |
| | | curIndex = (curIndex + 1) % chartData.length |
| | | } |
| | | renderCharts() |
| | | state.changeChart = setInterval(renderCharts,5000) |
| | | context.emit('getData',state.traData) |
| | | } else { |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }); |
| | | } |
| | | } |
| | | |
| | | }else{ |
| | | state.curTab = 1 |
| | | nextTick(()=>{ |
| | | initTrain1() |
| | | }) |
| | | } |
| | | },5000) |
| | | const getTheme =()=>{ |
| | | |
| | | } |
| | | |
| | | type EChartsOption = echarts.EChartsOption |
| | | // 隐患整改情况 |
| | | const initTrain1 =()=>{ |
| | | const initTrain1 =(data)=>{ |
| | | let dom = document.getElementById(train1.value); |
| | | let myChart = echarts.init(dom); |
| | | let option: EChartsOption; |
| | |
| | | } |
| | | }, |
| | | axisLabel:{ |
| | | color: '#ccc' |
| | | color: '#999' |
| | | }, |
| | | splitLine:{ |
| | | show: false |
| | |
| | | }, |
| | | yAxis: { |
| | | type: 'category', |
| | | // data: ['一月', '二月', '三月', '四月', '五月', '六月','七月', '八月', '九月', '十月', '十一月', '十二月'], |
| | | data: ['一月', '二月', '三月', '四月'], |
| | | data: data.map(i=>i.year+ '.' + i.month), |
| | | axisLine:{ |
| | | show: true, |
| | | lineStyle:{ |
| | | color: '#fff' |
| | | color: '#999' |
| | | } |
| | | }, |
| | | axisLabel:{ |
| | |
| | | { |
| | | name: '2011', |
| | | type: 'bar', |
| | | // data: [18203, 23489, 29034, 104970, 131744, 630230, 18203, 23489, 29034, 104970, 131744, 630230] |
| | | data: [18203, 23489, 29034, 104970], |
| | | data: data.map(i=>i.count), |
| | | itemStyle:{ |
| | | color: { |
| | | x: 0, |
| | |
| | | label:{ |
| | | show: true, |
| | | position: 'outside', |
| | | color: '#fff', |
| | | color: '#999', |
| | | fontSize: fontSize(11) |
| | | } |
| | | } |
| | |
| | | window.addEventListener("resize",function (){ |
| | | myChart.resize(); |
| | | }); |
| | | echarts.init(document.getElementById(train2.value)).dispose() |
| | | echarts.init(document.getElementById(train3.value)).dispose() |
| | | } |
| | | |
| | | const initTrain2 =()=>{ |
| | | let dom = document.getElementById(train2.value); |
| | | let myChart = echarts.init(dom); |
| | | let option: EChartsOption; |
| | | |
| | | option = { |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | axisPointer: { |
| | | type: 'shadow' |
| | | } |
| | | }, |
| | | grid: { |
| | | top: '1%', |
| | | left: '2%', |
| | | right: '2%', |
| | | bottom: '2%', |
| | | containLabel: true |
| | | }, |
| | | xAxis: { |
| | | type: 'value', |
| | | boundaryGap: [0, 0.01], |
| | | axisLine:{ |
| | | show: true, |
| | | lineStyle:{ |
| | | type: 'dotted' |
| | | } |
| | | }, |
| | | axisLabel:{ |
| | | color: '#ccc' |
| | | }, |
| | | splitLine:{ |
| | | show: false |
| | | } |
| | | }, |
| | | yAxis: { |
| | | type: 'category', |
| | | // data: ['一月', '二月', '三月', '四月', '五月', '六月','七月', '八月', '九月', '十月', '十一月', '十二月'], |
| | | data: ['五月', '六月','七月', '八月'], |
| | | axisLine:{ |
| | | show: true, |
| | | lineStyle:{ |
| | | color: '#fff' |
| | | } |
| | | }, |
| | | axisLabel:{ |
| | | color: '#fff' |
| | | } |
| | | }, |
| | | series: [ |
| | | { |
| | | name: '2011', |
| | | type: 'bar', |
| | | // data: [18203, 23489, 29034, 104970, 131744, 630230, 18203, 23489, 29034, 104970, 131744, 630230] |
| | | data: [131744, 630230, 18203, 23489], |
| | | barCategoryGap: '50%', |
| | | itemStyle:{ |
| | | color: { |
| | | x: 0, |
| | | y: 0, |
| | | x2: 1, |
| | | y2: 0, |
| | | colorStops: [ |
| | | { |
| | | offset: 0.1, |
| | | color: "#2D74C0", // 线处的颜色 |
| | | }, |
| | | { |
| | | offset: 0.9, |
| | | color: "#21D9DC", // 坐标轴处的颜色 |
| | | }, |
| | | ] |
| | | }, |
| | | borderRadius: [0,99,99,0] |
| | | }, |
| | | label:{ |
| | | show: true, |
| | | position: 'outside', |
| | | color: '#fff', |
| | | fontSize: fontSize(11) |
| | | } |
| | | } |
| | | ] |
| | | }; |
| | | |
| | | option && myChart.setOption(option); |
| | | window.addEventListener("resize",function (){ |
| | | myChart.resize(); |
| | | }); |
| | | echarts.init(document.getElementById(train1.value)).dispose() |
| | | echarts.init(document.getElementById(train3.value)).dispose() |
| | | } |
| | | |
| | | const initTrain3 =()=>{ |
| | | let dom = document.getElementById(train3.value); |
| | | let myChart = echarts.init(dom); |
| | | let option: EChartsOption; |
| | | |
| | | option = { |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | axisPointer: { |
| | | type: 'shadow' |
| | | } |
| | | }, |
| | | grid: { |
| | | top: '1%', |
| | | left: '2%', |
| | | right: '2%', |
| | | bottom: '2%', |
| | | containLabel: true |
| | | }, |
| | | xAxis: { |
| | | type: 'value', |
| | | boundaryGap: [0, 0.01], |
| | | axisLine:{ |
| | | show: true, |
| | | lineStyle:{ |
| | | type: 'dotted' |
| | | } |
| | | }, |
| | | axisLabel:{ |
| | | color: '#ccc' |
| | | }, |
| | | splitLine:{ |
| | | show: false |
| | | } |
| | | }, |
| | | yAxis: { |
| | | type: 'category', |
| | | // data: ['一月', '二月', '三月', '四月', '五月', '六月','七月', '八月', '九月', '十月', '十一月', '十二月'], |
| | | data: ['九月', '十月', '十一月', '十二月'], |
| | | axisLine:{ |
| | | show: true, |
| | | lineStyle:{ |
| | | color: '#fff' |
| | | } |
| | | }, |
| | | axisLabel:{ |
| | | color: '#fff' |
| | | } |
| | | }, |
| | | series: [ |
| | | { |
| | | name: '2011', |
| | | type: 'bar', |
| | | // data: [18203, 23489, 29034, 104970, 131744, 630230, 18203, 23489, 29034, 104970, 131744, 630230] |
| | | data: [29034, 104970, 131744, 630230], |
| | | barCategoryGap: '50%', |
| | | itemStyle:{ |
| | | color: { |
| | | x: 0, |
| | | y: 0, |
| | | x2: 1, |
| | | y2: 0, |
| | | colorStops: [ |
| | | { |
| | | offset: 0.1, |
| | | color: "#2D74C0", // 线处的颜色 |
| | | }, |
| | | { |
| | | offset: 0.9, |
| | | color: "#21D9DC", // 坐标轴处的颜色 |
| | | }, |
| | | ] |
| | | }, |
| | | borderRadius: [0,99,99,0] |
| | | }, |
| | | label:{ |
| | | show: true, |
| | | position: 'outside', |
| | | color: '#fff', |
| | | fontSize: fontSize(11) |
| | | } |
| | | } |
| | | ] |
| | | }; |
| | | |
| | | option && myChart.setOption(option); |
| | | window.addEventListener("resize",function (){ |
| | | myChart.resize(); |
| | | }); |
| | | echarts.init(document.getElementById(train1.value)).dispose() |
| | | echarts.init(document.getElementById(train2.value)).dispose() |
| | | } |
| | | |
| | | function fontSize(val){ |
| | |
| | | return val * (nowClientWidth/1920) * Number(props.size); |
| | | } |
| | | |
| | | |
| | | watchEffect(() => { |
| | | // getDataById() |
| | | }) |
| | | |
| | | // 页面载入时执行方法 |
| | | onMounted(() => { |
| | | initTrain1(); |
| | | getTheme(); |
| | | getDataById() |
| | | }); |
| | | onBeforeUnmount(() =>{ |
| | | clearInterval(changeTab) |
| | | clearInterval(state.changeChart) |
| | | }) |
| | | return { |
| | | train1, |
| | | train2, |
| | | train3, |
| | | Search, |
| | | fontSize, |
| | | ...toRefs(state) |
| | |
| | | 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; |