s2b.ejs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  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. <th class="text-center">联动计量</th>
  138. </tr>
  139. </thead>
  140. <% for (const t of tenders) { %>
  141. <tr tid="<%- t.id %>">
  142. <td><%- t.name %></td>
  143. <td><%- t.measure_type_str %></td>
  144. <td><%- t.stage_count_str %></td>
  145. <td><%- t.user_str %></td>
  146. <td><%- ctx.moment(t.show_time).format('YYYY-MM-DD HH:mm:ss') %></td>
  147. <td class="text-center">
  148. <div class="form-check form-check-inline">
  149. <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 %>">
  150. <input type="hidden" name="_csrf_j" value="<%= ctx.csrf %>">
  151. <label class="form-check-label" for="inlineCheckbox1">检查计量</label>
  152. </div>
  153. <div class="form-check form-check-inline">
  154. <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 %>">
  155. <input type="hidden" name="_csrf_j" value="<%= ctx.csrf %>">
  156. <label class="form-check-label" for="inlineCheckbox2">限制上报</label>
  157. </div>
  158. </td>
  159. <td class="text-center">
  160. <div class="form-check form-check-inline">
  161. <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 %>">
  162. <input type="hidden" name="_csrf_j" value="<%= ctx.csrf %>">
  163. <label class="form-check-label" for="inlineCheckbox3">检查计量</label>
  164. </div>
  165. <div class="form-check form-check-inline">
  166. <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 %>">
  167. <input type="hidden" name="_csrf_j" value="<%= ctx.csrf %>">
  168. <label class="form-check-label" for="inlineCheckbox4">限制上报</label>
  169. </div>
  170. </td>
  171. <td class="text-center">
  172. <div class="form-check form-check-inline">
  173. <input class="form-check-input" type="checkbox" id="inlineCheckbox5" <% if (t.s2b_multi_check) { %>checked<% } %> name="multi_check" onchange="updateS2bSetting(this);" value="<%- t.s2b_multi_check %>">
  174. <input type="hidden" name="_csrf_j2" value="<%= ctx.csrf %>">
  175. <label class="form-check-label" for="inlineCheckbox5">检查计量</label>
  176. </div>
  177. <div class="form-check form-check-inline">
  178. <input class="form-check-input" type="checkbox" id="inlineCheckbox6" <% if (t.s2b_multi_limit) { %>checked<% } %> name="multi_limit" onchange="updateS2bSetting(this);" value="<%- t.s2b_multi_limit %>">
  179. <input type="hidden" name="_csrf_j2" value="<%= ctx.csrf %>">
  180. <label class="form-check-label" for="inlineCheckbox6">限制上报</label>
  181. </div>
  182. <div class="form-check form-check-inline">
  183. <a class="btn btn-sm btn-primary" href="/setting/api/tender/<%- t.id %>" target="_blank">详细配置</a>
  184. </div>
  185. </td>
  186. </tr>
  187. <% } %>
  188. </table>
  189. <% } %>
  190. </div>
  191. </div>
  192. </div>
  193. </div>
  194. </div>
  195. </div>
  196. </div>
  197. <script>
  198. const limitList = JSON.parse('<%- JSON.stringify(limitList) %>');
  199. const locInfo = {
  200. gxby_status: { check: 'num', field: 'gxby_status', alias: '工序报验', source: '3f'},
  201. dagl_status: { check: 'num', field: 'dagl_status', alias: '档案管理', source: '3f'},
  202. gxby_date_ago: { check: 'date', field: 'gxby_date', alias: '完工日期 距今', source: '3f'},
  203. pre_used_date_ago: { check: 'date', field: 'pre_used_time', alias: '首次计量日期 距今', source: 'jl'},
  204. pre_update_date_ago: { check: 'date', field: 'pre_update_time', alias: '最后计量日期 距今', source: 'jl'},
  205. }
  206. const updateStatusLimit = function (obj, type) {
  207. const data = { type };
  208. data.status = parseInt(obj.getAttribute('status'));
  209. data.limit = obj.checked;
  210. postData('api/update-status', data, function(result) {
  211. }, function () {
  212. obj.checked = !obj.checked;
  213. });
  214. }
  215. const updateStatusRatio = function (obj, type) {
  216. const data = { type };
  217. data.status = parseInt(obj.getAttribute('status'));
  218. try {
  219. data.ratio = parseFloat(obj.value);
  220. if (data.ratio > 100 || data.ratio < 0) throw '请输入0-100间的数字';
  221. } catch (error) {
  222. toastr.warning('请输入0-100间的数字');
  223. return;
  224. }
  225. postData('api/update-status', data, function(result) {
  226. obj.org = result.ratio;
  227. obj.value = result.ratio;
  228. }, function () {
  229. obj.value = obj.org;
  230. });
  231. }
  232. const updateS2bSetting = function (obj) {
  233. try {
  234. const name = obj.getAttribute('name');
  235. const tid = parseInt(obj.parentNode.parentNode.parentNode.getAttribute('tid'));
  236. if (!name) return;
  237. const data = { tid };
  238. data[name] = obj.checked;
  239. postData('api/update', data, function() {
  240. obj.setAttribute('value', obj.checked);
  241. }, function () {
  242. obj.checked = obj.getAttribute('value') === true;
  243. })
  244. } catch (err) {
  245. obj.checked = obj.getAttribute('value') === true;
  246. }
  247. }
  248. $(() => {
  249. autoFlashHeight();
  250. })
  251. </script>