马宇豪
2024-11-12 77737f4e73f7267170b9b06fc73d1610c29c0661
src/views/riskWarningSys/warningBigScreen/indexs/index.vue
@@ -7,216 +7,134 @@
        </div>
      </dv-decoration-11>
    </div>
    <div class="tit">
      <div class="title">{{curChart===1?'事故等级分布':curChart===2?'应急演练次数':curChart===3?'隐患等级数量分布':curChart===4?'SPI数据分析':curChart===5?'教育培训分析':curChart===6?'隐患等级':curChart===7?'人员专业度分布':curChart===8?'预警消息报告':curChart===9?'特殊作业实时监控':'风险应急物资储备'}}</div>
    </div>
    <div class="chart-cont">
      <div class="chart">
        <div v-show="curChart===2" class="selector-2">距上次演练结束5天</div>
        <accident v-if="curChart===1" :size="2.5"></accident>
        <training v-else-if="curChart===2" :size="2.5"></training>
        <risk v-else-if="curChart===3" :month="month" :size="2.5"></risk>
        <spi v-else-if="curChart===4" :size="2"></spi>
        <educate v-else-if="curChart===5" :size="2.5"></educate>
        <danger v-else-if="curChart===6" :size="2.5"></danger>
        <profession v-else-if="curChart===7" :size="2.5"></profession>
        <message v-else-if="curChart===8" :size="2"></message>
        <monitor v-else-if="curChart===9" :size="2.5"></monitor>
        <stock v-else class="main-chart" :size="2"></stock>
      </div>
      <div class="chart-right">
        <dv-decoration-10 :color="lineColor" style="width:100%;height:5%;" />
        <div class="charts-des">
          <div class="des-tit">
            <div v-if="curChart===1">2022年度事故等级分布与影响一览</div>
            <div v-else-if="curChart===2">应急演练概况</div>
            <div v-else-if="curChart===3">隐患影响等级分布详情</div>
            <div v-else-if="curChart===4">2022年度事企业SPI趋势</div>
            <div v-else-if="curChart===5">教育培训情况汇总</div>
            <div v-else-if="curChart===6">隐患等级分布与隐患整改率</div>
            <div v-else-if="curChart===7">人员持证上岗情况</div>
            <div v-else-if="curChart===8">预警消息SPI报告-2022年8月</div>
            <div v-else-if="curChart===9">监控列表</div>
            <div v-else>当前应急物资储备情况(总)</div>
            <dv-decoration8 :color="lineColor" :reverse="true" style="width:100%;" />
          </div>
          <div v-if="curChart===2" class="des-main">
            <div>
              <h4>距上次【<span>{{trainDesc.title}}</span>】应急演练结束<span>{{trainDesc.total}}</span>天</h4>
              <h4>
                应急演练分月情况汇总:
              </h4>
              <p v-for="(item,index) in trainDesc.list" :key="index">{{item.month}}应急演练次数:{{item.num}}次</p>
            </div>
          </div>
          <div v-else class="des-main">
            <div v-for="(item,index) in accidentDesc" :key="index">
              <h4><span>{{item.title}}</span>共计:<span>{{item.total}}</span>起</h4>
              <h4>
                事故影响
              </h4>
              <p>{{item.desc}}</p>
            </div>
          </div>
        </div>
        <dv-decoration-10 :color="lineColor" style="width:100%;height:5%;" />
      </div>
    </div>
    <acc-desc v-show="curChart===1"></acc-desc>
    <train-desc v-show="curChart===2"></train-desc>
    <risk-desc v-show="curChart===3"></risk-desc>
    <spi-desc v-show="curChart===4"></spi-desc>
    <edu-desc v-show="curChart===5"></edu-desc>
    <dan-desc v-show="curChart===6"></dan-desc>
    <pro-desc v-show="curChart===7"></pro-desc>
    <msg-desc v-show="curChart===8" ref="msgRef"/>
    <mon-desc v-show="curChart===9"></mon-desc>
    <sto-desc v-show="curChart===10"></sto-desc>
  </div>
