modal_audit.ejs 87 KB

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