|  | @@ -0,0 +1,138 @@
 | 
	
		
			
				|  |  | +'use strict';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 需要 export_excel.js
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * @author Mai
 | 
	
		
			
				|  |  | + * @date
 | 
	
		
			
				|  |  | + * @version
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +const dbFullCode = {
 | 
	
		
			
				|  |  | +    loadSheet: function (rows) {
 | 
	
		
			
				|  |  | +        this.dealBills = [];
 | 
	
		
			
				|  |  | +        let iCode = -1, iName = -1, iUnit = -1, iUp = -1, iQty = -1, iTp = -1, bCheckCol = false;
 | 
	
		
			
				|  |  | +        for (let iRow = 0; iRow < rows.length; iRow++) {
 | 
	
		
			
				|  |  | +            const row = rows[iRow];
 | 
	
		
			
				|  |  | +            if (!bCheckCol) {
 | 
	
		
			
				|  |  | +                for (let iCol = 0; iCol < row.length; iCol++) {
 | 
	
		
			
				|  |  | +                    let value = row[iCol];
 | 
	
		
			
				|  |  | +                    if (typeof value !== "string") { continue }
 | 
	
		
			
				|  |  | +                    value = _.trim(value);
 | 
	
		
			
				|  |  | +                    if (value === '子目号' || value === '清单编号') iCode = iCol;
 | 
	
		
			
				|  |  | +                    if (value.indexOf('名称') >= 0) iName = iCol;
 | 
	
		
			
				|  |  | +                    if (value.indexOf('单位') >= 0) iUnit = iCol;
 | 
	
		
			
				|  |  | +                    if (value.indexOf('单价') >= 0) iUp = iCol;
 | 
	
		
			
				|  |  | +                    if (value.indexOf('数量') >= 0) iQty = iCol;
 | 
	
		
			
				|  |  | +                    if (value.indexOf('金额') >= 0 || value.indexOf('合价') >= 0) iTp = iCol;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                bCheckCol = (iCode >= 0 && iName >= 0 && iUnit >= 0 && iUp >= 0 && iQty >= 0 && iTp >= 0);
 | 
	
		
			
				|  |  | +                if (!bCheckCol) {
 | 
	
		
			
				|  |  | +                    iCode = -1;
 | 
	
		
			
				|  |  | +                    iName = -1;
 | 
	
		
			
				|  |  | +                    iUnit = -1;
 | 
	
		
			
				|  |  | +                    iUp = -1;
 | 
	
		
			
				|  |  | +                    iQty = -1;
 | 
	
		
			
				|  |  | +                    iTp = -1;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                const code = cleanSymbols(_.trim(row[iCode]));
 | 
	
		
			
				|  |  | +                if (!code) continue;
 | 
	
		
			
				|  |  | +                this.dealBills.push({
 | 
	
		
			
				|  |  | +                    code: code,
 | 
	
		
			
				|  |  | +                    org_code: row[iCode],
 | 
	
		
			
				|  |  | +                    name: cleanSymbols(row[iName]),
 | 
	
		
			
				|  |  | +                    unit: cleanSymbols(row[iUnit]),
 | 
	
		
			
				|  |  | +                    unit_price: row[iUp],
 | 
	
		
			
				|  |  | +                    quantity: row[iQty],
 | 
	
		
			
				|  |  | +                    total_price: row[iTp],
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (!bCheckCol) {
 | 
	
		
			
				|  |  | +            throw '导入的Excel表头定义有误,请下载示例检查';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    loadXlsx: function () {
 | 
	
		
			
				|  |  | +        const dbfile = $('#db-full-code-file')[0];
 | 
	
		
			
				|  |  | +        xlsxUtils.import(dbfile.files[0], () => {
 | 
	
		
			
				|  |  | +            try {
 | 
	
		
			
				|  |  | +                dbFullCode.loadSheet(xlsxUtils.getSheetByIndex(0, {header: 1}));
 | 
	
		
			
				|  |  | +                document.getElementById('db-full-code-change').disabled = false;
 | 
	
		
			
				|  |  | +            } catch (err) {
 | 
	
		
			
				|  |  | +                console.log(err);
 | 
	
		
			
				|  |  | +                if (err.stack) {
 | 
	
		
			
				|  |  | +                    toastr.error('该文件不支持转换,请选择其他文件');
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    toastr.warning(err);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    clear: function () {
 | 
	
		
			
				|  |  | +        const file = document.getElementById('db-full-code-file');
 | 
	
		
			
				|  |  | +        file.outerHTML = file.outerHTML;
 | 
	
		
			
				|  |  | +        document.getElementById('db-full-code-change').disabled = true;
 | 
	
		
			
				|  |  | +        $('#db-full-code-file').change(dbFullCode.loadXlsx);
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    change: function () {
 | 
	
		
			
				|  |  | +        const regChar = /^-[a-zA-Z]$/, regNum = /^-[0-9]{1,2}$/, regCode = /^[0-9]{3,4}((-[0-9]{1,2})|(-[a-zA-Z]))*$/;
 | 
	
		
			
				|  |  | +        let invalid = 0;
 | 
	
		
			
				|  |  | +        for (const [i, db] of this.dealBills.entries()) {
 | 
	
		
			
				|  |  | +            if (regCode.test(db.code)) {
 | 
	
		
			
				|  |  | +                db.tag = 0;
 | 
	
		
			
				|  |  | +                db.full_code = db.code;
 | 
	
		
			
				|  |  | +            } else if (regNum.test(db.code)) {
 | 
	
		
			
				|  |  | +                db.tag = 1;
 | 
	
		
			
				|  |  | +                for (let j = i-1; j >= 0; j--) {
 | 
	
		
			
				|  |  | +                    if (this.dealBills[j].tag !== db.tag) {
 | 
	
		
			
				|  |  | +                        db.full_code = this.dealBills[j].full_code + db.code;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            } else if (regChar.test(db.code)) {
 | 
	
		
			
				|  |  | +                db.tag = 2;
 | 
	
		
			
				|  |  | +                for (let j = i-1; j >= 0; j--) {
 | 
	
		
			
				|  |  | +                    if (this.dealBills[j].tag !== db.tag) {
 | 
	
		
			
				|  |  | +                        db.full_code = this.dealBills[j].full_code + db.code;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                db.tag = -1;
 | 
	
		
			
				|  |  | +                invalid += 1;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (invalid > 0) toastr.warning(`存在${invalid}条清单编号非法,请仔细对照原编号检查`);
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    save() {
 | 
	
		
			
				|  |  | +        const setting = {
 | 
	
		
			
				|  |  | +            cols: [
 | 
	
		
			
				|  |  | +                {title: '清单编号', colSpan: '1', rowSpan: '1', field: 'full_code', hAlign: 0, width: 100, formatter: '@'},
 | 
	
		
			
				|  |  | +                {title: '原编号', colSpan: '1', rowSpan: '1', field: 'org_code', hAlign: 0, width: 60, formatter: '@'},
 | 
	
		
			
				|  |  | +                {title: '名称', colSpan: '1', rowSpan: '1', field: 'name', hAlign: 0, width: 300, formatter: '@'},
 | 
	
		
			
				|  |  | +                {title: '单位', colSpan: '1', rowSpan: '1', field: 'unit', hAlign: 1, width: 60, formatter: '@'},
 | 
	
		
			
				|  |  | +                {title: '单价', colSpan: '1', rowSpan: '1', field: 'unit_price', hAlign: 2, width: 80, type: 'Number'},
 | 
	
		
			
				|  |  | +                {title: '数量', colSpan: '1', rowSpan: '1', field: 'quantity', hAlign: 2, width: 80, type: 'Number'},
 | 
	
		
			
				|  |  | +                {title: '合价', colSpan: '1', rowSpan: '1', field: 'total_price', hAlign: 2, width: 80, type: 'Number'},
 | 
	
		
			
				|  |  | +            ],
 | 
	
		
			
				|  |  | +            headRows: 1,
 | 
	
		
			
				|  |  | +            headRowHeight: [32],
 | 
	
		
			
				|  |  | +            defaultRowHeight: 21,
 | 
	
		
			
				|  |  | +            headerFont: 'bold 10px 微软雅黑',
 | 
	
		
			
				|  |  | +            font: '10px 微软雅黑'
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +        const orgFileName = $('#db-full-code-file')[0].files[0].name;
 | 
	
		
			
				|  |  | +        const pointIndex = orgFileName.lastIndexOf('.');
 | 
	
		
			
				|  |  | +        SpreadExcelObj.exportSimpleXlsxSheet(setting, this.dealBills, orgFileName.substring(0, pointIndex) + "-长编号.xlsx");
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    changeAndSave() {
 | 
	
		
			
				|  |  | +        dbFullCode.change();
 | 
	
		
			
				|  |  | +        dbFullCode.save();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +$(document).ready(() => {
 | 
	
		
			
				|  |  | +    $('#db-full-code').on('show.bs.modal', () => {
 | 
	
		
			
				|  |  | +        dbFullCode.clear();
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    $('#db-full-code-change').click(dbFullCode.changeAndSave);
 | 
	
		
			
				|  |  | +});
 |