| | |
| | | |
| | | /** 角色 */ |
| | | const userRoles = computed(() => { |
| | | console.log(useUserStoreHook()?.roles, "useUserStoreHook()?.roles"); |
| | | |
| | | return isAllEmpty(useUserStoreHook()?.roles) |
| | | ? useUserStoreHook()?.roles |
| | | return isAllEmpty(useUserStoreHook()?.exRoles) |
| | | ? useUserStoreHook()?.exRoles |
| | | : {}; |
| | | }); |
| | | |
| | |
| | | } |
| | | if (Cookies.get(multipleTabsKey) && userInfo) { |
| | | // 无权限跳转403页面 |
| | | if (to.meta?.roles && !isOneOfArray(to.meta?.roles, userInfo?.roles)) { |
| | | if (to.meta?.roles && !isOneOfArray(to.meta?.roles, userInfo?.exRoles)) { |
| | | next({ path: "/error/403" }); |
| | | } |
| | | // 开启隐藏首页后在浏览器地址栏手动输入首页welcome路由则跳转到404页面 |
| | |
| | | /** 从localStorage里取出当前登录用户的角色roles,过滤无权限的菜单 */ |
| | | function filterNoPermissionTree(data: RouteComponent[]) { |
| | | const currentRoles = |
| | | storageLocal().getItem<DataInfo<number>>(userKey)?.roles ?? []; |
| | | storageLocal().getItem<DataInfo<number>>(userKey)?.exRoles ?? []; |
| | | const newTree = cloneDeep(data).filter((v: any) => |
| | | isOneOfArray(v.meta?.roles, currentRoles) |
| | | ); |
| | |
| | | // 昵称 |
| | | nickname: storageLocal().getItem<DataInfo<number>>(userKey)?.nickname ?? "", |
| | | // 页面级别权限 |
| | | roles: storageLocal().getItem<DataInfo<number>>(userKey)?.roles ?? [], |
| | | exRoles: storageLocal().getItem<DataInfo<number>>(userKey)?.exRoles ?? [], |
| | | // 按钮级别权限 |
| | | permissions: |
| | | storageLocal().getItem<DataInfo<number>>(userKey)?.permissions ?? [], |
| | |
| | | this.nickname = nickname; |
| | | }, |
| | | /** 存储角色 */ |
| | | SET_ROLES(roles: Array<string>) { |
| | | console.log(roles, "setroles"); |
| | | |
| | | this.roles = roles; |
| | | SET_ROLES(exRoles: Array<string>) { |
| | | this.exRoles = exRoles; |
| | | }, |
| | | /** 存储按钮级别权限 */ |
| | | SET_PERMS(permissions: Array<string>) { |
| | |
| | | /** 前端登出(不调用接口) */ |
| | | logOut() { |
| | | this.username = ""; |
| | | this.roles = []; |
| | | this.exRoles = []; |
| | | this.permissions = []; |
| | | removeToken(); |
| | | useMultiTagsStoreHook().handleTags("equal", [...routerArrays]); |
| | |
| | | avatar?: string; |
| | | username?: string; |
| | | nickname?: string; |
| | | roles?: Array<string>; |
| | | exRoles?: Array<string>; |
| | | permissions?: Array<string>; |
| | | isRemembered?: boolean; |
| | | loginDay?: number; |
| | |
| | | * @description 设置`token`以及一些必要信息并采用无感刷新`token`方案 |
| | | * 无感刷新:后端返回`accessToken`(访问接口使用的`token`)、`refreshToken`(用于调用刷新`accessToken`的接口时所需的`token`,`refreshToken`的过期时间(比如30天)应大于`accessToken`的过期时间(比如2小时))、`expires`(`accessToken`的过期时间) |
| | | * 将`accessToken`、`expires`、`refreshToken`这三条信息放在key值为authorized-token的cookie里(过期自动销毁) |
| | | * 将`avatar`、`username`、`nickname`、`roles`、`permissions`、`refreshToken`、`expires`这七条信息放在key值为`user-info`的localStorage里(利用`multipleTabsKey`当浏览器完全关闭后自动销毁) |
| | | * 将`avatar`、`username`、`nickname`、`exRoles`、`permissions`、`refreshToken`、`expires`这七条信息放在key值为`user-info`的localStorage里(利用`multipleTabsKey`当浏览器完全关闭后自动销毁) |
| | | */ |
| | | export function setToken(data: DataInfo<Date>) { |
| | | let expires = 0; |
| | |
| | | const userStore = useUserStore(); |
| | | |
| | | // 访问 state 属性 |
| | | console.log(userStore.roles,'-'); // 直接获取值 |
| | | // console.log(userStore.roles,'-'); // 直接获取值 |
| | | defineOptions({ |
| | | name: "Main" |
| | | }); |
| | |
| | | <div v-if="active !== 3" class="mx-auto pt-2 pb-5 flex justify-center"> |
| | | <el-button :disabled="active == 1" @click="backStep">上一步</el-button> |
| | | <el-button type="primary" @click="nextStep(ruleFormRef)" |
| | | ><span v-if="active == 1">同意</span>下一步</el-button |
| | | ><span v-if="active == 0">同意</span>下一步</el-button |
| | | > |
| | | </div> |
| | | </div> |
| | |
| | | import { getToken } from "@/utils/auth"; |
| | | import { useRoute, useRouter } from "vue-router"; |
| | | const router = useRouter(); |
| | | const { route, username, userRoles } = useNav(); |
| | | const { route } = useNav(); |
| | | |
| | | defineOptions({ |
| | | name: "RegisterNav" |
| | |
| | | }; |
| | | // 页面初始化 |
| | | onMounted(async () => { |
| | | // console.log( |
| | | // userRoles.code, |
| | | // username.value, |
| | | // "hhhhhhh", |
| | | // storageLocal().getItem<DataInfo<number>>(userKey)?.roles |
| | | // ); |
| | | // console.log(useUserStoreHook()?.roles, "useUserStoreHook()?.roles"); |
| | | let nowRole = useUserStoreHook()?.exRoles; |
| | | if (nowRole.length >= 1 && !route.query.code) { |
| | | state.ruleForm.transactionCode = nowRole[0].code; |
| | | } else { |
| | | state.ruleForm.transactionCode = route.query.code; |
| | | } |
| | | // 企业类型 |
| | | let res = await enterpriseTypes(); |
| | | state.enterpriseList = res?.result; |
| | | }); |
| | | let active = ref(0); |
| | | const nextStep = async (formEl: FormInstance | undefined) => { |
| | | console.log(state.ruleForm); |
| | | |
| | | if (active.value >= 1) { |
| | | if (!formEl) return; |
| | | await formEl.validate((valid, fields) => { |
| | |
| | | /** 是否显示父级菜单 `可选` */ |
| | | showParent?: boolean; |
| | | /** 页面级别权限设置 `可选` */ |
| | | roles?: Array<string>; |
| | | exRoles?: Array<string>; |
| | | /** 按钮级别权限设置 `可选` */ |
| | | auths?: Array<string>; |
| | | /** 路由组件缓存(开启 `true`、关闭 `false`)`可选` */ |