12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- 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<Array<DialogOptions>>([]);
- /** 打开弹框 */
- 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
- };
|