index_archive.ejs 42 KB

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