feat(login): 删除还没有账号? 注册
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 2m19s

This commit is contained in:
sexygoat
2026-01-22 18:04:32 +08:00
parent 13bdee2899
commit 339abca4c0
9 changed files with 39 additions and 53 deletions

View File

@@ -1,10 +1,6 @@
<template>
<div>
<el-tooltip
effect="dark"
:content="`按下 ^ 键也能回到顶部哦 ${EmojiText[200]}`"
placement="left-start"
>
<el-tooltip effect="dark" content="按下 ^ 键也能回到顶部哦" placement="left-start">
<div class="back-to-top" v-show="showButton" @click="scrollToTop">
<div class="back-to-top-btn">
<i class="iconfont-sys">&#xe864;</i>
@@ -17,7 +13,6 @@
<script setup lang="ts">
import { useCommon } from '@/composables/useCommon'
import EmojiText from '@/utils/ui/emojo'
import { ref, watch } from 'vue'
const { scrollToTop } = useCommon()

View File

@@ -23,7 +23,6 @@
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
import { useUserStore } from '@/store/modules/user'
import { ElMessage } from 'element-plus'
import EmojiText from '@/utils/ui/emojo'
import { IDomEditor } from '@wangeditor/editor'
const modelValue = defineModel<string>({ required: true })
@@ -64,12 +63,12 @@
headers: { Authorization: accessToken },
// 单个文件上传成功之后
onSuccess() {
ElMessage.success(`图片上传成功 ${EmojiText[200]}`)
ElMessage.success('图片上传成功')
},
// 上传错误,或者触发 timeout 超时
onError(file: File, err: any, res: any) {
console.log(`上传出错`, err, res)
ElMessage.error(`图片上传失败 ${EmojiText[500]}`)
ElMessage.error('图片上传失败')
}
// 注意:返回格式需要按照指定格式返回,才能显示图片
// 上传成功的返回格式:

View File

