|
@@ -951,322 +951,353 @@ $(document).ready(function() {
|
|
|
treeOperationObj.refreshTree(sheet, refreshNode);
|
|
|
});
|
|
|
});
|
|
|
+ }
|
|
|
|
|
|
- let batchInsertObj;
|
|
|
- $.contextMenu.types.batchInsert = function (item, opt, root) {
|
|
|
- const self = this;
|
|
|
- if ($.isFunction(item.icon)) {
|
|
|
- item._icon = item.icon.call(this, this, $t, key, item);
|
|
|
+ let batchInsertObj;
|
|
|
+ $.contextMenu.types.batchInsert = function (item, opt, root) {
|
|
|
+ const self = this;
|
|
|
+ if ($.isFunction(item.icon)) {
|
|
|
+ item._icon = item.icon.call(this, this, $t, key, item);
|
|
|
+ } else {
|
|
|
+ if (typeof(item.icon) === 'string' && item.icon.substring(0, 3) === 'fa-') {
|
|
|
+ // to enable font awesome
|
|
|
+ item._icon = root.classNames.icon + ' ' + root.classNames.icon + '--fa fa ' + item.icon;
|
|
|
} else {
|
|
|
- if (typeof(item.icon) === 'string' && item.icon.substring(0, 3) === 'fa-') {
|
|
|
- // to enable font awesome
|
|
|
- item._icon = root.classNames.icon + ' ' + root.classNames.icon + '--fa fa ' + item.icon;
|
|
|
- } else {
|
|
|
- item._icon = root.classNames.icon + ' ' + root.classNames.icon + '-' + item.icon;
|
|
|
- }
|
|
|
+ item._icon = root.classNames.icon + ' ' + root.classNames.icon + '-' + item.icon;
|
|
|
}
|
|
|
- this.addClass(item._icon);
|
|
|
- const $obj = $('<div>' + item.name + '<input class="text-right ml-1 mr-1" type="tel" max="20" min="1" value="' + item.value + '" style="width: 30px; height: 18px; padding-right: 4px;">行</div>')
|
|
|
- .appendTo(this);
|
|
|
- const $input = $obj.find('input');
|
|
|
- const event = () => {
|
|
|
- if (self.hasClass('context-menu-disabled')) return;
|
|
|
- item.batchInsert($input[0], root);
|
|
|
- };
|
|
|
- $obj.on('click', event).keypress(function (e) {if (e.keyCode === 13) { event(); }});
|
|
|
- $input.click((e) => {e.stopPropagation();})
|
|
|
- .keyup((e) => {if (e.keyCode === 13) item.batchInsert($input[0], root);})
|
|
|
- .on('input', function () {this.value = this.value.replace(/[^\d]/g, '');});
|
|
|
+ }
|
|
|
+ this.addClass(item._icon);
|
|
|
+ const $obj = $('<div>' + item.name + '<input class="text-right ml-1 mr-1" type="tel" max="20" min="1" value="' + item.value + '" style="width: 30px; height: 18px; padding-right: 4px;">行</div>')
|
|
|
+ .appendTo(this);
|
|
|
+ const $input = $obj.find('input');
|
|
|
+ const event = () => {
|
|
|
+ if (self.hasClass('context-menu-disabled')) return;
|
|
|
+ item.batchInsert($input[0], root);
|
|
|
};
|
|
|
- // 右键菜单
|
|
|
- $.contextMenu({
|
|
|
- selector: '#ledger-spread',
|
|
|
- build: function ($trigger, e) {
|
|
|
- const target = SpreadJsObj.safeRightClickSelection($trigger, e, ledgerSpread);
|
|
|
- return target.hitTestType === spreadNS.SheetArea.viewport || target.hitTestType === spreadNS.SheetArea.rowHeader;
|
|
|
+ $obj.on('click', event).keypress(function (e) {if (e.keyCode === 13) { event(); }});
|
|
|
+ $input.click((e) => {e.stopPropagation();})
|
|
|
+ .keyup((e) => {if (e.keyCode === 13) item.batchInsert($input[0], root);})
|
|
|
+ .on('input', function () {this.value = this.value.replace(/[^\d]/g, '');});
|
|
|
+ };
|
|
|
+ // 右键菜单
|
|
|
+ const billsContextMenuOptions = {
|
|
|
+ selector: '#ledger-spread',
|
|
|
+ build: function ($trigger, e) {
|
|
|
+ const target = SpreadJsObj.safeRightClickSelection($trigger, e, ledgerSpread);
|
|
|
+ return target.hitTestType === spreadNS.SheetArea.viewport || target.hitTestType === spreadNS.SheetArea.rowHeader;
|
|
|
+ },
|
|
|
+ items: {},
|
|
|
+ };
|
|
|
+ if (!readOnly) {
|
|
|
+ billsContextMenuOptions.items.create = {
|
|
|
+ name: '新增',
|
|
|
+ icon: 'fa-sign-in',
|
|
|
+ callback: function (key, opt) {
|
|
|
+ treeOperationObj.addNode(ledgerSpread.getActiveSheet());
|
|
|
},
|
|
|
- items: {
|
|
|
- 'create': {
|
|
|
- name: '新增',
|
|
|
- icon: 'fa-sign-in',
|
|
|
- callback: function (key, opt) {
|
|
|
- treeOperationObj.addNode(ledgerSpread.getActiveSheet());
|
|
|
- },
|
|
|
- disabled: function (key, opt) {
|
|
|
- const sheet = ledgerSpread.getActiveSheet();
|
|
|
- const selection = sheet.getSelections();
|
|
|
- const sel = selection ? selection[0] : sheet.getSelections()[0];
|
|
|
- const row = sel ? sel.row : -1;
|
|
|
- const tree = sheet.zh_tree;
|
|
|
- if (!tree) return true;
|
|
|
- const first = sheet.zh_tree.nodes[row];
|
|
|
- let last = first, sameParent = true;
|
|
|
- if (sel.rowCount > 1) {
|
|
|
- for (let r = 1; r < sel.rowCount; r++) {
|
|
|
- const rNode = tree.nodes[sel.row + r];
|
|
|
- if (rNode.level > first.level) continue;
|
|
|
- if ((rNode.level < first.level) || (rNode.level === first.level && rNode.pid !== first.pid)) {
|
|
|
- sameParent = false;
|
|
|
- break;
|
|
|
- }
|
|
|
- last = rNode;
|
|
|
- }
|
|
|
+ disabled: function (key, opt) {
|
|
|
+ const sheet = ledgerSpread.getActiveSheet();
|
|
|
+ const selection = sheet.getSelections();
|
|
|
+ const sel = selection ? selection[0] : sheet.getSelections()[0];
|
|
|
+ const row = sel ? sel.row : -1;
|
|
|
+ const tree = sheet.zh_tree;
|
|
|
+ if (!tree) return true;
|
|
|
+ const first = sheet.zh_tree.nodes[row];
|
|
|
+ let last = first, sameParent = true;
|
|
|
+ if (sel.rowCount > 1) {
|
|
|
+ for (let r = 1; r < sel.rowCount; r++) {
|
|
|
+ const rNode = tree.nodes[sel.row + r];
|
|
|
+ if (rNode.level > first.level) continue;
|
|
|
+ if ((rNode.level < first.level) || (rNode.level === first.level && rNode.pid !== first.pid)) {
|
|
|
+ sameParent = false;
|
|
|
+ break;
|
|
|
}
|
|
|
- const valid = !sheet.zh_setting.readOnly;
|
|
|
- return !(valid && first && first.level > 1);
|
|
|
+ last = rNode;
|
|
|
}
|
|
|
- },
|
|
|
- 'delete': {
|
|
|
- name: '删除',
|
|
|
- icon: 'fa-remove',
|
|
|
- callback: function (key, opt) {
|
|
|
- treeOperationObj.deleteNode(ledgerSpread.getActiveSheet());
|
|
|
- },
|
|
|
- disabled: function (key, opt) {
|
|
|
- const sheet = ledgerSpread.getActiveSheet();
|
|
|
- const selection = sheet.getSelections();
|
|
|
- const sel = selection ? selection[0] : sheet.getSelections()[0];
|
|
|
- const row = sel ? sel.row : -1;
|
|
|
- const tree = sheet.zh_tree;
|
|
|
- if (!tree) return true;
|
|
|
- const first = sheet.zh_tree.nodes[row];
|
|
|
- let last = first, sameParent = true;
|
|
|
- if (sel.rowCount > 1) {
|
|
|
- for (let r = 1; r < sel.rowCount; r++) {
|
|
|
- const rNode = tree.nodes[sel.row + r];
|
|
|
- if (rNode.level > first.level) continue;
|
|
|
- if ((rNode.level < first.level) || (rNode.level === first.level && rNode.pid !== first.pid)) {
|
|
|
- sameParent = false;
|
|
|
- break;
|
|
|
- }
|
|
|
- last = rNode;
|
|
|
- }
|
|
|
+ }
|
|
|
+ const valid = !sheet.zh_setting.readOnly;
|
|
|
+ return !(valid && first && first.level > 1);
|
|
|
+ },
|
|
|
+ visible: function (key, opt) {
|
|
|
+ return !readOnly;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ billsContextMenuOptions.items.delete = {
|
|
|
+ name: '删除',
|
|
|
+ icon: 'fa-remove',
|
|
|
+ callback: function (key, opt) {
|
|
|
+ treeOperationObj.deleteNode(ledgerSpread.getActiveSheet());
|
|
|
+ },
|
|
|
+ disabled: function (key, opt) {
|
|
|
+ const sheet = ledgerSpread.getActiveSheet();
|
|
|
+ const selection = sheet.getSelections();
|
|
|
+ const sel = selection ? selection[0] : sheet.getSelections()[0];
|
|
|
+ const row = sel ? sel.row : -1;
|
|
|
+ const tree = sheet.zh_tree;
|
|
|
+ if (!tree) return true;
|
|
|
+ const first = sheet.zh_tree.nodes[row];
|
|
|
+ let last = first, sameParent = true;
|
|
|
+ if (sel.rowCount > 1) {
|
|
|
+ for (let r = 1; r < sel.rowCount; r++) {
|
|
|
+ const rNode = tree.nodes[sel.row + r];
|
|
|
+ if (rNode.level > first.level) continue;
|
|
|
+ if ((rNode.level < first.level) || (rNode.level === first.level && rNode.pid !== first.pid)) {
|
|
|
+ sameParent = false;
|
|
|
+ break;
|
|
|
}
|
|
|
- const valid = !sheet.zh_setting.readOnly;
|
|
|
- return !(valid && first && sameParent && !(first.level === 1 && first.node_type));
|
|
|
+ last = rNode;
|
|
|
}
|
|
|
- },
|
|
|
- 'sprBase': '-----------',
|
|
|
- 'copyBlock': {
|
|
|
- name: '复制整块',
|
|
|
- icon: 'fa-files-o',
|
|
|
- callback: function (key, opt) {
|
|
|
- /*ledgerSpread.commandManager().execute({
|
|
|
- cmd:"copy",
|
|
|
- sheetName:ledgerSpread.getActiveSheet().name()
|
|
|
- });*/
|
|
|
- treeOperationObj.block = [];
|
|
|
- const copyBlockList = [];
|
|
|
- const sheet = ledgerSpread.getActiveSheet();
|
|
|
- const sel = sheet.getSelections()[0];
|
|
|
- let iRow = sel.row;
|
|
|
- const pid = sheet.zh_tree.nodes[iRow].ledger_pid;
|
|
|
- while (iRow < sel.row + sel.rowCount) {
|
|
|
- const node = sheet.zh_tree.nodes[iRow];
|
|
|
- if (node.ledger_pid !== pid) {
|
|
|
- toastr.error('仅可同时选中同层节点');
|
|
|
- return;
|
|
|
- }
|
|
|
- copyBlockList.push(node.ledger_id);
|
|
|
- iRow += sheet.zh_tree.getPosterity(node).length + 1;
|
|
|
+ }
|
|
|
+ const valid = !sheet.zh_setting.readOnly;
|
|
|
+ return !(valid && first && sameParent && !(first.level === 1 && first.node_type));
|
|
|
+ },
|
|
|
+ visible: function (key, opt) {
|
|
|
+ return !readOnly;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ billsContextMenuOptions.items.sprBase = '-----------';
|
|
|
+ }
|
|
|
+ billsContextMenuOptions.items.copyBlock = {
|
|
|
+ name: '复制整块',
|
|
|
+ icon: 'fa-files-o',
|
|
|
+ callback: function (key, opt) {
|
|
|
+ /*ledgerSpread.commandManager().execute({
|
|
|
+ cmd:"copy",
|
|
|
+ sheetName:ledgerSpread.getActiveSheet().name()
|
|
|
+ });*/
|
|
|
+ treeOperationObj.block = [];
|
|
|
+ const copyBlockList = [];
|
|
|
+ const sheet = ledgerSpread.getActiveSheet();
|
|
|
+ const sel = sheet.getSelections()[0];
|
|
|
+ let iRow = sel.row;
|
|
|
+ const pid = sheet.zh_tree.nodes[iRow].ledger_pid;
|
|
|
+ while (iRow < sel.row + sel.rowCount) {
|
|
|
+ const node = sheet.zh_tree.nodes[iRow];
|
|
|
+ if (node.ledger_pid !== pid) {
|
|
|
+ toastr.error('仅可同时选中同层节点');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ copyBlockList.push(node.ledger_id);
|
|
|
+ iRow += sheet.zh_tree.getPosterity(node).length + 1;
|
|
|
+ }
|
|
|
+ const tenderId = _.toInteger(getTenderId());
|
|
|
+ setLocalCache(copyBlockTag, JSON.stringify({tid: tenderId, block: copyBlockList}));
|
|
|
+ //treeOperationObj.block = copyBlockList;
|
|
|
+ },
|
|
|
+ visible: function (key, opt) {
|
|
|
+ const sheet = ledgerSpread.getActiveSheet();
|
|
|
+ const selection = sheet.getSelections();
|
|
|
+ const row = selection[0].row;
|
|
|
+ const select = ledgerTree.nodes[row];
|
|
|
+ return select;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ if (!readOnly) {
|
|
|
+ billsContextMenuOptions.items.pasteBlock = {
|
|
|
+ name: '粘贴整块',
|
|
|
+ icon: 'fa-clipboard',
|
|
|
+ disabled: function (key, opt) {
|
|
|
+ //const block = treeOperationObj.block || [];
|
|
|
+ const copyInfo = JSON.parse(getLocalCache(copyBlockTag));
|
|
|
+ return !(copyInfo && copyInfo.tid && copyInfo.tid > 0 && copyInfo.block && copyInfo.block.length > 0);
|
|
|
+ },
|
|
|
+ callback: function (key, opt) {
|
|
|
+ //const block = treeOperationObj.block || [];
|
|
|
+ const copyInfo = JSON.parse(getLocalCache(copyBlockTag));
|
|
|
+ if (copyInfo.block.length > 0) {
|
|
|
+ treeOperationObj.pasteBlock(ledgerSpread, copyInfo);
|
|
|
+ } else {
|
|
|
+ document.execCommand('paste');
|
|
|
+ }
|
|
|
+ },
|
|
|
+ visible: function (key, opt) {
|
|
|
+ return !readOnly;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ billsContextMenuOptions.items.sprBlock = '-----------';
|
|
|
+ }
|
|
|
+ if (!readOnly) {
|
|
|
+ billsContextMenuOptions.items.sortChildren = {
|
|
|
+ name: '顺序重排子项编号',
|
|
|
+ icon: 'fa-sort-numeric-asc',
|
|
|
+ disabled: function (key, opt) {
|
|
|
+ const node = SpreadJsObj.getSelectObject(ledgerSpread.getActiveSheet());
|
|
|
+ return !node || !node.code || !node.children || node.children === 0;
|
|
|
+ },
|
|
|
+ callback: function (key, opt) {
|
|
|
+ treeOperationObj.sortCode(ledgerSpread.getActiveSheet());
|
|
|
+ },
|
|
|
+ visible: function (key, opt) {
|
|
|
+ return !readOnly;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ billsContextMenuOptions.items.sprSort = '-----------';
|
|
|
+ }
|
|
|
+ if (!readOnly) {
|
|
|
+ billsContextMenuOptions.items.batchInsert = {
|
|
|
+ name: '批量插入',
|
|
|
+ type: 'batchInsert',
|
|
|
+ value: '2',
|
|
|
+ icon: 'fa-sign-in',
|
|
|
+ batchInsert: function (obj, root) {
|
|
|
+ if (_.toNumber(obj.value) > _.toNumber(obj.max)) {
|
|
|
+ obj.value = obj.max;
|
|
|
+ toastr.warning('批量插入不可多于' + obj.max);
|
|
|
+ } else if(_.toNumber(obj.value) < _.toNumber(obj.min)) {
|
|
|
+ obj.value = obj.min;
|
|
|
+ toastr.warning('批量插入不可少于' + obj.min);
|
|
|
+ } else {
|
|
|
+ treeOperationObj.addNode(ledgerSpread.getActiveSheet(), parseInt(obj.value));
|
|
|
+ root.$menu.trigger('contextmenu:hide');
|
|
|
+ }
|
|
|
+ },
|
|
|
+ disabled: function (key, opt) {
|
|
|
+ const sheet = ledgerSpread.getActiveSheet();
|
|
|
+ const selection = sheet.getSelections();
|
|
|
+ const sel = selection ? selection[0] : sheet.getSelections()[0];
|
|
|
+ const row = sel ? sel.row : -1;
|
|
|
+ const tree = sheet.zh_tree;
|
|
|
+ if (!tree) return true;
|
|
|
+ const first = sheet.zh_tree.nodes[row];
|
|
|
+ let last = first, sameParent = true;
|
|
|
+ if (sel.rowCount > 1) {
|
|
|
+ for (let r = 1; r < sel.rowCount; r++) {
|
|
|
+ const rNode = tree.nodes[sel.row + r];
|
|
|
+ if (rNode.level > first.level) continue;
|
|
|
+ if ((rNode.level < first.level) || (rNode.level === first.level && rNode.pid !== first.pid)) {
|
|
|
+ sameParent = false;
|
|
|
+ break;
|
|
|
}
|
|
|
- const tenderId = _.toInteger(getTenderId());
|
|
|
- setLocalCache(copyBlockTag, JSON.stringify({tid: tenderId, block: copyBlockList}));
|
|
|
- //treeOperationObj.block = copyBlockList;
|
|
|
- },
|
|
|
- visible: function (key, opt) {
|
|
|
- const sheet = ledgerSpread.getActiveSheet();
|
|
|
- const selection = sheet.getSelections();
|
|
|
- const row = selection[0].row;
|
|
|
- const select = ledgerTree.nodes[row];
|
|
|
- return select;
|
|
|
+ last = rNode;
|
|
|
}
|
|
|
- },
|
|
|
- 'pasteBlock': {
|
|
|
- name: '粘贴整块',
|
|
|
- icon: 'fa-clipboard',
|
|
|
- disabled: function (key, opt) {
|
|
|
- //const block = treeOperationObj.block || [];
|
|
|
- const copyInfo = JSON.parse(getLocalCache(copyBlockTag));
|
|
|
- return !(copyInfo && copyInfo.tid && copyInfo.tid > 0 && copyInfo.block && copyInfo.block.length > 0);
|
|
|
- },
|
|
|
- callback: function (key, opt) {
|
|
|
- //const block = treeOperationObj.block || [];
|
|
|
- const copyInfo = JSON.parse(getLocalCache(copyBlockTag));
|
|
|
- if (copyInfo.block.length > 0) {
|
|
|
- treeOperationObj.pasteBlock(ledgerSpread, copyInfo);
|
|
|
- } else {
|
|
|
- document.execCommand('paste');
|
|
|
- }
|
|
|
+ }
|
|
|
+ const valid = !sheet.zh_setting.readOnly;
|
|
|
+ return !(valid && first && first.level > 1);
|
|
|
+ },
|
|
|
+ visible: function (key, opt) {
|
|
|
+ return !readOnly;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ billsContextMenuOptions.items.batchInsertBillsPos = {
|
|
|
+ name: '批量插入清单-计量单元',
|
|
|
+ icon: 'fa-sign-in',
|
|
|
+ disabled: function (key, opt) {
|
|
|
+ if (!checkTzMeasureType()) return true;
|
|
|
+ const sheet = ledgerSpread.getActiveSheet();
|
|
|
+ const selection = sheet.getSelections();
|
|
|
+ const row = selection[0].row;
|
|
|
+ const select = ledgerTree.nodes[row];
|
|
|
+ if (select) {
|
|
|
+ if (select.code && select.code !== '') {
|
|
|
+ return !ledgerTree.isLeafXmj(select);
|
|
|
+ } else {
|
|
|
+ const parent = ledgerTree.getParent(select);
|
|
|
+ return !(parent && ledgerTree.isLeafXmj(parent));
|
|
|
}
|
|
|
- },
|
|
|
- 'sprBlock': '-----------',
|
|
|
- 'sortChildren': {
|
|
|
- name: '顺序重排子项编号',
|
|
|
- icon: 'fa-sort-numeric-asc',
|
|
|
- disabled: function (key, opt) {
|
|
|
- const node = SpreadJsObj.getSelectObject(ledgerSpread.getActiveSheet());
|
|
|
- return !node || !node.code || !node.children || node.children === 0;
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ callback: function (key, opt) {
|
|
|
+ if (!batchInsertObj) {
|
|
|
+ batchInsertObj = new BatchInsertBillsPosObj($('#batch'));
|
|
|
+ } else {
|
|
|
+ batchInsertObj.initView();
|
|
|
+ }
|
|
|
+ $('#batch').modal('show');
|
|
|
+ },
|
|
|
+ visible: function (key, opt) {
|
|
|
+ return !readOnly;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ billsContextMenuOptions.items.sprBatch = '-----------';
|
|
|
+ }
|
|
|
+ if (!readOnly) {
|
|
|
+ billsContextMenuOptions.items.importExcel = {
|
|
|
+ name: '导入分项清单Excel',
|
|
|
+ icon: 'fa-file-excel-o',
|
|
|
+ disabled: function (key, opt) {
|
|
|
+ return readOnly;
|
|
|
+ },
|
|
|
+ callback: function (key, opt) {
|
|
|
+ importExcel.doImport({
|
|
|
+ template: {
|
|
|
+ hint: '0号台账',
|
|
|
+ url: '/template/导入分项清单EXCEL格式.xls',
|
|
|
},
|
|
|
- callback: function (key, opt) {
|
|
|
- treeOperationObj.sortCode(ledgerSpread.getActiveSheet());
|
|
|
+ callback: function (sheet) {
|
|
|
+ postDataCompress(window.location.pathname + '/upload-excel/tz', sheet, function (result) {
|
|
|
+ ledgerTree.loadDatas(result.bills);
|
|
|
+ treeCalc.calculateAll(ledgerTree);
|
|
|
+ SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), 'tree', ledgerTree);
|
|
|
+ pos.loadDatas(result.pos);
|
|
|
+ posOperationObj.loadCurPosData();
|
|
|
+ }, null);
|
|
|
}
|
|
|
- },
|
|
|
- 'sprSort': '-----------',
|
|
|
- 'batchInsert': {
|
|
|
- name: '批量插入',
|
|
|
- type: 'batchInsert',
|
|
|
- value: '2',
|
|
|
- icon: 'fa-sign-in',
|
|
|
- batchInsert: function (obj, root) {
|
|
|
- if (_.toNumber(obj.value) > _.toNumber(obj.max)) {
|
|
|
- obj.value = obj.max;
|
|
|
- toastr.warning('批量插入不可多于' + obj.max);
|
|
|
- } else if(_.toNumber(obj.value) < _.toNumber(obj.min)) {
|
|
|
- obj.value = obj.min;
|
|
|
- toastr.warning('批量插入不可少于' + obj.min);
|
|
|
- } else {
|
|
|
- treeOperationObj.addNode(ledgerSpread.getActiveSheet(), parseInt(obj.value));
|
|
|
- root.$menu.trigger('contextmenu:hide');
|
|
|
- }
|
|
|
+ });
|
|
|
+ //$('#upload-ledger').modal('show');
|
|
|
+ },
|
|
|
+ visible: function (key, opt) {
|
|
|
+ return !readOnly;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ billsContextMenuOptions.items.importGclBills2Xmj = {
|
|
|
+ name: '导入工程量清单至项目节',
|
|
|
+ icon: 'fa-file-excel-o',
|
|
|
+ disabled: function (key, opt) {
|
|
|
+ const node = SpreadJsObj.getSelectObject(ledgerSpread.getActiveSheet());
|
|
|
+ return readOnly
|
|
|
+ || (node.children && node.children.length > 0)
|
|
|
+ || (!_.isNil(node.b_code) && node.b_code !== '');
|
|
|
+ },
|
|
|
+ callback: function (key, opt) {
|
|
|
+ const node = SpreadJsObj.getSelectObject(ledgerSpread.getActiveSheet());
|
|
|
+ importExcel.doImport({
|
|
|
+ template: {
|
|
|
+ hint: '工程量清单',
|
|
|
+ url: '/template/导入工程量清单EXCEL格式.xls',
|
|
|
},
|
|
|
- disabled: function (key, opt) {
|
|
|
- const sheet = ledgerSpread.getActiveSheet();
|
|
|
- const selection = sheet.getSelections();
|
|
|
- const sel = selection ? selection[0] : sheet.getSelections()[0];
|
|
|
- const row = sel ? sel.row : -1;
|
|
|
- const tree = sheet.zh_tree;
|
|
|
- if (!tree) return true;
|
|
|
- const first = sheet.zh_tree.nodes[row];
|
|
|
- let last = first, sameParent = true;
|
|
|
- if (sel.rowCount > 1) {
|
|
|
- for (let r = 1; r < sel.rowCount; r++) {
|
|
|
- const rNode = tree.nodes[sel.row + r];
|
|
|
- if (rNode.level > first.level) continue;
|
|
|
- if ((rNode.level < first.level) || (rNode.level === first.level && rNode.pid !== first.pid)) {
|
|
|
- sameParent = false;
|
|
|
- break;
|
|
|
+ callback: function (sheet) {
|
|
|
+ postDataCompress(window.location.pathname + '/upload-excel/gcl2xmj', {id: node.id, sheet: sheet}, function (result) {
|
|
|
+ const ledgerSheet = ledgerSpread.getActiveSheet();
|
|
|
+ const sel = ledgerSheet.getSelections();
|
|
|
+
|
|
|
+ const refreshNode = ledgerTree.loadPostData(result);
|
|
|
+ treeOperationObj.refreshTree(ledgerSheet, refreshNode);
|
|
|
+ if (refreshNode.create[0]) {
|
|
|
+ if (sel && sel[0]) {
|
|
|
+ ledgerSheet.setSelection(refreshNode.create[0].index, sel[0].col, sel[0].rowCount, sel[0].colCount);
|
|
|
+ } else {
|
|
|
+ ledgerSheet.setSelection(refreshNode.create[0].index, 0, 1, 1);
|
|
|
}
|
|
|
- last = rNode;
|
|
|
}
|
|
|
- }
|
|
|
- const valid = !sheet.zh_setting.readOnly;
|
|
|
- return !(valid && first && first.level > 1);
|
|
|
+ treeOperationObj.refreshOperationValid(ledgerSheet);
|
|
|
+ }, null);
|
|
|
}
|
|
|
- },
|
|
|
- 'batchInsertBillsPos': {
|
|
|
- name: '批量插入清单-计量单元',
|
|
|
- icon: 'fa-sign-in',
|
|
|
- disabled: function (key, opt) {
|
|
|
- if (!checkTzMeasureType()) return true;
|
|
|
- const sheet = ledgerSpread.getActiveSheet();
|
|
|
- const selection = sheet.getSelections();
|
|
|
- const row = selection[0].row;
|
|
|
- const select = ledgerTree.nodes[row];
|
|
|
- if (select) {
|
|
|
- if (select.code && select.code !== '') {
|
|
|
- return !ledgerTree.isLeafXmj(select);
|
|
|
- } else {
|
|
|
- const parent = ledgerTree.getParent(select);
|
|
|
- return !(parent && ledgerTree.isLeafXmj(parent));
|
|
|
- }
|
|
|
- } else {
|
|
|
- return false;
|
|
|
- }
|
|
|
- },
|
|
|
- callback: function (key, opt) {
|
|
|
- if (!batchInsertObj) {
|
|
|
- batchInsertObj = new BatchInsertBillsPosObj($('#batch'));
|
|
|
- } else {
|
|
|
- batchInsertObj.initView();
|
|
|
- }
|
|
|
- $('#batch').modal('show');
|
|
|
- }
|
|
|
- },
|
|
|
- 'sprBatch': '-----------',
|
|
|
- 'importExcel': {
|
|
|
- name: '导入分项清单Excel',
|
|
|
- icon: 'fa-file-excel-o',
|
|
|
- disabled: function (key, opt) {
|
|
|
- return readOnly;
|
|
|
- },
|
|
|
- callback: function (key, opt) {
|
|
|
- importExcel.doImport({
|
|
|
- template: {
|
|
|
- hint: '0号台账',
|
|
|
- url: '/template/导入分项清单EXCEL格式.xls',
|
|
|
- },
|
|
|
- callback: function (sheet) {
|
|
|
- postDataCompress(window.location.pathname + '/upload-excel/tz', sheet, function (result) {
|
|
|
- ledgerTree.loadDatas(result.bills);
|
|
|
- treeCalc.calculateAll(ledgerTree);
|
|
|
- SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), 'tree', ledgerTree);
|
|
|
- pos.loadDatas(result.pos);
|
|
|
- posOperationObj.loadCurPosData();
|
|
|
- }, null);
|
|
|
- }
|
|
|
- });
|
|
|
- //$('#upload-ledger').modal('show');
|
|
|
- }
|
|
|
- },
|
|
|
- 'importGclBills2Xmj': {
|
|
|
- name: '导入工程量清单至项目节',
|
|
|
- icon: 'fa-file-excel-o',
|
|
|
- disabled: function (key, opt) {
|
|
|
- const node = SpreadJsObj.getSelectObject(ledgerSpread.getActiveSheet());
|
|
|
- return readOnly
|
|
|
- || (node.children && node.children.length > 0)
|
|
|
- || (!_.isNil(node.b_code) && node.b_code !== '');
|
|
|
- },
|
|
|
- callback: function (key, opt) {
|
|
|
- const node = SpreadJsObj.getSelectObject(ledgerSpread.getActiveSheet());
|
|
|
- importExcel.doImport({
|
|
|
- template: {
|
|
|
- hint: '工程量清单',
|
|
|
- url: '/template/导入工程量清单EXCEL格式.xls',
|
|
|
- },
|
|
|
- callback: function (sheet) {
|
|
|
- postDataCompress(window.location.pathname + '/upload-excel/gcl2xmj', {id: node.id, sheet: sheet}, function (result) {
|
|
|
- const ledgerSheet = ledgerSpread.getActiveSheet();
|
|
|
- const sel = ledgerSheet.getSelections();
|
|
|
-
|
|
|
- const refreshNode = ledgerTree.loadPostData(result);
|
|
|
- treeOperationObj.refreshTree(ledgerSheet, refreshNode);
|
|
|
- if (refreshNode.create[0]) {
|
|
|
- if (sel && sel[0]) {
|
|
|
- ledgerSheet.setSelection(refreshNode.create[0].index, sel[0].col, sel[0].rowCount, sel[0].colCount);
|
|
|
- } else {
|
|
|
- ledgerSheet.setSelection(refreshNode.create[0].index, 0, 1, 1);
|
|
|
- }
|
|
|
- }
|
|
|
- treeOperationObj.refreshOperationValid(ledgerSheet);
|
|
|
- }, null);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- },
|
|
|
- 'sprImport': '-----------',
|
|
|
- 'exportExcel': {
|
|
|
- name: '导出表格数据',
|
|
|
- icon: 'fa-file-excel-o',
|
|
|
- callback: function (key, opt) {
|
|
|
- const fileName = $('.text-truncate').attr('data-original-title') + '.xlsx';
|
|
|
- SpreadExcelObj.exportSpread2XlsxWithHeader(ledgerSpread, fileName);
|
|
|
- },
|
|
|
- visible: function (key, opt) {
|
|
|
- try {
|
|
|
- return is_debug;
|
|
|
- } catch (err) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ });
|
|
|
},
|
|
|
- });
|
|
|
- } else {
|
|
|
- $('#ledger-spread').on('contextmenu', () => {return false;});
|
|
|
- //SpreadJsObj.forbiddenSpreadContextMenu('#ledger-spread', ledgerSpread);
|
|
|
+ visible: function (key, opt) {
|
|
|
+ return !readOnly;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ billsContextMenuOptions.items.sprImport = '-----------';
|
|
|
}
|
|
|
+ billsContextMenuOptions.items.exportExcel = {
|
|
|
+ name: '导出表格数据',
|
|
|
+ icon: 'fa-file-excel-o',
|
|
|
+ callback: function (key, opt) {
|
|
|
+ const fileName = $('.text-truncate').attr('data-original-title') + '.xlsx';
|
|
|
+ SpreadExcelObj.exportSpread2XlsxWithHeader(ledgerSpread, fileName);
|
|
|
+ },
|
|
|
+ visible: function (key, opt) {
|
|
|
+ try {
|
|
|
+ return is_debug;
|
|
|
+ } catch (err) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ $.contextMenu(billsContextMenuOptions);
|
|
|
|
|
|
const posSearch = $.posSearch({selector: '#pos-search', searchSpread: posSpread});
|
|
|
// 台账模式加载计量单元数据
|