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