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

feat: 编办权限

vian 1 éve
szülő
commit
12550de33c
27 módosított fájl, 841 hozzáadás és 717 törlés
  1. 47 43
      modules/bill_code_lib/controllers/bill_code_controller.js
  2. 17 17
      modules/bills_lib/controllers/stdBillsLib_permissionController.js
  3. 51 47
      modules/bills_template_lib/controllers/bills_template_controller.js
  4. 42 37
      modules/calc_program_lib/controllers/calc_program_controller.js
  5. 6 0
      modules/common/base/base_util.js
  6. 45 40
      modules/fee_rate_lib/controllers/fee_rate_controller.js
  7. 41 36
      modules/main_col_lib/controllers/main_col_controller.js
  8. 69 63
      modules/material_replace_lib/controllers/material_replace_controller.js
  9. 47 43
      modules/monomer_template_lib/controllers/monomer_template_controller.js
  10. 7 2
      modules/price_info_lib/controllers/index.js
  11. 45 40
      modules/project_feature_lib/controllers/project_feature_controller.js
  12. 10 1
      modules/ration_repository/controllers/repository_views_controller.js
  13. 87 85
      modules/reports/controllers/rpt_tpl_controller.js
  14. 1 1
      modules/std_billsGuidance_lib/controllers/libController.js
  15. 10 4
      modules/std_billsGuidance_lib/controllers/viewController.js
  16. 117 115
      modules/std_billsGuidance_lib/facade/facades.js
  17. 44 40
      modules/std_bills_unitprice_feature_lib/controllers/bills_unitprice_feature_controller.js
  18. 20 19
      modules/std_glj_lib/controllers/gljMapController.js
  19. 3 0
      modules/std_glj_lib/controllers/viewsController.js
  20. 2 1
      modules/std_glj_lib/models/gljMapModel.js
  21. 47 42
      modules/structural_segment_lib/controllers/structural_segment_controller.js
  22. 24 19
      modules/users/controllers/login_controller.js
  23. 35 20
      modules/users/controllers/manager_controller.js
  24. 10 0
      modules/users/models/compilation_model.js
  25. 1 1
      web/maintain/ration_repository/anzhuang.html
  26. 3 1
      web/users/js/manager.js
  27. 10 0
      web/users/views/manager/authority.html

+ 47 - 43
modules/bill_code_lib/controllers/bill_code_controller.js

@@ -6,111 +6,115 @@ import billCodeFacade from "../facade/bill_code_facade";
 let config = require("../../../config/config.js");
 let logger = require('../../../logs/log_helper').logger;
 import CompilationModel from '../../users/models/compilation_model';
+import { checkCompilationPermission } from '../../common/base/base_util';
 
