123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- const BatchImportStageGcl = function (setting) {
- const biObj = {
- setting,
- spread: null,
- sheet: null,
- tenderSourceTree: null,
- history: [],
- batchTree: null,
- rebuildStageSelect: function () {
- const getItems = function (data) {
- const items = [];
- if (data) {
- for (let i = 1; i <= data.stageCount; i++) {
- items.push({value: i, text: `第${i}期`});
- }
- }
- return items;
- };
- for (let i = 0; i < biObj.sheet.getRowCount(); i++) {
- const data = biObj.batchTree.nodes[i];
- if (!data.tid) continue;
- const items = getItems(data);
- const cellType = new spreadNS.CellTypes.ComboBox().itemHeight(10).editorValueType(spreadNS.CellTypes.EditorValueType.value).items(items);
- biObj.sheet.getCell(i, 3).cellType(cellType);
- }
- },
- EditEnded: function (e, info) {
- const data = SpreadJsObj.getSelectObject(info.sheet);
- const col = info.sheet.zh_setting.cols[info.col];
- data[col.field] = info.sheet.getValue(info.row, info.col);
- },
- ButtonClicked: function (e, info) {
- if (!info.sheet.zh_setting) return;
- const col = info.sheet.zh_setting.cols[info.col];
- if (col.field !== 'selected') return;
- const node = SpreadJsObj.getSelectObject(info.sheet);
- const newValue = !node.selected;
- const parent = node.lid ? node : info.sheet.zh_tree.getParent(node);
- parent.selected = newValue;
- if (parent.children && parent.children.length > 0) {
- for (const child of parent.children) {
- child.selected = newValue;
- }
- }
- SpreadJsObj.reLoadRowData(info.sheet, info.sheet.zh_tree.getNodeIndex(parent), parent.children.length + 1);
- },
- reloadBatchTree() {
- this.batchTree.clearDatas();
- for (const h of this.history) {
- if (!h.ledger_node) continue;
- const ledgerData = { lid: h.lid, ledger_id: h.ledger_node.ledger_id, code: h.ledger_node.code, name: h.ledger_node.name, ledger_node: h.ledger_node, selected: h.tenders.length > 0 };
- const batchNode = this.batchTree.addNode(ledgerData, null);
- for (const t of h.tenders) {
- const tenderData = JSON.parse(JSON.stringify(t));
- tenderData.selected = true;
- const tender = this.tenderSourceTree.nodes.find(y => { return y.tid === t.tid });
- tenderData.stageCount = tender.stageCount;
- this.batchTree.addNode(tenderData, batchNode);
- }
- }
- this.batchTree.sortTreeNode(true);
- },
- loadHistory: function () {
- if (biObj.batching) return;
- biObj.tender_id = biObj.setting.stageTree.nodes[0].tender_id;
- postData(`/sp/${spid}/list/load`, {type: 'stageBatch', tid: biObj.tender_id}, data => {
- biObj.history = data.history || [];
- // 屏蔽自己
- const curIndex = data.tenders.findIndex(x => { return x.id === biObj.tender_id });
- if (curIndex >= 0) data.tenders.splice(curIndex, 1);
- biObj.tenderSourceTree = Tender2Tree.convert(data.category, data.tenders, data.ledgerAuditConst, data.stageAuditConst);
- for (const h of biObj.history) {
- h.ledger_order = biObj.setting.stageTree.nodes.findIndex(x => { return x.id === h.lid; });
- h.ledger_node = h.ledger_order >= 0 ? biObj.setting.stageTree.nodes[h.ledger_order] : null;
- if (h.tenders) h.tenders = h.tenders.filter(x => { return biObj.tenderSourceTree.nodes.find(y => { return x.tid === y.tid; })});
- }
- biObj.history.sort((x, y) => { return x.ledger_order - y.ledger_order; });
- biObj.reloadBatchTree();
- SpreadJsObj.loadSheetData(biObj.sheet, SpreadJsObj.DataType.Tree, biObj.batchTree);
- biObj.rebuildStageSelect();
- });
- },
- initBatchImport: function () {
- if (this.spread) return;
- this.spread = SpreadJsObj.createNewSpread($('#bi-spread')[0]);
- this.sheet = this.spread.getActiveSheet();
- SpreadJsObj.initSheet(this.sheet, {
- cols: [
- {title: '选择', field: 'selected', hAlign: 1, width: 40, formatter: '@', cellType: 'checkbox'},
- {title: '编号', field: 'code', hAlign: 0, width: 180, formatter: '@', cellType: 'tree', readOnly: true },
- {title: '名称/引用标段', field: 'name', hAlign: 0, width: 180, formatter: '@', readOnly: true },
- {title: '可选期', field: 'stage', hAlign: 1, width: 60, formatter: '@'},
- {title: '指定项目节', field: 'match_code', hAlign: 1, width: 70, formatter: '@', readOnly: true},
- {title: '状态', field: 'status', hAlign: 1, width: 60, formatter: '@', readOnly: true},
- {title: '错误信息', field: 'error', hAlign: 1, width: 60, formatter: '@', readOnly: true},
- ],
- emptyRows: 0,
- headRows: 1,
- headRowHeight: [32],
- defaultRowHeight: 21,
- headerFont: '12px 微软雅黑',
- font: '12px 微软雅黑',
- selectedBackColor: '#fffacd',
- });
- this.spread.bind(spreadNS.Events.EditEnded, biObj.EditEnded);
- this.spread.bind(spreadNS.Events.ButtonClicked, biObj.ButtonClicked);
- this.batchTree = createNewPathTree('gather', {
- id: 'id',
- pid: 'pid',
- order: 'order',
- level: 'level',
- rootId: -1,
- fullPath: 'full_path',
- });
- this.loadHistory();
- },
- checkErrors: function () {
- const hasError = this.batchTree.children.findIndex(x => { return x.error > 0; }) >= 0;
- if (hasError) {
- $('#bi-download-error').show();
- } else {
- $('#bi-download-error').hide();
- }
- },
- importStageGcl: async function (node, cover, ignore, change) {
- const updateData = { lid: node.lid, type: 'stage', cover, ignore, change, tenders: [] };
- for (const tender of node.children) {
- updateData.tenders.push({ tid: tender.tid, name: tender.name, stageCount: tender.stageCount, stage: tender.stage, match_code: tender.match_code });
- }
- const result = await postDataAsync(window.location.pathname + '/sumLoad', updateData);
- biObj.setting.afterLoad(result, node.ledger_node);
- node.errors = result.sumLoadHis.errors;
- node.error = node.errors ? node.errors.length : 0;
- },
- beforeBatchImport: function () {
- this.batchTree.children.forEach(x => {
- x.status = x.selected ? '等待中' : '';
- x.error = 0;
- x.errors = [];
- });
- SpreadJsObj.reloadColData(this.sheet, 4, 2);
- },
- batchImport: async function () {
- $('#bi-start')[0].disabled = true;
- biObj.batching = true;
- this.beforeBatchImport();
- const cover = $('#bi-cover')[0].checked;
- const ignore = $('#bi-ignore')[0].checked;
- const change = $('#bi-change')[0].checked;
- for (const node of this.batchTree.children) {
- if (!node.selected) continue;
- const row = this.batchTree.getNodeIndex(node);
- if (!node.children || node.children.length === 0) {
- node.status = '无数据';
- } else {
- try {
- node.status = '开始导入';
- SpreadJsObj.reLoadRowData(biObj.sheet, row);
- await biObj.importStageGcl(node, cover, ignore, change);
- node.status = '导入完成';
- } catch(err) {
- console.log(err);
- node.status = '导入失败';
- }
- }
- SpreadJsObj.reLoadRowData(biObj.sheet, row);
- }
- biObj.batching = false;
- $('#bi-start')[0].disabled = false;
- biObj.checkErrors();
- },
- downloadErrors: function () {
- const errorType = {
- less: '数量变少',
- miss: '找不到清单',
- 'qc-conflict': '变更冲突(已调用变更令)'
- };
- // const setting = {
- // header: ['清单编号', '清单名称','单位', '合同数量', '变更数量', '错误类型'],
- // width: [80, 200, 60, 80, 80, 180],
- // hAlign: ['left', 'left', 'center', 'right', 'right', 'left'],
- // };
- // const sheets = [];
- // for (const node of this.batchTree.children) {
- // if (node.error > 0) {
- // sheets.push({ name: node.code, setting, data: node.errors.map(x => {
- // return [x.b_code, x.name, x.unit, x.qty, x.qc_qty, errorType[x.type]]; })
- // });
- // }
- // }
- // XLSXObj.exportXlsxSheets(sheets, '批量导入错误.xlsx');
- const setting = {
- cols: [
- {title: '清单编号', field: 'b_code', hAlign: 0, width: 80, formatter: '@'},
- {title: '清单名称', field: 'name', hAlign: 0, width: 180, formatter: '@'},
- {title: '单位', field: 'unit', hAlign: 1, width: 60, formatter: '@'},
- {title: '合同数量', field: 'qty', hAlign: 2, width: 80, formatter: '@'},
- {title: '变更数量', field: 'qc_qty', hAlign: 2, width: 80, formatter: '@'},
- {title: '错误类型', field: 'type', hAlign: 0, width: 150, formatter: '@', getValue(data) { return errorType[data.type]; }},
- ],
- emptyRows: 0,
- headRows: 1,
- headRowHeight: [32],
- defaultRowHeight: 21,
- headerFont: '12px 微软雅黑',
- font: '12px 微软雅黑',
- };
- const sheets = [];
- for (const node of this.batchTree.children) {
- if (node.error > 0) {
- sheets.push({ name: node.code || node.name, setting, data: node.errors });
- }
- }
- SpreadExcelObj.exportSimpleXlsxSheets(sheets, '批量导入错误.xlsx');
- }
- };
- $('#batch-import').on('shown.bs.modal', () => {
- biObj.initBatchImport();
- // biObj.loadHistory();
- });
- $('#bi-start').click(function () {
- biObj.batchImport();
- });
- $('#bi-download-error').click(function () {
- biObj.downloadErrors();
- });
- const show = function () {
- $('#batch-import').modal('show');
- };
- return { show }
- };
|