111
This commit is contained in:
@@ -1,10 +1,13 @@
|
||||
import { storeToRefs } from 'pinia'
|
||||
|
||||
import { useQueryClient } from '@tanstack/vue-query'
|
||||
|
||||
import { useAdminLoginMutation } from '@/services/api/monisuo-admin.api'
|
||||
import { useAuthStore } from '@/stores/auth'
|
||||
|
||||
export function useAuth() {
|
||||
const router = useRouter()
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
const authStore = useAuthStore()
|
||||
const { isLogin, adminInfo } = storeToRefs(authStore)
|
||||
@@ -15,6 +18,7 @@ export function useAuth() {
|
||||
|
||||
function logout() {
|
||||
authStore.logout()
|
||||
queryClient.clear()
|
||||
router.push({ path: '/auth/sign-in' })
|
||||
}
|
||||
|
||||
@@ -52,7 +56,7 @@ export function useAuth() {
|
||||
}
|
||||
catch (e: any) {
|
||||
console.error('Login error:', e)
|
||||
error.value = e.response?.data?.msg || '网络错误,请稍后重试'
|
||||
error.value = e.message || e.response?.data?.msg || '网络错误,请稍后重试'
|
||||
}
|
||||
finally {
|
||||
loading.value = false
|
||||
|
||||
@@ -22,6 +22,10 @@ export function useAxios() {
|
||||
})
|
||||
|
||||
axiosInstance.interceptors.response.use((response) => {
|
||||
const data = response.data as any
|
||||
if (data && data.code && data.code !== '0000') {
|
||||
return Promise.reject(new Error(data.msg || '请求失败'))
|
||||
}
|
||||
return response
|
||||
}, (error: AxiosError) => {
|
||||
if (error.response?.status === 401) {
|
||||
|
||||
@@ -1,21 +1,28 @@
|
||||
import { Coins, DollarSign, Palette, Receipt, Settings, TrendingUp, Users } from 'lucide-vue-next'
|
||||
import { CircleDollarSign, Coins, DollarSign, Palette, Receipt, Settings, ShieldCheck, TrendingUp, Users } from 'lucide-vue-next'
|
||||
|
||||
import type { NavGroup } from '@/components/app-sidebar/types'
|
||||
import { useAuthStore } from '@/stores/auth'
|
||||
|
||||
export function useSidebar() {
|
||||
const authStore = useAuthStore()
|
||||
const role = computed(() => authStore.adminInfo?.role ?? 2)
|
||||
const isSuperAdmin = computed(() => role.value === 1)
|
||||
|
||||
const settingsNavItems = [
|
||||
{ title: '外观设置', url: '/settings/appearance', icon: Palette },
|
||||
]
|
||||
|
||||
const navData = ref<NavGroup[]>([
|
||||
const allNavItems: NavGroup[] = [
|
||||
{
|
||||
title: 'Monisuo 管理',
|
||||
items: [
|
||||
{ title: '数据看板', url: '/monisuo/dashboard', icon: DollarSign },
|
||||
{ title: '用户管理', url: '/monisuo/users', icon: Users },
|
||||
{ title: '币种管理', url: '/monisuo/coins', icon: Coins },
|
||||
{ title: '订单审批', url: '/monisuo/orders', icon: Receipt },
|
||||
{ title: '业务分析', url: '/monisuo/analytics', icon: TrendingUp },
|
||||
{ title: '数据看板', url: '/monisuo/dashboard', icon: DollarSign, roles: [1] },
|
||||
{ title: '用户管理', url: '/monisuo/users', icon: Users, roles: [1] },
|
||||
{ title: '币种管理', url: '/monisuo/coins', icon: Coins, roles: [1] },
|
||||
{ title: '订单审批', url: '/monisuo/orders', icon: Receipt, roles: [1, 2] },
|
||||
{ title: '财务审批', url: '/monisuo/finance-orders', icon: CircleDollarSign, roles: [1, 3] },
|
||||
{ title: '业务分析', url: '/monisuo/analytics', icon: TrendingUp, roles: [1] },
|
||||
{ title: '管理员管理', url: '/monisuo/admins', icon: ShieldCheck, roles: [1] },
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -24,7 +31,19 @@ export function useSidebar() {
|
||||
{ title: 'Settings', icon: Settings, items: settingsNavItems },
|
||||
],
|
||||
},
|
||||
])
|
||||
]
|
||||
|
||||
const navData = computed<NavGroup[]>(() => {
|
||||
return allNavItems.map(group => ({
|
||||
title: group.title,
|
||||
items: group.items.filter((item) => {
|
||||
const roles = (item as any).roles as number[] | undefined
|
||||
if (!roles)
|
||||
return true
|
||||
return roles.includes(role.value)
|
||||
}),
|
||||
})).filter(group => group.items.length > 0)
|
||||
})
|
||||
|
||||
const otherPages = ref<NavGroup[]>([])
|
||||
|
||||
@@ -32,5 +51,6 @@ export function useSidebar() {
|
||||
navData,
|
||||
otherPages,
|
||||
settingsNavItems,
|
||||
isSuperAdmin,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user