From 06679d50e2eeded67b39f138117311273a09cfa3 Mon Sep 17 00:00:00 2001 From: anonymous Date: Fri, 27 Dec 2024 14:37:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=B7=AF=E7=94=B1=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 1 - index.html | 2 +- pages.config.ts | 2 +- src/App.vue | 63 +++++++++++++++++++++++++++++++++--- src/interceptors/index.ts | 2 +- src/interceptors/route.ts | 63 ++++++++++++++++++++++++++++++++---- src/main.ts | 10 ++++-- src/pages-sub/demo/index.vue | 1 - src/pages.json | 20 ++++++------ src/pages/login/index.vue | 21 +++++++++++- src/pages/my/index.vue | 12 +++++++ src/store/user.ts | 6 +--- src/types/uni-pages.d.ts | 4 +-- src/utils/index.ts | 42 ++++++++++++++++++++---- tsconfig.json | 2 +- 15 files changed, 208 insertions(+), 43 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index fec1619..efe2a80 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -44,7 +44,6 @@ "refresherrefresh", "scrolltolower", "tabbar", - "unibest", "uvui", "WechatMiniprogram" ], diff --git a/index.html b/index.html index 2e368d0..b7dfd9f 100644 --- a/index.html +++ b/index.html @@ -14,7 +14,7 @@ '" />', ) - unibest + diff --git a/pages.config.ts b/pages.config.ts index cb0b38e..72ec79c 100644 --- a/pages.config.ts +++ b/pages.config.ts @@ -3,7 +3,7 @@ import { defineUniPages } from '@uni-helper/vite-plugin-uni-pages' export default defineUniPages({ globalStyle: { navigationStyle: 'default', - navigationBarTitleText: 'unibest', + navigationBarTitleText: '', navigationBarBackgroundColor: '#f8f8f8', navigationBarTextStyle: 'black', backgroundColor: '#FFFFFF', diff --git a/src/App.vue b/src/App.vue index a8e315e..7f37b58 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,20 +1,37 @@ diff --git a/src/interceptors/index.ts b/src/interceptors/index.ts index 292d9f8..14c9168 100644 --- a/src/interceptors/index.ts +++ b/src/interceptors/index.ts @@ -1,3 +1,3 @@ -export { routeInterceptor } from './route' +export { routerBeforeEachConfig } from './route' export { requestInterceptor } from './request' export { prototypeInterceptor } from './prototype' diff --git a/src/interceptors/route.ts b/src/interceptors/route.ts index edbe957..f9ee1f0 100644 --- a/src/interceptors/route.ts +++ b/src/interceptors/route.ts @@ -5,10 +5,13 @@ * 我这里应为大部分都可以随便进入,所以使用黑名单 */ import { useUserStore } from '@/store' -import { getNeedLoginPages, needLoginPages as _needLoginPages } from '@/utils' +import { + getNotNeedLoginPages as _getNotNeedLoginPages, + notNeedLoginPages as _notNeedLoginPages, +} from '@/utils' +import type { Router } from 'vue-router' -// TODO Check -const loginRoute = '/pages/login/index' +export const loginRoute = '/pages/login/index' const isLogged = () => { const userStore = useUserStore() @@ -23,14 +26,14 @@ const navigateToInterceptor = { invoke({ url }: { url: string }) { // console.log(url) // /pages/route-interceptor/index?name=feige&age=30 const path = url.split('?')[0] - let needLoginPages: string[] = [] + let notNeedLoginPages: string[] = [] // 为了防止开发时出现BUG,这里每次都获取一下。生产环境可以移到函数外,性能更好 if (isDev) { - needLoginPages = getNeedLoginPages() + notNeedLoginPages = getNotNeedLoginPages() } else { - needLoginPages = _needLoginPages + notNeedLoginPages = _notNeedLoginPages } - const isNeedLogin = needLoginPages.includes(path) + const isNeedLogin = notNeedLoginPages.includes(path) if (!isNeedLogin) { return true } @@ -51,3 +54,49 @@ export const routeInterceptor = { uni.addInterceptor('redirectTo', navigateToInterceptor) }, } + +export const getNotNeedLoginPages = () => { + let notNeedLoginPages: string[] = [] + if (isDev) { + notNeedLoginPages = _getNotNeedLoginPages() + } else { + notNeedLoginPages = _notNeedLoginPages + } + return notNeedLoginPages +} + +export const checkLoginUrl = (url: string) => { + const path = url.split('?')[0] + const isNotNeedLogin = getNotNeedLoginPages().includes(path) + return isNotNeedLogin +} + +export const checkWithRedirectLogin = (url: string) => { + const isNotNeedLogin = checkLoginUrl(url) + if (!isNotNeedLogin) { + return !isLogged() + } + return false +} + +export const checkNotFound = (url: string) => { + const isNotNeedLogin = checkLoginUrl(url) + if (!isNotNeedLogin) { + return !isLogged() + } + return false +} + +export const routerBeforeEachConfig = (router: Router) => { + router.beforeEach((to, from, next) => { + if (checkWithRedirectLogin(to.path)) { + return next({ + path: loginRoute, + query: { + redirect: to.fullPath, + }, + }) + } + return next() + }) +} diff --git a/src/main.ts b/src/main.ts index 8e4466e..1f21bb8 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,16 +1,22 @@ import { createSSRApp } from 'vue' import App from './App.vue' import store from './store' -import { routeInterceptor, requestInterceptor, prototypeInterceptor } from './interceptors' +import { requestInterceptor, prototypeInterceptor, routerBeforeEachConfig } from './interceptors' import 'virtual:uno.css' import '@/style/index.scss' export function createApp() { const app = createSSRApp(App) + app.use(store) - app.use(routeInterceptor) + // app.use(routeInterceptor) app.use(requestInterceptor) app.use(prototypeInterceptor) + + setTimeout(() => { + routerBeforeEachConfig((app as any).router) + }, 0) + return { app, } diff --git a/src/pages-sub/demo/index.vue b/src/pages-sub/demo/index.vue index 9af4a02..6126ddc 100644 --- a/src/pages-sub/demo/index.vue +++ b/src/pages-sub/demo/index.vue @@ -1,6 +1,5 @@ { - needLogin: true, style: { navigationBarTitleText: '分包页面 标题' }, } diff --git a/src/pages.json b/src/pages.json index 5c47a15..8dff773 100644 --- a/src/pages.json +++ b/src/pages.json @@ -1,7 +1,7 @@ { "globalStyle": { "navigationStyle": "default", - "navigationBarTitleText": "unibest", + "navigationBarTitleText": "", "navigationBarBackgroundColor": "#f8f8f8", "navigationBarTextStyle": "black", "backgroundColor": "#FFFFFF" @@ -50,14 +50,6 @@ ] }, "pages": [ - { - "path": "pages/login/index", - "type": "home", - "style": { - "navigationBarTitleText": "登录", - "navigationStyle": "custom" - } - }, { "path": "pages/invest/index", "type": "home", @@ -82,6 +74,15 @@ "navigationBarTitleText": "房屋" } }, + { + "path": "pages/login/index", + "type": "page", + "style": { + "navigationBarTitleText": "登录", + "navigationStyle": "custom" + }, + "notNeedLogin": false + }, { "path": "pages/my/index", "type": "page", @@ -98,7 +99,6 @@ { "path": "demo/index", "type": "page", - "needLogin": true, "style": { "navigationBarTitleText": "分包页面 标题" } diff --git a/src/pages/login/index.vue b/src/pages/login/index.vue index 4381870..81635af 100644 --- a/src/pages/login/index.vue +++ b/src/pages/login/index.vue @@ -1,9 +1,10 @@ - + { style: { navigationBarTitleText: '登录', navigationStyle: 'custom', }, + notNeedLogin: false, }