manual save(2026-01-22 18:51)
This commit is contained in:
@@ -1,13 +1,44 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
|
import { Link } from 'react-router-dom'
|
||||||
|
|
||||||
export const Footer: React.FC = () => {
|
export const Footer: React.FC = () => {
|
||||||
return (
|
return (
|
||||||
<footer className="bg-gray-50 border-t border-gray-200 py-8 mt-12">
|
<footer className="bg-gray-50 border-t border-gray-200 py-10 mt-16">
|
||||||
<div className="container mx-auto px-4 text-center text-gray-600">
|
<div className="container mx-auto px-4">
|
||||||
<p>Powered by TenantCMS</p>
|
<div className="flex flex-col gap-6 md:flex-row md:items-center md:justify-between">
|
||||||
<p className="text-sm mt-2">
|
<div>
|
||||||
Using X-Tenant-Slug for multi-tenant authentication
|
<div className="font-semibold text-gray-900">Global Decision System</div>
|
||||||
</p>
|
<div className="text-sm text-gray-600 mt-1">思想驱动型官网 V1 信息架构骨架</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<nav aria-label="页脚导航" className="flex flex-wrap gap-x-4 gap-y-2 text-sm">
|
||||||
|
<Link className="text-gray-600 hover:text-gray-900" to="/why">
|
||||||
|
Why
|
||||||
|
</Link>
|
||||||
|
<Link className="text-gray-600 hover:text-gray-900" to="/how">
|
||||||
|
How
|
||||||
|
</Link>
|
||||||
|
<Link className="text-gray-600 hover:text-gray-900" to="/system">
|
||||||
|
System
|
||||||
|
</Link>
|
||||||
|
<Link className="text-gray-600 hover:text-gray-900" to="/discovery">
|
||||||
|
Discovery
|
||||||
|
</Link>
|
||||||
|
<Link className="text-gray-600 hover:text-gray-900" to="/solutions">
|
||||||
|
Solutions
|
||||||
|
</Link>
|
||||||
|
<Link className="text-gray-600 hover:text-gray-900" to="/proof">
|
||||||
|
Proof
|
||||||
|
</Link>
|
||||||
|
<Link className="text-gray-600 hover:text-gray-900" to="/contact">
|
||||||
|
Contact
|
||||||
|
</Link>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="text-xs text-gray-500 mt-8">
|
||||||
|
<p>© 2026 Global Decision System. All rights reserved.</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,18 +1,76 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
|
import { Link, NavLink } from 'react-router-dom'
|
||||||
|
|
||||||
|
const navItems = [
|
||||||
|
{ to: '/', label: '首页' },
|
||||||
|
{ to: '/why', label: 'Why' },
|
||||||
|
{ to: '/how', label: 'How' },
|
||||||
|
{ to: '/system', label: 'System' },
|
||||||
|
{ to: '/discovery', label: 'Discovery' },
|
||||||
|
{ to: '/solutions', label: 'Solutions' },
|
||||||
|
{ to: '/proof', label: 'Proof' },
|
||||||
|
]
|
||||||
|
|
||||||
export const Header: React.FC = () => {
|
export const Header: React.FC = () => {
|
||||||
return (
|
return (
|
||||||
<header className="bg-white border-b border-gray-200 sticky top-0 z-10">
|
<header className="bg-white/80 backdrop-blur border-b border-gray-200 sticky top-0 z-10">
|
||||||
<div className="container mx-auto px-4 py-4">
|
<div className="container mx-auto px-4 py-4">
|
||||||
<div className="flex items-center justify-between">
|
<div className="flex items-center justify-between gap-6">
|
||||||
<h1 className="text-2xl font-bold text-gray-900">
|
<Link to="/" className="font-semibold text-gray-900 tracking-tight">
|
||||||
TenantCMS <span className="text-blue-600">Demo</span>
|
Global Decision System
|
||||||
</h1>
|
</Link>
|
||||||
<nav className="flex items-center gap-4">
|
|
||||||
<a href="/" className="text-gray-600 hover:text-gray-900">首页</a>
|
<nav aria-label="主导航" className="hidden md:flex items-center gap-1">
|
||||||
<a href="/categories" className="text-gray-600 hover:text-gray-900">分类</a>
|
{navItems.map((item) => (
|
||||||
|
<NavLink
|
||||||
|
key={item.to}
|
||||||
|
to={item.to}
|
||||||
|
className={({ isActive }) =>
|
||||||
|
[
|
||||||
|
'px-3 py-2 rounded-md text-sm transition-colors',
|
||||||
|
isActive ? 'text-gray-900 bg-gray-100' : 'text-gray-600 hover:text-gray-900 hover:bg-gray-50',
|
||||||
|
].join(' ')
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{item.label}
|
||||||
|
</NavLink>
|
||||||
|
))}
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<Link
|
||||||
|
to="/contact"
|
||||||
|
className="inline-flex items-center justify-center px-3 py-2 rounded-md text-sm font-medium border border-gray-300 text-gray-700 hover:bg-gray-50"
|
||||||
|
>
|
||||||
|
Contact
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<nav aria-label="主导航(移动)" className="md:hidden mt-3 overflow-x-auto">
|
||||||
|
<div className="flex items-center gap-1 min-w-max">
|
||||||
|
{navItems.map((item) => (
|
||||||
|
<NavLink
|
||||||
|
key={item.to}
|
||||||
|
to={item.to}
|
||||||
|
className={({ isActive }) =>
|
||||||
|
[
|
||||||
|
'px-3 py-2 rounded-md text-sm whitespace-nowrap transition-colors',
|
||||||
|
isActive ? 'text-gray-900 bg-gray-100' : 'text-gray-600 hover:text-gray-900 hover:bg-gray-50',
|
||||||
|
].join(' ')
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{item.label}
|
||||||
|
</NavLink>
|
||||||
|
))}
|
||||||
|
<Link
|
||||||
|
to="/contact"
|
||||||
|
className="px-3 py-2 rounded-md text-sm whitespace-nowrap border border-gray-300 text-gray-700 hover:bg-gray-50"
|
||||||
|
>
|
||||||
|
Contact
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user