| 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};
 |