소스 검색

refactor: 替换自定义 toast 为 uni.showToast 并添加微信更新管理器

移除自定义 toast 工具,统一使用 uni.showToast 实现提示功能
添加微信小程序更新管理器实现版本更新检测和应用
feige996 8 달 전
부모
커밋
3143635764
4개의 변경된 파일41개의 추가작업 그리고 82개의 파일을 삭제
  1. 8 3
      src/http/alova.ts
  2. 4 2
      src/store/user.ts
  3. 0 77
      src/utils/toast.ts
  4. 29 0
      src/utils/updateManager.wx.ts

+ 8 - 3
src/http/alova.ts

@@ -4,7 +4,6 @@ import AdapterUniapp from '@alova/adapter-uniapp'
 import { createAlova } from 'alova'
 import { createServerTokenAuthentication } from 'alova/client'
 import VueHook from 'alova/vue'
-import { toast } from '@/utils/toast'
 import { ContentTypeEnum, ResultEnum, ShowMessage } from './tools/enum'
 
 // 配置动态Tag
@@ -91,7 +90,10 @@ const alovaInstance = createAlova({
     if (statusCode !== 200) {
       const errorMessage = ShowMessage(statusCode) || `HTTP请求错误[${statusCode}]`
       console.error('errorMessage===>', errorMessage)
-      toast.error(errorMessage)
+      uni.showToast({
+        title: errorMessage,
+        icon: 'error',
+      })
       throw new Error(`${errorMessage}:${errMsg}`)
     }
 
@@ -99,7 +101,10 @@ const alovaInstance = createAlova({
     const { code, message, data } = rawData as IResponse
     if (code !== ResultEnum.Success) {
       if (config.meta?.toast !== false) {
-        toast.warning(message)
+        uni.showToast({
+          title: message,
+          icon: 'none',
+        })
       }
       throw new Error(`请求错误[${code}]:${message}`)
     }

+ 4 - 2
src/store/user.ts

@@ -9,7 +9,6 @@ import {
   wxLogin as _wxLogin,
   getWxCode,
 } from '@/api/login'
-import { toast } from '@/utils/toast'
 
 // 初始化状态
 const userInfoState: IUserInfoVo = {
@@ -72,7 +71,10 @@ export const useUserStore = defineStore(
     }) => {
       const res = await _login(credentials)
       console.log('登录信息', res)
-      toast.success('登录成功')
+      uni.showToast({
+        title: '登录成功',
+        icon: 'success',
+      })
       await getUserInfo()
       return res
     }

+ 0 - 77
src/utils/toast.ts

@@ -1,77 +0,0 @@
-/**
- * toast 弹窗组件
- * 支持 success/error/warning/info 四种状态
- * 可配置 duration, position 等参数
- */
-
-type ToastType = 'success' | 'error' | 'warning' | 'info'
-
-interface ToastOptions {
-  type?: ToastType
-  duration?: number
-  position?: 'top' | 'middle' | 'bottom'
-  icon?: 'success' | 'error' | 'none' | 'loading' | 'fail' | 'exception'
-  message: string
-  /**
-   * 是否显示透明蒙层,防止触摸穿透
-   * @default true
-   */
-  mask?: boolean
-}
-/**
- * 显示 toast
- */
-export function showToast(message: string): void
-export function showToast(options: ToastOptions): void
-export function showToast(options: ToastOptions | string): void {
-  const defaultOptions: ToastOptions = {
-    type: 'info',
-    duration: 2000,
-    position: 'middle',
-    message: '',
-    mask: true,
-  }
-  const mergedOptions
-    = typeof options === 'string'
-      ? { ...defaultOptions, message: options }
-      : { ...defaultOptions, ...options }
-  // 映射position到uniapp支持的格式
-  const positionMap: Record<ToastOptions['position'], 'top' | 'bottom' | 'center'> = {
-    top: 'top',
-    middle: 'center',
-    bottom: 'bottom',
-  }
-
-  // 映射图标类型
-  const iconMap: Record<
-    ToastType,
-    'success' | 'error' | 'none' | 'loading' | 'fail' | 'exception'
-  > = {
-    success: 'success',
-    error: 'error',
-    warning: 'fail',
-    info: 'none',
-  }
-
-  // 调用uni.showToast显示提示
-  uni.showToast({
-    title: mergedOptions.message,
-    duration: mergedOptions.duration,
-    position: positionMap[mergedOptions.position],
-    icon: mergedOptions.icon || iconMap[mergedOptions.type],
-    mask: mergedOptions.mask,
-  })
-}
-
-type _ToastOptions = Omit<ToastOptions, 'type' | 'message'>
-
-export const toast = {
-  success: (message: string, options?: _ToastOptions) =>
-    showToast({ ...options, type: 'success', message }),
-  error: (message: string, options?: _ToastOptions) =>
-    showToast({ ...options, type: 'error', message }),
-  warning: (message: string, options?: _ToastOptions) =>
-    showToast({ ...options, type: 'warning', message }),
-  info: (message: string, options?: _ToastOptions) =>
-    showToast({ ...options, type: 'info', message }),
-}

+ 29 - 0
src/utils/updateManager.wx.ts

@@ -0,0 +1,29 @@
+export default () => {
+  if (!wx.canIUse('getUpdateManager')) {
+    return
+  }
+
+  const updateManager = wx.getUpdateManager()
+
+  updateManager.onCheckForUpdate((res) => {
+    // 请求完新版本信息的回调
+    console.log('版本信息', res)
+  })
+
+  updateManager.onUpdateReady(() => {
+    wx.showModal({
+      title: '更新提示',
+      content: '新版本已经准备好,是否重启应用?',
+      success(res) {
+        if (res.confirm) {
+          // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
+          updateManager.applyUpdate()
+        }
+      },
+    })
+  })
+
+  updateManager.onUpdateFailed(() => {
+    // 新版本下载失败
+  })
+}