You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
3.0 KiB
109 lines
3.0 KiB
/**
|
|
* 租户信息 store
|
|
*/
|
|
import { defineStore } from 'pinia';
|
|
import { formatMenus, toTreeData, formatTreeData } from 'ele-admin-pro';
|
|
import type { MenuItem } from 'ele-admin-pro';
|
|
import { Tenant } from "@/api/tennat/model";
|
|
import {useUserStore} from "@/store/modules/user";
|
|
import {getSiteInfo} from "@/api/cms/website";
|
|
import {ArrangeCategory} from "@/api/cms/category/model";
|
|
import {Website} from "@/api/cms/website/model";
|
|
|
|
export interface UserState {
|
|
config: any | null;
|
|
menus: MenuItem[] | null | undefined;
|
|
siteInfo: Website | null;
|
|
categoryList: ArrangeCategory[] | null | undefined;
|
|
}
|
|
|
|
export const useTenantStore = defineStore({
|
|
id: 'tenant',
|
|
state: (): UserState => ({
|
|
// 配置信息
|
|
config: null,
|
|
// 当前登录用户的菜单
|
|
menus: null,
|
|
// 企业信息
|
|
siteInfo: null,
|
|
// 文章分类
|
|
categoryList: null
|
|
}),
|
|
getters: {},
|
|
actions: {
|
|
/**
|
|
* 请求用户信息、权限、角色、菜单
|
|
*/
|
|
async fetchTenantInfo() {
|
|
const siteInfo = await getSiteInfo().catch(() => void 0);
|
|
if (!siteInfo) {
|
|
return {};
|
|
}
|
|
const { categoryList,config } = siteInfo;
|
|
this.siteInfo = siteInfo;
|
|
localStorage.setItem('tenantId', String(siteInfo.tenantId));
|
|
localStorage.setItem('tenantName', String(siteInfo.websiteName));
|
|
// 缓存配置
|
|
if(config){
|
|
localStorage.setItem('LICENSE_CODE',config.LICENSE_CODE)
|
|
localStorage.setItem('MAP_KEY',config.MAP_KEY)
|
|
}
|
|
// 用户菜单, 过滤掉按钮类型并转为 children 形式
|
|
const { menus, homePath } = formatMenus(
|
|
toTreeData({
|
|
data: categoryList
|
|
?.map((d) => {
|
|
// 新闻列表
|
|
if(d.type == 0){
|
|
d.path = `/article/${d.categoryId}`
|
|
}
|
|
// 链接
|
|
if(d.type == 2){
|
|
d.path = `${d.path}`
|
|
}
|
|
return {
|
|
...d,
|
|
name: d.title,
|
|
path: d.path,
|
|
component: d.component
|
|
};
|
|
}),
|
|
idField: 'categoryId',
|
|
parentIdField: 'parentId'
|
|
})
|
|
);
|
|
this.menus = menus;
|
|
console.log(menus);
|
|
const userStore = useUserStore();
|
|
// 更新网站菜单数据
|
|
userStore.setMenu(menus);
|
|
return { menus, homePath };
|
|
},
|
|
/**
|
|
* 更新租户信息
|
|
*/
|
|
setInfo(value: Tenant) {
|
|
if (value.config) {
|
|
this.config = value.config;
|
|
}
|
|
},
|
|
/**
|
|
* 更新菜单的 badge
|
|
*/
|
|
setMenuBadge(path: string, value?: number | string, color?: string) {
|
|
this.menus = formatTreeData(this.menus, (m) => {
|
|
if (path === m.path) {
|
|
return {
|
|
...m,
|
|
meta: {
|
|
...m.meta,
|
|
badge: value,
|
|
badgeColor: color
|
|
}
|
|
};
|
|
}
|
|
return m;
|
|
});
|
|
}
|
|
}
|
|
});
|