s2b.ejs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. <% include ./sub_menu.ejs %>
  2. <div class="panel-content">
  3. <div class="panel-title">
  4. <div class="title-main">
  5. <h2>API设置</h2>
  6. </div>
  7. </div>
  8. <div class="content-wrap">
  9. <div class="c-body">
  10. <div class="sjs-height-0">
  11. <nav class="nav nav-tabs m-3" role="tablist">
  12. <a class="nav-item nav-link active" data-toggle="tab" href="#user-purview" role="tab">业务配置</a>
  13. <a class="nav-item nav-link" data-toggle="tab" href="#multi-limit" role="tab">联动计量配置</a>
  14. <a class="nav-item nav-link" data-toggle="tab" href="#user-list" role="tab">标段列表</a>
  15. </nav>
  16. <div class="m-3">
  17. <div class="tab-content">
  18. <div class="tab-pane active" id="user-purview">
  19. <div class="col-4">
  20. <legend>工序报验</legend>
  21. <table class="table table-hover table-bordered">
  22. <thead><tr><th>值</th><th>名称</th><th>允许计量</th><th>计量比例</th></tr></thead>
  23. <tbody id="gxby_list">
  24. <% for (const s of ctx.session.sessionProject.gxby_status) { %>
  25. <tr>
  26. <td><%- s.value %></td>
  27. <td><%- s.name %></td>
  28. <td>
  29. <div class="form-check form-check-inline">
  30. <input class="form-check-input" type="checkbox" id="inlineCheckbox-g<%- s.value %>" <% if (s.limit) { %>checked<% } %> status="<%- s.value %>" onchange="updateStatusLimit(this, 'gxby');">
  31. <label class="form-check-label" for="inlineCheckbox-g<%- s.value %>"></label>
  32. </div>
  33. </td>
  34. <% if (s.ratio === undefined) { %>
  35. <td>-</td>
  36. <% } else { %>
  37. <td>
  38. <div class="input-group input-group-sm" style="width:90px">
  39. <input type="number" class="form-control" max="100" min="0" step="2" value="<%- s.ratio || 0 %>" status="<%- s.value %>" onchange="updateStatusRatio(this, 'gxby');">
  40. <div class="input-group-append">
  41. <span class="input-group-text">%</span>
  42. </div>
  43. </div>
  44. </td>
  45. <% } %>
  46. </tr>
  47. <% } %>
  48. </tbody>
  49. </table>
  50. <legend>档案管理</legend>
  51. <table class="table table-hover table-bordered">
  52. <thead><tr><th>值</th><th>名称</th><th>允许计量</th><th>计量比例</th></tr></thead>
  53. <% for (const s of ctx.session.sessionProject.dagl_status) { %>
  54. <tbody id="dagl_list">
  55. <tr>
  56. <td><%- s.value %></td>
  57. <td><%- s.name %></td>
  58. <td>
  59. <div class="form-check form-check-inline">
  60. <input class="form-check-input" type="checkbox" id="inlineCheckbox-d<%- s.value %>" <% if (s.limit) { %>checked<% } %> status="<%- s.value %>" onchange="updateStatusLimit(this, 'dagl');">
  61. <label class="form-check-label" for="inlineCheckbox-d<%- s.value %>"></label>
  62. </div>
  63. </td>
  64. <% if (s.ratio === undefined) { %>
  65. <td>-</td>
  66. <% } else { %>
  67. <td>
  68. <div class="input-group input-group-sm" style="width:90px">
  69. <input type="number" class="form-control" max="100" min="0" step="2" value="<%- s.ratio || 0 %>" status="<%- s.value %>" onchange="updateStatusRatio(this, 'dagl');">
  70. <div class="input-group-append">
  71. <span class="input-group-text">%</span>
  72. </div>
  73. </div>
  74. </td>
  75. <% } %>
  76. </tr>
  77. <% } %>
  78. </tbody>
  79. </table>
  80. </div>
  81. </div>
  82. <div class="tab-pane" id="multi-limit">
  83. <div class="row">
  84. <div class="col-3">
  85. <div class="d-flex flex-row">
  86. <button class="btn btn-sm btn-light text-primary" id="addLimit"><i class="fa fa-plus" aria-hidden="true"></i> 新增配置</button>
  87. </div>
  88. <div>
  89. <dl class="list-group" id="limit-list">
  90. <% for (const limit of limitList) { %>
  91. <dd class="list-group-item" limitId="<%- limit.limit_id %>">
  92. <div class="d-flex justify-content-between align-items-center table-file" limitId="<%- limit.limit_id %>">
  93. <div><%- limit.name %>%></div>
  94. <div class="btn-group-table" style="display: none;">
  95. <a href="javascript: void(0);" class="mr-1" data-toggle="tooltip" data-placement="bottom" data-original-title="编辑" name="renameLimit"><i class="fa fa-pencil fa-fw"></i></a>
  96. <a href="javascript: void(0);" class="mr-1" data-toggle="tooltip" data-placement="bottom" data-original-title="删除" name="delLimit"><i class="fa fa-trash-o fa-fw text-danger"></i></a>
  97. </div>
  98. </div>
  99. </dd>
  100. <% } %>
  101. </dl>
  102. </div>
  103. </div>
  104. <div class="col-9">
  105. <div class="d-flex flex-row">
  106. <div class="p-2">
  107. <a href="javascript: void(0);" class="btn btn-sm btn-light text-primary" id="add-lo"><i class="fa fa-plus" aria-hidden="true"></i> 新增判断</a>
  108. </div>
  109. </div>
  110. <div>
  111. <table class="table table-sm table-bordered">
  112. <tr class="text-center"><th width="10%">允许计量</th><th width="40%">条件</th><th width="10%">计量下限</th><th width="10%">计量上限</th><th width="20%">超限提示</th><th width="10%">操作</th></tr>
  113. <tbody id="limitOptions">
  114. </tbody>
  115. </table>
  116. </div>
  117. </div>
  118. </div>
  119. </div>
  120. <div class="tab-pane" id="user-list">
  121. <!--没有标段数据-->
  122. <% if (tenders.length === 0) { %>
  123. <div class="jumbotron m-3">
  124. <h3 class="display-6">没有标段数据</h3>
  125. </div>
  126. <% } else { %>
  127. <table class="table table-hover table-bordered">
  128. <thead>
  129. <tr>
  130. <th class="text-center" >名称</th>
  131. <th class="text-center" >计量模式</th>
  132. <th class="text-center" >计量期数</th>
  133. <th class="text-center" >创建人</th>
  134. <th class="text-center" >标段创建时间/期审批时间</th>
  135. <th class="text-center">工序报验</th>
  136. <th class="text-center">档案管理</th>
  137. </tr>
  138. </thead>
  139. <% for (const t of tenders) { %>
  140. <tr tid="<%- t.id %>">
  141. <td><%- t.name %></td>
  142. <td><%- t.measure_type_str %></td>
  143. <td><%- t.stage_count_str %></td>
  144. <td><%- t.user_str %></td>
  145. <td><%- ctx.moment(t.show_time).format('YYYY-MM-DD HH:mm:ss') %></td>
  146. <td class="text-center">
  147. <div class="form-check form-check-inline">
  148. <input class="form-check-input" type="checkbox" id="inlineCheckbox1" <% if (t.s2b_gxby_check) { %>checked<% } %> name="gxby_check" onchange="updateS2bSetting(this);" value="<%- t.s2b_gxby_check %>">
  149. <input type="hidden" name="_csrf_j" value="<%= ctx.csrf %>">
  150. <label class="form-check-label" for="inlineCheckbox1">检查计量</label>
  151. </div>
  152. <div class="form-check form-check-inline">
  153. <input class="form-check-input" type="checkbox" id="inlineCheckbox2" <% if (t.s2b_gxby_limit) { %>checked<% } %> name="gxby_limit" onchange="updateS2bSetting(this);" value="<%- t.s2b_gxby_limit %>">
  154. <input type="hidden" name="_csrf_j" value="<%= ctx.csrf %>">
  155. <label class="form-check-label" for="inlineCheckbox2">限制上报</label>
  156. </div>
  157. </td>
  158. <td class="text-center">
  159. <div class="form-check form-check-inline">
  160. <input class="form-check-input" type="checkbox" id="inlineCheckbox3" <% if (t.s2b_dagl_check) { %>checked<% } %> name="dagl_check" onchange="updateS2bSetting(this);" value="<%- t.s2b_dagl_check %>">
  161. <input type="hidden" name="_csrf_j" value="<%= ctx.csrf %>">
  162. <label class="form-check-label" for="inlineCheckbox3">检查计量</label>
  163. </div>
  164. <div class="form-check form-check-inline">
  165. <input class="form-check-input" type="checkbox" id="inlineCheckbox4" <% if (t.s2b_dagl_limit) { %>checked<% } %> name="dagl_limit" onchange="updateS2bSetting(this);" value="<%- t.s2b_dagl_limit %>">
  166. <input type="hidden" name="_csrf_j" value="<%= ctx.csrf %>">
  167. <label class="form-check-label" for="inlineCheckbox4">限制上报</label>
  168. </div>
  169. </td>
  170. </tr>
  171. <% } %>
  172. </table>
  173. <% } %>
  174. </div>
  175. </div>
  176. </div>
  177. </div>
  178. </div>
  179. </div>
  180. </div>
  181. <script>
  182. const limitList = JSON.parse('<%- JSON.stringify(limitList) %>');
  183. const locInfo = {
  184. gxby_status: { check: 'num', field: 'gxby_status', alias: '工序报验'},
  185. dagl_status: { check: 'num', field: 'dagl_status', alias: '档案管理'},
  186. gxby_date_ago: { check: 'date', field: 'gxby_date', alias: '完工日期 距今'},
  187. }
  188. const updateStatusLimit = function (obj, type) {
  189. const data = { type };
  190. data.status = parseInt(obj.getAttribute('status'));
  191. data.limit = obj.checked;
  192. postData('api/update-status', data, function(result) {
  193. }, function () {
  194. obj.checked = !obj.checked;
  195. });
  196. }
  197. const updateStatusRatio = function (obj, type) {
  198. const data = { type };
  199. data.status = parseInt(obj.getAttribute('status'));
  200. try {
  201. data.ratio = parseFloat(obj.value);
  202. if (data.ratio > 100 || data.ratio < 0) throw '请输入0-100间的数字';
  203. } catch (error) {
  204. toastr.warning('请输入0-100间的数字');
  205. return;
  206. }
  207. postData('api/update-status', data, function(result) {
  208. obj.org = result.ratio;
  209. obj.value = result.ratio;
  210. }, function () {
  211. obj.value = obj.org;
  212. });
  213. }
  214. const updateS2bSetting = function (obj) {
  215. try {
  216. const name = obj.getAttribute('name');
  217. const tid = parseInt(obj.parentNode.parentNode.parentNode.getAttribute('tid'));
  218. if (!name) return;
  219. const data = { tid };
  220. data[name] = obj.checked;
  221. postData('api/update', data, function() {
  222. obj.setAttribute('value', obj.checked);
  223. }, function () {
  224. obj.checked = obj.getAttribute('value') === true;
  225. })
  226. } catch (err) {
  227. obj.checked = obj.getAttribute('value') === true;
  228. }
  229. }
  230. $(() => {
  231. autoFlashHeight();
  232. })
  233. </script>