Commit c8823752d003988c7a4910c0d29df7f12c128979

Authored by xingyu
1 parent 6d27ba43

perf: loginform code

yudao-ui-admin-vue3/src/config/axios/index.ts
@@ -124,7 +124,15 @@ service.interceptors.response.use( @@ -124,7 +124,15 @@ service.interceptors.response.use(
124 }, 124 },
125 (error: AxiosError) => { 125 (error: AxiosError) => {
126 console.log('err' + error) // for debug 126 console.log('err' + error) // for debug
127 - ElMessage.error(error.message) 127 + let { message } = error
  128 + if (message === 'Network Error') {
  129 + message = '后端接口连接异常'
  130 + } else if (message.includes('timeout')) {
  131 + message = '系统接口请求超时'
  132 + } else if (message.includes('Request failed with status code')) {
  133 + message = '系统接口' + message.substr(message.length - 3) + '异常'
  134 + }
  135 + ElMessage.error(message)
128 return Promise.reject(error) 136 return Promise.reject(error)
129 } 137 }
130 ) 138 )
yudao-ui-admin-vue3/src/views/Login/components/LoginForm.vue
@@ -13,7 +13,14 @@ import { @@ -13,7 +13,14 @@ import {
13 } from 'element-plus' 13 } from 'element-plus'
14 import { reactive, ref, unref, onMounted, computed, watch } from 'vue' 14 import { reactive, ref, unref, onMounted, computed, watch } from 'vue'
15 import * as LoginApi from '@/api/login' 15 import * as LoginApi from '@/api/login'
16 -import { setToken, setTenantId } from '@/utils/auth' 16 +import {
  17 + setToken,
  18 + setTenantId,
  19 + getUsername,
  20 + getRememberMe,
  21 + getPassword,
  22 + getTenantName
  23 +} from '@/utils/auth'
