rpt_tpl_pre_handle.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  1. /**
  2. * Created by Tony on 2017/12/26.
  3. */
  4. const sort_types = ["normal", "tree", "accord_to_parent", "self_define"];
  5. const pre_handle_data_objects = ["bills", "ration", "ration_glj"];
  6. const pre_handle_data_objects_name = ["清单", "定额", "定额工料机"];
  7. const exposed_bills_properties = [
  8. {Name: "清单_ID", Title: "", Key: "ID"},
  9. {Name: "清单_所属项目ID", Title: "", Key: "projectID"},
  10. {Name: "清单_项目编码", Title: "", Key: "code"},
  11. {Name: "清单_项目名称", Title: "", Key: "name"},
  12. {Name: "清单_项目特征", Title: "", Key: "itemCharacterText"},
  13. {Name: "清单_计量单位", Title: "", Key: "unit"},
  14. {Name: "清单_工程量", Title: "", Key: "quantity"},
  15. {Name: "清单_综合单价", Title: "", Key: "unitFee"},
  16. {Name: "清单_综合合价", Title: "", Key: "totalFee"},
  17. {Name: "清单_暂估价", Title: "", Key: "tenderUnitFee"}
  18. ];
  19. const exposed_ration_properties = [
  20. {Name: "定额_工程内部ID", Title: "", Key: "ID"},
  21. {Name: "定额_所属清单ID", Title: "", Key: "billsItemID"},
  22. {Name: "定额_所属项目ID", Title: "", Key: "projectID"},
  23. {Name: "定额_编号", Title: "", Key: "code"},
  24. {Name: "定额_项目名称", Title: "", Key: "caption"},
  25. {Name: "定额_单位", Title: "", Key: "unit"},
  26. {Name: "定额_数量", Title: "", Key: "quantity"},
  27. {Name: "定额_人工费", Title: "", Key: "labour"},
  28. {Name: "定额_材料费", Title: "", Key: "material"},
  29. {Name: "定额_机械费", Title: "", Key: "machine"},
  30. {Name: "定额_机上人工费", Title: "", Key: "machineLabour"},
  31. {Name: "定额_人工费调整", Title: "", Key: "adjustLabour"},
  32. {Name: "定额_材料费调整", Title: "", Key: "'adjustMaterial'"},
  33. {Name: "定额_机械费调整", Title: "", Key: "adjustMachine"},
  34. {Name: "定额_机上人工费调整", Title: "", Key: "adjustMachineLabour"},
  35. {Name: "定额_人工价差", Title: "", Key: "labourDiff"},
  36. {Name: "定额_材料价差", Title: "", Key: "materialDiff"},
  37. {Name: "定额_机械价差", Title: "", Key: "machineDiff"},
  38. {Name: "定额_风险费用", Title: "", Key: "risk"}
  39. // {Name: "定额_管理费率", Title: "", Key: ""}
  40. ];
  41. const exposed_prj_glj_properties = [
  42. {Name: "工料机_ID", Title: "", Key: "ID"},
  43. {Name: "工料机_所属定额ID", Title: "", Key: "rationID"},
  44. {Name: "工料机_所属清单ID", Title: "", Key: "billsItemID"},
  45. {Name: "工料机_所属工程ID", Title: "", Key: "projectID"},
  46. {Name: "工料机_代码", Title: "", Key: "code"},
  47. {Name: "工料机_名称", Title: "", Key: "name"},
  48. {Name: "工料机_单位", Title: "", Key: "unit"},
  49. {Name: "工料机_数量", Title: "", Key: "quantity"}
  50. ];
  51. const exposed_properties_arr = [exposed_bills_properties, exposed_ration_properties, exposed_prj_glj_properties];
  52. let preHandleObj = {
  53. treeObj: null,
  54. typeTreeObj: null,
  55. currentNode: null,
  56. iniTree: function(rptTpl) {
  57. let me = this;
  58. me.buildData(rptTpl);
  59. },
  60. buildData: function(rptTpl) {
  61. let me = this, handles = [];
  62. if (rptTpl[JV.NODE_MAP_DATA_HANDLE_INFO]) {
  63. for (let item of rptTpl[JV.NODE_MAP_DATA_HANDLE_INFO]) {
  64. let hd = {Name: "预处理环节"};
  65. me.private_copy_node(item, hd);
  66. me.private_set_title(hd);
  67. hd.Operations = []; //考虑到用户可能会换来换去,这样会有冗余的属性出现
  68. handles.push(hd);
  69. }
  70. }
  71. me.treeObj = $.fn.zTree.init($("#pre_handle_data_info_reversed"), preHandleSetting, handles);
  72. },
  73. build_handle_data_selection: function() {
  74. let sel = $("#select_mapping_data"), sel2 = $("#select_mapping_data_for_sort_type");
  75. for (let i = 0; i < pre_handle_data_objects.length; i++) {
  76. sel2.append("<option value='" + pre_handle_data_objects[i] + "'>" + pre_handle_data_objects_name[i] + "</option>");
  77. sel.append("<option value='" + pre_handle_data_objects[i] + "'>" + pre_handle_data_objects_name[i] + "</option>");
  78. }
  79. },
  80. buildTypeData: function () {
  81. let me = this, types = [];
  82. types.push({Name: JV.PROP_HANDLE_TYPE_SORT, Title: ""});
  83. types.push({Name: JV.PROP_HANDLE_TYPE_FILTER, Title: ""});
  84. types.push({Name: JV.PROP_HANDLE_TYPE_SUM, Title: ""});
  85. types.push({Name: JV.PROP_HANDLE_TYPE_ADJUST, Title: ""});
  86. types.push({Name: JV.PROP_HANDLE_TYPE_ADD_DUMMY, Title: ""});
  87. // types.push({Name: "纯手工填写", Title: ""});
  88. me.typeTreeObj = $.fn.zTree.init($("#pre_handle_type_reversed"), preHandleTypeSetting, types);
  89. me.setDisabledBandSelect(true);
  90. me.build_handle_data_selection();
  91. },
  92. setDisabledBandSelect: function(disabled) {
  93. let me = this;
  94. if (me.typeTreeObj) {
  95. let nodes = me.typeTreeObj.getNodes();
  96. for (let node of nodes) {
  97. me.typeTreeObj.setChkDisabled(node, disabled, true, true);
  98. }
  99. }
  100. },
  101. addNewNode: function() {
  102. let me = this, item = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": "排序", "排序方式": "normal", Operations : []};
  103. me.private_set_title(item);
  104. me.treeObj.addNodes(null, -1, [item], true);
  105. },
  106. private_copy_node: function(src, dest) {
  107. let me = this;
  108. dest[JV.PROP_DATA_KEY] = src[JV.PROP_DATA_KEY];
  109. dest[JV.PROP_HANDLE_TYPE] = src[JV.PROP_HANDLE_TYPE];
  110. if (src[JV.PROP_HANDLE_TYPE] === JV.PROP_HANDLE_TYPE_SORT) {
  111. preHandleSortObj.copyNode(src, dest);
  112. } else if (src[JV.PROP_HANDLE_TYPE] === JV.PROP_HANDLE_TYPE_FILTER) {
  113. preHandleFilterObj.copyNode(src, dest);
  114. } else if (src[JV.PROP_HANDLE_TYPE] === JV.PROP_HANDLE_TYPE_SUM) {
  115. preHandleSummaryObj.copyNode(src, dest);
  116. } else if (src[JV.PROP_HANDLE_TYPE] === JV.PROP_HANDLE_TYPE_ADJUST) {
  117. preHandleAdjustObj.copyNode(src, dest);
  118. } else if (src[JV.PROP_HANDLE_TYPE] === JV.PROP_HANDLE_TYPE_ADD_DUMMY) {
  119. preHandleAddDummyObj.copyNode(src, dest);
  120. }
  121. // if (src[JV.PROP_SORT_TYPE]) dest[JV.PROP_SORT_TYPE] = src[JV.PROP_SORT_TYPE];
  122. // if (src[JV.PROP_PARENT_DATA_KEY]) dest[JV.PROP_PARENT_DATA_KEY] = src[JV.PROP_PARENT_DATA_KEY];
  123. // if (src[JV.PROP_PARENT_CHILD_SORT_KEY]) dest[JV.PROP_PARENT_CHILD_SORT_KEY] = src[JV.PROP_PARENT_CHILD_SORT_KEY];
  124. // if (src[JV.PROP_PARENT_SORT_KEYS]) dest[JV.PROP_PARENT_SORT_KEYS] = src[JV.PROP_PARENT_SORT_KEYS];
  125. // if (src[JV.PROP_CHILD_SORT_KEYS]) dest[JV.PROP_CHILD_SORT_KEYS] = src[JV.PROP_CHILD_SORT_KEYS];
  126. // if (src[JV.PROP_OTHER_SUB_SORT]) dest[JV.PROP_OTHER_SUB_SORT] = src[JV.PROP_OTHER_SUB_SORT];
  127. // if (src[JV.PROP_FILTER_KEY]) dest[JV.PROP_FILTER_KEY] = src[JV.PROP_FILTER_KEY];
  128. // if (src[JV.PROP_FILTER_COMPARE_OBJ]) dest[JV.PROP_FILTER_COMPARE_OBJ] = src[JV.PROP_FILTER_COMPARE_OBJ];
  129. // if (src[JV.PROP_FILTER_COMPARE_OBJ_KEY]) dest[JV.PROP_FILTER_COMPARE_OBJ_KEY] = src[JV.PROP_FILTER_COMPARE_OBJ_KEY];
  130. // if (src[JV.PROP_FILTER_COMPARE_VAL]) dest[JV.PROP_FILTER_COMPARE_VAL] = src[JV.PROP_FILTER_COMPARE_VAL];
  131. // if (src[JV.PROP_FILTER_CONDITION]) dest[JV.PROP_FILTER_CONDITION] = src[JV.PROP_FILTER_CONDITION];
  132. // if (src[JV.PROP_HANDLE_TYPE_SUM]) dest[JV.PROP_HANDLE_TYPE_SUM] = src[JV.PROP_HANDLE_TYPE_SUM];
  133. // if (src[JV.PROP_HANDLE_TYPE_SORT]) dest[JV.PROP_HANDLE_TYPE_SORT] = src[JV.PROP_HANDLE_TYPE_SORT];
  134. // if (src[JV.PROP_HANDLE_TYPE_ADD_DUMMY]) dest[JV.PROP_HANDLE_TYPE_ADD_DUMMY] = src[JV.PROP_HANDLE_TYPE_ADD_DUMMY];
  135. // if (src[JV.PROP_HANDLE_TYPE_ADJUST]) dest[JV.PROP_HANDLE_TYPE_ADJUST] = src[JV.PROP_HANDLE_TYPE_ADJUST];
  136. // if (src[JV.PROP_PARENT_DATA_KEY]) dest[JV.PROP_PARENT_DATA_KEY] = src[JV.PROP_PARENT_DATA_KEY];
  137. },
  138. private_set_title: function(node) {
  139. let nameStr = node[JV.PROP_NAME], idx = nameStr.indexOf("(");
  140. if (idx >= 0) {
  141. nameStr = nameStr.slice(0, idx);
  142. }
  143. node[JV.PROP_NAME] = nameStr + "(" + node["预处理类型"] + ")";
  144. node.Title = "映射数据对象:" + node["映射数据对象"] + " | " + node["预处理类型"];
  145. },
  146. refreshByNode: function(treeNode) {
  147. let me = preHandleObj;
  148. if (me.typeTreeObj) {
  149. let nodes = me.typeTreeObj.getNodes();
  150. let typeNode = null;
  151. for (let node of nodes) {
  152. if (treeNode[JV.PROP_NAME].indexOf(node[JV.PROP_NAME]) > 0) {
  153. me.typeTreeObj.checkNode(node, true, false, false);
  154. typeNode = node;
  155. break;
  156. }
  157. }
  158. let md = $("#select_mapping_data")[0];
  159. for (let i = 0; i < md.children.length; i++) {
  160. if (treeNode[JV.PROP_DATA_KEY] === md.children[i].value) {
  161. md.selectedIndex = i;
  162. break;
  163. }
  164. }
  165. if (typeNode) {
  166. me.hide_all_dom();
  167. $("#div_pre_handle_data")[0].style.display = "";
  168. if (typeNode[JV.PROP_NAME] === "排序") {
  169. preHandleSortObj.refresh_node();
  170. } else if (typeNode[JV.PROP_NAME] === "过滤") {
  171. preHandleFilterObj.refresh_node();
  172. } else if (typeNode[JV.PROP_NAME] === "合计") {
  173. preHandleSummaryObj.refresh_node();
  174. } else if (typeNode[JV.PROP_NAME] === "数据调整") {
  175. preHandleAdjustObj.refresh_node();
  176. } else if (typeNode[JV.PROP_NAME] === "增加Dummy数据") {
  177. preHandleAddDummyObj.refresh_node();
  178. }
  179. }
  180. }
  181. },
  182. hide_all_dom: function() {
  183. $("#div_pre_handle_data")[0].style.display = "none";
  184. $("#div_sort_type")[0].style.display = "none";
  185. $("#div_sort_type_normal")[0].style.display = "none";
  186. $("#div_filter_type")[0].style.display = "none";
  187. $("#div_summary_type")[0].style.display = "none";
  188. $("#div_adjust_type")[0].style.display = "none";
  189. $("#div_add_dummy_type")[0].style.display = "none";
  190. $("#div_sort_type_according_to_parent")[0].style.display = "none";
  191. $("#div_sort_type_parent_data")[0].style.display = "none";
  192. },
  193. onPreHandleClick: function(event,treeId,treeNode) {
  194. let me = preHandleObj;
  195. me.currentNode = treeNode;
  196. me.setDisabledBandSelect(false);
  197. me.refreshByNode(treeNode);
  198. },
  199. onTypeClick: function(event,treeId,treeNode) {
  200. //
  201. },
  202. onChangeDataMappingObj: function(dom, oprType) {
  203. if (oprType === "top") {
  204. $.fn.zTree.init($("#child_sorting_keys"), sortingKeysSetting, exposed_properties_arr[dom.selectedIndex]);
  205. } else if (oprType === "accord_to_parent") {
  206. $.fn.zTree.init($("#parent_sorting_keys"), sortingKeysSetting, exposed_properties_arr[dom.selectedIndex]);
  207. }
  208. },
  209. onSortTypeChange: function(dom) {
  210. if (dom.selectedIndex === 2) {
  211. $("#div_sort_type_according_to_parent")[0].style.display = "";
  212. $("#div_sort_type_parent_data")[0].style.display = "";
  213. } else {
  214. $("#div_sort_type_according_to_parent")[0].style.display = "none";
  215. $("#div_sort_type_parent_data")[0].style.display = "none";
  216. }
  217. },
  218. onBeforeDrop: function(treeId, treeNodes, targetNode, moveType){
  219. //
  220. },
  221. onBeforeRemove: function(treeId, treeNode){
  222. let rst = true;
  223. if (treeNode.isParent) {
  224. rst = false;
  225. } else {
  226. //
  227. }
  228. return rst;
  229. },
  230. extractTabFields: function (rptTpl) {
  231. //
  232. }
  233. };
  234. let preHandleSortObj = {
  235. copyNode: function (src, dest) {
  236. dest[JV.PROP_SORT_TYPE] = src[JV.PROP_SORT_TYPE];
  237. switch (sort_types.indexOf(src[JV.PROP_SORT_TYPE])) {
  238. case -1:
  239. //unknown!
  240. break;
  241. case 0 :
  242. //normal
  243. break;
  244. case 1 :
  245. //tree
  246. break;
  247. case 2 :
  248. //according to parent
  249. dest[JV.PROP_PARENT_CHILD_SORT_KEY] = {};
  250. dest[JV.PROP_OTHER_SUB_SORT] = [];
  251. dest[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_DATA_KEY] = src[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_DATA_KEY];
  252. dest[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_SORT_KEYS] = [];
  253. for (let item of src[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_SORT_KEYS]) {
  254. dest[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_SORT_KEYS].push(item);
  255. }
  256. dest[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_CHILD_SORT_KEYS] = [];
  257. for (let item of src[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_CHILD_SORT_KEYS]) {
  258. dest[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_CHILD_SORT_KEYS].push(item);
  259. }
  260. for (let subSort of src[JV.PROP_OTHER_SUB_SORT]) {
  261. let st = {};
  262. st[JV.PROP_SORT_TYPE] = subSort[JV.PROP_SORT_TYPE];
  263. if (subSort[JV.PROP_SORT_TYPE] === "normal") {
  264. st[JV.PROP_SORT_KEYS] = [];
  265. for (let item of subSort[JV.PROP_SORT_KEYS]) {
  266. let di = {key: item.key, order: item.order};
  267. st[JV.PROP_SORT_KEYS].push(di);
  268. }
  269. } else {
  270. //其他暂时不实现,目前没那么复杂
  271. }
  272. }
  273. break;
  274. case 3 :
  275. //self define
  276. break;
  277. default:
  278. break;
  279. }
  280. },
  281. refresh_node: function () {
  282. $("#div_sort_type")[0].style.display = "";
  283. if (preHandleObj.currentNode) {
  284. let sel = $("#select_sort_types")[0];
  285. let idx = -1;
  286. let sortTypeIdx = sort_types.indexOf(preHandleObj.currentNode[JV.PROP_SORT_TYPE]);
  287. sel.selectedIndex = sortTypeIdx;
  288. switch (sortTypeIdx) {
  289. case -1:
  290. //unknown!
  291. break;
  292. case 0 :
  293. //normal
  294. $("#div_sort_type_normal")[0].style.display = "";
  295. idx = pre_handle_data_objects.indexOf(preHandleObj.currentNode[JV.PROP_DATA_KEY]);
  296. $.fn.zTree.init($("#pre_handle_sort_keys_reversed"), sortingKeysSetting, exposed_properties_arr[idx]);
  297. let sortKeyRoot = {Name: JV.PROP_SORT_KEYS, items: [], isParent: true};
  298. let sortKeys = [];
  299. // me.treeObj = $.fn.zTree.init($("#pre_handle_sort_keys_reversed"), preHandleSetting, handles);
  300. break;
  301. case 1 :
  302. //tree
  303. //tree排序是我们特有的数据结构方式,与数据结构有关,非common用
  304. break;
  305. case 2 :
  306. //according to parent
  307. $("#div_sort_type_according_to_parent")[0].style.display = "";
  308. $("#div_sort_type_parent_data")[0].style.display = "";
  309. sel = $("#select_mapping_data_for_sort_type")[0];
  310. idx = pre_handle_data_objects.indexOf(preHandleObj.currentNode[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_DATA_KEY]);
  311. sel.selectedIndex = idx;
  312. //parent_sorting_keys
  313. $.fn.zTree.init($("#parent_sorting_keys"), sortingKeysSetting, exposed_properties_arr[idx]);
  314. //child_sorting_keys
  315. idx = pre_handle_data_objects.indexOf(preHandleObj.currentNode[JV.PROP_DATA_KEY]);
  316. $.fn.zTree.init($("#child_sorting_keys"), sortingKeysSetting, exposed_properties_arr[idx]);
  317. break;
  318. case 3 :
  319. //self define
  320. break;
  321. default:
  322. break;
  323. }
  324. }
  325. },
  326. onCheck: function(event,treeId,treeNode) {
  327. //
  328. }
  329. };
  330. let preHandleFilterObj = {
  331. copyNode: function (src, dest) {
  332. //
  333. },
  334. refresh_node: function () {
  335. $("#div_filter_type")[0].style.display = "";
  336. if (preHandleObj.currentNode) {
  337. }
  338. }
  339. };
  340. let preHandleSummaryObj = {
  341. copyNode: function (src, dest) {
  342. //
  343. },
  344. refresh_node: function () {
  345. $("#div_summary_type")[0].style.display = "";
  346. if (preHandleObj.currentNode) {
  347. }
  348. }
  349. };
  350. let preHandleAdjustObj = {
  351. copyNode: function (src, dest) {
  352. //
  353. },
  354. refresh_node: function () {
  355. $("#div_adjust_type")[0].style.display = "";
  356. if (preHandleObj.currentNode) {
  357. }
  358. }
  359. };
  360. let preHandleAddDummyObj = {
  361. copyNode: function (src, dest) {
  362. //
  363. },
  364. refresh_node: function () {
  365. $("#div_add_dummy_type")[0].style.display = "";
  366. if (preHandleObj.currentNode) {
  367. }
  368. }
  369. };