detail.ejs 59 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126
  1. <% include ./tender_sub_menu.ejs %>
  2. <div class="panel-content">
  3. <div class="panel-title">
  4. <div class="title-main d-flex">
  5. <% include ./tender_sub_mini_menu.ejs %>
  6. <% if (tender.ledger_status !== audit.ledger.status.uncheck) { %>
  7. <h2>进行至
  8. <% if (lastStage) { %>
  9. 第<%- lastStage.order %>期<small class="<%- audit.stage.statusClass[lastStage.status] %>">(<%- audit.stage.statusString[lastStage.status] %>)</small>
  10. <% } else { %>
  11. 台账<small class="<%- audit.ledger.auditStringClass[tender.ledger_status] %>">(<%- audit.ledger.auditString[tender.ledger_status] %>)</small>
  12. <% } %>
  13. </h2>
  14. <% } %>
  15. <% if (cooperation) { %>
  16. <div>
  17. <a href="/tender/<%= tender.id %>/cooperation" class="btn btn-sm btn-light" ><i class="fa fa-users"></i> 协作办公</a>
  18. </div>
  19. <% } %>
  20. </div>
  21. </div>
  22. <div class="content-wrap">
  23. <div class="c-body" style="background:#2c3237 !important">
  24. <div class="sjs-height-0">
  25. <div class="m-3">
  26. <!--金额概况-->
  27. <div class="row mx-0">
  28. <div class="col-1 pl-0">
  29. <div class="card text-center mb-2 bg-dark text-white">
  30. <div class="card-body">
  31. <h5 class="card-title mb-3">
  32. <div class="dropdown">
  33. <a class="btn btn-sm btn-outline-light dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  34. 标段
  35. </a>
  36. <div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
  37. <a href="#bd-set-1" data-toggle="modal" data-target="#bd-set-1" class="dropdown-item" >标段属性</a>
  38. <a href="#bd-set-2" data-toggle="modal" data-target="#bd-set-2" class="dropdown-item" >小数位数</a>
  39. <a href="#bd-set-3" data-toggle="modal" data-target="#bd-set-3" class="dropdown-item" >数量精度</a>
  40. <a href="#bd-set-4" data-toggle="modal" data-target="#bd-set-4" class="dropdown-item" >合同参数</a>
  41. <a href="#bd-set-5" data-toggle="modal" data-target="#bd-set-5" class="dropdown-item" >显示设置</a>
  42. <a href="#bd-set-6" data-toggle="modal" data-target="#bd-set-6" class="dropdown-item" >章节设置</a>
  43. <a href="#bd-set-7" data-toggle="modal" data-target="#bd-set-7" class="dropdown-item" >付款账号</a>
  44. </div>
  45. </div>
  46. <div class="dropdown mt-1">
  47. <a class="btn btn-sm btn-outline-light dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  48. 管理员
  49. </a>
  50. <div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
  51. <% if (ctx.session.sessionProject.page_show !== null && parseInt(ctx.session.sessionProject.page_show.xxjd) === 1 && ctx.session.sessionUser.is_admin) { %>
  52. <a href="#xxjd-set" data-toggle="modal" data-target="#xxjd-set" class="dropdown-item">投资进度</a>
  53. <% } %>
  54. <a class="dropdown-item" href="javascript: void(0);" id="copyBtn">拷贝设置</a>
  55. <% if (ctx.session.sessionUser.is_admin) { %>
  56. <a href="/tender/<%- tender.id %>/shenpi" class="dropdown-item">审批流程</a>
  57. <a href="#bd-set-9" data-toggle="modal" data-target="#bd-set-9" class="dropdown-item">游客账号 <span id="tourist-num" <% if (tourists.length !== 0) { %>class="badge badge-secondary"<% } %>><% if (tourists.length !== 0) { %><%- tourists.length %><% } %></span></a>
  58. <a href="#bd-set-10" data-toggle="modal" data-target="#bd-set-10" class="dropdown-item">上报限制</a>
  59. <% } %>
  60. </div>
  61. </div>
  62. </h5>
  63. </div>
  64. </div>
  65. </div>
  66. <div class="col-10">
  67. <div class="row">
  68. <div class="col-2 pl-0">
  69. <div class="card text-center py-2 pb-2 mb-3 bg-dark text-white">
  70. <div class="card-body">
  71. <h5 class="card-title"><%- ctx.helper.formatMoney(tender.total_price) %></h5>
  72. <p class="card-text text-muted">0号台账合同</p>
  73. </div>
  74. </div>
  75. </div>
  76. <div class="col-2 pl-0">
  77. <div class="card text-center py-2 pb-2 mb-3 bg-dark text-white">
  78. <div class="card-body">
  79. <h5 class="card-title"><%- ctx.helper.formatMoney(tender.end_qc_tp) %> <small class="text-danger" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="占合同比例"><%- tender.qc_ratio %>%</small></h5>
  80. <p class="card-text text-muted">截止本期变更</p>
  81. </div>
  82. </div>
  83. </div>
  84. <div class="col-2 pl-0">
  85. <div class="card text-center py-2 pb-2 mb-3 bg-dark text-white">
  86. <div class="card-body">
  87. <h5 class="card-title"><%- ctx.helper.formatMoney(tender.gather_tp) %></h5>
  88. <p class="card-text text-muted">本期完成</p>
  89. </div>
  90. </div>
  91. </div>
  92. <div class="col-2 pl-0">
  93. <div class="card text-center py-2 pb-2 mb-3 bg-dark text-white">
  94. <div class="card-body">
  95. <h5 class="card-title"><%- ctx.helper.formatMoney(tender.pre_gather_tp) %></h5>
  96. <p class="card-text text-muted">截止上期完成</p>
  97. </div>
  98. </div>
  99. </div>
  100. <div class="col-2 pl-0">
  101. <div class="card text-center py-2 pb-2 mb-3 bg-dark text-white">
  102. <div class="card-body">
  103. <h5 class="card-title"><%- ctx.helper.formatMoney(tender.end_gather_tp) %></h5>
  104. <p class="card-text text-muted">截止本期完成</p>
  105. </div>
  106. </div>
  107. </div>
  108. <div class="col-2 pl-0">
  109. <div class="card text-center py-2 pb-2 mb-3 bg-dark text-white">
  110. <div class="card-body">
  111. <h5 class="card-title"><%- ctx.helper.formatMoney(tender.yf_tp) %></h5>
  112. <p class="card-text text-muted">本期应付</p>
  113. </div>
  114. </div>
  115. </div>
  116. </div>
  117. </div>
  118. <div class="col-1 pl-0">
  119. <div class="card mb-3 bg-dark text-white">
  120. <div class="card-header"><h6 class="mb-0">台帐修订</h6></div>
  121. <div class="card-body pt-3 pb-2">
  122. <div class="circle-box">
  123. <div class="circle"></div>
  124. <span class="circle-num"><%- reviseNum %></span>
  125. </div>
  126. <div class="circle-text">次</div>
  127. </div>
  128. </div>
  129. </div>
  130. <!-- <div class="col-auto pl-0"></div> -->
  131. <!-- <div class="col-auto pl-0"></div> -->
  132. </div>
  133. <!--进度条-->
  134. <div class="mb-3">
  135. <div class="progress">
  136. <% if (tender.pre_ratio > 0) { %>
  137. <div class="progress-bar bg-success" style="width: <%- tender.pre_ratio %>%;" data-placement="bottom" data-toggle="tooltip" data-original-title="截止上期累计完成:¥<%- ctx.helper.formatMoney(tender.pre_gather_tp) %>"><%- tender.pre_ratio %>%</div>
  138. <% } %>
  139. <% if (tender.cur_ratio > 0) { %>
  140. <div class="progress-bar bg-info" style="width: <%- tender.cur_ratio %>%;" data-placement="bottom" data-toggle="tooltip" data-original-title="本期完成:¥<%- ctx.helper.formatMoney(tender.gather_tp) %>"><%- tender.cur_ratio %>%</div>
  141. <% } %>
  142. <% if (tender.other_ratio > 0) { %>
  143. <div class="progress-bar bg-gray" style="width: <%- tender.other_ratio %>%;" data-placement="bottom" data-toggle="tooltip" data-original-title="未完成:¥<%- ctx.helper.formatMoney(tender.other_tp) %>"><%- tender.other_ratio %>%</div>
  144. <% } %>
  145. </div>
  146. </div>
  147. <!--图表1-->
  148. <div class="row">
  149. <div class="col-3">
  150. <!--计量完成概况-->
  151. <div class="card mb-3 bg-dark text-white">
  152. <div class="card-header"><h6 class="mb-0">计量完成概况</h6></div>
  153. <div class="card-body">
  154. <div id="jlchart1" style="height: 113px; width: 100%;">
  155. </div>
  156. </div>
  157. </div>
  158. <!--支付情况-->
  159. <div class="card mb-3 bg-dark text-white">
  160. <div class="card-header"><h6 class="mb-0">支付情况</h6></div>
  161. <div class="card-body">
  162. <div id="jlchart2" style="height: 159px; width: 100%;">
  163. </div>
  164. </div>
  165. </div>
  166. </div>
  167. <!--章节计量情况图-->
  168. <div class="col-6 pl-0">
  169. <div class="card mb-3 bg-dark text-white">
  170. <% if (hadMap) { %>
  171. <div class="card-body" id="map" style="height: 453px; width: 100%;">
  172. </div>
  173. <% } else { %>
  174. <div class="card-header"><h6 class="mb-0">章节计量情况图</h6></div>
  175. <div class="card-body">
  176. <div id="jlchart3" style="height: 372px; width: 100%;">
  177. </div>
  178. </div>
  179. <% } %>
  180. </div>
  181. </div>
  182. <div class="col-3 pl-0">
  183. <!--台帐审批进度-->
  184. <div class="card mb-3 bg-dark text-white">
  185. <div class="card-header"><h6 class="mb-0"><% if (lastStage) { %>计量审批进度<% } else { %>台帐审批进度<% } %></h6></div>
  186. <div class="card-body">
  187. <div style="">
  188. <div class="btn-group btn-group-sm btn-block my-1">
  189. <% if (lastStage) { %>
  190. <% if (lastStage.auditors && lastStage.auditors.length > 0) { %>
  191. <% for (const [i,sa] of lastStage.auditors.entries()) { %>
  192. <button class="btn <% if (sa.status === audit.stage.status.checked) { %>btn-success<% } else if (sa.status === audit.stage.status.checking) { %>btn-warning<% } else if (sa.status === audit.stage.status.checkNo) { %>btn-danger<% } else { %>btn-info<% } %>" data-toggle="tooltip"
  193. data-placement="top" data-original-title="<%- sa.name %> <% if (sa.status === audit.stage.status.checked) { %>审批完成<% } else if (sa.status === audit.stage.status.checking) { %>审批中<% } else if (sa.status === audit.stage.status.checkNo || sa.status === audit.stage.status.checkNoPre) { %>审批退回<% } else if (sa.status === audit.stage.status.checkAgain) { %>重新审批<% } %> <% if (sa.end_time) { %><%- ctx.helper.dateTran(sa.end_time, 'YYYY-MM-DD') %><% } %>"><%- (i+1) %></button>
  194. <% } %>
  195. <% } else { %>
  196. <button class="btn btn-secondary" data-toggle="tooltip" data-placement="top" data-original-title="">&nbsp;</button>
  197. <% } %>
  198. <% } else { %>
  199. <%if (tender.auditors && tender.auditors.length > 0) { %>
  200. <% for (const [i, la] of tender.auditors.entries()) { %>
  201. <button class="btn <% if (la.status === audit.ledger.status.checked) { %>btn-success<% } else if (la.status === audit.ledger.status.checking) { %>btn-warning<% } else if (la.status === audit.ledger.status.checkNo) { %>btn-danger<% } else { %>btn-info<% } %>" data-toggle="tooltip"
  202. data-placement="top" data-original-title="<%- la.name %> <% if (la.status === audit.ledger.status.checked) { %>审批完成<% } else if (la.status === audit.ledger.status.checking) { %>审批中<% } else if (la.status === audit.ledger.status.checkNo || la.status === audit.ledger.status.checkNoPre) { %>审批退回<% } %> <% if (la.end_time) { %><%- ctx.helper.dateTran(la.end_time, 'YYYY-MM-DD') %><% } %>"><%- (i+1) %></button>
  203. <% } %>
  204. <% } else { %>
  205. <button class="btn btn-secondary" data-toggle="tooltip" data-placement="top" data-original-title="">&nbsp;</button>
  206. <% } %>
  207. <% } %>
  208. </div>
  209. <div class="row">
  210. <div class="col-2">
  211. </div>
  212. <div class="col-8 text-center">
  213. <% if (lastStage) { %>
  214. 第<%- lastStage.order %>期
  215. <% if (lastStage.status === audit.stage.status.uncheck) { %>
  216. <span class="text-info"><%- lastStage.status_users %></span>
  217. <% } else { %>
  218. <a href="#sp-list" data-toggle="modal" data-target="#sp-list" data-type="stage" data-order="<%- lastStage.order %>"><%- lastStage.status_users %></a>
  219. <% } %>
  220. <span class="<%- audit.stage.statusClass[lastStage.status] %>"><%- audit.stage.statusString[lastStage.status] %></span>
  221. <% } else { %>
  222. <% if (tender.ledger_status === audit.ledger.status.uncheck) { %>
  223. <span class="text-info"><%- tender.status_users %></span> <span>待上报</span>
  224. <% } else { %>
  225. <a href="#sp-list" data-toggle="modal" data-target="#sp-list" data-type="ledger" data-order="<%- tender.order %>"><%- tender.status_users %></a> <span class="<%- audit.ledger.auditStringClass[tender.ledger_status] %> %>"><%- audit.ledger.auditString[tender.ledger_status] %></span>
  226. <% } %>
  227. <% } %>
  228. </div>
  229. </div>
  230. <div class="row mt-1 border-top border-secondary pt-3 mt-2">
  231. <% if (lastStage) { %>
  232. <div class="col-7 mb-1">
  233. 本期合同计量金额:
  234. </div>
  235. <div class="col-5 text-right mb-1">
  236. <%- lastStage.contract_tp %>
  237. </div>
  238. <div class="col-7">
  239. 本期变更计量金额:
  240. </div>
  241. <div class="col-5 text-right">
  242. <%- lastStage.qc_tp %>
  243. </div>
  244. <% } %>
  245. </div>
  246. </div>
  247. </div>
  248. </div>
  249. <div class="card mb-3 bg-dark text-white">
  250. <div class="card-header">
  251. <ul class="nav nav-tabs card-header-tabs panel-card-tabs">
  252. <li class="nav-item">
  253. <a class="nav-link active" data-toggle="tab" href="#taizhangshenpi" role="tab" aria-selected="true">工程变更进度</a>
  254. </li>
  255. <li class="nav-item">
  256. <a class="nav-link" data-toggle="tab" href="#taizhangxiuding" role="tab" aria-selected="true">材料调差进度</a>
  257. </li>
  258. </ul>
  259. </div>
  260. <div class="card-body">
  261. <div class="tab-content">
  262. <div class="tab-pane active" id="taizhangshenpi">
  263. <div id="bgchart" style="height: 157px; width: 100%;"></div>
  264. </div>
  265. <div class="tab-pane" id="taizhangxiuding" >
  266. <div class="card-body p-3">
  267. <div style="height:125px">
  268. <div class="btn-group btn-group-sm btn-block my-1">
  269. <% if (materialData && materialData.auditors.length > 0) { %>
  270. <% for (const [i, ma] of materialData.auditors.entries()) { %>
  271. <button class="btn <% if (ma.status === audit.material.status.checked) { %>btn-success<% } else if (ma.status === audit.material.status.checking) { %>btn-warning<% } else if(ma.status === audit.material.status.checkNo) { %>btn-danger<% } else { %>btn-info<% } %>" data-toggle="tooltip"
  272. data-placement="top" data-original-title="<%- ma.name %> <% if (ma.status === audit.material.status.checked) { %>审批完成<% } else if (ma.status === audit.material.status.checking) { %>审批中<% } else if (ma.status === audit.material.status.checkNo || ma.status === audit.material.status.checkNoPre) { %>审批退回<% } %> <% if (ma.end_time) { %><%- ctx.helper.dateTran(ma.end_time, 'YYYY-MM-DD') %><% } %>"><%- (i+1) %></button>
  273. <% } %>
  274. <% } else { %>
  275. <button class="btn btn-secondary" data-toggle="tooltip" data-placement="top" data-original-title="">&nbsp;</button>
  276. <% } %>
  277. <!--<button class="btn btn-warning" data-toggle="tooltip" data-placement="top" data-original-title="温仁书 审批中">2</button>-->
  278. <!--<button class="btn btn-info" data-toggle="tooltip" data-placement="top" data-original-title="玉安然">3</button>-->
  279. </div>
  280. <div class="row">
  281. <div class="col-2">
  282. </div>
  283. <div class="col-8 text-center">
  284. 第 <%- (materialData ? materialData.order : '0') %> 期
  285. <% if (materialData) { %>
  286. <% if (materialData.curAuditor) { %>
  287. <a href="#sp-list" data-toggle="modal" data-target="#sp-list" data-type="material" data-order="<%- materialData.order %>"><%- materialData.curAuditor.name %></a>
  288. <% } %>
  289. <span class="<%- audit.material.auditProgressClass[materialData.status] %>"><%- audit.material.auditProgress[materialData.status] %></span>
  290. <% } %>
  291. </div>
  292. </div>
  293. <table class="table table-bordered table-2sm mb-0 mt-2 table-dark">
  294. <thead><tr><th></th><th>信息价</th><th>指数法</th></tr></thead>
  295. <% if (materialData) { %>
  296. <tr><th>含税</th><td><%= materialData.m_tp !== null ? ctx.helper.round(ctx.helper.mul(materialData.m_tp, 1+materialData.rate/100), 2) : null %></td><td><%= materialData.ex_tp !== null ? ctx.helper.round(ctx.helper.mul(materialData.ex_tp, 1+materialData.rate/100), 2) : null %></td></tr>
  297. <tr><th>不含税</th><td><%= materialData.m_tp !== null ? ctx.helper.round(materialData.m_tp, 2) : null %></td><td><%= materialData.ex_tp !== null ? ctx.helper.round(materialData.ex_tp, 2) : null %></td></tr>
  298. <% } else { %>
  299. <tr><th>含税</th><td></td><td></td></tr>
  300. <tr><th>不含税</th><td></td><td></td></tr>
  301. <% } %>
  302. </table>
  303. </div>
  304. </div>
  305. </div>
  306. </div>
  307. </div>
  308. </div>
  309. </div>
  310. <!--期进度表-->
  311. <div class="col-6">
  312. <div class="card mb-3 bg-dark text-white">
  313. <% if (hadMap) { %>
  314. <div class="card-header"><h6 class="mb-0">章节计量情况表</h6></div>
  315. <div class="card-body">
  316. <div id="jlchart3" style="height: 338px; width: 100%;"></div>
  317. </div>
  318. <% } else { %>
  319. <div class="card-header"><h6 class="mb-0">期进度表</h6></div>
  320. <div class="card-body">
  321. <div id="chartContainer4" style="height: 300px; width: 100%;"></div>
  322. </div>
  323. <% } %>
  324. </div>
  325. </div>
  326. <!--月进度表-->
  327. <div class="col-6 pl-0">
  328. <div class="card mb-3 bg-dark text-white">
  329. <% if (hadMap) { %>
  330. <div class="card-header">
  331. <ul class="nav nav-tabs card-header-tabs panel-card-tabs">
  332. <li class="nav-item">
  333. <a class="nav-link active" data-toggle="tab" href="#qijindubiao" role="tab" aria-selected="true">期进度表</a>
  334. </li>
  335. <li class="nav-item">
  336. <a class="nav-link" data-toggle="tab" href="#yuejindbiao" role="tab" aria-selected="true">月进度表</a>
  337. </li>
  338. </ul>
  339. </div>
  340. <div class="card-body">
  341. <div class="tab-content">
  342. <div class="tab-pane active" id="qijindubiao">
  343. <div id="chartContainer4" style="height: 338px; width: 100%;"></div>
  344. </div>
  345. <div class="tab-pane" id="yuejindbiao" >
  346. <div id="chartContainer3" style="height: 338px; width: 800px;"></div>
  347. </div>
  348. </div>
  349. </div>
  350. <% } else { %>
  351. <div class="card-header"><h6 class="mb-0">月进度表</h6></div>
  352. <div class="card-body">
  353. <div id="chartContainer3" style="height: 300px; width: 100%;"></div>
  354. </div>
  355. <% } %>
  356. </div>
  357. </div>
  358. </div>
  359. </div>
  360. </div>
  361. </div>
  362. </div>
  363. </div>
  364. <script src="/public/js/sub_menu.js"></script>
  365. <script>
  366. $.subMenu({
  367. menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
  368. toMenu: '#to-menu', toMiniMenu: '#to-mini-menu',
  369. key: 'menu.1.0.0',
  370. miniHint: '#sub-mini-hint', hintKey: 'menu.hint.1.0.1',
  371. callback: function (info) {
  372. if (info.mini) {
  373. $('.panel-title').addClass('fluid');
  374. $('#sub-menu').removeClass('panel-sidebar');
  375. } else {
  376. $('.panel-title').removeClass('fluid');
  377. $('#sub-menu').addClass('panel-sidebar');
  378. }
  379. autoFlashHeight();
  380. }
  381. });
  382. </script>
  383. <script type="text/javascript">
  384. const tenders = JSON.parse(unescape('<%- escape(JSON.stringify(tenders)) %>'));
  385. const category = JSON.parse(unescape('<%- escape(JSON.stringify(categoryData)) %>'));
  386. const tender = JSON.parse('<%- JSON.stringify(tender) %>');
  387. const cur_uid = parseInt('<%- ctx.session.sessionUser.accountId %>');
  388. //计量完成概况//
  389. var myChart = echarts.init(document.getElementById('jlchart1'), 'dark');
  390. var option = {
  391. color: ['#2ba850','#d7b014','#cf4058','#177ddc','#13a8a8',
  392. '#d38b70','#8fb7cf','#cd5c5c','#ffa500','#40e0d0',
  393. '#1e90ff','#ff6347','#7b68ee','#00fa9a','#ffd700',
  394. '#5c616b','#ff6666','#3cb371','#b8860b','#30e0e0'],
  395. backgroundColor: '#343a40 ',
  396. tooltip: {
  397. trigger: 'item'
  398. },
  399. legend: {
  400. top: '0%',
  401. left: 'center'
  402. },
  403. series: [
  404. {
  405. name: '金额',
  406. type: 'pie',
  407. top:'20%',
  408. radius: ['70%'],
  409. avoidLabelOverlap: false,
  410. label: {
  411. show: false,
  412. position: 'right'
  413. },
  414. emphasis: {
  415. label: {
  416. show: true,
  417. fontSize: '20',
  418. fontWeight: 'bold'
  419. }
  420. },
  421. labelLine: {
  422. show: false
  423. },
  424. data: [
  425. <% for (const s of stage_total) { %>
  426. {value: <%- s.num %>, name: '<%- s.name %>'},
  427. <% } %>
  428. ]
  429. }
  430. ]
  431. };
  432. // 为echarts对象加载数据
  433. myChart.setOption(option);
  434. //计量完成概况 结束//
  435. //计量支付概况//
  436. var myChart = echarts.init(document.getElementById('jlchart2'), 'dark');
  437. var option = {
  438. backgroundColor: '#343a40 ',
  439. tooltip: {
  440. trigger: 'axis',
  441. axisPointer: {
  442. type: 'shadow'
  443. }
  444. },
  445. grid: {
  446. left: '3%',
  447. right: '10%',
  448. top:'5%',
  449. bottom: '3%',
  450. containLabel: true
  451. },
  452. yAxis: {
  453. type: 'category',
  454. data: ['总价', '截止应付', '截止实付']
  455. },
  456. xAxis: {
  457. type: 'value',
  458. name : '金额',
  459. position:'left',
  460. axisLabel : {
  461. <% if (ctx.tender.info.display.thousandth) { %>
  462. formatter: function (value, index) {
  463. return value.format2Str('#,##0.######') + ' 元'
  464. }
  465. <% } else { %>
  466. formatter: function (value, index) {
  467. if (value >= 10000 && value < 10000000) {
  468. value = value / 10000 + "万";
  469. } else if (value >= 10000000) {
  470. value = value / 10000000 + "千万";
  471. }
  472. return value;
  473. }
  474. <% } %>
  475. },
  476. splitArea : {show : true}
  477. },
  478. series: [{
  479. data: [<%- tender.total_price ? tender.total_price : 0 %>, <%- tender.end_yf_tp ? tender.end_yf_tp : 0 %>, <%- tender.end_sf_tp ? tender.end_sf_tp : 0 %>,],
  480. type: 'bar',
  481. itemStyle:{
  482. normal:{
  483. color:function(params){
  484. var colorlist = ['#2ba850','#177ddc','#cf4058','#177ddc','#13a8a8'];
  485. return colorlist[params.dataIndex];
  486. }
  487. }
  488. }
  489. }]
  490. };
  491. // 为echarts对象加载数据
  492. myChart.setOption(option);
  493. //计量支付概况 结束//
  494. //章节计量情况图//
  495. var myChart = echarts.init(document.getElementById('jlchart3'), 'dark');
  496. var option = {
  497. color: ['#2ba850','#d7b014','#cf4058','#177ddc','#13a8a8',
  498. '#d38b70','#8fb7cf','#cd5c5c','#ffa500','#40e0d0',
  499. '#1e90ff','#ff6347','#7b68ee','#00fa9a','#ffd700',
  500. '#5c616b','#ff6666','#3cb371','#b8860b','#30e0e0'],
  501. backgroundColor: '#343a40 ',
  502. tooltip: {
  503. trigger: 'axis',
  504. axisPointer: {
  505. type: 'shadow'
  506. }
  507. },
  508. legend: {
  509. data: ['台帐金额','截止本期计量']
  510. },
  511. grid: {
  512. left: '3%',
  513. right: '4%',
  514. bottom: '3%',
  515. containLabel: true
  516. },
  517. yAxis: {
  518. type : 'value',
  519. name : '金额',
  520. position:'left',
  521. axisLabel : {
  522. <% if (ctx.tender.info.display.thousandth) { %>
  523. formatter: function (value, index) {
  524. return value.format2Str('#,##0.######') + ' 元'
  525. }
  526. <% } else { %>
  527. formatter: '{value} 元'
  528. <% } %>
  529. // formatter: function (value, index) {
  530. // if (value >= 10000 && value < 10000000) {
  531. // value = value / 10000 + "万";
  532. // } else if (value >= 10000000) {
  533. // value = value / 10000000 + "千万";
  534. // }
  535. // return value;
  536. // }
  537. },
  538. splitArea : {show : true}
  539. },
  540. xAxis: {
  541. type: 'category',
  542. data: ['100章', '200章', '300章', '400章', '500章', '600章', '700章', '800章', '900章']
  543. },
  544. series: [
  545. {
  546. name: '台帐金额',
  547. type: 'bar',
  548. data: [18203, 23489, 29034, 104970, 131744, 630230, 104970, 131744, 630230]
  549. },
  550. {
  551. name: '截止本期计量',
  552. type: 'bar',
  553. data: [19325, 23438, 31000, 121594, 134141, 681807, 121594, 134141, 681807]
  554. }
  555. ]
  556. };
  557. // 为echarts对象加载数据
  558. myChart.setOption(option);
  559. //4 标段期数计量进度//
  560. var myChart = echarts.init(document.getElementById('chartContainer4'), 'dark');
  561. var option = {
  562. color: ['#2ba850','#d7b014','#cf4058','#177ddc','#13a8a8',
  563. '#d38b70','#8fb7cf','#cd5c5c','#ffa500','#40e0d0',
  564. '#1e90ff','#ff6347','#7b68ee','#00fa9a','#ffd700',
  565. '#5c616b','#ff6666','#3cb371','#b8860b','#30e0e0'],
  566. backgroundColor: '#343a40 ',
  567. title : {
  568. text: '标段期进度'
  569. },
  570. tooltip : {
  571. trigger: 'axis',
  572. },
  573. calculable : true,
  574. legend: {
  575. data:['本期合同计量','本期数量变更计量','截至上期累计完成','本期完成计量','完成度']
  576. },
  577. dataZoom: [
  578. {show: true, start: 0, end: 100}
  579. ],
  580. xAxis : [
  581. {
  582. type : 'category',
  583. splitLine : {show : true},
  584. data : [
  585. <% for (const s of stages) {%>
  586. '第<%- s.order %>期',
  587. <% } %>
  588. ]
  589. }
  590. ],
  591. yAxis : [
  592. {
  593. type : 'value',
  594. name : '金额',
  595. position:'left',
  596. axisLabel : {
  597. <% if (ctx.tender.info.display.thousandth) { %>
  598. formatter: function (value, index) {
  599. return value.format2Str('#,##0.######') + ' 元'
  600. }
  601. <% } else { %>
  602. formatter: '{value} 元'
  603. <% } %>
  604. },
  605. splitArea : {show : true},
  606. splitLine : {show : true},
  607. },
  608. {
  609. type : 'value',
  610. name:'完成度',
  611. axisLabel : {
  612. formatter: '{value} %'
  613. },
  614. position: 'right',
  615. splitArea : {show : false},
  616. splitLine : {show : false},
  617. }
  618. ],
  619. series : [
  620. {
  621. name:'本期合同计量',
  622. type:'bar',
  623. tooltip : {
  624. trigger: 'item',
  625. <% if (ctx.tender.info.display.thousandth) { %>
  626. formatter: function (params, ticket, callback) {
  627. return params.name + '<br/>' + params.seriesName + ': ' + params.value.format2Str('#,##0.######') + ' 元';
  628. }
  629. <% } else { %>
  630. tooltip : {trigger: 'item',formatter: "{b} <br/>{a}:{c}元"},
  631. <% } %>
  632. },
  633. stack: '合同',
  634. data:[
  635. <% for (const s of stages) {%>
  636. <%- s.contract_tp %>,
  637. <% } %>
  638. ]
  639. },
  640. {
  641. name:'本期数量变更计量',
  642. type:'bar',
  643. tooltip : {
  644. trigger: 'item',
  645. <% if (ctx.tender.info.display.thousandth) { %>
  646. formatter: function (params, ticket, callback) {
  647. return params.name + '<br/>' + params.seriesName + ': ' + params.value.format2Str('#,##0.######') + ' 元';
  648. }
  649. <% } else { %>
  650. tooltip : {trigger: 'item',formatter: "{b} <br/>{a}:{c}元"},
  651. <% } %>
  652. },
  653. stack: '变更',
  654. data:[
  655. <% for (const s of stages) {%>
  656. <%- s.qc_tp %>,
  657. <% } %>
  658. ]
  659. },
  660. {
  661. name:'截至上期累计完成',
  662. type:'bar',
  663. tooltip : {
  664. trigger: 'item',
  665. <% if (ctx.tender.info.display.thousandth) { %>
  666. formatter: function (params, ticket, callback) {
  667. return params.name + '<br/>' + params.seriesName + ': ' + params.value.format2Str('#,##0.######') + ' 元';
  668. }
  669. <% } else { %>
  670. tooltip : {trigger: 'item',formatter: "{b} <br/>{a}:{c}元"},
  671. <% } %>
  672. },
  673. stack: '完成',
  674. data:[
  675. <% for (const s of stages) {%>
  676. <%- ctx.helper.add(s.pre_contract_tp, s.pre_qc_tp) %>,
  677. <% } %>
  678. ]
  679. },
  680. {
  681. name:'本期完成计量',
  682. type:'bar',
  683. tooltip : {
  684. trigger: 'item',
  685. <% if (ctx.tender.info.display.thousandth) { %>
  686. formatter: function (params, ticket, callback) {
  687. return params.name + '<br/>' + params.seriesName + ': ' + params.value.format2Str('#,##0.######') + ' 元';
  688. }
  689. <% } else { %>
  690. tooltip : {trigger: 'item',formatter: "{b} <br/>{a}:{c}元"},
  691. <% } %>
  692. },
  693. stack: '完成',
  694. data:[
  695. <% for (const s of stages) {%>
  696. <%- ctx.helper.add(s.contract_tp, s.qc_tp) %>,
  697. <% } %>
  698. ]
  699. },
  700. {
  701. name:'完成度',
  702. type:'line',
  703. tooltip : {trigger: 'axis',formatter: "{b}占总标段<br/>{a}:{c} %"},
  704. yAxisIndex: 1,
  705. data:[
  706. <% for (const s of stages) {%>
  707. <%- ctx.helper.mul(ctx.helper.div(ctx.helper.add(s.contract_tp, s.qc_tp), tender.sum, 2), 100) %>,
  708. <% } %>
  709. ]
  710. },
  711. ]
  712. };
  713. // 为echarts对象加载数据
  714. myChart.setOption(option);
  715. //4 标段期数计量进度//
  716. //3 标段月进度//
  717. // 基于准备好的dom,初始化echarts图表
  718. var myChart = echarts.init(document.getElementById('chartContainer3'), 'dark');
  719. var option = {
  720. color:["#17a2b8","#28a745"],
  721. backgroundColor: '#343a40 ',
  722. title : {
  723. text: '标段月进度'
  724. },
  725. tooltip : {
  726. trigger: 'axis',
  727. formatter: function (params, ticket, callback) {
  728. let sHint = '';
  729. for (const param of params) {
  730. if (sHint !== '') {
  731. sHint += '<br>';
  732. }
  733. if (sHint === '' && param.name !== '') {
  734. sHint = param.name + '<br>';
  735. }
  736. sHint += '<span style="display:inline-block;margin-right:5px;border-radius:10px;width:9px;height:9px;background-color:' + param.color +'"></span>';
  737. if (param.data) {
  738. sHint += param.seriesName + ': ' + param.data + ' %';
  739. } else {
  740. sHint += param.seriesName + ': -';
  741. }
  742. }
  743. return sHint;
  744. },
  745. },
  746. legend: {
  747. data:['累计完成','本月完成']
  748. },
  749. toolbox: {
  750. show : true,
  751. feature : {
  752. magicType : {show: true, type: ['line', 'bar']}
  753. }
  754. },
  755. dataZoom : {
  756. show : true,
  757. start : 50,
  758. end : 100
  759. },
  760. xAxis : [
  761. {
  762. type : 'category',
  763. boundaryGap : true,
  764. data : [
  765. <% for (const mp of monthProgress) { %>
  766. '<%- mp.month %>',
  767. <% } %>
  768. ]
  769. }
  770. ],
  771. yAxis : [
  772. {
  773. type : 'value',
  774. axisLabel : {
  775. formatter: '{value} %'
  776. },
  777. splitArea : {show : true}
  778. }
  779. ],
  780. series : [
  781. {
  782. name:'累计完成',
  783. type:'line',
  784. itemStyle: {
  785. normal: {
  786. lineStyle: {
  787. shadowColor : 'rgba(0,0,0,0.4)',
  788. shadowBlur: 5,
  789. shadowOffsetX: 3,
  790. shadowOffsetY: 3
  791. }
  792. }
  793. },
  794. data:[
  795. <% for (const mp of monthProgress) { %>
  796. <%- mp.end_ratio %>,
  797. <% } %>
  798. ]
  799. },
  800. {
  801. name:'本月完成',
  802. type:'line',
  803. itemStyle: {
  804. normal: {
  805. lineStyle: {
  806. shadowColor : 'rgba(0,0,0,0.4)',
  807. shadowBlur: 5,
  808. shadowOffsetX: 3,
  809. shadowOffsetY: 3
  810. }
  811. }
  812. },
  813. data:[
  814. <% for (const mp of monthProgress) { %>
  815. <%- mp.ratio %>,
  816. <% } %>
  817. ]
  818. }
  819. ]
  820. };
  821. // 为echarts对象加载数据
  822. myChart.setOption(option);
  823. //3 标段月进度//
  824. //变更审批进度//
  825. var myChart = echarts.init(document.getElementById('bgchart'), 'dark');
  826. var option = {
  827. color: ['#cf4058','#2ba850','#d7b014','#177ddc','#13a8a8',
  828. '#5470C6','#d38b70','#8fb7cf','#ffa500','#40e0d0',
  829. '#7b68ee','#1e90ff','#ff6347','#00fa9a','#ffd700',
  830. '#3cb371','#5c616b','#ff6666','#b8860b','#30e0e0'],
  831. backgroundColor: '#343a40 ',
  832. tooltip: {
  833. trigger: 'item'
  834. },
  835. legend: {
  836. top: '0%',
  837. right: 'right',
  838. orient:'vertical',
  839. data: ['一般变更', '较大变更', '重大变更', '待上报', '审批中', '已完成']
  840. },
  841. series: [
  842. {
  843. name: '数量',
  844. type: 'pie',
  845. top:'2%',
  846. right:'40%',
  847. selectedMode: 'single',
  848. radius: '50%',
  849. avoidLabelOverlap: false,
  850. label: {
  851. show:false,
  852. //position: 'inner',
  853. //fontSize: 14,
  854. },
  855. labelLine: {
  856. show: false
  857. },
  858. data: [
  859. <% for (const cs of change_status_total) { %>
  860. {value: <%- cs.num %>, name: '<%- cs.name %>'},
  861. <% } %>
  862. ]
  863. },
  864. {
  865. name: '数量',
  866. type: 'pie',
  867. top:'2%',
  868. right:'40%',
  869. radius: ['80%', '100%'],
  870. avoidLabelOverlap: false,
  871. label: {
  872. show: false,
  873. position: 'center'
  874. },
  875. emphasis: {
  876. label: {
  877. show: false,
  878. //fontSize: '14',
  879. //fontWeight: 'bold'
  880. }
  881. },
  882. labelLine: {
  883. //show: false,
  884. length: 20,
  885. },
  886. data: [
  887. <% for (const cq of change_quality_total) { %>
  888. {value: <%- cq.num %>, name: '<%- cq.name %>'},
  889. <% } %>
  890. ]
  891. }
  892. ]
  893. };
  894. // 为echarts对象加载数据
  895. myChart.setOption(option);
  896. </script>
  897. <script>
  898. const tenderId = parseInt('<%- tender.id %>');
  899. $(document).ready(function () {
  900. // 获取审批流程
  901. $('a[data-target="#sp-list" ]').on('click', function () {
  902. const type = $(this).attr('data-type');
  903. const data = {
  904. order: $(this).attr('data-order'),
  905. };
  906. let url = '';
  907. let auditConst = '';
  908. if (type === 'stage') {
  909. url = '/tender/' + tenderId + '/measure/stage/auditors';
  910. auditConst = JSON.parse('<%- JSON.stringify(audit.stage) %>');
  911. } else if (type === 'ledger') {
  912. url = '/tender/' + tenderId + '/measure/ledger/auditors';
  913. auditConst = JSON.parse('<%- JSON.stringify(audit.ledger) %>');
  914. } else if (type === 'material') {
  915. url = '/tender/' + tenderId + '/measure/material/auditors';
  916. auditConst = JSON.parse('<%- JSON.stringify(audit.material) %>');
  917. }
  918. postData(url, data, function (result) {
  919. const { auditHistory, auditors, user } = result
  920. let historyHTML = ''
  921. const leftAuditors = auditors;
  922. auditHistory.forEach((auditors, idx) => {
  923. if(idx === auditHistory.length - 1 && auditHistory.length !== 1) {
  924. historyHTML += `<div class="text-right"><a href="javascript: void(0);" id="fold-btn" data-target="show"
  925. >展开历史审批流程</a></div>`
  926. }
  927. historyHTML += `<div class="${idx < auditHistory.length - 1 ? 'fold-card' : ''}">
  928. <div class="text-center text-muted">${idx + 1}#</div>
  929. <ul class="timeline-list list-unstyled mt-2">`
  930. auditors.forEach((auditor, index) => {
  931. if (index === 0) {
  932. historyHTML += `<li class="timeline-list-item pb-2">
  933. <div class="timeline-item-date">
  934. ${formatDate(auditor.begin_time)}
  935. </div>
  936. <div class="timeline-item-tail"></div>
  937. <div class="timeline-item-icon bg-success text-light">
  938. <i class="fa fa-caret-down"></i>
  939. </div>
  940. <div class="timeline-item-content">
  941. <div class="card bg-dark border-secondary text-white">
  942. <div class="card-body p-3">
  943. <div class="card-text">
  944. <p class="mb-1"><span
  945. class="h5">${user.name}</span><span
  946. class="pull-right text-success">${idx !== 0 ? '重新' : ''}上报审批</span>
  947. </p>
  948. <p class="text-muted mb-0">${user.role}</p>
  949. </div>
  950. </div>
  951. </div>
  952. </div>
  953. </li>
  954. <li class="timeline-list-item pb-2">
  955. <div class="timeline-item-date">
  956. ${formatDate(auditor.end_time)}
  957. </div>`
  958. if(index < auditors.length - 1) {
  959. historyHTML += `<div class="timeline-item-tail"></div>`
  960. }
  961. if(auditor.status === auditConst.status.checked) {
  962. historyHTML += `<div class="timeline-item-icon bg-success text-light">
  963. <i class="fa fa-check"></i>
  964. </div>`
  965. } else if(auditor.status === auditConst.status.checkNo || auditor.status === auditConst.status.checkNoPre) {
  966. historyHTML += `<div class="timeline-item-icon bg-warning text-light">
  967. <i class="fa fa-level-up"></i>
  968. </div>`
  969. } else if(auditor.status === auditConst.status.checking) {
  970. historyHTML += `<div class="timeline-item-icon bg-warning text-light">
  971. <i class="fa fa-ellipsis-h"></i>
  972. </div>`
  973. } else {
  974. historyHTML += `<div class="timeline-item-icon bg-secondary text-light"></div>`
  975. }
  976. historyHTML += `<div class="timeline-item-content">
  977. <div class="card bg-dark border-secondary text-white">
  978. <div class="card-body p-3">
  979. <div class="card-text">
  980. <p class="mb-1"><span class="h5">${auditor.name}</span><span
  981. class="pull-right ${auditConst.statusClass[auditor.status]}">${auditConst.statusString[auditor.status]}</span>
  982. </p>
  983. <p class="text-muted mb-0">${auditor.role}</p>
  984. </div>
  985. </div>`
  986. if (auditor.opinion) {
  987. historyHTML += `<div class="card-body p-3 border-top">
  988. <p style="margin: 0;">${auditor.opinion}</p>
  989. </div>`
  990. }
  991. historyHTML += `</div></div></li>`
  992. } else {
  993. historyHTML += `<li class="timeline-list-item pb-2">
  994. <div class="timeline-item-date">
  995. ${formatDate(auditor.end_time)}
  996. </div>`
  997. if(index < auditors.length - 1) {
  998. historyHTML += `<div class="timeline-item-tail"></div>`
  999. }
  1000. if(auditor.status === auditConst.status.checked) {
  1001. historyHTML += `<div class="timeline-item-icon bg-success text-light">
  1002. <i class="fa fa-check"></i>
  1003. </div>`
  1004. } else if(auditor.status === auditConst.status.checkNo || auditor.status === auditConst.status.checkNoPre) {
  1005. historyHTML += `<div class="timeline-item-icon bg-warning text-light">
  1006. <i class="fa fa-level-up"></i>
  1007. </div>`
  1008. } else if(auditor.status === auditConst.status.checking) {
  1009. historyHTML += `<div class="timeline-item-icon bg-warning text-light">
  1010. <i class="fa fa-ellipsis-h"></i>
  1011. </div>`
  1012. } else {
  1013. historyHTML += `<div class="timeline-item-icon bg-secondary text-light"></div>`
  1014. }
  1015. historyHTML += `<div class="timeline-item-content">
  1016. <div class="card bg-dark border-secondary text-white">
  1017. <div class="card-body p-3">
  1018. <div class="card-text">
  1019. <p class="mb-1"><span class="h5">${auditor.name}</span>
  1020. <span
  1021. class="pull-right
  1022. ${auditConst.statusClass[auditor.status]}">${auditor.status !== auditConst.status.uncheck ? auditConst.statusString[auditor.status] : ''}
  1023. ${auditor.status === auditConst.status.checkNo ? user.name : ''}
  1024. ${auditor.status === auditConst.status.checkNoPre ? (leftAuditors.find(item => item.order === auditor.sort-1) ? leftAuditors.find(item => item.order === auditor.sort-1).name : '') : ''}
  1025. </span>
  1026. </p>
  1027. <p class="text-muted mb-0">${auditor.role}</p>
  1028. </div>
  1029. </div>`
  1030. if (auditor.opinion) {
  1031. historyHTML += `<div class="card-body p-3 border-top">
  1032. <p style="margin: 0;">${auditor.opinion} </p>
  1033. </div>`
  1034. }
  1035. historyHTML += `</div></div></li>`
  1036. }
  1037. })
  1038. historyHTML += '</ul></div>'
  1039. })
  1040. $('#audit-list').empty()
  1041. $('#audit-list').append(historyHTML)
  1042. });
  1043. });
  1044. // 展开/收起历史审核记录
  1045. $('#audit-list').on('click', 'a', function() {
  1046. const type = $(this).data('target')
  1047. const auditCard = $(this).parent().parent()
  1048. console.log('auditCard', auditCard)
  1049. if (type === 'show') {
  1050. $(this).data('target', 'hide')
  1051. auditCard.find('.fold-card').slideDown('swing', () => {
  1052. auditCard.find('#end-target').text($(this).data('idx') + '#')
  1053. auditCard.find('#fold-btn').text('收起历史审核记录')
  1054. })
  1055. } else {
  1056. $(this).data('target', 'show')
  1057. auditCard.find('.fold-card').slideUp('swing', () => {
  1058. auditCard.find('#end-target').text('1#')
  1059. auditCard.find('#fold-btn').text('展开历史审核记录')
  1060. })
  1061. }
  1062. });
  1063. function formatDate(date) {
  1064. if (!date) return '';
  1065. date = new Date(date)
  1066. const year = date.getFullYear();
  1067. let mon = date.getMonth() + 1;
  1068. let day = date.getDate();
  1069. let hour = date.getHours();
  1070. let minute = date.getMinutes();
  1071. let scond = date.getSeconds();
  1072. if (mon < 10) {
  1073. mon = '0' + mon.toString();
  1074. }
  1075. if (day < 10) {
  1076. day = '0' + day.toString();
  1077. }
  1078. if (hour < 10) {
  1079. hour = '0' + hour.toString();
  1080. }
  1081. if (minute < 10) {
  1082. minute = '0' + minute.toString();
  1083. }
  1084. if (scond < 10) {
  1085. scond = '0' + scond.toString();
  1086. }
  1087. return `${year}<span class="text-light">${mon}-${day}</span><span class="text-light">${hour}:${minute}:${scond}</span>`;
  1088. };
  1089. })
  1090. </script>
  1091. <% if (hadMap) { %>
  1092. <script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=C3hLZAjuWTaCdwnwoYY83APrwlPEj4v7"></script>
  1093. <script type="text/javascript">
  1094. var map = new BMapGL.Map("map");
  1095. // 创建地图实例
  1096. var point = new BMapGL.Point(116.404, 39.915);
  1097. // 创建点坐标
  1098. map.centerAndZoom(point, 14);
  1099. map.enableScrollWheelZoom(true);
  1100. // 初始化地图,设置中心点坐标和地图级别
  1101. var polyline = new BMapGL.Polyline([
  1102. new BMapGL.Point(116.399, 39.910),
  1103. new BMapGL.Point(116.405, 39.920),
  1104. // new BMapGL.Point(116.425, 39.900)
  1105. ], {strokeColor:"red", strokeWeight:5, strokeOpacity:1});
  1106. map.addOverlay(polyline);
  1107. </script>
  1108. <% } %>