更新记录

1.0.1(2026-06-22)

1.0.1

  • 初始版本
  • 全局 Dialog 组件(alert / confirm)
  • Toast 组件(success / fail / message)
  • Loading 组件(dots / spinner,支持自定义 logo)
  • useDialog 组合式 API(自动清理)
  • 局部 Dialog 组件(props + 插槽)
  • 支持 APP(Vue)、H5、主流小程序

平台兼容性

uni-app(4.83)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - 5.0 12
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - -

True Global Dialog

1.99 交个朋友,买一个省心。

真正的全局弹窗方案,适用于 uni-app(Vue 3)。一套代码,全端通用,写最少的代码,做最多的弹窗。


为什么你需要这个组件?

做过 uni-app 的人都知道,弹窗是个「小事情、大麻烦」的东西:

原生 uni.showModal 所有端的样式都不一样,无法自定义。

自己写全局弹窗——你需要:写组件 → 挂到每个页面 → 封装调用函数 → 处理事件通信 → 清理残留状态。每个项目重复一遍。

在 store / 工具函数中调用弹窗?——普通组件做不到,你得想办法把组件实例传进去,或者用一些不太优雅的 workaround。

这个组件解决的就是这些事情:

  • 在 store 里直接 await showLoading('加载中'),不用传任何实例
  • 在页面里 await confirm('确认删除?'),拿到结果继续执行
  • 不用在每个页面里手动引入组件
  • 编译时自动帮你搞定一切,你只管写业务代码

它能做什么

能力 说明
全局 Dialog alert / confirm / show,返回 Promise,支持 await
全局 Toast success / fail / message,等待消失后 resolve
全局 Loading showLoading / hideLoading,支持多种动画样式
局部弹窗组件 props + 插槽驱动,适合表单弹窗等复杂场景
组合式 API useDialog() 页面销毁时自动清理,不会残留
纯函数调用 在 store、工具函数中直接调用,不依赖组件实例
TypeScript 完整类型定义,开箱即用
跨平台 APP、H5、微信/支付宝/百度/抖音/QQ 小程序

安装

1. 复制插件

把插件复制到你项目的 uni_modules/ 目录下。

2. 配置 Vite 插件

vite-plugin-auto-dialog.ts 复制到 plugins/ 目录,然后在 vite.config.ts 中注册:

import { defineConfig } from 'vite'
import uni from '@dcloudio/vite-plugin-uni'
import autoDialogPlugin from './plugins/vite-plugin-auto-dialog'

export default defineConfig({
  plugins: [
    autoDialogPlugin(),  // 放在 uni() 前面
    uni()
  ],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src')
    }
  }
})

就这么简单。 不用在页面里手动引入组件。编译时会自动处理。

3. 开始用

直接在页面里写:

const { alert, confirm, success, showLoading, hideLoading } = useDialog()

快速体验

<script setup lang="ts">
import { useDialog } from '@/uni_modules/true-global-dialog/composables/useDialog'

const { alert, confirm, success, fail, showLoading, hideLoading } = useDialog()

// 提示
const handleAlert = async () => {
  await alert({ content: '操作成功' })
  // 用户点确认后才会继续
}

// 确认
const handleConfirm = async () => {
  const ok = await confirm({ content: '确定要删除吗?' })
  if (ok) {
    await success('已删除')
  }
}

// Loading
const handleLoading = () => {
  showLoading('加载中...')
  setTimeout(() => hideLoading(), 3000)
}
</script>

在 store 或工具函数中也一样直接:

import { showLoading, hideLoading, showSuccess } from '@/uni_modules/true-global-dialog/utils/dialog'

async function submitForm() {
  showLoading('提交中...')
  const res = await api.submit(data)
  hideLoading()
  await showSuccess('提交成功')
}

组件列表

组件 用途
全局弹窗(Dialog + Toast + Loading) 通过函数调用,任意位置可用
局部弹窗组件 通过 props 控制,适合页面内表单弹窗等场景

版本与定价

版本 价格 包含内容
普通版 ¥1.99 插件 + Vite 插件 + README 文档
源码版 ¥9.99 普通版全部内容 + 完整源码注释 + 实现原理文档 + 后续持续支持

写一次,所有项目都能用。省下的时间,远不止这个价。


后续维护

这个组件会持续维护。如果你在使用过程中遇到问题或者有功能建议,随时联系我。


许可证

MIT

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。