rpt_tpl_main.js 55 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654
  1. "use strict";
  2. const IDMark_Switch = "_switch",
  3. IDMark_Icon = "_ico",
  4. IDMark_Span = "_span",
  5. IDMark_Input = "_input",
  6. IDMark_Check = "_check",
  7. IDMark_Edit = "_edit",
  8. IDMark_Remove = "_remove",
  9. IDMark_Ul = "_ul",
  10. IDMark_A = "_a",
  11. //以上的常量是在查找zTree默认生成的dom对象时用到(tID + 后缀)
  12. NODE_LEVEL_COMPILATION_NEW = 1,
  13. NODE_LEVEL_USER = 0;
  14. // 工程类型枚举值
  15. const valuationSelectorMap = {
  16. valuationSelector_NA: "N/A",
  17. valuationSelector_suggestion: "建议估算",
  18. valuationSelector_feasibility: "可行性估算",
  19. valuationSelector_rough: "概算",
  20. valuationSelector_bill: "预算",
  21. valuationSelector_three_bill_budget: "三级清单预算",
  22. valuationSelector_ration: "清单预算",
  23. valuationSelector_changeBudget: "变更预算",
  24. valuationSelector_settlement: "结算",
  25. };
  26. let rptTplObj = {
  27. iniPage: function () {
  28. zTreeOprObj.getCompilationList();
  29. rpt_tpl_cfg_helper.getReportTplCfg();
  30. selectableFiledTreeOprObj.iniTree();
  31. preview_util.drawBorder($("#tplCanvas")[0]);
  32. calculationTreeOprObj.buildRunType();
  33. preHandleObj.buildTypeData();
  34. calculationTreeOprObj.iniExtCodeTpl();
  35. },
  36. };
  37. let zTreeOprObj = {
  38. treeObj: null,
  39. currentNode: null,
  40. moveSrcTopNode: null,
  41. dupTplIds: null,
  42. hasRefreshedDupRefIds: false,
  43. getCompilationList: function () {
  44. let me = zTreeOprObj,
  45. params = {};
  46. CommonAjax.postEx(
  47. "report_tpl_api/getCompilationList",
  48. params,
  49. 20000,
  50. true,
  51. function (result) {
  52. //console.log(result);
  53. for (let item of result) {
  54. // if (item.is_release) {
  55. $("#compilations").append(
  56. "<option value='" + item._id + "'>" + item.name + "</option>"
  57. );
  58. // }
  59. }
  60. // me.getReportTemplateTree($("#compilations").get(0));
  61. me.getReportTemplateTreeEx($("#compilations").get(0));
  62. },
  63. null,
  64. null
  65. );
  66. },
  67. refreshNodes: function () {
  68. let me = this;
  69. let private_setupIsParent = function (node) {
  70. // if (node.nodeType === RT.NodeType.NODE || node.level === 0) {
  71. if (
  72. node.nodeType === RT.NodeType.NODE ||
  73. node.level <= NODE_LEVEL_COMPILATION_NEW
  74. ) {
  75. node.isParent = true;
  76. } else {
  77. node.isParent = false;
  78. }
  79. if (node.items && node.items.length) {
  80. for (let i = 0; i < node.items.length; i++) {
  81. private_setupIsParent(node.items[i]);
  82. }
  83. }
  84. };
  85. let topNodes = me.treeObj.getNodes();
  86. for (let i = 0; i < topNodes.length; i++) {
  87. private_setupIsParent(topNodes[i]);
  88. }
  89. me.treeObj.refresh();
  90. },
  91. removeTreeRootNode: function (rawNode, isAsync, callback, failCallback) {
  92. let params = {};
  93. params.compilationId = rawNode.compilationId;
  94. params.engineerId = rawNode.engineerId;
  95. params.userId = rawNode.userId;
  96. params.isPhysically = true;
  97. CommonAjax.postEx(
  98. "report_tpl_api/removeTreeRootNode",
  99. params,
  100. 5000,
  101. isAsync,
  102. callback,
  103. failCallback,
  104. null
  105. );
  106. },
  107. copyReportTemplate: function (orgID, newID, isAsync, callback, failCallback) {
  108. let params = {};
  109. params.orgRptTplId = orgID;
  110. params.newRptTplId = newID;
  111. CommonAjax.postEx(
  112. "report_tpl_api/copyRptTpl",
  113. params,
  114. 5000,
  115. isAsync,
  116. callback,
  117. failCallback,
  118. null
  119. );
  120. },
  121. updateTreeRootNode: function (rawNode, isAsync, callback, failCallback) {
  122. let params = {};
  123. params.doc = rawNode;
  124. CommonAjax.postEx(
  125. "report_tpl_api/updateTreeRootNode",
  126. params,
  127. 5000,
  128. isAsync,
  129. callback,
  130. failCallback,
  131. null
  132. );
  133. },
  134. updateTopNodeName: function (topNode, isAsync, callback, failCallback) {
  135. let params = {};
  136. params.compilationId = topNode.compilationId;
  137. params.engineerId = topNode.engineerId;
  138. params.userId = topNode.userId;
  139. params.nodeName = topNode.name;
  140. CommonAjax.postEx(
  141. "report_tpl_api/updateTopNodeName",
  142. params,
  143. 5000,
  144. isAsync,
  145. callback,
  146. failCallback,
  147. null
  148. );
  149. },
  150. updateSubNode: function (topNode, subNode, isAsync, callback, failCallback) {
  151. let params = {};
  152. params.compilationId = topNode.compilationId;
  153. params.engineerId = topNode.engineerId;
  154. params.userId = topNode.userId;
  155. params.subNode = subNode;
  156. CommonAjax.postEx(
  157. "report_tpl_api/updateSubLevelOneNode",
  158. params,
  159. 5000,
  160. isAsync,
  161. callback,
  162. failCallback,
  163. null
  164. );
  165. },
  166. createIniNode: function () {
  167. return {
  168. nodeType: RT.NodeType.TEMPLATE,
  169. refId: -1,
  170. name: "",
  171. ID: -1,
  172. items: null,
  173. };
  174. },
  175. buildRootNodeDoc: function (topNode, excludeNode) {
  176. let me = this,
  177. rst = null;
  178. if (topNode) {
  179. rst = {
  180. compilationId: topNode.compilationId,
  181. engineerId: topNode.engineerId,
  182. userId: topNode.userId,
  183. properties: topNode.properties,
  184. released: true,
  185. isDeleted: topNode.isDeleted,
  186. items: me.private_build_items(topNode.items, excludeNode),
  187. name: topNode.name,
  188. UUID: topNode.UUID,
  189. };
  190. }
  191. return rst;
  192. },
  193. buildSubRootNodeDoc: function (subNode) {
  194. let me = this,
  195. rst = null;
  196. if (subNode) {
  197. let isReleased = false;
  198. if (subNode.nodeType === RT.NodeType.TEMPLATE) {
  199. isReleased = subNode.checked;
  200. }
  201. rst = {
  202. nodeType: subNode.nodeType,
  203. refId: subNode.refId,
  204. ID: subNode.ID,
  205. released: isReleased,
  206. items: me.private_build_items(subNode.items, null),
  207. name: subNode.name,
  208. UUID: subNode.UUID,
  209. };
  210. if (subNode.hasOwnProperty("flags")) {
  211. rst.flags = subNode.flags;
  212. }
  213. }
  214. return rst;
  215. },
  216. generateRandomString() {
  217. const charset =
  218. "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  219. let randomString = "";
  220. for (let i = 0; i < 10; i++) {
  221. const randomIndex = Math.floor(Math.random() * charset.length);
  222. randomString += charset[randomIndex];
  223. }
  224. return randomString;
  225. },
  226. private_build_items: function (items, excludeNode) {
  227. let me = this,
  228. itemRst = null;
  229. if (items && items.length > 0) {
  230. itemRst = [];
  231. for (let item of items) {
  232. if (item !== excludeNode) {
  233. let isReleased = false;
  234. if (item.nodeType === RT.NodeType.TEMPLATE) {
  235. isReleased = item.checked;
  236. }
  237. let ir = {};
  238. ir.nodeType = item.nodeType;
  239. ir.refId = item.refId;
  240. ir.name = item.name;
  241. ir.ID = item.ID;
  242. ir.released = isReleased;
  243. ir.UUID =
  244. item.UUID ||
  245. `${new Date().getTime()}_${this.generateRandomString()}`;
  246. if (item.hasOwnProperty("flags")) {
  247. ir.flags = item.flags;
  248. }
  249. // 同类表(associateRefIds)处理
  250. if (item.hasOwnProperty("associateRefIds")) {
  251. ir.associateRefIds = item.associateRefIds;
  252. }
  253. ir.items = me.private_build_items(item.items);
  254. itemRst.push(ir);
  255. }
  256. }
  257. }
  258. return itemRst;
  259. },
  260. addHoverDom: function (treeId, treeNode) {
  261. let me = zTreeOprObj,
  262. sObj = $("#" + treeNode.tId + IDMark_Span);
  263. if (
  264. treeNode.editNameFlag ||
  265. $("#addBtn_" + treeNode.tId).length > 0 ||
  266. treeNode.nodeType === RT.NodeType.TEMPLATE
  267. )
  268. return;
  269. if (treeNode.level === 0) {
  270. let addStr =
  271. "<span class='button star' id='addBtn_" +
  272. treeNode.tId +
  273. "' title='新增编办类型' onfocus='this.blur();'></span>";
  274. sObj.after(addStr);
  275. let btn = $("#addBtn_" + treeNode.tId);
  276. if (btn)
  277. btn.bind("click", function () {
  278. let rawNode = me.createIniComilationNode();
  279. if (!me.chkIfDupCompilationNode(rawNode, treeNode)) {
  280. rawNode.userId = treeNode.userId;
  281. me.addNewNodeEx(
  282. rawNode,
  283. function (rst) {
  284. if (rst) {
  285. let newNodes = [],
  286. isSilent = false;
  287. rawNode.isParent = true;
  288. newNodes.push(rawNode);
  289. if (treeNode.items && treeNode.items.length > 0) {
  290. let insertIdx = -1;
  291. for (let i = 0; i < treeNode.items.length; i++) {
  292. if (
  293. treeNode.items[i].compilationId ===
  294. rawNode.compilationId
  295. ) {
  296. if (treeNode.items[i].engineerId > rawNode.engineerId) {
  297. insertIdx = i;
  298. break;
  299. }
  300. }
  301. }
  302. me.treeObj.addNodes(
  303. treeNode,
  304. insertIdx,
  305. newNodes,
  306. isSilent
  307. );
  308. } else {
  309. me.treeObj.addNodes(treeNode, 0, newNodes, isSilent);
  310. }
  311. } else {
  312. alert("后台创建失败,请确认是否有重复类型跟节点!");
  313. }
  314. },
  315. null
  316. );
  317. } else {
  318. alert("有重复编办!");
  319. }
  320. });
  321. } else {
  322. let addStr =
  323. "<span class='button add' id='addBtn_" +
  324. treeNode.tId +
  325. "' title='新增子目录' onfocus='this.blur();'></span>";
  326. sObj.after(addStr);
  327. let btn = $("#addBtn_" + treeNode.tId);
  328. if (btn)
  329. btn.bind("click", function () {
  330. me.getNewNodeID(1, function (newNodeID) {
  331. let rawNode = me.createIniNode();
  332. rawNode.nodeType = RT.NodeType.NODE;
  333. rawNode.name = "新增子节点";
  334. rawNode.ID = newNodeID;
  335. let newNodes = [],
  336. isSilent = false;
  337. newNodes.push(rawNode);
  338. if (me.treeObj) {
  339. let insertIdx = -1;
  340. if (treeNode.items && treeNode.items.length > 0) {
  341. for (let i = treeNode.items.length - 1; i >= 0; i--) {
  342. if (treeNode.items[i].nodeType === RT.NodeType.NODE) {
  343. insertIdx = i + 1;
  344. break;
  345. } else {
  346. insertIdx = i;
  347. }
  348. }
  349. }
  350. me.treeObj.addNodes(treeNode, insertIdx, newNodes, isSilent);
  351. let tn = me.getParentNodeByNodeLevel(
  352. treeNode,
  353. NODE_LEVEL_COMPILATION_NEW
  354. );
  355. let newTopNode = me.buildRootNodeDoc(tn);
  356. me.updateTreeRootNode(
  357. newTopNode,
  358. true,
  359. function (rst) {
  360. if (!rst) {
  361. alert("新增节点失败!");
  362. }
  363. me.refreshNodes();
  364. },
  365. null
  366. );
  367. }
  368. });
  369. });
  370. addStr =
  371. "<span class='button blue_core' id='addBtn2_" +
  372. treeNode.tId +
  373. "' title='新增报表模板' onfocus='this.blur();'></span>";
  374. sObj.after(addStr);
  375. btn = $("#addBtn2_" + treeNode.tId + "");
  376. if (btn)
  377. btn.bind("click", function () {
  378. // let me = zTreeOprObj;
  379. if (
  380. treeNode.nodeType === RT.NodeType.NODE ||
  381. treeNode.level === NODE_LEVEL_COMPILATION_NEW
  382. ) {
  383. me.getNewNodeID(1, function (newNodeID) {
  384. let rawNode = me.createIniNode();
  385. rawNode.nodeType = RT.NodeType.TEMPLATE;
  386. rawNode.name = "新增报表模板";
  387. rawNode.ID = newNodeID;
  388. rawNode.released = false;
  389. let newNodes = [],
  390. isSilent = false;
  391. newNodes.push(rawNode);
  392. me.treeObj.addNodes(treeNode, -1, newNodes, isSilent);
  393. let tn = me.getParentNodeByNodeLevel(
  394. treeNode,
  395. NODE_LEVEL_COMPILATION_NEW
  396. );
  397. let topNode = me.buildRootNodeDoc(tn);
  398. me.updateTreeRootNode(
  399. topNode,
  400. true,
  401. function (rst) {
  402. if (!rst) {
  403. alert("新增空白模板失败!");
  404. }
  405. me.refreshNodes();
  406. },
  407. null
  408. );
  409. });
  410. }
  411. });
  412. }
  413. },
  414. removeHoverDom: function (treeId, treeNode) {
  415. $("#addBtn_" + treeNode.tId)
  416. .unbind()
  417. .remove();
  418. $("#addBtn2_" + treeNode.tId)
  419. .unbind()
  420. .remove();
  421. },
  422. addNewNodeEx: function (rawNode, callback, failCallback) {
  423. let params = {};
  424. params.doc = rawNode;
  425. CommonAjax.postEx(
  426. "report_tpl_api/createTreeRootNode",
  427. params,
  428. 5000,
  429. true,
  430. callback,
  431. failCallback,
  432. null
  433. );
  434. },
  435. onCheck: function (event, treeId, treeNode) {
  436. let me = zTreeOprObj;
  437. let topPNode = me.getParentNodeByNodeLevel(
  438. treeNode,
  439. NODE_LEVEL_COMPILATION_NEW
  440. );
  441. let newTopNode = me.buildRootNodeDoc(topPNode);
  442. me.updateTreeRootNode(newTopNode, true, function (rst) {
  443. if (!rst) {
  444. alert("修改发布状态失败!");
  445. }
  446. });
  447. },
  448. onBeforeDrag: function (treeId, treeNodes) {
  449. let rst = true;
  450. for (let node of treeNodes) {
  451. if (node.level === 0 || node.nodeType !== RT.NodeType.TEMPLATE) {
  452. rst = false;
  453. break;
  454. }
  455. }
  456. return rst;
  457. },
  458. onBeforeDrop: function (treeId, treeNodes, targetNode, moveType, isCopy) {
  459. let me = zTreeOprObj,
  460. rst = true;
  461. let srcNode = treeNodes[0];
  462. let sourceTopNode = me.getParentNodeByNodeLevel(
  463. srcNode,
  464. NODE_LEVEL_COMPILATION_NEW
  465. );
  466. let targetTopNode = me.getParentNodeByNodeLevel(
  467. targetNode,
  468. NODE_LEVEL_COMPILATION_NEW
  469. );
  470. me.moveSrcTopNode = null;
  471. if (moveType === "inner") {
  472. if (targetNode.nodeType === RT.NodeType.TEMPLATE) {
  473. //模板节点不能成为另一个模板节点的子节点。不过zTree控件默认会处理,这里的代码应该走不到,放在这里以防万一
  474. rst = false;
  475. } else {
  476. if (sourceTopNode !== targetTopNode) {
  477. if (!isCopy) {
  478. if (!confirm("是否真的要把报表模板移动到另一个工程类型?")) {
  479. rst = false;
  480. }
  481. }
  482. } else {
  483. //同一根节点下,可以随便移动或copy
  484. }
  485. }
  486. } else {
  487. if (
  488. targetNode.level === 0 ||
  489. targetNode.nodeType !== RT.NodeType.TEMPLATE
  490. ) {
  491. //模板节点不能与类型节点或目录节点同级!
  492. rst = false;
  493. } else {
  494. if (sourceTopNode !== targetTopNode) {
  495. if (!isCopy) {
  496. if (!confirm("是否真的要把报表模板移动到另一个工程类型?")) {
  497. rst = false;
  498. }
  499. }
  500. } else {
  501. //同一根节点下,可以随便移动或copy
  502. }
  503. }
  504. }
  505. if (rst && !isCopy && sourceTopNode !== targetTopNode) {
  506. me.moveSrcTopNode = sourceTopNode;
  507. }
  508. return rst;
  509. },
  510. onDrop: function (event, treeId, treeNodes, targetNode, moveType, isCopy) {
  511. let me = zTreeOprObj;
  512. zTreeOprObj.treeObj.checkNode(treeNodes[0], false, false);
  513. treeNodes[0].released = false;
  514. // 拷贝后的uuid重复的问题
  515. if (isCopy) {
  516. treeNodes[0].UUID = `${new Date().getTime()}_${me.generateRandomString()}`;
  517. }
  518. let targetTopNode = me.getParentNodeByNodeLevel(
  519. targetNode,
  520. NODE_LEVEL_COMPILATION_NEW
  521. );
  522. let newTopNode = null;
  523. let canContinue = false;
  524. if (isCopy) {
  525. me.getNewNodeID(1, function (newNodeID) {
  526. let orgID = treeNodes[0].refId; //refId才是正确的模板ID(因可能copy一个有引用的节点),
  527. treeNodes[0].ID = newNodeID;
  528. if (confirm("是否引用相同的报表模板?")) {
  529. newTopNode = me.buildRootNodeDoc(targetTopNode);
  530. me.updateTreeRootNode(
  531. newTopNode,
  532. false,
  533. function (goodRst) {
  534. canContinue = true;
  535. if (treeNodes[0].rptTpl) {
  536. treeNodes[0].rptTpl.ID = newNodeID;
  537. }
  538. me.currentNode = treeNodes[0];
  539. me.chkAndSetDupRefTplIds(me.treeObj.getNodes(), null);
  540. me.treeObj.refresh();
  541. me.chkAndRreshRefTpl();
  542. },
  543. function (badRst) {
  544. displayMessage("更新模板节点失败!", "red", 2000);
  545. // console.log(badRst.toString());
  546. console.log(badRst);
  547. }
  548. );
  549. } else {
  550. treeNodes[0].refId = newNodeID;
  551. // targetNode.refId = newNodeID; //targetNode可以是父节点也可以是兄弟节点,没必要引用相同的tplID
  552. newTopNode = me.buildRootNodeDoc(targetTopNode);
  553. me.copyReportTemplate(
  554. orgID,
  555. newNodeID,
  556. true,
  557. function (goodResult) {
  558. me.updateTreeRootNode(
  559. newTopNode,
  560. true,
  561. function (goodRst) {
  562. canContinue = true;
  563. // treeObj.updateNode(nodes[0]);
  564. zTreeOprObj.treeObj.updateNode(treeNodes[0]);
  565. if (treeNodes[0].rptTpl) {
  566. treeNodes[0].rptTpl.ID = newNodeID;
  567. }
  568. me.currentNode = treeNodes[0];
  569. me.chkAndSetDupRefTplIds(me.treeObj.getNodes(), null);
  570. me.treeObj.refresh();
  571. me.chkAndRreshRefTpl();
  572. },
  573. function (badRst) {
  574. displayMessage("更新模板节点失败!", "red", 2000);
  575. // console.log(badRst.toString());
  576. console.log(badRst);
  577. }
  578. );
  579. },
  580. function (badResult) {
  581. displayMessage("Copy请求失败!", "red", 2000);
  582. // console.log(badResult.toString());
  583. console.log(badResult);
  584. }
  585. );
  586. }
  587. });
  588. // if (canContinue) {
  589. // me.chkAndRreshRefTpl();
  590. // }
  591. } else {
  592. newTopNode = me.buildRootNodeDoc(targetTopNode);
  593. me.updateTreeRootNode(
  594. newTopNode,
  595. false,
  596. function (rst) {
  597. canContinue = true;
  598. me.currentNode = treeNodes[0];
  599. },
  600. function (badResult) {
  601. displayMessage("移动请求失败!", "red", 2000);
  602. console.log(badResult.toString());
  603. canContinue = false;
  604. }
  605. );
  606. if (canContinue && !isCopy && me.moveSrcTopNode) {
  607. let newSrcTopNode = me.buildRootNodeDoc(me.moveSrcTopNode);
  608. me.updateTreeRootNode(
  609. newSrcTopNode,
  610. true,
  611. function (rst) {
  612. // canContinue = true;
  613. },
  614. function (badResult) {
  615. displayMessage("移动请求失败!", "red", 2000);
  616. canContinue = true;
  617. }
  618. );
  619. }
  620. me.moveSrcTopNode = null;
  621. }
  622. },
  623. addReportTemplate: function (newUsers) {
  624. let me = zTreeOprObj,
  625. params = {};
  626. params.compilationId = $("#compilations").get(0).value;
  627. params.userId = [];
  628. if (newUsers.length > 0) {
  629. for (let user of newUsers) {
  630. params.userId.push(user.userId);
  631. }
  632. }
  633. let allEngIds = [];
  634. for (let item of engineeringList) {
  635. allEngIds.push(item.value);
  636. }
  637. params.engineerId = allEngIds;
  638. CommonAjax.postEx(
  639. "report_tpl_api/getRptTplTree",
  640. params,
  641. 20000,
  642. true,
  643. function (result) {
  644. result.sort(function (item1, item2) {
  645. let rst = 0;
  646. if (item1.userId === item2.userId) {
  647. rst =
  648. item1.engineerId > item2.engineerId
  649. ? 1
  650. : item1.engineerId < item2.engineerId
  651. ? -1
  652. : 0;
  653. } else {
  654. if (item1.userId === "-100") {
  655. rst = 1;
  656. } else if (item2.userId === "-100") {
  657. rst = -1;
  658. } else {
  659. let idx1 = -1,
  660. idx2 = -1;
  661. for (let uidx = 0; uidx < newUsers.length; uidx++) {
  662. if (newUsers[uidx].userId === item1.userId) idx1 = uidx;
  663. if (newUsers[uidx].userId === item2.userId) idx2 = uidx;
  664. if (idx1 >= 0 && idx2 >= 0) {
  665. break;
  666. }
  667. rst = idx1 > idx2 ? 1 : idx1 < idx2 ? -1 : 0;
  668. }
  669. }
  670. }
  671. return rst;
  672. });
  673. let allTopUserIdNodes = [];
  674. let allTopTplNodes = [];
  675. for (let user of newUsers) {
  676. allTopUserIdNodes.push(user.userId);
  677. allTopTplNodes.push({
  678. userId: user.userId,
  679. name: user.real_name,
  680. items: [],
  681. isParent: true,
  682. });
  683. }
  684. for (let item of result) {
  685. let uidx = allTopUserIdNodes.indexOf(item.userId);
  686. if (uidx >= 0) {
  687. item.isParent = true;
  688. allTopTplNodes[uidx].items.push(item);
  689. }
  690. }
  691. // zTreeHelper.createTreeDirectly(allTopTplNodes, setting, "rptTplTree", me);
  692. //add template nodes
  693. let isSilent = false;
  694. me.treeObj.addNodes(null, -1, allTopTplNodes, isSilent);
  695. me.refreshNodes();
  696. let private_setup_checked = function (itemNode) {
  697. if (itemNode.nodeType === RT.NodeType.NODE) {
  698. me.treeObj.setChkDisabled(itemNode, true);
  699. } else if (itemNode.nodeType === RT.NodeType.TEMPLATE) {
  700. me.treeObj.checkNode(itemNode, !!itemNode.released);
  701. }
  702. if (itemNode.items && itemNode.items.length > 0) {
  703. for (let subItem of itemNode.items) {
  704. private_setup_checked(subItem);
  705. }
  706. }
  707. };
  708. let topNodes = me.treeObj.getNodes();
  709. // me.treeObj.expandAll(true);
  710. for (let node of topNodes) {
  711. me.treeObj.setChkDisabled(node, true);
  712. if (node.items && node.items.length > 0) {
  713. for (let item of node.items) {
  714. me.treeObj.setChkDisabled(item, true);
  715. private_setup_checked(item);
  716. }
  717. }
  718. }
  719. },
  720. null,
  721. null
  722. );
  723. },
  724. chkAndSetDupRefTplIds: function (tplNodes, selectedRefId) {
  725. let me = zTreeOprObj,
  726. tmpRefIds = [];
  727. me.dupTplIds = [];
  728. let private_get_dup_ids = function (tplNode) {
  729. if (tplNode.refId && tplNode.refId !== -1) {
  730. let refId = tplNode.refId;
  731. if (tmpRefIds.indexOf(refId) < 0) {
  732. tmpRefIds.push(refId);
  733. } else {
  734. if (me.dupTplIds.indexOf(refId) < 0) {
  735. me.dupTplIds.push(refId);
  736. } else {
  737. //
  738. }
  739. }
  740. }
  741. if (tplNode.items && tplNode.items.length > 0) {
  742. for (let subTplNode of tplNode.items) {
  743. private_get_dup_ids(subTplNode);
  744. }
  745. }
  746. };
  747. let private_set_dup_icon = function (tplNode) {
  748. if (me.dupTplIds.indexOf(tplNode.refId) >= 0) {
  749. // tplNode.icon = "../../../../lib/ztree/css/img/diy/3.png"; //or below:
  750. if (selectedRefId && selectedRefId === tplNode.refId) {
  751. tplNode.icon = "/lib/ztree/css/img/diy/5.png";
  752. } else {
  753. tplNode.icon = "/lib/ztree/css/img/diy/3.png";
  754. }
  755. // tplNode.style = "background:url(/lib/ztree/css/img/diy/3.png) 0 0 no-repeat;"
  756. } else {
  757. //设置白板
  758. // if (!tplNode.isParent) tplNode.icon = "/lib/ztree/css/img/diy/10.png";
  759. if (!tplNode.isParent) tplNode.className = "button ico_docu";
  760. }
  761. if (tplNode.items && tplNode.items.length > 0) {
  762. for (let subTplNode of tplNode.items) {
  763. private_set_dup_icon(subTplNode);
  764. }
  765. }
  766. };
  767. for (let tplNodeItem of tplNodes) {
  768. private_get_dup_ids(tplNodeItem);
  769. }
  770. for (let tplNodeItem of tplNodes) {
  771. private_set_dup_icon(tplNodeItem);
  772. }
  773. if (selectedRefId) {
  774. me.hasRefreshedDupRefIds = true;
  775. } else {
  776. me.hasRefreshedDupRefIds = false;
  777. }
  778. },
  779. getReportTemplateTreeEx: function (compilationSelect) {
  780. let me = zTreeOprObj,
  781. params = {};
  782. params.compilationId = compilationSelect.value;
  783. CommonAjax.postEx(
  784. "report_tpl_api/getTplTreeByCompilation",
  785. params,
  786. 20000,
  787. true,
  788. function (result) {
  789. result.sort(function (item1, item2) {
  790. let rst = 0;
  791. if (item1.userId === "-100") {
  792. rst = -1;
  793. } else if (item2.userId === "-100") {
  794. rst = 1;
  795. }
  796. return rst;
  797. });
  798. // me.chkAndSetDupRefTplIds(result);
  799. // console.log(dupRefIds);
  800. let allTopTplNodes = [
  801. {
  802. userId: "-100",
  803. name: "公共模板",
  804. items: [],
  805. isParent: true,
  806. refId: "",
  807. },
  808. ];
  809. if (result.length > 0) {
  810. if (!result[0].hasOwnProperty("refId")) {
  811. result[0].refId = "";
  812. }
  813. allTopTplNodes[0].items.push(result[0]);
  814. }
  815. let userIds = [];
  816. for (let idx = 1; idx < result.length; idx++) {
  817. let item = result[idx];
  818. if (!item.hasOwnProperty("refId")) {
  819. item.refId = "";
  820. }
  821. userIds.push(item.userId);
  822. }
  823. userListObj.findUsersByIds(userIds, function (userObjs) {
  824. for (let user of userObjs) {
  825. for (let itemIdx = 1; itemIdx < result.length; itemIdx++) {
  826. let item = result[itemIdx];
  827. if (item.userId === user._id) {
  828. allTopTplNodes.push({
  829. userId: user.userId,
  830. name: user.real_name,
  831. items: [],
  832. isParent: true,
  833. refId: "",
  834. });
  835. allTopTplNodes[allTopTplNodes.length - 1].items.push(
  836. result[itemIdx]
  837. );
  838. break;
  839. }
  840. }
  841. }
  842. zTreeHelper.createTreeDirectly(
  843. allTopTplNodes,
  844. setting,
  845. "rptTplTree",
  846. me
  847. );
  848. let topNodes = me.treeObj.getNodes();
  849. me.chkAndSetDupRefTplIds(topNodes, null);
  850. me.refreshNodes();
  851. let private_setup_checked = function (itemNode) {
  852. if (itemNode.nodeType === RT.NodeType.NODE) {
  853. me.treeObj.setChkDisabled(itemNode, true);
  854. } else if (itemNode.nodeType === RT.NodeType.TEMPLATE) {
  855. me.treeObj.checkNode(itemNode, !!itemNode.released);
  856. }
  857. if (itemNode.items && itemNode.items.length > 0) {
  858. for (let subItem of itemNode.items) {
  859. private_setup_checked(subItem);
  860. }
  861. }
  862. };
  863. me.treeObj.expandAll(true);
  864. for (let node of topNodes) {
  865. me.treeObj.setChkDisabled(node, true);
  866. if (node.items && node.items.length > 0) {
  867. for (let item of node.items) {
  868. me.treeObj.setChkDisabled(item, true);
  869. private_setup_checked(item);
  870. }
  871. }
  872. }
  873. // 同类表初始化
  874. associationOprObj.iniAssociateNodes(allTopTplNodes);
  875. });
  876. },
  877. null,
  878. null
  879. );
  880. },
  881. getNewNodeID: function (scope, callback) {
  882. let params = {};
  883. params.scope = scope;
  884. CommonAjax.postEx(
  885. "report_tpl_api/getNewNodeID",
  886. params,
  887. 5000,
  888. true,
  889. callback,
  890. null,
  891. null
  892. );
  893. },
  894. chkIfDupCompilationNode: function (rawNode, parentUserNode) {
  895. let rst = false;
  896. //在新的需求下,只需要检测编办与userId即可,无需工程id
  897. if (parentUserNode.items && parentUserNode.items.length > 0) {
  898. for (let node of parentUserNode.items) {
  899. if (
  900. node.compilationId === rawNode.compilationId &&
  901. node.userId === rawNode.userId
  902. ) {
  903. rst = true;
  904. break;
  905. }
  906. }
  907. }
  908. return rst;
  909. },
  910. createIniComilationNode: function () {
  911. //在新的需求下,无需工程id
  912. let rst = {
  913. compilationId: $("#compilations").get(0).selectedOptions[0].value,
  914. userId: userAccount === "admin" ? "-100" : userID,
  915. properties: [],
  916. released: true,
  917. isDeleted: false,
  918. items: [],
  919. name: $("#compilations").get(0).selectedOptions[0].innerText,
  920. };
  921. return rst;
  922. },
  923. onBeforeRemove: function (treeId, treeNode) {
  924. let canRemove = false;
  925. if (treeNode.level > NODE_LEVEL_USER) {
  926. if (!treeNode.items || treeNode.items.length < 1) {
  927. canRemove = confirm("请再确认您要删除!");
  928. } else {
  929. alert("含有子项,不能删除!");
  930. }
  931. } else {
  932. alert("不能删除用户级别模板!");
  933. }
  934. return canRemove;
  935. },
  936. onRemove: function (e, treeId, treeNode) {
  937. if (treeNode.level > NODE_LEVEL_USER) {
  938. let me = zTreeOprObj,
  939. topPNode = me.getParentNodeByNodeLevel(
  940. treeNode,
  941. NODE_LEVEL_COMPILATION_NEW
  942. );
  943. let rawNode = me.buildRootNodeDoc(topPNode, treeNode);
  944. if (treeNode.level === NODE_LEVEL_COMPILATION_NEW) {
  945. me.removeTreeRootNode(rawNode, true, function (rst) {
  946. if (!rst) {
  947. alert("删除请求失败!");
  948. }
  949. });
  950. } else {
  951. me.updateTreeRootNode(rawNode, true, function (rst) {
  952. if (!rst) {
  953. alert("删除请求失败!");
  954. }
  955. });
  956. }
  957. me.refreshNodes();
  958. }
  959. },
  960. beforeEditName: function (treeId, treeNode) {
  961. if (treeNode.level > NODE_LEVEL_COMPILATION_NEW) {
  962. setTimeout(function () {
  963. let ip = $("#" + treeNode.tId + IDMark_Input);
  964. if (ip.length > 0) {
  965. ip[0].className = "individualRename";
  966. } else {
  967. setTimeout(function () {
  968. let ip = $("#" + treeNode.tId + IDMark_Input);
  969. if (ip.length > 0) {
  970. ip[0].className = "individualRename";
  971. } else {
  972. console.log("sorry!");
  973. }
  974. }, 50);
  975. }
  976. }, 50);
  977. return true;
  978. } else {
  979. return false;
  980. }
  981. },
  982. beforeRename: function (treeId, treeNode, newName, isCancel) {
  983. if (newName.length === 0) {
  984. return false;
  985. }
  986. return true;
  987. },
  988. onRename: function (e, treeId, treeNode, isCancel) {
  989. if (!isCancel) {
  990. let me = zTreeOprObj;
  991. if (treeNode.level === 0) {
  992. //因结构变化,已经不允许更改顶节点名字
  993. } else {
  994. let subTopNode = me.getParentNodeByNodeLevel(
  995. treeNode,
  996. NODE_LEVEL_COMPILATION_NEW + 1
  997. );
  998. let topPNode = subTopNode.getParentNode();
  999. let rawNode = me.buildSubRootNodeDoc(subTopNode);
  1000. me.updateSubNode(topPNode, rawNode, true, function (rst) {
  1001. if (!rst) {
  1002. alert("修改名称请求失败!");
  1003. }
  1004. });
  1005. }
  1006. }
  1007. },
  1008. onChangeFlag: function (flagProp, flagDom) {
  1009. let me = zTreeOprObj;
  1010. if (me.currentNode && me.currentNode.nodeType === RT.NodeType.TEMPLATE) {
  1011. // 前端控制;
  1012. if (flagProp === "sumLevelType") {
  1013. if ($("#element_sumLv_flags").val() === "stageBackContrast") {
  1014. $("#outputDesignDataBar").show();
  1015. } else {
  1016. $("#outputDesignDataBar").hide();
  1017. }
  1018. }
  1019. if (!me.currentNode.hasOwnProperty("flags")) {
  1020. me.currentNode.flags = {};
  1021. }
  1022. if (flagProp === "outputDesignData") {
  1023. me.currentNode.flags[flagProp] = flagDom.checked;
  1024. } else {
  1025. me.currentNode.flags[flagProp] =
  1026. flagDom.selectedOptions[0].value === "NA"
  1027. ? null
  1028. : flagDom.selectedOptions[0].value;
  1029. }
  1030. let subTopNode = me.getParentNodeByNodeLevel(
  1031. me.currentNode,
  1032. NODE_LEVEL_COMPILATION_NEW + 1
  1033. );
  1034. let topPNode = subTopNode.getParentNode();
  1035. let rawNode = me.buildSubRootNodeDoc(subTopNode);
  1036. me.updateSubNode(topPNode, rawNode, true, function (rst) {
  1037. if (!rst) {
  1038. alert("修改标记:[" + flagProp + "] 失败!");
  1039. }
  1040. });
  1041. }
  1042. },
  1043. onMutiChangeFlag: function (flagProp, flagDom) {
  1044. let me = zTreeOprObj;
  1045. if (me.currentNode && me.currentNode.nodeType === RT.NodeType.TEMPLATE) {
  1046. if (!me.currentNode.hasOwnProperty("flags")) {
  1047. me.currentNode.flags = {};
  1048. }
  1049. me.currentNode.flags[flagProp] = flagDom[0].value.split(",");
  1050. let subTopNode = me.getParentNodeByNodeLevel(
  1051. me.currentNode,
  1052. NODE_LEVEL_COMPILATION_NEW + 1
  1053. );
  1054. let topPNode = subTopNode.getParentNode();
  1055. let rawNode = me.buildSubRootNodeDoc(subTopNode);
  1056. me.updateSubNode(topPNode, rawNode, true, function (rst) {
  1057. if (!rst) {
  1058. alert("修改标记:[" + flagProp + "] 失败!");
  1059. }
  1060. });
  1061. }
  1062. },
  1063. createNewTpl: function () {
  1064. let me = zTreeOprObj,
  1065. params = {};
  1066. if (me.currentNode && me.currentNode.nodeType === RT.NodeType.TEMPLATE) {
  1067. params.treeNodeId = me.currentNode.ID;
  1068. let rptTypeId = common_rpt_type_ids.flow;
  1069. if ($("#crossTypeOpt")[0].checked) rptTypeId = common_rpt_type_ids.cross;
  1070. if ($("#billTypeOpt")[0].checked) rptTypeId = common_rpt_type_ids.bill;
  1071. params.rptDftTplId = rptTypeId;
  1072. params.rptName = me.currentNode.name;
  1073. params.grpKey = me.getFolderText(me.currentNode, "_");
  1074. me.currentNode.refId = me.currentNode.ID;
  1075. let subTopNode = me.getParentNodeByNodeLevel(
  1076. me.currentNode,
  1077. NODE_LEVEL_COMPILATION_NEW + 1
  1078. );
  1079. let topPNode = me.getParentNodeByNodeLevel(
  1080. subTopNode,
  1081. NODE_LEVEL_COMPILATION_NEW
  1082. );
  1083. let rawNode = me.buildSubRootNodeDoc(subTopNode);
  1084. params.compilationId = topPNode.compilationId;
  1085. params.engineerId = topPNode.engineerId;
  1086. params.userId = topPNode.userId;
  1087. params.subNode = rawNode;
  1088. CommonAjax.postEx(
  1089. "report_tpl_api/createDftRptTpl",
  1090. params,
  1091. 10000,
  1092. true,
  1093. function (result) {
  1094. if (result) {
  1095. me.currentNode.rptTpl = result;
  1096. me.chkAndRreshRefTpl();
  1097. } else {
  1098. alert("update error!");
  1099. }
  1100. },
  1101. null,
  1102. null
  1103. );
  1104. }
  1105. },
  1106. beforeClick: function (treeId, treeNode, clickFlag) {
  1107. let me = zTreeOprObj;
  1108. if (me.dupTplIds && me.dupTplIds.indexOf(treeNode.refId) >= 0) {
  1109. let topNodes = me.treeObj.getNodes();
  1110. me.chkAndSetDupRefTplIds(topNodes, treeNode.refId);
  1111. me.refreshNodes();
  1112. } else if (me.hasRefreshedDupRefIds) {
  1113. let topNodes = me.treeObj.getNodes();
  1114. me.chkAndSetDupRefTplIds(topNodes, null);
  1115. me.refreshNodes();
  1116. }
  1117. return true;
  1118. },
  1119. onClick: function (event, treeId, treeNode) {
  1120. let me = zTreeOprObj;
  1121. me.currentNode = treeNode;
  1122. bandTreeOprObj.currentNode = null;
  1123. if (treeNode.nodeType === RT.NodeType.NODE) {
  1124. $("#rpt_tpl_display_label")[0].innerText = "...";
  1125. } else if (treeNode.nodeType === RT.NodeType.TEMPLATE) {
  1126. let showText = me.getFolderText(me.currentNode, " > ");
  1127. $("#rpt_tpl_display_label")[0].innerText = showText;
  1128. if (treeNode.refId < 0) {
  1129. //创建新报表模板
  1130. $("#rptTypeSelectionModal").modal("show");
  1131. } else {
  1132. //显示报表模板
  1133. me.chkAndRreshRefTpl(true);
  1134. }
  1135. associationOprObj.refreshNodes(me.currentNode);
  1136. }
  1137. },
  1138. isFlowTpl: function () {
  1139. let rst = false;
  1140. let me = zTreeOprObj;
  1141. if (me.currentNode && me.currentNode.nodeType === RT.NodeType.TEMPLATE) {
  1142. rst = !!me.currentNode.rptTpl[JV.NODE_FLOW_INFO];
  1143. }
  1144. return rst;
  1145. },
  1146. isCrossTpl: function () {
  1147. let rst = false;
  1148. let me = zTreeOprObj;
  1149. if (me.currentNode && me.currentNode.nodeType === RT.NodeType.TEMPLATE) {
  1150. rst = !!me.currentNode.rptTpl[JV.NODE_CROSS_INFO];
  1151. }
  1152. return rst;
  1153. },
  1154. isBillTpl: function () {
  1155. let rst = false;
  1156. let me = zTreeOprObj;
  1157. if (me.currentNode && me.currentNode.nodeType === RT.NodeType.TEMPLATE) {
  1158. rst = !!me.currentNode.rptTpl[JV.NODE_BILL_INFO];
  1159. }
  1160. return rst;
  1161. },
  1162. getFolderText: function (treeNode, separator) {
  1163. let rst = "";
  1164. if (treeNode) {
  1165. rst = treeNode.name;
  1166. let parentNode = treeNode.getParentNode();
  1167. while (parentNode !== null) {
  1168. rst = parentNode.name + separator + rst;
  1169. parentNode = parentNode.getParentNode();
  1170. }
  1171. }
  1172. return rst;
  1173. },
  1174. chkAndRreshRefTpl: function (forceRefresh) {
  1175. let me = zTreeOprObj,
  1176. params = {};
  1177. const valuationTypes = [
  1178. "suggestion",
  1179. "feasibility",
  1180. "rough",
  1181. "bill",
  1182. "three_bill_budget",
  1183. "ration",
  1184. "changeBudget",
  1185. "settlement",
  1186. ];
  1187. if (
  1188. me.currentNode &&
  1189. me.currentNode.nodeType === RT.NodeType.TEMPLATE &&
  1190. me.currentNode.refId > 0
  1191. ) {
  1192. if (forceRefresh || !me.currentNode.rptTpl) {
  1193. // 初始化dom
  1194. // 该属性是根据项目汇总级别显示的
  1195. $("#outputDesignDataBar").hide();
  1196. $("#outputDesignData").attr("checked", false);
  1197. // 初始化dom
  1198. params.rptTplId = me.currentNode.refId;
  1199. CommonAjax.postEx(
  1200. "report_tpl_api/getRefRptTpl",
  1201. params,
  1202. 20000,
  1203. true,
  1204. function (result) {
  1205. me.currentNode.rptTpl = result;
  1206. me.currentNode.rptTpl[JV.NODE_MAIN_INFO][
  1207. JV.NODE_MAIN_INFO_RPT_NAME
  1208. ] = me.currentNode.name;
  1209. if (me.currentNode.rptTpl["GROUP_KEY"]) {
  1210. let grp_keys = me.currentNode.rptTpl["GROUP_KEY"].split("_");
  1211. if (grp_keys.length > 0) {
  1212. grp_keys[1] = me.currentNode.name;
  1213. }
  1214. me.currentNode.rptTpl["GROUP_KEY"] = grp_keys.join("_");
  1215. }
  1216. tplHelper.refreshTplView(me.currentNode.rptTpl);
  1217. if (me.currentNode.hasOwnProperty("flags")) {
  1218. if (me.currentNode.flags.hasOwnProperty("taxType")) {
  1219. let val = parseInt(me.currentNode.flags["taxType"]);
  1220. $("#element_flags_select")[0].selectedIndex = val;
  1221. } else {
  1222. $("#element_flags_select")[0].selectedIndex = 0;
  1223. }
  1224. $("#valuationSelector").hide();
  1225. if (me.currentNode.flags.hasOwnProperty("valuationType")) {
  1226. $(".mutiSelector").find("li").removeClass("checked");
  1227. let valuationTypeStr = "";
  1228. let valuationTypeStrList = [];
  1229. let vType = me.currentNode.flags["valuationType"];
  1230. // let vtIdx = valuationTypes.indexOf(vType);
  1231. // $("#element_prjFlags_select")[0].selectedIndex = vtIdx + 1;
  1232. if (vType instanceof Array) {
  1233. for (let i = 0; i < vType.length; i++) {
  1234. $("#valuationSelector_" + vType[i]).addClass("checked");
  1235. valuationTypeStrList.push(
  1236. valuationSelectorMap["valuationSelector_" + vType[i]]
  1237. );
  1238. }
  1239. valuationTypeStr = valuationTypeStrList.join(",");
  1240. } else if (vType) {
  1241. $("#valuationSelector_" + vType).addClass("checked");
  1242. valuationTypeStr =
  1243. valuationSelectorMap["valuationSelector_" + vType];
  1244. }
  1245. $("#element_prjFlags_select")[0].value = vType;
  1246. $("#element_prjFlags_selectStr")[0].value = valuationTypeStr;
  1247. } else {
  1248. $("#element_prjFlags_select")[0].value = "";
  1249. $("#element_prjFlags_selectStr")[0].value = "";
  1250. $("#valuationSelector .mutiSelector li").removeClass("checked");
  1251. }
  1252. if (me.currentNode.flags.hasOwnProperty("reportType")) {
  1253. let rType = me.currentNode.flags["reportType"];
  1254. if (rType === "billSummary")
  1255. $("#element_rptFlags_select")[0].selectedIndex = 1;
  1256. else if (rType === "gljSummary")
  1257. $("#element_rptFlags_select")[0].selectedIndex = 2;
  1258. else $("#element_rptFlags_select")[0].selectedIndex = 0;
  1259. } else {
  1260. $("#element_rptFlags_select")[0].selectedIndex = 0;
  1261. }
  1262. if (me.currentNode.flags.hasOwnProperty("sumLevelType")) {
  1263. let sumLvType = me.currentNode.flags["sumLevelType"];
  1264. if (sumLvType === "construct")
  1265. $("#element_sumLv_flags")[0].selectedIndex = 1;
  1266. else if (sumLvType === "Single")
  1267. $("#element_sumLv_flags")[0].selectedIndex = 2;
  1268. else if (sumLvType === "custom")
  1269. $("#element_sumLv_flags")[0].selectedIndex = 3;
  1270. else if (sumLvType === "unitPriceContrast")
  1271. $("#element_sumLv_flags")[0].selectedIndex = 4;
  1272. else if (sumLvType === "stageUnitContrast")
  1273. $("#element_sumLv_flags")[0].selectedIndex = 5;
  1274. else if (sumLvType === "stageUnitFontContrast")
  1275. $("#element_sumLv_flags")[0].selectedIndex = 6;
  1276. else if (sumLvType === "stageUnitBackContrast")
  1277. $("#element_sumLv_flags")[0].selectedIndex = 7;
  1278. else if (sumLvType === "stageContrast")
  1279. $("#element_sumLv_flags")[0].selectedIndex = 8;
  1280. else if (sumLvType === "stageGLJContrast")
  1281. $("#element_sumLv_flags")[0].selectedIndex = 9;
  1282. else if (sumLvType === "stageBackContrast")
  1283. $("#element_sumLv_flags")[0].selectedIndex = 10;
  1284. else if (sumLvType === "stageMultipleUnitContrast")
  1285. $("#element_sumLv_flags")[0].selectedIndex = 11;
  1286. else if (sumLvType === "complexUnit")
  1287. $("#element_sumLv_flags")[0].selectedIndex = 12;
  1288. else if (sumLvType === "complexConstruct")
  1289. $("#element_sumLv_flags")[0].selectedIndex = 13;
  1290. else if (sumLvType === "complexConstructMultiple")
  1291. $("#element_sumLv_flags")[0].selectedIndex = 14;
  1292. else if (sumLvType === "complexSelfConstructMultiple")
  1293. $("#element_sumLv_flags")[0].selectedIndex = 15;
  1294. else if (sumLvType === "businessSummary")
  1295. $("#element_sumLv_flags")[0].selectedIndex = 16;
  1296. else if (sumLvType === "changeProjectSummary")
  1297. $("#element_sumLv_flags")[0].selectedIndex = 17;
  1298. else if (sumLvType === "changeProjectGljSummary")
  1299. $("#element_sumLv_flags")[0].selectedIndex = 18;
  1300. else if (sumLvType === "compareConstruct")
  1301. $("#element_sumLv_flags")[0].selectedIndex = 19;
  1302. else {
  1303. $("#element_sumLv_flags")[0].selectedIndex = 0;
  1304. }
  1305. $("#outputDesignDataBar").show();
  1306. if (me.currentNode.flags.hasOwnProperty("outputDesignData")) {
  1307. if (me.currentNode.flags.outputDesignData) {
  1308. $("#outputDesignData").attr("checked", true);
  1309. } else {
  1310. $("#outputDesignData").attr("checked", false);
  1311. }
  1312. }
  1313. } else {
  1314. $("#element_sumLv_flags")[0].selectedIndex = 0;
  1315. }
  1316. if (me.currentNode.flags.hasOwnProperty("contrastType")) {
  1317. let contrastType = me.currentNode.flags["contrastType"];
  1318. if (contrastType === "chapter")
  1319. $("#element_contrastType_select")[0].selectedIndex = 1;
  1320. else if (contrastType === "bill")
  1321. $("#element_contrastType_select")[0].selectedIndex = 2;
  1322. else if (contrastType === "quantities")
  1323. $("#element_contrastType_select")[0].selectedIndex = 3;
  1324. else $("#element_contrastType_select")[0].selectedIndex = 0;
  1325. }
  1326. if (me.currentNode.flags.hasOwnProperty("existLevel")) {
  1327. let existLevel = me.currentNode.flags["existLevel"];
  1328. if (existLevel === "true") {
  1329. $("#element_existLevel_select")[0].selectedIndex = 1;
  1330. } else if (existLevel === "false") {
  1331. $("#element_existLevel_select")[0].selectedIndex = 2;
  1332. } else {
  1333. $("#element_existLevel_select")[0].selectedIndex = 0;
  1334. }
  1335. } else {
  1336. $("#element_existLevel_select")[0].selectedIndex = 0;
  1337. }
  1338. if (me.currentNode.flags.hasOwnProperty("existSummaryRule")) {
  1339. let existSummaryRule = me.currentNode.flags["existSummaryRule"];
  1340. if (existSummaryRule === "true") {
  1341. $("#element_summaryRule_select")[0].selectedIndex = 1;
  1342. } else if (existSummaryRule === "false") {
  1343. $("#element_summaryRule_select")[0].selectedIndex = 2;
  1344. } else {
  1345. $("#element_summaryRule_select")[0].selectedIndex = 0;
  1346. }
  1347. } else {
  1348. $("#element_summaryRule_select")[0].selectedIndex = 0;
  1349. }
  1350. if (me.currentNode.flags.hasOwnProperty("constructSumType")) {
  1351. let val = me.currentNode.flags["constructSumType"];
  1352. if (val === "constructSum") {
  1353. $("#element_constructSumFlags_select")[0].selectedIndex = 1;
  1354. } else {
  1355. $("#element_constructSumFlags_select")[0].selectedIndex = 0;
  1356. }
  1357. } else {
  1358. $("#element_constructSumFlags_select")[0].selectedIndex = 0;
  1359. }
  1360. if (me.currentNode.flags.hasOwnProperty("rptTplType")) {
  1361. let val = me.currentNode.flags["rptTplType"];
  1362. if (val === "construct") {
  1363. $("#element_Flags_tplType")[0].selectedIndex = 1;
  1364. } else if (val === "single") {
  1365. $("#element_Flags_tplType")[0].selectedIndex = 2;
  1366. } else if (val === "unit") {
  1367. $("#element_Flags_tplType")[0].selectedIndex = 3;
  1368. } else {
  1369. $("#element_Flags_tplType")[0].selectedIndex = 0;
  1370. }
  1371. }
  1372. if (me.currentNode.flags.hasOwnProperty("auditType")) {
  1373. let val = me.currentNode.flags["auditType"];
  1374. if (val === "project_compare") {
  1375. $("#element_constructSumFlags_audit")[0].selectedIndex = 1;
  1376. } else if (val === "costUnitCompare") {
  1377. $("#element_constructSumFlags_audit")[1].selectedIndex = 1;
  1378. } else {
  1379. $("#element_constructSumFlags_audit")[0].selectedIndex = 0;
  1380. }
  1381. } else {
  1382. $("#element_constructSumFlags_audit")[0].selectedIndex = 0;
  1383. }
  1384. if (me.currentNode.flags.hasOwnProperty("costIndexType")) {
  1385. let val = me.currentNode.flags["costIndexType"];
  1386. if (val === "mainScaleContrast") {
  1387. $("#element_costIndexFlags_audit")[0].selectedIndex = 1;
  1388. } else if (val === "mainScaleContrastThree") {
  1389. $("#element_costIndexFlags_audit")[0].selectedIndex = 2;
  1390. } else {
  1391. $("#element_costIndexFlags_audit")[0].selectedIndex = 0;
  1392. }
  1393. } else {
  1394. $("#element_costIndexFlags_audit")[0].selectedIndex = 0;
  1395. }
  1396. if (me.currentNode.flags.hasOwnProperty("rptFormatAdjust")) {
  1397. let rType = me.currentNode.flags["rptFormatAdjust"];
  1398. if (rType === "T") {
  1399. $("#report_format_adjustable")[0].selectedIndex = 1;
  1400. } else {
  1401. $("#report_format_adjustable")[0].selectedIndex = 0;
  1402. }
  1403. } else {
  1404. $("#report_format_adjustable")[0].selectedIndex = 0;
  1405. }
  1406. } else {
  1407. $("#element_flags_select")[0].selectedIndex = 0;
  1408. $("#element_prjFlags_select")[0].selectedIndex = 0;
  1409. $("#element_sumLv_flags")[0].selectedIndex = 0;
  1410. $("#element_constructSumFlags_select")[0].selectedIndex = 0;
  1411. // 清空工程类型
  1412. $("#valuationSelector").hide();
  1413. $("#element_prjFlags_select")[0].value = "";
  1414. $("#element_prjFlags_selectStr")[0].value = "";
  1415. $("#valuationSelector .mutiSelector li").removeClass("checked");
  1416. $("#element_existLevel_select")[0].selectedIndex = 0;
  1417. $("#element_Flags_tplType")[0].selectedIndex = 0;
  1418. $("#element_costIndexFlags_audit")[0].selectedIndex = 0;
  1419. $("#select_aid_report_data_select")[0].selectedIndex = 0;
  1420. $("#report_format_adjustable")[0].selectedIndex = 0;
  1421. }
  1422. if (
  1423. $("#rpt_tpl_visual_tab")[0].className === "nav-link p-1 active"
  1424. ) {
  1425. setTimeout(function () {
  1426. visualJumbo.iniSpreadJs();
  1427. visualJumbo.setupTpl();
  1428. }, 50);
  1429. }
  1430. },
  1431. null,
  1432. null
  1433. );
  1434. // 获取含量指标模板列表
  1435. CommonAjax.postEx(
  1436. "report_tpl_api/getAidReportDataList",
  1437. { compilationID: $("#compilations").val() },
  1438. 20000,
  1439. true,
  1440. function (result) {
  1441. $("#select_aid_report_data_select").empty();
  1442. $("#select_aid_report_data_select").append(
  1443. `<option value=""> </option>`
  1444. );
  1445. result.forEach((i) => {
  1446. if (i.aidReportID) {
  1447. $("#select_aid_report_data_select").append(
  1448. `<option value="${i.aidReportID}">${i.aidReportName}</option>`
  1449. );
  1450. }
  1451. });
  1452. if (me.currentNode.flags?.hasOwnProperty("aidReportID")) {
  1453. let val = me.currentNode.flags["aidReportID"];
  1454. $("#select_aid_report_data_select").val(val);
  1455. }
  1456. },
  1457. null,
  1458. null
  1459. );
  1460. } else {
  1461. me.currentNode.rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MAIN_INFO_RPT_NAME] =
  1462. me.currentNode.name;
  1463. tplHelper.refreshTplView(me.currentNode.rptTpl);
  1464. if ($("#rpt_tpl_visual_tab")[0].className === "nav-link p-1 active") {
  1465. setTimeout(function () {
  1466. visualJumbo.iniSpreadJs();
  1467. visualJumbo.setupTpl();
  1468. }, 50);
  1469. }
  1470. }
  1471. }
  1472. },
  1473. getRefTpl: function () {
  1474. let me = zTreeOprObj,
  1475. rst = null;
  1476. if (
  1477. me.currentNode &&
  1478. me.currentNode.nodeType === RT.NodeType.TEMPLATE &&
  1479. me.currentNode.refId > 0
  1480. ) {
  1481. rst = me.currentNode.rptTpl;
  1482. }
  1483. return rst;
  1484. },
  1485. changeProperty: function (propStr, dom) {
  1486. let me = zTreeOprObj;
  1487. if (me.currentNode && me.currentNode.rptTpl) {
  1488. let props = propStr.split(".");
  1489. let lastProp = me.currentNode.rptTpl;
  1490. for (let idx = 1; idx < props.length; idx++) {
  1491. lastProp = lastProp[props[idx - 1]];
  1492. }
  1493. lastProp[props[props.length - 1]] = dom.value;
  1494. }
  1495. },
  1496. extractMainInfo: function (rptTpl) {
  1497. //模板信息
  1498. rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MAIN_INFO_RPT_NAME] =
  1499. $("#rptTplName")[0].value;
  1500. rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] =
  1501. JV.PAGES_SIZE_STR[$("#rptTplPageSize")[0].selectedIndex];
  1502. if ($("#rptTplPageOrientation")[0].selectedIndex === 1) {
  1503. rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION] =
  1504. JV.ORIENTATION_PORTRAIT;
  1505. } else {
  1506. rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION] =
  1507. JV.ORIENTATION_LANDSCAPE;
  1508. }
  1509. if (rptTpl[JV.NODE_FLOW_INFO]) {
  1510. rptTpl[JV.NODE_FLOW_INFO][JV.PROP_MULTI_COLUMN] = parseInt(
  1511. $("#rptTplMultiCols")[0].value
  1512. );
  1513. rptTpl[JV.NODE_FLOW_INFO][JV.PROP_ERASE_BLANK_ROWS] =
  1514. $("#rptTplEraseBlankRows").get(0).checked || false;
  1515. }
  1516. rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_CROSS_DISPLAY_ORDER] =
  1517. $("#element_cross_display_seq")[0].selectedIndex;
  1518. //考虑到页边距必然跟用户设置走,所以这里没必要特意去设置了,全部下架
  1519. },
  1520. getParentNodeByNodeLevel: function (currentNode, level) {
  1521. let rst = currentNode;
  1522. while (rst !== null) {
  1523. if (rst.level <= level) {
  1524. break;
  1525. } else {
  1526. rst = rst.getParentNode();
  1527. }
  1528. }
  1529. return rst;
  1530. },
  1531. };
  1532. let userListObj = {
  1533. foundedUserList: [],
  1534. UserIdList: [],
  1535. pushUser: function (user, newUsers) {
  1536. let me = userListObj;
  1537. if (me.UserIdList.indexOf(user._id) < 0) {
  1538. me.UserIdList.push(user._id);
  1539. let newUser = {
  1540. userId: user._id,
  1541. real_name: user.real_name,
  1542. username: user.username,
  1543. mobile: user.mobile,
  1544. };
  1545. me.foundedUserList.push(newUser);
  1546. if (newUsers) {
  1547. newUsers.push(newUser);
  1548. }
  1549. }
  1550. },
  1551. findUser: function () {
  1552. let key = $("#rpt_user_input1").get(0).value;
  1553. let newUsers = [];
  1554. $.ajax({
  1555. type: "GET",
  1556. url: "user/search?keyword=" + key,
  1557. cache: false,
  1558. timeout: 5000,
  1559. success: function (result) {
  1560. if (result.data && result.data.length > 0) {
  1561. for (let user of result.data) {
  1562. userListObj.pushUser(user, newUsers);
  1563. }
  1564. if (newUsers.length > 0) {
  1565. zTreeOprObj.addReportTemplate(newUsers);
  1566. }
  1567. }
  1568. },
  1569. error: function (jqXHR, textStatus, errorThrown) {},
  1570. });
  1571. },
  1572. findUsersByIds: function (userIds, cb) {
  1573. let params = {};
  1574. params.userIds = userIds;
  1575. CommonAjax.postEx(
  1576. "user/getUserList",
  1577. params,
  1578. 20000,
  1579. true,
  1580. function (result) {
  1581. for (let user of result) {
  1582. userListObj.pushUser(user, null);
  1583. }
  1584. if (cb) {
  1585. cb(result);
  1586. }
  1587. },
  1588. null,
  1589. null
  1590. );
  1591. },
  1592. };
  1593. function displayMessage(message, color, disappearTime, id) {
  1594. let domId = id;
  1595. if (!domId) domId = "id_after_saved_lbl";
  1596. $("#" + domId)[0].style.color = color;
  1597. $("#" + domId)[0].innerHTML = message;
  1598. setTimeout(function () {
  1599. $("#" + domId)[0].innerHTML = "";
  1600. }, disappearTime);
  1601. }
  1602. $("#element_prjFlags_selectStr").on("click", function () {
  1603. if ($("#valuationSelector").visible) {
  1604. $("#valuationSelector").hide();
  1605. } else {
  1606. $("#valuationSelector").show();
  1607. }
  1608. return false;
  1609. });
  1610. $("#rpttplinfo").on("click", function () {
  1611. $("#valuationSelector").hide();
  1612. });
  1613. $(".mutiSelector")
  1614. .find("li")
  1615. .on("click", function (e) {
  1616. const hasChecked = $(this).hasClass("checked");
  1617. if (hasChecked) {
  1618. $(this).removeClass("checked");
  1619. } else {
  1620. $(this).addClass("checked");
  1621. }
  1622. const resultIDList = [];
  1623. const resultList = [];
  1624. $(".mutiSelector .checked").each(function (index, value) {
  1625. resultList.push(valuationSelectorMap[$(value).attr("id")]);
  1626. resultIDList.push($(value).attr("value"));
  1627. });
  1628. const result = resultList.join(",");
  1629. $("#element_prjFlags_selectStr").val(result);
  1630. $("#element_prjFlags_select").val(resultIDList);
  1631. zTreeOprObj.onMutiChangeFlag(
  1632. "valuationType",
  1633. $("#element_prjFlags_select")
  1634. );
  1635. return false;
  1636. });