index.ejs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <div class="panel-sidebar">
  2. <div class="panel-title">
  3. <div class="title-bar">
  4. <h2 class="">项目节 <a href="#upload" data-toggle="modal" data-target="#upload" class="pull-right mr-3" title="导入项目节"><i class="fa fa-upload"></i></a></h2>
  5. </div>
  6. </div>
  7. <div class="scrollbar-auto">
  8. <div class="nav-box">
  9. <ul id="templateNode" class="ztree"></ul>
  10. </div>
  11. </div>
  12. </div>
  13. <div class="panel-content">
  14. <div class="panel-title">
  15. <div class="title-main d-flex justify-content-between">
  16. <div>
  17. <div class="btn-group">
  18. <%= selectNode.code %> <%= selectNode.name %>
  19. </div>
  20. <div class="btn-group ml-3">
  21. <input id="nodeMatchCode" data-toggle="tooltip" data-placement="bottom" title="<%- selectNode.match_type ? nodeConst.matchTypeStr[selectNode.match_type] : '' %>" type="text" class="m-0 form-control form-control-sm" placeholder="填写绑定的分项节点" value="<%= selectNode.match_key%>" org-value="<%= selectNode.match_key%>">
  22. </div>
  23. <a href="javascript:void(0)" data-toggle="popover" data-content="默认都以分项编号为绑定依据,预留费用请输入分项名称。"><i class="fa fa-question-circle"></i></a>
  24. </div>
  25. <div>
  26. <a href="#add-index" data-toggle="modal" data-target="#add-index" class="btn btn-primary btn-sm pull-right">添加指标</a>
  27. </div>
  28. </div>
  29. </div>
  30. <div class="content-wrap">
  31. <div class="c-body">
  32. <div class="sjs-height-1">
  33. <table class="table table-bordered">
  34. <tr>
  35. <th>指标编号</th>
  36. <th>指标名称</th>
  37. <th colspan="2">指标单位</th>
  38. <th>计算规则</th>
  39. <th>设置规则</th>
  40. </tr>
  41. <% for (const index of selectIndex) { %>
  42. <tr index_id="<%= index.id %>">
  43. <td><%= index.code %></td>
  44. <td><%= index.name %></td>
  45. <td><%= index.unit1 %></td>
  46. <td><%= index.unit2 %></td>
  47. <td name="rule"><%= index.rule %></td>
  48. <td name="parse_rule"><%= index.parse_rule %><a name="setRule" href="#set-count" data-toggle="modal" data-target="#set-count" value="<%- index.calc_rule %>"><i class="fa fa-cog"></i></a></td>
  49. </tr>
  50. <% } %>
  51. </table>
  52. <div class="container-fluid">
  53. <legend class="mt-5">参数设置</legend>
  54. <div class="row">
  55. <div class="col-6">
  56. <div class="card">
  57. <div class="card-body">
  58. <h6 class="card-title"><b><%= selectNode.code %> <%= selectNode.name %></b> 参数</h6>
  59. <table class="table table-sm table-bordered table-hover">
  60. <tr><th>参数名称</th><th>绑定分项<br><small class="text-muted">(为空则在指标库填写具体值)</small></th></tr>
  61. <% for (const n of nodeParams) { %>
  62. <tr>
  63. <td code="<%= n.code %>"><%= n.name %></td>
  64. <td>
  65. <% if (n.match_type !== paramConst.matchType.node_default) { %>
  66. <div class="input-group input-group-sm">
  67. <div class="input-group-prepend">
  68. <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" value="<%= n.match_num %>">
  69. <% if (n.match_num) { %>
  70. <%- paramConst.matchNumStr[n.match_num] %>
  71. <% } else { %>
  72. 为空
  73. <% } %>
  74. </button>
  75. <div class="dropdown-menu">
  76. <% for (const mn in paramConst.matchNumStr) { %>
  77. <a class="dropdown-item" href="javascript: void(0)" name="paramMatchNum" value="<%- mn %>"><%- paramConst.matchNumStr[mn] %></a>
  78. <% } %>
  79. </div>
  80. </div>
  81. <input name="paramMatchCode" type="text" class="form-control" aria-label="Text input with dropdown button" value="<%- n.match_key %>" org-value="<%- n.match_key %>">
  82. </div>
  83. <% } else { %>
  84. <small class="text-muted">(自动绑定)</small>
  85. <% } %>
  86. </td>
  87. </tr>
  88. <% } %>
  89. </table>
  90. </div>
  91. </div>
  92. </div>
  93. <div class="col-6">
  94. <div class="card border-danger">
  95. <div class="card-body">
  96. <h6 class="card-title text-center">全局参数 </h6>
  97. <table class="table table-sm table-bordered table-hover">
  98. <tr><th colspan="2" class="text-center"><b class="text-danger">*全局参数影响所有指标,谨慎修改</b></th></tr>
  99. <tr><th>参数名称</th><th>绑定分项<br><small class="text-muted">(为空则在指标库填写具体值)</small></th></tr>
  100. <% for (const p of globalParams) { %>
  101. <tr>
  102. <td code="<%= p.code %>"><%= p.name %></td>
  103. <td>
  104. <% if (p.match_type !== paramConst.matchType.fixed_id) { %>
  105. <div class="input-group input-group-sm">
  106. <div class="input-group-prepend">
  107. <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" value="<%= p.match_num %>">
  108. <% if (p.match_num) { %>
  109. <%- paramConst.matchNumStr[p.match_num] %>
  110. <% } else { %>
  111. 为空
  112. <% } %>
  113. </button>
  114. <div class="dropdown-menu">
  115. <% for (const mn in paramConst.matchNumStr) { %>
  116. <a class="dropdown-item" href="javascript: void(0)" name="paramMatchNum" value="<%- mn %>"><%- paramConst.matchNumStr[mn] %></a>
  117. <% } %>
  118. </div>
  119. </div>
  120. <input name="paramMatchCode" type="text" class="form-control" aria-label="Text input with dropdown button">
  121. </div>
  122. <% } else { %>
  123. <small class="text-muted">(自动绑定)</small>
  124. <% } %>
  125. </td>
  126. </tr>
  127. <% } %>
  128. </table>
  129. </div>
  130. </div>
  131. </div>
  132. </div>
  133. </div>
  134. </div>
  135. </div>
  136. </div>
  137. </div>
  138. <script type="text/javascript">
  139. const treeSetting = {
  140. treeId: 'template',
  141. view: {showIcon: false},
  142. data: {
  143. key: {
  144. name: 'text',
  145. }
  146. }
  147. };
  148. const selectNode = '<%- selectNode.node_id %>';
  149. const treeNode = '<%- nodes %>';
  150. $(document).ready(function(){
  151. const loadText = function (arr) {
  152. for (const a of arr) {
  153. a.text = a.code + ' ' + a.name;
  154. if (a.match_key) {
  155. a.text = a.text + ' (' + a.match_key + ')';
  156. }
  157. if (a.children && a.children.length > 0) {
  158. loadText(a.children);
  159. }
  160. }
  161. }
  162. const treeNodeData = treeNode !== '' ? JSON.parse(treeNode) : [];
  163. loadText(treeNodeData);
  164. const treeObj = $.fn.zTree.init($("#templateNode"), treeSetting, treeNodeData);
  165. const node = treeObj.getNodeByParam('node_id', selectNode);
  166. treeObj.selectNode(node);
  167. });
  168. </script>
  169. <script type="text/javascript">
  170. $('#nodeMatchCode').tooltip('show')
  171. </script>