优化双平台后台界面

This commit is contained in:
yml2213
2026-07-05 12:25:18 +08:00
parent 32065c75a3
commit 8f48b96fdc
7 changed files with 545 additions and 363 deletions
+28 -24
View File
@@ -1,10 +1,11 @@
import { useEffect, useState } from 'react';
import { Layout, Menu, Avatar, Space, Typography, Button, Modal, Dropdown } from 'antd';
import type { MenuProps } from 'antd';
import {
DashboardOutlined, UserOutlined, LogoutOutlined,
CloudServerOutlined, TeamOutlined, ApiOutlined, KeyOutlined,
MenuFoldOutlined, MenuUnfoldOutlined, SwapOutlined,
SunOutlined, MoonOutlined, DesktopOutlined, GiftOutlined, ShoppingCartOutlined,
SunOutlined, MoonOutlined, DesktopOutlined, GiftOutlined, ShoppingCartOutlined, ApartmentOutlined,
} from '@ant-design/icons';
import { useNavigate, useLocation, Outlet } from 'react-router-dom';
import { getUser, clearAuth, type AuthUser } from '../store/auth';
@@ -44,49 +45,52 @@ export default function MainLayout({ onLogout }: { onLogout?: () => void }) {
if (!user) return null;
const menuItems: { key: string; label: string; icon: React.ReactNode }[] = [];
const menuItems: MenuProps['items'] = [];
const douyuItems: NonNullable<MenuProps['items']> = [];
const huyaItems: NonNullable<MenuProps['items']> = [];
const systemItems: NonNullable<MenuProps['items']> = [];
// Dashboard - 所有人可见
menuItems.push({ key: '/', label: '概览', icon: <DashboardOutlined /> });
// 账号管理
// 斗鱼
if (canAny(['account:view_all', 'account:view_assigned'])) {
menuItems.push({ key: '/accounts', label: '账号管理', icon: <UserOutlined /> });
douyuItems.push({ key: '/accounts', label: '账号管理', icon: <UserOutlined /> });
}
// 分配管理
if (can('account:assign')) {
menuItems.push({ key: '/assignments', label: '分配管理', icon: <SwapOutlined /> });
douyuItems.push({ key: '/assignments', label: '分配管理', icon: <SwapOutlined /> });
}
// 登录任务
if (canAny(['login:batch', 'login:view_all'])) {
menuItems.push({ key: '/login-tasks', label: '登录任务', icon: <ApiOutlined /> });
douyuItems.push({ key: '/login-tasks', label: '登录任务', icon: <ApiOutlined /> });
}
// Cookie 管理
if (can('cookie:view')) {
menuItems.push({ key: '/cookies', label: 'Cookie 管理', icon: <KeyOutlined /> });
douyuItems.push({ key: '/cookies', label: 'Cookie 管理', icon: <KeyOutlined /> });
}
// 虎牙 CK 管理
// 虎牙
if (can('huya:account')) {
menuItems.push({ key: '/huya/accounts', label: '虎牙 CK', icon: <GiftOutlined /> });
huyaItems.push({ key: '/huya/accounts', label: '账号管理', icon: <GiftOutlined /> });
}
// 虎牙兑换与充值
if (can('huya:task')) {
menuItems.push({ key: '/huya/tasks', label: '虎牙任务', icon: <ShoppingCartOutlined /> });
huyaItems.push({ key: '/huya/tasks', label: '任务操作台', icon: <ShoppingCartOutlined /> });
}
// 代理配置
if (douyuItems.length > 0) {
menuItems.push({ key: 'group-douyu', type: 'group', label: '斗鱼', children: douyuItems });
}
if (huyaItems.length > 0) {
menuItems.push({ key: 'group-huya', type: 'group', label: '虎牙', children: huyaItems });
}
// 系统
if (can('proxy:manage')) {
menuItems.push({ key: '/proxy', label: '代理配置', icon: <CloudServerOutlined /> });
systemItems.push({ key: '/proxy', label: '代理配置', icon: <CloudServerOutlined /> });
}
// 用户管理
if (can('user:view')) {
menuItems.push({ key: '/users', label: '用户管理', icon: <TeamOutlined /> });
systemItems.push({ key: '/users', label: '用户管理', icon: <TeamOutlined /> });
}
if (systemItems.length > 0) {
menuItems.push({ key: 'group-system', type: 'group', label: '系统', children: systemItems });
}
const handleLogout = () => {
@@ -129,7 +133,7 @@ export default function MainLayout({ onLogout }: { onLogout?: () => void }) {
color: siderTextColor,
}}>
<span style={{ overflow: 'hidden', textOverflow: 'ellipsis' }}>
{collapsed ? '鱼' : '斗鱼登录后台'}
{collapsed ? <ApartmentOutlined /> : '直播运营后台'}
</span>
<Button
type="text"