starmusic-pc
1/**
2 * 统一反馈(Toast / Confirm)
3 *
4 * 直接复用 uni 兼容层的 ui-state,使业务代码与 UI 代码的提示样式完全一致。
5 */
6import { pushToast, openModal } from '../uni/ui-state.js'
7
8/**
9 * 轻提示
10 * @param {string} title
11 * @param {'none'|'success'|'error'|'loading'} [icon]
12 * @param {number} [duration]
13 */
14export const toast = (title, icon = 'none', duration = 2200) => pushToast({ title, icon, duration })
15
16/** 成功提示 */
17export const toastOk = (title, duration = 2000) => pushToast({ title, icon: 'success', duration })
18
19/** 失败提示(带轻微抖动语义) */
20export const toastErr = (title, duration = 2800) => pushToast({ title, icon: 'error', duration })
21
22/**
23 * 确认弹窗(Promise 化)
24 * @param {{title?:string, content?:string, confirmText?:string, cancelText?:string, danger?:boolean}} opts
25 * @returns {Promise<boolean>} 是否点了确定
26 */
27export const confirm = async (opts = {}) => {
28 const res = await openModal(opts)
29 return !!res.confirm
30}
31
32/** 仅提示(无取消按钮) */
33export const alert = (title, content = '') => openModal({ title, content, showCancel: false, confirmText: '知道了' })
34
35/**
36 * 从错误对象提取可读信息
37 * @param {any} err
38 * @param {string} fallback
39 */
40export const errText = (err, fallback = '操作失败') => {
41 if (!err) return fallback
42 const msg = typeof err === 'string' ? err : err.message
43 return msg ? String(msg) : fallback
44}