123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- 'use strict';
- /**
- *
- *
- * @author Mai
- * @date
- * @version
- */
- const LedgerTree = require('./ledger');
- const xlsx = require('js-xlsx');
- const measureType = require('../const/tender').measureType;
- class exportExcel {
- constructor(ctx) {
- this.ctx = ctx;
- this.setting = null;
- this.xlsxData = {
- SheetNames: [],
- Sheets: {}
- };
- }
- export2Sheet(xlsxData, name, data) {
- if (xlsxData.SheetNames.indexOf(name) >= 0) throw '存在同名Sheet';
- if (this.setting) {
- xlsxData.SheetNames.push(name);
- xlsxData.Sheets[name] = this.ctx.helper.simpleXlsxSheetData(this.setting, data);
- }
- }
- async export2File(fileName) {
- this.export2Sheet(this.xlsxData, 'Sheet1', []);
- xlsx.writeFile(this.xlsxData, fileName);
- }
- }
- class exportLedger2Excel extends exportExcel {
- constructor(ctx) {
- super(ctx);
- this.setting = {
- header: ['项目节编号', '清单子目号', '计量单元', '名称', '单位', '清单数量', '设计数量1', '设计数量2', '单价', '合价', '图号', '备注'],
- width: [100, 70, 70, 300, 60, 80, 80, 80, 80, 80, 100, 100],
- hAlign: ['left', 'left', 'left', 'left','center', 'right', 'right', 'right', 'right', 'right', 'left', 'left'],
- };
- }
- async sortLedgerData(billsTree, pos) {
- const result = [];
- for (const node of billsTree.nodes) {
- result.push([node.code, node.b_code, '', node.name, node.unit,
- node.quantity, node.dgn_qty1, node.dgn_qty2, node.unit_price, node.total_price,
- node.drawing_code, node.memo
- ]);
- const posRange = pos.getLedgerPos(node.id);
- if (posRange && posRange.length > 0) {
- for (const [i, p] of posRange.entries()) {
- result.push([
- '', '', (i + 1) + '', p.name, '',
- p.quantity, null, null, null, null,
- p.drawing_code, p.memo
- ]);
- }
- }
- }
- return result;
- }
- async getLedgerMapData() {
- const billsData = await this.ctx.service.ledger.getData(this.ctx.tender.id);
- const billsTree = new LedgerTree.billsTree(this.ctx, {
- id: 'ledger_id',
- pid: 'ledger_pid',
- order: 'order',
- level: 'level',
- rootId: -1,
- keys: ['id', 'tender_id', 'ledger_id'],
- stageId: 'id',
- calcFields: ['deal_tp', 'total_price']
- });
- billsTree.loadDatas(billsData);
- billsTree.calculateAll();
- const posData = this.ctx.tender.data.measure_type === measureType.tz.value
- ? await this.ctx.service.pos.getPosData({tid: this.ctx.tender.id}) : [];
- const pos = new LedgerTree.pos({id: 'id', ledgerId: 'lid'});
- pos.loadDatas(posData);
- return this.sortLedgerData(billsTree, pos);
- }
- async export2File(fileName) {
- const ledgerData = await this.getLedgerMapData();
- this.export2Sheet(this.xlsxData, '台账分解', ledgerData);
- xlsx.writeFile(this.xlsxData, fileName);
- }
- }
- module.exports = {
- exportLedger2Excel
- };
|