Commit 44c5b7bb8bb357924648c465e0e6764162d84de1
1 parent
668ef9f8
修改菜单权限
Showing
10 changed files
with
79 additions
and
81 deletions
src/layout/menu.vue
| ... | ... | @@ -49,71 +49,14 @@ onMounted(() => { |
| 49 | 49 | > |
| 50 | 50 | <template #title> |
| 51 | 51 | <el-icon><location /></el-icon> |
| 52 | - <span>{{ item.name }}假菜单</span> | |
| 52 | + <span>{{ item.name }}</span> | |
| 53 | 53 | </template> |
| 54 | 54 | <el-menu-item-group v-for="(ele, i) in item.menuList" :key="i"> |
| 55 | - <el-menu-item :index="ele.path ? ele.path : '/'">{{ | |
| 55 | + <el-menu-item :index="ele.url ? ele.url : '/'">{{ | |
| 56 | 56 | ele.name |
| 57 | 57 | }}</el-menu-item> |
| 58 | 58 | </el-menu-item-group> |
| 59 | 59 | </el-sub-menu> |
| 60 | - | |
| 61 | - <el-sub-menu index="11"> | |
| 62 | - <template #title> | |
| 63 | - <el-icon><location /></el-icon> | |
| 64 | - <span>物业管理真菜单可点</span> | |
| 65 | - </template> | |
| 66 | - <el-menu-item-group> | |
| 67 | - <el-menu-item index="/property">物业列表</el-menu-item> | |
| 68 | - </el-menu-item-group> | |
| 69 | - </el-sub-menu> | |
| 70 | - <el-sub-menu index="12"> | |
| 71 | - <template #title> | |
| 72 | - <el-icon><location /></el-icon> | |
| 73 | - <span>小区管理真菜单可点</span> | |
| 74 | - </template> | |
| 75 | - <el-menu-item-group> | |
| 76 | - <el-menu-item index="/community">小区管理</el-menu-item> | |
| 77 | - <el-menu-item index="/housekeeper">楼宇管理</el-menu-item> | |
| 78 | - <el-menu-item index="/houses">房屋管理</el-menu-item> | |
| 79 | - </el-menu-item-group> | |
| 80 | - </el-sub-menu> | |
| 81 | - <el-sub-menu index="13"> | |
| 82 | - <template #title> | |
| 83 | - <el-icon><location /></el-icon> | |
| 84 | - <span>用户管理真菜单可点</span> | |
| 85 | - </template> | |
| 86 | - <el-menu-item-group> | |
| 87 | - <el-menu-item index="/user">用户列表</el-menu-item> | |
| 88 | - </el-menu-item-group> | |
| 89 | - </el-sub-menu> | |
| 90 | - <el-sub-menu index="14"> | |
| 91 | - <template #title> | |
| 92 | - <el-icon><location /></el-icon> | |
| 93 | - <span>角色管理真菜单可点</span> | |
| 94 | - </template> | |
| 95 | - <el-menu-item-group> | |
| 96 | - <el-menu-item index="/role">角色列表</el-menu-item> | |
| 97 | - </el-menu-item-group> | |
| 98 | - </el-sub-menu> | |
| 99 | - <el-sub-menu index="15"> | |
| 100 | - <template #title> | |
| 101 | - <el-icon><location /></el-icon> | |
| 102 | - <span>权限管理真菜单可点</span> | |
| 103 | - </template> | |
| 104 | - <el-menu-item-group> | |
| 105 | - <el-menu-item index="/permission">权限列表</el-menu-item> | |
| 106 | - </el-menu-item-group> | |
| 107 | - </el-sub-menu> | |
| 108 | - <el-sub-menu index="16"> | |
| 109 | - <template #title> | |
| 110 | - <el-icon><location /></el-icon> | |
| 111 | - <span>系统管理真菜单可点</span> | |
| 112 | - </template> | |
| 113 | - <el-menu-item-group> | |
| 114 | - <el-menu-item index="/system">基本信息</el-menu-item> | |
| 115 | - </el-menu-item-group> | |
| 116 | - </el-sub-menu> | |
| 117 | 60 | </el-menu> |
| 118 | 61 | </el-scrollbar> |
| 119 | 62 | </template> | ... | ... |
src/pinia/modules/login.ts
| ... | ... | @@ -4,27 +4,49 @@ interface LoginUser { |
| 4 | 4 | token: string, |
| 5 | 5 | organizationId: number, |
| 6 | 6 | id: number, |
| 7 | - userName: string | |
| 7 | + userName: string, | |
| 8 | + organizationType: number | null, | |
| 9 | + organizationName: string, | |
| 10 | + organizationLogo: string | |
| 8 | 11 | } |
| 9 | 12 | const id: string = 'login' |
| 10 | 13 | const state: Function = () => ({ |
| 11 | 14 | token: '', |
| 12 | 15 | organizationId: null, |
| 13 | 16 | id: null, |
| 14 | - userName: '' | |
| 17 | + userName: '', | |
| 18 | + organizationType: null, | |
| 19 | + organizationName: '', | |
| 20 | + organizationLogo: '' | |
| 15 | 21 | }) |
| 16 | 22 | const getters = { |
| 17 | 23 | getToken() { |
| 24 | + // 记录登录状态的标识 | |
| 18 | 25 | return this.token |
| 19 | 26 | }, |
| 20 | 27 | getOid() { |
| 28 | + // 当前登录人的组织id | |
| 21 | 29 | return this.organizationId |
| 22 | 30 | }, |
| 23 | 31 | getId() { |
| 32 | + // 当前登录人的id | |
| 24 | 33 | return this.id |
| 25 | 34 | }, |
| 26 | 35 | getUserName() { |
| 36 | + // 当前登录人的用户名 | |
| 27 | 37 | return this.userName |
| 38 | + }, | |
| 39 | + getOtype () { | |
| 40 | + // 1 物业管理员,2 公益管理员 | |
| 41 | + return this.organizationType | |
| 42 | + }, | |
| 43 | + getOname () { | |
| 44 | + // 当前登录的组织名称 | |
| 45 | + return this.organizationName | |
| 46 | + }, | |
| 47 | + getOlogo () { | |
| 48 | + // 当前登陆的组织logo | |
| 49 | + return this.organizationLogo | |
| 28 | 50 | } |
| 29 | 51 | } |
| 30 | 52 | const actions = { |
| ... | ... | @@ -33,9 +55,13 @@ const actions = { |
| 33 | 55 | this.organizationId = obj.organizationId |
| 34 | 56 | this.id = obj.id |
| 35 | 57 | this.userName = obj.userName |
| 58 | + this.organizationName = obj.organizationName | |
| 59 | + this.organizationType = obj.organizationType | |
| 60 | + this.organizationLogo = obj.organizationLogo | |
| 36 | 61 | }, |
| 37 | 62 | removeToken(msg: string | null) { |
| 38 | 63 | this.token = '' |
| 64 | + window.localStorage.removeItem('store-data') | |
| 39 | 65 | ElMessage.success(msg || '已退出登录'); |
| 40 | 66 | setTimeout(() => { |
| 41 | 67 | router.replace('/login') | ... | ... |
src/views/permission/index.vue
src/views/property/index.vue
| ... | ... | @@ -42,8 +42,8 @@ const getList = async () => { |
| 42 | 42 | data.loading = true; |
| 43 | 43 | try { |
| 44 | 44 | const res = await propertyList(data.params.query); |
| 45 | - data.list = res.data.data.list; | |
| 46 | - data.params.total = res.data.data.total; | |
| 45 | + data.list = res?.data?.data?.list; | |
| 46 | + data.params.total = res?.data?.data?.total; | |
| 47 | 47 | } catch (e) { |
| 48 | 48 | console.log(e); |
| 49 | 49 | } finally { | ... | ... |
src/views/role/index.vue
| ... | ... | @@ -182,8 +182,18 @@ onMounted(() => { |
| 182 | 182 | </template> |
| 183 | 183 | </el-table-column> |
| 184 | 184 | <el-table-column label="操作" align="center"> |
| 185 | + <!-- 超级管理员、商务管理员、物业管理员、公益管理员这四个角色是系统角色,不可以编辑、删除。通过code字段判断 --> | |
| 185 | 186 | <template #default="scope"> |
| 186 | - <el-button type="text" | |
| 187 | + <el-button | |
| 188 | + type="text" | |
| 189 | + v-show=" | |
| 190 | + ![ | |
| 191 | + 'SUPER_ADMIN', | |
| 192 | + 'BUSINESS_ADMIN', | |
| 193 | + 'PROPERTY_ADMIN', | |
| 194 | + 'PUBLIC_BENEFIT_ADMIN', | |
| 195 | + ].includes(scope.row.code) | |
| 196 | + " | |
| 187 | 197 | ><router-link :to="{ path: '/role/edit', query: scope.row }" |
| 188 | 198 | >编辑</router-link |
| 189 | 199 | ></el-button |
| ... | ... | @@ -206,7 +216,17 @@ onMounted(() => { |
| 206 | 216 | >权限</router-link |
| 207 | 217 | ></el-button |
| 208 | 218 | > |
| 209 | - <el-button type="text" @click="handleDelete(scope.row)" | |
| 219 | + <el-button | |
| 220 | + type="text" | |
| 221 | + @click="handleDelete(scope.row)" | |
| 222 | + v-show=" | |
| 223 | + ![ | |
| 224 | + 'SUPER_ADMIN', | |
| 225 | + 'BUSINESS_ADMIN', | |
| 226 | + 'PROPERTY_ADMIN', | |
| 227 | + 'PUBLIC_BENEFIT_ADMIN', | |
| 228 | + ].includes(scope.row.code) | |
| 229 | + " | |
| 210 | 230 | >删除</el-button |
| 211 | 231 | > |
| 212 | 232 | </template> | ... | ... |
src/views/role/permission.vue
| ... | ... | @@ -60,8 +60,8 @@ const submitForm = (formEl: InstanceType<typeof ElForm> | undefined) => { |
| 60 | 60 | const getPermissions = async (roleId = useRoute().query.roleId) => { |
| 61 | 61 | try { |
| 62 | 62 | let res = await rolePermission({ roleId: roleId }); |
| 63 | - form.permissions = res.data.data; | |
| 64 | - form.defaultPermissions = getCheckedPermissions(res.data.data) | |
| 63 | + form.permissions = res?.data?.data; | |
| 64 | + form.defaultPermissions = getCheckedPermissions(res?.data?.data) | |
| 65 | 65 | } catch (e) { |
| 66 | 66 | console.log(e); |
| 67 | 67 | } | ... | ... |
src/views/role/user.vue
| ... | ... | @@ -43,8 +43,8 @@ const getList = async () => { |
| 43 | 43 | data.loading = true; |
| 44 | 44 | try { |
| 45 | 45 | const res = await roleUser(data.params.query); |
| 46 | - data.list = res.data.data.list; | |
| 47 | - data.params.total = res.data.data.total; | |
| 46 | + data.list = res?.data?.data?.list; | |
| 47 | + data.params.total = res?.data?.data?.total; | |
| 48 | 48 | } catch (e) { |
| 49 | 49 | console.log(e); |
| 50 | 50 | } finally { | ... | ... |
src/views/user/edit.vue
| ... | ... | @@ -5,6 +5,7 @@ import { roleList } from "@/api/user/role"; |
| 5 | 5 | import { getTableList } from "@/api/community/residence"; |
| 6 | 6 | import { useRoute } from "vue-router"; |
| 7 | 7 | import { validMobile } from "@/utils/validate"; |
| 8 | +import * as store from '@/pinia'; | |
| 8 | 9 | import type { ElForm } from "element-plus"; |
| 9 | 10 | const { |
| 10 | 11 | appContext: { |
| ... | ... | @@ -26,6 +27,9 @@ let form = reactive({ |
| 26 | 27 | checkList: [], |
| 27 | 28 | communityList: [], |
| 28 | 29 | }); |
| 30 | +let asyncData = reactive({ | |
| 31 | + userInfo: null | |
| 32 | +}) | |
| 29 | 33 | const ruleFormRef = ref<InstanceType<typeof ElForm>>(); |
| 30 | 34 | /** |
| 31 | 35 | * 校验手机号格式 |
| ... | ... | @@ -129,9 +133,9 @@ const getRoleList = async (pageSize: number = 20) => { |
| 129 | 133 | page: 1, |
| 130 | 134 | pageSize: pageSize, |
| 131 | 135 | }); |
| 132 | - form.roles = res.data.data.list; | |
| 133 | - if (res.data.data.total > pageSize) { | |
| 134 | - getRoleList(res.data.data.total); | |
| 136 | + form.roles = res?.data?.data?.list; | |
| 137 | + if (res?.data?.data?.total > pageSize) { | |
| 138 | + getRoleList(res?.data?.data?.total); | |
| 135 | 139 | } |
| 136 | 140 | } catch (e) { |
| 137 | 141 | console.log(e); |
| ... | ... | @@ -148,15 +152,17 @@ const getCommunityList = async (pageSize: number = 20) => { |
| 148 | 152 | type: 0, |
| 149 | 153 | pageSize: pageSize, |
| 150 | 154 | }); |
| 151 | - form.communities = res.data.data.list; | |
| 152 | - if (res.data.data.total > pageSize) { | |
| 153 | - getCommunityList(res.data.data.total); | |
| 155 | + form.communities = res?.data?.data?.list; | |
| 156 | + if (res?.data?.data?.total > pageSize) { | |
| 157 | + getCommunityList(res?.data?.data?.total); | |
| 154 | 158 | } |
| 155 | 159 | } catch (e) { |
| 156 | 160 | console.log(e); |
| 157 | 161 | } |
| 158 | 162 | }; |
| 159 | 163 | onMounted(() => { |
| 164 | + asyncData.userInfo = store.family.loginStore().id | |
| 165 | + asyncData.userType = store.family.loginStore().organizationType | |
| 160 | 166 | getRoleList(); |
| 161 | 167 | getCommunityList(); |
| 162 | 168 | form.data = useRoute().query; |
| ... | ... | @@ -218,11 +224,13 @@ onMounted(() => { |
| 218 | 224 | v-for="(item, index) in form.roles" |
| 219 | 225 | :key="index" |
| 220 | 226 | :label="item.id" |
| 227 | + :disabled="asyncData.userInfo === 1 && item.code !== 'BUSINESS_ADMIN'" | |
| 221 | 228 | >{{ item.roleName }}</el-checkbox |
| 222 | 229 | > |
| 223 | 230 | </el-checkbox-group> |
| 224 | 231 | </el-form-item> |
| 225 | - <el-form-item label="小区" style="width: 100%"> | |
| 232 | + <!-- 当前登录的用户是物业管理员,表单里才有关联小区 --> | |
| 233 | + <el-form-item label="小区" style="width: 100%" v-show="asyncData.userType === '1'"> | |
| 226 | 234 | <el-checkbox-group |
| 227 | 235 | v-model="form.communityList" |
| 228 | 236 | @change="(data) => (form.data.neighborhoodIds = data.join(','))" | ... | ... |
src/views/user/index.vue
| ... | ... | @@ -39,8 +39,8 @@ const getList = async () => { |
| 39 | 39 | data.loading = true; |
| 40 | 40 | try { |
| 41 | 41 | const res = await userList(data.params.query); |
| 42 | - data.list = res.data.data.list; | |
| 43 | - data.params.total = res.data.data.total; | |
| 42 | + data.list = res?.data?.data?.list; | |
| 43 | + data.params.total = res?.data?.data?.total; | |
| 44 | 44 | } catch (e) { |
| 45 | 45 | console.log(e); |
| 46 | 46 | } finally { | ... | ... |
src/views/user/login.vue
| ... | ... | @@ -36,7 +36,8 @@ const submitForm = (formEl: InstanceType<typeof ElForm> | undefined) => { |
| 36 | 36 | login(loginForm).then((res) => { |
| 37 | 37 | if (res?.data) { |
| 38 | 38 | globalProperties.$message.success("登录成功"); |
| 39 | - store.family.loginStore().setUserInfo(res.data.data); | |
| 39 | + // 登录成功返回的参数含义,到pinia/modules/login.ts中查看 | |
| 40 | + store.family.loginStore().setUserInfo(res?.data?.data); | |
| 40 | 41 | getMenu().then((res) => { |
| 41 | 42 | setTimeout(() => { |
| 42 | 43 | router.push({ path: "/" }); |
| ... | ... | @@ -55,7 +56,7 @@ const submitForm = (formEl: InstanceType<typeof ElForm> | undefined) => { |
| 55 | 56 | const getMenu = async () => { |
| 56 | 57 | try { |
| 57 | 58 | let res = await menuData(); |
| 58 | - store.family.menuStore().setMenuList(res.data.data); | |
| 59 | + store.family.menuStore().setMenuList(res?.data?.data); | |
| 59 | 60 | } catch (e) { |
| 60 | 61 | console.log(e); |
| 61 | 62 | } | ... | ... |