feat: add knowledge management pages

This commit is contained in:
hailin
2026-07-03 17:58:09 +08:00
parent 99dbb3277a
commit 94f0488341
7 changed files with 608 additions and 1 deletions

View File

@@ -1,6 +1,7 @@
import * as React from 'react'
import {
Bot,
BookOpen,
BriefcaseBusiness,
ClipboardList,
Database,
@@ -8,6 +9,7 @@ import {
Library,
Menu,
ScrollText,
Search,
Settings,
ShieldCheck,
Ticket,
@@ -23,6 +25,7 @@ import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/ui/sh
const iconMap = {
audit: ScrollText,
book_open: BookOpen,
bot: Bot,
briefcase: BriefcaseBusiness,
database: Database,
@@ -30,6 +33,7 @@ const iconMap = {
library: Library,
menu: Menu,
roles: UserCog,
search: Search,
settings: Settings,
shield: ShieldCheck,
ticket: Ticket,
@@ -57,6 +61,41 @@ function visibleChildren(menu: AuthMenu) {
return menu.children.filter((item) => item.is_visible && item.is_enabled)
}
const knowledgeNavGroup: AuthMenu = {
id: -100,
code: 'knowledge_builtin',
title: '知识库',
path: '#/knowledge',
icon: 'book_open',
permission_code: 'knowledge.view',
is_visible: true,
is_enabled: true,
children: [
{
id: -101,
code: 'knowledge_bases',
title: '知识库',
path: '#/knowledge',
icon: 'book_open',
permission_code: 'knowledge.view',
is_visible: true,
is_enabled: true,
children: []
},
{
id: -102,
code: 'knowledge_search',
title: '知识检索',
path: '#/knowledge/search',
icon: 'search',
permission_code: 'knowledge.view',
is_visible: true,
is_enabled: true,
children: []
}
]
}
type SidebarNavContentProps = {
groups: AuthMenu[]
currentHash: string
@@ -120,7 +159,11 @@ type AppSidebarProps = {
export function AppSidebar({ mobileOpen = false, onMobileOpenChange }: AppSidebarProps) {
const { user } = useAuth()
const currentHash = useCurrentHash()
const groups = (user?.menus ?? []).filter((menu) => menu.is_visible && menu.is_enabled)
const menuGroups = (user?.menus ?? []).filter((menu) => menu.is_visible && menu.is_enabled)
const hasKnowledgeMenu = menuGroups.some(
(group) => group.code.startsWith('knowledge') || visibleChildren(group).some((item) => item.path.startsWith('#/knowledge'))
)
const groups = hasKnowledgeMenu ? menuGroups : [...menuGroups, knowledgeNavGroup]
return (
<>