1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /**
- * 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
- }
- export function showToast(options: ToastOptions | string) {
- const defaultOptions: ToastOptions = {
- type: 'info',
- duration: 2000,
- position: 'middle',
- message: '',
- }
- 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: true,
- })
- }
- export const toast = {
- success: (message: string, options?: Omit<ToastOptions, 'type'>) =>
- showToast({ ...options, type: 'success', message }),
- error: (message: string, options?: Omit<ToastOptions, 'type'>) =>
- showToast({ ...options, type: 'error', message }),
- warning: (message: string, options?: Omit<ToastOptions, 'type'>) =>
- showToast({ ...options, type: 'warning', message }),
- info: (message: string, options?: Omit<ToastOptions, 'type'>) =>
- showToast({ ...options, type: 'info', message }),
- }
|