info_modal.ejs 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611
  1. <!--批量添加清单部位-->
  2. <div class="modal fade" id="batch" data-backdrop="static">
  3. <div class="modal-dialog modal-xl" role="document">
  4. <div class="modal-content">
  5. <div class="modal-header">
  6. <h5 class="modal-title">批量插入清单-计量单元</h5>
  7. </div>
  8. <div class="modal-body">
  9. <div class="row">
  10. <div class="col-6">
  11. <h6>清单信息</h6>
  12. <div class="batch-l-t">
  13. </div>
  14. <h6>计量单元数量复核表</h6>
  15. <div class="batch-l-b">
  16. </div>
  17. </div>
  18. <div class="col-6">
  19. <h6>签约清单</h6>
  20. <div class="batch-r">
  21. </div>
  22. </div>
  23. </div>
  24. </div>
  25. <div class="modal-footer">
  26. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
  27. <button type="button" class="btn btn-primary btn-sm" id="batch-ok">确定</button>
  28. </div>
  29. </div>
  30. </div>
  31. </div>
  32. <% if ((revise.status === audit.status.uncheck || revise.status === audit.status.checkNo) && ctx.session.sessionUser.accountId === revise.uid) { %>
  33. <!--上报审批-->
  34. <div class="modal fade" id="sub-sp" data-backdrop="static">
  35. <div class="modal-dialog" role="document">
  36. <div class="modal-content">
  37. <div class="modal-header">
  38. <h5 class="modal-title">上报审批</h5>
  39. </div>
  40. <div class="modal-body">
  41. <div class="form-group">
  42. <label>选择审批人</label>
  43. <div class="input-group">
  44. <div class="input-group-prepend">
  45. <select class="form-control form-control-sm" id="account_group">
  46. <option value="0">所有分组</option>
  47. <% for (const dw in accountGroup) { %>
  48. <option value="<%= dw %>"><%= accountGroup[dw] %></option>
  49. <% } %>
  50. </select>
  51. </div>
  52. <select class="form-control form-control-sm" id="account_list">
  53. <option value="0">选择审批人</option>
  54. <% for (const account of accountList) { %>
  55. <option value="<%= account.id %>"><%= account.name %><% if (account.role !== '') { %>(<%= account.role %>)<% } %><% if (account.company !== '') { %> -<%= account.company %><% } %></option>
  56. <% } %>
  57. </select>
  58. </div>
  59. </div>
  60. <div class="card mt-3">
  61. <div class="card-header">
  62. 审批流程
  63. </div>
  64. <div class="modal-height-500" style="overflow: auto">
  65. <ul class="list-group list-group-flush" id="auditors">
  66. <% for (let i = 0, iLen = auditorList.length; i < iLen; i++) { %>
  67. <li class="list-group-item" auditorId="<%- auditorList[i].audit_id %>">
  68. <a href="javascript: void(0)" class="text-danger pull-right">移除</a>
  69. <%- auditorList[i].audit_order %> <%- auditorList[i].name %>
  70. <small class="text-muted"><%- auditorList[i].role %></small>
  71. </li>
  72. <% } %>
  73. </ul>
  74. </div>
  75. </div>
  76. </div>
  77. <form class="modal-footer" method="post" action="/tender/<%- ctx.tender.id %>/revise/audit/start" onsubmit="return checkAuditorFrom()">
  78. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
  79. <input type="hidden" name="_csrf" value="<%= ctx.csrf %>">
  80. <button class="btn btn-primary btn-sm" type="submit">确认上报</button>
  81. </form>
  82. </div>
  83. </div>
  84. </div>
  85. <% } %>
  86. <% if (revise.status === audit.status.checkNo && ctx.session.sessionUser.accountId === revise.uid) { %>
  87. <!--重新上报-->
  88. <div class="modal fade" id="sub-sp2" data-backdrop="static">
  89. <div class="modal-dialog modal-lg" role="document">
  90. <div class="modal-content">
  91. <div class="modal-header">
  92. <h5 class="modal-title">重新上报</h5>
  93. </div>
  94. <div class="modal-body">
  95. <div class="row">
  96. <div class="col-4 modal-height-500" style="overflow: auto">
  97. <a href="#sub-sp" data-toggle="modal" data-target="#sub-sp" id="hideSp">修改审批流程</a>
  98. <div class="card mt-3">
  99. <ul class="list-group list-group-flush">
  100. <li class="list-group-item" style="border-bottom: 0">
  101. <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
  102. </li>
  103. </ul>
  104. <ul class="list-group list-group-flush" id="auditors-list">
  105. <% for (let i = 0; i < auditorList.length; i++) { %>
  106. <li class="list-group-item" data-auditid="<%- auditorList[i].audit_id %>">
  107. <% if (i < auditorList.length - 1) { %>
  108. <i class="fa fa-chevron-circle-down"></i> <%- auditorList[i].name %> <small class="text-muted"><%- auditorList[i].role %></small><span class="pull-right"><%= ctx.helper.transFormToChinese(i+1) %>审</span>
  109. <% } else {%>
  110. <i class="fa fa fa-stop-circle"></i> <%- auditorList[i].name %> <small class="text-muted"><%- auditorList[i].role %></small><span class="pull-right">终审</span>
  111. <% } %>
  112. </li>
  113. <% } %>
  114. </ul>
  115. </div>
  116. </div>
  117. <div class="col-8 modal-height-500" style="overflow: auto">
  118. <% for (const ah of auditHistory) { %>
  119. <div class="card mt-3">
  120. <ul class="list-group list-group-flush">
  121. <li class="list-group-item">
  122. <h5 class="card-title">
  123. <i class="fa fa-play-circle fa-rotate-90 text-success"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
  124. </h5>
  125. <div class="ml-3">
  126. <span class="text-success"><%- ah[0].begin_time.toLocaleDateString() %> <% if (auditHistory.indexOf(ah) > 0) { %>重新<% } %>上报</span>
  127. </div>
  128. </li>
  129. <% for (let iA = 0; iA < ah.length; iA++) { %>
  130. <% if (iA === ah.length - 1) { %>
  131. <li class="list-group-item">
  132. <h5 class="card-title">
  133. <i class="fa fa-stop-circle <%- audit.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span class="pull-right">终审</span>
  134. </h5>
  135. <div class="ml-3">
  136. <% if (ah[iA].status !== audit.status.uncheck) { %>
  137. <span class="<%- audit.statusClass[ah[iA].status] %>"><% if (ah[iA].status === audit.status.checked || ah[iA].status === audit.status.checkNo) { %><%- ah[iA].end_time.toLocaleDateString() %> <% } %><%- audit.statusString[ah[iA].status]%><% if (ah[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
  138. <% } %>
  139. <p class="card-text"><%- ah[iA].opinion %></p>
  140. </div>
  141. </li>
  142. <% } else { %>
  143. <li class="list-group-item">
  144. <h5 class="card-title">
  145. <i class="fa fa-chevron-circle-down <%- audit.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span class="pull-right"><%= ctx.helper.transFormToChinese(iA+1) %>审</span>
  146. </h5>
  147. <div class="ml-3">
  148. <% if (ah[iA].status !== audit.status.uncheck) { %>
  149. <span class="<%- audit.statusClass[ah[iA].status] %>"><% if (ah[iA].status === audit.status.checked || ah[iA].status === audit.status.checkNo) { %><%- ah[iA].end_time.toLocaleDateString() %> <% } %><%- audit.statusString[ah[iA].status]%><% if (ah[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
  150. <% } %>
  151. <p class="card-text"><%- ah[iA].opinion %></p>
  152. </div>
  153. </li>
  154. <% } %>
  155. <% } %>
  156. </ul>
  157. </div>
  158. <% } %>
  159. <% if (revise.status === audit.status.checkNo) {%>
  160. <div class="card mt-3">
  161. <ul class="list-group list-group-flush">
  162. <li class="list-group-item" style="border-bottom: 0">
  163. <h5 class="card-title"><i class="fa fa-play-circle fa-rotate-90"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span></h5>
  164. <div class="ml-3">
  165. <span>重新上报中</span>
  166. <p class="card-text"></p>
  167. </div>
  168. </li>
  169. </ul>
  170. <ul class="list-group list-group-flush" id="auditors-list2">
  171. <% for (let iA = 0; iA < auditorList.length; iA++) { %>
  172. <% if (iA === auditorList.length - 1) { %>
  173. <li class="list-group-item" data-auditid="<%- auditorList[iA].audit_id %>">
  174. <h5 class="card-title"><i class="fa fa-stop-circle"></i> <%- auditorList[iA].name %> <small class="text-muted"><%- auditorList[iA].role %></small><span class="pull-right">终审</span></h5>
  175. </li>
  176. <% } else { %>
  177. <li class="list-group-item" data-auditid="<%- auditorList[iA].audit_id %>">
  178. <h5 class="card-title"><i class="fa fa-chevron-circle-down"></i> <%- auditorList[iA].name %> <small class="text-muted"><%- auditorList[iA].role %></small><span class="pull-right"><%= ctx.helper.transFormToChinese(iA+1) %>审</span></h5>
  179. </li>
  180. <% } %>
  181. <% } %>
  182. </ul>
  183. </div>
  184. <% } %>
  185. </div>
  186. </div>
  187. </div>
  188. <form class="modal-footer" action="/tender/<%- ctx.tender.id %>/revise/audit/start" method="post" onsubmit="return checkAuditorFrom()">
  189. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
  190. <input type="hidden" name="_csrf" value="<%= ctx.csrf %>">
  191. <button type="submit" class="btn btn-primary btn-sm">确认上报</button>
  192. </form>
  193. </div>
  194. </div>
  195. </div>
  196. <% } %>
  197. <% if (revise.status === audit.status.checking && curAuditor.audit_id === ctx.session.sessionUser.accountId) { %>
  198. <!--审批通过-->
  199. <div class="modal fade" id="sp-done" data-backdrop="static">
  200. <div class="modal-dialog modal-lg" role="document">
  201. <form class="modal-content" action="/tender/<%- ctx.tender.id %>/revise/audit/check" method="post" onsubmit="return auditCheck(0);">
  202. <div class="modal-header">
  203. <h5 class="modal-title">审批通过</h5>
  204. </div>
  205. <div class="modal-body">
  206. <div class="row">
  207. <div class="col-4">
  208. <div class="card mt-3">
  209. <ul class="list-group list-group-flush">
  210. <li class="list-group-item">
  211. <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
  212. </li>
  213. <% for (let i = 0; i < auditors.length; i++) { %>
  214. <li class="list-group-item">
  215. <% if (i < auditors.length - 1) { %>
  216. <i class="fa fa-chevron-circle-down"></i> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right"><%= ctx.helper.transFormToChinese(i+1) %>审</span>
  217. <% } else {%>
  218. <i class="fa fa fa-stop-circle"></i> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right">终审</span>
  219. <% } %>
  220. </li>
  221. <% } %>
  222. </ul>
  223. </div>
  224. </div>
  225. <div class="col-8 modal-height-500" style="overflow: auto">
  226. <div class="card mt-3">
  227. <ul class="list-group list-group-flush">
  228. <li class="list-group-item">
  229. <h5 class="card-title">
  230. <i class="fa fa-play-circle fa-rotate-90 text-success"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
  231. </h5>
  232. <div class="ml-3">
  233. <span class="text-success"><%- auditors[0].begin_time ? auditors[0].begin_time.toLocaleDateString() : ''%> <% if (revise.times > 1) { %>重新<% } %>上报</span>
  234. </div>
  235. </li>
  236. <% for (let i = 0, iLen = auditors.length; i < iLen; i++) { %>
  237. <li class="list-group-item" auditorId="<%- auditors[i].audit_id %>">
  238. <% if (auditors[i].status === audit.status.checked) { %>
  239. <h5 class="card-title">
  240. <i class="<%- (i < iLen - 1 ? 'fa fa-chevron-circle-down text-success' : 'fa fa-stop-circle text-success') %>"></i> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right"><%= i < iLen - 1 ? ctx.helper.transFormToChinese(i+1) : '终' %>审</span>
  241. </h5>
  242. <div class="ml-3">
  243. <span class="<%- audit.statusClass[auditors[i].status] %>"><%- auditors[i].end_time ? auditors[i].end_time.toLocaleDateString() : '' %> <%- audit.statusString[auditors[i].status] %></span>
  244. <p class="card-text"><%- auditors[i].opinion %></p>
  245. </div>
  246. <% } else if (auditors[i].status === audit.status.checking) { %>
  247. <h5 class="card-title">
  248. <i class="<%- (i < iLen - 1 ? 'fa fa-chevron-circle-down' : 'fa fa-stop-circle') %>"></i> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right"><%= i < iLen - 1 ? ctx.helper.transFormToChinese(i+1) : '终' %>审</span>
  249. </h5>
  250. <div class="form-group">
  251. <label>审批意见<b class="text-danger">*</b></label>
  252. <textarea class="form-control form-control-sm" name="opinion">同意</textarea>
  253. </div>
  254. <% } else { %>
  255. <h5 class="card-title">
  256. <i class="<%- (i < iLen - 1 ? 'fa fa-chevron-circle-down' : 'fa fa-stop-circle') %>"></i> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right"><%= i < iLen - 1 ? ctx.helper.transFormToChinese(i+1) : '终' %>审</span>
  257. </h5>
  258. <div class="ml-3">
  259. <p class="card-text"></p>
  260. </div>
  261. <% } %>
  262. </li>
  263. <% } %>
  264. </ul>
  265. </div>
  266. </div>
  267. </div>
  268. </div>
  269. <div class="modal-footer">
  270. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
  271. <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
  272. <input type="hidden" name="checkType" value="<%= audit.status.checked %>" />
  273. <button type="submit" class="btn btn-success btn-sm" >确认通过</button>
  274. </div>
  275. </form>
  276. </div>
  277. </div>
  278. <!--审批退回-->
  279. <div class="modal fade" id="sp-back" data-backdrop="static">
  280. <div class="modal-dialog modal-lg" role="document">
  281. <form class="modal-content" action="/tender/<%- ctx.tender.id %>/revise/audit/check" method="post" onsubmit="return auditCheck(1);">
  282. <div class="modal-header">
  283. <h5 class="modal-title">审批退回</h5>
  284. </div>
  285. <div class="modal-body">
  286. <div class="row">
  287. <div class="col-4">
  288. <div class="card mt-3">
  289. <ul class="list-group list-group-flush">
  290. <li class="list-group-item">
  291. <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
  292. </li>
  293. <% for (let i = 0; i < auditors.length; i++) { %>
  294. <li class="list-group-item">
  295. <% if (i < auditors.length - 1) { %>
  296. <i class="fa fa-chevron-circle-down"></i> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right"><%= ctx.helper.transFormToChinese(i+1) %>审</span>
  297. <% } else {%>
  298. <i class="fa fa fa-stop-circle"></i> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right">终审</span>
  299. <% } %>
  300. </li>
  301. <% } %>
  302. </ul>
  303. </div>
  304. </div>
  305. <div class="col-8 modal-height-500" style="overflow: auto">
  306. <div class="card mt-3">
  307. <ul class="list-group list-group-flush">
  308. <li class="list-group-item">
  309. <h5 class="card-title">
  310. <i class="fa fa-play-circle fa-rotate-90 text-success"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
  311. </h5>
  312. <div class="ml-3">
  313. <span class="text-success"><%- auditors[0].begin_time ? auditors[0].begin_time.toLocaleDateString() : ''%> <% if (revise.times > 1) { %>重新<% } %>上报</span>
  314. </div>
  315. </li>
  316. <% for (let i = 0, iLen = auditors.length; i < iLen; i++) { %>
  317. <li class="list-group-item" auditorId="<%- auditors[i].audit_id %>">
  318. <% if (auditors[i].status === audit.status.checked) { %>
  319. <h5 class="card-title">
  320. <i class="<%- (i < iLen - 1 ? 'fa fa-chevron-circle-down text-success' : 'fa fa-stop-circle text-success') %>"></i> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right"><%= i < iLen - 1 ? ctx.helper.transFormToChinese(i+1) : '终' %>审</span>
  321. </h5>
  322. <div class="ml-3">
  323. <span class="<%- audit.statusClass[auditors[i].status] %>"><%- auditors[i].end_time ? auditors[i].end_time.toLocaleDateString() : '' %> <%- audit.statusString[auditors[i].status] %></span>
  324. <p class="card-text"><%- auditors[i].opinion %></p>
  325. </div>
  326. <% } else if (auditors[i].status === audit.status.checking) { %>
  327. <h5 class="card-title">
  328. <i class="<%- (i < iLen - 1 ? 'fa fa-chevron-circle-down' : 'fa fa-stop-circle') %>"></i> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right"><%= i < iLen - 1 ? ctx.helper.transFormToChinese(i+1) : '终' %>审</span>
  329. </h5>
  330. <div class="form-group">
  331. <label>审批意见<b class="text-danger">*</b></label>
  332. <textarea class="form-control form-control-sm" name="opinion">不同意</textarea>
  333. </div>
  334. <div class="alert alert-warning">审批退回,将直接退回给上报人。</div>
  335. <% } else { %>
  336. <h5 class="card-title">
  337. <i class="<%- (i < iLen - 1 ? 'fa fa-chevron-circle-down' : 'fa fa-stop-circle') %>"></i> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right"><%= i < iLen - 1 ? ctx.helper.transFormToChinese(i+1) : '终' %>审</span>
  338. </h5>
  339. <div class="ml-3">
  340. <p class="card-text"></p>
  341. </div>
  342. <% } %>
  343. </li>
  344. <% } %>
  345. </ul>
  346. </div>
  347. </div>
  348. </div>
  349. </div>
  350. <div class="modal-footer">
  351. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
  352. <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
  353. <input type="hidden" name="checkType" value="<%= audit.status.checkNo %>" />
  354. <button type="submit" class="btn btn-warning btn-sm" >确认退回</button>
  355. </div>
  356. </form>
  357. </div>
  358. </div>
  359. <% } %>
  360. <% if (revise.status !== audit.status.uncheck || revise.times > 1) { %>
  361. <!--审批流程/结果-->
  362. <div class="modal fade" id="sp-list" data-backdrop="static">
  363. <div class="modal-dialog modal-lg" role="document">
  364. <div class="modal-content">
  365. <div class="modal-header">
  366. <h5 class="modal-title">审批流程</h5>
  367. </div>
  368. <div class="modal-body">
  369. <div class="row">
  370. <div class="col-4">
  371. <div class="card mt-3">
  372. <ul class="list-group list-group-flush">
  373. <li class="list-group-item">
  374. <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
  375. </li>
  376. <% for (let i = 0; i < auditors.length; i++) { %>
  377. <li class="list-group-item">
  378. <% if (i < auditors.length - 1) { %>
  379. <i class="fa fa-chevron-circle-down"></i> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right"><%= ctx.helper.transFormToChinese(i+1) %>审</span>
  380. <% } else {%>
  381. <i class="fa fa fa-stop-circle"></i> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right">终审</span>
  382. <% } %>
  383. </li>
  384. <% } %>
  385. </ul>
  386. </div>
  387. </div>
  388. <div class="col-8 modal-height-500" style="overflow: auto">
  389. <% for (const ah of auditHistory) { %>
  390. <div class="card mt-3">
  391. <ul class="list-group list-group-flush">
  392. <li class="list-group-item">
  393. <h5 class="card-title">
  394. <i class="fa fa-play-circle fa-rotate-90 text-success"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
  395. </h5>
  396. <div class="ml-3">
  397. <span class="text-success"><%- ah[0].begin_time.toLocaleDateString() %> <% if (auditHistory.indexOf(ah) > 0) { %>重新<% } %>上报</span>
  398. </div>
  399. </li>
  400. <% for (let iA = 0; iA < ah.length; iA++) { %>
  401. <% if (iA === ah.length - 1) { %>
  402. <li class="list-group-item">
  403. <h5 class="card-title">
  404. <i class="fa fa-stop-circle <%- audit.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span class="pull-right">终审</span>
  405. </h5>
  406. <div class="ml-3">
  407. <% if (ah[iA].status !== audit.status.uncheck) { %>
  408. <span class="<%- audit.statusClass[ah[iA].status] %>"><% if (ah[iA].status === audit.status.checked || ah[iA].status === audit.status.checkNo) { %><%- ah[iA].end_time.toLocaleDateString() %> <% } %><%- audit.statusString[ah[iA].status]%><% if (ah[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
  409. <% } %>
  410. <p class="card-text"><%- ah[iA].opinion %></p>
  411. </div>
  412. </li>
  413. <% } else { %>
  414. <li class="list-group-item">
  415. <h5 class="card-title">
  416. <i class="fa fa-chevron-circle-down <%- audit.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span class="pull-right"><%= ctx.helper.transFormToChinese(iA+1) %>审</span>
  417. </h5>
  418. <div class="ml-3">
  419. <% if (ah[iA].status !== audit.status.uncheck) { %>
  420. <span class="<%- audit.statusClass[ah[iA].status] %>"><% if (ah[iA].status === audit.status.checked || ah[iA].status === audit.status.checkNo) { %><%- ah[iA].end_time.toLocaleDateString() %> <% } %><%- audit.statusString[ah[iA].status]%><% if (ah[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
  421. <% } %>
  422. <p class="card-text"><%- ah[iA].opinion %></p>
  423. </div>
  424. </li>
  425. <% } %>
  426. <% } %>
  427. </ul>
  428. </div>
  429. <% } %>
  430. <% if (revise.status === audit.status.checking || revise.status === audit.status.checked) {%>
  431. <div class="card mt-3">
  432. <ul class="list-group list-group-flush">
  433. <li class="list-group-item">
  434. <h5 class="card-title">
  435. <i class="fa fa-play-circle fa-rotate-90 text-success"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
  436. </h5>
  437. <div class="ml-3">
  438. <span class="text-success"><%- auditors[0].begin_time ? auditors[0].begin_time.toLocaleDateString() : ''%> <% if (revise.times > 1) { %>重新<% } %>上报</span>
  439. </div>
  440. </li>
  441. <% for (let iA = 0; iA < auditors.length; iA++) { %>
  442. <% if (iA === auditors.length - 1) { %>
  443. <li class="list-group-item">
  444. <h5 class="card-title">
  445. <i class="fa fa-stop-circle <%- audit.statusClass[auditors[iA].status] %>"></i> <%- auditors[iA].name %> <small class="text-muted"><%- auditors[iA].role %></small><span class="pull-right">终审</span>
  446. </h5>
  447. <div class="ml-3">
  448. <% if (auditors[iA].status !== audit.status.uncheck) { %>
  449. <span class="<%- audit.statusClass[auditors[iA].status] %>"><% if (auditors[iA].status === audit.status.checked || auditors[iA].status === audit.status.checkNo) { %><%- auditors[iA].end_time.toLocaleDateString() %> <% } %><%- audit.statusString[auditors[iA].status]%><% if (auditors[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
  450. <% } %>
  451. <p class="card-text"><%- auditors[iA].opinion %></p>
  452. </div>
  453. </li>
  454. <% } else { %>
  455. <li class="list-group-item">
  456. <h5 class="card-title">
  457. <i class="fa fa-chevron-circle-down <%- audit.statusClass[auditors[iA].status] %>"></i> <%- auditors[iA].name %> <small class="text-muted"><%- auditors[iA].role %></small><span class="pull-right"><%= ctx.helper.transFormToChinese(iA+1) %>审</span>
  458. </h5>
  459. <div class="ml-3">
  460. <% if (auditors[iA].status !== audit.status.uncheck) { %>
  461. <span class="<%- audit.statusClass[auditors[iA].status] %>"><% if (auditors[iA].status === audit.status.checked || auditors[iA].status === audit.status.checkNo) { %><%- auditors[iA].end_time.toLocaleDateString() %> <% } %><%- audit.statusString[auditors[iA].status]%><% if (auditors[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
  462. <% } %>
  463. <p class="card-text"><%- auditors[iA].opinion %></p>
  464. </div>
  465. </li>
  466. <% } %>
  467. <% } %>
  468. </ul>
  469. </div>
  470. <% } %>
  471. </div>
  472. </div>
  473. </div>
  474. <div class="modal-footer">
  475. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
  476. </div>
  477. </div>
  478. </div>
  479. </div>
  480. <% } %>
  481. <% include ../shares/merge_peg_modal.ejs %>
  482. <% include ../shares/import_excel_modal.ejs %>
  483. <script>
  484. <% if (ctx.session.sessionUser.accountId === revise.uid && (revise.status === audit.status.uncheck || revise.status === audit.status.checkNo)) { %>
  485. const accountList = JSON.parse('<%- JSON.stringify(accountList) %>');
  486. // 审批人分组选择
  487. $('#account_group').change(function () {
  488. let account_html = '<option value="0">选择审批人</option>';
  489. for (const account of accountList) {
  490. if (parseInt($(this).val()) === 0 || parseInt($(this).val()) === account.account_group) {
  491. const role = account.role !== '' ? '(' + account.role + ')' : '';
  492. const company = account.company !== '' ? ' -' + account.company : '';
  493. account_html += '<option value="' + account.id + '">' + account.name + role + company + '</option>';
  494. }
  495. }
  496. $('#account_list').html(account_html);
  497. });
  498. // 添加到审批流程中
  499. $('body').on('change', '#account_list', function () {
  500. let id = $(this).val();
  501. id = parseInt(id);
  502. if (id !== 0) {
  503. const data = {
  504. auditorId: $(this).val(),
  505. };
  506. postData('/tender/<%- ctx.tender.id %>/revise/audit/add', data, (data) => {
  507. const html = [];
  508. html.push('<li class="list-group-item" auditorId="' + data.audit_id + '"><a href="javascript: void(0)" class="text-danger pull-right">移除</a>');
  509. html.push('<span>');
  510. html.push(data.audit_order + ' ');
  511. html.push(data.name + ' ');
  512. html.push('</span>');
  513. html.push('<small class="text-muted">');
  514. html.push(data.role);
  515. html.push('</small></li>');
  516. $('#auditors').append(html.join(''));
  517. // 如果是重新上报,添加到重新上报列表中
  518. const auditorshtml = [];
  519. // 重新上报时。令其它的审批人流程图标转换
  520. $('#auditors-list li i').removeClass('fa-stop-circle').addClass('fa-chevron-circle-down');
  521. for (let i = 0; i < $('#auditors-list li').length; i++) {
  522. $('#auditors-list li').eq(i).find('.pull-right').text(transFormToChinese(i+1) + '审');
  523. $('#auditors-list2 li').eq(i).find('.pull-right').text(transFormToChinese(i+1) + '审');
  524. }
  525. // 添加新审批人
  526. auditorshtml.push('<li class="list-group-item" data-auditid="' + data.audit_id + '">');
  527. auditorshtml.push('<i class="fa fa-stop-circle"></i> ');
  528. auditorshtml.push(data.name + ' <small class="text-muted">' + data.role + '</small>');
  529. auditorshtml.push('<span class="pull-right">终审</span>');
  530. auditorshtml.push('</li>');
  531. $('#auditors-list').append(auditorshtml.join(''));
  532. const auditorshtml2 = [];
  533. // 重新上报时。令其它的审批人流程图标转换
  534. $('#auditors-list2 li i').removeClass('fa-stop-circle').addClass('fa-chevron-circle-down');
  535. // 添加新审批人
  536. auditorshtml2.push('<li class="list-group-item" data-auditid="' + data.audit_id + '">');
  537. auditorshtml2.push('<h5 class="card-title"><i class="fa fa-stop-circle"></i> ');
  538. auditorshtml2.push(data.name + ' <small class="text-muted">' + data.role + '</small>');
  539. auditorshtml2.push('<span class="pull-right">终审</span>');
  540. auditorshtml2.push('</h5></li>');
  541. $('#auditors-list2').append(auditorshtml2.join(''));
  542. });
  543. }
  544. });
  545. $('body').on('click', '#auditors li>a', function () {
  546. const li = $(this).parent();
  547. const data = {
  548. auditorId: parseInt(li.attr('auditorId')),
  549. };
  550. postData('/tender/<%- ctx.tender.id %>/revise/audit/remove', data, (data2) => {
  551. li.remove();
  552. for (const a of data2) {
  553. const aLi = $('li[auditorId=' + a.audit_id + ']');
  554. $('span', aLi).text(a.audit_order + ' ' + a.name + ' ');
  555. }
  556. // 如果是重新上报
  557. // 令最后一个图标转换
  558. $('#auditors-list li[data-auditid="' + data.auditorId + '"]').remove();
  559. if ($('#auditors-list li').length !== 0 && !$('#auditors-list li i').hasClass('fa-stop-circle')) {
  560. $('#auditors-list li').eq($('#auditors-list li').length-1).children('i')
  561. .removeClass('fa-chevron-circle-down').addClass('fa-stop-circle');
  562. }
  563. $('#auditors-list2 li[data-auditid="' + data.auditorId + '"]').remove();
  564. if ($('#auditors-list2 li').length !== 0 && !$('#auditors-list2 li i').hasClass('fa-stop-circle')) {
  565. $('#auditors-list2 li').eq($('#auditors-list2 li').length-1).children('i')
  566. .removeClass('fa-chevron-circle-down').addClass('fa-stop-circle');
  567. }
  568. for (let i = 0; i < $('#auditors-list li').length; i++) {
  569. $('#auditors-list li').eq(i).find('.pull-right').text((i+1 === $('#auditors-list li').length ? '终' : transFormToChinese(i+1)) + '审');
  570. $('#auditors-list2 li').eq(i).find('.pull-right').text((i+1 === $('#auditors-list2 li').length ? '终' : transFormToChinese(i+1)) + '审');
  571. }
  572. });
  573. });
  574. $('#hideSp').click(function () {
  575. $('#sub-sp2').modal('hide');
  576. });
  577. // 多层modal关闭后的滚动bug修复
  578. $('#sub-sp2').on('hidden.bs.modal', function (e) {
  579. $(document.body).addClass('modal-open');
  580. });
  581. <% } %>
  582. // 检查上报情况
  583. function checkAuditorFrom () {
  584. const content = $('#content').val();
  585. const orgContent = $('#content').attr('org-value');
  586. if (!content || content === '') {
  587. toastr.error('请先填写修订内容,再上报数据');
  588. return false;
  589. } else if (orgContent !== content) {
  590. toastr.warning('修订内容未保存,请先保存,再上报数据');
  591. return false;
  592. }
  593. if ($('#auditors li').length === 0) {
  594. toastr.error('请先选择审批人,再上报数据');
  595. return false;
  596. }
  597. $('#hide-all').show();
  598. }
  599. // texterea换行
  600. function auditCheck(i) {
  601. const opinion = $('textarea[name="opinion"]').eq(i).val().replace(/\r\n/g, '<br/>').replace(/\n/g, '<br/>').replace(/\s/g, ' ');
  602. $('textarea[name="opinion"]').eq(i).val(opinion);
  603. return true;
  604. }
  605. </script>