rpt_tpl_field_map.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  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'],
  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. },
  17. buildTreeData: function (rptTpl) {
  18. let rst = [];
  19. let private_setSubFields = function (parent, fieldList) {
  20. for (let field of fieldList) {
  21. parent.items.push(field);
  22. }
  23. }
  24. if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS]) {
  25. rst.push({Name: JV.NODE_DISCRETE_FIELDS, items: [], isParent: true});
  26. private_setSubFields(rst[rst.length - 1], rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS])
  27. }
  28. if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]) {
  29. rst.push({Name: JV.NODE_MASTER_FIELDS, items: [], isParent: true});
  30. private_setSubFields(rst[rst.length - 1], rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS])
  31. }
  32. if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS]) {
  33. rst.push({Name: JV.NODE_DETAIL_FIELDS, items: [], isParent: true});
  34. private_setSubFields(rst[rst.length - 1], rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS])
  35. }
  36. return rst;
  37. },
  38. copySelectedFieldList: function () {
  39. let me = fieldMapTreeOprObj, rst = [];
  40. if (me.treeObj) {
  41. let nodes = me.treeObj.getNodes();
  42. for (let node of nodes) {
  43. let item = {Name: node.Name, items: [], isParent: true};
  44. if (node.items) {
  45. for (let subNode of node.items) {
  46. let subItem = me.createMapFieldByNode(subNode);
  47. item.items.push(subItem);
  48. }
  49. }
  50. rst.push(item)
  51. }
  52. }
  53. return rst;
  54. },
  55. onClick: function (event,treeId,treeNode) {
  56. let me = fieldMapTreeOprObj;
  57. me.currentNode = treeNode;
  58. //then refresh the field map tab properties
  59. //数据类型
  60. switch (me.dataTypeDef.indexOf(treeNode[JV.PROP_DATA_TYPE])) {
  61. case 0:
  62. $("#fieldDataTypeSelection").get(0).selectedIndex = 0;
  63. break;
  64. case 1:
  65. case 2:
  66. case 3:
  67. case 4:
  68. $("#fieldDataTypeSelection").get(0).selectedIndex = 1;
  69. break;
  70. case 5:
  71. $("#fieldDataTypeSelection").get(0).selectedIndex = 2;
  72. break;
  73. case 6:
  74. $("#fieldDataTypeSelection").get(0).selectedIndex = 3;
  75. break;
  76. default:
  77. $("#fieldDataTypeSelection").get(0).selectedIndex = 0;
  78. break;
  79. }
  80. //映射指标
  81. },
  82. onBeforeRemove: function(treeId, treeNode){
  83. if (treeNode.level === 0) {
  84. return false;
  85. }
  86. return true;
  87. },
  88. beforeRename: function(treeId, treeNode, newName, isCancel) {
  89. if (isCancel) {
  90. return true;
  91. }
  92. if (treeNode.level === 0) {
  93. return false;
  94. }
  95. return true;
  96. },
  97. onBeforeDrop: function(treeId, treeNodes, targetNode, moveType){
  98. let rst = true;
  99. if (treeId === 'selectable_field_tree_reversed' || targetNode.level === 0 || moveType === 'inner') {
  100. rst = false;
  101. } else {
  102. //
  103. }
  104. return rst;
  105. },
  106. onRemove: function (e, treeId, treeNode) {
  107. //
  108. },
  109. onRename: function (e, treeId, treeNode, isCancel) {
  110. //
  111. },
  112. extractFieldMaps: function (rptTpl) {
  113. let me = this;
  114. for (let rootNode of me.treeObj.getNodes()) {
  115. rptTpl[JV.NODE_FIELD_MAP][rootNode.Name] = [];
  116. for (let mappingFieldNode of rootNode.items) {
  117. rptTpl[JV.NODE_FIELD_MAP][rootNode.Name].push(me.createMapFieldByNode(mappingFieldNode));
  118. }
  119. }
  120. },
  121. createMapFieldByNode: function (node) {
  122. let rst = {};
  123. rst[JV.PROP_ID] = node[JV.PROP_ID];
  124. rst[JV.PROP_NAME] = node[JV.PROP_NAME];
  125. rst[JV.PROP_DATA_TYPE] = node[JV.PROP_DATA_TYPE];
  126. rst.mapExpression = node.mapExpression;
  127. rst.adHocFormula = node.adHocFormula;
  128. rst.descr = node.descr;
  129. return rst;
  130. }
  131. };
  132. let selectableFiledTreeOprObj = {
  133. treeObj : null,
  134. currentNode: null,
  135. iniTree: function() {
  136. let me = this, params = {};
  137. params.userId = userID;
  138. CommonAjax.postEx("report_tpl_api/getMappingFields", params, 20000, true, function(result){
  139. let showRst = [];
  140. for (let item of result) {
  141. if (item.items.length > 0) {
  142. showRst.push(item);
  143. }
  144. }
  145. me.treeObj = $.fn.zTree.init($("#selectable_field_tree_reversed"), selectableFieldSetting, showRst);
  146. me.treeObj.expandAll(true);
  147. showRst = null;
  148. }, null, null
  149. );
  150. },
  151. onClick: function (event,treeId,treeNode) {
  152. let me = fieldMapTreeOprObj;
  153. me.currentNode = treeNode;
  154. },
  155. onBeforeDrag: function (treeId, treeNodes) {
  156. let rst = true;
  157. for (let node of treeNodes) {
  158. if (node.level === 0) {
  159. rst = false;
  160. break;
  161. }
  162. }
  163. return rst;
  164. },
  165. onBeforeDrop: function(treeId, treeNodes, targetNode, moveType){
  166. let rst = true;
  167. if (treeId === 'field_map_tree_reversed') {
  168. if ( (targetNode.level === 0 && moveType !== 'inner') || (targetNode.level > 0 && moveType === 'inner')) {
  169. rst = false;
  170. }
  171. } else {
  172. rst = false;
  173. }
  174. return rst;
  175. },
  176. addDiyDom: function (treeId, treeNode) {
  177. if (treeNode.level > 0) {
  178. let aObj = $("#" + treeNode.tId + "_a");
  179. if ($("#diyBtn_"+treeNode.ID).length>0) return;
  180. let editStr = "<span>&nbsp(" + treeNode.DataType + ")</span>";
  181. aObj.append(editStr);
  182. let btn = $("#diyBtn_"+treeNode.ID);
  183. if (btn) btn.bind("click", function(){alert("diy Button for " + treeNode.name);});
  184. }
  185. }
  186. };
  187. let discreteFieldParamTreeOprObj = {
  188. treeObj : null,
  189. currentNode: null,
  190. iniTree: function(rptTpl) {
  191. var me = this;
  192. let fieldMapList = me.buildTreeData(rptTpl);
  193. me.treeObj = $.fn.zTree.init($("#tpl_discrete_fields_params_reversed"), discreteFieldParamSetting, fieldMapList);
  194. me.treeObj.expandAll(true);
  195. },
  196. buildTreeData: function(rptTpl){
  197. let rst = [];
  198. let disFieldNode = {Name: JV.NODE_NO_MAPPING_FIELDS, items: [], isParent: true};
  199. let disParamNode = {Name: JV.NODE_DISCRETE_PARAMS, items: [], isParent: true};
  200. rst.push(disFieldNode);
  201. rst.push(disParamNode);
  202. if (rptTpl[JV.NODE_NO_MAPPING_FIELDS] && rptTpl[JV.NODE_NO_MAPPING_FIELDS].length > 0) {
  203. for (let df of rptTpl[JV.NODE_NO_MAPPING_FIELDS]) {
  204. let node = {};
  205. node[JV.PROP_ID] = df[JV.PROP_ID];
  206. node[JV.PROP_FIELD_ID] = df[JV.PROP_ID];
  207. node[JV.PROP_NAME] = df[JV.PROP_NAME];
  208. node[JV.PROP_DATA_TYPE] = df[JV.PROP_DATA_TYPE];
  209. disFieldNode.items.push(node);
  210. }
  211. }
  212. if (rptTpl[JV.NODE_DISCRETE_PARAMS]) {
  213. for (let dp of rptTpl[JV.NODE_DISCRETE_PARAMS]) {
  214. let node = {};
  215. node[JV.PROP_ID] = dp[JV.PROP_ID];
  216. node[JV.PROP_PARAM_ID] = dp[JV.PROP_ID];
  217. node[JV.PROP_NAME] = dp[JV.PROP_NAME];
  218. node[JV.PROP_DATA_TYPE] = dp[JV.PROP_DATA_TYPE];
  219. node[JV.PROP_DFT_VALUE] = dp[JV.PROP_DFT_VALUE];
  220. disParamNode.items.push(node);
  221. }
  222. }
  223. return rst;
  224. },
  225. addHoverDom: function(treeId, treeNode) {
  226. let me = discreteFieldParamTreeOprObj, sObj = $("#" + treeNode.tId + "_span");
  227. if (treeNode.level > 0 || $("#addBtn_"+treeNode.tId).length > 0) return;
  228. let addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增子节点' onfocus='this.blur();'></span>";
  229. sObj.after(addStr);
  230. let btn = $("#addBtn_"+treeNode.tId);
  231. if (btn) btn.bind("click", function(){
  232. //
  233. });
  234. },
  235. removeHoverDom: function(treeId, treeNode) {
  236. $("#addBtn_"+treeNode.tId).unbind().remove();
  237. },
  238. onBeforeRemove: function(treeId, treeNode){
  239. let rst = true;
  240. if (treeNode.isParent) {
  241. rst = false;
  242. }
  243. return rst;
  244. },
  245. beforeRename: function(treeId, treeNode, newName, isCancel) {
  246. let rst = true;
  247. if (treeNode.isParent && !isCancel) {
  248. rst = false;
  249. }
  250. return rst;
  251. },
  252. onBeforeDrag: function (treeId, treeNodes) {
  253. let rst = true;
  254. for (let node of treeNodes) {
  255. if (node.level === 0) {
  256. rst = false;
  257. break;
  258. }
  259. }
  260. return rst;
  261. },
  262. onBeforeDrop: function(treeId, treeNodes, targetNode, moveType){
  263. // let rst = false;
  264. // if (targetNode.tId && targetNode.tId.indexOf("tpl_data_info_reversed") >= 0 && (!(targetNode.isParent && moveType !== 'inner')) ) {
  265. // if (targetNode.level === 0) {
  266. // if (targetNode.Name !== "离散信息" && moveType === 'inner') {
  267. // rst = true;
  268. // }
  269. // } else {
  270. // let parentNode = targetNode.getParentNode();
  271. // if (parentNode.Name === "离散信息") {
  272. // if (targetNode.Name === "Fields") {
  273. // rst = true;
  274. // }
  275. // } else if (parentNode.Name === "Fields") {
  276. // rst = true;
  277. // }
  278. // }
  279. // }
  280. // return rst;
  281. },
  282. onRemove: function () {
  283. //
  284. },
  285. onRename: function () {
  286. //
  287. }
  288. };