17 import { useUserStoreWithOut } from '@/store/modules/user' 24 import { useUserStoreWithOut } from '@/store/modules/user'
18 import { useCache } from '@/hooks/web/useCache' 25 import { useCache } from '@/hooks/web/useCache'
19 import { usePermissionStore } from '@/store/modules/permission' 26 import { usePermissionStore } from '@/store/modules/permission'
@@ -40,7 +47,6 @@ const iconHouse = useIcon({ icon: 'ep:house' }) @@ -40,7 +47,6 @@ const iconHouse = useIcon({ icon: 'ep:house' })
40 const iconAvatar = useIcon({ icon: 'ep:avatar' }) 47 const iconAvatar = useIcon({ icon: 'ep:avatar' })
41 const iconLock = useIcon({ icon: 'ep:lock' }) 48 const iconLock = useIcon({ icon: 'ep:lock' })
42 const iconCircleCheck = useIcon({ icon: 'ep:circle-check' }) 49 const iconCircleCheck = useIcon({ icon: 'ep:circle-check' })
43 -const remember = ref(false)  
44 const LoginRules = { 50 const LoginRules = {
45 tenantName: [required], 51 tenantName: [required],
46 username: [required], 52 username: [required],
@@ -61,6 +67,7 @@ const loginData = reactive({ @@ -61,6 +67,7 @@ const loginData = reactive({
61 tenantName: '芋道源码', 67 tenantName: '芋道源码',
62 username: 'admin', 68 username: 'admin',
63 password: 'admin123', 69 password: 'admin123',
  70 + rememberMe: false,
64 code: '', 71 code: '',
65 uuid: '' 72 uuid: ''
66 } 73 }
@@ -77,6 +84,20 @@ const getTenantId = async () => { @@ -77,6 +84,20 @@ const getTenantId = async () => {
77 const res = await LoginApi.getTenantIdByNameApi(loginData.loginForm.tenantName) 84 const res = await LoginApi.getTenantIdByNameApi(loginData.loginForm.tenantName)
78 setTenantId(res) 85 setTenantId(res)
79 } 86 }
  87 +// 记住我
  88 +const getCookie = () => {
  89 + const username = getUsername()
  90 + const password = getPassword()
  91 + const rememberMe = getRememberMe()
  92 + const tenantName = getTenantName()
  93 + loginData.loginForm = {
  94 + ...loginData.loginForm,
  95 + username: username ? username : loginData.loginForm.username,
  96 + password: password ? password : loginData.loginForm.password,
  97 + rememberMe: rememberMe ? getRememberMe() : false,
  98 + tenantName: tenantName ? tenantName : loginData.loginForm.tenantName
  99 + }
  100 +}
80 // 登录 101 // 登录
81 const handleLogin = async () => { 102 const handleLogin = async () => {
82 await getTenantId() 103 await getTenantId()
@@ -103,7 +124,7 @@ const getRoutes = async () => { @@ -103,7 +124,7 @@ const getRoutes = async () => {
103 // 后端过滤菜单 124 // 后端过滤菜单
104 const res = await LoginApi.getAsyncRoutesApi() 125 const res = await LoginApi.getAsyncRoutesApi()
105 wsCache.set('roleRouters', res) 126 wsCache.set('roleRouters', res)
106 - await permissionStore.generateRoutes(res).catch(() => {}) 127 + await permissionStore.generateRoutes(res)
107 permissionStore.getAddRouters.forEach((route) => { 128 permissionStore.getAddRouters.forEach((route) => {
108 addRoute(route as RouteRecordRaw) // 动态添加可访问路由表 129 addRoute(route as RouteRecordRaw) // 动态添加可访问路由表
109 }) 130 })
@@ -120,8 +141,9 @@ watch( @@ -120,8 +141,9 @@ watch(
120 immediate: true 141 immediate: true
121 } 142 }
122 ) 143 )
123 -onMounted(() => {  
124 - getCode() 144 +onMounted(async () => {
  145 + await getCode()
  146 + getCookie()
125 }) 147 })
126 </script> 148 </script>
127 <template> 149 <template>
@@ -165,7 +187,7 @@ onMounted(() =&gt; { @@ -165,7 +187,7 @@ onMounted(() =&gt; {
165 <el-input 187 <el-input
166 v-model="loginData.loginForm.password" 188 v-model="loginData.loginForm.password"
167 type="password" 189 type="password"
168 - :placeholder="t('login.password')" 190 + :placeholder="t('login.passwordPlaceholder')"
169 show-password 191 show-password
170 @keyup.enter="handleLogin" 192 @keyup.enter="handleLogin"
171 :prefix-icon="iconLock" 193 :prefix-icon="iconLock"
@@ -178,7 +200,7 @@ onMounted(() =&gt; { @@ -178,7 +200,7 @@ onMounted(() =&gt; {
178 <el-col :span="14"> 200 <el-col :span="14">
179 <el-input 201 <el-input
180 v-model="loginData.loginForm.code" 202 v-model="loginData.loginForm.code"
181 - :placeholder="t('login.code')" 203 + :placeholder="t('login.codePlaceholder')"
182 @keyup.enter="handleLogin" 204 @keyup.enter="handleLogin"
183 :prefix-icon="iconCircleCheck" 205 :prefix-icon="iconCircleCheck"
184 style="width: 90%" 206 style="width: 90%"
@@ -199,7 +221,9 @@ onMounted(() =&gt; { @@ -199,7 +221,9 @@ onMounted(() =&gt; {
199 <el-form-item> 221 <el-form-item>
200 <el-row justify="space-between" style="width: 100%"> 222 <el-row justify="space-between" style="width: 100%">
201 <el-col :span="6"> 223 <el-col :span="6">
202 - <el-checkbox v-model="remember">{{ t('login.remember') }}</el-checkbox> 224 + <el-checkbox v-model="loginData.loginForm.rememberMe">
  225 + {{ t('login.remember') }}
  226 + </el-checkbox>
203 </el-col> 227 </el-col>
204 <el-col :span="12" :offset="6"> 228 <el-col :span="12" :offset="6">
205 <el-link type="primary" style="float: right">{{ t('login.forgetPassword') }}</el-link> 229 <el-link type="primary" style="float: right">{{ t('login.forgetPassword') }}</el-link>
@@ -254,7 +278,7 @@ onMounted(() =&gt; { @@ -254,7 +278,7 @@ onMounted(() =&gt; {
254 class="cursor-pointer anticon" 278 class="cursor-pointer anticon"
255 /> 279 />
256 <Icon 280 <Icon
257 - icon="ant-design:weibo-circle-filled" 281 + icon="ant-design:dingtalk-circle-filled"
258 :size="iconSize" 282 :size="iconSize"
259 :color="iconColor" 283 :color="iconColor"
260 class="cursor-pointer anticon" 284 class="cursor-pointer anticon"
yudao-ui-admin-vue3/src/views/Login/components/MobileForm.vue
@@ -67,27 +67,21 @@ const redirect = ref&lt;string&gt;(&#39;&#39;) @@ -67,27 +67,21 @@ const redirect = ref&lt;string&gt;(&#39;&#39;)
67 const getSmsCode = async () => { 67 const getSmsCode = async () => {
68 await getTenantId() 68 await getTenantId()
69 smsVO.smsCode.mobile = loginData.loginForm.mobileNumber 69 smsVO.smsCode.mobile = loginData.loginForm.mobileNumber
70 - console.log('getSmsCode begin:', smsVO.smsCode)  
71 - await sendSmsCodeApi(smsVO.smsCode)  
72 - .then(async (res) => {  
73 - // 提示验证码发送成功  
74 - ElMessage({  
75 - type: 'success',  
76 - message: t('login.SmsSendMsg')  
77 - })  
78 - console.log('res', res)  
79 - // 设置倒计时  
80 - mobileCodeTimer.value = 60  
81 - let msgTimer = setInterval(() => {  
82 - mobileCodeTimer.value = mobileCodeTimer.value - 1  
83 - if (mobileCodeTimer.value <= 0) {  
84 - clearInterval(msgTimer)  
85 - }  
86 - }, 1000)  
87 - })  
88 - .catch(() => {  
89 - console.log('error') 70 + await sendSmsCodeApi(smsVO.smsCode).then(async () => {
  71 + // 提示验证码发送成功
  72 + ElMessage({
  73 + type: 'success',
  74 + message: t('login.SmsSendMsg')
90 }) 75 })
  76 + // 设置倒计时
  77 + mobileCodeTimer.value = 60
  78 + let msgTimer = setInterval(() => {
  79 + mobileCodeTimer.value = mobileCodeTimer.value - 1
  80 + if (mobileCodeTimer.value <= 0) {
  81 + clearInterval(msgTimer)
  82 + }
  83 + }, 1000)
  84 + })
91 } 85 }
92 watch( 86 watch(
93 () => currentRoute.value, 87 () => currentRoute.value,
@@ -126,7 +120,6 @@ const signIn = async () =&gt; { @@ -126,7 +120,6 @@ const signIn = async () =&gt; {
126 // 获取路由 120 // 获取路由
127 const getRoutes = async () => { 121 const getRoutes = async () => {
128 // 后端过滤菜单 122 // 后端过滤菜单
129 - // TODO @jinz:这块 getRoutes 的代码,是不是可以统一到 store 里,类似 ruoyi-vue 的做法,可能要找作者沟通下  
130 const routers = await getAsyncRoutesApi() 123 const routers = await getAsyncRoutesApi()
131 wsCache.set('roleRouters', routers) 124 wsCache.set('roleRouters', routers)
132 await permissionStore.generateRoutes(routers).catch(() => {}) 125 await permissionStore.generateRoutes(routers).catch(() => {})