Pārlūkot izejas kodu

feat(news): 优化新闻详情页数据获取逻辑

- 使用 Promise.all 并行请求普通新闻和特殊新闻列表
- 添加异常捕获确保静态参数生成稳定性
- 保留原有缓存策略和数据结构处理方式
- 统一返回记录的映射逻辑提高代码可读性
- 保持页面组件功能不变仅调整数据流处理
nahida 5 mēneši atpakaļ
vecāks
revīzija
ddc5064ada
1 mainītis faili ar 67 papildinājumiem un 58 dzēšanām
  1. 67 58
      src/app/news/[id]/page.tsx

+ 67 - 58
src/app/news/[id]/page.tsx

@@ -8,80 +8,89 @@ import ContentNotFound from "@/components/ContentNotFound";
 export const dynamicParams = true
 
 export const generateStaticParams = async () => {
-    const res = await serverGet<Page<NewsUpdates>, { pageNum: number; pageSize: number }>(
+  try {
+    const [res, res2] = await Promise.all([
+      serverGet<Page<NewsUpdates>, { pageNum: number; pageSize: number }>(
         "/webSite/getNewsUpdatesListWithoutSpecialNews",
         {pageNum: 1, pageSize: 20}, {
-            next: {
-                revalidate: 1800
-            },
-            cache: "force-cache"
+          next: {
+            revalidate: 1800
+          },
+          cache: "force-cache"
         }
-    )
-    const res2 = await serverGet<Page<NewsUpdates>, { pageNum: number; pageSize: number }>(
+      ),
+      serverGet<Page<NewsUpdates>, { pageNum: number; pageSize: number }>(
         "/webSite/getSpecialNewsUpdatesList",
         {pageNum: 1, pageSize: 20}, {
-            next: {
-                revalidate: 1800
-            },
-            cache: "force-cache"
+          next: {
+            revalidate: 1800
+          },
+          cache: "force-cache"
         }
-    )
-    return [...res.data.records, ...res2.data.records].map((item) => ({
-        id: item.id,
+      ),
+    ])
+
+    const records1 = res.code === 200 ? (res.data?.records ?? []) : []
+    const records2 = res2.code === 200 ? (res2.data?.records ?? []) : []
+    return [...records1, ...records2].map((item) => ({
+      id: item.id,
     }))
+  } catch {
+    return []
+  }
 }
 
 
 async function Page({
-                        params,
+                      params,
                     }: {
-    params: Promise<{ id: string }>
+  params: Promise<{ id: string }>
 }) {
-    const {id} = await params;
-    const res = await serverGet<NewsUpdates, { id: string }>(
-        "/webSite/getNewsUpdatesById",
-        {id}, {
-            next: {
-                revalidate: 30
-            },
-            cache: "force-cache"
-        }
-    )
-    if (!res.data) {
-        return <ContentNotFound/>
+  const {id} = await params;
+  const res = await serverGet<NewsUpdates, { id: string }>(
+    "/webSite/getNewsUpdatesById",
+    {id}, {
+      next: {
+        revalidate: 30
+      },
+      cache: "force-cache"
     }
+  )
+  if (!res.data) {
+    return <ContentNotFound/>
+  }
 
 
-    console.log(111,res)
-    return (
-        <>
-            <div className="w-4/5 mx-auto">
-                <div className="pt-5 sm:pt-10 sm:ml-20 flex gap-2">
-                    <span className="text-sm">您当前的所在位置:</span>
-                    <Breadcrumb
-                        separator=">"
-                        items={[
-                            {title: "新闻列表", href: "/news"},
-                            {title: res.data.newsName || "新闻详情"},
-                        ]}
-                    />
-                </div>
-            </div>
-            <div className="py-6 sm:py-10">
-                <MainTitle title={"新闻动态"} titleLetter={"NEWS_DYNAMIC"}/>
-            </div>
-            <div className="w-4/5 mx-auto flex justify-center items-center">
-                {/*<div className="">*/}
-                    <span className="text-3xl font-bold ">{res.data.newsName}</span>
-                {/*</div>*/}
-            </div>
-            <div
-                dangerouslySetInnerHTML={{__html: res.data.newsDetails as string}}
-                className="ql-editor w-9/10 sm:w-7/10 mx-auto sm:px-20 sm:py-10"
-            />
-        </>
-    );
+  console.log(111, res)
+  return (
+    <>
+      <div className="w-4/5 mx-auto">
+        <div className="pt-5 sm:pt-10 sm:ml-20 flex gap-2">
+          <span className="text-sm">您当前的所在位置:</span>
+          <Breadcrumb
+            separator=">"
+            items={[
+              {title: "新闻列表", href: "/news"},
+              {title: res.data.newsName || "新闻详情"},
+            ]}
+          />
+        </div>
+      </div>
+      <div className="py-6 sm:py-10">
+        <MainTitle title={"新闻动态"} titleLetter={"NEWS_DYNAMIC"}/>
+      </div>
+      <div className="w-4/5 mx-auto flex justify-center items-center">
+        {/*<div className="">*/}
+        <span className="text-3xl font-bold ">{res.data.newsName}</span>
+        {/*</div>*/}
+      </div>
+      <div
+        dangerouslySetInnerHTML={{__html: res.data.newsDetails as string}}
+        className="ql-editor w-9/10 sm:w-7/10 mx-auto sm:px-20 sm:py-10"
+      />
+    </>
+  );
 }
 
 
-export default Page;
+export default Page;