优化细节

This commit is contained in:
2025-07-24 19:37:45 +08:00
parent 3e315bf9ee
commit 3693b2d5ed
54 changed files with 1143 additions and 595 deletions

View File

@@ -1,45 +1,53 @@
import {useEffect, useState} from "react";
import {Image} from '@nutui/nutui-react-taro'
import Taro from '@tarojs/taro'
import {CmsArticle} from "@/api/cms/cmsArticle/model";
import {useEffect, useState} from 'react'
import {useRouter} from '@tarojs/taro'
import {Loading} from '@nutui/nutui-react-taro'
import {View, RichText} from '@tarojs/components'
import {wxParse} from "@/utils/common";
import {getCmsArticle} from "@/api/cms/cmsArticle";
import dayjs from "dayjs";
import {CmsArticle} from "@/api/cms/cmsArticle/model"
import Line from "@/components/Gap";
import './index.scss'
const ArticleDetail = () => {
const [article, setArticle] = useState<CmsArticle | null>(null);
const router = Taro.getCurrentInstance().router;
const articleId = router?.params?.id;
function Detail() {
const {params} = useRouter();
const [loading, setLoading] = useState<boolean>(true)
// 文章详情
const [item, setItem] = useState<CmsArticle>()
const reload = async () => {
const item = await getCmsArticle(Number(params.id))
if (item) {
item.content = wxParse(item.content)
setItem(item)
Taro.setNavigationBarTitle({
title: `${item?.categoryName}`
})
}
}
useEffect(() => {
if (articleId) {
getCmsArticle(Number(articleId)).then(res => {
setArticle(res);
}).catch(error => {
console.error("Failed to fetch article detail:", error);
});
}
}, [articleId]);
reload().then(() => {
setLoading(false)
});
}, []);
if (!article) {
return <div>...</div>;
if (loading) {
return (
<Loading className={'px-2'}></Loading>
)
}
return (
<div className={'article-detail-page'}>
<div className={'article-header'}>
<h1 className={'article-title'}>{article.title}</h1>
<div className={'article-meta'}>
<span>{article.author}</span>
<span>{dayjs(article.createTime).format('YYYY-MM-DD HH:mm')}</span>
</div>
</div>
<div className={'article-content'}>
{article.image && <Image src={article.image} className={'article-main-image'} />}
<div dangerouslySetInnerHTML={{ __html: article.content || '' }} />
</div>
<div className={'bg-white'}>
<div className={'p-4 font-bold text-lg'}>{item?.title}</div>
<div className={'text-gray-400 text-sm px-4 '}>{item?.createTime}</div>
<View className={'content px-3'}>
<RichText nodes={item?.content}/>
</View>
<Line height={44}/>
</div>
);
};
)
}
export default ArticleDetail;
export default Detail