瀏覽代碼

Merge branch 'dev' of http://192.168.1.41:3000/maixinrong/Calculation into dev

MaiXinRong 2 月之前
父節點
當前提交
04d34a7e6b

+ 15 - 15
app/controller/dashboard_controller.js

@@ -49,11 +49,11 @@ module.exports = app => {
             // 获取版本信息
             const versionList = await ctx.service.version.getAllDataByCondition({ orders: [['id', 'desc']], limit: 5, offset: 0 });
             // 获取项目通知
-            const msgList = await ctx.service.message.getMsgList(ctx.session.sessionProject.id);
+            const msgList = await ctx.service.message.getMsgList(ctx.session.sessionProject.id, ctx.subProject.id);
             const userPermission = pa !== undefined && pa.permission !== '' ? JSON.parse(pa.permission) : null;
             const userMsgPermission = userPermission !== null && userPermission.project_msg !== undefined && parseInt(userPermission.project_msg) === 1;
             // 获取系统通知
-            const sysMsgList = await ctx.service.message.getMsgList(ctx.session.sessionProject.id, 1, 0, 2);
+            const sysMsgList = await ctx.service.message.getMsgList(ctx.session.sessionProject.id, '', 1, 0, 2);
             // 获取系统维护信息
             const maintainData = await ctx.service.maintain.getDataById(1);
             // 获取各个审批的次数及最后的审批时间
@@ -144,7 +144,7 @@ module.exports = app => {
             try {
                 const page = ctx.page;
 
-                const msgId = parseInt(ctx.params.id) || 0;
+                const msgId = parseInt(ctx.params.mid) || 0;
 
                 let msgInfo = msgId ? await ctx.service.message.getDataById(msgId) : null;
 
@@ -159,19 +159,19 @@ module.exports = app => {
                 }
 
                 const total = type === 1 ?
-                    await ctx.service.message.count({ project_id: ctx.session.sessionProject.id, type }) :
+                    await ctx.service.message.count({ project_id: ctx.session.sessionProject.id, spid: [ctx.subProject.id, ''], type }) :
                     await ctx.service.message.count({ status: 1, type });
 
                 const limit = 5;
                 const offset = limit * (this.ctx.page - 1);
 
-                const msgList = await ctx.service.message.getMsgList(ctx.session.sessionProject.id, limit, offset, type);
+                const msgList = await ctx.service.message.getMsgList(ctx.session.sessionProject.id, ctx.subProject.id, limit, offset, type);
 
                 const pa = await ctx.service.projectAccount.getDataById(ctx.session.sessionUser.accountId);
                 const userPermission = pa !== undefined && pa.permission !== '' ? JSON.parse(pa.permission) : null;
                 const userMsgPermission = userPermission !== null && userPermission.project_msg !== undefined && parseInt(userPermission.project_msg) === 1;
 
-                if (!msgId) {
+                if (!msgInfo) {
                     msgInfo = msgList[0];
                 }
                 // 分页相关
@@ -193,7 +193,7 @@ module.exports = app => {
                 console.log(error);
                 this.log(error);
                 ctx.session.postError = error.toString();
-                ctx.redirect('/dashboard');
+                ctx.redirect('/sp/' + ctx.subProject.id + '/dashboard');
             }
         }
 
@@ -204,7 +204,7 @@ module.exports = app => {
          * @return {void}
          */
         async msgAdd(ctx) {
-            let id = ctx.params.id;
+            let id = ctx.params.mid;
             id = parseInt(id);
             try {
                 if (isNaN(id) || id < 0) {
@@ -237,14 +237,14 @@ module.exports = app => {
          */
         async msgSet(ctx) {
             try {
-                let id = ctx.params.id;
+                let id = ctx.params.mid;
                 id = parseInt(id);
                 if (isNaN(id) || id < 0) {
                     throw '参数错误';
                 }
                 const rule = ctx.service.message.rule();
                 ctx.helper.validate(rule);
-                const result = await ctx.service.message.save(id, ctx.request.body, ctx.session.sessionUser, ctx.session.sessionProject.id);
+                const result = await ctx.service.message.save(id, ctx.request.body, ctx.session.sessionUser, ctx.session.sessionProject.id, ctx.subProject.id);
                 if (result) {
                     // 新增的项目通知会发送微信模版消息通知客户
                     if (id === 0) {
@@ -275,7 +275,7 @@ module.exports = app => {
                             }
                         }
                     }
-                    ctx.redirect('/dashboard/msg');
+                    ctx.redirect('/sp/' + ctx.subProject.id + '/dashboard/msg');
                 }
             } catch (error) {
                 console.log(error);
@@ -291,7 +291,7 @@ module.exports = app => {
          */
         async msgDelete(ctx) {
             try {
-                let id = ctx.params.id;
+                let id = ctx.params.mid;
                 id = parseInt(id);
                 if (isNaN(id) || id <= 0) {
                     throw '参数错误';
@@ -302,7 +302,7 @@ module.exports = app => {
                 }
                 const result = await ctx.service.message.deleteMsg(msgInfo.id);
                 if (result) {
-                    ctx.redirect('/dashboard/msg');
+                    ctx.redirect('/sp/' + ctx.subProject.id + '/dashboard/msg');
                 }
             } catch (error) {
                 console.log(error);
@@ -333,7 +333,7 @@ module.exports = app => {
             let stream;
             try {
                 const responseData = { err: 0, msg: '', data: {} };
-                const mid = ctx.params.id || 0;
+                const mid = ctx.params.mid || 0;
                 if (!mid) throw '参数有误';
                 const parts = this.ctx.multipart({
                     autoFields: true,
@@ -391,7 +391,7 @@ module.exports = app => {
          */
         async msgDeleteFile(ctx) {
             try {
-                const mid = ctx.params.id || 0;
+                const mid = ctx.params.mid || 0;
                 const responseData = { err: 0, msg: '', data: {} };
                 const data = JSON.parse(ctx.request.body.data);
                 const fileInfo = await ctx.service.messageAtt.getDataById(data.id);

+ 2 - 2
app/controller/payment_controller.js

@@ -254,7 +254,7 @@ module.exports = app => {
                         const modes = ctx.subProject.payment_setting ? JSON.parse(ctx.subProject.payment_setting) : ctx.helper._.cloneDeep(paymentConst.setting_modes);
                         const checked = data.checked;
                         if (modes[data.mode_type]) {
-                            const detailCount = await ctx.service.paymentDetail.getCountByPidType(ctx.session.sessionProject.id, modes[data.mode_type].value);
+                            const detailCount = await ctx.service.paymentDetail.getCountByPidType(ctx.subProject.id, modes[data.mode_type].value);
                             if (detailCount > 0 && !checked) {
                                 throw '已存在对应模块的详情,无法关闭该模块';
                             }
@@ -296,7 +296,7 @@ module.exports = app => {
                 }
                 const modes = ctx.subProject.payment_setting ? JSON.parse(ctx.subProject.payment_setting) : ctx.helper._.cloneDeep(paymentConst.setting_modes);
                 for (const m in modes) {
-                    const detailCount = await ctx.service.paymentDetail.getCountByPidType(ctx.session.sessionProject.id, modes[m].value);
+                    const detailCount = await ctx.service.paymentDetail.getCountByPidType(ctx.subProject.id, modes[m].value);
                     modes[m].can_check = !detailCount;
                 }
                 const renderData = {

+ 1 - 1
app/public/js/dashboard.js

@@ -36,7 +36,7 @@ $(document).ready(() => {
             $('#creator').html(msgInfo.creator);
             $('#view-msg .modal-title').text('项目通知');
             if (userMsgPermission && parseInt(uid) === msgInfo.create_uid) {
-                const permissionHtml = '<a href="/dashboard/msg/add/' + msgInfo.id + '" class="btn btn-sm btn-outline-primary">编辑</a>';
+                const permissionHtml = '<a href="/sp/' + spid +'/dashboard/msg/add/' + msgInfo.id + '" class="btn btn-sm btn-outline-primary">编辑</a>';
                 $('#user_permission').html(permissionHtml);
             }
         } else {

+ 7 - 7
app/router.js

@@ -222,13 +222,13 @@ module.exports = app => {
     // 项目列表跳转项目内部 todo 除标段内,均改为/sp/:id/xxx的链接形式
     // **控制面板
     app.get('/sp/:id/dashboard', sessionAuth, subProjectCheck, 'dashboardController.index');
-    app.get('/dashboard/msg', sessionAuth, 'dashboardController.msg');
-    app.get('/dashboard/msg/:id', sessionAuth, 'dashboardController.msg');
-    app.get('/dashboard/msg/add/:id', sessionAuth, 'dashboardController.msgAdd');
-    app.post('/dashboard/msg/set/:id', sessionAuth, datetimeFill, 'dashboardController.msgSet');
-    app.get('/dashboard/msg/del/:id', sessionAuth, 'dashboardController.msgDelete');
-    app.post('/dashboard/msg/:id/file/upload', sessionAuth, 'dashboardController.msgUploadFile');
-    app.post('/dashboard/msg/:id/file/del', sessionAuth, 'dashboardController.msgDeleteFile');
+    app.get('/sp/:id/dashboard/msg', sessionAuth, subProjectCheck, 'dashboardController.msg');
+    app.get('/sp/:id/dashboard/msg/:mid', sessionAuth, subProjectCheck, 'dashboardController.msg');
+    app.get('/sp/:id/dashboard/msg/add/:mid', sessionAuth, subProjectCheck, 'dashboardController.msgAdd');
+    app.post('/sp/:id/dashboard/msg/set/:mid', sessionAuth, subProjectCheck, datetimeFill, 'dashboardController.msgSet');
+    app.get('/sp/:id/dashboard/msg/del/:mid', sessionAuth, subProjectCheck, 'dashboardController.msgDelete');
+    app.post('/dashboard/msg/:mid/file/upload', sessionAuth, 'dashboardController.msgUploadFile');
+    app.post('/dashboard/msg/:mid/file/del', sessionAuth, 'dashboardController.msgDeleteFile');
     app.get('/wap/message/download/file/:fid', 'wapController.messageDownloadFile');
     // 推送相关
     // app.post('/dashboard/push', sessionAuth, 'dashboardController.pushSet');

+ 5 - 3
app/service/message.js

@@ -95,7 +95,7 @@ module.exports = app => {
          * @param {Object} data - post过来的数据
          * @return {Boolean} - 返回修改结果
          */
-        async save(id, data, user, projectId) {
+        async save(id, data, user, projectId, spid = '') {
             if (data._csrf_j !== undefined) {
                 delete data._csrf_j;
             }
@@ -110,6 +110,7 @@ module.exports = app => {
                 } else {
                     data.release_time = data.create_time;
                     data.project_id = projectId;
+                    data.spid = spid;
                     data.create_uid = user.accountId;
                     data.creator = user.name;
                     data.istop = parseInt(data.istop) === 1 ? data.create_time : 0;
@@ -146,9 +147,10 @@ module.exports = app => {
          * @param {Object} data - post过来的数据
          * @return {Boolean} - 返回修改结果
          */
-        async getMsgList(projectId, limit = 5, offset = 0, type = 1) {
+        async getMsgList(projectId, spid = '', limit = 5, offset = 0, type = 1) {
+            const sqSql = spid ? ' AND (`spid` = "' + spid + '" OR `spid` = "")' : ' AND `spid` = ""';
             if (type === 1) {
-                const sql = 'SELECT * FROM ?? WHERE `project_id` = ? AND `type` = ? ORDER BY CONCAT(`istop`,`release_time`) DESC LIMIT ?,?';
+                const sql = 'SELECT * FROM ?? WHERE `project_id` = ?' + sqSql + ' AND `type` = ? ORDER BY CONCAT(`istop`,`release_time`) DESC LIMIT ?,?';
                 const sqlParam = [this.tableName, projectId, type, offset, limit];
                 const result = await this.db.query(sql, sqlParam);
                 for (const r of result) {

+ 3 - 3
app/service/payment_detail.js

@@ -324,9 +324,9 @@ module.exports = app => {
             return this.count({ tender_id: tid });
         }
 
-        async getCountByPidType(pid, type = 1) {
-            const sql = 'SELECT count(pd.`id`) as count FROM ?? as pd LEFT JOIN ?? as pt ON pd.`tender_id` = pt.`id` WHERE pid = ? AND type = ?';
-            const params = [this.tableName, this.ctx.service.paymentTender.tableName, pid, type];
+        async getCountByPidType(spid, type = 1) {
+            const sql = 'SELECT count(pd.`id`) as count FROM ?? as pd LEFT JOIN ?? as pt ON pd.`tender_id` = pt.`id` WHERE pt.spid = ? AND pd.type = ?';
+            const params = [this.tableName, this.ctx.service.paymentTender.tableName, spid, type];
             const result = await this.db.queryOne(sql, params);
             return result ? result.count : 0;
         }

+ 2 - 2
app/view/dashboard/index.ejs

@@ -351,7 +351,7 @@
                     <div class="card ml-3">
                         <div class="card-header card-white d-flex justify-content-between">
                             <div class="card-big-htext"><span class="card-icon mr-2"></span>项目通知</div>
-                            <div class="mt-1"><a class="text-secondary" href="/dashboard/msg">查看全部</a></div>
+                            <div class="mt-1"><a class="text-secondary" href="/sp/<%- ctx.subProject.id %>/dashboard/msg">查看全部</a></div>
                         </div>
                         <div class="card-body p-0">
                             <div class="contant-height-three">
@@ -373,7 +373,7 @@
                             </div>
                             <% if (userMsgPermission) { %>
                                 <!--发布通知-->
-                                <div class="mx-3 pb-3 addmsg-height"><a class="btn btn-outline-primary btn-block" href="/dashboard/msg/add/0">发布通知</a></div>
+                                <div class="mx-3 pb-3 addmsg-height"><a class="btn btn-outline-primary btn-block" href="/sp/<%- ctx.subProject.id %>/dashboard/msg/add/0">发布通知</a></div>
                             <% } %>
                         </div>
                     </div>

+ 3 - 3
app/view/dashboard/msg.ejs

@@ -10,8 +10,8 @@
                         <div class="card">
                             <div class="card-header">
                                 <div class="btn-group btn-group-sm" role="group" aria-label="Basic example">
-                                    <a href="/dashboard/msg" <% if (type === 1 || (msgInfo && msgInfo.type === 1)) { %>class="btn btn-primary"<% } else { %>class="btn btn-outline-primary"<% } %>>项目通知</a>
-                                    <a href="/dashboard/msg?type=2" <% if (type === 2 || (msgInfo && msgInfo.type === 2)) { %>class="btn btn-primary"<% } else { %>class="btn btn-outline-primary"<% } %>>系统消息</a>
+                                    <a href="/sp/<%- ctx.subProject.id %>/dashboard/msg" <% if (type === 1 || (msgInfo && msgInfo.type === 1)) { %>class="btn btn-primary"<% } else { %>class="btn btn-outline-primary"<% } %>>项目通知</a>
+                                    <a href="/sp/<%- ctx.subProject.id %>/dashboard/msg?type=2" <% if (type === 2 || (msgInfo && msgInfo.type === 2)) { %>class="btn btn-primary"<% } else { %>class="btn btn-outline-primary"<% } %>>系统消息</a>
                                 </div>
                             </div>
                             <ul class="list-group list-group-flush msg-height-list">
@@ -34,7 +34,7 @@
                                     <span id="user_permission">
                                         <% if (uid === msgInfo.create_uid) { %>
                                             <!--有编辑权用户-->
-                                            <a href="/dashboard/msg/add/<%- msgInfo.id %>" class="btn btn-sm btn-outline-primary">编辑</a>
+                                            <a href="/sp/<%- ctx.subProject.id %>/dashboard/msg/add/<%- msgInfo.id %>" class="btn btn-sm btn-outline-primary">编辑</a>
                                         <% } %>
                                     </span>
                                 </p>

+ 1 - 1
app/view/dashboard/msg_add.ejs

@@ -5,7 +5,7 @@
     <div class="content-wrap">
         <div class="sjs-height-0">
             <div class="container py-5">
-                <form id="save-form" class="row" action="/dashboard/msg/set/<%= msgInfo.id === undefined ? 0 : msgInfo.id %>" method="post">
+                <form id="save-form" class="row" action="/sp/<%- ctx.subProject.id %>/dashboard/msg/set/<%= msgInfo.id === undefined ? 0 : msgInfo.id %>" method="post">
                     <div class="card col-9">
                         <div class="card-body">
                             <div class="msg-height-content">

+ 1 - 1
app/view/dashboard/msg_modal.ejs

@@ -10,7 +10,7 @@
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <a href="/dashboard/msg/del/<%= msgInfo.id %>" class="btn btn-danger confirm">确认删除</a>
+                <a href="/sp/<%- ctx.subProject.id %>/dashboard/msg/del/<%= msgInfo.id %>" class="btn btn-danger confirm">确认删除</a>
             </div>
         </div>
     </div>

+ 3 - 0
sql/update.sql

@@ -75,6 +75,9 @@ ALTER TABLE `zh_notice`
 ADD COLUMN `spid` varchar(36) NULL DEFAULT '' COMMENT '子项目id' AFTER `pid`,
 ADD COLUMN `tid` int(11) NULL DEFAULT NULL COMMENT '标段id' AFTER `spid`;
 
+ALTER TABLE `zh_message`
+ADD COLUMN `spid` varchar(36) NULL DEFAULT '' COMMENT '子项目id' AFTER `project_id`;
+
 ------------------------------------
 -- 表数据
 ------------------------------------