gauge.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. <html lang="en">
  2. <head>
  3. <meta charset="UTF-8">
  4. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  5. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  6. <title></title>
  7. <!-- <link rel="stylesheet" href="../lib/layui-v2.4.5/layui-v2.4.5/layui/css/layui.css"> -->
  8. <link rel="stylesheet" href="../css/index.css">
  9. <!-- <script type="text/javascript" src="../lib/layui-v2.4.5/layui-v2.4.5/layui/layui.js"></script> -->
  10. <script src="../lib/echarts.min.js"></script>
  11. <script src="../lib/jquery/jquery.min.js"></script>
  12. <script src="../lib/vue.min.js"></script>
  13. <style>
  14. .chart {
  15. width: 170px;
  16. height: 170px;
  17. }
  18. .container {
  19. position: relative;
  20. }
  21. .row {
  22. width: 100%;
  23. }
  24. .col {
  25. width: 170px;
  26. float: left;
  27. }
  28. .margin-top {
  29. margin-top: 50px;
  30. }
  31. #clock {
  32. font-family: 'Share Tech Mono', monospace;
  33. color: #427aa8;
  34. text-align: center;
  35. margin-top: 20px;
  36. margin-left: 35px;
  37. text-shadow: 0 0 20px #0aafe6, 0 0 20px rgba(10, 175, 230, 0);
  38. }
  39. #clock .time {
  40. letter-spacing: 0.05em;
  41. font-size: 65px;
  42. padding: 5px 0;
  43. }
  44. #clock .date {
  45. letter-spacing: 0.1em;
  46. font-size: 24px;
  47. }
  48. #clock .text {
  49. letter-spacing: 0.1em;
  50. font-size: 12px;
  51. padding: 20px 0 0;
  52. }
  53. </style>
  54. </head>
  55. <body style="padding-top:8px;">
  56. <div style="float:left;">
  57. <div class="container">
  58. <div class="row">
  59. <div class="col">
  60. <div id="db-effi" class="chart"></div>
  61. </div>
  62. <div class="col">
  63. <div id="db-runrate" class="chart"></div>
  64. </div>
  65. <div class="col">
  66. <div id="wb-effi" class="chart"></div>
  67. </div>
  68. <div class="col">
  69. <div id="wb-runrate" class="chart"></div>
  70. </div>
  71. </div>
  72. </div>
  73. </div>
  74. <div style="float: left;">
  75. <div id="clock">
  76. <p class="date"></p>
  77. <p class="time"></p>
  78. </div>
  79. </div>
  80. <script type="text/javascript">
  81. $(function () {
  82. var option = {
  83. tooltip: {
  84. formatter: "{a} <br/>{b} : {c}%"
  85. },
  86. series: [
  87. {
  88. name: '业务指标',
  89. type: 'gauge',
  90. splitLine: { // 分隔线样式。
  91. show: true, // 是否显示分隔线,默认 true。
  92. length: 10, // 分隔线线长。支持相对半径的百分比,默认 30。
  93. lineStyle: { // 分隔线样式。
  94. opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
  95. width: 2, //线度,默认 2。
  96. type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
  97. shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
  98. shadowColor: "#fff", //阴影颜色。支持的格式同color。
  99. }
  100. },
  101. axisTick: { // 刻度(线)样式。
  102. show: true, // 是否显示刻度(线),默认 true。
  103. splitNumber: 10, // 分隔线之间分割的刻度数,默认 5。
  104. length: 10, // 刻度线长。支持相对半径的百分比,默认 8。
  105. },
  106. pointer: { // 仪表盘指针。
  107. show: true, // 是否显示指针,默认 true。
  108. length: "50%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
  109. width: 4, // 指针宽度,默认 8。
  110. },
  111. itemStyle: { // 仪表盘指针样式。
  112. color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
  113. opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
  114. borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
  115. borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
  116. borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
  117. shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
  118. shadowColor: "#fff", // 阴影颜色。支持的格式同color。
  119. },
  120. title: { // 仪表盘标题。
  121. show: true, // 是否显示标题,默认 true。
  122. offsetCenter: [0, "-25%"],//相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
  123. color: "#5CACEE", // 文字的颜色,默认 #333。
  124. fontSize: 11, // 文字的字体大小,默认 15。
  125. },
  126. axisLabel: { // 刻度标签。
  127. show: true, // 是否显示标签,默认 true。
  128. distance: 10, // 标签与刻度线的距离,默认 5。
  129. fontSize: 10, // 文字的字体大小,默认 5。
  130. formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
  131. },
  132. radius: '90%',
  133. axisLine: { // 仪表盘轴线(轮廓线)相关配置。
  134. show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
  135. lineStyle: { // 仪表盘轴线样式。
  136. //仪表盘的轴线可以被分成不同颜色的多段。每段的 结束位置(范围是[0,1]) 和 颜色 可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
  137. opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
  138. width: 8, //轴线宽度,默认 30。
  139. shadowBlur: 20, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
  140. shadowColor: "#fff", //阴影颜色。支持的格式同color。
  141. }
  142. },
  143. detail: { formatter: '{value}%', fontSize: 15 },
  144. data: [{ value: 0, name: '' }]
  145. }
  146. ]
  147. };
  148. var dbEffi = echarts.init(document.getElementById('db-effi'));
  149. var dbRun = echarts.init(document.getElementById('db-runrate'));
  150. var wbEffi = echarts.init(document.getElementById('wb-effi'));
  151. var wbRun = echarts.init(document.getElementById('wb-runrate'));
  152. loadData();
  153. function loadData() {
  154. $.ajax({
  155. url: 'http://localhost:18531/eap/api/analysis2/getstatustotal',
  156. type: 'get',
  157. dataType: 'json',
  158. success: function (res) {
  159. console.log(res);
  160. var mtbfs = [];
  161. var effics = [];
  162. var dbM = 0, wbM = 0;
  163. if (res.mtbfs != null || res.mtbfs.length > 0) {
  164. for (var i = 0; i < res.mtbfs.length; i++) {
  165. if (res.mtbfs[i].pcode == 'DB') {
  166. dbM += res.mtbfs[i].mtbf;
  167. }
  168. if (res.mtbfs[i].pcode == 'WB') {
  169. wbM += res.mtbfs[i].mtbf;
  170. }
  171. }
  172. dbM = Math.round(dbM);
  173. wbM = Math.round(wbM);
  174. var overalMtbf = dbM + wbM;
  175. mtbfs = [{ type: 'total', value: overalMtbf }, { type: 'DB', value: dbM }, { type: 'WB', value: wbM }];
  176. }
  177. if (res.effics != null || res.effics.length > 0) {
  178. var dbEffiency = 0, dbRunRate = 0, dbIdleRate = 0, dbAlarmRate = 0;
  179. var wbEffiency = 0, wbRunRate = 0, wbIdleRate = 0, wbAlarmRate = 0;
  180. var totalEffiency = 0, totalRunRate = 0, totalIdleRate = 0, totalAlarmRate;
  181. for (var j = 0; j < res.effics.length; j++) {
  182. if (res.effics[j].key == 'DB') {
  183. dbEffiency = Math.round(res.effics[j].overallEfficiency * 100);
  184. dbRunRate = Math.round(res.effics[j].runRate * 100);
  185. // dbIdleRate = Math.round(res.effics[j].idleRate * 100);
  186. dbAlarmRate = Math.round(res.effics[j].alarmRate * 100);
  187. dbIdleRate = 100 - dbAlarmRate - dbRunRate;
  188. }
  189. if (res.effics[j].key == 'WB') {
  190. wbEffiency += Math.round(res.effics[j].overallEfficiency * 100);
  191. wbRunRate += Math.round(res.effics[j].runRate * 100);
  192. // wbIdleRate += Math.round(res.effics[j].idleRate * 100);
  193. wbAlarmRate += Math.round(res.effics[j].alarmRate * 100);
  194. wbIdleRate = 100 - wbRunRate - wbAlarmRate;
  195. }
  196. }
  197. totalEffiency = Math.round((dbEffiency + wbEffiency) / 2);
  198. totalRunRate = Math.round((dbRunRate + wbRunRate) / 2);
  199. // totalIdleRate = Math.round((dbIdleRate + wbIdleRate) / 2);
  200. totalAlarmRate = Math.round((dbAlarmRate + wbAlarmRate) / 2);
  201. totalIdleRate = 100 - totalRunRate - totalAlarmRate;
  202. plusZero(overalMtbf);
  203. plusZero(dbM);
  204. plusZero(wbM);
  205. plusZero(dbEffiency);
  206. plusZero(dbRunRate);
  207. plusZero(dbIdleRate);
  208. plusZero(dbAlarmRate);
  209. plusZero(wbEffiency);
  210. plusZero(wbRunRate);
  211. plusZero(wbIdleRate);
  212. plusZero(wbAlarmRate);
  213. plusZero(totalEffiency);
  214. plusZero(totalRunRate);
  215. plusZero(totalIdleRate);
  216. plusZero(totalAlarmRate);
  217. }
  218. setOption('', ['综合效率'], dbEffiency.toString(), [{ value: dbEffiency, name: 'DB综合效率' }], dbEffi);
  219. setOption('', ['稼动率'], dbRunRate.toString(), [{ value: dbRunRate, name: 'DB稼动率' }], dbRun);
  220. setOption('', ['综合效率'], wbEffiency.toString(), [{ value: wbEffiency, name: 'WB综合效率' }], wbEffi);
  221. setOption('', ['稼动率'], wbRunRate.toString(), [{ value: wbRunRate, name: 'WB稼动率' }], wbRun);
  222. }
  223. });
  224. setTimeout(() => {
  225. loadData();
  226. }, 1000 * 60 * 60 * 2);
  227. }
  228. function setOption(title, lenged, name, data, chart) {
  229. // option.title.text = title;
  230. //option.legend.title = lenged;
  231. option.series[0].name = name;
  232. option.series[0].data = data;
  233. chart.setOption(option);
  234. }
  235. function plusZero(value) {
  236. if (value > 0)
  237. return value + 0.001;
  238. }
  239. var week = ['星期天', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
  240. var timerID = setInterval(updateTime, 1000);
  241. updateTime();
  242. function updateTime() {
  243. var cd = new Date();
  244. var time = zeroPadding(cd.getHours(), 2) + ':' + zeroPadding(cd.getMinutes(), 2) + ':' + zeroPadding(cd.getSeconds(), 2);
  245. var date = zeroPadding(cd.getFullYear(), 4) + '-' + zeroPadding(cd.getMonth() + 1, 2) + '-' + zeroPadding(cd.getDate(), 2) + ' ' + week[cd.getDay()];
  246. $('.date').text(date);
  247. $('.time').text(time);
  248. };
  249. function zeroPadding(num, digit) {
  250. var zero = '';
  251. for (var i = 0; i < digit; i++) {
  252. zero += '0';
  253. }
  254. return (zero + num).slice(-digit);
  255. }
  256. });
  257. </script>
  258. </body>
  259. </html>