Ver código fonte

完成登录页面

yuanmingze 8 meses atrás
pai
commit
cf1aed926d

+ 12 - 4
src/pages/login/index.vue

@@ -201,9 +201,6 @@ const sendCode = debounce(sendCodeImpl)
 /* ---------------- 提交 ---------------- */
 
 const submit = async () => {
-  console.log('qaq')
-  console.log('privacyAuthed.value', privacyAuthed.value)
-
   if (!privacyAuthed.value) {
     requirePrivacyAuthorization()
     return
@@ -220,7 +217,18 @@ const submit = async () => {
     code: form.code,
   })
 
-  // 后续处理(跳转 / 提示)
+  if (!res.success) {
+    uni.showModal({
+      title: '登录失败',
+      content: res.message ?? '登录失败,请重试',
+      showCancel: false,
+      confirmText: '我知道了',
+    })
+    return
+  }
+  uni.reLaunch({
+    url: '/pages/index/index',
+  })
 }
 
 /* ---------------- 其他 ---------------- */

+ 9 - 5
src/pages/reset-password/index.vue

@@ -62,15 +62,19 @@
 </template>
 
 <script setup lang="ts">
-import AuthInputItem from '@/components/auth/AuthInputItem.vue'
-import { useFormValidator } from '@/composables/useFormValidator'
-import { logingRules } from '@/validators/authFormRules'
+import { reactive } from 'vue'
+
 import { debounce } from '@/plugins/debounce'
 
-import { reactive } from 'vue'
-import { useCodeCountdown } from '@/composables/useCodeCountdown'
 import { getPwdCodeForNoAuthApi, updUserPwdApi } from '@/services/modules/auth/index'
 
+import { useCodeCountdown } from '@/composables/useCodeCountdown'
+import { useFormValidator } from '@/composables/useFormValidator'
+
+import { logingRules } from '@/validators/authFormRules'
+
+import AuthInputItem from '@/components/auth/AuthInputItem.vue'
+
 const form = reactive({
   username: '',
   code: '',

+ 13 - 2
src/services/modules/auth/index.ts

@@ -1,11 +1,16 @@
 import http from '../../index'
-import type { AuthTokenRequest, LoginRequest, UpdUserPwdRequest } from './type'
+import type {
+  AuthTokenRequest,
+  CheckBlacklistRequest,
+  CheckBlacklistResponse,
+  LoginRequest,
+  UpdUserPwdRequest,
+} from './type'
 import type { UserInfoResponse } from './userInfo'
 
 //  账号密码校验
 export const getAuthTokenApi = (data: AuthTokenRequest) => {
   const passwordUrl = encodeURIComponent(data.password)
-
   return http.postRaw(
     `/auth/oauth/token?username=${data.username + '@mp'}&password=${passwordUrl}&grant_type=password&scope=server&mp=wechat`
   )
@@ -23,6 +28,12 @@ export const getUserInfoByCodeApi = (wxCode: string, avatar?: string) => {
   return http.get<UserInfoResponse>(`/admin/api/getUserInfoByCode?code=${wxCode}&avatar=${avatar}`)
 }
 
+//校验是否是黑名单
+
+export const checkBlacklistApi = (data: CheckBlacklistRequest) => {
+  return http.get<CheckBlacklistResponse>(`/admin/user/blacklist/check`, data)
+}
+
 export const getMobileCodeApi = (phone: string) => {
   return http.get<boolean>(`/admin/mobile/${phone}`)
 }

+ 16 - 0
src/services/modules/auth/type.d.ts

@@ -12,3 +12,19 @@ export interface UpdUserPwdRequest {
   code: string
   password: string
 }
+
+export interface CheckBlacklistRequest {
+  phoneNumber: string
+  idCardNumber: string
+}
+
+export interface CheckBlacklistResponse {
+  idCardNumberStatus: boolean
+  phoneNumberStatus: boolean
+}
+
+export interface LoginActionResult<T = void> {
+  success: boolean
+  message?: string
+  data?: T
+}

+ 45 - 19
src/stores/modules/user.ts

@@ -1,44 +1,57 @@
-
 import { defineStore } from 'pinia'
 
 import { getWXLoginCode } from '@/lib/wechatService'
 
-import { getTokenBySmsApi, getUserInfoByCodeApi } from '@/services/modules/auth'
-import type { LoginRequest } from '@/services/modules/auth/type'
+import { checkBlacklistApi, getTokenBySmsApi, getUserInfoByCodeApi } from '@/services/modules/auth'
+import type {
+  CheckBlacklistRequest,
+  LoginActionResult,
+  LoginRequest,
+} from '@/services/modules/auth/type'
 import type { UserInfoItem } from '@/services/modules/auth/userInfo'
 
 import { uniStorage } from '@/utils/uniStorage'
 
-
 interface UserState {
   token: string
   access_token?: string
-
-
+  currentUserInfoIndex?: number
   userInfoList: UserInfoItem[]
+  isBlacklisted?: boolean
 }
 
 export const useUserStore = defineStore('user', {
-
-
   state: (): UserState => ({
     token: '',
     access_token: '',
-
+    currentUserInfoIndex: 0,
     userInfoList: [],
+    isBlacklisted: false,
   }),
+  getters: {
+    currentUserInfo(state): UserInfoItem | undefined {
+      const currentUserInfo = state.userInfoList[state.currentUserInfoIndex || 0]
+      return currentUserInfo || undefined
+    },
+  },
   actions: {
-    setTokenInfo() {},
     // 登录
-    async login(payload: LoginRequest) {
+    async login(payload: LoginRequest): Promise<LoginActionResult> {
       const res = await getTokenBySmsApi(payload)
-      if (res.access_token) {
-        this.access_token = res.access_token
-        // 获取用户信息
-        await this.getUserInfoByCode()
-        return true
+      // 登录失败(业务失败)
+      if (!res.access_token) {
+        return {
+          success: false,
+          message: res.msg || '登录失败',
+        }
+      }
+      // 登录成功
+      this.access_token = res.access_token
+      // 拉取用户信息(这里可以继续 try/catch)
+      await this.getUserInfoByCode()
+      return {
+        success: true,
       }
-      return res
     },
     async getUserInfoByCode() {
       const res = await getWXLoginCode()
@@ -46,14 +59,27 @@ export const useUserStore = defineStore('user', {
         const userInfoResult = await getUserInfoByCodeApi(res.code)
         if (userInfoResult.code === 0 && userInfoResult.data) {
           this.userInfoList = userInfoResult.data.userInfo
+          if (this.userInfoList[0]) {
+            const { phone, idCardNumber } = this.userInfoList[0]
+            this.fetchUserBlacklistStatus({
+              phoneNumber: phone,
+              idCardNumber,
+            })
+          }
         }
-        console.log('res', userInfoResult)
+      }
+    },
+    async fetchUserBlacklistStatus(payload: CheckBlacklistRequest) {
+      const res = await checkBlacklistApi(payload)
+      if (res.code == 0) {
+        const { idCardNumberStatus, phoneNumberStatus } = res.data
+        this.isBlacklisted = idCardNumberStatus || phoneNumberStatus
       }
     },
   },
   persist: {
     key: 'user-store',
     storage: uniStorage,
-    pick: ['token'],
+    pick: ['token', 'access_token', 'currentUserInfoIndex', 'userInfoList', 'isBlacklisted'],
   },
 })