diff --git a/config/routes.ts b/config/routes.ts index 43bed73..973f09d 100644 --- a/config/routes.ts +++ b/config/routes.ts @@ -1,15 +1,3 @@ -/** - * @name umi 的路由配置 - * @description 只支持 path,component,routes,redirect,wrappers,name,icon 的配置 - * @param path path 只支持两种占位符配置,第一种是动态参数 :id 的形式,第二种是 * 通配符,通配符只能出现路由字符串的最后。 - * @param component 配置 location 和 path 匹配后用于渲染的 React 组件路径。可以是绝对路径,也可以是相对路径,如果是相对路径,会从 src/pages 开始找起。 - * @param routes 配置子路由,通常在需要为多个路径增加 layout 组件时使用。 - * @param redirect 配置路由跳转 - * @param wrappers 配置路由组件的包装组件,通过包装组件可以为当前的路由组件组合进更多的功能。 比如,可以用于路由级别的权限校验 - * @param name 配置路由的标题,默认读取国际化文件 menu.ts 中 menu.xxxx 的值,如配置 name 为 login,则读取 menu.ts 中 menu.login 的取值作为标题 - * @param icon 配置路由的图标,取值参考 https://ant.design/components/icon-cn, 注意去除风格后缀和大小写,如想要配置图标为 则取值应为 stepBackward 或 StepBackward,如想要配置图标为 则取值应为 user 或者 User - * @doc https://umijs.org/docs/guides/routes - */ export default [ { path: '/user', @@ -43,47 +31,36 @@ export default [ }, ], }, - /* { - path: '/dashboard', - name: 'dashboard', - icon: 'dashboard', - routes: [ - { - path: '/dashboard', - redirect: '/dashboard/analysis', - }, - { - name: 'analysis', - icon: 'smile', - path: '/dashboard/analysis', - component: './dashboard/analysis', - }, - { - name: 'monitor', - icon: 'smile', - path: '/dashboard/monitor', - component: './dashboard/monitor', - }, - { - name: 'workplace', - icon: 'smile', - path: '/dashboard/workplace', - component: './dashboard/workplace', - }, - ], - }, */ { - name: '故事', + name: 'home', + icon: 'home', + path: '/home', + component: './home', + }, + { + name: 'stories', icon: 'smile', path: '/story', component: './story', }, { - name: '图库', + name: 'gallery', icon: 'smile', path: '/gallery', component: './gallery', }, + { + name: 'review', + icon: 'calendar', + path: '/review', + component: './review', + }, + { + name: 'archive', + icon: 'compass', + path: '/archive', + component: './archive', + }, { name: 'collections', icon: 'appstore', @@ -99,17 +76,26 @@ export default [ component: './story/detail', }, { - name: '用户中心', + name: 'account', icon: 'user', path: '/account', component: './account/center', }, { - name: '用户设置', + name: 'settings', icon: 'setting', path: '/account/settings', component: './account/settings', }, + { + path: '/share/studio/:storyId', + component: './share/studio/[storyId]', + }, + { + path: '/share/preview/:storyId', + layout: false, + component: './share/preview/[storyId]', + }, { path: '/share/:shareId', layout: false, @@ -118,148 +104,6 @@ export default [ }, { path: '/', - redirect: '/account', + redirect: '/home', }, - /* { - path: '/', - name: 'other', - routes: [ - - { - path: '/form', - icon: 'form', - name: 'form', - routes: [ - { - path: '/form', - redirect: '/form/basic-form', - }, - { - name: 'basic-form', - icon: 'smile', - path: '/form/basic-form', - component: './form/basic-form', - }, - { - name: 'step-form', - icon: 'smile', - path: '/form/step-form', - component: './form/step-form', - }, - { - name: 'advanced-form', - icon: 'smile', - path: '/form/advanced-form', - component: './form/advanced-form', - }, - ], - }, - { - path: '/profile', - name: 'profile', - icon: 'profile', - routes: [ - { - path: '/profile', - redirect: '/profile/basic', - }, - { - name: 'basic', - icon: 'smile', - path: '/profile/basic', - component: './profile/basic', - }, - { - name: 'advanced', - icon: 'smile', - path: '/profile/advanced', - component: './profile/advanced', - }, - ], - }, - { - name: 'result', - icon: 'CheckCircleOutlined', - path: '/result', - routes: [ - { - path: '/result', - redirect: '/result/success', - }, - { - name: 'success', - icon: 'smile', - path: '/result/success', - component: './result/success', - }, - { - name: 'fail', - icon: 'smile', - path: '/result/fail', - component: './result/fail', - }, - ], - }, - { - name: 'exception', - icon: 'warning', - path: '/exception', - routes: [ - { - path: '/exception', - redirect: '/exception/403', - }, - { - name: '403', - icon: 'smile', - path: '/exception/403', - component: './exception/403', - }, - { - name: '404', - icon: 'smile', - path: '/exception/404', - component: './exception/404', - }, - { - name: '500', - icon: 'smile', - path: '/exception/500', - component: './exception/500', - }, - ], - }, - { - name: 'account', - icon: 'user', - path: '/account', - routes: [ - { - path: '/account', - redirect: '/account/center', - }, - { - name: 'center', - icon: 'smile', - path: '/account/center', - component: './account/center', - }, - { - name: 'settings', - icon: 'smile', - path: '/account/settings', - component: './account/settings', - }, - ], - }, - { - path: '/', - redirect: '/dashboard/analysis', - }, - { - component: '404', - path: '/user', - }, - ] - } */ -]; +]; \ No newline at end of file diff --git a/src/app.tsx b/src/app.tsx index 183d9ae..bf26059 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -1,46 +1,41 @@ - -import { AvatarDropdown, AvatarName, ClientOnly, Footer, Question, SelectLang } from '@/components'; +import { + AvatarDropdown, + AvatarName, + ClientOnly, + Footer, + Question, + SelectLang, +} from '@/components'; import { LinkOutlined } from '@ant-design/icons'; import type { Settings as LayoutSettings } from '@ant-design/pro-components'; import { SettingDrawer } from '@ant-design/pro-components'; import type { RequestConfig, RunTimeLayoutConfig } from '@umijs/max'; import { history, Link, useModel } from '@umijs/max'; -import { useIsMobile } from '@/hooks/useIsMobile'; -import defaultSettings from '../config/defaultSettings'; -import { errorConfig } from './requestErrorConfig'; -import { useNotifications } from '@/hooks/useNotifications'; -import BottomNav from '@/components/BottomNav'; -import SyncStatusIndicator from '@/components/SyncStatus/SyncStatusIndicator'; import { ConfigProvider, theme as antdTheme } from 'antd'; import { useEffect } from 'react'; +import { useIsMobile } from '@/hooks/useIsMobile'; +import BottomNav from '@/components/BottomNav'; +import defaultSettings from '../config/defaultSettings'; +import { errorConfig } from './requestErrorConfig'; const isDev = process.env.NODE_ENV === 'development'; const loginPath = '/user/login'; -/** - * Layout Children Wrapper Component - * Handles mobile detection and notifications setup - */ function LayoutChildrenWrapper({ children, initialState, - setInitialState + setInitialState, }: { children: React.ReactNode; initialState: any; setInitialState: any; }) { const isMobile = useIsMobile(); + const { fetchThemePreferences } = useModel('theme'); - // 暂时注释掉 theme 相关代码,避免 useModel 调用导致问题 - const { effectiveTheme, getCurrentColorScheme, fetchThemePreferences } = useModel('theme'); useEffect(() => { fetchThemePreferences(); }, [fetchThemePreferences]); - const colorScheme = getCurrentColorScheme(); - - // 暂时注释掉 useNotifications,避免 useModel 调用导致问题 - useNotifications(); return ( { - // 从 localStorage 获取用户信息 const getUserFromStorage = () => { - if (typeof window !== 'undefined') { - const userStr = localStorage.getItem('timeline_user'); - if (userStr) { - try { - return JSON.parse(userStr); - } catch (e) { - return undefined; - } - } + if (typeof window === 'undefined') { + return undefined; + } + + const userStr = localStorage.getItem('timeline_user'); + if (!userStr) { + return undefined; + } + + try { + return JSON.parse(userStr); + } catch { + return undefined; } - return undefined; }; - // 直接从 localStorage 读取用户信息,避免API调用阻塞页面渲染 - const currentUser = getUserFromStorage(); - return { - currentUser, + currentUser: getUserFromStorage(), settings: defaultSettings as Partial, }; } @@ -105,7 +99,6 @@ export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) = return { actionsRender: () => [ - , @@ -119,7 +112,6 @@ export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) = }, onPageChange: () => { const { location } = history; - // If not logged in, redirect to the login page if (typeof window !== 'undefined' && !initialState?.currentUser && location.pathname !== loginPath) { history.push(loginPath); } @@ -128,7 +120,7 @@ export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) = ? [ - OpenAPI 文档 + OpenAPI ĵ , ] : [], @@ -141,6 +133,7 @@ export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) = ); }, ...initialState?.settings, + footerRender: () =>