demo.html 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456
  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 rel="stylesheet" href="../DashBoard.css?v3" />
  9. <script src="/Plugins/jquery-3.4.1/jquery-3.4.1.min.js"></script>
  10. <script src="/Plugins/xrequest/xrequest.min.js"></script>
  11. <title>东科软件</title>
  12. </head>
  13. <body style="background-color:black;">
  14. <div class="box_1920_1080">
  15. <div class="box_title" onclick="showHelp()" style="cursor:pointer">
  16. 月计划达成率&nbsp;&nbsp;<span class="box_title_arrow">>>></span><span class="box_title_loading" id="报表加载"></span>
  17. </div>
  18. <div class="box_body" style="display: flex; flex-direction: column;">
  19. <div style="width:1840px;height:500px;display:flex;flex-direction:row;">
  20. <div style="width: 70%;height:500px;">
  21. <!--月计划达成率表格-->
  22. <table cellspacing="0" cellpadding="0" border="0" style="width:100%;">
  23. <tr class="tr_title">
  24. <td colspan="6" style="color:white">智能马桶成品统计(月度)</td>
  25. </tr>
  26. <tr class="tr_title">
  27. <td>序号</td>
  28. <td>产品型号</td>
  29. <td>滚动计划数</td>
  30. <td>实际生产数</td>
  31. <td>单位</td>
  32. <td>实际达成率</td>
  33. </tr>
  34. <tr class="tr_bg_light">
  35. <td>1</td>
  36. <td id="q1"></td>
  37. <td id="w1"></td>
  38. <td id="p1"></td>
  39. <td>件</td>
  40. <td id="e1"></td>
  41. </tr>
  42. <tr class="tr_bg_dark">
  43. <td>2</td>
  44. <td id="q2"></td>
  45. <td id="w2"></td>
  46. <td id="p2"></td>
  47. <td>件</td>
  48. <td id="e2"></td>
  49. </tr>
  50. <tr class="tr_bg_light">
  51. <td>3</td>
  52. <td id="q3"></td>
  53. <td id="w3"></td>
  54. <td id="p3"></td>
  55. <td>件</td>
  56. <td id="e3"></td>
  57. </tr>
  58. <tr class="tr_bg_dark">
  59. <td>4</td>
  60. <td id="q4"></td>
  61. <td id="w4"></td>
  62. <td id="p4"></td>
  63. <td>件</td>
  64. <td id="e4"></td>
  65. </tr>
  66. <tr class="tr_bg_light">
  67. <td>5</td>
  68. <td id="q5"></td>
  69. <td id="w5"></td>
  70. <td id="p5"></td>
  71. <td>件</td>
  72. <td id="e5"></td>
  73. </tr>
  74. <tr class="tr_bg_dark">
  75. <td>6</td>
  76. <td id="q6"></td>
  77. <td id="w6"></td>
  78. <td id="p6"></td>
  79. <td>件</td>
  80. <td id="e6"></td>
  81. </tr>
  82. </table>
  83. </div>
  84. <div style="width: 30%; height: 500px; padding-left:20px;">
  85. <!--工序预警表格-->
  86. <table cellspacing="0" cellpadding="0" border="0" style="width:100%;">
  87. <tr class="tr_title_warning">
  88. <td colspan="2" style="color:white">三车间各工序完工统计 (月度)</td>
  89. </tr>
  90. <tr class="tr_title_warning">
  91. <td>序号</td>
  92. <td>工序预警标准</td>
  93. </tr>
  94. <tr class="tr_bg_light_warning">
  95. <td>1</td>
  96. <td id="t1"></td>
  97. </tr>
  98. <tr class="tr_bg_dark_warning">
  99. <td>2</td>
  100. <td id="t2"></td>
  101. </tr>
  102. <tr class="tr_bg_light_warning">
  103. <td>3</td>
  104. <td id="t3"></td>
  105. </tr>
  106. <tr class="tr_bg_dark_warning">
  107. <td>4</td>
  108. <td id="t4"></td>
  109. </tr>
  110. <tr class="tr_bg_light_warning">
  111. <td>5</td>
  112. <td id="t5"></td>
  113. </tr>
  114. <tr class="tr_bg_dark_warning">
  115. <td>6</td>
  116. <td id="t6"></td>
  117. </tr>
  118. </table>
  119. </div>
  120. </div>
  121. <div style="width:1840px;height:460px;display:flex;flex-direction:row;">
  122. <div style="width: 50%; height: 460px; ">
  123. <!--产品完成度百分比-->
  124. <canvas id="canvasGoodsCL" style="-moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; height: 460px; width: 100%"></canvas>
  125. </div>
  126. <div style="width: 50%; height: 460px;">
  127. <!--工序完工占比-->
  128. <canvas id="canvasProcedureCL" style="-moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; height: 460px; width: 100%"></canvas>
  129. </div>
  130. </div>
  131. </div>
  132. </div>
  133. <script>
  134. //缺陷统计刷新时间
  135. var refreshTime1 = 3000;
  136. var currentTime1 = 0;
  137. var doGetData;
  138. var doGetTime;
  139. var frameHeight;
  140. var tableHeight;
  141. var offsetHeight = 20;
  142. $(document).ready(function () {
  143. initData();
  144. clearData();
  145. doGetData = setInterval(function () { timeUpdate(); }, 1000);
  146. });
  147. //帮助说明
  148. function showHelp() {
  149. var message = "统计说明:" + "\n";
  150. message += "型号滚动计划数: web端看板配置-产品产量计划; 计划数 * (本月已过天数 / 本月天数);" + "\n";
  151. message += "工序计划数: web端看板配置-看板工序产量计划; 计划数 * (本月已过天数 / 本月天数);" + "\n";
  152. message += "智能马桶型号实际产量: 对应型号的产成品交接数,不区分车间" + "\n";
  153. message += "成型工序完工产量: 三车间型号的注浆数" + "\n";
  154. message += "一检工序完工产量: 三车间型号的2#-3#交坯数和3#交坯数" + "\n";
  155. message += "改洗工序完工产量: 三车间型号的3#上水数" + "\n";
  156. message += "施釉工序完工产量: 三车间型号的3#施釉数" + "\n";
  157. message += "烧成工序完工产量: 全部车间的3#入窑数" + "\n";
  158. message += "成检工序完工产量: 全部车间的3#成检交接数" + "\n";
  159. alert(message);
  160. }
  161. function timeUpdate() {
  162. if (currentTime1 <= 0) {
  163. //clearData();
  164. setTimeout(loadData(), 1000);
  165. //loadData();
  166. currentTime1 = refreshTime1;
  167. }
  168. else {
  169. if (currentTime1 > 0) {
  170. $('#报表加载').html('刷新:' + currentTime1 / 1000 + ' 秒');
  171. currentTime1 = currentTime1 - 1000;
  172. }
  173. }
  174. }
  175. function clearData() {
  176. //清除数据
  177. window.GoodsCL.data.datasets[0].data = [0, 0, 0, 0, 0, 0];
  178. window.GoodsCL.data.datasets[1].data = [0, 0, 0, 0, 0, 0];
  179. window.GoodsCL.update();
  180. window.ProcedureCL.data.datasets[0].data = [0, 0, 0, 0, 0, 0, 0];
  181. window.ProcedureCL.data.datasets[1].data = [0, 0, 0, 0, 0, 0, 0];
  182. window.ProcedureCL.update();
  183. }
  184. function loadData(callback) {
  185. //获取月产品完工数据
  186. $.get("demo.ashx?m=finish", function (data) {
  187. var json = JSON.parse(data);
  188. if (json["success"] == true) {
  189. for (var i = 0; i < json["rows"].length; i++) {
  190. $("#q" + (i + 1).toString()).text(json["rows"][i]["型号"]);
  191. $("#w" + (i + 1).toString()).text(json["rows"][i]["本月计划数"]);
  192. $("#p" + (i + 1).toString()).text(json["rows"][i]["达成数"]);
  193. $("#e" + (i + 1).toString()).text(json["rows"][i]["目标达成率"]);
  194. window.GoodsCL.data.labels[i] = (json["rows"][i]["型号"]);
  195. window.GoodsCL.data.datasets[1].data[i] = (json["rows"][i]["达成数"]);
  196. window.GoodsCL.data.datasets[0].data[i] = (json["rows"][i]["本月计划数"]);
  197. }
  198. window.GoodsCL.update();
  199. }
  200. });
  201. //成型
  202. $.get("demo.ashx?m=procedure&procedure=成型", function (data) {
  203. var json = JSON.parse(data);
  204. if (json["success"] == true) {
  205. window.ProcedureCL.data.datasets[1].data[0] = (json["rows"][0]["月实际生产数"]);
  206. window.ProcedureCL.data.datasets[0].data[0] = (json["rows"][0]["计划数"]);
  207. window.ProcedureCL.update();
  208. if (parseInt(json["rows"][0]["完成率"]) + parseInt(json["rows"][0]["预警"]) < 100) {
  209. $("#t1").text("【成型】工序产量低于" + (100 - parseInt(json["rows"][0]["预警"])) + "%");
  210. } else {
  211. $("#t1").text("【成型】达成");
  212. }
  213. }
  214. });
  215. //一检
  216. $.get("demo.ashx?m=procedure&procedure=一检", function (data) {
  217. var json = JSON.parse(data);
  218. if (json["success"] == true) {
  219. window.ProcedureCL.data.datasets[1].data[1] = (json["rows"][0]["月实际生产数"]);
  220. window.ProcedureCL.data.datasets[0].data[1] = (json["rows"][0]["计划数"]);
  221. window.ProcedureCL.update();
  222. if (parseInt(json["rows"][0]["完成率"]) + parseInt(json["rows"][0]["预警"]) < 100) {
  223. $("#t2").text("【一检】工序产量低于" + (100 - parseInt(json["rows"][0]["预警"])) + "%");
  224. } else {
  225. $("#t2").text("【一检】达成");
  226. }
  227. }
  228. });
  229. //改洗
  230. $.get("demo.ashx?m=procedure&procedure=改洗", function (data) {
  231. var json = JSON.parse(data);
  232. if (json["success"] == true) {
  233. window.ProcedureCL.data.datasets[1].data[2] = (json["rows"][0]["月实际生产数"]);
  234. window.ProcedureCL.data.datasets[0].data[2] = (json["rows"][0]["计划数"]);
  235. window.ProcedureCL.update();
  236. if (parseInt(json["rows"][0]["完成率"]) + parseInt(json["rows"][0]["预警"]) < 100) {
  237. $("#t3").text("【改洗】工序产量低于" + (100 - parseInt(json["rows"][0]["预警"])) + "%");
  238. } else {
  239. $("#t3").text("【改洗】达成");
  240. }
  241. }
  242. });
  243. //二检
  244. $.get("demo.ashx?m=procedure&procedure=二检", function (data) {
  245. var json = JSON.parse(data);
  246. if (json["success"] == true) {
  247. window.ProcedureCL.data.datasets[1].data[3] = (json["rows"][0]["月实际生产数"]);
  248. window.ProcedureCL.data.datasets[0].data[3] = (json["rows"][0]["计划数"]);
  249. window.ProcedureCL.update();
  250. if (parseInt(json["rows"][0]["完成率"]) + parseInt(json["rows"][0]["预警"]) < 100) {
  251. $("#t4").text("【二检】工序产量低于" + (100 - parseInt(json["rows"][0]["预警"])) + "%");
  252. } else {
  253. $("#t4").text("【二检】达成");
  254. }
  255. }
  256. });
  257. //施釉
  258. $.get("demo.ashx?m=procedure&procedure=施釉", function (data) {
  259. var json = JSON.parse(data);
  260. if (json["success"] == true) {
  261. window.ProcedureCL.data.datasets[1].data[4] = (json["rows"][0]["月实际生产数"]);
  262. window.ProcedureCL.data.datasets[0].data[4] = (json["rows"][0]["计划数"]);
  263. window.ProcedureCL.update();
  264. if (parseInt(json["rows"][0]["完成率"]) + parseInt(json["rows"][0]["预警"]) < 100) {
  265. $("#t5").text("【施釉】工序产量低于" + (100 - parseInt(json["rows"][0]["预警"])) + "%");
  266. } else {
  267. $("#t5").text("【施釉】达成");
  268. }
  269. }
  270. });
  271. //烧成
  272. $.get("demo.ashx?m=procedure&procedure=烧成", function (data) {
  273. var json = JSON.parse(data);
  274. if (json["success"] == true) {
  275. window.ProcedureCL.data.datasets[1].data[5] = (json["rows"][0]["月实际生产数"]);
  276. window.ProcedureCL.data.datasets[0].data[5] = (json["rows"][0]["计划数"]);
  277. window.ProcedureCL.update();
  278. if (parseInt(json["rows"][0]["完成率"]) + parseInt(json["rows"][0]["预警"]) < 100) {
  279. $("#t6").text("【烧成】工序产量低于" + (100 - parseInt(json["rows"][0]["预警"])) + "%");
  280. } else {
  281. $("#t6").text("【烧成】达成");
  282. }
  283. }
  284. });
  285. //成检
  286. $.get("demo.ashx?m=procedure&procedure=成检", function (data) {
  287. var json = JSON.parse(data);
  288. if (json["success"] == true) {
  289. window.ProcedureCL.data.datasets[1].data[6] = (json["rows"][0]["月实际生产数"]);
  290. window.ProcedureCL.data.datasets[0].data[6] = (json["rows"][0]["计划数"]);
  291. window.ProcedureCL.update();
  292. //if (parseInt(json["rows"][0]["完成率"]) + parseInt(json["rows"][0]["预警"]) < 100) {
  293. // $("#t7").text("【成检】工序产量低于" + json["rows"][0]["预警"] + "%");
  294. //} else {
  295. // $("#t7").text("【成检】达成");
  296. //}
  297. }
  298. });
  299. }
  300. function initData() {
  301. window.chartColors = {
  302. red: 'rgb(255, 99, 132)',
  303. orange: 'rgb(255, 159, 64)',
  304. yellow: 'rgb(255, 250, 86)',
  305. green: 'rgb(75, 192, 192)',
  306. blue: 'rgb(54, 162, 250)',
  307. purple: 'rgb(153, 102, 255)',
  308. grey: 'rgb(231,233,237)'
  309. };
  310. var color = Chart.helpers.color;
  311. window.randomScalingFactor = function (num) {
  312. return Math.round(Math.random() * num);
  313. }
  314. Chart.defaults.global.defaultFontColor = 'white';
  315. Chart.defaults.global.defaultFontSize = 24;
  316. Chart.defaults.global.legend.display = false;
  317. //产品型号达成=======================================
  318. window.configGoodsCL = {
  319. data: {
  320. labels: ['GOODS', 'GOODS', 'GOODS', 'GOODS', 'GOODS', 'GOODS'],
  321. datasets: [{
  322. type: 'line',
  323. label: '计划产量',
  324. backgroundColor: color(window.chartColors.orange).alpha(0.35).rgbString(),
  325. fill: false,
  326. borderColor: window.chartColors.orange,
  327. borderWidth: 2,
  328. pointRadius: 30,
  329. data: [0, 0, 0, 0, 0, 0]
  330. }, {
  331. label: '实际产量',
  332. backgroundColor: color(window.chartColors.blue).alpha(0.35).rgbString(),
  333. borderColor: window.chartColors.blue,
  334. borderWidth: 1,
  335. data: [0, 0, 0, 0, 0, 0]
  336. }]
  337. },
  338. type: 'bar',
  339. options: {
  340. legend: {
  341. display: true
  342. },
  343. title: {
  344. display: true,
  345. text: "智能马桶成品统计(月度)"
  346. },
  347. tooltips: {
  348. mode: 'point',
  349. intersect: false
  350. },
  351. responsive: true,
  352. scales: {
  353. xAxes: [{
  354. stacked: false
  355. }],
  356. yAxes: [{
  357. display: true,
  358. stacked: false,
  359. ticks: {
  360. min: 0,
  361. stepSize: 200,
  362. max: 2000
  363. }
  364. }]
  365. }
  366. }
  367. };
  368. var ctxGoodsCL = document.getElementById("canvasGoodsCL").getContext("2d");
  369. window.GoodsCL = new Chart(ctxGoodsCL, configGoodsCL);
  370. //===================================================
  371. //工序产量达成=======================================
  372. window.configProcedureCL = {
  373. data: {
  374. labels: ['成型', '一检', '改洗', '二检', '施釉', '烧成', '成检'],
  375. datasets: [{
  376. type: 'line',
  377. label: '计划产量',
  378. backgroundColor: color(window.chartColors.orange).alpha(0.35).rgbString(),
  379. fill: false,
  380. borderColor: window.chartColors.orange,
  381. borderWidth: 2,
  382. pointRadius: 30,
  383. data: [0, 0, 0, 0, 0, 0, 0]
  384. }, {
  385. label: '实际产量',
  386. backgroundColor: color(window.chartColors.blue).alpha(0.35).rgbString(),
  387. borderColor: window.chartColors.blue,
  388. borderWidth: 1,
  389. data: [0, 0, 0, 0, 0, 0, 0]
  390. }]
  391. },
  392. type: 'bar',
  393. options: {
  394. legend: {
  395. display: true
  396. },
  397. title: {
  398. display: true,
  399. text: "三车间各工序完工统计 (月度)"
  400. },
  401. tooltips: {
  402. mode: 'point',
  403. intersect: false
  404. },
  405. responsive: true,
  406. scales: {
  407. xAxes: [{
  408. stacked: false
  409. }],
  410. yAxes: [{
  411. display: true,
  412. stacked: false,
  413. ticks: {
  414. min: 0,
  415. stepSize: 200,
  416. max: 2000
  417. }
  418. }]
  419. }
  420. }
  421. };
  422. var ctxProcedureCL = document.getElementById("canvasProcedureCL").getContext("2d");
  423. window.ProcedureCL = new Chart(ctxProcedureCL, configProcedureCL);
  424. //===================================================
  425. }
  426. </script>
  427. <script src="/Plugins/chartjs-2.8.0/chart-2.8.min.js"></script>
  428. <script src="/Plugins/chartjs-2.8.0/chartjs-plugin-datalabels.js"></script>
  429. <script src="/Plugins/chartjs-2.8.0/utils.js"></script>
  430. <script src="/Plugins/circleChart/circleChart.min.js"></script>
  431. </body>
  432. </html>