detail.ejs 82 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509
  1. <link href="/public/css/bootstrap/bootstrap-colorpicker.min.css" rel="stylesheet">
  2. <% include ./tender_sub_menu.ejs %>
  3. <div class="panel-content">
  4. <div class="panel-title">
  5. <div class="title-main d-flex">
  6. <% include ./tender_sub_mini_menu.ejs %>
  7. <% if (tender.ledger_status !== audit.ledger.status.uncheck) { %>
  8. <h2>进行至
  9. <% if (lastStage) { %>
  10. 第<%- lastStage.order %>期<small class="<%- audit.stage.statusClass[lastStage.status] %>">(<%- audit.stage.statusString[lastStage.status] %>)</small>
  11. <% } else { %>
  12. 台账<small class="<%- audit.ledger.auditStringClass[tender.ledger_status] %>">(<%- audit.ledger.auditString[tender.ledger_status] %>)</small>
  13. <% } %>
  14. </h2>
  15. <% } %>
  16. <% if (cooperation) { %>
  17. <div>
  18. <a href="/tender/<%= tender.id %>/cooperation" class="btn btn-sm btn-light" ><i class="fa fa-users"></i> 协作办公</a>
  19. </div>
  20. <% } %>
  21. <div class="ml-auto">
  22. <a href="javascript:void(0)" title="全屏显示" id="showFull" style="font-size: 16px" class="float-left text-dark mr-3"><i class="fa fa-arrows-alt"></i></a>
  23. <div class="dropdown d-flex float-left mt-1 mr-2">
  24. <!--<button id="showFull" class="btn btn-sm btn-outline-dark mr-2">全屏</button>-->
  25. <a class="btn btn-sm btn-outline-dark dropdown-toggle dropdown-wd" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  26. 标段
  27. </a>
  28. <div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
  29. <a href="#bd-set-1" data-toggle="modal" data-target="#bd-set-1" class="dropdown-item" >标段属性</a>
  30. <a href="#bd-set-2" data-toggle="modal" data-target="#bd-set-2" class="dropdown-item" >小数位数</a>
  31. <a href="#bd-set-3" data-toggle="modal" data-target="#bd-set-3" class="dropdown-item" >数量精度</a>
  32. <a href="#bd-set-4" data-toggle="modal" data-target="#bd-set-4" class="dropdown-item" >合同参数</a>
  33. <a href="#bd-set-5" data-toggle="modal" data-target="#bd-set-5" class="dropdown-item" >显示设置</a>
  34. <a href="#bd-set-6" data-toggle="modal" data-target="#bd-set-6" class="dropdown-item" >章节设置</a>
  35. <a href="#bd-set-7" data-toggle="modal" data-target="#bd-set-7" class="dropdown-item" >付款账号</a>
  36. <a class="dropdown-item" href="javascript: void(0);" id="copyBtn">拷贝设置</a>
  37. </div>
  38. </div>
  39. <% if (ctx.session.sessionUser.is_admin) { %>
  40. <div class="dropdown d-flex mt-1">
  41. <a class="btn btn-sm btn-outline-dark dropdown-toggle dropdown-wd" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  42. 管理员
  43. </a>
  44. <div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
  45. <% if (ctx.session.sessionProject.page_show !== null && parseInt(ctx.session.sessionProject.page_show.xxjd) === 1) { %>
  46. <a href="#xxjd-set" data-toggle="modal" data-target="#xxjd-set" class="dropdown-item">投资进度</a>
  47. <% } %>
  48. <a href="/tender/<%- tender.id %>/shenpi" class="dropdown-item">审批流程</a>
  49. <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>
  50. <a href="#bd-set-10" data-toggle="modal" data-target="#bd-set-10" class="dropdown-item">上报控制</a>
  51. <a href="#bd-set-12" data-toggle="modal" data-target="#bd-set-12" class="dropdown-item">功能设置</a>
  52. <a href="#bd-set-11" data-toggle="modal" data-target="#bd-set-11" class="dropdown-item">概况设置</a>
  53. </div>
  54. </div>
  55. <% } %>
  56. </div>
  57. </div>
  58. </div>
  59. <div class="content-wrap" id="big-data">
  60. <div style="height: 70px;display: none;<% if (ctx.tender.info.display.dayMode) { %> background-color: #fff;<% } else { %> background-color: #2c3237 !important;<% } %>" id="exitfull-div">
  61. <div class="title-main d-flex">
  62. <div class="ml-auto">
  63. <div class="dropdown d-flex float-left mt-1 mr-2">
  64. <button id="exitFull" class="btn btn-sm btn-secondary ml-auto">退出全屏</button>
  65. </div>
  66. </div>
  67. </div>
  68. </div>
  69. <div class="c-body <% if (ctx.tender.info.display.dayMode) { %>c-body-white<% } %>" <% if (!ctx.tender.info.display.dayMode) { %>style="background-color: #2c3237 !important;"<% } %>>
  70. <div class="sjs-height-0">
  71. <!--<div class="auto-main-height">-->
  72. <div class="main-height-one">
  73. <div class="m-3">
  74. <!--金额概况-->
  75. <div class="row ml-1 mb-3">
  76. <div class="col-12">
  77. <div class="row">
  78. <div class="col-auto pl-0">
  79. <div class="card text-center <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
  80. <div class="card-body">
  81. <h5 class="card-title card-big-title"><%- ctx.helper.formatMoney(tender.total_price) %></h5>
  82. <p class="card-text text-muted">0号台账合同</p>
  83. </div>
  84. </div>
  85. </div>
  86. <style>
  87. .tooltip-inner {
  88. max-width: 400px;
  89. text-align: left;
  90. }
  91. </style>
  92. <div class="col-auto pl-0">
  93. <div class="card text-center <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
  94. <div class="card-body" data-toggle="tooltip" data-placement="bottom" data-html="true" data-original-title="<p style='text-align:left;'>批复正变更:<%- ctx.helper.formatMoney(tender.change_p_tp) %></p>批复负变更:<%- ctx.helper.formatMoney(tender.change_n_tp) %>">
  95. <h5 class="card-title card-big-title"><%- ctx.helper.formatMoney(tender.change_tp) %></h5>
  96. <p class="card-text text-muted">已批复变更金额</p>
  97. </div>
  98. </div>
  99. </div>
  100. <div class="col-auto pl-0">
  101. <div class="card text-center <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
  102. <div class="card-body">
  103. <h5 class="card-title card-big-title"><%- ctx.helper.formatMoney(tender.sum) %></h5>
  104. <p class="card-text text-muted">变更后金额</p>
  105. </div>
  106. </div>
  107. </div>
  108. <div class="col-auto pl-0">
  109. <div class="card text-center <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
  110. <div class="card-body" data-toggle="tooltip" data-placement="bottom" data-html="true" data-original-title="<p>截止本期正变更:<%- ctx.helper.formatMoney(tender.end_positive_qc_tp) %></p>截止本期负变更:<%- ctx.helper.formatMoney(tender.end_negative_qc_tp) %>">
  111. <h5 class="card-title card-big-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>
  112. <p class="card-text text-muted">截止本期变更</p>
  113. </div>
  114. </div>
  115. </div>
  116. <div class="col-auto pl-0">
  117. <div class="card text-center <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
  118. <div class="card-body">
  119. <h5 class="card-title card-big-title"><%- ctx.helper.formatMoney(tender.gather_tp) %></h5>
  120. <p class="card-text text-muted">本期完成</p>
  121. </div>
  122. </div>
  123. </div>
  124. <div class="col-auto pl-0">
  125. <div class="card text-center <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
  126. <div class="card-body">
  127. <h5 class="card-title card-big-title"><%- ctx.helper.formatMoney(tender.end_gather_tp) %></h5>
  128. <p class="card-text text-muted">截止本期完成</p>
  129. </div>
  130. </div>
  131. </div>
  132. <!--<div class="col-auto pl-0">-->
  133. <!--<div class="card text-center <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">-->
  134. <!--<div class="card-body">-->
  135. <!--<h5 class="card-title card-big-title"><%- ctx.helper.formatMoney(tender.pre_gather_tp) %></h5>-->
  136. <!--<p class="card-text text-muted">截止上期完成</p>-->
  137. <!--</div>-->
  138. <!--</div>-->
  139. <!--</div>-->
  140. <div class="col-auto pl-0">
  141. <div class="card text-center <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
  142. <div class="card-body">
  143. <h5 class="card-title card-big-title"><%- ctx.helper.formatMoney(tender.yf_tp) %></h5>
  144. <p class="card-text text-muted">本期应付</p>
  145. </div>
  146. </div>
  147. </div>
  148. <div class="col-auto pl-0">
  149. <div class="card text-center <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
  150. <div class="card-body">
  151. <h5 class="card-title card-big-title"><%- ctx.helper.formatMoney(tender.end_positive_qc_tp) %></h5>
  152. <p class="card-text text-muted">截止本期正变更</p>
  153. </div>
  154. </div>
  155. </div>
  156. <div class="col-auto pl-0">
  157. <div class="card text-center <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
  158. <div class="card-body">
  159. <h5 class="card-title card-big-title"><%- ctx.helper.formatMoney(tender.end_negative_qc_tp) %></h5>
  160. <p class="card-text text-muted">截止本期负变更</p>
  161. </div>
  162. </div>
  163. </div>
  164. </div>
  165. </div>
  166. </div>
  167. <!--进度条-->
  168. <div class="">
  169. <div class="progress">
  170. <% if (tender.pre_ratio > 0) { %>
  171. <div class="progress-bar bg-success bg-green" 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>
  172. <% } %>
  173. <% if (tender.cur_ratio > 0) { %>
  174. <div class="progress-bar bg-info bg-blue" style="width: <%- tender.cur_ratio %>%;" data-placement="bottom" data-toggle="tooltip" data-original-title="本期完成:¥<%- ctx.helper.formatMoney(tender.gather_tp) %>"><%- tender.cur_ratio %>%</div>
  175. <% } %>
  176. <% if (tender.other_ratio > 0) { %>
  177. <div class="progress-bar bg-danger bg-red" style="width: <%- tender.other_ratio %>%;" data-placement="bottom" data-toggle="tooltip" data-original-title="未完成:¥<%- ctx.helper.formatMoney(tender.other_tp) %>"><%- tender.other_ratio %>%</div>
  178. <% } %>
  179. </div>
  180. </div>
  181. </div>
  182. </div>
  183. <!--图表1-->
  184. <div class="main-height-two">
  185. <div class="m-3">
  186. <div class="row">
  187. <div class="col-3">
  188. <!--计量完成概况-->
  189. <div class="card mb-3 <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
  190. <div class="card-header"><h6 class="mb-0">计量完成概况</h6></div>
  191. <div class="card-body">
  192. <div id="jlchart1" style="height: 100%; width: 100%;">
  193. </div>
  194. </div>
  195. </div>
  196. <!--支付情况-->
  197. <div class="card mb-3 <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
  198. <div class="card-header"><h6 class="mb-0">支付情况</h6></div>
  199. <div class="card-body">
  200. <div id="jlchart2" style="height: 100%; width: 100%;">
  201. </div>
  202. </div>
  203. </div>
  204. </div>
  205. <!--章节计量情况图-->
  206. <div class="col-6 pl-0">
  207. <div class="card mb-3 <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
  208. <% if (hadMap === 1) { %>
  209. <div class="card-body" id="map" style="height: 388px; width: 100%;"></div>
  210. <% } else if (hadMap === 2) { %>
  211. <div style="position:relative;height: 388px; width: 100%;">
  212. <% if (map_pic) { %>
  213. <% if (!ctx.tender.info.display.dayMode) { %>
  214. <div style="position:absolute;top:0;left:0;width:100%;height: 388px;background-color: rgba(44, 50, 55, 0.2);z-index: 10"></div>
  215. <% } %>
  216. <img style="display:block;width:100%;height: 388px;margin:0 auto;" src="<%- fujianOssPath + map_pic %>">
  217. <% } else { %>
  218. <div class="p-5 text-center text-muted">
  219. <img src="/public/images/nulllogo.png" />
  220. <div class="pt-3">请上传你的静态图片</div>
  221. </div>
  222. <% } %>
  223. </div>
  224. <% } else { %>
  225. <div class="card-header"><h6 class="mb-0">章节计量情况图</h6></div>
  226. <div class="card-body">
  227. <div id="jlchart3" style="height: 304px; width: 100%;">
  228. </div>
  229. </div>
  230. <% } %>
  231. </div>
  232. </div>
  233. <div class="col-3 pl-0">
  234. <!--台账审批进度-->
  235. <div class="card mb-3 <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
  236. <div class="card-header"><h6 class="mb-0"><% if (lastStage) { %>计量审批进度<% } else { %>台账审批进度<% } %></h6></div>
  237. <div class="card-body">
  238. <div style="">
  239. <div class="btn-group btn-group-sm btn-block my-1">
  240. <% if (lastStage) { %>
  241. <% if (lastStage.auditors && lastStage.auditors.length > 0) { %>
  242. <% for (const [i,sa] of lastStage.auditors.entries()) { %>
  243. <button class="btn <% if (sa.status === audit.stage.status.checked) { %>btn-green<% } else if (sa.status === audit.stage.status.checking) { %>btn-yellow<% } else if (sa.status === audit.stage.status.checkNo) { %>btn-red<% } else { %>btn-blueOne<% } %><% if (i+1 !== lastStage.auditors.length) { %> btn-relative<% } %>" data-toggle="tooltip"
  244. 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') %><% } %>">
  245. <% if (lastStage.auditors.length > 1 && i !== 0) { %><i class="fa <% if (lastStage.auditors[i-1].status === audit.stage.status.checked) { %>text-green<% } else if (lastStage.auditors[i-1].status === audit.stage.status.checking) { %>text-yellow<% } else if (lastStage.auditors[i-1].status === audit.stage.status.checkNo) { %>text-red<% } else { %>text-blueOne<% } %> fa-caret-right icon-absolute icon-size"></i><% } %><%- (i+1) %></button>
  246. <% } %>
  247. <% } else { %>
  248. <button class="btn btn-secondary" data-toggle="tooltip" data-placement="top" data-original-title="">&nbsp;</button>
  249. <% } %>
  250. <% } else { %>
  251. <%if (tender.auditors && tender.auditors.length > 0) { %>
  252. <% for (const [i, la] of tender.auditors.entries()) { %>
  253. <button class="btn <% if (la.status === audit.ledger.status.checked) { %>btn-green<% } else if (la.status === audit.ledger.status.checking) { %>btn-yellow<% } else if (la.status === audit.ledger.status.checkNo) { %>btn-red<% } else { %>btn-blueOne<% } %><% if (i+1 !== tender.auditors.length) { %> btn-relative<% } %>" data-toggle="tooltip"
  254. 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') %><% } %>">
  255. <% if (tender.auditors.length > 1 && i !== 0) { %><i class="fa <% if (tender.auditors[i-1].status === audit.ledger.status.checked) { %>text-green<% } else if (tender.auditors[i-1].status === audit.ledger.status.checking) { %>text-yellow<% } else if (tender.auditors[i-1].status === audit.ledger.status.checkNo) { %>text-red<% } else { %>text-blueOne<% } %> fa-caret-right icon-absolute icon-size"></i><% } %><%- (i+1) %></button>
  256. <% } %>
  257. <% } else { %>
  258. <button class="btn btn-secondary" data-toggle="tooltip" data-placement="top" data-original-title="">&nbsp;</button>
  259. <% } %>
  260. <% } %>
  261. </div>
  262. <div class="row">
  263. <div class="col-2">
  264. </div>
  265. <div class="col-8 text-center">
  266. <% if (lastStage) { %>
  267. 第<%- lastStage.order %>期
  268. <% if (lastStage.status === audit.stage.status.uncheck) { %>
  269. <span class="text-info"><%- lastStage.status_users %></span>
  270. <% } else { %>
  271. <a href="#sp-list" data-toggle="modal" data-target="#sp-list" data-type="stage" data-order="<%- lastStage.order %>"><%- lastStage.status_users %></a>
  272. <% } %>
  273. <span class="<%- audit.stage.statusClass[lastStage.status] %>"><%- audit.stage.statusString[lastStage.status] %></span>
  274. <% } else { %>
  275. <% if (tender.ledger_status === audit.ledger.status.uncheck) { %>
  276. <span class="text-info"><%- tender.status_users %></span> <span>待上报</span>
  277. <% } else { %>
  278. <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>
  279. <% } %>
  280. <% } %>
  281. </div>
  282. </div>
  283. <div class="row mt-1 border-top border-secondary pt-1 mt-2">
  284. <% if (lastStage) { %>
  285. <div class="col-7 mb-1">
  286. 本期合同计量金额:
  287. </div>
  288. <div class="col-5 text-right mb-1">
  289. <%- lastStage.contract_tp %>
  290. </div>
  291. <div class="col-7">
  292. 本期变更计量金额:
  293. </div>
  294. <div class="col-5 text-right">
  295. <%- lastStage.qc_tp %>
  296. </div>
  297. <% } else { %>
  298. <div class="col-7 mb-1">
  299. &nbsp;
  300. </div>
  301. <div class="col-5 text-right mb-1">
  302. &nbsp;
  303. </div>
  304. <div class="col-7">
  305. &nbsp;
  306. </div>
  307. <div class="col-5 text-right">
  308. &nbsp;
  309. </div>
  310. <% } %>
  311. </div>
  312. </div>
  313. </div>
  314. </div>
  315. <div class="card mb-3 <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
  316. <div class="card-header">
  317. <ul class="nav nav-tabs card-header-tabs panel-card-tabs <% if (ctx.tender.info.display.dayMode) { %>nav-white-tabs<% } %>">
  318. <li class="nav-item">
  319. <a class="nav-link active" data-toggle="tab" href="#taizhangshenpi" role="tab" aria-selected="true">工程变更进度</a>
  320. </li>
  321. <li class="nav-item">
  322. <a class="nav-link" data-toggle="tab" href="#taizhangxiuding" role="tab" aria-selected="true">材料调差进度</a>
  323. </li>
  324. </ul>
  325. </div>
  326. <div class="card-body">
  327. <div class="tab-content">
  328. <div class="tab-pane active" id="taizhangshenpi">
  329. <div id="bgchart" style="height: 100%; width: 100%;"></div>
  330. </div>
  331. <div class="tab-pane" id="taizhangxiuding" >
  332. <div class="card-body p-0">
  333. <div>
  334. <div class="btn-group btn-group-sm btn-block">
  335. <% if (materialData && materialData.auditors.length > 0) { %>
  336. <% for (const [i, ma] of materialData.auditors.entries()) { %>
  337. <button class="btn <% if (ma.status === audit.material.status.checked) { %>btn-green<% } else if (ma.status === audit.material.status.checking) { %>btn-yellow<% } else if(ma.status === audit.material.status.checkNo) { %>btn-red<% } else { %>btn-blueOne<% } %><% if (i+1 !== materialData.auditors.length) { %> btn-relative<% } %>" data-toggle="tooltip"
  338. 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') %><% } %>">
  339. <% if (materialData.auditors.length > 1 && i !== 0) { %><i class="fa <% if (materialData.auditors[i-1].status === audit.material.status.checked) { %>text-green<% } else if (materialData.auditors[i-1].status === audit.material.status.checking) { %>text-yellow<% } else if (materialData.auditors[i-1].status === audit.material.status.checkNo) { %>text-red<% } else { %>text-blueOne<% } %> fa-caret-right icon-absolute icon-size"></i><% } %><%- (i+1) %></button>
  340. <% } %>
  341. <% } else { %>
  342. <button class="btn btn-secondary" data-toggle="tooltip" data-placement="top" data-original-title="">&nbsp;</button>
  343. <% } %>
  344. <!--<button class="btn btn-warning" data-toggle="tooltip" data-placement="top" data-original-title="温仁书 审批中">2</button>-->
  345. <!--<button class="btn btn-info" data-toggle="tooltip" data-placement="top" data-original-title="玉安然">3</button>-->
  346. </div>
  347. <div class="row">
  348. <div class="col-2">
  349. </div>
  350. <div class="col-8 text-center">
  351. 第 <%- (materialData ? materialData.order : '0') %> 期
  352. <% if (materialData) { %>
  353. <% if (materialData.curAuditor) { %>
  354. <a href="#sp-list" data-toggle="modal" data-target="#sp-list" data-type="material" data-order="<%- materialData.order %>"><%- materialData.curAuditor.name %></a>
  355. <% } %>
  356. <span class="<%- audit.material.auditProgressClass[materialData.status] %>"><%- audit.material.auditProgress[materialData.status] %></span>
  357. <% } %>
  358. </div>
  359. </div>
  360. <table class="table table-bordered table-2sm mb-0 mt-1 <% if (!ctx.tender.info.display.dayMode) { %>table-dark<% } %>">
  361. <% if (materialData) { %>
  362. <tr><th width="60%">含税(信息价/指数法)</th><td width="20%"><%= materialData.m_tp !== null ? ctx.helper.round(ctx.helper.mul(materialData.m_tp, 1+materialData.rate/100), 2) : '0' %></td><td width="20%"><%= materialData.ex_tp !== null ? ctx.helper.round(ctx.helper.mul(materialData.ex_tp, 1+materialData.rate/100), 2) : '0' %></td></tr>
  363. <tr><th>不含税(信息价/指数法)</th><td><%= materialData.m_tp !== null ? ctx.helper.round(materialData.m_tp, 2) : '0' %></td><td><%= materialData.ex_tp !== null ? ctx.helper.round(materialData.ex_tp, 2) : '0' %></td></tr>
  364. <% } else { %>
  365. <tr><th width="60%">含税(信息价/指数法)</th><td width="20%">0</td><td width="20%">0</td></tr>
  366. <tr><th>不含税(信息价/指数法)</th><td>0</td><td>0</td></tr>
  367. <% } %>
  368. </table>
  369. </div>
  370. </div>
  371. </div>
  372. </div>
  373. </div>
  374. </div>
  375. </div>
  376. <!--期进度表-->
  377. <div class="col-6">
  378. <div class="card mb-3 <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %> bottom-height">
  379. <% if (hadMap === 1 || hadMap === 2) { %>
  380. <div class="card-header"><h6 class="mb-0">章节计量情况表</h6></div>
  381. <div class="card-body">
  382. <div id="jlchart3" style="height: 300px; width: 100%;"></div>
  383. </div>
  384. <% } else { %>
  385. <div class="card-header"><h6 class="mb-0">期进度表</h6></div>
  386. <div class="card-body">
  387. <div id="chartContainer4" style="height: 300px; width: 100%;"></div>
  388. </div>
  389. <% } %>
  390. </div>
  391. </div>
  392. <!--月进度表-->
  393. <div class="col-6 pl-0">
  394. <div class="card mb-3 bottom-height <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
  395. <% if (hadMap === 1 || hadMap === 2) { %>
  396. <div class="card-header">
  397. <ul class="nav nav-tabs card-header-tabs panel-card-tabs <% if (ctx.tender.info.display.dayMode) { %>nav-white-tabs<% } %>" id="change-echarts">
  398. <li class="nav-item">
  399. <a class="nav-link active" data-toggle="tab" href="#qijindubiao" role="tab" aria-selected="true">期进度表</a>
  400. </li>
  401. <li class="nav-item">
  402. <a class="nav-link" data-toggle="tab" href="#yuejindbiao" role="tab" aria-selected="true">月进度表</a>
  403. </li>
  404. </ul>
  405. </div>
  406. <div class="card-body">
  407. <div class="tab-content">
  408. <div class="tab-pane active" id="qijindubiao">
  409. <div id="chartContainer4" class="bottom-height-two" style="width: 100%;"></div>
  410. </div>
  411. <div class="tab-pane" id="yuejindbiao" >
  412. <div id="chartContainer3" class="bottom-height-two" style="width: 100%;"></div>
  413. </div>
  414. </div>
  415. </div>
  416. <% } else { %>
  417. <div class="card-header"><h6 class="mb-0">月进度表</h6></div>
  418. <div class="card-body">
  419. <div id="chartContainer3" style="height: 300px; width: 100%;"></div>
  420. </div>
  421. <% } %>
  422. </div>
  423. </div>
  424. </div>
  425. </div>
  426. </div>
  427. </div>
  428. </div>
  429. </div>
  430. </div>
  431. </div>
  432. <script type="text/javascript">
  433. const tenders = JSON.parse(unescape('<%- escape(JSON.stringify(tenders)) %>'));
  434. const category = JSON.parse(unescape('<%- escape(JSON.stringify(categoryData)) %>'));
  435. const tender = JSON.parse('<%- JSON.stringify(tender) %>');
  436. const cur_uid = parseInt('<%- ctx.session.sessionUser.accountId %>');
  437. const dayMode = <%- ctx.tender.info.display.dayMode %>;
  438. //计量完成概况//
  439. var myChart = echarts.init(document.getElementById('jlchart1')<% if (!ctx.tender.info.display.dayMode) { %>, 'dark'<% } %>);
  440. var option = {
  441. <% if (ctx.tender.info.display.dayMode) { %>
  442. color: ['#e9af68','#57b7b6','#e4575a','#959eac','#6699FF',
  443. '#d38b70','#8fb7cf','#cd5c5c','#ffa500','#40e0d0',
  444. '#1e90ff','#ff6347','#7b68ee','#00fa9a','#ffd700',
  445. '#5c616b','#ff6666','#3cb371','#b8860b','#30e0e0'],
  446. <% } else { %>
  447. color: ['rgba(24,144,255,0.7)','rgba(69,183,149,0.7)','rgba(250,204,20,0.7)','rgba(145,82,225,0.7)','rgba(58,207,221,0.7)','rgba(204,73,80,0.7)','rgba(255,255,225,0.7)'],
  448. backgroundColor: '#343a40 ',
  449. <% } %>
  450. tooltip: {
  451. trigger: 'item'
  452. },
  453. legend: {
  454. top: '0%',
  455. left: '0%',
  456. orient:'vertical'
  457. },
  458. series: [
  459. {
  460. name: '金额',
  461. type: 'pie',
  462. top:'0%',
  463. left:'50%',
  464. radius: ['100%'],
  465. avoidLabelOverlap: false,
  466. label: {
  467. show: false,
  468. position: 'right'
  469. },
  470. emphasis: {
  471. label: {
  472. show: true,
  473. fontSize: '20',
  474. fontWeight: 'bold'
  475. }
  476. },
  477. labelLine: {
  478. show: false
  479. },
  480. data: [
  481. <% for (const s of stage_total) { %>
  482. {value: <%- s.num %>, name: '<%- s.name %>'},
  483. <% } %>
  484. ]
  485. }
  486. ]
  487. };
  488. // 为echarts对象加载数据
  489. myChart.setOption(option);
  490. //计量完成概况 结束//
  491. //计量支付概况//
  492. var myChart1 = echarts.init(document.getElementById('jlchart2')<% if (!ctx.tender.info.display.dayMode) { %>, 'dark'<% } %>);
  493. var option1 = {
  494. <% if (!ctx.tender.info.display.dayMode) { %>backgroundColor: '#343a40 ',<% } %>
  495. tooltip: {
  496. trigger: 'axis',
  497. axisPointer: {
  498. type: 'shadow'
  499. }
  500. },
  501. grid: {
  502. left: '3%',
  503. right: '18%',
  504. top:'5%',
  505. bottom: '0%',
  506. containLabel: true
  507. },
  508. yAxis: {
  509. type: 'category',
  510. data: ['总价', '截止应付', '截止实付']
  511. },
  512. xAxis: {
  513. type: 'value',
  514. name : '金额',
  515. position:'left',
  516. axisLabel : {
  517. interval: 0,//横轴信息全部显示
  518. rotate: 35,// 倾斜角度
  519. formatter: function (value, index) {
  520. if (value < 0) {
  521. let newValue = Math.abs(value);
  522. if (newValue >= 10000 && newValue < 10000000) {
  523. newValue = newValue / 10000 + "万";
  524. } else if (newValue >= 10000000) {
  525. newValue = newValue / 10000000 + "千万";
  526. }
  527. value = '-' + newValue;
  528. }
  529. if (value >= 10000 && value < 10000000) {
  530. value = value / 10000 + "万";
  531. } else if (value >= 10000000) {
  532. value = value / 10000000 + "千万";
  533. }
  534. return value;
  535. }
  536. },
  537. splitArea : {show : true}
  538. },
  539. series: [{
  540. 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 %>,],
  541. type: 'bar',
  542. itemStyle:{
  543. normal:{
  544. color:function(params){
  545. <% if (ctx.tender.info.display.dayMode) { %>
  546. var colorlist = ['#e9af68','#57b7b6','#e4575a','#959eac','#6699FF',
  547. '#d38b70','#8fb7cf','#cd5c5c','#ffa500','#40e0d0',
  548. '#1e90ff','#ff6347','#7b68ee','#00fa9a','#ffd700',
  549. '#5c616b','#ff6666','#3cb371','#b8860b','#30e0e0'];
  550. <% } else { %>
  551. var colorlist = ['rgba(24,144,255,0.7)','rgba(69,183,149,0.7)','rgba(250,204,20,0.7)','rgba(145,82,225,0.7)','rgba(58,207,221,0.7)','rgba(204,73,80,0.7)','rgba(255,255,225,0.7)'];
  552. <% } %>
  553. return colorlist[params.dataIndex];
  554. }
  555. }
  556. }
  557. }]
  558. };
  559. // 为echarts对象加载数据
  560. myChart1.setOption(option1);
  561. //计量支付概况 结束//
  562. //章节计量情况图//
  563. var myChart2 = echarts.init(document.getElementById('jlchart3')<% if (!ctx.tender.info.display.dayMode) { %>, 'dark'<% } %>);
  564. var option2 = {
  565. <% if (ctx.tender.info.display.dayMode) { %>
  566. color: ['#e9af68','#57b7b6','#e4575a','#959eac','#6699FF',
  567. '#d38b70','#8fb7cf','#cd5c5c','#ffa500','#40e0d0',
  568. '#1e90ff','#ff6347','#7b68ee','#00fa9a','#ffd700',
  569. '#5c616b','#ff6666','#3cb371','#b8860b','#30e0e0'],
  570. <% } else { %>
  571. color: ['rgba(24,144,255,0.7)','rgba(69,183,149,0.7)','rgba(250,204,20,0.7)','rgba(145,82,225,0.7)','rgba(58,207,221,0.7)','rgba(204,73,80,0.7)','rgba(255,255,225,0.7)'],
  572. backgroundColor: '#343a40 ',
  573. <% } %>
  574. tooltip: {
  575. trigger: 'axis',
  576. axisPointer: {
  577. type: 'shadow'
  578. }
  579. },
  580. legend: {
  581. data: ['台账金额','截止本期计量']
  582. },
  583. grid: {
  584. left: '3%',
  585. right: '4%',
  586. bottom: '3%',
  587. containLabel: true
  588. },
  589. yAxis: {
  590. type : 'value',
  591. name : '金额',
  592. position:'left',
  593. axisLabel : {
  594. // if (ctx.tender.info.display.thousandth) {
  595. // formatter: function (value, index) {
  596. // return value.format2Str('#,##0.######') + ' 元'
  597. // }
  598. formatter: function (value, index) {
  599. if (value < 0) {
  600. let newValue = Math.abs(value);
  601. if (newValue >= 10000 && newValue < 10000000) {
  602. newValue = newValue / 10000 + "万";
  603. } else if (newValue >= 10000000) {
  604. newValue = newValue / 10000000 + "千万";
  605. }
  606. value = '-' + newValue;
  607. }
  608. if (value >= 10000 && value < 10000000) {
  609. value = value / 10000 + "万";
  610. } else if (value >= 10000000) {
  611. value = value / 10000000 + "千万";
  612. }
  613. return value;
  614. }
  615. },
  616. splitArea : {show : true}
  617. },
  618. xAxis: {
  619. type: 'category',
  620. data: [
  621. <% for (const gcl of gclChapter) { %>
  622. <% if (parseInt(gcl.code) <= 900 || (parseInt(gcl.code) > 900 && (gcl.total_price !== 0 || gcl.end_gather_tp !== 0))) { %>
  623. '<%- gcl.code %>章',
  624. <% } %>
  625. <% } %>
  626. ]
  627. },
  628. series: [
  629. {
  630. name: '台账金额',
  631. type: 'bar',
  632. data: [
  633. <% for (const gcl of gclChapter) { %>
  634. <% if (parseInt(gcl.code) <= 900 || (parseInt(gcl.code) > 900 && (gcl.total_price !== 0 || gcl.end_gather_tp !== 0))) { %>
  635. <%- gcl.total_price %>,
  636. <% } %>
  637. <% } %>
  638. ]
  639. },
  640. {
  641. name: '截止本期计量',
  642. type: 'bar',
  643. data: [
  644. <% for (const gcl of gclChapter) { %>
  645. <% if (parseInt(gcl.code) <= 900 || (parseInt(gcl.code) > 900 && (gcl.total_price !== 0 || gcl.end_gather_tp !== 0))) { %>
  646. <%- gcl.end_gather_tp %>,
  647. <% } %>
  648. <% } %>
  649. ]
  650. }
  651. ]
  652. };
  653. // 为echarts对象加载数据
  654. myChart2.setOption(option2);
  655. //4 标段期数计量进度//
  656. var myChart3 = echarts.init(document.getElementById('chartContainer4')<% if (!ctx.tender.info.display.dayMode) { %>, 'dark'<% } %>);
  657. var option3 = {
  658. <% if (ctx.tender.info.display.dayMode) { %>
  659. color: ['#e9af68','#57b7b6','#e4575a','#959eac','#6699FF',
  660. '#d38b70','#8fb7cf','#cd5c5c','#ffa500','#40e0d0',
  661. '#1e90ff','#ff6347','#7b68ee','#00fa9a','#ffd700',
  662. '#5c616b','#ff6666','#3cb371','#b8860b','#30e0e0'],
  663. <% } else { %>
  664. color: ['rgba(24,144,255,0.7)','rgba(69,183,149,0.7)','rgba(250,204,20,0.7)','rgba(145,82,225,0.7)','rgba(204,73,80,0.7)','rgba(58,207,221,0.7)','rgba(255,255,225,0.7)'],
  665. backgroundColor: '#343a40 ',
  666. <% } %>
  667. title : {
  668. text: ''
  669. },
  670. tooltip : {
  671. trigger: 'axis',
  672. },
  673. calculable : true,
  674. legend: {
  675. itemWidth:15,
  676. data:['本期合同计量','本期数量变更计量','截止上期完成','本期完成计量','完成度']
  677. },
  678. dataZoom: [
  679. {show: true, start: 0, end: 100,height:10,bottom:30}
  680. ],
  681. xAxis : [
  682. {
  683. type : 'category',
  684. splitLine : {show : true},
  685. data : [
  686. <% for (const s of stages) {%>
  687. '第<%- s.order %>期',
  688. <% } %>
  689. ]
  690. }
  691. ],
  692. yAxis : [
  693. {
  694. type : 'value',
  695. name : '金额',
  696. position:'left',
  697. axisLabel : {
  698. formatter: function (value, index) {
  699. if (value < 0) {
  700. let newValue = Math.abs(value);
  701. if (newValue >= 10000 && newValue < 10000000) {
  702. newValue = newValue / 10000 + "万";
  703. } else if (newValue >= 10000000) {
  704. newValue = newValue / 10000000 + "千万";
  705. }
  706. value = '-' + newValue;
  707. }
  708. if (value >= 10000 && value < 10000000) {
  709. value = value / 10000 + "万";
  710. } else if (value >= 10000000) {
  711. value = value / 10000000 + "千万";
  712. }
  713. return value;
  714. }
  715. },
  716. splitArea : {show : true},
  717. splitLine : {show : true},
  718. },
  719. {
  720. type : 'value',
  721. name:'完成度',
  722. axisLabel : {
  723. formatter: '{value} %'
  724. },
  725. position: 'right',
  726. splitArea : {show : false},
  727. splitLine : {show : false},
  728. }
  729. ],
  730. series : [
  731. {
  732. name:'本期合同计量',
  733. type:'bar',
  734. tooltip : {
  735. trigger: 'item',
  736. <% if (ctx.tender.info.display.thousandth) { %>
  737. formatter: function (params, ticket, callback) {
  738. return params.name + '<br/>' + params.seriesName + ': ' + params.value.format2Str('#,##0.######') + ' 元';
  739. }
  740. <% } else { %>
  741. tooltip : {trigger: 'item',formatter: "{b} <br/>{a}:{c}元"},
  742. <% } %>
  743. },
  744. stack: '合同',
  745. data:[
  746. <% for (const s of stages) {%>
  747. <%- s.contract_tp %>,
  748. <% } %>
  749. ]
  750. },
  751. {
  752. name:'本期数量变更计量',
  753. type:'bar',
  754. tooltip : {
  755. trigger: 'item',
  756. <% if (ctx.tender.info.display.thousandth) { %>
  757. formatter: function (params, ticket, callback) {
  758. return params.name + '<br/>' + params.seriesName + ': ' + params.value.format2Str('#,##0.######') + ' 元';
  759. }
  760. <% } else { %>
  761. tooltip : {trigger: 'item',formatter: "{b} <br/>{a}:{c}元"},
  762. <% } %>
  763. },
  764. stack: '变更',
  765. data:[
  766. <% for (const s of stages) {%>
  767. <%- s.qc_tp %>,
  768. <% } %>
  769. ]
  770. },
  771. {
  772. name:'截止上期完成',
  773. type:'bar',
  774. tooltip : {
  775. trigger: 'item',
  776. <% if (ctx.tender.info.display.thousandth) { %>
  777. formatter: function (params, ticket, callback) {
  778. return params.name + '<br/>' + params.seriesName + ': ' + params.value.format2Str('#,##0.######') + ' 元';
  779. }
  780. <% } else { %>
  781. tooltip : {trigger: 'item',formatter: "{b} <br/>{a}:{c}元"},
  782. <% } %>
  783. },
  784. stack: '完成',
  785. data:[
  786. <% for (const s of stages) {%>
  787. <%- ctx.helper.add(s.pre_contract_tp, s.pre_qc_tp) %>,
  788. <% } %>
  789. ]
  790. },
  791. {
  792. name:'本期完成计量',
  793. type:'bar',
  794. tooltip : {
  795. trigger: 'item',
  796. <% if (ctx.tender.info.display.thousandth) { %>
  797. formatter: function (params, ticket, callback) {
  798. return params.name + '<br/>' + params.seriesName + ': ' + params.value.format2Str('#,##0.######') + ' 元';
  799. }
  800. <% } else { %>
  801. tooltip : {trigger: 'item',formatter: "{b} <br/>{a}:{c}元"},
  802. <% } %>
  803. },
  804. stack: '完成',
  805. data:[
  806. <% for (const s of stages) {%>
  807. <%- ctx.helper.sum([s.contract_tp, s.qc_tp, s.pc_tp]) %>,
  808. <% } %>
  809. ]
  810. },
  811. {
  812. name:'完成度',
  813. type:'line',
  814. tooltip : {trigger: 'axis',formatter: "{b}占总标段<br/>{a}:{c} %"},
  815. yAxisIndex: 1,
  816. data:[
  817. <% for (const s of stages) {%>
  818. <%- ctx.helper.mul(ctx.helper.div(ctx.helper.sum([s.contract_tp, s.qc_tp, s.pc_tp]), tender.sum, 2), 100) %>,
  819. <% } %>
  820. ]
  821. },
  822. ]
  823. };
  824. // 为echarts对象加载数据
  825. myChart3.setOption(option3);
  826. //4 标段期数计量进度//
  827. //3 标段月进度//
  828. // 基于准备好的dom,初始化echarts图表
  829. var myChart4 = echarts.init(document.getElementById('chartContainer3')<% if (!ctx.tender.info.display.dayMode) { %>, 'dark'<% } %>);
  830. var option4 = {
  831. <% if (ctx.tender.info.display.dayMode) { %>
  832. color: ['#e9af68','#57b7b6','#e4575a','#959eac','#6699FF',
  833. '#d38b70','#8fb7cf','#cd5c5c','#ffa500','#40e0d0',
  834. '#1e90ff','#ff6347','#7b68ee','#00fa9a','#ffd700',
  835. '#5c616b','#ff6666','#3cb371','#b8860b','#30e0e0'],
  836. <% } else { %>
  837. color:["#17a2b8","#28a745"],
  838. backgroundColor: '#343a40 ',
  839. <% } %>
  840. title : {
  841. text: ''
  842. },
  843. tooltip : {
  844. trigger: 'axis',
  845. formatter: function (params, ticket, callback) {
  846. let sHint = '';
  847. for (const param of params) {
  848. if (sHint !== '') {
  849. sHint += '<br>';
  850. }
  851. if (sHint === '' && param.name !== '') {
  852. sHint = param.name + '<br>';
  853. }
  854. sHint += '<span style="display:inline-block;margin-right:5px;border-radius:10px;width:9px;height:9px;background-color:' + param.color +'"></span>';
  855. if (param.data) {
  856. sHint += param.seriesName + ': ' + param.data + ' %';
  857. } else {
  858. sHint += param.seriesName + ': -';
  859. }
  860. }
  861. return sHint;
  862. },
  863. },
  864. legend: {
  865. data:['截止本月完成','本月完成']
  866. },
  867. toolbox: {
  868. show : true,
  869. right:'3%',
  870. feature : {
  871. magicType : {
  872. show: true,
  873. type: ['line', 'bar'],
  874. title:{
  875. line:'切换为折线图',
  876. bar:'切换为柱状图'
  877. }
  878. }
  879. }
  880. },
  881. dataZoom : {
  882. show : true,
  883. start : 50,
  884. end : 100,
  885. height:10,
  886. bottom:30
  887. },
  888. xAxis : [
  889. {
  890. type : 'category',
  891. boundaryGap : true,
  892. data : [
  893. <% for (const mp of monthProgress) { %>
  894. '<%- mp.month %>',
  895. <% } %>
  896. ]
  897. }
  898. ],
  899. yAxis : [
  900. {
  901. type : 'value',
  902. axisLabel : {
  903. formatter: '{value} %'
  904. },
  905. splitArea : {show : true}
  906. }
  907. ],
  908. series : [
  909. {
  910. name:'截止本月完成',
  911. type:'line',
  912. itemStyle: {
  913. normal: {
  914. lineStyle: {
  915. shadowColor : 'rgba(0,0,0,0.4)',
  916. shadowBlur: 5,
  917. shadowOffsetX: 3,
  918. shadowOffsetY: 3
  919. }
  920. }
  921. },
  922. areaStyle: { // 区域填充样式
  923. color: { // 填充的颜色 // 线性渐变,前四个参数分别是 x0, y0, x2, y2, 范围从 0 - 1,相当于在图形包围盒中的百分比,如果 globalCoord 为 `true`,则该四个值是绝对的像素位置
  924. type: 'linear',
  925. x: 0,
  926. y: 0,
  927. x2: 0,
  928. y2: 1,
  929. colorStops: [
  930. {
  931. offset: 0,
  932. color: 'rgba(37,234,255,0.7)', // 0% 处的颜色
  933. },
  934. {
  935. offset: 1,
  936. color: 'rgba(37,234,255,0.7)' // 100% 处的颜色
  937. }
  938. ],
  939. global: false, // 缺省为 false
  940. }
  941. },
  942. data:[
  943. <% for (const mp of monthProgress) { %>
  944. <%- mp.end_ratio %>,
  945. <% } %>
  946. ]
  947. },
  948. {
  949. name:'本月完成',
  950. type:'line',
  951. itemStyle: {
  952. normal: {
  953. lineStyle: {
  954. shadowColor : 'rgba(0,0,0,0.4)',
  955. shadowBlur: 5,
  956. shadowOffsetX: 3,
  957. shadowOffsetY: 3
  958. }
  959. }
  960. },
  961. areaStyle: { // 区域填充样式
  962. color: { // 填充的颜色 // 线性渐变,前四个参数分别是 x0, y0, x2, y2, 范围从 0 - 1,相当于在图形包围盒中的百分比,如果 globalCoord 为 `true`,则该四个值是绝对的像素位置
  963. type: 'linear',
  964. x: 0,
  965. y: 0,
  966. x2: 0,
  967. y2: 1,
  968. colorStops: [
  969. {
  970. offset: 0,
  971. color: 'rgba(40,167,69,0.7)', // 0% 处的颜色
  972. },
  973. {
  974. offset: 1,
  975. color: 'rgba(40,167,69,0.7)' // 100% 处的颜色
  976. }
  977. ],
  978. global: false, // 缺省为 false
  979. }
  980. },
  981. data:[
  982. <% for (const mp of monthProgress) { %>
  983. <%- mp.ratio %>,
  984. <% } %>
  985. ]
  986. }
  987. ]
  988. };
  989. // 为echarts对象加载数据
  990. myChart4.setOption(option4);
  991. //3 标段月进度//
  992. //变更审批进度//
  993. var myChart5 = echarts.init(document.getElementById('bgchart')<% if (!ctx.tender.info.display.dayMode) { %>, 'dark'<% } %>);
  994. var option5 = {
  995. <% if (ctx.tender.info.display.dayMode) { %>
  996. color: ['#e9af68','#57b7b6','#e4575a','#959eac','#6699FF',
  997. '#d38b70','#8fb7cf','#cd5c5c','#ffa500','#40e0d0',
  998. '#1e90ff','#ff6347','#7b68ee','#00fa9a','#ffd700',
  999. '#5c616b','#ff6666','#3cb371','#b8860b','#30e0e0'],
  1000. <% } else {%>
  1001. color: ['rgba(145,82,225,0.7)','rgba(58,207,221,0.7)','rgba(204,73,80,0.7)','rgba(24,144,255,0.7)','rgba(69,183,149,0.7)','rgba(250,204,20,0.7)','rgba(255,255,225,0.7)'],
  1002. backgroundColor: '#343a40 ',
  1003. <% } %>
  1004. tooltip: {
  1005. trigger: 'item'
  1006. },
  1007. // legend: {
  1008. // top: '0%',
  1009. // right: '0%',
  1010. // orient:'vertical',
  1011. // itemWidth:15,
  1012. // data: ['一般变更', '较大变更', '重大变更', '待上报', '审批中', '已完成']
  1013. // },
  1014. legend:[{
  1015. top: '0%',
  1016. right: '0%',
  1017. orient:'vertical',
  1018. itemWidth:15,
  1019. data:['一般变更','较大变更','重大变更']
  1020. },{
  1021. top: '0%',
  1022. right: '35%',
  1023. orient:'vertical',
  1024. itemWidth:15,
  1025. data:['待上报','审批中','已完成']
  1026. }],
  1027. series: [
  1028. {
  1029. name: '数量',
  1030. type: 'pie',
  1031. top:'0%',
  1032. right:'65%',
  1033. selectedMode: 'single',
  1034. radius: '50%',
  1035. avoidLabelOverlap: false,
  1036. label: {
  1037. show:false,
  1038. //position: 'inner',
  1039. //fontSize: 14,
  1040. },
  1041. labelLine: {
  1042. show: false
  1043. },
  1044. data: [
  1045. <% for (const cs of change_status_total) { %>
  1046. {value: <%- cs.num %>, name: '<%- cs.name %>'},
  1047. <% } %>
  1048. ]
  1049. },
  1050. {
  1051. name: '数量',
  1052. type: 'pie',
  1053. top:'0%',
  1054. right:'65%',
  1055. radius: ['70%', '100%'],
  1056. avoidLabelOverlap: false,
  1057. label: {
  1058. show: false,
  1059. position: 'center'
  1060. },
  1061. emphasis: {
  1062. label: {
  1063. show: false,
  1064. //fontSize: '14',
  1065. //fontWeight: 'bold'
  1066. }
  1067. },
  1068. labelLine: {
  1069. //show: false,
  1070. length: 20,
  1071. },
  1072. data: [
  1073. <% for (const cq of change_quality_total) { %>
  1074. {value: <%- cq.num %>, name: '<%- cq.name %>'},
  1075. <% } %>
  1076. ]
  1077. }
  1078. ]
  1079. };
  1080. // 为echarts对象加载数据
  1081. myChart5.setOption(option5);
  1082. function echartsReset() {
  1083. myChart.resize();
  1084. myChart1.resize();
  1085. myChart2.resize();
  1086. myChart3.resize();
  1087. myChart4.resize();
  1088. myChart5.resize();
  1089. }
  1090. $(function () {
  1091. $('#change-echarts a[data-toggle="tab"]').on('shown.bs.tab', function(e) {
  1092. myChart3.resize();
  1093. myChart4.resize();
  1094. });
  1095. $('#showFull').click(function () {
  1096. const full=document.getElementById("big-data");
  1097. launchIntoFullscreen(full);
  1098. // $('#exitFull').show();
  1099. // $('#showFull').hide();
  1100. });
  1101. $('#exitFull').click(function () {
  1102. exitFullscreen();
  1103. // $('#exitFull').hide();
  1104. // $('#showFull').show();
  1105. })
  1106. })
  1107. $(window).resize(echartsReset);
  1108. // 数据全屏
  1109. function launchIntoFullscreen(element) {
  1110. if(element.requestFullscreen){
  1111. element.requestFullscreen();
  1112. }
  1113. else if(element.mozRequestFullScreen) {
  1114. element.mozRequestFullScreen();
  1115. }
  1116. else if(element.webkitRequestFullscreen) {
  1117. element.webkitRequestFullscreen();
  1118. }
  1119. else if(element.msRequestFullscreen) {
  1120. element.msRequestFullscreen();
  1121. }
  1122. }
  1123. function exitFullscreen() {
  1124. if(document.exitFullscreen) {
  1125. document.exitFullscreen();
  1126. } else if(document.mozCancelFullScreen) {
  1127. document.mozCancelFullScreen();
  1128. } else if(document.webkitExitFullscreen) {
  1129. document.webkitExitFullscreen();
  1130. }
  1131. }
  1132. document.addEventListener("fullscreenchange", function (event) {
  1133. if (document.fullscreenElement) {
  1134. $('#exitfull-div').show();
  1135. $('#showFull').hide();
  1136. } else {
  1137. $('#exitfull-div').hide();
  1138. $('#showFull').show();
  1139. }
  1140. });
  1141. </script>
  1142. <script src="/public/js/sub_menu.js"></script>
  1143. <script>
  1144. $.subMenu({
  1145. menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
  1146. toMenu: '#to-menu', toMiniMenu: '#to-mini-menu',
  1147. key: 'menu.1.0.0',
  1148. miniHint: '#sub-mini-hint', hintKey: 'menu.hint.1.0.1',
  1149. callback: function (info) {
  1150. if (info.mini) {
  1151. $('.panel-title').addClass('fluid');
  1152. $('#sub-menu').removeClass('panel-sidebar');
  1153. } else {
  1154. $('.panel-title').removeClass('fluid');
  1155. $('#sub-menu').addClass('panel-sidebar');
  1156. }
  1157. autoFlashHeight();
  1158. echartsReset();
  1159. }
  1160. });
  1161. </script>
  1162. <script>
  1163. const tenderId = parseInt('<%- tender.id %>');
  1164. $(document).ready(function () {
  1165. // 获取审批流程
  1166. $('a[data-target="#sp-list" ]').on('click', function () {
  1167. const type = $(this).attr('data-type');
  1168. const data = {
  1169. order: $(this).attr('data-order'),
  1170. };
  1171. let url = '';
  1172. let auditConst = '';
  1173. if (type === 'stage') {
  1174. url = '/tender/' + tenderId + '/measure/stage/auditors';
  1175. auditConst = JSON.parse('<%- JSON.stringify(audit.stage) %>');
  1176. } else if (type === 'ledger') {
  1177. url = '/tender/' + tenderId + '/measure/ledger/auditors';
  1178. auditConst = JSON.parse('<%- JSON.stringify(audit.ledger) %>');
  1179. } else if (type === 'material') {
  1180. url = '/tender/' + tenderId + '/measure/material/auditors';
  1181. auditConst = JSON.parse('<%- JSON.stringify(audit.material) %>');
  1182. }
  1183. postData(url, data, function (result) {
  1184. const { auditHistory, auditors, user } = result
  1185. let historyHTML = ''
  1186. const leftAuditors = auditors;
  1187. const darkHTML = !dayMode ? 'bg-dark border-secondary text-white' : '';
  1188. auditHistory.forEach((auditors, idx) => {
  1189. if(idx === auditHistory.length - 1 && auditHistory.length !== 1) {
  1190. historyHTML += `<div class="text-right"><a href="javascript: void(0);" id="fold-btn" data-target="show"
  1191. >展开历史审批流程</a></div>`
  1192. }
  1193. historyHTML += `<div class="${idx < auditHistory.length - 1 ? 'fold-card' : ''}">
  1194. <div class="text-center text-muted">${idx + 1}#</div>
  1195. <ul class="timeline-list list-unstyled mt-2">`
  1196. auditors.forEach((auditor, index) => {
  1197. if (index === 0) {
  1198. historyHTML += `<li class="timeline-list-item pb-2">
  1199. <div class="timeline-item-date">
  1200. ${formatDate(auditor.begin_time, !dayMode)}
  1201. </div>
  1202. <div class="timeline-item-tail"></div>
  1203. <div class="timeline-item-icon bg-success text-light">
  1204. <i class="fa fa-caret-down"></i>
  1205. </div>
  1206. <div class="timeline-item-content">
  1207. <div class="card ${darkHTML}">
  1208. <div class="card-body p-3">
  1209. <div class="card-text">
  1210. <p class="mb-1"><span
  1211. class="h5">${user.name}</span><span
  1212. class="pull-right text-success">${idx !== 0 ? '重新' : ''}上报审批</span>
  1213. </p>
  1214. <p class="text-muted mb-0">${user.role}</p>
  1215. </div>
  1216. </div>
  1217. </div>
  1218. </div>
  1219. </li>
  1220. <li class="timeline-list-item pb-2">
  1221. <div class="timeline-item-date">
  1222. ${formatDate(auditor.end_time, !dayMode)}
  1223. </div>`
  1224. if(index < auditors.length - 1) {
  1225. historyHTML += `<div class="timeline-item-tail"></div>`
  1226. }
  1227. if(auditor.status === auditConst.status.checked) {
  1228. historyHTML += `<div class="timeline-item-icon bg-success text-light">
  1229. <i class="fa fa-check"></i>
  1230. </div>`
  1231. } else if(auditor.status === auditConst.status.checkNo || auditor.status === auditConst.status.checkNoPre) {
  1232. historyHTML += `<div class="timeline-item-icon bg-warning text-light">
  1233. <i class="fa fa-level-up"></i>
  1234. </div>`
  1235. } else if(auditor.status === auditConst.status.checking) {
  1236. historyHTML += `<div class="timeline-item-icon bg-warning text-light">
  1237. <i class="fa fa-ellipsis-h"></i>
  1238. </div>`
  1239. } else {
  1240. historyHTML += `<div class="timeline-item-icon bg-secondary text-light"></div>`
  1241. }
  1242. historyHTML += `<div class="timeline-item-content">
  1243. <div class="card ${darkHTML}">
  1244. <div class="card-body p-3">
  1245. <div class="card-text">
  1246. <p class="mb-1"><span class="h5">${auditor.name}</span><span
  1247. class="pull-right ${auditConst.statusClass[auditor.status]}">${auditConst.statusString[auditor.status]}</span>
  1248. </p>
  1249. <p class="text-muted mb-0">${auditor.role}</p>
  1250. </div>
  1251. </div>`
  1252. if (auditor.opinion) {
  1253. historyHTML += `<div class="card-body p-3 border-top">
  1254. <p style="margin: 0;">${auditor.opinion}</p>
  1255. </div>`
  1256. }
  1257. historyHTML += `</div></div></li>`
  1258. } else {
  1259. historyHTML += `<li class="timeline-list-item pb-2">
  1260. <div class="timeline-item-date">
  1261. ${formatDate(auditor.end_time, !dayMode)}
  1262. </div>`
  1263. if(index < auditors.length - 1) {
  1264. historyHTML += `<div class="timeline-item-tail"></div>`
  1265. }
  1266. if(auditor.status === auditConst.status.checked) {
  1267. historyHTML += `<div class="timeline-item-icon bg-success text-light">
  1268. <i class="fa fa-check"></i>
  1269. </div>`
  1270. } else if(auditor.status === auditConst.status.checkNo || auditor.status === auditConst.status.checkNoPre) {
  1271. historyHTML += `<div class="timeline-item-icon bg-warning text-light">
  1272. <i class="fa fa-level-up"></i>
  1273. </div>`
  1274. } else if(auditor.status === auditConst.status.checking) {
  1275. historyHTML += `<div class="timeline-item-icon bg-warning text-light">
  1276. <i class="fa fa-ellipsis-h"></i>
  1277. </div>`
  1278. } else {
  1279. historyHTML += `<div class="timeline-item-icon bg-secondary text-light"></div>`
  1280. }
  1281. historyHTML += `<div class="timeline-item-content">
  1282. <div class="card ${darkHTML}">
  1283. <div class="card-body p-3">
  1284. <div class="card-text">
  1285. <p class="mb-1"><span class="h5">${auditor.name}</span>
  1286. <span
  1287. class="pull-right
  1288. ${auditConst.statusClass[auditor.status]}">${auditor.status !== auditConst.status.uncheck ? auditConst.statusString[auditor.status] : ''}
  1289. ${auditor.status === auditConst.status.checkNo ? user.name : ''}
  1290. ${auditor.status === auditConst.status.checkNoPre ? (leftAuditors.find(item => item.order === auditor.sort-1) ? leftAuditors.find(item => item.order === auditor.sort-1).name : '') : ''}
  1291. </span>
  1292. </p>
  1293. <p class="text-muted mb-0">${auditor.role}</p>
  1294. </div>
  1295. </div>`
  1296. if (auditor.opinion) {
  1297. historyHTML += `<div class="card-body p-3 border-top">
  1298. <p style="margin: 0;">${auditor.opinion} </p>
  1299. </div>`
  1300. }
  1301. historyHTML += `</div></div></li>`
  1302. }
  1303. })
  1304. historyHTML += '</ul></div>'
  1305. })
  1306. $('#audit-list').empty()
  1307. $('#audit-list').append(historyHTML)
  1308. });
  1309. });
  1310. // 展开/收起历史审核记录
  1311. $('#audit-list').on('click', 'a', function() {
  1312. const type = $(this).data('target')
  1313. const auditCard = $(this).parent().parent()
  1314. console.log('auditCard', auditCard)
  1315. if (type === 'show') {
  1316. $(this).data('target', 'hide')
  1317. auditCard.find('.fold-card').slideDown('swing', () => {
  1318. auditCard.find('#end-target').text($(this).data('idx') + '#')
  1319. auditCard.find('#fold-btn').text('收起历史审核记录')
  1320. })
  1321. } else {
  1322. $(this).data('target', 'show')
  1323. auditCard.find('.fold-card').slideUp('swing', () => {
  1324. auditCard.find('#end-target').text('1#')
  1325. auditCard.find('#fold-btn').text('展开历史审核记录')
  1326. })
  1327. }
  1328. });
  1329. function formatDate(date, dayMode) {
  1330. if (!date) return '';
  1331. date = new Date(date)
  1332. const year = date.getFullYear();
  1333. let mon = date.getMonth() + 1;
  1334. let day = date.getDate();
  1335. let hour = date.getHours();
  1336. let minute = date.getMinutes();
  1337. let scond = date.getSeconds();
  1338. if (mon < 10) {
  1339. mon = '0' + mon.toString();
  1340. }
  1341. if (day < 10) {
  1342. day = '0' + day.toString();
  1343. }
  1344. if (hour < 10) {
  1345. hour = '0' + hour.toString();
  1346. }
  1347. if (minute < 10) {
  1348. minute = '0' + minute.toString();
  1349. }
  1350. if (scond < 10) {
  1351. scond = '0' + scond.toString();
  1352. }
  1353. return `${year}<span class="${dayMode ? 'text-light' : ''}">${mon}-${day}</span><span class="${dayMode ? 'text-light' : ''}">${hour}:${minute}:${scond}</span>`;
  1354. };
  1355. })
  1356. </script>
  1357. <% if (hadMap === 1 || ctx.session.sessionUser.is_admin) { %>
  1358. <script src="/public/js/map/turf.min.js"></script>
  1359. <script src="/public/js/map/gcoord.js"></script>
  1360. <script>
  1361. const tenderMapList = JSON.parse(unescape('<%- escape(JSON.stringify(tenderMapList)) %>'));
  1362. </script>
  1363. <% } %>
  1364. <% if (hadMap === 1) { %>
  1365. <!--<script src="//bj.bcebos.com/v1/mapopen/api-demos/js/mapStyle.js"></script>-->
  1366. <script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=C3hLZAjuWTaCdwnwoYY83APrwlPEj4v7"></script>
  1367. <script type="text/javascript">
  1368. // 画线
  1369. $(function () {
  1370. const map = new BMapGL.Map("map");
  1371. // 创建地图实例
  1372. const polyLineList = [];
  1373. const centerPoint = { lng: <%- map_json.lng %>, lat: <%- map_json.lat %> };
  1374. let level = <%- map_json.level %>;
  1375. const pointList = [];
  1376. const centerList = [];
  1377. for (const tm of tenderMapList) {
  1378. if (tm.map_json) {
  1379. const map_json = JSON.parse(unescape(escape(tm.map_json)));
  1380. const lngLatList = [];
  1381. for (const mj of map_json) {
  1382. const result = gcoord.transform([mj.lng, mj.lat], gcoord.WGS84, gcoord.BD09);
  1383. lngLatList.push(new BMapGL.Point(result[0], result[1]));
  1384. }
  1385. polyLineList.push({
  1386. map: lngLatList,
  1387. color: tm.color,
  1388. });
  1389. const center = JSON.parse(tm.center);
  1390. pointList.push(turf.point([center.lng, center.lat]));
  1391. if (tm.tips) {
  1392. const centerResult = gcoord.transform([map_json[Math.floor(map_json.length/2)].lng, map_json[Math.floor(map_json.length/2)].lat], gcoord.WGS84, gcoord.BD09);
  1393. centerList.push({ map: new BMapGL.Point(centerResult[0], centerResult[1]), color: tm.color, tips: tm.tips });
  1394. }
  1395. }
  1396. }
  1397. if (pointList.length > 0) {
  1398. let maxDistance = 0;
  1399. // 中心点计算
  1400. const features = turf.featureCollection(pointList);
  1401. const center = turf.center(features);
  1402. if (center && center.geometry && center.geometry.coordinates && center.geometry.coordinates.length === 2) {
  1403. centerPoint.lng = _.round(center.geometry.coordinates[0], 4);
  1404. centerPoint.lat = _.round(center.geometry.coordinates[1], 4);
  1405. }
  1406. // 地图级别计算
  1407. if (pointList.length === 1) {
  1408. // 只有一条路线
  1409. const map_json = JSON.parse(unescape(escape(tenderMapList[0].map_json)));
  1410. for (const mj of map_json) {
  1411. const distance = turf.distance(turf.point([mj.lng, mj.lat]), turf.point([centerPoint.lng, centerPoint.lat]));
  1412. if (distance > maxDistance) {
  1413. maxDistance = distance;
  1414. }
  1415. }
  1416. } else {
  1417. for (const c of pointList) {
  1418. const distance = turf.distance(c, turf.point([centerPoint.lng, centerPoint.lat]));
  1419. if (distance > maxDistance) {
  1420. maxDistance = distance;
  1421. }
  1422. }
  1423. }
  1424. if (maxDistance === 0) {
  1425. level = 15;
  1426. } else {
  1427. // 级别区间
  1428. // const range = [0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 25, 50, 100, 200, 500, 1000, 2000, 5000, 10000];
  1429. const range = [10000, 5000, 2000, 1000, 500, 200, 100, 50, 25, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02];
  1430. level = _.findIndex(range, function (item) {
  1431. return item <= maxDistance;
  1432. })
  1433. level = level + 1;
  1434. }
  1435. const result = gcoord.transform([centerPoint.lng, centerPoint.lat], gcoord.WGS84, gcoord.BD09);
  1436. centerPoint.lng = result[0];
  1437. centerPoint.lat = result[1];
  1438. }
  1439. // 初始化地图,设置中心点坐标和地图级别
  1440. const point = new BMapGL.Point(centerPoint.lng, centerPoint.lat);
  1441. map.centerAndZoom(point, level);
  1442. // const LocationControl = new BMapGL.LocationControl(); // 添加比例尺控件
  1443. // map.addControl(LocationControl);
  1444. map.enableScrollWheelZoom(true);
  1445. <% if (!ctx.tender.info.display.dayMode) { %>
  1446. map.setMapStyleV2({styleId: '20d4aea41cf71387395f2dc835f1c4b6'});
  1447. <% } %>
  1448. if (polyLineList.length > 0) {
  1449. for (const pl of polyLineList) {
  1450. const polyline = new BMapGL.Polyline(pl.map, {strokeColor: pl.color, strokeWeight:10, strokeOpacity:1});
  1451. map.addOverlay(polyline);
  1452. }
  1453. }
  1454. if (centerList.length > 0) {
  1455. for (const cl of centerList) {
  1456. const opts = {
  1457. position : cl.map, // 指定文本标注所在的地理位置
  1458. offset : new BMapGL.Size(5, 0) //设置文本偏移量
  1459. }
  1460. const label = new BMapGL.Label(cl.tips, opts); // 创建文本标注对象
  1461. label.setStyle({
  1462. height: '18px',
  1463. lineHeight : '18px',
  1464. color : cl.color,
  1465. borderRadius: '5px',
  1466. borderColor: cl.color,
  1467. padding: '0px 5px',
  1468. fontSize : '12px',
  1469. // fontFamily: '微软雅黑',
  1470. });
  1471. map.addOverlay(label);
  1472. // const opts = {
  1473. // width: 0,
  1474. // height: 0,
  1475. // maxwidth: 220,
  1476. // title: '路线标注:',
  1477. // };
  1478. // const infoWindow = new BMapGL.InfoWindow(cl.tips, opts);
  1479. // map.openInfoWindow(infoWindow, cl.map);
  1480. }
  1481. }
  1482. })
  1483. </script>
  1484. <% } %>