|
@@ -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);
|
|
|
+});
|