diff --git a/yanzhu-bigscreen/src/api/index.js b/yanzhu-bigscreen/src/api/index.js index 2e81d2d3..6c42d644 100644 --- a/yanzhu-bigscreen/src/api/index.js +++ b/yanzhu-bigscreen/src/api/index.js @@ -1,18 +1,19 @@ - -import {axios,download} from '@/utils/request' -import project from './project' -import weather from './weather' -import detail from './detail' -import dict from './dict' -import greenCarbon from './greenCarbon' -import videoMonitor from './videoMonitor' +import { axios, download } from "@/utils/request"; +import project from "./project"; +import weather from "./weather"; +import detail from "./detail"; +import dict from "./dict"; +import greenCarbon from "./greenCarbon"; +import videoMonitor from "./videoMonitor"; +import safety from "./safety"; export default { - http:axios, - downFile:download, - project, - weather, - detail, - dict, - greenCarbon, - videoMonitor -} \ No newline at end of file + http: axios, + downFile: download, + project, + weather, + detail, + dict, + greenCarbon, + videoMonitor, + safety, +}; diff --git a/yanzhu-bigscreen/src/api/safety.js b/yanzhu-bigscreen/src/api/safety.js new file mode 100644 index 00000000..603ddabe --- /dev/null +++ b/yanzhu-bigscreen/src/api/safety.js @@ -0,0 +1,42 @@ +import request from "@/utils/request"; + +const groupByProblemType = (data) => { + return request({ + url: `/manage/problemmodify/groupByProblemType`, + method: "post", + data, + }); +}; + +const groupByDangerType = (data) => { + return request({ + url: `/manage/problemmodify/groupByDangerType`, + method: "post", + data, + }); +}; + +const listCountForBG = (data) => { + return request({ + url: `/manage/problemmodify/listCountForBG`, + method: "get", + params: data, + }); +}; + +const listForBG = (data) => { + data.pageSize = 5; + data.pageNum = 1; + return request({ + url: `/manage/problemmodify/listForBG`, + method: "get", + params: data, + }); +}; + +export default { + groupByProblemType, + groupByDangerType, + listCountForBG, + listForBG, +}; diff --git a/yanzhu-bigscreen/src/assets/icons/svg/notesearch.svg b/yanzhu-bigscreen/src/assets/icons/svg/notesearch.svg new file mode 100644 index 00000000..9042c1e1 --- /dev/null +++ b/yanzhu-bigscreen/src/assets/icons/svg/notesearch.svg @@ -0,0 +1,8 @@ +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg +style="width: 1em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" +viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3395"> +<path + d="M90.664027 1023.902729C40.639065 1023.902729 0.048635 980.752543 0.048635 926.193155V91.273615C0.048635 41.980012 41.736104 0 90.664027 0h777.288443c48.927923 0 83.374937 41.980012 83.374937 91.273615V480.502924h-74.01354V72.989637H73.842768v877.630911H512V1023.902729H90.664027zM658.271818 753.299865a95.369226 95.369226 0 0 0 95.076682 95.076682 95.369226 95.369226 0 0 0 95.076682-95.076682A95.369226 95.369226 0 0 0 753.3485 658.223183 95.369226 95.369226 0 0 0 658.271818 753.299865z m353.538986 262.045963a33.78879 33.78879 0 0 1-0.804495 0.804495l-5.850873 2.413485a15.139133 15.139133 0 0 0-4.241883 1.755262c-5.19265 2.632893-7.67927 3.510524-11.701745 3.510523a67.138765 67.138765 0 0 1-11.921153-0.731359 26.840879 26.840879 0 0 1-15.065998-6.947911l-123.014599-122.210104a171.138028 171.138028 0 0 1-89.079538 24.281121c-94.857274 0-167.627504-72.331414-167.627504-166.603601 0-94.272187 72.77023-166.603601 167.627504-166.603601 94.857274 0 167.627504 72.40455 167.627504 166.603601 0 34.958965-10.01962 67.723852-28.59614 95.076682l121.844425 121.03993c13.457007 12.87192 13.822687 34.227606 0.804495 47.538341zM186.545204 475.529682a36.567955 36.567955 0 0 1 36.567955-36.567955h511.951364a36.567955 36.567955 0 0 1 0 73.135909h-511.951364a36.567955 36.567955 0 0 1-36.567955-36.567954z m0-219.407728a36.567955 36.567955 0 0 1 36.567955-36.567954h511.951364a36.567955 36.567955 0 0 1 0 73.135909h-511.951364a36.567955 36.567955 0 0 1-36.567955-36.567955z"> +</path> +</svg> \ No newline at end of file diff --git a/yanzhu-bigscreen/src/components/header.vue b/yanzhu-bigscreen/src/components/header.vue index bb6c20db..edba6942 100644 --- a/yanzhu-bigscreen/src/components/header.vue +++ b/yanzhu-bigscreen/src/components/header.vue @@ -92,7 +92,7 @@ <el-col :span="8" class="header-center"> <img class="prj-logo" :src="selProject.setting.orgLogo" v-if="selProject && selProject.setting && selProject.setting.orgLogo" /> - 数字建安施工管理平台 + {{ selProject?.setting?.orgName || '数字建安施工管理平台' }} </el-col> <el-col :span="8"> <div class="head-title-tab" style="display: inline-block"> @@ -203,6 +203,9 @@ export default { case 309: this.$router.push("/videoMonitor"); break; + case 301: + this.$router.push("/safetyCheck"); + break; case 4: this.$router.push("/prjQuality"); break; @@ -309,6 +312,7 @@ export default { padding: 5px 40px; position: relative; top: -8px; + .prj-logo { width: 40px; height: 40px; @@ -362,12 +366,13 @@ export default { .header-center { font-size: 52px !important; margin-top: 10px; + .prj-logo { - width: 50px; - height: 50px; - vertical-align: middle; - border-radius: 25px; - } + width: 50px; + height: 50px; + vertical-align: middle; + border-radius: 25px; + } } .header-title-user-info { diff --git a/yanzhu-bigscreen/src/components/module/module-one-3-1.vue b/yanzhu-bigscreen/src/components/module/module-one-3-1.vue new file mode 100644 index 00000000..a411c9bb --- /dev/null +++ b/yanzhu-bigscreen/src/components/module/module-one-3-1.vue @@ -0,0 +1,42 @@ +<template> + <div class="screen-one-3-1 screen-module"> + <div class="module-title"><span>{{ label || '' }}</span></div> + <div class="module-ctx"> + <slot></slot> + </div> + </div> + +</template> + +<script> +export default { + props: { + label: { + type: String, + default: "" + } + } +}; +</script> +<style lang="less" scoped> +.screen-one-3-1 { + height: calc(33% - 20px); + margin: 20px; + position: relative; + + &::after { + content: " "; + display: block; + position: absolute; + width: 100%; + height: 26px; + top: 0px; + background-repeat: no-repeat; + } + + .module-title { + position: relative; + z-index: 9; + } +} +</style> \ No newline at end of file diff --git a/yanzhu-bigscreen/src/components-old/project-overview-chart.vue b/yanzhu-bigscreen/src/components/project-overview-chart.vue similarity index 100% rename from yanzhu-bigscreen/src/components-old/project-overview-chart.vue rename to yanzhu-bigscreen/src/components/project-overview-chart.vue diff --git a/yanzhu-bigscreen/src/router/index.js b/yanzhu-bigscreen/src/router/index.js index efe540f3..58e1450d 100644 --- a/yanzhu-bigscreen/src/router/index.js +++ b/yanzhu-bigscreen/src/router/index.js @@ -10,7 +10,7 @@ const routes = [ meta: { nav: 1 }, component: () => import(/* webpackChunkName: "index" */ "../views/index.vue"), - }, + }, { path: "/detail", name: "detail", @@ -38,23 +38,30 @@ const routes = [ meta: { nav: 23 }, component: () => import(/* webpackChunkName: "progress" */ "../views/projectProgress.vue"), - }, + }, { path: "/greenCarbon", name: "greenCarbon", meta: { nav: 23 }, component: () => import(/* webpackChunkName: "progress" */ "../views/greenCarbon.vue"), - }, + }, { path: "/videoMonitor", name: "videoMonitor", - meta: { nav: 23 }, + meta: { nav: 309 }, component: () => - import(/* webpackChunkName: "videoMonitor" */ "../views/videoMonitor.vue"), - }, - - + import( + /* webpackChunkName: "videoMonitor" */ "../views/videoMonitor.vue" + ), + }, + { + path: "/safetyCheck", + name: "safetyCheck", + meta: { nav: 301 }, + component: () => + import(/* webpackChunkName: "safetyCheck" */ "../views/safetyCheck.vue"), + }, ]; const router = new VueRouter({ mode: "hash", diff --git a/yanzhu-bigscreen/src/utils/request.js b/yanzhu-bigscreen/src/utils/request.js index 812e5c20..ba7eefa3 100644 --- a/yanzhu-bigscreen/src/utils/request.js +++ b/yanzhu-bigscreen/src/utils/request.js @@ -1,160 +1,199 @@ -import axios from 'axios' -import { Notification, MessageBox, Message, Loading } from 'element-ui' -import { getToken } from '@/utils/auth' -import errorCode from '@/utils/errorCode' +import axios from "axios"; +import { Notification, MessageBox, Message, Loading } from "element-ui"; +import { getToken } from "@/utils/auth"; +import errorCode from "@/utils/errorCode"; import { tansParams, blobValidate } from "@/utils/ruoyi"; -import cache from '@/plugins/cache' -import { saveAs } from 'file-saver' -import Cookies from 'js-cookie' +import cache from "@/plugins/cache"; +import { saveAs } from "file-saver"; +import Cookies from "js-cookie"; let downloadLoadingInstance; // 是否显示重新登录 export let isRelogin = { show: false }; -axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' +axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8"; // 创建axios实例 const service = axios.create({ // axios中请求配置有baseURL选项,表示请求URL公共部分 baseURL: process.env.VUE_APP_BASE_API, // 超时 - timeout: 200000 -}) + timeout: 200000, +}); // request拦截器 -service.interceptors.request.use(config => { - // 是否需要设置 token - const isToken = (config.headers || {}).isToken === false - // 是否需要防止数据重复提交 - const isRepeatSubmit = (config.headers || {}).repeatSubmit === false - if (getToken() && !isToken) { - config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 - } - config.headers["proType"]=localStorage.getItem("proType")||"0"; - // get请求映射params参数 - if (config.method === 'get' && config.params) { - let url = config.url + '?' + tansParams(config.params); - url = url.slice(0, -1); - config.params = {}; - config.url = url; - } - if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) { - const requestObj = { - url: config.url, - data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data, - time: new Date().getTime() +service.interceptors.request.use( + (config) => { + // 是否需要设置 token + const isToken = (config.headers || {}).isToken === false; + // 是否需要防止数据重复提交 + const isRepeatSubmit = (config.headers || {}).repeatSubmit === false; + if (getToken() && !isToken) { + config.headers["Authorization"] = "Bearer " + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改 } - const sessionObj = cache.session.getJSON('sessionObj') - if (sessionObj === undefined || sessionObj === null || sessionObj === '') { - cache.session.setJSON('sessionObj', requestObj) - } else { - const s_url = sessionObj.url; // 请求地址 - const s_data = sessionObj.data; // 请求数据 - const s_time = sessionObj.time; // 请求时间 - const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交 - if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { - const message = '数据正在处理,请勿重复提交'; - console.warn("--->",s_data,requestObj.data,s_url) - return Promise.reject(new Error(message)) + config.headers["proType"] = localStorage.getItem("proType") || "0"; + // get请求映射params参数 + if (config.method === "get" && config.params) { + let url = config.url + "?" + tansParams(config.params); + url = url.slice(0, -1); + config.params = {}; + config.url = url; + } + if ( + !isRepeatSubmit && + (config.method === "post" || config.method === "put") + ) { + const requestObj = { + url: config.url, + data: + typeof config.data === "object" + ? JSON.stringify(config.data) + : config.data, + time: new Date().getTime(), + }; + const sessionObj = cache.session.getJSON("sessionObj"); + if ( + sessionObj === undefined || + sessionObj === null || + sessionObj === "" + ) { + cache.session.setJSON("sessionObj", requestObj); } else { - cache.session.setJSON('sessionObj', requestObj) + const s_url = sessionObj.url; // 请求地址 + const s_data = sessionObj.data; // 请求数据 + const s_time = sessionObj.time; // 请求时间 + const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交 + if ( + s_data === requestObj.data && + requestObj.time - s_time < interval && + s_url === requestObj.url + ) { + const message = "数据正在处理,请勿重复提交"; + console.warn("--->", s_data, requestObj.data, s_url); + return Promise.reject(new Error(message)); + } else { + cache.session.setJSON("sessionObj", requestObj); + } } } + return config; + }, + (error) => { + console.log(error); + Promise.reject(error); } - return config -}, error => { - console.log(error) - Promise.reject(error) -}) +); // 响应拦截器 -service.interceptors.response.use(res => { +service.interceptors.response.use( + (res) => { // 未设置状态码则默认成功状态 const code = res.data.code || 200; // 获取错误信息 - const msg = errorCode[code] || res.data.msg || errorCode['default'] + const msg = errorCode[code] || res.data.msg || errorCode["default"]; // 二进制数据则直接返回 - if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { - return res.data + if ( + res.request.responseType === "blob" || + res.request.responseType === "arraybuffer" + ) { + return res.data; } if (code === 401) { if (!isRelogin.show) { isRelogin.show = true; - MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => { - isRelogin.show = false; - if(location.href.indexOf("localhost")>=0){ - //location.href = `/#/login?redirect=${encodeURIComponent("/xdbs/")}`; - location.href=`http://localhost/#/login?redirect=${encodeURI('http://localhost:3000/xdbs/')}` - }else{ - location.href = window.XDAPP+`#/login?redirect=${encodeURIComponent(window.XDBSAPP)}`; + MessageBox.confirm( + "登录状态已过期,您可以继续留在该页面,或者重新登录", + "系统提示", + { + confirmButtonText: "重新登录", + cancelButtonText: "取消", + type: "warning", } - }).catch(() => { - isRelogin.show = false; - }); - } - return Promise.reject('error') + ) + .then(() => { + isRelogin.show = false; + if (location.href.indexOf("localhost") >= 0) { + //location.href = `/#/login?redirect=${encodeURIComponent("/xdbs/")}`; + location.href = `http://localhost/#/login?redirect=${encodeURI( + "http://localhost:3000/xdbs/" + )}`; + } else { + location.href = + window.XDAPP + + `#/login?redirect=${encodeURIComponent(window.XDBSAPP)}`; + } + }) + .catch(() => { + isRelogin.show = false; + }); + } + return Promise.reject("error"); } else if (code === 500) { - if(msg.indexOf('重复提交')==-1){ - Message({ message: msg, type: 'error' }) + if (msg.indexOf("重复提交") == -1) { + Message({ message: msg, type: "error" }); } - return Promise.reject(new Error(msg)) + return Promise.reject(new Error(msg)); } else if (code === 601) { - if(msg.indexOf('重复提交')==-1){ - Message({ message: msg, type: 'warning' }) + if (msg.indexOf("重复提交") == -1) { + Message({ message: msg, type: "warning" }); } - return Promise.reject('error') + return Promise.reject("error"); } else if (code !== 200) { - if(msg.indexOf('重复提交')==-1){ - Notification.error({ title: msg }) + if (msg.indexOf("重复提交") == -1) { + Notification.error({ title: msg }); } - return Promise.reject('error') + return Promise.reject("error"); } else { - return res.data + return res.data; } }, - error => { - console.log('err' + error) + (error) => { + console.log("err" + error); let { message } = error; if (message == "Network Error") { message = "后端接口连接异常"; - } else if (message.includes("Request failed with status code")) { + } else if (message.includes("Request failed with status code")) { message = "系统接口" + message.substr(message.length - 3) + "异常"; } - if(message.indexOf('重复提交')==-1){ - Message({ message: message, type: 'error', duration: 5 * 1000 }) + if (message.indexOf("重复提交") == -1) { + Message({ message: message, type: "error", duration: 5 * 1000 }); } - return Promise.reject(error) + return Promise.reject(error); } -) +); // 通用下载方法 -export function download(url, params, filename, config={}) { - downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", }) +export function download(url, params, filename, config = {}) { + downloadLoadingInstance = Loading.service({ + text: "正在下载数据,请稍候", + spinner: "el-icon-loading", + background: "rgba(0, 0, 0, 0.7)", + }); return axios({ - url:url, - method:"get", - params:params||{}, - responseType: 'blob', - ...config - }).then(async ({data}) => { - - const isBlob = blobValidate(data); - if (isBlob) { - const blob = new Blob([data]) - saveAs(blob, filename) - } else { - const resText = await data.text(); - const rspObj = JSON.parse(resText); - const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] - Message.error(errMsg); - } - downloadLoadingInstance.close(); - }).catch((r) => { - console.error(r) - Message.error('下载文件出现错误,请联系管理员!') - downloadLoadingInstance.close(); + url: url, + method: "get", + params: params || {}, + responseType: "blob", + ...config, }) + .then(async ({ data }) => { + const isBlob = blobValidate(data); + if (isBlob) { + const blob = new Blob([data]); + saveAs(blob, filename); + } else { + const resText = await data.text(); + const rspObj = JSON.parse(resText); + const errMsg = + errorCode[rspObj.code] || rspObj.msg || errorCode["default"]; + Message.error(errMsg); + } + downloadLoadingInstance.close(); + }) + .catch((r) => { + console.error(r); + Message.error("下载文件出现错误,请联系管理员!"); + downloadLoadingInstance.close(); + }); } - - -export { axios,service} -export default service +export { axios, service }; +export default service; diff --git a/yanzhu-bigscreen/src/views/greenCarbon.vue b/yanzhu-bigscreen/src/views/greenCarbon.vue index 0b81f845..b1b4fabb 100644 --- a/yanzhu-bigscreen/src/views/greenCarbon.vue +++ b/yanzhu-bigscreen/src/views/greenCarbon.vue @@ -51,9 +51,9 @@ </el-col> <el-col :span="8"> <div class="chart-bg power-chart2"> - <div class="chart-proc" :style="'height:'+leftPowerData[3]+'%'"></div> + <div class="chart-proc" :style="'height:' + leftPowerData[3] + '%'"></div> <div class="data-top"> - <div class="chart-data led-number">{{ (leftPowerData[1]/1000.0).toFixed(1) }}</div> + <div class="chart-data led-number">{{ (leftPowerData[1] / 1000.0).toFixed(1) }}</div> <div class="chart-unit">(T CO₂)</div> </div> <div class="data-bottom"> @@ -63,9 +63,9 @@ </el-col> <el-col :span="8"> <div class="chart-bg power-chart3"> - <div class="chart-proc" :style="'height:'+leftPowerData[4]+'%;'"></div> + <div class="chart-proc" :style="'height:' + leftPowerData[4] + '%;'"></div> <div class="data-top"> - <div class="chart-data led-number">{{ (leftPowerData[2]/1000.0).toFixed(1) }}</div> + <div class="chart-data led-number">{{ (leftPowerData[2] / 1000.0).toFixed(1) }}</div> <div class="chart-unit">(T CO₂)</div> </div> <div class="data-bottom"> @@ -87,7 +87,7 @@ 碳排放预估总量(T CO₂) </div> <div class="td-number"> - <people-number :number="(totalData[0]/1000.0).toFixed(1)" unit=""></people-number> + <people-number :number="(totalData[0] / 1000.0).toFixed(1)" unit=""></people-number> </div> </div> </el-col> @@ -98,7 +98,7 @@ 碳排放监测累计总量(T CO₂) </div> <div class="td-number"> - <people-number :number="(totalData[1]/1000.0).toFixed(1)" unit=""></people-number> + <people-number :number="(totalData[1] / 1000.0).toFixed(1)" unit=""></people-number> </div> </div> </el-col> @@ -109,7 +109,7 @@ 当月碳排放监测量(T CO₂) </div> <div class="td-number"> - <people-number :number="(totalData[2]/1000.0).toFixed(1)" unit=""></people-number> + <people-number :number="(totalData[2] / 1000.0).toFixed(1)" unit=""></people-number> </div> </div> </el-col> @@ -167,8 +167,8 @@ export default { curMonthData: [], yearMonthData: {}, leftOilData: [0, 0, 0, 0], - leftPowerData:[0,0,0,40,60], - totalData:[0,0,0], + leftPowerData: [0, 0, 0, 40, 60], + totalData: [0, 0, 0], } }, mounted() { @@ -232,19 +232,19 @@ export default { (Math.round(tmps[0].sumEstimateValue / 10000) + 1) * 10, ] : [0, 0, 0, 0]; tmps = this.allData.filter(it => it.factorType == 3); - this.leftPowerData=tmps.length>0?[ + this.leftPowerData = tmps.length > 0 ? [ tmps[0].practicalValue, tmps[0].sumPracticalValue, tmps[0].sumEmissionReduction, - tmps[0].sumEstimateValue==0?0:tmps[0].sumPracticalValue*100/tmps[0].sumEstimateValue, - tmps[0].sumEstimateValue==0?0:tmps[0].sumEmissionReduction*100/tmps[0].sumEstimateValue, + tmps[0].sumEstimateValue == 0 ? 0 : tmps[0].sumPracticalValue * 100 / tmps[0].sumEstimateValue, + tmps[0].sumEstimateValue == 0 ? 0 : tmps[0].sumEmissionReduction * 100 / tmps[0].sumEstimateValue, - ]:[0,0,0,0,0]; + ] : [0, 0, 0, 0, 0]; tmps = this.allData.filter(it => it.factorType == 0); - this.totalData[0]=tmps.length>0?tmps[0].sumEstimateValue:0; - this.totalData[1]=tmps.length>0?tmps[0].sumPracticalValue:0; - tmps=this.curMonthData.filter(it=>it.factorType==0); - this.totalData[2]=tmps.length>0?tmps[0].emissionReduction:0 + this.totalData[0] = tmps.length > 0 ? tmps[0].sumEstimateValue : 0; + this.totalData[1] = tmps.length > 0 ? tmps[0].sumPracticalValue : 0; + tmps = this.curMonthData.filter(it => it.factorType == 0); + this.totalData[2] = tmps.length > 0 ? tmps[0].emissionReduction : 0 this.chartKey++; }); }, @@ -467,19 +467,19 @@ export default { return option; }, renderChart4() { - let sum=(objs)=>{ - let res=0; - objs.forEach(it=>{ - res+=(it||0); + let sum = (objs) => { + let res = 0; + objs.forEach(it => { + res += (it || 0); }); return res; } let is1K = this.$dpi() == "1K"; let is2K = this.$dpi() == "2K"; - let datas=[0,0,0]; - datas[0]=this.yearMonthData.buildData?sum(this.yearMonthData.buildData.emissionReduction.datas):0; - datas[1]=this.yearMonthData.oilData?sum(this.yearMonthData.oilData.emissionReduction.datas):0; - datas[2]=this.yearMonthData.powerData?sum(this.yearMonthData.powerData.emissionReduction.datas):0; + let datas = [0, 0, 0]; + datas[0] = this.yearMonthData.buildData ? sum(this.yearMonthData.buildData.emissionReduction.datas) : 0; + datas[1] = this.yearMonthData.oilData ? sum(this.yearMonthData.oilData.emissionReduction.datas) : 0; + datas[2] = this.yearMonthData.powerData ? sum(this.yearMonthData.powerData.emissionReduction.datas) : 0; let option = { legend: { @@ -555,7 +555,7 @@ export default { }, tooltip: { trigger: "axis", - valueFormatter: (v) => { return v?v:'- ' + 'T CO₂' }, + valueFormatter: (v) => { return v ? v : '- ' + 'T CO₂' }, textStyle: { fontSize: is1K ? 12 : is2K ? 14 : 24 }, @@ -576,7 +576,7 @@ export default { { type: "category", boundaryGap: false, - data: this.yearMonthData?.totalData?.emissionReduction?.titles||[], + data: this.yearMonthData?.totalData?.emissionReduction?.titles || [], axisLabel: { fontSize: is1K ? 12 : is2K ? 14 : 24, color: "#a2c8f9" @@ -603,7 +603,7 @@ export default { }, }, ], - series: [ + series: [ { name: '碳预估', type: "line", @@ -619,7 +619,7 @@ export default { itemStyle: { normal: { areaStyle: { type: "default", color: "#7ddff2", opacity: 0.1 } }, }, - data: this.yearMonthData?.totalData?.estimate?.datas||[], + data: this.yearMonthData?.totalData?.estimate?.datas || [], }, { name: '碳排放', @@ -636,7 +636,7 @@ export default { itemStyle: { normal: { areaStyle: { type: "default", color: "#006594", opacity: 0.1 } }, }, - data: this.yearMonthData?.totalData?.practical?.datas||[], + data: this.yearMonthData?.totalData?.practical?.datas || [], }, { name: '碳减排', @@ -653,7 +653,7 @@ export default { itemStyle: { normal: { areaStyle: { type: "default", color: "#7db800", opacity: 0.1 } }, }, - data: this.yearMonthData?.totalData?.emissionReduction?.datas||[], + data: this.yearMonthData?.totalData?.emissionReduction?.datas || [], }, ], }; @@ -672,7 +672,7 @@ export default { }, tooltip: { trigger: "axis", - valueFormatter: (v) => { return v?v:' - ' + 'T CO₂' }, + valueFormatter: (v) => { return v ? v : ' - ' + 'T CO₂' }, textStyle: { fontSize: is1K ? 12 : is2K ? 14 : 24 }, @@ -693,7 +693,7 @@ export default { { type: "category", boundaryGap: false, - data: this.yearMonthData?.buildData?.emissionReduction?.titles||[], + data: this.yearMonthData?.buildData?.emissionReduction?.titles || [], axisLabel: { fontSize: is1K ? 12 : is2K ? 14 : 24, color: "#a2c8f9" @@ -720,7 +720,7 @@ export default { }, }, ], - series: [ + series: [ { name: '碳预估', type: "bar", @@ -736,7 +736,7 @@ export default { itemStyle: { normal: { areaStyle: { type: "default", color: "#7ddff2", opacity: 0.1 } }, }, - data:this.yearMonthData?.buildData?.estimate?.datas||[], + data: this.yearMonthData?.buildData?.estimate?.datas || [], }, { name: '碳排放', @@ -753,7 +753,7 @@ export default { itemStyle: { normal: { areaStyle: { type: "default", color: "#006594", opacity: 0.1 } }, }, - data: this.yearMonthData?.buildData?.practical?.datas||[], + data: this.yearMonthData?.buildData?.practical?.datas || [], }, { name: '碳减排', @@ -770,10 +770,11 @@ export default { itemStyle: { normal: { areaStyle: { type: "default", color: "#7db800", opacity: 0.1 } }, }, - data: this.yearMonthData?.buildData?.emissionReduction?.datas||[], + data: this.yearMonthData?.buildData?.emissionReduction?.datas || [], }, ], }; + console.log(option) return option; }, renderChart7() { @@ -789,7 +790,7 @@ export default { }, tooltip: { trigger: "axis", - valueFormatter: (v) => { return v?v:' - ' + 'T CO₂' }, + valueFormatter: (v) => { return v ? v : ' - ' + 'T CO₂' }, textStyle: { fontSize: is1K ? 12 : is2K ? 14 : 24 }, @@ -810,7 +811,7 @@ export default { { type: "category", boundaryGap: false, - data: this.yearMonthData?.oilData?.emissionReduction?.titles||[], + data: this.yearMonthData?.oilData?.emissionReduction?.titles || [], axisLabel: { fontSize: is1K ? 12 : is2K ? 14 : 24, color: "#a2c8f9" @@ -837,7 +838,7 @@ export default { }, }, ], - series: [ + series: [ { name: '碳预估', type: "line", @@ -853,7 +854,7 @@ export default { itemStyle: { normal: { areaStyle: { type: "default", color: "#7ddff2", opacity: 0.1 } }, }, - data: this.yearMonthData?.oilData?.estimate?.datas||[], + data: this.yearMonthData?.oilData?.estimate?.datas || [], }, { name: '碳排放', @@ -870,7 +871,7 @@ export default { itemStyle: { normal: { areaStyle: { type: "default", color: "#006594", opacity: 0.1 } }, }, - data: this.yearMonthData?.oilData?.practical?.datas||[], + data: this.yearMonthData?.oilData?.practical?.datas || [], }, { name: '碳减排', @@ -887,7 +888,7 @@ export default { itemStyle: { normal: { areaStyle: { type: "default", color: "#7db800", opacity: 0.1 } }, }, - data: this.yearMonthData?.oilData?.emissionReduction?.datas||[], + data: this.yearMonthData?.oilData?.emissionReduction?.datas || [], }, ], }; @@ -906,7 +907,7 @@ export default { }, tooltip: { trigger: "axis", - valueFormatter: (v) => { return v?v:' - ' + 'T CO₂' }, + valueFormatter: (v) => { return v ? v : ' - ' + 'T CO₂' }, textStyle: { fontSize: is1K ? 12 : is2K ? 14 : 24 }, @@ -927,7 +928,7 @@ export default { { type: "category", boundaryGap: false, - data: this.yearMonthData?.powerData?.emissionReduction?.titles||[], + data: this.yearMonthData?.powerData?.emissionReduction?.titles || [], axisLabel: { fontSize: is1K ? 12 : is2K ? 14 : 24, color: "#a2c8f9" @@ -954,7 +955,7 @@ export default { }, }, ], - series: [ + series: [ { name: '碳预估', type: "bar", @@ -970,7 +971,7 @@ export default { itemStyle: { normal: { areaStyle: { type: "default", color: "#7ddff2", opacity: 0.1 } }, }, - data:this.yearMonthData?.powerData?.estimate?.datas||[], + data: this.yearMonthData?.powerData?.estimate?.datas || [], }, { name: '碳排放', @@ -987,7 +988,7 @@ export default { itemStyle: { normal: { areaStyle: { type: "default", color: "#006594", opacity: 0.1 } }, }, - data: this.yearMonthData?.powerData?.practical?.datas||[], + data: this.yearMonthData?.powerData?.practical?.datas || [], }, { name: '碳减排', @@ -1004,7 +1005,7 @@ export default { itemStyle: { normal: { areaStyle: { type: "default", color: "#7db800", opacity: 0.1 } }, }, - data: this.yearMonthData?.powerData?.emissionReduction?.datas||[], + data: this.yearMonthData?.powerData?.emissionReduction?.datas || [], }, ], }; diff --git a/yanzhu-bigscreen/src/views/init.js b/yanzhu-bigscreen/src/views/init.js index 54ce7f96..b56dd5b4 100644 --- a/yanzhu-bigscreen/src/views/init.js +++ b/yanzhu-bigscreen/src/views/init.js @@ -1,88 +1,99 @@ -import Vue from 'vue' -import Api from '../api/index' -import dayjs from 'dayjs' -import './style/index.less' -import dayfilter from '@/utils/dayfilter' -import {tryToJson} from '../utils/tools' -import { Loading } from 'element-ui'; +import Vue from "vue"; +import Api from "../api/index"; +import dayjs from "dayjs"; +import "./style/index.less"; +import dayfilter from "@/utils/dayfilter"; +import { tryToJson } from "../utils/tools"; +import { Loading } from "element-ui"; -import moduleOne11 from '../components/module/module-one-1-1.vue' -import moduleOne12 from '../components/module/module-one-1-2.vue' -import moduleOne13 from '../components/module/module-one-1-3.vue' -import moduleOne21 from '../components/module/module-one-2-1.vue' -import moduleOne22 from '../components/module/module-one-2-2.vue' -import moduleOne23 from '../components/module/module-one-2-3.vue' -import peopleNumber from '@/components/people-number.vue' -import dictTag from '@/components/DictTag/index.vue' -import MyDialog from '@/components/MyDialog.vue' -import MyChart from '@/components/MyChart.vue' +import moduleOne11 from "../components/module/module-one-1-1.vue"; +import moduleOne12 from "../components/module/module-one-1-2.vue"; +import moduleOne13 from "../components/module/module-one-1-3.vue"; +import moduleOne21 from "../components/module/module-one-2-1.vue"; +import moduleOne22 from "../components/module/module-one-2-2.vue"; +import moduleOne23 from "../components/module/module-one-2-3.vue"; +import moduleOne31 from "../components/module/module-one-3-1.vue"; +import peopleNumber from "@/components/people-number.vue"; +import dictTag from "@/components/DictTag/index.vue"; +import MyDialog from "@/components/MyDialog.vue"; +import MyChart from "@/components/MyChart.vue"; +import projectOverviewChart from "@/components/project-overview-chart.vue"; //import projectOverviewChart from '../components/project-overview-chart.vue' //import peopleNumber from '../components/people-number.vue' -import header from '../components/header.vue' +import header from "../components/header.vue"; Loading.install(Vue); //H265Player.install(Vue); dayfilter(Vue); -const vue=new Vue(); -Vue.component("screen-header",header) -Vue.component("module-one-1-1",moduleOne11) -Vue.component("module-one-1-2",moduleOne12) -Vue.component("module-one-1-3",moduleOne13) -Vue.component("module-one-2-1",moduleOne21) -Vue.component("module-one-2-2",moduleOne22) -Vue.component("module-one-2-3",moduleOne23) -Vue.component("people-number",peopleNumber) -Vue.component("my-chart",MyChart) -Vue.component("dict-tag",dictTag) -Vue.component("MyDialog",MyDialog) -Vue.prototype.$bus=new Vue(); +const vue = new Vue(); +Vue.component("screen-header", header); +Vue.component("module-one-1-1", moduleOne11); +Vue.component("module-one-1-2", moduleOne12); +Vue.component("module-one-1-3", moduleOne13); +Vue.component("module-one-2-1", moduleOne21); +Vue.component("module-one-2-2", moduleOne22); +Vue.component("module-one-2-3", moduleOne23); +Vue.component("module-one-3-1", moduleOne31); +Vue.component("people-number", peopleNumber); +Vue.component("my-chart", MyChart); +Vue.component("dict-tag", dictTag); +Vue.component("MyDialog", MyDialog); +Vue.component("project-overview-chart", projectOverviewChart); +Vue.prototype.$bus = new Vue(); //Vue.component("people-number",peopleNumber) //Vue.component("project-overview-chart",projectOverviewChart) -Vue.prototype.$api=Api; -Vue.prototype.$bus=vue; -Vue.prototype.$apiPath=process.env.VUE_APP_BASE_API -Vue.prototype.$dt=dayjs; -Vue.prototype.$tryToJson=tryToJson -Vue.prototype.$toggleFullScreen=(el)=>{ - if(document.fullscreenElement==el){ - let screen = document.cancelFullScreen || document.webkitCancelFullScreen || document.mozCancelFullScreen || document.exitFullScreen - if (typeof screen != "undefined" && screen) { - screen.call(document); - return; - } - - }else{ - let screen = el.requestFullScreen || el.webkitRequestFullScreen || el.mozRequestFullScreen || el.msRequestFullScreen - if (typeof screen != "undefined" && screen) { - screen.call(el); - return; - } +Vue.prototype.$api = Api; +Vue.prototype.$bus = vue; +Vue.prototype.$apiPath = process.env.VUE_APP_BASE_API; +Vue.prototype.$dt = dayjs; +Vue.prototype.$tryToJson = tryToJson; +Vue.prototype.$toggleFullScreen = (el) => { + if (document.fullscreenElement == el) { + let screen = + document.cancelFullScreen || + document.webkitCancelFullScreen || + document.mozCancelFullScreen || + document.exitFullScreen; + if (typeof screen != "undefined" && screen) { + screen.call(document); + return; } -} -Vue.prototype.$dpi=()=>{ - let w=document.querySelector(".main-app").clientWidth; - return w>2561?"4K":w<1920?"1K":"2K"; -} -Vue.filter('toDate',d=>{ - return dayjs(d).format("YYYY-MM-DD") -}); -Vue.filter('toDateTime',d=>{ - return dayjs(d).format("YYYY-MM-DD HH:mm:ss") -}); -Vue.filter('toTime',d=>{ - return dayjs(d).format("HH:mm:ss") -}); -window.__isfull__=false; -window.fullscreenInterval=setInterval(()=>{ - if(document.fullscreenElement){ - if(!window.__isfull__){ - vue.$emit("fullscreen",true); - window.__isfull__=true; - } - }else{ - if(window.__isfull__){ - vue.$emit("fullscreen",false); - window.__isfull__=false; - } + } else { + let screen = + el.requestFullScreen || + el.webkitRequestFullScreen || + el.mozRequestFullScreen || + el.msRequestFullScreen; + if (typeof screen != "undefined" && screen) { + screen.call(el); + return; } -},500); -window.xdcaches={}; + } +}; +Vue.prototype.$dpi = () => { + let w = document.querySelector(".main-app").clientWidth; + return w > 2561 ? "4K" : w < 1920 ? "1K" : "2K"; +}; +Vue.filter("toDate", (d) => { + return dayjs(d).format("YYYY-MM-DD"); +}); +Vue.filter("toDateTime", (d) => { + return dayjs(d).format("YYYY-MM-DD HH:mm:ss"); +}); +Vue.filter("toTime", (d) => { + return dayjs(d).format("HH:mm:ss"); +}); +window.__isfull__ = false; +window.fullscreenInterval = setInterval(() => { + if (document.fullscreenElement) { + if (!window.__isfull__) { + vue.$emit("fullscreen", true); + window.__isfull__ = true; + } + } else { + if (window.__isfull__) { + vue.$emit("fullscreen", false); + window.__isfull__ = false; + } + } +}, 500); +window.xdcaches = {}; diff --git a/yanzhu-bigscreen/src/views/projectDetail.vue b/yanzhu-bigscreen/src/views/projectDetail.vue index bc41a961..161a998d 100644 --- a/yanzhu-bigscreen/src/views/projectDetail.vue +++ b/yanzhu-bigscreen/src/views/projectDetail.vue @@ -275,7 +275,7 @@ </p> <div> <span class="led-number">{{ selProject.scheduledStartTime | toDate - }}</span> + }}</span> </div> </div> </div> @@ -291,7 +291,7 @@ </p> <div> <span class="led-number">{{ selProject.plannedCompletionTime | toDate - }}</span> + }}</span> </div> </div> </div> @@ -306,7 +306,7 @@ </p> <div> <span class="led-number">{{ selProject.actualOperatingTime | toDate - }}</span> + }}</span> </div> </div> </div> @@ -320,7 +320,8 @@ 合同工期 </p> <div> - <span class="led-number">{{ selProject.projectTimeLimit || '' }}</span> 天 + <span class="led-number">{{ selProject.projectTimeLimit || '' }}</span> + 天 </div> </div> </div> @@ -490,7 +491,7 @@ <div class="wi-label">当前风向</div> <div class="wi-data-unit"> <span class="wi-txt">{{ weatherInfo.windDirection }}{{ weatherInfo.windScale - }}</span> + }}</span> </div> </div> </el-col> @@ -854,7 +855,7 @@ export default { } .led-number { - font-size: 40px; + font-size: 36px; } } } @@ -1150,7 +1151,7 @@ export default { .led-number { - font-size: 50px; + font-size: 48px; } } } @@ -1442,7 +1443,7 @@ export default { font-size: 30px; .led-number { - font-size: 70px; + font-size: 60px; } } } @@ -1454,6 +1455,7 @@ export default { .prj-img-list { height: calc(100% - 190px); + .prj-img-nav { .prj-img-nav-item { line-height: 60px; @@ -1462,6 +1464,7 @@ export default { font-size: 30px; } } + .el-carousel { height: 100%; diff --git a/yanzhu-bigscreen/src/views/safetyCheck.vue b/yanzhu-bigscreen/src/views/safetyCheck.vue new file mode 100644 index 00000000..187685f0 --- /dev/null +++ b/yanzhu-bigscreen/src/views/safetyCheck.vue @@ -0,0 +1,505 @@ +<template> + <div class="project-safety-check main-page"> + <el-col :span="6" class="h100"> + <module-one-1-1 label="安全隐患排查" class="chart1-module"> + <el-col :span="12" v-for="(it, idx) in chart1Data" :key="idx"> + <div + class="equipment-list-min equipment-list-min_div quality-target-index-min quality-target-index-min_div"> + + <div class="czz-number-img czz-number-img-blue"> + <svg-icon icon-class="notesearch"></svg-icon> + </div> + <div> + <div class="equipment-list-data equipment-list-data_div_top"> + <span>{{ it.name }}</span> + </div> + <div class="equipment-list-data equipment-list-data_div_bottom"> + <span class="sp-data">{{ it.value || 0 }}</span><span class="sp-unit">条</span> + </div> + </div> + </div> + </el-col> + </module-one-1-1> + <module-one-2-1 label="日常巡检"> + <div class="div-item-chart"> + <div class="data-item-chart"> + <div class="total-info">{{ item1Data.total }}<br /> + <span class="sp-label">问题总数</span> + </div> + <div class="chart-gif chart-overview-gif"></div> + <my-chart :key="itemChartKey1" id="project-safety-check-item1" width="100%" height="100%" + :render="o => renderDataItem1(1)"></my-chart> + </div> + {{ item1Data.infos }} + </div> + </module-one-2-1> + </el-col> + <el-col :span="18" class="h100"> + <module-one-1-3 label="隐患类别统计"> + <my-chart :key="chartKey2" id="project-safety-check-chart2" width="100%" height="100%" + :render="renderChart2"></my-chart> + </module-one-1-3> + <el-row class="el-right"> + <el-col :span="8"> + <module-one-2-1 label="周检"></module-one-2-1> + </el-col> + <el-col :span="8"> + <module-one-2-1 label="月检"></module-one-2-1> + </el-col> + <el-col :span="8"> + <module-one-2-1 label="转型检查"></module-one-2-1> + </el-col> + </el-row> + </el-col> + </div> +</template> + +<script> +export default { + data() { + return { + chartKey2: 0, + itemChartKey1: 0, + dpi: '', + selProject: null, + legendOpt1: { + icon: "rect", + textStyle: { + color: "#c3dbfd", + fontSize: 14, + rich: { + name: { + color: "#c3dbfd", + padding: [0, 20, 0, 0], + }, + percent: { + color: "#4676FD" + }, + }, + }, + }, + overviewText: '问题数', + chart1Data: [], + chart2Data: [], + item1Data: { + total: 0, + datas: [], + infos: [], + }, + item2Data: { + total: 0, + datas: [], + infos: [], + }, + item3Data: { + total: 0, + datas: [], + infos: [], + }, + item4Data: { + total: 0, + datas: [], + infos: [], + } + } + }, + mounted() { + window.safetyApp = this; + this.$store.dispatch('ChangeNav', 301); + this.$bus.$on('projectChange', prj => { + this.selProject = prj; + this.init(); + }); + this.selProject = this.$store.getters.selProject; + this.init(); + this.dpi = this.$dpi(); + window.addEventListener("resize", () => { + if (this.dpi != this.$dpi()) { + this.dpi = this.$dpi(); + this.chartKey++; + } + }); + }, + methods: { + init() { + if (!this.selProject) { + return; + } + let postData = { + projectId: this.selProject.id, + comId: this.selProject.comId + }; + let ajaxs = [ + this.$api.safety.groupByProblemType(postData), + this.$api.safety.groupByDangerType(postData), + this.$api.safety.listCountForBG({ ...postData, problemType: 1, infoType: 0 }), + this.$api.safety.listForBG({ ...postData, problemType: 1, infoType: 0 }), + this.$api.safety.listCountForBG({ ...postData, problemType: 2, infoType: 0 }), + this.$api.safety.listForBG({ ...postData, problemType: 2, infoType: 0 }), + this.$api.safety.listCountForBG({ ...postData, problemType: 3, infoType: 0 }), + this.$api.safety.listForBG({ ...postData, problemType: 3, infoType: 0 }), + this.$api.safety.listCountForBG({ ...postData, problemType: 4, infoType: 0 }), + this.$api.safety.listForBG({ ...postData, problemType: 4, infoType: 0 }), + ]; + this.$api.http.all(ajaxs).then(res => { + this.chart1Data = (res[0].data || []).map(it => { + return { + id: it.nickedInfo, + value: it.id, + name: it.problemType, + data: it + } + }); + this.chart2Data = (res[1].data || []).map(it => { + return { + id: it.nickedInfo, + name: it.dangerType, + value1: it.id, + value2: it.comId, + } + }); + this.showChart1();//安全隐患排查 + this.showChart2();//隐患类别统计 + this.makeItemData(this.item1Data, res[2].data) + this.makeItemData(this.item2Data, res[4].data) + this.makeItemData(this.item3Data, res[6].data) + this.makeItemData(this.item4Data, res[8].data) + this.itemChartKey1++; + }); + }, + showChart1(n) { + + }, + showChart2() { + this.chartKey2++; + }, + makeItemData(item, res) { + let labels = ['问题总数', '待整改', '待复检', '复检驳回', '整改完成', '超时整改']; + item.total = res[0].id; + let total = res[0].id; + item.datas = []; + for (let i = 1; i < 5; i++) { + item.datas.push({ + name: labels[i], + value: res[i].id + }); + } + item.infos = []; + for (let i = 0; i < res.length; i++) { + item.infos.push({ + name: labels[i], + value: res[i].id, + percent: total == 0 ? 0 : (res[i].id / total * 100.0).toFixed(1) + }); + } + }, + renderDataItem1() { + let option = { + color: ["#71BCC4", "#EEBE47", "#5EA85D", "#5B84EB", "#E76168"], + series: [ + { + type: 'pie', + radius: ['40%', '70%'], + padAngle: 1, + itemStyle: { + borderRadius: 5 + }, emphasis: { + label: { + show: false, + } + }, + label: { + show: false + }, + + + labelLine: { + show: false + }, + data: this.item1Data.datas + } + ] + }; + console.log("--->", this.item1Data.datas) + return option; + }, + renderChart2(opt) { + let is1K = this.$dpi() == "1K"; + let is2K = this.$dpi() == "2K"; + let option = { + grid: { + left: "5%", + right: "5%", + bottom: "0%", + top: "15%", + containLabel: true, + }, + tooltip: { + trigger: "axis", + valueFormatter: (v) => { return v }, + textStyle: { + fontSize: is1K ? 12 : is2K ? 14 : 24 + }, + }, + legend: { + top: is1K ? '0%' : is2K ? '0%' : '0%', + left: 'center', + itemWidth: is1K ? 25 : is2K ? 30 : 40, + itemHeight: is1K ? 14 : is2K ? 20 : 20, + itemGap: is1K ? 20 : is2K ? 30 : 40, + textStyle: { + color: "#fff", + fontSize: is1K ? 14 : is2K ? 20 : 30, + } + }, + xAxis: [ + { + type: "category", + data: this.chart2Data.map(it => it.name.replace(/[“”]/g, "'")), + axisLabel: { + width: 60, + rotate: 15, + fontSize: is1K ? 12 : is2K ? 14 : 24, + overflow: "break", + color: "#a2c8f9" + }, + splitLine: { + lineStyle: { + opacity: 0.1 + } + } + }, + ], + yAxis: [ + { + type: "value", + minInterval: 1, + axisLabel: { + formatter: '{value}', + color: "#2ec2b3", + fontSize: is1K ? 12 : is2K ? 14 : 24 + }, + splitLine: { + lineStyle: { + opacity: 0.1 + } + }, + }, + ], + series: [ + { + name: '问题数', + type: "bar", + barGap: '0%', + barWidth: '20%', + label: { + show: true, + position: "top", + color: "#4DAAFC", + fontSize: is1K ? 12 : is2K ? 14 : 24 + }, + lineStyle: { + color: "#7ddff2", + }, + itemStyle: { + normal: { areaStyle: { type: "default", color: "#7ddff2", opacity: 0.1 } }, + }, + data: this.chart2Data.map(it => it.value1), + }, + { + name: '待改数', + type: "bar", + barGap: '0%', + barWidth: '20%', + label: { + show: true, + position: "top", + color: "#4DAAFC", + fontSize: is1K ? 12 : is2K ? 14 : 24 + }, + lineStyle: { + color: "#006594", + }, + itemStyle: { + normal: { areaStyle: { type: "default", color: "#006594", opacity: 0.1 } }, + }, + data: this.chart2Data.map(it => it.value2), + } + ], + }; + return option; + } + + } +} +</script> + +<style lang="less"> +.project-safety-check { + .screen-one-1-3 { + height: calc(33% - 20px) !important; + } + + .el-right { + height: calc(66% - 20px) !important; + + .el-col-8 { + height: 100%; + + .screen-one-2-1 { + margin: 0px 20px; + height: calc(100% - 0px) !important; + } + } + } + + .chart1-module { + .el-col-12 { + height: 50%; + width: 50%; + display: flex; + + .czz-number-img { + display: flex; + width: 80px; + height: 80px; + align-items: center; + justify-content: center; + + svg { + width: 30px !important; + height: 30px !important; + fill: #00aaff59 !important; + } + } + + .equipment-list-data_div_top { + span { + font-size: 14px; + color: #cbdaff; + font-weight: normal; + } + } + + .equipment-list-data_div_bottom { + margin-top: 10px; + + .sp-data { + font-size: 20px; + } + + .sp-unit { + font-size: 14px; + color: #cbdaff; + font-weight: normal; + } + } + } + } + + .div-item-chart { + position: relative; + height: 230px; + + .data-item-chart { + height: 230px; + width: 230px; + display: inline-block; + position: relative; + + .total-info { + position: absolute; + font-size: 20px; + top: calc(50% - 20px); + left: calc(50% - 50px); + display: inline-block; + width: 100px; + height: 40px; + text-align: center; + + .sp-label { + font-size: 14px; + } + } + + .chart-overview-gif { + width: 80px; + height: 80px; + top: calc(50% - 40px); + left: calc(50% - 40px); + } + } + + } + + @media (min-width: 1921px) and (max-width: 2560px) { + .chart1-module { + .el-col-12 { + .czz-number-img { + display: flex; + width: 100px; + height: 100px; + + svg { + width: 40px !important; + height: 40px !important; + } + } + + .equipment-list-data_div_top { + span { + font-size: 24px; + } + } + + .equipment-list-data_div_bottom { + margin-top: 20px; + + .sp-data { + font-size: 32px; + } + + .sp-unit { + font-size: 24px; + } + } + } + } + } + + @media (min-width: 2561px) { + .chart1-module { + .el-col-12 { + .czz-number-img { + display: flex; + width: 160px; + height: 160px; + + svg { + width: 60px !important; + height: 60px !important; + } + } + + .equipment-list-data_div_top { + span { + font-size: 32px; + } + } + + .equipment-list-data_div_bottom { + margin-top: 20px; + + .sp-data { + font-size: 40px; + } + + .sp-unit { + font-size: 32px; + } + } + } + } + } +} +</style> \ No newline at end of file diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/SmzSspProblemmodifyMapper.java b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/SmzSspProblemmodifyMapper.java index 8c92bd4d..fb4d6bc5 100644 --- a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/SmzSspProblemmodifyMapper.java +++ b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/SmzSspProblemmodifyMapper.java @@ -102,4 +102,11 @@ public interface SmzSspProblemmodifyMapper * @return */ public List<SmzSspProblemmodify> groupByDangerType(SmzSspProblemmodify where); + + /** + * 分组统计 用户 全部数据、待整改、待复检、整改完成、整改超时的数量 用于大屏 + * @param where + * @return + */ + public List<SmzSspProblemmodify> getListCountBG(SmzSspProblemmodify where); } diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/trouble/SmzSspProblemmodifyMapper.xml b/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/trouble/SmzSspProblemmodifyMapper.xml index d7422e9f..998ecb40 100644 --- a/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/trouble/SmzSspProblemmodifyMapper.xml +++ b/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/trouble/SmzSspProblemmodifyMapper.xml @@ -300,7 +300,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" </update> <sql id="countUserWhere"> - <if test="problemType != null and problemType != ''"> and a,problemType = #{problemType}</if> + <if test="problemType != null and problemType != ''"> and a.problemType = #{problemType}</if> <if test="dangerType != null and dangerType != ''"> and a.danger_type = #{dangerType}</if> <if test="createTime != null "> and date(a.createTime) >= date(#{createTime})</if> <if test="updateTime != null "> and date(a.updateTime) <= date(#{updateTime})</if> @@ -331,6 +331,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <include refid="countUserWhere"></include> </select> + <select id="getListCountBG" parameterType="SmzSspProblemmodify" resultMap="SmzSspProblemmodifyResult"> + select 'a' projectName, count(1) id ,'全部' remark from smz_ssp_problemmodify a where a.projectId=#{projectId} and a.comId=#{comId} and a.infoType=#{infoType} and a.isDel=0 + <include refid="countUserWhere"></include> + union + select 'b' projectName, count(1) id,'待整改' remark from smz_ssp_problemmodify a where a.projectId=#{projectId} and a.comId=#{comId} and a.infoType=#{infoType} and a.isDel=0 and a.checkState in (0) + <include refid="countUserWhere"></include> + union + select 'c' projectName, count(1) id,'待复检' remark from smz_ssp_problemmodify a where a.projectId=#{projectId} and a.comId=#{comId} and a.infoType=#{infoType} and a.isDel=0 and a.checkState in (1) + <include refid="countUserWhere"></include> + union + select 'd' projectName, count(1) id,'驳回' remark from smz_ssp_problemmodify a where a.projectId=#{projectId} and a.comId=#{comId} and a.infoType=#{infoType} and a.isDel=0 and a.checkState in (3) + <include refid="countUserWhere"></include> + union + select 'e' projectName, count(1) id,'完成' remark from smz_ssp_problemmodify a where a.projectId=#{projectId} and a.comId=#{comId} and a.infoType=#{infoType} and a.isDel=0 and a.checkState in (4) + <include refid="countUserWhere"></include> + union + select 'f' projectName, count(1) id,'整改超时' remark from smz_ssp_problemmodify a where a.projectId=#{projectId} and a.comId=#{comId} and a.infoType=#{infoType} and a.isDel=0 and a.checkState not in (4) and date(a.nickedTime) <= curdate() + <include refid="countUserWhere"></include> + </select> <select id="getWxListCount" parameterType="SmzSspProblemmodify" resultType="Map"> select ssp.checkState, count(1) as total from smz_ssp_problemmodify ssp <where> diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/SmzSspProblemmodifyController.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/SmzSspProblemmodifyController.java index 271aeb1b..aa571958 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/SmzSspProblemmodifyController.java +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/SmzSspProblemmodifyController.java @@ -338,7 +338,7 @@ public class SmzSspProblemmodifyController extends BaseController @RequiresPermissions("trouble:problemmodify:list") @GetMapping("/listCountForBG") public AjaxResult listCountForBG(SmzSspProblemmodify where){ - List<SmzSspProblemmodify> result=smzSspProblemmodifyService.getListCount(where); + List<SmzSspProblemmodify> result=smzSspProblemmodifyService.getListCountBG(where); return AjaxResult.success(result); } diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/ISmzSspProblemmodifyService.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/ISmzSspProblemmodifyService.java index 70673e59..0b5c79cb 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/ISmzSspProblemmodifyService.java +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/ISmzSspProblemmodifyService.java @@ -106,4 +106,10 @@ public interface ISmzSspProblemmodifyService */ public List<SmzSspProblemmodify> groupByDangerType(SmzSspProblemmodify where); + /** + * 分组统计 用户 全部数据、待整改、待复检、整改完成、整改超时的数量 用于大屏 + * @param where + * @return + */ + public List<SmzSspProblemmodify> getListCountBG(SmzSspProblemmodify where); } diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SmzSspAuditinfoServiceImpl.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SmzSspAuditinfoServiceImpl.java index a40f0541..e6117f43 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SmzSspAuditinfoServiceImpl.java +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SmzSspAuditinfoServiceImpl.java @@ -92,7 +92,7 @@ public class SmzSspAuditinfoServiceImpl implements ISmzSspAuditinfoService SmzSspProblemmodify smzSspProblemmodify = new SmzSspProblemmodify(); smzSspProblemmodify.setId(smzSspAuditinfo.getMainId()); // (0待审,1通过,2驳回) - //(0待整改,1待复检,2复检驳回,3复检通过) + //(0待整改,1待复检,3复检驳回,4复检通过) if("0".equals(smzSspAuditinfo.getProcessState())){ smzSspProblemmodify.setCheckState(CheckStateEnums.DFJ.getCode()); }else if("1".equals(smzSspAuditinfo.getProcessState())){ diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SmzSspProblemmodifyServiceImpl.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SmzSspProblemmodifyServiceImpl.java index 0b1af51e..ae1523d7 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SmzSspProblemmodifyServiceImpl.java +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SmzSspProblemmodifyServiceImpl.java @@ -188,5 +188,14 @@ public class SmzSspProblemmodifyServiceImpl implements ISmzSspProblemmodifyServi public List<SmzSspProblemmodify> groupByDangerType(SmzSspProblemmodify where) { return smzSspProblemmodifyMapper.groupByDangerType(where); } + /** + * 分组统计 用户 全部数据、待整改、待复检、整改完成、整改超时的数量 用于大屏 + * @param where + * @return + */ + @Override + public List<SmzSspProblemmodify> getListCountBG(SmzSspProblemmodify where) { + return smzSspProblemmodifyMapper.getListCountBG(where); + } }