You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
GHHub/src/views/App.jsx

119 lines
3.1 KiB
React

import { Outlet, Link, useHref, useLocation, NavLink } from "react-router-dom";
import { useEffect } from "react";
import { observer } from "mobx-react";
import { Layout, Menu, ConfigProvider, theme, Dropdown, Space, Row, Col, Alert, Typography, Divider, App as AntApp } from "antd";
import { DownOutlined } from "@ant-design/icons";
import "antd/dist/reset.css";
import AppLogo from "@/assets/logo-gh.png";
import { useStore } from "@/stores/StoreContext.js";
const { Header, Content, Footer } = Layout;
const { Title } = Typography;
const items = [
{
label: <Link to="/account/change-password">Change password</Link>,
key: "0",
},
{
label: <Link to="/account/profile">Profile</Link>,
key: "1",
},
{
type: "divider",
},
{
label: <Link to="/login">Logout</Link>,
key: "3",
},
];
function App() {
const { authStore } = useStore();
const href = useHref();
useEffect(() => {
// Check location
console.info("href: " + href);
}, [href]);
const splitPath = href.split("/");
let defaultPath = "reservation";
if (splitPath.length > 1) {
defaultPath = splitPath[1];
}
const {
token: { colorBgContainer },
} = theme.useToken();
return (
<ConfigProvider
theme={{
token: {
colorPrimary: "#00b96b",
},
algorithm: theme.defaultAlgorithm,
}}>
<AntApp>
<Layout
style={{
minHeight: "100vh",
}}>
<Header className="header" style={{ position: "sticky", top: 0, zIndex: 1, width: "100%" }}>
<Row gutter={{ md: 24 }} justify="end" align="middle">
<Col span={18}>
<NavLink to="/">
<img src={AppLogo} className="logo" alt="App logo" />
</NavLink>
<Menu
theme="dark"
mode="horizontal"
selectedKeys={[defaultPath]}
items={[
{ key: "reservation", label: <Link to="/reservation/newest">Reservation</Link> },
{ key: "invoice", label: <Link to="/invoice">Invoice</Link> },
2 years ago
{ key: "feedback", label: <Link to="/feedback">Feedback</Link> },
{ key: "notice", label: <Link to="/notice">Notice</Link> },
]}
/>
</Col>
<Col span={2}>
<Title level={3} style={{color: 'white', marginBottom: '0', display: 'flex', justifyContent: 'end'}}>{authStore.login.travelAgencyName}</Title>
</Col>
<Col span={4}>
<Dropdown
menu={{
items,
}}>
<a onClick={e => e.preventDefault()}>
<Space>
{authStore.login.username}
<DownOutlined />
</Space>
</a>
</Dropdown>
</Col>
</Row>
</Header>
<Alert message={<NavLink to="/notice">公告 查看后不再显示或者一直显示或者放到页面底部</NavLink>} description="" type="info" banner closable />
<Content
style={{
padding: 24,
margin: 0,
minHeight: 280,
background: colorBgContainer,
}}>
<Outlet />
</Content>
<Footer></Footer>
</Layout>
</AntApp>
</ConfigProvider>
);
}
export default observer(App);