diff --git a/src/interceptors/route.ts b/src/interceptors/route.ts
index 252855b688f26597332ff17fefe955b79e9e4470..d95333e94ef7ed90601c7a4008ff61bdcdf22ceb 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 9e6ba8b371d68518d808493d82fafe9ab3a5f82b..6551b1190f18068b471035787f63d31017bf6326 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 d2c05698da116ef17fe9c9afef5beb1020c27e86..fe70229fca63cafb0550b9f4dd96d2b368c59a19 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 4b1abb9dbdbe985ab978d63ca9424b55ab630017..76f41c9a02d80563ab2e0e98bccf765f0420c63e 100644
--- a/src/pages/login/components/LoginForm.vue
+++ b/src/pages/login/components/LoginForm.vue
@@ -40,6 +40,8 @@
登录
+
+
本机号登录
+
@@ -60,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: {
@@ -92,7 +95,7 @@
})
/** 执行登录 */
- const handleLogin = (type: string) => {
+ const handleLogin = async (type: string) => {
if (!props.agree) {
toast.warning('请阅读并同意《用户协议》和《隐私政策》')
return
@@ -101,38 +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.navigateTo({ url: '/pages/login/phone-index' })
+ try {
+ // 校验表单
+ const { valid } = await loginForm.value.validate()
+ if (valid) {
+ toast.loading('登录中...')
+ // 调用登录接口
+ const data = ((await login(loginData.loginForm)) as Recordable)?.data
+ // 登录成功后的回调
+ afterLogin(data)
+ }
+ } 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 6b35929f9c914f661719cc64e7cacaa381bc185b..4533892a960ab27ccc25164c69572bf3388482ea 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/index.vue b/src/pages/login/index.vue
index 3a756085698036a96ae65c47ece2a5f1db9167b5..d11e21932936d70603d21164cd3fb43c7ab99916 100644
--- a/src/pages/login/index.vue
+++ b/src/pages/login/index.vue
@@ -26,8 +26,10 @@
+
+
diff --git a/src/pages/login/registerCode.vue b/src/pages/login/registerCode.vue
index 7a58b4179f0cd27da05c3b8f9d2df79e1bd7a349..d89ab0ce0f8f223050b8ac13d3f30a8bd1f844ed 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 7f6549744fe31059e19ddc8acdb0258479bab06e..9125fec4262eb6795ca5bc51f0b80e1174cf71d2 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 b8fb0e6b62362bdc35e212a14c7c9a8bf353d06c..6154b0b067b3cff107ca2e4e7afad4c63b5cc75a 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 8283d7df23995c33ea1e6b837f14312404376bec..ffceb393aa15efd339b6fe575b1d0bfc3db77738 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) {