rpt_tpl_field_map.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. /**
  2. * Created by Tony on 2017/6/7.
  3. * 各种指标处理对象
  4. * 包括:可映射指标、报表已选指标集合、离散独立指标和参数
  5. */
  6. 'use strict'
  7. let fieldMapTreeOprObj = {
  8. treeObj : null,
  9. currentNode: null,
  10. dataTypeDef: ['string', 'int32', 'int64', 'double', 'currency', 'date', 'image', 'object'],
  11. iniTree: function(rptTpl) {
  12. var me = this;
  13. let fieldMapList = me.buildTreeData(rptTpl);
  14. me.treeObj = $.fn.zTree.init($("#field_map_tree_reversed"), fieldMapSetting, fieldMapList);
  15. me.treeObj.expandAll(true);
  16. let topNodes = me.treeObj.getNodes();
  17. for (let node of topNodes) {
  18. me.treeObj.setChkDisabled(node, true);
  19. }
  20. },
  21. buildTreeData: function (rptTpl) {
  22. let rst = [];
  23. let private_setSubFields = function (parent, fieldList) {
  24. for (let field of fieldList) {
  25. if (field[JV.PROP_IS_ID]) {
  26. field.checked = true;
  27. }
  28. field.Title = "ID: " + field[JV.PROP_ID];
  29. parent.items.push(field);
  30. }
  31. }
  32. if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS]) {
  33. rst.push({Name: JV.NODE_DISCRETE_FIELDS, items: [], isParent: true});
  34. private_setSubFields(rst[rst.length - 1], rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS])
  35. }
  36. if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]) {
  37. rst.push({Name: JV.NODE_MASTER_FIELDS, items: [], isParent: true});
  38. private_setSubFields(rst[rst.length - 1], rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS])
  39. }
  40. if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS]) {
  41. rst.push({Name: JV.NODE_DETAIL_FIELDS, items: [], isParent: true});
  42. private_setSubFields(rst[rst.length - 1], rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS])
  43. }
  44. return rst;
  45. },
  46. copySelectedFieldList: function () {
  47. let me = fieldMapTreeOprObj, rst = [];
  48. if (me.treeObj) {
  49. let nodes = me.treeObj.getNodes();
  50. for (let node of nodes) {
  51. let item = {Name: node.Name, items: [], isParent: true, Title: ""};
  52. if (node.items) {
  53. for (let subNode of node.items) {
  54. let subItem = me.createMapFieldByNode(subNode);
  55. item.items.push(subItem);
  56. }
  57. }
  58. rst.push(item)
  59. }
  60. }
  61. return rst;
  62. },
  63. onClick: function (event,treeId,treeNode) {
  64. let me = fieldMapTreeOprObj;
  65. me.currentNode = treeNode;
  66. //then refresh the field map tab properties
  67. //数据类型
  68. // switch (me.dataTypeDef.indexOf(treeNode[JV.PROP_DATA_TYPE])) {
  69. // case 0:
  70. // $("#fieldDataTypeSelection").get(0).selectedIndex = 0;
  71. // break;
  72. // case 1:
  73. // case 2:
  74. // case 3:
  75. // case 4:
  76. // $("#fieldDataTypeSelection").get(0).selectedIndex = 1;
  77. // break;
  78. // case 5:
  79. // $("#fieldDataTypeSelection").get(0).selectedIndex = 2;
  80. // break;
  81. // case 6:
  82. // $("#fieldDataTypeSelection").get(0).selectedIndex = 3;
  83. // break;
  84. // default:
  85. // $("#fieldDataTypeSelection").get(0).selectedIndex = 0;
  86. // break;
  87. // }
  88. //映射指标
  89. },
  90. onBeforeRemove: function(treeId, treeNode){
  91. if (treeNode.level === 0) {
  92. return false;
  93. }
  94. return true;
  95. },
  96. beforeRename: function(treeId, treeNode, newName, isCancel) {
  97. if (isCancel) {
  98. return true;
  99. }
  100. if (treeNode.level === 0) {
  101. return false;
  102. }
  103. return true;
  104. },
  105. onBeforeDrop: function(treeId, treeNodes, targetNode, moveType){
  106. let rst = true;
  107. if (treeId === 'selectable_field_tree_reversed' || targetNode.level === 0 || moveType === 'inner') {
  108. rst = false;
  109. } else {
  110. //
  111. }
  112. return rst;
  113. },
  114. onRemove: function (e, treeId, treeNode) {
  115. //
  116. },
  117. onRename: function (e, treeId, treeNode, isCancel) {
  118. //
  119. },
  120. extractFieldMaps: function (rptTpl) {
  121. let me = this;
  122. for (let rootNode of me.treeObj.getNodes()) {
  123. rptTpl[JV.NODE_FIELD_MAP][rootNode.Name] = [];
  124. let idSeq = 1;
  125. for (let mappingFieldNode of rootNode.items) {
  126. let item = me.createMapFieldByNode(mappingFieldNode);
  127. if (mappingFieldNode.checked) {
  128. item[JV.PROP_IS_ID] = true;
  129. item[JV.PROP_ID_SEQ] = idSeq;
  130. idSeq++;
  131. }
  132. rptTpl[JV.NODE_FIELD_MAP][rootNode.Name].push(item);
  133. }
  134. }
  135. },
  136. createMapFieldByNode: function (node) {
  137. let rst = {}, me = this;
  138. me.copyMapFieldNode(node, rst);
  139. return rst;
  140. },
  141. copyMapFieldNode: function (src, dest) {
  142. dest[JV.PROP_ID] = src[JV.PROP_ID];
  143. dest[JV.PROP_NAME] = src[JV.PROP_NAME];
  144. dest[JV.PROP_DATA_TYPE] = src[JV.PROP_DATA_TYPE];
  145. dest.mapExpression = src.mapExpression;
  146. dest.adHocFormula = src.adHocFormula;
  147. dest.descr = src.descr;
  148. dest.Title = "ID: " + src[JV.PROP_ID];
  149. if (src.Precision) {
  150. dest.Precision = src.Precision;
  151. }
  152. },
  153. refreshFields: function () {
  154. let me = this;
  155. if (me.treeObj && selectableFiledTreeOprObj.treeObj) {
  156. let selectableFields = [];
  157. let private_get_all_selectable_fields = function (fieldNode) {
  158. if (fieldNode.isParent) {
  159. for (let dtlSF of fieldNode.items) {
  160. private_get_all_selectable_fields(dtlSF);
  161. }
  162. } else {
  163. selectableFields.push(fieldNode);
  164. }
  165. };
  166. let selectableFieldNodes = selectableFiledTreeOprObj.treeObj.getNodes();
  167. for (let subFn of selectableFieldNodes) {
  168. private_get_all_selectable_fields(subFn);
  169. }
  170. let topNodes = me.treeObj.getNodes();
  171. for (let node of topNodes) {
  172. if (node.items && node.items.length > 0) {
  173. for (let dtl of node.items) {
  174. for (let sf of selectableFields) {
  175. if (sf.ID === dtl.ID) {
  176. me.copyMapFieldNode(sf, dtl);
  177. break;
  178. }
  179. }
  180. }
  181. }
  182. }
  183. }
  184. }
  185. };
  186. let selectableFiledTreeOprObj = {
  187. treeObj : null,
  188. currentNode: null,
  189. iniTree: function() {
  190. let me = this, params = {};
  191. params.userId = userID;
  192. CommonAjax.postEx("report_tpl_api/getMappingFields", params, 20000, true, function(result){
  193. let showRst = [];
  194. for (let item of result) {
  195. me.decorateMappingFieldList(item);
  196. if (item.items.length > 0) {
  197. showRst.push(item);
  198. }
  199. }
  200. me.treeObj = $.fn.zTree.init($("#selectable_field_tree_reversed"), selectableFieldSetting, showRst);
  201. let nodes = me.treeObj.getNodes();
  202. for (let node of nodes) {
  203. me.treeObj.expandNode(node, true, false);
  204. }
  205. // me.treeObj.expandAll(true);
  206. showRst = null;
  207. }, null, null
  208. );
  209. },
  210. decorateMappingFieldList: function (rawMappingField) {
  211. let me = this;
  212. if (rawMappingField.items && rawMappingField.items.length > 0) {
  213. for (const subMappingField of rawMappingField.items) {
  214. me.decorateMappingFieldList(subMappingField);
  215. }
  216. } else {
  217. rawMappingField.Title = "ID: " + rawMappingField[JV.PROP_ID];
  218. }
  219. },
  220. onClick: function (event,treeId,treeNode) {
  221. let me = fieldMapTreeOprObj;
  222. me.currentNode = treeNode;
  223. },
  224. onBeforeDrag: function (treeId, treeNodes) {
  225. let rst = true;
  226. for (let node of treeNodes) {
  227. if (node.level === 0) {
  228. rst = false;
  229. break;
  230. }
  231. }
  232. return rst;
  233. },
  234. onBeforeDrop: function(treeId, treeNodes, targetNode, moveType){
  235. let rst = true;
  236. if (treeId === 'field_map_tree_reversed') {
  237. if ( (targetNode.level === 0 && moveType !== 'inner') || (targetNode.level > 0 && moveType === 'inner')) {
  238. rst = false;
  239. }
  240. } else {
  241. rst = false;
  242. }
  243. return rst;
  244. },
  245. addDiyDom: function (treeId, treeNode) {
  246. if (treeNode.level > 0) {
  247. let aObj = $("#" + treeNode.tId + "_a");
  248. if ($("#diyBtn_"+treeNode.ID).length>0) return;
  249. let editStr = "<span>&nbsp(" + treeNode.DataType + ")</span>";
  250. aObj.append(editStr);
  251. let btn = $("#diyBtn_"+treeNode.ID);
  252. if (btn) btn.bind("click", function(){alert("diy Button for " + treeNode.name);});
  253. }
  254. }
  255. };
  256. let discreteFieldParamTreeOprObj = {
  257. treeObj : null,
  258. currentNode: null,
  259. local_idx : 12000,
  260. iniTree: function(rptTpl) {
  261. var me = this;
  262. let fieldMapList = me.buildTreeData(rptTpl);
  263. me.treeObj = $.fn.zTree.init($("#tpl_discrete_fields_params_reversed"), discreteFieldParamSetting, fieldMapList);
  264. me.treeObj.expandAll(true);
  265. },
  266. buildTreeData: function(rptTpl){
  267. let me = this, rst = [];
  268. let disFieldNode = {Name: JV.NODE_NO_MAPPING_FIELDS, items: [], isParent: true, Title: ""};
  269. let disParamNode = {Name: JV.NODE_DISCRETE_PARAMS, items: [], isParent: true, Title: ""};
  270. rst.push(disFieldNode);
  271. rst.push(disParamNode);
  272. if (rptTpl[JV.NODE_NO_MAPPING_FIELDS] && rptTpl[JV.NODE_NO_MAPPING_FIELDS].length > 0) {
  273. for (let df of rptTpl[JV.NODE_NO_MAPPING_FIELDS]) {
  274. let node = {};
  275. node[JV.PROP_ID] = df[JV.PROP_ID];
  276. node[JV.PROP_FIELD_ID] = df[JV.PROP_ID];
  277. node[JV.PROP_NAME] = df[JV.PROP_NAME];
  278. node[JV.PROP_DATA_TYPE] = df[JV.PROP_DATA_TYPE];
  279. node.Title = "ID: " + df[JV.PROP_ID];
  280. disFieldNode.items.push(node);
  281. if (parseInt(df[JV.PROP_ID]) >= me.local_idx) me.local_idx = parseInt(df[JV.PROP_ID]) + 1;
  282. }
  283. }
  284. if (rptTpl[JV.NODE_DISCRETE_PARAMS]) {
  285. for (let dp of rptTpl[JV.NODE_DISCRETE_PARAMS]) {
  286. let node = {};
  287. node[JV.PROP_ID] = dp[JV.PROP_ID];
  288. node[JV.PROP_PARAM_ID] = dp[JV.PROP_ID];
  289. node[JV.PROP_NAME] = dp[JV.PROP_NAME];
  290. node[JV.PROP_DATA_TYPE] = dp[JV.PROP_DATA_TYPE];
  291. node[JV.PROP_DFT_VALUE] = dp[JV.PROP_DFT_VALUE];
  292. node.Title = "ID: " + dp[JV.PROP_ID];
  293. disParamNode.items.push(node);
  294. if (parseInt(dp[JV.PROP_ID]) >= me.local_idx) me.local_idx = parseInt(dp[JV.PROP_ID]) + 1;
  295. }
  296. }
  297. return rst;
  298. },
  299. getAndModifyLocalIdx: function() {
  300. let me = discreteFieldParamTreeOprObj, rst = me.local_idx;
  301. me.local_idx++;
  302. return rst;
  303. },
  304. addHoverDom: function(treeId, treeNode) {
  305. let me = discreteFieldParamTreeOprObj, sObj = $("#" + treeNode.tId + "_span");
  306. if (treeNode.level > 0 || $("#addBtn_"+treeNode.tId).length > 0) return;
  307. let addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增子节点' onfocus='this.blur();'></span>";
  308. sObj.after(addStr);
  309. let btn = $("#addBtn_"+treeNode.tId);
  310. if (btn) btn.bind("click", function(){
  311. if (treeNode[JV.PROP_NAME] === JV.NODE_NO_MAPPING_FIELDS) {
  312. let field = me.private_setup_dummy_discrete_field_node();
  313. let newNodes = [field];
  314. me.treeObj.addNodes(treeNode, -1, newNodes, true);
  315. } else if (treeNode[JV.PROP_NAME] === JV.NODE_DISCRETE_PARAMS) {
  316. let param = me.private_setup_dummy_discrete_param_node();
  317. let newNodes = [param];
  318. me.treeObj.addNodes(treeNode, -1, newNodes, true);
  319. }
  320. });
  321. },
  322. private_setup_dummy_discrete_field_node: function () {
  323. let me = discreteFieldParamTreeOprObj, rst = {};
  324. rst[JV.PROP_ID] = me.getAndModifyLocalIdx();
  325. rst[JV.PROP_NAME] = "新离散指标";
  326. rst[JV.PROP_DATA_TYPE] = "string";
  327. rst.descr = "";
  328. rst.Title = "ID: " + rst[JV.PROP_ID];
  329. return rst;
  330. },
  331. private_setup_dummy_discrete_param_node: function () {
  332. let me = discreteFieldParamTreeOprObj, rst = {};
  333. rst[JV.PROP_ID] = me.getAndModifyLocalIdx();
  334. rst[JV.PROP_NAME] = "新离散参数";
  335. rst[JV.PROP_DATA_TYPE] = "string";
  336. rst[JV.PROP_DFT_VALUE] = "";
  337. rst.Title = "ID: " + rst[JV.PROP_ID];
  338. return rst;
  339. },
  340. removeHoverDom: function(treeId, treeNode) {
  341. $("#addBtn_"+treeNode.tId).unbind().remove();
  342. },
  343. onBeforeRemove: function(treeId, treeNode){
  344. let rst = true;
  345. if (treeNode.isParent) {
  346. rst = false;
  347. }
  348. return rst;
  349. },
  350. beforeRename: function(treeId, treeNode, newName, isCancel) {
  351. let rst = true;
  352. if (treeNode.isParent && !isCancel) {
  353. rst = false;
  354. }
  355. return rst;
  356. },
  357. onBeforeDrag: function (treeId, treeNodes) {
  358. let rst = true;
  359. for (let node of treeNodes) {
  360. if (node.level === 0) {
  361. rst = false;
  362. break;
  363. }
  364. }
  365. return rst;
  366. },
  367. onBeforeDrop: function(treeId, treeNodes, targetNode, moveType){
  368. // let rst = false;
  369. // if (targetNode.tId && targetNode.tId.indexOf("tpl_data_info_reversed") >= 0 && (!(targetNode.isParent && moveType !== 'inner')) ) {
  370. // if (targetNode.level === 0) {
  371. // if (targetNode.Name !== "离散信息" && moveType === 'inner') {
  372. // rst = true;
  373. // }
  374. // } else {
  375. // let parentNode = targetNode.getParentNode();
  376. // if (parentNode.Name === "离散信息") {
  377. // if (targetNode.Name === "Fields") {
  378. // rst = true;
  379. // }
  380. // } else if (parentNode.Name === "Fields") {
  381. // rst = true;
  382. // }
  383. // }
  384. // }
  385. // return rst;
  386. },
  387. onRemove: function () {
  388. //
  389. },
  390. onRename: function () {
  391. //
  392. },
  393. extractFieldMaps: function (rptTpl) {
  394. let me = this;
  395. for (let rootNode of me.treeObj.getNodes()) {
  396. if (rootNode[JV.PROP_NAME] === JV.NODE_NO_MAPPING_FIELDS) {
  397. rptTpl[JV.NODE_NO_MAPPING_FIELDS] = [];
  398. for (let fNode of rootNode.items) {
  399. rptTpl[JV.NODE_NO_MAPPING_FIELDS].push(me.createDiscreteFieldByNode(fNode));
  400. }
  401. } else if (rootNode[JV.PROP_NAME] === JV.NODE_DISCRETE_PARAMS) {
  402. rptTpl[JV.NODE_DISCRETE_PARAMS] = [];
  403. for (let pNode of rootNode.items) {
  404. rptTpl[JV.NODE_DISCRETE_PARAMS].push(me.createDiscreteParamByNode(pNode));
  405. }
  406. }
  407. }
  408. },
  409. createDiscreteFieldByNode: function (node) {
  410. let rst = {};
  411. rst[JV.PROP_ID] = node[JV.PROP_ID];
  412. rst[JV.PROP_NAME] = node[JV.PROP_NAME];
  413. rst[JV.PROP_DATA_TYPE] = node[JV.PROP_DATA_TYPE];
  414. rst.descr = node.descr;
  415. return rst;
  416. },
  417. createDiscreteParamByNode: function (node) {
  418. let rst = {};
  419. rst[JV.PROP_ID] = node[JV.PROP_ID];
  420. rst[JV.PROP_NAME] = node[JV.PROP_NAME];
  421. rst[JV.PROP_DATA_TYPE] = node[JV.PROP_DATA_TYPE];
  422. rst[JV.PROP_DFT_VALUE] = node[JV.PROP_DFT_VALUE];
  423. return rst;
  424. }
  425. };