/** * 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 = { 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) => showToast({ ...options, type: 'success', message }), error: (message: string, options?: Omit) => showToast({ ...options, type: 'error', message }), warning: (message: string, options?: Omit) => showToast({ ...options, type: 'warning', message }), info: (message: string, options?: Omit) => showToast({ ...options, type: 'info', message }), }