Browse Source

资金监管权限迁移及调整,脚本控制旧数据问题

ellisran 3 months ago
parent
commit
e384a55a82

+ 105 - 105
app/controller/financial_controller.js

@@ -26,102 +26,102 @@ module.exports = app => {
          * @param {Object} ctx - egg全局页面
          * @return {void}
          */
-        async index(ctx) {
-            try {
-                if (!ctx.subProject.page_show.openFinancial) {
-                    throw '该功能已关闭或无法查看';
-                }
-                const renderData = {
-                    jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.financial.index),
-                    auditConst,
-                };
-                renderData.projectList = await ctx.service.subProject.getSubProjectByFinancial(ctx.session.sessionProject.id, ctx.session.sessionUser.accountId, ctx.session.sessionUser.is_admin);
-                const accountList = await ctx.service.projectAccount.getAllSubProjectAccount(ctx.subProject);
-                for (const proj of renderData.projectList) {
-                    const financialPermission = await ctx.service.financialAudit.getPermission(proj.id, ctx.session.sessionUser.accountId);
-                    if (financialPermission.transfer_show) {
-                        proj.toUrl = 'transfer';
-                    } else if (financialPermission.pay_show) {
-                        proj.toUrl = 'pay';
-                    } else if (!financialPermission.transfer_show && !financialPermission.pay_show) {
-                        proj.toUrl = 'transfer';
-                    }
-                }
-                renderData.accountList = accountList;
-                const unitList = await ctx.service.constructionUnit.getAllDataByCondition({where: {pid: ctx.session.sessionProject.id}});
-                renderData.accountGroup = unitList.map(item => {
-                    const groupList = accountList.filter(item1 => item1.company === item.name);
-                    return { groupName: item.name, groupList };
-                }).filter(x => { return x.groupList.length > 0; });
-                // renderData.permissionConst = ctx.service.subProjPermission.PermissionConst;
-                renderData.categoryData = await this.ctx.service.category.getAllCategory(ctx.subProject);
-                renderData.companys = await this.ctx.service.constructionUnit.getAllDataByCondition({where: {pid: ctx.session.sessionProject.id}});
-                // renderData.templates = await this.ctx.service.filingTemplateList.getAllTemplate(ctx.session.sessionProject.id);
-                await this.layout('financial/index.ejs', renderData, 'financial/modal.ejs');
-            } catch (err) {
-                ctx.log(err);
-                ctx.session.postError = err.toString();
-                ctx.redirect(this.menu.menu.dashboard.url);
-            }
-        }
+        // async index(ctx) {
+        //     try {
+        //         if (!ctx.subProject.page_show.openFinancial) {
+        //             throw '该功能已关闭或无法查看';
+        //         }
+        //         const renderData = {
+        //             jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.financial.index),
+        //             auditConst,
+        //         };
+        //         renderData.projectList = await ctx.service.subProject.getSubProjectByFinancial(ctx.session.sessionProject.id, ctx.session.sessionUser.accountId, ctx.session.sessionUser.is_admin);
+        //         const accountList = await ctx.service.projectAccount.getAllSubProjectAccount(ctx.subProject);
+        //         for (const proj of renderData.projectList) {
+        //             const financialPermission = await ctx.service.financialAudit.getPermission(proj.id, ctx.session.sessionUser.accountId);
+        //             if (financialPermission.transfer_show) {
+        //                 proj.toUrl = 'transfer';
+        //             } else if (financialPermission.pay_show) {
+        //                 proj.toUrl = 'pay';
+        //             } else if (!financialPermission.transfer_show && !financialPermission.pay_show) {
+        //                 proj.toUrl = 'transfer';
+        //             }
+        //         }
+        //         renderData.accountList = accountList;
+        //         const unitList = await ctx.service.constructionUnit.getAllDataByCondition({where: {pid: ctx.session.sessionProject.id}});
+        //         renderData.accountGroup = unitList.map(item => {
+        //             const groupList = accountList.filter(item1 => item1.company === item.name);
+        //             return { groupName: item.name, groupList };
+        //         }).filter(x => { return x.groupList.length > 0; });
+        //         // renderData.permissionConst = ctx.service.subProjPermission.PermissionConst;
+        //         renderData.categoryData = await this.ctx.service.category.getAllCategory(ctx.subProject);
+        //         renderData.companys = await this.ctx.service.constructionUnit.getAllDataByCondition({where: {pid: ctx.session.sessionProject.id}});
+        //         // renderData.templates = await this.ctx.service.filingTemplateList.getAllTemplate(ctx.session.sessionProject.id);
+        //         await this.layout('financial/index.ejs', renderData, 'financial/modal.ejs');
+        //     } catch (err) {
+        //         ctx.log(err);
+        //         ctx.session.postError = err.toString();
+        //         ctx.redirect(this.menu.menu.dashboard.url);
+        //     }
+        // }
 
