block_lib.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. /**
  2. * Created by CSL on 2018-09-19.
  3. */
  4. var blockLibObj = {
  5. datas: [],
  6. mainSpread: null,
  7. mainSheet: null,
  8. mainSetting: {
  9. header:[
  10. {headerName:"名称",headerWidth:400,dataCode:"name", dataType: "String"}
  11. ],
  12. view:{
  13. comboBox:[],
  14. lockColumns:[],
  15. colHeaderHeight: CP_Col_Width.colHeader,
  16. rowHeaderWidth: CP_Col_Width.rowHeader
  17. }
  18. },
  19. buildSheet: function (){
  20. let me = this;
  21. me.datas = [];
  22. if (me.mainSpread) {
  23. me.mainSpread.destroy();
  24. me.mainSpread = null;
  25. };
  26. me.mainSpread = sheetCommonObj.buildSheet($('#div_block_tree')[0], me.mainSetting, me.datas.length);
  27. sheetCommonObj.spreadDefaultStyle(me.mainSpread);
  28. me.mainSheet = me.mainSpread.getSheet(0);
  29. // sheetCommonObj.showData(me.mainSheet, me.mainSetting, me.datas);
  30. },
  31. showData: function () {
  32. let me = this;
  33. let sheet =me.mainSheet;
  34. let cols = me.mainSetting.header;
  35. let datas = me.datas;
  36. let fuc = function () {
  37. sheet.setRowCount(datas.length);
  38. me.initTree(true);
  39. // sheet.setFormatter(-1, 1, '@');
  40. for(let col = 0, cLen = cols.length; col < cLen; col++){
  41. // sheet.getRange(-1, col, -1, 1).hAlign(GC.Spread.Sheets.HorizontalAlign[cols[col]['hAlign']]);
  42. // sheet.getRange(-1, col, -1, 1).vAlign(GC.Spread.Sheets.VerticalAlign[cols[col]['vAlign']]);
  43. for(let row = 0, rLen = datas.length; row < rLen; row++){
  44. sheet.setValue(row, col, datas[row][cols[col]['dataCode']]);
  45. }
  46. }
  47. };
  48. sheet.suspendPaint();
  49. sheet.suspendEvent();
  50. fuc();
  51. sheet.resumePaint();
  52. sheet.resumeEvent();
  53. },
  54. initTree: function (collapse) {
  55. let me = this;
  56. me.mainSheet.getRange(-1, 0, -1, 1).cellType(me.getTreeNodeCellType(me.datas));
  57. for(let i =0, len = me.datas.length; i < len; i++){
  58. if(me.datas[i].hasOwnProperty('items')){
  59. let collapsed = false;
  60. if(collapse){
  61. me.datas[i].collapsed = false;
  62. collapsed = true;
  63. }else {
  64. collapsed = me.datas[i].collapsed == undefined ? true : me.datas[i].collapsed;
  65. }
  66. }
  67. }
  68. },
  69. getTreeNodeCellType: function (data) {
  70. var ns = GC.Spread.Sheets;
  71. var rectW = 10;
  72. var rectH = 10;
  73. var margin = 3;
  74. function TreeNodeCellType() {
  75. }
  76. function drowRect(ctx,x,y,w,h) {///
  77. ctx.save();
  78. ctx.strokeStyle = "gray";
  79. ctx.translate(0.5,0.5);
  80. ctx.beginPath();
  81. var rectX = x+margin;
  82. var rectY = y+ Math.round(h/2)-rectH/2;
  83. ctx.moveTo(rectX, rectY);
  84. ctx.lineTo(rectX, rectY+rectH);
  85. ctx.lineTo(rectX+rectW, rectY+rectH);
  86. ctx.lineTo(rectX+rectW, rectY);
  87. ctx.lineTo(rectX, rectY);
  88. ctx.moveTo(rectX+rectW, y+Math.round(h/2));
  89. ctx.lineTo(rectX+rectW+5, y+Math.round(h/2));
  90. ctx.stroke();
  91. ctx.restore();
  92. }
  93. function drowSymbol(ctx,x,y,w,h,collapsed) {
  94. ctx.save();
  95. ctx.strokeStyle = "#000000";
  96. ctx.translate(0.5, 0.5);
  97. ctx.beginPath();
  98. ctx.moveTo(x+margin+2, y+Math.round(h/2));
  99. ctx.lineTo(x+margin+8, y+Math.round(h/2));
  100. var rectY = y+ Math.round(h/2)-rectH/2;
  101. if(collapsed){
  102. ctx.moveTo(x+margin+rectW/2,rectY+2);
  103. ctx.lineTo(x+margin+rectW/2,rectY+2+6);
  104. }
  105. ctx.stroke();
  106. ctx.restore();
  107. }
  108. function drowSubItem(ctx,x,y,w,h,offset,nextItem) {
  109. offset+=6;
  110. ctx.save();
  111. ctx.strokeStyle = "gray";
  112. ctx.translate(0.5, 0.5);
  113. ctx.beginPath();
  114. ctx.moveTo(x+offset, y);
  115. ctx.lineTo(x+offset, y+Math.round(h/2));
  116. offset+=9;
  117. ctx.lineTo(x+offset, y+Math.round(h/2));
  118. if(nextItem&&!nextItem.hasOwnProperty('items')){
  119. ctx.moveTo(x+offset-9, y+Math.round(h/2));
  120. ctx.lineTo(x+offset-9, y+h);
  121. }
  122. ctx.stroke();
  123. ctx.restore();
  124. return offset;
  125. }
  126. TreeNodeCellType.prototype = new ns.CellTypes.Text();
  127. TreeNodeCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) {
  128. if(value!=null){
  129. var offset = margin+rectW+6;
  130. var recode = data[options.row];
  131. if(recode&&recode.hasOwnProperty('items')){
  132. drowRect(ctx,x,y,w,h);
  133. var collapsed = recode.collapsed==undefined?true:recode.collapsed;//options.sheet.getTag(options.row,options.col);
  134. drowSymbol(ctx,x,y,w,h,collapsed);
  135. }else if(recode&&!recode.hasOwnProperty('items')){
  136. offset= drowSubItem(ctx,x,y,w,h,offset,data[options.row+1]);
  137. offset+=1;
  138. }
  139. arguments[2] = x + offset;
  140. arguments[4] = w - offset;
  141. GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this, arguments);
  142. }
  143. };
  144. TreeNodeCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {
  145. return {
  146. x: x,
  147. y: y,
  148. row: context.row,
  149. col: context.col,
  150. cellStyle: cellStyle,
  151. cellRect: cellRect,
  152. sheetArea: context.sheetArea
  153. };
  154. }
  155. TreeNodeCellType.prototype.processMouseDown = function (hitinfo) {
  156. var recode = data[hitinfo.row];
  157. if(recode&&recode.hasOwnProperty('items')){
  158. var hoffset= hitinfo.cellRect.x+3;
  159. if (hitinfo.x > hoffset && hitinfo.x < hoffset + 10){
  160. var collapsed = recode.collapsed==undefined?true:recode.collapsed;
  161. collapsed = !collapsed
  162. recode.collapsed=collapsed;
  163. //hitinfo.sheet.setTag(hitinfo.row,hitinfo.col,collapsed);
  164. hitinfo.sheet.getRange(hitinfo.row+1, -1, recode.items.length, -1).visible(!collapsed);
  165. hitinfo.sheet.invalidateLayout();
  166. hitinfo.sheet.repaint();
  167. }
  168. }
  169. };
  170. return new TreeNodeCellType();
  171. }
  172. };
  173. $(document).ready(function(){
  174. /* if (!blockLibObj.mainSpread){
  175. blockLibObj.buildSheet();
  176. blockLibObj.showData();
  177. }*/
  178. });