sub_fee_rate_views.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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. if(gljUtil.isDef(o)){
  24. return o.name;
  25. }else {
  26. if(item.editable==true) return item.value;
  27. }
  28. }
  29. }
  30. },
  31. options :{
  32. allowSorting: false,
  33. showRowHeader: true,
  34. colMinWidth: 80,
  35. rowHeight: 33,
  36. allowEditing: this.canEdit,
  37. editMode: 'inline',
  38. editUnit: 'cell',
  39. selectionUnit:(this.canEdit == true) ? "cell" : "row"
  40. },
  41. initSubRateSpread:function (item) {
  42. if(this.subRateSpread == null){
  43. this.subRateSpread = SheetDataHelper.createNewSpread($("#subRate")[0]);
  44. sheetCommonObj.spreadDefaultStyle(this.subRateSpread);
  45. this.subRateSheet = this.subRateSpread.getSheet(0);
  46. sheetCommonObj.initSheet(this.subRateSheet, this.subRateSetting, 30);
  47. this.subRateSheet.bind(GC.Spread.Sheets.Events.SelectionChanged, this.onSubRateSelectChanged);
  48. this.subRateSheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onSubRateValueChange);
  49. //this.subRateSheet.bind(GC.Spread.Sheets.Events.ValueChanged, me.onSheetValueChange);
  50. this.subRateSheet.name('subRateSheet');
  51. }
  52. //subRateObject.valueMap=projectObj.project.FeeRate.getValueMap(item);
  53. subRateObject.showSubRateData();
  54. disableRightMenu("subRate",this.subRateSpread);
  55. if(projectReadOnly){
  56. if(this.subRateSetting.view.lockColumns){
  57. this.subRateSetting.view.lockColumns = null;
  58. }
  59. disableSpread(this.subRateSpread);
  60. }
  61. },
  62. showSubRateData:function () {
  63. let preSelections = this.subRateSheet.getSelections();
  64. this.datas = projectObj.project.FeeRate.getAllSubRates();
  65. this.subRateSheet.setRowCount(0);
  66. sheetCommonObj.showData(this.subRateSheet, this.subRateSetting, this.datas);
  67. this.subRateSheet.setRowCount(this.datas.length);
  68. let parentMap=_.groupBy(this.datas, 'ParentID');
  69. let visibleMap = {};
  70. this.subRateSheet.suspendPaint();
  71. this.subRateSheet.suspendEvent();
  72. for(let row =0; row < this.datas.length;row++){
  73. this.setComboOptionCell(row,1,this.datas[row],this.subRateSheet);
  74. this.setTreeNodeCellType(this.datas,row,parentMap,visibleMap,this.subRateSheet);
  75. }
  76. this.subRateSheet.resumeEvent();
  77. this.subRateSheet.resumePaint();
  78. if(preSelections){//定位光标到之前的位置
  79. this.subRateSheet.setSelection(preSelections[0].row,preSelections[0].col,preSelections[0].rowCount,preSelections[0].colCount);
  80. }
  81. },
  82. onSubRateSelectChanged:function (e,info) {
  83. info.sheet.repaint();
  84. },
  85. setTreeNodeCellType:function (datas,row,parentMap,visibleMap,sheet) {
  86. delete parentMap.undefined;//去掉无用节点
  87. let treeNode = sheetCommonObj.getTreeNodeCellType(datas,row,parentMap);
  88. treeNode.treeNodeType = false;
  89. if((datas[row].subList && datas[row].subList.length >0)||datas[row].isSub == true ){
  90. treeNode.treeNodeType = true;
  91. visibleMap[datas[row].ID] = treeNode.collapsed;
  92. }
  93. sheet.setCellType(row, 0, treeNode, GC.Spread.Sheets.SheetArea.viewport);
  94. if(visibleMap[datas[row].ParentID]) sheet.getRange(row , -1, 1, -1).visible(!visibleMap[datas[row].ParentID]);//显示或隐藏
  95. },
  96. setComboOptionCell:function(row,col,subRate,sheet){
  97. let options=[];
  98. if(subRate.isSub == true) return;//是树节点的子节点;
  99. for(let op of subRate.optionList){
  100. options.push(op.name);
  101. }
  102. let dynamicCombo = sheetCommonObj.getDynamicCombo();//new GC.Spread.Sheets.CellTypes.ComboBox();
  103. dynamicCombo.items(options);
  104. if(subRate.editable == true) dynamicCombo.editable(true);
  105. sheet.setCellType(row, col, dynamicCombo, GC.Spread.Sheets.SheetArea.viewport);
  106. },
  107. addComboboxOption:function (datas) {
  108. _.forEach(datas,function (item) {
  109. var selectvalue = 0;
  110. _.forEach(item.optionList,function (o) {
  111. var option = $("<option>").val(o.value).text(o.name);
  112. $('#'+item.ID).append(option);
  113. if(o.selected){
  114. selectvalue = o.value;
  115. }
  116. })
  117. $('#'+item.ID).val(selectvalue);
  118. })
  119. },
  120. onSubRateValueChange:function (e,info) {
  121. let me = subRateObject, subList=null;
  122. let value = info.newValue;
  123. let subRate = me.datas[info.row];
  124. if(subRate.editable == true || subRate.isSub == true){//是可编辑的,要检查数据类型
  125. let checkResult = scMathUtil.isNumOrFormula(value);
  126. if(checkResult!=null && !isNaN(checkResult)){
  127. value = scMathUtil.roundForObj(checkResult,getDecimal("feeRate"));
  128. }else {
  129. alert('当前输入的数据类型不正确,请重新输入。');
  130. me.showSubRateData();
  131. return;
  132. }
  133. }
  134. if(subRate.isSub == true){//是树节点的子节点,计算父节点的值
  135. let parentRate = _.find(me.datas,{"ID":subRate.ParentID});//找到父节点
  136. if(parentRate){
  137. let sum = 0;
  138. subList = _.cloneDeep(parentRate.subList);
  139. for(let s of subList){//按比例计算
  140. if(s.ID == subRate.ID) s.value = value;//当前项要用新输入的值
  141. let v_a = scMathUtil.roundForObj(s.value * s.amount,getDecimal("process"))
  142. sum = scMathUtil.roundForObj(sum + v_a,getDecimal("feeRate"));
  143. }
  144. value = sum;
  145. subRate = parentRate;//把subRate 指向parentRate
  146. }
  147. } else if(subRate.subList && subRate.subList.length > 0){//输入树节结的父结点,子结点都等于父节点的值
  148. subList = _.cloneDeep(subRate.subList);
  149. for(let t of subList){
  150. t.value = value
  151. }
  152. }
  153. feeRateObject.setRateFromSub(subRate,value,subList);
  154. },
  155. destorySpreadView:function () {
  156. if(this.views){
  157. this.views.destroy();
  158. this.views = null;
  159. }
  160. subRateObject.datas=null;
  161. subRateObject.valueMap=null;
  162. }
  163. }