From 54051120c1b27732f05b8c2f4a0112ac02323696 Mon Sep 17 00:00:00 2001
From: Your Name <123456>
Date: 星期三, 14 九月 2022 17:36:40 +0800
Subject: [PATCH] Merge branch 'master' of https://sinanoaq.cn:8888/r/gtqt
---
src/views/riskWarningSys/warningBigScreen/components/message.vue | 1
src/views/riskWarningSys/warningBigScreen/indexs/index.vue | 97 -
src/views/riskWarningSys/warningBigScreen/components/SPI.vue | 190 ++
src/views/specialWorkSystem/workTicket/myJobApply/components/plateLog.vue | 2
src/views/specialWorkSystem/workPlan/reserveSum/index.vue | 415 +++++
src/views/specialWorkSystem/workTicket/myJobApply/components/brokenLog.vue | 2
src/api/specialWorkSystem/workPlan/workAppoint/index.ts | 50
src/views/specialWorkSystem/workTicket/myApproval/components/groundLog.vue | 2
src/router/route.ts | 8
src/views/specialWorkSystem/workPlan/workAppoint/index.vue | 616 ++++++++
src/views/riskWarningSys/warningBigScreen/index.vue | 298 ---
src/api/specialWorkSystem/workProcess/index.ts | 59
src/views/riskWarningSys/warningBigScreen/components/risk.vue | 172 ++
src/api/specialWorkSystem/workPlan/workReservation/index.ts | 41
src/layout/navBars/breadcrumb/user.vue | 1
src/utils/request.ts | 1
src/views/specialWorkSystem/workTicket/myApproval/components/brokenLog.vue | 2
src/views/specialWorkSystem/workProcess/gasCheck/index.vue | 256 +--
src/views/specialWorkSystem/workPlan/workReservation/index.vue | 775 ++++++----
/dev/null | 672 ---------
src/views/specialWorkSystem/workTicket/myJobApply/components/groundLog.vue | 2
src/views/riskWarningSys/warningBigScreen/components/accident.vue | 1
src/views/specialWorkSystem/workAlert/alertRecord/index.vue | 172 -
src/views/specialWorkSystem/workProcess/components/dialogPermitNo.vue | 225 +++
src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue | 3
src/views/riskWarningSys/warningBigScreen/indexs/msgDetail.vue | 12
src/views/specialWorkSystem/workProcess/workCheck/index.vue | 240 +-
src/views/specialWorkSystem/workTicket/myApproval/components/plateLog.vue | 2
28 files changed, 2,575 insertions(+), 1,742 deletions(-)
diff --git a/src/api/specialWorkSystem/workPlan/workAppoint/index.ts b/src/api/specialWorkSystem/workPlan/workAppoint/index.ts
new file mode 100644
index 0000000..9d44e51
--- /dev/null
+++ b/src/api/specialWorkSystem/workPlan/workAppoint/index.ts
@@ -0,0 +1,50 @@
+import request from '/@/utils/request';
+
+export function workAppointApi() {
+ return {
+ // 分页获取列表
+ getAppointListPage: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialWork/appointment/listAll`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 新增列表
+ addRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialWork/appointment/save`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ //修改列表
+ editRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialWork/appointment/update`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ //删除列表
+ deleteRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialWork/appointment/delete`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ //获取各部门各作业的数量
+ getAllRecords: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialWork/appointment/statistics`,
+ method: 'post',
+ data: data
+ });
+ }
+ };
+}
diff --git a/src/api/specialWorkSystem/workPlan/workReservation/index.ts b/src/api/specialWorkSystem/workPlan/workReservation/index.ts
new file mode 100644
index 0000000..d432b75
--- /dev/null
+++ b/src/api/specialWorkSystem/workPlan/workReservation/index.ts
@@ -0,0 +1,41 @@
+import request from '/@/utils/request';
+
+export function workReserveApi() {
+ return {
+ // 分页获取列表
+ getReserveListPage: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialWork/appointment/listByDep`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 新增列表
+ addRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialWork/appointment/save`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ //修改列表
+ editRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialWork/appointment/update`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ //删除列表
+ deleteRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialWork/appointment/delete`,
+ method: 'post',
+ data: data
+ });
+ }
+ };
+}
diff --git a/src/api/specialWorkSystem/workProcess/index.ts b/src/api/specialWorkSystem/workProcess/index.ts
new file mode 100644
index 0000000..0cd1ff0
--- /dev/null
+++ b/src/api/specialWorkSystem/workProcess/index.ts
@@ -0,0 +1,59 @@
+import request from '/@/utils/request';
+
+export function workProcessApi() {
+ return {
+ // 分页获取检测列表
+ getDetectionListPage: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/work/process/detection/page/list`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 分页获取检查列表
+ getCheckListPage: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/work/process/check/page/list`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 检测上报
+ postDetectionReport: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/work/process/detection/report`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 检查上报
+ postCheckReport: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/work/process/check/report`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 获取可上报作业列表
+ postReportList: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/work/process/workApply/list`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 获取预警记录
+ postAlertList: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/work/process/warning/page/list`,
+ method: 'post',
+ data: data
+ });
+ },
+ };
+}
diff --git a/src/layout/navBars/breadcrumb/user.vue b/src/layout/navBars/breadcrumb/user.vue
index 36efe42..993fbd9 100644
--- a/src/layout/navBars/breadcrumb/user.vue
+++ b/src/layout/navBars/breadcrumb/user.vue
@@ -264,7 +264,6 @@
};
const backToMenu = () => {
router.push({ path: 'newMenu' }).then(()=>{
- debugger
routeList.routesList.value = []
console.log(routeList);
});
diff --git a/src/router/route.ts b/src/router/route.ts
index f88647d..b45a04a 100644
--- a/src/router/route.ts
+++ b/src/router/route.ts
@@ -127,5 +127,13 @@
meta: {
title: 'spi报告详情'
}
+ },
+ {
+ path: '/workReservation',
+ name: 'workReservation',
+ component: () => import('/@/views/specialWorkSystem/workPlan/workReservation/index.vue'),
+ meta: {
+ title: '作业预约'
+ }
}
];
diff --git a/src/utils/request.ts b/src/utils/request.ts
index 712c188..05e9b36 100644
--- a/src/utils/request.ts
+++ b/src/utils/request.ts
@@ -46,7 +46,6 @@
// };
return JSONbig.parse(data);
} catch (err) {
- console.log(err);
// 转换失败返回一个空对象
return data
}
diff --git a/src/views/riskWarningSys/warningBigScreen/components/SPI.vue b/src/views/riskWarningSys/warningBigScreen/components/SPI.vue
index 7568be8..cb42132 100644
--- a/src/views/riskWarningSys/warningBigScreen/components/SPI.vue
+++ b/src/views/riskWarningSys/warningBigScreen/components/SPI.vue
@@ -1,5 +1,17 @@
<template>
<div class="charts-cont">
+ <div :class="spiChart">
+ <el-cascader
+ class="spiSe"
+ :teleported="false"
+ v-model="spiValue"
+ :options="spiOptions"
+ :props="spiProps"
+ :show-all-levels="false"
+ @change="handleChange"
+ />
+ </div>
+
<div class="spi" :id="spi">
</div>
@@ -7,7 +19,7 @@
</template>
<script lang="ts">
- import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted} from 'vue';
+ import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted, watchEffect} from 'vue';
import { storeToRefs } from 'pinia';
import { initBackEndControlRoutes } from '/@/router/backEnd';
import {useUserInfo} from "/@/stores/userInfo";
@@ -18,22 +30,76 @@
import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
import * as echarts from 'echarts';
import '/@/theme/bigScreen.css'
+ import {useScreenTheme} from "/@/stores/screenTheme";
interface stateType {
+ spiValue: number;
+ spiOptions: Array<any>;
+ spiChart: string
}
export default defineComponent({
- name: 'accident',
+ name: 'SPI',
components: {},
props:{
size: Number,
+ theme: Boolean
},
setup(props) {
const userInfo = useUserInfo()
const { userInfos } = storeToRefs(userInfo);
+ const screenThemes = useScreenTheme()
+ const { screenTheme } = storeToRefs(screenThemes);
const spi = ref("eChartSpi" + Date.now() + Math.random())
const state = reactive<stateType>({
-
+ spiValue: 0,
+ 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'
+ }
+ ]
+ }
+ ],
+ spiChart: 'spi-dark'
})
+ const spiProps = {
+ expandTrigger: 'hover',
+ checkStrictly: true
+ }
type EChartsOption = echarts.EChartsOption
// 隐患整改情况
const initSpi =()=>{
@@ -222,6 +288,23 @@
myChart.resize();
});
}
+
+ const getTheme =()=>{
+ if(screenTheme.value.isDark){
+ state.spiChart = 'spi-dark'
+ }else{
+ state.spiChart = 'spi-light'
+ }
+ }
+
+ watchEffect(() => {
+ if(props.theme){
+ state.spiChart = 'spi-dark'
+ }else{
+ state.spiChart = 'spi-light'
+ }
+ })
+
function fontSize(val){
let nowClientWidth = document.documentElement.clientWidth;
return val * (nowClientWidth/1920) * Number(props.size);
@@ -230,11 +313,13 @@
// 页面载入时执行方法
onMounted(() => {
initSpi();
+ getTheme();
});
return {
spi,
Search,
+ spiProps,
fontSize,
...toRefs(state)
};
@@ -249,6 +334,105 @@
padding: 2%;
position: relative;
+ .spi-dark{
+ position: absolute;
+ width: 25% !important;
+ top: 0;
+ left: 2rem;
+ z-index: 99999;
+
+ ::v-deep(.el-cascader){
+ width: 100% !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;
+ }
+ }
+ }
+
+ .spi-light{
+ position: absolute;
+ width: 25% !important;
+ top: 0;
+ left: 2rem;
+ z-index: 99999;
+
+ ::v-deep(.el-cascader){
+ width: 100% !important;
+ }
+ ::v-deep(.el-popper){
+ background-color: #fff;
+ border: 1px solid #ccc;
+ color: #000;
+ .el-cascader-node__label{
+ color: #000;
+ }
+ .el-icon{
+ color: #000;
+ }
+ .el-cascader-node{
+ &:hover{
+ background: #ccc;
+ }
+ }
+ }
+ ::v-deep(.el-popper__arrow){
+ &::before{
+ background-color: #fff !important;
+ border: 1px solid #ccc;
+ }
+ }
+ ::v-deep(.el-input__wrapper){
+ width: 20%;
+ box-shadow: none;
+ border: 1px solid #ccc;
+ background: #fff !important;
+ height: 2.5rem;
+ color: #000;
+
+ input{
+ font-size: 1.25rem;
+ color: #000;
+ }
+ .el-icon{
+ color: #000;
+ }
+ }
+ }
.spi{
width: 100%;
height: 100%;
diff --git a/src/views/riskWarningSys/warningBigScreen/components/accident.vue b/src/views/riskWarningSys/warningBigScreen/components/accident.vue
index ef12e23..2f15dfe 100644
--- a/src/views/riskWarningSys/warningBigScreen/components/accident.vue
+++ b/src/views/riskWarningSys/warningBigScreen/components/accident.vue
@@ -221,6 +221,7 @@
});
onUnmounted(() =>{
+
})
return {
diff --git a/src/views/riskWarningSys/warningBigScreen/components/message.vue b/src/views/riskWarningSys/warningBigScreen/components/message.vue
index 7a8327a..5bcbabc 100644
--- a/src/views/riskWarningSys/warningBigScreen/components/message.vue
+++ b/src/views/riskWarningSys/warningBigScreen/components/message.vue
@@ -22,6 +22,7 @@
import {useScreenTheme} from "/@/stores/screenTheme"
interface stateType {
+ config: object
}
export default defineComponent({
name: 'message',
diff --git a/src/views/riskWarningSys/warningBigScreen/components/risk.vue b/src/views/riskWarningSys/warningBigScreen/components/risk.vue
index 9423bda..038699b 100644
--- a/src/views/riskWarningSys/warningBigScreen/components/risk.vue
+++ b/src/views/riskWarningSys/warningBigScreen/components/risk.vue
@@ -1,12 +1,20 @@
<template>
<div class="charts-cont">
+ <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>
<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 { toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted, nextTick, onBeforeUnmount, watchEffect } from 'vue';
import { storeToRefs } from 'pinia';
import { initBackEndControlRoutes } from '/@/router/backEnd';
import {useUserInfo} from "/@/stores/userInfo";
@@ -17,25 +25,79 @@
import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
import * as echarts from 'echarts';
import '/@/theme/bigScreen.css'
+ import {useScreenTheme} from "/@/stores/screenTheme";
interface stateType {
- curValue: boolean
+ curValue: boolean,
+ month: number,
+ optionList: Array<any>,
+ selector: string
}
export default defineComponent({
name: 'risk',
components: {},
props:{
size: Number,
- month: Number
+ theme: Boolean
},
setup(props) {
const userInfo = useUserInfo()
const { userInfos } = storeToRefs(userInfo);
+ const screenThemes = useScreenTheme()
+ const { screenTheme } = storeToRefs(screenThemes);
const risk1 = ref("eChartRisk1" + Date.now() + Math.random())
const risk2 = ref("eChartRisk2" + Date.now() + Math.random())
const state = reactive<stateType>({
- curValue: true
+ curValue: true,
+ 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
+ }
+ ],
+ selector: 'select-dark'
})
const swi = setInterval(()=>{
@@ -278,6 +340,22 @@
echarts.init(document.getElementById(risk1.value)).dispose()
}
+ const getTheme =()=>{
+ if(screenTheme.value.isDark){
+ state.selector = 'select-dark'
+ }else{
+ state.selector = 'select-light'
+ }
+ }
+
+ watchEffect(() => {
+ if(props.theme){
+ state.selector = 'select-dark'
+ }else{
+ state.selector = 'select-light'
+ }
+ })
+
function fontSize(val){
let nowClientWidth = document.documentElement.clientWidth;
return val * (nowClientWidth/1920) * Number(props.size);
@@ -286,6 +364,7 @@
// 页面载入时执行方法
onMounted(() => {
initRisk1();
+ getTheme();
});
onBeforeUnmount(() =>{
@@ -309,6 +388,91 @@
height: 100%;
padding: 5% 5% 2%;
position: relative;
+ .select-dark{
+ position: absolute;
+ z-index: 999;
+ top: -20px;
+ right: 1.6rem;
+ width: 30%;
+ height: 20px;
+ 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;
+ }
+ }
+ }
+
+ .select-light{
+ position: absolute;
+ z-index: 999;
+ top: -20px;
+ right: 1.6rem;
+ width: 30%;
+ height: 20px;
+ margin-right: 0.8rem;
+
+ ::v-deep(.el-popper){
+ background-color: rgba(255,255,255,1);
+ border: 1px solid #ccc;
+ color: #fff;
+ .el-select-dropdown__item{
+ color: #000;
+ }
+ .el-select-dropdown__item.hover{
+ background: #ccc;
+ }
+ }
+ ::v-deep(.el-popper__arrow){
+ &::before{
+ background-color: rgba(255,255,255,.6) !important;
+ border: 1px solid #ccc;
+ }
+ }
+ ::v-deep(.el-input__wrapper){
+ box-shadow: none;
+ border: 1px solid #ccc;
+ background: #fff !important;
+ height: 1.5rem;
+ color: #fff;
+
+ input{
+ font-size: 0.8rem;
+ color: #000;
+ }
+ .el-icon{
+ color: #000;
+ }
+ }
+ }
.risk{
width: 100%;
diff --git a/src/views/riskWarningSys/warningBigScreen/index.vue b/src/views/riskWarningSys/warningBigScreen/index.vue
index b8cd4d4..d8744f2 100644
--- a/src/views/riskWarningSys/warningBigScreen/index.vue
+++ b/src/views/riskWarningSys/warningBigScreen/index.vue
@@ -50,51 +50,29 @@
</div>
<div class="chart-box">
<span class="train-tip">距上次演练结束 5 天</span>
- <training :size="1"></training>
+ <training class="train-chart" :size="1"></training>
</div>
</div>
<div class="left-bottom">
<dv-border-box-13 :backgroundColor="boxBg" :color="boxColor" 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">-->
- <Switch style="width: 1.2rem;height: 1.2rem;cursor: pointer" @click="jumpPage(3)"/>
- </div>
-
+ <Switch style="width: 1.2rem;height: 1.2rem;cursor: pointer" @click="jumpPage(3)"/>
</div>
<div class="chart-box">
- <risk :size="1" :month="month"></risk>
+ <risk :size="1" :theme="screenTheme.isDark"></risk>
</div>
</div>
</div>
<div class="main-middle">
<div class="mid-top">
<dv-border-box-11 title="SPI数据分析" :backgroundColor="boxBg" :color="boxBigColor" 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"
- :show-all-levels="false"
- @change="handleChange"
- />
-<!-- <span>SPI数据分析</span>-->
-<!-- <img @click="jumpPage(4)" src="../../../assets/warningScreen/small-full.png">-->
+ <div class="part-tit" style="position: absolute;top: 8%;padding: 0 4%">
+ <div></div>
<Switch style="width: 1.2rem;height: 1.2rem;cursor: pointer" @click="jumpPage(4)"/>
</div>
- <div class="chart-box">
- <spi :size="1"></spi>
+ <div class="chart-box" style="top: 60px;height: calc(100% - 70px)">
+ <spi :size="1" :theme="screenTheme.isDark"></spi>
</div>
</div>
<div class="mid-bottom">
@@ -191,9 +169,7 @@
boxBigColor: Array<string>;
isScreenfull: boolean;
currentTime: string;
- month: number;
spiValue: number;
- optionList: Array<any>;
spiOptions: Array<any>
}
export default defineComponent({
@@ -224,54 +200,7 @@
boxBigColor: [],
isScreenfull: false,
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,
@@ -555,94 +484,11 @@
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{
@@ -652,24 +498,26 @@
}
}
.chart-box{
+ position: absolute;
+ top: 40px;
+ bottom: 0;
+ left: 0;
+ right: 0;
width: 100%;
- height: calc(100% - 20px);
- margin-top: 20px;
+ height: calc(100% - 50px);
+ z-index: 99999;
.train-tip{
display: block;
font-size: 0.8rem;
- margin-top: 5%;
- margin-left: 2%;
+ margin-top: 2%;
+ margin-left: 5%;
color: #fff;
- }
- accident{
- width: 100%;
- height: 100%;
+ height: 1rem;
}
- training{
+ .train-chart{
width: 100%;
- height: 100%;
+ height: calc(100% - 1rem);
}
}
}
@@ -855,94 +703,10 @@
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: #000;
- }
- ::v-deep(.el-cascader){
- width: 25% !important;
- }
- ::v-deep(.el-popper){
- background-color: #fff;
- border: 1px solid #ccc;
- color: #000;
- .el-cascader-node__label{
- color: #000;
- }
- .el-icon{
- color: #000;
- }
- .el-cascader-node{
- &:hover{
- background: #ccc;
- }
- }
- }
- ::v-deep(.el-popper__arrow){
- &::before{
- background-color: #fff !important;
- border: 1px solid #ccc;
- }
- }
- ::v-deep(.el-input__wrapper){
- width: 20%;
- box-shadow: none;
- border: 1px solid #ccc;
- background: #fff !important;
- height: 2.5rem;
- color: #000;
-
- input{
- font-size: 1.25rem;
- color: #000;
- }
- .el-icon{
- color: #000;
- }
- }
- .selector{
- width: calc(100% - 1.25rem);
- margin-right: 0.8rem;
-
- ::v-deep(.el-popper){
- background-color: rgba(255,255,255,1);
- border: 1px solid #ccc;
- color: #fff;
- .el-select-dropdown__item{
- color: #000;
- }
- .el-select-dropdown__item.hover{
- background: #ccc;
- }
- }
- ::v-deep(.el-popper__arrow){
- &::before{
- background-color: rgba(255,255,255,.6) !important;
- border: 1px solid #ccc;
- }
- }
- ::v-deep(.el-input__wrapper){
- box-shadow: none;
- border: 1px solid #ccc;
- background: #fff !important;
- height: 1.5rem;
- color: #fff;
-
- input{
- font-size: 0.8rem;
- color: #000;
- }
- .el-icon{
- color: #000;
- }
- }
}
img{
@@ -952,24 +716,26 @@
}
}
.chart-box{
+ position: absolute;
+ top: 40px;
+ bottom: 0;
+ left: 0;
+ right: 0;
width: 100%;
- height: calc(100% - 20px);
- margin-top: 20px;
+ height: calc(100% - 50px);
+ z-index: 99999;
.train-tip{
display: block;
font-size: 0.8rem;
- margin-top: 5%;
- margin-left: 2%;
+ margin-top: 2%;
+ margin-left: 5%;
color: #333;
- }
- accident{
- width: 100%;
- height: 100%;
+ height: 1rem;
}
- training{
+ .train-chart{
width: 100%;
- height: 100%;
+ height: calc(100% - 1rem);
}
}
}
diff --git a/src/views/riskWarningSys/warningBigScreen/indexs/index.vue b/src/views/riskWarningSys/warningBigScreen/indexs/index.vue
index 570d38d..c037e1c 100644
--- a/src/views/riskWarningSys/warningBigScreen/indexs/index.vue
+++ b/src/views/riskWarningSys/warningBigScreen/indexs/index.vue
@@ -9,19 +9,11 @@
</div>
<div class="tit">
- <div class="title">{{curChart===1?'事故等级分布':curChart===2?'应急演练次数':curChart===3?'年度隐患等级数量分布':curChart===4?'SPI数据分析':curChart===5?'教育培训分析':curChart===6?'隐患等级':curChart===7?'人员专业度分布':curChart===8?'预警消息报告':curChart===9?'特殊作业实时监控':'风险应急物资储备'}}</div>
+ <div 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>
@@ -91,8 +83,6 @@
interface stateType {
isScreenfull: boolean;
curChart: number | null;
- month: number;
- optionList: Array<any>;
lineColor: Array<string>;
accidentDesc: Array<any>;
trainDesc: Object;
@@ -118,54 +108,7 @@
const state = reactive<stateType>({
isScreenfull: false,
curChart: null,
- month: 0,
lineColor: ['#11FEEE'],
- 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
- }
- ],
accidentDesc:[
{
title: '特别重大事故',
@@ -343,25 +286,6 @@
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%;
@@ -482,25 +406,6 @@
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%;
diff --git a/src/views/riskWarningSys/warningBigScreen/indexs/msgDetail.vue b/src/views/riskWarningSys/warningBigScreen/indexs/msgDetail.vue
index 96018d9..c30b03e 100644
--- a/src/views/riskWarningSys/warningBigScreen/indexs/msgDetail.vue
+++ b/src/views/riskWarningSys/warningBigScreen/indexs/msgDetail.vue
@@ -9,7 +9,7 @@
</div>
<dv-decoration7 :color="lineColor" style="width:100%;height:6%;margin-bottom: 20px">
<div class="msgTit">
- Decoration
+ {{title}}
</div>
</dv-decoration7>
<dv-border-box1 :color="lineColor" style="width: 100%;height: calc(100% - 20px)">
@@ -33,7 +33,8 @@
// 定义接口来定义对象的类型
interface stateType {
-
+ lineColor: Array<string>,
+ title: string | null
}
export default defineComponent({
name: 'msgDetail',
@@ -46,13 +47,14 @@
const route = useRoute();
const state = reactive<stateType>({
lineColor: ['#11FEEE'],
+ title: ''
});
// 页面载入时执行方法
onMounted(() => {
- // if (route.query.row) {
- // state.row = route.query.num
- // }
+ if (route.query.row) {
+ state.title = route.query.row[1]
+ }
getTheme()
});
diff --git a/src/views/specialWorkSystem/workAlert/alertRecord/index.vue b/src/views/specialWorkSystem/workAlert/alertRecord/index.vue
index 7ce10ae..f9059d6 100644
--- a/src/views/specialWorkSystem/workAlert/alertRecord/index.vue
+++ b/src/views/specialWorkSystem/workAlert/alertRecord/index.vue
@@ -24,7 +24,7 @@
<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-select v-model="warningType" placeholder="请选择预警类型">
<el-option
v-for="item in alertTypeList"
:key="item.id"
@@ -43,7 +43,7 @@
<!-- <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-button type="primary" :icon="Refresh" size="default" @click="reLoadData"/>-->
<!-- </el-row>-->
<el-table
ref="multipleTableRef"
@@ -52,14 +52,14 @@
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 type="index" label="序号" width="80"/>
+ <el-table-column property="workPermitNo" label="作业证编号"/>
+ <el-table-column property="workTypeDesc" label="作业类型"/>
+ <el-table-column property="warningContent" show-overflow-tooltip label="预警信息"/>
+ <el-table-column property="warningTypeDesc" label="预警类型"/>
+ <el-table-column property="warningInfo" show-overflow-tooltip label="描述" width="200"/>
+ <el-table-column property="operatorUname" label="上报人"/>
+ <el-table-column property="operationTime" label="上报时间" width="180"/>
<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>
@@ -74,7 +74,7 @@
small=false
background
layout="total, sizes, prev, pager, next, jumper"
- :total="100"
+ :total="totalSize"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
@@ -85,25 +85,28 @@
<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-input v-model="details.workPermitNo" readonly/>
</el-form-item>
<el-form-item label="作业类型">
- <el-input v-model="details.workType" readonly/>
+ <el-input v-model="details.workTypeDesc" readonly/>
</el-form-item>
<el-form-item label="预警信息">
- <el-input v-model="details.alertInfo" readonly/>
+ <el-input v-model="details.warningContent" readonly/>
</el-form-item>
<el-form-item label="预警类型">
- <el-input v-model="details.alertType" readonly/>
+ <el-input v-model="details.warningTypeDesc" readonly/>
+ </el-form-item>
+ <el-form-item label="图片" v-if="details.imagePaths && details.imagePaths.length>0">
+ <el-image v-for="item in details.imagePaths" :preview-src-list="details.imagePaths" 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.desc" type="textarea" readonly/>
+ <el-input v-model="details.warningInfo" type="textarea" readonly/>
</el-form-item>
<el-form-item label="上报人">
- <el-input v-model="details.name" readonly/>
+ <el-input v-model="details.operatorUname" readonly/>
</el-form-item>
<el-form-item label="上报时间">
- <el-input v-model="details.updateTime" readonly/>
+ <el-input v-model="details.operationTime" readonly/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button>
@@ -122,7 +125,7 @@
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';
+ import { workProcessApi } from '/@/api/specialWorkSystem/workProcess';
// 定义接口来定义对象的类型
interface stateType {
@@ -130,7 +133,6 @@
departmentList: Array<any>;
department:string;
workerList: Array<string>;
- casProps: {};
multipleSelection: Array<any>;
deleteArr: Array<any>;
dialogDetails: boolean;
@@ -142,12 +144,9 @@
chosenIndex: null | number;
deleteId: null | number;
searchWord: string;
- searchType: number | null;
- searchAlert: number | null;
+ searchType: string;
+ warningType: string;
totalSize: number;
- addRecord: {
-
- };
details: {
};
@@ -168,94 +167,47 @@
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'
- }
- ],
+ searchType: '',
+ warningType: '',
+ tableData: [],
departmentList: [],
department: '',
workerList: [],
- casProps: {
- expandTrigger: 'hover',
- emitPath: false,
- value: 'depId',
- label: 'depName'
- },
multipleSelection: [],
dialogDetails: false,
dialogAddRecord: false,
deleteDialog: false,
deleteSetDialog: false,
- addRecord: {
-
- },
- details: {
-
- },
+ 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: '盲板抽堵作业' }
+ { 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: '作业检查' }
+ { id: '1', name: '检查' },
+ { id: '2', name: '检测' }
]
});
// 页面载入时执行方法
onMounted(() => {
- // getListByPage();
- // getAllDepartment();
+ getListByPage();
});
// 分页获取班组管理列表
const getListByPage = async () => {
- const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { groupName: state.searchWord, containGroupMemberEnable: true } };
- let res = await teamManageApi().getRecordPage(data);
+ const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { workType: state.searchType, workPermitNo: state.searchWord,warningType: state.warningType } };
+ let res = await workProcessApi().postAlertList(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.tableData = JSON.parse(JSON.stringify(res.data.data))
state.totalSize = res.data.total;
} else {
ElMessage({
@@ -265,36 +217,9 @@
}
};
- // 获取部门列表
- 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 == '') {
+ const searchRecord = () => {
+ if (state.searchWord == ''&& state.searchType == ''&& state.warningType == '') {
ElMessage({
type: 'warning',
message: '请输入查询关键词'
@@ -304,9 +229,11 @@
}
};
- const clearSearch = async () => {
- state.searchWord = '';
- getListByPage();
+ const clearSearch = () => {
+ state.searchWord = ''
+ state.searchType = ''
+ state.warningType = ''
+ getListByPage()
};
const handleSizeChange = (val: number) => {
@@ -343,7 +270,6 @@
Delete,
Refresh,
Plus,
- handleChange,
searchRecord,
clearSearch,
viewRecord,
diff --git a/src/views/specialWorkSystem/workPlan/reserveSum/index.vue b/src/views/specialWorkSystem/workPlan/reserveSum/index.vue
new file mode 100644
index 0000000..09fcc2d
--- /dev/null
+++ b/src/views/specialWorkSystem/workPlan/reserveSum/index.vue
@@ -0,0 +1,415 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <el-row class="homeCard">
+ <el-col :span="8" style="display:flex;align-items: center">
+ <span style="white-space: nowrap">选择时间段:</span>
+ <div class="grid-content topInfo">
+ <el-date-picker
+ v-model="searchDates"
+ type="daterange"
+ unlink-panels
+ range-separator="至"
+ start-placeholder="开始日期"
+ end-placeholder="结束日期"
+ value-format="YYYY-MM-DD"
+ :shortcuts="shortcuts"
+ />
+ </div>
+ </el-col>
+ <el-button style="margin-left: 20px" type="primary" @click="searchRecord">查询</el-button>
+ <el-button plain @click="clearSearch">重置</el-button>
+ </el-row>
+ <div class="homeCard">
+ <div :id="chartName" style="width: 100%;height: 100%"></div>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script lang="ts">
+ import {toRefs, reactive, ref, onMounted, defineAsyncComponent, nextTick} 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, ElMessage, ElMessageBox } from 'element-plus'
+ import { workAppointApi } from '/@/api/specialWorkSystem/workPlan/workAppoint';
+ import { teamManageApi } from '/@/api/systemManage/basicDateManage/personShiftManage/teamManage';
+ import * as echarts from "echarts";
+
+ // 定义接口来定义对象的类型
+ interface stateType {
+ tableData: [],
+ departmentList: [],
+ hotCount: [],
+ confinedSpaceCount: [],
+ liftingCount: [],
+ groundBreakingCount: [],
+ openCircuitCout: [],
+ heightCount: [],
+ temporaryPowerCount: [],
+ blindPlatePluggingCount: [],
+ searchDates: Array<any>,
+ startTime: String,
+ endTime: String
+ }
+
+ export default {
+ name: 'workReservation',
+ components: {},
+ setup() {
+ const userInfo = useUserInfo();
+ const { userInfos } = storeToRefs(userInfo);
+ const state = reactive<stateType>({
+ tableData: [],
+ departmentList: [],
+ hotCount: [],
+ confinedSpaceCount: [],
+ liftingCount: [],
+ groundBreakingCount: [],
+ openCircuitCout: [],
+ heightCount: [],
+ temporaryPowerCount: [],
+ blindPlatePluggingCount: [],
+ searchDates: '',
+ startTime: '',
+ endTime: ''
+ });
+ const chartName = ref("eChart" + Date.now() + Math.random())
+ const shortcuts = [
+ {
+ text: '上周',
+ value: () => {
+ const end = new Date()
+ const start = new Date()
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
+ return [start, end]
+ },
+ },
+ {
+ text: '上个月',
+ value: () => {
+ const end = new Date()
+ const start = new Date()
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
+ return [start, end]
+ },
+ },
+ {
+ text: '上个季度',
+ value: () => {
+ const end = new Date()
+ const start = new Date()
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
+ return [start, end]
+ },
+ },
+ ]
+
+ // 页面载入时执行方法
+ onMounted(() => {
+ getListByPage()
+ // getAllDepartment()
+ });
+
+ // 获取列表
+ const getListByPage = async () => {
+ console.log(state.searchDates)
+ const data = { startTime: state.searchDates[0], endTime: state.searchDates[1] };
+ let res = await workAppointApi().getAllRecords(data);
+ if (res.data.code === '200') {
+ if(JSON.parse(JSON.stringify(res.data.data)).length>0){
+ state.tableData = JSON.parse(JSON.stringify(res.data.data))
+ state.departmentList = Array.from(state.tableData, ({ applyDepName }) => applyDepName);
+ state.hotCount = Array.from(state.tableData, ({ hotCount }) => hotCount);
+ state.confinedSpaceCount = Array.from(state.tableData, ({ confinedSpaceCount }) => confinedSpaceCount);
+ state.liftingCount = Array.from(state.tableData, ({ liftingCount }) => liftingCount);
+ state.groundBreakingCount = Array.from(state.tableData, ({ groundBreakingCount }) => groundBreakingCount);
+ state.openCircuitCout = Array.from(state.tableData, ({ openCircuitCout }) => openCircuitCout);
+ state.heightCount = Array.from(state.tableData, ({ heightCount }) => heightCount);
+ state.temporaryPowerCount = Array.from(state.tableData, ({ temporaryPowerCount }) => temporaryPowerCount);
+ state.blindPlatePluggingCount = Array.from(state.tableData, ({ blindPlatePluggingCount }) => blindPlatePluggingCount);
+ initCharts()
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: '该时段暂无数据'
+ });
+ }
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ const initCharts =()=>{
+ let dom = document.getElementById(chartName.value);
+ let myChart = echarts.init(dom);
+
+ type EChartsOption = echarts.EChartsOption
+ let option: EChartsOption;
+
+ option = {
+ tooltip: {
+ trigger: 'axis',
+ axisPointer: {
+ type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
+ }
+ },
+ legend: {},
+ grid: {
+ left: '3%',
+ right: '3%',
+ bottom: '3%',
+ containLabel: true
+ },
+ xAxis: {
+ type: 'value'
+ },
+ yAxis: {
+ type: 'category',
+ data: state.departmentList
+ },
+ series: [
+ {
+ name: '动火作业',
+ type: 'bar',
+ stack: 'total',
+ label: {
+ show: true
+ },
+ emphasis: {
+ focus: 'series'
+ },
+ data: state.hotCount
+ },
+ {
+ name: '受限空间作业',
+ type: 'bar',
+ stack: 'total',
+ label: {
+ show: true
+ },
+ emphasis: {
+ focus: 'series'
+ },
+ data: state.confinedSpaceCount
+ },
+ {
+ name: '吊装作业',
+ type: 'bar',
+ stack: 'total',
+ label: {
+ show: true
+ },
+ emphasis: {
+ focus: 'series'
+ },
+ data: state.liftingCount
+ },
+ {
+ name: '动土作业',
+ type: 'bar',
+ stack: 'total',
+ label: {
+ show: true
+ },
+ emphasis: {
+ focus: 'series'
+ },
+ data: state.groundBreakingCount
+ },
+ {
+ name: '断路作业',
+ type: 'bar',
+ stack: 'total',
+ label: {
+ show: true
+ },
+ emphasis: {
+ focus: 'series'
+ },
+ data: state.openCircuitCout
+ },
+ {
+ name: '高处作业',
+ type: 'bar',
+ stack: 'total',
+ label: {
+ show: true
+ },
+ emphasis: {
+ focus: 'series'
+ },
+ data: state.heightCount
+ },
+ {
+ name: '临时用电作业',
+ type: 'bar',
+ stack: 'total',
+ label: {
+ show: true
+ },
+ emphasis: {
+ focus: 'series'
+ },
+ data: state.temporaryPowerCount
+ },
+ {
+ name: '盲板抽堵作业',
+ type: 'bar',
+ stack: 'total',
+ label: {
+ show: true
+ },
+ emphasis: {
+ focus: 'series'
+ },
+ data: state.blindPlatePluggingCount
+ }
+ ]
+ };
+
+ option && myChart.setOption(option);
+
+ window.addEventListener("resize",function (){
+ myChart.resize();
+ });
+ }
+
+ // 关键词查询记录
+ const searchRecord = async () => {
+ if (state.searchDates == []) {
+ ElMessage({
+ type: 'warning',
+ message: '请选择时间段'
+ });
+ } else {
+ getListByPage();
+ }
+ };
+
+ const clearSearch = async () => {
+ state.searchDates = [];
+ getListByPage();
+ };
+
+ // 刷新
+ 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,
+ Search,
+ shortcuts,
+ chartName,
+ searchRecord,
+ clearSearch,
+ getListByPage,
+ reLoadData,
+ ...toRefs(state)
+ };
+ }
+ };
+</script>
+
+<style scoped lang="scss">
+ $homeNavLengh: 8;
+ .red{
+ color: red;
+ }
+ .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;
+ }
+ ::v-deep(.el-date-editor){
+ width: 100%;
+ }
+ .el-select{
+ width: 100%;
+ }
+ :deep(.el-cascader){
+ width: 100% !important;
+ }
+</style>
diff --git a/src/views/specialWorkSystem/workPlan/workAppoint/index.vue b/src/views/specialWorkSystem/workPlan/workAppoint/index.vue
new file mode 100644
index 0000000..6430e3a
--- /dev/null
+++ b/src/views/specialWorkSystem/workPlan/workAppoint/index.vue
@@ -0,0 +1,616 @@
+<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-cascader v-model="searchDep" :options="departmentList" :props="casProps" :show-all-levels="false"/>
+ </div>
+ </el-col>
+ <el-col :span="6" style="display:flex;align-items: center;">
+ <span style="white-space: nowrap;margin-left: 20px">预约日期:</span>
+ <div class="grid-content topInfo">
+ <el-date-picker
+ v-model="searchDate"
+ type="date"
+ format="YYYY-MM-DD" value-format="YYYY-MM-DD"
+ />
+ </div>
+ </el-col>
+ <el-button style="margin-left: 20px" 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" @click="reLoadData"/>-->
+<!-- </el-row>-->
+ <el-table
+ :data="tableData"
+ style="width: 100%"
+ height="calc(100% - 48px)"
+ :header-cell-style="{background: '#fafafa'}"
+ >
+<!-- <el-table-column type="selection" width="55" />-->
+ <el-table-column type="index" label="序号" width="80" />
+ <el-table-column prop="applyDepName" align="center" label="申请部门"/>
+ <el-table-column prop="appointmentTime" align="center" label="预约时间"/>
+ <el-table-column prop="hotWork" align="center" label="动火作业"/>
+ <el-table-column prop="confinedSpaceOper" align="center" label="受限空间作业"/>
+ <el-table-column prop="liftingOper" align="center" label="吊装作业"/>
+ <el-table-column prop="groundBreakingOper" align="center" label="动土作业"/>
+ <el-table-column prop="openCircuitOper" align="center" label="断路作业"/>
+ <el-table-column prop="workAtHeight" align="center" label="高处作业" />
+ <el-table-column prop="temporaryPowerOper" align="center" label="临时用电作业"/>
+ <el-table-column prop="blindPlatePluggingOper" align="center" 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>-->
+<!-- <el-button link type="primary" size="small" :icon="Edit" @click="editRecordBtn(scope.$index, scope.row)">修改</el-button>-->
+<!-- <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(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="totalSize"
+ @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.applyDepName"
+ readonly
+ />
+ </el-form-item>
+ <el-form-item label="预约时间">
+ <el-input
+ v-model="details.appointmentTime"
+ readonly
+ />
+ </el-form-item>
+ <el-form-item label="动火作业">
+ <el-input
+ v-model="details.hotWork"
+ readonly
+ />
+ </el-form-item>
+ <el-form-item label="受限空间作业">
+ <el-input
+ v-model="details.confinedSpaceOper"
+ readonly
+ />
+ </el-form-item>
+ <el-form-item label="吊装作业">
+ <el-input
+ v-model="details.liftingOper"
+ readonly
+ />
+ </el-form-item>
+ <el-form-item label="动土作业">
+ <el-input
+ v-model="details.groundBreakingOper"
+ readonly
+ />
+ </el-form-item>
+ <el-form-item label="断路作业">
+ <el-input
+ v-model="details.openCircuitOper"
+ readonly
+ />
+ </el-form-item>
+ <el-form-item label="高处作业">
+ <el-input
+ v-model="details.workAtHeight"
+ readonly
+ />
+ </el-form-item>
+ <el-form-item label="临时用电作业">
+ <el-input
+ v-model="details.temporaryPowerOper"
+ readonly
+ />
+ </el-form-item>
+ <el-form-item label="盲板抽堵作业">
+ <el-input
+ v-model="details.blindPlatePluggingOper"
+ readonly
+ />
+ </el-form-item>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button type="primary" @click="dialogDetails = false">确认</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ <el-dialog v-model="dialogAddRecord" title="作业预约编辑" @close="closeAdd">
+ <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules">
+ <el-form-item label="申请部门" prop="applyDepId">
+ <el-cascader :disabled = isDisabled v-model="addRecord.applyDepId" :options="departmentList" :props="casProps" :show-all-levels="false" @change="handleChange" />
+ </el-form-item>
+ <el-form-item label="预约时间" prop="appointmentTime">
+ <el-date-picker
+ v-model="addRecord.appointmentTime"
+ type="date"
+ format="YYYY-MM-DD" value-format="YYYY-MM-DD"
+ :disabled = isDisabled
+ />
+ </el-form-item>
+ <el-form-item label="动火作业" prop="hotWork">
+ <el-input
+ v-model="addRecord.hotWork"
+ />
+ </el-form-item>
+ <el-form-item label="受限空间作业" prop="confinedSpaceOper">
+ <el-input
+ v-model="addRecord.confinedSpaceOper"
+ />
+ </el-form-item>
+ <el-form-item label="吊装作业" prop="liftingOper">
+ <el-input
+ v-model="addRecord.liftingOper"
+ />
+ </el-form-item>
+ <el-form-item label="动土作业" prop="groundBreakingOper">
+ <el-input
+ v-model="addRecord.groundBreakingOper"
+ />
+ </el-form-item>
+ <el-form-item label="断路作业" prop="openCircuitOper">
+ <el-input
+ v-model="addRecord.openCircuitOper"
+ />
+ </el-form-item>
+ <el-form-item label="高处作业" prop="workAtHeight">
+ <el-input
+ v-model="addRecord.workAtHeight"
+ />
+ </el-form-item>
+ <el-form-item label="临时用电作业" prop="temporaryPowerOper">
+ <el-input
+ v-model="addRecord.temporaryPowerOper"
+ />
+ </el-form-item>
+ <el-form-item label="盲板抽堵作业" prop="blindPlatePluggingOper">
+ <el-input
+ v-model="addRecord.blindPlatePluggingOper"
+ />
+ </el-form-item>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button>
+ <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear">
+ <span>您确定要删除该条记录吗?</span>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="deleteDialog = false" size="default">取消</el-button>
+ <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+ import {toRefs, reactive, ref, onMounted, defineAsyncComponent} 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, ElMessage, ElMessageBox } from 'element-plus'
+ import type { FormInstance, FormRules, UploadProps, UploadUserFile } from 'element-plus'
+ import { workAppointApi } from '/@/api/specialWorkSystem/workPlan/workAppoint';
+ import { teamManageApi } from '/@/api/systemManage/basicDateManage/personShiftManage/teamManage';
+
+ // 定义接口来定义对象的类型
+ interface stateType {
+ tableData: Array<any>;
+ departmentList: Array<any>;
+ 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;
+ searchDep: number | null;
+ searchDate: string;
+ isDisabled:boolean;
+ totalSize: number;
+ addRecord: {
+
+ };
+ details: {
+
+ };
+ workTypeList: Array<any>
+ }
+
+ export default {
+ name: 'workReservation',
+ components: {},
+ setup() {
+ const userInfo = useUserInfo();
+ const { userInfos } = storeToRefs(userInfo);
+ const state = reactive<stateType>({
+ pageIndex: 1,
+ pageSize: 10,
+ totalSize: 0,
+ chosenIndex: null,
+ searchDep: null,
+ searchDate: '',
+ isDisabled: false,
+ tableData: [],
+ departmentList: [],
+ casProps: {
+ expandTrigger: 'hover',
+ emitPath: false,
+ value: 'depId',
+ label: 'depName',
+ checkStrictly: true
+ },
+ 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>({
+ applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ appointmentTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ hotWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ groundBreakingOper: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ blindPlatePluggingOper: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ temporaryPowerOper : [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ workAtHeight: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ openCircuitOper: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ liftingOper: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ confinedSpaceOper: [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
+ });
+
+ // 页面载入时执行方法
+ onMounted(() => {
+ getListByPage()
+ getAllDepartment()
+ });
+
+ // 获取部门列表
+ const getAllDepartment = async () => {
+ let res = await teamManageApi().getAllDepartment();
+ if (res.data.code === '200') {
+ state.departmentList = JSON.parse(JSON.stringify(res.data.data))
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ // 分页获取气体检测列表
+ const getListByPage = async () => {
+ const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { applyDepId: state.searchDep, appointmentTime: state.searchDate } };
+ let res = await workAppointApi().getAppointListPage(data);
+ if (res.data.code === '200') {
+ state.tableData = JSON.parse(JSON.stringify(res.data.data))
+ state.totalSize = res.data.total;
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ // 关键词查询记录
+ const searchRecord = async () => {
+ if (state.searchDep == null && state.searchDate == '') {
+ ElMessage({
+ type: 'warning',
+ message: '请输入查询关键词'
+ });
+ } else {
+ getListByPage();
+ }
+ };
+
+ const clearSearch = async () => {
+ state.searchDep = null;
+ state.searchDate = '';
+ getListByPage();
+ };
+
+ // 添加记录方法
+ const addRecord = async (data: any) => {
+ let res = await workAppointApi().addRecord(data);
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ message: res.data.msg
+ });
+ getListByPage();
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ // 修改记录方法
+ const editRecord = async (data: any) => {
+ let res = await workAppointApi().editRecord(data);
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ message: res.data.msg
+ });
+ getListByPage();
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ // 点击修改
+ const editRecordBtn = (index, row) => {
+ state.dialogAddRecord = true;
+ state.chosenIndex = index;
+ state.addRecord = JSON.parse(JSON.stringify(row));
+ state.isDisabled = true
+ };
+
+ // 新增修改记录
+ const confirmAddRecord = async (formEl: FormInstance | undefined) => {
+ if (!formEl) return;
+ await formEl.validate(async (valid, fields) => {
+ if (valid) {
+ const data = {
+ applyDepId: state.addRecord.applyDepId,
+ appointmentTime: state.addRecord.appointmentTime,
+ hotWork: Number(state.addRecord.hotWork),
+ groundBreakingOper: Number(state.addRecord.groundBreakingOper),
+ blindPlatePluggingOper: Number(state.addRecord.blindPlatePluggingOper),
+ temporaryPowerOper: Number(state.addRecord.temporaryPowerOper),
+ workAtHeight: Number(state.addRecord.workAtHeight),
+ openCircuitOper: Number(state.addRecord.openCircuitOper),
+ liftingOper: Number(state.addRecord.liftingOper),
+ confinedSpaceOper: Number(state.addRecord.confinedSpaceOper),
+ };
+ if (state.chosenIndex == null) {
+ await addRecord(data);
+ } else {
+ data.id = state.addRecord.id
+ await editRecord(data);
+ }
+ state.dialogAddRecord = false;
+ getListByPage();
+ } 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 deleteRecord = async (data: any) => {
+ let res = await workAppointApi().deleteRecord(data);
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ message: res.data.msg
+ });
+ getListByPage();
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ const deleteRecordBtn = (row) => {
+ state.deleteId = row.id;
+ state.deleteDialog = true;
+ };
+
+ const conFirmDelete = () => {
+ deleteRecord({ id: state.deleteId });
+ state.deleteDialog = false;
+ };
+
+
+ const closeAdd = () => {
+ state.addRecord = {};
+ state.chosenIndex = null;
+ state.isDisabled = false
+ };
+
+ 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,
+ Search,
+ searchRecord,
+ clearSearch,
+ viewRecord,
+ editRecordBtn,
+ deleteRecordBtn,
+ conFirmDelete,
+ getListByPage,
+ reLoadData,
+ handleSizeChange,
+ handleCurrentChange,
+ confirmAddRecord,
+ closeAdd,
+ indexClear,
+ ...toRefs(state)
+ };
+ }
+ };
+</script>
+
+<style scoped lang="scss">
+ $homeNavLengh: 8;
+ .red{
+ color: red;
+ }
+ .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;
+ }
+ ::v-deep(.el-date-editor){
+ width: 100%;
+ }
+ .el-select{
+ width: 100%;
+ }
+ :deep(.el-cascader){
+ width: 100% !important;
+ }
+</style>
diff --git a/src/views/specialWorkSystem/workPlan/workAppointSummary/index.vue b/src/views/specialWorkSystem/workPlan/workAppointSummary/index.vue
deleted file mode 100644
index b9f54fa..0000000
--- a/src/views/specialWorkSystem/workPlan/workAppointSummary/index.vue
+++ /dev/null
@@ -1,672 +0,0 @@
-<template>
- <div class="home-container">
- <el-scrollbar height="100%">
- <el-row class="homeCard">
- <el-col :span="12">
- <div class="grid-content topInfo">
- <el-date-picker
- v-model="searchTime"
- type="datetime"
- placeholder="预约时间"
- size="large"
- style="width: 100%;white-space: nowrap;margin-right: 20px"
- />
- <el-select v-model="typeValue" placeholder="请选择预约类型" style="width: 100%">
- <el-option label="类型1" value="类型1"/>
- <el-option label="类型2" value="类型2"/>
- <el-option label="类型3" value="类型3"/>
- </el-select>
- <el-button type="primary">查询历史</el-button>
- <el-button plain>重置</el-button>
- <el-button type="primary" @click="dialogChartsVisible = true">查看统计图表</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" @click="dialogAddRecord=true">新增</el-button>
-<!-- <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 type="index" label="序号" width="120" />
- <el-table-column prop="time" label="预约时间" width="150" />
- <el-table-column prop="department" label="预约部门" width="180" />
- <el-table-column prop="dirtyWork" label="动土作业" width="100" />
- <el-table-column prop="fireWork" label="动火作业" width="100" />
- <el-table-column prop="hangWork" label="吊装作业" width="100" />
- <el-table-column prop="spaceWork" label="受限空间作业"/>
- <el-table-column prop="cut" label="断路作业"/>
- <el-table-column prop="high" label="高处作业" />
- <el-table-column prop="block" label="盲板抽堵作业"/>
- <el-table-column prop="tempUse" 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>
- <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button>
- <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</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-scrollbar>
- <el-dialog v-model="dialogChartsVisible" title="统计图表" @opened="openChart">
- <el-row>
- <div class="grid-content">
- <div style="margin-bottom: 10px">日期查询:</div>
- <div class="block">
- <el-date-picker
- v-model="dateRange"
- type="daterange"
- unlink-panels
- range-separator="至"
- start-placeholder="开始日期"
- end-placeholder="截止日期"
- :shortcuts="shortcuts"
- size="large"
- />
- </div>
- </div>
- </el-row>
- <el-row>
- <div class="grid-content">
- <div style="margin-bottom: 10px">部门查询:</div>
- <div>
- <el-cascader
- v-model="departmentName"
- :options="departmentOptions"
- :props="{expandTrigger: 'hover'}"
- @change="handleChange"
- />
- </div>
- </div>
- </el-row>
- <div ref="myChart" style="width: 100%;height:400px;"></div>
- </el-dialog>
- <el-dialog v-model="dialogDetails" title="作业预约">
- <el-form :model="details" label-width="120px">
- <el-form-item label="预约时间">
- <el-input
- v-model="details.time"
- readonly
- />
- </el-form-item>
- <el-form-item label="预约部门">
- <el-input
- v-model="details.department"
- readonly
- />
- </el-form-item>
- <el-form-item label="动土作业">
- <el-input
- v-model="details.dirtyWork"
- readonly
- />
- </el-form-item>
- <el-form-item label="动火作业">
- <el-input
- v-model="details.fireWork"
- readonly
- />
- </el-form-item>
- <el-form-item label="吊装作业">
- <el-input
- v-model="details.hangWork"
- readonly
- />
- </el-form-item>
- <el-form-item label="受限空间作业">
- <el-input
- v-model="details.spaceWork"
- readonly
- />
- </el-form-item>
- <el-form-item label="断路作业">
- <el-input
- v-model="details.cut"
- readonly
- />
- </el-form-item>
- <el-form-item label="高处作业">
- <el-input
- v-model="details.high"
- readonly
- />
- </el-form-item>
- <el-form-item label="盲板抽堵作业">
- <el-input
- v-model="details.block"
- readonly
- />
- </el-form-item>
- <el-form-item label="临时用电作业">
- <el-input
- v-model="details.tempUse"
- 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">
- <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules">
- <el-form-item label="预约时间" prop="time">
- <el-date-picker
- v-model="addRecord.time"
- type="datetime"
- format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
- />
- </el-form-item>
- <el-form-item label="预约部门" prop="department">
- <el-select v-model="addRecord.department" placeholder="请选择">
- <el-option label="部门一" value="部门一" />
- <el-option label="部门二" value="部门二" />
- </el-select>
- </el-form-item>
- <el-form-item label="动土作业">
- <el-input
- v-model="addRecord.dirtyWork"
- />
- </el-form-item>
- <el-form-item label="动火作业">
- <el-input
- v-model="addRecord.fireWork"
- />
- </el-form-item>
- <el-form-item label="吊装作业">
- <el-input
- v-model="addRecord.hangWork"
- />
- </el-form-item>
- <el-form-item label="受限空间作业">
- <el-input
- v-model="addRecord.spaceWork"
- />
- </el-form-item>
- <el-form-item label="断路作业">
- <el-input
- v-model="addRecord.cut"
- />
- </el-form-item>
- <el-form-item label="高处作业">
- <el-input
- v-model="addRecord.high"
- />
- </el-form-item>
- <el-form-item label="盲板抽堵作业">
- <el-input
- v-model="addRecord.block"
- />
- </el-form-item>
- <el-form-item label="临时用电作业">
- <el-input
- v-model="addRecord.tempUse"
- />
- </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>
- <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear">
- <span>您确定要删除该条记录吗?</span>
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="deleteDialog = false" size="default">取消</el-button>
- <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button>
- </span>
- </template>
- </el-dialog>
- </div>
-</template>
-
-<script lang="ts" setup>
- import { toRefs, reactive, ref } 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 } from 'element-plus'
- import * as echarts from 'echarts/core';
- import { TooltipComponent, TooltipComponentOption, GridComponent, GridComponentOption, LegendComponent, LegendComponentOption } from 'echarts/components';
- import { BarChart, BarSeriesOption } from 'echarts/charts';
- import { CanvasRenderer } from 'echarts/renderers';
- echarts.use([
- TooltipComponent,
- GridComponent,
- LegendComponent,
- BarChart,
- CanvasRenderer
- ]);
- let global: any = {
- homeChartOne: null,
- homeChartTwo: null,
- homeCharThree: null,
- dispose: [null, '', undefined],
- };
-
- interface stateType {
- homeOne: Array <type>
- }
- interface type {
-
- }
- // export default defineComponent({
- // name: 'workCheckinRecord',
- // setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- const typeValue = ref('')
- const dialogChartsVisible = ref(false);
- const dateRange = ref('')
- const departmentName = ref('')
- const departmentOptions = [
- {
- value: 'guide',
- label: 'Guide',
- children: [
- {
- value: 'disciplines',
- label: 'Disciplines',
- children: [
- {
- value: 'consistency',
- label: 'Consistency',
- },
- {
- value: 'feedback',
- label: 'Feedback',
- }
- ],
- },
- {
- value: 'navigation',
- label: 'Navigation',
- children: [
- {
- value: 'side nav',
- label: 'Side Navigation',
- },
- {
- value: 'top nav',
- label: 'Top Navigation',
- },
- ],
- },
- ],
- },
- {
- value: 'component',
- label: 'Component',
- },
- {
- value: 'resource',
- label: 'Resource',
- children: [
- {
- value: 'axure',
- label: 'Axure Components',
- },
- {
- value: 'sketch',
- label: 'Sketch Templates',
- },
- {
- value: 'docs',
- label: 'Design Documentation',
- },
- ],
- },
- ]
- const handleChange = (value) => {
- console.log(value)
- }
- const currentPage = ref(1)
- const pageSize = ref(10)
- const chosenIndex = ref(-1)
- const handleSizeChange = (val: number) => {
- console.log(`${val} items per page`)
- }
- const handleCurrentChange = (val: number) => {
- console.log(`current page: ${val}`)
- }
- const tableData = reactive(
- [
- {
- time: '2022-06-29 12:32:52',
- department: '电工部',
- dirtyWork: '',
- fireWork: '',
- hangWork: '',
- spaceWork: '',
- cut: '',
- high: '',
- block: '',
- tempUse: ''
- },
- {
- time: '2022-06-29 12:32:52',
- department: '电工部',
- dirtyWork: '',
- fireWork: '',
- hangWork: '',
- spaceWork: '',
- cut: '',
- high: '',
- block: '',
- tempUse: ''
- },
- {
- time: '2022-06-29 12:32:52',
- department: '土木',
- dirtyWork: '',
- fireWork: '',
- hangWork: '',
- spaceWork: '',
- cut: '',
- high: '',
- block: '',
- tempUse: ''
- }
- ]
- )
- const addRef = ref<FormInstance>()
- const addRules = reactive<FormRules>({
- time:[{required: true, message: '该内容不能为空',trigger:'blur'}],
- department:[{required: true, message: '该内容不能为空',trigger:'blur'}]
- })
- const dialogDetails = ref(false)
- const dialogAddRecord = ref(false)
- const deleteDialog = ref(false)
- const addRecord = ref({})
- const details = ref({})
- const viewRecord = (row) =>{
- details.value = JSON.parse(JSON.stringify(row))
- dialogDetails.value = true
- }
- const deleteRecord = (index) =>{
- chosenIndex.value = index
- deleteDialog.value = true
- }
- const conFirmDelete = ()=> {
- tableData.splice(chosenIndex.value,1)
- deleteDialog.value = false
- }
- const confirmAddRecord = async (formEl: FormInstance | undefined) =>{
- if (!formEl) return
- await formEl.validate((valid, fields) => {
- if (valid) {
- if(chosenIndex.value == -1){
- tableData.unshift(addRecord.value)
- }else{
- tableData[chosenIndex.value] = addRecord.value
- }
- dialogAddRecord.value =false
- } else {
- console.log('error submit!', fields)
- }
- })
-
- }
- const closeAdd =()=>{
- addRecord.value={}
- chosenIndex.value = -1
- }
- const indexClear = ()=>{
- chosenIndex.value = -1
- }
- const editRecord =(index, row)=>{
- dialogAddRecord.value = true
- chosenIndex.value = index
- addRecord.value = JSON.parse(JSON.stringify(row))
- }
- const myChart = ref<HTMLElement>()
- const myCharts = ref<any>()
- const openChart =()=>{
- type EChartsOption = echarts.ComposeOption<
- | TooltipComponentOption
- | GridComponentOption
- | LegendComponentOption
- | BarSeriesOption
- >;
- myCharts.value = echarts.init(myChart.value!);
- const option: EChartsOption = {
- tooltip: {
- trigger: 'axis',
- axisPointer: {
- // Use axis to trigger tooltip
- type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
- }
- },
- legend: {},
- grid: {
- left: '3%',
- right: '3%',
- bottom: '3%',
- containLabel: true
- },
- xAxis: {
- type: 'value'
- },
- yAxis: {
- type: 'category',
- data: ['部门A', '部门B', '部门C', '部门D', '部门E', '部门F', '部门G']
- },
- series: [
- {
- name: '动火作业',
- type: 'bar',
- stack: 'total',
- label: {
- show: true
- },
- emphasis: {
- focus: 'series'
- },
- data: [320, 302, 301, 334, 390, 330, 320]
- },
- {
- name: '受限空间作业',
- type: 'bar',
- stack: 'total',
- label: {
- show: true
- },
- emphasis: {
- focus: 'series'
- },
- data: [120, 132, 101, 134, 90, 230, 210]
- },
- {
- name: '吊装作业',
- type: 'bar',
- stack: 'total',
- label: {
- show: true
- },
- emphasis: {
- focus: 'series'
- },
- data: [220, 182, 191, 234, 290, 330, 310]
- },
- {
- name: '动土作业',
- type: 'bar',
- stack: 'total',
- label: {
- show: true
- },
- emphasis: {
- focus: 'series'
- },
- data: [150, 212, 201, 154, 190, 330, 410]
- },
- {
- name: '断路作业',
- type: 'bar',
- stack: 'total',
- label: {
- show: true
- },
- emphasis: {
- focus: 'series'
- },
- data: [820, 832, 901, 934, 1290, 1330, 1320]
- },
- {
- name: '高处作业',
- type: 'bar',
- stack: 'total',
- label: {
- show: true
- },
- emphasis: {
- focus: 'series'
- },
- data: [820, 832, 901, 934, 1290, 1330, 1320]
- },
- {
- name: '临时用电作业',
- type: 'bar',
- stack: 'total',
- label: {
- show: true
- },
- emphasis: {
- focus: 'series'
- },
- data: [820, 832, 901, 934, 1290, 1330, 1320]
- },
- {
- name: '盲板抽堵作业',
- type: 'bar',
- stack: 'total',
- label: {
- show: true
- },
- emphasis: {
- focus: 'series'
- },
- data: [820, 832, 901, 934, 1290, 1330, 1320]
- }
- ]
- };
-
- option && myCharts.value.setOption(option);
- }
- // 折线图
- const renderMenu = async (value: string) => {
- Session.set('projectId',value)
- userInfos.value.projectId = value
- await initBackEndControlRoutes();
- };
-</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;
- }
- }
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
-</style>
diff --git a/src/views/specialWorkSystem/workPlan/workReservation/index.vue b/src/views/specialWorkSystem/workPlan/workReservation/index.vue
index 7c89a19..8e696b2 100644
--- a/src/views/specialWorkSystem/workPlan/workReservation/index.vue
+++ b/src/views/specialWorkSystem/workPlan/workReservation/index.vue
@@ -1,429 +1,616 @@
<template>
<div class="home-container">
- <el-scrollbar height="100%">
- <el-row class="homeCard">
- <el-col :span="14">
- <div class="grid-content topInfo">
- <div>当前所属部门:<span>电工部</span></div>
- <el-date-picker
- v-model="searchTime"
- type="datetime"
- placeholder="预约时间"
- size="large"
- style="width: 100%;white-space: nowrap;margin-right: 20px"
- />
- <el-select v-model="typeValue" placeholder="请选择预约类型" style="width: 100%">
- <el-option label="类型1" value="类型1"/>
- <el-option label="类型2" value="类型2"/>
- <el-option label="类型3" value="类型3"/>
- </el-select>
- <el-button type="primary">查询</el-button>
- <el-button plain>重置</el-button>
+ <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-cascader v-model="searchDep" :options="departmentList" :props="casProps" :show-all-levels="false"/>
+ </div>
+ </el-col>
+ <el-col :span="6" style="display:flex;align-items: center;">
+ <span style="white-space: nowrap;margin-left: 20px">预约日期:</span>
+ <div class="grid-content topInfo">
+ <el-date-picker
+ v-model="searchDate"
+ type="date"
+ format="YYYY-MM-DD" value-format="YYYY-MM-DD"
+ />
+ </div>
+ </el-col>
+ <el-button style="margin-left: 20px" 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" @click="reLoadData"/>
+ </el-row>
+ <el-table
+ :data="tableData"
+ style="width: 100%"
+ height="calc(100% - 100px)"
+ :header-cell-style="{background: '#fafafa'}"
+ >
+<!-- <el-table-column type="selection" width="55" />-->
+ <el-table-column type="index" label="序号" width="80" />
+ <el-table-column prop="applyDepName" align="center" label="申请部门"/>
+ <el-table-column prop="appointmentTime" align="center" label="预约时间"/>
+ <el-table-column prop="hotWork" align="center" label="动火作业"/>
+ <el-table-column prop="confinedSpaceOper" align="center" label="受限空间作业"/>
+ <el-table-column prop="liftingOper" align="center" label="吊装作业"/>
+ <el-table-column prop="groundBreakingOper" align="center" label="动土作业"/>
+ <el-table-column prop="openCircuitOper" align="center" label="断路作业"/>
+ <el-table-column prop="workAtHeight" align="center" label="高处作业" />
+ <el-table-column prop="temporaryPowerOper" align="center" label="临时用电作业"/>
+ <el-table-column prop="blindPlatePluggingOper" align="center" 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>
+ <el-button link type="primary" size="small" :icon="Edit" @click="editRecordBtn(scope.$index, scope.row)">修改</el-button>
+ <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(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="totalSize"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ />
+ </div>
</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" @click="dialogAddRecord=true">新增</el-button>
-<!-- <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 type="index" label="序号" width="120" />
- <el-table-column prop="time" label="预约时间" width="150" />
- <el-table-column prop="department" label="预约部门" width="180" />
- <el-table-column prop="dirtyWork" label="动土作业" width="100" />
- <el-table-column prop="fireWork" label="动火作业" width="100" />
- <el-table-column prop="hangWork" label="吊装作业" width="100" />
- <el-table-column prop="spaceWork" label="受限空间作业"/>
- <el-table-column prop="cut" label="断路作业"/>
- <el-table-column prop="high" label="高处作业" />
- <el-table-column prop="block" label="盲板抽堵作业"/>
- <el-table-column prop="tempUse" 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>
- <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button>
- <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</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-scrollbar>
<el-dialog v-model="dialogDetails" title="作业预约">
<el-form :model="details" label-width="120px">
+ <el-form-item label="申请部门">
+ <el-input
+ v-model="details.applyDepName"
+ readonly
+ />
+ </el-form-item>
<el-form-item label="预约时间">
<el-input
- v-model="details.time"
- readonly
- />
- </el-form-item>
- <el-form-item label="预约部门">
- <el-input
- v-model="details.department"
- readonly
- />
- </el-form-item>
- <el-form-item label="动土作业">
- <el-input
- v-model="details.dirtyWork"
+ v-model="details.appointmentTime"
readonly
/>
</el-form-item>
<el-form-item label="动火作业">
<el-input
- v-model="details.fireWork"
- readonly
- />
- </el-form-item>
- <el-form-item label="吊装作业">
- <el-input
- v-model="details.hangWork"
+ v-model="details.hotWork"
readonly
/>
</el-form-item>
<el-form-item label="受限空间作业">
<el-input
- v-model="details.spaceWork"
+ v-model="details.confinedSpaceOper"
+ readonly
+ />
+ </el-form-item>
+ <el-form-item label="吊装作业">
+ <el-input
+ v-model="details.liftingOper"
+ readonly
+ />
+ </el-form-item>
+ <el-form-item label="动土作业">
+ <el-input
+ v-model="details.groundBreakingOper"
readonly
/>
</el-form-item>
<el-form-item label="断路作业">
<el-input
- v-model="details.cut"
+ v-model="details.openCircuitOper"
readonly
/>
</el-form-item>
<el-form-item label="高处作业">
<el-input
- v-model="details.high"
- readonly
- />
- </el-form-item>
- <el-form-item label="盲板抽堵作业">
- <el-input
- v-model="details.block"
+ v-model="details.workAtHeight"
readonly
/>
</el-form-item>
<el-form-item label="临时用电作业">
<el-input
- v-model="details.tempUse"
+ v-model="details.temporaryPowerOper"
readonly
/>
</el-form-item>
- <el-form-item>
- <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button>
+ <el-form-item label="盲板抽堵作业">
+ <el-input
+ v-model="details.blindPlatePluggingOper"
+ readonly
+ />
</el-form-item>
</el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button type="primary" @click="dialogDetails = false">确认</el-button>
+ </span>
+ </template>
</el-dialog>
<el-dialog v-model="dialogAddRecord" title="作业预约编辑" @close="closeAdd">
<el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules">
- <el-form-item label="预约时间" prop="time">
+ <el-form-item label="申请部门" prop="applyDepId">
+ <el-cascader placeholder="若选择部门非本人所在部门,则记录不会出现在该页面" :disabled = isDisabled v-model="addRecord.applyDepId" :options="departmentList" :props="casProps" :show-all-levels="false" @change="handleChange" />
+ </el-form-item>
+ <el-form-item label="预约时间" prop="appointmentTime">
<el-date-picker
- v-model="addRecord.time"
- type="datetime"
- format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
+ v-model="addRecord.appointmentTime"
+ type="date"
+ format="YYYY-MM-DD" value-format="YYYY-MM-DD"
+ :disabled = isDisabled
/>
</el-form-item>
- <el-form-item label="预约部门" prop="department">
- <el-select v-model="addRecord.department" placeholder="请选择">
- <el-option label="部门一" value="部门一" />
- <el-option label="部门二" value="部门二" />
- </el-select>
- </el-form-item>
- <el-form-item label="动土作业">
+ <el-form-item label="动火作业" prop="hotWork">
<el-input
- v-model="addRecord.dirtyWork"
+ v-model="addRecord.hotWork"
/>
</el-form-item>
- <el-form-item label="动火作业">
+ <el-form-item label="受限空间作业" prop="confinedSpaceOper">
<el-input
- v-model="addRecord.fireWork"
+ v-model="addRecord.confinedSpaceOper"
/>
</el-form-item>
- <el-form-item label="吊装作业">
+ <el-form-item label="吊装作业" prop="liftingOper">
<el-input
- v-model="addRecord.hangWork"
+ v-model="addRecord.liftingOper"
/>
</el-form-item>
- <el-form-item label="受限空间作业">
+ <el-form-item label="动土作业" prop="groundBreakingOper">
<el-input
- v-model="addRecord.spaceWork"
+ v-model="addRecord.groundBreakingOper"
/>
</el-form-item>
- <el-form-item label="断路作业">
+ <el-form-item label="断路作业" prop="openCircuitOper">
<el-input
- v-model="addRecord.cut"
+ v-model="addRecord.openCircuitOper"
/>
</el-form-item>
- <el-form-item label="高处作业">
+ <el-form-item label="高处作业" prop="workAtHeight">
<el-input
- v-model="addRecord.high"
+ v-model="addRecord.workAtHeight"
/>
</el-form-item>
- <el-form-item label="盲板抽堵作业">
+ <el-form-item label="临时用电作业" prop="temporaryPowerOper">
<el-input
- v-model="addRecord.block"
+ v-model="addRecord.temporaryPowerOper"
/>
</el-form-item>
- <el-form-item label="临时用电作业">
+ <el-form-item label="盲板抽堵作业" prop="blindPlatePluggingOper">
<el-input
- v-model="addRecord.tempUse"
+ v-model="addRecord.blindPlatePluggingOper"
/>
- </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>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button>
+ <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button>
+ </span>
+ </template>
</el-dialog>
<el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear">
<span>您确定要删除该条记录吗?</span>
<template #footer>
- <span class="dialog-footer">
- <el-button @click="deleteDialog = false" size="default">取消</el-button>
- <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button>
- </span>
+ <span class="dialog-footer">
+ <el-button @click="deleteDialog = false" size="default">取消</el-button>
+ <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button>
+ </span>
</template>
</el-dialog>
</div>
</template>
-<script lang="ts" setup>
- import { toRefs, reactive, ref } from 'vue';
+<script lang="ts">
+ import {toRefs, reactive, ref, onMounted, defineAsyncComponent} from 'vue';
import { storeToRefs } from 'pinia';
import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
+ 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, FormInstance, FormRules } from 'element-plus'
- let global: any = {
- homeChartOne: null,
- homeChartTwo: null,
- homeCharThree: null,
- dispose: [null, '', undefined],
- };
+ import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';
+ import { ElTable, ElMessage, ElMessageBox } from 'element-plus'
+ import type { FormInstance, FormRules, UploadProps, UploadUserFile } from 'element-plus'
+ import { workReserveApi } from '/@/api/specialWorkSystem/workPlan/workReservation';
+ import { teamManageApi } from '/@/api/systemManage/basicDateManage/personShiftManage/teamManage';
+ // 定义接口来定义对象的类型
interface stateType {
- homeOne: Array <type>
- }
- interface type {
+ tableData: Array<any>;
+ departmentList: Array<any>;
+ 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;
+ searchDep: number | null;
+ searchDate: string;
+ isDisabled:boolean;
+ totalSize: number;
+ addRecord: {
+ };
+ details: {
+
+ };
+ workTypeList: Array<any>
}
- // export default defineComponent({
- // name: 'workCheckinRecord',
- // setup() {
- const userInfo = useUserInfo()
+
+ export default {
+ name: 'workReservation',
+ components: {},
+ setup() {
+ const userInfo = useUserInfo();
const { userInfos } = storeToRefs(userInfo);
- const typeValue = ref('')
- const currentPage = ref(1)
- const pageSize = ref(10)
- const chosenIndex = ref(-1)
- const handleSizeChange = (val: number) => {
- console.log(`${val} items per page`)
- }
- const handleCurrentChange = (val: number) => {
- console.log(`current page: ${val}`)
- }
- const tableData = reactive(
- [
- {
- time: '2022-06-29 12:32:52',
- department: '电工部',
- dirtyWork: '',
- fireWork: '',
- hangWork: '',
- spaceWork: '',
- cut: '',
- high: '',
- block: '',
- tempUse: ''
- },
- {
- time: '2022-06-29 12:32:52',
- department: '电工部',
- dirtyWork: '',
- fireWork: '',
- hangWork: '',
- spaceWork: '',
- cut: '',
- high: '',
- block: '',
- tempUse: ''
- },
- {
- time: '2022-06-29 12:32:52',
- department: '土木',
- dirtyWork: '',
- fireWork: '',
- hangWork: '',
- spaceWork: '',
- cut: '',
- high: '',
- block: '',
- tempUse: ''
- }
+ const state = reactive<stateType>({
+ pageIndex: 1,
+ pageSize: 10,
+ totalSize: 0,
+ chosenIndex: null,
+ searchDep: null,
+ searchDate: '',
+ isDisabled: false,
+ tableData: [],
+ departmentList: [],
+ casProps: {
+ expandTrigger: 'hover',
+ emitPath: false,
+ value: 'depId',
+ label: 'depName',
+ checkStrictly: true
+ },
+ 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>({
- time:[{required: true, message: '该内容不能为空',trigger:'blur'}],
- department:[{required: true, message: '该内容不能为空',trigger:'blur'}]
- })
- const dialogDetails = ref(false)
- const dialogAddRecord = ref(false)
- const deleteDialog = ref(false)
- const addRecord = ref({})
- const details = ref({})
- const viewRecord = (row) =>{
- details.value = JSON.parse(JSON.stringify(row))
- dialogDetails.value = true
- }
- const deleteRecord = (index) =>{
- chosenIndex.value = index
- deleteDialog.value = true
- }
- const conFirmDelete = ()=> {
- tableData.splice(chosenIndex.value,1)
- deleteDialog.value = false
- }
- const confirmAddRecord = async (formEl: FormInstance | undefined) =>{
- if (!formEl) return
- await formEl.validate((valid, fields) => {
- if (valid) {
- if(chosenIndex.value == -1){
- tableData.unshift(addRecord.value)
- }else{
- tableData[chosenIndex.value] = addRecord.value
- }
- dialogAddRecord.value =false
- } else {
- console.log('error submit!', fields)
- }
- })
+ });
- }
- const closeAdd =()=>{
- addRecord.value={}
- chosenIndex.value = -1
- }
- const indexClear = ()=>{
- chosenIndex.value = -1
- }
- const editRecord =(index, row)=>{
- dialogAddRecord.value = true
- chosenIndex.value = index
- addRecord.value = JSON.parse(JSON.stringify(row))
- }
+ const addRef = ref<FormInstance>();
+ const addRules = reactive<FormRules>({
+ applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ appointmentTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ hotWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ groundBreakingOper: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ blindPlatePluggingOper: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ temporaryPowerOper : [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ workAtHeight: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ openCircuitOper: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ liftingOper: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ confinedSpaceOper: [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
+ });
+
+ // 页面载入时执行方法
+ onMounted(() => {
+ getListByPage()
+ getAllDepartment()
+ });
+
+ // 获取部门列表
+ const getAllDepartment = async () => {
+ let res = await teamManageApi().getAllDepartment();
+ if (res.data.code === '200') {
+ state.departmentList = JSON.parse(JSON.stringify(res.data.data))
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ // 分页获取气体检测列表
+ const getListByPage = async () => {
+ const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { applyDepId: state.searchDep, appointmentTime: state.searchDate } };
+ let res = await workReserveApi().getReserveListPage(data);
+ if (res.data.code === '200') {
+ state.tableData = JSON.parse(JSON.stringify(res.data.data))
+ state.totalSize = res.data.total;
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ // 关键词查询记录
+ const searchRecord = async () => {
+ if (state.searchDep == null && state.searchDate == '') {
+ ElMessage({
+ type: 'warning',
+ message: '请输入查询关键词'
+ });
+ } else {
+ getListByPage();
+ }
+ };
+
+ const clearSearch = async () => {
+ state.searchDep = null;
+ state.searchDate = '';
+ getListByPage();
+ };
+
+ // 添加记录方法
+ const addRecord = async (data: any) => {
+ let res = await workReserveApi().addRecord(data);
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ message: res.data.msg
+ });
+ getListByPage();
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ // 修改记录方法
+ const editRecord = async (data: any) => {
+ let res = await workReserveApi().editRecord(data);
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ message: res.data.msg
+ });
+ getListByPage();
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ // 点击修改
+ const editRecordBtn = (index, row) => {
+ state.dialogAddRecord = true;
+ state.chosenIndex = index;
+ state.addRecord = JSON.parse(JSON.stringify(row));
+ state.isDisabled = true
+ };
+
+ // 新增修改记录
+ const confirmAddRecord = async (formEl: FormInstance | undefined) => {
+ if (!formEl) return;
+ await formEl.validate(async (valid, fields) => {
+ if (valid) {
+ const data = {
+ applyDepId: state.addRecord.applyDepId,
+ appointmentTime: state.addRecord.appointmentTime,
+ hotWork: Number(state.addRecord.hotWork),
+ groundBreakingOper: Number(state.addRecord.groundBreakingOper),
+ blindPlatePluggingOper: Number(state.addRecord.blindPlatePluggingOper),
+ temporaryPowerOper: Number(state.addRecord.temporaryPowerOper),
+ workAtHeight: Number(state.addRecord.workAtHeight),
+ openCircuitOper: Number(state.addRecord.openCircuitOper),
+ liftingOper: Number(state.addRecord.liftingOper),
+ confinedSpaceOper: Number(state.addRecord.confinedSpaceOper),
+ };
+ if (state.chosenIndex == null) {
+ await addRecord(data);
+ } else {
+ data.id = state.addRecord.id
+ await editRecord(data);
+ }
+ state.dialogAddRecord = false;
+ getListByPage();
+ } 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 deleteRecord = async (data: any) => {
+ let res = await workReserveApi().deleteRecord(data);
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ message: res.data.msg
+ });
+ getListByPage();
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ const deleteRecordBtn = (row) => {
+ state.deleteId = row.id;
+ state.deleteDialog = true;
+ };
+
+ const conFirmDelete = () => {
+ deleteRecord({ id: state.deleteId });
+ state.deleteDialog = false;
+ };
+
+
+ const closeAdd = () => {
+ state.addRecord = {};
+ state.chosenIndex = null;
+ state.isDisabled = false
+ };
+
+ const indexClear = () => {
+ state.deleteId = null;
+ };
+
// 折线图
const renderMenu = async (value: string) => {
- Session.set('projectId',value)
- userInfos.value.projectId = value
+ Session.set('projectId', value);
+ userInfos.value.projectId = value;
await initBackEndControlRoutes();
};
+ return {
+ addRef,
+ addRules,
+ View,
+ Edit,
+ Delete,
+ Refresh,
+ Plus,
+ Search,
+ searchRecord,
+ clearSearch,
+ viewRecord,
+ editRecordBtn,
+ deleteRecordBtn,
+ conFirmDelete,
+ getListByPage,
+ reLoadData,
+ handleSizeChange,
+ handleCurrentChange,
+ confirmAddRecord,
+ closeAdd,
+ indexClear,
+ ...toRefs(state)
+ };
+ }
+ };
</script>
<style scoped lang="scss">
$homeNavLengh: 8;
+ .red{
+ color: red;
+ }
.home-container {
- height: 100%;
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
overflow: hidden;
- padding: 20px;
- .homeCard{
+ .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{
+ .el-row {
display: flex;
align-items: center;
margin-bottom: 20px;
&:last-child {
margin-bottom: 0;
}
- .grid-content{
+ .grid-content {
align-items: center;
min-height: 36px;
}
.topInfo {
+ width: 100%;
display: flex;
align-items: center;
font-size: 16px;
font-weight: bold;
- &>div{
+ & > 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;
}
}
}
.el-input{
width: 100% !important;
}
- .el-date-editor::v-deep{
+ ::v-deep(.el-date-editor){
width: 100%;
}
.el-select{
width: 100%;
}
+ :deep(.el-cascader){
+ width: 100% !important;
+ }
</style>
diff --git a/src/views/specialWorkSystem/workProcess/components/dialogPermitNo.vue b/src/views/specialWorkSystem/workProcess/components/dialogPermitNo.vue
new file mode 100644
index 0000000..9738408
--- /dev/null
+++ b/src/views/specialWorkSystem/workProcess/components/dialogPermitNo.vue
@@ -0,0 +1,225 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <el-row class="homeCard">
+ <el-col :span="8" style="display:flex;align-items: center">
+ <div class="grid-content topInfo">
+ <el-input v-model="searchNo" placeholder="请输入作业证编号"></el-input>
+ </div>
+ </el-col>
+ <el-col :span="8" style="display:flex;align-items: center">
+ <div class="grid-content topInfo">
+ <el-select v-model="workType" placeholder="请选择作业类型">
+ <el-option
+ v-for="item in workTypeList"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </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-table
+ :data="tableData"
+ ref="singleTableRef"
+ highlight-current-row
+ style="width: 100%"
+ @current-change="handleCurrentChange"
+ :header-cell-style="{background: '#fafafa'}"
+ >
+ <el-table-column type="index" label="序号" width="80"/>
+ <el-table-column property="workPermitNo" label="作业证编号"/>
+ <el-table-column property="workTypeDesc" label="作业类型"/>
+ </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="totalSize"-->
+<!-- @size-change="handleSizeChange"-->
+<!-- @current-change="handleCurrentChange"-->
+<!-- />-->
+<!-- </div>-->
+ </div>
+ </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,ElTable } from 'element-plus'
+ import type { FormInstance, FormRules } from 'element-plus'
+ import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
+ import {workProcessApi} from "/@/api/specialWorkSystem/workProcess";
+
+
+ interface stateType {
+ workPermitNo: string
+ searchNo: string
+ workType: number
+ }
+ export default defineComponent({
+ name: 'permitNo',
+ components: {},
+ props:[],
+ setup() {
+ const userInfo = useUserInfo()
+ const { userInfos } = storeToRefs(userInfo);
+ const currentRow = ref()
+ const singleTableRef = ref<InstanceType<typeof ElTable>>()
+ const state = reactive<stateType>({
+ workPermitNo: '',
+ searchNo: '',
+ workType: null,
+ tableData: [],
+ workTypeList: [
+ {
+ label: "动火作业",
+ value: 1
+ },
+ {
+ label: "受限空间作业",
+ value: 2
+ },
+ {
+ label: "吊装作业",
+ value: 3
+ },
+ {
+ label: "动土作业",
+ value: 4
+ },
+ {
+ label: "断路作业",
+ value: 5
+ },
+ {
+ label: "高处作业",
+ value: 6
+ },
+ {
+ label: "临时用电作业",
+ value: 7
+ },
+ {
+ label: "盲板抽堵作业",
+ value: 8
+ }
+ ]
+ });
+ const handleCurrentChange = (val: User | undefined) => {
+ currentRow.value = val
+ state.workPermitNo = currentRow.value.workPermitNo
+ }
+ // 获取作业编号列表
+ const getAllReport = async (data)=>{
+ const res = await workProcessApi().postReportList({workPermitNo: state.searchNo,workType: state.workType})
+ if (res.data.code === '200') {
+ state.tableData = JSON.parse(JSON.stringify(res.data.data))
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+ // 关键词查询记录
+ const searchRecord = async () => {
+ if (state.searchNo == ''&& state.workType == null) {
+ ElMessage({
+ type: 'warning',
+ message: '请输入查询关键词'
+ });
+ } else {
+ getAllReport();
+ }
+ };
+
+ const clearSearch = async () => {
+ state.searchNo = '';
+ state.workType = null;
+ getAllReport();
+ };
+ // 页面载入时执行方法
+ onMounted(() => {
+ getAllReport()
+ });
+
+ // 折线图
+ const renderMenu = async (value: string) => {
+ Session.set('projectId',value)
+ userInfos.value.projectId = value
+ await initBackEndControlRoutes();
+ };
+ return {
+ renderMenu,
+ currentRow,
+ singleTableRef,
+ searchRecord,
+ clearSearch,
+ handleCurrentChange,
+ Search,
+ ...toRefs(state),
+ };
+ },
+ });
+</script>
+
+<style scoped lang="scss">
+ .home-container {
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+ .homeCard{
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+ margin-bottom: 20px;
+ }
+ .applyBtn{
+ width: 100%;
+ background: #fff;
+ padding-top: 15px;
+ z-index: 5;
+ box-shadow: 0 -3px 8px rgba(150,150,150,.1);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ .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/specialWorkSystem/workProcess/gasCheck/index.vue b/src/views/specialWorkSystem/workProcess/gasCheck/index.vue
index f8a0c36..4c44f17 100644
--- a/src/views/specialWorkSystem/workProcess/gasCheck/index.vue
+++ b/src/views/specialWorkSystem/workProcess/gasCheck/index.vue
@@ -5,15 +5,15 @@
<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>
+ <el-input v-model="workPermitNo" placeholder="请输入作业证编号"></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-select v-model="workType" placeholder="请选择作业类型">
<el-option
- v-for="item in workType"
+ v-for="item in workTypeList"
:key="item.id"
:label="item.name"
:value="item.id"
@@ -30,30 +30,29 @@
<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-button type="primary" :icon="Refresh" size="default" @click="reLoadData"/>
</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="combustible" label="可燃气%">
- <template #default="scope">
- <span :class="scope.row.combustible > 0 ? 'red': ''">{{ scope.row.combustible }}</span>
- </template>
- </el-table-column>
+ <el-table-column type="index" label="序号" width="80"/>
+ <el-table-column property="workPermitNo" label="作业证编号"/>
+ <el-table-column property="workTypeDesc" label="作业类型"/>
+ <el-table-column property="combustible" label="可燃气%"/>
+<!-- <el-table-column property="combustible" label="可燃气%">-->
+<!-- <template #default="scope">-->
+<!-- <span :class="scope.row.combustible > 0 ? 'red': ''">{{ scope.row.combustible }}</span>-->
+<!-- </template>-->
+<!-- </el-table-column>-->
<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 property="carbonMonoxide" label="一氧化碳ppm"/>
+ <el-table-column property="hydrogenSulfide" label="硫化氢ppm"/>
+ <el-table-column property="info" label="描述" show-overflow-tooltip width="200"/>
+ <el-table-column property="operatorUname" label="分析人"/>
+ <el-table-column property="operationTime" label="分析时间" align="center" width="180"/>
<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>
@@ -68,7 +67,7 @@
small=false
background
layout="total, sizes, prev, pager, next, jumper"
- :total="100"
+ :total="totalSize"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
@@ -79,10 +78,10 @@
<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-input v-model="details.workPermitNo" readonly/>
</el-form-item>
<el-form-item label="作业类型">
- <el-input v-model="details.workType" readonly/>
+ <el-input v-model="details.workTypeDesc" readonly/>
</el-form-item>
<el-form-item label="可燃气%">
<el-input v-model="details.combustible" readonly/>
@@ -91,38 +90,40 @@
<el-input v-model="details.oxygen" readonly/>
</el-form-item>
<el-form-item label="一氧化碳ppm">
- <el-input v-model="details.co" readonly/>
+ <el-input v-model="details.carbonMonoxide" readonly/>
</el-form-item>
<el-form-item label="硫化氢ppm">
- <el-input v-model="details.hs" readonly/>
+ <el-input v-model="details.hydrogenSulfide" readonly/>
</el-form-item>
<el-form-item label="描述">
- <el-input v-model="details.desc" type="textarea" readonly/>
+ <el-input v-model="details.info" type="textarea" readonly/>
</el-form-item>
<el-form-item label="分析人">
- <el-input v-model="details.name" readonly/>
+ <el-input v-model="details.operatorUname" 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-input v-model="details.operationTime" readonly/>
</el-form-item>
</el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button type="primary" @click="dialogDetails = false">确认</el-button>
+ </span>
+ </template>
</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-form-item label="作业证编号" prop="workPermitNo">
+ <el-input v-model="addRecord.workPermitNo" placeholder="作业编号须为已审批作业的编号,可点击右方按钮查询">
<template #append>
- <el-button :icon="Search" />
+ <el-button :icon="Search" @click="dialogPermitNo = true"/>
</template>
</el-input>
</el-form-item>
- <el-form-item label="作业类型" prop="groupMembers">
- <el-select v-model="addRecord.groupMembers">
+ <el-form-item label="作业类型" prop="workType">
+ <el-select v-model="addRecord.workType">
<el-option
- v-for="item in workType"
+ v-for="item in workTypeList"
:key="item.id"
:label="item.name"
:value="item.id"
@@ -135,34 +136,45 @@
<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 label="一氧化碳ppm" prop="carbonMonoxide">
+ <el-input v-model="addRecord.carbonMonoxide"/>
</el-form-item>
- <el-form-item label="硫化氢ppm" prop="oxygen">
- <el-input v-model="addRecord.hs"/>
+ <el-form-item label="硫化氢ppm" prop="hydrogenSulfide">
+ <el-input v-model="addRecord.hydrogenSulfide"/>
</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 label="描述" prop="info">
+ <el-input v-model="addRecord.info" type="textarea"> </el-input>
</el-form-item>
</el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button>
+ <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ <el-dialog v-model="dialogPermitNo" title="选择相应的作业编号">
+ <permit-no ref="permitNoInfo"></permit-no>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button type="warning" @click="dialogPermitNo = false" size="default" plain>取消</el-button>
+ <el-button type="primary" @click="confirmPermitNo" size="default">确认</el-button>
+ </span>
+ </template>
</el-dialog>
</div>
</template>
<script lang="ts">
- import { toRefs, reactive, ref, onMounted } from 'vue';
+ import {toRefs, reactive, ref, onMounted, defineAsyncComponent} 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 type { FormInstance, FormRules } from 'element-plus'
- import { teamManageApi } from '/@/api/systemManage/basicDateManage/personShiftManage/teamManage';
+ import { ElTable, ElMessage, ElMessageBox } from 'element-plus'
+ import type { FormInstance, FormRules, UploadProps, UploadUserFile } from 'element-plus'
+ import { workProcessApi } from '/@/api/specialWorkSystem/workProcess';
// 定义接口来定义对象的类型
interface stateType {
@@ -175,14 +187,15 @@
deleteArr: Array<any>;
dialogDetails: boolean;
dialogAddRecord: boolean;
+ dialogPermitNo: boolean;
deleteDialog: boolean;
deleteSetDialog: boolean;
pageIndex: number;
pageSize: number;
chosenIndex: null | number;
deleteId: null | number;
- searchWord: string;
- searchType: number | null;
+ workPermitNo: string;
+ workType: number | null;
totalSize: number;
addRecord: {
@@ -190,58 +203,26 @@
details: {
};
- workType: Array<any>
+ workTypeList: Array<any>
}
export default {
name: 'gasCheck',
- components: {},
+ components: {
+ permitNo: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workProcess/components/dialogPermitNo.vue'))
+ },
setup() {
const userInfo = useUserInfo();
const { userInfos } = storeToRefs(userInfo);
-
+ const permitNoInfo = ref()
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'
- }
- ],
+ workPermitNo: '',
+ workType: null,
+ tableData: [],
departmentList: [],
department: '',
workerList: [],
@@ -254,6 +235,7 @@
multipleSelection: [],
dialogDetails: false,
dialogAddRecord: false,
+ dialogPermitNo: false,
deleteDialog: false,
deleteSetDialog: false,
addRecord: {
@@ -264,7 +246,7 @@
},
deleteId: null,
deleteArr: [],
- workType: [
+ workTypeList: [
{ id: 1, name: '动火作业' },
{ id: 2, name: '受限空间作业' },
{ id: 3, name: '吊装作业' },
@@ -278,36 +260,26 @@
const addRef = ref<FormInstance>();
const addRules = reactive<FormRules>({
- id: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ workPermitNo: [{ 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' }]
+ carbonMonoxide: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ hydrogenSulfide: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ info: [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
});
// 页面载入时执行方法
onMounted(() => {
- // getListByPage();
- // getAllDepartment();
+ getListByPage()
});
- // 分页获取班组管理列表
+ // 分页获取气体检测列表
const getListByPage = async () => {
- const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { groupName: state.searchWord, containGroupMemberEnable: true } };
- let res = await teamManageApi().getRecordPage(data);
+ const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { workType: state.workType, workPermitNo: state.workPermitNo } };
+ let res = await workProcessApi().getDetectionListPage(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.tableData = JSON.parse(JSON.stringify(res.data.data))
state.totalSize = res.data.total;
} else {
ElMessage({
@@ -317,36 +289,21 @@
}
};
- // 获取部门列表
- const getAllDepartment = async () => {
- let res = await teamManageApi().getAllDepartment();
- if (res.data.code === '200') {
- state.departmentList = res.data.data;
- } else {
+ const confirmPermitNo = ()=>{
+ if(permitNoInfo.value.workPermitNo == ''){
ElMessage({
type: 'warning',
- message: res.data.msg
+ message: '请选择相应的作业编码'
});
+ }else{
+ state.addRecord.workPermitNo = permitNoInfo.value.workPermitNo
+ state.dialogPermitNo = false
}
- };
-
- 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 == '') {
+ if (state.workPermitNo == ''&& state.workType == null) {
ElMessage({
type: 'warning',
message: '请输入查询关键词'
@@ -357,13 +314,14 @@
};
const clearSearch = async () => {
- state.searchWord = '';
+ state.workPermitNo = '';
+ state.workType = null;
getListByPage();
};
- // 添加班组管理方法
+ // 添加气体检测方法
const addRecord = async (data: any) => {
- let res = await teamManageApi().addRecord(data);
+ let res = await workProcessApi().postDetectionReport(data);
if (res.data.code === '200') {
ElMessage({
type: 'success',
@@ -384,18 +342,17 @@
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
+ workPermitNo: state.addRecord.workPermitNo,
+ info: state.addRecord.info,
+ combustible: Number(state.addRecord.combustible),
+ oxygen: Number(state.addRecord.oxygen),
+ carbonMonoxide: Number(state.addRecord.carbonMonoxide),
+ hydrogenSulfide: Number(state.addRecord.hydrogenSulfide),
+ source: 2,
};
- if (state.chosenIndex == null) {
- await addRecord(data);
- } else {
- data.groupId = JSON.stringify(state.addRecord.groupId);
- await editRecord(data);
- }
+ await addRecord(data);
state.dialogAddRecord = false;
+ getListByPage();
} else {
console.log('error submit!', fields);
}
@@ -451,7 +408,8 @@
Refresh,
Plus,
Search,
- handleChange,
+ permitNoInfo,
+ confirmPermitNo,
searchRecord,
clearSearch,
viewRecord,
diff --git a/src/views/specialWorkSystem/workProcess/workCheck/index.vue b/src/views/specialWorkSystem/workProcess/workCheck/index.vue
index 282ed9d..79adf36 100644
--- a/src/views/specialWorkSystem/workProcess/workCheck/index.vue
+++ b/src/views/specialWorkSystem/workProcess/workCheck/index.vue
@@ -5,13 +5,13 @@
<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>
+ <el-input v-model="workPermitNo" placeholder="请输入作业证编号"></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-select v-model="workType" placeholder="请选择作业类型">
<el-option
v-for="item in workTypeList"
:key="item.id"
@@ -30,27 +30,26 @@
<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-button type="primary" :icon="Refresh" size="default" @click="reLoadData"/>
</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 type="index" label="序号" width="80"/>
+ <el-table-column property="workPermitNo" label="作业证编号"/>
+ <el-table-column property="workTypeDesc" label="作业类型"/>
+ <el-table-column property="checkContent" label="检查内容"/>
+ <el-table-column property="checkResultDesc" label="检查结果">
<template #default="scope">
- <span :class="scope.row.result == '异常' ? 'red': ''">{{ scope.row.result }}</span>
+ <span :class="scope.row.checkResultDesc == '异常' ? 'red': ''">{{ scope.row.checkResultDesc}}</span>
</template>
</el-table-column>
- <el-table-column property="desc" label="描述" width="200"/>
- <el-table-column property="name" label="分析人"/>
- <el-table-column property="updateTime" label="分析时间"/>
+ <el-table-column property="info" label="描述" show-overflow-tooltip width="200"/>
+ <el-table-column property="operatorUname" label="分析人"/>
+ <el-table-column property="operationTime" label="分析时间" width="180"/>
<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>
@@ -65,7 +64,7 @@
small=false
background
layout="total, sizes, prev, pager, next, jumper"
- :total="100"
+ :total="totalSize"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
@@ -76,37 +75,42 @@
<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-input v-model="details.workPermitNo" readonly/>
</el-form-item>
<el-form-item label="作业类型">
- <el-input v-model="details.workType" readonly/>
+ <el-input v-model="details.workTypeDesc" readonly/>
</el-form-item>
<el-form-item label="检查内容">
- <el-input v-model="details.checkInfo" readonly/>
+ <el-input v-model="details.checkContent" readonly/>
</el-form-item>
<el-form-item label="检查结果">
- <el-input v-model="details.result" readonly/>
+ <el-input :class="details.checkResultDesc == '异常' ? 'red': ''" v-model="details.checkResultDesc" readonly/>
+ </el-form-item>
+ <el-form-item label="现场图片" v-if="details.imagePaths && details.imagePaths.length>0">
+ <el-image v-for="item in details.imagePaths" :preview-src-list="details.imagePaths" 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.desc" type="textarea" readonly/>
+ <el-input v-model="details.info" type="textarea" readonly/>
</el-form-item>
<el-form-item label="分析人">
- <el-input v-model="details.name" readonly/>
+ <el-input v-model="details.operatorUname" 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-input v-model="details.operationTime" readonly/>
</el-form-item>
</el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button type="primary" @click="dialogDetails = false">确认</el-button>
+ </span>
+ </template>
</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-form-item label="作业证编号" prop="workPermitNo">
+ <el-input v-model="addRecord.workPermitNo" placeholder="作业编号须为已审批作业的编号,可点击右方按钮查询">
<template #append>
- <el-button :icon="Search" />
+ <el-button :icon="Search" @click="dialogPermitNo = true"/>
</template>
</el-input>
</el-form-item>
@@ -120,16 +124,16 @@
/>
</el-select>
</el-form-item>
- <el-form-item label="检查内容" prop="checkInfo">
- <el-input v-model="addRecord.checkInfo"> </el-input>
+ <el-form-item label="检查内容" prop="checkContent">
+ <el-input v-model="addRecord.checkContent"> </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-form-item label="检查结果" prop="checkResult">
+ <el-select v-model="addRecord.checkResult">
+ <el-option label="正常" value="1"/>
+ <el-option label="异常" value="2"/>
</el-select>
</el-form-item>
- <el-form-item label="现场照片" prop="photos">
+ <el-form-item label="现场照片" prop="imagePaths">
<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>
@@ -137,23 +141,34 @@
</template>
</el-upload>
</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 label="描述" prop="info">
+ <el-input v-model="addRecord.info" type="textarea"> </el-input>
</el-form-item>
</el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button>
+ <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button>
+ </span>
+ </template>
</el-dialog>
<el-dialog v-model="dialogVisible">
<img w-full :src="dialogImageUrl" alt="Preview Image" />
+ </el-dialog>
+ <el-dialog v-model="dialogPermitNo" title="选择相应的作业编号">
+ <permit-no ref="permitNoInfo"></permit-no>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button type="warning" @click="dialogPermitNo = false" size="default" plain>取消</el-button>
+ <el-button type="primary" @click="confirmPermitNo" size="default">确认</el-button>
+ </span>
+ </template>
</el-dialog>
</div>
</template>
<script lang="ts">
- import { toRefs, reactive, ref, onMounted } from 'vue';
+ import {toRefs, reactive, ref, onMounted, defineAsyncComponent} from 'vue';
import { storeToRefs } from 'pinia';
import { initBackEndControlRoutes } from '/@/router/backEnd';
import { useUserInfo } from '/@/stores/userInfo';
@@ -162,8 +177,9 @@
import { ElTable, ElMessage, ElMessageBox } from 'element-plus'
import type { FormInstance, FormRules, UploadProps, UploadUserFile } from 'element-plus'
import { teamManageApi } from '/@/api/systemManage/basicDateManage/personShiftManage/teamManage';
- import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
- import axios from "axios";
+ import { workProcessApi } from '/@/api/specialWorkSystem/workProcess';
+ import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
+ import axios from 'axios';
// 定义接口来定义对象的类型
interface stateType {
@@ -178,14 +194,15 @@
deleteArr: Array<any>;
dialogDetails: boolean;
dialogAddRecord: boolean;
+ dialogPermitNo: boolean;
deleteDialog: boolean;
deleteSetDialog: boolean;
pageIndex: number;
pageSize: number;
chosenIndex: null | number;
deleteId: null | number;
- searchWord: string;
- searchType: number | null
+ workPermitNo: string;
+ workType: number | null;
totalSize: number;
addRecord: {};
details: {};
@@ -196,64 +213,42 @@
}
export default {
name: 'workCheck',
- components: {},
+ components: {
+ permitNo: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workProcess/components/dialogPermitNo.vue'))
+ },
setup() {
const userInfo = useUserInfo();
const { userInfos } = storeToRefs(userInfo);
-
+ const permitNoInfo = ref()
const state = reactive<stateType>({
pageIndex: 1,
pageSize: 10,
totalSize: 0,
chosenIndex: null,
- searchWord: '',
- searchType: null,
+ workPermitNo: '',
+ workType: null,
isOverSize: false,
fileList: [],
imgLimit: 3,
uploadUrl: '',
dialogVisible: false,
dialogImageUrl: 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'
- }
- ],
+ tableData: [],
multipleSelection: [],
dialogDetails: false,
dialogAddRecord: false,
+ dialogPermitNo: false,
deleteDialog: false,
deleteSetDialog: false,
addRecord: {
-
+ workPermitNo: '',
+ checkContent: '',
+ checkResult: '',
+ info: '',
+ source: 2,
+ imagePaths: []
},
- details: {
-
- },
+ details: {},
deleteId: null,
deleteArr: [],
workTypeList: [
@@ -270,34 +265,25 @@
const addRef = ref<FormInstance>();
const addRules = reactive<FormRules>({
- id: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ workPermitNo: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- checkInfo: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- result: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- photos: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- desc: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- name: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- updateTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
+ checkContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ checkResult: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ imagePaths: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ info: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
});
// 页面载入时执行方法
onMounted(() => {
- // getListByPage();
+ getListByPage();
});
- // 分页获取班组管理列表
+ // 分页获取作业检查列表
const getListByPage = async () => {
- const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { groupName: state.searchWord, containGroupMemberEnable: true } };
- let res = await teamManageApi().getRecordPage(data);
+ const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { workType: state.workType, workPermitNo: state.workPermitNo } };
+ let res = await workProcessApi().getCheckListPage(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.tableData = res.data.data
state.totalSize = res.data.total;
} else {
ElMessage({
@@ -314,7 +300,17 @@
message: '超出文件上传数量'
});
}
-
+ const confirmPermitNo = ()=>{
+ if(permitNoInfo.value.workPermitNo == ''){
+ ElMessage({
+ type: 'warning',
+ message: '请选择相应的作业编码'
+ });
+ }else{
+ state.addRecord.workPermitNo = permitNoInfo.value.workPermitNo
+ state.dialogPermitNo = false
+ }
+ }
const handlePreview: UploadProps['onPreview'] = (uploadFile) => {
console.log(uploadFile);
};
@@ -335,12 +331,15 @@
return false
}else{
const res = await workApplyApi().getUploadUrl(rawFile.name);
- state.addRecord.photos.push(res.data.data.fileName)
+ state.addRecord.imagePaths.push(res.data.data.fileName)
state.uploadUrl = res.data.data.uploadUrl;
+ console.log(state.addRecord.imagePaths,state.uploadUrl,6666666666666)
}
};
const upload = async (params: any) => {
+ // const formData = new FormData();
+ // formData.append('file', state.fileList[0].raw);
let reader = new FileReader();
reader.readAsArrayBuffer(params.file);
reader.onload = async () => {
@@ -367,7 +366,7 @@
})
.then(() => {
// console.log(state.workDetail.photos,'path')
- const list = JSON.parse(JSON.stringify(state.addRecord.photos))
+ const list = JSON.parse(JSON.stringify(state.addRecord.imagePaths))
fileList.map((item,index)=>{
if(item.uid === file.uid){
fileList.splice(index,1)
@@ -381,7 +380,7 @@
reject(false);
});
}else{
- const list = JSON.parse(JSON.stringify(state.addRecord.photos))
+ const list = JSON.parse(JSON.stringify(state.addRecord.imagePaths))
fileList.map((item,index)=>{
if(item.uid === file.uid){
fileList.splice(index,1)
@@ -414,7 +413,7 @@
// 关键词查询记录
const searchRecord = async () => {
- if (state.searchWord == '') {
+ if (state.workPermitNo == ''&& state.workType == null) {
ElMessage({
type: 'warning',
message: '请输入查询关键词'
@@ -425,13 +424,15 @@
};
const clearSearch = async () => {
- state.searchWord = '';
+ state.workPermitNo = '';
+ state.workType = null;
getListByPage();
};
- // 添加班组管理方法
+
+ // 添加气体检测方法
const addRecord = async (data: any) => {
- let res = await teamManageApi().addRecord(data);
+ let res = await workProcessApi().postCheckReport(data);
if (res.data.code === '200') {
ElMessage({
type: 'success',
@@ -446,24 +447,15 @@
}
};
+
// 新增修改记录
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);
- }
+ await addRecord(state.addRecord);
state.dialogAddRecord = false;
+ getListByPage();
} else {
console.log('error submit!', fields);
}
@@ -519,7 +511,9 @@
Refresh,
Plus,
Search,
+ permitNoInfo,
showTip,
+ confirmPermitNo,
handlePreview,
handlePictureCardPreview,
getUploadUrl,
@@ -546,6 +540,10 @@
$homeNavLengh: 8;
.red{
color: red;
+
+ ::v-deep(input){
+ color: red;
+ }
}
.home-container {
height: calc(100vh - 144px);
diff --git a/src/views/specialWorkSystem/workTicket/myApproval/components/brokenLog.vue b/src/views/specialWorkSystem/workTicket/myApproval/components/brokenLog.vue
index 71e9cfc..dcb6adc 100644
--- a/src/views/specialWorkSystem/workTicket/myApproval/components/brokenLog.vue
+++ b/src/views/specialWorkSystem/workTicket/myApproval/components/brokenLog.vue
@@ -38,7 +38,7 @@
<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-image v-for="item in details.workDetail.bcPath" :preview-src-list="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 />
diff --git a/src/views/specialWorkSystem/workTicket/myApproval/components/groundLog.vue b/src/views/specialWorkSystem/workTicket/myApproval/components/groundLog.vue
index 0110338..244330e 100644
--- a/src/views/specialWorkSystem/workTicket/myApproval/components/groundLog.vue
+++ b/src/views/specialWorkSystem/workTicket/myApproval/components/groundLog.vue
@@ -38,7 +38,7 @@
<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-image v-for="item in details.workDetail.gbPath" :preview-src-list="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 />
diff --git a/src/views/specialWorkSystem/workTicket/myApproval/components/plateLog.vue b/src/views/specialWorkSystem/workTicket/myApproval/components/plateLog.vue
index 52604fd..f307fc0 100644
--- a/src/views/specialWorkSystem/workTicket/myApproval/components/plateLog.vue
+++ b/src/views/specialWorkSystem/workTicket/myApproval/components/plateLog.vue
@@ -56,7 +56,7 @@
<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-image v-for="item in details.workDetail.bpLocationMapPath" :preview-src-list="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 />
diff --git a/src/views/specialWorkSystem/workTicket/myJobApply/components/brokenLog.vue b/src/views/specialWorkSystem/workTicket/myJobApply/components/brokenLog.vue
index 986ab4b..b87725d 100644
--- a/src/views/specialWorkSystem/workTicket/myJobApply/components/brokenLog.vue
+++ b/src/views/specialWorkSystem/workTicket/myJobApply/components/brokenLog.vue
@@ -38,7 +38,7 @@
<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-image v-for="item in details.workDetail.bcPath" :preview-src-list="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 />
diff --git a/src/views/specialWorkSystem/workTicket/myJobApply/components/groundLog.vue b/src/views/specialWorkSystem/workTicket/myJobApply/components/groundLog.vue
index d865b1e..e05a39b 100644
--- a/src/views/specialWorkSystem/workTicket/myJobApply/components/groundLog.vue
+++ b/src/views/specialWorkSystem/workTicket/myJobApply/components/groundLog.vue
@@ -38,7 +38,7 @@
<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-image v-for="item in details.workDetail.gbPath" :preview-src-list="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 />
diff --git a/src/views/specialWorkSystem/workTicket/myJobApply/components/plateLog.vue b/src/views/specialWorkSystem/workTicket/myJobApply/components/plateLog.vue
index e45e298..142b69d 100644
--- a/src/views/specialWorkSystem/workTicket/myJobApply/components/plateLog.vue
+++ b/src/views/specialWorkSystem/workTicket/myJobApply/components/plateLog.vue
@@ -56,7 +56,7 @@
<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-image v-for="item in details.workDetail.bpLocationMapPath" :preview-src-list="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 />
diff --git a/src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue b/src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue
index e9e4e07..e834d40 100644
--- a/src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue
+++ b/src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue
@@ -323,7 +323,8 @@
if (state.chosenIndex == null) {
await addRecord(data);
} else {
- (data.id = JSON.stringify(state.addRecord.id)), await editRecord(data);
+ data.id = JSON.stringify(state.addRecord.id)
+ await editRecord(data);
}
state.dialogAddRecord = false;
} else {
--
Gitblit v1.9.2