mirror of
https://github.com/bufanyun/hotgo.git
synced 2025-11-12 12:13:51 +08:00
版本预发布
This commit is contained in:
@@ -93,16 +93,23 @@ export const useAsyncRouteStore = defineStore({
|
||||
const { meta } = route;
|
||||
const { permissions } = meta || {};
|
||||
if (!permissions) return true;
|
||||
return permissionsList.some((item) => permissions.includes(item.value));
|
||||
return permissionsList.some((item) => permissions.includes(item));
|
||||
};
|
||||
const { getPermissionMode } = useProjectSetting();
|
||||
const permissionMode = unref(getPermissionMode);
|
||||
const $dialog = window['$dialog'];
|
||||
if (permissionMode === 'BACK') {
|
||||
// 动态获取菜单
|
||||
try {
|
||||
accessedRouters = await generatorDynamicRouter();
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
$dialog.info({
|
||||
title: '提示',
|
||||
content: '获取动态路由失败,管理员请确认是否为角色分配菜单权限?',
|
||||
positiveText: '确定',
|
||||
onPositiveClick: () => {},
|
||||
});
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
@@ -110,8 +117,15 @@ export const useAsyncRouteStore = defineStore({
|
||||
accessedRouters = filter(asyncRoutes, routeFilter);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
$dialog.info({
|
||||
title: '提示',
|
||||
content: '过滤动态路由失败,请联系管理员解决!',
|
||||
positiveText: '确定',
|
||||
onPositiveClick: () => {},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
accessedRouters = accessedRouters.filter(routeFilter);
|
||||
|
||||
this.setRouters(accessedRouters);
|
||||
|
||||
@@ -1,17 +1,46 @@
|
||||
import { defineStore } from 'pinia';
|
||||
import { store } from '@/store';
|
||||
import { PullMessages } from '@/api/apply/notice';
|
||||
import { MessageRow, MessageTab, parseMessage } from '@/enums/systemMessageEnum';
|
||||
|
||||
export interface INotificationStore {
|
||||
messages: any[];
|
||||
messages: MessageTab[];
|
||||
notifyUnread: number;
|
||||
noticeUnread: number;
|
||||
letterUnread: number;
|
||||
newMessage: MessageRow | null;
|
||||
}
|
||||
|
||||
export const notificationStore = defineStore({
|
||||
id: 'notificationStore',
|
||||
state: (): INotificationStore => ({
|
||||
messages: [],
|
||||
messages: [
|
||||
{
|
||||
key: 1,
|
||||
name: '通知',
|
||||
badgeProps: { type: 'warning' },
|
||||
list: [],
|
||||
},
|
||||
{
|
||||
key: 2,
|
||||
name: '公告',
|
||||
badgeProps: { type: 'error' },
|
||||
list: [],
|
||||
},
|
||||
{
|
||||
key: 3,
|
||||
name: '私信',
|
||||
badgeProps: { type: 'info' },
|
||||
list: [],
|
||||
},
|
||||
],
|
||||
notifyUnread: 0,
|
||||
noticeUnread: 0,
|
||||
letterUnread: 0,
|
||||
newMessage: null,
|
||||
}),
|
||||
getters: {
|
||||
getMessages(): [any][] {
|
||||
getMessages(): MessageTab[] {
|
||||
return this.messages;
|
||||
},
|
||||
},
|
||||
@@ -19,28 +48,51 @@ export const notificationStore = defineStore({
|
||||
setMessages(messages) {
|
||||
this.messages = messages;
|
||||
},
|
||||
addMessages(message) {
|
||||
message = JSON.parse(message);
|
||||
if (
|
||||
message.event !== undefined &&
|
||||
message.event === 'notice' &&
|
||||
message.data !== undefined &&
|
||||
message.data !== ''
|
||||
) {
|
||||
this.messages.unshift({
|
||||
title: message.data.title,
|
||||
description: message.data.type == 1 ? '通知' : '公告',
|
||||
content: message.data.content,
|
||||
meta: message.data.updatedAt,
|
||||
});
|
||||
}
|
||||
// 数据最大提醒条数,超出进行清理
|
||||
const limit = 10;
|
||||
if (this.messages.length > limit) {
|
||||
const sub = this.messages.length - limit;
|
||||
this.messages.splice(this.messages.length - sub);
|
||||
triggerNewMessages(message) {
|
||||
message = parseMessage(message);
|
||||
this.addMessages(message);
|
||||
this.newMessage = message;
|
||||
},
|
||||
addMessages(message: MessageRow) {
|
||||
switch (message.type) {
|
||||
case 1:
|
||||
this.messages[0].list.push(message);
|
||||
this.notifyUnread++;
|
||||
break;
|
||||
case 2:
|
||||
this.messages[1].list.push(message);
|
||||
this.noticeUnread++;
|
||||
break;
|
||||
case 3:
|
||||
this.messages[2].list.push(message);
|
||||
this.letterUnread++;
|
||||
break;
|
||||
}
|
||||
},
|
||||
pullMessages() {
|
||||
PullMessages().then((res) => {
|
||||
if (res.list === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.messages[0].list = [];
|
||||
this.messages[1].list = [];
|
||||
this.messages[2].list = [];
|
||||
|
||||
if (res.list?.length > 0) {
|
||||
for (let i = 0; i < res.list.length; i++) {
|
||||
this.addMessages(parseMessage(res.list[i]));
|
||||
}
|
||||
}
|
||||
|
||||
this.notifyUnread = res.notifyCount;
|
||||
this.noticeUnread = res.noticeCount;
|
||||
this.letterUnread = res.letterCount;
|
||||
});
|
||||
},
|
||||
getUnreadCount() {
|
||||
return this.notifyUnread + this.noticeUnread + this.letterUnread;
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -7,13 +7,41 @@ import { getConfig, getUserInfo, login } from '@/api/system/user';
|
||||
|
||||
const Storage = createStorage({ storage: localStorage });
|
||||
|
||||
export interface UserInfoState {
|
||||
id: number;
|
||||
deptName: string;
|
||||
roleName: string;
|
||||
cityLabel: string;
|
||||
permissions: string[];
|
||||
username: string;
|
||||
realName: string;
|
||||
avatar: string;
|
||||
balance: number;
|
||||
sex: number;
|
||||
qq: string;
|
||||
email: string;
|
||||
mobile: string;
|
||||
birthday: string;
|
||||
cityId: number;
|
||||
address: string;
|
||||
cash: {
|
||||
name: string;
|
||||
account: string;
|
||||
payeeCode: string;
|
||||
};
|
||||
createdAt: string;
|
||||
loginCount: number;
|
||||
lastLoginAt: string;
|
||||
lastLoginIp: string;
|
||||
}
|
||||
|
||||
export interface IUserState {
|
||||
token: string;
|
||||
username: string;
|
||||
welcome: string;
|
||||
realName: string;
|
||||
avatar: string;
|
||||
permissions: any[];
|
||||
info: any;
|
||||
info: UserInfoState | null;
|
||||
config: any;
|
||||
}
|
||||
|
||||
@@ -22,11 +50,11 @@ export const useUserStore = defineStore({
|
||||
state: (): IUserState => ({
|
||||
token: Storage.get(ACCESS_TOKEN, ''),
|
||||
username: '',
|
||||
welcome: '',
|
||||
realName: '',
|
||||
avatar: '',
|
||||
permissions: [],
|
||||
info: Storage.get(CURRENT_USER, {}),
|
||||
config: Storage.get(CURRENT_CONFIG, {}),
|
||||
info: Storage.get(CURRENT_USER, null),
|
||||
config: Storage.get(CURRENT_CONFIG, null),
|
||||
}),
|
||||
getters: {
|
||||
getToken(): string {
|
||||
@@ -35,13 +63,16 @@ export const useUserStore = defineStore({
|
||||
getAvatar(): string {
|
||||
return this.avatar;
|
||||
},
|
||||
getNickname(): string {
|
||||
getUsername(): string {
|
||||
return this.username;
|
||||
},
|
||||
getRealName(): string {
|
||||
return this.realName;
|
||||
},
|
||||
getPermissions(): [any][] {
|
||||
return this.permissions;
|
||||
},
|
||||
getUserInfo(): object {
|
||||
getUserInfo(): UserInfoState | null {
|
||||
return this.info;
|
||||
},
|
||||
getConfig(): object {
|
||||
@@ -55,10 +86,16 @@ export const useUserStore = defineStore({
|
||||
setAvatar(avatar: string) {
|
||||
this.avatar = avatar;
|
||||
},
|
||||
setPermissions(permissions) {
|
||||
setUsername(username: string) {
|
||||
this.username = username;
|
||||
},
|
||||
setRealName(realName: string) {
|
||||
this.realName = realName;
|
||||
},
|
||||
setPermissions(permissions: string[]) {
|
||||
this.permissions = permissions;
|
||||
},
|
||||
setUserInfo(info) {
|
||||
setUserInfo(info: UserInfoState | null) {
|
||||
this.info = info;
|
||||
},
|
||||
setConfig(config) {
|
||||
@@ -69,7 +106,6 @@ export const useUserStore = defineStore({
|
||||
try {
|
||||
const response = await login(userInfo);
|
||||
const { data, code } = response;
|
||||
console.log('data:' + JSON.stringify(data));
|
||||
if (code === ResultEnum.SUCCESS) {
|
||||
const ex = 7 * 24 * 60 * 60 * 1000;
|
||||
storage.set(ACCESS_TOKEN, data.token, ex);
|
||||
@@ -86,8 +122,7 @@ export const useUserStore = defineStore({
|
||||
|
||||
// 获取用户信息
|
||||
GetInfo() {
|
||||
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
||||
const that = this;
|
||||
const that: any = this;
|
||||
return new Promise((resolve, reject) => {
|
||||
getUserInfo()
|
||||
.then((res) => {
|
||||
@@ -96,10 +131,12 @@ export const useUserStore = defineStore({
|
||||
const permissionsList = result.permissions;
|
||||
that.setPermissions(permissionsList);
|
||||
that.setUserInfo(result);
|
||||
that.setAvatar(result.avatar);
|
||||
that.setUsername(result.username);
|
||||
that.setRealName(result.realName);
|
||||
} else {
|
||||
reject(new Error('getInfo: permissionsList must be a non-null array !'));
|
||||
}
|
||||
that.setAvatar(result.avatar);
|
||||
resolve(res);
|
||||
})
|
||||
.catch((error) => {
|
||||
@@ -107,9 +144,8 @@ export const useUserStore = defineStore({
|
||||
});
|
||||
});
|
||||
},
|
||||
// 获取用户信息
|
||||
// 获取用户配置
|
||||
GetConfig() {
|
||||
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
||||
const that = this;
|
||||
return new Promise((resolve, reject) => {
|
||||
getConfig()
|
||||
@@ -127,7 +163,7 @@ export const useUserStore = defineStore({
|
||||
// 登出
|
||||
async logout() {
|
||||
this.setPermissions([]);
|
||||
this.setUserInfo('');
|
||||
this.setUserInfo(null);
|
||||
storage.remove(ACCESS_TOKEN);
|
||||
storage.remove(CURRENT_USER);
|
||||
return Promise.resolve('');
|
||||
|
||||
Reference in New Issue
Block a user