From 9cbd3ec7007bac8b7ae5d49d2e521889fda28822 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期四, 19 十二月 2024 14:22:30 +0800
Subject: [PATCH] 修改数据上报
---
src/views/specialWorkSystem/specialIndex/index.vue | 837 +++++++++++++++++++++++++++++++++--------------------------
1 files changed, 469 insertions(+), 368 deletions(-)
diff --git a/src/views/specialWorkSystem/specialIndex/index.vue b/src/views/specialWorkSystem/specialIndex/index.vue
index c93cfb0..30ed8e9 100644
--- a/src/views/specialWorkSystem/specialIndex/index.vue
+++ b/src/views/specialWorkSystem/specialIndex/index.vue
@@ -18,7 +18,17 @@
<div class="chart-item">
<dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10>
<div class="chart-tit">
- <span class="tit">八大作业各分类分布图</span>
+ <span class="tit">特殊作业数量趋势</span>
+ <div class="filter-part filter-part2">
+ <el-cascader :teleported="false" v-model="chartSearch3.depId" @change="changeDep3()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/>
+ </div>
+ </div>
+ <div class="chart" :id="zyqs"></div>
+ </div>
+ <div class="chart-item">
+ <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10>
+ <div class="chart-tit">
+ <span class="tit">作业分类分布图</span>
<div class="filter-part filter-part2">
<el-cascader :teleported="false" v-model="chartSearch1.depId" @change="changeDep1()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/>
</div>
@@ -31,86 +41,12 @@
<el-radio :label='365' border>近一年</el-radio>
</el-radio-group>
</div>
- <div class="chart-item">
- <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10>
- <div class="chart-tit">
- <span class="tit">各事业部关联作业分析</span>
- <div class="filter-part">
- <el-cascader :teleported="false" v-model="chartSearch2.depId" @change="changeDep2()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/>
- <el-select v-model="chartSearch2.type" size="small" :teleported="false" @change="changeType2()">
- <el-option
- v-for="item in workType1"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- </div>
- </div>
- <div class="chart" :id="slfx"></div>
- </div>
</div>
- <div class="topChart">
- <div class="chart-item">
- <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10>
- <div class="chart-tit">
- <span class="tit">关联作业趋势图</span>
- <div class="filter-part filter-part2">
- <el-cascader :teleported="false" v-model="chartSearch3.depId" @change="changeDep3()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/>
- </div>
- </div>
- <div class="chart" :id="zyqs"></div>
- </div>
- <div class="chart-item">
- <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10>
- <div class="chart-tit">
- <span class="tit">异常警报关联人</span>
- <div class="filter-part">
- <el-switch
- v-model="chartSearch4.type"
- inline-prompt
- style="--el-switch-on-color: #13ce66; --el-switch-off-color: #13ce66"
- active-text="作业人"
- inactive-text="监护人"
- />
- <el-select :teleported="false" v-model="chartSearch4.period" size="small">
- <el-option label="近7天" value="week"/>
- <el-option label="近30天" value="month"/>
- <el-option label="近90天" value="season"/>
- <el-option label="近1年" value="year"/>
- </el-select>
- <el-select :teleported="false" v-model="chartSearch4.workType" size="small">
- <el-option
- v-for="item in workType1"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- </div>
- </div>
- <div class="chart">
- <el-table ref="multipleTableRef" :data="warningData" style="width: 100%" stripe border :header-cell-style="{ background: '#fafafa' }">
- <el-table-column property="name" label="姓名" align="center"/>
- <el-table-column property="dep" label="所属部门" align="center"/>
- <el-table-column property="warning" label="异常报警次数" align="center"/>
- <el-table-column property="role" label="角色" align="center"/>
- <el-table-column property="isCard" label="是否持证" align="center">
- <template #default="scope">
- <span>{{scope.row.isCard == 1?'是':'否'}}</span>
- </template>
- </el-table-column>
- </el-table>
- <el-button type="text" size="small" style="margin-top: 10px">所有记录>></el-button>
- </div>
- <!-- <div class="chart" :id="slfx"></div>-->
- </div>
- </div>
- <div>
+
<div class="homeCard">
<dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10>
<el-row>
- <el-col :span="5" style="display:flex;align-items: center">
+ <el-col :span="4" style="display:flex;align-items: center">
<span style="white-space: nowrap">作业类型:</span>
<div class="grid-content topInfo">
<el-select :teleported="false" v-model="searchParams.workType" size="small">
@@ -123,7 +59,7 @@
</el-select>
</div>
</el-col>
- <el-col :span="5" style="display:flex;align-items: center">
+ <el-col :span="4" style="display:flex;align-items: center">
<span style="white-space: nowrap">作业状态:</span>
<div class="grid-content topInfo">
<el-select :teleported="false" v-model="searchParams.workAllStatus" size="small">
@@ -136,14 +72,14 @@
</el-select>
</div>
</el-col>
- <el-col :span="5" style="display:flex;align-items: center">
- <span style="white-space: nowrap">作业部门:</span>
- <div class="grid-content topInfo">
- <el-cascader :teleported="false" size="small" v-model="searchParams.workDepId" :options="departmentList" :props="casProps" :show-all-levels="false"/>
- </div>
- </el-col>
+<!-- <el-col :span="4" style="display:flex;align-items: center">-->
+<!-- <span style="white-space: nowrap">作业部门:</span>-->
+<!-- <div class="grid-content topInfo">-->
+<!-- <el-cascader :teleported="false" size="small" v-model="searchParams.workDepId" :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>
+ <span style="white-space: nowrap">申请时间:</span>
<div class="grid-content topInfo">
<el-date-picker
v-model="searchDate"
@@ -156,6 +92,38 @@
end-placeholder="结束日期"
format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss"
/>
+ </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-date-picker
+ v-model="searchDate2"
+ size="small"
+ :teleported="false"
+ type="daterange"
+ unlink-panels
+ range-separator="至"
+ start-placeholder="开始日期"
+ end-placeholder="结束日期"
+ format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss"
+ />
+ </div>
+ </el-col>
+ <el-col :span="4" style="display:flex;align-items: center">
+ <span style="white-space: nowrap">作业票编号:</span>
+ <div class="grid-content topInfo">
+ <el-input
+ v-model.trim="searchParams.workPermitNo"
+ placeholder="请输入作业票编号"
+ size="small"
+ />
+ </div>
+ </el-col>
+ <el-col :span="4" style="display:flex;align-items: center">
+ <span style="white-space: nowrap">申请事业部:</span>
+ <div class="grid-content topInfo">
+ <el-cascader :teleported="false" v-model="searchParams.seDepId" @change="changeDep4()" :options="depList" :props="casProps" :show-all-levels="false" size="small"/>
</div>
</el-col>
<el-button type="primary" style="margin-left: 20px" @click="searchRecord" size="small">查询</el-button>
@@ -186,20 +154,35 @@
<!-- </el-row>-->
<el-table ref="multipleTableRef" stripe border :data="workData" style="width: 100%" :header-cell-style="{ background: '#fafafa' }">
<el-table-column property="workPermitNo" label="作业证编号" align="center"/>
- <el-table-column property="workDepName" label="作业单位" align="center"/>
+ <el-table-column label="作业单位" align="center">
+ <template #default="scope">
+ <span v-if="scope.row.workDepList && scope.row.workDepList.length>0">{{scope.row.workDepList.map(i=>i.workDepName).join(',')}}</span>
+ <span v-else>{{scope.row.workDepName }}</span>
+ </template>
+ </el-table-column>
<el-table-column property="applyUname" label="申请人" align="center"/>
<el-table-column property="applyDepName" label="申请单位" align="center"/>
<el-table-column property="applyTime" label="申请时间" align="center"/>
- <el-table-column property="startUname" label="开始人" align="center">
+ <el-table-column property="workLocation" label="作业地点" align="center">
<template #default="scope">
- <span>{{scope.row.startUname?scope.row.startUname:'--'}}</span>
+ <span>{{scope.row.workLocation?scope.row.workLocation:'--'}}</span>
</template>
</el-table-column>
- <el-table-column property="finishUname" label="结束人" align="center">
+ <el-table-column property="workContent" label="作业内容" align="center">
<template #default="scope">
- <span>{{scope.row.finishUname?scope.row.finishUname:'--'}}</span>
+ <span>{{scope.row.workContent?scope.row.workContent:'--'}}</span>
</template>
</el-table-column>
+<!-- <el-table-column property="startUname" label="开始人" align="center">-->
+<!-- <template #default="scope">-->
+<!-- <span>{{scope.row.startUname?scope.row.startUname:'--'}}</span>-->
+<!-- </template>-->
+<!-- </el-table-column>-->
+<!-- <el-table-column property="finishUname" label="结束人" align="center">-->
+<!-- <template #default="scope">-->
+<!-- <span>{{scope.row.finishUname?scope.row.finishUname:'--'}}</span>-->
+<!-- </template>-->
+<!-- </el-table-column>-->
<el-table-column property="workStartTime" label="作业开始时间" align="center">
<template #default="scope">
<span>{{scope.row.workStartTime?scope.row.workStartTime:'--'}}</span>
@@ -227,11 +210,11 @@
</el-table-column>
<el-table-column property="workTypeDesc" label="作业类型" align="center"/>
<el-table-column property="workLevelDesc" label="作业等级" align="center"/>
- <el-table-column property="abortReason" label="中止原因" align="center">
- <template #default="scope">
- <span>{{scope.row.abortReason?scope.row.abortReason:'--'}}</span>
- </template>
- </el-table-column>
+<!-- <el-table-column property="abortReason" label="中止原因" align="center">-->
+<!-- <template #default="scope">-->
+<!-- <span>{{scope.row.abortReason?scope.row.abortReason:'--'}}</span>-->
+<!-- </template>-->
+<!-- </el-table-column>-->
<el-table-column property="workAllStatusDesc" label="作业状态" align="center"/>
<el-table-column fixed="right" label="操作" align="center" width="250">
<template #default="scope">
@@ -239,6 +222,7 @@
v-if="scope.row.workAllStatus == -1|| scope.row.workAllStatus == 1 || scope.row.workAllStatus == 3 || scope.row.workAllStatus == 7"
type="primary" size="small" :icon="VideoPlay" @click="openVideo(scope.row)">查看监控视频</el-button>
<el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row.workApplyId)">查看记录</el-button>
+ <el-button v-if="(scope.row.workAllStatus == 3 || scope.row.workAllStatus == 4 || scope.row.workAllStatus == 5)&&!scope.row.renewalWorkApplyId" link type="primary" size="small" :icon="Edit" @click="continueRecord(scope.row)">一键续票</el-button>
<el-button link type="primary" size="small" :icon="View" @click="viewTicket(scope.row)">查看作业票</el-button>
<el-button link type="primary" size="small" :icon="Download" @click="downLoadTicket(scope.row)">导出作业票</el-button>
<!-- <el-button link type="primary" size="small" :icon="FolderChecked" @click="handleReview(scope.row)">验收</el-button>-->
@@ -250,16 +234,16 @@
</div>
</div>
</div>
- </div>
<el-dialog v-model="dialogDetails" title="作业申请详情" center>
- <fire v-if="dialogType == 1" :details = details></fire>
- <space v-else-if="dialogType == 2" :details = details></space>
- <hoist v-else-if="dialogType == 3" :details = details></hoist>
- <ground v-else-if="dialogType == 4" :details = details></ground>
- <broken v-else-if="dialogType == 5" :details = details></broken>
- <height v-else-if="dialogType == 6" :details = details></height>
- <power v-else-if="dialogType == 7" :details = details></power>
- <plate v-else :details = details></plate>
+<!-- <fire v-if="dialogType == 1" :details = details></fire>-->
+<!-- <space v-else-if="dialogType == 2" :details = details></space>-->
+<!-- <hoist v-else-if="dialogType == 3" :details = details></hoist>-->
+<!-- <ground v-else-if="dialogType == 4" :details = details></ground>-->
+<!-- <broken v-else-if="dialogType == 5" :details = details></broken>-->
+<!-- <height v-else-if="dialogType == 6" :details = details></height>-->
+<!-- <power v-else-if="dialogType == 7" :details = details></power>-->
+<!-- <plate v-else :details = details></plate>-->
+<!-- <detail-log :type=dialogType :statusList=statusList :details = details></detail-log>-->
<template #footer>
<span class="dialog-footer">
<el-button type="primary" @click="dialogDetails = false"
@@ -287,11 +271,20 @@
<!-- </el-dialog>-->
<video-detail ref="videoRef"></video-detail>
<Work-record ref="recordRef"></Work-record>
+ <fire-dialog ref="fireRef" :lists="lists" @refresh="getMydepList"></fire-dialog>
+ <plate-dialog ref="plateRef" :lists="lists" @refresh="getMydepList"></plate-dialog>
+ <space-dialog ref="spaceRef" :lists="lists" @refresh="getMydepList"></space-dialog>
+ <hoist-dialog ref="hoistRef" :lists="lists" @refresh="getMydepList"></hoist-dialog>
+ <ground-dialog ref="groundRef" :lists="lists" @refresh="getMydepList"></ground-dialog>
+ <broken-dialog ref="brokenRef" :lists="lists" @refresh="getMydepList"></broken-dialog>
+ <height-dialog ref="heightRef" :lists="lists" @refresh="getMydepList"></height-dialog>
+ <power-dialog ref="powerRef" :lists="lists" @refresh="getMydepList"></power-dialog>
+ <open-dialog ref="openRef" :lists="lists" @refresh="getMydepList"></open-dialog>
</div>
</template>
<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, onMounted, defineAsyncComponent} from 'vue';
+import {toRefs, reactive, defineComponent, ref, onMounted, defineAsyncComponent, nextTick} from 'vue';
import { storeToRefs } from 'pinia';
import { initBackEndControlRoutes } from '/@/router/backEnd';
import { useUserInfo } from '/@/stores/userInfo';
@@ -311,6 +304,8 @@
import WorkRecord from "/@/views/specialWorkSystem/specialIndex/components/workRecord.vue";
import { BorderBox10 as DvBorderBox10 } from '@kjgl77/datav-vue3'
import {productionDeviceApi} from "/@/api/doublePreventSystem/productionDevice";
+import {ElMessageBox} from "element-plus/es";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
// 定义接口来定义对象的类型
interface stateType {
@@ -334,11 +329,13 @@
searchDep2: number | null;
searchDep: number | null;
searchDate: Array<any>,
+ searchDate2: Array<any>,
totalSize: number;
details: {};
workType1: Array<type>;
dialogType: number | null;
departmentList: Array<any>;
+ depList: Array<any>;
departmentRecursionList: Array<DepartmentState>;
reviewForm: object;
reviewRules: object;
@@ -346,6 +343,9 @@
isFull:boolean;
themeColor:string;
endTime:string
+ pieData: Array<status>
+ squareData: Array<status>
+ lists: {}
}
interface type {
id: number | null;
@@ -369,24 +369,25 @@
components: {
VideoDetail,
WorkRecord,
- fire: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/fireLog.vue')),
- space: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/spaceLog.vue')),
- hoist: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/hoistLog.vue')),
- ground: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/groundLog.vue')),
- broken: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/brokenLog.vue')),
- height: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/heightLog.vue')),
- power: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/powerLog.vue')),
- plate: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/plateLog.vue'))
+ fireDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue')),
+ plateDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue')),
+ spaceDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue')),
+ hoistDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue')),
+ groundDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue')),
+ brokenDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue')),
+ heightDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue')),
+ powerDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue')),
+ openDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue'))
},
setup() {
- const userInfo = useUserInfo();
- const { userInfos } = storeToRefs(userInfo);
- const router = useRouter();
+ const userInfo = useUserInfo()
+ const { userInfos } = storeToRefs(userInfo)
+ const router = useRouter()
const reviewFormRef = ref<FormInstance>()
const zyfb = ref("eChartZyfb" + Date.now() + Math.random())
const slfx = ref("eChartSlfx" + Date.now() + Math.random())
const zyqs = ref("eChartZyqs" + Date.now() + Math.random())
- const videoRef = ref();
+ const videoRef = ref()
const recordRef = ref()
const state = reactive<stateType>({
pageIndex: 1,
@@ -399,10 +400,14 @@
workPermitNo: '',
startTime: '',
endTime: '',
- workAllStatus: null
+ workStartTime: '',
+ workEndTime: '',
+ workAllStatus: null,
+ seDepId: null
},
dialogReview: false,
departmentList: [],
+ depList: [],
departmentRecursionList: [],
searchStatus: null,
endTime: '',
@@ -413,20 +418,21 @@
},
chartSearch2: {
depId: 1,
- startTime: '',
+ // startTime: '',
type: null
},
chartSearch3: {
depId: 1
},
chartSearch4: {
- searchDep: null,
startTime: '',
- days: 30
+ days: 30,
+ workType: 1
},
searchDep2: null,
searchDep: null,
searchDate: [],
+ searchDate2: [],
workData: [],
isFull: false,
themeColor: '#333',
@@ -437,7 +443,6 @@
operators: []
},
casProps: {
- expandTrigger: 'hover',
emitPath: false,
value: 'depId',
label: 'depName',
@@ -454,7 +459,8 @@
{ id: 5, name: '断路作业' },
{ id: 6, name: '高处作业' },
{ id: 7, name: '临时用电作业' },
- { id: 8, name: '盲板抽堵作业' }
+ { id: 8, name: '盲板抽堵作业' },
+ { id: 9, name: '打开作业' }
],
workTypeList: [
{ id: 1, name: '动火作业' },
@@ -464,7 +470,8 @@
{ id: 5, name: '断路作业' },
{ id: 6, name: '高处作业' },
{ id: 7, name: '临时用电作业' },
- { id: 8, name: '盲板抽堵作业' }
+ { id: 8, name: '盲板抽堵作业' },
+ { id: 9, name: '打开作业' }
],
workStatusList: [
{
@@ -472,43 +479,60 @@
value: -1
},
{
- name: '开始',
+ name: '作业中(监护中)',
value: 1
},
{
- name: '结束',
- value: 2
- }
- ],
- warningData: [
- {
- name: '黄公子',
- dep: '有机事业部',
- warning: 69,
- role: '作业人',
- isCard: 1
+ name: '待验收',
+ value: 3
},
{
- name: '李飞飞',
- dep: '有机事业部',
- warning: 51,
- role: '监护人',
- isCard: 0
+ name: '验收不合格',
+ value: 4
},
{
- name: '黄公子',
- dep: '有机事业部',
- warning: 69,
- role: '作业人',
- isCard: 1
+ name: '已验收',
+ value: 5
+ },
+ {
+ name: '作业前气体分析不合格',
+ value: 6
+ },
+ {
+ name: '审批未通过',
+ value: 7
+ },
+ {
+ name: '作业中止',
+ value: 8
+ },
+ {
+ name: '取消',
+ value: 15
+ },
+ {
+ name: '废止',
+ value: 16
}
],
+ pieData: [],
+ squareData: [],
+ warningData: [],
reviewForm: {
advice: ''
},
reviewRules:{
advice: [{ required: true, message: '请填写验收意见', trigger: 'blur' }]
- }
+ },
+ lists: {
+ workerList: [],
+ departList: [],
+ departList2: [],
+ deviceList: [],
+ otherWorks: [],
+ spList: [],
+ riskList: []
+ },
});
// 页面载入时执行方法
onMounted(() => {
@@ -516,46 +540,60 @@
getMydepList()
getAllDepartment();
getTypePie()
- getWorkDep()
getDepMonth()
- initZyfb()
- initSlfx()
- initZyqs()
+ getWarningList()
+ spWorker()
+ getOpList()
+ getAll()
+ getAllDevice()
+ getAllRisks()
+ getOtherWork()
});
+ const fireRef = ref()
+ const plateRef = ref()
+ const spaceRef = ref()
+ const hoistRef = ref()
+ const groundRef = ref()
+ const brokenRef = ref()
+ const heightRef = ref()
+ const powerRef = ref()
+ const openRef = ref()
const initTime =()=>{
state.chartSearch1.startTime = getPeriod(30)
state.chartSearch2.startTime = getPeriod(30)
+ state.chartSearch4.startTime = getPeriod(30)
state.endTime = formatDate(new Date())
}
const getPeriod =(num)=> {
const currentDate = new Date();
const startTime = new Date();
- startTime.setDate(currentDate.getDate() - num);
+ startTime.setDate(currentDate.getDate() - num - 1);
return formatDate(startTime)
}
const formatDate =(date)=> {
const year = date.getFullYear().toString();
const month = ('0' + (date.getMonth() + 1)).slice(-2);
const day = ('0' + date.getDate()).slice(-2);
- return `${year}-${month}-${day} 00:00:00`;
+ return `${year}-${month}-${day} 23:59:59`;
}
const changeTime1=(value:number)=>{
state.chartSearch1.startTime = getPeriod(value)
- console.log(state.chartSearch1.startTime,state.endTime,'结束段')
getTypePie()
+ }
+ const changeTime4=(value:number)=>{
+ state.chartSearch4.startTime = getPeriod(value)
+ console.log(state.chartSearch4.startTime,state.endTime,'结束段')
+ getWarningList()
}
const changeDep1=()=>{
getTypePie()
}
- const changeDep2=()=>{
- getWorkDep()
- }
- const changeType2=()=>{
- getWorkDep()
- }
const changeDep3=()=>{
getDepMonth()
+ }
+ const changeDep4=()=>{
+ searchRecord()
}
const toFullscreen =()=>{
const element = document.getElementById('bigScreen')
@@ -570,20 +608,55 @@
}else{
state.themeColor = '#333'
}
- initZyfb()
- initSlfx()
- initZyqs()
+ initTime()
getMydepList()
+ getAllDepartment();
+ getTypePie()
+ getDepMonth()
}
+
+ const continueRecord = (row)=>{
+ if(row.workType == 1){
+ fireRef.value.openDialog(row,'continue')
+ }
+ if(row.workType == 2){
+ spaceRef.value.openDialog(row,'continue')
+ }
+ if(row.workType == 3){
+ hoistRef.value.openDialog(row,'continue')
+ }
+ if(row.workType == 4){
+ groundRef.value.openDialog(row,'continue')
+ }
+ if(row.workType == 5){
+ brokenRef.value.openDialog(row,'continue')
+ }
+ if(row.workType == 6){
+ heightRef.value.openDialog(row,'continue')
+ }
+ if(row.workType == 7){
+ powerRef.value.openDialog(row,'continue')
+ }
+ if(row.workType == 8){
+ plateRef.value.openDialog(row,'continue')
+ }
+ if(row.workType == 9){
+ openRef.value.openDialog(row,'continue')
+ }
+ }
+
const getTypePie = async ()=>{
const data = {
startTime: state.chartSearch1.startTime,
endTime:state.endTime,
- depId:state.chartSearch1.depId
+ depId:state.chartSearch1.depId,
+ type: null
}
let res = await specialIndexApi().analyseType(data);
if (res.data.code === '200') {
- console.log('饼图数据>>>', res.data.data)
+ // console.log('饼图数据>>>', res.data.data)
+ state.pieData = JSON.parse(JSON.stringify(res.data.data))
+ initZyfb()
} else {
ElMessage({
type: 'warning',
@@ -591,27 +664,14 @@
});
}
}
- const getWorkDep = async ()=>{
- const data = {
- startTime: state.chartSearch2.startTime,
- endTime: state.endTime,
- depId:state.chartSearch2.depId,
- type: state.chartSearch2.type
- }
- let res = await specialIndexApi().analyseAllWork(data);
- if (res.data.code === '200') {
- console.log('条形图数据>>>', res.data.data)
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- }
+
const getDepMonth = async ()=>{
let res = await specialIndexApi().analyseDepMonth(state.chartSearch3.depId);
if (res.data.code === '200') {
- console.log('折线图数据>>>', res.data.data)
+ state.squareData = JSON.parse(JSON.stringify(res.data.data))
+ let names = state.squareData.map(i=>i.name)
+ let vals = state.squareData.map(i=>i.value)
+ initZyqs(names,vals)
} else {
ElMessage({
type: 'warning',
@@ -621,6 +681,7 @@
}
const getMydepList = async()=>{
const dateRange = JSON.parse(JSON.stringify(state.searchDate))
+ const dateRange2 = JSON.parse(JSON.stringify(state.searchDate2))
if(dateRange[1]){
dateRange[1] = dateRange[1].replace('00:00:00','23:59:59')
state.searchParams.startTime = dateRange[0]
@@ -628,6 +689,14 @@
}else{
state.searchParams.startTime = ''
state.searchParams.endTime = ''
+ }
+ if(dateRange2[1]){
+ dateRange2[1] = dateRange2[1].replace('00:00:00','23:59:59')
+ state.searchParams.workStartTime = dateRange2[0]
+ state.searchParams.workEndTime = dateRange2[1]
+ }else{
+ state.searchParams.workStartTime = ''
+ state.searchParams.workEndTime = ''
}
let res = await specialIndexApi().getMydepList({pageIndex: state.pageIndex,pageSize: state.pageSize,searchParams: state.searchParams})
if (res.data.code === '200') {
@@ -640,7 +709,25 @@
});
}
}
+ const getWarningList = async()=>{
+ const data = {
+
+ startTime: state.chartSearch4.startTime,
+ endTime: state.endTime,
+ workType:state.chartSearch4.workType
+ }
+ let res = await specialIndexApi().getWorkWarning(data)
+ if (res.data.code === '200') {
+ state.warningData = JSON.parse(JSON.stringify(res.data.data))
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ }
type EChartsOption = echarts.EChartsOption
+
const initZyfb =()=>{
let dom = document.getElementById(zyfb.value);
let myChart = echarts.init(dom);
@@ -695,16 +782,12 @@
shadowColor: 'rgba(0, 0, 0, 0.5)'
},
},
- data: [
- { value: 1048, name: '动火作业' },
- { value: 735, name: '受限空间作业' },
- { value: 580, name: '吊装作业' },
- { value: 484, name: '动土作业' },
- { value: 735, name: '断路作业' },
- { value: 580, name: '高处作业' },
- { value: 484, name: '临时用电作业' },
- { value: 300, name: '盲板抽堵作业' }
- ]
+ data: state.pieData.map(i=>{
+ return {
+ name: i.workTypeDesc,
+ value: i.count
+ }
+ }).filter(i=>i.name !== '未知')
}
]
}
@@ -714,63 +797,15 @@
myChart.resize();
});
}
- const initSlfx =()=>{
- let dom = document.getElementById(slfx.value);
- let myChart = echarts.init(dom);
- let option: EChartsOption;
- option = {
- tooltip: {
- trigger: 'axis',
- axisPointer: {
- type: 'shadow'
- }
- },
- grid: {
- left: '3%',
- right: '4%',
- bottom: '3%',
- containLabel: true
- },
- xAxis: [
- {
- type: 'category',
- data: ['事业部1', '事业部2', '事业部3', '事业部4', '事业部5', '事业部6', '事业部7'],
- axisTick: {
- alignWithLabel: true
- },
- axisLabel: {
- color: state.themeColor
- }
- }
- ],
- yAxis: [
- {
- type: 'value'
- }
- ],
- series: [
- {
- name: 'Direct',
- type: 'bar',
- barWidth: '60%',
- data: [10, 52, 200, 334, 390, 330, 220]
- }
- ]
- }
- option && myChart.setOption(option);
- window.addEventListener("resize",function (){
- myChart.resize();
- });
- }
- const initZyqs =()=>{
+ const initZyqs =(names:Array<string>,vals:Array<any>)=>{
let dom = document.getElementById(zyqs.value);
let myChart = echarts.init(dom);
let option: EChartsOption;
option = {
xAxis: {
type: 'category',
- data: ['四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月', '一月', '二月', '三月'],
+ data: names,
axisLabel: {
color: state.themeColor
}
@@ -794,7 +829,7 @@
},
series: [
{
- data: [150, 230, 224, 218, 135, 147, 230, 224, 218, 135, 147, 260],
+ data: vals,
type: 'line',
label:{
show: true
@@ -810,6 +845,7 @@
}
// 刷新
const reLoadData = async () => {
+ state.pageIndex = 1
getMydepList()
};
@@ -825,7 +861,10 @@
let res = await teamManageApi().getAllDepartment();
if (res.data.code === '200') {
state.departmentList = JSON.parse(JSON.stringify(res.data.data))
- // recursion(state.departmentList);
+ state.depList = JSON.parse(JSON.stringify(res.data.data))[0].children[0].children.filter(i=>i.depId == 32 || i.depId == 48 || i.depId == 49 || i.depId == 50 || i.depId == 10 || i.depId == 41 || i.depId == 46 || i.depId == 47)
+ recursion(state.departmentList);
+ state.lists.departList = state.departmentList
+ state.lists.departList2 = state.depList
} else {
ElMessage({
type: 'warning',
@@ -834,33 +873,20 @@
}
};
- // 分页获取列表
- // const getListByPage = async () => {
- // const dateRange = JSON.parse(JSON.stringify(state.searchDate))
- // if(dateRange[1]){dateRange[1] = dateRange[1].replace('00:00:00','23:59:59')}
- // const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: { workType: state.searchWord, applyDepId: state.searchDep,applyStartTime: dateRange[0],applyEndTime: dateRange[1]} };
- // let res = await workApplyApi().getApplyList(data);
- // if (res.data.code === '200') {
- // state.workData = JSON.parse(JSON.stringify(res.data.data));
- // state.workData = state.workData.map((item) => {
- // if (item.operators == null || item.operators == []) {
- // item.operators = [];
- // } else {
- // item.operators = Array.from(item.operators, ({ operatorUname }) => operatorUname);
- // }
- // return item;
- // });
- // state.totalSize1 = res.data.total;
- // } else {
- // ElMessage({
- // type: 'warning',
- // message: res.data.msg
- // });
- // }
- // };
+ const recursion = (value: any) => {
+ for (let i of value) {
+ if (i.children.length !== 0) {
+ state.departmentRecursionList.push(i);
+ recursion(i.children);
+ } else {
+ state.departmentRecursionList.push(i);
+ }
+ }
+ };
// 关键词查询记录
const searchRecord = async () => {
+ state.pageIndex = 1
getMydepList()
};
// 重置搜索
@@ -871,9 +897,12 @@
workPermitNo: '',
startTime: '',
endTime: '',
- workAllStatus: null
+ workAllStatus: null,
+ seDepId: null
}
state.searchDate = []
+ state.searchDate2 = []
+ state.pageIndex = 1
getMydepList()
};
@@ -886,49 +915,7 @@
getMydepList()
};
- // 查看记录
- const viewDetail = (row: any) => {
- state.dialogType = row.workType
- state.details = JSON.parse(JSON.stringify(row));
- if(state.details.workDetail.otherSpecialWork == '' || !state.details.workDetail.otherSpecialWork){
- state.details.workDetail.otherSpecialWork=[]
- }
- else {
- const a = state.details.workDetail.otherSpecialWork
- state.details.workDetail.otherSpecialWork = a.split(',').map((item) => {
- return state.workTypeList.find((i: { id: number }) => i.id === Number(item))?.name;
- });
- }
- if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){
- state.details.workDetail.involvedDepIds=[]
- }
- else {
- const a = state.details.workDetail.involvedDepIds
- state.details.workDetail.involvedDepIds = a.split(',').map((item) => {
- return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName;
- });
- }
- if(state.details.workDetail.csDepId){
- state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName;
- }
- if(state.details.workDetail.operationDepId){
- state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName;
- }
- if(state.details.workDetail.gbPath){
- state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',')
- }
- if(state.details.workDetail.bcPath){
- state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',')
- }
- if(state.details.workDetail.bpLocationMapPath){
- state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',')
- }
- state.dialogDetails = true;
- };
- // const handleReview = (row: object)=>{
- // state.dialogReview = true
- // }
const openVideo = (row:object)=>{
videoRef.value.openDialog(row)
}
@@ -944,6 +931,7 @@
}
axios.post(import.meta.env.VITE_API_URL + `/specialwork9step/work/down/load/pdf`,{id: row.workApplyId},{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
if (res) {
+ console.log(res.data,888)
const link = document.createElement('a')
let blob = new Blob([res.data],{type: 'application/pdf'})
link.style.display = "none";
@@ -980,6 +968,107 @@
}
})
}
+
+ const spWorker = async ()=>{
+ for(let id of ['18','19']){
+ const res = await workApplyApi().getSpList({roleId: id})
+ if(id == '18'){
+ if (res.data.code === '200') {
+ state.lists.spList.jhList = JSON.parse(JSON.stringify(res.data.data))
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ }
+ if(id == '19'){
+ if (res.data.code === '200') {
+ state.lists.spList.sfList = JSON.parse(JSON.stringify(res.data.data))
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ }
+ }
+ }
+
+ const getOpList = async()=>{
+ const res = await workApplyApi().getOpList()
+ if(res.data.code == '200'){
+ if(res.data.data && res.data.data.length>0){
+ state.lists.spList.opList = JSON.parse(JSON.stringify(res.data.data)).map(i=>{
+ if(i.certList && i.certList.length>0){
+ i.certList = i.certList.map(item=>{
+ item['realName'] = i.realName + '(' + item.certTypeName +':'+ item.certExpiredAt + ')'
+ item['uid'] = item.certNo + ',' + item.certExpiredAt
+ return item
+ })
+ }
+ return i
+ })
+ }
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ // 获取用户列表
+ const getAll = async ()=>{
+ const res = await workApplyApi().getAllUsers()
+ if (res.data.code === '200') {
+ state.lists.workerList = JSON.parse(JSON.stringify(res.data.data))
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ // 获取设备列表
+ const getAllDevice = async ()=>{
+ const res = await workApplyApi().getAllDevices()
+ if (res.data.code === '200') {
+ state.lists.deviceList = JSON.parse(JSON.stringify(res.data.data))
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ }
+
+ // 获取设备列表
+ const getAllRisks = async ()=>{
+ const res = await workApplyApi().getAllRiskIdentity()
+ if (res.data.code === '200') {
+ // state.allDevices = JSON.parse(JSON.stringify(res.data.data))
+ state.lists.riskList = JSON.parse(JSON.stringify(res.data.data))
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ }
+
+ const getOtherWork = async () => {
+ let res = await workApplyApi().getOtherWork({pageSize: 999, pageIndex: 1, searchParams: {workPermitNo: '', workType: null}})
+ if (res.data.code === '200') {
+ state.lists.otherWorks = JSON.parse(JSON.stringify(res.data.data))
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
// const submitReview = async (formEl: FormInstance | undefined) => {
// if (!formEl) return
@@ -1029,11 +1118,22 @@
zyfb,
slfx,
zyqs,
+ fireRef,
+ plateRef,
+ spaceRef,
+ hoistRef,
+ groundRef,
+ brokenRef,
+ heightRef,
+ powerRef,
+ openRef,
+ getMydepList,
+ continueRecord,
changeTime1,
+ changeTime4,
changeDep1,
- changeDep2,
- changeType2,
changeDep3,
+ changeDep4,
toFullscreen,
// handleReview,
openVideo,
@@ -1042,7 +1142,7 @@
toApply,
searchRecord,
clearSearch,
- viewDetail,
+ // viewDetail,
viewRecord,
viewTicket,
downLoadTicket,
@@ -1058,7 +1158,7 @@
<style scoped lang="scss">
$homeNavLengh: 8;
.home-container {
- height: calc(100vh - 144px);
+ height: calc(100vh - 144px) !important;
position: relative;
box-sizing: border-box;
overflow: hidden;
@@ -1096,7 +1196,7 @@
justify-content: space-between;
align-items: flex-start;
margin-bottom: 20px;
- height: 40%;
+ height: 50%;
&:last-of-type{
margin-bottom: 0;
}
@@ -1153,57 +1253,59 @@
.chart{
width: 100%;
height: 85%;
+ overflow-y: scroll;
+ scrollbar-width: none; /* firefox */
+ -ms-overflow-style: none; /* IE 10+ */
.el-table{
- height: 90% !important;
- :deep(.el-table__inner-wrapper){
- height: 100% !important;
- .el-table__header-wrapper {
- height: 20% !important;
- .el-table__header{
- height: 100% !important;
- th{
- height: 100% !important;
- padding: 0 0 !important;
- .cell{
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- }
- }
- }
- }
- .el-table__body-wrapper {
- height: 80% !important;
- .el-scrollbar__view{
- height: 100% !important;
- .el-table__body{
- height: 100% !important;
- tbody{
- height: 100% !important;
- .el-table__row{
- height: 25% !important;
- td{
- height: 25% !important;
- padding: 0 0 !important;
- .left-info{
- display: flex;
- align-items: center;
- }
- .cell{
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- }
- .el-button{
- padding: 0 !important;
- }
- }
- }
- }
- }
- }
- }
- }
+ //:deep(.el-table__inner-wrapper){
+ // height: 100% !important;
+ // .el-table__header-wrapper {
+ // height: 20% !important;
+ // .el-table__header{
+ // height: 100% !important;
+ // th{
+ // height: 100% !important;
+ // padding: 0 0 !important;
+ // .cell{
+ // white-space: nowrap;
+ // overflow: hidden;
+ // text-overflow: ellipsis;
+ // }
+ // }
+ // }
+ // }
+ // .el-table__body-wrapper {
+ // height: 80% !important;
+ // .el-scrollbar__view{
+ // height: 100% !important;
+ // .el-table__body{
+ // height: 100% !important;
+ // tbody{
+ // height: 100% !important;
+ // .el-table__row{
+ // height: 25% !important;
+ // td{
+ // height: 25% !important;
+ // padding: 0 0 !important;
+ // .left-info{
+ // display: flex;
+ // align-items: center;
+ // }
+ // .cell{
+ // white-space: nowrap;
+ // overflow: hidden;
+ // text-overflow: ellipsis;
+ // }
+ // .el-button{
+ // padding: 0 !important;
+ // }
+ // }
+ // }
+ // }
+ // }
+ // }
+ // }
+ //}
}
}
.el-radio-group{
@@ -1238,7 +1340,6 @@
.main-card {
width: 100%;
- height: 100%;
.cardTop {
display: flex;
align-items: center;
--
Gitblit v1.9.2