olym пре 7 година
родитељ
комит
07945a5118

+ 39 - 2
modules/ration_repository/controllers/ration_repository_controller.js

@@ -153,7 +153,7 @@ class RationRepositoryController extends baseController {
                 uploadDir: './public/tmp'
                 uploadDir: './public/tmp'
             };
             };
             const form = new multiparty.Form(uploadOption);
             const form = new multiparty.Form(uploadOption);
-            form.parse(request, function(err, fields, files) {
+            form.parse(request, async function(err, fields, files) {
                 const rationRepId = fields.rationRepId !== undefined && fields.rationRepId.length > 0 ?
                 const rationRepId = fields.rationRepId !== undefined && fields.rationRepId.length > 0 ?
                     fields.rationRepId[0] : 0;
                     fields.rationRepId[0] : 0;
                 if (rationRepId <= 0) {
                 if (rationRepId <= 0) {
@@ -176,7 +176,11 @@ class RationRepositoryController extends baseController {
                     throw 'excel没有对应数据';
                     throw 'excel没有对应数据';
                 }
                 }
 
 
-                rationItem.batchAddFromExcel(rationRepId, sheet[0].data);
+                const result = await rationItem.batchAddFromExcel(rationRepId, sheet[0].data);
+                // 删除文件
+                if (result) {
+                    fs.unlink(uploadFullName, null);
+                }
                 response.json(responseData);
                 response.json(responseData);
             });
             });
         } catch (error) {
         } catch (error) {
@@ -188,6 +192,39 @@ class RationRepositoryController extends baseController {
         return;
         return;
     }
     }
 
 
+    /**
+     * 导出内容数据
+     *
+     * @param {Object} request
+     * @param {Object} response
+     * @return {void}
+     */
+    async exportRationData(request, response) {
+        let rationRepId = request.query.rationRepId;
+        rationRepId = parseInt(rationRepId);
+        try {
+            if (isNaN(rationRepId) || rationRepId <= 0) {
+                throw '参数错误';
+            }
+            const excelData = await rationItem.exportExcelData(rationRepId);
+            const buffer = excel.build([{name: "sheet", data: excelData}]);
+            const filePath = './public/tmp/export.xlsx';
+            fs.writeFileSync(filePath, buffer, 'binary');
+            const stats = fs.statSync(filePath);
+            // 下载相关header
+            response.set({
+                'Content-Type': 'application/octet-stream',
+                'Content-Disposition': 'attachment; filename=ration.xlsx',
+                'Content-Length': stats.size
+            });
+            fs.createReadStream(filePath).pipe(response);
+            fs.unlink(filePath);
+        } catch (error) {
+            response.end(error);
+        }
+
+    }
+
 }
 }
 
 
 export default RationRepositoryController;
 export default RationRepositoryController;

+ 26 - 2
modules/ration_repository/models/ration_item.js

@@ -541,7 +541,7 @@ rationItemDAO.prototype.batchAddFromExcel = async function(rationRepId, data) {
     // 查找数据库中是否已存在待插入数据
     // 查找数据库中是否已存在待插入数据
     const condition = {
     const condition = {
         rationRepId: rationRepId,
         rationRepId: rationRepId,
-        code: { $in: rationCodeList}
+        code: { $in: rationCodeList }
     };
     };
     const existCodeList = await this.getRationItemByCondition(condition, ['code'], 'code');
     const existCodeList = await this.getRationItemByCondition(condition, ['code'], 'code');
     // 过滤插入数据
     // 过滤插入数据
@@ -569,7 +569,31 @@ rationItemDAO.prototype.batchAddFromExcel = async function(rationRepId, data) {
     }
     }
     // 插入数据库
     // 插入数据库
     const result = await rationItemModel.create(insertData);
     const result = await rationItemModel.create(insertData);
-    console.log(result);
+    return result.length > 0;
+};
+
+/**
+ * 导出到excel的数据
+ *
+ * @param {Number} rationRepId
+ * @return {Array}
+ */
+rationItemDAO.prototype.exportExcelData = async function(rationRepId) {
+    const condition = {
+        rationRepId: rationRepId
+    };
+    // @todo 限制导出的数量以防内存溢出
+    const rationDataList = await this.getRationItemByCondition(condition, ['name', 'code']);
+    // 整理数据
+    let rationData = [];
+    for (const tmp of rationDataList) {
+        const ration = [null, tmp.code, tmp.name];
+        rationData.push(ration);
+    }
+    const excelData = [['树ID', '定额名', '定额编码']];
+    excelData.push.apply(excelData, rationData);
+
+    return excelData;
 };
 };
 
 
 module.exports = new rationItemDAO();
 module.exports = new rationItemDAO();

+ 1 - 0
modules/ration_repository/routes/ration_rep_routes.js

