mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-10-05 09:36:37 +08:00
d2645589da
* feat(frontend): add customizable favicon and corner logo with live preview - Add app_logo and app_favicon config fields in config page - Implement BrandLogo component with URL fallback to SVG logo - Integrate BrandLogo into all layouts (admin, h5, h5-simple) and navbar - Add real-time preview for favicon and logo in config page with error state - Support both relative paths and full image URLs for branding assets - Sync branding changes (app_name/app_logo/app_favicon) to site config on save * fix(frontend): preserve tunnel node selection order * fix(select): use useMemo for option label map to improve performance
50 lines
1.6 KiB
TypeScript
50 lines
1.6 KiB
TypeScript
import React from "react";
|
|
import { useNavigate } from "react-router-dom";
|
|
|
|
import { Button } from "@/shadcn-bridge/heroui/button";
|
|
import { BrandLogo } from "@/components/brand-logo";
|
|
import { siteConfig } from "@/config/site";
|
|
import { useScrollTopOnPathChange } from "@/hooks/useScrollTopOnPathChange";
|
|
|
|
export default function H5SimpleLayout({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode;
|
|
}) {
|
|
const navigate = useNavigate();
|
|
|
|
useScrollTopOnPathChange();
|
|
|
|
const handleBack = () => {
|
|
navigate("/profile");
|
|
};
|
|
|
|
return (
|
|
<div className="flex flex-col min-h-screen bg-gray-100 dark:bg-black">
|
|
{/* 顶部导航栏 */}
|
|
<header className="bg-white dark:bg-black shadow-sm border-b border-gray-200 dark:border-gray-600 h-14 safe-top flex-shrink-0 flex items-center justify-between px-4 relative z-10">
|
|
<div className="flex items-center gap-2">
|
|
<Button isIconOnly size="sm" variant="light" onPress={handleBack}>
|
|
<svg className="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
|
<path
|
|
clipRule="evenodd"
|
|
d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z"
|
|
fillRule="evenodd"
|
|
/>
|
|
</svg>
|
|
</Button>
|
|
<BrandLogo size={20} />
|
|
<h1 className="text-sm font-bold text-foreground">
|
|
{siteConfig.name}
|
|
</h1>
|
|
</div>
|
|
|
|
<div className="flex items-center gap-2" />
|
|
</header>
|
|
|
|
{/* 主内容区域 */}
|
|
<main className="flex-1 bg-gray-100 dark:bg-black pb-0">{children}</main>
|
|
</div>
|
|
);
|
|
}
|