rpt_tpl_data_map.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. /**
  2. * Created by Tony on 2017/10/5.
  3. */
  4. 'use strict'
  5. let dataInfoMapTreeOprObj = {
  6. treeObj : null,
  7. bandTreeObj: null,
  8. selectedTreeObj: null,
  9. currentNode: null,
  10. dataTypeDef: ['string', 'int32', 'int64', 'double', 'currency', 'date', 'image'],
  11. iniTree: function(rptTpl) {
  12. let me = this;
  13. let fieldMapList = me.buildTreeData(rptTpl);
  14. me.treeObj = $.fn.zTree.init($("#tpl_data_info_reversed"), rptDataInfoSetting, fieldMapList);
  15. me.treeObj.expandAll(true);
  16. },
  17. iniDataMap: function () {
  18. let me = this, bandList = bandTreeOprObj.copyBandList(false);
  19. if (bandList) {
  20. me.bandTreeObj = $.fn.zTree.init($("#band_tree2_reversed"), bandSetting2, bandList);
  21. me.bandTreeObj.expandAll(true);
  22. let selectedFieldList = fieldMapTreeOprObj.copySelectedFieldList();
  23. if (me.selectedTreeObj) {
  24. let nodes = me.selectedTreeObj.getNodes();
  25. for (let node of nodes) {
  26. me.selectedTreeObj.removeNode(node);
  27. }
  28. me.selectedTreeObj.refresh();
  29. }
  30. // me.selectedTreeObj = $.fn.zTree.init(document.getElementById("tpl_data_selected_field_map_reversed"), selectedFieldMapSetting, selectedFieldList);
  31. me.selectedTreeObj = $.fn.zTree.init($("#tpl_data_selected_field_map_reversed"), selectedFieldMapSetting, selectedFieldList);
  32. me.selectedTreeObj.expandAll(true);
  33. }
  34. },
  35. buildTreeData: function (rptTpl) {
  36. let me = this, rst = null;
  37. $("#dispRowHeight")[0].style.display = "";
  38. $("#dispColWidth")[0].style.display = "";
  39. if (rptTpl[JV.NODE_FLOW_INFO]) {
  40. //
  41. } else if (rptTpl[JV.NODE_CROSS_INFO]) {
  42. //
  43. } else if (rptTpl[JV.NODE_BILL_INFO]) {
  44. rst = me.buildBillData(rptTpl);
  45. $("#dispRowHeight")[0].style.display = "none";
  46. $("#dispColWidth")[0].style.display = "none";
  47. }
  48. return rst;
  49. },
  50. buildBillData: function(rptTpl) {
  51. let me = this, rst = [];
  52. let rootFieldNode = {Name: JV.NODE_BILL_CONTENT, type: "bill_data", isParent: true};
  53. let discreteNode = {Name: JV.NODE_DISCRETE_INFO};
  54. rst.push(rootFieldNode);
  55. rst.push(discreteNode);
  56. me.private_build_bill_data(rootFieldNode, rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT], rptTpl);
  57. me.private_build_bill_discrete_data(discreteNode, rptTpl[JV.NODE_BILL_INFO][JV.NODE_DISCRETE_INFO], rptTpl);
  58. return rst;
  59. },
  60. private_build_bill_data: function (rootFieldNode, billData, rptTpl) {
  61. let me = this, bandName = billData[JV.PROP_BAND_NAME];
  62. if (rootFieldNode) {
  63. rootFieldNode[JV.PROP_BAND_NAME] = bandName;
  64. rootFieldNode.items = [];
  65. for (let fieldItem of billData[JV.PROP_BILL_FIELDS]) {
  66. if (fieldItem[JV.PROP_FIELD_ID]) {
  67. rootFieldNode.items.push(me.private_build_field_node(fieldItem, rptTpl))
  68. } else if (fieldItem[JV.PROP_PARAM_ID]) {
  69. rootFieldNode.items.push(me.private_build_param_node(fieldItem, rptTpl));
  70. }
  71. }
  72. }
  73. },
  74. private_build_bill_discrete_data: function (discreteNode, discreteData, rptTpl) {
  75. let me = this;
  76. discreteNode.isParent = true;
  77. discreteNode.items = [];
  78. for (let i = 0; i < discreteData.length; i++) {
  79. let dtl = discreteData[i];
  80. let item = {"Name": "离散" + (i + 1), "items":[]};
  81. item[JV.PROP_BAND_NAME] = dtl[JV.PROP_BAND_NAME];
  82. let discreteFieldsNode = {"Name": "离散字段集", "items": [], "isParent": true};
  83. let discreteTextsNode = {"Name": "离散文本集", "items": [], "isParent": true};
  84. item.items.push(discreteFieldsNode);
  85. item.items.push(discreteTextsNode);
  86. discreteNode.items.push(item);
  87. if (dtl[JV.PROP_DISCRETE_FIELDS]) {
  88. for (let field of dtl[JV.PROP_DISCRETE_FIELDS]) {
  89. if (field[JV.PROP_FIELD_ID]) {
  90. discreteFieldsNode.items.push(me.private_build_field_node(field, rptTpl))
  91. } else if (field[JV.PROP_PARAM_ID]) {
  92. discreteFieldsNode.items.push(me.private_build_param_node(field, rptTpl));
  93. }
  94. }
  95. }
  96. if (dtl[JV.PROP_TEXTS]) {
  97. for (let txt of dtl[JV.PROP_TEXTS]) {
  98. discreteTextsNode.items.push(me.private_build_text_node(txt));
  99. }
  100. }
  101. }
  102. },
  103. private_get_field_by_id: function (fieldId, rptTpl) {
  104. let rst = null;
  105. function getField(collection) {
  106. if (!rst && collection) {
  107. for (let item of collection) {
  108. if (item[JV.PROP_ID] === fieldId) {
  109. rst = item;
  110. break;
  111. }
  112. }
  113. }
  114. }
  115. getField(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS]);
  116. getField(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_NO_MAPPING_FIELDS]);
  117. getField(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]);
  118. getField(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS_EX]);
  119. getField(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS]);
  120. getField(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS_EX]);
  121. return rst;
  122. },
  123. private_get_param_by_id: function (paramId, rptTpl) {
  124. let rst = null;
  125. function getParam(collection) {
  126. if (!rst && collection) {
  127. for (let item of collection) {
  128. if (item[JV.PROP_ID] === paramId) {
  129. rst = item;
  130. break;
  131. }
  132. }
  133. }
  134. }
  135. getParam(rptTpl[JV.NODE_DISCRETE_PARAMS]);
  136. return rst;
  137. },
  138. private_build_field_node: function (fieldData, rptTpl) {
  139. let me = this, rst = null;
  140. if (fieldData) {
  141. rst = {};
  142. let f = me.private_get_field_by_id(fieldData[JV.PROP_FIELD_ID], rptTpl);
  143. if (f) {
  144. rst[JV.PROP_NAME] = f[JV.PROP_NAME];
  145. } else {
  146. rst[JV.PROP_NAME] = fieldData[JV.PROP_FIELD_ID];
  147. }
  148. me.private_copy_field_properties(fieldData, rst);
  149. }
  150. return rst;
  151. },
  152. private_copy_field_properties: function (source, destination) {
  153. let me = this;
  154. destination[JV.PROP_FIELD_ID] = source[JV.PROP_FIELD_ID];
  155. if (source[JV.TAB_FIELD_PROP_SORT]) destination[JV.TAB_FIELD_PROP_SORT] = source[JV.TAB_FIELD_PROP_SORT];
  156. destination[JV.PROP_FONT] = source[JV.PROP_FONT];
  157. destination[JV.PROP_CONTROL] = source[JV.PROP_CONTROL];
  158. destination[JV.PROP_STYLE] = source[JV.PROP_STYLE];
  159. destination[JV.PROP_PREFIX] = source[JV.PROP_PREFIX];
  160. destination[JV.PROP_SUFFIX] = source[JV.PROP_SUFFIX];
  161. destination[JV.PROP_AREA] = {};
  162. me.private_copy_area(source[JV.PROP_AREA], destination[JV.PROP_AREA]);
  163. },
  164. private_copy_area: function (orgArea, destArea) {
  165. destArea[JV.PROP_LEFT] = orgArea[[JV.PROP_LEFT]];
  166. destArea[JV.PROP_RIGHT] = orgArea[[JV.PROP_RIGHT]];
  167. destArea[JV.PROP_TOP] = orgArea[[JV.PROP_TOP]];
  168. destArea[JV.PROP_BOTTOM] = orgArea[[JV.PROP_BOTTOM]];
  169. destArea[JV.PROP_H_CALCULATION] = orgArea[[JV.PROP_H_CALCULATION]];
  170. destArea[JV.PROP_V_CALCULATION] = orgArea[[JV.PROP_V_CALCULATION]];
  171. },
  172. private_build_param_node: function (param, rptTpl) {
  173. let me = this, rst = null;
  174. if (param) {
  175. rst = {};
  176. let p = me.private_get_param_by_id(param[JV.PROP_PARAM_ID], rptTpl);
  177. if (p) {
  178. rst[JV.PROP_NAME] = p[JV.PROP_NAME];
  179. } else {
  180. rst[JV.PROP_NAME] = param[JV.PROP_PARAM_ID];
  181. }
  182. me.private_copy_param_properties(param, rst);
  183. }
  184. return rst;
  185. },
  186. private_copy_param_properties: function (source, destination) {
  187. let me = this;
  188. destination[JV.PROP_PARAM_ID] = source[JV.PROP_PARAM_ID];
  189. destination[JV.PROP_FONT] = source[JV.PROP_FONT];
  190. destination[JV.PROP_CONTROL] = source[JV.PROP_CONTROL];
  191. destination[JV.PROP_STYLE] = source[JV.PROP_STYLE];
  192. destination[JV.PROP_PREFIX] = source[JV.PROP_PREFIX];
  193. destination[JV.PROP_SUFFIX] = source[JV.PROP_SUFFIX];
  194. destination[JV.PROP_AREA] = {};
  195. me.private_copy_area(source[JV.PROP_AREA], destination[JV.PROP_AREA]);
  196. },
  197. private_build_text_node: function (text) {
  198. let me = this, rst = null;
  199. if (text) {
  200. rst = {};
  201. rst[JV.PROP_NAME] = text[JV.PROP_LABEL];
  202. me.private_copy_text_properties(text, rst);
  203. }
  204. return rst;
  205. },
  206. private_copy_text_properties: function (source, destination) {
  207. let me = this;
  208. destination[JV.PROP_LABEL] = source[JV.PROP_LABEL];
  209. destination[JV.PROP_FONT] = source[JV.PROP_FONT];
  210. destination[JV.PROP_CONTROL] = source[JV.PROP_CONTROL];
  211. destination[JV.PROP_STYLE] = source[JV.PROP_STYLE];
  212. destination[JV.PROP_AREA] = {};
  213. me.private_copy_area(source[JV.PROP_AREA], destination[JV.PROP_AREA]);
  214. },
  215. private_get_dummy_text_node: function() {
  216. let me = this, rst = {};
  217. rst[JV.PROP_NAME] = "文本";
  218. rst[JV.PROP_LABEL] = "文本";
  219. rst[JV.PROP_FONT] = "Content";
  220. rst[JV.PROP_CONTROL] = "Default";
  221. rst[JV.PROP_STYLE] = "Default_None";
  222. rst[JV.PROP_AREA] = {};
  223. rst[JV.PROP_AREA][JV.PROP_LEFT] = 0;
  224. rst[JV.PROP_AREA][JV.PROP_RIGHT] = 100;
  225. rst[JV.PROP_AREA][JV.PROP_TOP] = 0;
  226. rst[JV.PROP_AREA][JV.PROP_BOTTOM] = 100;
  227. rst[JV.PROP_AREA][JV.PROP_H_CALCULATION] = JV.CAL_TYPE[0];
  228. rst[JV.PROP_AREA][JV.PROP_V_CALCULATION] = JV.CAL_TYPE[0];
  229. return rst;
  230. },
  231. onTabDataClick: function (event,treeId,treeNode) {
  232. let me = dataInfoMapTreeOprObj, matchedBandNode = null;
  233. let chked = false;
  234. me.currentNode = treeNode;
  235. function checkBandNode(bNode, bandName) {
  236. if (bNode[JV.PROP_NAME] === bandName) {
  237. chked = true;
  238. matchedBandNode = bNode;
  239. } else if (bNode.items){
  240. for (let subNode of bNode.items) {
  241. checkBandNode(subNode, bandName);
  242. if (chked) {
  243. break;
  244. }
  245. }
  246. }
  247. }
  248. let nodes = me.bandTreeObj.getNodes();
  249. function setDisabledBandSelect(disabled) {
  250. for (let node of nodes) {
  251. me.bandTreeObj.setChkDisabled(node, disabled, true, true);
  252. }
  253. }
  254. if (treeNode[JV.PROP_BAND_NAME]) {
  255. for (let node of nodes) {
  256. checkBandNode(node, treeNode[JV.PROP_BAND_NAME]);
  257. if (chked) {
  258. break;
  259. }
  260. }
  261. }
  262. if (chked) {
  263. setDisabledBandSelect(false);
  264. me.bandTreeObj.checkNode(matchedBandNode, true, true);
  265. } else {
  266. setDisabledBandSelect(true);
  267. }
  268. },
  269. onCheck: function (event,treeId,treeNode) {
  270. let me = dataInfoMapTreeOprObj;
  271. if (me.currentNode[JV.PROP_BAND_NAME] && me.currentNode[JV.PROP_BAND_NAME] !== treeNode[JV.PROP_NAME]) {
  272. alert("change band from: " + me.currentNode[JV.PROP_BAND_NAME] + " to : " + treeNode[JV.PROP_NAME]);
  273. me.currentNode[JV.PROP_BAND_NAME] = treeNode[JV.PROP_NAME];
  274. }
  275. },
  276. onBeforeRemove: function(treeId, treeNode){
  277. let rst = true;
  278. if (treeNode.isParent) {
  279. rst = false;
  280. } else {
  281. //
  282. }
  283. return rst;
  284. },
  285. beforeRename: function(treeId, treeNode, newName, isCancel) {
  286. let rst = false;
  287. return rst;
  288. },
  289. beforeEditName: function(treeId, treeNode) {
  290. let rst = false;
  291. let pn = treeNode.getParentNode();
  292. if (pn && pn[JV.PROP_NAME] === "离散文本集") {
  293. rst = true;
  294. }
  295. return rst;
  296. },
  297. onBeforeDrag: function (treeId, treeNodes) {
  298. let rst = true;
  299. for (let node of treeNodes) {
  300. if (node.level === 0) {
  301. rst = false;
  302. break;
  303. }
  304. }
  305. return rst;
  306. },
  307. onBeforeDrop: function(treeId, treeNodes, targetNode, moveType){
  308. let rst = false;
  309. if (targetNode.tId && targetNode.tId.indexOf("tpl_data_info_reversed") >= 0 && (!(targetNode.isParent && moveType !== 'inner')) ) {
  310. if (targetNode.level === 0) {
  311. if (targetNode.Name !== JV.NODE_DISCRETE_INFO && moveType === 'inner') {
  312. rst = true;
  313. }
  314. } else {
  315. let parentNode = targetNode.getParentNode();
  316. if (parentNode.Name === "离散信息") {
  317. // if (targetNode.Name === "Fields") {
  318. // rst = true;
  319. // }
  320. }
  321. }
  322. }
  323. return rst;
  324. },
  325. onRemove: function () {
  326. //
  327. },
  328. onRename: function () {
  329. //
  330. },
  331. addHoverDom: function(treeId, treeNode) {
  332. let me = dataInfoMapTreeOprObj, sObj = $("#" + treeNode.tId + "_span");
  333. if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length > 0) {
  334. return;
  335. } else if ((treeNode.level === 0 && treeNode[JV.PROP_NAME] === JV.NODE_DISCRETE_INFO) || (treeNode.level === 2 && treeNode[JV.PROP_NAME] === "离散文本集")) {
  336. let addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增' onfocus='this.blur();'></span>";
  337. sObj.after(addStr);
  338. let btn = $("#addBtn_"+treeNode.tId);
  339. if (treeNode[JV.PROP_NAME] === JV.NODE_DISCRETE_INFO) {
  340. btn.bind("click", function(){
  341. let amtIdx = treeNode.items.length + 1;
  342. let node = {};
  343. node[JV.PROP_NAME] = "离散" + amtIdx;
  344. node[JV.PROP_BAND_NAME] = me.bandTreeObj.getNodes()[0][JV.PROP_NAME];
  345. node.items = [];
  346. let fields = {"Name": "离散字段集", "items": [], "isParent": true};
  347. let texts = {"Name": "离散文本集", "items": [], "isParent": true};
  348. node.items.push(fields);
  349. node.items.push(texts);
  350. let newNodes = [];
  351. newNodes.push(node);
  352. me.treeObj.addNodes(treeNode, -1, newNodes, true);
  353. });
  354. } else {
  355. //text
  356. btn.bind("click", function(){
  357. let node = me.private_get_dummy_text_node();
  358. let newNodes = [];
  359. newNodes.push(node);
  360. me.treeObj.addNodes(treeNode, -1, newNodes, true);
  361. });
  362. }
  363. }
  364. },
  365. removeHoverDom: function(treeId, treeNode) {
  366. $("#addBtn_"+treeNode.tId).unbind().remove();
  367. },
  368. extractTabFields: function (rptTpl) {
  369. let me = dataInfoMapTreeOprObj;
  370. // for (let rootNode of me.treeObj.getNodes()) {
  371. // rptTpl[JV.NODE_FIELD_MAP][rootNode.Name] = [];
  372. // for (let mappingFieldNode of rootNode.items) {
  373. // rptTpl[JV.NODE_FIELD_MAP][rootNode.Name].push(me.createMapFieldByNode(mappingFieldNode));
  374. // }
  375. // }
  376. if (rptTpl[JV.NODE_FLOW_INFO]) {
  377. //
  378. }
  379. if (rptTpl[JV.NODE_CROSS_INFO]) {
  380. //
  381. }
  382. if (rptTpl[JV.NODE_BILL_INFO]) {
  383. let nodes = me.treeObj.getNodes();
  384. for (let node of nodes) {
  385. if (node[JV.PROP_NAME] === JV.NODE_BILL_CONTENT) {
  386. let newContent = {};
  387. newContent[JV.PROP_BAND_NAME] = node[JV.PROP_BAND_NAME];
  388. newContent[JV.PROP_BILL_FIELDS] = [];
  389. for (let subNode of node.items) {
  390. let f = {};
  391. me.private_copy_field_properties(subNode, f);
  392. newContent[JV.PROP_BILL_FIELDS].push(f);
  393. }
  394. rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT] = newContent;
  395. } else if (node[JV.PROP_NAME] === JV.NODE_DISCRETE_INFO) {
  396. rptTpl[JV.NODE_BILL_INFO][JV.NODE_DISCRETE_INFO] = me.private_extract_discrete_info(node);
  397. }
  398. }
  399. }
  400. },
  401. private_extract_discrete_info: function(discreteNode) {
  402. let me = this, rst = [];
  403. for (let node of discreteNode) {
  404. let newContent = {};
  405. rst.push(newContent);
  406. newContent[JV.PROP_BAND_NAME] = node[JV.PROP_BAND_NAME];
  407. if (node[JV.PROP_DISCRETE_FIELDS] && node[JV.PROP_DISCRETE_FIELDS].length > 0) {
  408. newContent[JV.PROP_DISCRETE_FIELDS] = [];
  409. for (let field of node[JV.PROP_DISCRETE_FIELDS]) {
  410. let item = {};
  411. newContent[JV.PROP_DISCRETE_FIELDS].push(item);
  412. if (field[JV.PROP_FIELD_ID]) {
  413. me.private_copy_field_properties(field, item);
  414. } else if (field[JV.PROP_PARAM_ID]) {
  415. me.private_copy_param_properties(field, item);
  416. }
  417. }
  418. }
  419. if (node[JV.PROP_TEXTS] && node[JV.PROP_TEXTS].length > 0) {
  420. newContent[JV.PROP_TEXTS] = [];
  421. for (let txt of node[JV.PROP_TEXTS]) {
  422. let item = {};
  423. newContent[JV.PROP_TEXTS].push(item);
  424. me.private_copy_text_properties(txt, item);
  425. }
  426. }
  427. }
  428. return rst;
  429. },
  430. extractDiscreteFieldParam: function(rptTpl) {
  431. let me = dataInfoMapTreeOprObj;
  432. },
  433. createMapFieldByNode: function (node) {
  434. //
  435. }
  436. };