From dafda57a0e78ca1dd5a85c2030d7c935d640c94a Mon Sep 17 00:00:00 2001 From: Rue Ji Date: Sat, 4 Apr 2026 00:51:33 +0800 Subject: [PATCH] =?UTF-8?q?refactor(mpont):=20=E4=BC=98=E5=8C=96=E6=B5=8B?= =?UTF-8?q?=E7=82=B9=E6=9F=A5=E8=AF=A2=E5=8F=8A=E5=89=8D=E7=AB=AF=E5=9B=BE?= =?UTF-8?q?=E8=A1=A8=E6=B8=B2=E6=9F=93=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 优化数据库查询测点逻辑,优先通过unitId和测点编码查询,失败后通过测点编码模糊查询 - 统一调整AJAX请求格式,规范URL拼接及回调函数编写 - 修正前端JS代码中数据解析方式,使用严格的空字符串判断 - 规范DOM选择器对应代码格式,采用双引号替换单引号 - 重构echart饼图组件配置,提升代码可读性和维护性 - 移除注释的旧版echart图表函数,精简前端代码 - 优化echart折线图、柱状图渲染,统一异步请求与数据展示流程 - 新增多点柱状图(工业生活污水流量7天日趋势)异步数据加载和渐变色样式配置 - 修复部分变量声明和函数命名规范,提升代码一致性 --- .../controller/work/MPointController.java | 11 +- src/main/webapp/IMG/loginbp.png | Bin 0 -> 73704 bytes src/main/webapp/JS/main/main_js.js | 1381 ++++++++--------- .../jsp/equipment/equipmentCardReamrkView.jsp | 11 +- src/main/webapp/jsp/login.jsp | 12 +- src/main/webapp/jsp/main_JS_Company.jsp | 789 ++++++++-- src/main/webapp/jsp/main_JS_Company2_init.jsp | 398 +++++ 7 files changed, 1719 insertions(+), 883 deletions(-) create mode 100644 src/main/webapp/IMG/loginbp.png create mode 100644 src/main/webapp/jsp/main_JS_Company2_init.jsp diff --git a/src/main/java/com/sipai/controller/work/MPointController.java b/src/main/java/com/sipai/controller/work/MPointController.java index 146578d5..bcc2f008 100644 --- a/src/main/java/com/sipai/controller/work/MPointController.java +++ b/src/main/java/com/sipai/controller/work/MPointController.java @@ -4137,8 +4137,15 @@ public class MPointController { for (int i = 0; i < ids.length; i++) { com.alibaba.fastjson.JSONObject jsonObject2 = new com.alibaba.fastjson.JSONObject(); - //通过es查询bizid - MPoint mPoint_es = mPointService.selectById(ids[i]); + //通过数据库查询测点(优先通过unitId和测点编码查询) + MPoint mPoint_es = mPointService.selectById(unitId, ids[i]); + if (mPoint_es == null) { + // 尝试通过测点编码查询 + List mPointList = mPointService.selectListByWhere(unitId, "where mpointcode='" + ids[i] + "'"); + if (mPointList != null && mPointList.size() > 0) { + mPoint_es = mPointList.get(0); + } + } if (mPoint_es != null) { unitId = mPoint_es.getBizid(); diff --git a/src/main/webapp/IMG/loginbp.png b/src/main/webapp/IMG/loginbp.png new file mode 100644 index 0000000000000000000000000000000000000000..93b1007de4916b5d4ab8e78ebcb83ab9879f421f GIT binary patch literal 73704 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

% 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/JS/main/main_js.js b/src/main/webapp/JS/main/main_js.js index 2daa0041..a8f088c2 100644 --- a/src/main/webapp/JS/main/main_js.js +++ b/src/main/webapp/JS/main/main_js.js @@ -1,6 +1,5 @@ //金山项目首页 - /** * 获取点位实时值 * @param unitId @@ -10,192 +9,89 @@ */ function getValue4Es(unitId, mpointCode, valueId, textId) { $.ajax({ - type: 'GET', - url: ext.contextPath + '/work/mpoint/getValue4Es.do?unitId=' + unitId + '&mpointCode=' + mpointCode, + type: "GET", + url: + ext.contextPath + + "/work/mpoint/getValue4Es.do?unitId=" + + unitId + + "&mpointCode=" + + mpointCode, async: true, globle: false, error: function () { return false; }, success: function (data) { - if (data != null && data != '') { - var data = eval('(' + data + ')'); + if (data != null && data != "") { + var data = eval("(" + data + ")"); //只限制上限为0.8 下限根据设定值自己设 // var maxvalue = data.alarmmax/0.8; // var minvalue = data.alarmmin/maxvalue; // var acvalue = data.parmvalue/maxvalue*100; - $('#' + valueId).html(data.parmvalue);//赋值 + $("#" + valueId).html(data.parmvalue); //赋值 if (data.unit == undefined) { - $('#' + textId).html(data.parmname);//赋值名称 + $("#" + textId).html(data.parmname); //赋值名称 } else { - $('#' + textId).html(data.parmname + ' (' + data.unit + ')');//赋值名称+单位 + $("#" + textId).html(data.parmname + " (" + data.unit + ")"); //赋值名称+单位 } } - } + }, }); } function getValue(unitId, mpointCode, valueId, textId) { $.ajax({ - type: 'GET', - url: ext.contextPath + '/work/mpoint/getValue.do?unitId=' + unitId + '&mpointCode=' + mpointCode, + type: "GET", + url: + ext.contextPath + + "/work/mpoint/getValue.do?unitId=" + + unitId + + "&mpointCode=" + + mpointCode, async: true, globle: false, error: function () { return false; }, success: function (data) { - if (data != null && data != '') { - var data = eval('(' + data + ')'); + if (data != null && data != "") { + var data = eval("(" + data + ")"); console.log(data); - $('#' + valueId).html(data.parmvalue);//赋值 + $("#" + valueId).html(data.parmvalue); //赋值 if (data.unit == undefined) { - $('#' + textId).html(data.parmname);//赋值名称 + $("#" + textId).html(data.parmname); //赋值名称 } else { - $('#' + textId).html(data.parmname + ' (' + data.unit + ')');//赋值名称+单位 + $("#" + textId).html(data.parmname + " (" + data.unit + ")"); //赋值名称+单位 } } - } + }, }); } -// /** -// * echart饼图--通用 -- 新 -// */ -// function echartPie2(unitId, mpointCode, echartId, textId) { -// var myChart = echarts.init(document.getElementById(echartId)); -// $.ajax({ -// type: 'GET', -// url: ext.contextPath + '/work/mpoint/getValue4Es.do?unitId=' + unitId + '&mpointCode=' + mpointCode, -// async: true, -// globle: false, -// error: function () { -// return false; -// }, -// success: function (data) { -// if (data != null && data != '') { -// var echart_minvalue = 0.2; -// var echart_maxvalue = 0.8; - -// // var data = eval('(' + data + ')'); -// //180度的上限 -// var maxvalue_20 = data.alarmmax * 1.2; -// //0度的下限 -// var minvalue_20 = data.alarmmin - data.alarmmin * 0.2; - -// var maxvalue = data.alarmmax; -// var minvalue = data.alarmmin; - -// //判断是否需要下限 -// if (data.alarmmin == null || data.alarmmin == '') { -// minvalue_20 = 0; -// minvalue = 0; -// echart_minvalue = 0; -// } - -// var parmvalue = data.parmvalue; -// var rate = 0; -// var unit = ''; - -// $('#' + textId).html(data.parmname); - -// if (data.unit != undefined && data.unit != null && data.unit != '') { -// unit = '(' + data.unit + ')'; -// } - -// //计算实际值比例 -// if (maxvalue_20 <= 1) { -// minvalue_20 = minvalue_20 * 100; -// maxvalue_20 = maxvalue_20 * 100; -// parmvalue = parmvalue * 100; -// minvalue = minvalue * 100; -// maxvalue = maxvalue * 100; -// if (maxvalue != undefined && minvalue != undefined) { -// rate = parmvalue / (maxvalue_20 - minvalue_20) * 100; -// } else { -// rate = parmvalue; -// } - -// rate += 20; -// } else { -// if (maxvalue != undefined && minvalue != undefined) { -// // rate = parmvalue / maxvalue_20 * 100; -// rate = (parmvalue / maxvalue) * 0.8 * 100; -// } else { -// rate = parmvalue; -// } -// } - -// //计算颜色 -// var colorStr = '#6C6C6C'; -// if (parmvalue < minvalue) { -// colorStr = '#67e0e3'; -// } else if (parmvalue > maxvalue) { -// colorStr = '#fd666d'; -// } else { -// colorStr = '#37a2da'; -// // 37a2da -// } - -// console.log(data.parmname + '扩大下限:' + minvalue_20 + '------扩大上限:' + maxvalue_20 + '------实际比率:' + rate + '------实际值:' + parmvalue + '------实际下限:' + minvalue + '------实际上限:' + maxvalue); - -// var option = { -// toolbox: { //可视化的工具箱 -// show: false, feature: { -// restore: { //重置 -// show: true -// }, saveAsImage: {//保存图片 -// show: true -// } -// } -// }, series: [{ -// name: '业务指标', type: 'gauge', startAngle: 180, endAngle: 0, radius: 70, center: ['50%', '80%'],//设置饼图位置 -// axisLine: { -// show: true, // 属性lineStyle控制线条样式 -// lineStyle: { -// width: 15, // color: [[0.2, '#e2e2e2'], [0.8, '#66d99f'], [maxvalue, '#f35a4a']] -// color: [[echart_minvalue, '#67e0e3'], [echart_maxvalue, '#37a2da'], [maxvalue_20, '#fd666d']] -// } -// }, splitLine: { -// show: false, -// }, axisTick: { -// show: false, -// }, axisLabel: { -// show: false, -// }, pointer: { -// length: '40px', width: '3px', -// }, detail: { -// offsetCenter: [0, '20%'], fontSize: 14, color: colorStr, //formatter: data.parmname, -// formatter: data.parmvalue + unit//data.parmvalue为实际值 acvalue为计算后的比例 -// }, data: [{value: rate}] -// }] -// }; -// myChart.setOption(option); -// myChart.resize(); -// } -// } -// }); -// } - /** * echart饼图--通用 */ function echartPie(unitId, mpointCode, echartId, textId) { var myChart = echarts.init(document.getElementById(echartId)); $.ajax({ - type: 'GET', - url: ext.contextPath + '/work/mpoint/getValue4Es.do?unitId=' + unitId + '&mpointCode=' + mpointCode, + type: "GET", + url: + ext.contextPath + + "/work/mpoint/getValue4Es.do?unitId=" + + unitId + + "&mpointCode=" + + mpointCode, async: true, globle: false, error: function () { return false; }, success: function (data) { - if (data != null && data != '') { + if (data != null && data != "") { var echart_minvalue = 0.2; var echart_maxvalue = 0.8; - var data = eval('(' + data + ')'); + var data = eval("(" + data + ")"); //180度的上限 var maxvalue_20 = data.alarmmax * 1.2; //0度的下限 @@ -205,7 +101,7 @@ function echartPie(unitId, mpointCode, echartId, textId) { var minvalue = data.alarmmin; //判断是否需要下限 - if (data.alarmmin == null || data.alarmmin == '') { + if (data.alarmmin == null || data.alarmmin == "") { minvalue_20 = 0; minvalue = 0; echart_minvalue = 0; @@ -213,12 +109,12 @@ function echartPie(unitId, mpointCode, echartId, textId) { var parmvalue = data.parmvalue; var rate = 0; - var unit = ''; + var unit = ""; - $('#' + textId).html(data.parmname); + $("#" + textId).html(data.parmname); - if (data.unit != undefined && data.unit != null && data.unit != '') { - unit = '(' + data.unit + ')'; + if (data.unit != undefined && data.unit != null && data.unit != "") { + unit = "(" + data.unit + ")"; } //计算实际值比例 @@ -229,7 +125,7 @@ function echartPie(unitId, mpointCode, echartId, textId) { minvalue = minvalue * 100; maxvalue = maxvalue * 100; if (maxvalue != undefined && minvalue != undefined) { - rate = parmvalue / (maxvalue_20 - minvalue_20) * 100; + rate = (parmvalue / (maxvalue_20 - minvalue_20)) * 100; } else { rate = parmvalue; } @@ -245,204 +141,95 @@ function echartPie(unitId, mpointCode, echartId, textId) { } //计算颜色 - var colorStr = '#6C6C6C'; + var colorStr = "#6C6C6C"; if (parmvalue < minvalue) { - colorStr = '#6C6C6C'; + colorStr = "#6C6C6C"; } else if (parmvalue > maxvalue) { - colorStr = '#f35a4a'; + colorStr = "#f35a4a"; } else { - colorStr = '#66d99f'; + colorStr = "#66d99f"; } - console.log(data.parmname + '扩大下限:' + minvalue_20 + '------扩大上限:' + maxvalue_20 + '------实际比率:' + rate + '------实际值:' + parmvalue + '------实际下限:' + minvalue + '------实际上限:' + maxvalue); + console.log( + data.parmname + + "扩大下限:" + + minvalue_20 + + "------扩大上限:" + + maxvalue_20 + + "------实际比率:" + + rate + + "------实际值:" + + parmvalue + + "------实际下限:" + + minvalue + + "------实际上限:" + + maxvalue, + ); var option = { - toolbox: { //可视化的工具箱 - show: false, feature: { - restore: { //重置 - show: true - }, saveAsImage: {//保存图片 - show: true - } - } - }, series: [{ - name: '业务指标', type: 'gauge', startAngle: 180, endAngle: 0, radius: 70, center: ['50%', '80%'],//设置饼图位置 - axisLine: { - show: true, // 属性lineStyle控制线条样式 - lineStyle: { - width: 15, // color: [[0.2, '#e2e2e2'], [0.8, '#66d99f'], [maxvalue, '#f35a4a']] - color: [[echart_minvalue, '#f35a4a'], [echart_maxvalue, '#66d99f'], [maxvalue_20, '#f35a4a']] - } - }, splitLine: { - show: false, - }, axisTick: { - show: false, - }, axisLabel: { - show: false, - }, pointer: { - length: '40px', width: '3px', - }, detail: { - offsetCenter: [0, '20%'], fontSize: 14, color: colorStr, //formatter: data.parmname, - formatter: data.parmvalue + unit//data.parmvalue为实际值 acvalue为计算后的比例 - }, data: [{value: rate}] - }] + toolbox: { + //可视化的工具箱 + show: false, + feature: { + restore: { + //重置 + show: true, + }, + saveAsImage: { + //保存图片 + show: true, + }, + }, + }, + series: [ + { + name: "业务指标", + type: "gauge", + startAngle: 180, + endAngle: 0, + radius: 70, + center: ["50%", "80%"], //设置饼图位置 + axisLine: { + show: true, // 属性lineStyle控制线条样式 + lineStyle: { + width: 15, // color: [[0.2, '#e2e2e2'], [0.8, '#66d99f'], [maxvalue, '#f35a4a']] + color: [ + [echart_minvalue, "#f35a4a"], + [echart_maxvalue, "#66d99f"], + [maxvalue_20, "#f35a4a"], + ], + }, + }, + splitLine: { + show: false, + }, + axisTick: { + show: false, + }, + axisLabel: { + show: false, + }, + pointer: { + length: "40px", + width: "3px", + }, + detail: { + offsetCenter: [0, "20%"], + fontSize: 14, + color: colorStr, //formatter: data.parmname, + formatter: data.parmvalue + unit, //data.parmvalue为实际值 acvalue为计算后的比例 + }, + data: [{ value: rate }], + }, + ], }; myChart.setOption(option); myChart.resize(); } - } + }, }); } - -// /** -// * echart饼图--通用--新 -// */ -// function echartPie(unitId, mpointCode, echartId, textId) { -// var myChart = echarts.init(document.getElementById(echartId)); -// var data = { -// "confirmalarm": "0", -// "parmname": "进水PH", -// "signaltag": "", -// "soundalarm": "0", -// "remoteup": "0", -// "triggercycle": "0", -// "triggermutation": "0", -// "ledcolor": "1", -// "id": "D_JinSPH", -// "numtail": "0", -// "signaltype": "AI", -// "active": "启用", -// "flowset": 0, -// "unit": "mg/l", -// "sourceType": "auto", -// "mpointcode": "D_JinSPH", -// "triggerequoff": "0", -// "disname": "", -// "valuetype": "sql", -// "directtype": "1", -// "freq": 1, -// "morder": 999, -// "showname": "1", -// "rate": 1, -// "subscriptionStatus": 0, -// "mpointid": "D_JinSPH", -// "valuemeaning": "", -// "mathop": "*", -// "triggeralarm": "1", -// "equipmentid": "", -// "biztype": "", -// "parmvalue": 20, -// "alarmmax": 14, -// "alarmmin": 6, -// "ledtype": "1", -// "measuredt": "2026-03-11T18:20:27Z", -// "bizid": "0533JS" -// }; - - -// if (data != null && data != '') { -// var echart_minvalue = 0.2; -// var echart_maxvalue = 0.8; - -// // var data = eval('(' + data + ')'); -// //180度的上限 -// var maxvalue_20 = data.alarmmax * 1.2; -// //0度的下限 -// var minvalue_20 = data.alarmmin - data.alarmmin * 0.2; - -// var maxvalue = data.alarmmax; -// var minvalue = data.alarmmin; - -// //判断是否需要下限 -// if (data.alarmmin == null || data.alarmmin == '') { -// minvalue_20 = 0; -// minvalue = 0; -// echart_minvalue = 0; -// } - -// var parmvalue = data.parmvalue; -// var rate = 0; -// var unit = ''; - -// $('#' + textId).html(data.parmname); - -// if (data.unit != undefined && data.unit != null && data.unit != '') { -// unit = '(' + data.unit + ')'; -// } - -// //计算实际值比例 -// if (maxvalue_20 <= 1) { -// minvalue_20 = minvalue_20 * 100; -// maxvalue_20 = maxvalue_20 * 100; -// parmvalue = parmvalue * 100; -// minvalue = minvalue * 100; -// maxvalue = maxvalue * 100; -// if (maxvalue != undefined && minvalue != undefined) { -// rate = parmvalue / (maxvalue_20 - minvalue_20) * 100; -// } else { -// rate = parmvalue; -// } - -// rate += 20; -// } else { -// if (maxvalue != undefined && minvalue != undefined) { -// // rate = parmvalue / maxvalue_20 * 100; -// rate = (parmvalue / maxvalue) * 0.8 * 100; -// } else { -// rate = parmvalue; -// } -// } - -// //计算颜色 -// var colorStr = '#6C6C6C'; -// if (parmvalue < minvalue) { -// colorStr = '#67e0e3'; -// } else if (parmvalue > maxvalue) { -// colorStr = '#fd666d'; -// } else { -// colorStr = '#37a2da'; -// // 37a2da -// } - -// console.log(data.parmname + '扩大下限:' + minvalue_20 + '------扩大上限:' + maxvalue_20 + '------实际比率:' + rate + '------实际值:' + parmvalue + '------实际下限:' + minvalue + '------实际上限:' + maxvalue); - -// var option = { -// toolbox: { //可视化的工具箱 -// show: false, feature: { -// restore: { //重置 -// show: true -// }, saveAsImage: {//保存图片 -// show: true -// } -// } -// }, series: [{ -// name: '业务指标', type: 'gauge', startAngle: 180, endAngle: 0, radius: 70, center: ['50%', '80%'],//设置饼图位置 -// axisLine: { -// show: true, // 属性lineStyle控制线条样式 -// lineStyle: { -// width: 15, // color: [[0.2, '#e2e2e2'], [0.8, '#66d99f'], [maxvalue, '#f35a4a']] -// color: [[echart_minvalue, '#67e0e3'], [echart_maxvalue, '#37a2da'], [maxvalue_20, '#fd666d']] -// } -// }, splitLine: { -// show: false, -// }, axisTick: { -// show: false, -// }, axisLabel: { -// show: false, -// }, pointer: { -// length: '40px', width: '3px', -// }, detail: { -// offsetCenter: [0, '20%'], fontSize: 14, color: colorStr, //formatter: data.parmname, -// formatter: data.parmvalue + unit//data.parmvalue为实际值 acvalue为计算后的比例 -// }, data: [{value: rate}] -// }] -// }; -// myChart.setOption(option); -// myChart.resize(); -// } -// } - /** * echart折线图--单点 */ @@ -450,460 +237,483 @@ function echartLine(unitId, mpointCode, echartId) { var myChart = echarts.init(document.getElementById(echartId)); $.ajax({ - type: 'GET', - url: ext.contextPath + '/work/mpoint/getValueMonth.do?unitId=' + unitId + '&mpointCode=' + mpointCode, + type: "GET", + url: + ext.contextPath + + "/work/mpoint/getValueMonth.do?unitId=" + + unitId + + "&mpointCode=" + + mpointCode, async: true, globle: false, error: function () { return false; }, success: function (data) { - var data = eval('(' + data + ')'); + var data = eval("(" + data + ")"); var option = { tooltip: { - trigger: 'axis' - }, title: [{ - left: 'center', text: data.name - }], grid: { - left: '3%', right: '4%', bottom: '3%', containLabel: true - }, xAxis: { - type: 'category', + trigger: "axis", + }, + title: [ + { + left: "center", + text: data.name, + }, + ], + grid: { + left: "3%", + right: "4%", + bottom: "3%", + containLabel: true, + }, + xAxis: { + type: "category", boundaryGap: false, - data: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31'] - }, yAxis: { - type: 'value' - }, series: [{ - name: '上限', type: 'line', // stack: '总量', - data: data.maxlist - }, { - name: '下限', type: 'line', // stack: '总量', - data: data.minlist - }, { - name: '实际值', type: 'line', // stack: '总量', - data: data.datalist - }] + data: [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26", + "27", + "28", + "29", + "30", + "31", + ], + }, + yAxis: { + type: "value", + }, + series: [ + { + name: "上限", + type: "line", // stack: '总量', + data: data.maxlist, + }, + { + name: "下限", + type: "line", // stack: '总量', + data: data.minlist, + }, + { + name: "实际值", + type: "line", // stack: '总量', + data: data.datalist, + }, + ], }; myChart.setOption(option); myChart.resize(); - } + }, }); } -/** - * echart混合图--双柱状+折线 - */ -function echartMixed(unitId, mpointCode, echartId) { - var myChart = echarts.init(document.getElementById(echartId)); - - var datastr = { - "barData1": { - "name": "工业进水量", - "data": [89483, 96870, 85420, 92150, 88960, 95340, 91280] - }, - "barData2": { - "name": "工业出水量", - "data": [87297, 88460, 82100, 89500, 85600, 91200, 88500] - }, - "barData3": { - "name": "生活进水量", - "data": [89483, 96870, 85420, 92150, 88960, 95340, 91280] - }, - "barData4": { - "name": "生活出水量", - "data": [87297, 88460, 82100, 89500, 85600, 91200, 88500] - }, - "lineData": { - "name": "累计水量", - "data": [176780, 185330, 167520, 181650, 174560, 186540, 179780] - }, - "timeJson": [ - "2026-03-10", - "2026-03-11", - "2026-03-12", - "2026-03-13", - "2026-03-14", - "2026-03-15", - "2026-03-16" - ] - }; - - var option = { - color: ['#67D89F', '#FFBB00', '#5B8FF9', '#F6903D', '#EE6666'], - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'cross' - } - }, - legend: { - data: [datastr.barData1.name, datastr.barData2.name, datastr.barData3.name, datastr.barData4.name, datastr.lineData.name] - }, - xAxis: [{ - type: 'category', - axisLabel: { - interval: 0 - }, - data: datastr.timeJson - }], - yAxis: [{ - type: 'value', - name: '水量(m³)', - position: 'left' - }], - grid: { - left: '2%', - right: '5%', - bottom: '3%', - containLabel: true - }, - series: [ - { - name: datastr.barData1.name, - type: 'bar', - barWidth: 20, - data: datastr.barData1.data - }, - { - name: datastr.barData2.name, - type: 'bar', - barWidth: 20, - data: datastr.barData2.data - }, - { - name: datastr.barData3.name, - type: 'bar', - barWidth: 20, - data: datastr.barData3.data - }, - { - name: datastr.barData4.name, - type: 'bar', - barWidth: 20, - data: datastr.barData4.data - }, - { - name: datastr.lineData.name, - type: 'line', - smooth: true, - symbol: 'circle', - symbolSize: 6, - lineStyle: { - width: 2 - }, - data: datastr.lineData.data - } - ] - }; - myChart.setOption(option); - myChart.resize(); -} - -/** - * echart曲线图--单点 - */ -function echartLine2(unitId, mpointCode, echartId) { - var myChart = echarts.init(document.getElementById(echartId)); - - var datastr = { - "dataJson": [ - { - "data": [ - 89483.1, - 96870.97, - 85420.5, - 92150.3, - 88960.8, - 95340.2, - 91280.6 - ], - "name": "每日进水出水总量", - "type": "line", - "smooth": true, - "symbol": "circle", - "symbolSize": 6, - "lineStyle": { - "width": 2 - }, - "areaStyle": { - "opacity": 0.1 - } - }, - ], - "timeJson": [ - "2026-03-10", - "2026-03-11", - "2026-03-12", - "2026-03-13", - "2026-03-14", - "2026-03-15", - "2026-03-16" - ] - } - - var data1 = datastr.dataJson; - var data2 = datastr.timeJson; - - var option = { - color: ['#67D89F', '#5B8FF9'], - tooltip: { - trigger: 'axis' - }, - legend: {}, - xAxis: [{ - type: 'category', - boundaryGap: false, - axisLabel: { - interval: 0 - }, - data: data2 - }], - yAxis: [{ - type: 'value' - }], - grid: { - left: '2%', - right: '5%', - bottom: '3%', - containLabel: true - }, - series: data1 - }; - myChart.setOption(option); - myChart.resize(); -} - /** * echart柱状图--单点 */ -function echartColumnar2(unitId, mpointCode, echartId) { +function echartColumnar(unitId, mpointCode, echartId) { var myChart = echarts.init(document.getElementById(echartId)); - var datastr = { - "dataJson": [ - { - "barWidth": 30, - "stack": "total", - "data": [ - 89483.1, - 96870.97, - 0, - 0, - 0, - 0, - 0 - ], - "name": "每日进水量", - "label": { - "show": "true" + $.ajax({ + type: "GET", + url: + ext.contextPath + + "/work/mpoint/getValueMonth.do?unitId=" + + unitId + + "&mpointCode=" + + mpointCode, + async: true, + globle: false, + error: function () { + return false; + }, + success: function (data) { + var data = eval("(" + data + ")"); + var option = { + color: "#62AEDF", + tooltip: { + trigger: "axis", + axisPointer: { + // 坐标轴指示器,坐标轴触发有效 + type: "shadow", // 默认为直线,可选为:'line' | 'shadow' + }, }, - "type": "bar" - }, - { - "barWidth": 30, - "stack": "total", - "data": [ - 87297.59, - 88460.4, - 0, - 0, - 0, - 0, - 0 - ], - "name": "每日出水量", - "label": { - "show": "true" + xAxis: { + type: "category", + data: [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26", + "27", + "28", + "29", + "30", + "31", + ], }, - "type": "bar" - } - - ], - "timeJson": [ - "2026-03-10", - "2026-03-11", - "2026-03-12", - "2026-03-13", - "2026-03-14", - "2026-03-15", - "2026-03-16" - ] - } - - var data1 = datastr.dataJson; - var data2 = datastr.timeJson; - - var option = { - color: ['#67D89F', '#FFBB00'], legend: {}, calculable: true, xAxis: [{ - type: 'category', axisLabel: { - interval: 0,//代表显示所有x轴标签显示 - }, data: data2 - }], yAxis: [{ - type: 'value' - }], grid: { - left: '2%', right: '5%', bottom: '3%', containLabel: true - }, series: data1 - }; - myChart.setOption(option); - myChart.resize(); - - // $.ajax({ - // type: 'GET', - // url: ext.contextPath + '/work/mpoint/getValueMonth.do?unitId=' + unitId + '&mpointCode=' + mpointCode, - // async: true, - // globle: false, - // error: function () { - // return false; - // }, - // success: function (data) { - // var data = eval('(' + data + ')'); - // var option = { - // color: '#62AEDF', tooltip: { - // trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 - // type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' - // } - // }, xAxis: { - // type: 'category', - // data: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31'] - // }, yAxis: { - // type: 'value' - // }, title: [{ - // left: 'center', text: data.name - // }], grid: { - // left: '3%', right: '4%', bottom: '3%', containLabel: true - // }, series: [{ - // data: data.datalist, type: 'bar', showBackground: true - // // backgroundStyle: { - // // //color: '#62AEDF' - // // } - // }] - // }; - // myChart.setOption(option); - // myChart.resize(); - // } - // }); + yAxis: { + type: "value", + }, + title: [ + { + left: "center", + text: data.name, + }, + ], + grid: { + left: "3%", + right: "4%", + bottom: "3%", + containLabel: true, + }, + series: [ + { + data: data.datalist, + type: "bar", + showBackground: true, + // backgroundStyle: { + // //color: '#62AEDF' + // } + }, + ], + }; + myChart.setOption(option); + myChart.resize(); + }, + }); } /** - * echart柱状图--多点 + * echart柱状图--多点 (原有) */ -function echartColumnar1(unitId, mpointCode, echartId) { +function echartColumnar2_1(unitId, mpointCode, echartId) { var myChart = echarts.init(document.getElementById(echartId)); + $.ajax({ + type: "GET", + url: + ext.contextPath + + "/work/mpoint/getValueWeekS.do?unitId=" + + unitId + + "&mpointCode=" + + mpointCode, + async: true, + globle: false, + error: function () { + return false; + }, + success: function (data) { + var datastr = eval("(" + data + ")"); - var datastr = { - "dataJson": [ - { - "barWidth": 30, - "stack": "total", - "data": [ - 89483.1, - 96870.97, - 0, - 0, - 0, - 0, - 0 + var data1 = datastr.dataJson; + var data2 = datastr.timeJson; + + var option = { + color: ["#67D89F", "#FFBB00"], + legend: {}, + calculable: true, + xAxis: [ + { + type: "category", + axisLabel: { + interval: 0, //代表显示所有x轴标签显示 + }, + data: data2, + }, ], - "name": "每日进水量", - "label": { - "show": "true" - }, - "type": "bar" - }, - { - "barWidth": 30, - "stack": "total", - "data": [ - 87297.59, - 88460.4, - 0, - 0, - 0, - 0, - 0 + yAxis: [ + { + type: "value", + }, ], - "name": "每日出水量", - "label": { - "show": "true" + grid: { + left: "2%", + right: "5%", + bottom: "3%", + containLabel: true, }, - "type": "bar" + series: data1, + }; + myChart.setOption(option); + myChart.resize(); + }, + }); +} + +function initEchartColumnar2() { + var chart = echarts.init(document.getElementById('myChartProduce8')); + var option = { + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow' + } + }, + legend: { + data: ['工业进水', '工业出水', '生活进水', '生活出水'], + top: 5, + textStyle: { + fontSize: 12 + } + }, + grid: { + left: '5%', + right: '5%', + bottom: '8%', + top: '18%', + containLabel: true + }, + xAxis: { + type: 'category', + data: ['3/16', '3/17', '3/18', '3/19', '3/20', '3/21', '3/22'], + axisLine: { + lineStyle: { + color: '#e8e8e8' + } + }, + axisLabel: { + color: '#666', + fontSize: 12 + } + }, + yAxis: { + type: 'value', + name: 'm³/D', + nameTextStyle: { + fontSize: 12 + }, + axisLine: { + show: false + }, + axisTick: { + show: false + }, + axisLabel: { + color: '#666', + fontSize: 12 + }, + splitLine: { + lineStyle: { + color: '#f0f0f0' + } + } + }, + series: [ + { + name: '工业进水', + type: 'bar', + barWidth: '20%', + itemStyle: { + color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ + {offset: 0, color: '#378dcc'}, + {offset: 1, color: '#5ba3d9'} + ]) + }, + data: [0, 0, 0, 0, 0, 0, 0] + }, + { + name: '工业出水', + type: 'bar', + barWidth: '20%', + itemStyle: { + color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ + {offset: 0, color: '#5b8def'}, + {offset: 1, color: '#40a9ff'} + ]) + }, + data: [0, 0, 0, 0, 0, 0, 0] + }, + { + name: '生活进水', + type: 'bar', + barWidth: '20%', + itemStyle: { + color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ + {offset: 0, color: '#52c41a'}, + {offset: 1, color: '#73d13d'} + ]) + }, + data: [0, 0, 0, 0, 0, 0, 0] + }, + { + name: '生活出水', + type: 'bar', + barWidth: '20%', + itemStyle: { + color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ + {offset: 0, color: '#2ecc71'}, + {offset: 1, color: '#58d68d'} + ]) + }, + data: [0, 0, 0, 0, 0, 0, 0] + } + ] + }; + chart.setOption(option); + chart.resize(); + +} + +/** + * echart柱状图--多点 (TGLW新版)- (工业生活污水流量7天日趋势) + */ +function echartColumnar2(unitId, mpointCode, echartId) { + var myChart = echarts.init(document.getElementById(echartId)); + + $.ajax({ + type: "GET", + // url: ext.contextPath + '/work/mpoint/getValueWeekS.do?unitId=' + unitId + '&mpointCode=' + mpointCode, + url: + ext.contextPath + + "/work/mpoint/getValueWeekS.do?unitId=" + + unitId + + "&mpointCode=" + + "C_GYJsssll,C_GYCsssll,C_SHJsssll,C_SHCsssll", + async: true, + globle: false, + error: function () { + return false; + }, + success: function (data) { + var datastr = eval("(" + data + ")"); + + var data1 = datastr.dataJson; + var data2 = datastr.timeJson; + var series = []; + var legendData = []; + + if (data1) { + data1.forEach(function(item, index) { + legendData.push(item.name); + var colors = [ + [{offset: 0, color: '#378dcc'}, {offset: 1, color: '#5ba3d9'}], + [{offset: 0, color: '#5b8def'}, {offset: 1, color: '#40a9ff'}], + [{offset: 0, color: '#52c41a'}, {offset: 1, color: '#73d13d'}], + [{offset: 0, color: '#2ecc71'}, {offset: 1, color: '#58d68d'}] + ]; + series.push({ + name: item.name, + type: item.type || 'bar', + barWidth: '20%', + itemStyle: { + color: new echarts.graphic.LinearGradient(0, 0, 0, 1, colors[index % colors.length]) + }, + data: item.data + }); + }); } - ], - "timeJson": [ - "2026-03-10", - "2026-03-11", - "2026-03-12", - "2026-03-13", - "2026-03-14", - "2026-03-15", - "2026-03-16" - ] - } - - var data1 = datastr.dataJson; - var data2 = datastr.timeJson; - - // var option = { - // color: ['#67D89F', '#FFBB00'], legend: {}, calculable: true, xAxis: [{ - // type: 'category', axisLabel: { - // interval: 0,//代表显示所有x轴标签显示 - // }, data: data2 - // }], yAxis: [{ - // type: 'value' - // }], grid: { - // left: '2%', right: '5%', bottom: '3%', containLabel: true - // }, series: data1 - // }; - // myChart.setOption(option); - // myChart.resize(); - - - - var option = { - color: ['#67D89F', '#FFBB00'], legend: {}, calculable: true, xAxis: [{ - type: 'category', axisLabel: { - interval: 0,//代表显示所有x轴标签显示 - }, data: data2 - }], yAxis: [{ - type: 'value' - }], grid: { - left: '2%', right: '5%', bottom: '3%', containLabel: true - }, series: data1 - }; - myChart.setOption(option); - myChart.resize(); - - - // $.ajax({ - // type: 'GET', - // url: ext.contextPath + '/work/mpoint/getValueWeekS.do?unitId=' + unitId + '&mpointCode=' + mpointCode, - // async: true, - // globle: false, - // error: function () { - // return false; - // }, - // success: function (data) { - // var datastr = eval('(' + data + ')'); - // - // var data1 = datastr.dataJson; - // var data2 = datastr.timeJson; - // - // var option = { - // color: ['#67D89F', '#FFBB00'], legend: {}, calculable: true, xAxis: [{ - // type: 'category', axisLabel: { - // interval: 0,//代表显示所有x轴标签显示 - // }, data: data2 - // }], yAxis: [{ - // type: 'value' - // }], grid: { - // left: '2%', right: '5%', bottom: '3%', containLabel: true - // }, series: data1 - // }; - // myChart.setOption(option); - // myChart.resize(); - // } - // }); + var option = { + tooltip: { + trigger: "axis", + axisPointer: { + type: "shadow", + }, + }, + legend: { + data: legendData, + top: 5, + textStyle: { + fontSize: 12, + }, + }, + grid: { + left: "5%", + right: "5%", + bottom: "8%", + top: "18%", + containLabel: true, + }, + xAxis: [ + { + type: "category", + data: data2, + axisLine: { + lineStyle: { + color: "#e8e8e8", + }, + }, + axisLabel: { + color: "#666", + fontSize: 12, + interval: 0, //代表显示所有x轴标签显示 + }, + }, + ], + yAxis: { + type: "value", + name: "m³/D", + nameTextStyle: { + fontSize: 12, + }, + axisLine: { + show: false, + }, + axisTick: { + show: false, + }, + axisLabel: { + color: "#666", + fontSize: 12, + }, + splitLine: { + lineStyle: { + color: "#f0f0f0", + }, + }, + }, + series: series, + }; + myChart.setOption(option); + myChart.resize(); + }, + }); } /** @@ -911,7 +721,10 @@ function echartColumnar1(unitId, mpointCode, echartId) { * @param unitId */ function getPic(unitId) { - $("#mainImg").attr("src", ext.contextPath + "/IMG/main/main_" + unitId + ".jpg"); + $("#mainImg").attr( + "src", + ext.contextPath + "/IMG/main/main_" + unitId + ".jpg", + ); } /** @@ -922,21 +735,37 @@ function getPic(unitId, unit, proDatavisualFrame) { //$("#mainImg").attr("src", ext.contextPath + "/IMG/main/main_" + unitId + ".jpg"); var unitIds = JSON.parse(unit); var proDatavisualFrames = JSON.parse(proDatavisualFrame); - var active = ''; - var item = ''; + var active = ""; + var item = ""; var proDatavisualFrames_i = 0; if (unitIds != null && unitIds.length > 0) { for (var i = 0; i < unitIds.length; i++) { - if (unitIds[i].type == 'B' || unitIds[i].type == 'C') { + if (unitIds[i].type == "B" || unitIds[i].type == "C") { var proDatavisualFrameId = proDatavisualFrames[proDatavisualFrames_i]; proDatavisualFrames_i++; if (unitId == unitIds[i].id) { - active = 'active'; + active = "active"; } else { - active = ''; + active = ""; } var src = ext.contextPath + "/IMG/main/main_" + unitIds[i].id + ".jpg"; - item += '

' + '' + '' + '
'; + item += + '
' + + '' + + '" + + "
"; } } } @@ -944,17 +773,39 @@ function getPic(unitId, unit, proDatavisualFrame) { } function getUnitsByUnitId4Select(id, funname, proDatavisualFrame) { - $.post(ext.contextPath + "/user/getUnitsByUnitId4Select.do", {id: id}, function (data) { - //console.log(data); - var unitIds = data; - eval(funname + "('" + id + "','" + unitIds + "','" + proDatavisualFrame + "')") - }); + $.post( + ext.contextPath + "/user/getUnitsByUnitId4Select.do", + { id: id }, + function (data) { + //console.log(data); + var unitIds = data; + eval( + funname + + "('" + + id + + "','" + + unitIds + + "','" + + proDatavisualFrame + + "')", + ); + }, + ); } function proDatavisualFrame(unitId, proDatavisualFrameId) { - if (proDatavisualFrameId != null && proDatavisualFrameId != undefined && proDatavisualFrameId != '') { - parent.addTab(proDatavisualFrameId, '工艺可视化', 'process/dataVisualFrame/view.do?frameId=' + proDatavisualFrameId + '&unitId=' + unitId); + if ( + proDatavisualFrameId != null && + proDatavisualFrameId != undefined && + proDatavisualFrameId != "" + ) { + parent.addTab( + proDatavisualFrameId, + "工艺可视化", + "process/dataVisualFrame/view.do?frameId=" + + proDatavisualFrameId + + "&unitId=" + + unitId, + ); } } - - diff --git a/src/main/webapp/jsp/equipment/equipmentCardReamrkView.jsp b/src/main/webapp/jsp/equipment/equipmentCardReamrkView.jsp index f58bffed..8276270a 100644 --- a/src/main/webapp/jsp/equipment/equipmentCardReamrkView.jsp +++ b/src/main/webapp/jsp/equipment/equipmentCardReamrkView.jsp @@ -105,16 +105,15 @@ masterId: id, tbName: tbName }, function (data) { - //console.info(data) + // 清空之前的配置 + previews = []; + previewConfigs = []; if (data.length > 0) { - previews = new Array(); $('#maintenancefile').show(); for (var i = 0; i < data.length; i++) { var previewConfig = new Object(); - var path = data[i].abspath; - path = path.substring(path.indexOf('webapps') + 7, path.length); - path = ext.basePath.replace(ext.contextPath, '') + path.replace(/\\/g, "\/"); - ; + // 预览地址:添加preview=true参数,让浏览器内嵌显示 + var path = ext.contextPath + "/report/rptInfoSetFile/downloadFile4minio.do?id=" + data[i].id + "&tbName=" + tbName + "&preview=true"; previews.push(path); previewConfig['width'] = '2500px'; previewConfig['caption'] = data[i].filename; diff --git a/src/main/webapp/jsp/login.jsp b/src/main/webapp/jsp/login.jsp index 11c773fc..fe74e3e6 100644 --- a/src/main/webapp/jsp/login.jsp +++ b/src/main/webapp/jsp/login.jsp @@ -135,7 +135,7 @@ //配置logo var array = eval(${jsonArray}); var verCode = true; - var bgpath = ["IMG/login/bg1.png"]; + var bgpath = ["IMG/loginbp.png"]; if(array!=null && array!=undefined && array.length>0){ for(var i =0;i