From 92799887d7915362825d4740aa27eafb1c88c141 Mon Sep 17 00:00:00 2001 From: Litrix Date: Thu, 18 Apr 2024 17:57:35 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20=E6=B7=BB=E5=8A=A0=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components.d.ts | 5 ++ src/App.vue | 76 ++++++++++++++++------ src/api/index.ts | 2 +- src/assets/avatar1.jpg | Bin 0 -> 12219 bytes src/assets/icons/Validate.svg | 5 ++ src/components/VerifyInput.vue | 115 +++++++++++++++++++++++++++++++++ src/router/index.ts | 34 ++-------- src/schemas/index.ts | 13 +++- 8 files changed, 198 insertions(+), 52 deletions(-) create mode 100644 src/assets/avatar1.jpg create mode 100644 src/assets/icons/Validate.svg create mode 100644 src/components/VerifyInput.vue diff --git a/components.d.ts b/components.d.ts index e9e012a..dcb45b9 100644 --- a/components.d.ts +++ b/components.d.ts @@ -19,14 +19,19 @@ declare module 'vue' { ElFormItem: typeof import('element-plus/es')['ElFormItem'] ElHeader: typeof import('element-plus/es')['ElHeader'] ElIcon: typeof import('element-plus/es')['ElIcon'] + ElImage: typeof import('element-plus/es')['ElImage'] ElInput: typeof import('element-plus/es')['ElInput'] + ElPopover: typeof import('element-plus/es')['ElPopover'] ElTabPane: typeof import('element-plus/es')['ElTabPane'] ElTabs: typeof import('element-plus/es')['ElTabs'] Game2048: typeof import('./src/components/Game2048.vue')['default'] IconCsLock: typeof import('~icons/cs/lock')['default'] + IconCsValidate: typeof import('~icons/cs/validate')['default'] IconEpLoading: typeof import('~icons/ep/loading')['default'] IconEpUserFilled: typeof import('~icons/ep/user-filled')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] + VerifyInput: typeof import('./src/components/VerifyInput.vue')['default'] + VerifyInputImage: typeof import('./src/components/VerifyInputImage.vue')['default'] } } diff --git a/src/App.vue b/src/App.vue index 314a4ad..f979ce3 100644 --- a/src/App.vue +++ b/src/App.vue @@ -60,16 +60,7 @@ - - - 登录 - - + @@ -136,6 +127,7 @@ display: flex; align-items: center; } + .title-container { font-size: 1.2em; } @@ -145,15 +137,22 @@ diff --git a/src/api/index.ts b/src/api/index.ts index 0045460..632ba5d 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -1,7 +1,7 @@ import axios from 'axios'; import { useUserStore } from '@/stores'; const axiosInstance = axios.create({ - baseURL: 'http://wzpmc.cn:18080/' + baseURL: 'http://pc.wzpmc.cn:18080/' }); // 自动添加token到请求中. axiosInstance.interceptors.request.use((config) => { diff --git a/src/assets/avatar1.jpg b/src/assets/avatar1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c00888be290f037b531927fd46514f137fa649f GIT binary patch literal 12219 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
nMfgA}?ED`GL0Z(c8_vx>ypJq=vx%tM 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 + + diff --git a/src/components/VerifyInput.vue b/src/components/VerifyInput.vue new file mode 100644 index 0000000..1c0c9c3 --- /dev/null +++ b/src/components/VerifyInput.vue @@ -0,0 +1,115 @@ + + + diff --git a/src/router/index.ts b/src/router/index.ts index 38827fc..ad868e6 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,10 +1,6 @@ -import axiosInstance from '@/api'; -import { userInfoResponseSchema, type Route } from '@/schemas'; +import { type Route } from '@/schemas'; import { useUserStore } from '@/stores'; -import { errorMessage, timeout } from '@/utils'; -import { AxiosError } from 'axios'; -import { ElMessage } from 'element-plus'; -import { type Component } from 'vue'; +import { watch, type Component } from 'vue'; import { createRouter, createWebHistory, type RouteRecordRaw } from 'vue-router'; const routes: RouteRecordRaw[] = [ { @@ -39,7 +35,7 @@ function _getAvailableRoutes(routeResponses: Route[], root: boolean, pathList: s } return res; } -function getAvailableRoutes(routeResponse: Route[]) { +export function getAvailableRoutes(routeResponse: Route[]) { _getAvailableRoutes(routeResponse, true, []); } router.beforeEach(async (to) => { @@ -48,29 +44,7 @@ router.beforeEach(async (to) => { // await timeout(1000); console.log(userStore.initialized); if (!userStore.initialized) { - try { - const userInfoResponse = userInfoResponseSchema.parse( - (await axiosInstance.get('/api/user/info')).data - ); - console.log(userInfoResponse); - if (userInfoResponse.type === 'error') { - ElMessage.error( - errorMessage('获取用户信息失败', userInfoResponse.code, userInfoResponse.msg) - ); - return false; - } - // 判断是否已登录. - if (userStore.token !== null) { - userStore.updateUserInfo(userInfoResponse); - } - getAvailableRoutes(userInfoResponse.data.auth.permissions[0].routers); - } catch (e) { - if (e instanceof AxiosError) { - ElMessage.error(errorMessage('获取用户信息失败', e.code, e.message)); - } - } finally { - userStore.initialized = true; - } + await new Promise((resolve) => watch(() => userStore.initialized, resolve)); } if (userStore.addedRouteSet.has(to.fullPath) || to.fullPath === '/404') { return true; diff --git a/src/schemas/index.ts b/src/schemas/index.ts index 9a5df64..6b2fe6b 100644 --- a/src/schemas/index.ts +++ b/src/schemas/index.ts @@ -44,9 +44,20 @@ const routeResponsesSchema: z.ZodSchema = z.lazy(() => ); export const userInfoResponseSchema = createResponseSchema( idAndNameSchema.extend({ - avatar: z.string(), + avatar: z.nullable(z.string()), auth: idAndNameSchema.extend({ permissions: idAndNameSchema.extend({ routers: routeResponsesSchema }).array() }) }) ); +export const verifyResponseSchema = createResponseSchema( + z + .object({ + img: z.string(), + key: z.string() + }) + .transform((raw) => { + raw.img = `data:image/png;base64,${raw.img}`; + return raw; + }) +);