rpt_tpl_field_map.js 16 KB

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