1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
| /**
| * 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 }),
| }
|
|