代码修改

This commit is contained in:
fengxiangdebaozi committed 2026-06-12 18:45:04 +08:00
1 parent c6b17d5946
commit 7a8a29639f
2 files changed
+57 -53

No files matched your search

@@ -1,11 +1,10 @@
/** /**
* ????????????????? * 全局侧边栏菜单数据与权限过滤逻辑。
* *
* ?? ``PageSidebar`` ??? ``PageSidebarDark`` ?????? ?? ????? * 浅色 PageSidebar 和深色 PageSidebarDark 共用这份数据,菜单结构与
* adminOnly ??????????????UI ???icon ??/????/hover flyout? * adminOnly 权限策略对两种皮肤一致;UI 渲染在各自组件里实现。
* ?????????
* *
* ????????????? sidebar ????? * 修改菜单只需要改这一处,两个 sidebar 自动同步。
*/ */
import type { ElementType } from "react"; import type { ElementType } from "react";
import { import {
@@ -50,80 +49,85 @@ export type MenuItem = {
export const sidebarMenuItems: MenuItem[] = [ export const sidebarMenuItems: MenuItem[] = [
{ {
id: "qa-center", id: "qa-center",
label: "????", label: "问答中心",
icon: HelpCircle, icon: HelpCircle,
children: [ children: [
{ id: "general-qa", label: "????", icon: CircleHelp, path: "/page/workspace/chats/new" }, { id: "general-qa", label: "通用问答", icon: CircleHelp, path: "/page/workspace/chats/new" },
{ {
id: "multi-agent-roundtable", id: "multi-agent-roundtable",
label: "??????", label: "多智能体会商",
icon: Users, icon: Users,
path: "/page/strategy/qa/multi-agent-roundtable", path: "/page/strategy/qa/multi-agent-roundtable",
}, },
// { id: "expert-qa", label: "????", icon: Brain, path: "/page/strategy/qa/expert-qa" }, // { id: "expert-qa", label: "专家问答", icon: Brain, path: "/page/strategy/qa/expert-qa" },
{ {
id: "qa-zzjc", id: "qa-zzjc",
label: "zzJC支持", label: "zzJC支持",
icon: Bot, icon: Bot,
path: "/page/strategy/agents/6bf/chats/new", path: "/page/strategy/agents/6bf/chats/new",
}, },
{ id: "qa-zzxd", label: "zzXD??", icon: Layout, path: "/page/strategy/agents/10d69686718349688e58a8790cb61024/chats/new", }, {
{ id: "qa-research", label: "????", icon: FileText, path: "/page/canvas/ai-writing" }, id: "qa-zzxd",
label: "zzXD应用",
icon: Layout,
path: "/page/strategy/agents/10d69686718349688e58a8790cb61024/chats/new",
},
{ id: "qa-research", label: "课题研究", icon: FileText, path: "/page/canvas/ai-writing" },
], ],
}, },
// { // {
// id: "light-app-center", // id: "light-app-center",
// label: "???", // label: "应用中心",
// icon: Grid3X3, // icon: Grid3X3,
// children: [ // children: [
// { // {
// id: "light-app-note-management", // id: "light-app-note-management",
// label: "????", // label: "笔记管理",
// icon: NotebookPen, // icon: NotebookPen,
// children: [ // children: [
// { // {
// id: "light-app-new-note", // id: "light-app-new-note",
// label: "????", // label: "新建笔记",
// icon: Plus, // icon: Plus,
// path: "/page/strategy/light-app/new-note", // path: "/page/strategy/light-app/new-note",
// }, // },
// { // {
// id: "light-app-note-list", // id: "light-app-note-list",
// label: "????", // label: "笔记列表",
// icon: List, // icon: List,
// path: "/page/strategy/light-app/notes", // path: "/page/strategy/light-app/notes",
// }, // },
// { // {
// id: "light-app-note-qa", // id: "light-app-note-qa",
// label: "????", // label: "笔记问答",
// icon: MessageSquareCode, // icon: MessageSquareCode,
// path: "/page/strategy/light-app/note-qa", // path: "/page/strategy/light-app/note-qa",
// }, // },
// ], // ],
// }, // },
// { id: "light-app-square", label: "????", icon: Layout }, // { id: "light-app-square", label: "应用广场", icon: Layout },
// { id: "light-app-records", label: "????", icon: History }, // { id: "light-app-records", label: "使用记录", icon: History },
// ], // ],
// }, // },
{ {
id: "task-management", id: "task-management",
label: "????", label: "任务管理",
icon: Target, icon: Target,
children: [ children: [
{ {
id: "xk-center-task", id: "xk-center-task",
label: "XK???", label: "XK中任务",
icon: Folder, icon: Folder,
children: [ children: [
{ {
id: "xk-task-jc", id: "xk-task-jc",
label: "??JC", label: "任务JC",
icon: ListTodo, icon: ListTodo,
path: "/page/strategy/task-management/xk-task-jc", path: "/page/strategy/task-management/xk-task-jc",
}, },
{ {
id: "xk-task-dispatch", id: "xk-task-dispatch",
label: "????", label: "任务调度",
icon: ListTodo, icon: ListTodo,
path: "/page/strategy/task-management/xk-task-dispatch", path: "/page/strategy/task-management/xk-task-dispatch",
}, },
@@ -131,7 +135,7 @@ export const sidebarMenuItems: MenuItem[] = [
}, },
{ {
id: "coh-center-task", id: "coh-center-task",
label: "COH???", label: "COH中任务",
icon: Folder, icon: Folder,
children: [ children: [
{ {
@@ -142,7 +146,7 @@ export const sidebarMenuItems: MenuItem[] = [
}, },
{ {
id: "coh-task-fx", id: "coh-task-fx",
label: "??FX", label: "任务FX",
icon: ListTodo, icon: ListTodo,
path: "/page/strategy/task-management/plan-task/plan-task-fx", path: "/page/strategy/task-management/plan-task/plan-task-fx",
}, },
@@ -156,12 +160,12 @@ export const sidebarMenuItems: MenuItem[] = [
}, },
{ {
id: "pg-center-task", id: "pg-center-task",
label: "PG???", label: "PG中任务",
icon: Folder, icon: Folder,
children: [ children: [
{ {
id: "pg-task-pg", id: "pg-task-pg",
label: "??PG", label: "任务PG",
icon: ListTodo, icon: ListTodo,
path: "/page/strategy/task-management/effect-task-pg", path: "/page/strategy/task-management/effect-task-pg",
}, },
@@ -173,7 +177,7 @@ export const sidebarMenuItems: MenuItem[] = [
}, },
{ {
id: "pg-task-info-pg", id: "pg-task-info-pg",
label: "??PG", label: "信息PG",
icon: ListTodo, icon: ListTodo,
path: "/page/strategy/task-management/effect-info-pg", path: "/page/strategy/task-management/effect-info-pg",
}, },
@@ -181,24 +185,24 @@ export const sidebarMenuItems: MenuItem[] = [
}, },
{ {
id: "ty-center-task", id: "ty-center-task",
label: "TY???", label: "TY中任务",
icon: Folder, icon: Folder,
children: [ children: [
{ {
id: "ty-task-xdty", id: "ty-task-xdty",
label: "XDTY??", label: "XDTY任务",
icon: ListTodo, icon: ListTodo,
path: "/page/strategy/task-management/mnty-task-mechanism", path: "/page/strategy/task-management/mnty-task-mechanism",
}, },
{ {
id: "ty-task-plan", id: "ty-task-plan",
label: "??TY??", label: "方案TY任务",
icon: ListTodo, icon: ListTodo,
path: "/page/strategy/task-management/mnty-task-plan", path: "/page/strategy/task-management/mnty-task-plan",
}, },
{ {
id: "ty-task-xxty", id: "ty-task-xxty",
label: "XXTY??", label: "XXTY任务",
icon: ListTodo, icon: ListTodo,
path: "/page/strategy/task-management/mnty-task-zsty", path: "/page/strategy/task-management/mnty-task-zsty",
}, },
@@ -208,61 +212,61 @@ export const sidebarMenuItems: MenuItem[] = [
}, },
{ {
id: "comprehensive-management", id: "comprehensive-management",
label: "????", label: "综合管理",
icon: Settings, icon: Settings,
children: [ children: [
{ id: "mgmt-agents", label: "?????", icon: Bot, path: "/page/strategy/agents" }, { id: "mgmt-agents", label: "智能体管理", icon: Bot, path: "/page/strategy/agents" },
{ {
id: "mgmt-business-chain-mapping", id: "mgmt-business-chain-mapping",
label: "????", label: "配置管理",
icon: Network, icon: Network,
path: "/page/strategy/business-chain-mapping", path: "/page/strategy/business-chain-mapping",
}, },
{ {
id: "mgmt-business-chains", id: "mgmt-business-chains",
label: "??????", label: "业务链条配置",
icon: Layers, icon: Layers,
path: "/page/strategy/business-chains", path: "/page/strategy/business-chains",
}, },
{ id: "mgmt-skills", label: "????", icon: Sparkles, path: "/page/strategy/skills" }, { id: "mgmt-skills", label: "技能管理", icon: Sparkles, path: "/page/strategy/skills" },
{ id: "mgmt-memory", label: "????", icon: Brain, path: "/page/strategy/memory" }, { id: "mgmt-memory", label: "记忆管理", icon: Brain, path: "/page/strategy/memory" },
{ {
id: "mgmt-tasks", id: "mgmt-tasks",
label: "????", label: "定时任务",
icon: ListChecks, icon: ListChecks,
path: "/page/strategy/scheduled/tasks", path: "/page/strategy/scheduled/tasks",
}, },
{ {
id: "mgmt-llm-metrics", id: "mgmt-llm-metrics",
label: "???????", label: "大模型调用统计",
icon: Gauge, icon: Gauge,
path: "/page/strategy/settings/llm-metrics", path: "/page/strategy/settings/llm-metrics",
adminOnly: true, adminOnly: true,
}, },
{ {
id: "mgmt-users", id: "mgmt-users",
label: "????", label: "用户管理",
icon: Users, icon: Users,
path: "/page/strategy/admin/users", path: "/page/strategy/admin/users",
adminOnly: true, adminOnly: true,
}, },
{ {
id: "mgmt-user-leaderboard", id: "mgmt-user-leaderboard",
label: "?????", label: "用户排行榜",
icon: Trophy, icon: Trophy,
path: "/page/strategy/admin/user-leaderboard", path: "/page/strategy/admin/user-leaderboard",
adminOnly: true, adminOnly: true,
}, },
{ {
id: "mgmt-admin-scheduled-tasks", id: "mgmt-admin-scheduled-tasks",
label: "??????", label: "定时任务管理",
icon: CalendarClock, icon: CalendarClock,
path: "/page/strategy/admin/scheduled-tasks", path: "/page/strategy/admin/scheduled-tasks",
adminOnly: true, adminOnly: true,
}, },
{ {
id: "mgmt-user-activity", id: "mgmt-user-activity",
label: "??????", label: "用户活动审计",
icon: History, icon: History,
path: "/page/strategy/admin/user-activity", path: "/page/strategy/admin/user-activity",
adminOnly: true, adminOnly: true,
@@ -271,24 +275,24 @@ export const sidebarMenuItems: MenuItem[] = [
}, },
{ {
id: "resource-management", id: "resource-management",
label: "????", label: "资源管理",
icon: Database, icon: Database,
children: [ children: [
{ {
id: "resource-network-xwt", id: "resource-network-xwt",
label: "??xwt????", label: "网络xwt资源管理",
icon: Network, icon: Network,
path: "/page/strategy/resource-management/resource-network-actor", path: "/page/strategy/resource-management/resource-network-actor",
}, },
{ {
id: "resource-knowledge-native", id: "resource-knowledge-native",
label: "????", label: "问答梳理",
icon: BookOpen, icon: BookOpen,
path: "/page/workspace/knowledge", path: "/page/workspace/knowledge",
}, },
{ {
id: "resource-evaluation-index", id: "resource-evaluation-index",
label: "??????", label: "作战资源管理",
icon: FileBox, icon: FileBox,
path: "/page/strategy/resource-management/resource-evaluation-index", path: "/page/strategy/resource-management/resource-evaluation-index",
}, },
@@ -296,7 +300,7 @@ export const sidebarMenuItems: MenuItem[] = [
}, },
]; ];
/** ??????? id ????????????????? */ /** 默认展开的菜单 id 集合。 */
export const defaultExpandedIds: ReadonlySet<string> = new Set([ export const defaultExpandedIds: ReadonlySet<string> = new Set([
"qa-center", "qa-center",
"light-app-center", "light-app-center",
@@ -306,7 +310,7 @@ export const defaultExpandedIds: ReadonlySet<string> = new Set([
"comprehensive-management", "comprehensive-management",
]); ]);
/** ? admin ???????? admin ??? ``adminOnly: true`` ?????? */ /** 按 admin 角色过滤菜单:非 admin 不展示 ``adminOnly: true`` 的项及其子项。 */
export function filterMenuItemsByRole(items: MenuItem[], isAdmin: boolean): MenuItem[] { export function filterMenuItemsByRole(items: MenuItem[], isAdmin: boolean): MenuItem[] {
return items return items
.filter((item) => !item.adminOnly || isAdmin) .filter((item) => !item.adminOnly || isAdmin)
@@ -2,8 +2,9 @@ import { Bell, ChevronDown, FileText, Moon, Palette, User } from "lucide-react";
import { useState } from "react"; import { useState } from "react";
import { useLocation, useNavigate } from "react-router-dom"; import { useLocation, useNavigate } from "react-router-dom";
import { NotificationDialog } from "@/components/workspace/notification-dialog";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import "@/components/page-sdebar.css";
import { NotificationDialog } from "@/components/workspace/notification-dialog";
import { getStoredAuth } from "@/core/auth"; import { getStoredAuth } from "@/core/auth";
import { isWujieEnv } from "@/core/embed/wujie"; import { isWujieEnv } from "@/core/embed/wujie";
import { useUnreadCount } from "@/core/notifications"; import { useUnreadCount } from "@/core/notifications";
@@ -12,7 +13,6 @@ import { useSidebarMenuItems } from "@/core/page-layout/use-sidebar-menu";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
import { useTheme } from "../contexts/ThemeContext"; import { useTheme } from "../contexts/ThemeContext";
import "@/components/page-sdebar.css";
const iconButtonClass = (isDark: boolean) => const iconButtonClass = (isDark: boolean) =>
cn( cn(
@@ -98,12 +98,12 @@ const Header = ({ collapsed }: HeaderProps) => {
<FileText className="h-4 w-4 text-white" /> <FileText className="h-4 w-4 text-white" />
</div> </div>
{!collapsed && ( {!collapsed && (
<span className={cn("text-sm font-semibold", isDark ? "text-white" : "text-white")}> <span className="text-sm font-semibold text-white">
CM助手 CM助手
</span> </span>
)} )}
{showTopNav && visibleMenuItems.length ? ( {showTopNav && visibleMenuItems.length ? (
<nav className="top-submenu-bar" aria-label="二级菜单"> <nav className="top-submenu-bar" aria-label="一级菜单">
<div className="top-submenu-list"> <div className="top-submenu-list">
{visibleMenuItems.map((item) => { {visibleMenuItems.map((item) => {
const isSelected = item.path ? pathname === item.path : hasActiveChild(item); const isSelected = item.path ? pathname === item.path : hasActiveChild(item);