From eafc031e3e6e48778d22b5455358273714944012 Mon Sep 17 00:00:00 2001
From: Your Name <123456>
Date: 星期一, 05 九月 2022 09:53:16 +0800
Subject: [PATCH] Merge branch 'master' of https://sinanoaq.cn:8888/r/gtqt
---
src/views/specialWorkSystem/workTicket/myJobApply/components/heightLog.vue | 2
src/views/riskWarningSys/warningBigScreen/components/message.vue | 185 +
src/views/riskWarningSys/warningBigScreen/indexs/index.vue | 269 ++
src/assets/warningScreen/pagebg-t.png | 0
src/views/riskWarningSys/warningBigScreen/components/SPI.vue | 280 ++
src/views/newHome/index.vue | 2
src/views/specialWorkSystem/workTicket/workApply/components/broken.vue | 42
src/assets/warningScreen/video.png | 0
src/theme/bigScreen.css | 22
src/views/specialWorkSystem/workTicket/myJobApply/components/brokenLog.vue | 2
src/views/specialWorkSystem/workTicket/myApproval/components/groundLog.vue | 5
src/views/specialWorkSystem/workTicket/myApproval/components/spaceLog.vue | 2
src/views/specialWorkSystem/workTicket/workApply/components/hoist.vue | 29
src/router/route.ts | 8
src/views/riskWarningSys/warningBigScreen/index.vue | 568 ++++-
src/views/riskWarningSys/warningBigScreen/components/risk.vue | 341 +++
src/views/specialWorkSystem/workTicket/myJobApply/components/spaceLog.vue | 2
src/views/riskWarningSys/warningBigScreen/components/monitor.vue | 104 +
src/views/specialWorkSystem/workTicket/workApply/index.vue | 6
src/assets/warningScreen/pagebg-r.png | 0
src/views/riskWarningSys/warningBigScreen/components/danger.vue | 269 ++
src/views/specialWorkSystem/workTicket/myApproval/index.vue | 15
src/views/riskWarningSys/warningBigScreen/components/training.vue | 423 ++++
src/views/specialWorkSystem/workTicket/myApproval/components/brokenLog.vue | 3
src/views/specialWorkSystem/workProcess/gasCheck/index.vue | 540 +++++
src/main.ts | 3
src/assets/warningScreen/small-full.png | 0
/dev/null | 255 --
src/views/riskWarningSys/warningBigScreen/components/stock.vue | 681 ++++++
src/views/specialWorkSystem/workTicket/workApply/components/plate.vue | 35
src/views/specialWorkSystem/workTicket/workApply/components/space.vue | 35
src/views/doublePrevent/dpIndex/index.vue | 5
src/views/specialWorkSystem/workTicket/myJobApply/index.vue | 6
src/views/specialWorkSystem/workTicket/myJobApply/components/groundLog.vue | 2
src/views/specialWorkSystem/workTicket/workApply/components/power.vue | 5
src/views/riskWarningSys/warningBigScreen/components/accident.vue | 279 ++
src/views/specialWorkSystem/workAlert/alertRecord/index.vue | 438 ++++
src/views/specialWorkSystem/workTicket/workApply/components/height.vue | 61
package.json | 1
src/views/specialWorkSystem/workTicket/workApply/components/fire.vue | 29
src/views/riskWarningSys/warningBigScreen/components/educate.vue | 180 +
src/App.vue | 2
src/views/specialWorkSystem/workProcess/workCheck/index.vue | 521 +++++
src/views/specialWorkSystem/workTicket/myApproval/components/plateLog.vue | 3
src/views/specialWorkSystem/workTicket/workApply/components/ground.vue | 41
src/assets/warningScreen/body-bg.jpg | 0
src/assets/warningScreen/pagebg-l.png | 0
src/views/riskWarningSys/warningBigScreen/components/profession.vue | 176 +
48 files changed, 5,338 insertions(+), 539 deletions(-)
diff --git a/package.json b/package.json
index 258bc6c..a2d2bab 100644
--- a/package.json
+++ b/package.json
@@ -11,6 +11,7 @@
},
"dependencies": {
"@element-plus/icons-vue": "^2.0.6",
+ "@kjgl77/datav-vue3": "^1.2.1",
"@wangeditor/editor": "^5.1.14",
"axios": "^0.27.2",
"countup.js": "^2.2.0",
diff --git a/src/App.vue b/src/App.vue
index 3b4f398..9227320 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -7,7 +7,7 @@
<!-- <router-view v-if="!$route.meta.iskeepAlive" v-slot="{ Component }">-->
<!-- <transition name="fade" mode="in-out">-->
<!-- <keep-alive :exclude="excludeList" :include="includeList">-->
- <!-- <component :is="Component" :key="$route.id"></component>-->
+ <!-- <components :is="Component" :key="$route.id"></components>-->
<!-- </keep-alive>-->
<!-- </transition>-->
<!-- </router-view>-->
diff --git a/src/assets/warningScreen/body-bg.jpg b/src/assets/warningScreen/body-bg.jpg
new file mode 100644
index 0000000..92def2a
--- /dev/null
+++ b/src/assets/warningScreen/body-bg.jpg
Binary files differ
diff --git a/src/assets/warningScreen/pagebg-l.png b/src/assets/warningScreen/pagebg-l.png
new file mode 100644
index 0000000..c630e6f
--- /dev/null
+++ b/src/assets/warningScreen/pagebg-l.png
Binary files differ
diff --git a/src/assets/warningScreen/pagebg-r.png b/src/assets/warningScreen/pagebg-r.png
new file mode 100644
index 0000000..26976dc
--- /dev/null
+++ b/src/assets/warningScreen/pagebg-r.png
Binary files differ
diff --git a/src/assets/warningScreen/pagebg-t.png b/src/assets/warningScreen/pagebg-t.png
new file mode 100644
index 0000000..dd132ec
--- /dev/null
+++ b/src/assets/warningScreen/pagebg-t.png
Binary files differ
diff --git a/src/assets/warningScreen/small-full.png b/src/assets/warningScreen/small-full.png
new file mode 100644
index 0000000..d985854
--- /dev/null
+++ b/src/assets/warningScreen/small-full.png
Binary files differ
diff --git a/src/assets/warningScreen/video.png b/src/assets/warningScreen/video.png
new file mode 100644
index 0000000..b68fec6
--- /dev/null
+++ b/src/assets/warningScreen/video.png
Binary files differ
diff --git a/src/main.ts b/src/main.ts
index 18ef496..a45931b 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -13,6 +13,7 @@
import mitt from 'mitt';
import VueGridLayout from 'vue-grid-layout';
import zhCn from 'element-plus/lib/locale/lang/zh-cn';
+import DataVVue3 from '@kjgl77/datav-vue3'
const app = createApp(App);
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
@@ -21,6 +22,6 @@
directive(app);
other.elSvg(app);
-app.use(pinia).use(router).use(ElementPlus, { i18n: i18n.global.t, locale: zhCn }).use(i18n).use(VueGridLayout).mount('#app');
+app.use(pinia).use(router).use(ElementPlus, { i18n: i18n.global.t, locale: zhCn }).use(i18n).use(DataVVue3).use(VueGridLayout).mount('#app');
app.config.globalProperties.mittBus = mitt();
diff --git a/src/router/route.ts b/src/router/route.ts
index 5ee3c9e..96ace6c 100644
--- a/src/router/route.ts
+++ b/src/router/route.ts
@@ -111,5 +111,13 @@
meta: {
title: '预警预报'
}
+ },
+ {
+ path: '/screenPage',
+ name: 'screenPage',
+ component: () => import('/@/views/riskWarningSys/warningBigScreen/indexs/index.vue'),
+ meta: {
+ title: '预警预报'
+ }
}
];
diff --git a/src/theme/bigScreen.css b/src/theme/bigScreen.css
new file mode 100644
index 0000000..acbd111
--- /dev/null
+++ b/src/theme/bigScreen.css
@@ -0,0 +1,22 @@
+html{font-size:12px; font-size:62.5%; /* 10÷16=62.5% */}
+@media screen and (max-width: 1920px) {
+ html { font-size: 100%;}
+}
+@media screen and (max-width: 1336px) {
+ html { font-size: 80%;}
+}
+@media screen and (max-width: 1200px) {
+ html { font-size: 62.5%;}
+}
+@media screen and (max-width: 1000px) {
+ html { font-size: 10px;}
+}
+@media screen and (max-width: 800px) {
+ html { font-size: 8px;}
+}
+@media screen and (max-width: 700px) {
+ html { font-size: 7px;}
+}
+@media screen and (max-width: 600px) {
+ html { font-size: 6px;}
+}
\ No newline at end of file
diff --git a/src/views/doublePrevent/dpIndex/index.vue b/src/views/doublePrevent/dpIndex/index.vue
index f7db7c2..b8e5bf0 100644
--- a/src/views/doublePrevent/dpIndex/index.vue
+++ b/src/views/doublePrevent/dpIndex/index.vue
@@ -221,7 +221,6 @@
},
series: [
{
- name: 'Access From',
type: 'pie',
radius: ['35%', '60%'],
avoidLabelOverlap: false,
@@ -286,7 +285,8 @@
option = {
tooltip: {
- trigger: 'item'
+ trigger: 'item',
+ formatter: '已完成整改:75%' + '\n\r' + '整改中:19%' + '\n\r' + '暂未整改:6%'
},
legend: {
bottom: '5%',
@@ -294,7 +294,6 @@
},
series: [
{
- name: 'Access From',
type: 'pie',
radius: ['35%', '60%'],
avoidLabelOverlap: false,
diff --git a/src/views/newHome/index.vue b/src/views/newHome/index.vue
index 5f71b25..ca2e034 100644
--- a/src/views/newHome/index.vue
+++ b/src/views/newHome/index.vue
@@ -328,7 +328,7 @@
// 去风险大屏
const toRiskPlatform = () => {
// router.push({
- // name: "bigDataScreen"
+ // name: "warningScreen"
// });
window.open('http://39.104.85.193:8585/');
};
diff --git a/src/views/riskWarningSys/warningBigScreen/components/SPI.vue b/src/views/riskWarningSys/warningBigScreen/components/SPI.vue
new file mode 100644
index 0000000..f148306
--- /dev/null
+++ b/src/views/riskWarningSys/warningBigScreen/components/SPI.vue
@@ -0,0 +1,280 @@
+<template>
+ <div class="charts-cont">
+ <div class="spi" :id="spi">
+
+ </div>
+ </div>
+</template>
+
+<script lang="ts">
+ import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted} 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 { ElMessage } from 'element-plus'
+ import type { FormInstance, FormRules } from 'element-plus'
+ import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
+ import * as echarts from 'echarts';
+ import '/@/theme/bigScreen.css'
+
+ interface stateType {
+ }
+ export default defineComponent({
+ name: 'accident',
+ components: {},
+ props:{
+ size: Number,
+ dep: Number
+ },
+ setup(props) {
+ const userInfo = useUserInfo()
+ const { userInfos } = storeToRefs(userInfo);
+ const spi = ref("eChartSpi" + Date.now() + Math.random())
+ const state = reactive<stateType>({
+
+ })
+ type EChartsOption = echarts.EChartsOption
+ // 隐患整改情况
+ const initSpi =()=>{
+ let dom = document.getElementById(spi.value);
+ let myChart = echarts.init(dom);
+
+ let option: EChartsOption;
+
+ option = {
+ legend: {
+ data: ['注意线', '警告线', '危险线', 'SPI预警指数值'],
+ top: '0',
+ left: 'center',
+ textStyle:{
+ color: '#fff',
+ fontSize: fontSize(12)
+ }
+ },
+ tooltip: {
+ trigger: 'axis'
+ },
+ grid: {
+ left: '4%',
+ right: '4%',
+ bottom: '5%',
+ },
+ xAxis: [
+ {
+ type: 'category',
+ boundaryGap: false,
+ data: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
+ axisLine:{
+ show: true,
+ lineStyle:{
+ color: '#fff'
+ }
+ },
+ splitLine:{
+ show: true,
+ lineStyle:{
+ type: 'dashed',
+ color: 'rgba(255,255,255,.4)'
+ }
+ },
+ axisLabel:{
+ color: '#fff'
+ }
+ }
+ ],
+ yAxis: [
+ {
+ type: 'value',
+ axisLine:{
+ show: true,
+ lineStyle:{
+ type: 'dotted'
+ }
+ },
+ axisLabel:{
+ color: '#ccc'
+ },
+ splitLine:{
+ show: true,
+ lineStyle:{
+ type: 'dashed',
+ color: 'rgba(255,255,255,.4)'
+ }
+ }
+ }
+ ],
+ series: [
+ {
+ name: '注意线',
+ data: [500, 500, 500, 500, 500, 500, 500,500, 500, 500, 500, 500],
+ type: 'line',
+ lineStyle:{
+ width: 0
+ },
+ areaStyle: {
+ color: {
+ x: 0,
+ y: 0,
+ x2: 0,
+ y2: 1,
+ colorStops: [
+ {
+ offset: 0.1,
+ color: "rgba(147,208,81)", // 线处的颜色
+ },
+ {
+ offset: 0.9,
+ color: "rgba(147,208,81,.2)", // 坐标轴处的颜色
+ },
+ ]
+ },
+ },
+ showSymbol: false,
+ stack: 'Total',
+ smooth: true
+ },
+ {
+ name: '警告线',
+ data: [250, 250, 250, 250, 250, 250, 250,250, 250, 250, 250, 250],
+ type: 'line',
+ lineStyle:{
+ width: 0
+ },
+ areaStyle: {
+ color: {
+ x: 0,
+ y: 0,
+ x2: 0,
+ y2: 1,
+ colorStops: [
+ {
+ offset: 0.1,
+ color: "rgba(235,194,80)", // 线处的颜色
+ },
+ {
+ offset: 0.9,
+ color: "rgba(235,194,80,.6)", // 坐标轴处的颜色
+ },
+ ],
+ }
+ },
+ showSymbol: false,
+ stack: 'Total',
+ smooth: true
+ },
+ {
+ name: '危险线',
+ data: [250, 250, 250, 250, 250, 250, 250,250, 250, 250, 250, 250],
+ type: 'line',
+ lineStyle:{
+ width: 0
+ },
+ areaStyle: {
+ color: {
+ x: 0,
+ y: 0,
+ x2: 0,
+ y2: 1,
+ colorStops: [
+ {
+ offset: 0.1,
+ color: "rgba(216,55,55)", // 线处的颜色
+ },
+ {
+ offset: 0.9,
+ color: "rgba(216,55,55,.6)", // 坐标轴处的颜色
+ },
+ ],
+ }
+ },
+ showSymbol: false,
+ stack: 'Total',
+ smooth: true
+ },
+ {
+ name: 'SPI预警指数值',
+ data: [450, 632, 501, 434, 390, 530, 520,750, 632, 401, 634, 590],
+ type: 'line',
+ triggerLineEvent: true,
+ label:{
+ show: true,
+ color: '#fff',
+ fontSize: fontSize(12)
+ },
+ lineStyle:{
+ width: 2,
+ color: '#23E5E5'
+ },
+ itemStyle:{
+ color: '#23E5E5',
+ borderColor: '#fff',
+ borderWidth: 4
+ },
+ smooth: true
+ }
+ ]
+ };
+
+ option && myChart.setOption(option);
+ window.addEventListener("resize",function (){
+ myChart.resize();
+ });
+ }
+ function fontSize(val){
+ let nowClientWidth = document.documentElement.clientWidth;
+ return val * (nowClientWidth/1920) * Number(props.size);
+ }
+
+ // 页面载入时执行方法
+ onMounted(() => {
+ initSpi();
+ });
+
+ return {
+ spi,
+ Search,
+ fontSize,
+ ...toRefs(state)
+ };
+ },
+ });
+</script>
+
+<style scoped lang="scss">
+ .charts-cont{
+ width: 100%;
+ height: 100%;
+ padding: 5%;
+ position: relative;
+
+ .spi{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ .home-container {
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+ .el-row{
+ margin-bottom: 20px;
+ }
+ .el-row:last-child {
+ margin-bottom: 0;
+ }
+ .el-input{
+ width: 100% !important;
+ }
+ .el-date-editor::v-deep{
+ width: 100%;
+ }
+ .el-select{
+ width: 100%;
+ }
+ .el-cascader{
+ width: 100% !important;
+ }
+ }
+</style>
diff --git a/src/views/riskWarningSys/warningBigScreen/components/accident.vue b/src/views/riskWarningSys/warningBigScreen/components/accident.vue
new file mode 100644
index 0000000..9e3175d
--- /dev/null
+++ b/src/views/riskWarningSys/warningBigScreen/components/accident.vue
@@ -0,0 +1,279 @@
+<template>
+ <div class="charts-cont">
+ <div class="choose">
+ <div :class="cur===1?'act':''" @click="changeTab(1)">月度</div>
+ <div :class="cur===2?'act':''" @click="changeTab(2)">年度</div>
+ </div>
+ <div v-show="cur===1" class="month" :id="accidentMonth"></div>
+ <div v-show="cur===2" class="month" :id="accidentYear"></div>
+ </div>
+</template>
+
+<script lang="ts">
+ import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted, nextTick, onUnmounted} 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 { ElMessage } from 'element-plus'
+ import type { FormInstance, FormRules } from 'element-plus'
+ import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
+ import * as echarts from "echarts";
+ import '/@/theme/bigScreen.css'
+
+
+ interface stateType {
+ cur: number
+ }
+ export default defineComponent({
+ name: 'accident',
+ components: {},
+ props:{
+ size: Number
+ },
+ setup(props) {
+ const userInfo = useUserInfo()
+ const { userInfos } = storeToRefs(userInfo);
+ const accidentMonth = ref("eChartFix" + Date.now() + Math.random())
+ const accidentYear = ref("eChartFix" + Date.now() + Math.random())
+ const state = reactive<stateType>({
+ cur: 1
+ })
+
+ const changeTab =(i)=>{
+ state.cur = i
+ nextTick(()=>{
+ initAccidentByYear();
+ })
+ }
+ type EChartsOption = echarts.EChartsOption
+ // 隐患整改情况
+ const initAccidentByMonth =()=>{
+ let dom = document.getElementById(accidentMonth.value);
+ let myChart = echarts.init(dom);
+
+ let option: EChartsOption;
+
+ option = {
+ tooltip: {
+ trigger: 'item'
+ },
+ legend: {
+ top: '0',
+ left: 'center',
+ itemWidth: fontSize(10),
+ itemHeight: fontSize(8),
+ textStyle:{
+ color: '#fff',
+ fontSize: fontSize(11)
+ }
+ },
+ series: [
+ {
+ name: '月度数据',
+ type: 'pie',
+ radius: ['45%', '70%'],
+ avoidLabelOverlap: false,
+ itemStyle: {
+ borderRadius: fontSize(4)
+ },
+ label: {
+ show: false,
+ position: 'outer',
+ fontSize: fontSize(10),
+ color: '#ffffff',
+ textBorderWidth: 0,
+ width: fontSize(40),
+ overflow: 'break'
+ },
+ // labelLine: {
+ // show: true,
+ // length: fontSize(10),
+ // length2: fontSize(10)
+ // },
+ emphasis: {
+ label: {
+ show: true,
+ fontSize: fontSize(22),
+ fontWeight: 'bold'
+ }
+ },
+ data: [
+ { value: 1048, name: '特别重大事故' },
+ { value: 735, name: '重大事故' },
+ { value: 580, name: '较大事故' },
+ { value: 484, name: '一般事故' },
+ { value: 300, name: '未遂事故' }
+ ],
+ center: ['50%','60%']
+ }
+ ]
+ };
+
+ option && myChart.setOption(option);
+
+ window.addEventListener("resize",function (){
+ myChart.resize();
+ });
+ }
+ // 隐患整改情况
+ const initAccidentByYear =()=>{
+ let dom = document.getElementById(accidentYear.value);
+ let myChart = echarts.init(dom);
+
+ let option: EChartsOption;
+
+ option = {
+ tooltip: {
+ trigger: 'item'
+ },
+ legend: {
+ top: '0',
+ left: 'center',
+ itemWidth: fontSize(10),
+ itemHeight: fontSize(8),
+ textStyle:{
+ color: '#fff',
+ fontSize: fontSize(11)
+ }
+ },
+ series: [
+ {
+ name: '年度数据',
+ type: 'pie',
+ radius: ['45%', '70%'],
+ avoidLabelOverlap: false,
+ itemStyle: {
+ borderRadius: fontSize(4)
+ },
+ label: {
+ show: false,
+ position: 'outer',
+ fontSize: fontSize(10),
+ color: '#ffffff',
+ textBorderWidth: 0,
+ width: fontSize(40),
+ overflow: 'break'
+ },
+ // labelLine: {
+ // show: true,
+ // length: fontSize(10),
+ // length2: fontSize(10)
+ // },
+ emphasis: {
+ label: {
+ show: true,
+ fontSize: fontSize(22),
+ fontWeight: 'bold'
+ }
+ },
+ data: [
+ { value: 1048, name: '特别重大事故' },
+ { value: 735, name: '重大事故' },
+ { value: 580, name: '较大事故' },
+ { value: 484, name: '一般事故' },
+ { value: 300, name: '未遂事故' }
+ ],
+ center: ['50%','60%']
+ }
+ ]
+ };
+
+ option && myChart.setOption(option);
+
+ window.addEventListener("resize",function (){
+ myChart.resize();
+ });
+ }
+
+
+ function fontSize(val){
+ let nowClientWidth = document.documentElement.clientWidth;
+ return val * (nowClientWidth/1920) * Number(props.size);
+ }
+
+ // 页面载入时执行方法
+ onMounted(() => {
+ initAccidentByMonth();
+ // initAccidentByYear();
+ });
+
+ onUnmounted(() =>{
+ })
+
+ return {
+ accidentMonth,
+ accidentYear,
+ Search,
+ changeTab,
+ fontSize,
+ ...toRefs(state)
+ };
+ },
+ });
+</script>
+
+<style scoped lang="scss">
+ .charts-cont{
+ width: 100%;
+ height: 100%;
+ padding: 5%;
+ position: relative;
+
+ .choose{
+ position: absolute;
+ right: 5%;
+ bottom: 20px;
+ z-index: 999;
+ display: flex;
+ align-items: center;
+ font-size: 0.75rem;
+ justify-content: space-between;
+
+ div{
+ padding: 2px 6px;
+ box-sizing: border-box;
+ color: rgba(17,254,238,.4);
+ border: 1px solid rgba(17,254,238,.4);
+ border-radius: 2px;
+ cursor: pointer;
+ }
+ div:hover{
+ color: #11FEEE;
+ border: 1px solid #11FEEE;
+ }
+ .act{
+ color: #11FEEE;
+ border: 1px solid #11FEEE;
+ }
+ }
+ .month{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ .home-container {
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+ .el-row{
+ margin-bottom: 20px;
+ }
+ .el-row:last-child {
+ margin-bottom: 0;
+ }
+ .el-input{
+ width: 100% !important;
+ }
+ .el-date-editor::v-deep{
+ width: 100%;
+ }
+ .el-select{
+ width: 100%;
+ }
+ .el-cascader{
+ width: 100% !important;
+ }
+ }
+</style>
diff --git a/src/views/riskWarningSys/warningBigScreen/components/danger.vue b/src/views/riskWarningSys/warningBigScreen/components/danger.vue
new file mode 100644
index 0000000..96bdd13
--- /dev/null
+++ b/src/views/riskWarningSys/warningBigScreen/components/danger.vue
@@ -0,0 +1,269 @@
+<template>
+ <div class="charts-cont">
+<!-- <el-select v-model="selected" class="choose" size="small">-->
+<!-- <el-option label="月度" value="1"/>-->
+<!-- <el-option label="年度" value="2"/>-->
+<!-- </el-select>-->
+ <div class="choose">
+ <div :class="cur===1?'act':''" @click="changeTab(1)">企业</div>
+ <div :class="cur===2?'act':''" @click="changeTab(2)">部门</div>
+ </div>
+ <div v-show="cur===1" class="month" :id="dangerMonth"></div>
+ <div v-show="cur===2" class="year" :id="dangerYear"></div>
+ </div>
+</template>
+
+<script lang="ts">
+ import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted, nextTick } 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 { ElMessage } from 'element-plus'
+ import type { FormInstance, FormRules } from 'element-plus'
+ import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
+ import * as echarts from "echarts";
+ import '/@/theme/bigScreen.css'
+
+
+ interface stateType {
+ cur: number
+ }
+ export default defineComponent({
+ name: 'danger',
+ components: {},
+ props:{
+ size: Number
+ },
+ setup(props) {
+ const userInfo = useUserInfo()
+ const { userInfos } = storeToRefs(userInfo);
+ const dangerMonth = ref("eChartFix" + Date.now() + Math.random())
+ const dangerYear = ref("eChartFix" + Date.now() + Math.random())
+ const state = reactive<stateType>({
+ cur: 1
+ })
+
+ const changeTab =(i)=>{
+ state.cur = i
+ nextTick(()=>{
+ initdangerByYear()
+ })
+ }
+ type EChartsOption = echarts.EChartsOption
+ // 隐患整改情况
+ const initdangerByMonth =()=>{
+ let dom = document.getElementById(dangerMonth.value);
+ let myChart = echarts.init(dom);
+
+ let option: EChartsOption;
+
+ option = {
+ tooltip: {
+ trigger: 'item'
+ },
+ color: ['#FAC858','#EE6666'],
+ legend: {
+ top: '8%',
+ left: 'center',
+ itemWidth: fontSize(10),
+ itemHeight: fontSize(8),
+ textStyle:{
+ color: '#fff',
+ fontSize: fontSize(11)
+ }
+ },
+ series: [
+ {
+ type: 'pie',
+ radius: '65%',
+ avoidLabelOverlap: true,
+ label: {
+ show: true,
+ position: 'inside',
+ fontSize: fontSize(12),
+ color: '#ffffff',
+ textBorderWidth: 0,
+ width: 30,
+ overflow: 'break'
+ },
+ labelLine: {
+ show: true,
+ length: 10,
+ length2: 10
+ },
+ emphasis: {
+ label: {
+ show: true,
+ fontSize: fontSize(22),
+ fontWeight: 'bold'
+ }
+ },
+ data: [
+ { value: 235, name: '一般隐患' },
+ { value: 1048, name: '重大隐患' }
+ ],
+ center: ['50%','55%']
+ }
+ ]
+ };
+
+ option && myChart.setOption(option);
+
+ window.addEventListener("resize",function (){
+ myChart.resize();
+ });
+ }
+ // 隐患整改情况
+ const initdangerByYear =()=>{
+ let dom = document.getElementById(dangerYear.value);
+ let myChart = echarts.init(dom);
+
+ let option: EChartsOption;
+
+ option = {
+ tooltip: {
+ trigger: 'item'
+ },
+ color: ['#FAC858','#EE6666'],
+ legend: {
+ top: '8%',
+ left: 'center',
+ itemWidth: fontSize(10),
+ itemHeight: fontSize(8),
+ textStyle:{
+ color: '#fff',
+ fontSize: fontSize(11)
+ }
+ },
+ series: [
+ {
+ name: 'Access From',
+ type: 'pie',
+ radius: '65%',
+ avoidLabelOverlap: true,
+ label: {
+ show: true,
+ position: 'inside',
+ fontSize: fontSize(12),
+ color: '#ffffff',
+ textBorderWidth: 0,
+ width: 30,
+ overflow: 'break'
+ },
+ labelLine: {
+ show: true,
+ length: 10,
+ length2: 10
+ },
+ emphasis: {
+ label: {
+ show: true,
+ fontSize: fontSize(22),
+ fontWeight: 'bold'
+ }
+ },
+ data: [
+ { value: 35, name: '一般隐患' },
+ { value: 1048, name: '重大隐患' }
+ ],
+ center: ['50%','55%']
+ }
+ ]
+ };
+
+ option && myChart.setOption(option);
+
+ window.addEventListener("resize",function (){
+ myChart.resize();
+ });
+ }
+ function fontSize(val){
+ let nowClientWidth = document.documentElement.clientWidth;
+ return val * (nowClientWidth/1920) * Number(props.size);
+ }
+ // 页面载入时执行方法
+ onMounted(() => {
+ initdangerByMonth();
+ });
+
+ return {
+ dangerMonth,
+ dangerYear,
+ Search,
+ fontSize,
+ changeTab,
+ ...toRefs(state)
+ };
+ },
+ });
+</script>
+
+<style scoped lang="scss">
+ .charts-cont{
+ width: 100%;
+ height: 100%;
+ padding: 2% 2% 0;
+ position: relative;
+
+ .choose{
+ position: absolute;
+ right: 5%;
+ bottom: 20px;
+ z-index: 999;
+ display: flex;
+ align-items: center;
+ font-size: 0.75rem;
+ justify-content: space-between;
+
+ div{
+ padding: 2px 6px;
+ box-sizing: border-box;
+ color: rgba(17,254,238,.4);
+ border: 1px solid rgba(17,254,238,.4);
+ border-radius: 2px;
+ cursor: pointer;
+ }
+ div:hover{
+ color: #11FEEE;
+ border: 1px solid #11FEEE;
+ }
+ .act{
+ color: #11FEEE;
+ border: 1px solid #11FEEE;
+ }
+ }
+ .month{
+ width: 100%;
+ height: 100%;
+ }
+ .year{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ .home-container {
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+ .el-row{
+ margin-bottom: 20px;
+ }
+ .el-row:last-child {
+ margin-bottom: 0;
+ }
+ .el-input{
+ width: 100% !important;
+ }
+ .el-date-editor::v-deep{
+ width: 100%;
+ }
+ .el-select{
+ width: 100%;
+ }
+ .el-cascader{
+ width: 100% !important;
+ }
+ }
+</style>
diff --git a/src/views/riskWarningSys/warningBigScreen/components/educate.vue b/src/views/riskWarningSys/warningBigScreen/components/educate.vue
new file mode 100644
index 0000000..101504a
--- /dev/null
+++ b/src/views/riskWarningSys/warningBigScreen/components/educate.vue
@@ -0,0 +1,180 @@
+<template>
+ <div class="charts-cont">
+ <div class="educate" :id="educate">
+
+ </div>
+ </div>
+</template>
+
+<script lang="ts">
+ import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted} 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 { ElMessage } from 'element-plus'
+ import type { FormInstance, FormRules } from 'element-plus'
+ import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
+ import * as echarts from 'echarts';
+ import '/@/theme/bigScreen.css'
+
+
+ interface stateType {
+ }
+ export default defineComponent({
+ name: 'educate',
+ components: {},
+ props:{
+ size: Number
+ },
+ setup(props) {
+ const userInfo = useUserInfo()
+ const { userInfos } = storeToRefs(userInfo);
+ const educate = ref("eChartEdu" + Date.now() + Math.random())
+ const state = reactive<stateType>({
+
+ })
+ type EChartsOption = echarts.EChartsOption
+ // 隐患整改情况
+ const initEducate =()=>{
+ let dom = document.getElementById(educate.value);
+ let myChart = echarts.init(dom);
+
+ let option: EChartsOption;
+
+ option = {
+ color: ['#67F9D8', '#FFE434', '#56A3F1', '#FF917C'],
+ legend: {
+ top: '8%',
+ left: 'center',
+ itemWidth: fontSize(10),
+ itemHeight: fontSize(8),
+ textStyle:{
+ color: '#fff',
+ fontSize: fontSize(11)
+ }
+ },
+ radar: [
+ {
+ indicator: [
+ { name: '设计培训次数' },
+ { name: '培训时间(小时)' },
+ { name: '完成比例(%)' }
+ ],
+ center: ['50%', '60%'],
+ radius: fontSize(65),
+ startAngle: 90,
+ splitNumber: 4,
+ shape: 'circle',
+ axisName: {
+ formatter: '{value}',
+ color: '#428BD4',
+ fontSize: fontSize(10),
+ width: 20,
+ overflow: 'break'
+ },
+ splitArea: {
+ areaStyle: {
+ color: ['#77EADF', '#26C3BE', '#64AFE9', '#428BD4'],
+ shadowColor: 'rgba(0, 0, 0, 0.1)',
+ shadowBlur: 10
+ }
+ },
+ axisLine: {
+ lineStyle: {
+ color: 'rgba(211, 253, 250, 0.8)'
+ }
+ },
+ splitLine: {
+ lineStyle: {
+ color: 'rgba(211, 253, 250, 0.8)'
+ }
+ }
+ }
+ ],
+ series: [
+ {
+ type: 'radar',
+ emphasis: {
+ lineStyle: {
+ width: 4
+ }
+ },
+ data: [
+ {
+ value: [100, 8, 0.4, -80, 2000],
+ name: '企业汇总'
+ },
+ {
+ value: [60, 5, 0.3, -100, 1500],
+ name: '事业部A',
+ areaStyle: {
+ color: 'rgba(255, 228, 52, 0.6)'
+ }
+ }
+ ]
+ },
+ ]
+ };
+
+ option && myChart.setOption(option);
+ window.addEventListener("resize",function (){
+ myChart.resize();
+ });
+ }
+ function fontSize(val){
+ let nowClientWidth = document.documentElement.clientWidth;
+ return val * (nowClientWidth/1920) * Number(props.size);
+ }
+
+ // 页面载入时执行方法
+ onMounted(() => {
+ initEducate();
+ });
+
+ return {
+ educate,
+ Search,
+ fontSize,
+ ...toRefs(state)
+ };
+ },
+ });
+</script>
+
+<style scoped lang="scss">
+ .charts-cont{
+ width: 100%;
+ height: 100%;
+ position: relative;
+
+ .educate{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ .home-container {
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+ .el-row{
+ margin-bottom: 20px;
+ }
+ .el-row:last-child {
+ margin-bottom: 0;
+ }
+ .el-input{
+ width: 100% !important;
+ }
+ .el-date-editor::v-deep{
+ width: 100%;
+ }
+ .el-select{
+ width: 100%;
+ }
+ .el-cascader{
+ width: 100% !important;
+ }
+ }
+</style>
diff --git a/src/views/riskWarningSys/warningBigScreen/components/message.vue b/src/views/riskWarningSys/warningBigScreen/components/message.vue
new file mode 100644
index 0000000..637728b
--- /dev/null
+++ b/src/views/riskWarningSys/warningBigScreen/components/message.vue
@@ -0,0 +1,185 @@
+<template>
+ <div class="charts-cont">
+ <div class="message">
+ <dv-scroll-board ref="scrollBoard" :config="config" style="width:100%;height:100%" @mouseover="mouseoverHandler" @click="clickHandler" />
+ </div>
+ </div>
+</template>
+
+<script lang="ts">
+ import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted} 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 { ElMessage } from 'element-plus'
+ import type { FormInstance, FormRules } from 'element-plus'
+ import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
+ import * as echarts from 'echarts';
+ import '/@/theme/bigScreen.css'
+
+
+ interface stateType {
+ }
+ export default defineComponent({
+ name: 'profession',
+ components: {},
+ props:{
+ size: Number
+ },
+ setup(props) {
+ const userInfo = useUserInfo()
+ const { userInfos } = storeToRefs(userInfo);
+ const pro = ref("eChartPro" + Date.now() + Math.random())
+ const state = reactive<stateType>({
+ config:{
+ header: ['消息列表', '同比'],
+ data: [
+ ['一月预警消息SPI报告', '↑ 94%'],
+ ['二月预警消息SPI报告', '↑ 94%'],
+ ['三月预警消息SPI报告', '↑ 94%'],
+ ['四月预警消息SPI报告', '↑ 94%'],
+ ['五月预警消息SPI报告', '↑ 94%'],
+ ['六月预警消息SPI报告', '↑ 94%'],
+ ['七月预警消息SPI报告', '↑ 94%'],
+ ['八月预警消息SPI报告', '↑ 94%'],
+ ['九月预警消息SPI报告', '↑ 94%'],
+ ['十月预警消息SPI报告', '↑ 94%'],
+ ['十一月预警消息SPI报告', '↑ 94%'],
+ ['十二月预警消息SPI报告', '↑ 94%']
+ ],
+ index: true,
+ columnWidth: [60],
+ align: ['center','center','center'],
+ headerBGC: '#0049af',
+ oddRowBGC: 'none',
+ evenRowBGC: 'rgba(57,122,206,.1)',
+ indexHeader: '序号',
+ rowNum: fontSize(5)
+ }
+ })
+
+ const mouseoverHandler = (e: any) => {
+ console.log(e)
+ }
+
+ const clickHandler = (e: any) => {
+ console.log(e)
+ }
+
+ function fontSize(val){
+ let nowClientWidth = document.documentElement.clientWidth;
+ return val * (nowClientWidth/1920) * Number(props.size);
+ }
+
+ // 页面载入时执行方法
+ onMounted(() => {
+ });
+
+ return {
+ pro,
+ Search,
+ mouseoverHandler,
+ clickHandler,
+ fontSize,
+ ...toRefs(state)
+ };
+ },
+ });
+</script>
+<style scoped lang="scss">
+
+ .charts-cont{
+ width: 100%;
+ height: 100%;
+ padding: 5%;
+ position: relative;
+
+ .message{
+ width: 100%;
+ height: 100%;
+ border-radius: 4px;
+ overflow: hidden;
+
+ .th{
+ width: 100%;
+ display: flex;
+ height: 36px;
+ justify-content: space-between;
+ background: #1882d5;
+ font-size: 1rem;
+ line-height: 36px;
+ color: #ffffff;
+ .th-num{
+ width: 15%;
+ text-align: center;
+ }
+ .th-info{
+ width: 70%;
+ text-align: left;
+ color: #11FEEE
+ }
+ .th-sum{
+ width: 15%;
+ text-align: center;
+ }
+ }
+
+ .tm{
+ height: calc(100% - 36px);
+ width: 100%;
+ overflow: hidden;
+ scroll-behavior: smooth;
+
+ .ti{
+ display: flex;
+ height: 40px;
+ line-height: 40px;
+ justify-content: space-between;
+ color: #ffffff;
+
+ .num{
+ width: 15%;
+ text-align: center;
+ }
+ .info{
+ width: 70%;
+ text-align: left;
+ color: #11FEEE
+ }
+ .sum{
+ width: 15%;
+ text-align: center;
+ }
+ }
+ .darkBg{
+ background: rgba(57,122,206,.4);
+ }
+ }
+ }
+ }
+ .home-container {
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+ .el-row{
+ margin-bottom: 20px;
+ }
+ .el-row:last-child {
+ margin-bottom: 0;
+ }
+ .el-input{
+ width: 100% !important;
+ }
+ .el-date-editor::v-deep{
+ width: 100%;
+ }
+ .el-select{
+ width: 100%;
+ }
+ .el-cascader{
+ width: 100% !important;
+ }
+ }
+</style>
diff --git a/src/views/riskWarningSys/warningBigScreen/components/monitor.vue b/src/views/riskWarningSys/warningBigScreen/components/monitor.vue
new file mode 100644
index 0000000..a979428
--- /dev/null
+++ b/src/views/riskWarningSys/warningBigScreen/components/monitor.vue
@@ -0,0 +1,104 @@
+<template>
+ <div class="charts-cont">
+ <div class="monitor" :id="monitor">
+ <div>
+ <img src="../../../../assets/warningScreen/video.png">
+ </div>
+ </div>
+ </div>
+</template>
+
+<script lang="ts">
+ import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted} 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 { ElMessage } from 'element-plus'
+ import type { FormInstance, FormRules } from 'element-plus'
+ import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
+ import * as echarts from 'echarts';
+ import '/@/theme/bigScreen.css'
+
+
+ interface stateType {
+ }
+ export default defineComponent({
+ name: 'monitor',
+ components: {},
+ props:['allData'],
+ setup() {
+ const userInfo = useUserInfo()
+ const { userInfos } = storeToRefs(userInfo);
+ const monitor = ref("eChartMon" + Date.now() + Math.random())
+ const state = reactive<stateType>({
+
+ })
+
+
+
+ // 页面载入时执行方法
+ onMounted(() => {
+ });
+
+ return {
+ monitor,
+ Search,
+ ...toRefs(state)
+ };
+ },
+ });
+</script>
+
+<style scoped lang="scss">
+ .charts-cont{
+ width: 100%;
+ height: 100%;
+ padding: 5%;
+ position: relative;
+
+ .monitor{
+ width: 100%;
+ height: 100%;
+ position: relative;
+ border-radius: 8px;
+ overflow: hidden;
+
+ img{
+ display: block;
+ width: 100%;
+ height: auto;
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+ margin: auto;
+ }
+ }
+ }
+ .home-container {
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+ .el-row{
+ margin-bottom: 20px;
+ }
+ .el-row:last-child {
+ margin-bottom: 0;
+ }
+ .el-input{
+ width: 100% !important;
+ }
+ .el-date-editor::v-deep{
+ width: 100%;
+ }
+ .el-select{
+ width: 100%;
+ }
+ .el-cascader{
+ width: 100% !important;
+ }
+ }
+</style>
diff --git a/src/views/riskWarningSys/warningBigScreen/components/profession.vue b/src/views/riskWarningSys/warningBigScreen/components/profession.vue
new file mode 100644
index 0000000..ed926bf
--- /dev/null
+++ b/src/views/riskWarningSys/warningBigScreen/components/profession.vue
@@ -0,0 +1,176 @@
+<template>
+ <div class="charts-cont">
+<!-- <div class="pro" :id="pro">-->
+
+<!-- </div>-->
+ <dv-active-ring-chart :config="config" style="width:100%;height:100%" />
+ </div>
+</template>
+
+<script lang="ts">
+ import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted} 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 { ElMessage } from 'element-plus'
+ import type { FormInstance, FormRules } from 'element-plus'
+ import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
+ import * as echarts from 'echarts';
+ import '/@/theme/bigScreen.css'
+
+
+ interface stateType {
+ }
+ export default defineComponent({
+ name: 'profession',
+ components: {},
+ props:{
+ size: Number
+ },
+ setup(props) {
+ const userInfo = useUserInfo()
+ const { userInfos } = storeToRefs(userInfo);
+ const pro = ref("eChartPro" + Date.now() + Math.random())
+ const state = reactive<stateType>({
+ config:{
+ data: [
+ {
+ name: '持证人员',
+ value: 55
+ },
+ {
+ name: '非持证人员',
+ value: 120
+ }
+ ],
+ radius: '65%',
+ activeRadius: '60%',
+ color: ['#FAC858','#EE6666'],
+ lineWidth: fontSize(25),
+ digitalFlopStyle: {
+ fontSize: 16,
+ fill: '#fff'
+ }
+ }
+ })
+ // type EChartsOption = echarts.EChartsOption
+ // // 隐患整改情况
+ // const initPro =()=>{
+ // let dom = document.getElementById(pro.value);
+ // let myChart = echarts.init(dom);
+ //
+ // let option: EChartsOption;
+ //
+ // option = {
+ // tooltip: {
+ // trigger: 'item'
+ // },
+ // legend: {
+ // top: '0',
+ // left: 'center',
+ // textStyle:{
+ // color: '#fff',
+ // fontSize: fontSize(11)
+ // }
+ // },
+ // series: [
+ // {
+ // name: 'Access From',
+ // type: 'pie',
+ // radius: ['45%', '70%'],
+ // avoidLabelOverlap: false,
+ // itemStyle: {
+ // borderRadius: 4
+ // },
+ // label: {
+ // show: true,
+ // position: 'outer',
+ // fontSize: fontSize(12),
+ // color: '#ffffff',
+ // textBorderWidth: 0,
+ // width: 30,
+ // overflow: 'break'
+ // },
+ // labelLine: {
+ // show: true,
+ // length: 10,
+ // length2: 10
+ // },
+ // emphasis: {
+ // label: {
+ // show: true,
+ // fontSize: fontSize(22),
+ // fontWeight: 'bold'
+ // }
+ // },
+ // data: [
+ // { value: 1048, name: '持证人员' },
+ // { value: 735, name: '非持证人员' }
+ // ],
+ // center: ['50%','55%']
+ // }
+ // ]
+ // };
+ //
+ // option && myChart.setOption(option);
+ // window.addEventListener("resize",function (){
+ // myChart.resize();
+ // });
+ // }
+ function fontSize(val){
+ let nowClientWidth = document.documentElement.clientWidth;
+ return val * (nowClientWidth/1920) * Number(props.size);
+ }
+
+ // 页面载入时执行方法
+ onMounted(() => {
+ });
+
+ return {
+ pro,
+ Search,
+ fontSize,
+ ...toRefs(state)
+ };
+ },
+ });
+</script>
+
+<style scoped lang="scss">
+ .charts-cont{
+ width: 100%;
+ height: 100%;
+ padding: 4% 4% 0;
+ position: relative;
+
+ .pro{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ .home-container {
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+ .el-row{
+ margin-bottom: 20px;
+ }
+ .el-row:last-child {
+ margin-bottom: 0;
+ }
+ .el-input{
+ width: 100% !important;
+ }
+ .el-date-editor::v-deep{
+ width: 100%;
+ }
+ .el-select{
+ width: 100%;
+ }
+ .el-cascader{
+ width: 100% !important;
+ }
+ }
+</style>
diff --git a/src/views/riskWarningSys/warningBigScreen/components/risk.vue b/src/views/riskWarningSys/warningBigScreen/components/risk.vue
new file mode 100644
index 0000000..11c3cc1
--- /dev/null
+++ b/src/views/riskWarningSys/warningBigScreen/components/risk.vue
@@ -0,0 +1,341 @@
+<template>
+ <div class="charts-cont">
+ <div v-show="curValue===true" class="risk" :id="risk1"></div>
+ <div v-show="curValue===false" class="risk" :id="risk2"></div>
+ </div>
+</template>
+
+<script lang="ts">
+ import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted, nextTick, onBeforeUnmount} 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 { ElMessage } from 'element-plus'
+ import type { FormInstance, FormRules } from 'element-plus'
+ import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
+ import * as echarts from 'echarts';
+ import '/@/theme/bigScreen.css'
+
+
+ interface stateType {
+ curValue: boolean
+ }
+ export default defineComponent({
+ name: 'risk',
+ components: {},
+ props:{
+ size: Number,
+ month: Number
+ },
+ setup(props) {
+ const userInfo = useUserInfo()
+ const { userInfos } = storeToRefs(userInfo);
+ const risk1 = ref("eChartRisk1" + Date.now() + Math.random())
+ const risk2 = ref("eChartRisk2" + Date.now() + Math.random())
+ const state = reactive<stateType>({
+ curValue: true
+ })
+
+ const swi = setInterval(()=>{
+ state.curValue = !state.curValue
+ if(state.curValue == true){
+ nextTick(()=>{
+ initRisk1()
+ })
+ }else{
+ nextTick(()=>{
+ initRisk2()
+ })
+ }
+
+ },5000)
+
+ type EChartsOption = echarts.EChartsOption
+ // 隐患整改情况
+ const initRisk1 =()=>{
+ let dom = document.getElementById(risk1.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: '#fff',
+ fontSize: fontSize(12)
+ }
+ },
+ grid: {
+ left: '2%',
+ right: '4%',
+ bottom: '0',
+ containLabel: true
+ },
+ xAxis: {
+ type: 'category',
+ // data: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
+ data: ['企业总', 'A部门', 'B部门', 'C部门', 'D部门', 'E部门'],
+ axisLine:{
+ show: true,
+ lineStyle:{
+ color: '#fff'
+ }
+ },
+ axisLabel:{
+ color: '#fff'
+ }
+ },
+ yAxis: {
+ type: 'value',
+ axisLine:{
+ show: true,
+ lineStyle:{
+ type: 'dotted'
+ }
+ },
+ axisLabel:{
+ color: '#ccc'
+ },
+ 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, 302, 301, 334, 390, 330],
+ 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: [120, 132, 101, 134, 90, 230],
+ 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: [220, 182, 191, 234, 290, 330],
+ barCategoryGap: '50%'
+ }
+ ]
+ };
+
+ option && myChart.setOption(option);
+ window.addEventListener("resize",function (){
+ myChart.resize();
+ });
+ 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: '#fff',
+ 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: '#fff'
+ }
+ },
+ axisLabel:{
+ color: '#fff'
+ }
+ },
+ yAxis: {
+ type: 'value',
+ axisLine:{
+ show: true,
+ lineStyle:{
+ type: 'dotted'
+ }
+ },
+ axisLabel:{
+ color: '#ccc'
+ },
+ 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()
+ }
+
+ function fontSize(val){
+ let nowClientWidth = document.documentElement.clientWidth;
+ return val * (nowClientWidth/1920) * Number(props.size);
+ }
+
+ // 页面载入时执行方法
+ onMounted(() => {
+ initRisk1();
+ });
+
+ onBeforeUnmount(() =>{
+ clearInterval(swi)
+ })
+
+ return {
+ risk1,
+ risk2,
+ Search,
+ fontSize,
+ ...toRefs(state)
+ };
+ },
+ });
+</script>
+
+<style scoped lang="scss">
+ .charts-cont{
+ width: 100%;
+ height: 100%;
+ padding: 5% 5% 2%;
+ position: relative;
+
+ .risk{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ .home-container {
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+ .el-row{
+ margin-bottom: 20px;
+ }
+ .el-row:last-child {
+ margin-bottom: 0;
+ }
+ .el-input{
+ width: 100% !important;
+ }
+ .el-date-editor::v-deep{
+ width: 100%;
+ }
+ .el-select{
+ width: 100%;
+ }
+ .el-cascader{
+ width: 100% !important;
+ }
+ }
+</style>
diff --git a/src/views/riskWarningSys/warningBigScreen/components/stock.vue b/src/views/riskWarningSys/warningBigScreen/components/stock.vue
new file mode 100644
index 0000000..d7999b9
--- /dev/null
+++ b/src/views/riskWarningSys/warningBigScreen/components/stock.vue
@@ -0,0 +1,681 @@
+<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>
+</template>
+
+<script lang="ts">
+ import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted, nextTick, onBeforeUnmount} 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 { ElMessage } from 'element-plus'
+ import type { FormInstance, FormRules } from 'element-plus'
+ import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
+ import * as echarts from 'echarts';
+ import '/@/theme/bigScreen.css'
+
+ interface stateType {
+ curValue: boolean
+ }
+ export default defineComponent({
+ name: 'stock',
+ components: {},
+ props:{
+ size: Number
+ },
+ setup(props) {
+ 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
+ })
+
+ const swit = setInterval(()=>{
+ state.curValue = !state.curValue
+ if(state.curValue == true){
+ nextTick(()=>{
+ initStock1()
+ })
+ }else{
+ nextTick(()=>{
+ initStock2()
+ })
+ }
+ },5000)
+ type EChartsOption = echarts.EChartsOption
+ // 隐患整改情况
+ const initStock1 =()=>{
+ let dom = document.getElementById(stock1.value);
+ let myChart = echarts.init(dom);
+
+ let option: EChartsOption;
+
+ option = {
+ series: [
+ {
+ name: '消防耗材',
+ type: 'pie',
+ radius: ['40%', '45%'],
+ 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:'#fff',
+ lineHeight: fontSize(16)
+ },
+ active: {
+ fontSize: fontSize(16),
+ color:'#fff',
+ },
+ }
+ },
+ 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: ['40%', '45%'],
+ 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:'#fff',
+ lineHeight: fontSize(16)
+ },
+ active: {
+ fontSize: fontSize(16),
+ color:'#fff',
+ },
+ }
+ },
+ 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: ['40%', '45%'],
+ 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:'#fff',
+ lineHeight: fontSize(16)
+ },
+ active: {
+ fontSize: fontSize(16),
+ color:'#fff',
+ },
+ }
+ },
+ 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: ['40%', '45%'],
+ 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:'#fff',
+ lineHeight: fontSize(16)
+ },
+ active: {
+ fontSize: fontSize(16),
+ color:'#fff',
+ },
+ }
+ },
+ 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: ['40%', '45%'],
+ 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:'#fff',
+ lineHeight: fontSize(16)
+ },
+ active: {
+ fontSize: fontSize(16),
+ color:'#fff',
+ },
+ }
+ },
+ 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%']
+ }
+ ],
+ };
+
+ 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: ['40%', '45%'],
+ 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:'#fff',
+ lineHeight: fontSize(16)
+ },
+ active: {
+ fontSize: fontSize(16),
+ color:'#fff',
+ },
+ }
+ },
+ 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: ['40%', '45%'],
+ 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:'#fff',
+ lineHeight: fontSize(16)
+ },
+ active: {
+ fontSize: fontSize(16),
+ color:'#fff',
+ },
+ }
+ },
+ 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: ['40%', '45%'],
+ 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:'#fff',
+ lineHeight: fontSize(16)
+ },
+ active: {
+ fontSize: fontSize(16),
+ color:'#fff',
+ },
+ }
+ },
+ 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: ['40%', '45%'],
+ 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:'#fff',
+ lineHeight: fontSize(16)
+ },
+ active: {
+ fontSize: fontSize(16),
+ color:'#fff',
+ },
+ }
+ },
+ 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: ['40%', '45%'],
+ 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:'#fff',
+ lineHeight: fontSize(16)
+ },
+ active: {
+ fontSize: fontSize(16),
+ color:'#fff',
+ },
+ }
+ },
+ 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){
+ let nowClientWidth = document.documentElement.clientWidth;
+ return val * (nowClientWidth/1920) * Number(props.size);
+ }
+
+ // 页面载入时执行方法
+ onMounted(() => {
+ initStock1();
+ });
+ onBeforeUnmount(() =>{
+ clearInterval(swit)
+ })
+ return {
+ stock1,
+ stock2,
+ Search,
+ fontSize,
+ ...toRefs(state)
+ };
+ },
+ });
+</script>
+
+<style scoped lang="scss">
+ .charts-cont{
+ width: 100%;
+ height: 100%;
+ padding: 4% 2% 2%;
+ position: relative;
+
+ .stock{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ .home-container {
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+ .el-row{
+ margin-bottom: 20px;
+ }
+ .el-row:last-child {
+ margin-bottom: 0;
+ }
+ .el-input{
+ width: 100% !important;
+ }
+ .el-date-editor::v-deep{
+ width: 100%;
+ }
+ .el-select{
+ width: 100%;
+ }
+ .el-cascader{
+ width: 100% !important;
+ }
+ }
+</style>
diff --git a/src/views/riskWarningSys/warningBigScreen/components/training.vue b/src/views/riskWarningSys/warningBigScreen/components/training.vue
new file mode 100644
index 0000000..eb0cf52
--- /dev/null
+++ b/src/views/riskWarningSys/warningBigScreen/components/training.vue
@@ -0,0 +1,423 @@
+<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>
+</template>
+
+<script lang="ts">
+ import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted, nextTick, onBeforeUnmount} 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 { ElMessage } from 'element-plus'
+ import type { FormInstance, FormRules } from 'element-plus'
+ import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
+ import * as echarts from 'echarts';
+ import '/@/theme/bigScreen.css'
+
+ interface stateType {
+ curTab: number
+ }
+ export default defineComponent({
+ name: 'accident',
+ components: {},
+ props:{
+ size: Number
+ },
+ setup(props) {
+ const userInfo = useUserInfo()
+ const { userInfos } = storeToRefs(userInfo);
+ 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
+ })
+
+ // 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()
+ })
+ }
+
+ }else{
+ state.curTab = 1
+ nextTick(()=>{
+ initTrain1()
+ })
+ }
+ },5000)
+ type EChartsOption = echarts.EChartsOption
+ // 隐患整改情况
+ const initTrain1 =()=>{
+ let dom = document.getElementById(train1.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: [18203, 23489, 29034, 104970],
+ 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]
+ },
+ barCategoryGap: '50%',
+ label:{
+ show: true,
+ position: 'outside',
+ color: '#fff',
+ fontSize: fontSize(11)
+ }
+ }
+ ]
+ };
+
+ option && myChart.setOption(option);
+ 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){
+ let nowClientWidth = document.documentElement.clientWidth;
+ return val * (nowClientWidth/1920) * Number(props.size);
+ }
+
+ // 页面载入时执行方法
+ onMounted(() => {
+ initTrain1();
+ });
+ onBeforeUnmount(() =>{
+ clearInterval(changeTab)
+ })
+ return {
+ train1,
+ train2,
+ train3,
+ Search,
+ fontSize,
+ ...toRefs(state)
+ };
+ },
+ });
+</script>
+
+<style scoped lang="scss">
+ .charts-cont{
+ width: 100%;
+ height: 100%;
+ padding: 1% 5% 5%;
+ position: relative;
+
+ .train{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ .home-container {
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+ .el-row{
+ margin-bottom: 20px;
+ }
+ .el-row:last-child {
+ margin-bottom: 0;
+ }
+ .el-input{
+ width: 100% !important;
+ }
+ .el-date-editor::v-deep{
+ width: 100%;
+ }
+ .el-select{
+ width: 100%;
+ }
+ .el-cascader{
+ width: 100% !important;
+ }
+ }
+</style>
diff --git a/src/views/riskWarningSys/warningBigScreen/index.vue b/src/views/riskWarningSys/warningBigScreen/index.vue
index 14a11d4..7eb9d5f 100644
--- a/src/views/riskWarningSys/warningBigScreen/index.vue
+++ b/src/views/riskWarningSys/warningBigScreen/index.vue
@@ -25,40 +25,130 @@
<div class="main-content">
<div class="main-left">
<div class="left-top">
-
+ <dv-border-box-13 backgroundColor="rgba(8, 109, 209, 0.2)" class="box-bg"></dv-border-box-13>
+ <div class="part-tit">
+ <span>| 事故等级分布</span>
+ <img @click="jumpPage(1)" src="../../../assets/warningScreen/small-full.png">
+ </div>
+ <div class="chart-box">
+ <accident :size="1"></accident>
+ </div>
</div>
<div class="left-mid">
-
+ <dv-border-box-13 backgroundColor="rgba(8, 109, 209, 0.2)" class="box-bg"></dv-border-box-13>
+ <div class="part-tit">
+ <span>| 应急演练次数</span>
+ <img @click="jumpPage(2)" src="../../../assets/warningScreen/small-full.png">
+ </div>
+ <div class="chart-box">
+ <span class="train-tip">距上次演练结束 5 天</span>
+ <training :size="1"></training>
+ </div>
</div>
<div class="left-bottom">
+ <dv-border-box-13 backgroundColor="rgba(8, 109, 209, 0.2)" class="box-bg"></dv-border-box-13>
+ <div class="part-tit">
+ <span>| 隐患等级数量分布</span>
+ <div>
+ <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"
+ />
+ </el-select>
+ <img @click="jumpPage(3)" src="../../../assets/warningScreen/small-full.png">
+ </div>
+ </div>
+ <div class="chart-box">
+ <risk :size="1" :month="month"></risk>
+ </div>
</div>
</div>
<div class="main-middle">
<div class="mid-top">
-
+ <dv-border-box-11 title="SPI数据分析" backgroundColor="rgba(8, 109, 209, 0.2)" class="box-bg"></dv-border-box-11>
+ <div class="part-tit" style="position: absolute;top: 12%;padding: 0 4%">
+ <el-cascader
+ class="spiSe"
+ :teleported="false"
+ v-model="spiValue"
+ :options="spiOptions"
+ :props="props"
+ @change="handleChange"
+ />
+<!-- <span>SPI数据分析</span>-->
+ <img @click="jumpPage(4)" src="../../../assets/warningScreen/small-full.png">
+ </div>
+ <div class="chart-box">
+ <spi :size="1" :dep="spiValue"></spi>
+ </div>
</div>
<div class="mid-bottom">
<div class="mid-bot-l">
-
+ <dv-border-box-13 backgroundColor="rgba(8, 109, 209, 0.2)" class="box-bg"></dv-border-box-13>
+ <div class="part-tit">
+ <span>| 教育培训分析</span>
+ <img @click="jumpPage(5)" src="../../../assets/warningScreen/small-full.png">
+ </div>
+ <div class="chart-box">
+ <educate :size="1"></educate>
+ </div>
</div>
<div class="mid-bot-m">
-
+ <dv-border-box-13 backgroundColor="rgba(8, 109, 209, 0.2)" class="box-bg"></dv-border-box-13>
+ <div class="part-tit">
+ <span>| 隐患等级</span>
+ <img @click="jumpPage(6)" src="../../../assets/warningScreen/small-full.png">
+ </div>
+ <div class="chart-box">
+ <danger :size="1"></danger>
+ </div>
</div>
<div class="mid-bot-r">
-
+ <dv-border-box-13 backgroundColor="rgba(8, 109, 209, 0.2)" class="box-bg"></dv-border-box-13>
+ <div class="part-tit">
+ <span>| 人员专业度分布</span>
+ <img @click="jumpPage(7)" src="../../../assets/warningScreen/small-full.png">
+ </div>
+ <div class="chart-box">
+ <profession :size="1"></profession>
+ </div>
</div>
</div>
</div>
<div class="main-right">
<div class="right-top">
-
+ <dv-border-box-13 backgroundColor="rgba(8, 109, 209, 0.2)" class="box-bg"></dv-border-box-13>
+ <div class="part-tit">
+ <span>| 预警消息报告</span>
+ <img @click="jumpPage(8)" src="../../../assets/warningScreen/small-full.png">
+ </div>
+ <div class="chart-box">
+ <message :size="1"></message>
+ </div>
</div>
<div class="right-mid">
-
+ <dv-border-box-13 backgroundColor="rgba(8, 109, 209, 0.2)" class="box-bg"></dv-border-box-13>
+ <div class="part-tit">
+ <span>| 特殊作业实时监控</span>
+ <img @click="jumpPage(9)" src="../../../assets/warningScreen/small-full.png">
+ </div>
+ <div class="chart-box">
+ <monitor></monitor>
+ </div>
</div>
<div class="right-bottom">
-
+ <dv-border-box-13 backgroundColor="rgba(8, 109, 209, 0.2)" class="box-bg"></dv-border-box-13>
+ <div class="part-tit">
+ <span>| 风险应急物资储备</span>
+ <img @click="jumpPage(10)" src="../../../assets/warningScreen/small-full.png">
+ </div>
+ <div class="chart-box">
+ <stock :size="1"></stock>
+ </div>
</div>
</div>
</div>
@@ -67,42 +157,148 @@
<script lang="ts">
import screenfull from 'screenfull';
- import { toRefs, reactive, ref, onMounted } from 'vue';
+ import { toRefs, reactive, ref, onMounted, defineComponent, defineAsyncComponent, nextTick, onUnmounted } from 'vue';
import { ElTable } from 'element-plus';
import { FormInstance, FormRules, ElMessage } from 'element-plus';
import { safetyRiskEventApi } from '/@/api/doublePreventSystem/safetyRiskEvent/index.ts';
import { useRouter } from 'vue-router';
import {hiddenReportApi} from "/@/api/doublePreventSystem/report";
import { productionDeviceApi } from '/@/api/doublePreventSystem/productionDevice/index.ts';
- import * as echarts from 'echarts/core';
- import {TooltipComponent, TooltipComponentOption, LegendComponent, LegendComponentOption} from 'echarts/components';
- import {PieChart, PieSeriesOption} from 'echarts/charts';
- import {LabelLayout} from 'echarts/features';
- import {CanvasRenderer} from 'echarts/renderers';
- echarts.use([TooltipComponent, LegendComponent, PieChart, CanvasRenderer, LabelLayout]);
+ import '/@/theme/bigScreen.css'
+
// 定义接口来定义对象的类型
interface stateType {
isScreenfull: boolean;
- currentTime: string
+ currentTime: string;
+ month: number;
+ spiValue: number;
+ optionList: Array<any>;
+ spiOptions: Array<any>
}
- export default {
+ export default defineComponent({
name: 'warningScreen',
- components: {},
+ 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'))
+ },
setup() {
const router = useRouter();
+ const props = {
+ expandTrigger: 'hover',
+ }
const state = reactive<stateType>({
isScreenfull: false,
- currentTime: ''
+ currentTime: '',
+ month: 0,
+ spiValue: 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
+ }
+ ],
+ spiOptions: [
+ {
+ value: 0,
+ label: '公司级别SPI'
+ },
+ {
+ value: 1,
+ label: 'A事业部SPI',
+ children: [
+ {
+ value: 11,
+ label: 'A车间SPI'
+ },
+ {
+ value: 12,
+ label: 'B车间SPI'
+ },
+ {
+ value: 13,
+ label: 'C车间SPI'
+ }
+ ]
+ },
+ {
+ value: 2,
+ label: 'B事业部SPI',
+ children: [
+ {
+ value: 21,
+ label: 'D车间SPI'
+ },
+ {
+ value: 22,
+ label: 'E车间SPI'
+ },
+ {
+ value: 23,
+ label: 'F车间SPI'
+ }
+ ]
+ }
+ ]
});
// 页面载入时执行方法
onMounted(() => {
- setInterval(() => {
- state.currentTime = new Date().toLocaleString();
- console.log(state.currentTime)
- }, 1000);
+ getTime()
});
+ const getTime =()=>{
+ setInterval(() => {
+ state.currentTime = new Date().toLocaleString();
+ }, 1000);
+ }
// 全屏
const onScreenfullClick = () => {
if (!screenfull.isEnabled) {
@@ -118,6 +314,15 @@
}
});
};
+
+ const jumpPage = (num) =>{
+ router.push({
+ path: 'screenPage',
+ query: {
+ num: num
+ }
+ });
+ }
// 返回上一页
const goBack = () => {
@@ -138,103 +343,21 @@
// }
// };
- // 隐患整改情况
- // const initRiskFix =()=>{
- // var dom = document.getElementById('riskFix');
- // var myChart = echarts.init(dom, null, {
- // renderer: 'canvas',
- // useDirtyRect: false
- // });
- // var app = {};
- //
- // var option;
- //
- // option = {
- // tooltip: {
- // trigger: 'item'
- // },
- // legend: {
- // bottom: '5%',
- // left: 'center'
- // },
- // series: [
- // {
- // name: 'Access From',
- // type: 'pie',
- // radius: ['35%', '60%'],
- // avoidLabelOverlap: false,
- // itemStyle: {
- // borderRadius: 6,
- // borderColor: '#fff',
- // borderWidth: 2
- // },
- // label: {
- // alignTo: 'labelLine',
- // formatter: '{name|{b}}\n{value|{c}}',
- // minMargin: 5,
- // edgeDistance: 5,
- // lineHeight: 15,
- // rich: {
- // name: {
- // fontSize: 14,
- // color: '#666'
- // }
- // }
- // },
- // labelLine: {
- // length: 15,
- // maxSurfaceAngle: 80
- // },
- // emphasis: {
- // label: {
- // show: true,
- // fontSize: '40',
- // fontWeight: 'bold'
- // }
- // },
- // data: [
- // { value: 1048, name: '整改中' },
- // { value: 735, name: '待验收' },
- // { value: 580, name: '延期整改' },
- // { value: 484, name: '超期未整改' },
- // { value: 300, name: '已验收' }
- // ],
- // center: ['50%','40%']
- // }
- // ]
- // };
- //
- // if (option && typeof option === 'object') {
- // myChart.setOption(option);
- // }
- //
- // window.addEventListener('resize', myChart.resize);
- // }
-
return {
router,
+ props,
onScreenfullClick,
+ jumpPage,
goBack,
...toRefs(state)
};
}
- };
+ });
</script>
<style scoped lang="scss">
$homeNavLengh: 8;
- @media screen and (min-width: 1366px) {
-
- }
-
- @media screen and (min-width: 1024px) and (max-width: 1366px){
-
- }
-
- @media screen and (max-width: 1024px) {
-
- }
.container {
width: 100%;
height: 100%;
@@ -247,9 +370,9 @@
.header-content {
width: 100%;
- height: 80px;
+ height: 72px;
padding: 0 20px;
- font-size: 20px;
+ font-size: 1.25rem;
display: flex;
align-items: center;
justify-content: space-around;
@@ -267,9 +390,9 @@
}
.title {
width: 46%;
- font-size: 26px;
+ font-size: 2rem;
font-weight: bolder;
- line-height: 80px;
+ line-height: 72px;
text-align: center;
letter-spacing: 2px;
}
@@ -280,7 +403,7 @@
display: flex;
align-items: center;
justify-content: space-around;
- font-size: 15px;
+ font-size: 1rem;
padding-left: 30px;
.datetime {
@@ -293,8 +416,7 @@
&>div{
display: flex;
align-items: center;
- align-items: center;
- font-size: 15px;
+ font-size: 1rem;
margin-right: 20px;
img{
@@ -305,92 +427,242 @@
margin-left: 6px;
}
}
+ .fullbtn{
+ cursor: pointer;
+ }
+ .backBtn{
+ cursor: pointer;
+ }
}
}
}
.main-content{
width: 100%;
height: 100%;
- padding: 20px;
+ padding: 0 25px 25px;
display: flex;
align-items: center;
justify-content: space-between;
- .main-left{
- width: calc(25% - 10px);
+ &>div{
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: flex-start;
+ &>div{
+ padding: 20px 15px 10px;
+ box-sizing: border-box;
+ position: relative;
+ .box-bg{
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ margin: auto;
+ color: #11feee;
+ font-weight: bolder;
+ }
+
+ .dv-border-box-11{
+ :deep(.dv-border-svg-container){
+ .dv-border-box-11-title{
+ font-size: 1.5rem;
+ fill: #11feee !important;
+ }
+ }
+ }
+ .part-tit{
+ position: absolute;
+ top: 20px;
+ left: 0;
+ height: 20px;
+ width: 100%;
+ padding: 0 15px;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ z-index: 9999;
+ div{
+ width: 40%;
+ display: flex;
+ align-items: center;
+ justify-content: end;
+ }
+ span{
+ font-size: 1.25rem;
+ font-weight: bolder;
+ color: #11feee;
+ }
+ ::v-deep(.el-cascader){
+ width: 25% !important;
+ }
+ ::v-deep(.el-popper){
+ background-color: rgba(10,31,92,1);
+ border: 1px solid rgba(17,254,238,.4);
+ color: #11FEEE;
+ .el-cascader-node__label{
+ color: #11FEEE;
+ }
+ .el-icon{
+ color: #11FEEE;
+ }
+ .el-cascader-node{
+ &:hover{
+ background: #0049af;
+ }
+ }
+ }
+ ::v-deep(.el-popper__arrow){
+ &::before{
+ background-color: rgba(10,31,92,.6) !important;
+ border: 1px solid rgba(17,254,238,.4);
+ }
+ }
+ ::v-deep(.el-input__wrapper){
+ width: 20%;
+ box-shadow: none;
+ border: 1px solid rgba(17,254,238,.2);
+ background: rgba(10,31,92,.6) !important;
+ height: 2.5rem;
+ color: #11FEEE;
+
+ input{
+ font-size: 1.25rem;
+ color: #11FEEE;
+ }
+ .el-icon{
+ color: #11FEEE;
+ }
+ }
+ .selector{
+ width: calc(100% - 1.25rem);
+ margin-right: 0.8rem;
+
+ ::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{
+ color: #11FEEE;
+ }
+ .el-select-dropdown__item.hover{
+ background: #0049af;
+ }
+ }
+ ::v-deep(.el-popper__arrow){
+ &::before{
+ background-color: rgba(10,31,92,.6) !important;
+ border: 1px solid rgba(17,254,238,.4);
+ }
+ }
+ ::v-deep(.el-input__wrapper){
+ box-shadow: none;
+ border: 1px solid rgba(17,254,238,.2);
+ background: rgba(10,31,92,.6) !important;
+ height: 1.5rem;
+ color: #11FEEE;
+
+ input{
+ font-size: 0.8rem;
+ color: #11FEEE;
+ }
+ .el-icon{
+ color: #11FEEE;
+ }
+ }
+ }
+
+ img{
+ width: 1.20rem;
+ height: 1.20rem;
+ cursor: pointer;
+ }
+ }
+ .chart-box{
+ width: 100%;
+ height: calc(100% - 20px);
+ margin-top: 20px;
+ .train-tip{
+ display: block;
+ font-size: 0.8rem;
+ margin-top: 5%;
+ margin-left: 2%;
+ }
+ accident{
+ width: 100%;
+ height: 100%;
+ }
+
+ training{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ }
+ }
+
+ .main-left{
+ width: calc(25% - 5px);
.left-top{
width: 100%;
- height: calc((100%/3) - (40px/3));
+ height: calc((100%/3) - (20px/3));
+
}
.left-mid{
width: 100%;
- height: calc((100%/3) - (40px/3));
+ height: calc((100%/3) - (20px/3));
}
.left-bottom{
width: 100%;
- height: calc((100%/3) - (40px/3));
+ height: calc((100%/3) - (20px/3));
}
}
.main-middle{
- width: calc(50% - 20px);
- height: 100%;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- align-items: flex-start;
+ width: calc(50% - 10px);
.mid-top{
width: 100%;
- height: calc((200%/3) - (80px/3) + 20px);
+ height: calc((200% - 40px)/3 + 10px);
}
.mid-bottom{
display: flex;
width: 100%;
- height: calc(100% - (200%/3) + (80px/3) - 40px);
+ height: calc((100%/3) - (20px/3));
justify-content: space-between;
+ padding: 0;
+ background: none;
+ border-radius: 0;
&>div {
position: relative;
- width: calc((100% - 40px)/3);
+ width: calc((100% - 20px)/3);
border-radius: 8px;
overflow: hidden;
-
- .chart-tit {
- position: absolute;
- left: 20px;
- top: 20px;
- font-weight: 700;
- z-index: 3;
- }
+ padding: 10px 15px;
+ box-sizing: border-box;
}
}
}
.main-right{
- width: calc(25% - 10px);
- height: 100%;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- align-items: flex-start;
+ width: calc(25% - 5px);
.right-top{
width: 100%;
- height: calc((100%/3) - (40px/3));
+ height: calc((100%/3) - (20px/3));
}
.right-mid{
width: 100%;
- height: calc((100%/3) - (40px/3));
+ height: calc((100%/3) - (20px/3));
}
.right-bottom{
width: 100%;
- height: calc((100%/3) - (40px/3));
+ height: calc((100%/3) - (20px/3));
}
}
}
diff --git a/src/views/riskWarningSys/warningBigScreen/indexs/index.vue b/src/views/riskWarningSys/warningBigScreen/indexs/index.vue
new file mode 100644
index 0000000..e0faf3b
--- /dev/null
+++ b/src/views/riskWarningSys/warningBigScreen/indexs/index.vue
@@ -0,0 +1,269 @@
+<template>
+ <div class="com-page">
+ <div class="btns" @click="goBack()">
+ 返回首页
+ </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>
+ <el-select v-show="curChart===3" class="selector-3" v-model="month" placeholder="Select" size="default">
+ <el-option
+ v-for="item in optionList"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ <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.5"></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="['#11FEEE']" style="width:100%;height:5%;" />
+ <div class="charts-des">
+ <div class="">
+
+ </div>
+ </div>
+ <dv-decoration-10 :color="['#11FEEE']" style="width:100%;height:5%;" />
+ </div>
+ </div>
+ </div>
+</template>
+
+<script lang="ts">
+ import screenfull from 'screenfull';
+ import { toRefs, reactive, ref, onMounted, defineComponent, defineAsyncComponent, nextTick, onUnmounted } 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 {hiddenReportApi} from "/@/api/doublePreventSystem/report";
+ import { productionDeviceApi } from '/@/api/doublePreventSystem/productionDevice/index.ts';
+ import '/@/theme/bigScreen.css'
+
+ // 定义接口来定义对象的类型
+ interface stateType {
+ isScreenfull: boolean;
+ curChart: number | null;
+ month: number;
+ optionList: Array<any>
+ }
+ 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'))
+ },
+ setup() {
+ const route = useRoute();
+ const state = reactive<stateType>({
+ isScreenfull: false,
+ curChart: null,
+ 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
+ }
+ ]
+ });
+
+ // 页面载入时执行方法
+ onMounted(() => {
+ if (route.query.num) {
+ state.curChart = Number(route.query.num)
+ }
+ });
+
+
+ // 全屏
+ const onScreenfullClick = () => {
+ if (!screenfull.isEnabled) {
+ ElMessage.warning('暂不不支持全屏');
+ return false;
+ }
+ screenfull.toggle();
+ screenfull.on('change', () => {
+ if (screenfull.isFullscreen) {
+ state.isScreenfull = true;
+ } else {
+ state.isScreenfull = false;
+ }
+ });
+ };
+
+ // 返回上一页
+ const goBack = () => {
+ window.history.go(-1);
+ };
+
+
+ return {
+ route,
+ onScreenfullClick,
+ goBack,
+ ...toRefs(state)
+ };
+ }
+ });
+</script>
+
+<style scoped lang="scss">
+ .com-page{
+ width: 100%;
+ height: 100%;
+ border:1px #5a5959 solid;
+ background: url('../../../../assets/warningScreen/body-bg.jpg');
+ padding: 4%;
+ .btns{
+ position: fixed;
+ right: 5%;
+ top: 20px;
+ font-size: 1.125rem;
+ padding: 10px 15px;
+ box-sizing: border-box;
+ border: 1px solid rgb(0, 208, 206);
+ border-radius: 10px;
+ color: rgb(17, 254, 238);
+ cursor: pointer;
+ }
+ .tit{
+ width: 100%;
+ height: 122px;
+ background: url("../../../../assets/warningScreen/pagebg-t.png") no-repeat center;
+ background-size: 100% 100%;
+
+
+ .title{
+ width: 100%;
+ height: 122px;
+ line-height: 112px;
+ border-radius: 8px;
+ margin-bottom: 20px;
+ font-size: 2.8rem;
+ color: #11feee;
+ font-weight: bolder;
+ text-align: center;
+ letter-spacing: 5px;
+ }
+ }
+
+ .chart-cont{
+ width: 100%;
+ padding: 20px;
+ height: calc(100% - 122px);
+ display: flex;
+ align-items: flex-start;
+ justify-content: space-between;
+
+ .chart{
+ width: calc((100% - 20px) * 0.63);
+ height: 100%;
+ padding: 3%;
+ background: url("../../../../assets/warningScreen/pagebg-l.png") no-repeat center;
+ background-size: 100% 100%;
+ position: relative;
+ .selector-2{
+ position: absolute;
+ top: 5%;
+ right: 10%;
+ width: 20%;
+ font-size: 1.25rem;
+ color: #fff;
+ }
+ .selector-3{
+ position: absolute;
+ top: 5%;
+ right: 10%;
+ width: 20%;
+
+ ::v-deep(.el-input__wrapper){
+ background: none !important;
+ box-shadow: none;
+ color: #11FEEE;
+
+ input{
+ color: #11FEEE;
+ }
+ .el-icon{
+ color: #11FEEE;
+ }
+ }
+ }
+ .main-chart{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ .chart-right{
+ width: calc((100% - 20px) * 0.37);
+ height: 100%;
+ .charts-des{
+ height: 90%;
+ background: url("../../../../assets/warningScreen/pagebg-r.png") no-repeat center;
+ background-size: 100% 100%;
+ }
+ }
+
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/src/views/specialWorkSystem/workAlert/alertRecord/index.vue b/src/views/specialWorkSystem/workAlert/alertRecord/index.vue
new file mode 100644
index 0000000..f30e7c6
--- /dev/null
+++ b/src/views/specialWorkSystem/workAlert/alertRecord/index.vue
@@ -0,0 +1,438 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <el-row class="homeCard">
+ <el-col :span="6" style="display:flex;align-items: center">
+ <span style="white-space: nowrap">作业证编号:</span>
+ <div class="grid-content topInfo">
+ <el-input v-model="searchWord"></el-input>
+ </div>
+ </el-col>
+ <el-col :span="6" style="display:flex;align-items: center">
+ <span style="white-space: nowrap">作业类型:</span>
+ <div class="grid-content topInfo">
+ <el-select v-model="searchType" placeholder="请选择作业类型">
+ <el-option
+ v-for="item in workTypeList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id"
+ />
+ </el-select>
+ </div>
+ </el-col>
+ <el-col :span="6" style="display:flex;align-items: center">
+ <span style="white-space: nowrap">预警类型:</span>
+ <div class="grid-content topInfo">
+ <el-select v-model="searchAlert" placeholder="请选择预警类型">
+ <el-option
+ v-for="item in alertTypeList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id"
+ />
+ </el-select>
+ </div>
+ </el-col>
+ <el-button type="primary" @click="searchRecord">查询</el-button>
+ <el-button plain @click="clearSearch">重置</el-button>
+ </el-row>
+ <div class="homeCard">
+ <div class="main-card">
+<!-- <el-row class="cardTop">-->
+<!-- <el-col :span="12" class="mainCardBtn">-->
+<!-- <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button>-->
+<!-- </el-col>-->
+<!-- <el-button type="primary" :icon="Refresh" size="default"/>-->
+<!-- </el-row>-->
+ <el-table
+ ref="multipleTableRef"
+ :data="tableData"
+ style="width: 100%"
+ height="calc(100% - 48px)"
+ :header-cell-style="{background: '#fafafa'}"
+ >
+ <el-table-column type="index" label="序号" width="200"/>
+ <el-table-column property="id" label="作业证编号" width="200"/>
+ <el-table-column property="workType" label="作业类型" width="200"/>
+ <el-table-column property="alertInfo" label="预警信息"/>
+ <el-table-column property="alertType" label="预警类型"/>
+ <el-table-column property="desc" label="描述" width="200"/>
+ <el-table-column property="name" label="上报人"/>
+ <el-table-column property="updateTime" label="上报时间"/>
+ <el-table-column fixed="right" label="操作" align="center" width="250">
+ <template #default="scope">
+ <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination
+ v-model:currentPage="currentPage"
+ v-model:page-size="pageSize"
+ :page-sizes="[10, 15]"
+ small=false
+ background
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="100"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ />
+ </div>
+ </div>
+ </div>
+ </div>
+ <el-dialog v-model="dialogDetails" title="作业预警记录">
+ <el-form :model="details" label-width="120px">
+ <el-form-item label="作业证编号">
+ <el-input v-model="details.id" readonly/>
+ </el-form-item>
+ <el-form-item label="作业类型">
+ <el-input v-model="details.workType" readonly/>
+ </el-form-item>
+ <el-form-item label="预警信息">
+ <el-input v-model="details.alertInfo" readonly/>
+ </el-form-item>
+ <el-form-item label="预警类型">
+ <el-input v-model="details.alertType" readonly/>
+ </el-form-item>
+ <el-form-item label="描述">
+ <el-input v-model="details.desc" type="textarea" readonly/>
+ </el-form-item>
+ <el-form-item label="上报人">
+ <el-input v-model="details.name" readonly/>
+ </el-form-item>
+ <el-form-item label="上报时间">
+ <el-input v-model="details.updateTime" readonly/>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button>
+ </el-form-item>
+ </el-form>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+ import { toRefs, reactive, ref, onMounted } from 'vue';
+ import { storeToRefs } from 'pinia';
+ import { initBackEndControlRoutes } from '/@/router/backEnd';
+ import { useUserInfo } from '/@/stores/userInfo';
+ import { Session } from '/@/utils/storage';
+ import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';
+ import { ElTable } from 'element-plus';
+ import { FormInstance, FormRules, ElMessage } from 'element-plus';
+ import { teamManageApi } from '/@/api/systemManage/basicDateManage/personShiftManage/teamManage';
+
+ // 定义接口来定义对象的类型
+ interface stateType {
+ tableData: Array<any>;
+ departmentList: Array<any>;
+ department:string;
+ workerList: Array<string>;
+ casProps: {};
+ multipleSelection: Array<any>;
+ deleteArr: Array<any>;
+ dialogDetails: boolean;
+ dialogAddRecord: boolean;
+ deleteDialog: boolean;
+ deleteSetDialog: boolean;
+ pageIndex: number;
+ pageSize: number;
+ chosenIndex: null | number;
+ deleteId: null | number;
+ searchWord: string;
+ searchType: number | null;
+ searchAlert: number | null;
+ totalSize: number;
+ addRecord: {
+
+ };
+ details: {
+
+ };
+ workTypeList: Array<any>;
+ alertTypeList: Array<any>
+ }
+
+ export default {
+ name: 'alertRecord',
+ components: {},
+ setup() {
+ const userInfo = useUserInfo();
+ const { userInfos } = storeToRefs(userInfo);
+
+ const state = reactive<stateType>({
+ pageIndex: 1,
+ pageSize: 10,
+ totalSize: 0,
+ chosenIndex: null,
+ searchWord: '',
+ searchType: null,
+ searchAlert: null,
+ tableData: [
+ {
+ id: 'GTXH-0000001',
+ workType: '动火作业',
+ alertInfo: '可燃气检查超标',
+ alertType: '气体分析',
+ desc: 'A车间动火作业过程检查',
+ name: '李羽飞',
+ updateTime: '2022-08-31 12:00:00'
+ },
+ {
+ id: 'GTXH-0000002',
+ workType: '动火作业',
+ alertInfo: '作业现场检查异常',
+ alertType: '作业检查',
+ desc: 'B车间动火作业过程气体检查',
+ name: '李羽飞',
+ updateTime: '2022-08-31 16:31:44'
+ },
+ {
+ id: 'GTXH-0000003',
+ workType: '动火作业',
+ alertInfo: '可燃气检查超标',
+ alertType: '气体分析',
+ desc: '',
+ name: '李羽飞',
+ updateTime: '2022-08-31 17:05:20'
+ }
+ ],
+ departmentList: [],
+ department: '',
+ workerList: [],
+ casProps: {
+ expandTrigger: 'hover',
+ emitPath: false,
+ value: 'depId',
+ label: 'depName'
+ },
+ multipleSelection: [],
+ dialogDetails: false,
+ dialogAddRecord: false,
+ deleteDialog: false,
+ deleteSetDialog: false,
+ addRecord: {
+
+ },
+ details: {
+
+ },
+ deleteId: null,
+ deleteArr: [],
+ workTypeList: [
+ { id: 1, name: '动火作业' },
+ { id: 2, name: '受限空间作业' },
+ { id: 3, name: '吊装作业' },
+ { id: 4, name: '动土作业' },
+ { id: 5, name: '断路作业' },
+ { id: 6, name: '高处作业' },
+ { id: 7, name: '临时用电作业' },
+ { id: 8, name: '盲板抽堵作业' }
+ ],
+ alertTypeList: [
+ { id: 1, name: '气体分析' },
+ { id: 2, name: '作业检查' }
+ ]
+ });
+
+ // 页面载入时执行方法
+ onMounted(() => {
+ // getListByPage();
+ // getAllDepartment();
+ });
+
+ // 分页获取班组管理列表
+ const getListByPage = async () => {
+ const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { groupName: state.searchWord, containGroupMemberEnable: true } };
+ let res = await teamManageApi().getRecordPage(data);
+ if (res.data.code === '200') {
+ state.tableData = res.data.data.map((item) => {
+ if (!item.groupMembers || item.groupMembers == null) {
+ item.groupMembers = [];
+ } else {
+ item.groupMembers = Array.from(item.groupMembers, ({ username }) => username);
+ }
+ return item;
+ });
+ state.totalSize = res.data.total;
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ // 获取部门列表
+ const getAllDepartment = async () => {
+ let res = await teamManageApi().getAllDepartment();
+ if (res.data.code === '200') {
+ state.departmentList = res.data.data;
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ const handleChange = async (value) => {
+ state.addRecord.depId = value;
+ console.log(state.addRecord.department, 'de');
+ let res = await teamManageApi().getAllMember(value);
+ if (res.data.code === '200') {
+ state.workerList = res.data.data;
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ // 关键词查询记录
+ const searchRecord = async () => {
+ if (state.searchWord == '') {
+ ElMessage({
+ type: 'warning',
+ message: '请输入查询关键词'
+ });
+ } else {
+ getListByPage();
+ }
+ };
+
+ const clearSearch = async () => {
+ state.searchWord = '';
+ getListByPage();
+ };
+
+ const handleSizeChange = (val: number) => {
+ state.pageSize = val;
+ getListByPage();
+ };
+
+ const handleCurrentChange = (val: number) => {
+ state.pageIndex = val;
+ getListByPage();
+ };
+
+ // 查看记录
+ const viewRecord = (row) => {
+ state.details = JSON.parse(JSON.stringify(row));
+ state.dialogDetails = true;
+ };
+
+ // 刷新
+ const reLoadData = async () => {
+ getListByPage();
+ };
+
+ // 折线图
+ const renderMenu = async (value: string) => {
+ Session.set('projectId', value);
+ userInfos.value.projectId = value;
+ await initBackEndControlRoutes();
+ };
+
+ return {
+ View,
+ Edit,
+ Delete,
+ Refresh,
+ Plus,
+ handleChange,
+ searchRecord,
+ clearSearch,
+ viewRecord,
+ getListByPage,
+ reLoadData,
+ handleSizeChange,
+ handleCurrentChange,
+ ...toRefs(state)
+ };
+ }
+ };
+</script>
+
+<style scoped lang="scss">
+ $homeNavLengh: 8;
+ .home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+ }
+ .el-input{
+ width: 100% !important;
+ }
+ .el-date-editor::v-deep{
+ width: 100%;
+ }
+ .el-select{
+ width: 100%;
+ }
+</style>
diff --git a/src/views/specialWorkSystem/workProcess/gasCheck/index.vue b/src/views/specialWorkSystem/workProcess/gasCheck/index.vue
new file mode 100644
index 0000000..7e4c300
--- /dev/null
+++ b/src/views/specialWorkSystem/workProcess/gasCheck/index.vue
@@ -0,0 +1,540 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <el-row class="homeCard">
+ <el-col :span="6" style="display:flex;align-items: center">
+ <span style="white-space: nowrap">作业证编号:</span>
+ <div class="grid-content topInfo">
+ <el-input v-model="searchWord"></el-input>
+ </div>
+ </el-col>
+ <el-col :span="6" style="display:flex;align-items: center">
+ <span style="white-space: nowrap">作业类型:</span>
+ <div class="grid-content topInfo">
+ <el-select v-model="searchType" placeholder="请选择作业类型">
+ <el-option
+ v-for="item in workType"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id"
+ />
+ </el-select>
+ </div>
+ </el-col>
+ <el-button type="primary" @click="searchRecord">查询</el-button>
+ <el-button plain @click="clearSearch">重置</el-button>
+ </el-row>
+ <div class="homeCard">
+ <div class="main-card">
+ <el-row class="cardTop">
+ <el-col :span="12" class="mainCardBtn">
+ <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button>
+ </el-col>
+ <el-button type="primary" :icon="Refresh" size="default"/>
+ </el-row>
+ <el-table
+ ref="multipleTableRef"
+ :data="tableData"
+ style="width: 100%"
+ height="calc(100% - 100px)"
+ :header-cell-style="{background: '#fafafa'}"
+ >
+ <el-table-column type="index" label="序号" width="200"/>
+ <el-table-column property="id" label="作业证编号" width="200"/>
+ <el-table-column property="workType" label="作业类型" width="200"/>
+ <el-table-column property="combustible" label="可燃气%"/>
+ <el-table-column property="oxygen" label="氧气%"/>
+ <el-table-column property="co" label="一氧化碳ppm"/>
+ <el-table-column property="hs" label="硫化氢ppm"/>
+ <el-table-column property="desc" label="描述" width="200"/>
+ <el-table-column property="name" label="分析人"/>
+ <el-table-column property="updateTime" label="分析时间"/>
+ <el-table-column fixed="right" label="操作" align="center" width="250">
+ <template #default="scope">
+ <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination
+ v-model:currentPage="currentPage"
+ v-model:page-size="pageSize"
+ :page-sizes="[10, 15]"
+ small=false
+ background
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="100"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ />
+ </div>
+ </div>
+ </div>
+ </div>
+ <el-dialog v-model="dialogDetails" title="检测记录">
+ <el-form :model="details" label-width="120px">
+ <el-form-item label="作业证编号">
+ <el-input v-model="details.id" readonly/>
+ </el-form-item>
+ <el-form-item label="作业类型">
+ <el-input v-model="details.workType" readonly/>
+ </el-form-item>
+ <el-form-item label="可燃气%">
+ <el-input v-model="details.combustible" readonly/>
+ </el-form-item>
+ <el-form-item label="氧气%">
+ <el-input v-model="details.oxygen" readonly/>
+ </el-form-item>
+ <el-form-item label="一氧化碳ppm">
+ <el-input v-model="details.co" readonly/>
+ </el-form-item>
+ <el-form-item label="硫化氢ppm">
+ <el-input v-model="details.hs" readonly/>
+ </el-form-item>
+ <el-form-item label="描述">
+ <el-input v-model="details.desc" type="textarea" readonly/>
+ </el-form-item>
+ <el-form-item label="分析人">
+ <el-input v-model="details.name" readonly/>
+ </el-form-item>
+ <el-form-item label="分析时间">
+ <el-input v-model="details.updateTime" readonly/>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button>
+ </el-form-item>
+ </el-form>
+ </el-dialog>
+ <el-dialog v-model="dialogAddRecord" title="新建" @close="closeAdd" @open="openAdd">
+ <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules">
+ <el-form-item label="作业证编号" prop="id">
+ <el-input v-model="addRecord.id"> </el-input>
+ </el-form-item>
+ <el-form-item label="作业类型" prop="groupMembers">
+ <el-select v-model="addRecord.groupMembers">
+ <el-option
+ v-for="item in workType"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="可燃气%" prop="combustible">
+ <el-input v-model="addRecord.combustible"/>
+ </el-form-item>
+ <el-form-item label="氧气" prop="oxygen">
+ <el-input v-model="addRecord.oxygen"/>
+ </el-form-item>
+ <el-form-item label="一氧化碳ppm" prop="combustible">
+ <el-input v-model="addRecord.co"/>
+ </el-form-item>
+ <el-form-item label="硫化氢ppm" prop="oxygen">
+ <el-input v-model="addRecord.hs"/>
+ </el-form-item>
+ <el-form-item label="描述" prop="desc">
+ <el-input v-model="addRecord.desc" type="textarea"> </el-input>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button>
+ <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button>
+ </el-form-item>
+ </el-form>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+ import { toRefs, reactive, ref, onMounted } from 'vue';
+ import { storeToRefs } from 'pinia';
+ import { initBackEndControlRoutes } from '/@/router/backEnd';
+ import { useUserInfo } from '/@/stores/userInfo';
+ import { Session } from '/@/utils/storage';
+ import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';
+ import { ElTable } from 'element-plus';
+ import { FormInstance, FormRules, ElMessage } from 'element-plus';
+ import { teamManageApi } from '/@/api/systemManage/basicDateManage/personShiftManage/teamManage';
+
+ // 定义接口来定义对象的类型
+ interface stateType {
+ tableData: Array<any>;
+ departmentList: Array<any>;
+ department:string;
+ workerList: Array<string>;
+ casProps: {};
+ multipleSelection: Array<any>;
+ deleteArr: Array<any>;
+ dialogDetails: boolean;
+ dialogAddRecord: boolean;
+ deleteDialog: boolean;
+ deleteSetDialog: boolean;
+ pageIndex: number;
+ pageSize: number;
+ chosenIndex: null | number;
+ deleteId: null | number;
+ searchWord: string;
+ searchType: number | null;
+ totalSize: number;
+ addRecord: {
+
+ };
+ details: {
+
+ };
+ workType: Array<any>
+ }
+
+ export default {
+ name: 'gasCheck',
+ components: {},
+ setup() {
+ const userInfo = useUserInfo();
+ const { userInfos } = storeToRefs(userInfo);
+
+ const state = reactive<stateType>({
+ pageIndex: 1,
+ pageSize: 10,
+ totalSize: 0,
+ chosenIndex: null,
+ searchWord: '',
+ searchType: null,
+ tableData: [
+ {
+ id: 'GTXH-0000001',
+ workType: '动火作业',
+ combustible: 5,
+ oxygen: 20,
+ co: 0,
+ hs: 0,
+ desc: 'A车间动火作业过程气体检测异常',
+ name: '李羽飞',
+ updateTime: '2022-08-32 12:00:00'
+ },
+ {
+ id: 'GTXH-0000002',
+ workType: '动火作业',
+ combustible: 0,
+ oxygen: 20.8,
+ co: 0,
+ hs: 0,
+ desc: 'B车间动火作业过程气体检查',
+ name: '李羽飞',
+ updateTime: '2022-08-32 16:31:44'
+ },
+ {
+ id: 'GTXH-0000003',
+ workType: '动火作业',
+ combustible: 0,
+ oxygen: 21,
+ co: 0,
+ hs: 0,
+ desc: 'C车间动火作业过程气体检测异常',
+ name: '李羽飞',
+ updateTime: '2022-08-32 17:05:20'
+ }
+ ],
+ departmentList: [],
+ department: '',
+ workerList: [],
+ casProps: {
+ expandTrigger: 'hover',
+ emitPath: false,
+ value: 'depId',
+ label: 'depName'
+ },
+ multipleSelection: [],
+ dialogDetails: false,
+ dialogAddRecord: false,
+ deleteDialog: false,
+ deleteSetDialog: false,
+ addRecord: {
+
+ },
+ details: {
+
+ },
+ deleteId: null,
+ deleteArr: [],
+ workType: [
+ { id: 1, name: '动火作业' },
+ { id: 2, name: '受限空间作业' },
+ { id: 3, name: '吊装作业' },
+ { id: 4, name: '动土作业' },
+ { id: 5, name: '断路作业' },
+ { id: 6, name: '高处作业' },
+ { id: 7, name: '临时用电作业' },
+ { id: 8, name: '盲板抽堵作业' }
+ ]
+ });
+
+ const addRef = ref<FormInstance>();
+ const addRules = reactive<FormRules>({
+ id: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ combustible: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ oxygen: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ co: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ hs: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ desc: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ name: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ updateTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
+ });
+
+ // 页面载入时执行方法
+ onMounted(() => {
+ // getListByPage();
+ // getAllDepartment();
+ });
+
+ // 分页获取班组管理列表
+ const getListByPage = async () => {
+ const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { groupName: state.searchWord, containGroupMemberEnable: true } };
+ let res = await teamManageApi().getRecordPage(data);
+ if (res.data.code === '200') {
+ state.tableData = res.data.data.map((item) => {
+ if (!item.groupMembers || item.groupMembers == null) {
+ item.groupMembers = [];
+ } else {
+ item.groupMembers = Array.from(item.groupMembers, ({ username }) => username);
+ }
+ return item;
+ });
+ state.totalSize = res.data.total;
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ // 获取部门列表
+ const getAllDepartment = async () => {
+ let res = await teamManageApi().getAllDepartment();
+ if (res.data.code === '200') {
+ state.departmentList = res.data.data;
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ const handleChange = async (value) => {
+ state.addRecord.depId = value;
+ console.log(state.addRecord.department, 'de');
+ let res = await teamManageApi().getAllMember(value);
+ if (res.data.code === '200') {
+ state.workerList = res.data.data;
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ // 关键词查询记录
+ const searchRecord = async () => {
+ if (state.searchWord == '') {
+ ElMessage({
+ type: 'warning',
+ message: '请输入查询关键词'
+ });
+ } else {
+ getListByPage();
+ }
+ };
+
+ const clearSearch = async () => {
+ state.searchWord = '';
+ getListByPage();
+ };
+
+ // 添加班组管理方法
+ const addRecord = async (data: any) => {
+ let res = await teamManageApi().addRecord(data);
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ message: res.data.msg
+ });
+ getListByPage();
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ // 新增修改记录
+ const confirmAddRecord = async (formEl: FormInstance | undefined) => {
+ if (!formEl) return;
+ await formEl.validate(async (valid, fields) => {
+ if (valid) {
+ const data = {
+ groupName: state.addRecord.groupName,
+ groupInfo: state.addRecord.groupInfo,
+ depId: state.addRecord.depId,
+ groupMemberIds: state.addRecord.groupMembers
+ };
+ if (state.chosenIndex == null) {
+ await addRecord(data);
+ } else {
+ data.groupId = JSON.stringify(state.addRecord.groupId);
+ await editRecord(data);
+ }
+ state.dialogAddRecord = false;
+ } else {
+ console.log('error submit!', fields);
+ }
+ });
+ };
+
+ const handleSizeChange = (val: number) => {
+ state.pageSize = val;
+ getListByPage();
+ };
+ const handleCurrentChange = (val: number) => {
+ state.pageIndex = val;
+ getListByPage();
+ };
+
+ // 查看记录
+ const viewRecord = (row) => {
+ state.details = JSON.parse(JSON.stringify(row));
+ state.dialogDetails = true;
+ };
+
+ // 刷新
+ const reLoadData = async () => {
+ getListByPage();
+ };
+
+ const closeAdd = () => {
+ state.addRecord = {};
+ state.chosenIndex = null;
+ };
+
+ const openAdd = () => {
+ if (state.chosenIndex == null) {
+ state.addRecord.info = '';
+ }
+ };
+ const indexClear = () => {
+ state.deleteId = null;
+ };
+
+ // 折线图
+ const renderMenu = async (value: string) => {
+ Session.set('projectId', value);
+ userInfos.value.projectId = value;
+ await initBackEndControlRoutes();
+ };
+ return {
+ addRef,
+ addRules,
+ View,
+ Edit,
+ Delete,
+ Refresh,
+ Plus,
+ handleChange,
+ searchRecord,
+ clearSearch,
+ viewRecord,
+ getListByPage,
+ reLoadData,
+ handleSizeChange,
+ handleCurrentChange,
+ confirmAddRecord,
+ closeAdd,
+ openAdd,
+ indexClear,
+ ...toRefs(state)
+ };
+ }
+ };
+</script>
+
+<style scoped lang="scss">
+ $homeNavLengh: 8;
+ .home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+ }
+ .el-input{
+ width: 100% !important;
+ }
+ .el-date-editor::v-deep{
+ width: 100%;
+ }
+ .el-select{
+ width: 100%;
+ }
+</style>
diff --git a/src/views/specialWorkSystem/workProcess/workCheck/index.vue b/src/views/specialWorkSystem/workProcess/workCheck/index.vue
new file mode 100644
index 0000000..fefb99f
--- /dev/null
+++ b/src/views/specialWorkSystem/workProcess/workCheck/index.vue
@@ -0,0 +1,521 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <el-row class="homeCard">
+ <el-col :span="6" style="display:flex;align-items: center">
+ <span style="white-space: nowrap">作业证编号:</span>
+ <div class="grid-content topInfo">
+ <el-input v-model="searchWord"></el-input>
+ </div>
+ </el-col>
+ <el-col :span="6" style="display:flex;align-items: center">
+ <span style="white-space: nowrap">作业类型:</span>
+ <div class="grid-content topInfo">
+ <el-select v-model="searchType" placeholder="请选择作业类型">
+ <el-option
+ v-for="item in workTypeList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id"
+ />
+ </el-select>
+ </div>
+ </el-col>
+ <el-button type="primary" @click="searchRecord">查询</el-button>
+ <el-button plain @click="clearSearch">重置</el-button>
+ </el-row>
+ <div class="homeCard">
+ <div class="main-card">
+ <el-row class="cardTop">
+ <el-col :span="12" class="mainCardBtn">
+ <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button>
+ </el-col>
+ <el-button type="primary" :icon="Refresh" size="default"/>
+ </el-row>
+ <el-table
+ ref="multipleTableRef"
+ :data="tableData"
+ style="width: 100%"
+ height="calc(100% - 100px)"
+ :header-cell-style="{background: '#fafafa'}"
+ >
+ <el-table-column type="index" label="序号" width="200"/>
+ <el-table-column property="id" label="作业证编号" width="200"/>
+ <el-table-column property="workType" label="作业类型" width="200"/>
+ <el-table-column property="checkInfo" label="检查内容"/>
+ <el-table-column property="result" label="检查结果"/>
+ <el-table-column property="desc" label="描述" width="200"/>
+ <el-table-column property="name" label="分析人"/>
+ <el-table-column property="updateTime" label="分析时间"/>
+ <el-table-column fixed="right" label="操作" align="center" width="250">
+ <template #default="scope">
+ <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination
+ v-model:currentPage="currentPage"
+ v-model:page-size="pageSize"
+ :page-sizes="[10, 15]"
+ small=false
+ background
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="100"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ />
+ </div>
+ </div>
+ </div>
+ </div>
+ <el-dialog v-model="dialogDetails" title="检查记录">
+ <el-form :model="details" label-width="120px">
+ <el-form-item label="作业证编号">
+ <el-input v-model="details.id" readonly/>
+ </el-form-item>
+ <el-form-item label="作业类型">
+ <el-input v-model="details.workType" readonly/>
+ </el-form-item>
+ <el-form-item label="检查内容">
+ <el-input v-model="details.checkInfo" readonly/>
+ </el-form-item>
+ <el-form-item label="检查结果">
+ <el-input v-model="details.result" readonly/>
+ </el-form-item>
+ <el-form-item label="描述">
+ <el-input v-model="details.desc" type="textarea" readonly/>
+ </el-form-item>
+ <el-form-item label="分析人">
+ <el-input v-model="details.name" readonly/>
+ </el-form-item>
+ <el-form-item label="分析时间">
+ <el-input v-model="details.updateTime" readonly/>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button>
+ </el-form-item>
+ </el-form>
+ </el-dialog>
+ <el-dialog v-model="dialogAddRecord" title="新建" @close="closeAdd" @open="openAdd">
+ <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules">
+ <el-form-item label="作业证编号" prop="id">
+ <el-input v-model="addRecord.id"> </el-input>
+ </el-form-item>
+ <el-form-item label="作业类型" prop="workType">
+ <el-select v-model="addRecord.workType">
+ <el-option
+ v-for="item in workTypeList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="检查内容" prop="checkInfo">
+ <el-input v-model="addRecord.checkInfo"> </el-input>
+ </el-form-item>
+ <el-form-item label="检查结果" prop="result">
+ <el-select v-model="addRecord.result">
+ <el-option label="正常" value="0"/>
+ <el-option label="异常" value="1"/>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="描述" prop="desc">
+ <el-input v-model="addRecord.desc" type="textarea"> </el-input>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button>
+ <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button>
+ </el-form-item>
+ </el-form>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+ import { toRefs, reactive, ref, onMounted } from 'vue';
+ import { storeToRefs } from 'pinia';
+ import { initBackEndControlRoutes } from '/@/router/backEnd';
+ import { useUserInfo } from '/@/stores/userInfo';
+ import { Session } from '/@/utils/storage';
+ import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';
+ import { ElTable } from 'element-plus';
+ import { FormInstance, FormRules, ElMessage } from 'element-plus';
+ import { teamManageApi } from '/@/api/systemManage/basicDateManage/personShiftManage/teamManage';
+
+ // 定义接口来定义对象的类型
+ interface stateType {
+ tableData: Array<any>;
+ departmentList: Array<any>;
+ department:string;
+ workerList: Array<string>;
+ casProps: {};
+ multipleSelection: Array<any>;
+ deleteArr: Array<any>;
+ dialogDetails: boolean;
+ dialogAddRecord: boolean;
+ deleteDialog: boolean;
+ deleteSetDialog: boolean;
+ pageIndex: number;
+ pageSize: number;
+ chosenIndex: null | number;
+ deleteId: null | number;
+ searchWord: string;
+ searchType: number | null
+ totalSize: number;
+ addRecord: {
+
+ };
+ details: {
+
+ };
+ workTypeList: Array<any>
+ }
+
+ export default {
+ name: 'workCheck',
+ components: {},
+ setup() {
+ const userInfo = useUserInfo();
+ const { userInfos } = storeToRefs(userInfo);
+
+ const state = reactive<stateType>({
+ pageIndex: 1,
+ pageSize: 10,
+ totalSize: 0,
+ chosenIndex: null,
+ searchWord: '',
+ searchType: null,
+ tableData: [
+ {
+ id: 'GTXH-0000001',
+ workType: '动火作业',
+ checkInfo: '动火作业检查',
+ result: '正常',
+ desc: 'A车间动火作业过程检查',
+ name: '李羽飞',
+ updateTime: '2022-08-31 12:00:00'
+ },
+ {
+ id: 'GTXH-0000002',
+ workType: '动火作业',
+ checkInfo: '动火作业检查',
+ result: '正常',
+ desc: 'B车间动火作业过程气体检查',
+ name: '李羽飞',
+ updateTime: '2022-08-31 16:31:44'
+ },
+ {
+ id: 'GTXH-0000003',
+ workType: '动火作业',
+ checkInfo: '动火作业检查',
+ result: '异常',
+ desc: '',
+ name: '李羽飞',
+ updateTime: '2022-08-31 17:05:20'
+ }
+ ],
+ departmentList: [],
+ department: '',
+ workerList: [],
+ casProps: {
+ expandTrigger: 'hover',
+ emitPath: false,
+ value: 'depId',
+ label: 'depName'
+ },
+ multipleSelection: [],
+ dialogDetails: false,
+ dialogAddRecord: false,
+ deleteDialog: false,
+ deleteSetDialog: false,
+ addRecord: {
+
+ },
+ details: {
+
+ },
+ deleteId: null,
+ deleteArr: [],
+ workTypeList: [
+ { id: 1, name: '动火作业' },
+ { id: 2, name: '受限空间作业' },
+ { id: 3, name: '吊装作业' },
+ { id: 4, name: '动土作业' },
+ { id: 5, name: '断路作业' },
+ { id: 6, name: '高处作业' },
+ { id: 7, name: '临时用电作业' },
+ { id: 8, name: '盲板抽堵作业' }
+ ]
+ });
+
+ const addRef = ref<FormInstance>();
+ const addRules = reactive<FormRules>({
+ id: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ checkInfo: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ result: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ desc: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ name: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ updateTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
+ });
+
+ // 页面载入时执行方法
+ onMounted(() => {
+ // getListByPage();
+ // getAllDepartment();
+ });
+
+ // 分页获取班组管理列表
+ const getListByPage = async () => {
+ const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { groupName: state.searchWord, containGroupMemberEnable: true } };
+ let res = await teamManageApi().getRecordPage(data);
+ if (res.data.code === '200') {
+ state.tableData = res.data.data.map((item) => {
+ if (!item.groupMembers || item.groupMembers == null) {
+ item.groupMembers = [];
+ } else {
+ item.groupMembers = Array.from(item.groupMembers, ({ username }) => username);
+ }
+ return item;
+ });
+ state.totalSize = res.data.total;
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ // 获取部门列表
+ const getAllDepartment = async () => {
+ let res = await teamManageApi().getAllDepartment();
+ if (res.data.code === '200') {
+ state.departmentList = res.data.data;
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ const handleChange = async (value) => {
+ state.addRecord.depId = value;
+ console.log(state.addRecord.department, 'de');
+ let res = await teamManageApi().getAllMember(value);
+ if (res.data.code === '200') {
+ state.workerList = res.data.data;
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ // 关键词查询记录
+ const searchRecord = async () => {
+ if (state.searchWord == '') {
+ ElMessage({
+ type: 'warning',
+ message: '请输入查询关键词'
+ });
+ } else {
+ getListByPage();
+ }
+ };
+
+ const clearSearch = async () => {
+ state.searchWord = '';
+ getListByPage();
+ };
+
+ // 添加班组管理方法
+ const addRecord = async (data: any) => {
+ let res = await teamManageApi().addRecord(data);
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ message: res.data.msg
+ });
+ getListByPage();
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ // 新增修改记录
+ const confirmAddRecord = async (formEl: FormInstance | undefined) => {
+ if (!formEl) return;
+ await formEl.validate(async (valid, fields) => {
+ if (valid) {
+ const data = {
+ groupName: state.addRecord.groupName,
+ groupInfo: state.addRecord.groupInfo,
+ depId: state.addRecord.depId,
+ groupMemberIds: state.addRecord.groupMembers
+ };
+ if (state.chosenIndex == null) {
+ await addRecord(data);
+ } else {
+ data.groupId = JSON.stringify(state.addRecord.groupId);
+ await editRecord(data);
+ }
+ state.dialogAddRecord = false;
+ } else {
+ console.log('error submit!', fields);
+ }
+ });
+ };
+
+ const handleSizeChange = (val: number) => {
+ state.pageSize = val;
+ getListByPage();
+ };
+ const handleCurrentChange = (val: number) => {
+ state.pageIndex = val;
+ getListByPage();
+ };
+
+ // 查看记录
+ const viewRecord = (row) => {
+ state.details = JSON.parse(JSON.stringify(row));
+ state.dialogDetails = true;
+ };
+
+ // 刷新
+ const reLoadData = async () => {
+ getListByPage();
+ };
+
+ const closeAdd = () => {
+ state.addRecord = {};
+ state.chosenIndex = null;
+ };
+
+ const openAdd = () => {
+ if (state.chosenIndex == null) {
+ state.addRecord.info = '';
+ }
+ };
+ const indexClear = () => {
+ state.deleteId = null;
+ };
+
+ // 折线图
+ const renderMenu = async (value: string) => {
+ Session.set('projectId', value);
+ userInfos.value.projectId = value;
+ await initBackEndControlRoutes();
+ };
+ return {
+ addRef,
+ addRules,
+ View,
+ Edit,
+ Delete,
+ Refresh,
+ Plus,
+ handleChange,
+ searchRecord,
+ clearSearch,
+ viewRecord,
+ getListByPage,
+ reLoadData,
+ handleSizeChange,
+ handleCurrentChange,
+ confirmAddRecord,
+ closeAdd,
+ openAdd,
+ indexClear,
+ ...toRefs(state)
+ };
+ }
+ };
+</script>
+
+<style scoped lang="scss">
+ $homeNavLengh: 8;
+ .home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+ }
+ .el-input{
+ width: 100% !important;
+ }
+ .el-date-editor::v-deep{
+ width: 100%;
+ }
+ .el-select{
+ width: 100%;
+ }
+</style>
diff --git a/src/views/specialWorkSystem/workProcessManage/gasCheckAnalyze/index.vue b/src/views/specialWorkSystem/workProcessManage/gasCheckAnalyze/index.vue
deleted file mode 100644
index 14b6c74..0000000
--- a/src/views/specialWorkSystem/workProcessManage/gasCheckAnalyze/index.vue
+++ /dev/null
@@ -1,260 +0,0 @@
-<template>
- <div class="home-container">
- <div height="100%">
- <el-row class="homeCard">
- <el-col :span="8">
- <div class="grid-content topInfo">
- <el-input v-model="searchWord" placeholder="作业证编号"></el-input>
- <el-button type="primary">查询</el-button>
- <el-button plain>重置</el-button>
- </div>
- </el-col>
- </el-row>
- <div class="homeCard">
- <div class="main-card">
- <el-row class="cardTop">
- <el-col :span="12" class="mainCardBtn">
- <el-button type="primary" :icon="Plus" size="default">新建</el-button>
- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>
- </el-col>
- <el-button type="primary" :icon="Refresh" size="default"/>
- </el-row>
- <el-table
- ref="multipleTableRef"
- :data="tableData"
- style="width: 100%"
- :header-cell-style="{background: '#fafafa'}"
- @selection-change="handleSelectionChange"
- >
- <el-table-column type="selection" width="55" />
- <el-table-column property="id" label="作业证编号" width="200" sortable/>
- <el-table-column property="date" label="日期" width="180" sortable/>
- <el-table-column property="combustible" label="可燃气%" sortable/>
- <el-table-column property="oxygen" label="氧气%" sortable/>
- <el-table-column property="co" label="一氧化碳ppm" sortable/>
- <el-table-column property="hs" label="硫化氢ppm" sortable/>
- <el-table-column property="updateTime" label="更新时间" sortable/>
- </el-table>
- </div>
- <div class="pageBtn">
- <el-pagination
- v-model:currentPage="currentPage"
- v-model:page-size="pageSize"
- :page-sizes="[10, 15]"
- small=false
- background
- layout="total, sizes, prev, pager, next, jumper"
- :total="100"
- @size-change="handleSizeChange"
- @current-change="handleCurrentChange"
- />
- </div>
- </div>
- <el-dialog v-model="dialogDetails" title="签到记录" @close="dialogColse">
- <el-form :model="details" label-width="120px">
- <el-form-item label="作业证编号">
- <el-input v-model="details.id" readonly/>
- </el-form-item>
- <el-form-item label="签到人">
- <el-input
- v-model="details.worker"
- class="input-with-select"
- readonly
- >
- <template #append>
- <el-button :icon="Search" />
- </template>
- </el-input>
- </el-form-item>
-<!-- <el-form-item label="签到状态">-->
-<!-- <el-select v-model="details.status" readonly>-->
-<!-- <el-option label="已签到" value="已签到" />-->
-<!-- <el-option label="未签到" value="未签到" />-->
-<!-- </el-select>-->
-<!-- </el-form-item>-->
- <el-form-item label="签到时间">
- <el-input v-model="details.checkinTime" readonly/>
- </el-form-item>
- <el-form-item label="备注">
- <el-input v-model="details.remark" type="textarea" readonly/>
- </el-form-item>
- <el-form-item>
- <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button>
- </el-form-item>
- </el-form>
- </el-dialog>
- </div>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Plus, Edit, Delete, Refresh, Search } from '@element-plus/icons-vue'
- import { ElTable } from 'element-plus'
- let global: any = {
- homeChartOne: null,
- homeChartTwo: null,
- homeCharThree: null,
- dispose: [null, '', undefined],
- };
-
- interface stateType {
- homeOne: Array <type>
- }
- interface type {
-
- }
- interface User {
- date: string
- name: string
- address: string
- }
- export default defineComponent({
- name: 'gasCheckAnalyze',
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- const state = reactive<stateType>({});
- const multipleTableRef = ref<InstanceType<typeof ElTable>>()
- const multipleSelection = ref<User[]>([])
- const handleSelectionChange = (val: User[]) => {
- multipleSelection.value = val
- }
- const currentPage = ref(1)
- const pageSize = ref(10)
- const handleSizeChange = (val: number) => {
- console.log(`${val} items per page`)
- }
- const handleCurrentChange = (val: number) => {
- console.log(`current page: ${val}`)
- }
- const tableData: User[] = [
- {
- id: '11011',
- date: '2021-04-22 15:21:31',
- combustible: 0,
- oxygen: 21,
- co: 0,
- hs: 0,
- updateTime: '2021-04-22 15:21:31',
- },
- {
- id: '11011',
- date: '2021-04-22 15:21:31',
- combustible: 1,
- oxygen: 21,
- co: 0,
- hs: 0,
- updateTime: '2021-04-22 15:21:31',
- }
- ]
- const dialogDetails = ref(false)
- const details = ref({})
- const viewDetails = (row)=> {
- console.log(row,'row')
- details.value = JSON.parse(JSON.stringify(row))
- console.log(details,'details')
- dialogDetails.value = true
- }
- // 折线图
- const renderMenu = async (value: string) => {
- Session.set('projectId',value)
- userInfos.value.projectId = value
- await initBackEndControlRoutes();
- };
- return {
- renderMenu,
- multipleTableRef,
- tableData,
- currentPage,
- pageSize,
- dialogDetails,
- details,
- viewDetails,
- handleSizeChange,
- handleCurrentChange,
- Plus,
- Edit,
- Delete,
- Search,
- handleSelectionChange,
- Refresh,
- ...toRefs(state),
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- $homeNavLengh: 8;
- .home-container {
- height: 100%;
- overflow: hidden;
- padding: 20px;
- .homeCard{
- width: 100%;
- padding: 20px;
- background: #fff;
- border-radius: 4px;
- }
- .el-row{
- display: flex;
- align-items: center;
- margin-bottom: 20px;
- &:last-child {
- margin-bottom: 0;
- }
- .grid-content{
- align-items: center;
- min-height: 36px;
- }
-
- .topInfo {
- display: flex;
- align-items: center;
- font-size: 16px;
- font-weight: bold;
-
- &>div{
- white-space: nowrap;
- margin-right: 20px;
- }
- }
- }
- .mainPages{
- height: 100%;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- }
- .main-card{
- width: 100%;
- .cardTop{
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 20px;
- .mainCardBtn{
- margin: 0;
- }
- }
- }
- .pageBtn{
- display: flex;
- align-items: center;
- justify-content: right;
- margin-top: 20px;
-
- .demo-pagination-block + .demo-pagination-block {
- margin-top: 10px;
- }
- .demo-pagination-block .demonstration {
- margin-bottom: 16px;
- }
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workProcessManage/workCheckRecord/index.vue b/src/views/specialWorkSystem/workProcessManage/workCheckRecord/index.vue
deleted file mode 100644
index e3d3d50..0000000
--- a/src/views/specialWorkSystem/workProcessManage/workCheckRecord/index.vue
+++ /dev/null
@@ -1,255 +0,0 @@
-<template>
- <div class="home-container">
- <el-scrollbar height="100%">
- <el-row class="homeCard">
- <el-col :span="8">
- <div class="grid-content topInfo">
- <el-input v-model="searchWord" placeholder="作业证编号"></el-input>
- <el-button type="primary">查询</el-button>
- <el-button plain>重置</el-button>
- </div>
- </el-col>
- </el-row>
- <div class="homeCard">
- <div class="main-card">
- <el-row class="cardTop">
- <el-col :span="12" class="mainCardBtn">
- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>
- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>
- </el-col>
- <el-button type="primary" :icon="Refresh" size="default"/>
- </el-row>
- <el-table
- ref="multipleTableRef"
- :data="tableData"
- style="width: 100%"
- :header-cell-style="{background: '#fafafa'}"
- @selection-change="handleSelectionChange"
- >
- <el-table-column type="selection" width="55" />
- <el-table-column property="id" label="作业证编号" width="200" sortable/>
- <el-table-column property="worker" label="签到人" width="180" />
- <el-table-column property="checkinTime" label="签到时间" sortable/>
- <el-table-column property="remark" label="备注"/>
- <el-table-column fixed="right" label="操作" align="center" width="180">
- <template #default="scope">
- <el-button link type="primary" size="small" @click="viewDetails(scope.row)">查看</el-button>
- </template>
- </el-table-column>
- </el-table>
- </div>
- <div class="pageBtn">
- <el-pagination
- v-model:currentPage="currentPage"
- v-model:page-size="pageSize"
- :page-sizes="[10, 15]"
- small=false
- background
- layout="total, sizes, prev, pager, next, jumper"
- :total="100"
- @size-change="handleSizeChange"
- @current-change="handleCurrentChange"
- />
- </div>
- </div>
- <el-dialog v-model="dialogDetails" title="签到记录" @close="dialogColse">
- <el-form :model="details" label-width="120px">
- <el-form-item label="作业证编号">
- <el-input v-model="details.id" readonly/>
- </el-form-item>
- <el-form-item label="签到人">
- <el-input
- v-model="details.worker"
- class="input-with-select"
- readonly
- >
- <template #append>
- <el-button :icon="Search" />
- </template>
- </el-input>
- </el-form-item>
-<!-- <el-form-item label="签到状态">-->
-<!-- <el-select v-model="details.status" readonly>-->
-<!-- <el-option label="已签到" value="已签到" />-->
-<!-- <el-option label="未签到" value="未签到" />-->
-<!-- </el-select>-->
-<!-- </el-form-item>-->
- <el-form-item label="签到时间">
- <el-input v-model="details.checkinTime" readonly/>
- </el-form-item>
- <el-form-item label="备注">
- <el-input v-model="details.remark" type="textarea" readonly/>
- </el-form-item>
- <el-form-item>
- <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button>
- </el-form-item>
- </el-form>
- </el-dialog>
- </el-scrollbar>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Edit, Delete, Refresh, Search } from '@element-plus/icons-vue'
- import { ElTable } from 'element-plus'
- let global: any = {
- homeChartOne: null,
- homeChartTwo: null,
- homeCharThree: null,
- dispose: [null, '', undefined],
- };
-
- interface stateType {
- homeOne: Array <type>
- }
- interface type {
-
- }
- interface User {
- date: string
- name: string
- address: string
- }
- export default defineComponent({
- name: 'workCheckinRecord',
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- const state = reactive<stateType>({});
- const multipleTableRef = ref<InstanceType<typeof ElTable>>()
- const multipleSelection = ref<User[]>([])
- const handleSelectionChange = (val: User[]) => {
- multipleSelection.value = val
- }
- const currentPage = ref(1)
- const pageSize = ref(10)
- const handleSizeChange = (val: number) => {
- console.log(`${val} items per page`)
- }
- const handleCurrentChange = (val: number) => {
- console.log(`current page: ${val}`)
- }
- const tableData: User[] = [
- {
- id: '11011',
- worker: '吴海涛',
- checkinTime: '2021-04-22 15:21:31',
- remark: ''
- },
- {
- id: '11012',
- worker: '吴沈峰',
- checkinTime: '2021-04-22 15:21:31',
- remark: ''
- }
- ]
- const dialogDetails = ref(false)
- const details = ref({})
- const viewDetails = (row)=> {
- console.log(row,'row')
- details.value = JSON.parse(JSON.stringify(row))
- console.log(details,'details')
- dialogDetails.value = true
- }
- // 折线图
- const renderMenu = async (value: string) => {
- Session.set('projectId',value)
- userInfos.value.projectId = value
- await initBackEndControlRoutes();
- };
- return {
- renderMenu,
- multipleTableRef,
- tableData,
- currentPage,
- pageSize,
- dialogDetails,
- details,
- viewDetails,
- handleSizeChange,
- handleCurrentChange,
- Edit,
- Delete,
- Search,
- handleSelectionChange,
- Refresh,
- ...toRefs(state),
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- $homeNavLengh: 8;
- .home-container {
- height: 100%;
- overflow: hidden;
- padding: 20px;
- .homeCard{
- width: 100%;
- padding: 20px;
- background: #fff;
- border-radius: 4px;
- }
- .el-row{
- display: flex;
- align-items: center;
- margin-bottom: 20px;
- &:last-child {
- margin-bottom: 0;
- }
- .grid-content{
- align-items: center;
- min-height: 36px;
- }
-
- .topInfo {
- display: flex;
- align-items: center;
- font-size: 16px;
- font-weight: bold;
-
- &>div{
- white-space: nowrap;
- margin-right: 20px;
- }
- }
- }
- .mainPages{
- height: 100%;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- }
- .main-card{
- width: 100%;
- .cardTop{
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 20px;
- .mainCardBtn{
- margin: 0;
- }
- }
- }
- .pageBtn{
- display: flex;
- align-items: center;
- justify-content: right;
- margin-top: 20px;
-
- .demo-pagination-block + .demo-pagination-block {
- margin-top: 10px;
- }
- .demo-pagination-block .demonstration {
- margin-bottom: 16px;
- }
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/myApproval/components/brokenLog.vue b/src/views/specialWorkSystem/workTicket/myApproval/components/brokenLog.vue
index d3dc352..71e9cfc 100644
--- a/src/views/specialWorkSystem/workTicket/myApproval/components/brokenLog.vue
+++ b/src/views/specialWorkSystem/workTicket/myApproval/components/brokenLog.vue
@@ -37,6 +37,9 @@
<el-form-item label="涉及相关部门">
<el-input v-model="details.workDetail.involvedDepIds" readonly type="textarea"/>
</el-form-item>
+ <el-form-item label="图片">
+ <el-image v-for="item in details.workDetail.bcPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" />
+ </el-form-item>
<el-form-item label="期望开始时间">
<el-input v-model="details.expStartTime" readonly />
</el-form-item>
diff --git a/src/views/specialWorkSystem/workTicket/myApproval/components/groundLog.vue b/src/views/specialWorkSystem/workTicket/myApproval/components/groundLog.vue
index fba344f..0110338 100644
--- a/src/views/specialWorkSystem/workTicket/myApproval/components/groundLog.vue
+++ b/src/views/specialWorkSystem/workTicket/myApproval/components/groundLog.vue
@@ -25,7 +25,7 @@
<el-form-item label="作业地址">
<el-input v-model="details.workLocation" readonly type="textarea" />
</el-form-item>
- <el-form-item label="作业单位ID">
+ <el-form-item label="作业单位">
<el-input v-model="details.workDetail.operationDepId" readonly type="textarea" />
</el-form-item>
<el-form-item label="范围">
@@ -37,6 +37,9 @@
<el-form-item label="关联其他作业">
<el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
</el-form-item>
+ <el-form-item label="图片">
+ <el-image v-for="item in details.workDetail.gbPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" />
+ </el-form-item>
<el-form-item label="期望开始时间">
<el-input v-model="details.expStartTime" readonly />
</el-form-item>
diff --git a/src/views/specialWorkSystem/workTicket/myApproval/components/plateLog.vue b/src/views/specialWorkSystem/workTicket/myApproval/components/plateLog.vue
index 0cf0716..52604fd 100644
--- a/src/views/specialWorkSystem/workTicket/myApproval/components/plateLog.vue
+++ b/src/views/specialWorkSystem/workTicket/myApproval/components/plateLog.vue
@@ -55,6 +55,9 @@
<el-form-item label="关联其他作业">
<el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
</el-form-item>
+ <el-form-item label="盲板位置图">
+ <el-image v-for="item in details.workDetail.bpLocationMapPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" />
+ </el-form-item>
<el-form-item label="期望开始时间">
<el-input v-model="details.expStartTime" readonly />
</el-form-item>
diff --git a/src/views/specialWorkSystem/workTicket/myApproval/components/spaceLog.vue b/src/views/specialWorkSystem/workTicket/myApproval/components/spaceLog.vue
index 1359a65..d9feabc 100644
--- a/src/views/specialWorkSystem/workTicket/myApproval/components/spaceLog.vue
+++ b/src/views/specialWorkSystem/workTicket/myApproval/components/spaceLog.vue
@@ -25,7 +25,7 @@
<el-form-item label="作业地址">
<el-input v-model="details.workLocation" readonly type="textarea" />
</el-form-item>
- <el-form-item label="受限空间所属单位ID">
+ <el-form-item label="受限空间所属单位">
<el-input v-model="details.workDetail.csDepId" readonly type="textarea" />
</el-form-item>
<el-form-item label="受限空间名称">
diff --git a/src/views/specialWorkSystem/workTicket/myApproval/index.vue b/src/views/specialWorkSystem/workTicket/myApproval/index.vue
index fb28ad4..3c207b0 100644
--- a/src/views/specialWorkSystem/workTicket/myApproval/index.vue
+++ b/src/views/specialWorkSystem/workTicket/myApproval/index.vue
@@ -468,6 +468,21 @@
return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName;
});
}
+ if(state.details.workDetail.csDepId){
+ state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName;
+ }
+ if(state.details.workDetail.operationDepId){
+ state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName;
+ }
+ if(state.details.workDetail.gbPath){
+ state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',')
+ }
+ if(state.details.workDetail.bcPath){
+ state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',')
+ }
+ if(state.details.workDetail.bpLocationMapPath){
+ state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',')
+ }
state.dialogDetails = true;
};
diff --git a/src/views/specialWorkSystem/workTicket/myJobApply/components/brokenLog.vue b/src/views/specialWorkSystem/workTicket/myJobApply/components/brokenLog.vue
index 62b76f4..986ab4b 100644
--- a/src/views/specialWorkSystem/workTicket/myJobApply/components/brokenLog.vue
+++ b/src/views/specialWorkSystem/workTicket/myJobApply/components/brokenLog.vue
@@ -25,7 +25,7 @@
<el-form-item label="作业地址">
<el-input v-model="details.workLocation" readonly type="textarea" />
</el-form-item>
- <el-form-item label="作业单位ID">
+ <el-form-item label="作业单位">
<el-input v-model="details.workDetail.operationDepId" readonly type="textarea" />
</el-form-item>
<el-form-item label="断路原因">
diff --git a/src/views/specialWorkSystem/workTicket/myJobApply/components/groundLog.vue b/src/views/specialWorkSystem/workTicket/myJobApply/components/groundLog.vue
index bce9a7f..d865b1e 100644
--- a/src/views/specialWorkSystem/workTicket/myJobApply/components/groundLog.vue
+++ b/src/views/specialWorkSystem/workTicket/myJobApply/components/groundLog.vue
@@ -25,7 +25,7 @@
<el-form-item label="作业地址">
<el-input v-model="details.workLocation" readonly type="textarea" />
</el-form-item>
- <el-form-item label="作业单位ID">
+ <el-form-item label="作业单位">
<el-input v-model="details.workDetail.operationDepId" readonly type="textarea" />
</el-form-item>
<el-form-item label="范围">
diff --git a/src/views/specialWorkSystem/workTicket/myJobApply/components/heightLog.vue b/src/views/specialWorkSystem/workTicket/myJobApply/components/heightLog.vue
index 04d38f9..179d224 100644
--- a/src/views/specialWorkSystem/workTicket/myJobApply/components/heightLog.vue
+++ b/src/views/specialWorkSystem/workTicket/myJobApply/components/heightLog.vue
@@ -25,7 +25,7 @@
<el-form-item label="作业地址">
<el-input v-model="details.workLocation" readonly type="textarea" />
</el-form-item>
- <el-form-item label="作业单位ID">
+ <el-form-item label="作业单位">
<el-input v-model="details.workDetail.operationDepId" readonly type="textarea" />
</el-form-item>
<el-form-item label="作业高度">
diff --git a/src/views/specialWorkSystem/workTicket/myJobApply/components/spaceLog.vue b/src/views/specialWorkSystem/workTicket/myJobApply/components/spaceLog.vue
index c2f512b..4b65d15 100644
--- a/src/views/specialWorkSystem/workTicket/myJobApply/components/spaceLog.vue
+++ b/src/views/specialWorkSystem/workTicket/myJobApply/components/spaceLog.vue
@@ -25,7 +25,7 @@
<el-form-item label="作业地址">
<el-input v-model="details.workLocation" readonly type="textarea" />
</el-form-item>
- <el-form-item label="受限空间所属单位ID">
+ <el-form-item label="受限空间所属单位">
<el-input v-model="details.workDetail.csDepId" readonly type="textarea" />
</el-form-item>
<el-form-item label="受限空间名称">
diff --git a/src/views/specialWorkSystem/workTicket/myJobApply/index.vue b/src/views/specialWorkSystem/workTicket/myJobApply/index.vue
index 831bea1..6c2a074 100644
--- a/src/views/specialWorkSystem/workTicket/myJobApply/index.vue
+++ b/src/views/specialWorkSystem/workTicket/myJobApply/index.vue
@@ -469,6 +469,12 @@
return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName;
});
}
+ if(state.details.workDetail.csDepId){
+ state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName;
+ }
+ if(state.details.workDetail.operationDepId){
+ state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName;
+ }
if(state.details.workDetail.gbPath){
state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',')
}
diff --git a/src/views/specialWorkSystem/workTicket/workApply/components/broken.vue b/src/views/specialWorkSystem/workTicket/workApply/components/broken.vue
index 08eda8b..0187f0a 100644
--- a/src/views/specialWorkSystem/workTicket/workApply/components/broken.vue
+++ b/src/views/specialWorkSystem/workTicket/workApply/components/broken.vue
@@ -16,8 +16,6 @@
</el-select>
</el-form-item>
</el-col>
- </el-row>
- <el-row>
<el-col :span="12">
<el-form-item label="作业时间" prop="workTimeLine">
<el-date-picker
@@ -54,19 +52,19 @@
</el-form-item>
</el-col>
</el-row>
-
-
+ <el-divider border-style="dashed"/>
<el-row>
<el-col :span="12">
<el-form-item label="作业单位" prop="workDetail.operationDepId">
- <el-select v-model="form.workDetail.operationDepId">
- <el-option
- v-for="item in csDepList"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
+<!-- <el-select v-model="form.workDetail.operationDepId">-->
+<!-- <el-option-->
+<!-- v-for="item in csDepList"-->
+<!-- :key="item.value"-->
+<!-- :label="item.label"-->
+<!-- :value="item.value"-->
+<!-- />-->
+<!-- </el-select>-->
+ <el-cascader v-model="form.workDetail.operationDepId" :options="departList" :props="casProps2" :show-all-levels="false" @change="handleChange2" />
</el-form-item>
</el-col>
<el-col :span="12">
@@ -103,7 +101,7 @@
<el-upload accept="image/*" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :on-remove="handleRemove" :before-remove="beforeRemove" :before-upload="getUploadUrl">
<el-icon><Plus /></el-icon>
<template #tip>
- <div class="el-upload__tip">上传jpg/png图片尺寸小于500KB,最多可上传5张</div>
+ <div class="el-upload__tip">上传jpg/png图片尺寸小于500KB,最多可上传3张</div>
</template>
</el-upload>
</el-form-item>
@@ -141,7 +139,8 @@
dialogVisible: Boolean,
dialogImageUrl: string | null,
imgLimit: number,
- casProps: {}
+ casProps: {},
+ casProps2: {}
}
interface file {
url: string;
@@ -172,7 +171,7 @@
expEndTime: ''
},
fileList: [],
- imgLimit: 5,
+ imgLimit: 3,
uploadUrl: '',
dialogVisible: false,
dialogImageUrl: null,
@@ -207,6 +206,14 @@
value: 'depId',
label: 'depName',
multiple: true
+ },
+ casProps2: {
+ emitPath: false,
+ value: 'depId',
+ label: 'depName',
+ multiple: false,
+ expandTrigger: 'hover',
+ checkStrictly: true
}
});
const ruleFormRef = ref<FormInstance>()
@@ -219,7 +226,8 @@
"workDetail.operationDepId": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
"workDetail.bcReason": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
"workDetail.bcExplain": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.bcPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
+ "workDetail.bcPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ "workDetail.involvedDepIds": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
});
const submitForm = async (formEl: FormInstance | undefined) => {
if (!formEl) return
@@ -399,7 +407,7 @@
.el-select{
width: 100%;
}
- .el-cascader{
+ :deep(.el-cascader){
width: 100% !important;
}
}
diff --git a/src/views/specialWorkSystem/workTicket/workApply/components/fire.vue b/src/views/specialWorkSystem/workTicket/workApply/components/fire.vue
index 9732afb..6418d6e 100644
--- a/src/views/specialWorkSystem/workTicket/workApply/components/fire.vue
+++ b/src/views/specialWorkSystem/workTicket/workApply/components/fire.vue
@@ -16,20 +16,6 @@
</el-select>
</el-form-item>
</el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业等级" prop="workLevel">
- <el-select v-model="form.workLevel">
- <el-option
- v-for="item in workLevelList"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </el-form-item>
- </el-col>
<el-col :span="12">
<el-form-item label="作业时间" prop="workTimeLine">
<el-date-picker
@@ -46,6 +32,18 @@
</el-row>
<el-row>
<el-col :span="12">
+ <el-form-item label="作业等级" prop="workLevel">
+ <el-select v-model="form.workLevel">
+ <el-option
+ v-for="item in workLevelList"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
<el-form-item label="作业内容" prop="workContent">
<el-input
v-model="form.workContent"
@@ -55,6 +53,8 @@
/>
</el-form-item>
</el-col>
+ </el-row>
+ <el-row>
<el-col :span="12">
<el-form-item label="作业地址" prop="workLocation">
<el-input
@@ -66,6 +66,7 @@
</el-form-item>
</el-col>
</el-row>
+ <el-divider border-style="dashed"/>
<el-row>
<el-col :span="12">
<el-form-item label="动火方式" prop="workDetail.hotMethod">
diff --git a/src/views/specialWorkSystem/workTicket/workApply/components/ground.vue b/src/views/specialWorkSystem/workTicket/workApply/components/ground.vue
index 0398633..2448e1b 100644
--- a/src/views/specialWorkSystem/workTicket/workApply/components/ground.vue
+++ b/src/views/specialWorkSystem/workTicket/workApply/components/ground.vue
@@ -16,8 +16,6 @@
</el-select>
</el-form-item>
</el-col>
- </el-row>
- <el-row>
<el-col :span="12">
<el-form-item label="作业时间" prop="workTimeLine">
<el-date-picker
@@ -54,17 +52,19 @@
</el-form-item>
</el-col>
</el-row>
+ <el-divider border-style="dashed"/>
<el-row>
<el-col :span="12">
<el-form-item label="作业单位" prop="workDetail.operationDepId">
- <el-select v-model="form.workDetail.operationDepId">
- <el-option
- v-for="item in csDepList"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
+<!-- <el-select v-model="form.workDetail.operationDepId">-->
+<!-- <el-option-->
+<!-- v-for="item in csDepList"-->
+<!-- :key="item.value"-->
+<!-- :label="item.label"-->
+<!-- :value="item.value"-->
+<!-- />-->
+<!-- </el-select>-->
+ <el-cascader v-model="form.workDetail.operationDepId" :options="departList" :props="casProps" :show-all-levels="false" @change="handleChange" />
</el-form-item>
</el-col>
<el-col :span="12">
@@ -103,7 +103,7 @@
<el-upload accept="image/*" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :on-remove="handleRemove" :before-remove="beforeRemove" :before-upload="getUploadUrl">
<el-icon><Plus /></el-icon>
<template #tip>
- <div class="el-upload__tip">上传jpg/png图片尺寸小于500KB,最多可上传5张</div>
+ <div class="el-upload__tip">上传jpg/png图片尺寸小于500KB,最多可上传3张</div>
</template>
</el-upload>
</el-form-item>
@@ -142,7 +142,8 @@
uploadUrl: string,
dialogVisible: Boolean,
dialogImageUrl: string | null,
- imgLimit: number
+ imgLimit: number,
+ casProps: {}
}
interface file {
url: string;
@@ -150,7 +151,7 @@
export default {
name: 'groundForm',
components: {},
- props:['workerList'],
+ props:['workerList','departList'],
setup(props: any, context: any) {
const userInfo = useUserInfo()
const { userInfos } = storeToRefs(userInfo);
@@ -173,7 +174,7 @@
expEndTime: ''
},
fileList: [],
- imgLimit: 5,
+ imgLimit: 3,
uploadUrl: '',
dialogVisible: false,
dialogImageUrl: null,
@@ -236,7 +237,15 @@
label: '盲板抽堵作业',
value: 8
}
- ]
+ ],
+ casProps: {
+ emitPath: false,
+ value: 'depId',
+ label: 'depName',
+ multiple: false,
+ expandTrigger: 'hover',
+ checkStrictly: true
+ }
});
const ruleFormRef = ref<FormInstance>()
const applyRules = reactive<FormRules>({
@@ -438,7 +447,7 @@
.el-select{
width: 100%;
}
- .el-cascader{
+ :deep(.el-cascader){
width: 100% !important;
}
}
diff --git a/src/views/specialWorkSystem/workTicket/workApply/components/height.vue b/src/views/specialWorkSystem/workTicket/workApply/components/height.vue
index d0dc61f..dc73325 100644
--- a/src/views/specialWorkSystem/workTicket/workApply/components/height.vue
+++ b/src/views/specialWorkSystem/workTicket/workApply/components/height.vue
@@ -16,20 +16,6 @@
</el-select>
</el-form-item>
</el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业等级" prop="workLevel">
- <el-select v-model="form.workLevel">
- <el-option
- v-for="item in workLevelList"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </el-form-item>
- </el-col>
<el-col :span="12">
<el-form-item label="作业时间" prop="workTimeLine">
<el-date-picker
@@ -46,6 +32,18 @@
</el-row>
<el-row>
<el-col :span="12">
+ <el-form-item label="作业等级" prop="workLevel">
+ <el-select v-model="form.workLevel">
+ <el-option
+ v-for="item in workLevelList"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
<el-form-item label="作业内容" prop="workContent">
<el-input
v-model="form.workContent"
@@ -55,6 +53,8 @@
/>
</el-form-item>
</el-col>
+ </el-row>
+ <el-row>
<el-col :span="12">
<el-form-item label="作业地址" prop="workLocation">
<el-input
@@ -66,17 +66,19 @@
</el-form-item>
</el-col>
</el-row>
+ <el-divider border-style="dashed"/>
<el-row>
<el-col :span="12">
<el-form-item label="作业单位" prop="workDetail.operationDepId">
- <el-select v-model="form.workDetail.operationDepId">
- <el-option
- v-for="item in heDepList"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
+ <!-- <el-select v-model="form.workDetail.operationDepId">-->
+ <!-- <el-option-->
+ <!-- v-for="item in heDepList"-->
+ <!-- :key="item.value"-->
+ <!-- :label="item.label"-->
+ <!-- :value="item.value"-->
+ <!-- />-->
+ <!-- </el-select>-->
+ <el-cascader v-model="form.workDetail.operationDepId" :options="departList" :props="casProps" :show-all-levels="false" @change="handleChange" />
</el-form-item>
</el-col>
<el-col :span="12">
@@ -131,12 +133,13 @@
workTypeList: Array<any>,
workLevelList: Array<any>,
heDepList: Array<any>,
- otherWorkList: Array<any>
+ otherWorkList: Array<any>,
+ casProps:{}
}
export default defineComponent({
name: 'heightForm',
components: {},
- props:['workerList'],
+ props:['workerList','departList'],
setup() {
const userInfo = useUserInfo()
const { userInfos } = storeToRefs(userInfo);
@@ -182,6 +185,14 @@
value: 6
}
],
+ casProps: {
+ emitPath: false,
+ value: 'depId',
+ label: 'depName',
+ multiple: false,
+ expandTrigger: 'hover',
+ checkStrictly: true
+ },
workTypeList: [
{
label: "类型一",
@@ -339,7 +350,7 @@
.el-select{
width: 100%;
}
- .el-cascader{
+ :deep(.el-cascader){
width: 100% !important;
}
}
diff --git a/src/views/specialWorkSystem/workTicket/workApply/components/hoist.vue b/src/views/specialWorkSystem/workTicket/workApply/components/hoist.vue
index ca95264..96038ec 100644
--- a/src/views/specialWorkSystem/workTicket/workApply/components/hoist.vue
+++ b/src/views/specialWorkSystem/workTicket/workApply/components/hoist.vue
@@ -16,20 +16,6 @@
</el-select>
</el-form-item>
</el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业等级" prop="workLevel">
- <el-select v-model="form.workLevel">
- <el-option
- v-for="item in workLevelList"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </el-form-item>
- </el-col>
<el-col :span="12">
<el-form-item label="作业时间" prop="workTimeLine">
<el-date-picker
@@ -46,6 +32,18 @@
</el-row>
<el-row>
<el-col :span="12">
+ <el-form-item label="作业等级" prop="workLevel">
+ <el-select v-model="form.workLevel">
+ <el-option
+ v-for="item in workLevelList"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
<el-form-item label="作业内容" prop="workContent">
<el-input
v-model="form.workContent"
@@ -55,6 +53,8 @@
/>
</el-form-item>
</el-col>
+ </el-row>
+ <el-row>
<el-col :span="12">
<el-form-item label="作业地址" prop="workLocation">
<el-input
@@ -66,6 +66,7 @@
</el-form-item>
</el-col>
</el-row>
+ <el-divider border-style="dashed"/>
<el-row>
<el-col :span="12">
<el-form-item label="吊装工具名称" prop="workDetail.hoistingToolName">
diff --git a/src/views/specialWorkSystem/workTicket/workApply/components/plate.vue b/src/views/specialWorkSystem/workTicket/workApply/components/plate.vue
index 16b94cc..8e31dfc 100644
--- a/src/views/specialWorkSystem/workTicket/workApply/components/plate.vue
+++ b/src/views/specialWorkSystem/workTicket/workApply/components/plate.vue
@@ -16,20 +16,6 @@
</el-select>
</el-form-item>
</el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业等级" prop="workLevel">
- <el-select v-model="form.workLevel">
- <el-option
- v-for="item in workLevelList"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </el-form-item>
- </el-col>
<el-col :span="12">
<el-form-item label="作业时间" prop="workTimeLine">
<el-date-picker
@@ -46,6 +32,18 @@
</el-row>
<el-row>
<el-col :span="12">
+ <el-form-item label="作业等级" prop="workLevel">
+ <el-select v-model="form.workLevel">
+ <el-option
+ v-for="item in workLevelList"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
<el-form-item label="作业内容" prop="workContent">
<el-input
v-model="form.workContent"
@@ -55,6 +53,8 @@
/>
</el-form-item>
</el-col>
+ </el-row>
+ <el-row>
<el-col :span="12">
<el-form-item label="作业地址" prop="workLocation">
<el-input
@@ -66,8 +66,7 @@
</el-form-item>
</el-col>
</el-row>
-
-
+ <el-divider border-style="dashed"/>
<el-row>
<el-col :span="12">
<el-form-item label="盲板编号" prop="workDetail.bpCode">
@@ -181,7 +180,7 @@
<el-upload accept="image/*" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :on-remove="handleRemove" :before-remove="beforeRemove" :before-upload="getUploadUrl">
<el-icon><Plus /></el-icon>
<template #tip>
- <div class="el-upload__tip">上传jpg/png图片尺寸小于500KB,最多可上传5张</div>
+ <div class="el-upload__tip">上传jpg/png图片尺寸小于500KB,最多可上传3张</div>
</template>
</el-upload>
</el-form-item>
@@ -258,7 +257,7 @@
expEndTime: ''
},
fileList: [],
- imgLimit: 5,
+ imgLimit: 3,
uploadUrl: '',
dialogVisible: false,
dialogImageUrl: null,
diff --git a/src/views/specialWorkSystem/workTicket/workApply/components/power.vue b/src/views/specialWorkSystem/workTicket/workApply/components/power.vue
index 0d52888..f81cac7 100644
--- a/src/views/specialWorkSystem/workTicket/workApply/components/power.vue
+++ b/src/views/specialWorkSystem/workTicket/workApply/components/power.vue
@@ -16,8 +16,6 @@
</el-select>
</el-form-item>
</el-col>
- </el-row>
- <el-row>
<el-col :span="12">
<el-form-item label="作业时间" prop="workTimeLine">
<el-date-picker
@@ -54,8 +52,7 @@
</el-form-item>
</el-col>
</el-row>
-
-
+ <el-divider border-style="dashed"/>
<el-row>
<el-col :span="12">
<el-form-item label="电源接入点" prop="workDetail.powerAccessPoint">
diff --git a/src/views/specialWorkSystem/workTicket/workApply/components/space.vue b/src/views/specialWorkSystem/workTicket/workApply/components/space.vue
index afe6404..6036dd3 100644
--- a/src/views/specialWorkSystem/workTicket/workApply/components/space.vue
+++ b/src/views/specialWorkSystem/workTicket/workApply/components/space.vue
@@ -16,8 +16,6 @@
</el-select>
</el-form-item>
</el-col>
- </el-row>
- <el-row>
<el-col :span="12">
<el-form-item label="作业时间" prop="workTimeLine">
<el-date-picker
@@ -54,17 +52,19 @@
</el-form-item>
</el-col>
</el-row>
+ <el-divider border-style="dashed" />
<el-row>
<el-col :span="12">
<el-form-item label="受限空间所属单位" prop="workDetail.csDepId">
- <el-select v-model="form.workDetail.csDepId">
- <el-option
- v-for="item in csDepList"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
+<!-- <el-select v-model="form.workDetail.csDepId">-->
+<!-- <el-option-->
+<!-- v-for="item in csDepList"-->
+<!-- :key="item.value"-->
+<!-- :label="item.label"-->
+<!-- :value="item.value"-->
+<!-- />-->
+<!-- </el-select>-->
+ <el-cascader v-model="form.workDetail.csDepId" :options="departList" :props="casProps" :show-all-levels="false" @change="handleChange" />
</el-form-item>
</el-col>
<el-col :span="12">
@@ -121,12 +121,13 @@
interface stateType {
form: Object,
csDepList: Array<any>,
- otherWorkList: Array<any>
+ otherWorkList: Array<any>,
+ casProps: {}
}
export default defineComponent({
name: 'spaceForm',
components: {},
- props:['workerList'],
+ props:['workerList','departList'],
setup() {
const userInfo = useUserInfo()
const { userInfos } = storeToRefs(userInfo);
@@ -173,6 +174,14 @@
value: 6
}
],
+ casProps: {
+ emitPath: false,
+ value: 'depId',
+ label: 'depName',
+ multiple: false,
+ expandTrigger: 'hover',
+ checkStrictly: true
+ },
otherWorkList: [
{
label: '动火作业',
@@ -302,7 +311,7 @@
.el-select{
width: 100%;
}
- .el-cascader{
+ :deep(.el-cascader){
width: 100% !important;
}
}
diff --git a/src/views/specialWorkSystem/workTicket/workApply/index.vue b/src/views/specialWorkSystem/workTicket/workApply/index.vue
index ea33534..f6e2393 100644
--- a/src/views/specialWorkSystem/workTicket/workApply/index.vue
+++ b/src/views/specialWorkSystem/workTicket/workApply/index.vue
@@ -5,19 +5,19 @@
<fire-form :workerList = allWorkers></fire-form>
</el-tab-pane>
<el-tab-pane label="受限空间作业">
- <space-form :workerList = allWorkers></space-form>
+ <space-form :workerList = allWorkers :departList = departmentList></space-form>
</el-tab-pane>
<el-tab-pane label="吊装作业">
<hoist-form :workerList = allWorkers></hoist-form>
</el-tab-pane>
<el-tab-pane label="动土作业">
- <ground-form :workerList = allWorkers></ground-form>
+ <ground-form :workerList = allWorkers :departList = departmentList></ground-form>
</el-tab-pane>
<el-tab-pane label="断路作业">
<broken-form :workerList = allWorkers :departList = departmentList></broken-form>
</el-tab-pane>
<el-tab-pane label="高处作业">
- <height-form :workerList = allWorkers></height-form>
+ <height-form :workerList = allWorkers :departList = departmentList></height-form>
</el-tab-pane>
<el-tab-pane label="临时用电作业">
<power-form :workerList = allWorkers></power-form>
--
Gitblit v1.9.2