index_archive.ejs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645
  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. </div>
  30. </div>
  31. </div>
  32. <div class="d-inline-block">
  33. <div class="dropdown" id="divSelectableStages">
  34. <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>
  35. <div class="dropdown-menu" aria-labelledby="dropdownMenuButton" id="optionSelectableStages"></div>
  36. </div>
  37. </div>
  38. <div class="d-inline-block">
  39. <style>
  40. .select2-container {
  41. display: inline-block!important;
  42. height: 27px;
  43. }
  44. .select2-container--bootstrap4 .select2-selection--single {
  45. height: calc(.84em + .75rem + 2px) !important;
  46. }
  47. .select2-container--bootstrap4 .select2-selection {
  48. background-color: #f8f9fa;
  49. /*border-color: #f8f9fa;*/
  50. border: 1px solid #f8f9fa;
  51. }
  52. .select2-container--bootstrap4 .select2-selection--single .select2-selection__rendered:focus{
  53. box-shadow: 0 0 0 0.2rem rgba(216,217,219,.5);
  54. }
  55. .select2-container--bootstrap4 .select2-selection--single .select2-selection__rendered:hover {
  56. background-color: #e2e6ea;
  57. border-color: #dae0e5;
  58. }
  59. .select2-container--bootstrap4 .select2-selection--single .select2-selection__rendered {
  60. line-height: calc(.84em + .75rem);
  61. color: #007bff!important;
  62. border-radius: 0.2rem;
  63. /*background-color: #f8f9fa;*/
  64. /*border-color: #f8f9fa;*/
  65. }
  66. .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b {
  67. border-color: #007bff transparent transparent transparent;
  68. border-width: 4px 3.7px 0;
  69. }
  70. .select2-search--dropdown .select2-search__field {
  71. padding: 0.175rem 0.5rem;
  72. }
  73. </style>
  74. <div id="divSelectableChanges" class="" style="display: none;">
  75. <select id="optionSelectableChanges" class="form-control form-control-sm"></select>
  76. </div>
  77. <!-- <div class="dropdown" id="divSelectableChanges" style="display: none">-->
  78. <!-- <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>-->
  79. <!-- <div class="dropdown-menu" aria-labelledby="dropdownMenuButton" id="optionSelectableChanges"></div>-->
  80. <!-- </div>-->
  81. </div>
  82. <% if (ctx.session.sessionUser.accountId === ctx.tender.data.user_id) { %>
  83. <div class="d-inline-block">
  84. <button id="file-msg" class="btn btn-sm btn-primary" type="button" onclick="sendReportFileMsg();" <% if (!needFileMsg.stage.valid) { %>style="display: none;"<% } %>>同步档案系统</button>
  85. </div>
  86. <% } %>
  87. </div>
  88. <div>
  89. </div>
  90. </div>
  91. </div>
  92. <div class="content-wrap">
  93. <div class="c-header p-0"></div>
  94. <div class="c-body">
  95. <div class="row">
  96. <div class="col-auto pr-0" id="tree-view" style="width: 17%">
  97. <div class="sjs-height-1" style="overflow: auto">
  98. <div class="text-center"></div>
  99. <ul id="rptTplTree" class="ztree"></ul>
  100. </div>
  101. </div>
  102. <div class="col-auto" id="main-view" style="width: 83%">
  103. <div class="resize-x" id="right-spr" r-Type="width" div1="#tree-view" div2="#main-view" title="调整大小" a-type="percent"><!--调整左右高度条--></div>
  104. <div class="toolsbar-f d-flex justify-content-between position-absolute bg-light m-1">
  105. <div class="print-toolsbar p-0">
  106. <div class="panel">
  107. <div class="panel-body" id="print_div">
  108. <div class="btn-group" role="group">
  109. <button class="btn btn-outline-primary btn-sm" type="button" id="print_file">
  110. <i class="fa fa-print"></i><br>
  111. 打印 <span class="badge badge-primary">0</span>
  112. </button>
  113. </div>
  114. </div>
  115. </div>
  116. <div class="panel">
  117. <div class="panel-body" id="export_div">
  118. <div class="btn-group" role="group">
  119. <button class="btn btn-outline-primary btn-sm" type="button" id="download_file">
  120. <i class="fa fa-download"></i><br>
  121. 下载 <span class="badge badge-primary">0</span>
  122. </button>
  123. </div>
  124. </div>
  125. </div>
  126. <div class="panel">
  127. <div class="panel-body">
  128. <div class="btn-group" role="group">
  129. <div>
  130. <button id="currentDrpArchiveSelect" type="button" class="btn btn-outline-primary btn-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
  131. <div class="dropdown-menu" aria-labelledby="btnGroupDrop1" style="min-width:112px" id="drpArchiveSelect">
  132. <!--
  133. <a class="dropdown-item" href="#">#1 2021-02-01</a>
  134. <a class="dropdown-item" href="#">#2 2021-02-27</a>
  135. <a class="dropdown-item" href="javascript: void(0);" onclick="zTreeOprObj.changeOrientation(this)">横向</a>
  136. -->
  137. </div>
  138. </div>
  139. </div>
  140. </div>
  141. <div class="panel-foot text-muted">
  142. 历史归档
  143. </div>
  144. </div>
  145. <% if(ctx.session.sessionUser.is_admin) { %>
  146. <div class="panel">
  147. <div class="panel-body" id="delete_div">
  148. <div class="btn-group mr-1" role="group">
  149. <button class="btn btn-outline-danger btn-sm" type="button" data-toggle="modal" data-target="#del-archive" id="delete_archive_btn">
  150. <i class="fa fa-remove"></i><br>
  151. 删除归档
  152. </button>
  153. </div>
  154. </div>
  155. </div>
  156. <% } %>
  157. </div>
  158. </div>
  159. <div class="print-view form-view">
  160. <div class="pageContainer sjs-height-1" id="iframe_made">
  161. <iframe src="/archive/pdf/show" class="border-0" height="100%" width="100%"></iframe>
  162. </div>
  163. </div>
  164. </div>
  165. </div>
  166. </div>
  167. </div>
  168. </div>
  169. <script src="/public/js/sub_menu.js"></script>
  170. <script src="/public/js/div_resizer.js"></script>
  171. <script>
  172. $.subMenu({
  173. menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
  174. toMenu: '#to-menu', toMiniMenu: '#to-mini-menu',
  175. key: 'menu.1.0.0',
  176. miniHint: '#sub-mini-hint', hintKey: 'menu.hint.1.0.1',
  177. callback: function (info) {
  178. if (info.mini) {
  179. $('.panel-title').addClass('fluid');
  180. $('#sub-menu').removeClass('panel-sidebar');
  181. } else {
  182. $('.panel-title').removeClass('fluid');
  183. $('#sub-menu').addClass('panel-sidebar');
  184. }
  185. autoFlashHeight();
  186. }
  187. });
  188. $.divResizer({
  189. select: '#right-spr',
  190. callback: function () {
  191. autoFlashHeight();
  192. }
  193. });
  194. </script>
  195. <script type="text/javascript"> autoFlashHeight();</script>
  196. <script src="/public/js/shares/cs_tools.js"></script>
  197. <!-- zTree -->
  198. <script type="text/javascript" src="/public/js/ztree/jquery.ztree.core.js"></script>
  199. <script type="text/javascript" src="/public/js/ztree/jquery.ztree.excheck.js"></script>
  200. <script type="text/javascript" src="/public/js/string_util_light.js"></script>
  201. <!--
  202. -->
  203. <script type="text/javascript" src="/public/js/rpt_tpl_def.js"></script>
  204. <script type="text/javascript" src="/public/js/common_ajax.js"></script>
  205. <script type="text/javascript" src="/public/js/treeDataHelper.js"></script>
  206. <script type="text/javascript" src="/public/js/ztree_common.js"></script>
  207. <script type="text/javascript" src="/public/js/storageUtil.js"></script>
  208. <script type="text/javascript" src="/public/report/js/rpt_archive.js"></script>
  209. <script type="text/javascript" src="/public/report/js/rpt_main.js"></script>
  210. <script type="text/javascript" src="/public/report/js/rpt_cfg_const.js"></script>
  211. <script type="text/javascript" src="/public/js/datepicker/datepicker.min.js"></script>
  212. <script type="text/javascript" src="/public/js/datepicker/datepicker.zh.js"></script>
  213. <!--
  214. <script type="text/javascript" src="/public/report/js/rpt_custom.js"></script>
  215. -->
  216. <script type="text/javascript">
  217. const needFileMsg = JSON.parse('<%- JSON.stringify(needFileMsg) %>');
  218. let current_stage_order = -1;
  219. let current_stage_id = -1;
  220. let current_stage_status = -1;
  221. let ARCHIVE_LIST = JSON.parse('<%- JSON.stringify(archiveList) %>');
  222. let ARCHIVE_ENCRYPTION_LIST = JSON.parse('<%- JSON.stringify(archiveEncryptionList) %>');
  223. let TOP_TREE_NODES = <%- rpt_tpl_data %>;
  224. const CUST_TREE_NODES = <%- cust_tpl_data %>;
  225. if (!(CUST_TREE_NODES.customize instanceof Array)) {
  226. CUST_TREE_NODES.customize = [];
  227. }
  228. const ORG_CUST_TREE_NODES = JSON.parse(JSON.stringify(CUST_TREE_NODES));
  229. //
  230. const PROJECT_ID = <%- project_id %>;
  231. const TENDER_ID = <%- tender_id %>;
  232. const STAGE_ID = <%- stg_id %>;
  233. const STAGE_ORDER = <%- stg_order %>;
  234. const STAGE_LIST = <%- stage_list %>;
  235. const can_netcasign = <%- can_netcasign %>;
  236. const oss_path = JSON.parse('<%- JSON.stringify(ossPath) %>');
  237. let business_type = 'stage';
  238. let CHANGE_LIST = [], current_change_id = -1, current_change_code = '';
  239. let CHANGE_ID = -1, BUSINESS_ID = -1;
  240. const FOLDER_SEPERATER = '->';
  241. if (STAGE_ORDER > 0) {
  242. current_stage_order = STAGE_ORDER;
  243. current_stage_id = STAGE_ID;
  244. // current_stage_status = STAGE_STATUS;
  245. } else if (STAGE_LIST.length > 0) {
  246. for (let i = STAGE_LIST.length; i > 0; i--) {
  247. if (parseInt(STAGE_LIST[i - 1].status) === 3) {
  248. current_stage_order = STAGE_LIST[i - 1].order;
  249. current_stage_id = STAGE_LIST[i - 1].id;
  250. break;
  251. }
  252. }
  253. // current_stage_order = STAGE_LIST[STAGE_LIST.length - 1].order;
  254. // current_stage_id = STAGE_LIST[STAGE_LIST.length - 1].id;
  255. // current_stage_status = STAGE_LIST[STAGE_LIST.length - 1].status;
  256. }
  257. buildStageSelection();
  258. for (let item of TOP_TREE_NODES) {
  259. if (item.name === '通用报表') {
  260. item.name = '推荐报表';
  261. }
  262. }
  263. const ORG_TOP_TREE_NODES = JSON.parse(JSON.stringify(TOP_TREE_NODES));
  264. for (let item of TOP_TREE_NODES) {
  265. item.items = JSON.parse(item.items);
  266. if (item.items && item.items.length > 0) {
  267. for (let dtlItem of item.items) {
  268. chkAndSetNode(dtlItem);
  269. }
  270. }
  271. }
  272. for (let item of ORG_TOP_TREE_NODES) {
  273. item.items = JSON.parse(item.items);
  274. if (item.items && item.items.length > 0) {
  275. for (let dtlItem of item.items) {
  276. chkAndSetNode(dtlItem);
  277. }
  278. }
  279. }
  280. buildTplTree();
  281. function chkAndSetNode(parentItem) {
  282. if (parentItem.nodeType === 1) {
  283. parentItem.isParent = true;
  284. }
  285. if (parentItem.items) {
  286. for (let dtlItem of parentItem.items) {
  287. chkAndSetNode(dtlItem);
  288. }
  289. }
  290. }
  291. function buildTplTree() {
  292. if (TOP_TREE_NODES.length > 0) {
  293. //1. 整理模板树 (原始状态的TOP_TREE_NODES包含了推荐报表与定制表,需要分割)
  294. const individualNode = {id: 99999, name: '定制报表', pid: -1, rpt_type: 0, items: [], isParent: true};
  295. for (let tnIdx = TOP_TREE_NODES.length - 1; tnIdx >= 0; tnIdx--) {
  296. if (TOP_TREE_NODES[tnIdx].pid !== -1) {
  297. TOP_TREE_NODES[tnIdx].isParent = true;
  298. TOP_TREE_NODES[tnIdx].nodeType = 1;
  299. individualNode.items.unshift(TOP_TREE_NODES[tnIdx]);
  300. TOP_TREE_NODES.splice(tnIdx, 1);
  301. }
  302. }
  303. // 1.1 移除未被选择的模板
  304. // filterUnchkTplTreeNode(TOP_TREE_NODES[0], CUST_TREE_NODES.common);
  305. TOP_TREE_NODES.unshift(individualNode); //定制在前
  306. // filterUnchkTplTreeNode(TOP_TREE_NODES[0], CUST_TREE_NODES.customize);
  307. //2. 原始的模板树(恢复用)
  308. const individualNodeOrg = {id: 99999, name: '定制报表', pid: -1, rpt_type: 0, items: [], isParent: true};
  309. for (let tnIdx = ORG_TOP_TREE_NODES.length - 1; tnIdx >= 0; tnIdx--) {
  310. if (ORG_TOP_TREE_NODES[tnIdx].pid !== -1) {
  311. ORG_TOP_TREE_NODES[tnIdx].isParent = true;
  312. ORG_TOP_TREE_NODES[tnIdx].nodeType = 1;
  313. individualNodeOrg.items.unshift(ORG_TOP_TREE_NODES[tnIdx]);
  314. ORG_TOP_TREE_NODES.splice(tnIdx, 1);
  315. }
  316. }
  317. //ORG_TOP_TREE_NODES.push(individualNode);
  318. ORG_TOP_TREE_NODES.unshift(individualNodeOrg);
  319. }
  320. }
  321. function buildStageSelection() {
  322. if (STAGE_LIST.length === 0) {
  323. $("#optionSelectableStages")[0].style.display = 'none';
  324. } else {
  325. $("#optionSelectableStages")[0].style.display = '';
  326. $("#btnCurrentStage")[0].innerText = '第' + current_stage_order + '期';
  327. $("#optionSelectableStages").empty();
  328. if (STAGE_LIST.length > 0 && STAGE_ID < 0) {
  329. for (let i = STAGE_LIST.length; i > 0; i--) {
  330. if (parseInt(STAGE_LIST[i - 1].status) === 3 && parseInt(STAGE_LIST[i - 1].order) !== current_stage_order) {
  331. 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>';
  332. $("#optionSelectableStages").append(str);
  333. }
  334. }
  335. }
  336. }
  337. if (STAGE_ID > 0) {
  338. $("#divSelectableStages")[0].style.display = 'none';
  339. }
  340. }
  341. // $('#divSelectableChanges').select2();
  342. function buildChangeSelection() {
  343. if (CHANGE_LIST.length === 0) {
  344. $('#optionSelectableChanges').html('');
  345. } else {
  346. let html = '';
  347. for (let i = 0; i < CHANGE_LIST.length; i++) {
  348. html += '<option value = "' + CHANGE_LIST[i].id + '">'+ CHANGE_LIST[i].code +'</option>';
  349. }
  350. $('#optionSelectableChanges').html(html);
  351. }
  352. $('#optionSelectableChanges').select2({
  353. language: 'zh-CN',
  354. theme: 'bootstrap4',
  355. selectOnClose: true,
  356. // width: '150',
  357. });
  358. $('#optionSelectableChanges').val(current_change_id ? current_change_id : '').trigger("change");
  359. // if (CHANGE_LIST.length === 0) {
  360. // $("#optionSelectableChanges")[0].style.display = 'none';
  361. // $("#btnCurrentChange")[0].innerText = '';
  362. // } else {
  363. // $("#optionSelectableChanges")[0].style.display = '';
  364. // $("#btnCurrentChange")[0].innerText = current_change_code;
  365. //
  366. // $("#optionSelectableChanges").empty();
  367. // if (CHANGE_LIST.length > 0) {
  368. // for (let i = 0; i < CHANGE_LIST.length; i++) {
  369. // if (parseInt(CHANGE_LIST[i].status) === 3 && CHANGE_LIST[i].code !== current_change_code) {
  370. // 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>';
  371. // $("#optionSelectableChanges").append(str);
  372. // }
  373. // }
  374. // }
  375. // }
  376. // if (CHANGE_ID > 0) {
  377. // $("#divSelectableChanges")[0].style.display = 'none';
  378. // }
  379. }
  380. function changeCurrentStage(ele) {
  381. // alert('you are selecting: ' + ele.innerText);
  382. current_stage_order = parseInt(ele.attributes.stg_order.value);
  383. current_stage_id = parseInt(ele.attributes.stg_id.value);
  384. for (let i = STAGE_LIST.length; i > 0; i--) {
  385. if (parseInt(STAGE_LIST[i - 1].order) === current_stage_order) {
  386. current_stage_status = STAGE_LIST[i - 1].status;
  387. break;
  388. }
  389. }
  390. buildStageSelection();
  391. //还有必要触发归档报表刷新!
  392. //rptArchiveObj.onClick(null, null, rptArchiveObj.currentNode);
  393. const params = {prjId: PROJECT_ID, stgId: current_stage_id};
  394. $.bootstrapLoading.start();
  395. CommonAjax.postXsrfEx("/tender/report_api/getReportArchive", params, 10000, true, getCookie('csrfToken_j'),
  396. function(result){
  397. $.bootstrapLoading.end();
  398. // console.log(result);
  399. ARCHIVE_LIST = result.data;
  400. ARCHIVE_ENCRYPTION_LIST = result.encryptionData;
  401. TOP_TREE_NODES = JSON.parse(JSON.stringify(ORG_TOP_TREE_NODES));
  402. rptArchiveObj.iniPage();
  403. }, function(err){
  404. $.bootstrapLoading.end();
  405. }, function(ex){
  406. $.bootstrapLoading.end();
  407. }
  408. );
  409. }
  410. $('body').on('select2:select', '#optionSelectableChanges', function (e) {
  411. const change_id = $(this).val();
  412. const change_code = e.params.data.text;
  413. changeCurrentChange(change_id, change_code);
  414. });
  415. function changeCurrentChange(change_id, change_code) {
  416. // alert('you are selecting: ' + ele.innerText);
  417. current_change_id = change_id;
  418. current_change_code = change_code;
  419. CHANGE_ID = change_id;
  420. BUSINESS_ID = change_id;
  421. buildChangeSelection();
  422. //还有必要触发归档报表刷新!
  423. //rptArchiveObj.onClick(null, null, rptArchiveObj.currentNode);
  424. const params = {tenderId: TENDER_ID, business_type, bzId: current_change_id};
  425. $.bootstrapLoading.start();
  426. CommonAjax.postXsrfEx("/tender/report_api/getReportArchive4bz", params, 10000, true, getCookie('csrfToken_j'),
  427. function(result){
  428. $.bootstrapLoading.end();
  429. ARCHIVE_LIST = result.data;
  430. ARCHIVE_ENCRYPTION_LIST = result.encryptionData;
  431. TOP_TREE_NODES = JSON.parse(JSON.stringify(result.rpt_tpl_data));
  432. buildTplTree();
  433. rptArchiveObj.iniPage();
  434. }, function(err){
  435. $.bootstrapLoading.end();
  436. }, function(ex){
  437. $.bootstrapLoading.end();
  438. }
  439. );
  440. }
  441. function sendReportFileMsg() {
  442. if (!needFileMsg[business_type] || !needFileMsg[business_type].valid) return;
  443. if (business_type === 'stage') {
  444. postData('sendReportFileMsg', { sid: current_stage_id, sorder: current_stage_order }, function (result, msg) {
  445. toastr.success(msg);
  446. });
  447. } else {
  448. if (CHANGE_LIST.length === 0) {
  449. toastr.warning('暂无任何归档数据');
  450. return;
  451. }
  452. loadChangeSelect(CHANGE_LIST);
  453. $('#change-select').modal('show');
  454. }
  455. }
  456. function loadChangeSelect(changes) {
  457. const html = [];
  458. for (const c of changes) {
  459. html.push('<tr>');
  460. html.push(`<td><input cid="${c.cid || c.id}" type="checkbox" ${(c.selected ? "checked" : '')}></td>`);
  461. html.push(`<td>${c.code}</td>`);
  462. html.push(`<td>${c.name}</td>`);
  463. html.push(`<td>${moment(c.in_time).format('YYYY-MM-DD')}</td>`);
  464. html.push('</tr>');
  465. }
  466. $('#change-select-list').html(html.join(''));
  467. }
  468. $('body').on('change', '#change-select input[type=checkbox]', function() {
  469. if ($('#change-select input:checked').length > 10) {
  470. this.checked = false;
  471. toastr.warning('最多选择10条数据');
  472. }
  473. });
  474. $('body').on('click', '#change-select-ok', function() {
  475. if (!needFileMsg[business_type]) return;
  476. const select = $('#change-select input:checked');
  477. const id = [];
  478. for (const s of select) {
  479. id.push(s.getAttribute('cid'));
  480. }
  481. postData('sendOtherReportFileMsg', { id, msgType: needFileMsg[business_type].key }, function (result, msg) {
  482. toastr.success(msg);
  483. $('change-select').modal('hide');
  484. });
  485. });
  486. $(function () {
  487. //阻止事件冒泡
  488. //不仅仅要stopPropagation,还要preventDefault
  489. function pauseEvent(e){
  490. if(e.stopPropagation) e.stopPropagation();
  491. if(e.preventDefault) e.preventDefault();
  492. e.cancelBubble=true;
  493. e.returnValue=false;
  494. return false;
  495. }
  496. let pe = 0;
  497. $('#right-spr').mousedown(function (ev) {
  498. $('iframe').css('pointerEvents', 'none');
  499. let e = ev||event;
  500. pauseEvent(e);
  501. pe = 1;
  502. });
  503. $(document).mouseup(function (ev) {
  504. if(pe) {
  505. $('iframe').css('pointerEvents', 'auto');
  506. pe = 0;
  507. let e = ev||event;
  508. pauseEvent(e);
  509. }
  510. });
  511. $('#select-item a').on('click', function () {
  512. $('#select-item a').show();
  513. $(this).hide();
  514. $('#select-item').siblings('button').text($(this).text());
  515. const type = $(this).data('type');
  516. business_type = type;
  517. CHANGE_ID = -1;
  518. BUSINESS_ID = -1;
  519. if (type === 'stage') {
  520. $('#divSelectableStages').show();
  521. $('#divSelectableChanges').hide();
  522. // const info = _.find(STAGE_LIST, { order: current_stage_order });
  523. for (let i = STAGE_LIST.length; i > 0; i--) {
  524. if (parseInt(STAGE_LIST[i - 1].status) === 3) {
  525. current_stage_order = STAGE_LIST[i - 1].order;
  526. current_stage_id = STAGE_LIST[i - 1].id;
  527. break;
  528. }
  529. }
  530. // current_stage_id = info ? info.id : STAGE_LIST[i -1].id;
  531. // current_stage_order = info ? info.order : STAGE_LIST[i - 1].order;
  532. // 下列树结构重新加载
  533. //还有必要触发归档报表刷新!
  534. //rptArchiveObj.onClick(null, null, rptArchiveObj.currentNode);
  535. const params = {prjId: PROJECT_ID, stgId: current_stage_id};
  536. $.bootstrapLoading.start();
  537. CommonAjax.postXsrfEx("/tender/report_api/getReportArchive", params, 10000, true, getCookie('csrfToken_j'),
  538. function(result){
  539. $.bootstrapLoading.end();
  540. // console.log(result);
  541. ARCHIVE_LIST = result.data;
  542. ARCHIVE_ENCRYPTION_LIST = result.encryptionData;
  543. TOP_TREE_NODES = JSON.parse(JSON.stringify(ORG_TOP_TREE_NODES));
  544. buildStageSelection();
  545. buildTplTree();
  546. rptArchiveObj.iniPage();
  547. }, function(err){
  548. $.bootstrapLoading.end();
  549. }, function(ex){
  550. $.bootstrapLoading.end();
  551. }
  552. );
  553. } else {
  554. $('#divSelectableStages').hide();
  555. $('#divSelectableChanges').show();
  556. // 下列树结构重新加载
  557. //rptArchiveObj.onClick(null, null, rptArchiveObj.currentNode);
  558. const params = {tenderId: TENDER_ID, business_type: type};
  559. $.bootstrapLoading.start();
  560. // ARCHIVE_LIST = [];
  561. // ARCHIVE_ENCRYPTION_LIST = [];
  562. // TOP_TREE_NODES = JSON.parse(JSON.stringify(ORG_TOP_TREE_NODES));
  563. // rptArchiveObj.iniPage();
  564. CommonAjax.postXsrfEx("/tender/report_api/getReportArchive4bz", params, 10000, true, getCookie('csrfToken_j'),
  565. function(result){
  566. $.bootstrapLoading.end();
  567. // console.log(result);
  568. ARCHIVE_LIST = result.data;
  569. ARCHIVE_ENCRYPTION_LIST = result.encryptionData;
  570. CHANGE_LIST = result.changes;
  571. current_change_id = CHANGE_LIST.length > 0 ? CHANGE_LIST[0].id : -1;
  572. current_change_code = CHANGE_LIST.length > 0 ? CHANGE_LIST[0].code : '';
  573. TOP_TREE_NODES = JSON.parse(JSON.stringify(result.rpt_tpl_data));
  574. CHANGE_ID = CHANGE_LIST.length > 0 ? CHANGE_LIST[0].id : -1;
  575. BUSINESS_ID = CHANGE_LIST.length > 0 ? CHANGE_LIST[0].id : -1;
  576. buildChangeSelection();
  577. buildTplTree();
  578. rptArchiveObj.iniPage();
  579. current_stage_id = result.stgId;
  580. }, function(err){
  581. $.bootstrapLoading.end();
  582. }, function(ex){
  583. $.bootstrapLoading.end();
  584. }
  585. );
  586. }
  587. if (needFileMsg[type] && needFileMsg[type].valid) {
  588. $('#file-msg').show();
  589. } else {
  590. $('#file-msg').hide();
  591. }
  592. });
  593. })
  594. rptArchiveObj.iniPage();
  595. $(document).ready(() => {
  596. $('#change-select-date').datepicker({
  597. onSelect: function(selectedDate) {
  598. const rows = $('#change-select-list tr');
  599. for (const r of rows) {
  600. const cid = $(r).find('input').attr('cid');
  601. const change = CHANGE_LIST.find(x => { return x.cid ? x.cid === cid : c.id === cid; });
  602. if (moment(selectedDate).isBefore(change.in_time)) {
  603. $(r).show();
  604. } else {
  605. $(r).hide();
  606. }
  607. }
  608. }
  609. });
  610. });
  611. </script>