|
@@ -35,46 +35,86 @@ $(document).ready(function() {
|
|
SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), 'tree', ledgerTree);
|
|
SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), 'tree', ledgerTree);
|
|
|
|
|
|
const treeOperationObj = {
|
|
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) {
|
|
addNode: function (spread) {
|
|
|
|
+ const self = this;
|
|
const sheet = spread.getActiveSheet();
|
|
const sheet = spread.getActiveSheet();
|
|
const row = sheet.getSelections()[0].row;
|
|
const row = sheet.getSelections()[0].row;
|
|
|
|
|
|
const tree = sheet.zh_tree;
|
|
const tree = sheet.zh_tree;
|
|
if (!tree) { return; }
|
|
if (!tree) { return; }
|
|
|
|
|
|
- const node = spread.zh_tree.nodes[row];
|
|
|
|
|
|
+ const node = sheet.zh_tree.nodes[row];
|
|
if (!node) { return; }
|
|
if (!node) { return; }
|
|
|
|
|
|
SpreadJsObj.massOperationSheet(sheet, function () {
|
|
SpreadJsObj.massOperationSheet(sheet, function () {
|
|
- tree.addNode('add-node', node, function (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);
|
|
|
|
|
|
+ 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) {
|
|
deleteNode: function (spread) {
|
|
|
|
+ const self = this;
|
|
const sheet = spread.getActiveSheet();
|
|
const sheet = spread.getActiveSheet();
|
|
const row = sheet.getSelections()[0].row;
|
|
const row = sheet.getSelections()[0].row;
|
|
|
|
|
|
const tree = sheet.zh_tree;
|
|
const tree = sheet.zh_tree;
|
|
if (!tree) { return; }
|
|
if (!tree) { return; }
|
|
|
|
|
|
- const node = spread.zh_tree.nodes[row];
|
|
|
|
|
|
+ const node = sheet.zh_tree.nodes[row];
|
|
if (!node) { return; }
|
|
if (!node) { return; }
|
|
|
|
|
|
const count = ledgerTree.getPosterity(node).length;
|
|
const count = ledgerTree.getPosterity(node).length;
|
|
- tree.deleteNode('delete-node', node, function () {
|
|
|
|
|
|
+ tree.baseOperation('base-operation', node, 'delete', function (result) {
|
|
sheet.deleteRows(row, count + 1);
|
|
sheet.deleteRows(row, count + 1);
|
|
|
|
+ self.refreshOperationValid(sheet, sheet.getSelections());
|
|
});
|
|
});
|
|
},
|
|
},
|
|
|
|
+ /**
|
|
|
|
+ * 上移选中节点
|
|
|
|
+ * @param spread
|
|
|
|
+ */
|
|
upMove: function (spread) {
|
|
upMove: function (spread) {
|
|
|
|
+ const self = this;
|
|
const sheet = spread.getActiveSheet();
|
|
const sheet = spread.getActiveSheet();
|
|
const sel = sheet.getSelections()[0];
|
|
const sel = sheet.getSelections()[0];
|
|
const row = sel.row;
|
|
const row = sel.row;
|
|
@@ -85,15 +125,22 @@ $(document).ready(function() {
|
|
const node = tree.nodes[row];
|
|
const node = tree.nodes[row];
|
|
if (!node) { return; }
|
|
if (!node) { return; }
|
|
|
|
|
|
- tree.upMoveNode('up-move', node, function (datas) {
|
|
|
|
- for (const data of datas) {
|
|
|
|
|
|
+ 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);
|
|
SpreadJsObj.reLoadRowData(sheet, tree.nodes.indexOf(data), tree.getPosterity(data).length + 1);
|
|
}
|
|
}
|
|
sheet.setSelection(tree.nodes.indexOf(node), sel.col, sel.rowCount, sel.colCount);
|
|
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);
|
|
//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) {
|
|
downMove: function (spread) {
|
|
|
|
+ const self = this;
|
|
const sheet = spread.getActiveSheet();
|
|
const sheet = spread.getActiveSheet();
|
|
const sel = sheet.getSelections()[0];
|
|
const sel = sheet.getSelections()[0];
|
|
const row = sel.row;
|
|
const row = sel.row;
|
|
@@ -104,14 +151,21 @@ $(document).ready(function() {
|
|
const node = tree.nodes[row];
|
|
const node = tree.nodes[row];
|
|
if (!node) { return; }
|
|
if (!node) { return; }
|
|
|
|
|
|
- tree.downMoveNode('down-move', node, function (datas) {
|
|
|
|
- for (const data of datas) {
|
|
|
|
|
|
+ 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);
|
|
SpreadJsObj.reLoadRowData(sheet, tree.nodes.indexOf(data), tree.getPosterity(data).length + 1);
|
|
}
|
|
}
|
|
sheet.setSelection(tree.nodes.indexOf(node), sel.col, sel.rowCount, sel.colCount);
|
|
sheet.setSelection(tree.nodes.indexOf(node), sel.col, sel.rowCount, sel.colCount);
|
|
|
|
+ self.refreshOperationValid(sheet, sheet.getSelections());
|
|
});
|
|
});
|
|
|
|
+
|
|
},
|
|
},
|
|
|
|
+ /**
|
|
|
|
+ * 升级选中节点
|
|
|
|
+ * @param spread
|
|
|
|
+ */
|
|
upLevel: function (spread) {
|
|
upLevel: function (spread) {
|
|
|
|
+ const self = this;
|
|
const sheet = spread.getActiveSheet();
|
|
const sheet = spread.getActiveSheet();
|
|
const row = sheet.getSelections()[0].row;
|
|
const row = sheet.getSelections()[0].row;
|
|
|
|
|
|
@@ -121,11 +175,18 @@ $(document).ready(function() {
|
|
const node = tree.nodes[row];
|
|
const node = tree.nodes[row];
|
|
if (!node) { return; }
|
|
if (!node) { return; }
|
|
|
|
|
|
- tree.upLevelNode('up-level', node, function () {
|
|
|
|
|
|
+ tree.baseOperation('base-operation', node, 'up-level', function (result) {
|
|
sheet.repaint();
|
|
sheet.repaint();
|
|
|
|
+ self.refreshOperationValid(sheet, sheet.getSelections());
|
|
});
|
|
});
|
|
|
|
+
|
|
},
|
|
},
|
|
|
|
+ /**
|
|
|
|
+ * 降级选中节点
|
|
|
|
+ * @param spread
|
|
|
|
+ */
|
|
downLevel: function (spread) {
|
|
downLevel: function (spread) {
|
|
|
|
+ const self = this;
|
|
const sheet = spread.getActiveSheet();
|
|
const sheet = spread.getActiveSheet();
|
|
const row = sheet.getSelections()[0].row;
|
|
const row = sheet.getSelections()[0].row;
|
|
|
|
|
|
@@ -135,12 +196,17 @@ $(document).ready(function() {
|
|
const node = tree.nodes[row];
|
|
const node = tree.nodes[row];
|
|
if (!node) { return; }
|
|
if (!node) { return; }
|
|
|
|
|
|
- tree.downLevelNode('down-level', node, function () {
|
|
|
|
|
|
+ tree.baseOperation('base-operation', node, 'down-level', function (result) {
|
|
sheet.repaint();
|
|
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 () {
|
|
$('#delete').click(function () {
|
|
treeOperationObj.deleteNode(ledgerSpread);
|
|
treeOperationObj.deleteNode(ledgerSpread);
|
|
@@ -157,6 +223,7 @@ $(document).ready(function() {
|
|
$('#down-level').click(function () {
|
|
$('#down-level').click(function () {
|
|
treeOperationObj.downLevel(ledgerSpread);
|
|
treeOperationObj.downLevel(ledgerSpread);
|
|
});
|
|
});
|
|
|
|
+ treeOperationObj.refreshOperationValid(ledgerSpread.getActiveSheet(), ledgerSpread.getActiveSheet().getSelections());
|
|
|
|
|
|
// 右键菜单
|
|
// 右键菜单
|
|
$.contextMenu({
|
|
$.contextMenu({
|