From 8633aff6274c192f09aa884d9d0df68d8ac611ec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=B4=AB=E6=98=9F?= <1315228475@qq.com>
Date: Thu, 24 Oct 2024 10:11:37 +0800
Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E6=9B=B4=E5=A4=9A=E7=99=BB?=
=?UTF-8?q?=E5=BD=95=E6=96=B9=E5=BC=8F=E6=96=B0=E5=A2=9E=E6=9D=A1=E4=BB=B6?=
=?UTF-8?q?=E7=BC=96=E8=AF=91=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/pages/login/components/LoginForm.vue | 11 ++++++++++-
src/pages/login/index.vue | 2 ++
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/src/pages/login/components/LoginForm.vue b/src/pages/login/components/LoginForm.vue
index 4c39df8..5913035 100644
--- a/src/pages/login/components/LoginForm.vue
+++ b/src/pages/login/components/LoginForm.vue
@@ -40,6 +40,8 @@
登录
+
+
本机号登录
+
@@ -129,7 +132,13 @@
console.log(e)
})
} else {
- uni.navigateTo({ url: '/pages/login/phone-index' })
+ uni.login({
+ provider: 'univerify',
+ univerifyStyle: {
+ fullScreen: true
+ }
+ })
+ // uni.navigateTo({ url: '/pages/login/phoneIndex' })
}
}
diff --git a/src/pages/login/index.vue b/src/pages/login/index.vue
index 13cfb0b..c61dced 100644
--- a/src/pages/login/index.vue
+++ b/src/pages/login/index.vue
@@ -26,8 +26,10 @@
+
+
--
Gitee
From 29e50f254f74a95cc4b198be67a7fc41a2d25e0d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=B4=AB=E6=98=9F?= <1315228475@qq.com>
Date: Thu, 24 Oct 2024 17:17:40 +0800
Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=E7=99=BB?=
=?UTF-8?q?=E5=BD=95=E7=9A=84TODO?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/interceptors/route.ts | 4 +-
src/pages.json | 6 ---
src/pages/login/components/Banner.vue | 20 +++----
src/pages/login/components/LoginForm.vue | 63 +++++++++--------------
src/pages/login/components/PhoneLogin.vue | 26 +++++-----
src/pages/login/registerCode.vue | 39 +++++++-------
src/store/user.ts | 33 +++++++++---
src/types/uni-pages.d.ts | 1 +
src/utils/index.ts | 19 ++++---
9 files changed, 108 insertions(+), 103 deletions(-)
diff --git a/src/interceptors/route.ts b/src/interceptors/route.ts
index 252855b..d95333e 100644
--- a/src/interceptors/route.ts
+++ b/src/interceptors/route.ts
@@ -83,7 +83,7 @@ const navigateToInterceptor = {
uni.navigateTo({ url: '/pages/login/index' })
return option
}
- },
+ }
}
export const routeInterceptor = {
@@ -91,5 +91,5 @@ export const routeInterceptor = {
uni.addInterceptor('navigateTo', navigateToInterceptor)
uni.addInterceptor('reLaunch', navigateToInterceptor)
uni.addInterceptor('redirectTo', navigateToInterceptor)
- },
+ }
}
diff --git a/src/pages.json b/src/pages.json
index 9e6ba8b..6551b11 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -53,12 +53,6 @@
"text": "我的",
"icon": "i-ic-baseline-person",
"iconType": "unocss"
- },
- {
- "pagePath": "pages/person-center/index",
- "text": "我的信息",
- "icon": "i-ic-baseline-person",
- "iconType": "unocss"
}
]
},
diff --git a/src/pages/login/components/Banner.vue b/src/pages/login/components/Banner.vue
index d2c0569..fe70229 100644
--- a/src/pages/login/components/Banner.vue
+++ b/src/pages/login/components/Banner.vue
@@ -60,16 +60,16 @@
}) // 当前租户
/** 获取租户列表 */
- // TODO @xiaohong:使用 async 改成同步的,减少 callback 哈
- function getTenantList() {
- loading.value = true
- getTenants()
- .then((res: []) => {
- tenantList.value = res
- })
- .finally(() => {
- loading.value = false
- })
+ async function getTenantList() {
+ try {
+ loading.value = true
+ const res = (await getTenants()) as []
+ tenantList.value = res
+ } catch (error) {
+ console.log(error)
+ } finally {
+ loading.value = false
+ }
}
/** 选择租户信息 */
diff --git a/src/pages/login/components/LoginForm.vue b/src/pages/login/components/LoginForm.vue
index 21202a8..76f41c9 100644
--- a/src/pages/login/components/LoginForm.vue
+++ b/src/pages/login/components/LoginForm.vue
@@ -63,7 +63,7 @@
import { useToast } from 'wot-design-uni'
import { login } from '@/service/login/LoginAPI'
import { useUserStore } from '@/store'
- import * as authUtil from '@/utils/auth'
+ import { currRoute } from '@/utils'
const props = defineProps({
tenantId: {
@@ -95,7 +95,7 @@
})
/** 执行登录 */
- const handleLogin = (type: string) => {
+ const handleLogin = async (type: string) => {
if (!props.agree) {
toast.warning('请阅读并同意《用户协议》和《隐私政策》')
return
@@ -104,44 +104,31 @@
toast.warning('请先选择租户!')
return
}
- // TODO @xiaohong:建议这种 if (type == 'userinfo') 这种,符合条件,处理完,就 return。就是常说的 if return 原则
- // TODO @xiaohong:改成 await 形式哈;这样 callback 层级浅一点
+ const { afterLogin } = useUserStore()
if (type === 'userinfo') {
- loginForm.value
- .validate()
- .then(async ({ valid, errors }) => {
- if (valid) {
- try {
- toast.loading('登录中...')
- // todo 校验form数据
- const res = await login(loginData.loginForm)
- // 设置token
- authUtil.setToken(res)
- // 获取用户信息,保存到 store
- const userStore = useUserStore()
- await userStore.setUserInfoAction()
- toast.close()
- // 暂时先跳到首页
- // TODO @xiaohong:可以研究下,做个登录的 redirect_uri 机制哇?
- uni.switchTab({
- url: '/pages/work/index'
- })
- } catch (error) {
- toast.close()
- }
- }
- })
- .catch((e) => {
- console.log(e)
- })
- } else {
- uni.login({
- provider: 'univerify',
- univerifyStyle: {
- fullScreen: true
+ try {
+ // 校验表单
+ const { valid } = await loginForm.value.validate()
+ if (valid) {
+ toast.loading('登录中...')
+ // 调用登录接口
+ const data = ((await login(loginData.loginForm)) as Recordable)?.data
+ // 登录成功后的回调
+ afterLogin(data)
}
- })
- // uni.navigateTo({ url: '/pages/login/phoneIndex' })
+ } catch (error) {
+ console.log(error)
+ } finally {
+ toast.close()
+ }
+ return
}
+ uni.login({
+ provider: 'univerify',
+ univerifyStyle: {
+ fullScreen: true
+ }
+ })
+ // uni.navigateTo({ url: '/pages/login/phoneIndex' })
}
diff --git a/src/pages/login/components/PhoneLogin.vue b/src/pages/login/components/PhoneLogin.vue
index 6b35929..4533892 100644
--- a/src/pages/login/components/PhoneLogin.vue
+++ b/src/pages/login/components/PhoneLogin.vue
@@ -66,7 +66,7 @@
})
/** 获取验证码 */
- function getCode() {
+ async function getCode() {
if (!props.agree) {
toast.warning('请阅读并同意《用户协议》和《隐私政策》')
return
@@ -76,21 +76,19 @@
return
}
- // TODO @xiaohong:可以 async 改成同步的,减少 callback 哈
- loginForm.value.validate().then(({ valid, errors }) => {
+ try {
+ const { valid } = await loginForm.value.validate()
if (valid) {
toast.loading('获取验证码......')
- getCodeApi(loginData.loginForm)
- .then((code) => {
- console.log(code)
- uni.navigateTo({
- url: `/pages/login/registerCode?phoneNo=${loginData.loginForm.phoneNo}&code=${code}`
- })
- })
- .finally(() => {
- toast.close()
- })
+ const code = await getCodeApi(loginData.loginForm)
+ uni.navigateTo({
+ url: `/pages/login/registerCode?phoneNo=${loginData.loginForm.phoneNo}&code=${code}`
+ })
}
- })
+ } catch (error) {
+ console.log(error)
+ } finally {
+ toast.close()
+ }
}
diff --git a/src/pages/login/registerCode.vue b/src/pages/login/registerCode.vue
index 7a58b41..d89ab0c 100644
--- a/src/pages/login/registerCode.vue
+++ b/src/pages/login/registerCode.vue
@@ -11,8 +11,7 @@
验证手机号
请输入发送至
-
- {{ phoneNo.replace(/^(\d{3})(\d{4})(\d{4})$/, '$1****$2') }}
+ {{ phoneNumber }}
的 6 位验证码,有效期 10 分钟。如未收到,请重新获取验证码
@@ -47,6 +46,10 @@
const codeDisabled = ref(true)
const showKeyboard = ref(true) // 数字键盘
+ const phoneNumber = computed(() =>
+ phoneNo.value.replace(/^(\d{3})(\d{4})(\d{4})$/, '$1****$2')
+ )
+
function getTime() {
loadTime.value--
if (loadTime.value === 0) {
@@ -56,23 +59,23 @@
}
}
- /** 获取验证码 */
- // TODO @xiaohong:使用 async 改成同步的,减少 callback 哈
- function getCode() {
- toast.loading('获取验证码......')
- getCodeApi({
- phoneNo: phoneNo.value
- })
- .then((code) => {
- loadTime.value = 60
- codeDisabled.value = true
- showKeyboard.value = true
- timer.value = setInterval(getTime, 1000)
- toast.loading({ msg: '验证码已发送......', duration: 2000 })
- })
- .finally(() => {
- // toast.close()
+ /*
+ *@Description: 获取验证码
+ *@MethodAuthor: xiaohong
+ *@Date: 2024-10-24 15:53:38
+ */
+ async function getCode() {
+ try {
+ toast.loading('获取验证码......')
+ const code = await getCodeApi({
+ phoneNo: phoneNo.value
})
+ loadTime.value = 60
+ codeDisabled.value = true
+ showKeyboard.value = true
+ timer.value = setInterval(getTime, 1000)
+ toast.loading({ msg: '验证码已发送......', duration: 2000 })
+ } catch (error) {}
}
/** 初始化 */
diff --git a/src/store/user.ts b/src/store/user.ts
index 7f65497..9125fec 100644
--- a/src/store/user.ts
+++ b/src/store/user.ts
@@ -1,9 +1,10 @@
import { defineStore } from 'pinia'
import { ref } from 'vue'
-import { getAccessToken, removeToken } from '@/utils/auth'
+import { getAccessToken, removeToken, setToken } from '@/utils/auth'
import { getInfo, loginOut } from '@/service/login/LoginAPI'
+import { currRoute } from '@/utils'
-const initState = {
+const initState: UserInfoVO = {
permissions: [],
roles: [],
isSetUser: false,
@@ -24,12 +25,11 @@ export const useUserStore = defineStore(
// actions methods
const setUserInfoAction = async () => {
+ // 获取不到accessToken,直接返回
if (!getAccessToken()) {
- // 获取不到accessToken,直接返回
resetState()
return
}
-
const data = await getInfo()
userInfo.value = {
...data,
@@ -37,24 +37,42 @@ export const useUserStore = defineStore(
}
}
+ // 设置用户头像
const setUserAvatarAction = async (avatar: string) => {
userInfo.value.user.avatar = avatar
}
+ // 设置用户昵称
const setUserNicknameAction = async (nickname: string) => {
userInfo.value.user.nickname = nickname
}
+ // 退出登录
const LogOut = async () => {
await loginOut()
removeToken()
resetState()
}
+ // 重置userInfo
const resetState = () => {
- console.log('initState', initState)
userInfo.value = initState
- console.log('重置userInfo', userInfo.value)
+ }
+
+ /*
+ *@Description: 登录后的回调
+ *@MethodAuthor: xiaohong
+ *@Date: 2024-10-24 13:18:58
+ */
+ const afterLogin = async (params: Recordable) => {
+ // 设置token
+ setToken(params)
+ // 获取用户信息,保存到 store
+ await setUserInfoAction()
+ const fullPath = currRoute()
+ uni.redirectTo({
+ url: fullPath.query.redirect || '/pages/work/index'
+ })
}
// 暴露到外面的方法
@@ -64,7 +82,8 @@ export const useUserStore = defineStore(
setUserAvatarAction,
setUserNicknameAction,
LogOut,
- resetState
+ resetState,
+ afterLogin
}
},
{
diff --git a/src/types/uni-pages.d.ts b/src/types/uni-pages.d.ts
index b8fb0e6..6154b0b 100644
--- a/src/types/uni-pages.d.ts
+++ b/src/types/uni-pages.d.ts
@@ -14,6 +14,7 @@ interface NavigateToOptions {
"/pages/message/index" |
"/pages/my/index" |
"/pages/my-info/index" |
+ "/pages/person-center/index" |
"/pages/role/index";
}
interface RedirectToOptions extends NavigateToOptions {}
diff --git a/src/utils/index.ts b/src/utils/index.ts
index 8283d7d..ffceb39 100644
--- a/src/utils/index.ts
+++ b/src/utils/index.ts
@@ -61,7 +61,7 @@ export const getUrlObj = (url: string) => {
if (!queryStr) {
return {
path,
- query: {},
+ query: {}
}
}
const query: Record = {}
@@ -84,8 +84,8 @@ export const getAllPages = (key = 'needLogin') => {
.filter((page) => !key || page[key])
.map((page) => ({
...page,
- path: `/${page.path}`,
- })),
+ path: `/${page.path}`
+ }))
]
// 这里处理分包
const subPages: any[] = []
@@ -98,7 +98,7 @@ export const getAllPages = (key = 'needLogin') => {
.forEach((page: { path: string } & Record) => {
subPages.push({
...page,
- path: `/${root}/${page.path}`,
+ path: `/${root}/${page.path}`
})
})
})
@@ -111,13 +111,16 @@ export const getAllPages = (key = 'needLogin') => {
* 得到所有的需要登录的pages,包括主包和分包的
* 只得到 path 数组
*/
-export const getNeedLoginPages = (): string[] => getAllPages('needLogin').map((page) => page.path)
+export const getNeedLoginPages = (): string[] =>
+ getAllPages('needLogin').map((page) => page.path)
/**
* 得到所有的需要登录的pages,包括主包和分包的
* 只得到 path 数组
*/
-export const needLoginPages: string[] = getAllPages('needLogin').map((page) => page.path)
+export const needLoginPages: string[] = getAllPages('needLogin').map(
+ (page) => page.path
+)
/**
* 根据微信小程序当前环境,判断应该获取的BaseUrl
@@ -129,7 +132,7 @@ export const getEvnBaseUrl = () => {
// 小程序端环境区分
if (isMp) {
const {
- miniProgram: { envVersion },
+ miniProgram: { envVersion }
} = uni.getAccountInfoSync()
// 开发、体验、正式版 三种不同的小程序都可以配置不同的后端 url
switch (envVersion) {
@@ -158,7 +161,7 @@ export const getEvnBaseUploadUrl = () => {
// 小程序端环境区分
if (isMp) {
const {
- miniProgram: { envVersion },
+ miniProgram: { envVersion }
} = uni.getAccountInfoSync()
switch (envVersion) {
--
Gitee