-        async auditSave(ctx) {
-            try {
-                if (ctx.session.sessionUser.is_admin === 0) throw '没有设置权限';
-                const responseData = {
-                    err: 0, msg: '', data: null,
-                };
-                const data = JSON.parse(ctx.request.body.data);
-                if (!data.type) {
-                    throw '提交数据错误';
-                }
-                let uids;
-                let result = false;
-                let auditList = [];
-                switch (data.type) {
-                    case 'add-audit':
-                        // 判断用户是单个还是数组
-                        uids = data.id instanceof Array ? data.id : [data.id];
-                        // 判断该用户的组是否已加入到表中,已加入则提示无需添加
-                        auditList = await ctx.service.financialAudit.getAllDataByCondition({ where: { spid: ctx.subProject.id } });
-                        const addAidList = ctx.helper._.difference(uids, ctx.helper._.map(auditList, 'uid'));
-                        if (addAidList.length === 0) {
-                            throw '用户已存在成员管理中,无需重复添加';
-                        }
-                        const accountList = await ctx.service.projectAccount.getAllDataByCondition({ where: { id: addAidList } });
-                        await ctx.service.financialAudit.saveAudits(ctx.subProject.id, accountList);
-                        responseData.data = await ctx.service.financialAudit.getList(ctx.subProject.id);
-                        break;
-                    case 'del-audit':
-                        uids = data.id instanceof Array ? data.id : [data.id];
-                        auditList = await ctx.service.financialAudit.getAllDataByCondition({ where: { spid: ctx.subProject.id, id: uids } });
-                        if (auditList.length !== uids.length) {
-                            throw '该用户已不存在成员管理中,移除失败';
-                        }
-                        await ctx.service.financialAudit.delAudit(uids);
-                        responseData.data = await ctx.service.financialAudit.getList(ctx.subProject.id);
-                        break;
-                    case 'save-permission':
-                        result = await ctx.service.financialAudit.updatePermission(data.updateData);
-                        if (!result) {
-                            throw '修改权限失败';
-                        }
-                        break;
-                    case 'list':
-                        responseData.data = await ctx.service.financialAudit.getList(ctx.subProject.id);
-                        break;
-                    default: throw '参数有误';
-                }
-                ctx.body = responseData;
-            } catch (err) {
-                this.log(err);
-                ctx.body = { err: 1, msg: err.toString(), data: null };
-            }
-        }
+        // async auditSave(ctx) {
+        //     try {
+        //         if (ctx.session.sessionUser.is_admin === 0) throw '没有设置权限';
+        //         const responseData = {
+        //             err: 0, msg: '', data: null,
+        //         };
+        //         const data = JSON.parse(ctx.request.body.data);
+        //         if (!data.type) {
+        //             throw '提交数据错误';
+        //         }
+        //         let uids;
+        //         let result = false;
+        //         let auditList = [];
+        //         switch (data.type) {
+        //             case 'add-audit':
+        //                 // 判断用户是单个还是数组
+        //                 uids = data.id instanceof Array ? data.id : [data.id];
+        //                 // 判断该用户的组是否已加入到表中,已加入则提示无需添加
+        //                 auditList = await ctx.service.financialAudit.getAllDataByCondition({ where: { spid: ctx.subProject.id } });
+        //                 const addAidList = ctx.helper._.difference(uids, ctx.helper._.map(auditList, 'uid'));
+        //                 if (addAidList.length === 0) {
+        //                     throw '用户已存在成员管理中,无需重复添加';
+        //                 }
+        //                 const accountList = await ctx.service.projectAccount.getAllDataByCondition({ where: { id: addAidList } });
+        //                 await ctx.service.financialAudit.saveAudits(ctx.subProject.id, accountList);
+        //                 responseData.data = await ctx.service.financialAudit.getList(ctx.subProject.id);
+        //                 break;
+        //             case 'del-audit':
+        //                 uids = data.id instanceof Array ? data.id : [data.id];
+        //                 auditList = await ctx.service.financialAudit.getAllDataByCondition({ where: { spid: ctx.subProject.id, id: uids } });
+        //                 if (auditList.length !== uids.length) {
+        //                     throw '该用户已不存在成员管理中,移除失败';
+        //                 }
+        //                 await ctx.service.financialAudit.delAudit(uids);
+        //                 responseData.data = await ctx.service.financialAudit.getList(ctx.subProject.id);
+        //                 break;
+        //             case 'save-permission':
+        //                 result = await ctx.service.financialAudit.updatePermission(data.updateData);
+        //                 if (!result) {
+        //                     throw '修改权限失败';
+        //                 }
+        //                 break;
+        //             case 'list':
+        //                 responseData.data = await ctx.service.financialAudit.getList(ctx.subProject.id);
+        //                 break;
+        //             default: throw '参数有误';
+        //         }
+        //         ctx.body = responseData;
+        //     } catch (err) {
+        //         this.log(err);
+        //         ctx.body = { err: 1, msg: err.toString(), data: null };
+        //     }
+        // }
 
         async transfer(ctx) {
             try {
-                const financialPermission = await ctx.service.financialAudit.getPermission(ctx.subProject.id, ctx.session.sessionUser.accountId);
+                const financialPermission = await ctx.service.subProjPermission.getFinancailPermission(ctx.subProject.permission.fund_trans_permission, ctx.subProject.permission.fund_pay_permission);
                 if (!financialPermission.transfer_show) {
                     throw '没有查看权限';
                 }
@@ -144,7 +144,7 @@ module.exports = app => {
 
         async transferAdd(ctx) {
             try {
-                const financialPermission = await ctx.service.financialAudit.getPermission(ctx.subProject.id, ctx.session.sessionUser.accountId);
+                const financialPermission = await ctx.service.subProjPermission.getFinancailPermission(ctx.subProject.permission.fund_trans_permission, ctx.subProject.permission.fund_pay_permission);
                 if (!financialPermission.transfer_add) {
                     throw '没有添加权限';
                 }
@@ -167,11 +167,11 @@ module.exports = app => {
 
         async transferTender(ctx) {
             try {
-                const financialPermission = await ctx.service.financialAudit.getPermission(ctx.subProject.id, ctx.session.sessionUser.accountId);
+                const financialPermission = await ctx.service.subProjPermission.getFinancailPermission(ctx.subProject.permission.fund_trans_permission, ctx.subProject.permission.fund_pay_permission);
                 if (!financialPermission.transfer_show) {
                     throw '没有查看权限';
                 }
-                const trid = ctx.params.id;
+                const trid = ctx.params.trid;
                 const transferInfo = await ctx.service.financialTransfer.getDataById(trid);
                 if (!transferInfo) {
                     throw '该资金划拨信息不存在';
@@ -249,11 +249,11 @@ module.exports = app => {
 
         async transferTenderUpdate(ctx) {
             try {
-                const financialPermission = await ctx.service.financialAudit.getPermission(ctx.subProject.id, ctx.session.sessionUser.accountId);
+                const financialPermission = await ctx.service.subProjPermission.getFinancailPermission(ctx.subProject.permission.fund_trans_permission, ctx.subProject.permission.fund_pay_permission);
                 if (!financialPermission.transfer_add) {
                     throw '没有权限';
                 }
-                const trid = ctx.params.id;
+                const trid = ctx.params.trid;
                 const transferInfo = await ctx.service.financialTransfer.getDataById(trid);
                 if (!transferInfo) {
                     throw '该资金划拨信息不存在';
@@ -295,12 +295,12 @@ module.exports = app => {
         async transferUploadFile(ctx) {
             let stream;
             try {
-                const financialPermission = await ctx.service.financialAudit.getPermission(ctx.subProject.id, ctx.session.sessionUser.accountId);
+                const financialPermission = await ctx.service.subProjPermission.getFinancailPermission(ctx.subProject.permission.fund_trans_permission, ctx.subProject.permission.fund_pay_permission);
                 if (!financialPermission.transfer_file) {
                     throw '没有权限';
                 }
                 const responseData = { err: 0, msg: '', data: {} };
-                const id = ctx.params.id;
+                const id = ctx.params.trid;
                 if (!id) throw '参数有误';
                 const parts = this.ctx.multipart({
                     autoFields: true,
@@ -358,7 +358,7 @@ module.exports = app => {
          */
         async transferDeleteFile(ctx) {
             try {
-                const id = ctx.params.id;
+                const id = ctx.params.trid;
                 const responseData = { err: 0, msg: '', data: {} };
                 const data = JSON.parse(ctx.request.body.data);
                 const fileInfo = await ctx.service.financialTransferAtt.getDataById(data.id);
@@ -426,13 +426,13 @@ module.exports = app => {
         async transferTenderUploadFile(ctx) {
             let stream;
             try {
-                const financialPermission = await ctx.service.financialAudit.getPermission(ctx.subProject.id, ctx.session.sessionUser.accountId);
+                const financialPermission = await ctx.service.subProjPermission.getFinancailPermission(ctx.subProject.permission.fund_trans_permission, ctx.subProject.permission.fund_pay_permission);
                 if (!financialPermission.transfer_file) {
                     throw '没有权限';
                 }
                 const responseData = { err: 0, msg: '', data: {} };
                 const trid = ctx.params.trid;
-                const id = ctx.params.id;
+                const id = ctx.params.ttid;
                 if (!id) throw '参数有误';
                 const parts = this.ctx.multipart({
                     autoFields: true,
@@ -491,7 +491,7 @@ module.exports = app => {
          */
         async transferTenderDeleteFile(ctx) {
             try {
-                const id = ctx.params.id;
+                const id = ctx.params.ttid;
                 const responseData = { err: 0, msg: '', data: {} };
                 const data = JSON.parse(ctx.request.body.data);
                 const fileInfo = await ctx.service.financialTransferTenderAtt.getDataById(data.id);
@@ -588,7 +588,7 @@ module.exports = app => {
         // }
 
         async _filterPay(ctx, status = 0, tid = null, used = null) {
-            const financialPermission = await ctx.service.financialAudit.getPermission(ctx.subProject.id, ctx.session.sessionUser.accountId);
+            const financialPermission = await ctx.service.subProjPermission.getFinancailPermission(ctx.subProject.permission.fund_trans_permission, ctx.subProject.permission.fund_pay_permission);
             if (!financialPermission.pay_show) {
                 throw '没有查看权限';
             }
@@ -1045,7 +1045,7 @@ module.exports = app => {
 
         async summary(ctx) {
             try {
-                const financialPermission = await ctx.service.financialAudit.getPermission(ctx.subProject.id, ctx.session.sessionUser.accountId);
+                const financialPermission = await ctx.service.subProjPermission.getFinancailPermission(ctx.subProject.permission.fund_trans_permission, ctx.subProject.permission.fund_pay_permission);
                 if (!financialPermission.transfer_show && !financialPermission.pay_show) {
                     throw '没有查看权限';
                 }

+ 3 - 2
app/middleware/financial_check.js

@@ -35,8 +35,9 @@ module.exports = options => {
             // }
             // this.subProject = yield this.service.subProject.getDataById(spid);
             if (this.subProject.project_id !== this.session.sessionProject.id) throw '您无权查看该项目资金监管';
-            const fAudit = yield this.service.financialAudit.getDataByCondition({ spid: this.subProject.id, uid: this.session.sessionUser.accountId });
-            if (!fAudit && !this.session.sessionUser.is_admin) throw '您无权查看该项目资金监管,请联系管理员添加';
+            const financialPermission = yield this.service.subProjPermission.getFinancailPermission(this.subProject.permission.fund_trans_permission, this.subProject.permission.fund_pay_permission);
+            // const fAudit = yield this.service.financialAudit.getDataByCondition({ spid: this.subProject.id, uid: this.session.sessionUser.accountId });
+            if (!financialPermission.transfer_show && !financialPermission.pay_show && !this.session.sessionUser.is_admin) throw '您无权查看该项目资金监管,请联系管理员添加';
             // if (!this.subProject) throw '项目不存在';
             yield next;
         } catch (err) {

+ 2 - 2
app/middleware/financial_pay_check.js

@@ -24,10 +24,10 @@ module.exports = options => {
      */
     return function* financialPayCheck(next) {
         try {
-            if (!this.session.sessionProject.page_show.openFinancial) {
+            if (!this.subProject) throw '项目不存在';
+            if (!this.subProject.page_show.openFinancial) {
                 throw '该功能已关闭或无法查看';
             }
-            if (!this.subProject) throw '项目不存在';
             const fpid = this.params.fpid;
             if (!fpid) {
                 throw '参数数据错误';

+ 9 - 9
app/middleware/sub_project_check.js

@@ -32,15 +32,6 @@ module.exports = options => {
             this.subProject.fun_set = this.service.subProject.getFunSet(this.subProject.fun_set);
             this.subProject.fun_rela = this.service.subProject.getFunRela(this.subProject);
 
-            const financialPermission = yield this.service.financialAudit.getPermission(this.subProject.id, this.session.sessionUser.accountId);
-            if (financialPermission.transfer_show) {
-                this.subProject.financialToUrl = 'transfer';
-            } else if (financialPermission.pay_show) {
-                this.subProject.financialToUrl = 'pay';
-            } else if (!financialPermission.transfer_show && !financialPermission.pay_show) {
-                this.subProject.financialToUrl = 'transfer';
-            }
-
             if (this.session.sessionUser.is_admin) {
                 this.subProject.readOnly = false;
                 this.subProject.permission = this.service.subProjPermission.adminPermission;
@@ -49,6 +40,15 @@ module.exports = options => {
                 if (!bp) throw '您无权查看该项目';
                 this.subProject.permission = bp;
             }
+            const financialPermission = yield this.service.subProjPermission.getFinancailPermission(this.subProject.permission.fund_trans_permission, this.subProject.permission.fund_pay_permission);
+            if (financialPermission.transfer_show) {
+                this.subProject.financialToUrl = 'transfer';
+            } else if (financialPermission.pay_show) {
+                this.subProject.financialToUrl = 'pay';
+            } else if (!financialPermission.transfer_show && !financialPermission.pay_show) {
+                this.subProject.financialToUrl = 'transfer';
+            }
+
             if (this.helper.isAjax(this.request) || this.method === 'POST' || this.service.subProjPermission.checkViewPermission(this)) {
                 yield next;
             } else {

+ 9 - 9
app/router.js

@@ -370,18 +370,18 @@ module.exports = app => {
 
     // **资金监管 todo 接入项目内部
     // app.get('/financial', sessionAuth, 'financialController.index');
-    app.post('/sp/:id/financial/audit/save', sessionAuth, subProjectCheck, financialCheck, 'financialController.auditSave');
+    // app.post('/financial/audit/save', sessionAuth, financialCheck, 'financialController.auditSave');
     app.get('/sp/:id/financial/transfer', sessionAuth, subProjectCheck, financialCheck, 'financialController.transfer');
     app.post('/sp/:id/financial/transfer/add', sessionAuth, subProjectCheck, financialCheck, 'financialController.transferAdd');
     app.post('/sp/:id/financial/transfer/update', sessionAuth, subProjectCheck, financialCheck, 'financialController.transferUpdate');
-    app.post('/sp/:id/financial/transfer/:id/file/upload', sessionAuth, subProjectCheck, financialCheck, 'financialController.transferUploadFile');
-    app.post('/sp/:id/financial/transfer/:id/file/delete', sessionAuth, subProjectCheck, financialCheck, 'financialController.transferDeleteFile');
-    app.get('/sp/:id/financial/transfer/:id/file/:fid/download', sessionAuth, subProjectCheck, financialCheck, 'financialController.transferDownloadFile');
-    app.get('/sp/:id/financial/transfer/:id/tender', sessionAuth, subProjectCheck, financialCheck, 'financialController.transferTender');
-    app.post('/sp/:id/financial/transfer/:id/tender/update', sessionAuth, subProjectCheck, financialCheck, 'financialController.transferTenderUpdate');
-    app.post('/sp/:id/financial/transfer/:trid/tender/:id/file/upload', sessionAuth, subProjectCheck, financialCheck, 'financialController.transferTenderUploadFile');
-    app.post('/sp/:id/financial/transfer/:trid/tender/:id/file/delete', sessionAuth, subProjectCheck, financialCheck, 'financialController.transferTenderDeleteFile');
-    app.get('/sp/:id/financial/transfer/:trid/tender/:id/file/:fid/download', sessionAuth, subProjectCheck, financialCheck, 'financialController.transferTenderDownloadFile');
+    app.post('/sp/:id/financial/transfer/:trid/file/upload', sessionAuth, subProjectCheck, financialCheck, 'financialController.transferUploadFile');
+    app.post('/sp/:id/financial/transfer/:trid/file/delete', sessionAuth, subProjectCheck, financialCheck, 'financialController.transferDeleteFile');
+    app.get('/sp/:id/financial/transfer/:trid/file/:fid/download', sessionAuth, subProjectCheck, financialCheck, 'financialController.transferDownloadFile');
+    app.get('/sp/:id/financial/transfer/:trid/tender', sessionAuth, subProjectCheck, financialCheck, 'financialController.transferTender');
+    app.post('/sp/:id/financial/transfer/:trid/tender/update', sessionAuth, subProjectCheck, financialCheck, 'financialController.transferTenderUpdate');
+    app.post('/sp/:id/financial/transfer/:trid/tender/:ttid/file/upload', sessionAuth, subProjectCheck, financialCheck, 'financialController.transferTenderUploadFile');
+    app.post('/sp/:id/financial/transfer/:trid/tender/:ttid/file/delete', sessionAuth, subProjectCheck, financialCheck, 'financialController.transferTenderDeleteFile');
+    app.get('/sp/:id/financial/transfer/:trid/tender/:ttid/file/:fid/download', sessionAuth, subProjectCheck, financialCheck, 'financialController.transferTenderDownloadFile');
     app.get('/sp/:id/financial/pay', sessionAuth, subProjectCheck, financialCheck, 'financialController.pay');
     app.post('/sp/:id/financial/pay/save', sessionAuth, subProjectCheck, financialCheck, 'financialController.paySave');
     app.get('/sp/:id/financial/pay/:fpid/detail', sessionAuth, subProjectCheck, financialCheck, financialPayCheck, financialPayAuditCheck, 'financialController.payDetail');

+ 1 - 1
app/service/financial_pay.js

@@ -271,7 +271,7 @@ module.exports = app => {
         async loadPayUser(pay) {
             const status = auditConst.status;
             const accountId = this.ctx.session.sessionUser.accountId;
-            pay.permission = await this.ctx.service.financialAudit.getPermission(this.ctx.subProject.id, accountId);
+            pay.permission = await this.ctx.service.subProjPermission.getFinancailPermission(this.ctx.subProject.permission.fund_trans_permission, this.ctx.subProject.permission.fund_pay_permission);
             pay.user = await this.ctx.service.projectAccount.getAccountInfoById(pay.uid);
             pay.auditors = await this.ctx.service.financialPayAudit.getAuditors(pay.id, pay.times); // 全部参与的审批人
             pay.auditorIds = this._.map(pay.auditors, 'aid');

+ 52 - 9
app/service/financial_pay_tender_audit.js

@@ -55,9 +55,10 @@ module.exports = app => {
             try {
                 // 判断是否已存在该用户,存在则不插入
                 const pauditList = await this.getAllDataByCondition({ where: { spid, tid } });
-                const financialAudits = await this.ctx.service.financialAudit.getAllDataByCondition({ where: { spid } });
+                const financialAudits = await this.ctx.service.subProjPermission.getAllDataByCondition({ where: { spid } });
                 const pushData = [];
-                const pushFinancialData = [];
+                const pushSubProjPermissionData = [];
+                const updateSubProjPermissionData = [];
                 for (const a of this._.uniqBy(accountList, 'id')) {
                     if (this._.findIndex(pauditList, { uid: a.id }) === -1) {
                         const data = {
@@ -68,19 +69,40 @@ module.exports = app => {
                         };
                         pushData.push(data);
                     }
-                    if (this._.findIndex(financialAudits, { uid: a.id }) === -1) {
-                        pushFinancialData.push({
+                    const subProjPermission = this._.find(financialAudits, { uid: a.id });
+                    if (!subProjPermission) {
+                        pushSubProjPermissionData.push({
+                            id: this.uuid.v4(),
                             spid,
+                            pid: this.ctx.session.sessionProject.id,
                             uid: a.id,
-                            create_time: new Date(),
+                            fund_trans_permission: 1,
+                            fund_pay_permission: 1,
                         });
+                    } else {
+                        subProjPermission.fund_trans_permission = subProjPermission.fund_trans_permission ? this._.map(subProjPermission.fund_trans_permission.split(','), this._.toInteger) : [];
+                        subProjPermission.fund_pay_permission = subProjPermission.fund_pay_permission ? this._.map(subProjPermission.fund_pay_permission.split(','), this._.toInteger) : [];
+                        const financialPermission = await this.ctx.service.subProjPermission.getFinancailPermission(subProjPermission.fund_trans_permission, subProjPermission.fund_pay_permission);
+                        if (!financialPermission.pay_show) {
+                            const upPermission = {
+                                id: subProjPermission.id,
+                                fund_pay_permission: subProjPermission.fund_pay_permission.push(1).join(','),
+                            };
+                            if (!financialPermission.transfer_show) {
+                                upPermission.fund_tran_permission = subProjPermission.fund_trans_permission.push(1).join(',');
+                            }
+                            updateSubProjPermissionData.push(upPermission);
+                        }
                     }
                 }
                 if (pushData.length > 0) {
                     await transaction.insert(this.tableName, pushData);
                 }
-                if (pushFinancialData.length > 0) {
-                    await transaction.insert(this.ctx.service.financialAudit.tableName, pushFinancialData);
+                if (pushSubProjPermissionData.length > 0) {
+                    await transaction.insert(this.ctx.service.subProjPermission.tableName, pushSubProjPermissionData);
+                }
+                if (updateSubProjPermissionData.length > 0) {
+                    await transaction.updateRows(this.ctx.service.subProjPermission.tableName, updateSubProjPermissionData);
                 }
                 transaction.commit();
             } catch (error) {
@@ -159,9 +181,30 @@ module.exports = app => {
                         await transaction.insert(this.tableName, { spid, tid, uid: data.audit_id, create_time: new Date() });
                     }
                     // 判断是否存在并加入到成员表中
-                    const fAudit = await this.ctx.service.financialAudit.getDataByCondition({ spid, uid: data.audit_id });
+                    const fAudit = await this.ctx.service.subProjPermission.getDataByCondition({ spid, uid: data.audit_id });
                     if (!fAudit) {
-                        await transaction.insert(this.ctx.service.financialAudit.tableName, { spid, uid: data.audit_id, create_time: new Date() });
+                        await transaction.insert(this.ctx.service.subProjPermission.tableName, {
+                            id: this.uuid.v4(),
+                            spid,
+                            pid: this.ctx.session.sessionProject.id,
+                            uid: data.audit_id,
+                            fund_trans_permission: 1,
+                            fund_pay_permission: 1,
+                        });
+                    } else {
+                        fAudit.fund_trans_permission = fAudit.fund_trans_permission ? this._.map(fAudit.fund_trans_permission.split(','), this._.toInteger) : [];
+                        fAudit.fund_pay_permission = fAudit.fund_pay_permission ? this._.map(fAudit.fund_pay_permission.split(','), this._.toInteger) : [];
+                        const financialPermission = await this.ctx.service.subProjPermission.getFinancailPermission(fAudit.fund_trans_permission, fAudit.fund_pay_permission);
+                        if (!financialPermission.pay_show) {
+                            const upPermission = {
+                                id: fAudit.id,
+                                fund_pay_permission: fAudit.fund_pay_permission.push(1).join(','),
+                            };
+                            if (!financialPermission.transfer_show) {
+                                upPermission.fund_tran_permission = fAudit.fund_trans_permission.push(1).join(',');
+                            }
+                            await transaction.update(this.ctx.service.subProjPermission.tableName, upPermission);
+                        }
                     }
                     await transaction.commit();
                     reponseData.permissionList = await this.getList(spid, tid);

+ 11 - 0
app/service/sub_proj_permission.js

@@ -303,6 +303,17 @@ module.exports = app => {
                 return ctx.subProject.permission[permissionBlock.field].indexOf(viewPermission.value) >= 0;
             }
         };
+
+        async getFinancailPermission(trans_permission, pay_permission) {
+            const permission = {
+                transfer_show: trans_permission.indexOf(1) !== -1,
+                transfer_add: trans_permission.indexOf(2) !== -1,
+                transfer_file: trans_permission.indexOf(3) !== -1,
+                pay_show: pay_permission.indexOf(1) !== -1,
+                pay_file: pay_permission.indexOf(3) !== -1,
+            };
+            return permission;
+        }
     }
 
     return subProjPermission;

+ 13 - 13
app/service/sub_project.js

@@ -536,19 +536,19 @@ module.exports = app => {
         }
 
         // 合同管理获取项目列表
-        async getSubProjectByFinancial(pid, uid, admin, filterFolder = false) {
-            let result = await this.getAllDataByCondition({ where: { project_id: pid, is_delete: 0 } });
-            if (admin) return this._filterEmptyFolder(result);
-
-            const permission = await this.ctx.service.financialAudit.getAllDataByCondition({ where: { uid } });
-            result = result.filter(x => {
-                if (x.is_folder) return !filterFolder;
-                const pb = permission.find(y => { return x.id === y.spid; });
-                if (!pb) return false;
-                return true;
-            });
-            return this._filterEmptyFolder(result);
-        }
+        // async getSubProjectByFinancial(pid, uid, admin, filterFolder = false) {
+        //     let result = await this.getAllDataByCondition({ where: { project_id: pid, is_delete: 0 } });
+        //     if (admin) return this._filterEmptyFolder(result);
+        //
+        //     const permission = await this.ctx.service.financialAudit.getAllDataByCondition({ where: { uid } });
+        //     result = result.filter(x => {
+        //         if (x.is_folder) return !filterFolder;
+        //         const pb = permission.find(y => { return x.id === y.spid; });
+        //         if (!pb) return false;
+        //         return true;
+        //     });
+        //     return this._filterEmptyFolder(result);
+        // }
 
         async getFileReference(subProject, file_type) {
             if (file_type) {

+ 1 - 1
app/view/financial/transfer_tender_modal.ejs

@@ -44,7 +44,7 @@
             <div class="modal-header">
                 <h5 class="modal-title">添加标段</h5>
             </div>
-            <div class="modal-body">
+            <div class="modal-body" style="max-height: 500px;overflow: auto;">
                 <table class="table table-bordered">
                     <thead class="text-center">
                     <tr>

+ 70 - 0
db_script/sub_project_permission_financial.js

@@ -0,0 +1,70 @@
+/*
+ 修改脚本,请现在指定spid测试
+ 例如: node db_script/sub_project local 3fcee213-92c9-41de-8f5a-b896c986311a
+ 没有意外再全部执行
+
+ 所有修改均应考虑脚本二次执行时的兼容,应检查是否已执行过,避免在生产环境运行时出现问题后需要二次执行,参见自定义分类脚本
+  */
+
+
+const BaseUtil = require('./baseUtils');
+const querySql = BaseUtil.querySql;
+const uuid = require('node-uuid');
+
+const getInsertSql = function (tableName, data) {
+    const column = [], query = [], value = [];
+    for (const prop in data) {
+        column.push(prop);
+        query.push('?');
+        value.push(data[prop]);
+    }
+    return [`INSERT INTO ${tableName} (${column.join(',')}) VALUES (${query.join(',')})`, value];
+};
+
+const doComplete = async function(spid) {
+    try {
+        const filter = spid ? ` where spid = '${spid}'` : '';
+        const audits = await querySql('Select * From zh_financial_audit' + filter);
+        for (const a of audits) {
+            const existSubProj = await querySql('SELECT * FROM zh_sub_project where id = ? and is_folder = 0 and is_delete = 0;', [a.spid]);
+            if (existSubProj.length === 0) {
+                continue;
+            } else {
+                const existSubProjPermission = await querySql('SELECT * FROM zh_sub_project_permission WHERE spid = ? and uid = ?', [existSubProj[0].id, a.uid]);
+                const fund_trans_permission = [];
+                if (a.permission_transfer_show) {
+                    fund_trans_permission.push(1);
+                }
+                if (a.permission_transfer_add) {
+                    fund_trans_permission.push(2);
+                }
+                if (a.permission_transfer_file) {
+                    fund_trans_permission.push(3);
+                }
+                const fund_pay_permission = [];
+                if (a.permission_pay_show) {
+                    fund_pay_permission.push(1);
+                }
+                if (a.permission_pay_file) {
+                    fund_pay_permission.push(3);
+                }
+                if (fund_trans_permission.length > 0 || fund_pay_permission.length > 0) {
+                    console.log('Copy sub_project_permission: ' + a.uid + ' ' + a.spid + ' ');
+                    if (existSubProjPermission.length === 0) {
+                        const sp_permission = { id: uuid.v4(), spid: existSubProj[0].id, pid: existSubProj[0].project_id, uid: a.uid, fund_trans_permission: fund_trans_permission.length > 0 ? fund_trans_permission.join(',') : '', fund_pay_permission: fund_pay_permission.length > 0 ? fund_pay_permission.join(',') : '' };
+                        const [spSql, spSqlParam] = getInsertSql('zh_sub_project_permission', sp_permission);
+                        await querySql(spSql, spSqlParam);
+                    } else {
+                        await querySql('Update zh_sub_project_permission SET fund_trans_permission = ?, fund_pay_permission = ? WHERE id = ?; ', [fund_trans_permission.length > 0 ? fund_trans_permission.join(',') : '', fund_pay_permission.length > 0 ? fund_pay_permission.join(',') : '', existSubProjPermission[0].id]);
+                    }
+                }
+            }
+            console.log('END Update;');
+        }
+    } catch (err) {
+        console.log(err);
+    }
+    BaseUtil.closePool();
+};
+const spid = process.argv[3];
+doComplete(spid);