增加前端格式检查配置

This commit is contained in:
yml2213
2026-06-08 06:40:33 +08:00
parent 79ea3a476c
commit 500f511185
150 changed files with 7254 additions and 4013 deletions
+25 -9
View File
@@ -1,7 +1,17 @@
import { defineStore } from 'pinia'
import { fetchAdminMe, loginAdmin, type AdminRole, type AdminUser } from '@/features/admin/api/adminAuth'
import { clearAuthStorage, getAccessToken, getRefreshToken, setAuthTokens } from '@/utils/authStorage'
import {
fetchAdminMe,
loginAdmin,
type AdminRole,
type AdminUser,
} from '@/features/admin/api/adminAuth'
import {
clearAuthStorage,
getAccessToken,
getRefreshToken,
setAuthTokens,
} from '@/utils/authStorage'
export const useAdminSessionStore = defineStore('adminSession', {
state: () => ({
@@ -10,19 +20,22 @@ export const useAdminSessionStore = defineStore('adminSession', {
adminId: Number(localStorage.getItem('admin_id') || 0),
username: localStorage.getItem('admin_username') || '',
nickname: '',
supportStatus: (localStorage.getItem('admin_support_status') || 'offline') as 'online' | 'offline' | 'busy',
supportStatus: (localStorage.getItem('admin_support_status') || 'offline') as
| 'online'
| 'offline'
| 'busy',
roles: [] as AdminRole[],
permissions: [] as string[],
}),
getters: {
hasPermission: (state) => {
hasPermission: state => {
return (code: string) => state.permissions.includes(code) || state.permissions.includes('*')
},
hasRole: (state) => {
return (code: string) => state.roles.some((r) => r.code === code)
hasRole: state => {
return (code: string) => state.roles.some(r => r.code === code)
},
isSuperAdmin: (state) => {
return state.roles.some((r) => r.code === 'super_admin') || state.permissions.includes('*')
isSuperAdmin: state => {
return state.roles.some(r => r.code === 'super_admin') || state.permissions.includes('*')
},
},
actions: {
@@ -53,7 +66,10 @@ export const useAdminSessionStore = defineStore('adminSession', {
this.refreshToken = getRefreshToken('admin')
this.adminId = Number(localStorage.getItem('admin_id') || 0)
this.username = localStorage.getItem('admin_username') || ''
this.supportStatus = (localStorage.getItem('admin_support_status') || 'offline') as 'online' | 'offline' | 'busy'
this.supportStatus = (localStorage.getItem('admin_support_status') || 'offline') as
| 'online'
| 'offline'
| 'busy'
},
applySession(admin: AdminUser, accessToken: string, refreshToken: string) {
this.token = accessToken
+63 -65
View File
@@ -1,42 +1,40 @@
import { defineStore } from "pinia";
import { defineStore } from 'pinia'
import { fetchMe, loginWithSms, updateMe, type AuthUser } from "@/features/auth/api/auth";
import { clearAuthStorage, getAccessToken, getRefreshToken, setAuthTokens } from "@/utils/authStorage";
import { fetchMe, loginWithSms, updateMe, type AuthUser } from '@/features/auth/api/auth'
import {
clearAuthStorage,
getAccessToken,
getRefreshToken,
setAuthTokens,
} from '@/utils/authStorage'
export const useSessionStore = defineStore("session", {
export const useSessionStore = defineStore('session', {
state: () => ({
token: getAccessToken("user"),
refreshToken: getRefreshToken("user"),
userId: Number(localStorage.getItem("user_id") || 0),
phone: localStorage.getItem("phone") || "",
nickname: localStorage.getItem("nickname") || "",
avatarUrl: localStorage.getItem("avatar_url") || "",
realnameStatus: localStorage.getItem("realname_status") || "unknown",
token: getAccessToken('user'),
refreshToken: getRefreshToken('user'),
userId: Number(localStorage.getItem('user_id') || 0),
phone: localStorage.getItem('phone') || '',
nickname: localStorage.getItem('nickname') || '',
avatarUrl: localStorage.getItem('avatar_url') || '',
realnameStatus: localStorage.getItem('realname_status') || 'unknown',
_loadingMe: false, // 防止重复调用
}),
getters: {
isLoggedIn: (state) => Boolean(state.token),
displayName: (state) =>
state.nickname ||
(state.phone
? `用户${state.phone.slice(-6)}`
: `用户${state.userId || 0}`),
avatarText: (state) => (state.nickname || state.phone || "U").slice(0, 1),
isLoggedIn: state => Boolean(state.token),
displayName: state =>
state.nickname || (state.phone ? `用户${state.phone.slice(-6)}` : `用户${state.userId || 0}`),
avatarText: state => (state.nickname || state.phone || 'U').slice(0, 1),
},
actions: {
async login(phone: string, code: string) {
const result = await loginWithSms(phone, code);
this.applySession(
result.user,
result.tokens.access_token,
result.tokens.refresh_token
);
return result;
const result = await loginWithSms(phone, code)
this.applySession(result.user, result.tokens.access_token, result.tokens.refresh_token)
return result
},
async loadMe() {
if (this._loadingMe) {
// 如果正在加载,等待完成
await new Promise((resolve) => {
await new Promise(resolve => {
const checkInterval = setInterval(() => {
if (!this._loadingMe) {
clearInterval(checkInterval)
@@ -49,59 +47,59 @@ export const useSessionStore = defineStore("session", {
this._loadingMe = true
try {
const user = await fetchMe();
this.applyUser(user);
return user;
const user = await fetchMe()
this.applyUser(user)
return user
} finally {
this._loadingMe = false
}
},
async updateProfile(payload: { nickname: string; avatar_url: string }) {
const user = await updateMe(payload);
this.applyUser(user);
return user;
const user = await updateMe(payload)
this.applyUser(user)
return user
},
logout() {
this.token = "";
this.refreshToken = "";
this.userId = 0;
this.phone = "";
this.nickname = "";
this.avatarUrl = "";
this.realnameStatus = "unknown";
clearAuthStorage("user");
this.token = ''
this.refreshToken = ''
this.userId = 0
this.phone = ''
this.nickname = ''
this.avatarUrl = ''
this.realnameStatus = 'unknown'
clearAuthStorage('user')
},
syncFromStorage() {
this.token = getAccessToken("user");
this.refreshToken = getRefreshToken("user");
this.userId = Number(localStorage.getItem("user_id") || 0);
this.phone = localStorage.getItem("phone") || "";
this.nickname = localStorage.getItem("nickname") || "";
this.avatarUrl = localStorage.getItem("avatar_url") || "";
this.realnameStatus = localStorage.getItem("realname_status") || "unknown";
this.token = getAccessToken('user')
this.refreshToken = getRefreshToken('user')
this.userId = Number(localStorage.getItem('user_id') || 0)
this.phone = localStorage.getItem('phone') || ''
this.nickname = localStorage.getItem('nickname') || ''
this.avatarUrl = localStorage.getItem('avatar_url') || ''
this.realnameStatus = localStorage.getItem('realname_status') || 'unknown'
},
applySession(user: AuthUser, accessToken: string, refreshToken: string) {
this.token = accessToken;
this.refreshToken = refreshToken;
this.userId = user.id;
setAuthTokens("user", {
this.token = accessToken
this.refreshToken = refreshToken
this.userId = user.id
setAuthTokens('user', {
access_token: accessToken,
refresh_token: refreshToken,
});
localStorage.setItem("user_id", String(user.id));
this.applyUser(user);
})
localStorage.setItem('user_id', String(user.id))
this.applyUser(user)
},
applyUser(user: AuthUser) {
this.userId = user.id;
localStorage.setItem("user_id", String(user.id));
this.phone = user.phone;
localStorage.setItem("phone", user.phone);
this.nickname = user.nickname;
localStorage.setItem("nickname", user.nickname);
this.avatarUrl = user.avatar_url;
localStorage.setItem("avatar_url", user.avatar_url);
this.realnameStatus = user.realname_status;
localStorage.setItem("realname_status", user.realname_status);
this.userId = user.id
localStorage.setItem('user_id', String(user.id))
this.phone = user.phone
localStorage.setItem('phone', user.phone)
this.nickname = user.nickname
localStorage.setItem('nickname', user.nickname)
this.avatarUrl = user.avatar_url
localStorage.setItem('avatar_url', user.avatar_url)
this.realnameStatus = user.realname_status
localStorage.setItem('realname_status', user.realname_status)
},
},
});
})