feat(miniapp): 知识库增加 LAMP 教程入口,修复详情页文章类型判断
This commit is contained in:
@@ -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}`);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user