Commit d03205eb56440a3ae6e8ef6e9ec900af40118375
1 parent
7ddbdeb0
debug
Showing
8 changed files
with
99 additions
and
42 deletions
src/components/Pagination/index.vue
src/layout/enter.vue
src/layout/header.vue
src/layout/icon.vue
0 → 100644
| 1 | +<script setup lang="ts"> | |
| 2 | +/** | |
| 3 | + * 公共布局入口组件 | |
| 4 | + * @module Enter | |
| 5 | + */ | |
| 6 | +import { onMounted, reactive, computed } from "vue"; | |
| 7 | +import { | |
| 8 | + HomeFilled, | |
| 9 | + Shop, | |
| 10 | + List, | |
| 11 | + Tools, | |
| 12 | + PhoneFilled, | |
| 13 | + Avatar, | |
| 14 | + Menu as IconMenu, | |
| 15 | +} from "@element-plus/icons-vue"; | |
| 16 | +/** | |
| 17 | + * @description 组件属性 | |
| 18 | + * @prop {number} keyId 一级菜单id | |
| 19 | + */ | |
| 20 | +interface Props { | |
| 21 | + keyId: number; | |
| 22 | +} | |
| 23 | +const props = withDefaults(defineProps<Props>(), { | |
| 24 | + keyId: 0, | |
| 25 | +}); | |
| 26 | +</script> | |
| 27 | + | |
| 28 | +<template> | |
| 29 | + <el-icon> | |
| 30 | + <IconMenu v-if="keyId === -1" /> | |
| 31 | + <HomeFilled v-else-if="keyId === 1000" /> | |
| 32 | + <Tools v-else-if="keyId === 2000" /> | |
| 33 | + <Shop v-else-if="keyId === 3000" /> | |
| 34 | + <Avatar v-else-if="keyId === 4000" /> | |
| 35 | + <PhoneFilled v-else-if="keyId === 5000" /> | |
| 36 | + <List v-else /> | |
| 37 | + </el-icon> | |
| 38 | +</template> | ... | ... |
src/layout/menu.vue
| ... | ... | @@ -2,18 +2,11 @@ |
| 2 | 2 | /** |
| 3 | 3 | * 公共布局侧导航 |
| 4 | 4 | * @module Menu |
| 5 | - * @author Tengxi | |
| 6 | 5 | */ |
| 7 | 6 | import { ref, computed, onMounted, reactive } from "vue"; |
| 8 | 7 | import * as store from "@/pinia/index"; |
| 9 | 8 | import styles from "@/style/global.module.scss"; |
| 10 | -// TIP 使用element plus ICON | |
| 11 | -import { | |
| 12 | - Location, | |
| 13 | - Document, | |
| 14 | - Menu as IconMenu, | |
| 15 | - Setting, | |
| 16 | -} from "@element-plus/icons-vue"; | |
| 9 | +import MenuIcon from './icon.vue' | |
| 17 | 10 | // TIP 获取scss样式变量 |
| 18 | 11 | let styleData = computed(() => { |
| 19 | 12 | return styles; |
| ... | ... | @@ -41,14 +34,20 @@ onMounted(() => { |
| 41 | 34 | :router="true" |
| 42 | 35 | :collapse-transition="false" |
| 43 | 36 | :collapse="asyncData.isCollapse" |
| 44 | - > | |
| 37 | + > | |
| 38 | + <el-menu-item index="/"> | |
| 39 | + <template #title> | |
| 40 | + <MenuIcon :keyId="-1"></MenuIcon> | |
| 41 | + <span>首页</span> | |
| 42 | + </template> | |
| 43 | + </el-menu-item> | |
| 45 | 44 | <el-sub-menu |
| 46 | 45 | :index="index + ''" |
| 47 | 46 | v-for="(item, index) in asyncData.menuData" |
| 48 | 47 | :key="index" |
| 49 | 48 | > |
| 50 | 49 | <template #title> |
| 51 | - <el-icon><location /></el-icon> | |
| 50 | + <MenuIcon :keyId="~~item.id"></MenuIcon> | |
| 52 | 51 | <span>{{ item.name }}</span> |
| 53 | 52 | </template> |
| 54 | 53 | <el-menu-item-group v-for="(ele, i) in item.menuList" :key="i"> | ... | ... |
src/views/dashboard/index.vue
| 1 | 1 | <script setup lang="ts"> |
| 2 | 2 | import {ref} from 'vue' |
| 3 | +import {propertyList } from '@/api/tengxi' | |
| 3 | 4 | import router from '@/router' |
| 4 | 5 | const title = ref(import.meta.env.VITE_APP_TITLE).value |
| 6 | +propertyList().then(res => { | |
| 7 | + console.log(res) | |
| 8 | +}).catch(error => { | |
| 9 | + console.log(error) | |
| 10 | +}) | |
| 5 | 11 | console.log(router.getRoutes()) |
| 6 | 12 | </script> |
| 7 | 13 | ... | ... |
src/views/user/edit.vue
| ... | ... | @@ -28,7 +28,8 @@ let form = reactive({ |
| 28 | 28 | communityList: [], |
| 29 | 29 | }); |
| 30 | 30 | let asyncData = reactive({ |
| 31 | - userInfo: null | |
| 31 | + userInfo: null, | |
| 32 | + userType: null | |
| 32 | 33 | }) |
| 33 | 34 | const ruleFormRef = ref<InstanceType<typeof ElForm>>(); |
| 34 | 35 | /** |
| ... | ... | @@ -164,7 +165,9 @@ onMounted(() => { |
| 164 | 165 | asyncData.userInfo = store.family.loginStore().id |
| 165 | 166 | asyncData.userType = store.family.loginStore().organizationType |
| 166 | 167 | getRoleList(); |
| 167 | - getCommunityList(); | |
| 168 | + if(~~asyncData.userType === 1) { | |
| 169 | + getCommunityList(); | |
| 170 | + } | |
| 168 | 171 | form.data = useRoute().query; |
| 169 | 172 | if (JSON.stringify(form.data) === "{}") { |
| 170 | 173 | form.dataType = "add"; | ... | ... |
src/views/user/index.vue
| ... | ... | @@ -2,6 +2,7 @@ |
| 2 | 2 | import { reactive, ref, onMounted } from "vue"; |
| 3 | 3 | import { userList, userPwd, userStatus } from "@/api/user/user"; |
| 4 | 4 | import { parseTime } from "@/utils/tool"; |
| 5 | +import * as store from "@/pinia"; | |
| 5 | 6 | import Pagination from "@/components/Pagination/index.vue"; |
| 6 | 7 | import { ElMessageBox, ElMessage } from "element-plus"; |
| 7 | 8 | interface Form { |
| ... | ... | @@ -32,6 +33,9 @@ let data = reactive({ |
| 32 | 33 | }, |
| 33 | 34 | }, |
| 34 | 35 | }); |
| 36 | +let asyncData = reactive({ | |
| 37 | + userInfo: null, | |
| 38 | +}); | |
| 35 | 39 | /** |
| 36 | 40 | * 列表 |
| 37 | 41 | */ |
| ... | ... | @@ -142,6 +146,7 @@ enum statusEnum { |
| 142 | 146 | "启用", |
| 143 | 147 | } |
| 144 | 148 | onMounted(() => { |
| 149 | + asyncData.userInfo = store.family.loginStore().id; | |
| 145 | 150 | getList(); |
| 146 | 151 | }); |
| 147 | 152 | </script> |
| ... | ... | @@ -205,35 +210,44 @@ onMounted(() => { |
| 205 | 210 | </el-table-column> |
| 206 | 211 | <el-table-column label="操作" align="center"> |
| 207 | 212 | <template #default="scope"> |
| 208 | - <el-button type="text" | |
| 209 | - ><router-link :to="{ path: '/user/edit', query: scope.row }" | |
| 210 | - >编辑</router-link | |
| 211 | - ></el-button | |
| 212 | - > | |
| 213 | - <el-button type="text" @click="handleUpdate(scope.row, 'status')">{{ | |
| 214 | - scope.row.status ? "禁用" : "启用" | |
| 215 | - }}</el-button> | |
| 216 | - <el-button type="text" @click="handleUpdate(scope.row, 'pwd')" | |
| 217 | - >初始密码</el-button | |
| 218 | - > | |
| 219 | - <el-button type="text" | |
| 220 | - ><router-link | |
| 221 | - :to="{ path: '/user/role', query: { id: scope.row.id } }" | |
| 222 | - >角色</router-link | |
| 223 | - ></el-button | |
| 224 | - > | |
| 225 | - <!-- 用户:商务管理员、机构管理员,不允许删除。 --> | |
| 226 | - <el-button | |
| 227 | - type="text" | |
| 228 | - @click="handleDelete(scope.row)" | |
| 229 | - v-show=" | |
| 230 | - ![ | |
| 231 | - 'SUPER_ADMIN', | |
| 232 | - 'BUSINESS_ADMIN', | |
| 233 | - ].includes(scope.row.roleList.map(i => i.code).join(',')) | |
| 213 | + <!-- 超管可以做全部操作 --> | |
| 214 | + <template v-if="!['SUPER_ADMIN'].includes( | |
| 215 | + scope.row.roleList.map((i) => i.code).join(',') | |
| 216 | + )"> | |
| 217 | + <el-button type="text" | |
| 218 | + ><router-link :to="{ path: '/user/edit', query: scope.row }" | |
| 219 | + >编辑</router-link | |
| 220 | + ></el-button | |
| 221 | + > | |
| 222 | + <el-button type="text" @click="handleUpdate(scope.row, 'status')">{{ | |
| 223 | + scope.row.status ? "禁用" : "启用" | |
| 224 | + }}</el-button> | |
| 225 | + <el-button type="text" @click="handleUpdate(scope.row, 'pwd')" | |
| 226 | + >初始密码</el-button | |
| 227 | + > | |
| 228 | + <el-button type="text" | |
| 229 | + ><router-link | |
| 230 | + :to="{ path: '/user/role', query: { id: scope.row.id } }" | |
| 231 | + >角色</router-link | |
| 232 | + ></el-button | |
| 233 | + > | |
| 234 | + <el-button type="text" @click="handleDelete(scope.row)" | |
| 235 | + >删除</el-button | |
| 236 | + > | |
| 237 | + </template> | |
| 238 | + <!-- 物业管理员(机构管理员)、商务管理员只可以改密码 --> | |
| 239 | + <!-- 其他角色用户不可以做任何操作 以上均通过角色的code判断 --> | |
| 240 | + <template | |
| 241 | + v-if=" | |
| 242 | + !['PROPERTY_ADMIN', 'BUSINESS_ADMIN'].includes( | |
| 243 | + scope.row.roleList.map((i) => i.code).join(',') | |
| 244 | + ) | |
| 234 | 245 | " |
| 235 | - >删除</el-button | |
| 236 | 246 | > |
| 247 | + <el-button type="text" @click="handleUpdate(scope.row, 'pwd')" | |
| 248 | + >初始密码</el-button | |
| 249 | + > | |
| 250 | + </template> | |
| 237 | 251 | </template> |
| 238 | 252 | </el-table-column> |
| 239 | 253 | </el-table> | ... | ... |