feat(screen): 园区大屏园区资讯 widget
- ParkFeed 拉取 /park/api/content/feed,滚动展示本园区内容标题;图标用 @appica/icons-react(禁用emoji) - DataScreen 挂载 ParkFeed Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -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 (
|
||||||
|
<div className="bd-feed" style={{ marginTop: 12 }}>
|
||||||
|
<div className="bd-ticker-title"><Broadcast size={12} style={{ verticalAlign: '-1px', marginRight: 6 }} />园区资讯 <span>({items.length})</span></div>
|
||||||
|
<div className="bd-ticker">
|
||||||
|
<div className="bd-ticker-inner">
|
||||||
|
{[...items, ...items].map((c, i) => (
|
||||||
|
<div className="bd-ticker-item" key={i} title={c.title}>
|
||||||
|
<span className="bd-ticker-dot" />
|
||||||
|
{c.title}
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ import { useState, useEffect, useRef } from 'react';
|
|||||||
import '../styles/datascreen.css';
|
import '../styles/datascreen.css';
|
||||||
import Icon from '../components/Icons';
|
import Icon from '../components/Icons';
|
||||||
import ParkOverviewStrip from '../components/ParkOverviewStrip';
|
import ParkOverviewStrip from '../components/ParkOverviewStrip';
|
||||||
|
import ParkFeed from '../components/ParkFeed';
|
||||||
import { useParkSim } from '../utils/parkData';
|
import { useParkSim } from '../utils/parkData';
|
||||||
|
|
||||||
/* =========================================================
|
/* =========================================================
|
||||||
@@ -576,6 +577,8 @@ export default function DataScreen() {
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<ParkFeed />
|
||||||
|
|
||||||
{/* 园区概览(保持在最底部) */}
|
{/* 园区概览(保持在最底部) */}
|
||||||
<ParkOverviewStrip d={d} />
|
<ParkOverviewStrip d={d} />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user