|
|
@@ -170,10 +170,10 @@ var feeRateObject={
|
|
|
}
|
|
|
sheet.setValue(row, col, val, ch);
|
|
|
if(col==0){
|
|
|
- let treeType = feeRateObject.getTreeNodeCellType(data,row,parentMap);
|
|
|
+ let treeType = sheetCommonObj.getTreeNodeCellType(data,row,parentMap);
|
|
|
sheet.getCell(row, 0).cellType(treeType);
|
|
|
visibleMap[data[row].ID] = treeType.collapsed;
|
|
|
- if(visibleMap[data[row].ParentID] ) sheet.getRange(row , -1, 1, -1).visible(false);//显示或隐藏
|
|
|
+ if(visibleMap[data[row].ParentID] ) sheet.getRange(row , -1, 1, -1).visible(!visibleMap[data[row].ParentID]);//显示或隐藏
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -246,131 +246,6 @@ var feeRateObject={
|
|
|
|
|
|
}
|
|
|
},
|
|
|
- getTreeNodeCellType:function (datas,row,parentMap) {// 2018-09-26 不用spreadjs默认的树结构,自定义控件
|
|
|
- var ns = GC.Spread.Sheets;
|
|
|
- let rectW = 10;
|
|
|
- let rectH = 10;
|
|
|
- let margin = 3;
|
|
|
- function TreeNodeCellType() {
|
|
|
- this.collapsed = true; //默认是折叠的
|
|
|
- this.rectInfo = {};
|
|
|
- }
|
|
|
- TreeNodeCellType.prototype = new ns.CellTypes.Text();
|
|
|
- TreeNodeCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) {
|
|
|
- let offset = 0;
|
|
|
- let step = 7;
|
|
|
- let level = getTreeLevel(datas[row],datas);//从0开始,取当前节点是第几级的
|
|
|
- let tem = offset+margin+ rectW/2+step;//两条线之间的间隔
|
|
|
- let t_offset = offset;
|
|
|
- let temParentID = datas[row].ParentID;
|
|
|
- for(let i = level;i>0;i--){//这里是画子节点前面的竖线,从第二级开始
|
|
|
- let temParent = getParent(temParentID,datas);
|
|
|
- if(temParent){//父节点有下一个兄弟节点才需要画
|
|
|
- if(hasNextBrother(parentMap,temParent)) sheetCommonObj.drawLine(ctx,x+t_offset+tem*i,y,x+t_offset+tem*i,y+h);
|
|
|
- temParentID = temParent.ParentID;
|
|
|
- }
|
|
|
- offset +=tem;
|
|
|
- }
|
|
|
- offset+=step;
|
|
|
- if(hasChildern(datas[row].ID,datas)){//如果是有子节点
|
|
|
- //第一条不用画方框头上那条竖线其它都要
|
|
|
- if(row !=0) sheetCommonObj.drawLine(ctx,x+offset+ rectW/2+margin,y,x+offset+ rectW/2+margin,y + Math.round(h / 2) - rectH / 2);
|
|
|
- //画方框下面的那条竖线,如果没有下一个兄弟节点,则不用画
|
|
|
- if(hasNextBrother(parentMap,datas[row])) sheetCommonObj.drawLine(ctx,x+offset+ rectW/2+margin,y + Math.round(h / 2) + rectH / 2,x+offset+ rectW/2+margin,y + h);
|
|
|
- sheetCommonObj.drowRect(ctx, x+offset, y, w, h,rectW,rectH,margin);
|
|
|
- sheetCommonObj.drowSymbol(ctx, x+offset, y, w, h,rectW,rectH,margin, this.collapsed);
|
|
|
- this.rectInfo = {x:x+offset+margin,rectW:rectW}//计录一下可点击位置
|
|
|
- }else {
|
|
|
- let hasNext = datas[row+1]?datas[row+1].ParentID == datas[row].ParentID:false;
|
|
|
- sheetCommonObj.drowSubItem(ctx, x, y, w, h, offset,hasNext,margin+ rectW/2);
|
|
|
- }
|
|
|
- offset += step;
|
|
|
- offset += rectW;
|
|
|
- x = x + offset;//设置偏移
|
|
|
- w = w - offset;
|
|
|
- GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this, arguments);
|
|
|
- };
|
|
|
- // override getHitInfo to allow cell type get mouse messages
|
|
|
- TreeNodeCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {
|
|
|
- return {
|
|
|
- x: x,
|
|
|
- y: y,
|
|
|
- row: context.row,
|
|
|
- col: context.col,
|
|
|
- cellStyle: cellStyle,
|
|
|
- cellRect: cellRect,
|
|
|
- sheetArea: context.sheetArea
|
|
|
- };
|
|
|
- }
|
|
|
- TreeNodeCellType.prototype.processMouseDown = function (hitinfo) {
|
|
|
- if (!_.isEmpty(this.rectInfo)&&hitinfo.x < this.rectInfo.x+this.rectInfo.rectW && hitinfo.x > this.rectInfo.x) {
|
|
|
- this.collapsed = !this.collapsed;
|
|
|
- this.refreshChildrenVisible(hitinfo.sheet);
|
|
|
- hitinfo.sheet.invalidateLayout();
|
|
|
- hitinfo.sheet.repaint();
|
|
|
- }
|
|
|
- };
|
|
|
- TreeNodeCellType.prototype.refreshChildrenVisible = function (sheet) {
|
|
|
- sheet.suspendPaint();
|
|
|
- sheet.suspendEvent();
|
|
|
- refreshVisible(datas[row]);
|
|
|
- sheet.resumeEvent();
|
|
|
- sheet.resumePaint();
|
|
|
- function refreshVisible(item){
|
|
|
- if(parentMap[item.ID]){
|
|
|
- for(let sub of parentMap[item.ID]){
|
|
|
- refreshVisible(sub)
|
|
|
- }
|
|
|
- }
|
|
|
- let visible = getVisible(item);
|
|
|
- let trow = datas.indexOf(item);
|
|
|
- sheet.getRange(trow , -1, 1, -1).visible(visible);
|
|
|
- }
|
|
|
-
|
|
|
- function getVisible(item) {
|
|
|
- if(item.ParentID){
|
|
|
- let parent = getParent(item.ParentID,datas);
|
|
|
- if(!parent) return true;
|
|
|
- let p_row= datas.indexOf(parent);
|
|
|
- let visible = !sheet.getCellType(p_row,0).collapsed;
|
|
|
- if(visible == true){ //如果是显示的,则要再往父节点的父节点检查,只要有一个节点是隐藏的,则都是隐藏
|
|
|
- return getVisible(parent);
|
|
|
- }else {
|
|
|
- return visible
|
|
|
- }
|
|
|
- }else {//如果parentID 为空则是最根节点
|
|
|
- return true;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- };
|
|
|
- return new TreeNodeCellType()
|
|
|
-
|
|
|
- function getTreeLevel(item,data) {
|
|
|
- if(item.ParentID){
|
|
|
- let pitem = _.find(data,{'ID':item.ParentID});
|
|
|
- return getTreeLevel(pitem,data) + 1;
|
|
|
- }else {
|
|
|
- return 0
|
|
|
- }
|
|
|
- }
|
|
|
- function hasChildern(ID,data) {//返回是否有子项
|
|
|
- let p = _.find(data,{'ParentID':ID});
|
|
|
- if(p) return true;
|
|
|
- return false
|
|
|
- }
|
|
|
- function getParent(ParentID,data) {
|
|
|
- let p = _.find(data,{'ID':ParentID});
|
|
|
- return p;
|
|
|
- }
|
|
|
- function hasNextBrother(parentMap,item){
|
|
|
- let children =parentMap[item.ParentID];
|
|
|
- if(children && children.indexOf(item) == children.length -1) return false;
|
|
|
- return true
|
|
|
- }
|
|
|
-
|
|
|
- },
|
|
|
getFeeRateEditCellType:function () {
|
|
|
var ns = GC.Spread.Sheets;
|
|
|
function FeeRateEditCellType() {
|
|
|
@@ -519,7 +394,7 @@ var feeRateObject={
|
|
|
sheetCommonObj.lockCells(this.mainFeeRateSheet , this.mainFeeRateSetting);
|
|
|
}
|
|
|
this.mainFeeRateSheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onMainFeeRateSheetValueChange);
|
|
|
- this.mainFeeRateSheet.bind(GC.Spread.Sheets.Events.SelectionChanged, this.onMainFeeRateSelectChanged);
|
|
|
+ //this.mainFeeRateSheet.bind(GC.Spread.Sheets.Events.SelectionChanged, this.onMainFeeRateSelectChanged);
|
|
|
this.mainFeeRateSheet.bind(GC.Spread.Sheets.Events.RangeChanged, this.onMainFeeRateRangeChanged);
|
|
|
this.mainFeeRateSheet.bind(GC.Spread.Sheets.Events.EditStarting, function (e,args) {
|
|
|
let me =feeRateObject;
|
|
|
@@ -559,7 +434,7 @@ var feeRateObject={
|
|
|
let me =feeRateObject;
|
|
|
let recode = me.mainFeeRateData[row];
|
|
|
let dataCode = me.mainFeeRateSetting.header[col].dataCode;
|
|
|
- if(dataCode=="rate"&&me.getChildrenCount(recode.ID,me.mainFeeRateData)>0){//有子节点时不能编辑费率列
|
|
|
+ if(dataCode=="rate"&&(recode.sum != true && me.getChildrenCount(recode.ID,me.mainFeeRateData)>0)){//除了标记要汇总的节点,其它的有子节点时不能编辑费率列
|
|
|
return false;
|
|
|
}
|
|
|
return true;
|
|
|
@@ -581,7 +456,34 @@ var feeRateObject={
|
|
|
}
|
|
|
me.updateFeerateWhenCellsChange(changeCells);
|
|
|
},
|
|
|
+ sumParentRate:function (rateID,value,updateDatas) {
|
|
|
+ let feeRate = projectObj.project.FeeRate;
|
|
|
+ let rate = feeRate.getFeeRateByID(rateID);
|
|
|
+ let parent = feeRate.getFeeRateByID(rate.ParentID);
|
|
|
+ if(parent && parent.sum == true){
|
|
|
+ let suRates = feeRate.getChildrenByID(parent.ID);
|
|
|
+ let total = 0;
|
|
|
+ for(let r of suRates) {
|
|
|
+ let tem = r.rate ? r.rate:0;
|
|
|
+ tem = scMathUtil.roundForObj(tem,getDecimal("feeRate"));
|
|
|
+ if (rateID == r.ID){
|
|
|
+ tem = value;
|
|
|
+ }else {
|
|
|
+ let u = _.find(updateDatas,{"rateID":r.ID})//看是不是更新的过程中包含了汇总的数据
|
|
|
+ if(u && gljUtil.isDef(u.doc.rate)) tem = u.doc.rate;
|
|
|
+ }
|
|
|
+ total = scMathUtil.roundForObj(tem + total,getDecimal('process'))
|
|
|
+ }
|
|
|
+ total = scMathUtil.roundForObj(total,getDecimal("feeRate"));
|
|
|
+ let tp = _.find(updateDatas,{"rateID":parent.ID});//如果父节点也在更新列表中
|
|
|
+ if(tp){
|
|
|
+ tp.doc.rate = total
|
|
|
+ }else {
|
|
|
+ updateDatas.push({rateID:parent.ID,doc:{rate:total}});
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ },
|
|
|
updateFeerateWhenCellsChange:function (cells) {// col,row,newValue
|
|
|
let me = feeRateObject,updateDatas = [],feeRate = projectObj.project.FeeRate;//[{rateID:rateID,doc:doc}]
|
|
|
let refreshA = [];//记录刷新条数的数组
|
|
|
@@ -609,16 +511,20 @@ var feeRateObject={
|
|
|
}
|
|
|
temData[fieldID] = value ;
|
|
|
updateDatas.push({rateID:recode.ID,doc:temData});
|
|
|
- refreshA.push({col:c.col,row:c.row,fieldID:fieldID,value:value,rateID:recode.ID});
|
|
|
+ if(fieldID == 'rate') feeRateObject.sumParentRate(recode.ID,value,updateDatas);
|
|
|
}
|
|
|
if(updateDatas.length > 0){
|
|
|
$.bootstrapLoading.start();
|
|
|
feeRate.updateFeeRatesByIDs(updateDatas,function () {
|
|
|
let feerateInfo = [];
|
|
|
- for(let r of refreshA){
|
|
|
- me.mainFeeRateSheet.setValue(r.row, r.col, r.value);
|
|
|
- if(r.fieldID == 'rate'){
|
|
|
- feerateInfo.push({rateID:r.rateID,value:r.value});
|
|
|
+ for(let u of updateDatas){
|
|
|
+ let row = _.findIndex(me.mainFeeRateData,{'ID':u.rateID})
|
|
|
+ for(let key in u.doc){
|
|
|
+ let col = _.findIndex(me.mainFeeRateSetting.header,{'dataCode':key});
|
|
|
+ me.mainFeeRateSheet.setValue(row, col, u.doc[key]);
|
|
|
+ if(key == 'rate'){
|
|
|
+ feerateInfo.push({rateID:u.rateID,value:u.doc[key]});
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
feerateInfo.length > 0 ?feeRate.onFeeRatesChange(feerateInfo):'';
|
|
|
@@ -995,6 +901,7 @@ $(function(){
|
|
|
let me = feeRateObject;
|
|
|
$(e.relatedTarget.hash).removeClass('active');
|
|
|
if(me.mainFeeRateSpread == null) me.initFeeRateSpread(0);
|
|
|
+ subRateObject.initSubRateSpread();
|
|
|
me.showMainFeeRateData();
|
|
|
me.loadPageContent();
|
|
|
});
|