Forráskód Böngészése

导入excel清单调整

vian 5 éve
szülő
commit
7eb5ca828d

+ 5 - 2
modules/main/controllers/bills_controller.js

@@ -29,6 +29,7 @@ const multiparty = require("multiparty");
 const fs = require("fs");
 // excel解析
 const excel = require("node-xlsx");
+const urlencode = require('urlencode');
 //统一回调函数
 var callback = function(req, res, err, message, data){
     res.json({error: err, message: message, data: data});
@@ -195,12 +196,14 @@ module.exports = {
     //下载导入清单示例
     downloadExample: async function(request, response) {
         try {
-            const filePath = './public/static/uploadExample.xlsx';
+            const filePath = './public/static/清单示例.xlsx';
             const stats = fs.statSync(filePath);
             // 下载相关header
+            const name = urlencode('清单示例.xlsx');
+            //res.setHeader("Content-Disposition", "attachment; filename* = UTF-8''"+name);
             response.set({
                 'Content-Type': 'application/octet-stream',
-                'Content-Disposition': 'attachment; filename=uploadExample.xlsx',
+                'Content-Disposition': "attachment; filename* = UTF-8''" + name,
                 'Content-Length': stats.size
             });
             fs.createReadStream(filePath).pipe(response);

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 13758 - 0
package-lock.json


+ 6 - 5
package.json

@@ -53,20 +53,21 @@
     "node-schedule": "^1.3.0",
     "node-xlsx": "^0.11.2",
     "pdfkit": "^0.8.2",
+    "qiniu": "^7.1.1",
     "request-promise": "^4.2.5",
     "socket.io": "2.0.3",
     "ua-parser-js": "^0.7.14",
+    "urlencode": "^1.1.0",
     "uuid": "^3.1.0",
-    "wiredep": "^2.2.2",
-    "qiniu": "^7.1.1"
+    "wiredep": "^2.2.2"
   },
   "scripts": {
     "start": "C:\\Users\\mai\\AppData\\Roaming\\npm\\babel-node.cmd server.js",
     "server": "pm2-docker pm2_server.json",
     "socket": "node socket.js",
     "import": "pm2-docker pm2_import.json",
-    "dev_server":"SET NODE_ENV=qa&& babel-node server.js",
-    "dev_socket":"SET NODE_ENV=qa&& babel-node socket.js",
-    "dev_import":"SET NODE_ENV=qa&& babel-node importserver.js"
+    "dev_server": "SET NODE_ENV=qa&& babel-node server.js",
+    "dev_socket": "SET NODE_ENV=qa&& babel-node socket.js",
+    "dev_import": "SET NODE_ENV=qa&& babel-node importserver.js"
   }
 }

BIN
public/static/清单示例.xlsx


+ 11 - 2
web/building_saas/main/js/views/importBills.js

@@ -48,7 +48,7 @@ const importBills = (function(){
     }
     function isGCLHead(dataRow) {
         let cell = dataRow[0];
-        return cell.value === '工程量清单';
+        return cell && cell.value === '工程量清单';
     }
     //分析文件,1、工程量清单 2、清单示例表
     function getFileType(sheetData) {
@@ -93,6 +93,7 @@ const importBills = (function(){
                 continue;
             }
             //表格内的数据
+            code = String(code);
             let depth = getDepth(code);
             let data = {
                 ID: uuid.v1(), 
@@ -160,10 +161,13 @@ const importBills = (function(){
         let rst = [];
         let curRoot = null;
         for (let row = 0; row < rowCount; row++) {
-            let code = dataTable[row][colMapping.code] ? dataTable[row][colMapping.code].value : null,
+            let code = dataTable[row][colMapping.code] && dataTable[row][colMapping.code].value ? String(dataTable[row][colMapping.code].value) : null,
                 name = dataTable[row][colMapping.name] ? dataTable[row][colMapping.name].value : null,
                 unit = dataTable[row][colMapping.unit] ? dataTable[row][colMapping.unit].value : null,
                 quantity = dataTable[row][colMapping.quantity] ? dataTable[row][colMapping.quantity].value : null;
+            if (code === '602') {
+                debugger;
+            }
             if (!code) {    //没有编号的数据,名称必须为:清单 第xx章,认为新的表根节点
                 if (name && /清单 第\d+章/.test(name)) {
                     curRoot = {code: null, name: name, ID: uuid.v1(), ParentID: -1, NextSiblingID: -1, parent: null};
@@ -209,9 +213,14 @@ const importBills = (function(){
     
     function extactDatas(sheets) {
         let rst = [];
+        let curSheetType = null;
         for (let sheetName in sheets) {
             let sheetData = sheets[sheetName];
             let sheetType = getFileType(sheetData);
+            if (curSheetType !== null && sheetType !== curSheetType) {
+                throw 'excel文件中存在不同格式的表格。';
+            }
+            curSheetType = sheetType;
             let colMapping = getColMapping(sheetType);
             let datas = sheetType === fileType.gcl ? extractGCLDatas(sheetData, colMapping) : extractSLDatas(sheetData, colMapping);
             rst = rst.concat(datas);

+ 1 - 0
web/building_saas/main/js/views/project_view.js

@@ -2900,6 +2900,7 @@ $('#importConfirm').click(function () {
         });
     }
     catch (err){
+        console.log(err);
         showUploadAlert(false, err);
         $(me).removeClass('disabled');
         if($.bootstrapLoading.isLoading()){