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