import { Outlet, Link, useHref, useNavigate, useLocation, NavLink } from "react-router-dom"; import { useEffect, useState } from 'react'; import { observer } from "mobx-react"; import { toJS } from "mobx"; import { Layout, Menu, ConfigProvider, theme, Dropdown, Space, Row, Col, Badge, Typography, Modal, Input, Button, App as AntApp } from "antd"; import { DownOutlined } from "@ant-design/icons"; import "antd/dist/reset.css"; import AppLogo from "@/assets/logo-gh.png"; import { isEmpty } from "@/utils/commons"; import { useStore } from "@/stores/StoreContext.js"; import * as config from "@/config"; import Language from "./Language"; import { useTranslation } from 'react-i18next'; import i18n from '@/i18n/index'; import zhLocale from 'antd/locale/zh_CN'; import enLocale from 'antd/locale/en_US'; import 'dayjs/locale/zh-cn'; const { Header, Content, Footer } = Layout; const { Title } = Typography; // const { t } = useTranslation(); let items = []; const useItemDefault = () => { const [data, setData] = useState([]); const { t, i18n } = useTranslation(); useEffect(() => { const newData = [ { label: {t('loginAction.ChangePassword')}, key: '0' }, { label: {t('loginAction.Profile')}, key: '1' }, { type: 'divider' }, { label: {t('loginAction.Logout')}, key: '3' }, ]; setData(newData); }, [i18n.language]); return data; }; const useItemManager = () => { const items_default = useItemDefault(); const [data, setData] = useState(items_default); const { t, i18n } = useTranslation(); useEffect(() => { const newData = [ { label: {t('loginAction.ChangePassword')}, key: '0' }, { label: {t('loginAction.Profile')}, key: '1' }, { type: 'divider' }, { label: {t('loginAction.Logout')}, key: '3' }, { label: {t('loginAction.ChangeVendor')}, key: '4' }, ]; setData(newData); }, [i18n.language]); return data; }; function App() { const { t } = useTranslation(); const items_default = useItemDefault(); const item_manager = useItemManager(); const [password, setPassword] = useState(''); const { authStore, noticeStore } = useStore(); const { notification } = AntApp.useApp(); const login = toJS(authStore.login); const { noticeUnRead } = noticeStore; const href = useHref(); const loginToken = login.token; const navigate = useNavigate(); const location = useLocation(); const arrManager = config.arrManager; // ["testzp","testzac","testycc","testlyj","testqqs","testjjh","testhn"];//特定账号加修改所属供应商的菜单 zp if (arrManager.includes(authStore.login.username)){ items = item_manager; }else{ items = items_default; } useEffect(() => { if (href !== '/login' && isEmpty(loginToken)) { navigate('/login'); } }, [href]); useEffect(() => { window.gtag('event', 'page_view', { page_location: window.location.href }); }, [location]); const onSubmit = () => { authStore.valdateUserPassword(login.username, password) .then(() => { authStore.fetchUserDetail() .catch(ex => { notification.error({ message: `Notification`, description: 'Failed to get user information.', placement: 'top', duration: 4, }); }); }) .catch(ex => { notification.error({ message: `Notification`, description: ex.message, placement: 'top', duration: 4, }); }); setPassword(''); }; const splitPath = href.split("/"); let defaultPath = "reservation"; if (splitPath.length > 1) { defaultPath = splitPath[1]; } const { token: { colorBgContainer }, } = theme.useToken(); const [antdLng, setAntdLng] = useState(enLocale); useEffect(() => { setAntdLng(i18n.language === 'en' ? enLocale : zhLocale); }, [i18n.language]); return ( {t('loginAction.LoginTimeout')}
{t('loginAction.LoginTimeoutTip')}
setPassword(e.target.value)} onPressEnter={() => onSubmit()} addonBefore={login.username} />
App logo {t('menu.Reservation')} }, { key: "invoice", label: {t('menu.Invoice')} }, { key: "feedback", label: {t('menu.Feedback')} }, // { key: "report", label: Report }, { key: "notice", label: ( {t('menu.Notice')} {noticeUnRead ? : ""} ), }, ]} /> {authStore.login.travelAgencyName} e.preventDefault()}> {authStore.login.username}
); } export default observer(App);