info.ejs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. <% include ./material_sub_menu.ejs %>
  2. <div class="panel-content">
  3. <div class="panel-title">
  4. <div class="title-main d-flex justify-content-between">
  5. <% include ./material_sub_mini_menu.ejs %>
  6. <div>
  7. <% if ((material.status === auditConst.status.uncheck || material.status === auditConst.status.checkNo) && ctx.session.sessionUser.accountId === material.user_id) { %>
  8. <div class="d-inline-block">
  9. <a href="javascript: void(0);" id="add" class="btn btn-sm btn-light text-primary" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="新增材料"><i class="fa fa-plus" aria-hidden="true"></i></a>
  10. <a href="javascript: void(0);" id="del" class="btn btn-sm btn-light text-primary" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="删除材料"><i class="fa fa-remove" aria-hidden="true"></i></a>
  11. <a href="javascript: void(0);" id="down-move" class="btn btn-sm btn-light text-primary" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="下移"><i class="fa fa-arrow-down" aria-hidden="true"></i></a>
  12. <a href="javascript: void(0);" id="up-move" class="btn btn-sm btn-light text-primary" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="上移"><i class="fa fa-arrow-up" aria-hidden="true"></i></a>
  13. </div>
  14. <% } %>
  15. <div class="d-inline-block ml-3">
  16. 本期调差计量期:第<span class="mx-2"><%= material.s_order.split(',').join(',') %></span>期
  17. <span id="qi-month">
  18. <% if (months.length > 0) { %>
  19. <span class="mx-2 text-muted">/</span>本期月信息价:<% let monthstr = ''; for (const m of months) { monthstr += parseInt(m.split('-')[1]) + '月,'} %><%- monthstr.substring(0,monthstr.length-1) %>
  20. <% } %>
  21. </span>
  22. </div>
  23. <div class="d-inline-block ml-2" >
  24. <a href="#cc-digits" class="btn btn-sm btn-light text-primary" data-toggle="modal" data-placement="bottom" title="小数位数" data-target="#cc-digits" ><i class="fa fa-cog" aria-hidden="true"></i></a>
  25. </div>
  26. <div class="d-inline-block">
  27. <a class="btn btn-sm btn-light">
  28. <div class="custom-control custom-checkbox">
  29. <input type="checkbox" class="custom-control-input" id="bills0_list">
  30. <label class="custom-control-label text-primary" for="bills0_list">过滤数量为0的工料</label>
  31. </div>
  32. </a>
  33. <% if ((material.status === auditConst.status.uncheck || material.status === auditConst.status.checkNo) && ctx.session.sessionUser.accountId === material.user_id) { %>
  34. <a href="#import-info" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#import-info">导入信息价</a>
  35. <% } %>
  36. </div>
  37. </div>
  38. <div class="ml-auto">
  39. <% if (ctx.session.sessionProject.page_show.openMaterialChecklist && material.order === material.highOrder) { %>
  40. <a href="/tender/<%- ctx.tender.id %>/measure/material/<%- material.highOrder %>/checklist" class="btn btn-sm btn-outline-primary">批量设置调差清单</a>
  41. <% } %>
  42. </div>
  43. </div>
  44. </div>
  45. <div class="content-wrap pr-46">
  46. <div class="c-header p-0">
  47. </div>
  48. <div class="row w-100 sub-content">
  49. <div class="col-12 c-body">
  50. <!--上部分-->
  51. <div class="sjs-height-1 row w-100 sub-content">
  52. <div class="c-body" id="left-view" style="width: 100%">
  53. <!--上部分-->
  54. <% if (material.is_stage_self) { %>
  55. <div class="c-body" style="width: 100%">
  56. <ul class="nav nav-tabs" id="myTab" role="tablist">
  57. <% for (const [index,ms] of materialStageData.entries()) { %>
  58. <li class="nav-item">
  59. <a class="nav-link change-material-stage <% if (index === 0) { %>active<% } %>" data-msid="<%- ms.id %>" data-toggle="tab" href="javascript:void(0);" role="tab" aria-selected="<% if (index === 0) { %>true<% } else { %>false<% } %>">第<%- ms.order %>期</a>
  60. </li>
  61. <% } %>
  62. </ul>
  63. <div class="sjs-height-material" id="material-spread"></div>
  64. </div>
  65. <% } else { %>
  66. <div class="sjs-height-1" id="material-spread">
  67. </div>
  68. <% } %>
  69. </div>
  70. <div class="c-body" id="right-view" style="width: 30%">
  71. <div class="resize-x" id="right-spr" r-Type="width" div1="#left-view" div2="#right-view" title="调整大小" a-type="percent"><!--调整左右高度条--></div>
  72. <div class="tab-content" style="width: 100%">
  73. <div id="month-tab" class="tab-pane active">
  74. <% if ((material.status === auditConst.status.uncheck || material.status === auditConst.status.checkNo) && ctx.session.sessionUser.accountId === material.user_id) {%>
  75. <div class="sjs-bar-1">
  76. <div class="pb-1">
  77. <a href="#add-month" data-toggle="modal" data-target="#add-month" class="btn btn-sm btn-primary">创建月信息价</a>
  78. <a href="#remove-month" data-toggle="modal" data-target="#remove-month" class="btn btn-sm btn-outline-danger">移除月信息价</a>
  79. </div>
  80. </div>
  81. <% } %>
  82. <div class="sjs-height-material-month" id="material-month-spread">
  83. </div>
  84. </div>
  85. <div id="material-tab" class="tab-pane">
  86. </div>
  87. </div>
  88. </div>
  89. </div>
  90. <!--下部分-->
  91. <div class="bcontent-wrap mt-1" id="main-bottom">
  92. <div id="main-resize" class="resize-y" r-Type="height" div1=".sjs-height-1" div2=".bcontent-wrap" title="调整大小"><!--调整上下高度条--></div>
  93. <div class="row">
  94. <div class="col-6">
  95. <div class="bc-bar mb-1">
  96. <ul class="nav nav-tabs">
  97. <li class="nav-item">
  98. <a class="nav-link active" data-toggle="tab" href="#yhly" role="tab">应耗来源</a>
  99. </li>
  100. </ul>
  101. </div>
  102. <div class="tab-content">
  103. <div class="tab-pane active" id="yhly">
  104. <div class="sp-wrap" id="material-source-spread">
  105. <!--<table class="table table-sm table-bordered">-->
  106. <!--<tr class="text-center">-->
  107. <!--<th width="80px">清单编号</th>-->
  108. <!--<th width="">名称</th>-->
  109. <!--<th width="80px">单位</th>-->
  110. <!--<th width="100px">本期应耗</th>-->
  111. <!--</tr>-->
  112. <!--<tr>-->
  113. <!--<td class="text-left">403-1-a</td>-->
  114. <!--<td class="text-left">光圆钢筋(HPB235、HPB300)</td>-->
  115. <!--<td class="text-center">kg</td>-->
  116. <!--<td class="text-right">50.256</td>-->
  117. <!--</tr>-->
  118. <!--<tr>-->
  119. <!--<td class="text-left">403-1-b</td>-->
  120. <!--<td class="text-left">带肋钢筋(HRB335、HRB400)</td>-->
  121. <!--<td class="text-center">kg</td>-->
  122. <!--<td class="text-right">60.258</td>-->
  123. <!--</tr>-->
  124. <!--<tr>-->
  125. <!--<td class="text-left">403-2-a</td>-->
  126. <!--<td class="text-left">光圆钢筋(HPB235、HPB300)</td>-->
  127. <!--<td class="text-center">kg</td>-->
  128. <!--<td class="text-right">40</td>-->
  129. <!--</tr>-->
  130. <!--</table>-->
  131. </div>
  132. </div>
  133. </div>
  134. </div>
  135. <div class="col-6">
  136. <div class="bc-bar mb-1">
  137. <ul class="nav nav-tabs">
  138. <li class="nav-item">
  139. <a class="nav-link active" data-toggle="tab" href="#fysum" role="tab">费用统计</a>
  140. </li>
  141. <% if (material.is_stage_self) { %>
  142. <li class="nav-item">
  143. <a class="nav-link " data-toggle="tab" href="#qidetail" role="tab">各期统计</a>
  144. </li>
  145. <% } %>
  146. <li class="nav-item ml-2">
  147. <div class="ml-2">
  148. <!--调整税率-->
  149. <div class="d-inline-flex">
  150. <div class="input-group input-group-sm">
  151. <div class="input-group-prepend">
  152. <span class="input-group-text" id="basic-addon1">建筑增值税</span>
  153. </div>
  154. <input id="rateInput" class="form-control form-control-sm" <% if (material.material_tax || material.readOnly || material.editForAudit) { %>disabled<% } %> type="number" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" min="0" step="1" max="100" value="<%- material.rate %>">
  155. <% if (!material.readOnly || !material.editForAudit || !material.material_tax) { %>
  156. <div class="dropdown-menu">
  157. <a class="dropdown-item changeRate" href="javascript:void(0);" data-value="9">9%</a>
  158. <a class="dropdown-item changeRate" href="javascript:void(0);" data-value="10">10%</a>
  159. <a class="dropdown-item changeRate" href="javascript:void(0);" data-value="11">11%</a>
  160. </div>
  161. <% } %>
  162. <!--<select class="form-control form-control-sm col-1" id="changeRate" <% if (material.material_tax) { %>disabled<% } %>>-->
  163. <!--<% if (!material.readOnly) { %>-->
  164. <!--<option value="9" <% if(material.rate === 9) { %>selected<% } %>>9%</option>-->
  165. <!--<option value="10" <% if(material.rate === 10) { %>selected<% } %>>10%</option>-->
  166. <!--<option value="11" <% if(material.rate === 11) { %>selected<% } %>>11%</option>-->
  167. <!--<% } else { %>-->
  168. <!--<option value="<%= material.rate %>" selected><%= material.rate %>%</option>-->
  169. <!--<% } %>-->
  170. <!--</select>-->
  171. </div>
  172. </div>
  173. </div>
  174. </li>
  175. </ul>
  176. </div>
  177. <div class="tab-content">
  178. <div class="tab-pane active" id="fysum">
  179. <div class="sp-wrap">
  180. <% if (!material.material_tax && !old_had_tax) { %>
  181. <table class="table table-sm table-bordered">
  182. <tr><th rowspan="2"></th><th colspan="2" class="text-center">信息价</th><th colspan="2" class="text-center">价格指数</th></tr>
  183. <tr class="text-center"><th>本期金额</th><th>截止本期金额</th>
  184. <th>本期金额
  185. <a href="javascript:void(0);" id="ex_expr" data-toggle="tooltip" data-placement="bottom" title="本期价差:<%- material.ex_expr ? material.ex_expr : '' %>"><i class="fa fa-question-circle-o"></i></a></th>
  186. <th>截止本期金额</th></tr>
  187. <tr id="tp_set"><td>材料价差费用</td>
  188. <td class="text-center"><%= material.m_tp !== null ? ctx.helper.round(material.m_tp, material.decimal.tp) : null %></td>
  189. <td class="text-center"><%= material.m_tp !== null || material.pre_tp !== null ? ctx.helper.add(material.pre_tp, ctx.helper.round(material.m_tp, material.decimal.tp)) : null %></td>
  190. <td class="text-center"><%= material.ex_tp !== null ? ctx.helper.round(material.ex_tp, material.decimal.tp) : null %></td>
  191. <td class="text-center"><%= material.ex_tp !== null || material.ex_pre_tp !== null ? ctx.helper.add(material.ex_pre_tp, ctx.helper.round(material.ex_tp, material.decimal.tp)) : null %></td>
  192. </tr>
  193. <tr id="rate_set"><td>材料价差费用(含建筑税)</td>
  194. <td class="text-center"><%= material.m_tp !== null ? ctx.helper.round(ctx.helper.mul(material.m_tp, 1+material.rate/100), material.decimal.tp) : null %></td>
  195. <td class="text-center"><%= material.m_tp !== null || pre_tp_hs !== null ? ctx.helper.add(pre_tp_hs, ctx.helper.round(ctx.helper.mul(material.m_tp, 1+material.rate/100), material.decimal.tp)) : null %></td>
  196. <td class="text-center"><%= material.ex_tp !== null ? ctx.helper.round(ctx.helper.mul(material.ex_tp, 1+material.exponent_rate/100), material.decimal.tp) : null %></td>
  197. <td class="text-center"><%= material.ex_tp !== null || ex_pre_tp_hs !== null ? ctx.helper.add(ex_pre_tp_hs, ctx.helper.round(ctx.helper.mul(material.ex_tp, 1+material.exponent_rate/100), material.decimal.tp)) : null %></td>
  198. </tr>
  199. </table>
  200. <% } else { %>
  201. <table class="table table-sm table-bordered">
  202. <tr><th rowspan="2"></th><th colspan="2" class="text-center">信息价</th><th colspan="2" class="text-center">价格指数</th></tr>
  203. <tr class="text-center"><th>本期金额</th><th>截止本期金额</th>
  204. <th>本期金额
  205. <a href="javascript:void(0);" id="ex_expr" data-toggle="tooltip" data-placement="bottom" title="本期价差:<%- material.ex_expr ? material.ex_expr : '' %>"><i class="fa fa-question-circle-o"></i></a></th>
  206. <th>截止本期金额</th></tr>
  207. <tr id="tp_set"><td>材料价差费用</td>
  208. <td class="text-center"><%= material.m_tp !== null ? ctx.helper.round(material.m_tp, material.decimal.tp) : null %></td>
  209. <td class="text-center"><%= material.m_tp !== null || material.pre_tp !== null ? ctx.helper.add(material.pre_tp, ctx.helper.round(material.m_tp, material.decimal.tp)) : null %></td>
  210. <td class="text-center"><%= material.ex_tp !== null ? ctx.helper.round(material.ex_tp, material.decimal.tp) : null %></td>
  211. <td class="text-center"><%= material.ex_tp !== null || material.ex_pre_tp !== null ? ctx.helper.add(material.ex_pre_tp, ctx.helper.round(material.ex_tp, material.decimal.tp)) : null %></td>
  212. </tr>
  213. <tr id="tax_rate_set"><td>材料价差费用(含材料税)</td>
  214. <td class="text-center"><%= material.material_tax ? (material.m_tax_tp !== null ? material.m_tax_tp : null) : '-' %></td>
  215. <td class="text-center"><%= material.material_tax ? (material.m_tax_tp !== null || material.m_tax_pre_tp !== null ? ctx.helper.add(material.m_tax_pre_tp, material.m_tax_tp) : null) : material.m_tax_pre_tp %></td>
  216. <td class="text-center">-</td>
  217. <td class="text-center">-</td>
  218. </tr>
  219. <tr id="rate_set"><td>材料价差费用(含建筑税)</td>
  220. <td class="text-center"><%= !material.material_tax ? (material.m_tp !== null ? ctx.helper.round(ctx.helper.mul(material.m_tp, 1+material.rate/100), material.decimal.tp) : null) : '-' %></td>
  221. <td class="text-center"><%= !material.material_tax ? (material.m_tp !== null || pre_tp_hs !== null ? ctx.helper.add(pre_tp_hs, ctx.helper.round(ctx.helper.mul(material.m_tp, 1+material.rate/100), material.decimal.tp)) : null) : pre_tp_hs !== null ? pre_tp_hs : '-' %></td>
  222. <td class="text-center"><%= material.ex_tp !== null ? ctx.helper.round(ctx.helper.mul(material.ex_tp, 1+material.exponent_rate/100), material.decimal.tp) : null %></td>
  223. <td class="text-center"><%= material.ex_tp !== null || ex_pre_tp_hs !== null ? ctx.helper.add(ex_pre_tp_hs, ctx.helper.round(ctx.helper.mul(material.ex_tp, 1+material.exponent_rate/100), material.decimal.tp)) : null %></td>
  224. </tr>
  225. </table>
  226. <% } %>
  227. </div>
  228. </div>
  229. <% if (material.is_stage_self) { %>
  230. <div class="tab-pane" id="qidetail">
  231. <div class="sp-wrap">
  232. <table class="table table-bordered">
  233. <thead>
  234. <tr class="text-center"><th colspan="<% if (material.material_tax) { %>3<% } else { %>2<% } %>">期明细</th></tr>
  235. <tr><th class="text-center">期数</th>
  236. <th class="text-center">本期调差金额</th>
  237. <% if (material.material_tax) { %>
  238. <th class="text-center">本期调差金额(材料税)</th>
  239. <% } %>
  240. </tr>
  241. </thead>
  242. <tbody id="materialStageTable">
  243. <% for (const ms of materialStageData) { %>
  244. <tr><td>第<%- ms.order %>期</td><td class="text-center"><%- ms.m_tp !== null ? ms.m_tp : null %></td>
  245. <% if (material.material_tax) { %>
  246. <td class="text-center"><%- ms.m_tax_tp !== null ? ms.m_tax_tp : null %></td>
  247. <% } %>
  248. </tr>
  249. <% } %>
  250. <tr><td>合计</td><td class="text-center"><%- material.m_tp %></td>
  251. <% if (material.material_tax) { %>
  252. <td class="text-center"><%- material.m_tax_tp %></td>
  253. <% } %>
  254. </tr>
  255. </tbody>
  256. </table>
  257. </div>
  258. </div>
  259. <% } %>
  260. </div>
  261. </div>
  262. </div>
  263. </div>
  264. </div>
  265. <div class="side-menu">
  266. <!--右侧菜单-->
  267. <ul class="nav flex-column right-nav">
  268. <% if (!material.is_stage_self) { %>
  269. <li class="nav-item">
  270. <a class="nav-link" content="#month-tab" href="javascript: void(0);">月信息价</a>
  271. </li>
  272. <% } %>
  273. <li class="nav-item">
  274. <a class="nav-link" content="#material-tab" href="javascript: void(0);">工料机库</a>
  275. </li>
  276. </ul>
  277. </div>
  278. </div>
  279. </div>
  280. </div>
  281. <div style="display: none">
  282. <img src="/public/images/ellipsis_horizontal.png" id="ellipsis-icon" />
  283. <img src="/public/images/icon-ok.png" id="icon-ok" />
  284. </div>
  285. <!--<link rel="stylesheet" href="/public/css/jquery-ui/datepicker.css">-->
  286. <!--<script src="/public/js/jquery-ui/datepicker.js"></script>-->
  287. <!--<script src="/public/js/jquery-ui/datepicker-zh-CN.js"></script>-->
  288. <script>
  289. const materialType = JSON.parse('<%- materialType %>');
  290. const isStageSelf = parseInt('<%- material.is_stage_self %>');
  291. const editTaxPermission = <%- material.editTaxPermission ? material.editTaxPermission : false %>;
  292. const editForAudit = <%- material.editForAudit %>;
  293. let materialBillsData = JSON.parse(unescape('<%- escape(JSON.stringify(materialBillsData)) %>'));
  294. let materialStageData = isStageSelf ? JSON.parse(unescape('<%- escape(JSON.stringify(materialStageData)) %>')) : [];
  295. let materialStageBillsData = isStageSelf ? JSON.parse(unescape('<%- escape(JSON.stringify(materialStageBillsData)) %>')) : [];
  296. const materialListData = JSON.parse(unescape('<%- escape(JSON.stringify(materialListData)) %>'));
  297. const readOnly = <%- material.readOnly %>;
  298. const materialID = <%- material.id %>;
  299. const materialTax = <%- material.material_tax %>;
  300. let materialRate = parseInt('<%- material.rate %>');
  301. const materialIsNewQty = parseInt('<%- material.is_new_qty %>');
  302. const qtySource = parseInt('<%- material.qty_source %>');
  303. const qtySourceValueConst = JSON.parse(unescape('<%- escape(JSON.stringify(qtySourceValueConst)) %>'));
  304. const materialDecimal = JSON.parse(unescape('<%- escape(JSON.stringify(material.decimal)) %>'));
  305. let m_tp = <%= material.m_tp !== null ? material.m_tp : 0 %>;
  306. let ex_tp = <%= material.ex_tp !== null ? material.ex_tp : 0 %>;
  307. const pre_tp = <%= material.pre_tp !== null ? material.pre_tp : 0 %>;
  308. const ex_pre_tp = <%= material.ex_pre_tp !== null ? material.ex_pre_tp : 0 %>;
  309. const pre_tp_hs = <%= pre_tp_hs !== null ? pre_tp_hs : 0 %>;
  310. const ex_pre_tp_hs = <%= ex_pre_tp_hs !== null ? ex_pre_tp_hs : 0 %>;
  311. let m_tax_tp = <%= material.m_tax_tp !== null ? material.m_tax_tp : 0 %>;
  312. const m_tax_pre_tp = <%= material.m_tax_pre_tp !== null ? material.m_tax_pre_tp : 0 %>;
  313. let calcBase = JSON.parse(unescape('<%- escape(JSON.stringify(calcBase)) %>'));
  314. let calcBaseList = [];
  315. if (isStageSelf) {
  316. calcBaseList = JSON.parse(unescape('<%- escape(JSON.stringify(calcBase)) %>'));
  317. calcBase = calcBaseList[0].calcBase;
  318. }
  319. const months = JSON.parse('<%- JSON.stringify(months) %>');
  320. let monthsList = JSON.parse('<%- JSON.stringify(monthsList) %>');
  321. const gljLists = JSON.parse(unescape('<%- escape(JSON.stringify(gljLists)) %>'));
  322. const openMaterialChecklist = parseInt(<%- ctx.session.sessionProject.page_show.openMaterialChecklist %>);
  323. let materialListData2, materialChecklistData, notJoinList, ledger, curLedgerData, pos, curPosData, gclGatherData, gclList, selfList, gclGatherListData;
  324. </script>