浏览代码

24680.com

zhejiushizhuce 2 年之前
当前提交
b23e4f97ca
共有 100 个文件被更改,包括 611 次插入 和 0 次删除
  1. 25 0
      .gitignore
  2. 121 0
      README.md
  3. 7 0
      babel-plugin-macros.config.js
  4. 23 0
      craco.config.js
  5. 23 0
      jsconfig.json
  6. 104 0
      package.json
  7. 二进制
      public/favicon.ico
  8. 17 0
      public/index.html
  9. 3 0
      public/robots.txt
  10. 199 0
      src/App.js
  11. 2 0
      src/Global.js
  12. 5 0
      src/api/config.js
  13. 69 0
      src/api/request.js
  14. 10 0
      src/app/store.js
  15. 二进制
      src/assets/404dark.webp
  16. 二进制
      src/assets/404light.webp
  17. 二进制
      src/assets/activity/quests.png
  18. 二进制
      src/assets/activity/rio_refer.png
  19. 二进制
      src/assets/activity/rio_refer_f.png
  20. 二进制
      src/assets/activity/spin_1.png
  21. 二进制
      src/assets/activity/spin_2.png
  22. 二进制
      src/assets/activity/spin_3.png
  23. 0 0
      src/assets/auth_shapes.json
  24. 二进制
      src/assets/avatars/1.webp
  25. 二进制
      src/assets/avatars/2.webp
  26. 二进制
      src/assets/avatars/3.webp
  27. 二进制
      src/assets/avatars/4.webp
  28. 二进制
      src/assets/avatars/5.webp
  29. 0 0
      src/assets/ball.json
  30. 二进制
      src/assets/ball.webp
  31. 3 0
      src/assets/bar.svg
  32. 二进制
      src/assets/brand/1.webp
  33. 二进制
      src/assets/brand/10.webp
  34. 二进制
      src/assets/brand/2.webp
  35. 二进制
      src/assets/brand/3.webp
  36. 二进制
      src/assets/brand/4.webp
  37. 二进制
      src/assets/brand/5.webp
  38. 二进制
      src/assets/brand/6.webp
  39. 二进制
      src/assets/brand/7.webp
  40. 二进制
      src/assets/brand/8.webp
  41. 二进制
      src/assets/brand/9.webp
  42. 二进制
      src/assets/cart/1.webp
  43. 二进制
      src/assets/cart/2.webp
  44. 二进制
      src/assets/cart/3.webp
  45. 二进制
      src/assets/cart/4.webp
  46. 二进制
      src/assets/cart/5.webp
  47. 二进制
      src/assets/cart/6.webp
  48. 二进制
      src/assets/celtic/1.webp
  49. 二进制
      src/assets/celtic/10.webp
  50. 二进制
      src/assets/celtic/18.webp
  51. 二进制
      src/assets/celtic/2.webp
  52. 二进制
      src/assets/celtic/21.webp
  53. 二进制
      src/assets/celtic/22.webp
  54. 二进制
      src/assets/celtic/3.webp
  55. 二进制
      src/assets/celtic/4.webp
  56. 二进制
      src/assets/celtic/6.webp
  57. 二进制
      src/assets/celtic/7.webp
  58. 二进制
      src/assets/celtic/8.webp
  59. 二进制
      src/assets/clubs/arsenal.webp
  60. 二进制
      src/assets/clubs/asmonaco.webp
  61. 二进制
      src/assets/clubs/asse.webp
  62. 二进制
      src/assets/clubs/atalanta.webp
  63. 二进制
      src/assets/clubs/athleticbilbao.webp
  64. 二进制
      src/assets/clubs/atletico.webp
  65. 二进制
      src/assets/clubs/barcelona.webp
  66. 二进制
      src/assets/clubs/bayer.webp
  67. 二进制
      src/assets/clubs/bayern.webp
  68. 二进制
      src/assets/clubs/bordeaux.webp
  69. 二进制
      src/assets/clubs/bundesliga.webp
  70. 二进制
      src/assets/clubs/bvb.webp
  71. 二进制
      src/assets/clubs/celtavigo.webp
  72. 二进制
      src/assets/clubs/chelsea.webp
  73. 二进制
      src/assets/clubs/eintracht.webp
  74. 二进制
      src/assets/clubs/english_premier.webp
  75. 二进制
      src/assets/clubs/everton.webp
  76. 二进制
      src/assets/clubs/fiorentina.webp
  77. 二进制
      src/assets/clubs/hamburger.webp
  78. 二进制
      src/assets/clubs/hertha.webp
  79. 二进制
      src/assets/clubs/juventus.webp
  80. 二进制
      src/assets/clubs/koln.webp
  81. 二进制
      src/assets/clubs/lacoruna.webp
  82. 二进制
      src/assets/clubs/lazio.webp
  83. 二进制
      src/assets/clubs/leeds.webp
  84. 二进制
      src/assets/clubs/leicester.webp
  85. 二进制
      src/assets/clubs/lille.webp
  86. 二进制
      src/assets/clubs/liverpool.webp
  87. 二进制
      src/assets/clubs/lyon.webp
  88. 二进制
      src/assets/clubs/manchester.webp
  89. 二进制
      src/assets/clubs/manchester_united.webp
  90. 二进制
      src/assets/clubs/mhsc.webp
  91. 二进制
      src/assets/clubs/milan.webp
  92. 二进制
      src/assets/clubs/milano.webp
  93. 二进制
      src/assets/clubs/nantes.webp
  94. 二进制
      src/assets/clubs/napoli.webp
  95. 二进制
      src/assets/clubs/newcastle.webp
  96. 二进制
      src/assets/clubs/nice.webp
  97. 二进制
      src/assets/clubs/olympique.webp
  98. 二进制
      src/assets/clubs/psg.webp
  99. 二进制
      src/assets/clubs/realbetis.webp
  100. 二进制
      src/assets/clubs/realmadrid.webp

