+ {detail.error_message && (
+
+ 错误: {detail.error_message}
+
+ )}
+ {detail.result_content && (
+
+
+ 分析结果
+
+
+ {detail.result_content}
+
+
+ )}
+ {!detail.result_content && !detail.error_message && (
+
暂无结果内容
+ )}
+
+ );
+ },
+ }}
+ pagination={{
+ current: query.page,
+ total,
+ pageSize: query.page_size,
+ showSizeChanger: true,
+ showTotal: (t) => `共 ${t} 条`,
+ onChange: (p, ps) => setQuery((prev) => ({ ...prev, page: p, page_size: ps })),
+ }}
+ />
+
+
+ );
+}
diff --git a/apps/web/src/pages/health/AiPromptList.tsx b/apps/web/src/pages/health/AiPromptList.tsx
new file mode 100644
index 0000000..b5dba72
--- /dev/null
+++ b/apps/web/src/pages/health/AiPromptList.tsx
@@ -0,0 +1,274 @@
+import { useEffect, useState, useCallback } from 'react';
+import {
+ Table,
+ Button,
+ Space,
+ Modal,
+ Form,
+ Input,
+ Select,
+ Tag,
+ message,
+} from 'antd';
+import { PlusOutlined, UndoOutlined, CheckOutlined } from '@ant-design/icons';
+import { promptApi, type PromptItem, type CreatePromptReq } from '../../api/ai/prompts';
+import { AuthButton } from '../../components/AuthButton';
+import { useThemeMode } from '../../hooks/useThemeMode';
+
+const CATEGORIES = [
+ { value: 'lab_report_interpretation', label: '化验单解读' },
+ { value: 'health_trend_analysis', label: '趋势分析' },
+ { value: 'personalized_checkup_plan', label: '体检方案' },
+ { value: 'report_summary_generation', label: '报告摘要' },
+];
+
+const CATEGORY_MAP: Record