@@ -75,6 +75,7 @@ module.exports =  function (app) {
 
 
     // 导入导出定额库相关
     // 导入导出定额库相关
     apiRouter.post('/upload', rationRepositoryController.auth, rationRepositoryController.init, rationRepositoryController.uploadSourceData);
     apiRouter.post('/upload', rationRepositoryController.auth, rationRepositoryController.init, rationRepositoryController.uploadSourceData);
+    apiRouter.get('/export', rationRepositoryController.auth, rationRepositoryController.init, rationRepositoryController.exportRationData);
 
 
     app.use("/rationRepository/api",apiRouter);
     app.use("/rationRepository/api",apiRouter);
 }
 }

+ 26 - 5
web/maintain/ration_repository/js/main.js

@@ -91,6 +91,7 @@ $(function () {
 
 
     // 导入原始数据确认
     // 导入原始数据确认
     $("#source-import").click(function() {
     $("#source-import").click(function() {
+        const self = $(this);
         try {
         try {
             let formData = new FormData();
             let formData = new FormData();
             let file = $("input[name='source_file']")[0];
             let file = $("input[name='source_file']")[0];
@@ -111,20 +112,39 @@ $(function () {
                 contentType: false,
                 contentType: false,
                 processData: false,
                 processData: false,
                 beforeSend: function() {
                 beforeSend: function() {
-
+                    self.attr('disabled', 'disabled');
+                    self.text('上传中...');
                 },
                 },
-                success: function(data){
-                    console.log(data);
-                    console.log('imgUploader upload success');
+                success: function(response){
+                    self.removeAttr('disabled');
+                    self.text('确定导入');
+                    if (response.err === 0) {
+                        // 成功则关闭窗体
+                        $("#import").modal("hide");
+                    } else {
+                        const message = response.msg !== undefined ? response.msg : '上传失败!';
+                        alert(message);
+                    }
                 },
                 },
                 error: function(){
                 error: function(){
                     alert("与服务器通信发生错误");
                     alert("与服务器通信发生错误");
+                    self.removeAttr('disabled');
+                    self.text('确定导入');
                 }
                 }
             });
             });
         } catch(error) {
         } catch(error) {
             alert(error);
             alert(error);
         }
         }
+    });
 
 
+    // 导出数据
+    $("#showArea").on("click", ".export", function () {
+        let id = $(this).data("id");
+        id = parseInt(id);
+        if (isNaN(id) || id <= 0) {
+            return false;
+        }
+        window.location.href = '/rationRepository/api/export?rationRepId=' + id;
     });
     });
 });
 });
 
 
@@ -155,7 +175,8 @@ function getAllRationLib(callback){
                         "<i class='fa fa-pencil-square-o'></i></a> <a href='javascript:void(0);' data-toggle='modal' data-target='#del' class='text-danger' title='删除'>" +
                         "<i class='fa fa-pencil-square-o'></i></a> <a href='javascript:void(0);' data-toggle='modal' data-target='#del' class='text-danger' title='删除'>" +
                         "<i class='fa fa-remove'></i></a></td>" +
                         "<i class='fa fa-remove'></i></a></td>" +
                         "<td><a class='btn btn-secondary btn-sm import-source' href='javacript:void(0);' data-id='"+ id +"' title='导入原始数据'><i class='fa fa-sign-in fa-rotate-90'></i>导入</a></td>" +
                         "<td><a class='btn btn-secondary btn-sm import-source' href='javacript:void(0);' data-id='"+ id +"' title='导入原始数据'><i class='fa fa-sign-in fa-rotate-90'></i>导入</a></td>" +
-                        "<td><a class='btn btn-success btn-sm' href='javacript:void(0);' data-toggle='modal' data-target='#emport' title='导出内部数据'><i class='fa fa-sign-out fa-rotate-270'></i>导出</a> <a class='btn btn-secondary btn-sm' href='javacript:void(0);' data-toggle='modal' data-target='#import2' title='导入内部数据'><i class='fa fa-sign-in fa-rotate-90'></i>导入</a></td>" +
+                        "<td><a class='btn btn-success btn-sm export' href='javacript:void(0);' data-toggle='modal' data-id='"+ id +"' data-target='#emport' title='导出内部数据'><i class='fa fa-sign-out fa-rotate-270'></i>导出</a> " +
+                        "<a class='btn btn-secondary btn-sm' href='javacript:void(0);' data-toggle='modal' data-target='#import2' title='导入内部数据'><i class='fa fa-sign-in fa-rotate-90'></i>导入</a></td>" +
                         "</tr>");
                         "</tr>");
                     var newHref = "/rationRepository/ration?repository="+id;
                     var newHref = "/rationRepository/ration?repository="+id;
                     $("#tempId td:first a").attr("href", newHref);
                     $("#tempId td:first a").attr("href", newHref);