refactor: 优化权限示例页面 UI

This commit is contained in:
pany 2024-11-28 14:44:27 +08:00
parent d3b09be774
commit 97030fa04b
3 changed files with 37 additions and 46 deletions

View File

@ -12,16 +12,21 @@ watch(switchRoles, (value) => {
</script> </script>
<template> <template>
<div> <el-card shadow="never">
<div>你的角色{{ userStore.roles }}</div> <div>
<span>你的角色</span>
<el-tag v-for="(role, index) in userStore.roles" :key="index" effect="plain" size="large">
{{ role }}
</el-tag>
</div>
<div class="switch-roles"> <div class="switch-roles">
<span>切换用户模拟重新登录</span> <span>切换用户</span>
<el-radio-group v-model="switchRoles"> <el-radio-group v-model="switchRoles">
<el-radio-button label="editor" value="editor" /> <el-radio-button label="editor" value="editor" />
<el-radio-button label="admin" value="admin" /> <el-radio-button label="admin" value="admin" />
</el-radio-group> </el-radio-group>
</div> </div>
</div> </el-card>
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@ -6,51 +6,37 @@ import SwitchRoles from "./components/SwitchRoles.vue"
<template> <template>
<div class="app-container"> <div class="app-container">
<SwitchRoles /> <SwitchRoles />
<!-- v-permission 示例 --> <el-card header="权限指令 v-permission 示例" shadow="never" class="margin-top-20">
<div class="margin-top-30"> <el-button v-permission="['admin']">
<div> admin
<el-tag v-permission="['admin']" type="success" size="large" effect="plain"> </el-button>
这里采用了 v-permission="['admin']" 所以只有 admin 可以看见这句话 <el-button v-permission="['admin', 'editor']">
</el-tag> admin editor
</div> </el-button>
<div> </el-card>
<el-tag v-permission="['editor']" type="success" size="large" effect="plain"> <el-card header="权限函数 checkPermission 示例" shadow="never" class="margin-top-20">
这里采用了 v-permission="['editor']" 所以只有 editor 可以看见这句话 <el-text type="warning" size="large">
</el-tag> Element Plus el-tab-pane el-table-column 以及其它动态渲染 DOM 的场景不适合使用 v-permission
</div> 这种情况下你可以通过 v-if + checkPermission 来实现
<div class="margin-top-15"> </el-text>
<el-tag v-permission="['admin', 'editor']" type="success" size="large" effect="plain"> <el-tabs type="border-card" class="margin-top-20">
这里采用了 v-permission="['admin', 'editor']" 所以 admin editor 都可以看见这句话
</el-tag>
</div>
</div>
<!-- checkPermission 示例 -->
<div class="margin-top-30">
<el-tag type="warning" size="large">
例如 Element Plus el-tab-pane el-table-column 以及其它动态渲染 Dom 的场景不适合使用
v-permission这种情况下你可以通过 v-if checkPermission 来实现
</el-tag>
<el-tabs type="border-card" class="margin-top-15">
<el-tab-pane v-if="checkPermission(['admin'])" label="admin"> <el-tab-pane v-if="checkPermission(['admin'])" label="admin">
这里采用了 <el-tag>v-if="checkPermission(['admin'])"</el-tag> 所以只有 admin 可以看见这句话 <el-tag size="large">
</el-tab-pane> v-if="checkPermission(['admin'])"
<el-tab-pane v-if="checkPermission(['editor'])" label="editor"> </el-tag>
这里采用了 <el-tag>v-if="checkPermission(['editor'])"</el-tag> 所以只有 editor 可以看见这句话
</el-tab-pane> </el-tab-pane>
<el-tab-pane v-if="checkPermission(['admin', 'editor'])" label="admin 和 editor"> <el-tab-pane v-if="checkPermission(['admin', 'editor'])" label="admin 和 editor">
这里采用了 <el-tag>v-if="checkPermission(['admin', 'editor'])"</el-tag> 所以 admin editor 都可以看见这句话 <el-tag size="large">
v-if="checkPermission(['admin', 'editor'])"
</el-tag>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </el-card>
</div> </div>
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>
.margin-top-15 { .margin-top-20 {
margin-top: 15px; margin-top: 20px;
}
.margin-top-30 {
margin-top: 30px;
} }
</style> </style>

View File

@ -5,14 +5,14 @@ import SwitchRoles from "./components/SwitchRoles.vue"
<template> <template>
<div class="app-container"> <div class="app-container">
<SwitchRoles /> <SwitchRoles />
<el-tag type="warning" size="large"> <el-card shadow="never" class="content">
当前页面只有 admin 角色可见切换角色后将不能进入该页面 当前页面只有Admin角色可见切换角色后将不能进入该页面
</el-tag> </el-card>
</div> </div>
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>
.el-tag { .content {
margin-top: 15px; margin-top: 20px;
} }
</style> </style>