sub_fee_rate_views.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. /**
  2. * Created by chen on 2017/8/1.
  3. */
  4. var subRateObject={
  5. views:null,
  6. datas:null,
  7. valueMap:null,
  8. canEdit:true,
  9. subRateSpread:null,
  10. subRateSheet:null,
  11. subRateSetting:{
  12. header: [
  13. {headerName: "参数名称", headerWidth: 160, dataCode: "name", dataType: "String"},
  14. {headerName: "参数值", headerWidth: 150, dataCode: "optionValue", dataType: "String",getText:'forOption'}
  15. ],
  16. view: {
  17. lockColumns: [0]
  18. },
  19. getText:{
  20. forOption:function (item,val) {
  21. if(item.isSub == true) return item.value;//可编辑子节点
  22. let o = _.find(item.optionList,{'selected':true});
  23. return o?o.name:'';
  24. }
  25. }
  26. },
  27. columns: [
  28. {
  29. id: 'name',
  30. caption: '参数名称',
  31. dataField: 'name',
  32. width: 250,
  33. allowEditing: false
  34. },
  35. {
  36. id: 'typeName',
  37. caption: '参数值',
  38. dataField: 'typeName',
  39. width: 200,
  40. minWidth: 50,
  41. allowEditing: true,
  42. presenter:'<div><select class="form-control form-control-sm" id="{{=it.ID}}" onchange="subRateObject.subRateChange(this)" style="width: 100%"> </select></div>'
  43. },
  44. {
  45. id: 'ID',
  46. caption: 'ID',
  47. dataField: 'ID',
  48. width: 80,
  49. visible: false,
  50. allowEditing: false
  51. }
  52. ],
  53. options :{
  54. allowSorting: false,
  55. showRowHeader: true,
  56. colMinWidth: 80,
  57. rowHeight: 33,
  58. allowEditing: this.canEdit,
  59. editMode: 'inline',
  60. editUnit: 'cell',
  61. selectionUnit:(this.canEdit == true) ? "cell" : "row"
  62. },
  63. createSpreadView:function () {
  64. if (this.views) {
  65. this.views.destroy();
  66. this.views = null;
  67. }
  68. this.views = new GC.Spread.Views.DataView($('#subRate')[0],
  69. this.datas, this.columns, new GC.Spread.Views.Plugins.GridLayout(this.options));
  70. this.views["rowDbClick"].addHandler(function () {
  71. console.log('hh')
  72. });
  73. this.views.invalidate();
  74. document.querySelector('#subRate').focus();
  75. this.addComboboxOption(this.datas);
  76. },
  77. reFreshRateViews:function(sender,args) {
  78. subRateObject.datas = projectObj.project.FeeRate.getSubViewData(args.item);
  79. subRateObject.valueMap=projectObj.project.FeeRate.getValueMap(args.item);
  80. subRateObject.createSpreadView();
  81. },
  82. initSubRateSpread:function (item) {
  83. if(this.subRateSpread == null){
  84. this.subRateSpread = SheetDataHelper.createNewSpread($("#subRate")[0]);
  85. sheetCommonObj.spreadDefaultStyle(this.subRateSpread);
  86. this.subRateSheet = this.subRateSpread.getSheet(0);
  87. sheetCommonObj.initSheet(this.subRateSheet, this.subRateSetting, 30);
  88. this.subRateSheet.bind(GC.Spread.Sheets.Events.SelectionChanged, this.onSubRateSelectChanged);
  89. this.subRateSheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onSubRateValueChange);
  90. //this.subRateSheet.bind(GC.Spread.Sheets.Events.ValueChanged, me.onSheetValueChange);
  91. this.subRateSheet.name('subRateSheet');
  92. }
  93. subRateObject.datas = projectObj.project.FeeRate.getAllSubRates();
  94. //subRateObject.valueMap=projectObj.project.FeeRate.getValueMap(item);
  95. subRateObject.showSubRateData();
  96. disableRightMenu("subRate",this.subRateSpread);
  97. if(projectReadOnly){
  98. if(this.subRateSetting.view.lockColumns){
  99. this.subRateSetting.view.lockColumns = null;
  100. }
  101. disableSpread(this.subRateSpread);
  102. }
  103. },
  104. showSubRateData:function () {
  105. this.subRateSheet.setRowCount(0);
  106. sheetCommonObj.showData(this.subRateSheet, this.subRateSetting, this.datas);
  107. this.subRateSheet.setRowCount(this.datas.length);
  108. let parentMap=_.groupBy(this.datas, 'ParentID');
  109. let visibleMap = {};
  110. this.subRateSheet.suspendPaint();
  111. this.subRateSheet.suspendEvent();
  112. for(let row =0; row < this.datas.length;row++){
  113. this.setComboOptionCell(row,1,this.datas[row],this.subRateSheet);
  114. this.setTreeNodeCellType(this.datas,row,parentMap,visibleMap,this.subRateSheet);
  115. }
  116. this.subRateSheet.resumeEvent();
  117. this.subRateSheet.resumePaint();
  118. },
  119. onSubRateSelectChanged:function (e,info) {
  120. info.sheet.repaint();
  121. },
  122. setTreeNodeCellType:function (datas,row,parentMap,visibleMap,sheet) {
  123. delete parentMap.undefined;//去掉无用节点
  124. let treeNode = sheetCommonObj.getTreeNodeCellType(datas,row,parentMap);
  125. treeNode.treeNodeType = false;
  126. if((datas[row].subList && datas[row].subList.length >0)||datas[row].isSub == true ){
  127. treeNode.treeNodeType = true;
  128. visibleMap[datas[row].ID] = treeNode.collapsed;
  129. }
  130. sheet.setCellType(row, 0, treeNode, GC.Spread.Sheets.SheetArea.viewport);
  131. if(visibleMap[datas[row].ParentID]) sheet.getRange(row , -1, 1, -1).visible(!visibleMap[datas[row].ParentID]);//显示或隐藏
  132. },
  133. setComboOptionCell:function(row,col,subRate,sheet){
  134. let options=[];
  135. if(subRate.isSub == true) return;//是树节点的子节点;
  136. for(let op of subRate.optionList){
  137. //options.push({text:op.name,value:op.value});
  138. options.push(op.name);
  139. }
  140. let dynamicCombo = sheetCommonObj.getDynamicCombo();//new GC.Spread.Sheets.CellTypes.ComboBox();
  141. dynamicCombo.items(options);
  142. if(subRate.editable == true) dynamicCombo.editable(true);
  143. //dynamicCombo.editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.value);
  144. sheet.setCellType(row, col, dynamicCombo, GC.Spread.Sheets.SheetArea.viewport);
  145. },
  146. addComboboxOption:function (datas) {
  147. _.forEach(datas,function (item) {
  148. var selectvalue = 0;
  149. _.forEach(item.optionList,function (o) {
  150. var option = $("<option>").val(o.value).text(o.name);
  151. $('#'+item.ID).append(option);
  152. if(o.selected){
  153. selectvalue = o.value;
  154. }
  155. })
  156. $('#'+item.ID).val(selectvalue);
  157. })
  158. },
  159. subRateChange:function(select){
  160. let me = subRateObject;
  161. let selectValueList=[];
  162. let selectMap={};
  163. if(me.datas&&me.datas.length>0){
  164. $.bootstrapLoading.start();
  165. _.forEach(me.datas,function (d,key) {
  166. let selectValue = $('#'+d.ID).val();
  167. selectValueList.push(selectValue);
  168. selectMap[key]=selectValue;
  169. })
  170. let mapID =selectValueList.join('-');
  171. let rate = me.valueMap[mapID];
  172. feeRateObject.updateBySelect(rate,selectMap,mapID);
  173. }
  174. },
  175. onSubRateValueChange:function (e,info) {
  176. console.info(info);
  177. let me = subRateObject, selectValueList=[],selectMap={};
  178. if(me.datas&&me.datas.length>0){
  179. _.forEach(me.datas,function (d,key) {
  180. if(info.row == key){
  181. selectMap[key]=info.newValue;
  182. }else {
  183. let o = _.find(d.optionList,{'selected':true});
  184. selectMap[key]=o.value;
  185. }
  186. selectValueList.push(selectMap[key]);
  187. })
  188. let mapID =selectValueList.join('-');
  189. let rate = me.valueMap[mapID];
  190. feeRateObject.updateBySelect(rate,selectMap,mapID);
  191. }
  192. },
  193. destorySpreadView:function () {
  194. if(this.views){
  195. this.views.destroy();
  196. this.views = null;
  197. }
  198. subRateObject.datas=null;
  199. subRateObject.valueMap=null;
  200. }
  201. }