tender.ejs 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
  6. <meta http-equiv="x-ua-compatible" content="ie=edge">
  7. <title>标段概况-计量支付</title>
  8. <link rel="stylesheet" href="/public/css/bootstrap/bootstrap.min.css">
  9. <link rel="stylesheet" href="/public/css/wap/main.css">
  10. <link rel="stylesheet" href="/public/css/toast.css">
  11. <link rel="stylesheet" href="/public/css/font-awesome/font-awesome.min.css">
  12. <link rel="stylesheet" href="/public/css/toastr.css">
  13. <script src=/public/js/echarts/echarts.min.js></script>
  14. <link rel="shortcut icon" href="/public/images/favicon.ico">
  15. <style>
  16. body {
  17. padding: 0;
  18. }
  19. .tab-content > .tab-pane,.pill-content > .pill-pane {
  20. display: block;
  21. height: 0;
  22. overflow-y: hidden;
  23. }
  24. .tab-content > .active,.pill-content > .active {
  25. height: auto;
  26. }
  27. .nav-tabs-scrollable {
  28. overflow-x: auto;
  29. white-space: nowrap;
  30. -webkit-overflow-scrolling: touch; /* 平滑滚动 */
  31. scrollbar-width: none; /* Firefox 隐藏滚动条 */
  32. }
  33. .nav-tabs-scrollable::-webkit-scrollbar {
  34. display: none; /* Chrome / Safari 隐藏滚动条 */
  35. }
  36. </style>
  37. </head>
  38. <body>
  39. <div class="container">
  40. <!--顶部-->
  41. <nav class="fixed-top bg-dark">
  42. <div class="my-2 d-flex justify-content-between">
  43. <span class="text-white ml-3"><a href="/wap/sp/<%- ctx.subProject.id %>/list" class="mr-2 text-white show-loading"><i class="fa fa-chevron-left"></i>标段概况</a></span>
  44. <a tabindex="0" href="javascript:void(0)" class="text-white text-truncate text-center"
  45. style="width:150px" data-toggle="popover" data-placement="top"
  46. data-content="<%- tender.name %>" data-trigger="focus"><%- tender.name %></a>
  47. <div class="mr-3">
  48. <div class="dropdown">
  49. <button class="btn btn-sm btn-light dropdown-toggle" type="button" data-toggle="dropdown">
  50. <%- ctx.session.sessionUser.name.substr(ctx.session.sessionUser.name.length > 2 ? ctx.session.sessionUser.name.length - 2 : 0) %>
  51. </button>
  52. <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
  53. <a class="dropdown-item" href="/wap/logout">退出登录</a>
  54. </div>
  55. </div>
  56. </div>
  57. </div>
  58. </nav>
  59. <!--标段概况-->
  60. <div class="py-6">
  61. <div class="nav-tabs-scrollable">
  62. <!--标签-->
  63. <ul class="nav nav-tabs nav-fill" style="flex-wrap: nowrap;min-width: max-content;">
  64. <li class="nav-item">
  65. <a class="px-2 nav-link active" data-toggle="tab" href="#gaikuang" role="tab">概况</a>
  66. </li>
  67. <li class="nav-item">
  68. <a class="px-2 nav-link" data-toggle="tab" href="#yufukuan" role="tab">预付款</a>
  69. </li>
  70. <!-- <li class="nav-item">-->
  71. <!-- <a class="px-2 nav-link" data-toggle="tab" href="#ledger" role="tab">台账分解</a>-->
  72. <!-- </li>-->
  73. <li class="nav-item">
  74. <a class="px-2 nav-link" data-toggle="tab" href="#tzxiuding" role="tab">台账修订</a>
  75. </li>
  76. <li class="nav-item">
  77. <a class="px-2 nav-link" data-toggle="tab" href="#jlqi" role="tab">计量期</a>
  78. </li>
  79. <li class="nav-item">
  80. <a class="px-2 nav-link" data-toggle="tab" href="#biangeng" role="tab">工程变更</a>
  81. </li>
  82. <li class="nav-item">
  83. <a class="px-2 nav-link" data-toggle="tab" href="#material" role="tab">材料调差</a>
  84. </li>
  85. </ul>
  86. </div>
  87. <div class="tab-content">
  88. <div class="tab-pane active" id="gaikuang">
  89. <!--图表-->
  90. <div class="card mb-3 mr-1 mt-3">
  91. <div class="card-body">
  92. <h5 class="card-title">期进度表</h5>
  93. <div style="overflow-x:scroll;padding-bottom: 10px">
  94. <div id="chartContainer4" style="height: 300px; width: 250%;">
  95. </div>
  96. </div>
  97. <p class="text-center text-muted m-0">左右滑动</p>
  98. </div>
  99. </div>
  100. <div class="card mb-3 mr-1">
  101. <div class="card-body">
  102. <h5 class="card-title">月进度表</h5>
  103. <div style="overflow-x:scroll;padding-bottom: 10px">
  104. <div id="chartContainer3" style="height: 300px; width: 320%;">
  105. </div>
  106. </div>
  107. <p class="text-center text-muted m-0">左右滑动</p>
  108. </div>
  109. </div>
  110. </div>
  111. <div class="tab-pane" id="yufukuan">
  112. <% for (const t of advanceConst.typeCol) { %>
  113. <div class="card my-3">
  114. <div class="card-body">
  115. <a href="/wap/tender/<%- tender.id %>/advance#<%- t.key %>"><h5 class="card-title d-flex justify-content-between"><%- t.name %><span><% if (advanceList[t.type]) { %>第<%- advanceList[t.type].order %>期<% } %></span></h5></a>
  116. </div>
  117. </div>
  118. <% } %>
  119. </div>
  120. <div class="tab-pane" id="ledger">
  121. </div>
  122. <div class="tab-pane" id="tzxiuding">
  123. <dl class="mb-2 mt-3">
  124. <% for (const lr of revises) { %>
  125. <dt class="bg-light p-2 d-flex justify-content-between"><span>第<%- lr.corder %>次修订</span>
  126. <% if (!lr.valid) {%>
  127. <span class="text-danger">
  128. 作废
  129. </span>
  130. <% } else { %>
  131. <span class="<%- auditReviseConst.auditStringClass[lr.status] %>">
  132. <% if (lr.curAuditor && lr.status !== auditReviseConst.status.checked) { %>
  133. <%- lr.curAuditor.name %><%if (lr.curAuditor.role !== '' && lr.curAuditor.role !== null) { %>-<%- lr.curAuditor.role %><% } %>
  134. <% } %>
  135. <%- lr.status === auditReviseConst.status.checked ? '审批完成' : auditReviseConst.auditProgress[lr.status] %>
  136. </span>
  137. <% } %>
  138. </dt>
  139. <dd>
  140. <table class="table table-hover">
  141. <tr><td width="90">修订时间</td><td><%- ctx.moment(lr.in_time).format('YYYY-MM-DD') %></td></tr>
  142. <tr><td>修订人</td><td><%- lr.user_name %></td></tr>
  143. <tr><td>修订详情</td><td><% if (lr.content) { %><% if (lr.content.length <= 22) { %><%- lr.content %><% } else { %><%- lr.content.substring(0,22) %><a class="show-content" data-content="<%- lr.content %>" href="javascript:void(0);">展开更多</a><% } %><% } %></td></tr>
  144. <% if (lr.curAuditor && lr.status == auditReviseConst.status.checking && lr.curAuditor.audit_id === ctx.session.sessionUser.accountId) { %>
  145. <tr>
  146. <td colspan="2">
  147. <a class="btn btn-block btn-success" href="/wap/tender/<%- tender.id %>/revise/<%- lr.id %>/info">审批</a>
  148. </td>
  149. </tr>
  150. <% } %>
  151. </table>
  152. </dd>
  153. <% } %>
  154. </dl>
  155. </div>
  156. <div class="tab-pane" id="jlqi">
  157. <!--期列表-->
  158. <dl class="mb-2 mt-3">
  159. <% for (const s of stages) { %>
  160. <dt class="bg-light p-2 d-flex justify-content-between"><span>第<%- s.order %>期</span>
  161. <span class="<%- auditConst.auditStringClass[s.status] %>">
  162. <% if (s.curAuditors.length > 0 && s.status !== auditConst.status.checked) { %>
  163. <% if (s.curAuditors[0].audit_type === auditType.key.common) { %>
  164. <%- s.curAuditors[0].name %><%if (s.curAuditors[0].role !== '' && s.curAuditors[0].role !== null) { %>-<%- s.curAuditors[0].role %><% } %>
  165. <% } else { %>
  166. <%- ctx.helper.transFormToChinese(s.curAuditors[0].audit_order) + '审' %>
  167. <% } %>
  168. <% } %>
  169. <%- s.status === auditConst.status.checked ? '审批完成' : auditConst.auditProgress[s.status] %>
  170. </span>
  171. </dt>
  172. <dd>
  173. <table class="table table-hover">
  174. <tbody><tr>
  175. <td>
  176. <p class="mb-0">本期合同计量</p>
  177. <b>¥<%- s.contract_tp ? s.contract_tp : 0 %></b>
  178. </td>
  179. <td>
  180. <p class="mb-0">本期数量变更计量</p>
  181. <b>¥<%- s.qc_tp ? s.qc_tp : 0 %></b>
  182. </td>
  183. </tr>
  184. <tr>
  185. <td>
  186. <p class="mb-0">本期完成计量</p>
  187. <b>¥<%- s.tp ? s.tp : 0 %></b>
  188. </td>
  189. <td>
  190. <p class="mb-0">截止上期完成计量</p>
  191. <b>¥<%- s.pre_tp ? s.pre_tp : 0 %></b>
  192. </td>
  193. </tr>
  194. <tr>
  195. <td>
  196. <p class="mb-0">截止本期完成计量</p>
  197. <b>¥<%- s.end_tp ? s.end_tp : 0 %></b>
  198. </td>
  199. <% if (!ctx.subProject.page_show.closeWapYfSf) { %>
  200. <td>
  201. <p class="mb-0">本期应付</p>
  202. <b>¥<%- s.yf_tp ? s.yf_tp : 0 %></b>
  203. </td>
  204. <% } %>
  205. </tr>
  206. <% if (!ctx.subProject.page_show.closeWapYfSf) { %>
  207. <tr>
  208. <td>
  209. <p class="mb-0">本期实付</p>
  210. <b>¥<%- s.sf_tp ? s.sf_tp : 0 %></b>
  211. </td>
  212. <td>
  213. </td>
  214. </tr>
  215. <% } %>
  216. <% if (s.curAuditors.length > 0 && s.status == auditConst.status.checking && s.curAuditors.find(x => { return x.aid === ctx.session.sessionUser.accountId})) { %>
  217. <tr>
  218. <td colspan="2">
  219. <a class="btn btn-block btn-success" href="/wap/tender/<%- s.tid %>/measure/stage/<%- s.order %>">审批本期</a>
  220. </td>
  221. </tr>
  222. <% } %>
  223. </tbody></table>
  224. </dd>
  225. <% } %>
  226. </dl>
  227. </div>
  228. <div class="tab-pane" id="biangeng">
  229. <% if (ctx.subProject.page_show.openChangeProject) { %>
  230. <div class="card my-3">
  231. <div class="card-body">
  232. <a href="/wap/tender/<%- tender.id %>/change#changeProject"><h5 class="card-title d-flex justify-content-between">变更立项</h5></a>
  233. </div>
  234. </div>
  235. <% } %>
  236. <% if (ctx.subProject.page_show.openChangeApply) { %>
  237. <div class="card my-3">
  238. <div class="card-body">
  239. <a href="/wap/tender/<%- tender.id %>/change#changeApply"><h5 class="card-title d-flex justify-content-between">变更申请</h5></a>
  240. </div>
  241. </div>
  242. <% } %>
  243. <% if (ctx.subProject.page_show.openChangePlan) { %>
  244. <div class="card my-3">
  245. <div class="card-body">
  246. <a href="/wap/tender/<%- tender.id %>/change#changePlan"><h5 class="card-title d-flex justify-content-between">变更方案</h5></a>
  247. </div>
  248. </div>
  249. <% } %>
  250. <div class="card my-3">
  251. <div class="card-body">
  252. <a href="/wap/tender/<%- tender.id %>/change#change"><h5 class="card-title d-flex justify-content-between">变更令</h5></a>
  253. </div>
  254. </div>
  255. </div>
  256. <div class="tab-pane" id="material">
  257. <!--期列表-->
  258. <dl class="mb-2 mt-3">
  259. <% for (const m of materials) { %>
  260. <dt class="bg-light p-2 d-flex justify-content-between"><span>第<%- m.order %>期</span>
  261. <span class="<%- auditMaterialConst.auditStringClass[m.status] %>">
  262. <% if (m.curAuditors && m.curAuditors.length > 0 && m.status !== auditMaterialConst.status.checked) { %>
  263. <% if (m.curAuditors[0].audit_type === auditType.key.common) { %>
  264. <%- m.curAuditors[0].name %><%if (m.curAuditors[0].role !== '' && m.curAuditors[0].role !== null) { %>-<%- m.curAuditors[0].role %><% } %>
  265. <% } else { %>
  266. <%- ctx.helper.transFormToChinese(m.curAuditors[0].audit_order) + '审' %>
  267. <% } %>
  268. <% } %>
  269. <%- m.status === auditMaterialConst.status.checked ? '审批完成' : auditMaterialConst.auditProgress[m.status] %>
  270. </span>
  271. </dt>
  272. <dd>
  273. <table class="table table-hover">
  274. <tbody><tr>
  275. <td>
  276. <p class="mb-0">计量期</p>
  277. <b>第<%- m.s_order %>期</b>
  278. </td>
  279. <% if (materialColShow[0].checked) { %>
  280. <td>
  281. <p class="mb-0">信息价价差费用</p>
  282. <b>¥<%= m.m_tp !== null ? ctx.helper.round(m.m_tp, m.decimal.tp) : 0 %></b>
  283. </td>
  284. <% } %>
  285. </tr>
  286. <% if (materialColShow[0].checked) { %>
  287. <tr>
  288. <% if (openMaterialTax) { %>
  289. <td>
  290. <p class="mb-0">信息价(含材料税)</p>
  291. <b>¥<% if (m.material_tax) { %><% if (m.m_tax_tp) { %><%- m.m_tax_tp || 0 %><% } else { %><%- m.m_tp || 0 %><% } %><% } else { %>0<% } %></b>
  292. </td>
  293. <% } %>
  294. <% if ((openMaterialTax && !allMaterialTax) || !openMaterialTax) { %>
  295. <td>
  296. <p class="mb-0">信息价(含建筑税)</p>
  297. <b>¥<% if (!m.material_tax) { %><%- m.rate_tp || 0 %><% } else { %>0<% } %></b>
  298. </td>
  299. <% } %>
  300. </tr>
  301. <% } %>
  302. <% if (materialColShow[1].checked) { %>
  303. <tr>
  304. <td>
  305. <p class="mb-0">指数法价差费用</p>
  306. <b>¥<%= m.ex_tp !== null ? ctx.helper.round(m.ex_tp, m.decimal.tp) : 0 %></b>
  307. </td>
  308. <td>
  309. <p class="mb-0">指数法(含建筑税)</p>
  310. <b>¥<%= m.ex_tp !== null ? ctx.helper.round(ctx.helper.mul(m.ex_tp, 1+m.exponent_rate/100), m.decimal.tp) : 0 %></b>
  311. </td>
  312. </tr>
  313. <% } %>
  314. <% if (m.curAuditors && m.curAuditors.length > 0 && m.status == auditMaterialConst.status.checking && m.curAuditors.find(x => { return x.aid === ctx.session.sessionUser.accountId})) { %>
  315. <tr>
  316. <td colspan="2">
  317. <a class="btn btn-block btn-success" href="/wap/tender/<%- m.tid %>/measure/material/<%- m.order %>">审批本期</a>
  318. </td>
  319. </tr>
  320. <% } %>
  321. </tbody></table>
  322. </dd>
  323. <% } %>
  324. </dl>
  325. </div>
  326. </div>
  327. </div>
  328. <!--底栏菜单-->
  329. <nav class="fixed-bottom navbar-dark bg-light border-top">
  330. <ul class="nav nav-fill my-2">
  331. <li class="nav-item">
  332. <a class="nav-link text-muted show-loading" href="/wap/dashboard"><i class="fa fa-check-square-o"></i> 待审批</a>
  333. </li>
  334. <li class="nav-item">
  335. <a class="nav-link active show-loading" href="/wap/subproj"><i class="fa fa-list-ul"></i> 项目</a>
  336. </li>
  337. </ul>
  338. </nav>
  339. </div>
  340. <!-- JS. -->
  341. <script src="/public/js/jquery/jquery-3.2.1.min.js"></script>
  342. <script src="/public/js/popper/popper.min.js"></script>
  343. <script src="/public/js/bootstrap/bootstrap.min.js"></script>
  344. <script src="/public/js/cookies.js"></script>
  345. <script src="/public/js/toastr.min.js"></script>
  346. <script src="/public/js/wap/global.js"></script>
  347. <script type="text/javascript">
  348. //4 标段期数计量进度//
  349. var myChart = echarts.init(document.getElementById('chartContainer4'));
  350. var option = {
  351. color: ['#e9af68','#57b7b6','#e4575a','#959eac','#6699FF',
  352. '#d38b70','#8fb7cf','#cd5c5c','#ffa500','#40e0d0',
  353. '#1e90ff','#ff6347','#7b68ee','#00fa9a','#ffd700',
  354. '#5c616b','#ff6666','#3cb371','#b8860b','#30e0e0'],
  355. title : {
  356. text: ''
  357. },
  358. tooltip : {
  359. trigger: 'axis'
  360. },
  361. calculable : true,
  362. legend: {
  363. data:['本期合同计量','本期数量变更计量','截止上期累计完成','本期完成计量','完成度']
  364. },
  365. dataZoom: [
  366. {show: true,start: 0, end: 100}
  367. ],
  368. xAxis : [
  369. {
  370. type : 'category',
  371. splitLine : {show : true},
  372. data : [
  373. <% for (const s of stagesEcharts) {%>
  374. '第<%- s.order %>期',
  375. <% } %>
  376. ]
  377. }
  378. ],
  379. yAxis : [
  380. {
  381. type : 'value',
  382. name : '金额',
  383. position:'left',
  384. axisLabel : {
  385. formatter: '{value} 元'
  386. },
  387. splitArea : {show : true},
  388. splitLine : {show : true},
  389. },
  390. {
  391. type : 'value',
  392. name:'完成度',
  393. axisLabel : {
  394. formatter: '{value} %'
  395. },
  396. position: 'right',
  397. splitArea : {show : false},
  398. splitLine : {show : false},
  399. }
  400. ],
  401. series : [
  402. {
  403. name:'本期合同计量',
  404. type:'bar',
  405. tooltip : {trigger: 'item',formatter: "{b} <br/>{a}:{c}元"},
  406. stack: '合同',
  407. data:[
  408. <% for (const s of stagesEcharts) {%>
  409. <%- s.contract_tp %>,
  410. <% } %>
  411. ]
  412. },
  413. {
  414. name:'本期数量变更计量',
  415. type:'bar',
  416. tooltip : {trigger: 'item',formatter: "{b} <br/>{a}:{c}元"},
  417. stack: '变更',
  418. data:[
  419. <% for (const s of stagesEcharts) {%>
  420. <%- s.qc_tp %>,
  421. <% } %>
  422. ]
  423. },
  424. {
  425. name:'截止上期累计完成',
  426. type:'bar',
  427. tooltip : {trigger: 'item',formatter: "{b} <br/>{a}:{c}元"},
  428. stack: '完成',
  429. data:[
  430. <% for (const s of stagesEcharts) {%>
  431. <%- ctx.helper.add(s.pre_contract_tp, s.pre_qc_tp) %>,
  432. <% } %>
  433. ]
  434. },
  435. {
  436. name:'本期完成计量',
  437. type:'bar',
  438. tooltip : {trigger: 'item',formatter: "{b} <br/>{a}:{c}元"},
  439. stack: '完成',
  440. data:[
  441. <% for (const s of stagesEcharts) {%>
  442. <%- ctx.helper.sum([s.contract_tp, s.qc_tp, s.pc_tp]) %>,
  443. <% } %>
  444. ]
  445. },
  446. {
  447. name:'完成度',
  448. type:'line',
  449. tooltip : {trigger: 'axis',formatter: "{b}占总标段<br/>{a}:{c} %"},
  450. yAxisIndex: 1,
  451. data:[
  452. <% for (const s of stagesEcharts) {%>
  453. <%- ctx.helper.mul(ctx.helper.div(ctx.helper.sum([s.contract_tp, s.qc_tp, s.pc_tp]), tender.sum, 2), 100) %>,
  454. <% } %>
  455. ]
  456. },
  457. ]
  458. };
  459. // 为echarts对象加载数据
  460. myChart.setOption(option);
  461. //4 标段期数计量进度//
  462. //3 标段月进度//
  463. // 基于准备好的dom,初始化echarts图表
  464. var myChart = echarts.init(document.getElementById('chartContainer3'));
  465. var option = {
  466. color:["#e9af68","#57b7b6"],
  467. title : {
  468. text: ''
  469. },
  470. tooltip : {
  471. trigger: 'axis',
  472. formatter: function (params, ticket, callback) {
  473. let sHint = '';
  474. for (const param of params) {
  475. if (sHint !== '') {
  476. sHint += '<br>';
  477. }
  478. if (sHint === '' && param.name !== '') {
  479. sHint = param.name + '<br>';
  480. }
  481. sHint += '<span style="display:inline-block;margin-right:5px;border-radius:10px;width:9px;height:9px;background-color:' + param.color +'"></span>';
  482. if (param.data) {
  483. sHint += param.seriesName + ': ' + param.data + ' %';
  484. } else {
  485. sHint += param.seriesName + ': -';
  486. }
  487. }
  488. return sHint;
  489. },
  490. },
  491. legend: {
  492. data:['截止本月完成','本月完成']
  493. },
  494. toolbox: {
  495. show : true,
  496. feature : {
  497. magicType : {show: true, type: ['line', 'bar']}
  498. }
  499. },
  500. dataZoom : {
  501. show : true,
  502. start : 50,
  503. end : 100
  504. },
  505. xAxis : [
  506. {
  507. type : 'category',
  508. boundaryGap : true,
  509. data : [
  510. <% for (const mp of monthProgress) { %>
  511. '<%- mp.month %>',
  512. <% } %>
  513. ]
  514. }
  515. ],
  516. yAxis : [
  517. {
  518. type : 'value',
  519. axisLabel : {
  520. formatter: '{value} %'
  521. },
  522. splitArea : {show : true}
  523. }
  524. ],
  525. series : [
  526. {
  527. name:'截止本月完成',
  528. type:'line',
  529. itemStyle: {
  530. normal: {
  531. lineStyle: {
  532. shadowColor : 'rgba(0,0,0,0.4)',
  533. shadowBlur: 5,
  534. shadowOffsetX: 3,
  535. shadowOffsetY: 3
  536. }
  537. }
  538. },
  539. data:[
  540. <% for (const mp of monthProgress) { %>
  541. <%- mp.end_ratio %>,
  542. <% } %>
  543. ]
  544. },
  545. {
  546. name:'本月完成',
  547. type:'line',
  548. itemStyle: {
  549. normal: {
  550. lineStyle: {
  551. shadowColor : 'rgba(0,0,0,0.4)',
  552. shadowBlur: 5,
  553. shadowOffsetX: 3,
  554. shadowOffsetY: 3
  555. }
  556. }
  557. },
  558. data:[
  559. <% for (const mp of monthProgress) { %>
  560. <%- mp.ratio %>,
  561. <% } %>
  562. ]
  563. }
  564. ]
  565. };
  566. // 为echarts对象加载数据
  567. myChart.setOption(option);
  568. //3 标段月进度//
  569. </script>
  570. <script>
  571. $(document).ready(function () {
  572. if (window.location.hash && window.location.hash !== '#gaikuang') {
  573. $('#gaikuang').removeClass('active');
  574. $('.nav-item a[href="#gaikuang"]').removeClass('active');
  575. }
  576. if (window.location.hash && window.location.hash === '#yufukuan') {
  577. $('#yufukuan').addClass('active');
  578. $('.nav-item a[href="#yufukuan"]').addClass('active');
  579. } else if (window.location.hash && window.location.hash === '#ledger') {
  580. $('#ledger').addClass('active');
  581. $('.nav-item a[href="#ledger"]').addClass('active');
  582. } else if (window.location.hash && window.location.hash === '#tzxiuding') {
  583. $('#tzxiuding').addClass('active');
  584. $('.nav-item a[href="#tzxiuding"]').addClass('active');
  585. } else if (window.location.hash && window.location.hash === '#jlqi') {
  586. $('#jlqi').addClass('active');
  587. $('.nav-item a[href="#jlqi"]').addClass('active');
  588. } else if (window.location.hash && window.location.hash === '#biangeng') {
  589. $('#biangeng').addClass('active');
  590. $('.nav-item a[href="#biangeng"]').addClass('active');
  591. } else if (window.location.hash && window.location.hash === '#material') {
  592. $('#material').addClass('active');
  593. $('.nav-item a[href="#material"]').addClass('active');
  594. }
  595. $('.show-content').on('click', function () {
  596. $(this).parents('td').html($(this).data('content'));
  597. });
  598. const $container = $('.nav-tabs-scrollable');
  599. const $activeTab = $container.find('.nav-tabs .nav-link.active');
  600. if ($activeTab) {
  601. $container.animate({
  602. scrollLeft: $activeTab.position().left + $container.scrollLeft() - 20
  603. }, 300); // 300 毫秒平滑滚动
  604. }
  605. });
  606. </script>
  607. </body>
  608. </html>