From 330242137157503f99e4ef2c5c0f7463130d80e3 Mon Sep 17 00:00:00 2001 From: zhilv Date: Fri, 21 Nov 2025 23:12:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20complete=20layout=20for?= =?UTF-8?q?=20home,=20login=20and=20register=20pages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 完成首页整体布局:顶栏(标题、主题切换、头像)、主区(侧边栏与内容区域)、底部 - 完成登录页与注册页的界面搭建 - 本次仅实现界面,功能逻辑尚未接入 --- src/App.css | 22 +++++++++- src/App.tsx | 10 ++--- src/assets/avatar.jpg | Bin 0 -> 32027 bytes src/components/layout/Footer.tsx | 14 +++++++ src/components/layout/Header.tsx | 68 +++++++++++++++++++++++++++++++ src/components/layout/Main.tsx | 17 ++++++++ src/components/layout/index.ts | 5 +++ src/components/ui/Card.tsx | 19 +++++++++ src/components/ui/index.tsx | 3 ++ src/index.tsx | 33 +++++++++++++-- src/pages/Home.tsx | 13 ++++++ src/pages/Login.tsx | 40 ++++++++++++++++++ src/pages/Register.tsx | 39 ++++++++++++++++++ src/pages/index.ts | 5 +++ 14 files changed, 276 insertions(+), 12 deletions(-) create mode 100644 src/assets/avatar.jpg create mode 100644 src/components/layout/Footer.tsx create mode 100644 src/components/layout/Header.tsx create mode 100644 src/components/layout/Main.tsx create mode 100644 src/components/layout/index.ts create mode 100644 src/components/ui/Card.tsx create mode 100644 src/components/ui/index.tsx create mode 100644 src/pages/Home.tsx create mode 100644 src/pages/Login.tsx create mode 100644 src/pages/Register.tsx create mode 100644 src/pages/index.ts diff --git a/src/App.css b/src/App.css index 4c1b0c2..850acc8 100644 --- a/src/App.css +++ b/src/App.css @@ -1,2 +1,20 @@ -@import "tailwindcss"; -@plugin "daisyui"; +@import 'tailwindcss'; +@plugin 'daisyui'; + +html, +body, +#root { + padding: 0; + margin: 0; + width: 100vw; + height: 100vh; + justify-items: center; + box-sizing: border-box; + overflow: hidden; +} + +*, +*::before, +*::after { + box-sizing: inherit; +} diff --git a/src/App.tsx b/src/App.tsx index 981cc99..0160fc0 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,12 +1,8 @@ -import "./App.css"; +import './App.css'; +import { Home } from '~/pages'; function App() { - - return ( -
- 首页 -
- ); + return ; } export default App; diff --git a/src/assets/avatar.jpg b/src/assets/avatar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..10368e23f5ab4cfd92fb272fa4af6176353007a2 GIT binary patch literal 32027 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 literal 0 HcmV?d00001 diff --git a/src/components/layout/Footer.tsx b/src/components/layout/Footer.tsx new file mode 100644 index 0000000..4862b86 --- /dev/null +++ b/src/components/layout/Footer.tsx @@ -0,0 +1,14 @@ +const Footer = () => { + return ( + + ); +}; + +export default Footer; diff --git a/src/components/layout/Header.tsx b/src/components/layout/Header.tsx new file mode 100644 index 0000000..de26f95 --- /dev/null +++ b/src/components/layout/Header.tsx @@ -0,0 +1,68 @@ +import { Component, Show } from 'solid-js'; +import avatarSvg from '~/assets/avatar.jpg'; + +interface HeaderProps { + isAvatar?: boolean; +} + +const Header: Component = ({ isAvatar = true }) => { + return ( +
+ 工具集 + + + + +
+ ); +}; + +export default Header; diff --git a/src/components/layout/Main.tsx b/src/components/layout/Main.tsx new file mode 100644 index 0000000..36a8328 --- /dev/null +++ b/src/components/layout/Main.tsx @@ -0,0 +1,17 @@ +import { A } from '@solidjs/router'; + +const Main = () => { + return ( +
+ +
+ ); +}; + +export default Main; diff --git a/src/components/layout/index.ts b/src/components/layout/index.ts new file mode 100644 index 0000000..b0b2538 --- /dev/null +++ b/src/components/layout/index.ts @@ -0,0 +1,5 @@ +import Header from './Header'; +import Main from './Main'; +import Footer from './Footer'; + +export { Header, Main, Footer }; diff --git a/src/components/ui/Card.tsx b/src/components/ui/Card.tsx new file mode 100644 index 0000000..2cf4c28 --- /dev/null +++ b/src/components/ui/Card.tsx @@ -0,0 +1,19 @@ +import { Component, JSX } from 'solid-js'; + +interface CardProps { + title: string; + children?: JSX.Element; +} + +const Card: Component = ({ title, children }) => { + return ( +
+ {title} +
+ {children} +
+
+ ); +}; + +export default Card; diff --git a/src/components/ui/index.tsx b/src/components/ui/index.tsx new file mode 100644 index 0000000..8c371a2 --- /dev/null +++ b/src/components/ui/index.tsx @@ -0,0 +1,3 @@ +import Card from './Card'; + +export { Card }; diff --git a/src/index.tsx b/src/index.tsx index 26b5517..7d34e4c 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,5 +1,32 @@ /* @refresh reload */ -import { render } from "solid-js/web"; -import App from "./App"; +import { render } from 'solid-js/web'; +import { Router } from '@solidjs/router'; +import { children, lazy } from 'solid-js'; -render(() => , document.getElementById("root") as HTMLElement); +const wrapper = document.getElementById('root'); + +if (!wrapper) { + throw new Error('Wrapper div not found'); +} + +const routes = [ + { + path: '/', + component: lazy(() => import('~/App')), + }, + { + path: '/auth', + children: [ + { + path: '/login', + component: lazy(() => import('~/pages/Login')), + }, + { + path: '/register', + component: lazy(() => import('~/pages/Register')), + }, + ], + }, +]; + +render(() => {routes}, wrapper); diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx new file mode 100644 index 0000000..74e72e0 --- /dev/null +++ b/src/pages/Home.tsx @@ -0,0 +1,13 @@ +import { Header, Main, Footer } from '~/components/layout'; + +const Home = () => { + return ( +
+
+
+
+
+ ); +}; + +export default Home; diff --git a/src/pages/Login.tsx b/src/pages/Login.tsx new file mode 100644 index 0000000..b5b970f --- /dev/null +++ b/src/pages/Login.tsx @@ -0,0 +1,40 @@ +import { A } from '@solidjs/router'; +import { Header, Footer } from '~/components/layout'; +import { Card } from '~/components/ui'; + +const Login = () => { + return ( +
+
+
+ + + +
+ +
+
+
+ + 没有账号请 + + 注册 + + +
+
+
+
+
+ ); +}; + +export default Login; diff --git a/src/pages/Register.tsx b/src/pages/Register.tsx new file mode 100644 index 0000000..8174998 --- /dev/null +++ b/src/pages/Register.tsx @@ -0,0 +1,39 @@ +import { A } from '@solidjs/router'; +import { Header, Footer } from '~/components/layout'; +import { Card } from '~/components/ui'; + +const Register = () => { + return ( +
+
+
+ + + +
+ +
+
+ + 有账号请 + + 登录 + + +
+
+
+
+ ); +}; + +export default Register; diff --git a/src/pages/index.ts b/src/pages/index.ts new file mode 100644 index 0000000..d07e851 --- /dev/null +++ b/src/pages/index.ts @@ -0,0 +1,5 @@ +import Home from './Home'; +import Login from './Login'; +import Register from './Register'; + +export { Home, Login, Register };