|
|
@@ -109,6 +109,59 @@ var sheetCommonObj = {
|
|
|
area.vAlign(GC.Spread.Sheets.VerticalAlign.center);
|
|
|
}
|
|
|
},
|
|
|
+ showTreeData:function (sheet,setting,data) {
|
|
|
+ let ch = GC.Spread.Sheets.SheetArea.viewport;
|
|
|
+ let parentMap=_.groupBy(data, 'ParentID');
|
|
|
+ let visibleMap = {};
|
|
|
+ sheet.suspendPaint();
|
|
|
+ sheet.suspendEvent();
|
|
|
+ for (let col = 0; col < setting.header.length; col++) {
|
|
|
+ let hAlign = "left", vAlign = "center";
|
|
|
+ if (setting.header[col].hAlign) {
|
|
|
+ hAlign = setting.header[col].hAlign;
|
|
|
+ } else if (setting.header[col].dataType !== "String"){
|
|
|
+ hAlign = "right";
|
|
|
+ }
|
|
|
+ vAlign = setting.header[col].vAlign?setting.header[col].vAlign:vAlign;
|
|
|
+ sheetCommonObj.setAreaAlign(sheet.getRange(-1, col, -1, 1), hAlign, vAlign);
|
|
|
+ if (setting.header[col].formatter) {
|
|
|
+ sheet.setFormatter(-1, col, setting.header[col].formatter, GC.Spread.Sheets.SheetArea.viewport);
|
|
|
+ }
|
|
|
+ for (let row = 0; row < data.length; row++) {
|
|
|
+ let val = data[row][setting.header[col].dataCode];
|
|
|
+ if(val&&setting.header[col].dataType === "Number"){
|
|
|
+ if(setting.header[col].hasOwnProperty('decimalField')){
|
|
|
+ let decimal = getDecimal(setting.header[col].decimalField);
|
|
|
+ val =scMathUtil.roundToString(val,decimal);
|
|
|
+ sheet.setFormatter(-1, col,getFormatter(decimal), GC.Spread.Sheets.SheetArea.viewport);
|
|
|
+ }else {
|
|
|
+ val =scMathUtil.roundToString(val,2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sheet.setValue(row, col, val, ch);
|
|
|
+ if(col==0){
|
|
|
+ let treeType = sheetCommonObj.getTreeNodeCellType(data,row,parentMap);
|
|
|
+ sheet.getCell(row, 0).cellType(treeType);
|
|
|
+ visibleMap[data[row].ID] = treeType.collapsed;
|
|
|
+ this.setRowVisible(data,row,visibleMap,sheet);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.lockCells(sheet,setting);
|
|
|
+ sheet.resumeEvent();
|
|
|
+ sheet.resumePaint();
|
|
|
+ },
|
|
|
+ setRowVisible:function (data,row,visibleMap,sheet) {
|
|
|
+ sheet.getRange(row , -1, 1, -1).visible(getVisible(data[row].ParentID));//显示或隐藏
|
|
|
+ function getVisible(ParentID) {
|
|
|
+ if(visibleMap[ParentID]) return false //如果父节点是缩起的,那就隐藏本身。
|
|
|
+ if(visibleMap[ParentID] == false){//如果父节点不是缩起的,要再往父节点找看
|
|
|
+ let pnode = _.find(data,{'ID':ParentID});
|
|
|
+ if(pnode) return getVisible(pnode.ParentID);//如果有父节点,递归调用
|
|
|
+ return true;//没有,返回显示
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
showData: function(sheet, setting, data,distTypeTree,callback) {
|
|
|
var me = this, ch = GC.Spread.Sheets.SheetArea.viewport;
|
|
|
sheet.suspendPaint();
|
|
|
@@ -165,6 +218,14 @@ var sheetCommonObj = {
|
|
|
},
|
|
|
showRowData:function (sheet,setting,row,data,distTypeTree=null) {
|
|
|
let ch = GC.Spread.Sheets.SheetArea.viewport;
|
|
|
+ if(data[row].cellType == "date"){//日期格式比较特殊,要判断数据里的属性,为data类型,同时读取列
|
|
|
+ this.setDatePickerCellType(row,data[row].dateCol,sheet)
|
|
|
+ }
|
|
|
+ if(data[row].cellType === 'comboBox'){//对于选项在数据里下拉框类型,同时读取列
|
|
|
+ let options = data[row].options ? data[row].options.split("@") : [];
|
|
|
+ this.setComboBox(row,data[row].dateCol,sheet,options);
|
|
|
+ }
|
|
|
+
|
|
|
for (var col = 0; col < setting.header.length; col++) {
|
|
|
//var cell = sheet.getCell(row, col, GC.Spread.Sheets.SheetArea.viewport);
|
|
|
var val = data[row][setting.header[col].dataCode];
|
|
|
@@ -192,11 +253,9 @@ var sheetCommonObj = {
|
|
|
if(setting.header[col].cellType === "replaceButton"){
|
|
|
this.setReplaceButton(row,col,sheet,setting.header[col]);
|
|
|
}
|
|
|
-
|
|
|
if(setting.header[col].cellType === "cusButton"){
|
|
|
this.setCusButton(row,col,sheet,setting);
|
|
|
}
|
|
|
-
|
|
|
if(setting.header[col].cellType === "tipsCell"){
|
|
|
this.setTipsCell(row,col,sheet,setting.header[col]);
|
|
|
}
|
|
|
@@ -652,6 +711,55 @@ var sheetCommonObj = {
|
|
|
cellType.buttonBackColor("#07A0FF");
|
|
|
sheet.setCellType(row, col,cellType,GC.Spread.Sheets.SheetArea.viewport);
|
|
|
},
|
|
|
+ setDatePickerCellType(row,col,sheet){
|
|
|
+ let ns = GC.Spread.Sheets;
|
|
|
+
|
|
|
+ function DatePickerCellType() {
|
|
|
+ }
|
|
|
+ DatePickerCellType.prototype = new GC.Spread.Sheets.CellTypes.Base();
|
|
|
+
|
|
|
+ DatePickerCellType.prototype.createEditorElement = function (context) {
|
|
|
+ //Create input presenter.
|
|
|
+ return document.createElement("input");
|
|
|
+ };
|
|
|
+ DatePickerCellType.prototype.activateEditor = function (editorContext, cellStyle, cellRect, context) {
|
|
|
+ //Initialize input editor.
|
|
|
+ if (editorContext) {
|
|
|
+ $editor = $(editorContext);
|
|
|
+ //DatePickerCellType.prototype.activateEditor.apply(this, arguments);
|
|
|
+ $editor.datepicker({dateFormat: 'yy-mm-dd'});
|
|
|
+ $editor.css("position", "absolute");
|
|
|
+ $editor.attr("gcUIElement", "gcEditingInput");
|
|
|
+ $(".ui-datepicker").attr("gcUIElement", "gcEditingInput");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ DatePickerCellType.prototype.deactivateEditor = function (editorContext, context) {
|
|
|
+ //Remove input editor when end editor status.
|
|
|
+ if (editorContext) {
|
|
|
+ var element = editorContext;
|
|
|
+ $(element).datepicker("hide");
|
|
|
+ $(element).datepicker("destroy");
|
|
|
+ }
|
|
|
+ // DatePickerCellType.prototype.deactivateEditor.apply(this, arguments)
|
|
|
+ };
|
|
|
+ DatePickerCellType.prototype.setEditorValue = function (editor, value, context) {
|
|
|
+ //Sync value from Cell value to editor value.
|
|
|
+ $(editor).datepicker("setDate", value);
|
|
|
+ };
|
|
|
+ DatePickerCellType.prototype.getEditorValue = function (editor, context) {
|
|
|
+ //Sync value from editor value to cell value.
|
|
|
+ return $(editor).datepicker("getDate");
|
|
|
+ };
|
|
|
+ DatePickerCellType.prototype.updateEditor = function (editorContext, cellStyle, cellRect, context) {
|
|
|
+ if (editorContext) {
|
|
|
+ $editor = $(editorContext);
|
|
|
+ $editor.css("width", cellRect.width - 1);
|
|
|
+ $editor.css("height", cellRect.height - 3);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ let picker = new DatePickerCellType();
|
|
|
+ sheet.getCell(row, col).cellType(picker).width(100).formatter('yyyy-mm-dd');
|
|
|
+ },
|
|
|
|
|
|
setTipsCell(row,col,sheet,header){
|
|
|
let TipCellType = function () {};
|
|
|
@@ -783,7 +891,7 @@ var sheetCommonObj = {
|
|
|
|
|
|
function TreeNodeCellType() {
|
|
|
this.collapsed = gljUtil.isDef(datas[row].collapsed)?datas[row].collapsed: true; //默认是折叠的
|
|
|
- this. treeNodeType = true;
|
|
|
+ this.treeNodeType = true;
|
|
|
this.rectInfo = {};
|
|
|
}
|
|
|
TreeNodeCellType.prototype = new ns.CellTypes.Text();
|
|
|
@@ -885,7 +993,7 @@ var sheetCommonObj = {
|
|
|
return new TreeNodeCellType()
|
|
|
|
|
|
function getTreeLevel(item,data) {
|
|
|
- if(item.ParentID){
|
|
|
+ if(item.ParentID && item.ParentID!=-1){
|
|
|
let pitem = _.find(data,{'ID':item.ParentID});
|
|
|
return getTreeLevel(pitem,data) + 1;
|
|
|
}else {
|