dev_xd
姜玉琦 2025-03-14 00:15:25 +08:00
commit ac0c401534
18 changed files with 984 additions and 279 deletions

View File

@ -1,18 +1,19 @@
import { axios, download } from "@/utils/request";
import {axios,download} from '@/utils/request' import project from "./project";
import project from './project' import weather from "./weather";
import weather from './weather' import detail from "./detail";
import detail from './detail' import dict from "./dict";
import dict from './dict' import greenCarbon from "./greenCarbon";
import greenCarbon from './greenCarbon' import videoMonitor from "./videoMonitor";
import videoMonitor from './videoMonitor' import safety from "./safety";
export default { export default {
http:axios, http: axios,
downFile:download, downFile: download,
project, project,
weather, weather,
detail, detail,
dict, dict,
greenCarbon, greenCarbon,
videoMonitor videoMonitor,
} safety,
};

View File

@ -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,
};

View File

@ -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>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -92,7 +92,7 @@
<el-col :span="8" class="header-center"> <el-col :span="8" class="header-center">
<img class="prj-logo" :src="selProject.setting.orgLogo" <img class="prj-logo" :src="selProject.setting.orgLogo"
v-if="selProject && selProject.setting && selProject.setting.orgLogo" /> v-if="selProject && selProject.setting && selProject.setting.orgLogo" />
数字建安施工管理平台 {{ selProject?.setting?.orgName || '数字建安施工管理平台' }}
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="head-title-tab" style="display: inline-block"> <div class="head-title-tab" style="display: inline-block">
@ -203,6 +203,9 @@ export default {
case 309: case 309:
this.$router.push("/videoMonitor"); this.$router.push("/videoMonitor");
break; break;
case 301:
this.$router.push("/safetyCheck");
break;
case 4: case 4:
this.$router.push("/prjQuality"); this.$router.push("/prjQuality");
break; break;
@ -309,6 +312,7 @@ export default {
padding: 5px 40px; padding: 5px 40px;
position: relative; position: relative;
top: -8px; top: -8px;
.prj-logo { .prj-logo {
width: 40px; width: 40px;
height: 40px; height: 40px;
@ -362,12 +366,13 @@ export default {
.header-center { .header-center {
font-size: 52px !important; font-size: 52px !important;
margin-top: 10px; margin-top: 10px;
.prj-logo { .prj-logo {
width: 50px; width: 50px;
height: 50px; height: 50px;
vertical-align: middle; vertical-align: middle;
border-radius: 25px; border-radius: 25px;
} }
} }
.header-title-user-info { .header-title-user-info {

View File

@ -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>

View File

@ -10,7 +10,7 @@ const routes = [
meta: { nav: 1 }, meta: { nav: 1 },
component: () => component: () =>
import(/* webpackChunkName: "index" */ "../views/index.vue"), import(/* webpackChunkName: "index" */ "../views/index.vue"),
}, },
{ {
path: "/detail", path: "/detail",
name: "detail", name: "detail",
@ -38,23 +38,30 @@ const routes = [
meta: { nav: 23 }, meta: { nav: 23 },
component: () => component: () =>
import(/* webpackChunkName: "progress" */ "../views/projectProgress.vue"), import(/* webpackChunkName: "progress" */ "../views/projectProgress.vue"),
}, },
{ {
path: "/greenCarbon", path: "/greenCarbon",
name: "greenCarbon", name: "greenCarbon",
meta: { nav: 23 }, meta: { nav: 23 },
component: () => component: () =>
import(/* webpackChunkName: "progress" */ "../views/greenCarbon.vue"), import(/* webpackChunkName: "progress" */ "../views/greenCarbon.vue"),
}, },
{ {
path: "/videoMonitor", path: "/videoMonitor",
name: "videoMonitor", name: "videoMonitor",
meta: { nav: 23 }, meta: { nav: 309 },
component: () => 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({ const router = new VueRouter({
mode: "hash", mode: "hash",

View File

@ -1,160 +1,199 @@
import axios from 'axios' import axios from "axios";
import { Notification, MessageBox, Message, Loading } from 'element-ui' import { Notification, MessageBox, Message, Loading } from "element-ui";
import { getToken } from '@/utils/auth' import { getToken } from "@/utils/auth";
import errorCode from '@/utils/errorCode' import errorCode from "@/utils/errorCode";
import { tansParams, blobValidate } from "@/utils/ruoyi"; import { tansParams, blobValidate } from "@/utils/ruoyi";
import cache from '@/plugins/cache' import cache from "@/plugins/cache";
import { saveAs } from 'file-saver' import { saveAs } from "file-saver";
import Cookies from 'js-cookie' import Cookies from "js-cookie";
let downloadLoadingInstance; let downloadLoadingInstance;
// 是否显示重新登录 // 是否显示重新登录
export let isRelogin = { show: false }; 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实例 // 创建axios实例
const service = axios.create({ const service = axios.create({
// axios中请求配置有baseURL选项表示请求URL公共部分 // axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API, baseURL: process.env.VUE_APP_BASE_API,
// 超时 // 超时
timeout: 200000 timeout: 200000,
}) });
// request拦截器 // request拦截器
service.interceptors.request.use(config => { service.interceptors.request.use(
// 是否需要设置 token (config) => {
const isToken = (config.headers || {}).isToken === false // 是否需要设置 token
// 是否需要防止数据重复提交 const isToken = (config.headers || {}).isToken === false;
const isRepeatSubmit = (config.headers || {}).repeatSubmit === false // 是否需要防止数据重复提交
if (getToken() && !isToken) { const isRepeatSubmit = (config.headers || {}).repeatSubmit === false;
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 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()
} }
const sessionObj = cache.session.getJSON('sessionObj') config.headers["proType"] = localStorage.getItem("proType") || "0";
if (sessionObj === undefined || sessionObj === null || sessionObj === '') { // get请求映射params参数
cache.session.setJSON('sessionObj', requestObj) if (config.method === "get" && config.params) {
} else { let url = config.url + "?" + tansParams(config.params);
const s_url = sessionObj.url; // 请求地址 url = url.slice(0, -1);
const s_data = sessionObj.data; // 请求数据 config.params = {};
const s_time = sessionObj.time; // 请求时间 config.url = url;
const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交 }
if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { if (
const message = '数据正在处理,请勿重复提交'; !isRepeatSubmit &&
console.warn("--->",s_data,requestObj.data,s_url) (config.method === "post" || config.method === "put")
return Promise.reject(new Error(message)) ) {
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 { } 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 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') { if (
return res.data res.request.responseType === "blob" ||
res.request.responseType === "arraybuffer"
) {
return res.data;
} }
if (code === 401) { if (code === 401) {
if (!isRelogin.show) { if (!isRelogin.show) {
isRelogin.show = true; isRelogin.show = true;
MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => { MessageBox.confirm(
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/')}` confirmButtonText: "重新登录",
}else{ cancelButtonText: "取消",
location.href = window.XDAPP+`#/login?redirect=${encodeURIComponent(window.XDBSAPP)}`; type: "warning",
} }
}).catch(() => { )
isRelogin.show = false; .then(() => {
}); isRelogin.show = false;
} if (location.href.indexOf("localhost") >= 0) {
return Promise.reject('error') //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) { } else if (code === 500) {
if(msg.indexOf('重复提交')==-1){ if (msg.indexOf("重复提交") == -1) {
Message({ message: msg, type: 'error' }) Message({ message: msg, type: "error" });
} }
return Promise.reject(new Error(msg)) return Promise.reject(new Error(msg));
} else if (code === 601) { } else if (code === 601) {
if(msg.indexOf('重复提交')==-1){ if (msg.indexOf("重复提交") == -1) {
Message({ message: msg, type: 'warning' }) Message({ message: msg, type: "warning" });
} }
return Promise.reject('error') return Promise.reject("error");
} else if (code !== 200) { } else if (code !== 200) {
if(msg.indexOf('重复提交')==-1){ if (msg.indexOf("重复提交") == -1) {
Notification.error({ title: msg }) Notification.error({ title: msg });
} }
return Promise.reject('error') return Promise.reject("error");
} else { } else {
return res.data return res.data;
} }
}, },
error => { (error) => {
console.log('err' + error) console.log("err" + error);
let { message } = error; let { message } = error;
if (message == "Network Error") { if (message == "Network Error") {
message = "后端接口连接异常"; 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) + "异常"; message = "系统接口" + message.substr(message.length - 3) + "异常";
} }
if(message.indexOf('重复提交')==-1){ if (message.indexOf("重复提交") == -1) {
Message({ message: message, type: 'error', duration: 5 * 1000 }) Message({ message: message, type: "error", duration: 5 * 1000 });
} }
return Promise.reject(error) return Promise.reject(error);
} }
) );
// 通用下载方法 // 通用下载方法
export function download(url, params, filename, config={}) { export function download(url, params, filename, config = {}) {
downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", }) downloadLoadingInstance = Loading.service({
text: "正在下载数据,请稍候",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.7)",
});
return axios({ return axios({
url:url, url: url,
method:"get", method: "get",
params:params||{}, params: params || {},
responseType: 'blob', responseType: "blob",
...config ...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();
}) })
.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

View File

@ -51,9 +51,9 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="chart-bg power-chart2"> <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="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 class="chart-unit">(T CO₂)</div>
</div> </div>
<div class="data-bottom"> <div class="data-bottom">
@ -63,9 +63,9 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="chart-bg power-chart3"> <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="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 class="chart-unit">(T CO₂)</div>
</div> </div>
<div class="data-bottom"> <div class="data-bottom">
@ -87,7 +87,7 @@
碳排放预估总量(T CO₂) 碳排放预估总量(T CO₂)
</div> </div>
<div class="td-number"> <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>
</div> </div>
</el-col> </el-col>
@ -98,7 +98,7 @@
碳排放监测累计总量(T CO₂) 碳排放监测累计总量(T CO₂)
</div> </div>
<div class="td-number"> <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>
</div> </div>
</el-col> </el-col>
@ -109,7 +109,7 @@
当月碳排放监测量(T CO₂) 当月碳排放监测量(T CO₂)
</div> </div>
<div class="td-number"> <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>
</div> </div>
</el-col> </el-col>
@ -167,8 +167,8 @@ export default {
curMonthData: [], curMonthData: [],
yearMonthData: {}, yearMonthData: {},
leftOilData: [0, 0, 0, 0], leftOilData: [0, 0, 0, 0],
leftPowerData:[0,0,0,40,60], leftPowerData: [0, 0, 0, 40, 60],
totalData:[0,0,0], totalData: [0, 0, 0],
} }
}, },
mounted() { mounted() {
@ -232,19 +232,19 @@ export default {
(Math.round(tmps[0].sumEstimateValue / 10000) + 1) * 10, (Math.round(tmps[0].sumEstimateValue / 10000) + 1) * 10,
] : [0, 0, 0, 0]; ] : [0, 0, 0, 0];
tmps = this.allData.filter(it => it.factorType == 3); tmps = this.allData.filter(it => it.factorType == 3);
this.leftPowerData=tmps.length>0?[ this.leftPowerData = tmps.length > 0 ? [
tmps[0].practicalValue, tmps[0].practicalValue,
tmps[0].sumPracticalValue, tmps[0].sumPracticalValue,
tmps[0].sumEmissionReduction, tmps[0].sumEmissionReduction,
tmps[0].sumEstimateValue==0?0:tmps[0].sumPracticalValue*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, 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); tmps = this.allData.filter(it => it.factorType == 0);
this.totalData[0]=tmps.length>0?tmps[0].sumEstimateValue:0; this.totalData[0] = tmps.length > 0 ? tmps[0].sumEstimateValue : 0;
this.totalData[1]=tmps.length>0?tmps[0].sumPracticalValue:0; this.totalData[1] = tmps.length > 0 ? tmps[0].sumPracticalValue : 0;
tmps=this.curMonthData.filter(it=>it.factorType==0); tmps = this.curMonthData.filter(it => it.factorType == 0);
this.totalData[2]=tmps.length>0?tmps[0].emissionReduction:0 this.totalData[2] = tmps.length > 0 ? tmps[0].emissionReduction : 0
this.chartKey++; this.chartKey++;
}); });
}, },
@ -467,19 +467,19 @@ export default {
return option; return option;
}, },
renderChart4() { renderChart4() {
let sum=(objs)=>{ let sum = (objs) => {
let res=0; let res = 0;
objs.forEach(it=>{ objs.forEach(it => {
res+=(it||0); res += (it || 0);
}); });
return res; return res;
} }
let is1K = this.$dpi() == "1K"; let is1K = this.$dpi() == "1K";
let is2K = this.$dpi() == "2K"; let is2K = this.$dpi() == "2K";
let datas=[0,0,0]; let datas = [0, 0, 0];
datas[0]=this.yearMonthData.buildData?sum(this.yearMonthData.buildData.emissionReduction.datas):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[1] = this.yearMonthData.oilData ? sum(this.yearMonthData.oilData.emissionReduction.datas) : 0;
datas[2]=this.yearMonthData.powerData?sum(this.yearMonthData.powerData.emissionReduction.datas):0; datas[2] = this.yearMonthData.powerData ? sum(this.yearMonthData.powerData.emissionReduction.datas) : 0;
let option = { let option = {
legend: { legend: {
@ -555,7 +555,7 @@ export default {
}, },
tooltip: { tooltip: {
trigger: "axis", trigger: "axis",
valueFormatter: (v) => { return v?v:'- ' + 'T CO₂' }, valueFormatter: (v) => { return v ? v : '- ' + 'T CO₂' },
textStyle: { textStyle: {
fontSize: is1K ? 12 : is2K ? 14 : 24 fontSize: is1K ? 12 : is2K ? 14 : 24
}, },
@ -576,7 +576,7 @@ export default {
{ {
type: "category", type: "category",
boundaryGap: false, boundaryGap: false,
data: this.yearMonthData?.totalData?.emissionReduction?.titles||[], data: this.yearMonthData?.totalData?.emissionReduction?.titles || [],
axisLabel: { axisLabel: {
fontSize: is1K ? 12 : is2K ? 14 : 24, fontSize: is1K ? 12 : is2K ? 14 : 24,
color: "#a2c8f9" color: "#a2c8f9"
@ -603,7 +603,7 @@ export default {
}, },
}, },
], ],
series: [ series: [
{ {
name: '碳预估', name: '碳预估',
type: "line", type: "line",
@ -619,7 +619,7 @@ export default {
itemStyle: { itemStyle: {
normal: { areaStyle: { type: "default", color: "#7ddff2", opacity: 0.1 } }, normal: { areaStyle: { type: "default", color: "#7ddff2", opacity: 0.1 } },
}, },
data: this.yearMonthData?.totalData?.estimate?.datas||[], data: this.yearMonthData?.totalData?.estimate?.datas || [],
}, },
{ {
name: '碳排放', name: '碳排放',
@ -636,7 +636,7 @@ export default {
itemStyle: { itemStyle: {
normal: { areaStyle: { type: "default", color: "#006594", opacity: 0.1 } }, normal: { areaStyle: { type: "default", color: "#006594", opacity: 0.1 } },
}, },
data: this.yearMonthData?.totalData?.practical?.datas||[], data: this.yearMonthData?.totalData?.practical?.datas || [],
}, },
{ {
name: '碳减排', name: '碳减排',
@ -653,7 +653,7 @@ export default {
itemStyle: { itemStyle: {
normal: { areaStyle: { type: "default", color: "#7db800", opacity: 0.1 } }, 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: { tooltip: {
trigger: "axis", trigger: "axis",
valueFormatter: (v) => { return v?v:' - ' + 'T CO₂' }, valueFormatter: (v) => { return v ? v : ' - ' + 'T CO₂' },
textStyle: { textStyle: {
fontSize: is1K ? 12 : is2K ? 14 : 24 fontSize: is1K ? 12 : is2K ? 14 : 24
}, },
@ -693,7 +693,7 @@ export default {
{ {
type: "category", type: "category",
boundaryGap: false, boundaryGap: false,
data: this.yearMonthData?.buildData?.emissionReduction?.titles||[], data: this.yearMonthData?.buildData?.emissionReduction?.titles || [],
axisLabel: { axisLabel: {
fontSize: is1K ? 12 : is2K ? 14 : 24, fontSize: is1K ? 12 : is2K ? 14 : 24,
color: "#a2c8f9" color: "#a2c8f9"
@ -720,7 +720,7 @@ export default {
}, },
}, },
], ],
series: [ series: [
{ {
name: '碳预估', name: '碳预估',
type: "bar", type: "bar",
@ -736,7 +736,7 @@ export default {
itemStyle: { itemStyle: {
normal: { areaStyle: { type: "default", color: "#7ddff2", opacity: 0.1 } }, normal: { areaStyle: { type: "default", color: "#7ddff2", opacity: 0.1 } },
}, },
data:this.yearMonthData?.buildData?.estimate?.datas||[], data: this.yearMonthData?.buildData?.estimate?.datas || [],
}, },
{ {
name: '碳排放', name: '碳排放',
@ -753,7 +753,7 @@ export default {
itemStyle: { itemStyle: {
normal: { areaStyle: { type: "default", color: "#006594", opacity: 0.1 } }, normal: { areaStyle: { type: "default", color: "#006594", opacity: 0.1 } },
}, },
data: this.yearMonthData?.buildData?.practical?.datas||[], data: this.yearMonthData?.buildData?.practical?.datas || [],
}, },
{ {
name: '碳减排', name: '碳减排',
@ -770,10 +770,11 @@ export default {
itemStyle: { itemStyle: {
normal: { areaStyle: { type: "default", color: "#7db800", opacity: 0.1 } }, 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; return option;
}, },
renderChart7() { renderChart7() {
@ -789,7 +790,7 @@ export default {
}, },
tooltip: { tooltip: {
trigger: "axis", trigger: "axis",
valueFormatter: (v) => { return v?v:' - ' + 'T CO₂' }, valueFormatter: (v) => { return v ? v : ' - ' + 'T CO₂' },
textStyle: { textStyle: {
fontSize: is1K ? 12 : is2K ? 14 : 24 fontSize: is1K ? 12 : is2K ? 14 : 24
}, },
@ -810,7 +811,7 @@ export default {
{ {
type: "category", type: "category",
boundaryGap: false, boundaryGap: false,
data: this.yearMonthData?.oilData?.emissionReduction?.titles||[], data: this.yearMonthData?.oilData?.emissionReduction?.titles || [],
axisLabel: { axisLabel: {
fontSize: is1K ? 12 : is2K ? 14 : 24, fontSize: is1K ? 12 : is2K ? 14 : 24,
color: "#a2c8f9" color: "#a2c8f9"
@ -837,7 +838,7 @@ export default {
}, },
}, },
], ],
series: [ series: [
{ {
name: '碳预估', name: '碳预估',
type: "line", type: "line",
@ -853,7 +854,7 @@ export default {
itemStyle: { itemStyle: {
normal: { areaStyle: { type: "default", color: "#7ddff2", opacity: 0.1 } }, normal: { areaStyle: { type: "default", color: "#7ddff2", opacity: 0.1 } },
}, },
data: this.yearMonthData?.oilData?.estimate?.datas||[], data: this.yearMonthData?.oilData?.estimate?.datas || [],
}, },
{ {
name: '碳排放', name: '碳排放',
@ -870,7 +871,7 @@ export default {
itemStyle: { itemStyle: {
normal: { areaStyle: { type: "default", color: "#006594", opacity: 0.1 } }, normal: { areaStyle: { type: "default", color: "#006594", opacity: 0.1 } },
}, },
data: this.yearMonthData?.oilData?.practical?.datas||[], data: this.yearMonthData?.oilData?.practical?.datas || [],
}, },
{ {
name: '碳减排', name: '碳减排',
@ -887,7 +888,7 @@ export default {
itemStyle: { itemStyle: {
normal: { areaStyle: { type: "default", color: "#7db800", opacity: 0.1 } }, 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: { tooltip: {
trigger: "axis", trigger: "axis",
valueFormatter: (v) => { return v?v:' - ' + 'T CO₂' }, valueFormatter: (v) => { return v ? v : ' - ' + 'T CO₂' },
textStyle: { textStyle: {
fontSize: is1K ? 12 : is2K ? 14 : 24 fontSize: is1K ? 12 : is2K ? 14 : 24
}, },
@ -927,7 +928,7 @@ export default {
{ {
type: "category", type: "category",
boundaryGap: false, boundaryGap: false,
data: this.yearMonthData?.powerData?.emissionReduction?.titles||[], data: this.yearMonthData?.powerData?.emissionReduction?.titles || [],
axisLabel: { axisLabel: {
fontSize: is1K ? 12 : is2K ? 14 : 24, fontSize: is1K ? 12 : is2K ? 14 : 24,
color: "#a2c8f9" color: "#a2c8f9"
@ -954,7 +955,7 @@ export default {
}, },
}, },
], ],
series: [ series: [
{ {
name: '碳预估', name: '碳预估',
type: "bar", type: "bar",
@ -970,7 +971,7 @@ export default {
itemStyle: { itemStyle: {
normal: { areaStyle: { type: "default", color: "#7ddff2", opacity: 0.1 } }, normal: { areaStyle: { type: "default", color: "#7ddff2", opacity: 0.1 } },
}, },
data:this.yearMonthData?.powerData?.estimate?.datas||[], data: this.yearMonthData?.powerData?.estimate?.datas || [],
}, },
{ {
name: '碳排放', name: '碳排放',
@ -987,7 +988,7 @@ export default {
itemStyle: { itemStyle: {
normal: { areaStyle: { type: "default", color: "#006594", opacity: 0.1 } }, normal: { areaStyle: { type: "default", color: "#006594", opacity: 0.1 } },
}, },
data: this.yearMonthData?.powerData?.practical?.datas||[], data: this.yearMonthData?.powerData?.practical?.datas || [],
}, },
{ {
name: '碳减排', name: '碳减排',
@ -1004,7 +1005,7 @@ export default {
itemStyle: { itemStyle: {
normal: { areaStyle: { type: "default", color: "#7db800", opacity: 0.1 } }, normal: { areaStyle: { type: "default", color: "#7db800", opacity: 0.1 } },
}, },
data: this.yearMonthData?.powerData?.emissionReduction?.datas||[], data: this.yearMonthData?.powerData?.emissionReduction?.datas || [],
}, },
], ],
}; };

View File

@ -1,88 +1,99 @@
import Vue from 'vue' import Vue from "vue";
import Api from '../api/index' import Api from "../api/index";
import dayjs from 'dayjs' import dayjs from "dayjs";
import './style/index.less' import "./style/index.less";
import dayfilter from '@/utils/dayfilter' import dayfilter from "@/utils/dayfilter";
import {tryToJson} from '../utils/tools' import { tryToJson } from "../utils/tools";
import { Loading } from 'element-ui'; import { Loading } from "element-ui";
import moduleOne11 from '../components/module/module-one-1-1.vue' import moduleOne11 from "../components/module/module-one-1-1.vue";
import moduleOne12 from '../components/module/module-one-1-2.vue' import moduleOne12 from "../components/module/module-one-1-2.vue";
import moduleOne13 from '../components/module/module-one-1-3.vue' import moduleOne13 from "../components/module/module-one-1-3.vue";
import moduleOne21 from '../components/module/module-one-2-1.vue' import moduleOne21 from "../components/module/module-one-2-1.vue";
import moduleOne22 from '../components/module/module-one-2-2.vue' import moduleOne22 from "../components/module/module-one-2-2.vue";
import moduleOne23 from '../components/module/module-one-2-3.vue' import moduleOne23 from "../components/module/module-one-2-3.vue";
import peopleNumber from '@/components/people-number.vue' import moduleOne31 from "../components/module/module-one-3-1.vue";
import dictTag from '@/components/DictTag/index.vue' import peopleNumber from "@/components/people-number.vue";
import MyDialog from '@/components/MyDialog.vue' import dictTag from "@/components/DictTag/index.vue";
import MyChart from '@/components/MyChart.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 projectOverviewChart from '../components/project-overview-chart.vue'
//import peopleNumber from '../components/people-number.vue' //import peopleNumber from '../components/people-number.vue'
import header from '../components/header.vue' import header from "../components/header.vue";
Loading.install(Vue); Loading.install(Vue);
//H265Player.install(Vue); //H265Player.install(Vue);
dayfilter(Vue); dayfilter(Vue);
const vue=new Vue(); const vue = new Vue();
Vue.component("screen-header",header) Vue.component("screen-header", header);
Vue.component("module-one-1-1",moduleOne11) Vue.component("module-one-1-1", moduleOne11);
Vue.component("module-one-1-2",moduleOne12) Vue.component("module-one-1-2", moduleOne12);
Vue.component("module-one-1-3",moduleOne13) Vue.component("module-one-1-3", moduleOne13);
Vue.component("module-one-2-1",moduleOne21) Vue.component("module-one-2-1", moduleOne21);
Vue.component("module-one-2-2",moduleOne22) Vue.component("module-one-2-2", moduleOne22);
Vue.component("module-one-2-3",moduleOne23) Vue.component("module-one-2-3", moduleOne23);
Vue.component("people-number",peopleNumber) Vue.component("module-one-3-1", moduleOne31);
Vue.component("my-chart",MyChart) Vue.component("people-number", peopleNumber);
Vue.component("dict-tag",dictTag) Vue.component("my-chart", MyChart);
Vue.component("MyDialog",MyDialog) Vue.component("dict-tag", dictTag);
Vue.prototype.$bus=new Vue(); Vue.component("MyDialog", MyDialog);
Vue.component("project-overview-chart", projectOverviewChart);
Vue.prototype.$bus = new Vue();
//Vue.component("people-number",peopleNumber) //Vue.component("people-number",peopleNumber)
//Vue.component("project-overview-chart",projectOverviewChart) //Vue.component("project-overview-chart",projectOverviewChart)
Vue.prototype.$api=Api; Vue.prototype.$api = Api;
Vue.prototype.$bus=vue; Vue.prototype.$bus = vue;
Vue.prototype.$apiPath=process.env.VUE_APP_BASE_API Vue.prototype.$apiPath = process.env.VUE_APP_BASE_API;
Vue.prototype.$dt=dayjs; Vue.prototype.$dt = dayjs;
Vue.prototype.$tryToJson=tryToJson Vue.prototype.$tryToJson = tryToJson;
Vue.prototype.$toggleFullScreen=(el)=>{ Vue.prototype.$toggleFullScreen = (el) => {
if(document.fullscreenElement==el){ if (document.fullscreenElement == el) {
let screen = document.cancelFullScreen || document.webkitCancelFullScreen || document.mozCancelFullScreen || document.exitFullScreen let screen =
if (typeof screen != "undefined" && screen) { document.cancelFullScreen ||
screen.call(document); document.webkitCancelFullScreen ||
return; document.mozCancelFullScreen ||
} document.exitFullScreen;
if (typeof screen != "undefined" && screen) {
}else{ screen.call(document);
let screen = el.requestFullScreen || el.webkitRequestFullScreen || el.mozRequestFullScreen || el.msRequestFullScreen return;
if (typeof screen != "undefined" && screen) {
screen.call(el);
return;
}
} }
} } else {
Vue.prototype.$dpi=()=>{ let screen =
let w=document.querySelector(".main-app").clientWidth; el.requestFullScreen ||
return w>2561?"4K":w<1920?"1K":"2K"; el.webkitRequestFullScreen ||
} el.mozRequestFullScreen ||
Vue.filter('toDate',d=>{ el.msRequestFullScreen;
return dayjs(d).format("YYYY-MM-DD") if (typeof screen != "undefined" && screen) {
}); screen.call(el);
Vue.filter('toDateTime',d=>{ return;
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={}; };
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 = {};

View File

@ -275,7 +275,7 @@
</p> </p>
<div> <div>
<span class="led-number">{{ selProject.scheduledStartTime | toDate <span class="led-number">{{ selProject.scheduledStartTime | toDate
}}</span> }}</span>
</div> </div>
</div> </div>
</div> </div>
@ -291,7 +291,7 @@
</p> </p>
<div> <div>
<span class="led-number">{{ selProject.plannedCompletionTime | toDate <span class="led-number">{{ selProject.plannedCompletionTime | toDate
}}</span> }}</span>
</div> </div>
</div> </div>
</div> </div>
@ -306,7 +306,7 @@
</p> </p>
<div> <div>
<span class="led-number">{{ selProject.actualOperatingTime | toDate <span class="led-number">{{ selProject.actualOperatingTime | toDate
}}</span> }}</span>
</div> </div>
</div> </div>
</div> </div>
@ -320,7 +320,8 @@
合同工期 合同工期
</p> </p>
<div> <div>
<span class="led-number">{{ selProject.projectTimeLimit || '' }}</span> <span class="led-number">{{ selProject.projectTimeLimit || '' }}</span>
</div> </div>
</div> </div>
</div> </div>
@ -490,7 +491,7 @@
<div class="wi-label">当前风向</div> <div class="wi-label">当前风向</div>
<div class="wi-data-unit"> <div class="wi-data-unit">
<span class="wi-txt">{{ weatherInfo.windDirection }}{{ weatherInfo.windScale <span class="wi-txt">{{ weatherInfo.windDirection }}{{ weatherInfo.windScale
}}</span> }}</span>
</div> </div>
</div> </div>
</el-col> </el-col>
@ -854,7 +855,7 @@ export default {
} }
.led-number { .led-number {
font-size: 40px; font-size: 36px;
} }
} }
} }
@ -1150,7 +1151,7 @@ export default {
.led-number { .led-number {
font-size: 50px; font-size: 48px;
} }
} }
} }
@ -1442,7 +1443,7 @@ export default {
font-size: 30px; font-size: 30px;
.led-number { .led-number {
font-size: 70px; font-size: 60px;
} }
} }
} }
@ -1454,6 +1455,7 @@ export default {
.prj-img-list { .prj-img-list {
height: calc(100% - 190px); height: calc(100% - 190px);
.prj-img-nav { .prj-img-nav {
.prj-img-nav-item { .prj-img-nav-item {
line-height: 60px; line-height: 60px;
@ -1462,6 +1464,7 @@ export default {
font-size: 30px; font-size: 30px;
} }
} }
.el-carousel { .el-carousel {
height: 100%; height: 100%;

View File

@ -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>

View File

@ -102,4 +102,11 @@ public interface SmzSspProblemmodifyMapper
* @return * @return
*/ */
public List<SmzSspProblemmodify> groupByDangerType(SmzSspProblemmodify where); public List<SmzSspProblemmodify> groupByDangerType(SmzSspProblemmodify where);
/**
*
* @param where
* @return
*/
public List<SmzSspProblemmodify> getListCountBG(SmzSspProblemmodify where);
} }

View File

@ -300,7 +300,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</update> </update>
<sql id="countUserWhere"> <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="dangerType != null and dangerType != ''"> and a.danger_type = #{dangerType}</if>
<if test="createTime != null "> and date(a.createTime) &gt;= date(#{createTime})</if> <if test="createTime != null "> and date(a.createTime) &gt;= date(#{createTime})</if>
<if test="updateTime != null "> and date(a.updateTime) &lt;= date(#{updateTime})</if> <if test="updateTime != null "> and date(a.updateTime) &lt;= date(#{updateTime})</if>
@ -331,6 +331,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="countUserWhere"></include> <include refid="countUserWhere"></include>
</select> </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) &lt;= curdate()
<include refid="countUserWhere"></include>
</select>
<select id="getWxListCount" parameterType="SmzSspProblemmodify" resultType="Map"> <select id="getWxListCount" parameterType="SmzSspProblemmodify" resultType="Map">
select ssp.checkState, count(1) as total from smz_ssp_problemmodify ssp select ssp.checkState, count(1) as total from smz_ssp_problemmodify ssp
<where> <where>

View File

@ -338,7 +338,7 @@ public class SmzSspProblemmodifyController extends BaseController
@RequiresPermissions("trouble:problemmodify:list") @RequiresPermissions("trouble:problemmodify:list")
@GetMapping("/listCountForBG") @GetMapping("/listCountForBG")
public AjaxResult listCountForBG(SmzSspProblemmodify where){ public AjaxResult listCountForBG(SmzSspProblemmodify where){
List<SmzSspProblemmodify> result=smzSspProblemmodifyService.getListCount(where); List<SmzSspProblemmodify> result=smzSspProblemmodifyService.getListCountBG(where);
return AjaxResult.success(result); return AjaxResult.success(result);
} }

View File

@ -106,4 +106,10 @@ public interface ISmzSspProblemmodifyService
*/ */
public List<SmzSspProblemmodify> groupByDangerType(SmzSspProblemmodify where); public List<SmzSspProblemmodify> groupByDangerType(SmzSspProblemmodify where);
/**
*
* @param where
* @return
*/
public List<SmzSspProblemmodify> getListCountBG(SmzSspProblemmodify where);
} }

View File

@ -92,7 +92,7 @@ public class SmzSspAuditinfoServiceImpl implements ISmzSspAuditinfoService
SmzSspProblemmodify smzSspProblemmodify = new SmzSspProblemmodify(); SmzSspProblemmodify smzSspProblemmodify = new SmzSspProblemmodify();
smzSspProblemmodify.setId(smzSspAuditinfo.getMainId()); smzSspProblemmodify.setId(smzSspAuditinfo.getMainId());
// (0待审1通过2驳回) // (0待审1通过2驳回)
//0待整改1待复检2复检驳回3复检通过) //0待整改1待复检3复检驳回4复检通过)
if("0".equals(smzSspAuditinfo.getProcessState())){ if("0".equals(smzSspAuditinfo.getProcessState())){
smzSspProblemmodify.setCheckState(CheckStateEnums.DFJ.getCode()); smzSspProblemmodify.setCheckState(CheckStateEnums.DFJ.getCode());
}else if("1".equals(smzSspAuditinfo.getProcessState())){ }else if("1".equals(smzSspAuditinfo.getProcessState())){

View File

@ -188,5 +188,14 @@ public class SmzSspProblemmodifyServiceImpl implements ISmzSspProblemmodifyServi
public List<SmzSspProblemmodify> groupByDangerType(SmzSspProblemmodify where) { public List<SmzSspProblemmodify> groupByDangerType(SmzSspProblemmodify where) {
return smzSspProblemmodifyMapper.groupByDangerType(where); return smzSspProblemmodifyMapper.groupByDangerType(where);
} }
/**
*
* @param where
* @return
*/
@Override
public List<SmzSspProblemmodify> getListCountBG(SmzSspProblemmodify where) {
return smzSspProblemmodifyMapper.getListCountBG(where);
}
} }