From 8ee08854cd15cfc32882042ca05935e1fc50d20a Mon Sep 17 00:00:00 2001 From: Pine Date: Thu, 27 Aug 2026 15:53:38 +0800 Subject: [PATCH] =?UTF-8?q?feat(screen):=20=E5=9B=AD=E5=8C=BA=E5=A4=A7?= =?UTF-8?q?=E5=B1=8F=E5=9B=AD=E5=8C=BA=E8=B5=84=E8=AE=AF=20widget?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ParkFeed 拉取 /park/api/content/feed,滚动展示本园区内容标题;图标用 @appica/icons-react(禁用emoji) - DataScreen 挂载 ParkFeed Co-Authored-By: Claude --- src/components/ParkFeed.jsx | 33 +++++++++++++++++++++++++++++++++ src/pages/DataScreen.jsx | 3 +++ 2 files changed, 36 insertions(+) create mode 100644 src/components/ParkFeed.jsx diff --git a/src/components/ParkFeed.jsx b/src/components/ParkFeed.jsx new file mode 100644 index 0000000..e7ad4a2 --- /dev/null +++ b/src/components/ParkFeed.jsx @@ -0,0 +1,33 @@ +import React, { useEffect, useState } from 'react'; +import { Broadcast } from '@appica/icons-react'; +import { getApiBase } from '../config'; +import '../styles/datascreen.css'; + +/** 园区资讯 widget:拉取本园区内容(/park/api/content/feed),滚动展示标题(大屏)。 */ +export default function ParkFeed() { + const [items, setItems] = useState([]); + useEffect(() => { + let alive = true; + fetch(`${getApiBase()}/api/content/feed`, { cache: 'no-store' }) + .then((r) => r.json()) + .then((d) => { if (alive) setItems(Array.isArray(d?.items) ? d.items : []); }) + .catch(() => {}); + return () => { alive = false; }; + }, []); + if (!items.length) return null; + return ( +
+
园区资讯 ({items.length})
+
+
+ {[...items, ...items].map((c, i) => ( +
+ + {c.title} +
+ ))} +
+
+
+ ); +} diff --git a/src/pages/DataScreen.jsx b/src/pages/DataScreen.jsx index cd41419..96adca9 100644 --- a/src/pages/DataScreen.jsx +++ b/src/pages/DataScreen.jsx @@ -2,6 +2,7 @@ import { useState, useEffect, useRef } from 'react'; import '../styles/datascreen.css'; import Icon from '../components/Icons'; import ParkOverviewStrip from '../components/ParkOverviewStrip'; +import ParkFeed from '../components/ParkFeed'; import { useParkSim } from '../utils/parkData'; /* ========================================================= @@ -576,6 +577,8 @@ export default function DataScreen() { + + {/* 园区概览(保持在最底部) */}