index_archive.ejs 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876
  1. <link href="/public/css/bootstrap/select2.min.css" rel="stylesheet" />
  2. <link rel="stylesheet" href="/public/css/bootstrap/select2-bootstrap4.min.css">
  3. <script src="/public/js/bootstrap/select2.min.js"></script>
  4. <% if (stg_id === -1) {%>
  5. <% include ../tender/tender_sub_menu.ejs %>
  6. <% } else { %>
  7. <% include ../stage/stage_sub_menu.ejs %>
  8. <% } %>
  9. <div class="panel-content">
  10. <div class="panel-title">
  11. <div class="title-main d-flex">
  12. <% if(stg_id === -1) { %>
  13. <% include ../tender/tender_sub_mini_menu.ejs %>
  14. <% } else { %>
  15. <% include ../stage/stage_sub_mini_menu.ejs %>
  16. <% } %>
  17. <div>
  18. <% if (stg_id === -1) { %>
  19. <div class="d-inline-block">
  20. <div class="dropdown">
  21. <button class="btn btn-sm btn-light dropdown-toggle text-primary" type="button" id="bizDropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  22. 计量期
  23. </button>
  24. <div class="dropdown-menu" aria-labelledby="bizDropdownMenuButton" id="select-item">
  25. <a class="dropdown-item" href="javascript:void(0);" data-type="stage" style="display: none">计量期</a>
  26. <a class="dropdown-item" href="javascript:void(0);" data-type="change">变更令</a>
  27. <a class="dropdown-item" href="javascript:void(0);" data-type="change_project">变更立项</a>
  28. <a class="dropdown-item" href="javascript:void(0);" data-type="change_apply">变更申请</a>
  29. <a class="dropdown-item" href="javascript:void(0);" data-type="change_plan">变更方案</a>
  30. <a class="dropdown-item" href="javascript:void(0);" data-type="advance">预付款</a>
  31. <a class="dropdown-item" href="javascript:void(0);" data-type="material">材料调差</a>
  32. </div>
  33. </div>
  34. </div>
  35. <% } %>
  36. <div class="d-inline-block">
  37. <div class="dropdown" id="divSelectableStages">
  38. <button class="btn btn-sm btn-light dropdown-toggle text-primary" type="button" id="btnCurrentStage" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
  39. <div class="dropdown-menu" aria-labelledby="dropdownMenuButton" id="optionSelectableStages"></div>
  40. </div>
  41. </div>
  42. <div class="d-inline-block">
  43. <style>
  44. .select2-container {
  45. display: inline-block!important;
  46. height: 27px;
  47. }
  48. .select2-container--bootstrap4 .select2-selection--single {
  49. height: calc(.84em + .75rem + 2px) !important;
  50. }
  51. .select2-container--bootstrap4 .select2-selection {
  52. background-color: #f8f9fa;
  53. /*border-color: #f8f9fa;*/
  54. border: 1px solid #f8f9fa;
  55. }
  56. .select2-container--bootstrap4 .select2-selection--single .select2-selection__rendered:focus{
  57. box-shadow: 0 0 0 0.2rem rgba(216,217,219,.5);
  58. }
  59. .select2-container--bootstrap4 .select2-selection--single .select2-selection__rendered:hover {
  60. background-color: #e2e6ea;
  61. border-color: #dae0e5;
  62. }
  63. .select2-container--bootstrap4 .select2-selection--single .select2-selection__rendered {
  64. line-height: calc(.84em + .75rem);
  65. color: #007bff!important;
  66. border-radius: 0.2rem;
  67. /*background-color: #f8f9fa;*/
  68. /*border-color: #f8f9fa;*/
  69. }
  70. .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b {
  71. border-color: #007bff transparent transparent transparent;
  72. border-width: 4px 3.7px 0;
  73. }
  74. .select2-search--dropdown .select2-search__field {
  75. padding: 0.175rem 0.5rem;
  76. }
  77. </style>
  78. <div id="divSelectableChanges" class="" style="display: none;min-width: 90px;">
  79. <select id="optionSelectableChanges" class="form-control form-control-sm"></select>
  80. </div>
  81. <!-- <div class="dropdown" id="divSelectableChanges" style="display: none">-->
  82. <!-- <button class="btn btn-sm btn-light dropdown-toggle text-primary" type="button" id="btnCurrentChange" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>-->
  83. <!-- <div class="dropdown-menu" aria-labelledby="dropdownMenuButton" id="optionSelectableChanges"></div>-->
  84. <!-- </div>-->
  85. </div>
  86. <div class="d-inline-block">
  87. <div class="dropdown" style="display: none" id="divSelectableAdvances">
  88. <button class="btn btn-sm btn-light dropdown-toggle text-primary" type="button" id="btnCurrentAdvance" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
  89. <div class="dropdown-menu" aria-labelledby="allPrepayButton" id="optionSelectableAdvances"></div>
  90. </div>
  91. </div>
  92. <div class="d-inline-block">
  93. <div class="dropdown" id="divSelectableAdvancePays" style="display:none;">
  94. <button class="btn btn-sm btn-light dropdown-toggle text-primary" type="button" id="btnCurrentAdvancePay" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
  95. <div class="dropdown-menu" aria-labelledby="dropdownMenuButton" id="optionSelectableAdvancePays"></div>
  96. </div>
  97. </div>
  98. <div class="d-inline-block">
  99. <div class="dropdown" id="divSelectableMaterials" style="display:none;">
  100. <button class="btn btn-sm btn-light dropdown-toggle text-primary" type="button" id="btnCurrentMaterial" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
  101. <div class="dropdown-menu" aria-labelledby="dropdownMenuButton" id="optionSelectableMaterials"></div>
  102. </div>
  103. </div>
  104. <% if (ctx.session.sessionUser.accountId === ctx.tender.data.user_id) { %>
  105. <div class="d-inline-block">
  106. <button id="file-msg" class="btn btn-sm btn-primary" type="button" onclick="sendReportFileMsg();" <% if (!needFileMsg.stage.valid) { %>style="display: none;"<% } %>>同步档案系统</button>
  107. </div>
  108. <% } %>
  109. </div>
  110. <div>
  111. </div>
  112. </div>
  113. </div>
  114. <div class="content-wrap">
  115. <div class="c-header p-0"></div>
  116. <div class="c-body">
  117. <div class="row">
  118. <div class="col-auto pr-0" id="tree-view" style="width: 17%">
  119. <div class="sjs-height-1" style="overflow: auto">
  120. <div class="text-center"></div>
  121. <ul id="rptTplTree" class="ztree"></ul>
  122. </div>
  123. </div>
  124. <div class="col-auto" id="main-view" style="width: 83%">
  125. <div class="resize-x" id="right-spr" r-Type="width" div1="#tree-view" div2="#main-view" title="调整大小" a-type="percent"><!--调整左右高度条--></div>
  126. <div class="toolsbar-f d-flex justify-content-between position-absolute bg-light m-1">
  127. <div class="print-toolsbar p-0">
  128. <div class="panel">
  129. <div class="panel-body" id="print_div">
  130. <div class="btn-group" role="group">
  131. <button class="btn btn-outline-primary btn-sm" type="button" id="print_file">
  132. <i class="fa fa-print"></i><br>
  133. 打印 <span class="badge badge-primary">0</span>
  134. </button>
  135. </div>
  136. </div>
  137. </div>
  138. <div class="panel">
  139. <div class="panel-body" id="export_div">
  140. <div class="btn-group" role="group">
  141. <button class="btn btn-outline-primary btn-sm" type="button" id="download_file">
  142. <i class="fa fa-download"></i><br>
  143. 下载 <span class="badge badge-primary">0</span>
  144. </button>
  145. </div>
  146. </div>
  147. </div>
  148. <div class="panel">
  149. <div class="panel-body">
  150. <div class="btn-group" role="group">
  151. <div>
  152. <button id="currentDrpArchiveSelect" type="button" class="btn btn-outline-primary btn-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
  153. <div class="dropdown-menu" aria-labelledby="btnGroupDrop1" style="min-width:112px" id="drpArchiveSelect">
  154. <!--
  155. <a class="dropdown-item" href="#">#1 2021-02-01</a>
  156. <a class="dropdown-item" href="#">#2 2021-02-27</a>
  157. <a class="dropdown-item" href="javascript: void(0);" onclick="zTreeOprObj.changeOrientation(this)">横向</a>
  158. -->
  159. </div>
  160. </div>
  161. </div>
  162. </div>
  163. <div class="panel-foot text-muted">
  164. 历史归档
  165. </div>
  166. </div>
  167. <% if(ctx.session.sessionUser.is_admin) { %>
  168. <div class="panel">
  169. <div class="panel-body" id="delete_div">
  170. <div class="btn-group mr-1" role="group">
  171. <button class="btn btn-outline-danger btn-sm" type="button" data-toggle="modal" data-target="#del-archive" id="delete_archive_btn">
  172. <i class="fa fa-remove"></i><br>
  173. 删除归档
  174. </button>
  175. </div>
  176. </div>
  177. </div>
  178. <% } %>
  179. </div>
  180. </div>
  181. <div class="print-view form-view">
  182. <div class="pageContainer sjs-height-1" id="iframe_made">
  183. <iframe src="/archive/pdf/show" class="border-0" height="100%" width="100%"></iframe>
  184. </div>
  185. </div>
  186. </div>
  187. </div>
  188. </div>
  189. </div>
  190. </div>
  191. <script src="/public/js/sub_menu.js"></script>
  192. <script src="/public/js/div_resizer.js"></script>
  193. <script>
  194. $.subMenu({
  195. menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
  196. toMenu: '#to-menu', toMiniMenu: '#to-mini-menu',
  197. key: 'menu.1.0.0',
  198. miniHint: '#sub-mini-hint', hintKey: 'menu.hint.1.0.1',
  199. callback: function (info) {
  200. if (info.mini) {
  201. $('.panel-title').addClass('fluid');
  202. $('#sub-menu').removeClass('panel-sidebar');
  203. } else {
  204. $('.panel-title').removeClass('fluid');
  205. $('#sub-menu').addClass('panel-sidebar');
  206. }
  207. autoFlashHeight();
  208. }
  209. });
  210. $.divResizer({
  211. select: '#right-spr',
  212. callback: function () {
  213. autoFlashHeight();
  214. }
  215. });
  216. </script>
  217. <script type="text/javascript"> autoFlashHeight();</script>
  218. <script src="/public/js/shares/cs_tools.js"></script>
  219. <!-- zTree -->
  220. <script type="text/javascript" src="/public/js/ztree/jquery.ztree.core.js"></script>
  221. <script type="text/javascript" src="/public/js/ztree/jquery.ztree.excheck.js"></script>
  222. <script type="text/javascript" src="/public/js/string_util_light.js"></script>
  223. <!--
  224. -->
  225. <script type="text/javascript" src="/public/js/rpt_tpl_def.js"></script>
  226. <script type="text/javascript" src="/public/js/common_ajax.js"></script>
  227. <script type="text/javascript" src="/public/js/treeDataHelper.js"></script>
  228. <script type="text/javascript" src="/public/js/ztree_common.js"></script>
  229. <script type="text/javascript" src="/public/js/storageUtil.js"></script>
  230. <script type="text/javascript" src="/public/report/js/rpt_archive.js"></script>
  231. <script type="text/javascript" src="/public/report/js/rpt_main.js"></script>
  232. <script type="text/javascript" src="/public/report/js/rpt_cfg_const.js"></script>
  233. <script type="text/javascript" src="/public/js/datepicker/datepicker.min.js"></script>
  234. <script type="text/javascript" src="/public/js/datepicker/datepicker.zh.js"></script>
  235. <!--
  236. <script type="text/javascript" src="/public/report/js/rpt_custom.js"></script>
  237. -->
  238. <script type="text/javascript">
  239. const needFileMsg = JSON.parse('<%- JSON.stringify(needFileMsg) %>');
  240. let current_stage_order = -1;
  241. let current_stage_id = -1;
  242. let current_stage_status = -1;
  243. let ARCHIVE_LIST = JSON.parse('<%- JSON.stringify(archiveList) %>');
  244. let ARCHIVE_ENCRYPTION_LIST = JSON.parse('<%- JSON.stringify(archiveEncryptionList) %>');
  245. let TOP_TREE_NODES = <%- rpt_tpl_data %>;
  246. const CUST_TREE_NODES = <%- cust_tpl_data %>;
  247. if (!(CUST_TREE_NODES.customize instanceof Array)) {
  248. CUST_TREE_NODES.customize = [];
  249. }
  250. const ORG_CUST_TREE_NODES = JSON.parse(JSON.stringify(CUST_TREE_NODES));
  251. //
  252. const PROJECT_ID = <%- project_id %>;
  253. const TENDER_ID = <%- tender_id %>;
  254. const STAGE_ID = <%- stg_id %>;
  255. const STAGE_ORDER = <%- stg_order %>;
  256. const STAGE_LIST = <%- stage_list %>;
  257. const can_netcasign = <%- can_netcasign %>;
  258. const oss_path = JSON.parse('<%- JSON.stringify(ossPath) %>');
  259. let business_type = 'stage';
  260. let CHANGE_LIST = [], current_change_id = -1, current_change_code = '';
  261. let CHANGE_ID = -1, BUSINESS_ID = -1;
  262. let current_advance_id = -1; // 预付款期id
  263. let current_advance_type = -1;// 预付款报表类型
  264. let current_material_id = -1; // 材差期id
  265. let current_material_order = -1; // 材差期order
  266. let ADVANCE_LIST = [];
  267. let MATERIAL_LIST = [];
  268. let CURRENT_SELECTED_BIZ_TYPE = '';
  269. const ADVANCE_TYPECOL = JSON.parse(unescape('<%- escape(JSON.stringify(advanceConst.typeCol)) %>'));
  270. const FOLDER_SEPERATER = '->';
  271. if (STAGE_ORDER > 0) {
  272. current_stage_order = STAGE_ORDER;
  273. current_stage_id = STAGE_ID;
  274. // current_stage_status = STAGE_STATUS;
  275. } else if (STAGE_LIST.length > 0) {
  276. for (let i = STAGE_LIST.length; i > 0; i--) {
  277. if (parseInt(STAGE_LIST[i - 1].status) === 3) {
  278. current_stage_order = STAGE_LIST[i - 1].order;
  279. current_stage_id = STAGE_LIST[i - 1].id;
  280. break;
  281. }
  282. }
  283. // current_stage_order = STAGE_LIST[STAGE_LIST.length - 1].order;
  284. // current_stage_id = STAGE_LIST[STAGE_LIST.length - 1].id;
  285. // current_stage_status = STAGE_LIST[STAGE_LIST.length - 1].status;
  286. }
  287. buildStageSelection();
  288. for (let item of TOP_TREE_NODES) {
  289. if (item.name === '通用报表') {
  290. item.name = '推荐报表';
  291. }
  292. }
  293. const ORG_TOP_TREE_NODES = JSON.parse(JSON.stringify(TOP_TREE_NODES));
  294. for (let item of TOP_TREE_NODES) {
  295. item.items = JSON.parse(item.items);
  296. if (item.items && item.items.length > 0) {
  297. for (let dtlItem of item.items) {
  298. chkAndSetNode(dtlItem);
  299. }
  300. }
  301. }
  302. for (let item of ORG_TOP_TREE_NODES) {
  303. item.items = JSON.parse(item.items);
  304. if (item.items && item.items.length > 0) {
  305. for (let dtlItem of item.items) {
  306. chkAndSetNode(dtlItem);
  307. }
  308. }
  309. }
  310. buildTplTree();
  311. function chkAndSetNode(parentItem) {
  312. if (parentItem.nodeType === 1) {
  313. parentItem.isParent = true;
  314. }
  315. if (parentItem.items) {
  316. for (let dtlItem of parentItem.items) {
  317. chkAndSetNode(dtlItem);
  318. }
  319. }
  320. }
  321. function buildTplTree() {
  322. if (TOP_TREE_NODES.length > 0) {
  323. //1. 整理模板树 (原始状态的TOP_TREE_NODES包含了推荐报表与定制表,需要分割)
  324. const individualNode = {id: 99999, name: '定制报表', pid: -1, rpt_type: 0, items: [], isParent: true};
  325. for (let tnIdx = TOP_TREE_NODES.length - 1; tnIdx >= 0; tnIdx--) {
  326. if (TOP_TREE_NODES[tnIdx].pid !== -1) {
  327. TOP_TREE_NODES[tnIdx].isParent = true;
  328. TOP_TREE_NODES[tnIdx].nodeType = 1;
  329. individualNode.items.unshift(TOP_TREE_NODES[tnIdx]);
  330. TOP_TREE_NODES.splice(tnIdx, 1);
  331. }
  332. }
  333. // 1.1 移除未被选择的模板
  334. // filterUnchkTplTreeNode(TOP_TREE_NODES[0], CUST_TREE_NODES.common);
  335. TOP_TREE_NODES.unshift(individualNode); //定制在前
  336. // filterUnchkTplTreeNode(TOP_TREE_NODES[0], CUST_TREE_NODES.customize);
  337. //2. 原始的模板树(恢复用)
  338. const individualNodeOrg = {id: 99999, name: '定制报表', pid: -1, rpt_type: 0, items: [], isParent: true};
  339. for (let tnIdx = ORG_TOP_TREE_NODES.length - 1; tnIdx >= 0; tnIdx--) {
  340. if (ORG_TOP_TREE_NODES[tnIdx].pid !== -1) {
  341. ORG_TOP_TREE_NODES[tnIdx].isParent = true;
  342. ORG_TOP_TREE_NODES[tnIdx].nodeType = 1;
  343. individualNodeOrg.items.unshift(ORG_TOP_TREE_NODES[tnIdx]);
  344. ORG_TOP_TREE_NODES.splice(tnIdx, 1);
  345. }
  346. }
  347. //ORG_TOP_TREE_NODES.push(individualNode);
  348. ORG_TOP_TREE_NODES.unshift(individualNodeOrg);
  349. }
  350. }
  351. function buildStageSelection() {
  352. if (STAGE_LIST.length === 0) {
  353. $("#optionSelectableStages")[0].style.display = 'none';
  354. } else {
  355. $("#optionSelectableStages")[0].style.display = '';
  356. $("#btnCurrentStage")[0].innerText = '第' + current_stage_order + '期';
  357. $("#optionSelectableStages").empty();
  358. if (STAGE_LIST.length > 0 && STAGE_ID < 0) {
  359. for (let i = STAGE_LIST.length; i > 0; i--) {
  360. if (parseInt(STAGE_LIST[i - 1].status) === 3 && parseInt(STAGE_LIST[i - 1].order) !== current_stage_order) {
  361. const str = '<a class="dropdown-item" style="cursor:pointer" onclick="changeCurrentStage(this)" stg_id = "' + STAGE_LIST[i - 1].id + '" stg_order="' + STAGE_LIST[i - 1].order + '">第' + STAGE_LIST[i - 1].order + '期</a>';
  362. $("#optionSelectableStages").append(str);
  363. }
  364. }
  365. }
  366. }
  367. if (STAGE_ID > 0) {
  368. $("#divSelectableStages")[0].style.display = 'none';
  369. }
  370. }
  371. // $('#divSelectableChanges').select2();
  372. function buildChangeSelection() {
  373. if (CHANGE_LIST.length === 0) {
  374. $('#optionSelectableChanges').html('');
  375. } else {
  376. let html = '';
  377. for (let i = 0; i < CHANGE_LIST.length; i++) {
  378. html += '<option value = "' + CHANGE_LIST[i].id + '">'+ CHANGE_LIST[i].code +'</option>';
  379. }
  380. $('#optionSelectableChanges').html(html);
  381. }
  382. $('#optionSelectableChanges').select2({
  383. language: 'zh-CN',
  384. theme: 'bootstrap4',
  385. selectOnClose: true,
  386. // width: '150',
  387. });
  388. $('#optionSelectableChanges').val(current_change_id ? current_change_id : '').trigger("change");
  389. // if (CHANGE_LIST.length === 0) {
  390. // $("#optionSelectableChanges")[0].style.display = 'none';
  391. // $("#btnCurrentChange")[0].innerText = '';
  392. // } else {
  393. // $("#optionSelectableChanges")[0].style.display = '';
  394. // $("#btnCurrentChange")[0].innerText = current_change_code;
  395. //
  396. // $("#optionSelectableChanges").empty();
  397. // if (CHANGE_LIST.length > 0) {
  398. // for (let i = 0; i < CHANGE_LIST.length; i++) {
  399. // if (parseInt(CHANGE_LIST[i].status) === 3 && CHANGE_LIST[i].code !== current_change_code) {
  400. // const str = '<a class="dropdown-item" style="cursor:pointer" onclick="changeCurrentChange(this)" change_id = "' + CHANGE_LIST[i].id + '" change_code = "' + CHANGE_LIST[i].code + '">' + CHANGE_LIST[i].code + '</a>';
  401. // $("#optionSelectableChanges").append(str);
  402. // }
  403. // }
  404. // }
  405. // }
  406. // if (CHANGE_ID > 0) {
  407. // $("#divSelectableChanges")[0].style.display = 'none';
  408. // }
  409. }
  410. function buildAdvanceSelection() {
  411. $('#optionSelectableAdvances').html('');
  412. $("#btnCurrentAdvance")[0].innerText = '';
  413. const advanceCols = [];
  414. for (const advance of ADVANCE_LIST) {
  415. if (advanceCols.indexOf(advance.type) === -1) {
  416. advanceCols.push(advance.type);
  417. }
  418. }
  419. for (const advanceAdj of ADVANCE_TYPECOL) {
  420. const ad = _.includes(advanceCols, advanceAdj.type);
  421. if (ad) {
  422. let dispStr = '';
  423. if (current_advance_type === -1 || current_advance_type === advanceAdj.type) {
  424. current_advance_type = advanceAdj.type;
  425. current_advance_id = -1;
  426. $("#btnCurrentAdvance")[0].innerText = advanceAdj.name;
  427. dispStr = ';display:none';
  428. }
  429. const str = `<a class="dropdown-item" style="cursor:pointer${dispStr}" onclick="changeCurrentAdvance(this)" data-type = "${advanceAdj.type}">${advanceAdj.name}</a>`;
  430. $("#optionSelectableAdvances").append(str);
  431. }
  432. }
  433. buildAdvancePaySelection(current_advance_type, true);
  434. }
  435. function changeCurrentAdvance(ele) {
  436. $('#optionSelectableAdvances a').show();
  437. $(ele).hide();
  438. current_advance_type = +ele.attributes[3].value;
  439. $('#optionSelectableAdvances').siblings('button').text($(ele).text());
  440. // BUSINESS_ID = material_id;
  441. buildAdvanceSelection();
  442. }
  443. function buildAdvancePaySelection(current_advance_type, needClick = false) {
  444. $("#optionSelectableAdvancePays").empty();
  445. $("#btnCurrentAdvancePay")[0].innerText = '';
  446. const adList = _.orderBy(_.filter(ADVANCE_LIST, { type: current_advance_type }), ['order'], ['desc']);
  447. for (const advance of adList) {
  448. let dispStr = '';
  449. if (current_advance_id === -1 || current_advance_id === advance.id) {
  450. current_advance_id = advance.id;
  451. $("#btnCurrentAdvancePay")[0].innerText = `第${advance.order}期`;
  452. dispStr = ';display:none';
  453. }
  454. const str = `<a class="dropdown-item" style="cursor:pointer${dispStr}" onclick="changeCurrentAdvancePays(this)" advance_id = "${advance.id}">第${advance.order}期</a>`;
  455. $("#optionSelectableAdvancePays").append(str);
  456. }
  457. if (needClick) {
  458. changeCurrentAdvancePays($("#optionSelectableAdvancePays a")[0], !needClick);
  459. }
  460. }
  461. function changeCurrentAdvancePays(ele, refresh = true) {
  462. $('#optionSelectableAdvancePays a').show();
  463. $(ele).hide();
  464. current_advance_id = ele ? +ele.attributes[3].value : -1;
  465. $('#optionSelectableAdvancePays').siblings('button').text($(ele).text());
  466. // BUSINESS_ID = material_id;
  467. if (refresh) buildAdvancePaySelection(current_advance_type);
  468. //还有必要触发归档报表刷新!
  469. //rptArchiveObj.onClick(null, null, rptArchiveObj.currentNode);
  470. const params = {tenderId: TENDER_ID, business_type, bzId: current_advance_id};
  471. $.bootstrapLoading.start();
  472. CommonAjax.postXsrfEx("/tender/report_api/getReportArchive4bz", params, 10000, true, getCookie('csrfToken_j'),
  473. function(result){
  474. $.bootstrapLoading.end();
  475. ARCHIVE_LIST = result.data;
  476. ARCHIVE_ENCRYPTION_LIST = result.encryptionData;
  477. TOP_TREE_NODES = JSON.parse(JSON.stringify(result.rpt_tpl_data));
  478. buildTplTree();
  479. rptArchiveObj.iniPage();
  480. }, function(err){
  481. $.bootstrapLoading.end();
  482. }, function(ex){
  483. $.bootstrapLoading.end();
  484. }
  485. );
  486. }
  487. function buildMaterialSelection() {
  488. $("#optionSelectableMaterials").empty();
  489. $("#btnCurrentMaterial")[0].innerText = '';
  490. MATERIAL_LIST.forEach((materialAdj, maIndex) => {
  491. let dispStr = '';
  492. if (current_material_id === -1 && maIndex === 0 || current_material_id === materialAdj.id) {
  493. current_material_id = materialAdj.id;
  494. $("#btnCurrentMaterial")[0].innerText = `第${materialAdj.order}期`;
  495. dispStr = ';display:none';
  496. }
  497. const str = `<a class="dropdown-item" style="cursor:pointer${dispStr}" onclick="changeCurrentMaterial(this)" material_id = "${materialAdj.id}">第${materialAdj.order}期</a>`;
  498. $("#optionSelectableMaterials").append(str);
  499. });
  500. }
  501. function changeCurrentStage(ele) {
  502. // alert('you are selecting: ' + ele.innerText);
  503. current_stage_order = parseInt(ele.attributes.stg_order.value);
  504. current_stage_id = parseInt(ele.attributes.stg_id.value);
  505. for (let i = STAGE_LIST.length; i > 0; i--) {
  506. if (parseInt(STAGE_LIST[i - 1].order) === current_stage_order) {
  507. current_stage_status = STAGE_LIST[i - 1].status;
  508. break;
  509. }
  510. }
  511. buildStageSelection();
  512. //还有必要触发归档报表刷新!
  513. //rptArchiveObj.onClick(null, null, rptArchiveObj.currentNode);
  514. const params = {prjId: PROJECT_ID, stgId: current_stage_id};
  515. $.bootstrapLoading.start();
  516. CommonAjax.postXsrfEx("/tender/report_api/getReportArchive", params, 10000, true, getCookie('csrfToken_j'),
  517. function(result){
  518. $.bootstrapLoading.end();
  519. // console.log(result);
  520. ARCHIVE_LIST = result.data;
  521. ARCHIVE_ENCRYPTION_LIST = result.encryptionData;
  522. TOP_TREE_NODES = JSON.parse(JSON.stringify(ORG_TOP_TREE_NODES));
  523. rptArchiveObj.iniPage();
  524. }, function(err){
  525. $.bootstrapLoading.end();
  526. }, function(ex){
  527. $.bootstrapLoading.end();
  528. }
  529. );
  530. }
  531. $('body').on('select2:select', '#optionSelectableChanges', function (e) {
  532. const change_id = $(this).val();
  533. const change_code = e.params.data.text;
  534. changeCurrentChange(change_id, change_code);
  535. });
  536. function changeCurrentChange(change_id, change_code) {
  537. // alert('you are selecting: ' + ele.innerText);
  538. current_change_id = change_id;
  539. current_change_code = change_code;
  540. CHANGE_ID = change_id;
  541. BUSINESS_ID = change_id;
  542. buildChangeSelection();
  543. //还有必要触发归档报表刷新!
  544. //rptArchiveObj.onClick(null, null, rptArchiveObj.currentNode);
  545. const params = {tenderId: TENDER_ID, business_type, bzId: current_change_id};
  546. $.bootstrapLoading.start();
  547. CommonAjax.postXsrfEx("/tender/report_api/getReportArchive4bz", params, 10000, true, getCookie('csrfToken_j'),
  548. function(result){
  549. $.bootstrapLoading.end();
  550. ARCHIVE_LIST = result.data;
  551. ARCHIVE_ENCRYPTION_LIST = result.encryptionData;
  552. TOP_TREE_NODES = JSON.parse(JSON.stringify(result.rpt_tpl_data));
  553. buildTplTree();
  554. rptArchiveObj.iniPage();
  555. }, function(err){
  556. $.bootstrapLoading.end();
  557. }, function(ex){
  558. $.bootstrapLoading.end();
  559. }
  560. );
  561. }
  562. function changeCurrentMaterial(ele) {
  563. $('#optionSelectableMaterials a').show();
  564. $(ele).hide();
  565. current_material_id = +ele.attributes[3].value;
  566. $('#optionSelectableMaterials').siblings('button').text($(ele).text());
  567. // BUSINESS_ID = material_id;
  568. buildMaterialSelection();
  569. //还有必要触发归档报表刷新!
  570. //rptArchiveObj.onClick(null, null, rptArchiveObj.currentNode);
  571. const params = {tenderId: TENDER_ID, business_type, bzId: current_material_id};
  572. $.bootstrapLoading.start();
  573. CommonAjax.postXsrfEx("/tender/report_api/getReportArchive4bz", params, 10000, true, getCookie('csrfToken_j'),
  574. function(result){
  575. $.bootstrapLoading.end();
  576. ARCHIVE_LIST = result.data;
  577. ARCHIVE_ENCRYPTION_LIST = result.encryptionData;
  578. TOP_TREE_NODES = JSON.parse(JSON.stringify(result.rpt_tpl_data));
  579. buildTplTree();
  580. rptArchiveObj.iniPage();
  581. }, function(err){
  582. $.bootstrapLoading.end();
  583. }, function(ex){
  584. $.bootstrapLoading.end();
  585. }
  586. );
  587. }
  588. function sendReportFileMsg() {
  589. if (!needFileMsg[business_type] || !needFileMsg[business_type].valid) return;
  590. if (business_type === 'stage') {
  591. postData('sendReportFileMsg', { sid: current_stage_id, sorder: current_stage_order }, function (result, msg) {
  592. toastr.success(msg);
  593. });
  594. } else {
  595. if (CHANGE_LIST.length === 0) {
  596. toastr.warning('暂无任何归档数据');
  597. return;
  598. }
  599. loadChangeSelect(CHANGE_LIST);
  600. $('#change-select').modal('show');
  601. }
  602. }
  603. function loadChangeSelect(changes) {
  604. const html = [];
  605. for (const c of changes) {
  606. html.push('<tr>');
  607. html.push(`<td><input cid="${c.cid || c.id}" type="checkbox" ${(c.selected ? "checked" : '')}></td>`);
  608. html.push(`<td>${c.code}</td>`);
  609. html.push(`<td>${c.name}</td>`);
  610. html.push(`<td>${moment(c.in_time).format('YYYY-MM-DD')}</td>`);
  611. html.push('</tr>');
  612. }
  613. $('#change-select-list').html(html.join(''));
  614. }
  615. $('body').on('change', '#change-select input[type=checkbox]', function() {
  616. if ($('#change-select input:checked').length > 10) {
  617. this.checked = false;
  618. toastr.warning('最多选择10条数据');
  619. }
  620. });
  621. $('body').on('click', '#change-select-ok', function() {
  622. if (!needFileMsg[business_type]) return;
  623. const select = $('#change-select input:checked');
  624. const id = [];
  625. for (const s of select) {
  626. id.push(s.getAttribute('cid'));
  627. }
  628. postData('sendOtherReportFileMsg', { id, msgType: needFileMsg[business_type].key }, function (result, msg) {
  629. toastr.success(msg);
  630. $('change-select').modal('hide');
  631. });
  632. });
  633. $(function () {
  634. //阻止事件冒泡
  635. //不仅仅要stopPropagation,还要preventDefault
  636. function pauseEvent(e){
  637. if(e.stopPropagation) e.stopPropagation();
  638. if(e.preventDefault) e.preventDefault();
  639. e.cancelBubble=true;
  640. e.returnValue=false;
  641. return false;
  642. }
  643. let pe = 0;
  644. $('#right-spr').mousedown(function (ev) {
  645. $('iframe').css('pointerEvents', 'none');
  646. let e = ev||event;
  647. pauseEvent(e);
  648. pe = 1;
  649. });
  650. $(document).mouseup(function (ev) {
  651. if(pe) {
  652. $('iframe').css('pointerEvents', 'auto');
  653. pe = 0;
  654. let e = ev||event;
  655. pauseEvent(e);
  656. }
  657. });
  658. $('#select-item a').on('click', function () {
  659. $('#select-item a').show();
  660. $(this).hide();
  661. $('#select-item').siblings('button').text($(this).text());
  662. const type = $(this).data('type');
  663. business_type = type;
  664. CHANGE_ID = -1;
  665. BUSINESS_ID = -1;
  666. current_advance_type = -1;
  667. CURRENT_SELECTED_BIZ_TYPE = '';
  668. if (type === 'stage') {
  669. $('#divSelectableStages').show();
  670. $('#divSelectableChanges').hide();
  671. $('#divSelectableAdvances').hide();
  672. $('#divSelectableAdvancePays').hide();
  673. $('#divSelectableMaterials').hide();
  674. // const info = _.find(STAGE_LIST, { order: current_stage_order });
  675. for (let i = STAGE_LIST.length; i > 0; i--) {
  676. if (parseInt(STAGE_LIST[i - 1].status) === 3) {
  677. current_stage_order = STAGE_LIST[i - 1].order;
  678. current_stage_id = STAGE_LIST[i - 1].id;
  679. break;
  680. }
  681. }
  682. // current_stage_id = info ? info.id : STAGE_LIST[i -1].id;
  683. // current_stage_order = info ? info.order : STAGE_LIST[i - 1].order;
  684. // 下列树结构重新加载
  685. //还有必要触发归档报表刷新!
  686. //rptArchiveObj.onClick(null, null, rptArchiveObj.currentNode);
  687. const params = {prjId: PROJECT_ID, stgId: current_stage_id};
  688. $.bootstrapLoading.start();
  689. ARCHIVE_LIST = [];
  690. CommonAjax.postXsrfEx("/tender/report_api/getReportArchive", params, 10000, true, getCookie('csrfToken_j'),
  691. function(result){
  692. $.bootstrapLoading.end();
  693. // console.log(result);
  694. ARCHIVE_LIST = result.data;
  695. ARCHIVE_ENCRYPTION_LIST = result.encryptionData;
  696. TOP_TREE_NODES = JSON.parse(JSON.stringify(ORG_TOP_TREE_NODES));
  697. buildStageSelection();
  698. buildTplTree();
  699. rptArchiveObj.iniPage();
  700. }, function(err){
  701. $.bootstrapLoading.end();
  702. }, function(ex){
  703. $.bootstrapLoading.end();
  704. }
  705. );
  706. } else if (_.includes(type, 'change')) {
  707. $('#divSelectableStages').hide();
  708. $('#divSelectableAdvances').hide();
  709. $('#divSelectableAdvancePays').hide();
  710. $('#divSelectableChanges').show();
  711. $('#divSelectableMaterials').hide();
  712. // 下列树结构重新加载
  713. //rptArchiveObj.onClick(null, null, rptArchiveObj.currentNode);
  714. const params = {tenderId: TENDER_ID, business_type: type};
  715. $.bootstrapLoading.start();
  716. ARCHIVE_LIST = [];
  717. // ARCHIVE_ENCRYPTION_LIST = [];
  718. // TOP_TREE_NODES = JSON.parse(JSON.stringify(ORG_TOP_TREE_NODES));
  719. // rptArchiveObj.iniPage();
  720. CommonAjax.postXsrfEx("/tender/report_api/getReportArchive4bz", params, 10000, true, getCookie('csrfToken_j'),
  721. function(result){
  722. $.bootstrapLoading.end();
  723. // console.log(result);
  724. ARCHIVE_LIST = result.data;
  725. ARCHIVE_ENCRYPTION_LIST = result.encryptionData;
  726. CHANGE_LIST = result.changes;
  727. current_change_id = CHANGE_LIST.length > 0 ? CHANGE_LIST[0].id : -1;
  728. current_change_code = CHANGE_LIST.length > 0 ? CHANGE_LIST[0].code : '';
  729. TOP_TREE_NODES = JSON.parse(JSON.stringify(result.rpt_tpl_data));
  730. CHANGE_ID = CHANGE_LIST.length > 0 ? CHANGE_LIST[0].id : -1;
  731. BUSINESS_ID = CHANGE_LIST.length > 0 ? CHANGE_LIST[0].id : -1;
  732. buildChangeSelection();
  733. buildTplTree();
  734. rptArchiveObj.iniPage();
  735. current_stage_id = result.stgId;
  736. }, function(err){
  737. $.bootstrapLoading.end();
  738. }, function(ex){
  739. $.bootstrapLoading.end();
  740. }
  741. );
  742. } else if (type === 'advance') {
  743. CURRENT_SELECTED_BIZ_TYPE = 'change_prepay'
  744. $('#divSelectableStages').hide();
  745. $('#divSelectableChanges').hide();
  746. $('#divSelectableAdvances').show();
  747. $('#divSelectableAdvancePays').show();
  748. $('#divSelectableMaterials').hide();
  749. // 下列树结构重新加载
  750. //rptArchiveObj.onClick(null, null, rptArchiveObj.currentNode);
  751. const params = {tenderId: TENDER_ID, business_type: type};
  752. $.bootstrapLoading.start();
  753. ARCHIVE_LIST = [];
  754. // ARCHIVE_ENCRYPTION_LIST = [];
  755. // TOP_TREE_NODES = JSON.parse(JSON.stringify(ORG_TOP_TREE_NODES));
  756. // rptArchiveObj.iniPage();
  757. CommonAjax.postXsrfEx("/tender/report_api/getReportArchive4bz", params, 10000, true, getCookie('csrfToken_j'),
  758. function(result){
  759. $.bootstrapLoading.end();
  760. // console.log(result);
  761. ARCHIVE_LIST = result.data;
  762. ARCHIVE_ENCRYPTION_LIST = result.encryptionData;
  763. ADVANCE_LIST = result.changes;
  764. // current_advance_id = ADVANCE_LIST.length > 0 ? ADVANCE_LIST[0].id : -1;
  765. TOP_TREE_NODES = JSON.parse(JSON.stringify(result.rpt_tpl_data));
  766. BUSINESS_ID = ADVANCE_LIST.length > 0 ? ADVANCE_LIST[0].id : -1;
  767. buildAdvanceSelection();
  768. buildTplTree();
  769. rptArchiveObj.iniPage();
  770. current_stage_id = result.stgId;
  771. }, function(err){
  772. $.bootstrapLoading.end();
  773. }, function(ex){
  774. $.bootstrapLoading.end();
  775. }
  776. );
  777. } else if (type === 'material') {
  778. $('#divSelectableStages').hide();
  779. $('#divSelectableChanges').hide();
  780. $('#divSelectableAdvances').hide();
  781. $('#divSelectableAdvancePays').hide();
  782. $('#divSelectableMaterials').show();
  783. // 下列树结构重新加载
  784. //rptArchiveObj.onClick(null, null, rptArchiveObj.currentNode);
  785. const params = {tenderId: TENDER_ID, business_type: type};
  786. $.bootstrapLoading.start();
  787. ARCHIVE_LIST = [];
  788. // ARCHIVE_ENCRYPTION_LIST = [];
  789. // TOP_TREE_NODES = JSON.parse(JSON.stringify(ORG_TOP_TREE_NODES));
  790. // rptArchiveObj.iniPage();
  791. CommonAjax.postXsrfEx("/tender/report_api/getReportArchive4bz", params, 10000, true, getCookie('csrfToken_j'),
  792. function(result){
  793. $.bootstrapLoading.end();
  794. // console.log(result);
  795. ARCHIVE_LIST = result.data;
  796. ARCHIVE_ENCRYPTION_LIST = result.encryptionData;
  797. MATERIAL_LIST = result.changes;
  798. current_material_id = MATERIAL_LIST.length > 0 ? MATERIAL_LIST[0].id : -1;
  799. TOP_TREE_NODES = JSON.parse(JSON.stringify(result.rpt_tpl_data));
  800. // BUSINESS_ID = MATERIAL_LIST.length > 0 ? MATERIAL_LIST[0].id : -1;
  801. buildMaterialSelection();
  802. buildTplTree();
  803. rptArchiveObj.iniPage();
  804. current_stage_id = result.stgId;
  805. }, function(err){
  806. $.bootstrapLoading.end();
  807. }, function(ex){
  808. $.bootstrapLoading.end();
  809. }
  810. );
  811. }
  812. if (needFileMsg[type] && needFileMsg[type].valid) {
  813. $('#file-msg').show();
  814. } else {
  815. $('#file-msg').hide();
  816. }
  817. });
  818. })
  819. rptArchiveObj.iniPage();
  820. $(document).ready(() => {
  821. $('#change-select-date').datepicker({
  822. onSelect: function(selectedDate) {
  823. const rows = $('#change-select-list tr');
  824. for (const r of rows) {
  825. const cid = $(r).find('input').attr('cid');
  826. const change = CHANGE_LIST.find(x => { return x.cid ? x.cid === cid : c.id === cid; });
  827. if (moment(selectedDate).isBefore(change.in_time)) {
  828. $(r).show();
  829. } else {
  830. $(r).hide();
  831. }
  832. }
  833. }
  834. });
  835. });
  836. </script>