modal_audit.ejs 87 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219
  1. <!--上报审批-->
  2. <div class="modal fade" id="sub-sp" data-backdrop="static">
  3. <div class="modal-dialog" 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. <h5 id="tm-success" style="display: none;">
  10. 确认上报第<%- advance.order %>期<%- advance.type === 0 ? '开工' : '材料' %>预付款?</h5>
  11. <h5 id="tm-fail" class="text-danger">无法上报,请设置审批流程。</h5>
  12. </div>
  13. <div class="modal-footer">
  14. <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">关闭</button>
  15. <!--可以上报显示 确认上报 按钮-->
  16. <button id="tm-submit" style="display: none;" type="button" class="btn btn-sm btn-primary">确认上报</button>
  17. </div>
  18. </div>
  19. </div>
  20. </div>
  21. <!--添加附件-->
  22. <div class="modal fade" id="addfujian">
  23. <div class="modal-dialog" role="document">
  24. <div class="modal-content">
  25. <div class="modal-header">
  26. <h5 class="modal-title" id="myModalLabel">上传附件</h5>
  27. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  28. <span aria-hidden="true">&times;</span>
  29. </button>
  30. </div>
  31. <div class="modal-body">
  32. <p>大小限制:30MB,支持office等文档格式、图片格式、压缩包格式</p>
  33. <!-- <p><a href="javascript: void(0);" class="btn btn-primary" id="file-modal-target">选择文件</a></p> -->
  34. <input type="file" id="file-modal" multiple="multiple">
  35. </div>
  36. <div class="modal-footer">
  37. <button id="file-cancel" type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
  38. <button id="file-ok" type="button" class="btn btn-primary">添加</button>
  39. </div>
  40. </div>
  41. </div>
  42. </div>
  43. <% if (ctx.advance.status === auditConst.status.checking) { %>
  44. <% if (ctx.advance.curAuditor && ctx.advance.curAuditor.audit_id === ctx.session.sessionUser.accountId) { %>
  45. <!--审批通过-->
  46. <div class="modal fade sp-location-list" id="sp-done" data-backdrop="static">
  47. <div class="modal-dialog modal-lg" role="document">
  48. <form class="modal-content" action="<%- preUrl %>/audit/check" method="post" onsubmit="return auditCheck(0);">
  49. <div class="modal-header">
  50. <h5 class="modal-title">审批通过</h5>
  51. </div>
  52. <div class="modal-body">
  53. <div class="row">
  54. <div class="col-4">
  55. <div class="card mt-3">
  56. <ul class="list-group list-group-flush">
  57. <% auditors.forEach((item, idx) => { %>
  58. <% if (idx === 0) { %>
  59. <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
  60. <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- item.name %>
  61. <small class="text-muted"><%- item.role %></small>
  62. <span class="pull-right">原报</span>
  63. </li>
  64. <% } else if(idx === auditors.length -1 && idx !== 0) { %>
  65. <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
  66. <i class="fa fa fa-stop-circle"></i> <%- item.name %>
  67. <small class="text-muted"><%- item.role %></small>
  68. <span class="pull-right">终审</span>
  69. </li>
  70. <% } else {%>
  71. <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
  72. <i class="fa fa-chevron-circle-down"></i> <%- item.name %>
  73. <small class="text-muted"><%- item.role %></small>
  74. <span class="pull-right"><%= ctx.helper.transFormToChinese(idx) %>审</span>
  75. </li>
  76. <% } %>
  77. <% }) %>
  78. </ul>
  79. </div>
  80. </div>
  81. <div class="col-8 modal-height-500" style="overflow: auto">
  82. <% auditHistory.forEach((auditors, idx) => { %>
  83. <!-- 收起历史流程 -->
  84. <% if(idx > 0 && idx === 1) { %>
  85. <div class="text-right"><a href="javascript: void(0);" id="fold-btn1">收起历史审批流程</a></div>
  86. <% } %>
  87. <div class="<%- idx < auditHistory.length - 1 ? 'fold-btn' : '' %>">
  88. <div class="text-center text-muted" <%- idx === auditHistory.length - 1 ? `id="end-target"` : "" %> ><%- idx+1 %>#</div>
  89. <ul class="timeline-list list-unstyled mt-2">
  90. <% auditors.forEach((auditor, index) => { %>
  91. <% if (index === 0) { %>
  92. <li class="timeline-list-item pb-2">
  93. <div class="timeline-item-date">
  94. <%- ctx.helper.formatDate(auditor.create_time) %>
  95. </div>
  96. <div class="timeline-item-tail"></div>
  97. <div class="timeline-item-icon bg-success text-light">
  98. <i class="fa fa-caret-down"></i>
  99. </div>
  100. <div class="timeline-item-content">
  101. <div class="card">
  102. <div class="card-body p-3">
  103. <div class="card-text">
  104. <p class="mb-1"><span
  105. class="h5"><%- advance.user.name %></span><span
  106. class="pull-right text-success"><%- idx !== 0 ? '重新' : '' %>上报审批</span>
  107. </p>
  108. <p class="text-muted mb-0"><%- advance.user.role %></p>
  109. </div>
  110. </div>
  111. </div>
  112. </div>
  113. </li>
  114. <li class="timeline-list-item pb-2">
  115. <div class="timeline-item-date">
  116. <%- ctx.helper.formatDate(auditor.end_time) %>
  117. </div>
  118. <% if(index < auditors.length - 1) { %>
  119. <div class="timeline-item-tail"></div>
  120. <% } %>
  121. <% if(auditor.status === auditConst.status.checked) { %>
  122. <div class="timeline-item-icon bg-success text-light">
  123. <i class="fa fa-check"></i>
  124. </div>
  125. <% } else if(auditor.status === auditConst.status.checkNo || auditor.status === auditConst.status.checkNoPre) {%>
  126. <div class="timeline-item-icon bg-warning text-light">
  127. <i class="fa fa-level-up"></i>
  128. </div>
  129. <% } else if(auditor.status === auditConst.status.checking) { %>
  130. <div class="timeline-item-icon bg-warning text-light">
  131. <i class="fa fa-ellipsis-h"></i>
  132. </div>
  133. <% } else {%>
  134. <div class="timeline-item-icon bg-secondary text-light">
  135. </div>
  136. <% } %>
  137. <div class="timeline-item-content">
  138. <div class="card">
  139. <div class="card-body p-3">
  140. <div class="card-text">
  141. <p class="mb-1"><span
  142. class="h5"><%- auditor.name %></span><span
  143. class="pull-right <%- auditConst.statusClass[auditor.status] %>"><%- auditConst.statusString[auditor.status] %></span>
  144. </p>
  145. <p class="text-muted mb-0"><%- auditor.role %></p>
  146. </div>
  147. </div>
  148. <!--审批意见-->
  149. <% if(auditor.status !== auditConst.status.uncheck) { %>
  150. <div class="card-body p-3 border-top">
  151. <% if (ctx.advance.times === idx + 1 && auditor.status === auditConst.status.checking) { %>
  152. <label>审批意见<b class="text-danger">*</b></label>
  153. <textarea class="form-control form-control-sm" name="opinion">同意</textarea>
  154. <% } else { %>
  155. <p style="margin: 0;"><%- auditor.opinion %></p>
  156. <% } %>
  157. </div>
  158. <% } %>
  159. </div>
  160. </div>
  161. </li>
  162. <% } else {%>
  163. <li class="timeline-list-item pb-2">
  164. <div class="timeline-item-date">
  165. <%- ctx.helper.formatDate(auditor.end_time) %>
  166. </div>
  167. <% if(index < auditors.length - 1) { %>
  168. <div class="timeline-item-tail"></div>
  169. <% } %>
  170. <% if(auditor.status === auditConst.status.checked) { %>
  171. <div class="timeline-item-icon bg-success text-light">
  172. <i class="fa fa-check"></i>
  173. </div>
  174. <% } else if(auditor.status === auditConst.status.checkNo || auditor.status === auditConst.status.checkNoPre) {%>
  175. <div class="timeline-item-icon bg-warning text-light">
  176. <i class="fa fa-level-up"></i>
  177. </div>
  178. <% } else if(auditor.status === auditConst.status.checking) { %>
  179. <div class="timeline-item-icon bg-warning text-light">
  180. <i class="fa fa-ellipsis-h"></i>
  181. </div>
  182. <% } else { %>
  183. <div class="timeline-item-icon bg-secondary text-light">
  184. </div>
  185. <% } %>
  186. <div class="timeline-item-content">
  187. <div class="card">
  188. <div class="card-body p-3">
  189. <div class="card-text">
  190. <p class="mb-1"><span
  191. class="h5"><%- auditor.name %></span>
  192. <span
  193. class="pull-right
  194. <%- auditConst.statusClass[auditor.status] %>"><%- auditor.status !== auditConst.status.uncheck ? auditConst.statusString[auditor.status] : ''%>
  195. <%- auditor.status === auditConst.status.checkNo ? advance.user.name : '' %>
  196. <%- auditor.status === auditConst.status.checkNoPre ? auditors[index-1].name : '' %>
  197. </span>
  198. </p>
  199. <p class="text-muted mb-0"><%- auditor.role %></p>
  200. </div>
  201. </div>
  202. <!--审批意见-->
  203. <% if(auditor.status !== auditConst.status.uncheck) { %>
  204. <div class="card-body p-3 border-top">
  205. <% if (ctx.advance.times === idx + 1 && auditor.status === auditConst.status.checking) { %>
  206. <label>审批意见<b class="text-danger">*</b></label>
  207. <textarea class="form-control form-control-sm" name="opinion">同意</textarea>
  208. <% } else { %>
  209. <p style="margin: 0;"><%- auditor.opinion %></p>
  210. <% } %>
  211. </div>
  212. <% } %>
  213. </div>
  214. </div>
  215. </li>
  216. <% } %>
  217. <% }) %>
  218. </ul>
  219. </div>
  220. <!-- 展开历史流程 -->
  221. <% if(idx === auditHistory.length - 1) { %>
  222. <div class="text-right"><a href="javascript: void(0);" id="fold-btn2" style="display: none;" data-target="<%- idx + 1 %>">展开历史审批流程</a></div>
  223. <% } %>
  224. <% }) %>
  225. </div>
  226. </div>
  227. </div>
  228. <div class="modal-footer">
  229. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
  230. <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
  231. <input type="hidden" name="checkType" value="<%= auditConst.status.checked %>" />
  232. <button type="submit" class="btn btn-success btn-sm">确认通过</button>
  233. </div>
  234. </form>
  235. </div>
  236. </div>
  237. <!--审批退回-->
  238. <div class="modal fade sp-location-list" id="sp-back" data-backdrop="static">
  239. <div class="modal-dialog modal-lg" role="document">
  240. <form class="modal-content modal-lg" action="<%- preUrl %>/audit/check" method="post"
  241. onsubmit="return auditCheck(1);">
  242. <div class="modal-header">
  243. <h5 class="modal-title">审批退回</h5>
  244. </div>
  245. <div class="modal-body">
  246. <div class="row">
  247. <div class="col-4">
  248. <div class="card mt-3">
  249. <ul class="list-group list-group-flush">
  250. <li class="list-group-item">
  251. <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- ctx.advance.user.name %>
  252. <small class="text-muted"><%- ctx.advance.user.role %></small><span
  253. class="pull-right">原报</span>
  254. </li>
  255. <% for (let i = 0; i < ctx.advance.auditors2.length; i++) { %>
  256. <li class="list-group-item">
  257. <% if (i < ctx.advance.auditors2.length - 1) { %>
  258. <i class="fa fa-chevron-circle-down"></i> <%- ctx.advance.auditors2[i].name %>
  259. <small class="text-muted"><%- ctx.advance.auditors2[i].role %></small><span
  260. class="pull-right"><%= ctx.helper.transFormToChinese(i+1) %>审</span>
  261. <% } else { %>
  262. <i class="fa fa fa-stop-circle"></i> <%- ctx.advance.auditors2[i].name %> <small
  263. class="text-muted"><%- ctx.advance.auditors2[i].role %></small><span
  264. class="pull-right">终审</span>
  265. <% } %>
  266. </li>
  267. <% } %>
  268. </ul>
  269. </div>
  270. </div>
  271. <div class="col-8 modal-height-500" style="overflow: auto">
  272. <% for (const ah of ctx.advance.auditHistory) { %>
  273. <div class="card mt-3">
  274. <ul class="list-group list-group-flush">
  275. <% for (let iA = 0; iA < ah.length; iA++) { %>
  276. <% if (iA === 0) { %>
  277. <li class="list-group-item">
  278. <h5 class="card-title">
  279. <i class="fa fa-play-circle fa-rotate-90 text-success"></i>
  280. <%- ctx.advance.user.name %> <small
  281. class="text-muted"><%- ctx.advance.user.role %></small><span
  282. class="pull-right">原报</span>
  283. </h5>
  284. <div class="ml-3">
  285. <span
  286. class="text-success"><small><%- ctx.helper.formatFullDate(ah[iA].create_time) %></small>
  287. <% if (ctx.advance.auditHistory.indexOf(ah) > 0) { %>重新<% } %>上报</span>
  288. </div>
  289. </li>
  290. <li class="list-group-item">
  291. <h5 class="card-title">
  292. <i
  293. class="fa <%if (iA === ah.length - 1) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> <%- auditConst.statusClass[ah[iA].status] %>"></i>
  294. <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span
  295. class="pull-right"><%= ah[iA].sort === ah[iA].max_sort ? '终' : ctx.helper.transFormToChinese(ah[iA].sort) %>审</span>
  296. </h5>
  297. <div class="ml-3">
  298. <% if (ah[iA].status !== auditConst.status.uncheck) { %>
  299. <span
  300. class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo) { %><small><%- ctx.helper.formatFullDate(ah[iA].end_time) %></small>
  301. <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %>
  302. <%- ctx.advance.user.name %><% } %></span>
  303. <% } %>
  304. <p class="card-text"><%- ah[iA].opinion %></p>
  305. </div>
  306. </li>
  307. <% } else if (iA === ah.length - 1) { %>
  308. <li class="list-group-item">
  309. <h5 class="card-title">
  310. <i class="fa fa-stop-circle <%- auditConst.statusClass[ah[iA].status] %>"></i>
  311. <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span
  312. class="pull-right">终审</span>
  313. </h5>
  314. <div class="ml-3">
  315. <% if (ah[iA].status !== auditConst.status.uncheck) { %>
  316. <span
  317. class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo) { %><small><%- ctx.helper.formatFullDate(ah[iA].end_time) %></small>
  318. <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %>
  319. <%- ctx.advance.user.name %><% } %></span>
  320. <% } %>
  321. <p class="card-text"><%- ah[iA].opinion %></p>
  322. </div>
  323. </li>
  324. <% } else { %>
  325. <li class="list-group-item">
  326. <h5 class="card-title">
  327. <i
  328. class="fa <%if (iA === ah.length - 1) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> <%- auditConst.statusClass[ah[iA].status] %>"></i>
  329. <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span
  330. class="pull-right"><%= ah[iA].sort === ah[iA].max_sort ? '终' : ctx.helper.transFormToChinese(ah[iA].sort) %>审</span>
  331. </h5>
  332. <div class="ml-3">
  333. <% if (ah[iA].status !== auditConst.status.uncheck) { %>
  334. <span
  335. class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo) { %><small><%- ctx.helper.formatFullDate(ah[iA].end_time) %></small>
  336. <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %>
  337. <%- ctx.advance.user.name %><% } %></span>
  338. <% } %>
  339. <p class="card-text"><%- ah[iA].opinion %></p>
  340. </div>
  341. </li>
  342. <% } %>
  343. <% } %>
  344. </ul>
  345. </div>
  346. <% } %>
  347. <div class="card mt-3">
  348. <ul class="list-group list-group-flush">
  349. <li class="list-group-item">
  350. <h5 class="card-title">
  351. <i class="fa fa-play-circle fa-rotate-90 text-success"></i>
  352. <%- ctx.advance.user.name %> <small
  353. class="text-muted"><%- ctx.advance.user.role %></small><span
  354. class="pull-right">原报</span>
  355. </h5>
  356. <div class="ml-3">
  357. <span
  358. class="text-success"><small><%- ctx.helper.formatFullDate(ctx.advance.auditors[0].create_time) %></small>
  359. 上报</span>
  360. </div>
  361. </li>
  362. <% for (let iA = 0; iA < ctx.advance.auditors.length; iA++) { %>
  363. <% const auditors = ctx.advance.auditors; %>
  364. <li class="list-group-item">
  365. <% if (auditors[iA].status === auditConst.status.checked) { %>
  366. <h5 class="card-title">
  367. <i
  368. class="<%- (iA < auditors.length - 1 ? 'fa fa-chevron-circle-down text-success' : 'fa fa-stop-circle text-success') %>"></i>
  369. <%- auditors[iA].name %> <small
  370. class="text-muted"><%- auditors[iA].role %></small><span
  371. class="pull-right"><%= auditors[iA].sort === auditors[iA].max_sort ? '终' : ctx.helper.transFormToChinese(auditors[iA].sort) %>审</span>
  372. </h5>
  373. <div class="ml-3">
  374. <span
  375. class="text-success"><small><%- ctx.helper.formatFullDate(auditors[iA].end_time) %></small>
  376. 审批通过</span>
  377. <p class="card-text"><%- auditors[iA].opinion %></p>
  378. </div>
  379. <% } else if (auditors[iA].stauts == auditConst.status.checking) { %>
  380. <h5 class="card-title">
  381. <i
  382. class="<%- (iA < auditors.length - 1 ? 'fa fa-chevron-circle-down' : 'fa fa-stop-circle') %>"></i>
  383. <%- auditors[iA].name %> <small
  384. class="text-muted"><%- auditors[iA].role %></small><span
  385. class="pull-right"><%= auditors[iA].sort === auditors[iA].max_sort ? '终' : ctx.helper.transFormToChinese(auditors[iA].sort) %>审</span>
  386. </h5>
  387. <div class="ml-3">
  388. <span>审批中</span>
  389. <p class="card-text"><%- auditors[iA].opinion %></p>
  390. </div>
  391. <% } else if (auditors[iA].status === auditConst.status.checkNoPre) { %>
  392. <h5 class="card-title">
  393. <i
  394. class="<%- (iA < auditors.length - 1 ? 'fa fa-chevron-circle-down text-warning' : 'fa fa-stop-circle text-warning') %>"></i>
  395. <%- auditors[iA].name %> <small
  396. class="text-muted"><%- auditors[iA].role %></small><span
  397. class="pull-right"><%= auditors[iA].sort === auditors[iA].max_sort ? '终' : ctx.helper.transFormToChinese(auditors[iA].sort) %>审</span>
  398. </h5>
  399. <div class="ml-3">
  400. <span
  401. class="text-warning"><small><%- ctx.helper.formatFullDate(auditors[iA].end_time)%></small>
  402. 审批退回</span>
  403. <p class="card-text"><%- auditors[iA].opinion %></p>
  404. </div>
  405. <% } else { %>
  406. <h5 class="card-title">
  407. <i
  408. class="<%- (iA < auditors.length - 1 ? 'fa fa-chevron-circle-down' : 'fa fa-stop-circle') %>"></i>
  409. <%- auditors[iA].name %> <small
  410. class="text-muted"><%- auditors[iA].role %></small><span
  411. class="pull-right"><%= auditors[iA].sort === auditors[iA].max_sort ? '终' : ctx.helper.transFormToChinese(auditors[iA].sort) %>审</span>
  412. </h5>
  413. <div class="ml-3">
  414. <p class="card-text"><%- auditors[iA].opinion %></p>
  415. </div>
  416. <% } %>
  417. <% if (auditors[iA].status === auditConst.status.checked) { %>
  418. <% } else if (auditors[iA].status === auditConst.status.checking) { %>
  419. <div class="form-group">
  420. <label>审批意见<b class="text-danger">*</b></label>
  421. <textarea class="form-control form-control-sm" name="opinion">不同意</textarea>
  422. </div>
  423. <div id="reject-process" class="alert alert-warning">
  424. <div class="form-check form-check-inline">
  425. <!-- <input class="form-check-input" type="radio" name="checkType" id="inlineRadio1" value="<%- auditConst.status.checkNo %>" <% if (auditors[iA].order === 1 || auditors[iA].audit_id === auditors[0].audit_id) { %>checked<% } %>> -->
  426. <input class="form-check-input" type="radio" name="checkType"
  427. id="inlineRadio1" value="<%- auditConst.status.checkNo %>">
  428. <label class="form-check-label" for="inlineRadio1">退回原报
  429. <%- ctx.advance.user.name %></label>
  430. </div>
  431. <% if (auditors[iA].order > 1 && auditors[iA].audit_id !== auditors[0].audit_id) { %>
  432. <% const auditorIndex = ctx.advance.auditors.findIndex(function (item) { return item.audit_id === auditors[iA].audit_id }) %>
  433. <div class="form-check form-check-inline">
  434. <!-- <input class="form-check-input" type="radio" name="checkType" id="inlineRadio2" value="<%- auditConst.status.checkNoPre %>" checked> -->
  435. <input class="form-check-input" type="radio" name="checkType"
  436. id="inlineRadio2" value="<%- auditConst.status.checkNoPre %>">
  437. <label class="form-check-label" for="inlineRadio2">退回上一审批人
  438. <%- ctx.advance.auditors[auditorIndex-1].name %></label>
  439. </div>
  440. <% } %>
  441. </div>
  442. <% } %>
  443. </li>
  444. <% } %>
  445. </ul>
  446. </div>
  447. </div>
  448. </div>
  449. </div>
  450. <div class="modal-footer">
  451. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
  452. <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
  453. <button type="submit" class="btn btn-warning btn-sm">确认退回</button>
  454. </div>
  455. </form>
  456. </div>
  457. </div>
  458. <% } else { %>
  459. <!--审批流程/结果-->
  460. <div class="modal fade" id="sp-list" data-backdrop="static">
  461. <div class="modal-dialog modal-lg" role="document">
  462. <div class="modal-content">
  463. <div class="modal-header">
  464. <h5 class="modal-title">审批流程</h5>
  465. </div>
  466. <div class="modal-body">
  467. <div class="row">
  468. <div class="col-4">
  469. <div class="card mt-3">
  470. <ul class="list-group list-group-flush">
  471. <li class="list-group-item">
  472. <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- ctx.advance.user.name %>
  473. <small class="text-muted"><%- ctx.advance.user.role %></small><span
  474. class="pull-right">原报</span>
  475. </li>
  476. <% for (let i = 0; i < ctx.advance.auditors2.length; i++) { %>
  477. <li class="list-group-item">
  478. <% if (i < ctx.advance.auditors2.length - 1) { %>
  479. <i class="fa fa-chevron-circle-down"></i> <%- ctx.advance.auditors2[i].name %>
  480. <small class="text-muted"><%- ctx.advance.auditors2[i].role %></small><span
  481. class="pull-right"><%= ctx.helper.transFormToChinese(i+1) %>审</span>
  482. <% } else { %>
  483. <i class="fa fa fa-stop-circle"></i> <%- ctx.advance.auditors2[i].name %> <small
  484. class="text-muted"><%- ctx.advance.auditors2[i].role %></small><span
  485. class="pull-right">终审</span>
  486. <% } %>
  487. </li>
  488. <% } %>
  489. </ul>
  490. </div>
  491. </div>
  492. <div class="col-8 modal-height-500" style="overflow: auto">
  493. <% for (const ah of ctx.advance.auditHistory) { %>
  494. <div class="card mt-3">
  495. <ul class="list-group list-group-flush">
  496. <% for (let iA = 0; iA < ah.length; iA++) { %>
  497. <% if (iA === 0) { %>
  498. <li class="list-group-item">
  499. <h5 class="card-title">
  500. <i class="fa fa-play-circle fa-rotate-90 text-success"></i>
  501. <%- ctx.advance.user.name %> <small
  502. class="text-muted"><%- ctx.advance.user.role %></small><span
  503. class="pull-right">原报</span>
  504. </h5>
  505. <div class="ml-3">
  506. <span
  507. class="text-success"><small><%- ctx.helper.formatFullDate(ah[iA].create_time) %></small>
  508. <% if (ctx.advance.auditHistory.indexOf(ah) > 0) { %>重新<% } %>上报</span>
  509. </div>
  510. </li>
  511. <li class="list-group-item">
  512. <h5 class="card-title">
  513. <i
  514. class="fa <%if (iA === ah.length - 1) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> <%- auditConst.statusClass[ah[iA].status] %>"></i>
  515. <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span
  516. class="pull-right"><%= ah[iA].sort === ah[iA].max_sort ? '终' : ctx.helper.transFormToChinese(ah[iA].sort) %>审</span>
  517. </h5>
  518. <div class="ml-3">
  519. <% if (ah[iA].status !== auditConst.status.uncheck) { %>
  520. <span
  521. class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo || ah[iA].status === auditConst.status.checkNoPre) { %><small><%- ctx.helper.formatFullDate(ah[iA].end_time) %></small>
  522. <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %>
  523. <%- ctx.advance.user.name %><% } %></span>
  524. <% } %>
  525. <p class="card-text"><%- ah[iA].opinion %></p>
  526. </div>
  527. </li>
  528. <% } else if (iA === ah.length - 1) { %>
  529. <li class="list-group-item">
  530. <h5 class="card-title">
  531. <i class="fa fa-stop-circle <%- auditConst.statusClass[ah[iA].status] %>"></i>
  532. <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span
  533. class="pull-right">终审</span>
  534. </h5>
  535. <div class="ml-3">
  536. <% if (ah[iA].status !== auditConst.status.uncheck) { %>
  537. <span
  538. class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo || ah[iA].status === auditConst.status.checkNoPre) { %><small><%- ctx.helper.formatFullDate(ah[iA].end_time) %></small>
  539. <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %>
  540. <%- ctx.advance.user.name %><% } %></span>
  541. <% } %>
  542. <p class="card-text"><%- ah[iA].opinion %></p>
  543. </div>
  544. </li>
  545. <% } else { %>
  546. <li class="list-group-item">
  547. <h5 class="card-title">
  548. <i
  549. class="fa <%if (iA === ah.length - 1) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> <%- auditConst.statusClass[ah[iA].status] %>"></i>
  550. <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span
  551. class="pull-right"><%= ah[iA].sort === ah[iA].max_sort ? '终' : ctx.helper.transFormToChinese(ah[iA].sort) %>审</span>
  552. </h5>
  553. <div class="ml-3">
  554. <% if (ah[iA].status !== auditConst.status.uncheck) { %>
  555. <span
  556. class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo || ah[iA].status === auditConst.status.checkNoPre) { %><small><%- ctx.helper.formatFullDate(ah[iA].end_time) %></small>
  557. <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %>
  558. <%- ctx.advance.user.name %><% } %></span>
  559. <% } %>
  560. <p class="card-text"><%- ah[iA].opinion %></p>
  561. </div>
  562. </li>
  563. <% } %>
  564. <% } %>
  565. </ul>
  566. </div>
  567. <% } %>
  568. <% if (ctx.advance.status === auditConst.status.checking ) {%>
  569. <div class="card mt-3">
  570. <ul class="list-group list-group-flush">
  571. <% const auditors = ctx.advance.auditors; %>
  572. <% for (let iA = 0; iA < auditors.length; iA++) { %>
  573. <% if (iA === 0) { %>
  574. <li class="list-group-item">
  575. <h5 class="card-title">
  576. <i class="fa fa-play-circle fa-rotate-90 text-success"></i>
  577. <%- ctx.advance.user.name %> <small
  578. class="text-muted"><%- ctx.advance.user.role %></small><span
  579. class="pull-right">原报</span>
  580. </h5>
  581. <div class="ml-3">
  582. <span
  583. class="text-success"><small><%- ctx.helper.formatFullDate(auditors[iA].create_time) %></small>
  584. <% if (ctx.advance.times > 1) { %>重新<% } %>上报</span>
  585. </div>
  586. </li>
  587. <li class="list-group-item">
  588. <h5 class="card-title">
  589. <i
  590. class="fa <%if (iA === auditors.length - 1) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> <%- auditConst.statusClass[auditors[iA].status] %>"></i>
  591. <%- auditors[iA].name %> <small
  592. class="text-muted"><%- auditors[iA].role %></small><span
  593. class="pull-right"><%- auditors[iA].sort === auditors[iA].max_sort ? '终' : ctx.helper.transFormToChinese(auditors[iA].sort) %>审</span>
  594. </h5>
  595. <div class="ml-3">
  596. <% if (auditors[iA].status !== auditConst.status.uncheck) { %>
  597. <span
  598. class="<%- auditConst.statusClass[auditors[iA].status] %>"><% if (auditors[iA].status === auditConst.status.checked || auditors[iA].status === auditConst.status.checkNo || auditors[iA].status === auditConst.status.checkNoPre) { %><small><%- ctx.helper.formatFullDate(auditors[iA].end_time) %></small>
  599. <% } %><%- auditConst.statusString[auditors[iA].status]%><% if (auditors[iA].status === auditConst.status.checkNo) { %>
  600. <%- ctx.advance.user.name %><% } %></span>
  601. <% } %>
  602. <p class="card-text"><%- auditors[iA].opinion %></p>
  603. </div>
  604. </li>
  605. <% } else if (iA === auditors.length - 1) { %>
  606. <li class="list-group-item">
  607. <h5 class="card-title">
  608. <i
  609. class="fa fa-stop-circle <%- auditConst.statusClass[auditors[iA].status] %>"></i>
  610. <%- auditors[iA].name %> <small
  611. class="text-muted"><%- auditors[iA].role %></small><span
  612. class="pull-right">终审</span>
  613. </h5>
  614. <div class="ml-3">
  615. <% if (auditors[iA].status !== auditConst.status.uncheck) { %>
  616. <span
  617. class="<%- auditConst.statusClass[auditors[iA].status] %>"><% if (auditors[iA].status === auditConst.status.checked || auditors[iA].status === auditConst.status.checkNo || auditors[iA].status === auditConst.status.checkNoPre) { %><small><%- ctx.helper.formatFullDate(auditors[iA].end_time) %></small>
  618. <% } %><%- auditConst.statusString[auditors[iA].status]%><% if (auditors[iA].status === auditConst.status.checkNo) { %>
  619. <%- ctx.advance.user.name %><% } %></span>
  620. <% } %>
  621. <p class="card-text"><%- auditors[iA].opinion %></p>
  622. </div>
  623. </li>
  624. <% } else { %>
  625. <li class="list-group-item">
  626. <h5 class="card-title">
  627. <i
  628. class="fa <%if (iA === auditors.length - 1) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> <%- auditConst.statusClass[auditors[iA].status] %>"></i>
  629. <%- auditors[iA].name %> <small
  630. class="text-muted"><%- auditors[iA].role %></small><span
  631. class="pull-right"><%- auditors[iA].sort === auditors[iA].max_sort ? '终' : ctx.helper.transFormToChinese(auditors[iA].sort) %>审</span>
  632. </h5>
  633. <div class="ml-3">
  634. <% if (auditors[iA].status !== auditConst.status.uncheck) { %>
  635. <span
  636. class="<%- auditConst.statusClass[auditors[iA].status] %>"><% if (auditors[iA].status === auditConst.status.checked || auditors[iA].status === auditConst.status.checkNo || auditors[iA].status === auditConst.status.checkNoPre) { %><small><%- ctx.helper.formatFullDate(auditors[iA].end_time) %></small>
  637. <% } %><%- auditConst.statusString[auditors[iA].status]%><% if (auditors[iA].status === auditConst.status.checkNo) { %>
  638. <%- ctx.advance.user.name %><% } %></span>
  639. <% } %>
  640. <p class="card-text"><%- auditors[iA].opinion %></p>
  641. </div>
  642. </li>
  643. <% } %>
  644. <% } %>
  645. </ul>
  646. </div>
  647. <% } %>
  648. </div>
  649. </div>
  650. </div>
  651. <div class="modal-footer">
  652. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
  653. </div>
  654. </div>
  655. </div>
  656. </div>
  657. <% } %>
  658. <% } else if (ctx.advance.status === auditConst.status.checked) { %>
  659. <!--审批流程/结果-->
  660. <div class="modal fade" id="sp-list" data-backdrop="static">
  661. <div class="modal-dialog modal-lg" role="document">
  662. <div class="modal-content">
  663. <div class="modal-header">
  664. <h5 class="modal-title">审批流程</h5>
  665. </div>
  666. <div class="modal-body">
  667. <div class="row">
  668. <div class="col-4">
  669. <div class="card mt-3">
  670. <ul class="list-group list-group-flush">
  671. <li class="list-group-item">
  672. <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- ctx.advance.user.name %>
  673. <small class="text-muted"><%- ctx.advance.user.role %></small><span
  674. class="pull-right">原报</span>
  675. </li>
  676. <% for (let i = 0; i < ctx.advance.auditors2.length; i++) { %>
  677. <li class="list-group-item">
  678. <% if (i < ctx.advance.auditors2.length - 1) { %>
  679. <i class="fa fa-chevron-circle-down"></i> <%- ctx.advance.auditors2[i].name %>
  680. <small class="text-muted"><%- ctx.advance.auditors2[i].role %></small><span
  681. class="pull-right"><%= ctx.helper.transFormToChinese(i+1) %>审</span>
  682. <% } else { %>
  683. <i class="fa fa fa-stop-circle"></i> <%- ctx.advance.auditors2[i].name %> <small
  684. class="text-muted"><%- ctx.advance.auditors2[i].role %></small><span
  685. class="pull-right">终审</span>
  686. <% } %>
  687. </li>
  688. <% } %>
  689. </ul>
  690. </div>
  691. </div>
  692. <div class="col-8 modal-height-500" style="overflow: auto">
  693. <% for (const ah of ctx.advance.auditHistory) { %>
  694. <div class="card mt-3">
  695. <ul class="list-group list-group-flush">
  696. <% for (let iA = 0; iA < ah.length; iA++) { %>
  697. <% if (iA === 0) { %>
  698. <li class="list-group-item">
  699. <h5 class="card-title">
  700. <i class="fa fa-play-circle fa-rotate-90 text-success"></i>
  701. <%- ctx.advance.user.name %> <small
  702. class="text-muted"><%- ctx.advance.user.role %></small><span
  703. class="pull-right">原报</span>
  704. </h5>
  705. <div class="ml-3">
  706. <span
  707. class="text-success"><small><%- ctx.helper.formatFullDate(ah[iA].create_time) %></small>
  708. <% if (ctx.advance.auditHistory.indexOf(ah) > 0) { %>重新<% } %>上报</span>
  709. </div>
  710. </li>
  711. <li class="list-group-item">
  712. <h5 class="card-title">
  713. <i
  714. class="fa <%if (iA === ah.length - 1) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> <%- auditConst.statusClass[ah[iA].status] %>"></i>
  715. <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span
  716. class="pull-right"><%= ah[iA].sort === ah[iA].max_sort ? '终' : ctx.helper.transFormToChinese(ah[iA].sort) %>审</span>
  717. </h5>
  718. <div class="ml-3">
  719. <% if (ah[iA].status !== auditConst.status.uncheck) { %>
  720. <span
  721. class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo || ah[iA].status === auditConst.status.checkNoPre) { %><small><%- ctx.helper.formatFullDate(ah[iA].end_time) %></small>
  722. <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %>
  723. <%- ctx.advance.user.name %><% } %></span>
  724. <% } %>
  725. <p class="card-text"><%- ah[iA].opinion %></p>
  726. </div>
  727. </li>
  728. <% } else if (iA === ah.length - 1) { %>
  729. <li class="list-group-item">
  730. <h5 class="card-title">
  731. <i class="fa fa-stop-circle <%- auditConst.statusClass[ah[iA].status] %>"></i>
  732. <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span
  733. class="pull-right">终审</span>
  734. </h5>
  735. <div class="ml-3">
  736. <% if (ah[iA].status !== auditConst.status.uncheck) { %>
  737. <span
  738. class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo || ah[iA].status === auditConst.status.checkNoPre) { %><small><%- ctx.helper.formatFullDate(ah[iA].end_time) %></small>
  739. <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %>
  740. <%- ctx.advance.user.name %><% } %></span>
  741. <% } %>
  742. <p class="card-text"><%- ah[iA].opinion %></p>
  743. </div>
  744. </li>
  745. <% } else { %>
  746. <li class="list-group-item">
  747. <h5 class="card-title">
  748. <i
  749. class="fa <%if (iA === ah.length - 1) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> <%- auditConst.statusClass[ah[iA].status] %>"></i>
  750. <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span
  751. class="pull-right"><%= ah[iA].sort === ah[iA].max_sort ? '终' : ctx.helper.transFormToChinese(ah[iA].sort) %>审</span>
  752. </h5>
  753. <div class="ml-3">
  754. <% if (ah[iA].status !== auditConst.status.uncheck) { %>
  755. <span
  756. class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo || ah[iA].status === auditConst.status.checkNoPre) { %><small><%- ctx.helper.formatFullDate(ah[iA].end_time) %></small>
  757. <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %>
  758. <%- ctx.advance.user.name %><% } %></span>
  759. <% } %>
  760. <p class="card-text"><%- ah[iA].opinion %></p>
  761. </div>
  762. </li>
  763. <% } %>
  764. <% } %>
  765. </ul>
  766. </div>
  767. <% } %>
  768. <div class="card mt-3">
  769. <ul class="list-group list-group-flush">
  770. <% const auditors = ctx.advance.auditors; %>
  771. <% for (let iA = 0; iA < auditors.length; iA++) { %>
  772. <% if (iA === 0) { %>
  773. <li class="list-group-item">
  774. <h5 class="card-title">
  775. <i class="fa fa-play-circle fa-rotate-90 text-success"></i>
  776. <%- ctx.advance.user.name %> <small
  777. class="text-muted"><%- ctx.advance.user.role %></small><span
  778. class="pull-right">原报</span>
  779. </h5>
  780. <div class="ml-3">
  781. <span
  782. class="text-success"><small><%- ctx.helper.formatFullDate(auditors[iA].create_time) %></small>
  783. <% if (ctx.advance.times > 1) { %>重新<% } %>上报</span>
  784. </div>
  785. </li>
  786. <li class="list-group-item">
  787. <h5 class="card-title">
  788. <i
  789. class="fa <%if (iA === auditors.length - 1) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> <%- auditConst.statusClass[auditors[iA].status] %>"></i>
  790. <%- auditors[iA].name %> <small
  791. class="text-muted"><%- auditors[iA].role %></small><span
  792. class="pull-right"><%- auditors[iA].sort === auditors[iA].max_sort ? '终' : ctx.helper.transFormToChinese(auditors[iA].sort) %>审</span>
  793. </h5>
  794. <div class="ml-3">
  795. <% if (auditors[iA].status !== auditConst.status.uncheck) { %>
  796. <span
  797. class="<%- auditConst.statusClass[auditors[iA].status] %>"><% if (auditors[iA].status === auditConst.status.checked || auditors[iA].status === auditConst.status.checkNo || auditors[iA].status === auditConst.status.checkNoPre) { %><small><%- ctx.helper.formatFullDate(auditors[iA].end_time) %></small>
  798. <% } %><%- auditConst.statusString[auditors[iA].status]%><% if (auditors[iA].status === auditConst.status.checkNo) { %>
  799. <%- ctx.advance.user.name %><% } %></span>
  800. <% } %>
  801. <p class="card-text"><%- auditors[iA].opinion %></p>
  802. </div>
  803. </li>
  804. <% } else if (iA === auditors.length - 1) { %>
  805. <li class="list-group-item">
  806. <h5 class="card-title">
  807. <i
  808. class="fa fa-stop-circle <%- auditConst.statusClass[auditors[iA].status] %>"></i>
  809. <%- auditors[iA].name %> <small
  810. class="text-muted"><%- auditors[iA].role %></small><span
  811. class="pull-right">终审</span>
  812. </h5>
  813. <div class="ml-3">
  814. <% if (auditors[iA].status !== auditConst.status.uncheck) { %>
  815. <span
  816. class="<%- auditConst.statusClass[auditors[iA].status] %>"><% if (auditors[iA].status === auditConst.status.checked || auditors[iA].status === auditConst.status.checkNo || auditors[iA].status === auditConst.status.checkNoPre) { %><small><%- ctx.helper.formatFullDate(auditors[iA].end_time) %></small>
  817. <% } %><%- auditConst.statusString[auditors[iA].status]%><% if (auditors[iA].status === auditConst.status.checkNo) { %>
  818. <%- ctx.advance.user.name %><% } %></span>
  819. <% } %>
  820. <p class="card-text"><%- auditors[iA].opinion %></p>
  821. </div>
  822. </li>
  823. <% } else { %>
  824. <li class="list-group-item">
  825. <h5 class="card-title">
  826. <i
  827. class="fa <%if (iA === auditors.length - 1) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> <%- auditConst.statusClass[auditors[iA].status] %>"></i>
  828. <%- auditors[iA].name %> <small
  829. class="text-muted"><%- auditors[iA].role %></small><span
  830. class="pull-right"><%- auditors[iA].sort === auditors[iA].max_sort ? '终' : ctx.helper.transFormToChinese(auditors[iA].sort) %>审</span>
  831. </h5>
  832. <div class="ml-3">
  833. <% if (auditors[iA].status !== auditConst.status.uncheck) { %>
  834. <span
  835. class="<%- auditConst.statusClass[auditors[iA].status] %>"><% if (auditors[iA].status === auditConst.status.checked || auditors[iA].status === auditConst.status.checkNo || auditors[iA].status === auditConst.status.checkNoPre) { %><small><%- ctx.helper.formatFullDate(auditors[iA].end_time) %></small>
  836. <% } %><%- auditConst.statusString[auditors[iA].status]%><% if (auditors[iA].status === auditConst.status.checkNo) { %>
  837. <%- ctx.advance.user.name %><% } %></span>
  838. <% } %>
  839. <p class="card-text"><%- auditors[iA].opinion %></p>
  840. </div>
  841. </li>
  842. <% } %>
  843. <% } %>
  844. </ul>
  845. </div>
  846. </div>
  847. </div>
  848. </div>
  849. <div class="modal-footer">
  850. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
  851. </div>
  852. </div>
  853. </div>
  854. </div>
  855. <% } else if (ctx.advance.status === auditConst.status.checkNo) { %>
  856. <!--审批流程/结果-->
  857. <div class="modal fade" id="sp-list" data-backdrop="static">
  858. <div class="modal-dialog modal-lg" role="document">
  859. <div class="modal-content">
  860. <div class="modal-header">
  861. <h5 class="modal-title">审批流程</h5>
  862. </div>
  863. <div class="modal-body">
  864. <div class="row">
  865. <div class="col-4">
  866. <div class="card mt-3">
  867. <ul class="list-group list-group-flush">
  868. <li class="list-group-item">
  869. <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- ctx.advance.user.name %>
  870. <small class="text-muted"><%- ctx.advance.user.role %></small><span
  871. class="pull-right">原报</span>
  872. </li>
  873. <% for (let i = 0; i < ctx.advance.auditors2.length; i++) { %>
  874. <li class="list-group-item">
  875. <% if (i < ctx.advance.auditors2.length - 1) { %>
  876. <i class="fa fa-chevron-circle-down"></i> <%- ctx.advance.auditors2[i].name %>
  877. <small class="text-muted"><%- ctx.advance.auditors2[i].role %></small><span
  878. class="pull-right"><%= ctx.helper.transFormToChinese(i+1) %>审</span>
  879. <% } else { %>
  880. <i class="fa fa fa-stop-circle"></i> <%- ctx.advance.auditors2[i].name %> <small
  881. class="text-muted"><%- ctx.advance.auditors2[i].role %></small><span
  882. class="pull-right">终审</span>
  883. <% } %>
  884. </li>
  885. <% } %>
  886. </ul>
  887. </div>
  888. </div>
  889. <div class="col-8 modal-height-500" style="overflow: auto">
  890. <% for (const ah of ctx.advance.auditHistory) { %>
  891. <div class="card mt-3">
  892. <ul class="list-group list-group-flush">
  893. <% for (let iA = 0; iA < ah.length; iA++) { %>
  894. <% if (iA === 0) { %>
  895. <li class="list-group-item">
  896. <h5 class="card-title">
  897. <i class="fa fa-play-circle fa-rotate-90 text-success"></i>
  898. <%- ctx.advance.user.name %> <small
  899. class="text-muted"><%- ctx.advance.user.role %></small><span
  900. class="pull-right">原报</span>
  901. </h5>
  902. <div class="ml-3">
  903. <span
  904. class="text-success"><small><%- ctx.helper.formatFullDate(ah[iA].create_time) %></small>
  905. <% if (ctx.advance.auditHistory.indexOf(ah) > 0) { %>重新<% } %>上报</span>
  906. </div>
  907. </li>
  908. <li class="list-group-item">
  909. <h5 class="card-title">
  910. <i
  911. class="fa <%if (iA === ah.length - 1) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> <%- auditConst.statusClass[ah[iA].status] %>"></i>
  912. <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span
  913. class="pull-right"><%= ah[iA].sort === ah[iA].max_sort ? '终' : ctx.helper.transFormToChinese(ah[iA].sort) %>审</span>
  914. </h5>
  915. <div class="ml-3">
  916. <% if (ah[iA].status !== auditConst.status.uncheck) { %>
  917. <span
  918. class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo || ah[iA].status === auditConst.status.checkNoPre) { %><small><%- ctx.helper.formatFullDate(ah[iA].end_time) %></small>
  919. <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %>
  920. <%- ctx.advance.user.name %><% } %></span>
  921. <% } %>
  922. <p class="card-text"><%- ah[iA].opinion %></p>
  923. </div>
  924. </li>
  925. <% } else if (iA === ah.length - 1) { %>
  926. <li class="list-group-item">
  927. <h5 class="card-title">
  928. <i class="fa fa-stop-circle <%- auditConst.statusClass[ah[iA].status] %>"></i>
  929. <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span
  930. class="pull-right">终审</span>
  931. </h5>
  932. <div class="ml-3">
  933. <% if (ah[iA].status !== auditConst.status.uncheck) { %>
  934. <span
  935. class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo || ah[iA].status === auditConst.status.checkNoPre) { %><small><%- ctx.helper.formatFullDate(ah[iA].end_time) %></small>
  936. <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %>
  937. <%- ctx.advance.user.name %><% } %></span>
  938. <% } %>
  939. <p class="card-text"><%- ah[iA].opinion %></p>
  940. </div>
  941. </li>
  942. <% } else { %>
  943. <li class="list-group-item">
  944. <h5 class="card-title">
  945. <i
  946. class="fa <%if (iA === ah.length - 1) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> <%- auditConst.statusClass[ah[iA].status] %>"></i>
  947. <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span
  948. class="pull-right"><%= ah[iA].sort === ah[iA].max_sort ? '终' : ctx.helper.transFormToChinese(ah[iA].sort) %>审</span>
  949. </h5>
  950. <div class="ml-3">
  951. <% if (ah[iA].status !== auditConst.status.uncheck) { %>
  952. <span
  953. class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo || ah[iA].status === auditConst.status.checkNoPre) { %><small><%- ctx.helper.formatFullDate(ah[iA].end_time) %></small>
  954. <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %>
  955. <%- ctx.advance.user.name %><% } %></span>
  956. <% } %>
  957. <p class="card-text"><%- ah[iA].opinion %></p>
  958. </div>
  959. </li>
  960. <% } %>
  961. <% } %>
  962. </ul>
  963. </div>
  964. <% } %>
  965. </div>
  966. </div>
  967. </div>
  968. <div class="modal-footer">
  969. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
  970. </div>
  971. </div>
  972. </div>
  973. </div>
  974. <% if (ctx.session.sessionUser.accountId === ctx.advance.uid) { %>
  975. <!--重新上报-->
  976. <div class="modal fade" id="sp-list2" data-backdrop="static">
  977. <div class="modal-dialog modal-lg" role="document">
  978. <div class="modal-content">
  979. <div class="modal-header">
  980. <h5 class="modal-title">重新上报</h5>
  981. </div>
  982. <div class="modal-body">
  983. <div class="row">
  984. <div class="col-4 modal-height-500" style="overflow: auto">
  985. <!-- <a href="#sub-sp" data-toggle="modal" data-target="#sub-sp" id="hideSp">修改审批流程</a> -->
  986. <div class="card mt-3">
  987. <ul class="list-group list-group-flush">
  988. <li class="list-group-item">
  989. <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- ctx.advance.user.name %>
  990. <small class="text-muted"><%- ctx.advance.user.role %></small><span
  991. class="pull-right">原报</span>
  992. </li>
  993. </ul>
  994. <ul class="list-group list-group-flush" id="auditors-list">
  995. <% const auditorList = ctx.advance.auditorList; %>
  996. <% for (let i = 0; i < auditorList.length; i++) { %>
  997. <li class="list-group-item" data-auditid="<%- auditorList[i].audit_id %>">
  998. <% if (i < auditorList.length - 1) { %>
  999. <i class="fa fa-chevron-circle-down"></i> <%- auditorList[i].name %> <small
  1000. class="text-muted"><%- auditorList[i].role %></small><span
  1001. class="pull-right"><%= ctx.helper.transFormToChinese(i+1) %>审</span>
  1002. <% } else { %>
  1003. <i class="fa fa fa-stop-circle"></i> <%- auditorList[i].name %> <small
  1004. class="text-muted"><%- auditorList[i].role %></small><span
  1005. class="pull-right">终审</span>
  1006. <% } %>
  1007. </li>
  1008. <% } %>
  1009. </ul>
  1010. </div>
  1011. </div>
  1012. <div class="col-8 modal-height-500" style="overflow: auto">
  1013. <% for (const ah of ctx.advance.auditHistory) { %>
  1014. <div class="card mt-3">
  1015. <ul class="list-group list-group-flush">
  1016. <% for (let iA = 0; iA < ah.length; iA++) { %>
  1017. <% if (iA === 0) { %>
  1018. <li class="list-group-item">
  1019. <h5 class="card-title"><i class="fa fa-play-circle fa-rotate-90 text-success"></i>
  1020. <%- ctx.advance.user.name %> <small
  1021. class="text-muted"><%- ctx.advance.user.role %></small><span
  1022. class="pull-right">原报</span></h5>
  1023. <div class="ml-3">
  1024. <span
  1025. class="text-success"><small><%- ctx.helper.formatFullDate(ah[iA].create_time) %></small>
  1026. <% if (ctx.advance.auditHistory.indexOf(ah) > 0) { %>重新<% } %>上报</span>
  1027. <p class="card-text"></p>
  1028. </div>
  1029. </li>
  1030. <li class="list-group-item">
  1031. <h5 class="card-title">
  1032. <i
  1033. class="fa <%if (iA === ah.length - 1) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> <%- auditConst.statusClass[ah[iA].status] %>"></i>
  1034. <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span
  1035. class="pull-right"><%= ah[iA].sort === ah[iA].max_sort ? '终' : ctx.helper.transFormToChinese(ah[iA].sort) %>审</span>
  1036. </h5>
  1037. <div class="ml-3">
  1038. <% if (ah[iA].status !== auditConst.status.uncheck) { %>
  1039. <span
  1040. class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo || ah[iA].status === auditConst.status.checkNoPre) { %><small><%- ctx.helper.formatFullDate(ah[iA].end_time) %></small>
  1041. <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %>
  1042. <%- ctx.advance.user.name %><% } %></span>
  1043. <% } %>
  1044. <p class="card-text"><%- ah[iA].opinion %></p>
  1045. </div>
  1046. </li>
  1047. <% } else if (iA === ah.length - 1) { %>
  1048. <li class="list-group-item">
  1049. <h5 class="card-title"><i
  1050. class="fa fa-stop-circle <%- auditConst.statusClass[ah[iA].status] %>"></i>
  1051. <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span
  1052. class="pull-right">终审</span></h5>
  1053. <div class="ml-3">
  1054. <% if (ah[iA].status !== auditConst.status.uncheck) { %>
  1055. <span
  1056. class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo || ah[iA].status === auditConst.status.checkNoPre) { %><small><%- ctx.helper.formatFullDate(ah[iA].end_time) %></small>
  1057. <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %>
  1058. <%- ctx.advance.user.name %><% } %></span>
  1059. <% } %>
  1060. <p class="card-text"><%- ah[iA].opinion %></p>
  1061. </div>
  1062. </li>
  1063. <% } else { %>
  1064. <li class="list-group-item">
  1065. <h5 class="card-title">
  1066. <i
  1067. class="fa <%if (iA === ah.length - 1) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> <%- auditConst.statusClass[ah[iA].status] %>"></i>
  1068. <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span
  1069. class="pull-right"><%= ah[iA].sort === ah[iA].max_sort ? '终' : ctx.helper.transFormToChinese(ah[iA].sort) %>审</span>
  1070. </h5>
  1071. <div class="ml-3">
  1072. <% if (ah[iA].status !== auditConst.status.uncheck) { %>
  1073. <span
  1074. class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo || ah[iA].status === auditConst.status.checkNoPre) { %><small><%- ctx.helper.formatFullDate(ah[iA].end_time) %></small>
  1075. <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %>
  1076. <%- ctx.advance.user.name %><% } %></span>
  1077. <% } %>
  1078. <p class="card-text"><%- ah[iA].opinion %></p>
  1079. </div>
  1080. </li>
  1081. <% } %>
  1082. <% } %>
  1083. </ul>
  1084. </div>
  1085. <% } %>
  1086. <% if (ctx.advance.status === auditConst.status.checkNo) {%>
  1087. <div class="card mt-3">
  1088. <ul class="list-group list-group-flush">
  1089. <li class="list-group-item">
  1090. <h5 class="card-title"><i class="fa fa-play-circle fa-rotate-90"></i>
  1091. <%- ctx.advance.user.name %> <small
  1092. class="text-muted"><%- ctx.advance.user.role %></small><span
  1093. class="pull-right">原报</span></h5>
  1094. <div class="ml-3">
  1095. <span>重新上报中</span>
  1096. <p class="card-text"><small class="text-muted"></small></p>
  1097. </div>
  1098. </li>
  1099. </ul>
  1100. <ul class="list-group list-group-flush" id="auditors-list2">
  1101. <% const auditorList = ctx.advance.auditorList; %>
  1102. <% for (let iA = 0; iA < auditorList.length; iA++) { %>
  1103. <% if (iA === auditorList.length - 1) { %>
  1104. <li class="list-group-item" data-auditid="<%- auditorList[iA].audit_id %>">
  1105. <h5 class="card-title"><i class="fa fa-stop-circle"></i> <%- auditorList[iA].name %>
  1106. <small class="text-muted"><%- auditorList[iA].role %></small><span
  1107. class="pull-right">终审</span></h5>
  1108. </li>
  1109. <% } else { %>
  1110. <li class="list-group-item" data-auditid="<%- auditorList[iA].audit_id %>">
  1111. <h5 class="card-title">
  1112. <i class="fa fa-chevron-circle-down"></i> <%- auditorList[iA].name %> <small
  1113. class="text-muted"><%- auditorList[iA].role %></small><span
  1114. class="pull-right"><%= ctx.helper.transFormToChinese(iA+1) %>审</span>
  1115. </h5>
  1116. </li>
  1117. <% } %>
  1118. <% } %>
  1119. </ul>
  1120. </div>
  1121. <% } %>
  1122. </div>
  1123. </div>
  1124. </div>
  1125. <form class="modal-footer" method="post" action="<%- preUrl %>/audit/start" onsubmit="return start()">
  1126. <input type="hidden" name="_csrf" value="<%= ctx.csrf %>">
  1127. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
  1128. <button class="btn btn-primary btn-sm" type="submit">确认上报</button>
  1129. </form>
  1130. </div>
  1131. </div>
  1132. </div>
  1133. <% } %>
  1134. <% } %>
  1135. <script>
  1136. function auditCheck(i) {
  1137. const inlineRadio1 = $('#inlineRadio1:checked').val()
  1138. const inlineRadio2 = $('#inlineRadio2:checked').val()
  1139. const opinion = $('textarea[name="opinion"]').eq(i).val().replace(/\r\n/g, '<br/>').replace(/\n/g, '<br/>').replace(/\s/g, ' ');
  1140. $('textarea[name="opinion"]').eq(i).val(opinion);
  1141. if (i === 1) {
  1142. if (!inlineRadio1 && !inlineRadio2) {
  1143. if (!$('#warning-text').length) {
  1144. $('#reject-process').prepend('<p id="warning-text" style="color: red; margin: 0;">请选择退回流程</p>');
  1145. }
  1146. return false;
  1147. }
  1148. if ($('#warning-text').length) $('#warning-text').remove()
  1149. }
  1150. return true;
  1151. }
  1152. $('.sp-location-list').on('shown.bs.modal', function () {
  1153. const height = $(this)[0].scrollHeight;
  1154. const scrollBox = $(this).find('div[class="col-8 modal-height-500"]');
  1155. const bdiv = (scrollBox.offset() && scrollBox.offset().top) || 0;
  1156. // 450是modal没有滚动条时的最大高度,超过则出现滚动条,需要自动下拉到底部
  1157. // if (scrollBox.length && scrollBox[0].scrollHeight > 450) {
  1158. // scrollBox.scrollTop(height);
  1159. // }
  1160. scrollBox.scrollTop(0);
  1161. const hdiv = divSearch($(this).find('textarea')) ? $(this).find('textarea') : null;
  1162. const hdheight = hdiv ? hdiv.parents('.list-group-item').offset().top : null;
  1163. if (hdiv && scrollBox.length && scrollBox[0].scrollHeight > 450 && hdheight - bdiv > 450) {
  1164. scrollBox.scrollTop(hdheight - bdiv);
  1165. }
  1166. });
  1167. function divSearch(div) {
  1168. if (div.length > 0) {
  1169. return true;
  1170. }
  1171. return false;
  1172. }
  1173. function start() {
  1174. const pay_ratio = parseInt($(`.pay-input[data-type=0]`).val())
  1175. const cur_amount = parseInt($(`.pay-input[data-type=1]`).val())
  1176. if (!pay_ratio || !cur_amount) {
  1177. toastr.error('请填写本期金额!')
  1178. return false
  1179. }
  1180. const prev_amount = prevAdvance && prevAdvance.prev_total_amount || 0
  1181. const prev_total_amount = ZhCalc.add(cur_amount, prev_amount)
  1182. const remark = filterText($('#ad-remark').val())
  1183. const data = { pay_ratio, cur_amount, prev_amount, prev_total_amount, remark, status: auditConst.status.checking }
  1184. postData('<%- preUrl %>/audit/start', data, (data) => {
  1185. window.location.reload()
  1186. }, () => {
  1187. window.location.reload()
  1188. })
  1189. return false
  1190. }
  1191. function filterText(text) {
  1192. if (!text) return null
  1193. return text.replace(/(\r\n)|(\n)/g, '<br/>').replace(/\s/g, ' ')
  1194. }
  1195. // 展开/收起历史审核记录
  1196. $('.modal-body #fold-btn1').click(function() {
  1197. $('.modal-body .fold-btn').slideUp('swing', () => {
  1198. $('.modal-body #end-target').text('1#')
  1199. $('.modal-body #fold-btn1').hide()
  1200. $('.modal-body #fold-btn2').show()
  1201. });
  1202. });
  1203. $('.modal-body #fold-btn2').click(function() {
  1204. const idx = $(this).data('target')
  1205. $('.modal-body .fold-btn').slideDown('swing', () => {
  1206. $('.modal-body #end-target').text(idx + '#')
  1207. $('.modal-body #fold-btn1').show()
  1208. $('.modal-body #fold-btn2').hide()
  1209. });
  1210. });
  1211. </script>