123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- import { defineStore } from 'pinia'
- import { routesMetas, RoutesName } from '@/router'
- import { fetchRoleOptions, RoleOption } from '@/api'
- import type { RoleOptions } from '@/api'
- export type { RoleOptions, RoleOption } from '@/api'
- export { fetchRoleOptions } from '@/api'
- type MenuTree = { key: RoleOption['id']; title: string; children: MenuTree[] }
- const transformMenuTree = (roleOptions: RoleOptions): MenuTree[] => {
- return roleOptions.map(role => ({
- title: routesMetas[role.path].title,
- key: role.id,
- children: role.children ? transformMenuTree(role.children) : []
- }))
- }
- export const useRoleStore = defineStore('role', {
- state: () => ({
- list: [] as RoleOptions
- }),
- getters: {
- getRole: state => (name: RoutesName) =>
- state.list.find(role => role.path === name)!,
- getRoles() {
- return (names: RoutesName[]) => names.map(name => this.getRole(name))
- },
- getRoleId() {
- return (name: RoutesName) => this.getRole(name).id
- },
- getRoleIds() {
- return (names: RoutesName[]) => names.map(name => this.getRoleId(name))
- },
- getName: state => (id: RoleOption['id']) =>
- state.list.find(role => role.id === id)!.path,
- getNames() {
- return (ids: RoleOption['id'][]) => ids.map(this.getName)
- },
- menuTree: state => {
- console.log(state.list)
- const tree = transformMenuTree(state.list)
- console.log(tree)
- return tree
- }
- },
- actions: {
- async fetch() {
- this.list = await fetchRoleOptions()
- }
- }
- })
|