fee_rate_view.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. /**
  2. * Created by chen on 2017/8/1.
  3. */
  4. /*var rate_data = [
  5. {"ID":1,"ParentID":null,"name":"企业管理费","rate":null,"memo":""},
  6. {"ID":101,"ParentID":1,"name":"建筑工程","rate":16.36,"memo":""},
  7. {"ID":102,"ParentID":1,"name":"市政工程","rate":17.43,"memo":""},
  8. {"ID":103,"ParentID":1,"name":"机械土石方","rate":10.82,"memo":""},
  9. {"ID":104,"ParentID":1,"name":"仿古建筑工程","rate":12,"memo":""},
  10. {"ID":105,"ParentID":1,"name":"建筑修缮工程","rate":12.47,"memo":""},
  11. {"ID":106,"ParentID":1,"name":"炉窑砌筑工程","rate":10.8,"memo":""},
  12. {"ID":2, "ParentID":null,"name":"夜间施工费","rate":null,"memo":""},
  13. {"ID":201,"ParentID":2,"name":"建筑工程","rate":0.45,"memo":""},
  14. {"ID":202,"ParentID":2,"name":"市政工程","rate":0.4,"memo":""},
  15. {"ID":203,"ParentID":2,"name":"机械土石方","rate":0.7,"memo":""},
  16. {"ID":204,"ParentID":2,"name":"仿古建筑工程","rate":0.2,"memo":""},
  17. {"ID":205,"ParentID":2,"name":"建筑修缮工程","rate":0.35,"memo":""},
  18. {"ID":206,"ParentID":2,"name":"炉窑砌筑工程","rate":0.4,"memo":""},
  19. {"ID":3, "ParentID":null,"name":"规费","rate":null,"memo":""},
  20. {"ID":301,"ParentID":3,"name":"建筑工程","rate":16.03,"memo":""},
  21. {"ID":302,"ParentID":3,"name":"市政工程","rate":16.33,"memo":""},
  22. {"ID":303,"ParentID":3,"name":"机械土石方","rate":15.5,"memo":""},
  23. {"ID":304,"ParentID":3,"name":"仿古建筑工程","rate":12,"memo":""},
  24. {"ID":305,"ParentID":3,"name":"建筑修缮工程","rate":12.47,"memo":""},
  25. {"ID":306,"ParentID":3,"name":"炉窑砌筑工程","rate":10.8,"memo":""},
  26. {"ID":4,"ParentID":null,"name":"利润","rate":null,"memo":""},
  27. {"ID":401,"ParentID":4,"name":"建筑工程","rate":8.73,"memo":""},
  28. {"ID":402,"ParentID":4,"name":"市政工程","rate":9.2,"memo":""},
  29. {"ID":403,"ParentID":4,"name":"机械土石方","rate":6.5,"memo":""},
  30. {"ID":404,"ParentID":4,"name":"仿古建筑工程","rate":7,"memo":""},
  31. {"ID":405,"ParentID":4,"name":"建筑修缮工程","rate":3.72,"memo":""},
  32. {"ID":406,"ParentID":4,"name":"炉窑砌筑工程","rate":4.9,"memo":""},
  33. {"ID":5,"ParentID":null,"name":"税金","rate":11,"memo":""}];*/
  34. var feeRateObject={
  35. mainViews:null,
  36. datas:null,
  37. canEdit:false,
  38. activateFeeRate:null,
  39. needCascadeSet:false,
  40. selectionLoad:false,
  41. columns: [
  42. {
  43. id: 'name',
  44. caption: '专业名称',
  45. dataField: 'name',
  46. width: 450,
  47. allowEditing: false
  48. },
  49. {
  50. id: 'rate',
  51. caption: '值%',
  52. dataField: 'rate',
  53. format: '0.000',
  54. width: 120,
  55. minWidth: 50,
  56. allowEditing: true
  57. },
  58. {
  59. id: 'memo',
  60. caption: '备注',
  61. dataField: 'memo',
  62. minWidth: 120,
  63. allowEditing: true
  64. },
  65. {
  66. id: 'ID',
  67. caption: 'ID',
  68. dataField: 'ID',
  69. width: 80,
  70. visible: false,
  71. allowEditing: false
  72. },
  73. {
  74. id: 'subFeeRate',
  75. caption: '子费率',
  76. dataField: 'subFeeRate',
  77. width: 80,
  78. visible: false,
  79. allowEditing: false
  80. },
  81. {
  82. id: '_id',
  83. caption: '自动ID',
  84. dataField: '_id',
  85. width: 80,
  86. visible: false,
  87. allowEditing: false
  88. },
  89. {
  90. id: 'ParentID',
  91. caption: '父结点ID',
  92. dataField: 'ParentID',
  93. width: 80,
  94. visible: false,
  95. allowEditing: false
  96. }
  97. ],
  98. options :{
  99. allowSorting: false,
  100. showRowHeader: true,
  101. colMinWidth: 80,
  102. rowHeight: 30,
  103. allowEditing: true,
  104. editMode: 'inline',
  105. editUnit: 'cell',
  106. selectionUnit: "row",
  107. hierarchy: {
  108. keyField: 'ID',
  109. parentField: 'ParentID',
  110. collapsed: false,
  111. column: 'name'
  112. }
  113. },
  114. dataSource : {
  115. loadRange: function(params) {
  116. params.success(feeRateObject.datas);
  117. },
  118. update: function(params) {
  119. if(!params.hasOwnProperty('sourceIndex')){
  120. var selected = feeRateObject.mainViews.getSelections()[0];
  121. params.sourceIndex = selected.sourceRow;
  122. }
  123. if(!$('#cascadeSet').prop('checked')||params.hasOwnProperty('viewIndex')){
  124. projectObj.project.FeeRate.updateFeeRateByEdit(params,feeRateObject.activateFeeRate);
  125. }
  126. params.success();
  127. }
  128. },
  129. createSpreadView:function () {
  130. if (this.mainViews) {
  131. this.mainViews.destroy();
  132. this.mainViews = null;
  133. }
  134. this.activateFeeRate = projectObj.project.FeeRate.getActivateFeeRate();
  135. this.datas = this.activateFeeRate.rates;
  136. this.mainViews = new GC.Spread.Views.DataView($('#divFee')[0],
  137. this.dataSource, this.columns, new GC.Spread.Views.Plugins.GridLayout(this.options));
  138. this.mainViews["rowClick"].addHandler(subRateObject.reFreshRateViews);
  139. this.mainViews .invalidate();
  140. document.querySelector('#divFee').focus();
  141. },
  142. reFreshRateViews:function() {
  143. if(this.mainViews){
  144. this.mainViews.refresh()
  145. }else {
  146. setTimeout("feeRateObject.createSpreadView()",100);
  147. }
  148. },
  149. updateBySelect:function (rate,selectMap,mapID) {
  150. var selected = this.mainViews.getSelections()[0];
  151. var item = this.datas[selected.sourceRow];
  152. item.rate = rate;
  153. _.forEach(selectMap,function (value,key) {
  154. var recode = item.subFeeRate.recodes[key];
  155. var optionList = recode.optionList;
  156. _.forEach(optionList,function (o) {
  157. if(o.value==value){
  158. o.selected=true;
  159. }else {
  160. o.selected = false;
  161. }
  162. })
  163. })
  164. if($('#cascadeSet').prop('checked')){
  165. this.cascadeSetRates(item,selected.sourceRow,mapID,selectMap)
  166. }else {
  167. this.mainViews.data.updateItem(selected.sourceRow,item);
  168. }
  169. projectObj.project.FeeRate.synchronizeFeeRate();
  170. //this.views.data.updateItem()
  171. },
  172. cascadeSetRates:function(selectedItem,sourceRow,mapID,selectMap){
  173. var items=[];
  174. items.push({rateIndex:sourceRow,rate:selectedItem});
  175. _.forEach(this.datas,function (recode,Index) {
  176. if(Index!=sourceRow&&recode.subFeeRate){
  177. var valueMaps = recode.subFeeRate.valueMaps;
  178. var valueMap = _.find(valueMaps,{ID:mapID});
  179. if(valueMap){//选项完全一样的情况
  180. if(valueMap.value==recode.rate){
  181. return;
  182. }else {
  183. recode.rate = valueMap.value;
  184. _.forEach(selectMap,function (value,key) {
  185. var tempRecode = recode.subFeeRate.recodes[key];
  186. var optionList = tempRecode.optionList;
  187. _.forEach(optionList,function (o) {
  188. if(o.value==value){
  189. o.selected=true;
  190. }else {
  191. o.selected = false;
  192. }
  193. })
  194. })
  195. items.push({rateIndex:Index,rate:recode});
  196. }
  197. }else {//某条选项一样的情况
  198. var needUpdate = false;
  199. var selectList = mapID.split('-');
  200. var newList=[];
  201. _.forEach(recode.subFeeRate.recodes,function (r) {
  202. var oList = r.optionList;
  203. var oldSelectIndex=0;
  204. var hasChange=false;
  205. _.forEach(oList,function (o,key) {
  206. if(o.selected){
  207. oldSelectIndex = key;
  208. }
  209. if(_.includes(selectList,o.value)){
  210. needUpdate=true;
  211. o.selected=true;
  212. hasChange=true;
  213. newList.push(o.value);
  214. }else {
  215. o.selected=false;
  216. }
  217. })
  218. if(!hasChange){
  219. oList[oldSelectIndex].selected=true;
  220. newList.push(oList[oldSelectIndex].value)
  221. }
  222. })
  223. if(needUpdate){
  224. var newValue = _.find(valueMaps,{ID:newList.join("-")})//取出费率值并更新
  225. if(newValue){
  226. if(recode.rate != newValue.value){
  227. recode.rate = newValue.value
  228. items.push({rateIndex:Index,rate:recode});
  229. }
  230. }
  231. }
  232. }
  233. }
  234. })
  235. _.forEach(items,function (t) {
  236. feeRateObject.mainViews.data.updateItem(t.rateIndex,t.rate);
  237. })
  238. projectObj.project.FeeRate.batchUpdateFeeRate(items,feeRateObject.activateFeeRate);
  239. },
  240. loadFeeRateSelection:function() {
  241. if(!this.selectionLoad){
  242. var selectedID=0;
  243. _.forEach(projectObj.project.FeeRate.datas,function (data) {
  244. var option = $("<option>").val(data.ID).text(data.libName);
  245. $('#inlineFormCustomSelect').append(option);
  246. if(data.status=='activate'){
  247. selectedID=data.ID;
  248. }
  249. })
  250. $('#inlineFormCustomSelect').val(selectedID);
  251. }
  252. }
  253. }
  254. $('#tab_fee_rate').bind('click', function () {
  255. $("#de").trigger("click");
  256. feeRateObject.reFreshRateViews();
  257. $('#projectName').text(projectInfoObj.projectInfo.name);
  258. feeRateObject.loadFeeRateSelection();
  259. });
  260. /*$('#fee_rates').bind('click', function () {
  261. feeRateObject.datas[0].name = 'test';
  262. feeRateObject.mainViews.refresh();
  263. feeRateObject.mainViews.invalidate();
  264. });*/
  265. $('#inlineFormCustomSelect').change(function(){
  266. var updateTask = [];
  267. var selectID = $(this).val();
  268. var oldValue=0;
  269. _.forEach(projectObj.project.FeeRate.datas,function (feeRate) {
  270. if(feeRate.status=='activate'){
  271. oldValue=feeRate.ID;
  272. }
  273. if(feeRate.ID ==selectID){
  274. feeRate.status='activate';
  275. }else {
  276. feeRate.status='disable';
  277. }
  278. updateTask.push({query:{ID:feeRate.ID,projectID:projectObj.project.ID()},doc:{status:feeRate.status}});
  279. })
  280. projectObj.project.FeeRate.updateStatusBySelected(updateTask);
  281. feeRateObject.createSpreadView();
  282. subRateObject.destorySpreadView();
  283. socket.emit('changeActivateFeeRate',{oldRoom:oldValue,newRoom:selectID});
  284. })