</template>
<script lang="ts">
  import screenfull from 'screenfull';
  import { toRefs, reactive, ref, onMounted, defineComponent, defineAsyncComponent, nextTick, onUnmounted } from 'vue';
  import {
    toRefs,
    reactive,
    ref,
    onMounted,
    defineComponent,
    defineAsyncComponent,
    nextTick,
    onUnmounted,
    watchEffect
  } from 'vue';
  import { ElTable } from 'element-plus';
  import { FormInstance, FormRules, ElMessage } from 'element-plus';
  import { safetyRiskEventApi } from '/@/api/doublePreventSystem/safetyRiskEvent/index.ts';
  import { useRoute } from 'vue-router';
  import {useRoute, useRouter} from 'vue-router';
  import {hiddenReportApi} from "/@/api/doublePreventSystem/report";
  import { productionDeviceApi } from '/@/api/doublePreventSystem/productionDevice/index.ts';
  import '/@/theme/bigScreen.css'
  import {useScreenTheme} from "/@/stores/screenTheme"
  import {storeToRefs} from "pinia";
  import msgDesc from '/@/views/riskWarningSys/warningBigScreen/indexs/components/msg.vue'
  // 定义接口来定义对象的类型
  interface stateType {
    isScreenfull: boolean;
    curChart: number | null;
    lineColor: Array<string>;
    accidentDesc: Array<any>;
    trainDesc: Object;
    lineColor: Array<string>
  }
  export default defineComponent({
    name: 'warningPage',
    components: {
      accident: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/components/accident.vue')),
      training: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/components/training.vue')),
      spi: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/components/SPI.vue')),
      risk: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/components/risk.vue')),
      educate: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/components/educate.vue')),
      danger: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/components/danger.vue')),
      profession: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/components/profession.vue')),
      message: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/components/message.vue')),
      monitor: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/components/monitor.vue')),
      stock: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/components/stock.vue'))
      accDesc: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/indexs/components/acc.vue')),
      trainDesc: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/indexs/components/train.vue')),
      spiDesc: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/indexs/components/spi.vue')),
      riskDesc: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/indexs/components/risk.vue')),
      eduDesc: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/indexs/components/edu.vue')),
      danDesc: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/indexs/components/dan.vue')),
      proDesc: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/indexs/components/pro.vue')),
      msgDesc,
      monDesc: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/indexs/components/mon.vue')),
      stoDesc: defineAsyncComponent(() => import('/@/views/riskWarningSys/warningBigScreen/indexs/components/sto.vue'))
    },
    setup() {
      const msgRef = ref()
      const screenThemes = useScreenTheme()
      const { screenTheme } = storeToRefs(screenThemes);
      const route = useRoute();
      const router = useRouter();
      const state = reactive<stateType>({
        isScreenfull: false,
        curChart: null,
        lineColor: ['#11FEEE'],
        accidentDesc:[
          {
            title: '特别重大事故',
            total: 10,
            desc: '死亡人数:0人; 重伤人数:2人; 轻伤人数:3人; 直接经济损失:180.61万元'
          },
          {
            title: '重大事故',
            total: 20,
            desc: '死亡人数:1人; 重伤人数:6人; 轻伤人数:0人; 直接经济损失:160.61万元'
          },
          {
            title: '较大事故',
            total: 100,
            desc: '死亡人数:0人; 重伤人数:0人; 轻伤人数:3人; 直接经济损失:190.61万元'
          },
          {
            title: '一般事故',
            total: 130,
            desc: '死亡人数:0人; 重伤人数:0人; 轻伤人数:0人; 直接经济损失:180.61万元'
          },
          {
            title: '未遂事故',
            total: 150,
            desc: '死亡人数:0人; 重伤人数:0人; 轻伤人数:0人; 直接经济损失:9万元'
          }
        ],
        trainDesc:{
          title: '公司级',
          total: 5,
          list: [
            {
              month: '一月份',
              num: 23
            },
            {
              month: '二月份',
              num: 76
            },
            {
              month: '三月份',
              num: 152
            },
            {
              month: '四月份',
              num: 200
            },
            {
              month: '五月份',
              num: 49
            },
            {
              month: '六月份',
              num: 83
            },
            {
              month: '七月份',
              num: 102
            },
            {
              month: '八月份',
              num: 99
            }
          ]
        }
      });
      // 页面载入时执行方法
      onMounted(() => {
        console.log(msgRef.value,'val')
        if (route.query.num) {
          state.curChart = Number(route.query.num)
          if(route.query.num == '8'){
            if(route.query.rowIndex){
              msgRef.value.showDetails(route.query.rowIndex)
            }else{
              msgRef.value.showDetails(0)
            }
          }
        }
        getTheme()
      });
      watchEffect(() => {
      })
      // 全屏
      const onScreenfullClick = () => {
        if (!screenfull.isEnabled) {
          ElMessage.warning('暂不不支持全屏');
          return false;
          return false
        }
        screenfull.toggle();
        screenfull.on('change', () => {
          if (screenfull.isFullscreen) {
            state.isScreenfull = true;
            state.isScreenfull = true
          } else {
            state.isScreenfull = false;
            state.isScreenfull = false
          }
        });
      };
      const getTheme =()=>{
        if(screenTheme.value.isDark){
          window.document.getElementById('pageCont').setAttribute( "class", 'dark-page' );
          window.document.getElementById('pageCont').setAttribute( "class", 'dark-page' )
          state.lineColor = ['#11FEEE']
        }else{
          window.document.getElementById('pageCont').setAttribute( "class", 'light-page' );
          window.document.getElementById('pageCont').setAttribute( "class", 'light-page' )
          state.lineColor = ['#333','#ccc']
        }
      }
      watchEffect(() => {
      })
      // 返回上一页
      const goBack = () => {
        window.history.go(-1);
        router.push({
            name: "warningScreen"
        });
      };
      return {
        route,
        msgRef,
        onScreenfullClick,
        goBack,
        ...toRefs(state)
@@ -296,9 +214,9 @@
        height: 100%;
        .charts-des{
          height: 90%;
          padding: 4%;
          background: url("../../../../assets/warningScreen/pagebg-r.png") no-repeat center;
          background-size: 100% 100%;
          padding: 4%;
          .des-tit{
            width: 100%;
@@ -417,9 +335,9 @@
        height: 100%;
        .charts-des{
          height: 90%;
          padding: 4%;
          background: url("../../../../assets/warningScreen/pagebg-r-light.png") no-repeat center;
          background-size: 100% 100%;
          padding: 4%;
          .des-tit{
            width: 100%;