/** * 台账相关js * * @author Mai * @date 2018/02/05 * @version */ $(document).ready(function() { autoFlashHeight(); const ledgerSpread = SpreadJsObj.createNewSpread($('#ledger-spread')[0]); const ledgerTree = createNewPathTree({ id: 'ledger_id', pid: 'ledger_pid', order: 'order', level: 'level', rootId: -1 }); ledgerTree.loadDatas(ledger); SpreadJsObj.initSheet(ledgerSpread.getActiveSheet(), { cols: [ {title: '项目节编号', field: 'code', width: 150, cellType: 'tree'}, {title: '清单编号', field: 'b_code', width: 80}, {title: '名称', field: 'name', width: 230}, {title: '单位', field: 'unit', width: 50}, {title: '单价', field: 'price', width: 60}, {title: '数量', field: 'quantity', width: 60}, {title: '金额', field: 'totalPrice', width: 60}, {title: '施工图原设计', field: 'design', width: 60}, {title: '图(册)号', field: 'drawingCode', width: 80}, {title: '备注', field: 'memo', width: 100} ], treeCol: 0, emptyRows: 3 }); SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), 'tree', ledgerTree); const treeOperationObj = { refreshOperationValid: function (sheet, selections) { const setObjEnable = function (obj, enable) { if (enable) { obj.removeClass('disabled'); } else { obj.addClass('disabled'); } }; const row = selections[0].row; const tree = sheet.zh_tree; if (!tree) { return; } const node = sheet.zh_tree.nodes[row]; setObjEnable($('#delete'), node); setObjEnable($('#up-move'), node && node.order > 1); setObjEnable($('#down-move'), node && !tree.isLastSibling(node)); setObjEnable($('#up-level'), tree.getParent(node)); setObjEnable($('#down-level'), node && node.order > 1); }, /** * 新增节点 * @param spread */ addNode: function (spread) { const self = this; const sheet = spread.getActiveSheet(); const row = sheet.getSelections()[0].row; const tree = sheet.zh_tree; if (!tree) { return; } const node = sheet.zh_tree.nodes[row]; if (!node) { return; } SpreadJsObj.massOperationSheet(sheet, function () { tree.baseOperation('base-operation', node, 'add', function (result) { const newNodes = result.create; if (newNodes) { newNodes.sort(function (a, b) { const aIndex = tree.nodes.indexOf(a); const bIndex = tree.nodes.indexOf(b); return aIndex - bIndex; }); for (const node of newNodes) { const index = tree.nodes.indexOf(node); sheet.addRows(index, 1); } } self.refreshOperationValid(sheet, sheet.getSelections()); }); }); }, /** * 删除选中节点 * @param spread */ deleteNode: function (spread) { const self = this; const sheet = spread.getActiveSheet(); const row = sheet.getSelections()[0].row; const tree = sheet.zh_tree; if (!tree) { return; } const node = sheet.zh_tree.nodes[row]; if (!node) { return; } const count = ledgerTree.getPosterity(node).length; tree.baseOperation('base-operation', node, 'delete', function (result) { sheet.deleteRows(row, count + 1); self.refreshOperationValid(sheet, sheet.getSelections()); }); }, /** * 上移选中节点 * @param spread */ upMove: function (spread) { const self = this; const sheet = spread.getActiveSheet(); const sel = sheet.getSelections()[0]; const row = sel.row; const tree = sheet.zh_tree; if (!tree) { return; } const node = tree.nodes[row]; if (!node) { return; } tree.baseOperation('base-operation', node, 'up-move', function (result) { for (const data of result.update) { SpreadJsObj.reLoadRowData(sheet, tree.nodes.indexOf(data), tree.getPosterity(data).length + 1); } sheet.setSelection(tree.nodes.indexOf(node), sel.col, sel.rowCount, sel.colCount); self.refreshOperationValid(sheet, sheet.getSelections()); //sheet.moveTo(row, -1, tree.nodes.indexOf(node), -1, tree.getPosterity(node).length + 1, -1, GC.Spread.Sheets.CopyToOptions.value); }); }, /** * 下移选中节点 * @param spread */ downMove: function (spread) { const self = this; const sheet = spread.getActiveSheet(); const sel = sheet.getSelections()[0]; const row = sel.row; const tree = sheet.zh_tree; if (!tree) { return; } const node = tree.nodes[row]; if (!node) { return; } tree.baseOperation('base-operation', node, 'down-move', function (result) { for (const data of result.update) { SpreadJsObj.reLoadRowData(sheet, tree.nodes.indexOf(data), tree.getPosterity(data).length + 1); } sheet.setSelection(tree.nodes.indexOf(node), sel.col, sel.rowCount, sel.colCount); self.refreshOperationValid(sheet, sheet.getSelections()); }); }, /** * 升级选中节点 * @param spread */ upLevel: function (spread) { const self = this; const sheet = spread.getActiveSheet(); const row = sheet.getSelections()[0].row; const tree = sheet.zh_tree; if (!tree) { return; } const node = tree.nodes[row]; if (!node) { return; } tree.baseOperation('base-operation', node, 'up-level', function (result) { sheet.repaint(); self.refreshOperationValid(sheet, sheet.getSelections()); }); }, /** * 降级选中节点 * @param spread */ downLevel: function (spread) { const self = this; const sheet = spread.getActiveSheet(); const row = sheet.getSelections()[0].row; const tree = sheet.zh_tree; if (!tree) { return; } const node = tree.nodes[row]; if (!node) { return; } tree.baseOperation('base-operation', node, 'down-level', function (result) { sheet.repaint(); self.refreshOperationValid(sheet, sheet.getSelections()); }); } }; ledgerSpread.bind(GC.Spread.Sheets.Events.SelectionChanged, function (e, info) { treeOperationObj.refreshOperationValid(info.sheet, info.newSelections); }); // 绑定 删除等 顶部按钮 $('#delete').click(function () { treeOperationObj.deleteNode(ledgerSpread); }); $('#up-move').click(function () { treeOperationObj.upMove(ledgerSpread); }); $('#down-move').click(function () { treeOperationObj.downMove(ledgerSpread); }); $('#up-level').click(function () { treeOperationObj.upLevel(ledgerSpread); }); $('#down-level').click(function () { treeOperationObj.downLevel(ledgerSpread); }); treeOperationObj.refreshOperationValid(ledgerSpread.getActiveSheet(), ledgerSpread.getActiveSheet().getSelections()); // 右键菜单 $.contextMenu({ selector: '#ledger-spread', build: function ($trigger, e) { const target = SpreadJsObj.safeRightClickSelection($trigger, e, ledgerSpread); return target.hitTestType === GC.Spread.Sheets.SheetArea.viewport || target.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader; }, items: { 'create': { name: '新增', icon: 'fa-sign-in', callback: function (key, opt) { treeOperationObj.addNode(ledgerSpread); }, visible: function(key, opt){ const sheet = ledgerSpread.getActiveSheet(); const selection = sheet.getSelections(); const row = selection[0].row; const select = ledgerTree.nodes[row]; return select; } }, 'delete': { name: '删除', icon: 'fa-remove', callback: function (key, opt) { treeOperationObj.deleteNode(ledgerSpread); }, visible: function (key, opt) { const sheet = ledgerSpread.getActiveSheet(); const selection = sheet.getSelections(); const row = selection[0].row; const select = ledgerTree.nodes[row]; return select; } } } }); });