ledger.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. /**
  2. * 台账相关js
  3. *
  4. * @author Mai
  5. * @date 2018/02/05
  6. * @version
  7. */
  8. $(document).ready(function() {
  9. autoFlashHeight();
  10. const ledgerSpread = SpreadJsObj.createNewSpread($('#ledger-spread')[0]);
  11. const ledgerTree = createNewPathTree({
  12. id: 'ledger_id',
  13. pid: 'ledger_pid',
  14. order: 'order',
  15. level: 'level',
  16. rootId: -1
  17. });
  18. ledgerTree.loadDatas(ledger);
  19. SpreadJsObj.initSheet(ledgerSpread.getActiveSheet(), {
  20. cols: [
  21. {title: '项目节编号', field: 'code', width: 150, cellType: 'tree'},
  22. {title: '清单编号', field: 'b_code', width: 80},
  23. {title: '名称', field: 'name', width: 230},
  24. {title: '单位', field: 'unit', width: 50},
  25. {title: '单价', field: 'price', width: 60},
  26. {title: '数量', field: 'quantity', width: 60},
  27. {title: '金额', field: 'totalPrice', width: 60},
  28. {title: '施工图原设计', field: 'design', width: 60},
  29. {title: '图(册)号', field: 'drawingCode', width: 80},
  30. {title: '备注', field: 'memo', width: 100}
  31. ],
  32. treeCol: 0,
  33. emptyRows: 3
  34. });
  35. SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), 'tree', ledgerTree);
  36. const treeOperationObj = {
  37. addNode: function (spread) {
  38. const sheet = spread.getActiveSheet();
  39. const row = sheet.getSelections()[0].row;
  40. const tree = sheet.zh_tree;
  41. if (!tree) { return; }
  42. const node = spread.zh_tree.nodes[row];
  43. if (!node) { return; }
  44. SpreadJsObj.massOperationSheet(sheet, function () {
  45. tree.addNode('add-node', node, function (newNodes) {
  46. newNodes.sort(function (a, b) {
  47. const aIndex = tree.nodes.indexOf(a);
  48. const bIndex = tree.nodes.indexOf(b);
  49. return aIndex - bIndex;
  50. });
  51. for (const node of newNodes) {
  52. const index = tree.nodes.indexOf(node);
  53. sheet.addRows(index, 1);
  54. }
  55. });
  56. });
  57. },
  58. deleteNode: function (spread) {
  59. const sheet = spread.getActiveSheet();
  60. const row = sheet.getSelections()[0].row;
  61. const tree = sheet.zh_tree;
  62. if (!tree) { return; }
  63. const node = spread.zh_tree.nodes[row];
  64. if (!node) { return; }
  65. const count = ledgerTree.getPosterity(node).length;
  66. tree.deleteNode('delete-node', node, function () {
  67. sheet.deleteRows(row, count + 1);
  68. });
  69. },
  70. upMove: function (spread) {
  71. const sheet = spread.getActiveSheet();
  72. const sel = sheet.getSelections()[0];
  73. const row = sel.row;
  74. const tree = sheet.zh_tree;
  75. if (!tree) { return; }
  76. const node = tree.nodes[row];
  77. if (!node) { return; }
  78. tree.upMoveNode('up-move', node, function (datas) {
  79. for (const data of datas) {
  80. SpreadJsObj.reLoadRowData(sheet, tree.nodes.indexOf(data), tree.getPosterity(data).length + 1);
  81. }
  82. sheet.setSelection(tree.nodes.indexOf(node), sel.col, sel.rowCount, sel.colCount);
  83. //sheet.moveTo(row, -1, tree.nodes.indexOf(node), -1, tree.getPosterity(node).length + 1, -1, GC.Spread.Sheets.CopyToOptions.value);
  84. });
  85. },
  86. downMove: function (spread) {
  87. const sheet = spread.getActiveSheet();
  88. const sel = sheet.getSelections()[0];
  89. const row = sel.row;
  90. const tree = sheet.zh_tree;
  91. if (!tree) { return; }
  92. const node = tree.nodes[row];
  93. if (!node) { return; }
  94. tree.downMoveNode('down-move', node, function (datas) {
  95. for (const data of datas) {
  96. SpreadJsObj.reLoadRowData(sheet, tree.nodes.indexOf(data), tree.getPosterity(data).length + 1);
  97. }
  98. sheet.setSelection(tree.nodes.indexOf(node), sel.col, sel.rowCount, sel.colCount);
  99. });
  100. },
  101. upLevel: function (spread) {
  102. const sheet = spread.getActiveSheet();
  103. const row = sheet.getSelections()[0].row;
  104. const tree = sheet.zh_tree;
  105. if (!tree) { return; }
  106. const node = tree.nodes[row];
  107. if (!node) { return; }
  108. tree.upLevelNode('up-level', node, function () {
  109. sheet.repaint();
  110. });
  111. },
  112. downLevel: function (spread) {
  113. const sheet = spread.getActiveSheet();
  114. const row = sheet.getSelections()[0].row;
  115. const tree = sheet.zh_tree;
  116. if (!tree) { return; }
  117. const node = tree.nodes[row];
  118. if (!node) { return; }
  119. tree.downLevelNode('down-level', node, function () {
  120. sheet.repaint();
  121. });
  122. }
  123. };
  124. // 绑定 删除等 顶部按钮
  125. $('#delete').click(function () {
  126. treeOperationObj.deleteNode(ledgerSpread);
  127. });
  128. $('#up-move').click(function () {
  129. treeOperationObj.upMove(ledgerSpread);
  130. });
  131. $('#down-move').click(function () {
  132. treeOperationObj.downMove(ledgerSpread);
  133. });
  134. $('#up-level').click(function () {
  135. treeOperationObj.upLevel(ledgerSpread);
  136. });
  137. $('#down-level').click(function () {
  138. treeOperationObj.downLevel(ledgerSpread);
  139. });
  140. // 右键菜单
  141. $.contextMenu({
  142. selector: '#ledger-spread',
  143. build: function ($trigger, e) {
  144. const target = SpreadJsObj.safeRightClickSelection($trigger, e, ledgerSpread);
  145. return target.hitTestType === GC.Spread.Sheets.SheetArea.viewport || target.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader;
  146. },
  147. items: {
  148. 'create': {
  149. name: '新增',
  150. icon: 'fa-sign-in',
  151. callback: function (key, opt) {
  152. treeOperationObj.addNode(ledgerSpread);
  153. },
  154. visible: function(key, opt){
  155. const sheet = ledgerSpread.getActiveSheet();
  156. const selection = sheet.getSelections();
  157. const row = selection[0].row;
  158. const select = ledgerTree.nodes[row];
  159. return select;
  160. }
  161. },
  162. 'delete': {
  163. name: '删除',
  164. icon: 'fa-remove',
  165. callback: function (key, opt) {
  166. treeOperationObj.deleteNode(ledgerSpread);
  167. },
  168. visible: function (key, opt) {
  169. const sheet = ledgerSpread.getActiveSheet();
  170. const selection = sheet.getSelections();
  171. const row = selection[0].row;
  172. const select = ledgerTree.nodes[row];
  173. return select;
  174. }
  175. }
  176. }
  177. });
  178. });