feat(miniapp): 知识库增加 LAMP 教程入口,修复详情页文章类型判断

This commit is contained in:
weijuesen
2026-08-12 11:31:57 +08:00
parent 0d3124fe39
commit 8bb93ad5c3
3 changed files with 26 additions and 5 deletions
+1
View File
@@ -31,4 +31,5 @@ export interface KnowledgeArticle {
export const listDiseases = () => get<Disease[]>('/knowledge/diseases'); export const listDiseases = () => get<Disease[]>('/knowledge/diseases');
export const getDisease = (id: string) => get<Disease>(`/knowledge/diseases/${id}`); export const getDisease = (id: string) => get<Disease>(`/knowledge/diseases/${id}`);
export const listAIGuides = () => get<KnowledgeArticle[]>('/knowledge/articles', { kind: 'ai_guide' }); export const listAIGuides = () => get<KnowledgeArticle[]>('/knowledge/articles', { kind: 'ai_guide' });
export const listLAMPGuides = () => get<KnowledgeArticle[]>('/knowledge/articles', { kind: 'lamp_guide' });
export const getArticle = (id: string) => get<KnowledgeArticle>(`/knowledge/articles/${id}`); export const getArticle = (id: string) => get<KnowledgeArticle>(`/knowledge/articles/${id}`);
+3 -3
View File
@@ -49,10 +49,10 @@ const DetailPage: React.FC = () => {
return; return;
} }
try { try {
if (kind === 'ai_guide') { if (kind === 'disease') {
setArticle(await getArticle(id));
} else {
setDisease(await getDisease(id)); setDisease(await getDisease(id));
} else {
setArticle(await getArticle(id));
} }
} catch (err) { } catch (err) {
console.error('[KnowledgeDetail] 加载失败:', err); console.error('[KnowledgeDetail] 加载失败:', err);
+22 -2
View File
@@ -4,11 +4,17 @@ import Taro, { usePullDownRefresh } from '@tarojs/taro';
import styles from './index.module.scss'; import styles from './index.module.scss';
import { import {
listAIGuides, listAIGuides,
listLAMPGuides,
listDiseases, listDiseases,
type Disease, type Disease,
type KnowledgeArticle, type KnowledgeArticle,
} from '@/api/knowledge'; } from '@/api/knowledge';
const GUIDE_LABELS: Record<string, string> = {
ai_guide: 'AI 解读',
lamp_guide: 'LAMP 教程',
};
const CATEGORY_LABELS: Record<string, string> = { const CATEGORY_LABELS: Record<string, string> = {
viral: '病毒性', viral: '病毒性',
fungal: '真菌性', fungal: '真菌性',
@@ -20,16 +26,19 @@ const CATEGORY_LABELS: Record<string, string> = {
const KnowledgePage: React.FC = () => { const KnowledgePage: React.FC = () => {
const [diseases, setDiseases] = useState<Disease[]>([]); const [diseases, setDiseases] = useState<Disease[]>([]);
const [guides, setGuides] = useState<KnowledgeArticle[]>([]); const [guides, setGuides] = useState<KnowledgeArticle[]>([]);
const [lampGuides, setLampGuides] = useState<KnowledgeArticle[]>([]);
const [loading, setLoading] = useState(true); const [loading, setLoading] = useState(true);
const fetchData = useCallback(async () => { const fetchData = useCallback(async () => {
try { try {
const [diseaseRes, guideRes] = await Promise.all([ const [diseaseRes, guideRes, lampRes] = await Promise.all([
listDiseases().catch(() => [] as Disease[]), listDiseases().catch(() => [] as Disease[]),
listAIGuides().catch(() => [] as KnowledgeArticle[]), listAIGuides().catch(() => [] as KnowledgeArticle[]),
listLAMPGuides().catch(() => [] as KnowledgeArticle[]),
]); ]);
setDiseases(diseaseRes); setDiseases(diseaseRes);
setGuides(guideRes); setGuides(guideRes);
setLampGuides(lampRes);
} catch (err) { } catch (err) {
console.error('[Knowledge] 数据加载失败:', err); console.error('[Knowledge] 数据加载失败:', err);
Taro.showToast({ Taro.showToast({
@@ -62,7 +71,18 @@ const KnowledgePage: React.FC = () => {
{guides.map((a) => ( {guides.map((a) => (
<View key={a.id} className={styles.guideCard} onClick={() => openGuide(a)}> <View key={a.id} className={styles.guideCard} onClick={() => openGuide(a)}>
<View className={styles.guideHeader}> <View className={styles.guideHeader}>
<Text className={styles.guideBadge}>AI </Text> <Text className={styles.guideBadge}>{GUIDE_LABELS[a.kind] || a.kind}</Text>
<Text className={styles.guideArrow}></Text>
</View>
<Text className={styles.guideTitle}>{a.title}</Text>
{a.summary ? <Text className={styles.guideSummary}>{a.summary}</Text> : null}
</View>
))}
{lampGuides.map((a) => (
<View key={a.id} className={styles.guideCard} onClick={() => openGuide(a)}>
<View className={styles.guideHeader}>
<Text className={styles.guideBadge}>{GUIDE_LABELS[a.kind] || a.kind}</Text>
<Text className={styles.guideArrow}></Text> <Text className={styles.guideArrow}></Text>
</View> </View>
<Text className={styles.guideTitle}>{a.title}</Text> <Text className={styles.guideTitle}>{a.title}</Text>