@@ -12,16 +12,8 @@ import { HOME_PAGE } from '@/router/routesAlias'
import AppConfig from '@/config'
import { AuthService } from '@/api/authApi'
import { ApiStatus } from '@/utils/http/status'
import {
MOCK_ACCOUNTS,
mockLogin,
mockGetUserInfo,
type MockAccount
} from '@/mock/auth'
import {
saveCredentials,
getRememberedCredentials
} from '@/utils/auth/rememberPassword'
import { MOCK_ACCOUNTS, mockLogin, mockGetUserInfo, type MockAccount } from '@/mock/auth'
import { saveCredentials, getRememberedCredentials } from '@/utils/auth/rememberPassword'
import { usernameRules, passwordRules } from '@/utils/auth/loginValidation'
import { getRedirectPath } from '@/router/guards/permission'
@@ -84,9 +76,7 @@ export function useLogin() {
// 如果使用 Mock尝试匹配 Mock 账号
if (USE_MOCK) {
const matchedAccount = MOCK_ACCOUNTS.find(
(acc) => acc.username === remembered.username
)
const matchedAccount = MOCK_ACCOUNTS.find((acc) => acc.username === remembered.username)
if (matchedAccount) {
formData.account = matchedAccount.key
}
@@ -142,7 +132,10 @@ export function useLogin() {
}
} catch (error: any) {
console.error('登录失败:', error)
ElMessage.error(error.message || t('login.error.loginFailed'))
// 从后端响应中提取错误消息
const errorMessage =
error.response?.data?.msg || error.message || t('login.error.loginFailed')
ElMessage.error(errorMessage)
} finally {
loading.value = false
}

View File

@@ -1,7 +1,6 @@
import axios, { InternalAxiosRequestConfig, AxiosRequestConfig, AxiosResponse } from 'axios'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/store/modules/user'
import EmojiText from '../ui/emojo'
import { ApiStatus } from './status'
import type { RequestOptions, ErrorMessageMode } from '@/types/api'
@@ -46,7 +45,7 @@ axiosInstance.interceptors.request.use(
return request // 返回修改后的配置
},
(error) => {
ElMessage.error(`服务器异常! ${EmojiText[500]}`) // 显示错误消息
ElMessage.error('服务器异常!') // 显示错误消息
return Promise.reject(error) // 返回拒绝的 Promise
}
)
@@ -116,7 +115,8 @@ axiosInstance.interceptors.response.use(
// 更新请求头
originalRequest.headers['Authorization'] = `Bearer ${data.data.access_token}`
axiosInstance.defaults.headers.common['Authorization'] = `Bearer ${data.data.access_token}`
axiosInstance.defaults.headers.common['Authorization'] =
`Bearer ${data.data.access_token}`
// 处理队列中的请求
processQueue(null, data.data.access_token)
@@ -190,10 +190,8 @@ function processRequestConfig(config: ExtendedRequestConfig): AxiosRequestConfig
function handleErrorMessage(error: any, mode: ErrorMessageMode = 'message') {
if (mode === 'none') return
const errorMessage = error.response?.data.msg
const message = errorMessage
? `${errorMessage} ${EmojiText[500]}`
: `请求超时或服务器异常!${EmojiText[500]}`
const errorMessage = error.response?.data?.msg
const message = errorMessage || '请求超时或服务器异常!'
if (mode === 'modal') {
// TODO: 可以使用 ElMessageBox 显示模态框
@@ -224,9 +222,11 @@ async function request<T = any>(config: ExtendedRequestConfig): Promise<T> {
return res.data
} catch (e) {
if (axios.isAxiosError(e)) {
// 处理错误消息
const errorMode = config.requestOptions?.errorMessageMode || 'message'
handleErrorMessage(e, errorMode)
// 只有明确指定了错误消息模式才显示错误
const errorMode = config.requestOptions?.errorMessageMode
if (errorMode && errorMode !== 'none') {
handleErrorMessage(e, errorMode)
}
}
return Promise.reject(e)
}
@@ -253,7 +253,7 @@ const api = {
// 退出登录
const logOut = () => {
ElMessage.error(`登录已过期,请重新登录 ${EmojiText[500]}`)
ElMessage.error('登录已过期,请重新登录')
setTimeout(() => {
useUserStore().logOut()
}, 1000)

View File

@@ -10,10 +10,10 @@
// macos 用户 按 shift + 6 可以唤出更多表情……
const EmojiText: { [key: string]: string } = {
'0': 'O_O', // 空
'200': '^_^', // 成功
'400': 'T_T', // 错误请求
'500': 'X_X' // 服务器内部错误,无法完成请求
'0': '🤔', // 空 / 未知
'200': '🎉', // 成功
'400': '😞', // 客户端错误
'500': '🤯' // 服务器炸了
}
// const EmojiIcon = ['🟢', '🔴', '🟡 ', '🚀', '✨', '💡', '🛠️', '🔥', '🎉', '🌟', '🌈']

View File

@@ -70,7 +70,7 @@
</div>
<div style="margin-top: 16vh" v-if="showEmpty">
<ElEmpty :description="`未找到相关数据 ${EmojiText[0]}`" />
<ElEmpty description="未找到相关数据" />
</div>
<div style="display: flex; justify-content: center; margin-top: 20px">
@@ -96,7 +96,6 @@
import { router } from '@/router'
import { useDateFormat } from '@vueuse/core'
import { Search } from '@element-plus/icons-vue'
import EmojiText from '@/utils/ui/emojo'
import { ArticleList } from '@/mock/temp/articleList'
import { useCommon } from '@/composables/useCommon'
import { RoutesAlias } from '@/router/routesAlias'

View File

@@ -78,7 +78,6 @@
import { ApiStatus } from '@/utils/http/status'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/store/modules/user'
import EmojiText from '@/utils/ui/emojo'
import { PageModeEnum } from '@/enums/formEnum'
import axios from 'axios'
import { useCommon } from '@/composables/useCommon'
@@ -250,7 +249,7 @@
const res = await ArticleService.addArticle(params)
if (res.code === ApiStatus.success) {
ElMessage.success(`发布成功 ${EmojiText[200]}`)
ElMessage.success('发布成功')
goBack()
}
} catch (err) {
@@ -269,7 +268,7 @@
const res = await ArticleService.editArticle(articleId, params)
if (res.code === ApiStatus.success) {
ElMessage.success(`修改成功 ${EmojiText[200]}`)
ElMessage.success('修改成功')
goBack()
}
} catch (err) {
@@ -283,11 +282,11 @@
const onSuccess = (response: any) => {
cover.value = response.data.url
ElMessage.success(`图片上传成功 ${EmojiText[200]}`)
ElMessage.success('图片上传成功')
}
const onError = () => {
ElMessage.error(`图片上传失败 ${EmojiText[500]}`)
ElMessage.error('图片上传失败')
}
// 返回上一页

View File

@@ -106,13 +106,6 @@
{{ $t('login.btnText') }}
</ElButton>
</div>
<div class="footer">
<p>
{{ $t('login.noAccount') }}
<RouterLink :to="RoutesAlias.Register">{{ $t('login.register') }}</RouterLink>
</p>
</div>
</ElForm>
</div>
</div>
@@ -134,7 +127,7 @@
defineOptions({ name: 'Login' })
const { t, locale } = useI18n()
const { locale } = useI18n()
const settingStore = useSettingStore()
const userStore = useUserStore()
const { isDark, systemThemeType } = storeToRefs(settingStore)