Sfoglia il codice sorgente

提交权限相关模块

olym 7 anni fa
parent
commit
af7923ef8c

+ 30 - 0
app/controller/account_controller.js

@@ -27,6 +27,7 @@ module.exports = app => {
                 const renderData = {
                     accountList,
                     permissionList: JSON.stringify(permission.permissionList),
+                    permissionString: JSON.stringify(permission.permissionString),
                 };
                 await this.layout('account/index.ejs', renderData);
             } catch (error) {
@@ -61,6 +62,35 @@ module.exports = app => {
             ctx.redirect(ctx.request.headers.referer);
         }
 
+        /**
+         * 保存用户权限
+         *
+         * @param {Object} ctx - egg全局变量
+         * @return {void}
+         */
+        async savePermission(ctx) {
+            let accountId = ctx.params.accountId;
+            const permission = ctx.request.body.permission;
+            const response = {
+                err: 0,
+                msg: '',
+            };
+            try {
+                accountId = parseInt(accountId);
+                if (isNaN(accountId) || accountId <= 0 || permission === '') {
+                    throw '参数错误';
+                }
+                const result = await ctx.service.projectAccount.save({ permission }, accountId);
+                if (!result) {
+                    throw '保存权限错误';
+                }
+            } catch (error) {
+                response.err = 1;
+                response.msg = error;
+            }
+
+            ctx.body = response;
+        }
 
     }
 

+ 1 - 0
app/router.js

@@ -25,6 +25,7 @@ module.exports = app => {
     // 项目相关
     app.get('/project/info', sessionAuth, 'projectController.info');
     app.get('/project/account', sessionAuth, projectManagerCheck, 'accountController.index');
+    app.post('/project/account/permission/:accountId', sessionAuth, projectManagerCheck, 'accountController.savePermission');
     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');

+ 1 - 1
app/service/project_account.js

@@ -181,7 +181,7 @@ module.exports = app => {
          */
         async getAccountByProjectId(projectId) {
             const condition = {
-                columns: ['id', 'account', 'name', 'company', 'role', 'mobile', 'telephone', 'enable'],
+                columns: ['id', 'account', 'name', 'company', 'role', 'mobile', 'telephone', 'enable', 'permission'],
                 where: { project_id: projectId, is_admin: 0 },
             };
             const accountList = await this.getAllDataByCondition(condition);

+ 87 - 2
app/view/account/index.ejs

@@ -65,7 +65,10 @@
                             <td><%= account.name %></td>
                             <td><%= account.company %></td>
                             <td><%= account.role %></td>
-                            <td>台帐管理(创建标段)<a href="#permission-form" data-toggle="modal" data-target="#permission-form" class="btn btn-sm">编辑</a></td>
+                            <td>
+                                <span class="permission-string"></span>
+                                <a href="#permission-form" data-toggle="modal" data-target="#permission-form" class="btn btn-sm permission" data-permission="<%= account.permission %>" data-id="<%= account.id %>">编辑</a>
+                            </td>
                         </tr>
                         <% }) %>
                         <% } %>
@@ -80,7 +83,28 @@
 let permissionList = '<%- permissionList %>';
 permissionList = JSON.parse(permissionList);
 
