refactor: 页眉由 App 统一注入(ScreenLayout),三页共用一致页眉
- 新增 ScreenLayout 布局路由:注入共享 PageHeader + 全局左右键循环导航 - PageHeader 无 props,按路由自动识别状态(数据实时/3D 实时/媒体播放) - DataScreen / DigitalTwin / MediaScreen 移除各自页眉,避免重复 - 页脚按页面按需保留(数据大屏 + 媒体轮播,数字孪生无) - 管理后台不参与导航循环;旧 /screen2 路由移除 - 补齐 MediaScreen 音量/播放/翻页图标与浅色主题样式
This commit is contained in:
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
}
|
||||
@@ -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>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user