mart-admin/src/views/limits/frontEnd/page/index.vue

94 lines
3.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div>
<el-alert
title="温馨提示此权限页面代码及效果只作为演示使用若出现不可逆转的bug请尝试 `F5` 刷新页面。若实际项目中非要实现此用户权限切换功能,
请在切换方法 `onRadioChange` 最后面添加刷新代码 `window.location.reload()`。 请注意按钮权限页面中的演示2指令模式、演示3函数模式
切换用户时无法动态演示,想要动态演示,请按 `F5` 或者添加 `window.location.reload()`。"
type="warning"
:closable="false"
></el-alert>
<el-alert
:title="`当前用户页面权限:[${userInfos.roles}],当前用户按钮权限:[${userInfos.authBtnList}]`"
type="success"
:closable="false"
class="mt15"
></el-alert>
<el-card shadow="hover" header="切换用户演示,前端控制不同用户显示不同页面、按钮权限" class="mt15">
<el-radio-group v-model="userAuth" size="default" @change="onRadioChange">
<el-radio-button label="admin"></el-radio-button>
<el-radio-button label="common"></el-radio-button>
</el-radio-group>
</el-card>
</div>
</template>
<script lang="ts">
import { toRefs, reactive, onMounted, defineComponent } from 'vue';
import { storeToRefs } from 'pinia';
import { useUserInfo } from '/@/stores/userInfo';
import { frontEndsResetRoute, setAddRoute, setFilterMenuAndCacheTagsViewRoutes } from '/@/router/frontEnd';
import { Session } from '/@/utils/storage';
export default defineComponent({
name: 'limitsFrontEndPage',
setup() {
const stores = useUserInfo();
const { userInfos } = storeToRefs(stores);
const state = reactive({
val: '',
userAuth: '',
});
// 初始化用户权限
const initUserAuth = () => {
state.userAuth = (<any>userInfos).value.roles[0];
};
// 用户权限改变时
const onRadioChange = async () => {
// 模拟数据
frontEndsResetRoute();
let defaultRoles: string[] = [];
let defaultAuthBtnList: string[] = [];
// admin 页面权限标识,对应路由 meta.roles用于控制路由的显示/隐藏
let adminRoles: string[] = ['admin'];
// admin 按钮权限标识
let adminAuthBtnList: string[] = ['btn.add', 'btn.del', 'btn.edit', 'btn.link'];
// test 页面权限标识,对应路由 meta.roles用于控制路由的显示/隐藏
let testRoles: string[] = ['common'];
// test 按钮权限标识
let testAuthBtnList: string[] = ['btn.add', 'btn.link'];
// 不同用户模拟不同的用户权限
if (state.userAuth === 'admin') {
defaultRoles = adminRoles;
defaultAuthBtnList = adminAuthBtnList;
} else {
defaultRoles = testRoles;
defaultAuthBtnList = testAuthBtnList;
}
const userInfos = {
userName: state.userAuth,
photo:
state.userAuth === 'admin'
? 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1813762643,1914315241&fm=26&gp=0.jpg'
: 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=317673774,2961727727&fm=26&gp=0.jpg',
time: new Date().getTime(),
roles: defaultRoles,
authBtnList: defaultAuthBtnList,
};
Session.set('userInfo', userInfos);
stores.setUserInfos({ ...userInfos }); // 请注意执行顺序(存储用户信息 pinia)
await setAddRoute();
setFilterMenuAndCacheTagsViewRoutes();
};
// 页面加载时
onMounted(() => {
initUserAuth();
});
return {
userInfos,
onRadioChange,
...toRefs(state),
};
},
});
</script>