Ver código fonte

feat: 登陆+下载目录册模块完成

chenpeng 1 semana atrás
pai
commit
13c39fe7e2

+ 1 - 1
api/model/user.ts

@@ -2,7 +2,7 @@ import { useMyRequest } from '~/composables/useFetchRequest'
 
 enum Api {
   Login = '/client-s003/s003Customer/login',
-  Logout = '/client/user/logout',
+  Logout = 'client-s003/s003Customer/logout',
   Register = '/client/user/preRegister',
   ValidateRegister = '/client/user/register',
   ValidateEmail = '/client/user/forgetPassword',

BIN
assets/images/baozhen_1748937135247.pdf


BIN
assets/images/logout.png


+ 2 - 2
components/common/login/useLogin.ts

@@ -41,6 +41,7 @@ export default function useRegister() {
       await onGoogleLoginSuccess(result)
     }
     if (item.type === 'email') {
+      selectedMethod.value = 'email'
       loginForm.value.email = item.email
       emailStep.value = 1
     }
@@ -120,10 +121,9 @@ export default function useRegister() {
    */
   async function handleLogin(params: any) {
     try {
-      console.log('登陆成功后------000')
       const { login } = useUserStore()
       await login(params)
-      console.log('登陆成功------1111')
+      console.log('登陆成功回调------1111')
       closeLoginModal({ status: true, isFirstLogin: true })
     }
     catch (err: any) {

+ 45 - 16
components/common/user-avatar/index.vue

@@ -2,15 +2,14 @@
 
 <script setup lang="ts">
 import { useUserStore } from '@/stores/modules/user'
-import { useCommonStore } from '@/stores/modules/common'
 
-const commonStore = useCommonStore()
 const userStore = useUserStore()
-const { isLogin } = storeToRefs(userStore)
-// const { noticeRemind } = storeToRefs(commonStore)
+const { isLogin, userInfo } = storeToRefs(userStore)
 
 const { openLoginModal } = useLoginModal()
-
+const userName = computed(() => {
+  return (userInfo.value?.FirstName || userInfo.value?.LastName) ? `${userInfo.value?.FirstName} ${userInfo.value?.LastName}` : 'EJET Spark'
+})
 async function clickLogin() {
   try {
     const { status } = await openLoginModal()
@@ -22,17 +21,9 @@ async function clickLogin() {
     console.log(error)
   }
 }
-
-// async function onSelected(command: string | number | object) {
-//   if (command === "signOut") {
-//     // 退出登录
-//     try {
-//       userStore.logout()
-//     } catch (error) {
-//       console.log(error, "error")
-//     }
-//   }
-// }
+function onLogout() {
+  userStore.logout()
+}
 </script>
 
 <template>
@@ -45,6 +36,38 @@ async function clickLogin() {
         Sign in
       </el-button>
     </div>
+    <div v-else>
+      <el-popover
+        placement="bottom-end"
+        :width="360"
+      >
+        <template #reference>
+          <div class="b-rd-50% w-40px h-40px  fw-800 text-#9B6CFF lh-40px text-center bg-#EAE5FA text-#3D3D3D cursor-pointer">
+            {{ userName.charAt(0) }}
+          </div>
+        </template>
+        <template #default>
+          <div class=" bg-#fff b-rd-8px flex justify-between items-center">
+            <div class="flex items-center">
+              <div class="b-rd-50% w-40px fw-800 h-40px lh-40px text-center text-#9B6CFF bg-#EAE5FA text-#3D3D3D cursor-pointer">
+                {{ userName.charAt(0) }}
+              </div>
+              <div class="ml-18px">
+                <div class="custom-title-font text-#333 text-18px">
+                  {{ userName }}
+                </div>
+                <div class="mt-4px   text-#767676">
+                  {{ userInfo?.email }}
+                </div>
+              </div>
+            </div>
+            <div class="cursor-pointer" @click="onLogout">
+              <img src="@/assets/images/logout.png" class="w-24px h-24px" alt="">
+            </div>
+          </div>
+        </template>
+      </el-popover>
+    </div>
   </div>
 </template>
 
@@ -54,6 +77,12 @@ async function clickLogin() {
     font-size: 24px;
   }
 }
+.el-popover.el-popper{
+  border-radius: 10px!important;
+  margin-top: 10px;
+  padding:   20px!important;
+  padding-right: 30px !important;
+}
 .custom-dropdown {
   &.el-dropdown__popper {
     border-radius: 10px;

+ 37 - 57
composables/useFetchRequest.ts

@@ -14,18 +14,20 @@ type UrlType =
 export interface RequestOptions {
   method?: any
   params?: any
+  headers?: any
   server?: boolean
+  [key: string]: any
 }
 
 export function useMyRequest() {
   const request = async (
     url: UrlType,
     params: any,
-    options: RequestOptions = {},
+    opt: RequestOptions = {},
   ) => {
     const headers = useRequestHeaders(['cookie'])
     const { apiBase: baseURL } = useRuntimeConfig().public
-    let { method = (options?.method || 'GET') as string } = options
+    let { method = (opt?.method || 'GET') as string } = opt
     method = method.toUpperCase()
 
     // 处理请求体
@@ -52,15 +54,16 @@ export function useMyRequest() {
         method,
         params: { ...params },
         headers,
-        server: options.server || false,
+        server: opt.server || false,
         credentials: 'include',
         body: requestBody,
         onRequest: ({ request, options }) => {
+          // console.log('onResponseError--------aaaa:', options)
           const userStore = useUserStore()
           const { token } = storeToRefs(userStore)
           if (token.value) {
             options.headers = {
-              ...options.headers,
+              ...opt.headers,
               'Authorization': token.value,
               'X-Access-Token': token.value,
             }
@@ -75,70 +78,47 @@ export function useMyRequest() {
             plain: true,
           })
         },
+        // 响应成功+异常处理
         onResponse: ({ request, response, options }) => {
-          try {
-            const data = response._data
-            const { code, result, message } = data
-            // 这里逻辑可以根据项目进行修改
-            const hasSuccess
+          // console.log('onResponseError--------1:', request, response, options, opt)
+          const data = response._data
+          const { code, result, message } = data
+          const hasSuccess
               = data && Reflect.has(data, 'code') && code === ResultEnum.SUCCESS
-            if (hasSuccess)
-              return resolve(result)
-            let msg = ''
-            switch (code) {
-              case ResultEnum.TIMEOUT:
-                msg = 'Login timeout, please login again.'
-                // 被动登出,带redirect地址
-                useUserStore().logout()
-                break
-              case 10010:
-                // 此处10010控制无效的分享
-                msg = ''
-                break
-              default:
-                if (message)
-                  msg = message
-            }
-            if (msg) {
-              ElMessage({
-                message: msg,
-                type: 'error',
-                plain: true,
-              })
-            }
-            throw new Error(msg || 'Error in request, please try again later.')
-          }
-          catch (error) {
-            return reject(response._data)
+          if (hasSuccess)
+            return resolve(result)
+          let msg = ''
+          switch (code) {
+            case ResultEnum.TIMEOUT:
+              msg = 'Login timeout, please login again.'
+              // 超时,自动推出
+              useUserStore().logout()
+              break
+            default:
+              if (message)
+                msg = message
           }
+          msg && !opt.isErrorPrompt
+          && ElMessage({
+            message: msg,
+            type: 'error',
+            plain: true,
+          })
+          return reject(response._data)
         },
+        // 服务错误响应处理
         onResponseError: (error: any) => {
           const { response, code, message } = error || {}
           const msg: string = response?.data?.message ?? ''
           const err: string = error?.toString?.() ?? ''
           let errMessage = ''
-          try {
-            if (code === 'ECONNABORTED' && message.includes('timeout')) {
-              errMessage
+          if (code === 'ECONNABORTED' && message.includes('timeout')) {
+            errMessage
                 = 'The interface request timed out. Please refresh the page and try again.'
-            }
-
-            if (err?.includes('Network Error')) {
-              errMessage
-                = 'The network is abnormal. Please check whether your network connection is normal.'
-            }
-
-            if (errMessage) {
-              ElMessage({
-                message: errMessage,
-                type: 'error',
-                plain: true,
-              })
-              return reject(error)
-            }
           }
-          catch (error) {
-            throw new Error(error as unknown as string)
+          if (err?.includes('Network Error')) {
+            errMessage
+                = 'The network is abnormal. Please check whether your network connection is normal.'
           }
           const status = error?.response?.status
           switch (status) {