check_modal2.ejs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <!--数据检查-->
  2. <div class="modal fade" id="checking2" data-backdrop="static">
  3. <div class="modal-dialog modal-lg" role="document">
  4. <div class="modal-content">
  5. <div class="modal-header">
  6. <h5 class="modal-title">数据检查</h5>
  7. </div>
  8. <div class="modal-body">
  9. <div class="row">
  10. <div class="col-6">
  11. <!--雷达扫描动画-->
  12. <div class="L_transform">
  13. <div class="trans_bg">
  14. <div class="bg_shade"></div>
  15. <div class="circles topcircle active">
  16. <div class="trio"><p class="c-icon"></p></div>
  17. </div>
  18. <div class="circles leftcircle ">
  19. <div class="trio"><p class="c-icon"></p></div>
  20. </div>
  21. <div class="circles leftcircle2 ">
  22. <div class="trio"><p class="c-icon"></p></div>
  23. </div>
  24. <div class="circles rightcircle ">
  25. <div class="trio"><p class="c-icon"></p></div>
  26. </div>
  27. <div class="circles rightcircle2">
  28. <div class="trio"><p class="c-icon"></p></div>
  29. </div>
  30. <div class="heart_box">
  31. <div class="heart"></div>
  32. <div class="shan" style="transform: rotate(274deg);"></div>
  33. </div>
  34. </div>
  35. </div>
  36. <!--雷达扫描动画结束-->
  37. </div>
  38. <div class="col-6">
  39. <p>数据检查,将检查罗列台账中以下内容:</p>
  40. <div id="check2-list">
  41. <div class="card p-2 border-success border-0">
  42. <div class="d-flex justify-content-start">
  43. <span class="text-success mr-2"><i class="fa fa-check-circle fa-2x"></i></span>
  44. <div class="w-100">
  45. 项目节、清单同层
  46. <div class="progress mt-1">
  47. <div class="progress-bar bg-success" role="progressbar" style="width: 100%;" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">100%</div>
  48. </div>
  49. </div>
  50. </div>
  51. </div>
  52. <div class="card p-2 border-success border-0">
  53. <div class="d-flex justify-content-start">
  54. <span class="text-warning mr-2"><i class="fa fa-info-circle fa-2x"></i></span>
  55. <div class="w-100">
  56. 项目节、清单编号同时为空
  57. <div class="progress mt-1">
  58. <div class="progress-bar bg-warning" role="progressbar" style="width: 100%;" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">100%</div>
  59. </div>
  60. </div>
  61. </div>
  62. </div>
  63. <div class="card p-2 border-success border-0">
  64. <div class="d-flex justify-content-start">
  65. <span class="text-primary mr-2"><i class="fa fa-cog fa-spin fa-2x"></i></span>
  66. <div class="w-100">
  67. 清单数量不等于计量单元之和
  68. <div class="progress mt-1">
  69. <div class="progress-bar" role="progressbar" style="width: 30%;" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100">30%</div>
  70. </div>
  71. </div>
  72. </div>
  73. </div>
  74. </div>
  75. <p class="text-center text-primary" id="check2-hint">检查中,请等待...</p>
  76. </div>
  77. </div>
  78. <div class="modal-footer">
  79. <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">关闭</button>
  80. <button type="button" class="btn btn-sm btn-primary" id="check2-result">查看结果</button>
  81. </div>
  82. </div>
  83. </div>
  84. </div>
  85. </div>
  86. <script>
  87. const getmatrix = function(a,b,c,d,e,f){
  88. var aa=Math.round(180*Math.asin(a)/ Math.PI);
  89. var bb=Math.round(180*Math.acos(b)/ Math.PI);
  90. var cc=Math.round(180*Math.asin(c)/ Math.PI);
  91. var dd=Math.round(180*Math.acos(d)/ Math.PI);
  92. var deg=0;
  93. if(aa==bb||-aa==bb){
  94. deg=dd;
  95. }else if(-aa+bb==180){
  96. deg=180+cc;
  97. }else if(aa+bb==180){
  98. deg=360-cc||360-dd;
  99. }
  100. return deg>=360?0:deg;
  101. }
  102. const radarFind = function (select) {
  103. $('.circles').removeClass('active');
  104. $(select).addClass('active');
  105. }
  106. let radarHandle, progressHandle;
  107. const check2Viewing = function (setting) {
  108. if (!setting.prefix) setting.prefix = 'check2-';
  109. if (setting.randomWait) {
  110. for (const c of setting.checks) {
  111. c.wait = _.random(1, 5) + setting.extra;
  112. }
  113. }
  114. // 雷达
  115. let radarObj=$('.shan');
  116. radarHandle = setInterval(function(){
  117. var transform = radarObj.css('transform');
  118. var deg= transform === 'none' ? 0 : eval('get'+ transform);//构造getmatrix函数,返回上次旋转度数
  119. var step=45;
  120. radarObj.css({'transform':'rotate('+(deg+step)%360+'deg)'});
  121. var dd = radarObj.css({'transform':'rotate('+(deg+step)%360+'deg)'});
  122. //上
  123. if(deg>300&&deg<360 ||deg>0 &&deg<20){
  124. radarFind('.topcircle');
  125. // 右
  126. }else if(deg>20 && deg<45){
  127. radarFind('.rightcircle');
  128. }else if(deg>70 && deg<90){
  129. radarFind('.rightcircle2');
  130. // 左
  131. }else if(deg>150 && deg<180){
  132. radarFind('.leftcircle2');
  133. }else if(deg>230 && deg<300){
  134. radarFind('.leftcircle');
  135. }
  136. }, 100);
  137. const initCheckList = function (prefix, checks) {
  138. $('#check2-result').hide();
  139. $('#check2-hint').removeClass('text-warning').removeClass('text-success').addClass('text-primary').html('检查中,请等待...');
  140. const html = [];
  141. for (const c of checks) {
  142. const domid = prefix + c.key;
  143. html.push(`<div class="card p-2 border-success border-0" id="${domid}">`);
  144. html.push('<div class="d-flex justify-content-start">');
  145. html.push('<span class="text-muted mr-2"><i class="fa fa-circle-o fa-2x"></i></span>');
  146. html.push('<div class="w-100">', c.caption);
  147. html.push('<div class="progress mt-1">', '<div class="progress-bar" role="progressbar" style="width: 0%;" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">0%</div>', '</div>');
  148. html.push('</div>');
  149. html.push('</div>');
  150. html.push('</div>');
  151. }
  152. $('#check2-list').html(html.join(''));
  153. }
  154. const doSomeCheck = function (setting, index) {
  155. const check = setting.checks[index];
  156. console.log(check.wait);
  157. if (!check) return;
  158. setting.total = setting.total + (check.error || 0);
  159. const obj = $('#' + setting.prefix + check.key);
  160. $('.fa-circle-o', obj).removeClass('fa-circle-o').addClass('fa-cog');
  161. $('.text-muted').removeClass('text-muted').addClass('text-primary');
  162. $('.progress-bar', obj).attr('aria-valuemax', check.wait*10);
  163. const handle = setInterval(function () {
  164. const now = _.toInteger($('.progress-bar', obj).attr('aria-valuenow')) || 0;
  165. if (now < check.wait * 10) {
  166. const percent = Math.min(ZhCalc.div((now + 1) * 10, check.wait, 0), 100);
  167. $('.progress-bar', obj).attr('aria-valuenow', Math.min(now + 1, check.wait*10)).html(percent + '%').width(percent + '%');
  168. }
  169. }, 100);
  170. setTimeout(() => {
  171. clearInterval(handle);
  172. $('.fa-cog', obj).removeClass('fa-cog').addClass(check.error > 0 ? 'fa-info-circle' : 'fa-check-circle');
  173. $('.text-primary', obj).removeClass('text-primary').addClass(check.error > 0 ? 'text-warning' : 'text-success');
  174. $('.progress-bar', obj).addClass(check.error > 0 ? 'bg-warning' : 'bg-success');
  175. if (index === setting.checks.length - 1) {
  176. if (setting.total > 0) {
  177. $('#check2-result').show();
  178. $('#check2-hint').removeClass('text-primary').addClass('text-warning').html('检查完成,发现问题,请查阅检查结果。');
  179. } else {
  180. $('#check2-hint').removeClass('text-primary').addClass('text-success').html('检查完成,没有任何问题。');
  181. }
  182. } else {
  183. doSomeCheck(setting, index + 1);
  184. }
  185. }, check.wait*1000 + 500);
  186. }
  187. initCheckList(setting.prefix, setting.checks);
  188. $('#checking2').modal('show');
  189. setting.total = 0;
  190. doSomeCheck(setting, 0);
  191. $('#check2-result').click(() => {
  192. $('#checking2').modal('hide');
  193. setting.checkList.show();
  194. });
  195. }
  196. $('#checking2').bind('hidden.bs.modal', function () {
  197. clearInterval(radarHandle);
  198. });
  199. </script>