123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- '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);
- },
- _completeFullCode: function (b, index) {
- for (let j = index-1; j >= 0; j--) {
- if (this.dealBills[j].tag === -1) continue;
- if (this.dealBills[j].tag !== b.tag && this.dealBills[j].level < 4) {
- b.full_code = this.dealBills[j].full_code + b.code;
- b.level = this.dealBills[j].level + 1;
- return;
- }
- }
- },
- 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;
- db.level = db.full_code.split('-').length;
- } else if (regNum.test(db.code)) {
- db.tag = 1;
- this._completeFullCode(db, i);
- } else if (regChar.test(db.code)) {
- db.tag = 2;
- this._completeFullCode(db, i);
- } else {
- db.tag = -1;
- db.full_code = '';
- 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);
- });
|