Browse Source

feat: 增加编办权限

vian 1 year ago
parent
commit
393e83d729
29 changed files with 462 additions and 340 deletions
  1. 1 1
      modules/bills_lib/controllers/stdBillsLib_permissionController.js
  2. 5 1
      modules/calc_program_lib/controllers/calc_program_controller.js
  3. 1 2
      modules/common/base/base_controller.js
  4. 6 0
      modules/common/base/base_util.js
  5. 22 22
      modules/common/helper/mongoose_helper.js
  6. 5 1
      modules/fee_rate_lib/controllers/fee_rate_controller.js
  7. 5 0
      modules/main_col_lib/controllers/main_col_controller.js
  8. 5 0
      modules/material_replace_lib/controllers/material_replace_controller.js
  9. 5 1
      modules/monomer_template_lib/controllers/monomer_template_controller.js
  10. 6 2
      modules/price_info_lib/controllers/index.js
  11. 5 1
      modules/project_feature_lib/controllers/project_feature_controller.js
  12. 34 34
      modules/ration_repository/controllers/ration_repository_controller.js
  13. 33 23
      modules/ration_repository/controllers/repository_views_controller.js
  14. 1 1
      modules/reports/controllers/rpt_tpl_controller.js
  15. 6 1
      modules/single_info_lib/controllers/single_info_controller.js
  16. 48 46
      modules/std_billsGuidance_lib/controllers/libController.js
  17. 7 1
      modules/std_billsGuidance_lib/controllers/viewController.js
  18. 52 52
      modules/std_billsGuidance_lib/facade/facades.js
  19. 20 19
      modules/std_glj_lib/controllers/gljMapController.js
  20. 2 0
      modules/std_glj_lib/controllers/viewsController.js
  21. 89 88
      modules/std_glj_lib/models/gljMapModel.js
  22. 6 1
      modules/structural_segment_lib/controllers/structural_segment_controller.js
  23. 28 18
      modules/users/controllers/login_controller.js
  24. 12 2
      modules/users/controllers/manager_controller.js
  25. 10 0
      modules/users/models/compilation_model.js
  26. 2 1
      modules/users/models/permission_group_model.js
  27. 1 1
      web/maintain/ration_repository/anzhuang.html
  28. 21 19
      web/users/js/manager.js
  29. 24 2
      web/users/views/manager/authority.html

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

