From 23da619e23fdf7e2044a1c959fb51e8cd84a760c Mon Sep 17 00:00:00 2001
From: yulinling <2712495353@qq.com>
Date: Tue, 19 Aug 2025 00:11:38 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=B7=AF=E7=94=B1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 40 ++++++++++++++++++++++++++++++++++
src/router/index.js | 49 +++++++++++++++++++++---------------------
src/views/NotFound.vue | 7 ++++++
3 files changed, 72 insertions(+), 24 deletions(-)
create mode 100644 src/views/NotFound.vue
diff --git a/README.md b/README.md
index 821e5a9..4a238b7 100644
--- a/README.md
+++ b/README.md
@@ -33,3 +33,43 @@ npm run build
```sh
npm run lint
```
+
+```angular2html
+src
+├─ assets # 静态资源 (图片、字体、全局样式等)
+│ ├─ images
+│ ├─ icons
+│ └─ styles # 全局样式(variables.scss, reset.css...)
+│
+├─ components # 全局通用组件
+│ ├─ common # 公共基础组件 (按钮、输入框、弹窗...)
+│ ├─ layout # 页面框架相关组件 (导航栏、侧边栏...)
+│ └─ widgets # 业务相关的小部件
+│
+├─ layouts # 页面整体布局 (BasicLayout.vue, BlankLayout.vue...)
+│
+├─ views # 页面级组件 (对应路由)
+│ ├─ Home
+│ ├─ Login
+│ └─ Dashboard
+│
+├─ router # 路由配置
+│ └─ index.ts
+│
+├─ stores # 状态管理 (Pinia / Vuex)
+│ └─ user.ts
+│
+├─ utils # 工具函数 (request.ts, format.ts...)
+│
+├─ api # 接口请求 (user.ts, product.ts...)
+│
+├─ models # 类型声明 (TS 接口 / class)
+│
+├─ hooks # 自定义 hooks (useAuth.ts, useDarkMode.ts...)
+│
+├─ plugins # 插件配置 (element-plus.ts, i18n.ts...)
+│
+├─ directives # 自定义指令 (v-permission.ts...)
+│
+└─ App.vue
+```
\ No newline at end of file
diff --git a/src/router/index.js b/src/router/index.js
index 8484e89..f1be132 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -1,70 +1,71 @@
import { createRouter, createWebHistory } from 'vue-router'
-import AboutView from '@/views/AboutView.vue'
-import ToolView from '@/views/ToolView.vue'
-import NewsView from '@/views/NewsView.vue'
-import DefaultLayout from '../layouts/DefaultLayout.vue'
-import LoginLayout from '@/layouts/LoginLayout.vue'
-import LoginView from '@/views/LoginView.vue'
-import HomeView from '@/views/HomeView.vue'
import { getToken } from '@/utils/auth.js'
-import TestView from '@/views/TestView.vue'
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
{
path: '/',
- component: DefaultLayout,
+ component: () => import('@/layouts/DefaultLayout.vue'),
children: [
{
path: '',
name: 'Home',
- component: HomeView
+ component: () => import('@/views/HomeView.vue')
},
{
- path: '/about',
+ path: 'about',
name: 'about',
- component: AboutView
+ component: () => import('@/views/AboutView.vue')
},
{
- path: '/tool',
+ path: 'tool',
name: 'tool',
- component: ToolView
+ component: () => import('@/views/ToolView.vue')
},
{
- path: '/news',
+ path: 'news',
name: 'news',
- component: NewsView
+ component: () => import('@/views/NewsView.vue'),
+ meta: { requiresAuth: true }
},
{
- path: '/test',
+ path: 'test',
name: 'test',
- component: TestView
+ component: () => import('@/views/TestView.vue'),
+ meta: { requiresAuth: true }
}
]
},
{
path: '/login',
- component: LoginLayout,
+ component: () => import('@/views/LoginView.vue'),
children: [
{
path: '',
name: 'Login',
- component: LoginView,
- meta: {
- requiresAuth: true
- }
+ component: () => import('@/views/LoginView.vue'),
+ meta: { requiresGuest: true }
}
]
+ },
+ {
+ path: '/:pathMatch(.*)*',
+ name: 'NotFound',
+ component: () => import('@/views/NotFound.vue')
}
]
})
router.beforeEach((to, from, next) => {
+ const token = getToken()
const requiresAuth = to.matched.some((record) => record.meta.requiresAuth)
+ const requiresGuest = to.matched.some((record) => record.meta.requiresAuth)
- if (!requiresAuth && !getToken()) {
+ if (requiresAuth && !token) {
next({ path: '/login' })
+ } else if (requiresGuest && !getToken()) {
+ next({ name: 'Home' })
} else {
console.log('next')
next()
diff --git a/src/views/NotFound.vue b/src/views/NotFound.vue
new file mode 100644
index 0000000..d75be59
--- /dev/null
+++ b/src/views/NotFound.vue
@@ -0,0 +1,7 @@
+
+
+
+ Page is NotFound!!!
+
+
+