refactor: 页眉由 App 统一注入(ScreenLayout),三页共用一致页眉

- 新增 ScreenLayout 布局路由:注入共享 PageHeader + 全局左右键循环导航
- PageHeader 无 props,按路由自动识别状态(数据实时/3D 实时/媒体播放)
- DataScreen / DigitalTwin / MediaScreen 移除各自页眉,避免重复
- 页脚按页面按需保留(数据大屏 + 媒体轮播,数字孪生无)
- 管理后台不参与导航循环;旧 /screen2 路由移除
- 补齐 MediaScreen 音量/播放/翻页图标与浅色主题样式
This commit is contained in:
Pine
2026-08-17 20:08:45 +08:00
parent b08055f8a5
commit 84b3f12146
11 changed files with 1131 additions and 47 deletions
+10
View File
@@ -9,6 +9,7 @@ import {
Check, Gauge, Cpu, Server, Database, Sparkles, Bulb, Settings,
Heart, Pill, Dna, Microscope, Atom, MapPin, Flag, Award, Medal,
History, Drone, Plane, Rocket, Satellite, Wallet, UserPlus, Activity,
Volume, VolumeOff, ChevronLeft, ChevronRight, PlayerPlay, PlayerPause,
} from '@appica/icons-react';
/* 名称 → 图标组件映射(推荐的调用方式:icon="bolt" */
@@ -64,6 +65,14 @@ const NAME_MAP = {
wallet: Wallet,
'user-plus': UserPlus,
activity: Activity,
volume: Volume,
'volume-off': VolumeOff,
'chevron-left': ChevronLeft,
'chevron-right': ChevronRight,
'player-play': PlayerPlay,
'player-pause': PlayerPause,
play: PlayerPlay,
pause: PlayerPause,
};
/**
@@ -95,4 +104,5 @@ export {
Check, Gauge, Cpu, Server, Database, Sparkles, Bulb, Settings,
Heart, Pill, Dna, Microscope, Atom, MapPin, Flag, Award, Medal,
History, Drone, Plane, Rocket, Satellite, Wallet, UserPlus, Activity,
Volume, VolumeOff, ChevronLeft, ChevronRight, PlayerPlay, PlayerPause,
};
+35
View File
@@ -0,0 +1,35 @@
import Icon from './Icons';
import { fmtInt, fmtWan } from '../utils/parkData';
/* =========================================================
园区概览页脚(共享)—— 数据大屏 / 媒体播放页底部保持一致
========================================================= */
export default function ParkOverviewStrip({ d }) {
const chips = [
{ icon: 'building', label: '在园项目', value: `${d.projects.inPark}` },
{ icon: 'users', label: '带动就业', value: `${fmtInt(d.jobs.total)}` },
{ icon: 'coin', label: '累计营收', value: `${fmtWan(d.revenue.total)}` },
{ icon: 'factory', label: '高新技术企业', value: '32 家' },
{ icon: 'flask', label: '省级以上重点研发', value: '18 项' },
{ icon: 'trophy', label: '创业大赛奖项', value: '47 项' },
{ icon: 'diamond', label: '孵化企业估值', value: '5.2 亿元' },
{ icon: 'map-pin', label: '园区面积', value: '1.2 万㎡' },
{ icon: 'graduation', label: '创业导师', value: '58 位' },
{ icon: 'chart-line', label: '累计孵化企业', value: `${d.projects.cum}` },
];
return (
<footer className="bd-strip">
<div className="bd-strip-title"><Icon name="map-pin" size={14} /> 园区概览</div>
<div className="bd-strip-chips">
{chips.map((c, i) => (
<div className="bd-chip" key={i}>
<span className="bd-chip-ico"><Icon name={c.icon} size={15} /></span>
<span className="bd-chip-label">{c.label}</span>
<b>{c.value}</b>
</div>
))}
</div>
</footer>
);
}
+23
View File
@@ -0,0 +1,23 @@
import { Outlet } from 'react-router-dom';
import PageHeader from './PageHeader';
import { usePageNav } from '../utils/pageNav';
/* =========================================================
ScreenLayout —— 大屏页面统一布局
通过 App 嵌套路由注入统一页眉 + 全局左右键循环导航
页脚由各页面按需自行渲染(数字孪生页无需页脚)
========================================================= */
export default function ScreenLayout() {
// 全局左右方向键循环切换(数据大屏 / 数字孪生 / 媒体轮播)
usePageNav();
return (
<div className="bd-layout">
<PageHeader />
<main className="bd-layout-main">
<Outlet />
</main>
</div>
);
}