+let permissionString = '<%- permissionString %>';
+permissionString = JSON.parse(permissionString);
 $(document).ready(function() {
+
+    // 页面载入时显示权限中文
+    $(".permission").each(function() {
+        const permission = $(this).data('permission');
+        const permissionShowString = getPermissionString(permission);
+        $(this).prev(".permission-string").html(permissionShowString);
+    });
+
+    // 点击编辑权限按钮
+    let currentPermission = [];
+    let currentId = 0;
+    let currentTarget = null;
+    $(".permission").click(function() {
+        const permission = $(this).data('permission');
+        currentPermission = permission.split(',');
+        currentId = $(this).data('id');
+        currentTarget = $(this);
+    });
+
     // 初始化弹窗数据
     $("#permission-form").on("show.bs.modal", function() {
         let html = '';
@@ -89,8 +113,9 @@ $(document).ready(function() {
                 '<label><i class="fa '+ permissionList[index].icon +'"></i> '+ permissionList[index].name +'</label>' +
                 '<div>';
             for (const child of permissionList[index].permission) {
+                const checkedString = currentPermission.indexOf(child.value + '') >= 0 ? 'checked="checked"' : '';
                 html += '<div class="form-check form-check-inline">' +
-                    '<input class="form-check-input" type="checkbox" name="permission" value="'+ child.value +'">' +
+                    '<input class="form-check-input" type="checkbox" name="permission" value="'+ child.value +'" '+ checkedString +'>' +
                     '<label class="form-check-label">'+ child.name +'</label>' +
                     '</div>';
             }
@@ -98,6 +123,66 @@ $(document).ready(function() {
         }
         $(this).find('.modal-body').html(html);
     });
+
+    // 修改数据
+    let isChanging = false;
+    $("#modify-permission").click(function() {
+        currentId = parseInt(currentId);
+        if (isNaN(currentId) || currentId <= 0 || isChanging) {
+            return false;
+        }
+        const selectPermission = [];
+        $("input[name='permission']").each(function() {
+            if ($(this).is(":checked")) {
+                selectPermission.push($(this).val());
+            }
+        });
+
+        if (selectPermission.length <= 0) {
+            alert('请选择权限!');
+            return false;
+        }
+
+        $.ajax({
+            url: '/project/account/permission/' + currentId + "?_csrf=<%= ctx.csrf %>",
+            type: 'post',
+            data: { permission: selectPermission.join(',') },
+            error: function() {
+                alert('通信错误');
+                isChanging = false;
+            },
+            beforeSend: function() {
+                isChanging = true;
+            },
+            success: function(response) {
+                isChanging = false;
+                if (response.err !== 0) {
+                    alert(response.msg);
+                    return false;
+                }
+
+                const permissionShowString = getPermissionString(selectPermission);
+                currentTarget.prev(".permission-string").html(permissionShowString);
+
+                $("#permission-form").modal('hide');
+            }
+        });
+    });
 });
 
+function getPermissionString(permission) {
+    let result = '';
+    permission = permission instanceof Array ? permission : permission.split(",");
+    if (permission.length <= 0) {
+        return result;
+    }
+    const permissionArr = [];
+    for (const tmp of permission) {
+        if (permissionString[tmp] !== undefined) {
+            permissionArr.push(permissionString[tmp]);
+        }
+    }
+
+    return permissionArr.join(',');
+}
 </script>

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

@@ -38,96 +38,10 @@
                 <h5 class="modal-title">编辑权限</h5>
             </div>
             <div class="modal-body">
-                <div class="form-group">
-                    <label><i class="fa fa-list-ul"></i> 标段管理</label>
-                    <div>
-                        <div class="form-check form-check-inline">
-                            <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1">
-                            <label class="form-check-label" for="inlineCheckbox1">创建标段</label>
-                        </div>
-                        <div class="form-check form-check-inline">
-                            <input class="form-check-input" type="checkbox" id="inlineCheckbox2" value="option2">
-                            <label class="form-check-label" for="inlineCheckbox2">查看项目下所有标段</label>
-                        </div>
-                        <div class="form-check form-check-inline">
-                            <input class="form-check-input" type="checkbox" id="inlineCheckbox3" value="option2">
-                            <label class="form-check-label" for="inlineCheckbox3">仅查看我参与的(创建、审批)</label>
-                        </div>
-                    </div>
-                </div>
-                <div class="form-group">
-                    <label><i class="fa fa-list-alt"></i> 台帐分解(台帐管理)</label>
-                    <div>
-                        <div class="form-check form-check-inline">
-                            <input class="form-check-input" type="checkbox" id="inlineCheckbox4" value="option1">
-                            <label class="form-check-label" for="inlineCheckbox4">编制台帐</label>
-                        </div>
-                        <div class="form-check form-check-inline">
-                            <input class="form-check-input" type="checkbox" id="inlineCheckbox5" value="option2">
-                            <label class="form-check-label" for="inlineCheckbox5">审批台帐</label>
-                        </div>
-                    </div>
-                </div>
-                <div class="form-group">
-                    <label><i class="fa fa-list-alt"></i> 台帐变更(台帐管理)</label>
-                    <div>
-                        <div class="form-check form-check-inline">
-                            <input class="form-check-input" type="checkbox" id="inlineCheckbox6" value="option1">
-                            <label class="form-check-label" for="inlineCheckbox6">编制变更</label>
-                        </div>
-                        <div class="form-check form-check-inline">
-                            <input class="form-check-input" type="checkbox" id="inlineCheckbox7" value="option2">
-                            <label class="form-check-label" for="inlineCheckbox7">审批变更</label>
-                        </div>
-                    </div>
-                </div>
-                <div class="form-group">
-                    <label><i class="fa fa-list-alt"></i> 计量台帐(台帐管理)</label>
-                    <div>
-                        <div class="form-check form-check-inline">
-                            <input class="form-check-input" type="checkbox" id="inlineCheckbox8" value="option1">
-                            <label class="form-check-label" for="inlineCheckbox8">查看</label>
-                        </div>
-                    </div>
-                </div>
-                <div class="form-group">
-                    <label><i class="fa fa-calendar-check-o"></i> 中间计量(计量管理)</label>
-                    <div>
-                        <div class="form-check form-check-inline">
-                            <input class="form-check-input" type="checkbox" id="inlineCheckbox9" value="option1">
-                            <label class="form-check-label" for="inlineCheckbox9">编制中间计量</label>
-                        </div>
-                        <div class="form-check form-check-inline">
-                            <input class="form-check-input" type="checkbox" id="inlineCheckbox10" value="option1">
-                            <label class="form-check-label" for="inlineCheckbox10">审批中间计量</label>
-                        </div>
-                        <div class="form-check form-check-inline">
-                            <input class="form-check-input" type="checkbox" id="inlineCheckbox11" value="option1">
-                            <label class="form-check-label" for="inlineCheckbox11">查阅标段下所有中间计量</label>
-                        </div>
-                    </div>
-                </div>
-                <div class="form-group">
-                    <label><i class="fa fa-calendar-check-o"></i> 期计量(计量管理)</label>
-                    <div>
-                        <div class="form-check form-check-inline">
-                            <input class="form-check-input" type="checkbox" id="inlineCheckbox12" value="option1">
-                            <label class="form-check-label" for="inlineCheckbox12">编制期计量</label>
-                        </div>
-                        <div class="form-check form-check-inline">
-                            <input class="form-check-input" type="checkbox" id="inlineCheckbox13" value="option1">
-                            <label class="form-check-label" for="inlineCheckbox13">审批期计量</label>
-                        </div>
-                        <div class="form-check form-check-inline">
-                            <input class="form-check-input" type="checkbox" id="inlineCheckbox14" value="option1">
-                            <label class="form-check-label" for="inlineCheckbox14">查阅标段下所有期计量</label>
-                        </div>
-                    </div>
-                </div>
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary">提交修改</button>
+                <button type="button" class="btn btn-primary" id="modify-permission">提交修改</button>
             </div>
         </div>
     </div>

+ 17 - 0
config/permission.js

@@ -92,7 +92,24 @@ const permissionList = {
 
 };
 
+const permissionString = [];
+permissionString[permission.CREATE_TENDER] = '创建标段';
+permissionString[permission.VIEW_ALL_TENDER] = '查看项目下所有标段';
+permissionString[permission.VIEW_MY_TENDER] = '仅查看我参与的(创建、审批)';
+permissionString[permission.EDIT_LEDGER] = '编制台帐';
+permissionString[permission.APPROVAL_LEDGER] = '审批台帐';
+permissionString[permission.EDIT_APPROVAL] = '编制变更';
+permissionString[permission.CHANGE_APPROVAL] = '审批变更';
+permissionString[permission.VIEW_LEDGER] = '查看';
+permissionString[permission.EDIT_MIDDLE_MEASURE] = '编制中间计量';
+permissionString[permission.APPROVAL_MIDDLE_MEASURE] = '审批中间计量';
+permissionString[permission.VIEW_MIDDLE_MEASURE] = '查阅标段下所有中间计量';
+permissionString[permission.EDIT_STAGE_MEASURE] = '编制期计量';
+permissionString[permission.APPROVAL_STAGE_MEASURE] = '审批期计量';
+permissionString[permission.VIEW_STAGE_MEASURE] = '查阅标段下所有期计量';
+
 module.exports = {
     permission,
     permissionList,
+    permissionString,
 };