-class BillCodeController extends BaseController{
+class BillCodeController extends BaseController {
     async main(request, response) {
-     
+
         let compilationModel = new CompilationModel();
-        let compilationList = await compilationModel.getCompilationList({_id: 1, name: 1});
-        compilationList.unshift({_id: 'all', name: '所有'});
+        let compilationList = await compilationModel.getPermissionCompilationList(request, { _id: 1, name: 1 });
+        compilationList.unshift({ _id: 'all', name: '所有' });
         let activeCompilation = compilationList.find(compilation => compilation._id.toString() === request.query.filter);
         if (activeCompilation) {
             activeCompilation.active = 'active';
         } else {
             compilationList[0].active = 'active'
         }
-        let filter = request.query.filter ? {compilationID: request.query.filter} : {};
-        let templateLibs = await billCodeFacade.findByCondition(filter,{feature:0},false);
+        let filter = request.query.filter ? { compilationID: request.query.filter } : {};
+        let templateLibs = await billCodeFacade.findByCondition(filter, { feature: 0 }, false);
+        const compilationPermission = request.session.managerData.compilationPermission || [];
+        templateLibs = templateLibs.filter(lib => compilationPermission.includes(lib.compilationID));
         let renderData = {
-            title:'递延清单',
+            title: '递延清单',
             userAccount: request.session.managerData.username,
             userID: request.session.managerData.userID,
-            templateLibs:templateLibs,
+            templateLibs: templateLibs,
             compilationList: compilationList,
             layout: 'maintain/common/html/layout'
         };
         response.render("maintain/bill_code_lib/html/main", renderData);
     }
-    async addLib(request, response){
+    async addLib(request, response) {
         try {
             await billCodeFacade.addLib(request.body);
-        }catch (error) {
+        } catch (error) {
             console.log(error);
         }
         response.redirect(request.headers.referer);
     }
-    async findLib(request, response){
-        let result={
-            error:0
+    async findLib(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let conditions={'ID' : data.ID};
+            let conditions = { 'ID': data.ID };
             let resultData = await billCodeFacade.findByCondition(conditions);
-            result.data=resultData;
-        }catch (err){
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async saveLib(request, response){
-        let result={
-            error:0
+    async saveLib(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
             console.log(data.data);
-            let resultData= await billCodeFacade.saveLib(data);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await billCodeFacade.saveLib(data);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async deleteLibByID(request,response){
+    async deleteLibByID(request, response) {
         logger.info(`delete projectFeatureLib ${request.ip}`);
-        let result={
-            error:0
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await billCodeFacade.deleteLibByID(data.ID);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await billCodeFacade.deleteLibByID(data.ID);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async edit(request,response){
+    async edit(request, response) {
         //先取出替换库信息:
         let libID = request.params.libID;
-       
-        let billCodeSegment = await billCodeFacade.findByCondition({'ID':libID});
-        let items = await billCodeFacade.findItemsByCondition({'libID':libID},"-_id -libID -ID");
+
+        let billCodeSegment = await billCodeFacade.findByCondition({ 'ID': libID });
+        let items = await billCodeFacade.findItemsByCondition({ 'libID': libID }, "-_id -libID -ID");
         console.log(items);
-        if(billCodeSegment){
+        if (billCodeSegment) {
+            checkCompilationPermission(request, response, billCodeSegment.compilationID, '/billCode/main')
             let randerData = {
-                title:'递延清单',
-                mainURL:'/billCode/main',
-                libName:billCodeSegment.name,
+                title: '递延清单',
+                mainURL: '/billCode/main',
+                libName: billCodeSegment.name,
                 userAccount: request.session.managerData.username,
                 userID: request.session.managerData.userID,
-                templateLibs:JSON.stringify({data:items}),
-                libID:libID,
-                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                templateLibs: JSON.stringify({ data: items }),
+                libID: libID,
+                LicenseKey: config.getLicenseKey(process.env.NODE_ENV),
                 layout: 'maintain/common/html/edit_layout'
             };
             response.render("maintain/bill_code_lib/html/edit", randerData);
-        }else {
+        } else {
             response.redirect(request.headers.referer);
         }
     }

+ 17 - 17
modules/bills_lib/controllers/stdBillsLib_permissionController.js

@@ -5,51 +5,51 @@ let billsController = require("./bills_lib_controllers");
 import baseController from "../../common/base/base_controller";
 import CompilationModel from "../../users/models/compilation_model";
 
-let callback = function(req, res, err, message, data){
-    res.json({error: err, message: message, data: data});
+let callback = function (req, res, err, message, data) {
+    res.json({ error: err, message: message, data: data });
 }
-class billsLibPermContr extends baseController{
-    async getCompilationList(req, res){
-        try{
+class billsLibPermContr extends baseController {
+    async getCompilationList(req, res) {
+        try {
             let compilationModel = new CompilationModel(), rst = [];
-            let compilationList = await compilationModel.getCompilationList();
-            if(compilationList.length <= 0){
+            let compilationList = await compilationModel.getPermissionCompilationList(req);
+            if (compilationList.length <= 0) {
                 throw '没有数据';
             }
-            else{
+            else {
 
                 compilationList.forEach(function (compilation) {
-                    rst.push({_id: compilation._id, name: compilation.name});
+                    rst.push({ _id: compilation._id, name: compilation.name });
                 })
                 callback(req, res, false, '', rst);
             }
         }
-        catch(err) {
+        catch (err) {
             callback(req, res, err, '没有数据', null);
         }
     }
-    getMaxNumber(req, res){
+    getMaxNumber(req, res) {
         billsController.getMaxNumber(req, res);
     }
-    getABillsLib(req, res){
+    getABillsLib(req, res) {
         billsController.getABillsLib(req, res);
     }
-    getStdBillsLib(req, res){
+    getStdBillsLib(req, res) {
         billsController.getStdBillsLib(req, res);
     }
-    createStdBillsLib(req, res){
+    createStdBillsLib(req, res) {
         billsController.createStdBillsLib(req, res);
     }
     copyStdBillsLib(req, res) {
         billsController.copyStdBillsLib(req, res);
     }
-    deleteStdBillsLib(req, res){
+    deleteStdBillsLib(req, res) {
         billsController.deleteStdBillsLib(req, res);
     }
-    renameStdBillsLib(req, res){
+    renameStdBillsLib(req, res) {
         billsController.renameStdBillsLib(req, res);
     }
-    getStdBillsLibName(req, res){
+    getStdBillsLibName(req, res) {
         billsController.getStdBillsLibName(req, res);
     }
 

+ 51 - 47
modules/bills_template_lib/controllers/bills_template_controller.js

@@ -8,8 +8,9 @@
 import BaseController from "../../common/base/base_controller";
 import CompilationModel from '../../users/models/compilation_model';
 import billsTemplateFacade from "../facade/bills_template_facade";
-import {default as BillsFixedFlagConst, List as BillsFixedFlagList} from "../../common/const/bills_fixed.js";
-import {default as BillsTypeFlagConst, List as BillsTypeFlagList} from "../../common/const/bills_type.js";
+import { default as BillsFixedFlagConst, List as BillsFixedFlagList } from "../../common/const/bills_fixed.js";
+import { default as BillsTypeFlagConst, List as BillsTypeFlagList } from "../../common/const/bills_type.js";
+import { checkCompilationPermission } from '../../common/base/base_util';
 let config = require("../../../config/config.js");
 
 class BillsTemplateController extends BaseController {
@@ -22,11 +23,13 @@ class BillsTemplateController extends BaseController {
      * @return {void}
      */
     async main(request, response) {
-        let filter = request.query.filter ? {compilationId: request.query.filter} : null;
+        let filter = request.query.filter ? { compilationId: request.query.filter } : null;
         let templateLibs = await billsTemplateFacade.getAllLibs(filter);
+        const compilationPermission = request.session.managerData.compilationPermission || [];
+        templateLibs = templateLibs.filter(lib => compilationPermission.includes(lib.compilationId));
         let compilationModel = new CompilationModel();
-        let compilationList = await compilationModel.getCompilationList({_id: 1, name: 1});
-        compilationList.unshift({_id: 'all', name: '所有'});
+        let compilationList = await compilationModel.getPermissionCompilationList(request, { _id: 1, name: 1 });
+        compilationList.unshift({ _id: 'all', name: '所有' });
         let activeCompilation = compilationList.find(compilation => compilation._id.toString() === request.query.filter);
         if (activeCompilation) {
             activeCompilation.active = 'active';
@@ -34,119 +37,120 @@ class BillsTemplateController extends BaseController {
             compilationList[0].active = 'active'
         }
         let randerData = {
-            title:'清单模板',
+            title: '清单模板',
             userAccount: request.session.managerData.username,
             userID: request.session.managerData.userID,
-            templateLibs:templateLibs,
+            templateLibs: templateLibs,
             compilationList: compilationList,
             layout: 'maintain/common/html/layout',
-            LicenseKey:config.getLicenseKey(process.env.NODE_ENV)
+            LicenseKey: config.getLicenseKey(process.env.NODE_ENV)
         };
 
         response.render("maintain/bill_template_lib/html/main", randerData);
     }
     async updateBillsTemplateItem(request, response) {
         let libID = request.params.libID;
-        let result = {error: 1, message: '更新数据错误', data: null};
+        let result = { error: 1, message: '更新数据错误', data: null };
         try {
             let data = JSON.parse(request.body.data);
-            if(libID){
-                 result = await await billsTemplateFacade.updateTemplateItem(libID,data);
+            if (libID) {
+                result = await await billsTemplateFacade.updateTemplateItem(libID, data);
                 if (result) {
-                    result = {error: 0, message: '', data: data};
+                    result = { error: 0, message: '', data: data };
                 }
             }
 
-        }catch (err){
+        } catch (err) {
             console.log(err);
             result.message = err.message;
         }
         response.json(result);
     }
 
-    async editTemplate(request, response){
+    async editTemplate(request, response) {
 
         //先取出清单库信息:
         let libID = request.params.libID;
         let templateLib = await billsTemplateFacade.getLibByID(libID);
-        if(templateLib){
+        if (templateLib) {
+            checkCompilationPermission(request, response, templateLib.compilationId, '/billsTemplate/main');
 
             let templateDatas = await billsTemplateFacade.getTemplateDatasByLibID(libID);
 
             let randerData = {
-                title:'清单模板',
-                mainURL:'/billsTemplate/main',
-                libName:templateLib.name,
+                title: '清单模板',
+                mainURL: '/billsTemplate/main',
+                libName: templateLib.name,
                 userAccount: request.session.managerData.username,
                 userID: request.session.managerData.userID,
-                billsTemplateData:JSON.stringify(templateDatas),
+                billsTemplateData: JSON.stringify(templateDatas),
                 billsFixedFlagList: JSON.stringify(BillsFixedFlagList),
                 billsTypeFlagList: JSON.stringify(BillsTypeFlagList),
-                libID:libID,
-                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                libID: libID,
+                LicenseKey: config.getLicenseKey(process.env.NODE_ENV),
                 layout: 'maintain/common/html/edit_layout'
             };
             response.render("maintain/bill_template_lib/html/edit", randerData);
-        }else {
+        } else {
             response.redirect(request.headers.referer);
         }
     }
 
-    async deleteLibByID(request,response){
-        let result={
-            error:0
+    async deleteLibByID(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await billsTemplateFacade.deleteLibByID(data.ID);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await billsTemplateFacade.deleteLibByID(data.ID);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
 
-    async saveLib(request, response){
-        let result={
-            error:0
+    async saveLib(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await billsTemplateFacade.saveLib(data);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await billsTemplateFacade.saveLib(data);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
 
-    async getLibByID(request, response){
-        let result={
-            error:0
+    async getLibByID(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await billsTemplateFacade.getLibByID(data.libID);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await billsTemplateFacade.getLibByID(data.libID);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
 
-    async addLib(request, response){
+    async addLib(request, response) {
         try {
             await billsTemplateFacade.addLib(request.body);
-        }catch (error) {
+        } catch (error) {
             console.log(error);
         }
         response.redirect(request.headers.referer);
@@ -157,10 +161,10 @@ class BillsTemplateController extends BaseController {
             const data = JSON.parse(req.body.data);
             const userName = req.session.managerData.username;
             await billsTemplateFacade.copyLib(data.libID, data.name, userName);
-            res.json({error: 0, data: null, message: 'success'})
+            res.json({ error: 0, data: null, message: 'success' })
         } catch (err) {
             console.log(err);
-            res.json({error: 1, data: null, message: 'fail'});
+            res.json({ error: 1, data: null, message: 'fail' });
         }
     }
 }

+ 42 - 37
modules/calc_program_lib/controllers/calc_program_controller.js

@@ -5,20 +5,23 @@ import BaseController from "../../common/base/base_controller";
 import CompilationModel from '../../users/models/compilation_model';
 let config = require("../../../config/config.js");
 import calcProgramFacade from "../facade/calc_program_facade";
+import { checkCompilationPermission } from '../../common/base/base_util';
 
 class CalcProgramController extends BaseController {
     async main(request, response) {
         let compilationModel = new CompilationModel();
-        let compilationList = await compilationModel.getCompilationList({_id: 1, name: 1});
-        compilationList.unshift({_id: 'all', name: '所有'});
+        let compilationList = await compilationModel.getPermissionCompilationList(request, { _id: 1, name: 1 });
+        compilationList.unshift({ _id: 'all', name: '所有' });
         let activeCompilation = compilationList.find(compilation => compilation._id.toString() === request.query.filter);
         if (activeCompilation) {
             activeCompilation.active = 'active';
         } else {
             compilationList[0].active = 'active'
         }
-        let filter = request.query.filter ? {compilationId: request.query.filter} : {};
-        let calcProgramLibs = await calcProgramFacade.findByCondition(filter, {templates: 0}, false);
+        let filter = request.query.filter ? { compilationId: request.query.filter } : {};
+        let calcProgramLibs = await calcProgramFacade.findByCondition(filter, { templates: 0 }, false);
+        const compilationPermission = request.session.managerData.compilationPermission || [];
+        calcProgramLibs.filter(lib => compilationPermission.includes(lib.compilationId));
         let randerData = {
             title: '计算程序模板库',
             userAccount: request.session.managerData.username,
@@ -29,81 +32,83 @@ class CalcProgramController extends BaseController {
         };
         response.render("maintain/calc_program_lib/html/main", randerData);
     }
-    async addLib(request, response){
+    async addLib(request, response) {
         try {
             await calcProgramFacade.addLib(request.body);
-        }catch (error) {
+        } catch (error) {
             console.log(error);
         }
         response.redirect(request.headers.referer);
     }
-    async findLib(request, response){
-        let result={
-            error:0
+    async findLib(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let conditions={ID:data.ID};
+            let conditions = { ID: data.ID };
             let resultData = await calcProgramFacade.findByCondition(conditions);
-            result.data=resultData;
-        }catch (err){
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async saveLib(request, response){
-        let result={
-            error:0
+    async saveLib(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await calcProgramFacade.saveLib(data);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await calcProgramFacade.saveLib(data);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async deleteLibByID(request,response){
-        let result={
-            error:0
+    async deleteLibByID(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await calcProgramFacade.deleteLibByID(data.ID);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await calcProgramFacade.deleteLibByID(data.ID);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async edit(request,response){
+    async edit(request, response) {
         //先取出替换库信息:
         let libID = request.params.libID;
-        let programLib = await calcProgramFacade.findByCondition({'ID':libID});
-        if(programLib){
+        let programLib = await calcProgramFacade.findByCondition({ 'ID': libID });
+        if (programLib) {
+            checkCompilationPermission(request, response, programLib.compilationId, '/calcProgram/main');
+
             let randerData = {
-                title:'计算程序模板库',
-                mainURL:'/calcProgram/main',
-                libName:programLib.libName,
+                title: '计算程序模板库',
+                mainURL: '/calcProgram/main',
+                libName: programLib.libName,
                 userAccount: request.session.managerData.username,
                 userID: request.session.managerData.userID,
-                templateList:JSON.stringify(programLib.templates),
-                libID:libID,
-                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                templateList: JSON.stringify(programLib.templates),
+                libID: libID,
+                LicenseKey: config.getLicenseKey(process.env.NODE_ENV),
                 layout: 'maintain/common/html/edit_layout'
             };
             response.render("maintain/calc_program_lib/html/edit", randerData);
-        }else {
+        } else {
             response.redirect(request.headers.referer);
         }
     }

+ 6 - 0
modules/common/base/base_util.js

@@ -0,0 +1,6 @@
+export const checkCompilationPermission = (req, res, compilationID, redirectUrl) => {
+  const compilationPermission = req.session.managerData.compilationPermission || [];
+  if (!compilationPermission.includes(compilationID)) {
+    res.redirect(redirectUrl);
+  }
+}

+ 45 - 40
modules/fee_rate_lib/controllers/fee_rate_controller.js

@@ -5,105 +5,110 @@ import BaseController from "../../common/base/base_controller";
 import CompilationModel from '../../users/models/compilation_model';
 let config = require("../../../config/config.js");
 import feeRateFacade from "../facade/fee_rate_facade";
+import { checkCompilationPermission } from '../../common/base/base_util';
 
-class FeeRateController extends BaseController{
+class FeeRateController extends BaseController {
     async main(request, response) {
         let compilationModel = new CompilationModel();
-        let compilationList = await compilationModel.getCompilationList({_id: 1, name: 1});
-        compilationList.unshift({_id: 'all', name: '所有'});
+        let compilationList = await compilationModel.getPermissionCompilationList(request, { _id: 1, name: 1 });
+        compilationList.unshift({ _id: 'all', name: '所有' });
         let activeCompilation = compilationList.find(compilation => compilation._id.toString() === request.query.filter);
         if (activeCompilation) {
             activeCompilation.active = 'active';
         } else {
             compilationList[0].active = 'active'
         }
-        let filter = request.query.filter ? {compilationId: request.query.filter} : {};
-        let feeRateLibs = await feeRateFacade.findByCondition(filter,{rates:0},false);
+        let filter = request.query.filter ? { compilationId: request.query.filter } : {};
+        let feeRateLibs = await feeRateFacade.findByCondition(filter, { rates: 0 }, false);
+        const compilationPermission = request.session.managerData.compilationPermission || [];
+        feeRateLibs = feeRateLibs.filter(lib => compilationPermission.includes(lib.compilationId));
         let randerData = {
-            title:'费率标准库',
+            title: '费率标准库',
             userAccount: request.session.managerData.username,
             userID: request.session.managerData.userID,
-            feeRateLibs:feeRateLibs,
+            feeRateLibs: feeRateLibs,
             compilationList: compilationList,
             layout: 'maintain/common/html/layout'
         };
         response.render("maintain/fee_rate_lib/html/main", randerData);
     }
-    async addLib(request, response){
+    async addLib(request, response) {
         try {
             await feeRateFacade.addLib(request.body);
-        }catch (error) {
+        } catch (error) {
             console.log(error);
         }
         response.redirect(request.headers.referer);
     }
-    async findLib(request, response){
-        let result={
-            error:0
+    async findLib(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let conditions={ID:data.ID};
+            let conditions = { ID: data.ID };
             let resultData = await feeRateFacade.findByCondition(conditions);
-            result.data=resultData;
-        }catch (err){
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async saveLib(request, response){
-        let result={
-            error:0
+    async saveLib(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await feeRateFacade.saveLib(data);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await feeRateFacade.saveLib(data);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async deleteLibByID(request,response){
-        let result={
-            error:0
+    async deleteLibByID(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await feeRateFacade.deleteLibByID(data.ID);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await feeRateFacade.deleteLibByID(data.ID);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async edit(request,response){
+    async edit(request, response) {
         //先取出替换库信息:
         let libID = request.params.libID;
-        let feeRateLib = await feeRateFacade.findByCondition({'ID':libID});
-        if(feeRateLib){
+        let feeRateLib = await feeRateFacade.findByCondition({ 'ID': libID });
+        if (feeRateLib) {
+            checkCompilationPermission(request, response, feeRateLib.compilationId, '/feeRate/main');
+
             let randerData = {
-                title:'费率标准库',
-                mainURL:'/feeRate/main',
-                libName:feeRateLib.libName,
+                title: '费率标准库',
+                mainURL: '/feeRate/main',
+                libName: feeRateLib.libName,
                 userAccount: request.session.managerData.username,
                 userID: request.session.managerData.userID,
-                rateList:JSON.stringify(feeRateLib.rates),
-                libID:libID,
-                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                rateList: JSON.stringify(feeRateLib.rates),
+                libID: libID,
+                LicenseKey: config.getLicenseKey(process.env.NODE_ENV),
                 layout: 'maintain/common/html/edit_layout'
             };
             response.render("maintain/fee_rate_lib/html/edit", randerData);
-        }else {
+        } else {
             response.redirect(request.headers.referer);
         }
     }

+ 41 - 36
modules/main_col_lib/controllers/main_col_controller.js

@@ -8,105 +8,110 @@
  */
 import BaseController from "../../common/base/base_controller";
 import mainColFacade from "../facade/main_col_facade";
+import { checkCompilationPermission } from '../../common/base/base_util';
+
 let config = require("../../../config/config.js");
 
 class MainColController extends BaseController {
 
     async main(request, response) {
         let mainColLibs = await mainColFacade.getAllLibs();
+        const compilationPermission = request.session.managerData.compilationPermission || [];
+        mainColLibs = mainColLibs.filter(lib => compilationPermission.includes(lib.compilationId));
         let randerData = {
-            title:'列设置',
+            title: '列设置',
             userAccount: request.session.managerData.username,
             userID: request.session.managerData.userID,
-            mainColLibs:mainColLibs,
-            LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+            mainColLibs: mainColLibs,
+            LicenseKey: config.getLicenseKey(process.env.NODE_ENV),
             layout: 'maintain/common/html/layout'
         };
 
         response.render("maintain/main_col_lib/html/main", randerData);
     }
 
-    async addLib(request, response){
+    async addLib(request, response) {
         try {
             await mainColFacade.addLib(request.body);
-        }catch (error) {
+        } catch (error) {
             console.log(error);
         }
         response.redirect(request.headers.referer);
     }
 
-    async deleteLibByID(request,response){
-        let result={
-            error:0
+    async deleteLibByID(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await mainColFacade.deleteLibByID(data.ID);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await mainColFacade.deleteLibByID(data.ID);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
 
-    async getLibByID(request, response){
-        let result={
-            error:0
+    async getLibByID(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await mainColFacade.getLibByID(data.libID);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await mainColFacade.getLibByID(data.libID);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
 
-    async saveLib(request, response){
-        let result={
-            error:0
+    async saveLib(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await mainColFacade.saveLib(data);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await mainColFacade.saveLib(data);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
 
-    async edit(request,response){
+    async edit(request, response) {
         let result = {
-            error:0
+            error: 0
         }
         //先取出替换库信息:
         let libID = request.params.libID;
         let colLib = await mainColFacade.getLibByID(libID);
-        if(colLib){
+        if (colLib) {
+            checkCompilationPermission(request, response, colLib.compilationId, '/mainTreeCol/main')
             let randerData = {
-                title:'列设置库',
-                mainURL:'/mainTreeCol/main',
-                libName:colLib.name,
+                title: '列设置库',
+                mainURL: '/mainTreeCol/main',
+                libName: colLib.name,
                 userAccount: request.session.managerData.username,
                 userID: request.session.managerData.userID,
-                main_tree_col:JSON.stringify(colLib.main_tree_col),
-                libID:libID,
-                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                main_tree_col: JSON.stringify(colLib.main_tree_col),
+                libID: libID,
+                LicenseKey: config.getLicenseKey(process.env.NODE_ENV),
                 layout: 'maintain/common/html/edit_layout'
             };
             response.render("maintain/main_col_lib/html/edit", randerData);
-        }else {
+        } else {
             response.redirect(request.headers.referer);
         }
 

+ 69 - 63
modules/material_replace_lib/controllers/material_replace_controller.js

@@ -4,8 +4,10 @@
 import BaseController from "../../common/base/base_controller";
 import materialFacade from "../facade/material_replace_facade";
 let config = require("../../../config/config.js");
+import { checkCompilationPermission } from '../../common/base/base_util';
 
-class ReplaceController extends BaseController{
+
+class ReplaceController extends BaseController {
     /**
      * 材料替换库页面
      *
@@ -14,151 +16,155 @@ class ReplaceController extends BaseController{
      * @return {void}
      */
     async main(request, response) {
-        let materialLibs = await materialFacade.findByCondition({},null,false);
+        let materialLibs = await materialFacade.findByCondition({}, null, false);
+        const compilationPermission = request.session.managerData.compilationPermission || [];
+        materialLibs = materialLibs.filter(lib => compilationPermission.includes(lib.compilationId));
         let randerData = {
-            title:'材料替换库',
+            title: '材料替换库',
             userAccount: request.session.managerData.username,
             userID: request.session.managerData.userID,
-            materialLibs:materialLibs,
+            materialLibs: materialLibs,
             layout: 'maintain/common/html/layout'
         };
         response.render("maintain/material_replace_lib/html/main", randerData);
     }
-    async edit(request,response){
+    async edit(request, response) {
         //先取出替换库信息:
         let libID = request.params.libID;
-        let materialLib = await materialFacade.findByCondition({'ID':libID});
-        if(materialLib){
+        let materialLib = await materialFacade.findByCondition({ 'ID': libID });
+        if (materialLib) {
+            checkCompilationPermission(request, response, materialLib.compilationId, '/materialReplace/main');
+
             let billsLibId = materialLib.billsLibId;
             let compilationId = materialLib.compilationId;
-            let gljLib = await  materialFacade.findGLJLibByComID(compilationId);
+            let gljLib = await materialFacade.findGLJLibByComID(compilationId);
             let billsList = await materialFacade.findBillsByLibID(libID);
             //let templateDatas = await materialFacade.getTemplateDatasByLibID(libID);
             //let stdBills = await  materialFacade.getStdBillsByLib(billsLibId);
 
             let randerData = {
-                title:'材料替换库',
-                mainURL:'/materialReplace/main',
-                libName:materialLib.name,
+                title: '材料替换库',
+                mainURL: '/materialReplace/main',
+                libName: materialLib.name,
                 userAccount: request.session.managerData.username,
                 userID: request.session.managerData.userID,
-                billsList:JSON.stringify(billsList),
-                billsLibId:billsLibId,
-                gljLibID:gljLib.ID,
-                libID:libID,
+                billsList: JSON.stringify(billsList),
+                billsLibId: billsLibId,
+                gljLibID: gljLib.ID,
+                libID: libID,
                 //stdBills:JSON.stringify(stdBills),
-                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                LicenseKey: config.getLicenseKey(process.env.NODE_ENV),
                 layout: 'maintain/common/html/edit_layout'
             };
             response.render("maintain/material_replace_lib/html/edit", randerData);
-        }else {
+        } else {
             response.redirect(request.headers.referer);
         }
     }
-    async findLib(request, response){
-        let result={
-            error:0
+    async findLib(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let conditions={};
-            if(data.compilationID) conditions.compilationId = data.compilationID;
-            if(data.billLibID) conditions.billsLibId = data.billLibID;
-            if(data.ID) conditions.ID = data.ID;
+            let conditions = {};
+            if (data.compilationID) conditions.compilationId = data.compilationID;
+            if (data.billLibID) conditions.billsLibId = data.billLibID;
+            if (data.ID) conditions.ID = data.ID;
             let resultData = await materialFacade.findByCondition(conditions);
-            result.data=resultData;
-        }catch (err){
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async addLib(request, response){
+    async addLib(request, response) {
         try {
             await materialFacade.addLib(request.body);
-        }catch (error) {
+        } catch (error) {
             console.log(error);
         }
         response.redirect(request.headers.referer);
     }
-    async saveLib(request, response){
-        let result={
-            error:0
+    async saveLib(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await materialFacade.saveLib(data);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await materialFacade.saveLib(data);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async deleteLibByID(request,response){
-        let result={
-            error:0
+    async deleteLibByID(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await materialFacade.deleteLibByID(data.ID);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await materialFacade.deleteLibByID(data.ID);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async saveBills(request,response){
-        let result={
-            error:0
+    async saveBills(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await materialFacade.saveBills(data);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await materialFacade.saveBills(data);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async saveMaterial(request,response){
-        let result={
-            error:0
+    async saveMaterial(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await materialFacade.saveMaterial(data);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await materialFacade.saveMaterial(data);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async findMaterial (request,response){
-        let result={
-            error:0
+    async findMaterial(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
             let resultData = await materialFacade.getMaterialByBillsID(data.billsItemID);
-            result.data=resultData;
-        }catch (err){
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);

+ 47 - 43
modules/monomer_template_lib/controllers/monomer_template_controller.js

@@ -3,115 +3,119 @@
  */
 import BaseController from "../../common/base/base_controller";
 import monomerTemplateFacade from "../facade/monomer_template_facade";
+import { checkCompilationPermission } from '../../common/base/base_util';
 let config = require("../../../config/config.js");
 let logger = require('../../../logs/log_helper').logger;
 import CompilationModel from '../../users/models/compilation_model';
 let mongoose = require('mongoose');
 let monomerTemplateModel = mongoose.model('std_monomer_template');
 
-class MonomerTemplateController extends BaseController{
+class MonomerTemplateController extends BaseController {
     async main(request, response) {
-     
+
         let compilationModel = new CompilationModel();
-        let compilationList = await compilationModel.getCompilationList({_id: 1, name: 1});
-        compilationList.unshift({_id: 'all', name: '所有'});
+        let compilationList = await compilationModel.getPermissionCompilationList(request, { _id: 1, name: 1 });
+        compilationList.unshift({ _id: 'all', name: '所有' });
         let activeCompilation = compilationList.find(compilation => compilation._id.toString() === request.query.filter);
         if (activeCompilation) {
             activeCompilation.active = 'active';
         } else {
             compilationList[0].active = 'active'
         }
-        let filter = request.query.filter ? {compilationID: request.query.filter} : {};
-        let templateLibs = await monomerTemplateFacade.findByCondition(filter,{feature:0},false);
+        let filter = request.query.filter ? { compilationID: request.query.filter } : {};
+        let templateLibs = await monomerTemplateFacade.findByCondition(filter, { feature: 0 }, false);
+        const compilationPermission = request.session.managerData.compilationPermission || [];
+        templateLibs = templateLibs.filter(lib => compilationPermission.includes(lib.compilationID))
         let renderData = {
-            title:'单体模板库',
+            title: '单体模板库',
             userAccount: request.session.managerData.username,
             userID: request.session.managerData.userID,
-            templateLibs:templateLibs,
+            templateLibs: templateLibs,
             compilationList: compilationList,
             layout: 'maintain/common/html/layout'
         };
         response.render("maintain/monomer_template_lib/html/main", renderData);
     }
-    async addLib(request, response){
+    async addLib(request, response) {
         try {
             await monomerTemplateFacade.addLib(request.body);
-        }catch (error) {
+        } catch (error) {
             console.log(error);
         }
         response.redirect(request.headers.referer);
     }
-    async findLib(request, response){
-        let result={
-            error:0
+    async findLib(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let conditions={'ID' : data.ID};
+            let conditions = { 'ID': data.ID };
             let resultData = await monomerTemplateFacade.findByCondition(conditions);
-            result.data=resultData;
-        }catch (err){
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async saveLib(request, response){
-        let result={
-            error:0
+    async saveLib(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
             console.log(data.data);
-            let resultData= await monomerTemplateFacade.saveLib(data);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await monomerTemplateFacade.saveLib(data);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async deleteLibByID(request,response){
+    async deleteLibByID(request, response) {
         logger.info(`delete projectFeatureLib ${request.ip}`);
-        let result={
-            error:0
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await monomerTemplateFacade.deleteLibByID(data.ID);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await monomerTemplateFacade.deleteLibByID(data.ID);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async edit(request,response){
+    async edit(request, response) {
         //先取出替换库信息:
         let libID = request.params.libID;
-       
-        let monomerTemplate = await monomerTemplateFacade.findByCondition({'ID':libID});
-        
-        if(monomerTemplate){
+
+        let monomerTemplate = await monomerTemplateFacade.findByCondition({ 'ID': libID });
+
+        if (monomerTemplate) {
+            checkCompilationPermission(request, response, monomerTemplate.compilationID, '/monomerTemplate/main');
             let randerData = {
-                title:'单体模板库',
-                mainURL:'/monomerTemplate/main',
-                libName:monomerTemplate.name,
+                title: '单体模板库',
+                mainURL: '/monomerTemplate/main',
+                libName: monomerTemplate.name,
                 userAccount: request.session.managerData.username,
                 userID: request.session.managerData.userID,
-                templateLibs:JSON.stringify(monomerTemplate),
-                libID:libID,
-                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                templateLibs: JSON.stringify(monomerTemplate),
+                libID: libID,
+                LicenseKey: config.getLicenseKey(process.env.NODE_ENV),
                 layout: 'maintain/common/html/edit_layout'
             };
             response.render("maintain/monomer_template_lib/html/edit", randerData);
-        }else {
+        } else {
             response.redirect(request.headers.referer);
         }
     }

+ 7 - 2
modules/price_info_lib/controllers/index.js

@@ -1,5 +1,6 @@
 import BaseController from "../../common/base/base_controller";
 import CompilationModel from '../../users/models/compilation_model';
+import { checkCompilationPermission } from '../../common/base/base_util';
 const multiparty = require('multiparty');
 const excel = require('node-xlsx');
 const fs = require('fs');
@@ -9,7 +10,7 @@ const config = require("../../../config/config.js");
 class PriceInfoController extends BaseController {
     async main(req, res) {
         const compilationModel = new CompilationModel();
-        const compilationList = await compilationModel.getCompilationList({ _id: 1, name: 1 });
+        const compilationList = await compilationModel.getPermissionCompilationList(req, { _id: 1, name: 1 });
         compilationList.unshift({ _id: 'all', name: '所有' });
         const activeCompilation = compilationList.find(compilation => compilation._id.toString() === req.query.filter);
         if (activeCompilation) {
@@ -18,7 +19,9 @@ class PriceInfoController extends BaseController {
             compilationList[0].active = 'active'
         }
         const filter = req.query.filter ? { compilationID: req.query.filter } : {};
-        const libs = await facade.getLibs(filter);
+        let libs = await facade.getLibs(filter);
+        const compilationPermission = req.session.managerData.compilationPermission || [];
+        libs = libs.filter(lib => compilationPermission.includes(lib.compilationID));
         libs.forEach(lib => {
             compilationList.forEach(compilation => {
                 if (compilation._id.toString() === lib.compilationID) {
@@ -48,6 +51,8 @@ class PriceInfoController extends BaseController {
         if (!libs.length) {
             return res.send(404);
         }
+        checkCompilationPermission(req, res, libs[0].compilationID, '/priceInfo/main');
+
         const areaList = await facade.getAreas(libs[0].compilationID);
         const renderData = {
             compilationID: libs[0].compilationID,

+ 45 - 40
modules/project_feature_lib/controllers/project_feature_controller.js

@@ -5,105 +5,110 @@ import BaseController from "../../common/base/base_controller";
 import featureFacade from "../facade/project_feature_facade";
 let config = require("../../../config/config.js");
 import CompilationModel from '../../users/models/compilation_model';
+import { checkCompilationPermission } from '../../common/base/base_util';
 
-class FeatureController extends BaseController{
+class FeatureController extends BaseController {
     async main(request, response) {
         let compilationModel = new CompilationModel();
-        let compilationList = await compilationModel.getCompilationList({_id: 1, name: 1});
-        compilationList.unshift({_id: 'all', name: '所有'});
+        let compilationList = await compilationModel.getPermissionCompilationList(request, { _id: 1, name: 1 });
+        compilationList.unshift({ _id: 'all', name: '所有' });
         let activeCompilation = compilationList.find(compilation => compilation._id.toString() === request.query.filter);
         if (activeCompilation) {
             activeCompilation.active = 'active';
         } else {
             compilationList[0].active = 'active'
         }
-        let filter = request.query.filter ? {compilationId: request.query.filter} : {};
-        let featureLibs = await featureFacade.findByCondition(filter,{feature:0},false);
+        let filter = request.query.filter ? { compilationId: request.query.filter } : {};
+        let featureLibs = await featureFacade.findByCondition(filter, { feature: 0 }, false);
+        const compilationPermission = request.session.managerData.compilationPermission || [];
+        featureLibs = featureLibs.filter(lib => compilationPermission.includes(lib.compilationId));
         let randerData = {
-            title:'工程特征库',
+            title: '工程特征库',
             userAccount: request.session.managerData.username,
             userID: request.session.managerData.userID,
-            featureLibs:featureLibs,
+            featureLibs: featureLibs,
             compilationList: compilationList,
             layout: 'maintain/common/html/layout'
         };
         response.render("maintain/project_feature_lib/html/main", randerData);
     }
-    async addLib(request, response){
+    async addLib(request, response) {
         try {
             await featureFacade.addLib(request.body);
-        }catch (error) {
+        } catch (error) {
             console.log(error);
         }
         response.redirect(request.headers.referer);
     }
-    async findLib(request, response){
-        let result={
-            error:0
+    async findLib(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let conditions={'ID' : data.ID};
+            let conditions = { 'ID': data.ID };
             let resultData = await featureFacade.findByCondition(conditions);
-            result.data=resultData;
-        }catch (err){
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async saveLib(request, response){
-        let result={
-            error:0
+    async saveLib(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await featureFacade.saveLib(data);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await featureFacade.saveLib(data);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async deleteLibByID(request,response){
-        let result={
-            error:0
+    async deleteLibByID(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await featureFacade.deleteLibByID(data.ID);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await featureFacade.deleteLibByID(data.ID);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async edit(request,response){
+    async edit(request, response) {
         //先取出替换库信息:
         let libID = request.params.libID;
-        let featureLib = await featureFacade.findByCondition({'ID':libID});
-        if(featureLib){
+        let featureLib = await featureFacade.findByCondition({ 'ID': libID });
+        if (featureLib) {
+            checkCompilationPermission(request, response, featureLib.compilationId, '/projectFeature/main');
+
             let randerData = {
-                title:'工程特征库',
-                mainURL:'/projectFeature/main',
-                libName:featureLib.name,
+                title: '工程特征库',
+                mainURL: '/projectFeature/main',
+                libName: featureLib.name,
                 userAccount: request.session.managerData.username,
                 userID: request.session.managerData.userID,
-                featureList:JSON.stringify(featureLib.feature),
-                libID:libID,
-                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                featureList: JSON.stringify(featureLib.feature),
+                libID: libID,
+                LicenseKey: config.getLicenseKey(process.env.NODE_ENV),
                 layout: 'maintain/common/html/edit_layout'
             };
             response.render("maintain/project_feature_lib/html/edit", randerData);
-        }else {
+        } else {
             response.redirect(request.headers.referer);
         }
     }

+ 10 - 1
modules/ration_repository/controllers/repository_views_controller.js

@@ -3,6 +3,7 @@
  */
 import BaseController from "../../common/base/base_controller";
 import CompilationModel from '../../users/models/compilation_model';
+import { checkCompilationPermission } from '../../common/base/base_util';
 let config = require("../../../config/config.js");
 import mongoose from 'mongoose';
 const compilationModel = mongoose.model('compilation');
@@ -11,12 +12,17 @@ const fs = require('fs');
 const rationDao = require('../models/ration_item');
 class ViewsController extends BaseController {
     async redirectMain(req, res) {
+        const compilationPermission = req.session.managerData.compilationPermission || [];
+        if (req.query.filter) {
+            checkCompilationPermission(req, res, req.query.filter, '/rationRepository/main');
+        }
         let filter = req.query.filter ? { compilationId: req.query.filter } : null;
         let allLibs = await rationLibModel.find({}, { _id: 0, recentOpr: 0 }),
             rationLibs = allLibs.filter(lib => filter && lib.compilationId === filter.compilationId || !filter),
             allNames = allLibs.map(lib => lib.dispName);
+        rationLibs = rationLibs.filter(lib => compilationPermission.includes(lib.compilationId));
         let compilationModel = new CompilationModel();
-        let compilationList = await compilationModel.getCompilationList({ _id: 1, name: 1 });
+        let compilationList = await compilationModel.getPermissionCompilationList(req, { _id: 1, name: 1 });
         compilationList.unshift({ _id: 'all', name: '所有' });
         let activeCompilation = compilationList.find(compilation => compilation._id.toString() === req.query.filter);
         if (activeCompilation) {
@@ -45,6 +51,7 @@ class ViewsController extends BaseController {
         let priceProperties = [];
         let stdRationLib = await rationLibModel.findOne({ ID: repId });
         if (stdRationLib) {
+            checkCompilationPermission(req, res, stdRationLib.compilationId, '/rationRepository/main');
             let compilation = await compilationModel.findOne({ _id: mongoose.Types.ObjectId(stdRationLib.compilationId) });
             priceProperties = compilation.priceProperties ? compilation.priceProperties : [];
             let absoluteUrl = compilation.overWriteUrl ? req.app.locals.rootDir + compilation.overWriteUrl : req.app.locals.rootDir;
@@ -71,6 +78,7 @@ class ViewsController extends BaseController {
         let priceProperties = [];
         let stdRationLib = await rationLibModel.findOne({ ID: repId });
         if (stdRationLib) {
+            checkCompilationPermission(req, res, stdRationLib.compilationId, '/rationRepository/main');
             let compilation = await compilationModel.findOne({ _id: mongoose.Types.ObjectId(stdRationLib.compilationId) });
             priceProperties = compilation.priceProperties ? compilation.priceProperties : [];
             let absoluteUrl = compilation.overWriteUrl ? req.app.locals.rootDir + compilation.overWriteUrl : req.app.locals.rootDir;
@@ -111,6 +119,7 @@ class ViewsController extends BaseController {
         const redirectCoe = `/rationRepository/coeList?repository=${repId}&locked=${locked}`;
         const redirectRation = `/rationRepository/ration?repository=${repId}&locked=${locked}`;
         let stdRationLib = await rationLibModel.findOne({ ID: repId });
+        checkCompilationPermission(req, res, stdRationLib.compilationId, '/rationRepository/main');
         res.render('maintain/ration_repository/anzhuang.html',
             {
                 userAccount: req.session.managerData.username,

+ 87 - 85
modules/reports/controllers/rpt_tpl_controller.js

@@ -18,12 +18,12 @@ import rttFacade from "../facade/rpt_tpl_tree_node_facade";
 import CompilationModel from "../../users/models/compilation_model";
 
 //统一回调函数
-let callback = function(req, res, err, message, data){
-    res.json({error: err, message: message, data: data});
+let callback = function (req, res, err, message, data) {
+    res.json({ error: err, message: message, data: data });
 };
 
 let mExport = {
-    getCustomerCfg: function(req, res) {
+    getCustomerCfg: function (req, res) {
         let params = JSON.parse(req.body.params),
             userId = params.userId,
             me = this;
@@ -43,7 +43,7 @@ let mExport = {
                     rst.push(null);
                     for (let itemCfg of custCfg) {
                         // rst = itemCfg;
-                        let doc = (itemCfg._doc)?itemCfg._doc:itemCfg;
+                        let doc = (itemCfg._doc) ? itemCfg._doc : itemCfg;
                         let dest = {};
                         copyRptCfg(doc, dest);
                         if (doc.userId !== "-100") {
@@ -59,10 +59,10 @@ let mExport = {
                     copyRptCfg(rst[0], userDest);
                     rst.push(userDest);
                 }
-                callback(req,res, false, "", rst);
+                callback(req, res, false, "", rst);
             } else {
                 //failed
-                callback(req,res, true, "失败!", null);
+                callback(req, res, true, "失败!", null);
             }
         })
     },
@@ -76,27 +76,27 @@ let mExport = {
         rptCustCfgFacade.saveCustomizeCfg(custCfg).then(function (rst) {
             if (rst) {
                 //success
-                callback(req,res, false, "", "success!");
+                callback(req, res, false, "", "success!");
             } else {
                 //failed
-                callback(req,res, true, "更新失败!", null);
+                callback(req, res, true, "更新失败!", null);
             }
         })
     },
-    getDftTemplates: function(req, res) {
-        let filter = {"userId": "-100", "$or": [{"isDeleted": null}, {"isDeleted": false} ]};
-        TreeNodeModel.find(filter, '-_id', function(err, data){
+    getDftTemplates: function (req, res) {
+        let filter = { "userId": "-100", "$or": [{ "isDeleted": null }, { "isDeleted": false }] };
+        TreeNodeModel.find(filter, '-_id', function (err, data) {
             if (err) {
-                callback(req,res, true,"", null);
+                callback(req, res, true, "", null);
             } else {
-                callback(req,res,false,"", data);
+                callback(req, res, false, "", data);
             }
         });
     },
-    getExtCodeTpl: function(req, res) {
-        rptExtCodeModel.find({}).exec().then(function(rstCodeTpl) {
+    getExtCodeTpl: function (req, res) {
+        rptExtCodeModel.find({}).exec().then(function (rstCodeTpl) {
             if (rstCodeTpl) {
-                callback(req,res, false, "", rstCodeTpl);
+                callback(req, res, false, "", rstCodeTpl);
             } else {
                 callback(req, res, 'The report template was not found!', null);
             }
@@ -104,16 +104,16 @@ let mExport = {
     },
     getCompilationList(req, res) {
         let compilationModel = new CompilationModel();
-        let compilationList = compilationModel.getCompilationList();
+        let compilationList = compilationModel.getPermissionCompilationList(req);
         if (compilationList) {
             compilationList.then(function (rst) {
-                callback(req,res,false,"", rst);
+                callback(req, res, false, "", rst);
             })
         } else {
-            callback(req,res, true,"no result", null);
+            callback(req, res, true, "no result", null);
         }
     },
-    getRptTplTree: function(req, res) {
+    getRptTplTree: function (req, res) {
         let params = JSON.parse(req.body.params),
             compilationId = params.compilationId,
             userId = params.userId,
@@ -134,11 +134,11 @@ let mExport = {
         if (!compilationId) {
             compilationId = req.session.sessionCompilation._id;
         }
-        rttFacade.findTplTree(compilationId, userIds).then(function(result) {
+        rttFacade.findTplTree(compilationId, userIds).then(function (result) {
             if (result) {
-                callback(req,res,false,"", result);
+                callback(req, res, false, "", result);
             } else {
-                callback(req,res, true,"no result", null);
+                callback(req, res, true, "no result", null);
             }
         });
     },
@@ -149,76 +149,76 @@ let mExport = {
         if (!compilationId) {
             compilationId = req.session.sessionCompilation._id;
         }
-        rttFacade.findTplTreeByCompilation(compilationId).then(function(result) {
+        rttFacade.findTplTreeByCompilation(compilationId).then(function (result) {
             if (result) {
-                callback(req,res,false,"", result);
+                callback(req, res, false, "", result);
             } else {
-                callback(req,res, true,"no result", null);
+                callback(req, res, true, "no result", null);
             }
         });
     },
-    updateTreeNodes: function(req, res) {
+    updateTreeNodes: function (req, res) {
         let params = JSON.parse(req.body.params),
             nodes = params.nodes;
         let functions = [];
         for (let node of nodes) {
-            functions.push((function(doc) {
-                return function(cb) {
-                    TreeNodeModel.update({ID: doc.ID}, doc, cb);
+            functions.push((function (doc) {
+                return function (cb) {
+                    TreeNodeModel.update({ ID: doc.ID }, doc, cb);
                 };
             })(node));
         }
-        async.parallel(functions, function(err, results) {
-            callback(req,res, err, "", results);
+        async.parallel(functions, function (err, results) {
+            callback(req, res, err, "", results);
         });
     },
-    deleteRptTplNodes: function(req, res){
+    deleteRptTplNodes: function (req, res) {
         let params = JSON.parse(req.body.params),
             nodeIds = params.nodeIds,
             preNodeId = params.preNodeId,
             preNodeNextId = params.preNodeNextId;
         let functions = [];
         if (preNodeId !== -1) {
-            functions.push((function(nodeId, nextId) {
-                return function(cb) {
-                    TreeNodeModel.update({ID: nodeId}, {"NextSiblingID": nextId}, cb);
+            functions.push((function (nodeId, nextId) {
+                return function (cb) {
+                    TreeNodeModel.update({ ID: nodeId }, { "NextSiblingID": nextId }, cb);
                 };
             })(preNodeId, preNodeNextId));
         }
         for (let nId of nodeIds) {
-            functions.push((function(nodeId) {
-                return function(cb) {
-                    TreeNodeModel.update({ID: nodeId}, {"isDeleted": true}, cb);
+            functions.push((function (nodeId) {
+                return function (cb) {
+                    TreeNodeModel.update({ ID: nodeId }, { "isDeleted": true }, cb);
                 };
             })(nId));
         }
-        async.parallel(functions, function(err, results) {
-            callback(req,res, err, "", results);
+        async.parallel(functions, function (err, results) {
+            callback(req, res, err, "", results);
         });
     },
-    createTreeRootNode: function(req, res){
+    createTreeRootNode: function (req, res) {
         let params = JSON.parse(req.body.params),
             doc = params.doc;
         rttFacade.createNewTree(doc).then(function (rst) {
             if (rst) {
                 //success
-                callback(req,res, false, "", rst);
+                callback(req, res, false, "", rst);
             } else {
                 //failed
-                callback(req,res, true, "创建失败!", null);
+                callback(req, res, true, "创建失败!", null);
             }
         })
     },
-    updateTreeRootNode: function(req, res){
+    updateTreeRootNode: function (req, res) {
         let params = JSON.parse(req.body.params),
             doc = params.doc;
         rttFacade.updateTree(doc.compilationId, doc.engineerId, doc.userId, doc).then(function (rst) {
             if (rst) {
                 //success
-                callback(req,res, false, "", rst);
+                callback(req, res, false, "", rst);
             } else {
                 //failed
-                callback(req,res, true, "更新失败!", null);
+                callback(req, res, true, "更新失败!", null);
             }
         })
     },
@@ -228,17 +228,17 @@ let mExport = {
             compilationId = params.compilationId, engineerId = params.engineerId,
             userId = params.userId,
             nodeName = params.nodeName
-        ;
+            ;
         if (req.session.sessionUser && req.session.sessionUser.id) userId = req.session.sessionUser.id;
-        let filter = {"compilationId": compilationId, "engineerId": engineerId, "userId": userId, "$or": [{"isDeleted": null}, {"isDeleted": false}]};
-        let updateStatement = {"$set": {"name": nodeName}};
+        let filter = { "compilationId": compilationId, "engineerId": engineerId, "userId": userId, "$or": [{ "isDeleted": null }, { "isDeleted": false }] };
+        let updateStatement = { "$set": { "name": nodeName } };
         rttFacade.updateTreeInDetail(filter, updateStatement).then(function (rst) {
             if (rst) {
                 //success
-                callback(req,res, false, "", rst);
+                callback(req, res, false, "", rst);
             } else {
                 //failed
-                callback(req,res, true, "更新失败!", null);
+                callback(req, res, true, "更新失败!", null);
             }
         });
     },
@@ -248,17 +248,17 @@ let mExport = {
             // engineerId = params.engineerId,
             userId = params.userId,
             subNode = params.subNode
-        ;
+            ;
         if (req.session.sessionUser && req.session.sessionUser.id) userId = req.session.sessionUser.id; //备注:这段逻辑只会在前端有效,后端运维不会走到
-        let filter = {"compilationId": compilationId, "userId": userId, "items.ID": subNode.ID, "$or": [{"isDeleted": null}, {"isDeleted": false}]};
-        let updateStatement = {$set: {"items.$": subNode}};
+        let filter = { "compilationId": compilationId, "userId": userId, "items.ID": subNode.ID, "$or": [{ "isDeleted": null }, { "isDeleted": false }] };
+        let updateStatement = { $set: { "items.$": subNode } };
         rttFacade.updateTreeInDetail(filter, updateStatement).then(function (rst) {
             if (rst) {
                 //success
-                callback(req,res, false, "", rst);
+                callback(req, res, false, "", rst);
             } else {
                 //failed
-                callback(req,res, true, "更新失败!", null);
+                callback(req, res, true, "更新失败!", null);
             }
         });
     },
@@ -275,32 +275,32 @@ let mExport = {
             rttFacade.removeTreePhycically(compilationId, engineerId, userId).then(function (rst) {
                 if (rst) {
                     //success
-                    callback(req,res, false, "", rst);
+                    callback(req, res, false, "", rst);
                 } else {
                     //failed
-                    callback(req,res, true, "删除失败!", null);
+                    callback(req, res, true, "删除失败!", null);
                 }
             })
         } else {
             rttFacade.removeTree(compilationId, engineerId, userId).then(function (rst) {
                 if (rst) {
                     //success
-                    callback(req,res, false, "", rst);
+                    callback(req, res, false, "", rst);
                 } else {
                     //failed
-                    callback(req,res, true, "删除失败!", null);
+                    callback(req, res, true, "删除失败!", null);
                 }
             })
         }
     },
-    getNewNodeID: function(req, res) {
+    getNewNodeID: function (req, res) {
         let params = JSON.parse(req.body.params),
             scope = params.scope;
-        counter.counterDAO.getIDAfterCount(counter.moduleName.report, scope, function(err, result){
-            callback(req,res, false, "", result.sequence_value);
+        counter.counterDAO.getIDAfterCount(counter.moduleName.report, scope, function (err, result) {
+            callback(req, res, false, "", result.sequence_value);
         });
     },
-    createDftRptTpl: function(req, res) {
+    createDftRptTpl: function (req, res) {
         let params = JSON.parse(req.body.params),
             treeNodeId = params.treeNodeId,
             rptDftTplId = params.rptDftTplId,
@@ -310,10 +310,10 @@ let mExport = {
             engineerId = params.engineerId,
             userId = params.userId,
             subNode = params.subNode
-        ;
+            ;
         if (req.session.sessionUser && req.session.sessionUser.id) userId = req.session.sessionUser.id;
-        let filter = {"ID": rptDftTplId};
-        RptTplModel.findOne(filter, '-_id').exec().then(function(dftTplRst) {
+        let filter = { "ID": rptDftTplId };
+        RptTplModel.findOne(filter, '-_id').exec().then(function (dftTplRst) {
             if (dftTplRst) {
                 let _doc = dftTplRst["_doc"];
                 _doc["ID"] = treeNodeId;
@@ -323,17 +323,17 @@ let mExport = {
                 let rptTpl = new RptTplModel(_doc);
                 rptTpl.save(function (err, actTplRst) {
                     if (err) {
-                        callback(req,res, "报表模板创建错误", "", null);
+                        callback(req, res, "报表模板创建错误", "", null);
                     } else {
-                        let filter = {"compilationId": compilationId, "engineerId": engineerId, "userId": userId, "items.ID": subNode.ID, "$or": [{"isDeleted": null}, {"isDeleted": false}]};
-                        let updateStatement = {$set: {"items.$": subNode}};
+                        let filter = { "compilationId": compilationId, "engineerId": engineerId, "userId": userId, "items.ID": subNode.ID, "$or": [{ "isDeleted": null }, { "isDeleted": false }] };
+                        let updateStatement = { $set: { "items.$": subNode } };
                         rttFacade.updateTreeInDetail(filter, updateStatement).then(function (rst) {
                             if (rst) {
                                 //success
-                                callback(req,res, false, "", actTplRst);
+                                callback(req, res, false, "", actTplRst);
                             } else {
                                 //failed
-                                callback(req,res, true, "更新失败!", null);
+                                callback(req, res, true, "更新失败!", null);
                             }
                         });
                     }
@@ -346,10 +346,10 @@ let mExport = {
     getRefRptTpl: function (req, res) {
         let params = JSON.parse(req.body.params),
             rptTplId = params.rptTplId;
-        let filter = {"ID": rptTplId};
-        RptTplModel.findOne(filter, '-_id').exec().then(function(rstTpl) {
+        let filter = { "ID": rptTplId };
+        RptTplModel.findOne(filter, '-_id').exec().then(function (rstTpl) {
             if (rstTpl) {
-                callback(req,res, false, "", rstTpl);
+                callback(req, res, false, "", rstTpl);
             } else {
                 callback(req, res, 'The report template was not found!', null);
             }
@@ -358,8 +358,8 @@ let mExport = {
     updateRptTpl: function (req, res) {
         let params = JSON.parse(req.body.params),
             rptTpl = JSON.parse(params.rptTpl);
-        let filter = {"ID": parseInt(rptTpl[JV.PROP_ID])},
-            options = {"overwrite": true};
+        let filter = { "ID": parseInt(rptTpl[JV.PROP_ID]) },
+            options = { "overwrite": true };
         RptTplModel.update(filter, rptTpl, options, function (err, rst) {
             if (err) {
                 callback(req, res, true, 'The report template was updated failed!', false);
@@ -372,8 +372,8 @@ let mExport = {
         let params = JSON.parse(req.body.params),
             orgRptTplId = params.orgRptTplId,
             newID = params.newRptTplId;
-        let filter = {"ID": orgRptTplId};
-        RptTplModel.findOne(filter, '-_id').exec().then(function(baseTplRst) {
+        let filter = { "ID": orgRptTplId };
+        RptTplModel.findOne(filter, '-_id').exec().then(function (baseTplRst) {
             if (baseTplRst) {
                 let _doc = baseTplRst["_doc"];
                 _doc["ID"] = newID;
@@ -383,9 +383,9 @@ let mExport = {
                 let rptTpl = new RptTplModel(_doc);
                 rptTpl.save(function (err, actTplRst) {
                     if (err) {
-                        callback(req,res, "报表模板创建错误", "", null);
+                        callback(req, res, "报表模板创建错误", "", null);
                     } else {
-                        callback(req,res, false, "", newID);
+                        callback(req, res, false, "", newID);
                     }
                 });
             } else {
@@ -396,14 +396,16 @@ let mExport = {
 };
 
 function copyRptCfg(src, dest) {
-    dest.margins = {Left: src.margins.Left, Right: src.margins.Right, Top: src.margins.Top, Bottom: src.margins.Bottom};
+    dest.margins = { Left: src.margins.Left, Right: src.margins.Right, Top: src.margins.Top, Bottom: src.margins.Bottom };
     dest.showVerticalLine = src.showVerticalLine;
     dest.isNarrow = src.isNarrow;
     dest.fillZero = src.fillZero;
     dest.fonts = [];
     for (let font of src.fonts) {
-        dest.fonts.push({"ID": font["ID"], "CfgDispName": font["CfgDispName"], "Name": font["Name"], "FontHeight": font["FontHeight"], "FontColor": font["FontColor"],
-            "FontBold": font["FontBold"], "FontItalic": font["FontItalic"], "FontUnderline": font["FontUnderline"], "FontStrikeOut": font["FontStrikeOut"], "FontAngle": font["FontAngle"]});
+        dest.fonts.push({
+            "ID": font["ID"], "CfgDispName": font["CfgDispName"], "Name": font["Name"], "FontHeight": font["FontHeight"], "FontColor": font["FontColor"],
+            "FontBold": font["FontBold"], "FontItalic": font["FontItalic"], "FontUnderline": font["FontUnderline"], "FontStrikeOut": font["FontStrikeOut"], "FontAngle": font["FontAngle"]
+        });
     }
 }
 

+ 1 - 1
modules/std_billsGuidance_lib/controllers/libController.js

@@ -18,7 +18,7 @@ class BillsGuideLibController extends BaseController{
     //获取编办及编办清单库信息
     async getComBillsLibInfo(req, res){
         try{
-            let comBillsLibInfo = await billsGuidanceFacade.getComBillsLibInfo();
+            let comBillsLibInfo = await billsGuidanceFacade.getComBillsLibInfo(req);
             callback(req, res, 0, '', comBillsLibInfo);
         }
         catch(err) {

+ 10 - 4
modules/std_billsGuidance_lib/controllers/viewController.js

@@ -8,19 +8,25 @@
  * @version
  */
 import BaseController from "../../common/base/base_controller";
+import mongoose from 'mongoose';
 let config = require("../../../config/config.js");
-class ViewsController extends BaseController{
-    redirectMain(req, res){
+const billsGuideLibModel = mongoose.model('std_billsGuidance_lib');
+import { checkCompilationPermission } from '../../common/base/base_util';
+
+class ViewsController extends BaseController {
+    redirectMain(req, res) {
         res.render('maintain/billsGuidance_lib/html/main.html',
             {
                 userAccount: req.session.managerData.username
             });
     }
-    redirectGuidance(req, res){
+    async redirectGuidance(req, res) {
+        const lib = await billsGuideLibModel.findOne({ ID: req.query.libID, deleted: false }).lean();
+        checkCompilationPermission(req, res, lib.compilationId, '/billsGuidance/main')
         res.render('maintain/billsGuidance_lib/html/zhiyin.html',
             {
                 userAccount: req.session.managerData.username,
-                LicenseKey:config.getLicenseKey(process.env.NODE_ENV)
+                LicenseKey: config.getLicenseKey(process.env.NODE_ENV)
             });
     }
 }

+ 117 - 115
modules/std_billsGuidance_lib/facade/facades.js

@@ -32,22 +32,22 @@ module.exports = {
     testItems
 };
 
-async function getCompilationList() {
+async function getCompilationList(req) {
     let compilationModel = new CompilationModel();
-    return await compilationModel.getCompilationList();
+    return await compilationModel.getPermissionCompilationList(req);
 }
 
-async function getComBillsLibInfo() {
-    let rst = {compilationList: [], billsLibs: []};
-    let compilationList = await getCompilationList();
-    if(compilationList.length <= 0){
+async function getComBillsLibInfo(req) {
+    let rst = { compilationList: [], billsLibs: [] };
+    let compilationList = await getCompilationList(req);
+    if (compilationList.length <= 0) {
         throw '没有数据';
     }
-    else{
-        for(let compilation of compilationList){
-            rst.compilationList.push({_id: compilation._id, name: compilation.name});
+    else {
+        for (let compilation of compilationList) {
+            rst.compilationList.push({ _id: compilation._id, name: compilation.name });
         }
-        rst.billsLibs = await billsLibModel.find({deleted: false}, '-_id billsLibId billsLibName');
+        rst.billsLibs = await billsLibModel.find({ deleted: false }, '-_id billsLibId billsLibName');
         return rst;
     }
 }
@@ -57,84 +57,86 @@ async function getBillsGuideLibs(findData) {
 }
 
 //拷贝工作内容并转化为树结构,形成项目指引数据
-async function genGuidanceItems(guidanceLibId, billsLibId){
-    let bills = await stdBillsModel.find({billsLibId: billsLibId, deleted: false, 'jobs.0': {$exists: true}});
+async function genGuidanceItems(guidanceLibId, billsLibId) {
+    let bills = await stdBillsModel.find({ billsLibId: billsLibId, deleted: false, 'jobs.0': { $exists: true } });
     //设置工作内容数据
     let jobIds = [];
     let totalJobs = [];
-    for(let bill of bills){
-        for(let job of bill.jobs){
+    for (let bill of bills) {
+        for (let job of bill.jobs) {
             jobIds.push(job.id);
         }
     }
     jobIds = Array.from(new Set(jobIds));
-    if(jobIds.length > 0){
-        totalJobs = await stdBillsJobsModel.find({deleted: false, id: {$in: jobIds}});
+    if (jobIds.length > 0) {
+        totalJobs = await stdBillsJobsModel.find({ deleted: false, id: { $in: jobIds } });
     }
-    if(totalJobs.length > 0){
+    if (totalJobs.length > 0) {
         let jobIdIndex = {};//id索引
-        for(let job of totalJobs){
+        for (let job of totalJobs) {
             jobIdIndex[job.id] = job;
         }
         let insertArr = [];
-        for(let bill of bills){
+        for (let bill of bills) {
             //排序后根据serialNo转换成NextSiblingID,倒序
             bill.jobs.sort(function (a, b) {
                 let rst = 0;
-                if(a.serialNo > b.serialNo){
+                if (a.serialNo > b.serialNo) {
                     rst = -1;
                 }
-                else if(a.serialNo < b.serialNo){
+                else if (a.serialNo < b.serialNo) {
                     rst = 1;
                 }
                 return rst;
             });
             let jobNoIndex = {};//下标索引
-            for(let i = 0; i < bill.jobs.length; i++){
-                let newItem = {libID: guidanceLibId, ID: uuidV1(), ParentID: -1, NextSiblingID: jobNoIndex[i - 1] ? jobNoIndex[i - 1]['ID'] : -1,
-                    name: jobIdIndex[bill.jobs[i]['id']]['content'], type: 0, billsID: bill.ID};
+            for (let i = 0; i < bill.jobs.length; i++) {
+                let newItem = {
+                    libID: guidanceLibId, ID: uuidV1(), ParentID: -1, NextSiblingID: jobNoIndex[i - 1] ? jobNoIndex[i - 1]['ID'] : -1,
+                    name: jobIdIndex[bill.jobs[i]['id']]['content'], type: 0, billsID: bill.ID
+                };
                 jobNoIndex[i] = newItem;
-                insertArr.push({insertOne: {document: newItem}});
+                insertArr.push({ insertOne: { document: newItem } });
             }
         }
         await billsGuideItemsModel.bulkWrite(insertArr);
     }
 }
 
-async function initBillsGuideLib(updateData){
+async function initBillsGuideLib(updateData) {
     await billsGuideLibModel.create(updateData);
     await genGuidanceItems(updateData.ID, updateData.billsLibId);
 }
 
 async function updateBillsGuideLib(data) {
-    if(data.updateType === 'delete'){
+    if (data.updateType === 'delete') {
         //删除所有条目
         await billsGuideLibModel.remove(data.findData);
-        await billsGuideItemsModel.remove({libID: data.findData.ID});
+        await billsGuideItemsModel.remove({ libID: data.findData.ID });
     }
     else {
-        await billsGuideLibModel.update(data.findData, {$set: data.updateData});
-        await engLibModel.update({'billsGuidance_lib.id': data.findData.ID}, {$set: {'billsGuidance_lib.$.name': data.updateData.name}}, {multi: true});
+        await billsGuideLibModel.update(data.findData, { $set: data.updateData });
+        await engLibModel.update({ 'billsGuidance_lib.id': data.findData.ID }, { $set: { 'billsGuidance_lib.$.name': data.updateData.name } }, { multi: true });
     }
 }
 
-async function getLibWithBills(libID){
-    let guidanceLib = await getBillsGuideLibs({ID: libID});
-    if(guidanceLib.length === 0){
+async function getLibWithBills(libID) {
+    let guidanceLib = await getBillsGuideLibs({ ID: libID });
+    if (guidanceLib.length === 0) {
         throw '不存在此指引库!';
     }
-    let billsLib = await stdBillsLibModel.findOne({billsLibId: guidanceLib[0].billsLibId});
-    if(!billsLib){
+    let billsLib = await stdBillsLibModel.findOne({ billsLibId: guidanceLib[0].billsLibId });
+    if (!billsLib) {
         throw '引用的清单规则库不存在!';
     }
-    let bills = await stdBillsModel.find({billsLibId: billsLib.billsLibId}, '-_id code name ID NextSiblingID ParentID jobs items comment');
-    return {guidanceLib: guidanceLib[0], bills};
+    let bills = await stdBillsModel.find({ billsLibId: billsLib.billsLibId }, '-_id code name ID NextSiblingID ParentID jobs items comment');
+    return { guidanceLib: guidanceLib[0], bills };
 }
 
-function getAttrs(field, datas){
+function getAttrs(field, datas) {
     let rst = [];
-    for(let data of datas){
-        if(data[field]){
+    for (let data of datas) {
+        if (data[field]) {
             rst.push(data[field]);
         }
     }
@@ -143,8 +145,8 @@ function getAttrs(field, datas){
 
 //定额项目指所引用定额是否被删除
 function rationAllExist(rationItems, stdRationIdx) {
-    for(let item of rationItems){
-        if(!stdRationIdx[item.rationID]){
+    for (let item of rationItems) {
+        if (!stdRationIdx[item.rationID]) {
             return false;
         }
     }
@@ -152,71 +154,71 @@ function rationAllExist(rationItems, stdRationIdx) {
 }
 
 //将同层树结构转为顺序数组
-function chainToArr(nodes){
+function chainToArr(nodes) {
     let rst = [];
     let tempIdx = {};
     let nodeIdx = {};
     //建索引
-    for(let node of nodes){
-        tempIdx[node.ID] = {ID: node.ID, NextSiblingID: node.NextSiblingID, preSibling: null, nextSibling: null};
+    for (let node of nodes) {
+        tempIdx[node.ID] = { ID: node.ID, NextSiblingID: node.NextSiblingID, preSibling: null, nextSibling: null };
         nodeIdx[node.ID] = node;
     }
     //建链
-    for(let i in tempIdx){
+    for (let i in tempIdx) {
         let temp = tempIdx[i];
-        if(temp.NextSiblingID != -1){
+        if (temp.NextSiblingID != -1) {
             let next = tempIdx[temp.NextSiblingID];
             temp.nextSibling = next;
             next.preSibling = temp;
         }
     }
     let firstNode = null;
-    for(let i in tempIdx){
-        if(!tempIdx[i].preSibling){
+    for (let i in tempIdx) {
+        if (!tempIdx[i].preSibling) {
             firstNode = tempIdx[i];
             break;
         }
     }
     //获得顺序队列
-    while(firstNode){
+    while (firstNode) {
         rst.push(nodeIdx[firstNode.ID]);
         firstNode = firstNode.nextSibling;
     }
     return rst;
 }
 
-async function getItemsBybills(guidanceLibID, billsID){
-    const type = {job: 0, ration: 1};
-    let items = await billsGuideItemsModel.find({libID: guidanceLibID, billsID: billsID, deleted: false});
-    let rationItems = _.filter(items, {type: type.ration});
+async function getItemsBybills(guidanceLibID, billsID) {
+    const type = { job: 0, ration: 1 };
+    let items = await billsGuideItemsModel.find({ libID: guidanceLibID, billsID: billsID, deleted: false });
+    let rationItems = _.filter(items, { type: type.ration });
     let rationIds = getAttrs('rationID', rationItems);
-    let stdRations = await stdRationModel.find({ID: {$in: rationIds}, $or: [{isDeleted: null}, {isDeleted: false}]});
+    let stdRations = await stdRationModel.find({ ID: { $in: rationIds }, $or: [{ isDeleted: null }, { isDeleted: false }] });
     let stdRationIndex = {};
-    for(let stdRation of stdRations){
+    for (let stdRation of stdRations) {
         stdRationIndex[stdRation.ID] = stdRation;
     }
     //判断定额完整性
-    if(!rationAllExist(rationItems, stdRationIndex)){
+    if (!rationAllExist(rationItems, stdRationIndex)) {
         //建定额链, 排序后再清除不存在的定额,保证顺序正确性
         rationItems = chainToArr(rationItems);
         //清除已被删除的定额
         let removeIds = [];
         _.remove(rationItems, function (item) {
-            if(!stdRationIndex[item.rationID]){
+            if (!stdRationIndex[item.rationID]) {
                 removeIds.push(item.ID);
                 return true;
             }
             return false;
         });
         _.remove(items, function (item) {
-           return removeIds.includes(item.ID);
+            return removeIds.includes(item.ID);
         });
-        await billsGuideItemsModel.remove({ID: {$in: removeIds}});
+        await billsGuideItemsModel.remove({ ID: { $in: removeIds } });
         //重组树结构
         let bulkArr = [];
-        for(let i = 0, len = rationItems.length; i < len; i++){
+        for (let i = 0, len = rationItems.length; i < len; i++) {
             rationItems[i].NextSiblingID = rationItems[i + 1] ? rationItems[i + 1].ID : -1;
-            bulkArr.push({updateOne: {filter: {ID: rationItems[i].ID}, update: {$set: {NextSiblingID: rationItems[i].NextSiblingID}}}});
+            bulkArr.push({ updateOne: { filter: { ID: rationItems[i].ID }, update: { $set: { NextSiblingID: rationItems[i].NextSiblingID } } } });
         }
         await billsGuideItemsModel.bulkWrite(bulkArr);
     }
@@ -225,82 +227,82 @@ async function getItemsBybills(guidanceLibID, billsID){
 
 async function updateItems(updateDatas) {
     let bulkArr = [];
-    for(let updateData of updateDatas){
-        if(updateData.updateType === 'create'){
-            bulkArr.push({insertOne: {document: updateData.updateData}});
+    for (let updateData of updateDatas) {
+        if (updateData.updateType === 'create') {
+            bulkArr.push({ insertOne: { document: updateData.updateData } });
         }
-        else if(updateData.updateType === 'update'){
-            bulkArr.push({updateOne: {filter: updateData.findData, update: {$set: updateData.updateData}}});
+        else if (updateData.updateType === 'update') {
+            bulkArr.push({ updateOne: { filter: updateData.findData, update: { $set: updateData.updateData } } });
         }
-        else{
-            bulkArr.push({deleteOne: {filter: updateData.findData}});
+        else {
+            bulkArr.push({ deleteOne: { filter: updateData.findData } });
         }
     }
-    if(bulkArr.length > 0){
+    if (bulkArr.length > 0) {
         await billsGuideItemsModel.bulkWrite(bulkArr);
     }
 }
 
 async function testItems(libID) {
-    let items = await billsGuideItemsModel.find({libID: libID});
+    let items = await billsGuideItemsModel.find({ libID: libID });
     //删除垃圾数据
     let delBulk = [];
     let itemsMapping = {};
-    for(let item of items){
+    for (let item of items) {
         itemsMapping[item.ID] = true;
     }
-    for(let item of items){
-        if(item.ParentID != -1 && !itemsMapping[item.ParentID]){
+    for (let item of items) {
+        if (item.ParentID != -1 && !itemsMapping[item.ParentID]) {
             delBulk.push({
                 deleteOne: {
-                    filter: {ID: item.ID}
+                    filter: { ID: item.ID }
                 }
             });
         }
     }
-    if(delBulk.length > 0){
+    if (delBulk.length > 0) {
         console.log(`delBulk.length`);
         console.log(delBulk.length);
         await billsGuideItemsModel.bulkWrite(delBulk);
     }
- /*   //查找同层节点含有相同NextSiblingID的节点
-    let rst = [];
-    let billsGroup = {};
-    for(let item of items){
-        if(!billsGroup[item.billsID]){
-            billsGroup[item.billsID] = [item];
-        }
-        else {
-            billsGroup[item.billsID].push(item);
-        }
-    }
-    for(let bGroup in billsGroup){
-        let group = billsGroup[bGroup];
-        let parentGroup = {};
-        for(let gItem of group){
-            if(!parentGroup[gItem.ParentID]){
-                parentGroup[gItem.ParentID] = [gItem]
-            }
-            else {
-                parentGroup[gItem.ParentID].push(gItem);
-            }
-        }
-        for(let pGroup in parentGroup){
-            let pGroupData = parentGroup[pGroup];
-            let nextGroup = {};
-            for(let nItem of pGroupData){
-                let sameNext = _.filter(pGroupData, {NextSiblingID: nItem.NextSiblingID});
-                if(sameNext.length > 1){
-                    console.log(`sameNext`);
-                    console.log(sameNext);
-                    if(!nextGroup[nItem.ParentID + nItem.NextSiblingID]){
-                        rst.push({NextSiblingID: nItem.NextSiblingID, ParentID: nItem.ParentID});
-                        nextGroup[nItem.ParentID + nItem.NextSiblingID] = 1;
-                    }
-                }
-            }
-        }
-
-    }*/
+    /*   //查找同层节点含有相同NextSiblingID的节点
+       let rst = [];
+       let billsGroup = {};
+       for(let item of items){
+           if(!billsGroup[item.billsID]){
+               billsGroup[item.billsID] = [item];
+           }
+           else {
+               billsGroup[item.billsID].push(item);
+           }
+       }
+       for(let bGroup in billsGroup){
+           let group = billsGroup[bGroup];
+           let parentGroup = {};
+           for(let gItem of group){
+               if(!parentGroup[gItem.ParentID]){
+                   parentGroup[gItem.ParentID] = [gItem]
+               }
+               else {
+                   parentGroup[gItem.ParentID].push(gItem);
+               }
+           }
+           for(let pGroup in parentGroup){
+               let pGroupData = parentGroup[pGroup];
+               let nextGroup = {};
+               for(let nItem of pGroupData){
+                   let sameNext = _.filter(pGroupData, {NextSiblingID: nItem.NextSiblingID});
+                   if(sameNext.length > 1){
+                       console.log(`sameNext`);
+                       console.log(sameNext);
+                       if(!nextGroup[nItem.ParentID + nItem.NextSiblingID]){
+                           rst.push({NextSiblingID: nItem.NextSiblingID, ParentID: nItem.ParentID});
+                           nextGroup[nItem.ParentID + nItem.NextSiblingID] = 1;
+                       }
+                   }
+               }
+           }
+   
+       }*/
     return delBulk.length;
 }

+ 44 - 40
modules/std_bills_unitprice_feature_lib/controllers/bills_unitprice_feature_controller.js

@@ -6,105 +6,109 @@ import BaseController from "../../common/base/base_controller";
 import featureFacade from "../facade/bills_unitprice_feature_facade";
 let config = require("../../../config/config.js");
 import CompilationModel from '../../users/models/compilation_model';
+import { checkCompilationPermission } from '../../common/base/base_util';
 
-class BillsUnitPriceFeatureController extends BaseController{
+class BillsUnitPriceFeatureController extends BaseController {
     async main(request, response) {
         let compilationModel = new CompilationModel();
-        let compilationList = await compilationModel.getCompilationList({_id: 1, name: 1});
-        compilationList.unshift({_id: 'all', name: '所有'});
+        let compilationList = await compilationModel.getPermissionCompilationList(request, { _id: 1, name: 1 });
+        compilationList.unshift({ _id: 'all', name: '所有' });
         let activeCompilation = compilationList.find(compilation => compilation._id.toString() === request.query.filter);
         if (activeCompilation) {
             activeCompilation.active = 'active';
         } else {
             compilationList[0].active = 'active'
         }
-        let filter = request.query.filter ? {compilationId: request.query.filter} : {};
-        let featureLibs = await featureFacade.findByCondition(filter,{feature:0},false);
+        let filter = request.query.filter ? { compilationId: request.query.filter } : {};
+        let featureLibs = await featureFacade.findByCondition(filter, { feature: 0 }, false);
+        const compilationPermission = request.session.managerData.compilationPermission || [];
+        featureLibs = featureLibs.filter(lib => compilationPermission.includes(lib.compilationId));
         let randerData = {
-            title:'清单估算指标库',
+            title: '清单估算指标库',
             userAccount: request.session.managerData.username,
             userID: request.session.managerData.userID,
-            featureLibs:featureLibs,
+            featureLibs: featureLibs,
             compilationList: compilationList,
             layout: 'maintain/common/html/layout'
         };
         response.render("maintain/bills_unitprice_feature_lib/html/main", randerData);
     }
-    async addLib(request, response){
+    async addLib(request, response) {
         try {
             await featureFacade.addLib(request.body);
-        }catch (error) {
+        } catch (error) {
             console.log(error);
         }
         response.redirect(request.headers.referer);
     }
-    async findLib(request, response){
-        let result={
-            error:0
+    async findLib(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let conditions={'ID' : data.ID};
+            let conditions = { 'ID': data.ID };
             let resultData = await featureFacade.findByCondition(conditions);
-            result.data=resultData;
-        }catch (err){
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async saveLib(request, response){
-        let result={
-            error:0
+    async saveLib(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await featureFacade.saveLib(data);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await featureFacade.saveLib(data);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async deleteLibByID(request,response){
-        let result={
-            error:0
+    async deleteLibByID(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await featureFacade.deleteLibByID(data.ID);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await featureFacade.deleteLibByID(data.ID);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async edit(request,response){
+    async edit(request, response) {
         //先取出替换库信息:
         let libID = request.params.libID;
-        let featureLib = await featureFacade.findByCondition({'ID':libID});
-        if(featureLib){
+        let featureLib = await featureFacade.findByCondition({ 'ID': libID });
+        if (featureLib) {
+            checkCompilationPermission(request, response, featureLib.compilationId, '/billsUnitPriceFeature/main');
             let randerData = {
-                title:'清单估算指标库',
-                mainURL:'/billsUnitPriceFeature/main',
-                libName:featureLib.name,
+                title: '清单估算指标库',
+                mainURL: '/billsUnitPriceFeature/main',
+                libName: featureLib.name,
                 userAccount: request.session.managerData.username,
                 userID: request.session.managerData.userID,
-                featureList:JSON.stringify(featureLib.feature),
-                libID:libID,
-                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                featureList: JSON.stringify(featureLib.feature),
+                libID: libID,
+                LicenseKey: config.getLicenseKey(process.env.NODE_ENV),
                 layout: 'maintain/common/html/edit_layout'
             };
             response.render("maintain/bills_unitprice_feature_lib/html/edit", randerData);
-        }else {
+        } else {
             response.redirect(request.headers.referer);
         }
     }

+ 20 - 19
modules/std_glj_lib/controllers/gljMapController.js

@@ -3,21 +3,21 @@
  */
 
 import BaseController from "../../common/base/base_controller";
-import {GljMapDao} from "../models/gljMapModel";
+import { GljMapDao } from "../models/gljMapModel";
 import CompilationModel from "../../users/models/compilation_model";
 let gljMapDao = new GljMapDao();
 
-let callback = function(req, res, err, message, data){
-    res.json({error: err, message: message, data: data});
+let callback = function (req, res, err, message, data) {
+    res.json({ error: err, message: message, data: data });
 };
-class GljMapController extends BaseController{
+class GljMapController extends BaseController {
     //该费用定额下补充人材机分类树模板数据条数
     async classTemplateCount(req, res) {
         try {
             let count = await gljMapDao.classTemplateCount(req.params.compilationId);
-            callback(req, res, 0, 'success', {count});
+            callback(req, res, 0, 'success', { count });
         } catch (err) {
-            callback(req, res, 1, err, {count: 0});
+            callback(req, res, 1, err, { count: 0 });
         }
     }
     //将该标准人材机库的分类树设置为该费用定额下补充人材机分类树的模板
@@ -30,50 +30,51 @@ class GljMapController extends BaseController{
             callback(req, res, 1, err, null);
         }
     }
-    async getCompilationList(req, res){
-        try{
+    async getCompilationList(req, res) {
+        try {
             let compilationModel = new CompilationModel(), rst = [];
-            let compilationList = await compilationModel.getCompilationList();
-            if(compilationList.length <= 0){
+            let compilationList = await compilationModel.getPermissionCompilationList(req);
+            if (compilationList.length <= 0) {
                 throw '没有数据';
             }
-            else{
+            else {
 
                 compilationList.forEach(function (compilation) {
-                    rst.push({_id: compilation._id, name: compilation.name});
+                    rst.push({ _id: compilation._id, name: compilation.name });
                 })
                 callback(req, res, false, '', rst);
             }
         }
-        catch(err) {
+        catch (err) {
             callback(req, res, err, '没有数据', null);
         }
     }
-    getGljLib(req, res){
+    getGljLib(req, res) {
         let libId = req.body.libId;
         gljMapDao.getGljLib(libId, function (err, message, data) {
             callback(req, res, err, message, data);
         })
     }
-    getAllGljLib(req, res){
+    getAllGljLib(req, res) {
+        const compilationPermission = req.session.managerData.compilationPermission || [];
         gljMapDao.getAllGljLib(function (err, message, data) {
             callback(req, res, err, message, data);
-        })
+        }, compilationPermission)
     }
-    createGljLib(req, res){
+    createGljLib(req, res) {
         let gljLibObj = JSON.parse(req.body.gljLibObj);
         gljMapDao.createGljLib(gljLibObj, function (err, message, data) {
             callback(req, res, err, message, data);
         })
     }
-    renameGljLib(req, res){
+    renameGljLib(req, res) {
         let oprtor = req.body.oprtor,
             renameObj = JSON.parse(req.body.renameObj);
         gljMapDao.renameGljLib(oprtor, renameObj, function (err, message) {
             callback(req, res, err, message, null);
         })
     }
-    removeGljLib(req, res){
+    removeGljLib(req, res) {
         let oprtor = req.body.oprtor,
             libId = req.body.libId;
         gljMapDao.removeGljLib(oprtor, libId, function (err, message) {

+ 3 - 0
modules/std_glj_lib/controllers/viewsController.js

@@ -11,6 +11,8 @@ const compilationModel = mongoose.model('compilation');
 const stdGljLibModel = mongoose.model('std_glj_lib_map');
 let config = require("../../../config/config.js");
 const fs = require('fs');
+import { checkCompilationPermission } from '../../common/base/base_util';
+
 class ViewsController extends BaseController{
     redirectMain(req, res){
         res.render('maintain/std_glj_lib/html/main.html',
@@ -24,6 +26,7 @@ class ViewsController extends BaseController{
         let priceProperties = [],
             consumeAmtProperties = [];
         if(stdGljLib){
+            checkCompilationPermission(req, res, stdGljLib.compilationId, '/stdGljRepository/main');
            let compilation = await compilationModel.findOne({_id: mongoose.Types.ObjectId(stdGljLib.compilationId)});
            priceProperties = compilation.priceProperties ? compilation.priceProperties : [];
            consumeAmtProperties = compilation.consumeAmtProperties ? compilation.consumeAmtProperties : [];

+ 2 - 1
modules/std_glj_lib/models/gljMapModel.js

@@ -89,9 +89,10 @@ class GljMapDao extends OprDao{
             }
         })
     }
-    async getAllGljLib(callback){
+    async getAllGljLib(callback, compilationPermission){
         try{
             let gljLibs = await gljMapModel.find({deleted: false});
+            gljLibs = gljLibs.filter(lib => compilationPermission.includes(lib.compilationId));
             for(let gljLib of gljLibs){
                 let tempRationLibs = [];
                 for(let rationLib of gljLib.rationLibs){

+ 47 - 42
modules/structural_segment_lib/controllers/structural_segment_controller.js

@@ -6,109 +6,114 @@ import structuralSegmentFacade from "../facade/structural_segment_facade";
 let config = require("../../../config/config.js");
 let logger = require('../../../logs/log_helper').logger;
 import CompilationModel from '../../users/models/compilation_model';
+import { checkCompilationPermission } from '../../common/base/base_util';
 
-class StructuralSegmentController extends BaseController{
+class StructuralSegmentController extends BaseController {
     async main(request, response) {
-     
+
         let compilationModel = new CompilationModel();
-        let compilationList = await compilationModel.getCompilationList({_id: 1, name: 1});
-        compilationList.unshift({_id: 'all', name: '所有'});
+        let compilationList = await compilationModel.getPermissionCompilationList(request, { _id: 1, name: 1 });
+        compilationList.unshift({ _id: 'all', name: '所有' });
         let activeCompilation = compilationList.find(compilation => compilation._id.toString() === request.query.filter);
         if (activeCompilation) {
             activeCompilation.active = 'active';
         } else {
             compilationList[0].active = 'active'
         }
-        let filter = request.query.filter ? {compilationID: request.query.filter} : {};
-        let templateLibs = await structuralSegmentFacade.findByCondition(filter,{feature:0},false);
+        let filter = request.query.filter ? { compilationID: request.query.filter } : {};
+        let templateLibs = await structuralSegmentFacade.findByCondition(filter, { feature: 0 }, false);
+        const compilationPermission = request.session.managerData.compilationPermission || [];
+        templateLibs = templateLibs.filter(lib => compilationPermission.includes(lib.compilationID));
         let renderData = {
-            title:'结构分部库',
+            title: '结构分部库',
             userAccount: request.session.managerData.username,
             userID: request.session.managerData.userID,
-            templateLibs:templateLibs,
+            templateLibs: templateLibs,
             compilationList: compilationList,
             layout: 'maintain/common/html/layout'
         };
         response.render("maintain/structural_segment_lib/html/main", renderData);
     }
-    async addLib(request, response){
+    async addLib(request, response) {
         try {
             await structuralSegmentFacade.addLib(request.body);
-        }catch (error) {
+        } catch (error) {
             console.log(error);
         }
         response.redirect(request.headers.referer);
     }
-    async findLib(request, response){
-        let result={
-            error:0
+    async findLib(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let conditions={'ID' : data.ID};
+            let conditions = { 'ID': data.ID };
             let resultData = await structuralSegmentFacade.findByCondition(conditions);
-            result.data=resultData;
-        }catch (err){
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async saveLib(request, response){
-        let result={
-            error:0
+    async saveLib(request, response) {
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
             console.log(data.data);
-            let resultData= await structuralSegmentFacade.saveLib(data);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await structuralSegmentFacade.saveLib(data);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async deleteLibByID(request,response){
+    async deleteLibByID(request, response) {
         logger.info(`delete projectFeatureLib ${request.ip}`);
-        let result={
-            error:0
+        let result = {
+            error: 0
         };
         try {
             let data = request.body.data;
             data = JSON.parse(data);
-            let resultData= await structuralSegmentFacade.deleteLibByID(data.ID);
-            result.data=resultData;
-        }catch (err){
+            let resultData = await structuralSegmentFacade.deleteLibByID(data.ID);
+            result.data = resultData;
+        } catch (err) {
             console.log(err);
-            result.error=1;
+            result.error = 1;
             result.message = err.message;
         }
         response.json(result);
     }
-    async edit(request,response){
+    async edit(request, response) {
         //先取出替换库信息:
         let libID = request.params.libID;
-       
-        let structuralSegment = await structuralSegmentFacade.findByCondition({'ID':libID});
-        if(structuralSegment){
+
+        let structuralSegment = await structuralSegmentFacade.findByCondition({ 'ID': libID });
+        if (structuralSegment) {
+            checkCompilationPermission(request, response, structuralSegment.compilationID, '/structuralSegment/main');
+
             let randerData = {
-                title:'结构分部库',
-                mainURL:'/structuralSegment/main',
-                libName:structuralSegment.name,
+                title: '结构分部库',
+                mainURL: '/structuralSegment/main',
+                libName: structuralSegment.name,
                 userAccount: request.session.managerData.username,
                 userID: request.session.managerData.userID,
-                templateLibs:JSON.stringify(structuralSegment),
-                libID:libID,
-                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                templateLibs: JSON.stringify(structuralSegment),
+                libID: libID,
+                LicenseKey: config.getLicenseKey(process.env.NODE_ENV),
                 layout: 'maintain/common/html/edit_layout'
             };
             response.render("maintain/structural_segment_lib/html/edit", randerData);
-        }else {
+        } else {
             response.redirect(request.headers.referer);
         }
     }

+ 24 - 19
modules/users/controllers/login_controller.js

@@ -25,10 +25,10 @@ class LoginController extends BaseController {
      * @return {void|Mixed}
      */
     index(request, response) {
-        let title =  config[process.env.NODE_ENV].title?config[process.env.NODE_ENV].title:'养护云版';
+        let title = config[process.env.NODE_ENV].title ? config[process.env.NODE_ENV].title : '养护云版';
         let renderData = {
             layout: false,
-            title:title
+            title: title
         };
         let managerSessionData = request.session.managerData;
         if (managerSessionData !== undefined) {
@@ -72,16 +72,17 @@ class LoginController extends BaseController {
                     iconClass: 'glyphicon glyphicon-home'
                 }
             };
+            let compilationPermission = []; // 可用编办权限
             let toolMenuData = [];
             let toolPermissionController = [];
             if (managerData.super_admin !== 1) {
                 let permissionGroup = managerData.permission !== undefined && managerData.permission !== '' ?
-                    await permissionGroupModel.findDataByCondition({_id: managerData.permission}) : '';
+                    await permissionGroupModel.findDataByCondition({ _id: managerData.permission }) : '';
                 // let otherPermission = [];
                 if (permissionGroup !== undefined && permissionGroup !== '' && permissionGroup.permission !== undefined && permissionGroup.permission !== '') {
                     let permissionIdList = JSON.parse(permissionGroup.permission);
                     for (let top of permissionIdList.top) {
-                        let permissionInfo = await permissionModel.findDataByCondition({_id:top});
+                        let permissionInfo = await permissionModel.findDataByCondition({ _id: top });
                         menuData[permissionInfo.controller] = {
                             title: permissionInfo.name,
                             url: permissionInfo.url,
@@ -91,10 +92,10 @@ class LoginController extends BaseController {
                         }
                     }
                     for (let per in permissionIdList) {
-                        if (per !== 'top' && per !== 'tool') {
+                        if (per !== 'top' && per !== 'tool' && per !== 'compilation') {
                             let permissionArray = permissionIdList[per];
                             for (let pa of permissionArray) {
-                                let permissionInfo = await permissionModel.findDataByCondition({_id:pa});
+                                let permissionInfo = await permissionModel.findDataByCondition({ _id: pa });
                                 if (permissionInfo !== undefined && permissionInfo !== '') {
                                     if (permissionInfo.isMenu) {
                                         // 属于二级菜单
@@ -118,11 +119,13 @@ class LoginController extends BaseController {
                                     }
                                 }
                             }
+                        } else if (per === 'compilation') {
+                            compilationPermission = permissionIdList[per];
                         } else if (per === 'tool') {
                             // 工具里的页面权限
                             let permissionArray = permissionIdList[per];
                             for (let pa of permissionArray) {
-                                let permissionInfo = await permissionModel.findDataByCondition({_id:pa});
+                                let permissionInfo = await permissionModel.findDataByCondition({ _id: pa });
                                 if (permissionInfo.isMenu) {
                                     toolMenuData.push({
                                         title: permissionInfo.name,
@@ -144,7 +147,7 @@ class LoginController extends BaseController {
                 }
             } else {
                 // 获取数据库菜单列表
-                let menuPermissionList = await permissionModel.getList({isMenu:true});
+                let menuPermissionList = await permissionModel.getList({ isMenu: true });
                 let subList = [];
                 for (let menu of menuPermissionList) {
                     if (menu.pid === 0) {
@@ -156,16 +159,16 @@ class LoginController extends BaseController {
                             children: {},
                         }
                     } else if (menu.pid !== 4) {
-                      subList.push(menu);//防止子节点ID比父节点ID小的问题
+                        subList.push(menu);//防止子节点ID比父节点ID小的问题
                     }
                 }
-                for(let s of subList){
-                  let action = {
-                   title: s.name,
-                   url: s.url,
-                   name: s.action,
-                   };
-                   menuData[s.controller].children[s.action] = action;
+                for (let s of subList) {
+                    let action = {
+                        title: s.name,
+                        url: s.url,
+                        name: s.action,
+                    };
+                    menuData[s.controller].children[s.action] = action;
                 }
 
                 // 超级管理员二级菜单添加
@@ -177,7 +180,7 @@ class LoginController extends BaseController {
             }
             // 获取所有工具里的权限控制器名称
             let toolAllPermission = [];
-            let toolAllPermissionList = await permissionModel.getList({pid:4});
+            let toolAllPermissionList = await permissionModel.getList({ pid: 4 });
             for (let tool of toolAllPermissionList) {
                 toolAllPermission.push(tool.controller);
                 if (managerData.super_admin === 1) {
@@ -197,7 +200,8 @@ class LoginController extends BaseController {
 
             let managerSession = {
                 username: managerData.username,
-                real_name:managerData.real_name,
+                compilationPermission,
+                real_name: managerData.real_name,
                 loginTime: currentTime,
                 sessionToken: sessionToken,
                 userID: managerData.id,
@@ -219,9 +223,10 @@ class LoginController extends BaseController {
             };
             let updateResult = managerModel.updateById(managerData._id, updateData);
             if (!updateResult) {
-                throw {code: 44003, err: '更新登录信息失败!'};
+                throw { code: 44003, err: '更新登录信息失败!' };
             }
         } catch (error) {
+            console.log(error);
             responseData.error = error.code;
             responseData.msg = error.err;
         }

+ 35 - 20
modules/users/controllers/manager_controller.js

@@ -11,7 +11,8 @@ import PermissionModel from "../models/permission_model";
 import PermissionGroupModel from "../models/permission_group_model";
 import Config from "../../../config/config";
 let config = require("../../../config/config.js");
-import {default as category, List as categoryList} from "../../common/const/category_const.js";
+import { default as category, List as categoryList } from "../../common/const/category_const.js";
+import CompilationModel from '../models/compilation_model';
 
 class ManagerController extends BaseController {
 
@@ -30,7 +31,7 @@ class ManagerController extends BaseController {
         try {
             // 查找管理员用户列表
             let managerModel = new ManagerModel();
-            let total = await managerModel.count({super_admin: 0});
+            let total = await managerModel.count({ super_admin: 0 });
 
             // 分页数据
             let page = request.query.page === undefined ? 1 : request.query.page;
@@ -56,7 +57,7 @@ class ManagerController extends BaseController {
                 filter.officeName = officeInfo.name
             }
             if (request.query.permission !== undefined && request.query.permission !== '0') {
-                let permissionGroupInfo = await permissionGroupModel.findDataByCondition({_id: request.query.permission});
+                let permissionGroupInfo = await permissionGroupModel.findDataByCondition({ _id: request.query.permission });
                 filter.permissionGroupName = permissionGroupInfo.name;
             }
 
@@ -70,7 +71,7 @@ class ManagerController extends BaseController {
                         for (let p in groupPermissionList) {
                             if (p === 'top') {
                                 for (let t of groupPermissionList[p]) {
-                                    let topInfo = await permissionModel.findDataByCondition({_id:t});
+                                    let topInfo = await permissionModel.findDataByCondition({ _id: t });
                                     topPermissionList.push(topInfo.name);
                                 }
                                 break;
@@ -89,7 +90,7 @@ class ManagerController extends BaseController {
                     });
                     managerList[tmp].officeName = cate !== undefined ? cate.name : '';
 
-                    let groupInfo = managerList[tmp].permission !== '' ? await permissionGroupModel.findDataByCondition({_id:managerList[tmp].permission}) : '';
+                    let groupInfo = managerList[tmp].permission !== '' ? await permissionGroupModel.findDataByCondition({ _id: managerList[tmp].permission }) : '';
                     managerList[tmp].permissionName = groupInfo !== undefined && groupInfo !== '' ? groupInfo.name : '';
                 }
             }
@@ -105,9 +106,9 @@ class ManagerController extends BaseController {
             permissionGroupList: permissionGroupList,
             permissionGroupList2: permissionGroupList2,
             layout: 'users/views/layout/layout',
-            title : config[process.env.NODE_ENV].title?config[process.env.NODE_ENV].title:'养护云版',
+            title: config[process.env.NODE_ENV].title ? config[process.env.NODE_ENV].title : '养护云版',
             filter: filter,
-            LicenseKey:config.getLicenseKey(process.env.NODE_ENV)
+            LicenseKey: config.getLicenseKey(process.env.NODE_ENV)
         };
         response.render('users/views/manager/index', renderData);
     }
@@ -122,7 +123,7 @@ class ManagerController extends BaseController {
         let id = request.body.manager_id;
         let permission = request.body.permission !== '0' ? request.body.permission : '';
         let managerModel = new ManagerModel();
-        let result = await managerModel.updateById(id, {permission: permission});
+        let result = await managerModel.updateById(id, { permission: permission });
 
         if (!result) {
             throw '修改失败';
@@ -196,7 +197,7 @@ class ManagerController extends BaseController {
         let id = request.params.id;
 
         let managerModel = new ManagerModel();
-        let result = await managerModel.updateById(id, {can_login: canLogin});
+        let result = await managerModel.updateById(id, { can_login: canLogin });
 
         // 修改成功
         if (!result) {
@@ -217,7 +218,7 @@ class ManagerController extends BaseController {
         try {
             // 查找对应超级管理员数据
             let managerModel = new ManagerModel();
-            adminData = await managerModel.findDataByCondition({username: 'admin'});
+            adminData = await managerModel.findDataByCondition({ username: 'admin' });
 
         } catch (error) {
             console.log(error);
@@ -225,9 +226,9 @@ class ManagerController extends BaseController {
 
         let renderData = {
             adminData: adminData,
-            title : config[process.env.NODE_ENV].title?config[process.env.NODE_ENV].title:'养护云版',
+            title: config[process.env.NODE_ENV].title ? config[process.env.NODE_ENV].title : '养护云版',
             layout: 'users/views/layout/layout',
-            LicenseKey:config.getLicenseKey(process.env.NODE_ENV)
+            LicenseKey: config.getLicenseKey(process.env.NODE_ENV)
         };
         response.render('users/views/manager/save', renderData);
     }
@@ -284,17 +285,25 @@ class ManagerController extends BaseController {
         let groupList = [];
         let topPermissionList = [];
         let permissionList = [];
+        let compilationList = [];
         try {
+            // 获取编办列表
+            const compilationModel = new CompilationModel();
+            compilationList = await compilationModel.getCompilationList({ _id: 1, name: 1 });
+
+            console.log('enrerererrer');
             // 获取最高级权限列表
             let permissionModel = new PermissionModel();
-            topPermissionList = await permissionModel.getList({pid:0});
+            topPermissionList = await permissionModel.getList({ pid: 0 });
+
+            console.log('enrerererrer');
 
             // 获取所有权限列表,按排序
             permissionList = topPermissionList;
             for (let index in permissionList) {
-                let count = await permissionModel.count({pid:permissionList[index].ID});
+                let count = await permissionModel.count({ pid: permissionList[index].ID });
                 if (count > 0) {
-                    permissionList[index].secondPermissionList = await permissionModel.getList({pid: permissionList[index].ID});
+                    permissionList[index].secondPermissionList = await permissionModel.getList({ pid: permissionList[index].ID });
                 } else {
                     permissionList[index].secondPermissionList = [];
                 }
@@ -305,6 +314,9 @@ class ManagerController extends BaseController {
             let permissionGroupModel = new PermissionGroupModel();
             let total = await permissionGroupModel.count();
 
+            console.log(`total`);
+            console.log(total);
+
             // 分页数据
             let page = request.query.page === undefined ? 1 : request.query.page;
             pageData = {
@@ -320,14 +332,14 @@ class ManagerController extends BaseController {
             if (groupList.length > 0) {
                 let managerModel = new ManagerModel();
                 for (let tmp in groupList) {
-                    let managerCount = await managerModel.count({permission: groupList[tmp]._id});
+                    let managerCount = await managerModel.count({ permission: groupList[tmp]._id });
                     groupList[tmp].manager_count = managerCount;
                     let groupPermissionList = JSON.parse(groupList[tmp].permission);
                     for (let p in groupPermissionList) {
                         if (p === 'top') {
                             let topPermissionList = [];
                             for (let t of groupPermissionList[p]) {
-                                let topInfo = await permissionModel.findDataByCondition({_id:t});
+                                let topInfo = await permissionModel.findDataByCondition({ _id: t });
                                 topPermissionList.push(topInfo.name);
                             }
                             groupList[tmp].top_name = topPermissionList.join(',');
@@ -338,14 +350,17 @@ class ManagerController extends BaseController {
         } catch (error) {
 
         }
+        console.log(`groupList`);
+        console.log(groupList);
         let renderData = {
+            compilationList,
             groupList: groupList,
             topPermissionList: topPermissionList,
             permissionList: permissionList,
             pages: pageData,
-            title : config[process.env.NODE_ENV].title?config[process.env.NODE_ENV].title:'养护云版',
+            title: config[process.env.NODE_ENV].title ? config[process.env.NODE_ENV].title : '养护云版',
             layout: 'users/views/layout/layout',
-            LicenseKey:config.getLicenseKey(process.env.NODE_ENV)
+            LicenseKey: config.getLicenseKey(process.env.NODE_ENV)
         };
         response.render('users/views/manager/authority', renderData);
     }
@@ -394,7 +409,7 @@ class ManagerController extends BaseController {
             // 并清空用户所在权限组
             let managerModel = new ManagerModel();
             await managerModel.updateByPermission(id);
-        } catch(err) {
+        } catch (err) {
             throw err;
         }
         response.redirect(request.headers.referer);

+ 10 - 0
modules/users/models/compilation_model.js

@@ -59,6 +59,16 @@ class CompilationModel extends BaseModel {
         return [];
     }
 
+    // 根据用户权限过滤编办
+    async getPermissionCompilationList(req, fields = null) {
+        const compilationPermission = req.session.managerData.compilationPermission || [];
+        console.log(`req.session.managerData`);
+        console.log(req.session.managerData.compilationPermission);
+        const compilationList = await this.getCompilationList(fields);
+        console.log(compilationList);
+        return compilationList.filter(item => compilationPermission.includes(item._id) || compilationPermission.includes(item._id.toString()));
+    }
+
     /**
      * 获取编办列表
      *

+ 1 - 1
web/maintain/ration_repository/anzhuang.html

@@ -13,7 +13,7 @@
     <link rel="stylesheet" href="/lib/jquery-contextmenu/jquery.contextMenu.css">
 </head>
 
-<body>
+<body style="overflow: hidden;">
     <div class="header">
         <nav class="navbar navbar-toggleable-lg navbar-light bg-faded p-0 ">
             <span class="header-logo px-2">Smartcost</span>

+ 3 - 1
web/users/js/manager.js

@@ -115,7 +115,9 @@ $(document).ready(function() {
         let topid = $(this).attr('data-controller');
         if($(this).is(':checked')) {
             // 选中
-            $('#'+ topid).prop('checked', true);
+            if (topid !== 'compilation') {
+                $('#' + topid).prop('checked', true);
+            }
         } else {
             // 取消选中(排除工具这个独立分离的url)
             if (topid !== 'tool') {

+ 10 - 0
web/users/views/manager/authority.html

@@ -83,6 +83,16 @@
                     </div>
                     <% } %>
                     <% } %>
+                                        <div class="form-group">
+                        <label for="title">编办权限</label>
+                        <div class="checkbox" id="compilation-area" style="max-height: 150px; overflow: auto; margin-top: 0 !important;">
+                            <% for(let compilation of compilationList){ %>
+                            <label>
+                                <input type="checkbox" data-controller="compilation" name="permission_compilation[]" value="<%= compilation._id %>"> <%= compilation.name %>
+                            </label>&nbsp;
+                            <% } %>
+                        </div>
+                    </div>
                 </div>
                 <div class="modal-footer">
                     <button type="submit" class="btn btn-primary">确定</button>