From 5f114549b05ad3334ca911e84e9698cade0995ca Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期一, 20 三月 2023 11:07:17 +0800 Subject: [PATCH] 修改巡检首页,添加视频详情内容 --- src/views/intellectInspect/inspectIndex/index.vue | 318 ----- src/router/route.ts | 8 src/views/facilityManagement/facilityIndex/index.vue | 1956 ++++++++++++++++---------------- src/views/specialWorkSystem/specialIndex/components/videoDetail.vue | 160 ++ src/views/intellectInspect/inspectIndex/components/fullScreen.vue | 1069 ++++++++++++++++++ 5 files changed, 2,229 insertions(+), 1,282 deletions(-) diff --git a/src/router/route.ts b/src/router/route.ts index 00c835b..27f6937 100644 --- a/src/router/route.ts +++ b/src/router/route.ts @@ -89,6 +89,14 @@ } }, { + path: '/inspectFullScreen', + name: 'inspectFullScreen', + component: () => import('/@/views/intellectInspect/inspectIndex/components/fullScreen.vue'), + meta: { + title: '巡检首页全屏' + } + }, + { path: '/msgDetail', name: 'msgDetail', component: () => import('/@/views/riskWarningSys/warningBigScreen/indexs/msgDetail.vue'), diff --git a/src/views/facilityManagement/facilityIndex/index.vue b/src/views/facilityManagement/facilityIndex/index.vue index bad1aac..5514234 100644 --- a/src/views/facilityManagement/facilityIndex/index.vue +++ b/src/views/facilityManagement/facilityIndex/index.vue @@ -1,117 +1,117 @@ <template> - <div class="home-container" :class="isFull==true?'container':''" id="bigScreen"> - <div class="full"> - <el-button v-if="isFull==false" type="text" style="height: 34px" @click="toFullscreen"> - <el-icon style="vertical-align: middle"> - <FullScreen /> - </el-icon> - <span style="vertical-align: middle">全屏</span> - </el-button> - <el-button v-else type="text" style="height: 34px" @click="toFullscreen"> - <el-icon style="vertical-align: middle"> - <Close /> - </el-icon> - <span style="vertical-align: middle">退出全屏</span> - </el-button> - </div> - <div class="topChart"> - <div class="chart-item" :class="zin==1?'upItem':''"> - <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 @focus="upgrade(1)" :teleported="false" v-model="chartSearch1.searchDep" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> - </div> - </div> - <div class="chart" :id="sbzt"></div> - </div> - <div class="chart-item" :class="zin==2?'upItem':''"> - <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 @focus="upgrade(2)" :teleported="false" v-model="chartSearch2.searchDep" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> - </div> - </div> - <div class="chart" :id="ycqs"></div> - </div> - <div class="chart-item" :class="zin==3?'upItem':''"> - <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-part3"> - <el-cascader @focus="upgrade(3)" :teleported="false" v-model="chartSearch3.searchDep" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> - <el-select :teleported="false" v-model="chartSearch3.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="chartSearch3.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="rankData" style="width: 100%" stripe border :header-cell-style="{ background: '#fafafa' }"> - <el-table-column property="num" label="设备位号" align="center"/> - <el-table-column property="name" label="设备名称" align="center"/> - <el-table-column property="dep" label="所属部门" align="center"/> - <el-table-column property="count" label="关联次数" align="center"/> - </el-table> - <el-button type="text" size="small" style="margin-top: 10px">查看所有涉及殊作业的设备>></el-button> - </div> - <!-- <div class="chart" :id="ycqs"></div>--> - </div> - </div> - <div class="topChart"> - <div class="chart-item chart-item2" :class="zin==4?'upItem':''"> - <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 @focus="upgrade(4)" :teleported="false" v-model="chartSearch4.searchDep" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> - </div> - </div> - <div class="chart"> - <el-table :data="wdsbData" style="width: 100%" stripe border :header-cell-style="{ background: '#fafafa' }"> - <el-table-column prop="num" label="设备位号" align="center"/> - <el-table-column prop="name" label="设备名称" align="center"/> - <el-table-column prop="dep" label="所属事业部" align="center"/> - <el-table-column prop="temRange" label="温度敏感范围" align="center"/> - <el-table-column prop="tem" label="当前气温" align="center"/> - <el-table-column prop="status" label="状态" align="center" width="180"> - <template #default="scope"> - <el-tag :type="scope.row.status == 0 ? 'success' : scope.row.status == 1 ? '' : 'danger'">{{ scope.row.status == 0 ? '正常' : scope.row.status == 1 ? '低温警报' : '高温警报' }}</el-tag> - </template> - </el-table-column> - </el-table> - <div class="pageBtn" style="margin-top: 10px"> - <el-pagination v-model:currentPage="pageIndex1" v-model:page-size="pageSize1" :page-sizes="[3]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize1" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" /> - </div> - </div> - </div> - <div class="chart-item chart-item2" :class="zin==5?'upItem':''"> - <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 @focus="upgrade(5)" :teleported="false" v-model="chartSearch4.searchDep" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> - </div> - </div> - <div class="chart" style="margin-top: 10px;display: flex;align-items: center"> - <div class="c-item" :id="aqxj"></div> - <div class="c-item" :id="aqby"></div> - <div class="c-item" :id="yhxh"></div> - </div> - </div> - </div> + <div class="home-container" :class="isFull==true?'container':''" id="bigScreen"> + <div class="full"> + <el-button v-if="isFull==false" type="text" style="height: 34px" @click="toFullscreen"> + <el-icon style="vertical-align: middle"> + <FullScreen /> + </el-icon> + <span style="vertical-align: middle">全屏</span> + </el-button> + <el-button v-else type="text" style="height: 34px" @click="toFullscreen"> + <el-icon style="vertical-align: middle"> + <Close /> + </el-icon> + <span style="vertical-align: middle">退出全屏</span> + </el-button> </div> + <div class="topChart"> + <div class="chart-item" :class="zin==1?'upItem':''"> + <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 @focus="upgrade(1)" :teleported="false" v-model="chartSearch1.searchDep" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> + </div> + </div> + <div class="chart" :id="sbzt"></div> + </div> + <div class="chart-item" :class="zin==2?'upItem':''"> + <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 @focus="upgrade(2)" :teleported="false" v-model="chartSearch2.searchDep" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> + </div> + </div> + <div class="chart" :id="ycqs"></div> + </div> + <div class="chart-item" :class="zin==3?'upItem':''"> + <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-part3"> + <el-cascader @focus="upgrade(3)" :teleported="false" v-model="chartSearch3.searchDep" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> + <el-select :teleported="false" v-model="chartSearch3.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="chartSearch3.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="rankData" style="width: 100%" stripe border :header-cell-style="{ background: '#fafafa' }"> + <el-table-column property="num" label="设备位号" align="center"/> + <el-table-column property="name" label="设备名称" align="center"/> + <el-table-column property="dep" label="所属部门" align="center"/> + <el-table-column property="count" label="关联次数" align="center"/> + </el-table> + <el-button type="text" size="small" style="margin-top: 10px">查看所有涉及殊作业的设备>></el-button> + </div> + <!-- <div class="chart" :id="ycqs"></div>--> + </div> + </div> + <div class="topChart"> + <div class="chart-item chart-item2" :class="zin==4?'upItem':''"> + <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 @focus="upgrade(4)" :teleported="false" v-model="chartSearch4.searchDep" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> + </div> + </div> + <div class="chart"> + <el-table :data="wdsbData" style="width: 100%" stripe border :header-cell-style="{ background: '#fafafa' }"> + <el-table-column prop="num" label="设备位号" align="center"/> + <el-table-column prop="name" label="设备名称" align="center"/> + <el-table-column prop="dep" label="所属事业部" align="center"/> + <el-table-column prop="temRange" label="温度敏感范围" align="center"/> + <el-table-column prop="tem" label="当前气温" align="center"/> + <el-table-column prop="status" label="状态" align="center" width="180"> + <template #default="scope"> + <el-tag :type="scope.row.status == 0 ? 'success' : scope.row.status == 1 ? '' : 'danger'">{{ scope.row.status == 0 ? '正常' : scope.row.status == 1 ? '低温警报' : '高温警报' }}</el-tag> + </template> + </el-table-column> + </el-table> + <div class="pageBtn" style="margin-top: 10px"> + <el-pagination v-model:currentPage="pageIndex1" v-model:page-size="pageSize1" :page-sizes="[3]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize1" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" /> + </div> + </div> + </div> + <div class="chart-item chart-item2" :class="zin==5?'upItem':''"> + <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 @focus="upgrade(5)" :teleported="false" v-model="chartSearch4.searchDep" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> + </div> + </div> + <div class="chart" style="margin-top: 10px;display: flex;align-items: center"> + <div class="c-item" :id="aqxj"></div> + <div class="c-item" :id="aqby"></div> + <div class="c-item" :id="yhxh"></div> + </div> + </div> + </div> + </div> </template> <script lang="ts"> @@ -135,45 +135,45 @@ // 定义接口来定义对象的类型 interface stateType { - applyData: Array<string>; - workTimeList: Array<string>; - multipleSelection: Array<any>; - casProps: {}; - approveInfo: Object; - dialogDetails: boolean; - dialogReview: boolean; - pageIndex1: number; - pageSize1: number; - chosenIndex: null | number; - searchWord: number | null; - searchStatus: number | null; - chartSearch1: object; - chartSearch2: object; - chartSearch3: object; - chartSearch4: object; - totalSize1: number; - details: {}; - workType: Array<type>; - workType1: Array<type>; - dialogType: number | null; - departmentList: Array<any>; - rankData: Array<any>; - wdsbData: Array<any>; - isFull:boolean; - themeColor:string; - zin:number + applyData: Array<string>; + workTimeList: Array<string>; + multipleSelection: Array<any>; + casProps: {}; + approveInfo: Object; + dialogDetails: boolean; + dialogReview: boolean; + pageIndex1: number; + pageSize1: number; + chosenIndex: null | number; + searchWord: number | null; + searchStatus: number | null; + chartSearch1: object; + chartSearch2: object; + chartSearch3: object; + chartSearch4: object; + totalSize1: number; + details: {}; + workType: Array<type>; + workType1: Array<type>; + dialogType: number | null; + departmentList: Array<any>; + rankData: Array<any>; + wdsbData: Array<any>; + isFull:boolean; + themeColor:string; + zin:number } interface type { - id: number; - name: string; + id: number; + name: string; } interface status { name: string value: number } interface DepartmentState { - depId: number; - depName: string; + depId: number; + depName: string; } interface User { name: string; @@ -181,774 +181,773 @@ info: string; } export default defineComponent({ - name: 'facilityIndex', - components: {}, - setup() { - const userInfo = useUserInfo(); - const { userInfos } = storeToRefs(userInfo); - const router = useRouter(); - const sbzt = ref("eChartSbzt" + Date.now() + Math.random()) - const ycqs = ref("eChartYcqs" + Date.now() + Math.random()) - const aqxj = ref("eChartAqxj" + Date.now() + Math.random()) - const aqby = ref("eChartAqby" + Date.now() + Math.random()) - const yhxh = ref("eChartYhxh" + Date.now() + Math.random()) - const state = reactive<stateType>({ - isFull: false, - themeColor: '#333', - zin: 1, - pageIndex1: 1, - pageSize1: 3, - totalSize1: 3, - dialogType: null, - dialogReview: false, - departmentList: [], - chosenIndex: null, - searchWord: null, - searchStatus: null, - chartSearch1: { - searchDep: null, - period: 'month' - }, - chartSearch2: { - searchDep: null, - type: 0 - }, - chartSearch3: { - searchDep: null - }, - chartSearch4: { - searchDep: null - }, - applyData: [], - workTimeList: [], - multipleSelection: [], - approveInfo: { - approvalSteps: [], - operators: [] - }, - casProps: { - expandTrigger: 'hover', - emitPath: false, - value: 'depId', - label: 'depName', - checkStrictly: true - }, - dialogDetails: false, - details: {}, - workType1: [ - { id: 0, 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: '盲板抽堵作业' } - ], - workType: [ - { id: 1, name: '动火作业' }, - { id: 2, name: '受限空间作业' }, - { id: 3, name: '吊装作业' }, - { id: 4, name: '动土作业' }, - { id: 5, name: '断路作业' }, - { id: 6, name: '高处作业' }, - { id: 7, name: '临时用电作业' }, - { id: 8, name: '盲板抽堵作业' } - ], - rankData: [ - { - num: '111', - name: '设备1', - dep: '事业部1', - count: 58 - }, - { - num: '222', - name: '设备2', - dep: '事业部2', - count: 58 - }, - { - num: '333', - name: '设备3', - dep: '事业部3', - count: 58 - }, - { - num: '444', - name: '设备4', - dep: '事业部4', - count: 58 - }, - { - num: '555', - name: '设备5', - dep: '事业部5', - count: 58 - } - ], - wdsbData: [ - { - num: '111', - name: '设备1', - dep: '事业部1', - temRange: '>=35摄氏度', - tem: '38摄氏度', - status: '2' - }, - { - num: '222', - name: '设备1', - dep: '事业部1', - temRange: '<=55摄氏度', - tem: '38摄氏度', - status: '1' - }, - { - num: '333', - name: '设备1', - dep: '事业部1', - temRange: '>=55摄氏度', - tem: '38摄氏度', - status: '0' - } - ] - }); - // 页面载入时执行方法 - onMounted(() => { - // getListByPage(); - getAllDepartment(); - initSbzt() - initYcqs() - initAqxj() - initAqby() - initYhxh() - }); - const toFullscreen =()=>{ - console.log(state.isFull,'quanp',state.themeColor) - const element = document.getElementById('bigScreen') - if (!screenfull.isEnabled) { - ElMessage.warning('暂不不支持全屏'); - return false; + name: 'facilityIndex', + components: {}, + setup() { + const userInfo = useUserInfo(); + const { userInfos } = storeToRefs(userInfo); + const router = useRouter(); + const sbzt = ref("eChartSbzt" + Date.now() + Math.random()) + const ycqs = ref("eChartYcqs" + Date.now() + Math.random()) + const aqxj = ref("eChartAqxj" + Date.now() + Math.random()) + const aqby = ref("eChartAqby" + Date.now() + Math.random()) + const yhxh = ref("eChartYhxh" + Date.now() + Math.random()) + const state = reactive<stateType>({ + isFull: false, + themeColor: '#333', + zin: 1, + pageIndex1: 1, + pageSize1: 3, + totalSize1: 3, + dialogType: null, + dialogReview: false, + departmentList: [], + chosenIndex: null, + searchWord: null, + searchStatus: null, + chartSearch1: { + searchDep: null, + period: 'month' + }, + chartSearch2: { + searchDep: null, + type: 0 + }, + chartSearch3: { + searchDep: null + }, + chartSearch4: { + searchDep: null + }, + applyData: [], + workTimeList: [], + multipleSelection: [], + approveInfo: { + approvalSteps: [], + operators: [] + }, + casProps: { + expandTrigger: 'hover', + emitPath: false, + value: 'depId', + label: 'depName', + checkStrictly: true + }, + dialogDetails: false, + details: {}, + workType1: [ + { id: 0, 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: '盲板抽堵作业' } + ], + workType: [ + { id: 1, name: '动火作业' }, + { id: 2, name: '受限空间作业' }, + { id: 3, name: '吊装作业' }, + { id: 4, name: '动土作业' }, + { id: 5, name: '断路作业' }, + { id: 6, name: '高处作业' }, + { id: 7, name: '临时用电作业' }, + { id: 8, name: '盲板抽堵作业' } + ], + rankData: [ + { + num: '111', + name: '设备1', + dep: '事业部1', + count: 58 + }, + { + num: '222', + name: '设备2', + dep: '事业部2', + count: 58 + }, + { + num: '333', + name: '设备3', + dep: '事业部3', + count: 58 + }, + { + num: '444', + name: '设备4', + dep: '事业部4', + count: 58 + }, + { + num: '555', + name: '设备5', + dep: '事业部5', + count: 58 } - screenfull.toggle(element); - state.isFull = !state.isFull - if(state.isFull == true){ - state.themeColor = '#11FEEE' - }else{ - state.themeColor = '#333' + ], + wdsbData: [ + { + num: '111', + name: '设备1', + dep: '事业部1', + temRange: '>=35摄氏度', + tem: '38摄氏度', + status: '2' + }, + { + num: '222', + name: '设备1', + dep: '事业部1', + temRange: '<=55摄氏度', + tem: '38摄氏度', + status: '1' + }, + { + num: '333', + name: '设备1', + dep: '事业部1', + temRange: '>=55摄氏度', + tem: '38摄氏度', + status: '0' } - initSbzt() - initYcqs() - initAqxj() - initAqby() - initYhxh() + ] + }); + // 页面载入时执行方法 + onMounted(() => { + // getListByPage(); + getAllDepartment(); + initSbzt() + initYcqs() + initAqxj() + initAqby() + initYhxh() + }); + const toFullscreen =()=>{ + console.log(state.isFull,'quanp',state.themeColor) + const element = document.getElementById('bigScreen') + if (!screenfull.isEnabled) { + ElMessage.warning('暂不不支持全屏'); + return false; } - const upgrade =(level:number)=>{ - state.zin = level - console.log(state.zin,'zin') + screenfull.toggle(element); + state.isFull = !state.isFull + if(state.isFull == true){ + state.themeColor = '#11FEEE' + }else{ + state.themeColor = '#333' } - type EChartsOption = echarts.EChartsOption - const initSbzt =()=>{ - let dom = document.getElementById(sbzt.value); - let myChart = echarts.init(dom); - let option: EChartsOption; - option = { - tooltip: { - trigger: 'item' + initSbzt() + initYcqs() + initAqxj() + initAqby() + initYhxh() + } + const upgrade =(level:number)=>{ + state.zin = level + console.log(state.zin,'zin') + } + type EChartsOption = echarts.EChartsOption + const initSbzt =()=>{ + let dom = document.getElementById(sbzt.value); + let myChart = echarts.init(dom); + let option: EChartsOption; + option = { + tooltip: { + trigger: 'item' + }, + legend: { + bottom: '10%', + textStyle: { + // 设置默认的文字颜色 + color: state.themeColor, + fontSize: 12 }, - legend: { - bottom: '10%', - textStyle: { - // 设置默认的文字颜色 - color: state.themeColor, - fontSize: 12 - }, + itemStyle: { + borderWidth: 0 // 设置图例边框宽度为0 + } + }, + series: [ + { + name: '当前时间设备状态', + type: 'pie', + radius: '50%', + center: ['50%','35%'], + avoidLabelOverlap: false, itemStyle: { - borderWidth: 0 // 设置图例边框宽度为0 + borderRadius: 1, + borderColor: '#fff', + borderWidth: 1 + }, + label: { + show: true, + position: 'outside', + overflow: 'truncate', + borderWidth: 0, + color: state.themeColor + }, + labelLine: { + show: true, // 显示指示线 + lineStyle: { + color: '#ccc', + width: 1, + type: 'solid' + } + }, + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + }, + }, + data: [ + { value: 1048, name: '在用' }, + { value: 735, name: '维修' }, + { value: 580, name: '停用' }, + { value: 484, name: '报废' } + ] + } + ] + } + + option && myChart.setOption(option); + window.addEventListener("resize",function (){ + myChart.resize(); + }); + } + const initYcqs =()=>{ + let dom = document.getElementById(ycqs.value); + let myChart = echarts.init(dom); + let option: EChartsOption; + option = { + xAxis: { + type: 'category', + data: ['四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月', '一月', '二月', '三月'], + axisLabel: { + color: state.themeColor + } + }, + yAxis: { + splitLine: { + show: true, + lineStyle: { + color: '#fafafa', + width: 1, + type: 'dashed' } }, - series: [ - { - name: '当前时间设备状态', - type: 'pie', - radius: '50%', - center: ['50%','35%'], - avoidLabelOverlap: false, - itemStyle: { - borderRadius: 1, - borderColor: '#fff', - borderWidth: 1 - }, + axisLabel:{ + color: '#ccc' + } + }, + grid: { + top: '8%', + bottom: '8%' + }, + series: [ + { + data: [150, 230, 224, 218, 135, 147, 230, 224, 218, 135, 147, 260], + type: 'line', + label:{ + show: true + } + } + ] + } + + option && myChart.setOption(option); + window.addEventListener("resize",function (){ + myChart.resize(); + }); + } + const initAqxj =()=>{ + let dom = document.getElementById(aqxj.value); + let myChart = echarts.init(dom); + let option: EChartsOption; + option = { + title: { + text: '按期巡检率', + left: 'center', + textStyle:{ + color: state.themeColor + } + }, + tooltip: { + trigger: 'item' + }, + legend: { + bottom: '5%', + left: 'center', + textStyle: { + // 设置默认的文字颜色 + color: state.themeColor, + fontSize: 12 + }, + itemStyle: { + borderWidth: 0 // 设置图例边框宽度为0 + } + }, + series: [ + { + name: '按期巡检率', + type: 'pie', + radius: ['40%', '70%'], + center: ['50%','48%'], + avoidLabelOverlap: false, + itemStyle: { + borderRadius: 1, + borderColor: '#fff', + borderWidth: 2 + }, + label: { + show: false, + position: 'center' + }, + emphasis: { label: { show: true, - position: 'outside', - overflow: 'truncate', - borderWidth: 0, - color: state.themeColor - }, - labelLine: { - show: true, // 显示指示线 - lineStyle: { - color: '#ccc', - width: 1, - type: 'solid' - } - }, - emphasis: { - itemStyle: { - shadowBlur: 10, - shadowOffsetX: 0, - shadowColor: 'rgba(0, 0, 0, 0.5)' - }, - }, - data: [ - { value: 1048, name: '在用' }, - { value: 735, name: '维修' }, - { value: 580, name: '停用' }, - { value: 484, name: '报废' } - ] - } - ] - } - - option && myChart.setOption(option); - window.addEventListener("resize",function (){ - myChart.resize(); - }); - } - const initYcqs =()=>{ - let dom = document.getElementById(ycqs.value); - let myChart = echarts.init(dom); - let option: EChartsOption; - option = { - xAxis: { - type: 'category', - data: ['四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月', '一月', '二月', '三月'], - axisLabel: { - color: state.themeColor - } - }, - yAxis: { - splitLine: { - show: true, - lineStyle: { - color: '#fafafa', - width: 1, - type: 'dashed' + fontSize: 40, + fontWeight: 'bold' } }, - axisLabel:{ - color: '#ccc' - } - }, - grid: { - top: '8%', - bottom: '8%' - }, - series: [ - { - data: [150, 230, 224, 218, 135, 147, 230, 224, 218, 135, 147, 260], - type: 'line', - label:{ - show: true - } - } - ] - } - - option && myChart.setOption(option); - window.addEventListener("resize",function (){ - myChart.resize(); - }); - } - const initAqxj =()=>{ - let dom = document.getElementById(aqxj.value); - let myChart = echarts.init(dom); - let option: EChartsOption; - option = { - title: { - text: '按期巡检率', - left: 'center', - textStyle:{ - color: state.themeColor - } - }, - tooltip: { - trigger: 'item' - }, - legend: { - bottom: '5%', - left: 'center', - textStyle: { - // 设置默认的文字颜色 - color: state.themeColor, - fontSize: 12 + labelLine: { + show: true }, - itemStyle: { - borderWidth: 0 // 设置图例边框宽度为0 - } - }, - series: [ - { - name: '按期巡检率', - type: 'pie', - radius: ['40%', '70%'], - center: ['50%','48%'], - avoidLabelOverlap: false, - itemStyle: { - borderRadius: 1, - borderColor: '#fff', - borderWidth: 2 - }, - label: { - show: false, - position: 'center' - }, - emphasis: { - label: { - show: true, - fontSize: 40, - fontWeight: 'bold' - } - }, - labelLine: { - show: true - }, - data: [ - { value: 254, name: '在用' }, - { value: 735, name: '维修' } - ] - } - ] - } - - option && myChart.setOption(option); - window.addEventListener("resize",function (){ - myChart.resize(); - }); - } - const initAqby =()=>{ - let dom = document.getElementById(aqby.value); - let myChart = echarts.init(dom); - let option: EChartsOption; - option = { - title: { - text: '按期保养率', - left: 'center', - textStyle:{ - color: state.themeColor - } - }, - tooltip: { - trigger: 'item' - }, - legend: { - bottom: '5%', - left: 'center', - textStyle: { - // 设置默认的文字颜色 - color: state.themeColor, - fontSize: 12 - }, - itemStyle: { - borderWidth: 0 // 设置图例边框宽度为0 - } - }, - series: [ - { - name: '按期保养率', - type: 'pie', - radius: ['40%', '70%'], - center: ['50%','48%'], - avoidLabelOverlap: false, - itemStyle: { - borderRadius: 1, - borderColor: '#fff', - borderWidth: 2 - }, - label: { - show: false, - position: 'center' - }, - emphasis: { - label: { - show: true, - fontSize: 40, - fontWeight: 'bold' - } - }, - labelLine: { - show: true - }, - data: [ - { value: 254, name: '在用' }, - { value: 735, name: '维修' } - ] - } - ] - } - - option && myChart.setOption(option); - window.addEventListener("resize",function (){ - myChart.resize(); - }); - } - const initYhxh =()=>{ - let dom = document.getElementById(yhxh.value); - let myChart = echarts.init(dom); - let option: EChartsOption; - option = { - title: { - text: '隐患销号率', - left: 'center', - textStyle:{ - color: state.themeColor - } - }, - tooltip: { - trigger: 'item' - }, - legend: { - bottom: '5%', - left: 'center', - textStyle: { - // 设置默认的文字颜色 - color: state.themeColor, - fontSize: 12 - }, - itemStyle: { - borderWidth: 0 // 设置图例边框宽度为0 - } - }, - series: [ - { - name: '隐患销号率', - type: 'pie', - radius: ['40%', '70%'], - center: ['50%','48%'], - avoidLabelOverlap: false, - itemStyle: { - borderRadius: 1, - borderColor: '#fff', - borderWidth: 2 - }, - label: { - show: false, - position: 'center' - }, - emphasis: { - label: { - show: true, - fontSize: 40, - fontWeight: 'bold' - } - }, - labelLine: { - show: true - }, - data: [ - { value: 254, name: '在用' }, - { value: 735, name: '维修' } - ] - } - ] - } - - option && myChart.setOption(option); - window.addEventListener("resize",function (){ - myChart.resize(); - }); - } - // 刷新 - const reLoadData = async () => { - // getListByPage(); - }; - - // 填写表单 - const toApply = () => { - router.push({ - path: 'zysq' - }); - }; - - // 获取部门列表 - const getAllDepartment = async () => { - let res = await teamManageApi().getAllDepartment(); - if (res.data.code === '200') { - state.departmentList = JSON.parse(JSON.stringify(res.data.data)) - // recursion(state.departmentList); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }; - - // 分页获取列表 - // 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.applyData = JSON.parse(JSON.stringify(res.data.data)); - // state.applyData = state.applyData.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 toNames = (row, column, cellValue, index) => { - if (row.list == []) { - return []; - } else { - const nameList = []; - for (let i = 0; i < row.list.length; i++) { - for (let t = 0; t < state.workTimeList.length; t++) { - if (row.list[i] == state.workTimeList[t].id) { - nameList.push(state.workTimeList[t].name); - } - } - } - return nameList.join(); - } - }; - - // 关键词查询记录 - // const searchRecord = async () => { - // if (state.searchWord == null && state.searchStatus == null && state.searchDep == null && state.searchDate == []) { - // ElMessage({ - // type: 'warning', - // message: '请输入查询关键词' - // }); - // } else { - // getListByPage(); - // } - // }; - // 重置搜索 - // const clearSearch = async () => { - // state.searchWord = null; - // state.searchDep = null; - // state.searchDate = [] - // getListByPage(); - // }; - // - // const handleSizeChange1 = (val: number) => { - // state.pageSize1 = val; - // getListByPage(); - // }; - // const handleCurrentChange1 = (val: number) => { - // state.pageIndex1 = val; - // getListByPage(); - // }; - - const handleReview = (row)=>{ - state.dialogReview = true - } - - const submitReview = async (formEl: FormInstance | undefined) => { - if (!formEl) return - await formEl.validate((valid, fields) => { - if (valid) { - console.log('submit!') - } else { - console.log('error submit!', fields) + data: [ + { value: 254, name: '在用' }, + { value: 735, name: '维修' } + ] } - }) + ] } - // 折线图 - const renderMenu = async (value: string) => { - Session.set('projectId', value); - userInfos.value.projectId = value; - await initBackEndControlRoutes(); - }; - - return { - View, - Edit, - Delete, - Refresh, - Plus, - Finished, - Download, - FolderChecked, - sbzt, - ycqs, - aqxj, - aqby, - yhxh, - toFullscreen, - upgrade, - handleReview, - submitReview, - reLoadData, - toApply, - toNames, - // searchRecord, - // clearSearch, - // getListByPage, - // handleSizeChange1, - // handleCurrentChange1, - ...toRefs(state) - }; + option && myChart.setOption(option); + window.addEventListener("resize",function (){ + myChart.resize(); + }); } + const initAqby =()=>{ + let dom = document.getElementById(aqby.value); + let myChart = echarts.init(dom); + let option: EChartsOption; + option = { + title: { + text: '按期保养率', + left: 'center', + textStyle:{ + color: state.themeColor + } + }, + tooltip: { + trigger: 'item' + }, + legend: { + bottom: '5%', + left: 'center', + textStyle: { + // 设置默认的文字颜色 + color: state.themeColor, + fontSize: 12 + }, + itemStyle: { + borderWidth: 0 // 设置图例边框宽度为0 + } + }, + series: [ + { + name: '按期保养率', + type: 'pie', + radius: ['40%', '70%'], + center: ['50%','48%'], + avoidLabelOverlap: false, + itemStyle: { + borderRadius: 1, + borderColor: '#fff', + borderWidth: 2 + }, + label: { + show: false, + position: 'center' + }, + emphasis: { + label: { + show: true, + fontSize: 40, + fontWeight: 'bold' + } + }, + labelLine: { + show: true + }, + data: [ + { value: 254, name: '在用' }, + { value: 735, name: '维修' } + ] + } + ] + } + + option && myChart.setOption(option); + window.addEventListener("resize",function (){ + myChart.resize(); + }); + } + const initYhxh =()=>{ + let dom = document.getElementById(yhxh.value); + let myChart = echarts.init(dom); + let option: EChartsOption; + option = { + title: { + text: '隐患销号率', + left: 'center', + textStyle:{ + color: state.themeColor + } + }, + tooltip: { + trigger: 'item' + }, + legend: { + bottom: '5%', + left: 'center', + textStyle: { + // 设置默认的文字颜色 + color: state.themeColor, + fontSize: 12 + }, + itemStyle: { + borderWidth: 0 // 设置图例边框宽度为0 + } + }, + series: [ + { + name: '隐患销号率', + type: 'pie', + radius: ['40%', '70%'], + center: ['50%','48%'], + avoidLabelOverlap: false, + itemStyle: { + borderRadius: 1, + borderColor: '#fff', + borderWidth: 2 + }, + label: { + show: false, + position: 'center' + }, + emphasis: { + label: { + show: true, + fontSize: 40, + fontWeight: 'bold' + } + }, + labelLine: { + show: true + }, + data: [ + { value: 254, name: '在用' }, + { value: 735, name: '维修' } + ] + } + ] + } + + option && myChart.setOption(option); + window.addEventListener("resize",function (){ + myChart.resize(); + }); + } + // 刷新 + const reLoadData = async () => { + // getListByPage(); + }; + + // 填写表单 + const toApply = () => { + router.push({ + path: 'zysq' + }); + }; + + // 获取部门列表 + const getAllDepartment = async () => { + let res = await teamManageApi().getAllDepartment(); + if (res.data.code === '200') { + state.departmentList = JSON.parse(JSON.stringify(res.data.data)) + // recursion(state.departmentList); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 分页获取列表 + // 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.applyData = JSON.parse(JSON.stringify(res.data.data)); + // state.applyData = state.applyData.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 toNames = (row, column, cellValue, index) => { + if (row.list == []) { + return []; + } else { + const nameList = []; + for (let i = 0; i < row.list.length; i++) { + for (let t = 0; t < state.workTimeList.length; t++) { + if (row.list[i] == state.workTimeList[t].id) { + nameList.push(state.workTimeList[t].name); + } + } + } + return nameList.join(); + } + }; + + // 关键词查询记录 + // const searchRecord = async () => { + // if (state.searchWord == null && state.searchStatus == null && state.searchDep == null && state.searchDate == []) { + // ElMessage({ + // type: 'warning', + // message: '请输入查询关键词' + // }); + // } else { + // getListByPage(); + // } + // }; + // 重置搜索 + // const clearSearch = async () => { + // state.searchWord = null; + // state.searchDep = null; + // state.searchDate = [] + // getListByPage(); + // }; + // + // const handleSizeChange1 = (val: number) => { + // state.pageSize1 = val; + // getListByPage(); + // }; + // const handleCurrentChange1 = (val: number) => { + // state.pageIndex1 = val; + // getListByPage(); + // }; + + const handleReview = (row)=>{ + state.dialogReview = true + } + + const submitReview = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + console.log('submit!') + } else { + console.log('error submit!', fields) + } + }) + } + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId', value); + userInfos.value.projectId = value; + await initBackEndControlRoutes(); + }; + + return { + View, + Edit, + Delete, + Refresh, + Plus, + Finished, + Download, + FolderChecked, + sbzt, + ycqs, + aqxj, + aqby, + yhxh, + toFullscreen, + upgrade, + handleReview, + submitReview, + reLoadData, + toApply, + toNames, + // searchRecord, + // clearSearch, + // getListByPage, + // handleSizeChange1, + // handleCurrentChange1, + ...toRefs(state) + }; + } }); </script> <style scoped lang="scss"> $homeNavLengh: 8; .home-container { - height: calc(100vh - 144px); - box-sizing: border-box; - overflow: hidden; - .full{ - position:fixed; - height: 34px; - line-height: 34px; - top: 80px; - right: 20px; - z-index: 9; + height: calc(100vh - 144px); + box-sizing: border-box; + overflow: hidden; + .full{ + position:fixed; + height: 34px; + line-height: 34px; + top: 80px; + right: 20px; + z-index: 9; + } + .demo-tabs { + width: 100%; + height: 100%; + + &::v-deep(.el-tabs__content) { + height: calc(100% - 60px); } - .demo-tabs { + + .el-tab-pane { + height: 100%; + } + } + .topChart{ + width: 100%; + height: calc(50% - 10px); + display: flex; + justify-content: space-between; + align-items: flex-start; + margin-bottom: 20px; + + .chart-item{ + width: calc((100% - 40px)/3); + height: 100%; + margin-right: 20px; + position: relative; + background: #fff; + padding: 20px; + + &:last-of-type{ + margin-right: 0; + } + + .chart-tit{ width: 100%; - height: 100%; - - &::v-deep(.el-tabs__content) { - height: calc(100% - 60px); + height: 15%; + display: flex; + align-items: flex-start; + justify-content: space-between; + .tit{ + font-size: 16px; + font-weight: bolder; + white-space: nowrap; } - - .el-tab-pane { - height: 100%; - } - } - .topChart{ - width: 100%; - height: calc(50% - 10px); - display: flex; - justify-content: space-between; - align-items: flex-start; - margin-bottom: 20px; - - .chart-item{ - width: calc((100% - 40px)/3); - height: 100%; - margin-right: 20px; - position: relative; - background: #fff; - padding: 20px; - - &:last-of-type{ - margin-right: 0; - } - - .chart-tit{ - width: 100%; - height: 15%; + .filter-part{ display: flex; - align-items: flex-start; - justify-content: space-between; - .tit{ - font-size: 16px; - font-weight: bolder; - white-space: nowrap; + align-items: center; + justify-content: right; + :deep(.el-cascader){ + width: 35% !important; } - .filter-part{ - display: flex; - align-items: center; - justify-content: right; - :deep(.el-cascader){ - width: 35% !important; - } - .el-select{ - width: 35% !important; - margin-left: 10px; - } - .el-switch{ - width: 25% !important; + .el-select{ + width: 35% !important; + margin-left: 10px; + } + .el-switch{ + width: 25% !important; - :deep(.el-switch__core){ - width: 100% !important; - } - } - } - .filter-part2{ - :deep(.el-cascader){ + :deep(.el-switch__core){ width: 100% !important; } } - .filter-part3{ - :deep(.el-cascader){ - width: 30% !important; - } - .el-select{ - width: 25% !important; - margin-left: 10px; - } + } + .filter-part2{ + :deep(.el-cascader){ + width: 100% !important; } } - .chart{ - width: 100%; - height: 85%; - .el-table{ - height: 90% !important; - :deep(.el-table__inner-wrapper){ - height: 100% !important; - .el-table__header-wrapper { - height: 20% !important; - .el-table__header{ + .filter-part3{ + :deep(.el-cascader){ + width: 30% !important; + } + .el-select{ + width: 25% !important; + margin-left: 10px; + } + } + } + .chart{ + width: 100%; + height: 85%; + .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; - th{ - height: 100% !important; - padding: 0 0 !important; - .cell{ - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } + padding: 0 0 !important; + .cell{ + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } } } - .el-table__body-wrapper { - height: 80% !important; - .el-scrollbar__view{ + } + .el-table__body-wrapper { + height: 80% !important; + .el-scrollbar__view{ + height: 100% !important; + .el-table__body{ height: 100% !important; - .el-table__body{ + tbody{ height: 100% !important; - tbody{ - height: 100% !important; - .el-table__row{ + .el-table__row{ + height: 20% !important; + td{ height: 20% !important; - td{ - height: 20% !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; - } + 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; } } } @@ -957,99 +956,99 @@ } } } - .c-item{ - width: calc((100% - 20px)/3); - height: 100%; - } - .pageBtn { - display: flex; - align-items: center; - justify-content: right; - - .demo-pagination-block .demonstration { - margin-bottom: 16px; - } - } } - .el-radio-group{ - width: 20%; + .c-item{ + width: calc((100% - 20px)/3); + height: 100%; + } + .pageBtn { display: flex; - flex-flow: column nowrap; - align-items: flex-start; - position: absolute; - right: 10px; - top: 50%; - transform: translateY(-30%); + align-items: center; + justify-content: right; - .el-radio{ - width: 100%; - margin-bottom: 4px; - } - } - :deep(.active-ring-info){ - .active-ring-name{ - font-size: 1.5rem !important; - text-align: center; + .demo-pagination-block .demonstration { + margin-bottom: 16px; } } } + .el-radio-group{ + width: 20%; + display: flex; + flex-flow: column nowrap; + align-items: flex-start; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-30%); - .chart-item2{ - width: calc(50% - 10px); - height: 100%; - margin-right: 10px; - position: relative; - background: #fff; - padding: 20px; - - &:last-of-type{ - margin-right: 0; + .el-radio{ + width: 100%; + margin-bottom: 4px; } - .chart{ - .el-table{ - height: 90% !important; - :deep(.el-table__inner-wrapper){ - height: 100% !important; - .el-table__header-wrapper { - height: 20% !important; - .el-table__header{ + } + :deep(.active-ring-info){ + .active-ring-name{ + font-size: 1.5rem !important; + text-align: center; + } + } + } + + .chart-item2{ + width: calc(50% - 10px); + height: 100%; + margin-right: 10px; + position: relative; + background: #fff; + padding: 20px; + + &:last-of-type{ + margin-right: 0; + } + .chart{ + .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; - th{ - height: 100% !important; - padding: 0 0 !important; - .cell{ - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } + padding: 0 0 !important; + .cell{ + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } } } - .el-table__body-wrapper { - height: 80% !important; - .el-scrollbar__view{ + } + .el-table__body-wrapper { + height: 80% !important; + .el-scrollbar__view{ + height: 100% !important; + .el-table__body{ height: 100% !important; - .el-table__body{ + tbody{ height: 100% !important; - tbody{ - height: 100% !important; - .el-table__row{ + .el-table__row{ + height: 20% !important; + td{ height: 20% !important; - td{ - height: 20% !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; - } + 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; } } } @@ -1061,32 +1060,33 @@ } } } + } - .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-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; + } + } + } } .container{ padding: 20px; @@ -1231,18 +1231,18 @@ } } .el-card { - border: 0; + border: 0; } .el-input{ - width: 100% !important; + width: 100% !important; } ::v-deep(.el-date-editor){ - width: 100%; + width: 100%; } .el-select{ - width: 100%; + width: 100%; } :deep(.el-cascader){ - width: 100% !important; + width: 100% !important; } -</style> +</style> \ No newline at end of file diff --git a/src/views/intellectInspect/inspectIndex/components/fullScreen.vue b/src/views/intellectInspect/inspectIndex/components/fullScreen.vue new file mode 100644 index 0000000..a0fb74f --- /dev/null +++ b/src/views/intellectInspect/inspectIndex/components/fullScreen.vue @@ -0,0 +1,1069 @@ +<template> + <div class="home-container"> + <div class="full"> + <el-button type="text" style="height: 34px" @click="toIndex"> + <el-icon style="vertical-align: middle"> + <Close /> + </el-icon> + <span style="vertical-align: middle">退出全屏</span> + </el-button> + </div> + <div style="height: 100%"> + <div class="topChart"> + <div class="chart-item"> + <dv-border-box10 class="item-bg" :color="['rgba(8, 109, 209, 0.2)']"></dv-border-box10> + <div class="chart-tit"> + <span class="tit">年度巡检异常趋势</span> + </div> + <div class="chart" :id="xjLine"></div> + </div> + <div class="chart-item"> + <dv-border-box10 class="item-bg"></dv-border-box10> + <div class="chart-tit"> + <span class="tit">异常区域设备统计</span> + <div class="filter-part"> + <el-switch + v-model="chartStatus" + inline-prompt + style="--el-switch-on-color: #13ce66; --el-switch-off-color: #13ce66" + active-text="区域" + inactive-text="设备" + /> + </div> + </div> + <div class="chart" :id="sbtj"></div> + <el-radio-group v-model="period" size="small"> + <el-radio border label="week">近7天</el-radio> + <el-radio border label="month">近30天</el-radio> + <el-radio border label="season">近90天</el-radio> + <el-radio border label="year">近一年</el-radio> + </el-radio-group> + </div> + </div> + <div class="midChart"> + <dv-border-box10 class="item-bg"></dv-border-box10> + <div class="chart-item"> + <div class="chart-tit"> + <div style="display: flex;align-items: center"> + <span class="tit">当前巡检任务</span> + <div class="top-info" v-if="unchecked != 0 || unusual != 0"> + <el-icon :size="18" color="#F3001E" style="margin-right: 4px"><BellFilled /></el-icon> + <div>预警消息:</div> + <div v-if="unchecked != 0"> + 当日超期未巡检任务<el-tooltip + class="box-item" + effect="light" + content="查看相关记录" + placement="bottom-start" + ><span @click="toOverTime(4)">{{ unchecked }}</span></el-tooltip>个 + </div> + <span v-if="unchecked != 0 && unusual != 0">,</span> + <div v-if="unusual != 0"> + 存在异常任务<el-tooltip + class="box-item" + effect="light" + content="查看相关记录" + placement="bottom-start" + ><span @click="toOverTime(5)">{{ unusual }}</span + ></el-tooltip>个 + </div> + 。 + </div> + </div> + <div class="checkAll" @click="checkAllRecord()"> + 全部记录>> + </div> + </div> + <div class="chart"> + <el-table :data="tableData" stripe border :header-cell-style="{ background: '#fafafa' }"> + <el-table-column label="任务信息" align="center"> + <template #default="scope"> + <div class="left-info"> + <span>{{ scope.row.taskName }},</span> + <p v-if="scope.row.execUserName == null">该任务暂无人认领</p> + <p v-else> + <span class="time">{{ scope.row.taskStatus == 2 ? scope.row.startTime : scope.row.endTime }}</span>由<span class="name">{{ scope.row.execUserName }}</span>进行的巡检任务 + </p> + </div> + </template> + </el-table-column> + <el-table-column prop="taskStatus" label="任务状态" align="center" width="180"> + <template #default="scope"> + <span :class="scope.row.taskStatus == 1 ? 'grey' : scope.row.taskStatus == 2 ? 'green' : scope.row.taskStatus == 3 ? 'blue' : 'red'">{{ scope.row.taskStatus == 1 ? '待巡检' : scope.row.taskStatus == 2 ? '巡检中' : scope.row.taskStatus == 3 ? '已巡检' : '超期未巡检' }}</span> + </template> + </el-table-column> + <el-table-column label="操作" align="center" width="180"> + <template #default="scope"> + <el-button type="text" size="small" v-if="scope.row.taskStatus == 2" @click="toLine(scope.row)" class="checkBtn">查看实时巡检</el-button> + <el-button type="text" size="small" v-else class="reviewBtn" @click="toDetails('查看', scope.row)">查看巡检记录</el-button> + </template> + </el-table-column> + </el-table> + </div> + </div> + </div> + <div class="midChart"> + <dv-border-box10 class="item-bg"></dv-border-box10> + <div class="chart-item"> + <div class="chart-tit"> + <span class="tit">巡检异常清单</span> + <div class="checkAll" @click="checkAllList()"> + 全部记录>> + </div> + </div> + <div class="chart"> + <el-table :data="unusualData" stripe border :header-cell-style="{ background: '#fafafa' }"> + <el-table-column prop="workOrderNum" label="工单编号" align="center"/> + <el-table-column prop="pointCode" label="异常巡检点" align="center"/> + <el-table-column prop="occurrenceTime" label="巡检(发现)时间" align="center"/> + <el-table-column prop="taskName" label="所属巡检任务" align="center"/> + <el-table-column prop="regionName" label="设备/区域名称" align="center"/> + <el-table-column prop="refer" label="正常参考值" align="center"> + <template #default="scope"> + <span>{{scope.row.dataReportType==1?(scope.row.firstReferenceValue==0?'正常':'异常'):scope.row.dataReportType==2?((scope.row.secondReferenceSignscope==1?'>':'>=') + scope.row.secondReferenceValue + ',' + (scope.row.thirdReferenceSign==3?'<':'<=') + scope.row.thirdReferenceValue): ((scope.row.firstReferenceValue==0?'正常':'异常') + ',' + ((scope.row.secondReferenceSignscope==1?'>':'>=') + scope.row.secondReferenceValue + ',' + (scope.row.thirdReferenceSign==3?'<':'<=') + scope.row.thirdReferenceValue))}}</span> + </template> + </el-table-column> + <el-table-column label="实际巡检值" align="center"> + <template #default="scope"> + <span>{{scope.row.dataReportType==1?(scope.row.firstReferenceResult==0?'正常':'异常'):scope.row.dataReportType==2?scope.row.secondReferenceResult:(scope.row.firstReferenceResult==0?'正常':'异常') + ',' + scope.row.secondReferenceResult}}</span> + </template> + </el-table-column> + <el-table-column prop="hiddenDangerHandlerName" label="隐患处置人" align="center"/> + <el-table-column prop="hiddenDangerHandlerPhone" label="电话" align="center"/> + <el-table-column prop="handlerStatus" label="处置状态" align="center"> + <template #default="scope"> + <el-tag size="small" :type="scope.row.handlerStatus == 2?'danger':(scope.row.handlerStatus == 1 || scope.row.handlerStatus == 3)?'':'success'">{{scope.row.handlerStatus == 1?'待响应':scope.row.handlerStatus == 2?'标记误报':scope.row.handlerStatus == 3?'自查处理中':scope.row.handlerStatus == 4?'已移交上报':scope.row.handlerStatus == 5?'待验收':'已完成'}}</el-tag> + </template> + </el-table-column> + <el-table-column prop="handlerDesc" label="处置描述反馈" align="center"/> + <el-table-column label="操作" align="center" width="180" fixed="right"> + <template #default="scope"> + <el-button v-if="scope.row.handlerStatus == 5" type="text" size="small" class="checkBtn" @click="acceptance(scope.row)">验收</el-button> + <el-button v-if="scope.row.handlerStatus !==1 && scope.row.handlerStatus !==2" type="text" size="small" class="reviewBtn" @click="openPhoto(scope.row)">查看现场照片</el-button> + <el-button v-if="scope.row.handlerStatus ==1" type="text" size="small" @click="remark(scope.row)">标记误报</el-button> + <span v-if="scope.row.handlerStatus == 2" style="color: red">标记误报</span> + </template> + </el-table-column> + </el-table> +<!-- <div class="pageBtn">--> +<!-- <el-pagination v-model:currentPage="pageIndex" 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> + <el-dialog + v-model="dialogVisible" + :title= '"工单编号:" + workNum' + width="60%" + :before-close="handleClose" + center + > + <div style="margin-bottom: 20px"> + <div style="margin-bottom: 10px">处置前:</div> + <div v-if="beImgs && beImgs.length>0"> + <el-image v-for="(item,index) in beImgs" :key="index" style="width: 200px; height: 200px;margin-right: 10px" :src="item" fit="fill" /> + </div> + <div v-else> + 无照片信息 + </div> + </div> + <div> + <div style="margin-bottom: 10px">处置后</div> + <div v-if="afImgs && beImgs.length>0"> + <el-image v-for="(item,index) in afImgs" :key="index" style="width: 200px; height: 200px;margin-right: 10px" :src="item" fit="fill" /> + </div> + <div v-else> + 无照片信息 + </div> + </div> + <template #footer> + <span class="dialog-footer"> + <el-button type="primary" @click="dialogVisible = false"> + 确认 + </el-button> + </span> + </template> + </el-dialog> + <inspect-record-dialog ref="inspectRecordDialogRef" @refreshInspectRecord="getInspectRecord"></inspect-record-dialog> + <inspect-list ref="inspectListRef"></inspect-list> + <unusual-list ref="unusualListRef" @refreshRecord="getListExcepOrder"></unusual-list> + </div> +</template> + +<script lang="ts"> +import { toRefs, reactive, ref, onMounted } from 'vue'; +import { storeToRefs } from 'pinia'; +import { initBackEndControlRoutes } from '/@/router/backEnd'; +import { useUserInfo } from '/@/stores/userInfo'; +import { Session } from '/@/utils/storage'; +import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue'; +import { ElTable } from 'element-plus'; +import { FormInstance, FormRules, ElMessage, ElMessageBox } from 'element-plus'; +import { inspectRecordApi } from '/@/api/intellectInspectSystem/inspectRecord'; +import { inspectIndexApi } from '/@/api/intellectInspectSystem/inspectIndex' +import { useRouter } from 'vue-router'; +import * as echarts from 'echarts' +import inspectRecordDialog from './inspectRecordDialog.vue'; +import inspectList from './inspectList.vue'; +import unusualList from './unusualList.vue'; +import { departmentApi } from '/@/api/systemManage/department'; +import screenfull from "screenfull"; +import { BorderBox10 as DvBorderBox10 } from '@kjgl77/datav-vue3' +// 定义接口来定义对象的类型 +interface stateType { + tableData: Array<string>; + unusualData: Array<any>; + unchecked: null | number; + unusual: null | number; + uncheckedList: []; + abnormalList: []; + pageIndex: number; + pageSize: number; + totalSize: number; + workTypeList: Array<type>; + departmentList: []; + timeType: Array<type>; + classGroupList: Array<classGroup>; + quotaList: []; + inspectPointAllList: []; + chartStatus:boolean; + period: string; + dialogVisible:boolean; + workNum: string; + beImgs: []; + afImgs: [] +} +interface type { + id: number; + name: string; +} +interface classGroup { + id: number; + groupName: string; +} +export default { + name: 'inspectFullScreen', + components: { inspectRecordDialog, inspectList, unusualList }, + setup() { + const router = useRouter(); + const xjLine = ref("eChartXjLine" + Date.now() + Math.random()) + const sbtj = ref("eChartSbtj" + Date.now() + Math.random()) + const state = reactive<stateType>({ + workNum: '', + beImgs: [], + afImgs: [], + pageIndex: 1, + pageSize: 5, + totalSize: 0, + tableData: [], + unusualData: [], + unchecked: null, + unusual: null, + chartStatus: true, + period: 'month', + uncheckedList: [], + abnormalList: [], + workTypeList: [ + { id: 1, name: '日常任务' }, + { id: 2, name: '周期任务' } + ], + departmentList: [], + timeType: [ + { id: 1, name: '分' }, + { id: 2, name: '小时' }, + { id: 3, name: '日' }, + { id: 4, name: '月' }, + { id: 5, name: '年' } + ], + classGroupList: [], + quotaList: [], + inspectPointAllList: [], + dialogVisible: false + }); + const inspectRecordDialogRef = ref(); + const inspectListRef = ref(); + const unusualListRef = ref(); + interface User { + name: string; + startTime: string; + endTime: string; + info: string; + } + + // 页面载入时执行方法 + onMounted(() => { + getInspectRecord(); + getListExcepOrder(); + getDayData(); + getDepartmentData(); + initXjLine() + initSbtj() + }); + const toIndex =()=>{ + router.push({ + path: 'inspectIndex', + query: { + + } + }) + } + const checkAllRecord =()=>{ + inspectListRef.value.departmentList = state.departmentList + inspectListRef.value.showInspectList() + } + const checkAllList =()=>{ + unusualListRef.value.showUnusualList() + } + const acceptance =(row:object)=>{ + ElMessageBox.confirm( + '确认完成验收并结束工单?', + '完成验收', + { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + center: true + } + ) + .then(async() => { + const res = await inspectIndexApi().acceptedStatus({id: row.id}); + if (res.data.code === '200') { + getListExcepOrder(); + ElMessage({ + type: 'success', + message: '验收成功', + }) + } else { + ElMessage({ + type: 'warning', + message: '验收失败' + }); + } + }) + .catch(() => { + ElMessage({ + type: 'info', + message: '取消验收', + }) + }) + } + const remark =(row:object)=>{ + ElMessageBox.confirm( + '确认是否标记误报?', + '标记误报', + { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + center: true + } + ) + .then(async() => { + const res = await inspectIndexApi().falseAlarmStatus({id: row.id}); + if (res.data.code === '200') { + getListExcepOrder(); + ElMessage({ + type: 'success', + message: '标记误报成功', + }) + } else { + ElMessage({ + type: 'warning', + message: '标记误报失败' + }); + } + }) + .catch(() => { + ElMessage({ + type: 'info', + message: '取消标记', + }) + }) + } + const openPhoto = async(row)=>{ + state.dialogVisible = true + state.workNum = row.workOrderNum + const res = await inspectIndexApi().getListImages({id: row.id}); + if (res.data.code === '200') { + state.beImgs = res.data.data.beforeImages + state.afImgs = res.data.data.afterImages + } else { + ElMessage({ + type: 'warning', + message: '图片获取失败' + }); + } + } + type EChartsOption = echarts.EChartsOption + const initXjLine =()=>{ + let dom = document.getElementById(xjLine.value); + let myChart = echarts.init(dom); + + let option: EChartsOption; + + option = { + tooltip: { + trigger: 'axis' + }, + legend: { + data: ['总趋势', '事业部'], + height: '15%', + top: 0, + bottom: 0, + padding:[1,1,1,0], + textStyle: { + // 设置默认的文字颜色 + color: '#11FEEE' + }, + }, + grid: { + top: '15%', + left: '3%', + right: '3%', + bottom: 0, + containLabel: true + }, + toolbox: { + feature: { + // saveAsImage: {} + } + }, + xAxis: { + type: 'category', + boundaryGap: false, + data: ['四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月', '一月', '二月', '三月'], + axisLabel: { + color: '#11FEEE' + } + }, + yAxis: { + splitLine: { + show: true, + lineStyle: { + color: '#fafafa', + width: 1, + type: 'dashed' + } + }, + axisLabel:{ + color: '#ccc' + } + }, + series: [ + { + name: '总趋势', + type: 'line', + stack: 'Total', + data: [120, 132, 101, 134, 90, 120, 132, 101, 134, 90, 230, 210], + label:{ + show: true, + color: '#95d475', + fontSize: 12 + }, + lineStyle:{ + width: 1, + color: '#95d475' + }, + itemStyle:{ + color: '#95d475', + borderColor: '#fff', + borderWidth: 2 + } + }, + { + name: '事业部', + type: 'line', + stack: 'Total', + data: [220, 182, 191, 234, 290, 220, 182, 191, 234, 290, 330, 310], + label:{ + show: true, + color: '#337ecc', + fontSize: 12 + }, + lineStyle:{ + width: 1, + color: '#337ecc' + }, + itemStyle:{ + color: '#337ecc', + borderColor: '#fff', + borderWidth: 2 + } + } + ] + } + + option && myChart.setOption(option); + window.addEventListener("resize",function (){ + myChart.resize(); + }); + } + const initSbtj =()=>{ + let dom = document.getElementById(sbtj.value); + let myChart = echarts.init(dom); + let option: EChartsOption; + option = { + tooltip: { + trigger: 'item' + }, + legend: { + orient: 'vertical', + left: 'left', + top: 'center', + textStyle: { + // 设置默认的文字颜色 + color: '#11FEEE', + // fontSize: 12 + }, + itemStyle: { + borderWidth: 0 // 设置图例边框宽度为0 + } + }, + series: [ + { + name: 'Access From', + type: 'pie', + radius: ['40%', '70%'], + avoidLabelOverlap: false, + itemStyle: { + borderRadius: 1, + borderColor: '#fff', + borderWidth: 1 + }, + label: { + show: true, + position: 'outside', + overflow: 'truncate', + borderWidth: 0, + color: '#11FEEE' + }, + labelLine: { + show: true, // 显示指示线 + lineStyle: { + color: '#ccc', + width: 1, + type: 'solid' + } + }, + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + }, + }, + data: [ + { value: 1048, name: '区域1' }, + { value: 735, name: '区域2' }, + { value: 580, name: '区域3' }, + { value: 484, name: '区域4' }, + { value: 735, name: '区域5' } + ] + } + ] + } + + option && myChart.setOption(option); + window.addEventListener("resize",function (){ + myChart.resize(); + }); + } + // 分页获取 + const getInspectRecord = async () => { + const data = { pageSize: state.pageSize, pageIndex: state.pageIndex }; + let res = await inspectRecordApi().getInspectRecordByIndex(data); + if (res.data.code === '200') { + state.tableData = res.data.data.records; + state.totalSize = res.data.data.total; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + // 分页获取 + const getListExcepOrder = async () => { + const data = { pageSize: 4, pageIndex: state.pageIndex }; + let res = await inspectIndexApi().getListExcepOrderByPage(data); + if (res.data.code === '200') { + state.unusualData = JSON.parse(JSON.stringify(res.data.data.records)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + //获取部门 + const getDepartmentData = async () => { + let res = await departmentApi().getDepartmentList(); + if (res.data.code === '200') { + state.departmentList = res.data.data; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + //获取当日数据 + const getDayData = async () => { + let res = await inspectRecordApi().getDayRecord(); + if (res.data.code === '200') { + state.unchecked = res.data.data.noCheckTaskCount; + state.unusual = res.data.data.abnormalTaskCount; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const handleSizeChange = (val: number) => { + state.pageSize = val; + getInspectRecord(); + }; + const handleCurrentChange = (val: number) => { + state.pageIndex = val; + getInspectRecord(); + }; + + const toLine = (item) => { + console.log(item,'item') + let id = item.id; + console.log(id,'id') + router.push({ + path: 'intelligentLine', + query: { + id: id + } + }); + }; + + const toOverTime = (id) => { + console.log(state.uncheckedList, 'list'); + router.push({ + path: 'inspectRecord', + query: { + id: id, + } + }); + }; + const toDetails = (type: string, item) => { + inspectRecordDialogRef.value.showInspectRecordDialog(type, item, state.workTypeList, state.departmentList, state.timeType, state.classGroupList, state.quotaList, state.inspectPointAllList); + }; + return { + View, + Edit, + Delete, + Refresh, + xjLine, + sbtj, + Plus, + router, + inspectRecordDialogRef, + inspectListRef, + unusualListRef, + toIndex, + checkAllRecord, + checkAllList, + acceptance, + remark, + openPhoto, + toLine, + toOverTime, + toDetails, + handleSizeChange, + handleCurrentChange, + ...toRefs(state) + }; + } +}; +</script> + +<style scoped lang="scss"> +$homeNavLengh: 8; +@media screen and (min-width: 1366px) { + +} +@media screen and (min-width: 1200px) and (max-width: 1366px) { + +} +@media screen and (max-width: 1200px) { + +} + +.home-container { + height: 100vh; + box-sizing: border-box; + overflow: hidden; + padding: 20px; + background: url('../../../../assets/spwbg.png') no-repeat center; + .full{ + position:fixed; + background: rgba(0,0,0,.2); + border: 1px solid rgba(54, 252, 252, .6); + border-radius: 17px 1px 1px 17px; + box-shadow: 3px 3px 12px rgba(0,0,0,.2); + height: 32px; + line-height: 30px; + top: 10px; + right: 2px; + display: flex; + justify-content: center; + backdrop-filter: blur(2px); + z-index: 99999; + } + .topChart{ + width: 100%; + height: calc((100% - 40px) / 3); + display: flex; + justify-content: space-between; + align-items: flex-start; + margin-bottom: 20px; + &:last-of-type{ + margin-bottom: 0; + } + + .chart-item{ + width: calc(60% - 20px); + height: 100%; + margin-right: 20px; + position: relative; + background: #fff; + padding: 20px; + border-radius: 4px; + background: rgba(0, 61, 121, 0.2); + backdrop-filter: blur(5px); + z-index: 2; + + &:last-of-type{ + width: 40%; + margin-right: 0; + position: relative; + z-index: 1; + } + .item-bg{ + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: -1; + } + .chart-tit{ + width: 100%; + height: 15%; + display: flex; + align-items: flex-start; + justify-content: space-between; + .tit{ + font-size: 1.33rem; + font-weight: bolder; + color: #11FEEE; + } + ::v-deep(.el-popper){ + background-color: rgba(10,31,92,1); + border: 1px solid rgba(17,254,238,.4); + color: #11FEEE; + .el-cascader-node{ + .in-active-path{ + background: #0049af; + } + &:hover{ + background: #0049af; + } + } + .el-cascader-node__label{ + color: #11FEEE; + } + .el-icon{ + 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; + } + } + .filter-part{ + display: flex; + align-items: center; + justify-content: right; + width: 20%; + .el-switch{ + width: 100% !important; + :deep(.el-switch__core){ + width: 100% !important; + } + } + } + } + .chart{ + width: 100%; + height: 85%; + .el-table { + color: #11FEEE !important; + background-color: rgba(0,0,0,0) !important; + :deep(thead){ + color: #11FEEE !important; + } + :deep(tr){ + background-color: rgba(0,0,0,0) !important; + .el-table__cell{ + background-color: rgba(0,0,0,0) !important; + } + } + } + } + .el-radio-group{ + width: 20%; + display: flex; + flex-flow: column nowrap; + align-items: flex-start; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-30%); + + .el-radio{ + width: 100%; + margin-bottom: 4px; + } + } + :deep(.active-ring-info){ + .active-ring-name{ + font-size: 1.5rem !important; + text-align: center; + } + } + } + } + .midChart{ + height: calc((100% - 40px) / 3); + width: 100%; + display: flex; + justify-content: space-between; + align-items: flex-start; + margin-bottom: 20px; + padding: 20px; + border-radius: 4px; + background: rgba(0, 61, 121, 0.2); + backdrop-filter: blur(5px); + position: relative; + z-index: 3; + .item-bg { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: -1; + } + .chart-item{ + width: 100%; + height: 100%; + padding: 0 0 20px; + + .chart-tit{ + width: 100%; + height: 15%; + display: flex; + align-items: center; + justify-content: space-between; + .tit{ + font-size: 20px; + font-weight: bolder; + color: #11FEEE; + } + :deep(.el-switch__core){ + width: 120px; + } + .top-info { + display: flex; + font-size: 14px; + align-items: center; + background: #ffeb87; + padding: 4px 10px; + margin-left: 20px; + border-radius: 2px; + border: 1px solid #ffae00; + & > div { + vertical-align: middle; + white-space: nowrap; + height: 100%; + span { + color: #f3001e; + margin: 0 4px; + font-size: 18px; + cursor: pointer; + font-weight: bolder; + + &:hover{ + text-decoration: underline; + } + } + } + } + .checkAll{ + cursor: pointer; + color: #11feee; + &:hover{ + color: #409eff + } + } + } + + .chart{ + width: 100%; + height: 85%; + margin-top: 10px; + + .el-table{ + height: 100% !important; + color: #11FEEE !important; + background-color: rgba(0,0,0,0) !important; + :deep(thead){ + color: #11FEEE !important; + background-color: #092846 !important + } + :deep(tr){ + background-color: rgba(0,0,0,0) !important; + .el-table__cell{ + background-color: rgba(0,0,0,0) !important; + } + .el-table-fixed-column--right{ + background-color: #092846 !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; + } + } + } + } + } + } + } + } + } + + .pageBtn { + position: absolute; + bottom: 15px; + right: 20px; + 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; + } + } + } + } + } + + .el-row { + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content { + align-items: center; + min-height: 36px; + } + } +} + +.el-input { + width: 100% !important; +} +.el-date-editor::v-deep { + width: 100%; +} +.el-select { + width: 100%; +} +:deep(.el-textarea.is-disabled .el-textarea__inner) { + background-color: var(--el-card-bg-color); + color: var(--el-input-text-color, var(--el-text-color-regular)); +} +:deep(.el-input.is-disabled .el-input__inner) { + color: var(--el-input-text-color, var(--el-text-color-regular)); +} +:deep(.el-input.is-disabled .el-input__wrapper) { + background-color: var(--el-card-bg-color); +} +</style> diff --git a/src/views/intellectInspect/inspectIndex/index.vue b/src/views/intellectInspect/inspectIndex/index.vue index 668f6f7..ce2d582 100644 --- a/src/views/intellectInspect/inspectIndex/index.vue +++ b/src/views/intellectInspect/inspectIndex/index.vue @@ -1,30 +1,22 @@ <template> - <div class="home-container" :class="isFull==true?'container':''" id="bigScreen"> + <div class="home-container"> <div class="full"> - <el-button v-if="isFull==false" type="text" style="height: 34px" @click="toFullscreen"> + <el-button type="text" style="height: 34px" @click="toFullscreen"> <el-icon style="vertical-align: middle"> <FullScreen /> </el-icon> <span style="vertical-align: middle">全屏</span> </el-button> - <el-button v-else type="text" style="height: 34px" @click="toFullscreen"> - <el-icon style="vertical-align: middle"> - <Close /> - </el-icon> - <span style="vertical-align: middle">退出全屏</span> - </el-button> </div> <div style="height: 100%"> <div class="topChart"> <div class="chart-item"> - <dv-border-box10 v-if="isFull==true" class="item-bg" :color="['rgba(8, 109, 209, 0.2)']"></dv-border-box10> <div class="chart-tit"> <span class="tit">年度巡检异常趋势</span> </div> <div class="chart" :id="xjLine"></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"> @@ -47,7 +39,6 @@ </div> </div> <div class="midChart"> - <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10> <div class="chart-item"> <div class="chart-tit"> <div style="display: flex;align-items: center"> @@ -109,7 +100,6 @@ </div> </div> <div class="midChart"> - <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10> <div class="chart-item"> <div class="chart-tit"> <span class="tit">巡检异常清单</span> @@ -235,8 +225,6 @@ inspectPointAllList: []; chartStatus:boolean; period: string; - isFull:boolean; - themeColor:string; dialogVisible:boolean; workNum: string; beImgs: []; @@ -258,13 +246,11 @@ const xjLine = ref("eChartXjLine" + Date.now() + Math.random()) const sbtj = ref("eChartSbtj" + Date.now() + Math.random()) const state = reactive<stateType>({ - isFull: false, - themeColor: '#333', workNum: '', beImgs: [], afImgs: [], pageIndex: 1, - pageSize: 5, + pageSize: 10, totalSize: 0, tableData: [], unusualData: [], @@ -311,21 +297,12 @@ initSbtj() }); const toFullscreen =()=>{ - // console.log(state.isFull,'quanp',state.themeColor) - const element = document.getElementById('bigScreen') - if (!screenfull.isEnabled) { - ElMessage.warning('暂不不支持全屏'); - return false; - } - screenfull.toggle(element); - state.isFull = !state.isFull - if(state.isFull == true){ - state.themeColor = '#11FEEE' - }else{ - state.themeColor = '#333' - } - initXjLine() - initSbtj() + router.push({ + path: 'inspectFullScreen', + query: { + + } + }) } const checkAllRecord =()=>{ inspectListRef.value.departmentList = state.departmentList @@ -433,7 +410,7 @@ padding:[1,1,1,0], textStyle: { // 设置默认的文字颜色 - color: state.themeColor + color: '#333' }, }, grid: { @@ -453,7 +430,7 @@ boundaryGap: false, data: ['四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月', '一月', '二月', '三月'], axisLabel: { - color: state.themeColor + color: '#333' } }, yAxis: { @@ -532,7 +509,7 @@ top: 'center', textStyle: { // 设置默认的文字颜色 - color: state.themeColor, + color: '#333', // fontSize: 12 }, itemStyle: { @@ -555,7 +532,7 @@ position: 'outside', overflow: 'truncate', borderWidth: 0, - color: state.themeColor + color: '#333' }, labelLine: { show: true, // 显示指示线 @@ -604,7 +581,7 @@ }; // 分页获取 const getListExcepOrder = async () => { - const data = { pageSize: 4, pageIndex: state.pageIndex }; + const data = { pageSize: 10, pageIndex: state.pageIndex }; let res = await inspectIndexApi().getListExcepOrderByPage(data); if (res.data.code === '200') { state.unusualData = JSON.parse(JSON.stringify(res.data.data.records)) @@ -701,7 +678,7 @@ ...toRefs(state) }; } -}; +} </script> <style scoped lang="scss"> @@ -720,6 +697,7 @@ height: calc(100vh - 144px); box-sizing: border-box; overflow: hidden; + overflow-y: scroll; .full{ position:fixed; height: 34px; @@ -730,7 +708,7 @@ } .topChart{ width: 100%; - height: calc((100% - 40px) / 3); + height: 300px; display: flex; justify-content: space-between; align-items: flex-start; @@ -802,7 +780,6 @@ } } .midChart{ - height: calc((100% - 40px) / 3); width: 100%; background: #fff; display: flex; @@ -867,60 +844,10 @@ width: 100%; height: 85%; margin-top: 10px; - - .el-table{ - height: 100% !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; - } - } - } - } - } - } - } - } + .left-info{ + display: flex; + align-items: center; } - .pageBtn { position: absolute; bottom: 15px; @@ -954,212 +881,7 @@ } } } -.container{ - padding: 20px; - background: url('../../../assets/spwbg.png') no-repeat center; - .full{ - position:fixed; - background: rgba(0,0,0,.2); - border: 1px solid rgba(54, 252, 252, .6); - border-radius: 17px 1px 1px 17px; - box-shadow: 3px 3px 12px rgba(0,0,0,.2); - height: 32px; - line-height: 30px; - top: 10px; - right: 2px; - display: flex; - justify-content: center; - backdrop-filter: blur(2px); - z-index: 99999; - } - .topChart{ - .chart-item{ - border-radius: 4px; - background: rgba(0, 61, 121, 0.2); - backdrop-filter: blur(5px); - position: relative; - z-index: 2; - &:last-of-type{ - position: relative; - z-index: 1; - } - .item-bg{ - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; - z-index: -1; - } - .el-radio.is-bordered.is-checked{ - border-color: #11FEEE !important; - :deep(.el-radio__inner){ - border-color: #11FEEE !important; - background: #11FEEE !important; - } - :deep(.el-radio__label){ - color: #11FEEE !important - } - } - .chart-tit{ - .tit{ - color: #11FEEE; - } - ::v-deep(.el-popper){ - background-color: rgba(10,31,92,1); - border: 1px solid rgba(17,254,238,.4); - color: #11FEEE; - .el-cascader-node{ - .in-active-path{ - background: #0049af; - } - &:hover{ - background: #0049af; - } - } - .el-cascader-node__label{ - color: #11FEEE; - } - .el-icon{ - 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; - } - } - } - .chart{ - .el-table { - color: #11FEEE !important; - background-color: rgba(0,0,0,0) !important; - :deep(thead){ - color: #11FEEE !important; - } - :deep(tr){ - background-color: rgba(0,0,0,0) !important; - .el-table__cell{ - background-color: rgba(0,0,0,0) !important; - } - } - } - } - } - } - .midChart{ - border-radius: 4px; - background: rgba(0, 61, 121, 0.2); - backdrop-filter: blur(5px); - position: relative; - z-index: 3; - .item-bg { - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; - z-index: -1; - } - .tit{ - color: #11FEEE; - } - .checkAll{ - cursor: pointer; - color: #11feee; - &:hover{ - color: #409eff - } - } - .el-table { - color: #11FEEE !important; - background-color: rgba(0,0,0,0) !important; - :deep(thead){ - color: #11FEEE !important; - background-color: #092846 !important - } - :deep(tr){ - background-color: rgba(0,0,0,0) !important; - .el-table__cell{ - background-color: rgba(0,0,0,0) !important; - } - .el-table-fixed-column--right{ - background-color: #092846 !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{ - .in-active-path{ - background: #0049af; - } - &:hover{ - background: #0049af; - } - } - .el-cascader-node__label{ - color: #11FEEE; - } - .el-icon{ - 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; - } - } - } -} .el-input { width: 100% !important; } diff --git a/src/views/specialWorkSystem/specialIndex/components/videoDetail.vue b/src/views/specialWorkSystem/specialIndex/components/videoDetail.vue index 4f51c2b..8c37485 100644 --- a/src/views/specialWorkSystem/specialIndex/components/videoDetail.vue +++ b/src/views/specialWorkSystem/specialIndex/components/videoDetail.vue @@ -1,11 +1,46 @@ <template> <el-dialog v-model="videoDetailDialog" title="动火作业编号00001 实时监测详情" width="80%" center> <div style="margin-bottom: 20px"> - <el-button type="warning">人工录入警报信息</el-button> + <el-button type="warning" @click="fillDialog = true">人工录入警报信息</el-button> </div> <div class="info"> <!-- <video class="video-cont" autoplay src="https://www.bilibili.com/video/BV1UM411s7Ey/?vd_source=7700e61a97bad6ca1f7c0ecb9768d682" controls></video>--> - <iframe class="video-cont" src="http://36.108.169.10:8088/808gps/open/player/video.html?lang=zh&devIdno=21125705363&&account=gtxh&password=000000"></iframe> + <div class="left-info"> + <iframe class="video-cont" src="http://36.108.169.10:8088/808gps/open/player/video.html?lang=zh&devIdno=21125705363&&account=gtxh&password=000000"></iframe> + <div class="chart-area"> + <div class="chart-item"> + <div class="top-tit"> + <div class="tit">基础指标数据(可燃气体浓度、氧气、一氧化碳、硫化氢按需展示):</div> + <el-button type="warning" @click="reportDialog = true">监管异常填报</el-button> + </div> + <el-table :data="basicData" style="width: 100%" border :header-cell-style="{ background: '#fafafa' }"> + <el-table-column property="type" label="类别" align="center"/> + <el-table-column property="time" label="填报时间" align="center"/> + <el-table-column property="name" label="填报人" align="center"/> + <el-table-column property="number" label="值" align="center"/> + <el-table-column property="isGood" label="是否合格" align="center"> + <template #default="scope"> + <span>{{scope.row.isGood == 0?'合格':'不合格'}}</span> + </template> + </el-table-column> + </el-table> + </div> + <div class="chart-item"> + <div class="top-tit"><div class="tit">现场检查代码:</div></div> + <el-table :data="checkData" style="width: 100%" border :header-cell-style="{ background: '#fafafa' }"> + <el-table-column property="name" label="现在检查人" align="center"/> + <el-table-column property="time" label="检查填报时间" align="center"/> + <el-table-column property="content" label="检查内容" align="center"/> + <el-table-column property="info" label="描述" align="center"/> + <el-table-column property="isGood" label="是否合格" align="center"> + <template #default="scope"> + <span>{{scope.row.isGood == 0?'合格':'不合格'}}</span> + </template> + </el-table-column> + </el-table> + </div> + </div> + </div> <div class="right-info"> <div class="info-item"> <div class="info-tit"> @@ -39,7 +74,50 @@ </div> </div> </div> - + <el-dialog v-model="fillDialog" title="作业全过程监测风险警报信息发现录入" width="50%" center> + <el-form ref="reviewFormRef" :model="reviewForm" :rules="reviewRules" label-width="170px"> + <el-form-item label="风险描述:" prop="describe"> + <el-input + v-model="reviewForm.describe" + :autosize="{ minRows: 4, maxRows: 10 }" + type="textarea" + prop="desc" + placeholder="请输入风险描述信息" + /> + </el-form-item> + <el-form-item label="是否已通知现场负责人:" prop="isInform"> + <el-radio-group v-model="reviewForm.isInform"> + <el-radio :label="1">是</el-radio> + <el-radio :label="0">否</el-radio> + </el-radio-group> + </el-form-item> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="fillDialog = false">取消</el-button> + <el-button type="primary">确认</el-button> + </span> + </template> + </el-dialog> + <el-dialog v-model="reportDialog" title="基础指标数据作业过程中监管异常填报" width="50%" center> + <div class="tip"> + 提示:动火作业被测可燃气体或蒸气浓度不应大于10%LEL。您在现场人员未发现或未如实填报时,才需要填写此项。 + </div> + <el-form ref="reportFormRef" :model="reportForm" :rules="reportRules" label-width="120px"> + <el-form-item label="可燃气体浓度:" prop="problem"> + <el-input + v-model="reportForm.problem" + prop="problem" + /> + </el-form-item> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="reportDialog = false">取消</el-button> + <el-button type="primary">确认</el-button> + </span> + </template> + </el-dialog> </el-dialog> </template> @@ -56,6 +134,12 @@ interface stateType { videoDetailDialog:boolean + basicData: Array<any> + checkData: Array<any> + fillDialog: boolean + reviewForm: object + reportForm: object + reportDialog: boolean } export default defineComponent({ name: 'videoDetail', @@ -65,7 +149,50 @@ const userInfo = useUserInfo() const { userInfos } = storeToRefs(userInfo); const state = reactive<stateType>({ - videoDetailDialog: false + videoDetailDialog: false, + basicData:[ + { + type: '可燃气体浓度', + time: '2023-03-20 09:09', + name: '李羽飞(动火分析人)', + number: '3%LEL', + isGood: 0 + }, + { + type: '可燃气体浓度', + time: '2023-03-20 09:09', + name: '李羽飞(动火分析人)', + number: '2.9%LEL', + isGood: 0 + } + ], + checkData:[ + { + name: '杨冬冬', + time: '2023-03-20 09:09', + content: '防火面罩不少于2个', + info: '2个', + isGood: 0 + }, + { + name: '杨冬冬', + time: '2023-03-20 09:09', + content: '电源插座是否防爆', + info: '是', + isGood: 0 + }, + { + name: '杨冬冬', + time: '2023-03-20 09:09', + content: '除动火人和监护人有无其他人员在场', + info: '有信息化人员', + isGood: 1 + } + ], + fillDialog: false, + reportDialog: false, + reviewForm: {}, + reportForm: {} }) const openDialog = ()=>{ state.videoDetailDialog = true @@ -85,10 +212,28 @@ align-items: flex-start; justify-content: space-between; - .video-cont{ + .left-info{ width: calc(70% - 20px); - height: 60vh; margin-right: 20px; + .video-cont{ + width: 100%; + min-height: 500px; + } + .chart-area{ + width: 100%; + background: #fafafa; + padding: 20px; + margin-top: 20px; + .chart-item{ + margin-bottom: 20px; + .top-tit{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + } + } + } } .right-info{ width: 30%; @@ -124,4 +269,7 @@ } } } + .tip{ + margin-bottom: 20px; + } </style> -- Gitblit v1.9.2