Browse Source

feat: 信息价总表导出excel

vian 1 year ago
parent
commit
4e3ee5825e

+ 20 - 2
modules/price_info_summary/controllers/index.js

@@ -1,6 +1,4 @@
 import BaseController from "../../common/base/base_controller";
 import BaseController from "../../common/base/base_controller";
-import CompilationModel from '../../users/models/compilation_model';
-const multiparty = require('multiparty');
 const excel = require('node-xlsx');
 const excel = require('node-xlsx');
 const fs = require('fs');
 const fs = require('fs');
 const facade = require('../facade/index');
 const facade = require('../facade/index');
@@ -52,6 +50,26 @@ class PriceInfoSummaryController extends BaseController {
         }
         }
     }
     }
 
 
+    async exportSummaryData(request, response) {
+        try {
+            const excelData = await facade.exportExcelData();
+            const buffer = excel.build([{ name: "材料信息价总表", data: excelData }]);
+            const filePath = './public/exportPriceSummary.xlsx';
+            fs.writeFileSync(filePath, buffer, 'binary');
+            const stats = fs.statSync(filePath);
+            // 下载相关header
+            response.set({
+                'Content-Type': 'application/octet-stream',
+                'Content-Disposition': 'attachment; filename=infoPriceSummary.xlsx',
+                'Content-Length': stats.size
+            });
+            fs.createReadStream(filePath).pipe(response);
+            fs.unlink(filePath);
+        } catch (error) {
+            response.end(error);
+        }
+    }
+
 }
 }
 
 
 module.exports = {
 module.exports = {

+ 16 - 0
modules/price_info_summary/facade/index.js

@@ -57,8 +57,24 @@ async function saveInSummary(documents) {
     await priceInfoSummaryModel.insertMany(documents);
     await priceInfoSummaryModel.insertMany(documents);
 }
 }
 
 
+// 导出excel数据
+async function exportExcelData() {
+    const items = await priceInfoSummaryModel.find({}).sort({ classCode: 1 }).lean();
+    // 整理数据
+    let classData = [];
+    for (const tmp of items) {
+        const item = [tmp.code || '', tmp.classCode || '', tmp.expString || '', tmp.name || '', tmp.specs || '', tmp.unit || ''];
+        classData.push(item);
+    }
+    const excelData = [['主从对应码', '别名编码', '计算式', '材料名称', '规格型号', '单位']];
+    excelData.push.apply(excelData, classData);
+
+    return excelData;
+}
+
 module.exports = {
 module.exports = {
     getPagingData,
     getPagingData,
     editSummaryData,
     editSummaryData,
     saveInSummary,
     saveInSummary,
+    exportExcelData,
 }
 }

+ 1 - 0
modules/price_info_summary/routes/index.js

@@ -11,6 +11,7 @@ module.exports = function (app) {
     router.post("/getPagingData", priceInfoSummaryController.auth, priceInfoSummaryController.init, priceInfoSummaryController.getPagingData);
     router.post("/getPagingData", priceInfoSummaryController.auth, priceInfoSummaryController.init, priceInfoSummaryController.getPagingData);
     router.post("/editSummaryData", priceInfoSummaryController.auth, priceInfoSummaryController.init, priceInfoSummaryController.editSummaryData);
     router.post("/editSummaryData", priceInfoSummaryController.auth, priceInfoSummaryController.init, priceInfoSummaryController.editSummaryData);
     router.post("/saveInSummary", priceInfoSummaryController.auth, priceInfoSummaryController.init, priceInfoSummaryController.saveInSummary);
     router.post("/saveInSummary", priceInfoSummaryController.auth, priceInfoSummaryController.init, priceInfoSummaryController.saveInSummary);
+    router.get("/export", priceInfoSummaryController.auth, priceInfoSummaryController.init, priceInfoSummaryController.exportSummaryData);
 
 
     app.use("/priceInfoSummary", router);
     app.use("/priceInfoSummary", router);
 };
 };

+ 1 - 0
web/maintain/price_info_summary/html/main.html

@@ -18,6 +18,7 @@
             <span class="header-logo px-2">材料信息价总表</span>
             <span class="header-logo px-2">材料信息价总表</span>
             <a class="lock" data-locked="true" href="javascript:void(0);" title="解锁"><i
             <a class="lock" data-locked="true" href="javascript:void(0);" title="解锁"><i
                 class="fa fa-unlock-alt"></i></a>
                 class="fa fa-unlock-alt"></i></a>
+                <a id="export" class="btn btn-success btn-sm" href="javascript:void(0);" title="导出" style="margin-left: 10px;"><i class="fa fa-sign-out fa-rotate-270"></i>导出</a>
         </nav>
         </nav>
     </div>
     </div>
     <div class="search">
     <div class="search">

+ 6 - 1
web/maintain/price_info_summary/js/index.js

@@ -17,5 +17,10 @@ $(document).ready(() => {
             const searchStr = $(this).val();
             const searchStr = $(this).val();
             SUMMARY_BOOK.handleSearch(searchStr);
             SUMMARY_BOOK.handleSearch(searchStr);
         }
         }
-    })
+    });
+
+    // 点击导出按钮
+    $('#export').click(() => {
+        window.location.href = '/priceInfoSummary/export';
+    });
 });
 });