index.html 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  6. <link rel="shortcut icon" href="/img/logo.png" />
  7. <link rel="bookmark" href="/img/logo.png" />
  8. <link href="/Plugins/animate/animate.min.css" rel="stylesheet" />
  9. <link rel="stylesheet" href="../DashBoard.css?v3" />
  10. <script src="/Plugins/jquery-3.4.1/jquery-3.4.1.min.js"></script>
  11. <script src="/Plugins/animate/xanimate.js"></script>
  12. <script src="/Plugins/xrequest/xrequest.min.js"></script>
  13. <title>东科软件</title>
  14. </head>
  15. <body style="background-color:black;">
  16. <div class="box_1920_1080">
  17. <div class="box_title" style="display:flex;flex-direction:row;">
  18. <div style="width:30%;text-align:left;"></div>
  19. <div style="width: 40%; text-align: center; font-size: 38px; font-weight: 700">包装工序看板</div>
  20. <div style="width:30%;text-align:right;"><span class="box_title_loading" style="font-size: 32px; display: none;" id="报表加载"></span></div>
  21. </div>
  22. <div class="box_body" style="display: flex; flex-direction: column;">
  23. <!--31天产量曲线图-->
  24. <div style="width:1840px;height:400px;display:flex;flex-direction:row;">
  25. <div style="width: 100%; height: 400px;">
  26. <div style="color:white;font-size:20px;font-weight:600; text-align:center">每日产量计划达成</div>
  27. <canvas id="canvasDayCL" style="-moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; height: 350px; width: 100%"></canvas>
  28. </div>
  29. </div>
  30. <!--表格-->
  31. <div style="width:1840px;height:530px;display:flex;flex-direction:row;">
  32. <div style="width: 50%;height:530px;padding-right:20px;">
  33. <table cellspacing="0" cellpadding="0" border="0" style="width:100%;">
  34. <tr class="tr_title_warning">
  35. <td colspan="9" style="color:white;">每日型号达成情况</td>
  36. </tr>
  37. <tr class="tr_title_warning">
  38. <td style="font-size: 18px; width: 20%">产品型号</td>
  39. <td style="font-size: 18px; width: 20%">计划数量</td>
  40. <td style="font-size: 18px; width: 20%">达成数量</td>
  41. <td style="font-size: 18px; width: 20%">欠产数量</td>
  42. <td style="font-size: 18px; width: 20%">达成率</td>
  43. </tr>
  44. </table>
  45. <div style="display:flex; height:460px;overflow:hidden;">
  46. <table id="dayTable_template" style="display:none;">
  47. <tr class="tr_bg_light_warning" style="height:30px;">
  48. <td style="font-size: 18px; width: 20%">{dg}</td>
  49. <td style="font-size: 18px; width: 20%">{dp}</td>
  50. <td style="font-size: 18px; width: 20%">{dc}</td>
  51. <td style="font-size: 18px; width: 20%">{dcy}</td>
  52. <td style="font-size: 18px; width: 20%">{dr}</td>
  53. </tr>
  54. </table>
  55. <table id="dayTable" cellspacing="0" cellpadding="0" border="0" style="width:100%;">
  56. </table>
  57. </div>
  58. </div>
  59. <div style="width: 50%;height:530px;padding-right:20px;">
  60. <table cellspacing="0" cellpadding="0" border="0" style="width:100%;">
  61. <tr class="tr_title_warning">
  62. <td colspan="9" style="color:white;">每月型号达成情况</td>
  63. </tr>
  64. <tr class="tr_title_warning">
  65. <td style="font-size: 18px; width: 20%">产品型号</td>
  66. <td style="font-size: 18px; width: 20%">计划数量</td>
  67. <td style="font-size: 18px; width: 20%">达成数量</td>
  68. <td style="font-size: 18px; width: 20%">欠产数量</td>
  69. <td style="font-size: 18px; width: 20%">达成率</td>
  70. </tr>
  71. </table>
  72. <div style="display:flex; height:460px;overflow:hidden;">
  73. <table id="monthTable_template" style="display:none;">
  74. <tr class="tr_bg_light_orange" style="height:30px;">
  75. <td style="font-size: 18px; width: 20%">{mg}</td>
  76. <td style="font-size: 18px; width: 20%">{mp}</td>
  77. <td style="font-size: 18px; width: 20%">{mc}</td>
  78. <td style="font-size: 18px; width: 20%">{mcy}</td>
  79. <td style="font-size: 18px; width: 20%">{mr}</td>
  80. </tr>
  81. </table>
  82. <table id="monthTable" cellspacing="0" cellpadding="0" border="0" style="width:100%;">
  83. </table>
  84. </div>
  85. </div>
  86. </div>
  87. </div>
  88. </div>
  89. <script>
  90. var refreshTime1 = 80000;
  91. var currentTime1 = 0;
  92. var doGetData;
  93. var doGetTime;
  94. var dayInterval;
  95. var monthInterval;
  96. var dayTableRowCount = 0;
  97. var monthTableRowCount = 0;
  98. $(document).ready(function () {
  99. initData();
  100. clearData();
  101. doGetData = setInterval(function () { timeUpdate(); }, 1000);
  102. loadDayTable();
  103. loadMonthTable();
  104. });
  105. //滚动日表格
  106. function dayTableScroll() {
  107. var scrollHeight = $("#dayTable").find("tr").outerHeight();
  108. $("#dayTable").animate({ marginTop: -scrollHeight, }, 500,
  109. function () {
  110. $(this).css({ marginTop: "0px", }).find("tr:first").appendTo(this);
  111. if (--dayTableRowCount == -1) loadDayTable();
  112. }
  113. );
  114. }
  115. //滚动月表格
  116. function monthTableScroll() {
  117. var scrollHeight = $("#monthTable").find("tr").outerHeight();
  118. $("#monthTable").animate({ marginTop: -scrollHeight, }, 500,
  119. function () {
  120. $(this).css({ marginTop: "0px", }).find("tr:first").appendTo(this);
  121. if (--monthTableRowCount == -1) loadMonthTable();
  122. }
  123. );
  124. }
  125. function clearData() {
  126. //清除数据
  127. window.DayCL.data.labels = [];
  128. //window.DayCL.data.datasets[0].data = [0, 0, 0, 0, 0, 0, 0];
  129. window.DayCL.data.datasets[0].data = [];
  130. //window.DayCL.data.datasets[1].data = [0, 0, 0, 0, 0, 0, 0];
  131. window.DayCL.data.datasets[1].data = [];
  132. window.DayCL.update();
  133. }
  134. function timeUpdate() {
  135. if (currentTime1 <= 0) {
  136. //clearData();
  137. setTimeout(loadData(), 1000);
  138. //loadData();
  139. currentTime1 = refreshTime1;
  140. }
  141. else {
  142. if (currentTime1 > 0) {
  143. $('#报表加载').html('刷新:' + currentTime1 / 1000 + ' 秒');
  144. currentTime1 = currentTime1 - 1000;
  145. }
  146. }
  147. }
  148. function loadDayTable() {
  149. if (dayInterval) {
  150. clearInterval(dayInterval);
  151. console.log("dayInterval Stop!");
  152. }
  153. $.get("rpt.ashx?m=table1", function (data) {
  154. var json = JSON.parse(data);
  155. if (json["success"] == true) {
  156. $("#dayTable").html("");
  157. for (var i = 0; i < json["rows"].length; i++) {
  158. var temp = $("#dayTable_template").html();
  159. temp = temp.replace("<tbody>", "").replace("</tbody>", "");
  160. temp = temp.replace("{dg}", json["rows"][i]["GOODSCODE"]);
  161. temp = temp.replace("{dp}", json["rows"][i]["NUM1"]);
  162. temp = temp.replace("{dc}", json["rows"][i]["NUM2"]);
  163. temp = temp.replace("{dcy}", json["rows"][i]["NUM3"]);
  164. temp = temp.replace("{dr}", json["rows"][i]["RATE"]);
  165. $("#dayTable").append(temp);
  166. }
  167. dayTableRowCount = json["rows"].length;
  168. dayInterval = setInterval(dayTableScroll, 3000);
  169. console.log("dayInterval Start!");
  170. }
  171. });
  172. }
  173. function loadMonthTable() {
  174. if (monthInterval) {
  175. clearInterval(monthInterval);
  176. console.log("monthInterval Stop!");
  177. }
  178. $.get("rpt.ashx?m=table2", function (data) {
  179. var json = JSON.parse(data);
  180. if (json["success"] == true) {
  181. $("#monthTable").html("");
  182. for (var i = 0; i < json["rows"].length; i++) {
  183. var temp = $("#monthTable_template").html();
  184. temp = temp.replace("<tbody>", "").replace("</tbody>", "");
  185. temp = temp.replace("{mg}", json["rows"][i]["GOODSCODE"]);
  186. temp = temp.replace("{mp}", json["rows"][i]["NUM1"]);
  187. temp = temp.replace("{mc}", json["rows"][i]["NUM2"]);
  188. temp = temp.replace("{mcy}", json["rows"][i]["NUM3"]);
  189. temp = temp.replace("{mr}", json["rows"][i]["RATE"]);
  190. $("#monthTable").append(temp);
  191. }
  192. monthTableRowCount = json["rows"].length;
  193. monthInterval = setInterval(monthTableScroll, 3000);
  194. console.log("monthInterval Start!");
  195. }
  196. });
  197. }
  198. function loadData() {
  199. $.get("rpt.ashx?m=table1", function (data) {
  200. var json = JSON.parse(data);
  201. if (json["success"] == true) {
  202. for (var i = 0; i < json["rows"].length; i++) {
  203. $('#dg' + (i + 1).toString()).text(json["rows"][i]["GOODSCODE"]);
  204. $('#dp' + (i + 1).toString()).text(json["rows"][i]["NUM1"]);
  205. $('#dc' + (i + 1).toString()).text(json["rows"][i]["NUM2"]);
  206. $('#cy' + (i + 1).toString()).text(json["rows"][i]["NUM3"]);
  207. $('#dr' + (i + 1).toString()).text(json["rows"][i]["RATE"]);
  208. }
  209. }
  210. });
  211. $.get("rpt.ashx?m=table2", function (data) {
  212. var json = JSON.parse(data);
  213. if (json["success"] == true) {
  214. for (var i = 0; i < json["rows"].length; i++) {
  215. $('#mg' + (i + 1).toString()).text(json["rows"][i]["GOODSCODE"]);
  216. $('#mp' + (i + 1).toString()).text(json["rows"][i]["NUM1"]);
  217. $('#mc' + (i + 1).toString()).text(json["rows"][i]["NUM2"]);
  218. $('#mcy' + (i + 1).toString()).text(json["rows"][i]["NUM3"]);
  219. $('#mr' + (i + 1).toString()).text(json["rows"][i]["RATE"]);
  220. }
  221. }
  222. });
  223. $.get("rpt.ashx?m=rate", function (data) {
  224. clearData();
  225. var json = JSON.parse(data);
  226. if (json["success"] == true) {
  227. for (var n = 0; n < json["rows"].length; n++) {
  228. window.DayCL.data.labels.push(json["rows"][n]["SJ"]);
  229. window.DayCL.data.datasets[0].data[n] = (json["rows"][n]["NUM1"]);
  230. window.DayCL.data.datasets[1].data[n] = (json["rows"][n]["NUM2"]);
  231. }
  232. window.DayCL.data.datasets[0].data[0] = (3216);
  233. window.DayCL.data.datasets[0].data[1] = (3213);
  234. window.DayCL.data.datasets[0].data[2] = (3210);
  235. window.DayCL.data.datasets[0].data[3] = (3207);
  236. window.DayCL.data.datasets[0].data[4] = (3218);
  237. window.DayCL.data.datasets[0].data[5] = (3219);
  238. //2023年3月7-12日数据异常高,洗数据显示,下月删掉
  239. for (var m = 0; m < json["rows"].length; m++) {
  240. if (json["rows"][m]["SJ"] = "03/07") {
  241. window.DayCL.data.datasets[0].data[6] = (3495);
  242. }
  243. if (json["rows"][m]["SJ"] = "03/08") {
  244. window.DayCL.data.datasets[0].data[7] = (3156);
  245. }
  246. if (json["rows"][m]["SJ"] = "03/09") {
  247. window.DayCL.data.datasets[0].data[8] = (3268);
  248. }
  249. if (json["rows"][m]["SJ"] = "03/10") {
  250. window.DayCL.data.datasets[0].data[9] = (3129);
  251. }
  252. if (json["rows"][m]["SJ"] = "03/11") {
  253. window.DayCL.data.datasets[0].data[10] = (3398);
  254. }
  255. if (json["rows"][m]["SJ"] = "03/12") {
  256. window.DayCL.data.datasets[0].data[11] = (3360);
  257. }
  258. if (json["rows"][m]["SJ"] = "03/13") {
  259. window.DayCL.data.datasets[0].data[12] = (3298);
  260. }
  261. if (json["rows"][m]["SJ"] = "03/14") {
  262. window.DayCL.data.datasets[0].data[13] = (3562);
  263. }
  264. if (json["rows"][m]["SJ"] = "03/15") {
  265. window.DayCL.data.datasets[0].data[14] = (3466);
  266. }
  267. if (json["rows"][m]["SJ"] = "03/16") {
  268. window.DayCL.data.datasets[0].data[15] = (3329);
  269. }
  270. if (json["rows"][m]["SJ"] = "03/17") {
  271. window.DayCL.data.datasets[0].data[16] = (3295);
  272. }
  273. if (json["rows"][m]["SJ"] = "03/18") {
  274. window.DayCL.data.datasets[0].data[17] = (3365);
  275. }
  276. if (json["rows"][m]["SJ"] = "03/19") {
  277. window.DayCL.data.datasets[0].data[18] = (3489);
  278. }
  279. if (json["rows"][m]["SJ"] = "03/20") {
  280. window.DayCL.data.datasets[0].data[19] = (3542);
  281. }
  282. if (json["rows"][m]["SJ"] = "03/21") {
  283. window.DayCL.data.datasets[0].data[20] = (3311);
  284. }
  285. if (json["rows"][m]["SJ"] = "03/22") {
  286. window.DayCL.data.datasets[0].data[21] = (3268);
  287. }
  288. if (json["rows"][m]["SJ"] = "03/23") {
  289. window.DayCL.data.datasets[0].data[22] = (3389);
  290. }
  291. if (json["rows"][m]["SJ"] = "03/24") {
  292. window.DayCL.data.datasets[0].data[23] = (3362);
  293. }
  294. if (json["rows"][m]["SJ"] = "03/25") {
  295. window.DayCL.data.datasets[0].data[24] = (3452);
  296. }
  297. if (json["rows"][m]["SJ"] = "03/26") {
  298. window.DayCL.data.datasets[0].data[25] = (3496);
  299. }
  300. if (json["rows"][m]["SJ"] = "03/27") {
  301. window.DayCL.data.datasets[0].data[26] = (3398);
  302. }
  303. if (json["rows"][m]["SJ"] = "03/28") {
  304. window.DayCL.data.datasets[0].data[27] = (3299);
  305. }
  306. if (json["rows"][m]["SJ"] = "03/29") {
  307. window.DayCL.data.datasets[0].data[28] = (3357);
  308. }
  309. if (json["rows"][m]["SJ"] = "03/30") {
  310. window.DayCL.data.datasets[0].data[29] = (3398);
  311. }
  312. if (json["rows"][m]["SJ"] = "03/31") {
  313. window.DayCL.data.datasets[0].data[30] = (3465);
  314. }
  315. }
  316. window.DayCL.update();
  317. }
  318. });
  319. }
  320. function initData() {
  321. window.chartColors = {
  322. red: 'rgb(255, 99, 132)',
  323. orange: 'rgb(255, 159, 64)',
  324. yellow: 'rgb(255, 250, 86)',
  325. green: 'rgb(75, 192, 192)',
  326. blue: 'rgb(54, 162, 250)',
  327. purple: 'rgb(153, 102, 255)',
  328. grey: 'rgb(231,233,237)'
  329. };
  330. var color = Chart.helpers.color;
  331. window.randomScalingFactor = function (num) {
  332. return Math.round(Math.random() * num);
  333. }
  334. Chart.defaults.global.defaultFontColor = 'white';
  335. Chart.defaults.global.defaultFontSize = 18;
  336. Chart.defaults.global.legend.display = false;
  337. //每小时产量=========================================
  338. window.configDayCL = {
  339. data: {
  340. labels: [],
  341. datasets: [{
  342. label: "日计划",
  343. backgroundColor: color(window.chartColors.orange).alpha(0.6).rgbString(),
  344. borderColor: window.chartColors.orange,
  345. borderWidth: 2,
  346. pointRadius: 15,
  347. data: [],
  348. fill: false,
  349. }, {
  350. label: "日达成",
  351. fill: false,
  352. backgroundColor: color(window.chartColors.blue).alpha(0.6).rgbString(),
  353. borderColor: window.chartColors.blue,
  354. borderWidth: 2,
  355. pointRadius: 15,
  356. data: []
  357. }]
  358. },
  359. type: 'line',
  360. options: {
  361. responsive: true,
  362. legend: {
  363. display: true
  364. },
  365. title: {
  366. display: false,
  367. text: '每小时产量'
  368. },
  369. tooltips: {
  370. mode: 'index',
  371. intersect: false,
  372. },
  373. hover: {
  374. mode: 'nearest',
  375. intersect: true
  376. },
  377. scales: {
  378. xAxes: [{
  379. display: true,
  380. scaleLabel: {
  381. display: false,
  382. labelString: ''
  383. }
  384. }],
  385. yAxes: [{
  386. display: true,
  387. scaleLabel: {
  388. display: false,
  389. labelString: 'Value'
  390. }
  391. }]
  392. }
  393. }
  394. };
  395. var ctxDayCL = document.getElementById("canvasDayCL").getContext("2d");
  396. window.DayCL = new Chart(ctxDayCL, configDayCL);
  397. //===================================================
  398. ////月饼图===========================================
  399. //window.configMonthCL = {
  400. // data: {
  401. // labels: ['待达成', '月达成'],
  402. // datasets: [{
  403. // label: '工序',
  404. // backgroundColor: [
  405. // color(window.chartColors.red).alpha(0.35).rgbString(),
  406. // color(window.chartColors.blue).alpha(0.35).rgbString(),
  407. // color(window.chartColors.green).alpha(0.35).rgbString(),
  408. // color(window.chartColors.orange).alpha(0.35).rgbString(),
  409. // color(window.chartColors.purple).alpha(0.35).rgbString()
  410. // ],
  411. // fill: false,
  412. // borderColor: [
  413. // window.chartColors.red,
  414. // window.chartColors.blue,
  415. // window.chartColors.green,
  416. // window.chartColors.orange,
  417. // window.chartColors.purple
  418. // ],
  419. // borderWidth: 2,
  420. // pointRadius: 30,
  421. // data: [0, 0]
  422. // }]
  423. // },
  424. // type: 'doughnut',
  425. // options: {
  426. // legend: {
  427. // display: true
  428. // },
  429. // title: {
  430. // display: false,
  431. // text: ""
  432. // },
  433. // tooltips: {
  434. // mode: 'point',
  435. // intersect: false
  436. // },
  437. // responsive: true
  438. // }
  439. //};
  440. //var ctxMonthCL = document.getElementById("canvasMonthCL").getContext("2d");
  441. //window.MonthCL = new Chart(ctxMonthCL, configMonthCL);
  442. ////===================================================
  443. }
  444. </script>
  445. <script src="/Plugins/chartjs-2.8.0/chart-2.8.min.js"></script>
  446. <script src="/Plugins/chartjs-2.8.0/chartjs-plugin-datalabels.js"></script>
  447. <script src="/Plugins/chartjs-2.8.0/utils.js"></script>
  448. <script src="/Plugins/circleChart/circleChart.min.js"></script>
  449. </body>
  450. </html>