merge: 集成V2.7 企业协作与管理治理

# Conflicts:
#	apps/server/src/app.module.ts
#	apps/web/components/layout/Sidebar.tsx
#	apps/web/lib/permissions.ts
#	docs/architecture.md
#	docs/decisions.md
#	docs/roadmap.md
This commit is contained in:
2026-07-08 18:10:08 +08:00
60 changed files with 3219 additions and 19 deletions

View File

@@ -2,8 +2,9 @@
import { useEffect } from 'react';
import { usePathname, useRouter } from 'next/navigation';
import { Inbox, Package, FolderKanban, Tag, Users, LayoutGrid, Lightbulb, Clock, Shield, Settings, Sparkles, TriangleAlert, MessageCircleQuestionMark, ScrollText, Database, Activity } from 'lucide-react';
import { Inbox, Package, FolderKanban, Tag, Users, LayoutGrid, Lightbulb, Clock, Shield, Settings, Sparkles, TriangleAlert, MessageCircleQuestionMark, ScrollText, Database, Activity, BarChart3, SlidersHorizontal } from 'lucide-react';
import { useHasPermission } from '@/components/auth/Guard';
import { NotificationBell } from '@/components/notification/NotificationBell';
import { useXiaobaoWarningRisks } from '@/hooks/useXiaobaoWarningRisks';
import { useWorkspaceWorkItems } from '@/hooks/useWorkspaceWorkItems';
import { useAuthStore } from '@/stores/useAuthStore';
@@ -48,6 +49,8 @@ const NAV_GROUPS = [
{ label: '审计', path: '/admin/audit', icon: ScrollText, permission: 'audit:view' },
{ label: '一致性', path: '/admin/consistency', icon: Database, permission: 'consistency:view' },
{ label: '运维', path: '/admin/ops', icon: Activity, permission: 'ops:view' },
{ label: '管理驾驶舱', path: '/admin/management', icon: BarChart3, permission: 'management:view' },
{ label: '治理设置', path: '/admin/governance', icon: SlidersHorizontal, permission: 'governance:manage' },
{ label: 'AI 配置', path: '/admin/ai-config', icon: Sparkles, permission: '*' },
],
},
@@ -119,6 +122,7 @@ function UserBlock() {
<p className="truncate text-[13px] font-medium text-[var(--ink)]">{user.name}</p>
<p className="truncate text-[11px] text-[var(--ink-muted)]">{role?.name ?? '-'}</p>
</div>
<NotificationBell />
<button
onClick={() => router.push('/profile')}
className="rounded-md p-1 text-[var(--ink-muted)] hover:bg-[var(--bg-card)] hover:text-[var(--accent)]"