import { ref } from "vue"; import reDialog from "./index.vue"; import { useTimeoutFn } from "@vueuse/core"; import { withInstall } from "@pureadmin/utils"; import type { EventType, ArgsType, DialogProps, ButtonProps, DialogOptions } from "./type"; const dialogStore = ref>([]); /** 打开弹框 */ const addDialog = (options: DialogOptions) => { const open = () => dialogStore.value.push(Object.assign(options, { visible: true })); if (options?.openDelay) { useTimeoutFn(() => { open(); }, options.openDelay); } else { open(); } }; /** 关闭弹框 */ const closeDialog = (options: DialogOptions, index: number, args?: any) => { dialogStore.value.splice(index, 1); options.closeCallBack && options.closeCallBack({ options, index, args }); }; /** * @description 更改弹框自身属性值 * @param value 属性值 * @param key 属性,默认`title` * @param index 弹框索引(默认`0`,代表只有一个弹框,对于嵌套弹框要改哪个弹框的属性值就把该弹框索引赋给`index`) */ const updateDialog = (value: any, key = "title", index = 0) => { dialogStore.value[index][key] = value; }; /** 关闭所有弹框 */ const closeAllDialog = () => { dialogStore.value = []; }; /** 千万别忘了在下面这三处引入并注册下,放心注册,不使用`addDialog`调用就不会被挂载 * https://github.com/pure-admin/vue-pure-admin/blob/main/src/App.vue#L4 * https://github.com/pure-admin/vue-pure-admin/blob/main/src/App.vue#L13 * https://github.com/pure-admin/vue-pure-admin/blob/main/src/App.vue#L18 */ const ReDialog = withInstall(reDialog); export type { EventType, ArgsType, DialogProps, ButtonProps, DialogOptions }; export { ReDialog, dialogStore, addDialog, closeDialog, updateDialog, closeAllDialog };