feat(admin): Complete Phase 3.5.1-3.5.4 Prompt Management System (83%)
Summary: - Implement Prompt management infrastructure and core services - Build admin portal frontend with light theme - Integrate CodeMirror 6 editor for non-technical users Phase 3.5.1: Infrastructure Setup - Create capability_schema for Prompt storage - Add prompt_templates and prompt_versions tables - Add prompt:view/edit/debug/publish permissions - Migrate RVW prompts to database (RVW_EDITORIAL, RVW_METHODOLOGY) Phase 3.5.2: PromptService Core - Implement gray preview logic (DRAFT for debuggers, ACTIVE for users) - Module-level debug control (setDebugMode) - Handlebars template rendering - Variable extraction and validation (extractVariables, validateVariables) - Three-level disaster recovery (database -> cache -> hardcoded fallback) Phase 3.5.3: Management API - 8 RESTful endpoints (/api/admin/prompts/*) - Permission control (PROMPT_ENGINEER can edit, SUPER_ADMIN can publish) Phase 3.5.4: Frontend Management UI - Build admin portal architecture (AdminLayout, OrgLayout) - Add route system (/admin/*, /org/*) - Implement PromptListPage (filter, search, debug switch) - Implement PromptEditor (CodeMirror 6 simplified for clinical users) - Implement PromptEditorPage (edit, save, publish, test, version history) Technical Details: - Backend: 6 files, ~2044 lines (prompt.service.ts 596 lines) - Frontend: 9 files, ~1735 lines (PromptEditorPage.tsx 399 lines) - CodeMirror 6: Line numbers, auto-wrap, variable highlight, search, undo/redo - Chinese-friendly: 15px font, 1.8 line-height, system fonts Next Step: Phase 3.5.5 - Integrate RVW module with PromptService Tested: Backend API tests passed (8/8), Frontend pending user testing Status: Ready for Phase 3.5.5 RVW integration
This commit is contained in:
@@ -2,10 +2,18 @@ import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'
|
||||
import { ConfigProvider } from 'antd'
|
||||
import zhCN from 'antd/locale/zh_CN'
|
||||
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
|
||||
import { AuthProvider } from './framework/auth'
|
||||
import { PermissionProvider } from './framework/permission'
|
||||
import { RouteGuard } from './framework/router'
|
||||
import MainLayout from './framework/layout/MainLayout'
|
||||
import AdminLayout from './framework/layout/AdminLayout'
|
||||
import OrgLayout from './framework/layout/OrgLayout'
|
||||
import HomePage from './pages/HomePage'
|
||||
import LoginPage from './pages/LoginPage'
|
||||
import AdminDashboard from './pages/admin/AdminDashboard'
|
||||
import OrgDashboard from './pages/org/OrgDashboard'
|
||||
import PromptListPage from './pages/admin/PromptListPage'
|
||||
import PromptEditorPage from './pages/admin/PromptEditorPage'
|
||||
import { MODULES } from './framework/modules/moduleRegistry'
|
||||
|
||||
/**
|
||||
@@ -13,12 +21,17 @@ import { MODULES } from './framework/modules/moduleRegistry'
|
||||
*
|
||||
* @description
|
||||
* - ConfigProvider: Ant Design国际化配置
|
||||
* - QueryClientProvider: React Query状态管理(Week 2 新增)⭐
|
||||
* - PermissionProvider: 权限管理系统(Week 2 Day 7新增)
|
||||
* - RouteGuard: 路由守卫保护(Week 2 Day 7新增)⭐
|
||||
* - QueryClientProvider: React Query状态管理
|
||||
* - AuthProvider: JWT认证管理 🆕
|
||||
* - PermissionProvider: 权限管理系统
|
||||
* - RouteGuard: 路由守卫保护
|
||||
* - BrowserRouter: 前端路由
|
||||
*
|
||||
* @version Week 2 Day 1 - 添加React Query支持
|
||||
* 路由结构:
|
||||
* - /login - 通用登录页(个人用户)
|
||||
* - /t/{tenantCode}/login - 租户专属登录页
|
||||
* - / - 首页(需要认证)
|
||||
* - /{module}/* - 业务模块(需要认证+权限)
|
||||
*/
|
||||
|
||||
// 创建React Query客户端
|
||||
@@ -26,9 +39,9 @@ const queryClient = new QueryClient({
|
||||
defaultOptions: {
|
||||
queries: {
|
||||
staleTime: 1000 * 60 * 5, // 5分钟
|
||||
gcTime: 1000 * 60 * 10, // 10分钟(原cacheTime)
|
||||
retry: 1, // 失败重试1次
|
||||
refetchOnWindowFocus: false, // 窗口聚焦时不自动重新获取
|
||||
gcTime: 1000 * 60 * 10, // 10分钟
|
||||
retry: 1,
|
||||
refetchOnWindowFocus: false,
|
||||
},
|
||||
},
|
||||
})
|
||||
@@ -36,39 +49,68 @@ const queryClient = new QueryClient({
|
||||
function App() {
|
||||
return (
|
||||
<ConfigProvider locale={zhCN}>
|
||||
{/* React Query状态管理 */}
|
||||
<QueryClientProvider client={queryClient}>
|
||||
{/* 权限提供者:提供全局权限状态 */}
|
||||
<PermissionProvider>
|
||||
<BrowserRouter>
|
||||
<Routes>
|
||||
<Route path="/" element={<MainLayout />}>
|
||||
{/* 首页 */}
|
||||
<Route index element={<HomePage />} />
|
||||
|
||||
{/* 动态加载模块路由 - 应用路由守卫保护 ⭐ */}
|
||||
{MODULES.map(module => (
|
||||
<Route
|
||||
key={module.id}
|
||||
path={`${module.path}/*`}
|
||||
element={
|
||||
// 为每个模块添加路由守卫
|
||||
<RouteGuard
|
||||
requiredVersion={module.requiredVersion}
|
||||
moduleName={module.name}
|
||||
>
|
||||
<module.component />
|
||||
</RouteGuard>
|
||||
}
|
||||
/>
|
||||
))}
|
||||
|
||||
{/* 404重定向 */}
|
||||
<Route path="*" element={<Navigate to="/" replace />} />
|
||||
</Route>
|
||||
</Routes>
|
||||
</BrowserRouter>
|
||||
</PermissionProvider>
|
||||
{/* 认证提供者:JWT Token管理 */}
|
||||
<AuthProvider>
|
||||
{/* 权限提供者:模块级权限管理 */}
|
||||
<PermissionProvider>
|
||||
<BrowserRouter>
|
||||
<Routes>
|
||||
{/* 登录页面(无需认证) */}
|
||||
<Route path="/login" element={<LoginPage />} />
|
||||
<Route path="/t/:tenantCode/login" element={<LoginPage />} />
|
||||
|
||||
{/* 业务应用端 /app/* */}
|
||||
<Route path="/" element={<MainLayout />}>
|
||||
{/* 首页 */}
|
||||
<Route index element={<HomePage />} />
|
||||
|
||||
{/* 动态加载模块路由 */}
|
||||
{MODULES.map(module => (
|
||||
<Route
|
||||
key={module.id}
|
||||
path={`${module.path}/*`}
|
||||
element={
|
||||
<RouteGuard
|
||||
requiredVersion={module.requiredVersion}
|
||||
moduleName={module.name}
|
||||
>
|
||||
<module.component />
|
||||
</RouteGuard>
|
||||
}
|
||||
/>
|
||||
))}
|
||||
</Route>
|
||||
|
||||
{/* 运营管理端 /admin/* */}
|
||||
<Route path="/admin" element={<AdminLayout />}>
|
||||
<Route index element={<Navigate to="/admin/dashboard" replace />} />
|
||||
<Route path="dashboard" element={<AdminDashboard />} />
|
||||
{/* Prompt 管理 */}
|
||||
<Route path="prompts" element={<PromptListPage />} />
|
||||
<Route path="prompts/:code" element={<PromptEditorPage />} />
|
||||
{/* 其他模块(待开发) */}
|
||||
<Route path="tenants" element={<div className="text-center py-20">🚧 租户管理页面开发中...</div>} />
|
||||
<Route path="users" element={<div className="text-center py-20">🚧 用户管理页面开发中...</div>} />
|
||||
<Route path="system" element={<div className="text-center py-20">🚧 系统配置页面开发中...</div>} />
|
||||
</Route>
|
||||
|
||||
{/* 机构管理端 /org/* */}
|
||||
<Route path="/org" element={<OrgLayout />}>
|
||||
<Route index element={<Navigate to="/org/dashboard" replace />} />
|
||||
<Route path="dashboard" element={<OrgDashboard />} />
|
||||
<Route path="users" element={<div className="text-center py-20">🚧 用户管理页面开发中...</div>} />
|
||||
<Route path="departments" element={<div className="text-center py-20">🚧 科室/部门管理页面开发中...</div>} />
|
||||
<Route path="usage" element={<div className="text-center py-20">🚧 使用统计页面开发中...</div>} />
|
||||
<Route path="audit" element={<div className="text-center py-20">🚧 审计日志页面开发中...</div>} />
|
||||
</Route>
|
||||
|
||||
{/* 404重定向 */}
|
||||
<Route path="*" element={<Navigate to="/" replace />} />
|
||||
</Routes>
|
||||
</BrowserRouter>
|
||||
</PermissionProvider>
|
||||
</AuthProvider>
|
||||
</QueryClientProvider>
|
||||
</ConfigProvider>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user