+ 25 - 0
.gitignore

@@ -0,0 +1,25 @@
+.DS_Store
+node_modules
+/dist
+
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+build
+yarn.lock

+ 121 - 0
README.md

@@ -0,0 +1,121 @@
+## Getting started
+
+#### Developed with:
+
+- [React](https://reactjs.org/) - 18.2.0
+- [Node.js](https://nodejs.org/en/) - 18.12.1
+
+First, install the dependencies using `npm install --legacy-peer-deps` or `yarn install`.
+
+Then, run the development server:
+
+```bash
+yarn start
+# OR
+npm run start
+```
+
+Then, open [http://localhost:3000](http://localhost:3000) with your browser to see the result (if it doesn't open automatically).
+
+You can start editing pages or components. The page auto-updates as you edit and save a file.
+
+To avoid any issues, please make sure you have the latest stable version of [Node.js](https://nodejs.org/en/) installed.
+
+If you need to have multiple versions of Node.js installed, you can use [nvm](https://github.com/nvm-sh/nvm).
+
+### List of available scripts:
+
+Liga Dashboard Template is based on [Create-React-App](https://create-react-app.dev) template.
+
+### `start`
+
+Runs the app in the development mode.
+Open [http://localhost:3000](http://localhost:3000) to view it in your browser.
+
+The page will reload when you make changes.\
+You may also see any lint errors in the console.
+
+### `build`
+
+Builds the app for production to the `build` folder.\
+It correctly bundles React in production mode and optimizes the build for the best performance.
+
+The build is minified and the filenames include the hashes.
+
+### `gzip`
+
+Builds the app for production to the `build` folder and compresses it with gzip and brotli.\
+If your server is configured to serve pre-compressed files, you can use this command to reduce the transfer size up to 70%.
+
+### `eject`
+
+**Note: this is a one-way operation. Once you `eject`, you can't go back!**
+
+If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
+
+Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them.
+
+### How to customize icon font
+
+You can import *selection.json* located in `src/fonts/icomoon` back to the [IcoMoon app](https://icomoon.io/app) using the *Import Icons* button (or via Main Menu → Manage Projects) to retrieve icon selection.
+
+### How to use Google Analytics
+
+To use Google Analytics, you need to create a new project in [Google Analytics](https://analytics.google.com/analytics/web/) and get the tracking ID.
+
+Then, create a new file called *.env.local* in the root directory of your project and add the following line to it:
+
+```bash
+REACT_APP_PUBLIC_GA=YOUR_TRACKING_ID
+```
+
+------
+
+## File structure
+
+    .
+    ├── public                  # static files
+    │   ├── favicon.ico
+    │   ├── index.html          # main HTML file
+    │   ├── robots.txt
+    ├── src                     # source files
+    │   ├── app                 # redux store
+    │   ├── assets              # static assets
+    │   ├── components          # reusable components shared across the app
+    │   ├── constants           
+    │   ├── contexts            # context providers
+    │   ├── db                  # fake database
+    │   ├── features            # redux features (slices)
+    │   ├── fonts               
+    │   ├── hooks               # custom hooks
+    │   ├── layout              # main layout components (header, sidebar, etc.)
+    │   ├── pages               
+    │   ├── styles              # global styles
+    │   ├── ui                  # reusable UI components
+    │   ├── utils               # helper functions
+    │   ├── widgets             # reusable widgets
+    │   ├── App.js              # main app component
+    │   ├── index.js            # app entry point
+    │   ├── layouts.js          # layout object for react-grid-layout
+    │   ├── style.scss          # global app styles
+    ├── .htaccess                       # htaccess file for Apache server
+    ├── babel-plugin-macros.config.js   # babel macros config (for styled-components)
+    ├── craco.config.js                 # custom CRA config
+    ├── jsconfig.json                   # jsconfig for IDE
+    ├── package.json            
+
+## Third-party libraries
+
+- [React-spring](https://www.react-spring.io/) - animation library
+- [Recharts](http://recharts.org/en-US/) - charts
+- [React-select](https://react-select.com/home)
+- [Swiper](https://swiperjs.com/react) - slider
+- [React-toastify](https://fkhadra.github.io/react-toastify/introduction) - toast notifications
+- [MUI](https://mui.com/) - material ui components
+- [styled-components](https://styled-components.com/) - css-in-js
+- [dnd-kit](https://dndkit.com/) - drag and drop
+- [React Redux](https://react-redux.js.org/) - state management
+- [React Router](https://reactrouter.com/) - routing
+- [React Grid Layout](https://react-grid-layout.github.io/react-grid-layout/examples/0-showcase.html) - layout
+- [React Hook Form](https://react-hook-form.com/) - form validation
+- [React Big Calendar](http://jquense.github.io/react-big-calendar/examples/index.html) - scheduler

+ 7 - 0
babel-plugin-macros.config.js

@@ -0,0 +1,7 @@
+const isDev = process.env.NODE_ENV !== 'production';
+module.exports = {
+    styledComponents: {
+        fileName: isDev,
+        displayName: isDev
+    }
+}

+ 23 - 0
craco.config.js

@@ -0,0 +1,23 @@
+const path = require('path');
+
+module.exports = {
+    webpack: {
+        alias: {
+            '@components': path.resolve(__dirname, 'src/components'),
+            '@ui': path.resolve(__dirname, 'src/ui'),
+            '@pages': path.resolve(__dirname, 'src/pages'),
+            '@assets': path.resolve(__dirname, 'src/assets'),
+            '@styles': path.resolve(__dirname, 'src/styles'),
+            '@db': path.resolve(__dirname, 'src/db'),
+            '@hooks': path.resolve(__dirname, 'src/hooks'),
+            '@layout': path.resolve(__dirname, 'src/layout'),
+            '@fonts': path.resolve(__dirname, 'src/fonts'),
+            '@utils': path.resolve(__dirname, 'src/utils'),
+            '@widgets': path.resolve(__dirname, 'src/widgets'),
+            '@contexts': path.resolve(__dirname, 'src/contexts'),
+            '@constants': path.resolve(__dirname, 'src/constants'),
+            '@features': path.resolve(__dirname, 'src/features'),
+            '@api':path.resolve(__dirname,'src/api'),
+        },
+    }
+};

+ 23 - 0
jsconfig.json

@@ -0,0 +1,23 @@
+{
+    "compilerOptions": {
+        "jsx": "react",
+        "baseUrl": "./src",
+        "paths": {
+            "@components/*": [ "components/*"],
+            "@ui/*": [ "ui/*" ],
+            "@pages/*": [ "pages/*" ],
+            "@assets/*": [ "assets/*" ],
+            "@styles/*": [ "styles/*" ],
+            "@db/*": [ "db/*" ],
+            "@hooks/*": [ "hooks/*" ],
+            "@layout/*": [ "layout/*" ],
+            "@fonts/*": [ "fonts/*" ],
+            "@utils/*": [ "utils/*" ],
+            "@widgets/*": [ "widgets/*" ],
+            "@contexts/*": [ "contexts/*" ],
+            "@constants/*": [ "constants/*" ],
+            "@features/*": [ "features/*" ],
+            "@api/*": ["api/*"]
+        }
+    }
+}

+ 104 - 0
package.json

@@ -0,0 +1,104 @@
+{
+  "name": "liga-soccer",
+  "version": "1.0.2",
+  "private": true,
+  "author": "merkulove <hello@merkulov.design> (https://1.envato.market/tf-merkulove)",
+  "contributors": [
+    {
+      "name": "Lilit L.",
+      "email": "lilit@merkulov.design"
+    }
+  ],
+  "copyright": "Merkulove ( https://merkulov.design/ ). All rights reserved.",
+  "support": "help@merkulov.design",
+  "license": "Envato License https://1.envato.market/KYbje",
+  "dependencies": {
+    "@dnd-kit/core": "^6.0.8",
+    "@dnd-kit/modifiers": "^6.0.1",
+    "@dnd-kit/sortable": "^7.0.2",
+    "@dnd-kit/utilities": "^3.2.1",
+    "@emotion/cache": "^11.10.5",
+    "@emotion/react": "^11.10.6",
+    "@emotion/styled": "^11.10.5",
+    "@loadable/component": "^5.15.3",
+    "@mui/base": "^5.0.0-beta.19",
+    "@mui/material": "^5.11.4",
+    "@mui/styled-engine-sc": "^5.11.0",
+    "@react-spring/web": "^9.7.1",
+    "@reduxjs/toolkit": "^1.9.3",
+    "@tanstack/react-table": "^8.7.9",
+    "axios": "^1.6.7",
+    "classnames": "^2.3.2",
+    "country-state-city": "^3.1.2",
+    "craco": "^0.0.3",
+    "dayjs": "^1.11.7",
+    "i18next": "^23.8.2",
+    "i18next-browser-languagedetector": "^7.2.0",
+    "lottie-react": "^2.4.0",
+    "moment": "^2.29.4",
+    "nanoid": "^4.0.1",
+    "prop-types": "^15.8.1",
+    "query-string": "^9.0.0",
+    "react": "^18.2.0",
+    "react-big-calendar": "^1.6.8",
+    "react-calendar": "^4.0.0",
+    "react-countup": "^6.4.1",
+    "react-dom": "^18.2.0",
+    "react-ga4": "^2.1.0",
+    "react-grid-layout": "^1.3.4",
+    "react-headroom": "^3.2.1",
+    "react-helmet": "^6.1.0",
+    "react-hook-form": "^7.43.3",
+    "react-i18next": "^14.0.5",
+    "react-intersection-observer": "^9.4.3",
+    "react-lazy-load-image-component": "^1.5.6",
+    "react-number-format": "^5.1.4",
+    "react-redux": "^8.0.5",
+    "react-router-dom": "^6.6.2",
+    "react-scripts": "5.0.1",
+    "react-select": "^5.7.0",
+    "react-select-country-list": "^2.2.3",
+    "react-sizeme": "^3.0.2",
+    "react-stickynode": "^4.1.0",
+    "react-toastify": "^9.1.1",
+    "react-truncate": "^2.4.0",
+    "react-use": "^17.4.0",
+    "react-use-measure": "^2.1.1",
+    "recharts": "^2.4.3",
+    "rtl-detect": "^1.0.4",
+    "sass": "^1.57.1",
+    "styled-components": "^5.3.6",
+    "styled-theming": "^2.2.0",
+    "stylis-plugin-rtl": "^2.1.1",
+    "swiper": "^8.4.6",
+    "use-gauge": "^0.5.0",
+    "use-mobile-detect-hook": "^1.0.5"
+  },
+  "scripts": {
+    "start": "craco start",
+    "build": "craco build",
+    "gzip": "craco build && compress-cra",
+    "eject": "react-scripts eject"
+  },
+  "eslintConfig": {
+    "extends": [
+      "react-app",
+      "react-app/jest"
+    ]
+  },
+  "browserslist": {
+    "production": [
+      ">0.2%",
+      "not dead",
+      "not op_mini all"
+    ],
+    "development": [
+      "last 1 chrome version",
+      "last 1 firefox version",
+      "last 1 safari version"
+    ]
+  },
+  "devDependencies": {
+    "compress-create-react-app": "^1.3.1"
+  }
+}

二进制
public/favicon.ico


+ 17 - 0
public/index.html

@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <title>Liga Soccer React Dashboard Template</title>
+    <link rel="preconnect" href="https://fonts.googleapis.com">
+    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+    <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700;800&family=Open+Sans:wght@400;600;700&display=swap" rel="stylesheet">
+    <meta name="description" content="Elevate your soccer management with Liga Soccer React Dashboard! Featuring live data, customizable widgets, and intuitive charts, our dashboard empowers you to effectively monitor player stats, team performance, and match schedules.">
+  </head>
+  <body>
+    <noscript>You need to enable JavaScript to run this app.</noscript>
+    <div id="root"></div>
+  </body>
+</html>

+ 3 - 0
public/robots.txt

@@ -0,0 +1,3 @@
+# https://www.robotstxt.org/robotstxt.html
+User-agent: *
+Disallow:

+ 199 - 0
src/App.js

@@ -0,0 +1,199 @@
+
+// GA
+import ReactGA from 'react-ga4';
+
+// utils
+import {lazy, Suspense} from 'react';
+
+// styles
+import ThemeStyles from '@styles/theme';
+import './style.scss';
+
+// libs styles
+import 'react-toastify/dist/ReactToastify.min.css';
+import 'react-grid-layout/css/styles.css';
+import 'swiper/css';
+import 'swiper/css/effect-fade';
+import 'swiper/css/pagination';
+
+// fonts
+import '@fonts/icomoon/icomoon.woff';
+
+// contexts
+import {SidebarProvider, useSidebar} from '@contexts/sidebarContext';
+import {ThemeProvider} from 'styled-components';
+
+// hooks
+import {useThemeProvider} from '@contexts/themeContext';
+import {useEffect, useRef} from 'react';
+import {useWindowSize} from 'react-use';
+import useAuthRoute from '@hooks/useAuthRoute';
+
+// utils
+import {StyleSheetManager} from 'styled-components';
+import {ThemeProvider as MuiThemeProvider, createTheme} from '@mui/material/styles';
+import {preventDefault} from '@utils/helpers';
+import rtlPlugin from 'stylis-plugin-rtl';
+import {CacheProvider} from '@emotion/react';
+import createCache from '@emotion/cache';
+
+// components
+import {BrowserRouter, HashRouter, Route, Routes, useLocation} from 'react-router-dom';
+import {ToastContainer} from 'react-toastify';
+import LoadingScreen from '@components/LoadingScreen';
+import Sidebar from '@layout/Sidebar';
+import BottomNav from '@layout/BottomNav';
+import Navbar from '@layout/Navbar';
+import ShoppingCart from '@widgets/ShoppingCart';
+import ScrollToTop from '@components/ScrollToTop';
+import AppContainer from "@layout/AppContainer";
+import {APP_ROUTES} from "@api/config";
+import Http from "@api/request";
+import Layout from "@layout/Layout";
+
+// pages
+const ClubSummary = lazy(() => import('@pages/ClubSummary'));
+const GameSummary = lazy(() => import('@pages/GameSummary'));
+const Championships = lazy(() => import('@pages/Championships'));
+const LeagueOverview = lazy(() => import('@pages/LeagueOverview'));
+const FansCommunity = lazy(() => import('@pages/FansCommunity'));
+const Statistics = lazy(() => import('@pages/Statistics'));
+const PageNotFound = lazy(() => import('@pages/PageNotFound'));
+const MatchSummary = lazy(() => import('@pages/MatchSummary'));
+const MatchOverview = lazy(() => import('@pages/MatchOverview'));
+const PlayerProfile = lazy(() => import('@pages/PlayerProfile'));
+const Schedule = lazy(() => import('@pages/Schedule'));
+const Tickets = lazy(() => import('@pages/Tickets'));
+const FootballStore = lazy(() => import('@pages/FootballStore'));
+const BrandStore = lazy(() => import('@pages/BrandStore'));
+const Product = lazy(() => import('@pages/Product'));
+const Login = lazy(() => import('@pages/Login'));
+const SignUp = lazy(() => import('@pages/SignUp'));
+const Settings = lazy(() => import('@pages/Settings'));
+
+const App = () => {
+    const appRef = useRef(null);
+    const {theme, direction} = useThemeProvider();
+    const {width} = useWindowSize();
+    // const isAuthRoute = useAuthRoute();
+    const isAuthRoute = false;
+    const {pathname, search, hash} = useLocation();
+    // Google Analytics init
+    const gaKey = process.env.REACT_APP_PUBLIC_GA;
+    gaKey && ReactGA.initialize(gaKey);
+
+    // auto RTL support for Material-UI components and styled-components
+
+    const plugins = direction === 'rtl' ? [rtlPlugin] : [];
+
+    const muiTheme = createTheme({
+        direction: direction,
+    });
+
+    const cacheRtl = createCache({
+        key: 'css-rtl',
+        stylisPlugins: plugins,
+    });
+
+    useEffect(() => {
+        // scroll to top on route change
+        appRef.current && appRef.current.scrollTo(0, 0);
+        preventDefault();
+    }, []);
+    // return (
+    //     <CacheProvider value={cacheRtl}>
+    //         <MuiThemeProvider theme={muiTheme}>
+    //             <SidebarProvider>
+    //                 <ThemeProvider theme={{theme: theme}}>
+    //                     <ThemeStyles/>
+    //                     <ToastContainer theme={theme} autoClose={2500}
+    //                                     position={direction === 'ltr' ? 'top-right' : 'top-left'}/>
+    //                     <StyleSheetManager stylisPlugins={plugins}>
+    //                         <div className={`app ${isAuthRoute ? 'fluid' : ''}`} ref={appRef}>
+    //                             <ScrollToTop/>
+    //                             {
+    //                                 !isAuthRoute && (
+    //                                     <>
+    //                                         <Sidebar/>
+    //                                         <Navbar/>
+    //                                         {
+    //                                             // width < 768 && <Navbar/>
+    //                                         }
+    //                                         {
+    //                                             width < 768 && <BottomNav/>
+    //                                         }
+    //                                     </>
+    //                                 )
+    //                             }
+    //                             {/*<div className={`app_container ${true?'sidebar-open':'sidebar-close'}`}>*/}
+    //                             <AppContainer>
+    //                                 <div className="app_container-content d-flex flex-column flex-1">
+    //                                     <Suspense fallback={<LoadingScreen/>}>
+    //                                         <Routes>
+    //                                             <Route path="*" element={<PageNotFound/>}/>
+    //                                             <Route path="/" element={<ClubSummary/>}/>
+    //                                             <Route path="/game-summary" element={<GameSummary/>}/>
+    //                                             <Route path="/championships" element={<Championships/>}/>
+    //                                             <Route path="/league-overview" element={<LeagueOverview/>}/>
+    //                                             <Route path="/fans-community" element={<FansCommunity/>}/>
+    //                                             <Route path="/statistics" element={<Statistics/>}/>
+    //                                             <Route path="/match-summary" element={<MatchSummary/>}/>
+    //                                             <Route path="/match-overview" element={<MatchOverview/>}/>
+    //                                             <Route path="/player-profile" element={<PlayerProfile/>}/>
+    //                                             <Route path="/schedule" element={<Schedule/>}/>
+    //                                             <Route path="/tickets" element={<Tickets/>}/>
+    //                                             <Route path="/football-store" element={<FootballStore/>}/>
+    //                                             <Route path="/brand-store" element={<BrandStore/>}/>
+    //                                             <Route path="/product" element={<Product/>}/>
+    //                                         </Routes>
+    //                                         {
+    //                                             hash != '' ? (
+    //                                                 <Routes location={{
+    //                                                     pathname: (pathname + hash),
+    //                                                     search: search,
+    //                                                     hash: hash
+    //                                                 }}>
+    //                                                     <Route path={`${pathname}#/settings`} element={<div style={{
+    //                                                         backgroundColor: '#fff',
+    //                                                         zIndex: 2000,
+    //                                                         position: "fixed",
+    //                                                         width: '100px',
+    //                                                         height: '100px'
+    //                                                     }}/>}/>
+    //                                                     <Route path={`${pathname}#/sign-up`} element={<MatchSummary/>}/>
+    //                                                 </Routes>
+    //                                             ) : (<></>)
+    //                                         }
+    //
+    //                                     </Suspense>
+    //
+    //                                 </div>
+    //                                 {/*</div>*/}
+    //                             </AppContainer>
+    //                             <ShoppingCart isPopup/>
+    //                         </div>
+    //                     </StyleSheetManager>
+    //                 </ThemeProvider>
+    //             </SidebarProvider>
+    //         </MuiThemeProvider>
+    //     </CacheProvider>
+    // );
+    return (
+        <CacheProvider value={cacheRtl}>
+            <MuiThemeProvider theme={muiTheme}>
+                <SidebarProvider>
+                    <ThemeProvider theme={{theme: theme}}>
+                        <ThemeStyles/>
+                        <ToastContainer theme={theme} autoClose={2500}
+                                        position={direction === 'ltr' ? 'top-right' : 'top-left'}/>
+                        <StyleSheetManager stylisPlugins={plugins}>
+                            <Layout />
+                        </StyleSheetManager>
+                    </ThemeProvider>
+                </SidebarProvider>
+            </MuiThemeProvider>
+        </CacheProvider>
+    );
+}
+
+export default App

+ 2 - 0
src/Global.js

@@ -0,0 +1,2 @@
+import i18n from './locales/index';
+global.i18n=i18n;

+ 5 - 0
src/api/config.js

@@ -0,0 +1,5 @@
+// export const BASE_API="https://api.24680.com/";
+export const BASE_API="http://localhost:8899/";
+// export const APP_ROUTES="routes";
+export const APP_ROUTES="mobile/testHttp";
+

+ 69 - 0
src/api/request.js

@@ -0,0 +1,69 @@
+
+// Create axios instance
+import {BASE_API} from "./config";
+import axios from "axios";
+
+const service = axios.create({
+    baseURL: BASE_API,
+    timeout: 10000, // Request timeout
+});
+
+// Request intercepter
+service.interceptors.request.use(
+    config => {
+        return config;
+    },
+    error => {
+        // Do something with request error
+        // console.log(error); // for debug
+        Promise.reject(error);
+    }
+);
+
+// response pre-processing
+service.interceptors.response.use(
+    response => {
+
+        return response.data;
+    },
+    error => {
+        let message = error.message;
+        // console.log(error);
+
+        return Promise.reject(error);
+    }
+);
+
+
+const get=(params={})=>{
+    return service({
+        method: 'get',
+        ...params
+    });
+}
+const post=(params={})=>{
+
+    return service({
+        method: 'post',
+        ...params
+    });
+}
+const put=(params={})=>{
+    return service({
+        method: 'put',
+        ...params
+    });
+}
+const adelete=(params={})=>{
+    return service({
+        method: 'delete',
+        ...params
+    });
+}
+const Http={
+    get,
+    post,
+    put,
+    delete:adelete
+}
+export default Http;

+ 10 - 0
src/app/store.js

@@ -0,0 +1,10 @@
+import {configureStore} from '@reduxjs/toolkit';
+import TodosReducer from '../features/todos/todosSlice';
+import MainReducer from '@features/mainSlice';
+
+export default configureStore({
+    reducer: {
+        todos: TodosReducer,
+        main:MainReducer,
+    }
+});

二进制
src/assets/404dark.webp


二进制
src/assets/404light.webp


二进制
src/assets/activity/quests.png


二进制
src/assets/activity/rio_refer.png


二进制
src/assets/activity/rio_refer_f.png


二进制
src/assets/activity/spin_1.png


二进制
src/assets/activity/spin_2.png


二进制
src/assets/activity/spin_3.png


文件差异内容过多而无法显示
+ 0 - 0
src/assets/auth_shapes.json


二进制
src/assets/avatars/1.webp


二进制
src/assets/avatars/2.webp


二进制
src/assets/avatars/3.webp


二进制
src/assets/avatars/4.webp


二进制
src/assets/avatars/5.webp


文件差异内容过多而无法显示
+ 0 - 0
src/assets/ball.json


二进制
src/assets/ball.webp


+ 3 - 0
src/assets/bar.svg

@@ -0,0 +1,3 @@
+<svg width="53" height="6" viewBox="0 0 53 6" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="0.25" width="52.3333" height="6" rx="2" fill="currentColor"/>
+</svg>

二进制
src/assets/brand/1.webp


二进制
src/assets/brand/10.webp


二进制
src/assets/brand/2.webp


二进制
src/assets/brand/3.webp


二进制
src/assets/brand/4.webp


二进制
src/assets/brand/5.webp


二进制
src/assets/brand/6.webp


二进制
src/assets/brand/7.webp


二进制
src/assets/brand/8.webp


二进制
src/assets/brand/9.webp


二进制
src/assets/cart/1.webp


二进制
src/assets/cart/2.webp


二进制
src/assets/cart/3.webp


二进制
src/assets/cart/4.webp


二进制
src/assets/cart/5.webp


二进制
src/assets/cart/6.webp


二进制
src/assets/celtic/1.webp


二进制
src/assets/celtic/10.webp


二进制
src/assets/celtic/18.webp


二进制
src/assets/celtic/2.webp


二进制
src/assets/celtic/21.webp


二进制
src/assets/celtic/22.webp


二进制
src/assets/celtic/3.webp


二进制
src/assets/celtic/4.webp


二进制
src/assets/celtic/6.webp


二进制
src/assets/celtic/7.webp


二进制
src/assets/celtic/8.webp


二进制
src/assets/clubs/arsenal.webp


二进制
src/assets/clubs/asmonaco.webp


二进制
src/assets/clubs/asse.webp


二进制
src/assets/clubs/atalanta.webp


二进制
src/assets/clubs/athleticbilbao.webp


二进制
src/assets/clubs/atletico.webp


二进制
src/assets/clubs/barcelona.webp


二进制
src/assets/clubs/bayer.webp


二进制
src/assets/clubs/bayern.webp


二进制
src/assets/clubs/bordeaux.webp


二进制
src/assets/clubs/bundesliga.webp


二进制
src/assets/clubs/bvb.webp


二进制
src/assets/clubs/celtavigo.webp


二进制
src/assets/clubs/chelsea.webp


二进制
src/assets/clubs/eintracht.webp


二进制
src/assets/clubs/english_premier.webp


二进制
src/assets/clubs/everton.webp


二进制
src/assets/clubs/fiorentina.webp


二进制
src/assets/clubs/hamburger.webp


二进制
src/assets/clubs/hertha.webp


二进制
src/assets/clubs/juventus.webp


二进制
src/assets/clubs/koln.webp


二进制
src/assets/clubs/lacoruna.webp


二进制
src/assets/clubs/lazio.webp


二进制
src/assets/clubs/leeds.webp


二进制
src/assets/clubs/leicester.webp


二进制
src/assets/clubs/lille.webp


二进制
src/assets/clubs/liverpool.webp


二进制
src/assets/clubs/lyon.webp


二进制
src/assets/clubs/manchester.webp


二进制
src/assets/clubs/manchester_united.webp


二进制
src/assets/clubs/mhsc.webp


二进制
src/assets/clubs/milan.webp


二进制
src/assets/clubs/milano.webp


二进制
src/assets/clubs/nantes.webp


二进制
src/assets/clubs/napoli.webp


二进制
src/assets/clubs/newcastle.webp


二进制
src/assets/clubs/nice.webp


二进制
src/assets/clubs/olympique.webp


二进制
src/assets/clubs/psg.webp


二进制
src/assets/clubs/realbetis.webp


二进制
src/assets/clubs/realmadrid.webp


部分文件因为文件数量过多而无法显示