rpt_tpl_main.js 53 KB

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