123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- /**
- * Created by CSL on 2018-09-19.
- */
- var blockLibObj = {
- datas: [],
- mainSpread: null,
- mainSheet: null,
- mainSetting: {
- header:[
- {headerName:"名称",headerWidth:400,dataCode:"name", dataType: "String"}
- ],
- view:{
- comboBox:[],
- lockColumns:[],
- colHeaderHeight: CP_Col_Width.colHeader,
- rowHeaderWidth: CP_Col_Width.rowHeader
- }
- },
- buildSheet: function (){
- let me = this;
- me.datas = [];
- if (me.mainSpread) {
- me.mainSpread.destroy();
- me.mainSpread = null;
- };
- me.mainSpread = sheetCommonObj.buildSheet($('#div_block_tree')[0], me.mainSetting, me.datas.length);
- sheetCommonObj.spreadDefaultStyle(me.mainSpread);
- me.mainSheet = me.mainSpread.getSheet(0);
- // sheetCommonObj.showData(me.mainSheet, me.mainSetting, me.datas);
- },
- showData: function () {
- let me = this;
- let sheet =me.mainSheet;
- let cols = me.mainSetting.header;
- let datas = me.datas;
- let fuc = function () {
- sheet.setRowCount(datas.length);
- me.initTree(true);
- // sheet.setFormatter(-1, 1, '@');
- for(let col = 0, cLen = cols.length; col < cLen; col++){
- // sheet.getRange(-1, col, -1, 1).hAlign(GC.Spread.Sheets.HorizontalAlign[cols[col]['hAlign']]);
- // sheet.getRange(-1, col, -1, 1).vAlign(GC.Spread.Sheets.VerticalAlign[cols[col]['vAlign']]);
- for(let row = 0, rLen = datas.length; row < rLen; row++){
- sheet.setValue(row, col, datas[row][cols[col]['dataCode']]);
- }
- }
- };
- sheet.suspendPaint();
- sheet.suspendEvent();
- fuc();
- sheet.resumePaint();
- sheet.resumeEvent();
- },
- initTree: function (collapse) {
- let me = this;
- me.mainSheet.getRange(-1, 0, -1, 1).cellType(me.getTreeNodeCellType(me.datas));
- for(let i =0, len = me.datas.length; i < len; i++){
- if(me.datas[i].hasOwnProperty('items')){
- let collapsed = false;
- if(collapse){
- me.datas[i].collapsed = false;
- collapsed = true;
- }else {
- collapsed = me.datas[i].collapsed == undefined ? true : me.datas[i].collapsed;
- }
- }
- }
- },
- getTreeNodeCellType: function (data) {
- var ns = GC.Spread.Sheets;
- var rectW = 10;
- var rectH = 10;
- var margin = 3;
- function TreeNodeCellType() {
- }
- function drowRect(ctx,x,y,w,h) {///
- ctx.save();
- ctx.strokeStyle = "gray";
- ctx.translate(0.5,0.5);
- ctx.beginPath();
- var rectX = x+margin;
- var rectY = y+ Math.round(h/2)-rectH/2;
- ctx.moveTo(rectX, rectY);
- ctx.lineTo(rectX, rectY+rectH);
- ctx.lineTo(rectX+rectW, rectY+rectH);
- ctx.lineTo(rectX+rectW, rectY);
- ctx.lineTo(rectX, rectY);
- ctx.moveTo(rectX+rectW, y+Math.round(h/2));
- ctx.lineTo(rectX+rectW+5, y+Math.round(h/2));
- ctx.stroke();
- ctx.restore();
- }
- function drowSymbol(ctx,x,y,w,h,collapsed) {
- ctx.save();
- ctx.strokeStyle = "#000000";
- ctx.translate(0.5, 0.5);
- ctx.beginPath();
- ctx.moveTo(x+margin+2, y+Math.round(h/2));
- ctx.lineTo(x+margin+8, y+Math.round(h/2));
- var rectY = y+ Math.round(h/2)-rectH/2;
- if(collapsed){
- ctx.moveTo(x+margin+rectW/2,rectY+2);
- ctx.lineTo(x+margin+rectW/2,rectY+2+6);
- }
- ctx.stroke();
- ctx.restore();
- }
- function drowSubItem(ctx,x,y,w,h,offset,nextItem) {
- offset+=6;
- ctx.save();
- ctx.strokeStyle = "gray";
- ctx.translate(0.5, 0.5);
- ctx.beginPath();
- ctx.moveTo(x+offset, y);
- ctx.lineTo(x+offset, y+Math.round(h/2));
- offset+=9;
- ctx.lineTo(x+offset, y+Math.round(h/2));
- if(nextItem&&!nextItem.hasOwnProperty('items')){
- ctx.moveTo(x+offset-9, y+Math.round(h/2));
- ctx.lineTo(x+offset-9, y+h);
- }
- ctx.stroke();
- ctx.restore();
- return offset;
- }
- TreeNodeCellType.prototype = new ns.CellTypes.Text();
- TreeNodeCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) {
- if(value!=null){
- var offset = margin+rectW+6;
- var recode = data[options.row];
- if(recode&&recode.hasOwnProperty('items')){
- drowRect(ctx,x,y,w,h);
- var collapsed = recode.collapsed==undefined?true:recode.collapsed;//options.sheet.getTag(options.row,options.col);
- drowSymbol(ctx,x,y,w,h,collapsed);
- }else if(recode&&!recode.hasOwnProperty('items')){
- offset= drowSubItem(ctx,x,y,w,h,offset,data[options.row+1]);
- offset+=1;
- }
- arguments[2] = x + offset;
- arguments[4] = w - offset;
- GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this, arguments);
- }
- };
- 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) {
- var recode = data[hitinfo.row];
- if(recode&&recode.hasOwnProperty('items')){
- var hoffset= hitinfo.cellRect.x+3;
- if (hitinfo.x > hoffset && hitinfo.x < hoffset + 10){
- var collapsed = recode.collapsed==undefined?true:recode.collapsed;
- collapsed = !collapsed
- recode.collapsed=collapsed;
- //hitinfo.sheet.setTag(hitinfo.row,hitinfo.col,collapsed);
- hitinfo.sheet.getRange(hitinfo.row+1, -1, recode.items.length, -1).visible(!collapsed);
- hitinfo.sheet.invalidateLayout();
- hitinfo.sheet.repaint();
- }
- }
- };
- return new TreeNodeCellType();
- }
- };
- $(document).ready(function(){
- /* if (!blockLibObj.mainSpread){
- blockLibObj.buildSheet();
- blockLibObj.showData();
- }*/
- });
|