浏览代码

新增切换项目

olym 7 年之前
父节点
当前提交
d9f0002132
共有 5 个文件被更改,包括 63 次插入3 次删除
  1. 22 1
      app/controller/project_controller.js
  2. 1 0
      app/router.js
  3. 38 0
      app/service/project.js
  4. 1 1
      app/service/project_account.js
  5. 1 1
      app/view/layout/layout.ejs

+ 22 - 1
app/controller/project_controller.js

@@ -77,12 +77,33 @@ module.exports = app => {
                 this.setMessage('保存成功', this.messageType.SUCCESS);
             } catch (error) {
                 this.setMessage(error.toString(), this.messageType.ERROR);
-                this.setMessage(error, this.messageType.ERROR);
             }
 
             ctx.redirect(ctx.request.headers.referer);
         }
 
+        /**
+         * 切换项目
+         *
+         * @param {Object} ctx - egg全局变量
+         * @return {void}
+         */
+        async switchProject(ctx) {
+            let projectId = ctx.params.projectId;
+            try {
+                projectId = parseInt(projectId);
+                if (isNaN(projectId) || projectId <= 0) {
+                    throw '参数错误!';
+                }
+                const result = await ctx.service.project.switchProject(projectId);
+                if (!result) {
+                    throw '切换项目失败!';
+                }
+            } catch (error) {
+                this.setMessage(error.toString(), this.messageType.ERROR);
+            }
+            ctx.redirect(ctx.request.headers.referer);
+        }
     }
 
     return ProjectController;

+ 1 - 0
app/router.js

@@ -27,6 +27,7 @@ module.exports = app => {
     app.get('/project/account', sessionAuth, projectManagerCheck, 'accountController.index');
     app.get('/project/account/enable/:accountId', sessionAuth, projectManagerCheck, 'accountController.enable');
     app.get('/project/account/disable/:accountId', sessionAuth, projectManagerCheck, 'accountController.enable');
+    app.get('/project/switch/:projectId', sessionAuth, projectManagerCheck, 'projectController.switchProject');
     app.post('/project/info', sessionAuth, 'projectController.saveInfo');
 
     // 台账管理相关

+ 38 - 0
app/service/project.js

@@ -70,6 +70,44 @@ module.exports = app => {
             const projectData = await this.db.queryOne(sql, sqlParam);
             return projectData;
         }
+
+        /**
+         * 切换项目
+         *
+         * @param {Number} projectId - 项目id
+         * @return {Boolean} - 返回切换结果
+         */
+        async switchProject(projectId) {
+            // 获取该用户拥有的项目数据
+            const sessionUser = this.ctx.session.sessionUser;
+            const projectInfo = await this.ctx.service.projectAccount.getProjectInfoByAccount(sessionUser.account);
+
+            let result = false;
+            // 判断切换的项目是否属于对应用户
+            if (projectInfo.length < 0) {
+                return result;
+            }
+
+            let targetProject = {};
+            for (const tmp of projectInfo) {
+                if (tmp.id === projectId) {
+                    result = true;
+                    targetProject = tmp;
+                }
+            }
+
+            // 成功后更改session
+            if (result) {
+                this.ctx.session.sessionProject = {
+                    id: targetProject.id,
+                    name: targetProject.name,
+                    userAccount: targetProject.user_account,
+                };
+            }
+
+            return result;
+        }
+
     }
 
     return Project;

+ 1 - 1
app/service/project_account.js

@@ -190,7 +190,7 @@ module.exports = app => {
          * @return {Array} - 返回数据
          */
         async getProjectInfoByAccount(account) {
-            let column = ['p.name', 'p.id'];
+            let column = ['p.name', 'p.id', 'p.user_account'];
             column = column.join(',');
             const sql = 'SELECT ' + column + ' FROM ' +
                 '?? AS pa ' +

+ 1 - 1
app/view/layout/layout.ejs

@@ -34,7 +34,7 @@
             <div class="dropdown-menu">
                 <% ctx.session.sessionProjectList.forEach(function(project) {%>
                 <% if (project.name !== null) {%>
-                <a href="#" class="dropdown-item"><%= project.name %></a>
+                <a href="/project/switch/<%= project.id %>" class="dropdown-item"><%= project.name %></a>
                 <% } %>
                 <% }) %>
             </div>