@@ -12,7 +12,7 @@ class billsLibPermContr extends baseController{
     async getCompilationList(req, res){
         try{
             let compilationModel = new CompilationModel(), rst = [];
-            let compilationList = await compilationModel.getCompilationList();
+            let compilationList = await compilationModel.getPermissionCompilationList(req);
             if(compilationList.length <= 0){
                 throw '没有数据';
             }

+ 5 - 1
modules/calc_program_lib/controllers/calc_program_controller.js

@@ -6,11 +6,12 @@ let config = require("../../../config/config.js");
 let logger = require('../../../logs/log_helper').logger;
 import calcProgramFacade from "../facade/calc_program_facade";
 import CompilationModel from '../../users/models/compilation_model';
+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});
+        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) {
@@ -20,6 +21,8 @@ class CalcProgramController extends BaseController {
         }
         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,
@@ -93,6 +96,7 @@ class CalcProgramController extends BaseController {
         let libID = request.params.libID;
         let programLib = await calcProgramFacade.findByCondition({'ID':libID});
         if(programLib){
+            checkCompilationPermission(request, response, programLib.compilationId, '/calcProgram/main');
             let randerData = {
                 title:'计算程序模板库',
                 mainURL:'/calcProgram/main',

+ 1 - 2
modules/common/base/base_controller.js

@@ -87,7 +87,7 @@ class BaseController {
                 let currentControllerPermission = '';
                 // let currentActionPermission = true;
 
-                if(withoutPermission.indexOf(controller) < 0) {
+                if (withoutPermission.indexOf(controller) < 0) {
                     if (MenuPermission.hasOwnProperty(controller)) {
                         currentControllerPermission = MenuPermission[controller];
 
@@ -171,7 +171,6 @@ class BaseController {
 
         next();
     }
-
 }
 
 export default BaseController;

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

+ 22 - 22
modules/common/helper/mongoose_helper.js

@@ -55,7 +55,7 @@ class MongooseHelper {
         let self = this;
         let limit = 0;
         let skip = 0;
-        let sort = {_id:1};
+        let sort = { _id: 1 };
         if (option !== null && Object.keys(option).length > 0) {
             limit = option.pageSize !== undefined ? option.pageSize : limit;
             skip = option.offset !== undefined ? option.offset : skip;
@@ -84,7 +84,7 @@ class MongooseHelper {
     findWithPopulate(conditions, fields = null, populate = '') {
         let self = this;
         return new Promise(function (resolve, reject) {
-            self.model.find(conditions, fields).populate(populate).exec(function(error, data) {
+            self.model.find(conditions, fields).populate(populate).exec(function (error, data) {
                 if (error) {
                     reject(error);
                 } else {
@@ -105,13 +105,13 @@ class MongooseHelper {
     findAndModify(condition, update, options) {
         let self = this;
         return new Promise(function (resolve, reject) {
-            self.model.findOneAndUpdate(condition, update, options, function(error, data) {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve(data);
-                    }
-                });
+            self.model.findOneAndUpdate(condition, update, options, function (error, data) {
+                if (error) {
+                    reject(error);
+                } else {
+                    resolve(data);
+                }
+            });
         });
     }
 
@@ -124,7 +124,7 @@ class MongooseHelper {
     create(data) {
         let self = this;
         return new Promise(function (resolve, reject) {
-            self.model.create(data, function(error, data) {
+            self.model.create(data, function (error, data) {
                 if (error) {
                     reject(error);
                 } else {
@@ -142,8 +142,8 @@ class MongooseHelper {
      */
     count(condition) {
         let self = this;
-        return new Promise(function(resolve, reject) {
-            self.model.count(condition, function(error, data) {
+        return new Promise(function (resolve, reject) {
+            self.model.count(condition, function (error, data) {
                 if (error) {
                     reject(error);
                 } else {
@@ -161,9 +161,9 @@ class MongooseHelper {
      */
     delete(condition) {
         let self = this;
-        return new Promise(function(resolve, reject) {
+        return new Promise(function (resolve, reject) {
             condition = self._convertId(condition);
-            self.model.remove(condition, function(error, data) {
+            self.model.remove(condition, function (error, data) {
                 if (error) {
                     reject(error);
                 } else {
@@ -182,9 +182,9 @@ class MongooseHelper {
      */
     update(condition, updateData) {
         let self = this;
-        return new Promise(function(resolve, reject) {
+        return new Promise(function (resolve, reject) {
             condition = self._convertId(condition);
-            self.model.update(condition, {$set: updateData}, function(error, data) {
+            self.model.update(condition, { $set: updateData }, function (error, data) {
                 if (error) {
                     reject(error);
                 } else {
@@ -203,9 +203,9 @@ class MongooseHelper {
      */
     incr(condition, incData) {
         let self = this;
-        return new Promise(function(resolve, reject) {
+        return new Promise(function (resolve, reject) {
             condition = self._convertId(condition);
-            self.model.update(condition, {$inc: incData}, function(error, data) {
+            self.model.update(condition, { $inc: incData }, function (error, data) {
                 if (error) {
                     reject(error);
                 } else {
@@ -224,9 +224,9 @@ class MongooseHelper {
      */
     addToSet(condition, insertData) {
         let self = this;
-        return new Promise(function(resolve, reject) {
+        return new Promise(function (resolve, reject) {
             condition = self._convertId(condition);
-            self.model.update(condition, {$addToSet: insertData}, function(error, data) {
+            self.model.update(condition, { $addToSet: insertData }, function (error, data) {
                 if (error) {
                     reject(error);
                 } else {
@@ -245,9 +245,9 @@ class MongooseHelper {
      */
     deleteSet(condition, deleteData) {
         let self = this;
-        return new Promise(function(resolve, reject) {
+        return new Promise(function (resolve, reject) {
             condition = self._convertId(condition);
-            self.model.update(condition, {$pull: deleteData}, function(error, data) {
+            self.model.update(condition, { $pull: deleteData }, function (error, data) {
                 if (error) {
                     reject(error);
                 } else {

+ 5 - 1
modules/fee_rate_lib/controllers/fee_rate_controller.js

@@ -6,11 +6,12 @@ let config = require("../../../config/config.js");
 let logger = require('../../../logs/log_helper').logger;
 import feeRateFacade from "../facade/fee_rate_facade";
 import CompilationModel from '../../users/models/compilation_model';
+import { checkCompilationPermission } from '../../common/base/base_util';
 
 class FeeRateController extends BaseController{
     async main(request, response) {
         let compilationModel = new CompilationModel();
-        let compilationList = await compilationModel.getCompilationList({_id: 1, name: 1});
+        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) {
@@ -20,6 +21,8 @@ class FeeRateController extends BaseController{
         }
         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:'费率标准库',
             userAccount: request.session.managerData.username,
@@ -93,6 +96,7 @@ class FeeRateController extends BaseController{
         let libID = request.params.libID;
         let feeRateLib = await feeRateFacade.findByCondition({'ID':libID});
         if(feeRateLib){
+            checkCompilationPermission(request, response, feeRateLib.compilationId, '/feeRate/main');
             let randerData = {
                 title:'费率标准库',
                 mainURL:'/feeRate/main',

+ 5 - 0
modules/main_col_lib/controllers/main_col_controller.js

@@ -10,11 +10,15 @@ import BaseController from "../../common/base/base_controller";
 import mainColFacade from "../facade/main_col_facade";
 let config = require("../../../config/config.js");
 let logger = require('../../../logs/log_helper').logger;
+import { checkCompilationPermission } from '../../common/base/base_util';
+
 
 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:'列设置',
             userAccount: request.session.managerData.username,
@@ -96,6 +100,7 @@ class MainColController extends BaseController {
         let libID = request.params.libID;
         let colLib = await mainColFacade.getLibByID(libID);
         if(colLib){
+            checkCompilationPermission(request, response, colLib.compilationId, '/mainTreeCol/main')
             let randerData = {
                 title:'列设置库',
                 mainURL:'/mainTreeCol/main',

+ 5 - 0
modules/material_replace_lib/controllers/material_replace_controller.js

@@ -5,6 +5,8 @@ import BaseController from "../../common/base/base_controller";
 import materialFacade from "../facade/material_replace_facade";
 let config = require("../../../config/config.js");
 let logger = require('../../../logs/log_helper').logger;
+import { checkCompilationPermission } from '../../common/base/base_util';
+
 
 class ReplaceController extends BaseController{
     /**
@@ -16,6 +18,8 @@ class ReplaceController extends BaseController{
      */
     async main(request, response) {
         let materialLibs = await materialFacade.findByCondition({},null,false);
+        const compilationPermission = request.session.managerData.compilationPermission || [];
+        materialLibs = materialLibs.filter(lib => compilationPermission.includes(lib.compilationId));
         let randerData = {
             title:'材料替换库',
             userAccount: request.session.managerData.username,
@@ -30,6 +34,7 @@ class ReplaceController extends BaseController{
         let libID = request.params.libID;
         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);

+ 5 - 1
modules/monomer_template_lib/controllers/monomer_template_controller.js

@@ -3,6 +3,7 @@
  */
 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';
@@ -13,7 +14,7 @@ class MonomerTemplateController extends BaseController{
     async main(request, response) {
      
         let compilationModel = new CompilationModel();
-        let compilationList = await compilationModel.getCompilationList({_id: 1, name: 1});
+        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) {
@@ -23,6 +24,8 @@ class MonomerTemplateController extends BaseController{
         }
         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:'单体模板库',
             userAccount: request.session.managerData.username,
@@ -99,6 +102,7 @@ class MonomerTemplateController extends BaseController{
         let monomerTemplate = await monomerTemplateFacade.findByCondition({'ID':libID});
         
         if(monomerTemplate){
+            checkCompilationPermission(request, response, monomerTemplate.compilationID, '/monomerTemplate/main');
             let randerData = {
                 title:'单体模板库',
                 mainURL:'/monomerTemplate/main',

+ 6 - 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,7 @@ 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,

+ 5 - 1
modules/project_feature_lib/controllers/project_feature_controller.js

@@ -3,6 +3,7 @@
  */
 import BaseController from "../../common/base/base_controller";
 import featureFacade from "../facade/project_feature_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';
@@ -39,7 +40,7 @@ class FeatureController extends BaseController{
         }
         //
         let compilationModel = new CompilationModel();
-        let compilationList = await compilationModel.getCompilationList({_id: 1, name: 1});
+        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) {
@@ -49,6 +50,8 @@ class FeatureController extends BaseController{
         }
         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:'工程特征库',
             userAccount: request.session.managerData.username,
@@ -122,6 +125,7 @@ class FeatureController extends BaseController{
         let libID = request.params.libID;
         let featureLib = await featureFacade.findByCondition({'ID':libID});
         if(featureLib){
+            checkCompilationPermission(request, response, featureLib.compilationId, '/projectFeature/main');
             let randerData = {
                 title:'工程特征库',
                 mainURL:'/projectFeature/main',

+ 34 - 34
modules/ration_repository/controllers/ration_repository_controller.js

@@ -8,8 +8,8 @@ import CompilationModel from "../../users/models/compilation_model";
 const gljMapModel = mongoose.model('std_glj_lib_map');
 const compilationModel = mongoose.model('compilation');
 import async from "async";
-var callback = function(req, res, err, message, data){
-    res.json({error: err, message: message, data: data});
+var callback = function (req, res, err, message, data) {
+    res.json({ error: err, message: message, data: data });
 };
 // 上传控件
 const multiparty = require("multiparty");
@@ -33,41 +33,41 @@ class RationRepositoryController extends baseController {
             // fs.writeFile(`D:/GitHome/ConstructionOperation/tmp/testDataResult_${(new Date()).getTime()}.js`, JSON.stringify(rst.sectionTree), { 'flag': 'a' }, function(err){
             //     if(err) throw err;
             // });
-            res.json({error: 0, message: 'success', data: rst});
+            res.json({ error: 0, message: 'success', data: rst });
         } catch (err) {
             console.log(err);
-            res.json({error: 1, message: 'fail', data: null});
+            res.json({ error: 1, message: 'fail', data: null });
         }
     }
 
-    async getRationLibsByCompilation(req, res){
-        try{
+    async getRationLibsByCompilation(req, res) {
+        try {
             let data = JSON.parse(req.body.data);
             let rationLibs = await rationRepository.getRationLibsByCompilation(data.compilationId);
             callback(req, res, 0, '', rationLibs);
         }
-        catch(err){
+        catch (err) {
             callback(req, res, 1, err, null);
         }
     }
     async getCompilationList(req, res) {
         try {
             let compilationModel = new CompilationModel(), rst = [];
-            let compilationList = await compilationModel.getCompilationList();
+            let compilationList = await compilationModel.getPermissionCompilationList(req);
             if (compilationList.length <= 0) {
                 throw '没有数据';
             }
             else {
 
                 compilationList.forEach(function (compilation) {
-                    rst.push({_id: compilation._id, name: compilation.name});
+                    rst.push({ _id: compilation._id, name: compilation.name });
                 });
                 //获得相关编办下的工料机库
                 let parallelFucs = [];
                 for (let i = 0; i < rst.length; i++) {
                     parallelFucs.push((function (obj) {
                         return function (cb) {
-                            gljMapModel.find({compilationId: obj._id, deleted: false}, function (err, result) {
+                            gljMapModel.find({ compilationId: obj._id, deleted: false }, function (err, result) {
                                 if (err) {
                                     cb(err);
                                 }
@@ -89,7 +89,7 @@ class RationRepositoryController extends baseController {
                                 gljLibsRst.push(result[i][j]);
                             }
                         }
-                        callback(req, res, false, '', {compilation: rst, gljLibs: gljLibsRst});
+                        callback(req, res, false, '', { compilation: rst, gljLibs: gljLibsRst });
                     }
                 })
             }
@@ -109,10 +109,10 @@ class RationRepositoryController extends baseController {
             }
         })
     }
-    getRationLib(req, res){
+    getRationLib(req, res) {
         let data = JSON.parse(req.body.data);
         let libId = data.libId;
-        rationRepository.getRationLib(libId, function(err, data){
+        rationRepository.getRationLib(libId, function (err, data) {
             if (data) {
                 callback(req, res, err, "has data", data);
             } else {
@@ -182,7 +182,7 @@ class RationRepositoryController extends baseController {
             msg: ''
         };
         const allowHeader = [
-            'application/vnd.ms-excel', 
+            'application/vnd.ms-excel',
             'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
             'application/octet-stream'
         ];
@@ -191,8 +191,8 @@ class RationRepositoryController extends baseController {
         };
         const form = new multiparty.Form(uploadOption);
         let uploadFullName
-        form.parse(request, async function(err, fields, files) {
-            try{
+        form.parse(request, async function (err, fields, files) {
+            try {
                 const rationRepId = fields.rationRepId !== undefined && fields.rationRepId.length > 0 ?
                     fields.rationRepId[0] : 0;
                 const type = fields.type !== undefined && fields.type.length > 0 ?
@@ -236,14 +236,14 @@ class RationRepositoryController extends baseController {
                     responseData.msg = failGLJList.join("<br/>");
                 }
                 // 删除文件
-                if(uploadFullName && fs.existsSync(uploadFullName)){
+                if (uploadFullName && fs.existsSync(uploadFullName)) {
                     fs.unlink(uploadFullName);
                 }
                 response.json(responseData);
             }
-            catch (error){
+            catch (error) {
                 console.log(error);
-                if(uploadFullName && fs.existsSync(uploadFullName)){
+                if (uploadFullName && fs.existsSync(uploadFullName)) {
                     fs.unlink(uploadFullName);
                 }
                 responseData.err = 1;
@@ -269,7 +269,7 @@ class RationRepositoryController extends baseController {
                 throw '参数错误';
             }
             const excelData = await rationItem.exportExcelData(rationRepId);
-            const buffer = excel.build([{name: "sheet", data: excelData}]);
+            const buffer = excel.build([{ name: "sheet", data: excelData }]);
             const filePath = './public/export.xlsx';
             fs.writeFileSync(filePath, buffer, 'binary');
             const stats = fs.statSync(filePath);
@@ -286,12 +286,12 @@ class RationRepositoryController extends baseController {
         }
     }
     //一键重新计算所有定额数据
-    async reCalcAll(req, res){
-        try{
+    async reCalcAll(req, res) {
+        try {
             let data = JSON.parse(req.body.data);
             let rationRepId = data.rationRepId;
-            let rationLib = await rationLibModel.findOne({ID: rationRepId, $or: [{deleted: null},{deleted: false}]});
-            if(!rationLib){
+            let rationLib = await rationLibModel.findOne({ ID: rationRepId, $or: [{ deleted: null }, { deleted: false }] });
+            if (!rationLib) {
                 throw '不存在此定额库';
             }
             let task = [];
@@ -309,26 +309,26 @@ class RationRepositoryController extends baseController {
                 stdGLJListByID[tmp.ID] = tmp;
             }
             //获取所有的定额
-            let allRations = await rationItemModel.find({rationRepId: rationRepId, $or: [{isDeleted: false}, {isDeleted: null}]});
-            let compilation = await compilationModel.findOne({_id: mongoose.Types.ObjectId(rationLib.compilationId)});
+            let allRations = await rationItemModel.find({ rationRepId: rationRepId, $or: [{ isDeleted: false }, { isDeleted: null }] });
+            let compilation = await compilationModel.findOne({ _id: mongoose.Types.ObjectId(rationLib.compilationId) });
             let tempUrl = compilation.overWriteUrl ? req.app.locals.rootDir + compilation.overWriteUrl : req.app.locals.rootDir;
-            let absoluteUrl = fs.existsSync(tempUrl) && fs.statSync(tempUrl).isFile()? tempUrl : null;
-            for(let ration of allRations){
+            let absoluteUrl = fs.existsSync(tempUrl) && fs.statSync(tempUrl).isFile() ? tempUrl : null;
+            for (let ration of allRations) {
                 rationItem.calcForRation(stdGLJListByID, ration, absoluteUrl);
                 task.push({
                     updateOne: {
-                        filter: {ID: ration.ID},
-                        update: {$set: {labourPrice: ration.labourPrice, materialPrice: ration.materialPrice, machinePrice: ration.machinePrice, basePrice: ration.basePrice}}
+                        filter: { ID: ration.ID },
+                        update: { $set: { labourPrice: ration.labourPrice, materialPrice: ration.materialPrice, machinePrice: ration.machinePrice, basePrice: ration.basePrice } }
                     }
                 });
             }
-            if(task.length > 0){
+            if (task.length > 0) {
                 await rationItemModel.bulkWrite(task);
             }
-            res.json({error: 0, message: 'success', data: null});
+            res.json({ error: 0, message: 'success', data: null });
         }
-        catch (err){
-            res.json({error: 1, message: err, data: null});
+        catch (err) {
+            res.json({ error: 1, message: err, data: null });
         }
     }
 

+ 33 - 23
modules/ration_repository/controllers/repository_views_controller.js

@@ -2,21 +2,28 @@
  * Created by Zhong on 2017/8/3.
  */
 import BaseController from "../../common/base/base_controller";
+import { checkCompilationPermission } from '../../common/base/base_util';
 import CompilationModel from '../../users/models/compilation_model';
 let config = require("../../../config/config.js");
 import mongoose from 'mongoose';
 const compilationModel = mongoose.model('compilation');
 const rationLibModel = mongoose.model('std_ration_lib_map');
 const fs = require('fs');
-class ViewsController extends BaseController{
-    async redirectMain(req, res){
-        let filter = req.query.filter ? {compilationId: req.query.filter} : null;
-        let allLibs = await rationLibModel.find({}, {_id: 0, recentOpr: 0}),
+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});
-        compilationList.unshift({_id: 'all', name: '所有'});
+        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) {
             activeCompilation.active = 'active';
@@ -32,7 +39,7 @@ class ViewsController extends BaseController{
                 userID: req.session.managerData.userID
             });
     }
-    async redirectRation(req, res){
+    async redirectRation(req, res) {
         const repId = req.query.repository;
         const locked = req.query.locked || 'true';
         const redirectGlj = `/rationRepository/lmm?repository=${repId}&locked=${locked}`;
@@ -40,12 +47,13 @@ class ViewsController extends BaseController{
         const redirectInstallation = `/rationRepository/installation?repository=${repId}&locked=${locked}`;
         let overWriteUrl = null;
         let priceProperties = [];
-        let stdRationLib = await rationLibModel.findOne({ID: repId});
-        if(stdRationLib){
-            let compilation = await compilationModel.findOne({_id: mongoose.Types.ObjectId(stdRationLib.compilationId)});
+        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;
-            overWriteUrl = fs.existsSync(absoluteUrl) && fs.statSync(absoluteUrl).isFile()? compilation.overWriteUrl : null;
+            overWriteUrl = fs.existsSync(absoluteUrl) && fs.statSync(absoluteUrl).isFile() ? compilation.overWriteUrl : null;
         }
         res.render('maintain/ration_repository/dinge.html',
             {
@@ -54,12 +62,12 @@ class ViewsController extends BaseController{
                 redirectGlj: redirectGlj,
                 redirectCoe: redirectCoe,
                 redirectInstallation: redirectInstallation,
-                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                LicenseKey: config.getLicenseKey(process.env.NODE_ENV),
                 priceProperties: JSON.stringify(priceProperties),
                 overWriteUrl: overWriteUrl
             });
     }
-    async redirectGlj(req, res){
+    async redirectGlj(req, res) {
         const repId = req.query.repository;
         const locked = req.query.locked || 'true';
         const redirectRation = `/rationRepository/ration?repository=${repId}&locked=${locked}`;
@@ -67,12 +75,13 @@ class ViewsController extends BaseController{
         const redirectInstallation = `/rationRepository/installation?repository=${repId}&locked=${locked}`;
         let overWriteUrl = null;
         let priceProperties = [];
-        let stdRationLib = await rationLibModel.findOne({ID: repId});
-        if(stdRationLib){
-            let compilation = await compilationModel.findOne({_id: mongoose.Types.ObjectId(stdRationLib.compilationId)});
+        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;
-            overWriteUrl = fs.existsSync(absoluteUrl) && fs.statSync(absoluteUrl).isFile()? compilation.overWriteUrl : null;
+            overWriteUrl = fs.existsSync(absoluteUrl) && fs.statSync(absoluteUrl).isFile() ? compilation.overWriteUrl : null;
         }
         res.render('maintain/ration_repository/gongliao.html',
             {
@@ -81,12 +90,12 @@ class ViewsController extends BaseController{
                 redirectRation: redirectRation,
                 redirectCoe: redirectCoe,
                 redirectInstallation: redirectInstallation,
-                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                LicenseKey: config.getLicenseKey(process.env.NODE_ENV),
                 priceProperties: JSON.stringify(priceProperties),
                 rationLib: stdRationLib
             });
     }
-    redirectCoeList(req, res){
+    redirectCoeList(req, res) {
         const repId = req.query.repository;
         const locked = req.query.locked || 'true';
         const redirectGlj = `/rationRepository/lmm?repository=${repId}&locked=${locked}`;
@@ -99,16 +108,17 @@ class ViewsController extends BaseController{
                 redirectGlj: redirectGlj,
                 redirectRation: redirectRation,
                 redirectInstallation: redirectInstallation,
-                LicenseKey:config.getLicenseKey(process.env.NODE_ENV)
+                LicenseKey: config.getLicenseKey(process.env.NODE_ENV)
             });
     }
-    async redirectInstallation(req, res){
+    async redirectInstallation(req, res) {
         const repId = req.query.repository;
         const locked = req.query.locked || 'true';
         const redirectGlj = `/rationRepository/lmm?repository=${repId}&locked=${locked}`;
         const redirectCoe = `/rationRepository/coeList?repository=${repId}&locked=${locked}`;
         const redirectRation = `/rationRepository/ration?repository=${repId}&locked=${locked}`;
-        let stdRationLib = await rationLibModel.findOne({ID: repId});
+        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,
@@ -116,7 +126,7 @@ class ViewsController extends BaseController{
                 redirectGlj: redirectGlj,
                 redirectCoe: redirectCoe,
                 redirectRation: redirectRation,
-                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                LicenseKey: config.getLicenseKey(process.env.NODE_ENV),
                 rationLib: stdRationLib
             });
     }

+ 1 - 1
modules/reports/controllers/rpt_tpl_controller.js

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

+ 6 - 1
modules/single_info_lib/controllers/single_info_controller.js

@@ -6,12 +6,13 @@ import singleInfoFacade from "../facade/single_info_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 singleInfoController extends BaseController{
     async main(request, response) {
      
         let compilationModel = new CompilationModel();
-        let compilationList = await compilationModel.getCompilationList({_id: 1, name: 1});
+        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) {
@@ -21,6 +22,8 @@ class singleInfoController extends BaseController{
         }
         let filter = request.query.filter ? {compilationID: request.query.filter} : {};
         let templateLibs = await singleInfoFacade.findByCondition(filter,false);
+        const compilationPermission = request.session.managerData.compilationPermission || [];
+        templateLibs = templateLibs.filter(lib => compilationPermission.includes(lib.compilationID));
         let renderData = {
             title:'单项信息库',
             userAccount: request.session.managerData.username,
@@ -29,6 +32,7 @@ class singleInfoController extends BaseController{
             compilationList: compilationList,
             layout: 'maintain/common/html/layout'
         };
+        
         response.render("maintain/single_info_lib/html/main", renderData);
     }
     async addLib(request, response){
@@ -96,6 +100,7 @@ class singleInfoController extends BaseController{
        
         let singleInfo = await singleInfoFacade.findByCondition({'ID':libID});
         if(singleInfo){
+            checkCompilationPermission(request, response, singleInfo.compilationID, '/singleInfo/main');
             let randerData = {
                 title:'单项信息库',
                 mainURL:'/singleInfo/main',

+ 48 - 46
modules/std_billsGuidance_lib/controllers/libController.js

@@ -15,43 +15,45 @@ const fs = require("fs");
 // excel解析
 const excel = require("node-xlsx");
 let callback = function (req, res, err, msg, data) {
-    res.json({error: err, message: msg, data: data});
+    res.json({ error: err, message: msg, data: data });
 };
 
 const zhLibID = 'cf851660-3534-11ec-9641-2da8021b8e4e';
 
-class BillsGuideLibController extends BaseController{
+class BillsGuideLibController extends BaseController {
 
     //获取编办及编办清单库信息
-    async getComBillsLibInfo(req, res){
-        try{
-            let comBillsLibInfo = await billsGuidanceFacade.getComBillsLibInfo();
+    async getComBillsLibInfo(req, res) {
+        try {
+            let comBillsLibInfo = await billsGuidanceFacade.getComBillsLibInfo(req);
             callback(req, res, 0, '', comBillsLibInfo);
         }
-        catch(err) {
+        catch (err) {
             callback(req, res, 1, err, null);
         }
     }
 
-    async getBillsGuideLibs(req, res){
-        try{
-            let libs = await billsGuidanceFacade.getBillsGuideLibs({deleted: false}, req.session.managerData.isTemporary);
+    async getBillsGuideLibs(req, res) {
+        try {
+            const compilationPermission = req.session.managerData.compilationPermission || [];
+            const filter = { compilationId: { $in: compilationPermission }, deleted: false };
+            let libs = await billsGuidanceFacade.getBillsGuideLibs(filter, req.session.managerData.isTemporary);
             callback(req, res, 0, '', libs);
         }
-        catch(err){
+        catch (err) {
             callback(req, res, 1, '获取清单指引库数据错误', null);
         }
     }
 
-    async updateBillsGuideLib(req, res){
-        try{
+    async updateBillsGuideLib(req, res) {
+        try {
             let data = JSON.parse(req.body.data);
-            if(data.updateType === 'create'){
+            if (data.updateType === 'create') {
                 data.updateData.createDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
                 data.updateData.creator = req.session.managerData.username;
                 await billsGuidanceFacade.initBillsGuideLib(data.updateData);
             }
-            else{
+            else {
                 if (data.updateType === 'delete') {
                     logger.info(`delete billsGuidanceLib ${req.ip}`);
                 }
@@ -59,46 +61,46 @@ class BillsGuideLibController extends BaseController{
             }
             callback(req, res, 0, '', data.updateData);
         }
-        catch(err){
+        catch (err) {
             callback(req, res, 1, '更新失败', null);
         }
     }
     //获取清单指引库和该库引用的清单
-    async getLibWithBills(req, res){
-        try{
+    async getLibWithBills(req, res) {
+        try {
             let data = JSON.parse(req.body.data);
             let rst = await billsGuidanceFacade.getLibWithBills(data.libID);
             callback(req, res, 0, '', rst);
         }
-        catch(err){
+        catch (err) {
             callback(req, res, 1, err, null);
         }
     }
 
-    async getItemsByBills(req, res){
-        try{
+    async getItemsByBills(req, res) {
+        try {
             let data = JSON.parse(req.body.data);
             let items = await billsGuidanceFacade.getItemsBybills(data.guidanceLibID, data.billsID);
             callback(req, res, 0, '', items);
         }
-        catch(err){
+        catch (err) {
             callback(req, res, 1, err, null);
         }
     }
 
-    async getItemsByBillIDs(req, res){
-        try{
+    async getItemsByBillIDs(req, res) {
+        try {
             let data = JSON.parse(req.body.data);
             let items = await billsGuidanceFacade.getItemsByBillIDs(data.guidanceLibID, data.billIDs);
             callback(req, res, 0, '', items);
         }
-        catch(err){
+        catch (err) {
             callback(req, res, 1, err, null);
         }
     }
 
-    async updateItems(req, res){
-        try{
+    async updateItems(req, res) {
+        try {
 
             if (req.session.managerData.isTemporary) {
                 const match = req.headers.referer.match(/libID=([\d,a-z,A-Z,-]{36})/);
@@ -112,65 +114,65 @@ class BillsGuideLibController extends BaseController{
             await billsGuidanceFacade.updateItems(updateDatas, req.session.managerData.isTemporary);
             callback(req, res, 0, '', null);
         }
-        catch(err){
+        catch (err) {
             callback(req, res, 1, err, null);
         }
     }
 
-    async getBillMaterials(req, res){
-        try{
+    async getBillMaterials(req, res) {
+        try {
             const data = JSON.parse(req.body.data);
             const materials = await billsGuidanceFacade.getBillMaterials(data.libID, data.billID);
             callback(req, res, 0, '', materials);
         }
-        catch(err){
+        catch (err) {
             callback(req, res, 1, err, null);
         }
     }
 
-    async editBillMaterials(req, res){
-        try{
+    async editBillMaterials(req, res) {
+        try {
             const data = JSON.parse(req.body.data);
             const materials = await billsGuidanceFacade.editBillMaterials(data.libID, data.billID, data.gljCodes, data.compilationID);
             callback(req, res, 0, '', materials);
         }
-        catch(err){
+        catch (err) {
             console.log(err);
             callback(req, res, 1, err.message, []);
         }
     }
-    
+
     async generateClassData(req, res) {
-        try{
+        try {
             res.setTimeout(1000 * 60 * 10); // 不设置的话,处理时间过长,会触发默认的响应超时,报错(前端报错,后台还继续在处理)
             const data = JSON.parse(req.body.data);
             await billsGuidanceFacade.generateClassData(data.libID);
             callback(req, res, 0, '', []);
         }
-        catch(err){
+        catch (err) {
             console.log(err);
             callback(req, res, 1, err.message, []);
         }
     }
 
     async autoSetMaterial(req, res) {
-        try{
+        try {
             res.setTimeout(1000 * 60 * 10); // 不设置的话,处理时间过长,会触发默认的响应超时,报错(前端报错,后台还继续在处理)
             const data = JSON.parse(req.body.data);
             await billsGuidanceFacade.autoSetMaterial(data.libID);
             callback(req, res, 0, '', []);
         }
-        catch(err){
+        catch (err) {
             console.log(err);
             callback(req, res, 1, err.message, []);
         }
     }
 
     async exportClassExcel(req, res) {
-        try{
+        try {
             const excelData = await billsGuidanceFacade.getClassExcelData(req.query.libID);
             console.log('start-build');
-            const buffer = excel.build([{name: "清单分类库", data: excelData}], {'!cols': [{wch:6}, {wch:12}, {wch:14}, {wch:24}, {wch:45}, {wch:20}, {wch:30}, {wch:30}]});
+            const buffer = excel.build([{ name: "清单分类库", data: excelData }], { '!cols': [{ wch: 6 }, { wch: 12 }, { wch: 14 }, { wch: 24 }, { wch: 45 }, { wch: 20 }, { wch: 30 }, { wch: 30 }] });
             console.log('end-build');
             const filePath = './public/export.xlsx';
             fs.writeFileSync(filePath, buffer, 'binary');
@@ -184,20 +186,20 @@ class BillsGuideLibController extends BaseController{
             fs.createReadStream(filePath).pipe(res);
             fs.unlink(filePath);
         }
-        catch(err){
+        catch (err) {
             console.log(err);
             response.end(error);
         }
     }
 
-    async testItems(req, res){
-        try{
+    async testItems(req, res) {
+        try {
             let data = JSON.parse(req.body.data);
             let rst = await billsGuidanceFacade.testItems(data.libID);
-            res.json({error: 0, data: rst, message: ''});
+            res.json({ error: 0, data: rst, message: '' });
         }
-        catch (error){
-            res.json({error: 1, data: null, message: error});
+        catch (error) {
+            res.json({ error: 1, data: null, message: error });
 
         }
     }

+ 7 - 1
modules/std_billsGuidance_lib/controllers/viewController.js

@@ -8,7 +8,11 @@
  * @version
  */
 import BaseController from "../../common/base/base_controller";
+import { checkCompilationPermission } from '../../common/base/base_util';
+import mongoose from 'mongoose';
+
 let config = require("../../../config/config.js");
+const billsGuideLibModel = mongoose.model('std_billsGuidance_lib');
 class ViewsController extends BaseController{
     redirectMain(req, res){
         res.render('maintain/billsGuidance_lib/html/main.html',
@@ -17,7 +21,9 @@ class ViewsController extends BaseController{
                 manager: req.session.managerData,
             });
     }
-    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')
         let sessionManager = req.session.managerData;
         res.render('maintain/billsGuidance_lib/html/zhiyin.html',
             {

+ 52 - 52
modules/std_billsGuidance_lib/facade/facades.js

@@ -166,14 +166,14 @@ async function handleCopyItems(sourceGuideLibID, sourceBillsLibID, targetGuideLi
 
 }
 
-async function getCompilationList() {
+async function getCompilationList(req) {
     let compilationModel = new CompilationModel();
-    return await compilationModel.getCompilationList();
+    return await compilationModel.getPermissionCompilationList(req);
 }
 
-async function getComBillsLibInfo() {
+async function getComBillsLibInfo(req) {
     let rst = { compilationList: [], billsLibs: [] };
-    let compilationList = await getCompilationList();
+    let compilationList = await getCompilationList(req);
     if (compilationList.length <= 0) {
         throw '没有数据';
     }
@@ -398,13 +398,13 @@ async function checkItems(items) {
 }
 
 async function getItemsBybills(guidanceLibID, billsID) {
-    let items = await billsGuideItemsModel.find({ libID: guidanceLibID, billsID: billsID});
+    let items = await billsGuideItemsModel.find({ libID: guidanceLibID, billsID: billsID });
     await checkItems(items);
     return items;
 }
 
 async function getItemsByBillIDs(guidanceLibID, billIDs) {
-    let items = await billsGuideItemsModel.find({ libID: guidanceLibID, billsID: { $in: billIDs }});
+    let items = await billsGuideItemsModel.find({ libID: guidanceLibID, billsID: { $in: billIDs } });
     await checkItems(items);
     return items;
 }
@@ -551,27 +551,27 @@ function getOptionalData(node, list = []) {
     return list;
 }
 
-  // 获取必填项下的ID和name的键值对
-  function getClassCodeStrData(nodes,data={classGroups:{},keyGroup:{}}){
-    nodes.forEach(node=>{
-       if (isProcessNode(node)&&node.data.required) {
-           node.children.forEach(subNode=>{
-               data.classGroups[subNode.data.ID]=subNode.data.name;  
-               data.keyGroup[subNode.data.ID]=`${subNode.parent.data.name}:${subNode.data.name}`; 
-           })
-       }
-       getClassCodeStrData(node.children,data);
+// 获取必填项下的ID和name的键值对
+function getClassCodeStrData(nodes, data = { classGroups: {}, keyGroup: {} }) {
+    nodes.forEach(node => {
+        if (isProcessNode(node) && node.data.required) {
+            node.children.forEach(subNode => {
+                data.classGroups[subNode.data.ID] = subNode.data.name;
+                data.keyGroup[subNode.data.ID] = `${subNode.parent.data.name}:${subNode.data.name}`;
+            })
+        }
+        getClassCodeStrData(node.children, data);
     })
-   return data;
+    return data;
 }
 
 
 //获取定额数据
-    // requireRationData必套定额对象
-    // optionalRationData 选逃定额对象
-    // classGroups classCode文字和id键值对
-    // classCodeList 各个classCode的pID和ID的关系
-function getItemData(nodes, requireRationData = {}, optionalRationData = {}, classGroups = {}, prefixID = '', prefixSonID = '', IDData = {}, keyGroup={}) {
+// requireRationData必套定额对象
+// optionalRationData 选逃定额对象
+// classGroups classCode文字和id键值对
+// classCodeList 各个classCode的pID和ID的关系
+function getItemData(nodes, requireRationData = {}, optionalRationData = {}, classGroups = {}, prefixID = '', prefixSonID = '', IDData = {}, keyGroup = {}) {
     const processNodes = nodes.filter(node => isProcessNode(node));
     // const classGroups = []; // 同层必填选项的数组(二维数组)
     processNodes.forEach(processNode => {
@@ -596,17 +596,17 @@ function getItemData(nodes, requireRationData = {}, optionalRationData = {}, cla
                     kV[optionNode.data.ID] = optionNode.data.name;
                     Object.assign(classGroups, kV);
 
-                    const keyData={};
+                    const keyData = {};
                     keyData[optionNode.data.ID] = `${optionNode.parent.data.name}:${optionNode.data.name}`;
-                    Object.assign(keyGroup,keyData);
+                    Object.assign(keyGroup, keyData);
                 } else {
                     const kV = {};
                     kV[optionNode.data.ID] = optionNode.data.name;
                     Object.assign(classGroups, kV);
 
-                    const keyData={};
+                    const keyData = {};
                     keyData[optionNode.data.ID] = `${optionNode.parent.data.name}:${optionNode.data.name}`;
-                    Object.assign(keyGroup,keyData);
+                    Object.assign(keyGroup, keyData);
                     // 后代项是否有必填
                     if (hasRequireData(optionNode)) {
                         //后代项有必填
@@ -654,18 +654,18 @@ function getItemData(nodes, requireRationData = {}, optionalRationData = {}, cla
                             })
                         })
                     } else {
-                       // 全部选套就不用走循环了,直接按照选套执行
-                       let key = processNode.data.ID;
-                       if (prefixID) key = prefixID;
-                       if (prefixSonID) key = prefixSonID;
-                       if (!optionalRationData[key]) optionalRationData[key] = [];
-                       optionalRationData[key].push(...getOptionalData(processNode));
-                       // 因为这里没有按照走整个流程,所以文字和ID的关系需要获取补充
-                      if(hasRequireData(processNode)){
-                        const result =getClassCodeStrData(processNode.children)
-                        Object.assign(classGroups,result.classGroups);
-                        Object.assign(keyGroup,result.keyGroup);
-                      }  
+                        // 全部选套就不用走循环了,直接按照选套执行
+                        let key = processNode.data.ID;
+                        if (prefixID) key = prefixID;
+                        if (prefixSonID) key = prefixSonID;
+                        if (!optionalRationData[key]) optionalRationData[key] = [];
+                        optionalRationData[key].push(...getOptionalData(processNode));
+                        // 因为这里没有按照走整个流程,所以文字和ID的关系需要获取补充
+                        if (hasRequireData(processNode)) {
+                            const result = getClassCodeStrData(processNode.children)
+                            Object.assign(classGroups, result.classGroups);
+                            Object.assign(keyGroup, result.keyGroup);
+                        }
                     }
                 }
             } else {
@@ -683,7 +683,7 @@ function getItemData(nodes, requireRationData = {}, optionalRationData = {}, cla
             }
         }
     })
-    return { requireRationData, optionalRationData, classGroups, IDData, keyGroup}
+    return { requireRationData, optionalRationData, classGroups, IDData, keyGroup }
 }
 
 
@@ -822,7 +822,7 @@ function combineData(codeData, requireRationData, optionalRationData, classGroup
         const optionalRationIDs = [];
         const requiredRationIDs = [];
         let name = '';
-        let key = ''; 
+        let key = '';
         const classCodeIDs = classCodeData.ID;
         if (/@/.test(classCodeIDs)) {
             classCodeIDs.split('@').forEach((classCodeID) => {
@@ -835,7 +835,7 @@ function combineData(codeData, requireRationData, optionalRationData, classGroup
                 };
                 // 一组的必套定额,先去重
                 const unitRation = [];
-              
+
                 // 这里是必填选项下绑定必套定额
                 if (requireRationData[classCodeID] && requireRationData[classCodeID].length) {
                     requireRationData[classCodeID].forEach(subItem => {
@@ -869,19 +869,19 @@ function combineData(codeData, requireRationData, optionalRationData, classGroup
             const unitRation = [];
             name = classGroups[classCodeIDs];
             key = keyGroup[classCodeIDs];
-            if (requireRationData[classCodeIDs] && requireRationData[classCodeIDs].length){
+            if (requireRationData[classCodeIDs] && requireRationData[classCodeIDs].length) {
                 requireRationData[classCodeIDs].forEach(subItem => {
                     unitRation.push(...new Set(subItem));
                 })
-                requiredRationIDs.push(unitRation); 
+                requiredRationIDs.push(unitRation);
                 // 这里也要把用过的必套定额先存起来
                 matchRationList.push(...unitRation);
             }
-          
+
             if (requireCombineData[classCodeIDs] && requireCombineData[classCodeIDs].size) {
                 requiredRationIDs.push([...requireCombineData[classCodeIDs]])
-                 // 这里也要把用过的必套定额先存起来
-                 matchRationList.push(...requireCombineData[classCodeIDs]);
+                // 这里也要把用过的必套定额先存起来
+                matchRationList.push(...requireCombineData[classCodeIDs]);
             };
 
             if (optionalRationData[classCodeIDs] && optionalRationData[classCodeIDs].length) {
@@ -892,7 +892,7 @@ function combineData(codeData, requireRationData, optionalRationData, classGroup
                 optionalRationIDs.push(...optionCombineData[classCodeIDs]);
                 matchRationList.push(...optionalRationData[classCodeIDs]);
             }
-            return { name,key, requiredRationIDs, optionalRationIDs: [...new Set(optionalRationIDs)], errorRationIDs }
+            return { name, key, requiredRationIDs, optionalRationIDs: [...new Set(optionalRationIDs)], errorRationIDs }
         }
     })
     const unMatchRation = [];
@@ -906,7 +906,7 @@ function combineData(codeData, requireRationData, optionalRationData, classGroup
     // 这里把没有使用过的必套定额也丢到了选套里面
     Object.values(requireRationData).forEach(data => {
         data.forEach((rationData) => {
-            rationData.forEach(rationID=>{
+            rationData.forEach(rationID => {
                 if (!matchRationList.includes(rationID)) {
                     unMatchRation.push(rationID);
                 }
@@ -978,16 +978,16 @@ async function generateClassData(libID) {
                     if (data.length) optionalRationIDs.push(...data);
                 })
             })
-           
+
             const errorRationIDs = getErrorRationIDs([], optionalRationIDs, allRationIDs);
-           
+
             billClassData.push({
                 itemCharacter: '',
                 class: classNum++,
                 classCode: `${billNode.data.code}`,
                 compilationID: lib.compilationId,
                 name: billNode.data.name,
-                key:`${billNode.data.code}${billNode.data.name}${billNode.data.unit}`,
+                key: `${billNode.data.code}${billNode.data.name}${billNode.data.unit}`,
                 code: billNode.data.code,
                 requiredRationIDs: [],
                 optionalRationIDs: optionalRationIDs || [],
@@ -1019,7 +1019,7 @@ async function getClassExcelData(libID) {
     const classData = await billClassModel.find({ compilationID: lib.compilationId }).lean();
     console.log('end');
     console.log(Date.now() - date);
-    const excelData = [['类别', '编码', '清单名称', '必填特征排列组合', '类别别名', '必套定额', '选套定额', '错套定额','基础样本']];
+    const excelData = [['类别', '编码', '清单名称', '必填特征排列组合', '类别别名', '必套定额', '选套定额', '错套定额', '基础样本']];
     classData.forEach(item => {
         const excelItem = [
             item.class,

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

@@ -3,22 +3,22 @@
  */
 
 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 logger = require('../../../logs/log_helper').logger;
 
-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 });
         }
     }
     //将该标准人材机库的分类树设置为该费用定额下补充人材机分类树的模板
@@ -31,50 +31,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) {
         logger.info(`deleteGljLib ${req.ip}`);
         let oprtor = req.body.oprtor,
             libId = req.body.libId;

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

@@ -9,6 +9,7 @@ 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',
@@ -22,6 +23,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 : [];

+ 89 - 88
modules/std_glj_lib/models/gljMapModel.js

@@ -11,52 +11,52 @@ const compleGljClassTemp = mongoose.model('complementary_glj_section_templates')
 import moment from "moment";
 import counter from "../../../public/counter/counter";
 import async from "async";
-let rationRepositoryDao =  require("../../ration_repository/models/repository_map");
+let rationRepositoryDao = require("../../ration_repository/models/repository_map");
 
 class OprDao {
-    static updateOprArr(findSet, oprtor, date, cb){
+    static updateOprArr(findSet, oprtor, date, cb) {
         let oprDate = moment(date).format('YYYY-MM-DD HH:mm:ss');
         gljMapModel.find(findSet, function (err, result) {
-            if(err){
+            if (err) {
                 cb(err);
             }
-            else{
-                if(result.length === 1){
+            else {
+                if (result.length === 1) {
                     let recentOprArr = result[0].recentOpr;
                     let isExist = false;
-                    for(let i =0 ; i<recentOprArr.length; i++){
-                        if(recentOprArr[i].operator === oprtor){
+                    for (let i = 0; i < recentOprArr.length; i++) {
+                        if (recentOprArr[i].operator === oprtor) {
                             recentOprArr[i].operateDate = oprDate;
                             isExist = true;
                         }
                     }
-                    if(!isExist){
-                        if(recentOprArr.length < 5){
-                            recentOprArr.push({operator: oprtor, operateDate: oprDate});
+                    if (!isExist) {
+                        if (recentOprArr.length < 5) {
+                            recentOprArr.push({ operator: oprtor, operateDate: oprDate });
                         }
-                        else if(recentOprArr.length === 5){
+                        else if (recentOprArr.length === 5) {
                             recentOprArr.sort(function (a, b) {
-                                if(a.operateDate > b.operateDate){
+                                if (a.operateDate > b.operateDate) {
                                     return -1;
-                                }else {
+                                } else {
                                     return 1;
                                 }
                                 return 0;
                             });
-                            recentOprArr.splice(recentOprArr.length -1, 1);
-                            recentOprArr.splice(0, 1, {operator: oprtor, operateDate: oprDate});
+                            recentOprArr.splice(recentOprArr.length - 1, 1);
+                            recentOprArr.splice(0, 1, { operator: oprtor, operateDate: oprDate });
                         }
                     }
-                    gljMapModel.update(findSet, {$set: {recentOpr: recentOprArr}}, function (err) {
-                        if(err){
+                    gljMapModel.update(findSet, { $set: { recentOpr: recentOprArr } }, function (err) {
+                        if (err) {
                             cb(err);
                         }
-                        else{
+                        else {
                             cb(null);
                         }
                     });
                 }
-                else{
+                else {
                     cb(err);
                 }
             }
@@ -65,81 +65,82 @@ class OprDao {
 }
 
 
-class GljMapDao extends OprDao{
-   static createNewLibModel(gljLibObj){
+class GljMapDao extends OprDao {
+    static createNewLibModel(gljLibObj) {
         var rst = {};
         rst.dispName = gljLibObj.dispName;
-        rst.appType = gljLibObj.appType?gljLibObj.appType:'construct';
-        rst.compilationId = gljLibObj.compilationId?gljLibObj.compilationId: -1;
-        rst.compilationName = gljLibObj.compilationName?gljLibObj.compilationName:'';
+        rst.appType = gljLibObj.appType ? gljLibObj.appType : 'construct';
+        rst.compilationId = gljLibObj.compilationId ? gljLibObj.compilationId : -1;
+        rst.compilationName = gljLibObj.compilationName ? gljLibObj.compilationName : '';
         rst.creator = gljLibObj.creator;
         rst.createDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
-        rst.recentOpr = [{operator: gljLibObj.creator, operateDate: rst.createDate}];
+        rst.recentOpr = [{ operator: gljLibObj.creator, operateDate: rst.createDate }];
         rst.deleted = false;
         return rst;
     }
 
-    getGljLib(libId, callback){
-        gljMapModel.find({ID: libId}, function (err, result) {
-            if(err){
+    getGljLib(libId, callback) {
+        gljMapModel.find({ ID: libId }, function (err, result) {
+            if (err) {
                 callback(err, '没有数据!', null);
             }
-            else{
+            else {
                 callback(null, '成功', result);
             }
         })
     }
-    async getAllGljLib(callback){
-        try{
-            let gljLibs = await gljMapModel.find({deleted: false});
-            for(let gljLib of gljLibs){
+    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){
-                    let rLib = await rationRepository.findOne({ID: rationLib.ID, deleted: false});
-                    if(rLib !== undefined && rLib !== null){
-                        tempRationLibs.push({ID: rationLib.ID, dispName: rLib.dispName});
+                for (let rationLib of gljLib.rationLibs) {
+                    let rLib = await rationRepository.findOne({ ID: rationLib.ID, deleted: false });
+                    if (rLib !== undefined && rLib !== null) {
+                        tempRationLibs.push({ ID: rationLib.ID, dispName: rLib.dispName });
                     }
                 }
                 gljLib._doc.rationLibs = tempRationLibs;
             }
             callback(null, '成功', gljLibs);
         }
-        catch(err){
+        catch (err) {
             callback(err, '没有定额库数据!', null);
         }
     }
-    createGljLib(gljLibObj, callback){
+    createGljLib(gljLibObj, callback) {
         counter.counterDAO.getIDAfterCount(counter.moduleName.stdGljLib, 1, function (err, result) {
-            if(err){
+            if (err) {
                 callback(err, '获取新ID失败!');
             }
-            else{
+            else {
                 let newGljLib = GljMapDao.createNewLibModel(gljLibObj);
                 newGljLib.ID = result.sequence_value;
                 gljMapModel.create(newGljLib, function (err, result) {
-                    if(err){
+                    if (err) {
                         callback(err, '创建新工料机库失败!', null);
                     }
-                    else{
+                    else {
                         callback(null, '创建成功', result);
                     }
                 });
             }
         })
     }
-    renameGljLib(oprtor, renameObj, callback){
-        gljMapModel.update({ID: renameObj.ID, deleted: false}, {$set: {dispName: renameObj.newName}}, function (err) {
-            if(err){
+    renameGljLib(oprtor, renameObj, callback) {
+        gljMapModel.update({ ID: renameObj.ID, deleted: false }, { $set: { dispName: renameObj.newName } }, function (err) {
+            if (err) {
                 callback(err, '重命名失败!');
             }
-            else{
-                GljMapDao.updateOprArr({ID: renameObj.ID, deleted: false}, oprtor, Date.now(), function (err) {
-                    if(err){
+            else {
+                GljMapDao.updateOprArr({ ID: renameObj.ID, deleted: false }, oprtor, Date.now(), function (err) {
+                    if (err) {
                         callback(err, '更新最近操作者失败!');
                     }
-                    else{
-                        engLibModel.update({'glj_lib.id': renameObj.ID}, {$set: {'glj_lib.$.name': renameObj.newName}}, {multi: true}, function (err) {
-                            if(err){
+                    else {
+                        engLibModel.update({ 'glj_lib.id': renameObj.ID }, { $set: { 'glj_lib.$.name': renameObj.newName } }, { multi: true }, function (err) {
+                            if (err) {
                                 callback(err, '更新工程专业引用失败!');
                             }
                             else {
@@ -151,88 +152,88 @@ class GljMapDao extends OprDao{
             }
         });
     }
-    removeGljLib(oprtor, libId, callback){
-        GljMapDao.updateOprArr({ID: libId, deleted: false}, oprtor, Date.now(), function (err) {
-            if(err){
+    removeGljLib(oprtor, libId, callback) {
+        GljMapDao.updateOprArr({ ID: libId, deleted: false }, oprtor, Date.now(), function (err) {
+            if (err) {
                 callback(err, '失败!')
             }
-            else{
-                gljMapModel.find({ID: libId, deleted: false}, function (err, result) {
-                    if(err){
+            else {
+                gljMapModel.find({ ID: libId, deleted: false }, function (err, result) {
+                    if (err) {
                         callback(err, '数据不存在!');
                     }
-                    else{
-                        if(result[0].rationLibs.length > 0){//已被引用
+                    else {
+                        if (result[0].rationLibs.length > 0) {//已被引用
                             callback(null, '此人材机库已被引用!');
                         }
-                        else{
+                        else {
                             async.parallel([
                                 function (cb) {
-                                    gljMapModel.remove({ID: libId}, function (err) {
-                                        if(err){
+                                    gljMapModel.remove({ ID: libId }, function (err) {
+                                        if (err) {
                                             cb(err);
                                         }
-                                        else{
+                                        else {
                                             cb(null);
                                         }
                                     });
                                 },
                                 function (cb) {
-                                    gljModel.remove({repositoryId: libId}, function (err) {
-                                        if(err){
+                                    gljModel.remove({ repositoryId: libId }, function (err) {
+                                        if (err) {
                                             cb(err);
                                         }
-                                        else{
+                                        else {
                                             cb(null);
                                         }
                                     });
                                 },
                                 function (cb) {
-                                    gljClassModel.remove({repositoryId: libId}, function (err) {
-                                        if(err){
+                                    gljClassModel.remove({ repositoryId: libId }, function (err) {
+                                        if (err) {
                                             cb(err);
                                         }
-                                        else{
+                                        else {
                                             cb(null);
                                         }
                                     })
                                 }
                             ], function (err) {
-                                if(err){
+                                if (err) {
                                     callback(err, '移除工料机库失败!');
                                 }
-                                else{
+                                else {
                                     callback(null, '删除成功');
                                 }
                             });
-                           /* gljMapModel.update({ID: libId, deleted: false}, {$set: {deleted: true}}, function (err) {
-                                if(err){
-                                    callback(err, '移除工料机库失败!');
-                                }
-                                else{
-                                   callback(null, '删除成功');
-                                }
-                            });*/
+                            /* gljMapModel.update({ID: libId, deleted: false}, {$set: {deleted: true}}, function (err) {
+                                 if(err){
+                                     callback(err, '移除工料机库失败!');
+                                 }
+                                 else{
+                                    callback(null, '删除成功');
+                                 }
+                             });*/
                         }
                     }
                 });
             }
         });
     }
-    async classTemplateCount (compilationId) {
-        return await compleGljClassTemp.find({compilationId}).count();
+    async classTemplateCount(compilationId) {
+        return await compleGljClassTemp.find({ compilationId }).count();
     }
-    async initClassTemplate (gljLibId, compilationId) {
-        let classTempCount = await compleGljClassTemp.find({compilationId}).count();
+    async initClassTemplate(gljLibId, compilationId) {
+        let classTempCount = await compleGljClassTemp.find({ compilationId }).count();
         if (classTempCount > 0) {
-            await compleGljClassTemp.remove({compilationId});
+            await compleGljClassTemp.remove({ compilationId });
         }
         let bulks = [];
-        let stdGljClass = await gljClassModel.find({repositoryId: gljLibId});
+        let stdGljClass = await gljClassModel.find({ repositoryId: gljLibId });
         for (let data of stdGljClass) {
             delete data._doc._id;
             data._doc.compilationId = compilationId;
-            bulks.push({insertOne: {document: data}});
+            bulks.push({ insertOne: { document: data } });
         }
         if (bulks.length > 0) {
             await compleGljClassTemp.bulkWrite(bulks);
@@ -240,4 +241,4 @@ class GljMapDao extends OprDao{
     }
 }
 
-export {OprDao, GljMapDao};
+export { OprDao, GljMapDao };

+ 6 - 1
modules/structural_segment_lib/controllers/structural_segment_controller.js

@@ -6,12 +6,13 @@ 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{
     async main(request, response) {
      
         let compilationModel = new CompilationModel();
-        let compilationList = await compilationModel.getCompilationList({_id: 1, name: 1});
+        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) {
@@ -21,6 +22,9 @@ class StructuralSegmentController extends BaseController{
         }
         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));
+        templateLibs
         let renderData = {
             title:'结构分部库',
             userAccount: request.session.managerData.username,
@@ -96,6 +100,7 @@ class StructuralSegmentController extends BaseController{
        
         let structuralSegment = await structuralSegmentFacade.findByCondition({'ID':libID});
         if(structuralSegment){
+            checkCompilationPermission(request, response, structuralSegment.compilationID, '/structuralSegment/main');
             let randerData = {
                 title:'结构分部库',
                 mainURL:'/structuralSegment/main',

+ 28 - 18
modules/users/controllers/login_controller.js

@@ -26,10 +26,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) {
@@ -81,16 +81,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,
@@ -100,10 +101,14 @@ 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) {
+                                    console.log(`pa`);
+                                    console.log(pa);
+                                }
                                 if (permissionInfo !== undefined && permissionInfo !== '') {
                                     if (permissionInfo.isMenu) {
                                         // 属于二级菜单
@@ -127,11 +132,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) {
                                     console.log(`pa`);
                                     console.log(pa);
@@ -157,7 +164,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) {
@@ -172,13 +179,13 @@ class LoginController extends BaseController {
                         subList.push(menu);//防止子节点ID比父节点ID小的问题
                     }
                 }
-                for(let s of subList){
+                for (let s of subList) {
                     let action = {
-                     title: s.name,
-                     url: s.url,
-                     name: s.action,
-                     };
-                     menuData[s.controller].children[s.action] = action;
+                        title: s.name,
+                        url: s.url,
+                        name: s.action,
+                    };
+                    menuData[s.controller].children[s.action] = action;
                 }
 
                 // 超级管理员二级菜单添加
@@ -190,7 +197,7 @@ class LoginController extends BaseController {
             }
             // 获取所有工具里的权限控制器名称
             let toolAllPermission = [];
-            let toolAllPermissionList = await permissionModel.getList({pid:4});
+            let toolAllPermissionList = await permissionModel.getList({ pid: 4 });
             console.log(`toolAllPermissionList`);
             console.log(toolAllPermissionList);
             for (let tool of toolAllPermissionList) {
@@ -211,8 +218,9 @@ class LoginController extends BaseController {
             }
 
             let managerSession = {
+                compilationPermission,
                 username: managerData.username,
-                real_name:managerData.real_name,
+                real_name: managerData.real_name,
                 loginTime: currentTime,
                 sessionToken: sessionToken,
                 userID: managerData.id,
@@ -222,8 +230,10 @@ class LoginController extends BaseController {
                 menuData: menuData,
                 superAdmin: managerData.super_admin,
                 isTemporary: managerData.isTemporary,
-                lockOperate: managerData.lockOperate
+                lockOperate: managerData.lockOperate,
             };
+            console.log(`compilationPermission`);
+            console.log(compilationPermission);
             request.session.managerData = managerSession;
             console.log(managerSession);
 
@@ -237,7 +247,7 @@ 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);

+ 12 - 2
modules/users/controllers/manager_controller.js

@@ -12,6 +12,7 @@ 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 CompilationModel from '../models/compilation_model';
 
 class ManagerController extends BaseController {
 
@@ -282,7 +283,12 @@ 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 });
+
             // 获取最高级权限列表
             let permissionModel = new PermissionModel();
             topPermissionList = await permissionModel.getList({ pid: 0 });
@@ -293,8 +299,6 @@ class ManagerController extends BaseController {
                 let count = await permissionModel.count({ pid: permissionList[index].ID });
                 if (count > 0) {
                     permissionList[index].secondPermissionList = await permissionModel.getList({ pid: permissionList[index].ID });
-                    console.log(permissionList[index].ID)
-                    console.log(permissionList[index].secondPermissionList);
                 } else {
                     permissionList[index].secondPermissionList = [];
                 }
@@ -339,9 +343,13 @@ class ManagerController extends BaseController {
 
         }
         let renderData = {
+            compilationList,
             groupList: groupList,
+            groupListStr: JSON.stringify(groupList),
             topPermissionList: topPermissionList,
+            topPermissionListStr: JSON.stringify(topPermissionList),
             permissionList: permissionList,
+            permissionListStr: JSON.stringify(permissionList),
             pages: pageData,
             layout: 'users/views/layout/layout',
             LicenseKey: config.getLicenseKey(process.env.NODE_ENV)
@@ -372,6 +380,8 @@ class ManagerController extends BaseController {
      */
     async authoritySave(request, response) {
         let permissionGroupModel = new PermissionGroupModel();
+        console.log(`request.body`)
+        console.log(request.body)
         let result = await permissionGroupModel.savePermissionGroup(request.body);
         if (!result) {
             throw '修改失败';

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

@@ -54,6 +54,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()));
+    }
+
     /**
      * 获取编办列表
      *

+ 2 - 1
modules/users/models/permission_group_model.js

@@ -47,7 +47,7 @@ class PermissionGroupModel extends BaseModel {
     async getList(condition = null, page = 1, pageSize = 30) {
         page = parseInt(page);
         page = page <= 1 ? 1 : page;
-        let option = {pageSize: pageSize, offset: parseInt((page - 1) * pageSize)};
+        let option = { pageSize: pageSize, offset: parseInt((page - 1) * pageSize) };
         console.log(condition);
         let list = await this.db.find(condition, null, option);
         list = list.length > 0 ? list : [];
@@ -97,6 +97,7 @@ class PermissionGroupModel extends BaseModel {
         if (Object.keys(data).length <= 0) {
             throw '数据格式错误';
         }
+        console.log(data);
         let permission = {
             top: data.topPermission !== undefined ? data.topPermission : [],
         };

+ 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>

+ 21 - 19
web/users/js/manager.js

@@ -5,10 +5,10 @@
  * @date 2017/7/25
  * @version
  */
-$(document).ready(function() {
+$(document).ready(function () {
     let selectId = '';
     // 编辑用户
-    $(".edit").click(function() {
+    $(".edit").click(function () {
         // 获取当前点击的数据
         let canLogin = $(this).data('login');
         if (!canLogin) {
@@ -21,7 +21,7 @@ $(document).ready(function() {
         let permission = $(this).data('permission');
         permission = permission.split(',');
 
-        $("input[name='permission[]']").each(function(index) {
+        $("input[name='permission[]']").each(function (index) {
             let permissionName = $(this).data('permission');
 
             if (permission.indexOf(permissionName) < 0) {
@@ -38,14 +38,14 @@ $(document).ready(function() {
 
     // 编辑后保存
     let isSaving = false;
-    $("#save-manager").click(function() {
+    $("#save-manager").click(function () {
         if (selectId === '' || isSaving) {
             return false;
         }
 
         // 获取权限
         let permission = [];
-        $("input[name='permission[]']:checked").each(function(index) {
+        $("input[name='permission[]']:checked").each(function (index) {
             let permissionName = $(this).data('permission');
             permission.push(permissionName);
         });
@@ -57,15 +57,15 @@ $(document).ready(function() {
         $.ajax({
             url: '/manager/modify/' + selectId,
             type: 'post',
-            data: {permission: permission, login: login ? 0 : 1},
+            data: { permission: permission, login: login ? 0 : 1 },
             dataType: 'json',
-            error: function() {
+            error: function () {
                 isSaving = false;
             },
-            beforeSend: function() {
+            beforeSend: function () {
                 isSaving = true;
             },
-            success: function(response) {
+            success: function (response) {
                 isSaving = false;
                 if (response.err === 0) {
                     $('#edit-account').modal('hide');
@@ -92,7 +92,7 @@ $(document).ready(function() {
             for (let gp in group_permission) {
                 let plist = group_permission[gp];
                 for (let p of plist) {
-                    $("input[value='"+p+"'").prop('checked', true);
+                    $("input[value='" + p + "'").prop('checked', true);
                 }
             }
         }
@@ -101,27 +101,29 @@ $(document).ready(function() {
     // 一级权限选中或取消
     $("input[name='topPermission[]']").on('click', function () {
         let id = $(this).attr('id');
-        if($(this).is(':checked')) {
+        if ($(this).is(':checked')) {
             // 选中
-            $("input[name='permission_"+id+"[]']").prop('checked', true);
+            $("input[name='permission_" + id + "[]']").prop('checked', true);
         } else {
             // 取消选中
-            $("input[name='permission_"+id+"[]']").prop('checked', false);
+            $("input[name='permission_" + id + "[]']").prop('checked', false);
         }
     });
 
     // 二级权限选中或取消
     $("input[name^='permission_']").on('click', function () {
         let topid = $(this).attr('data-controller');
-        if($(this).is(':checked')) {
+        if ($(this).is(':checked')) {
             // 选中
-            $('#'+ topid).prop('checked', true);
+            if (topid !== 'compilation') {
+                $('#' + topid).prop('checked', true);
+            }
         } else {
             // 取消选中(排除工具这个独立分离的url)
             if (topid !== 'tool') {
                 // 不存在选中权限
-                if (!$("input[name='permission_"+ topid +"[]']").is(':checked')) {
-                    $('#'+ topid).prop('checked', false);
+                if (!$("input[name='permission_" + topid + "[]']").is(':checked')) {
+                    $('#' + topid).prop('checked', false);
                 }
             }
         }
@@ -167,7 +169,7 @@ $(document).ready(function() {
     });
 
     // 选择框
-    $(".selector > li > a").click(function() {
+    $(".selector > li > a").click(function () {
         let value = $(this).data("value");
         let string = $(this).text();
         let selector = $(this).parent().parent();
@@ -185,6 +187,6 @@ $(document).ready(function() {
             query.push('permission=' + $('#permission_select').val());
         }
         let requestUrl = query.join('&');
-        window.location.href = requestUrl !== '' ? '/manager?' + requestUrl :  '/manager';
+        window.location.href = requestUrl !== '' ? '/manager?' + requestUrl : '/manager';
     });
 });

+ 24 - 2
web/users/views/manager/authority.html

@@ -73,7 +73,7 @@
                     <% if (permission.count > 0) { %>
                     <div class="form-group">
                         <label for="title"><%= permission.name %>二级权限</label>
-                        <div class="checkbox" id="<%= permission.controller %>_permission">
+                        <div class="checkbox" id="<%= permission.controller %>_permission" style="margin-top: 0 !important;">
                             <% for(let second of permission.secondPermissionList){ %>
                             <label>
                                 <input type="checkbox" data-controller="<%= permission.controller %>" name="permission_<%= permission.controller %>[]" value="<%= second._id %>"> <%= second.name %>
@@ -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>
@@ -134,4 +144,16 @@
             </form>
         </div>
     </div>
-</div>
+</div>
+<script type="text/javascript">
+    console.log('sssss');
+    const topPermissionList = JSON.parse('<%- topPermissionListStr %>');
+    console.log('topPermissionList');
+    console.log(topPermissionList);
+    const permissionList = JSON.parse('<%- permissionListStr %>');
+    console.log('permissionList');
+    console.log(permissionList);
+    const groupList = JSON.parse('<%- groupList %>');
+    console.log('groupList');
+    console.log(groupList);
+</script>