# 用户创建任务权限前端控制功能说明 ## 功能概述 在用户登录后,系统会返回 `canCreateTask` 字段到 `getInfo` 接口响应中,并存储到 APP 的 Vuex store。当用户在任务创建页面点击任务类型时,会检查该权限字段,如果值为 `'0'`(无权限),则弹出提示"您没有权限创建任务",阻止用户进入任务创建表单页面。 ## 实现内容 ### 1. 后端接口修改 #### 1.1 getInfo 接口返回 canCreateTask **文件**:`ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java` **修改位置**:第 236-245 行 **修改内容**: ```java AjaxResult ajax = AjaxResult.success(); ajax.put("user", user); ajax.put("roles", roles); ajax.put("permissions", permissions); ajax.put("branchCompanyId", branchCompanyId); ajax.put("branchCompanyName", branchCompanyName); ajax.put("branchCompanies", branchCompanies); ajax.put("oaUserId", user.getOaUserId()); ajax.put("canCreateTask", user.getCanCreateTask()); // ✅ 新增 return ajax; ``` **说明**:在 getInfo 接口返回的 JSON 中添加 `canCreateTask` 字段,其值来自 `SysUser.canCreateTask`。 --- ### 2. APP 端存储层修改 #### 2.1 添加 constant 常量 **文件**:`app/utils/constant.js` **修改内容**: ```javascript const constant = { userId: 'vuex_userId', avatar: 'vuex_avatar', name: 'vuex_name', nickName: 'vuex_nickName', roles: 'vuex_roles', permissions: 'vuex_permissions', deptId: 'vuex_deptId', branchCompanyId: 'vuex_branchCompanyId', branchCompanyName: 'vuex_branchCompanyName', oaUserId: 'vuex_oaUserId', canCreateTask: 'vuex_canCreateTask' // ✅ 新增 } ``` **说明**:添加 `canCreateTask` 的存储键名常量,用于在本地存储中保存该字段。 --- #### 2.2 Vuex State 添加字段 **文件**:`app/store/modules/user.js` **修改位置 1**:第 11-23 行 ```javascript state: { token: getToken(), userId: storage.get(constant.userId), name: storage.get(constant.name), nickName: storage.get(constant.nickName), avatar: storage.get(constant.avatar), roles: storage.get(constant.roles), permissions: storage.get(constant.permissions), deptId: storage.get(constant.deptId), branchCompanyId: storage.get(constant.branchCompanyId), branchCompanyName: storage.get(constant.branchCompanyName), oaUserId: storage.get(constant.oaUserId), canCreateTask: storage.get(constant.canCreateTask) // ✅ 新增 }, ``` **说明**:在 Vuex state 中添加 `canCreateTask` 字段,从本地存储中读取初始值。 --- **修改位置 2**:第 65-72 行(mutations) ```javascript SET_OA_USER_ID: (state, oaUserId) => { state.oaUserId = oaUserId storage.set(constant.oaUserId, oaUserId) }, SET_CAN_CREATE_TASK: (state, canCreateTask) => { // ✅ 新增 state.canCreateTask = canCreateTask storage.set(constant.canCreateTask, canCreateTask) } ``` **说明**:添加 `SET_CAN_CREATE_TASK` mutation,用于更新 state 和本地存储。 --- **修改位置 3**:第 119-132 行(GetInfo Action) ```javascript commit('SET_USER_ID', userId) commit('SET_NAME', username) commit('SET_NICK_NAME', nickname) commit('SET_AVATAR', avatar) commit('SET_DEPT_ID', deptId) commit('SET_BRANCH_COMPANY_ID', res.branchCompanyId) commit('SET_BRANCH_COMPANY_NAME', res.branchCompanyName) commit('SET_OA_USER_ID', res.oaUserId) commit('SET_CAN_CREATE_TASK', res.canCreateTask) // ✅ 新增 resolve(res) ``` **说明**:在 GetInfo action 中提交 `SET_CAN_CREATE_TASK` mutation,将接口返回的 `canCreateTask` 存储到 Vuex。 --- ### 3. APP 端权限控制 #### 3.1 任务创建页面权限检查 **文件**:`app/pages/task/create.vue` **修改位置 1**:第 28-30 行(引入 mapState) ```javascript