index.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { ref } from "vue";
  2. import reDialog from "./index.vue";
  3. import { useTimeoutFn } from "@vueuse/core";
  4. import { withInstall } from "@pureadmin/utils";
  5. import type {
  6. EventType,
  7. ArgsType,
  8. DialogProps,
  9. ButtonProps,
  10. DialogOptions
  11. } from "./type";
  12. const dialogStore = ref<Array<DialogOptions>>([]);
  13. /** 打开弹框 */
  14. const addDialog = (options: DialogOptions) => {
  15. const open = () =>
  16. dialogStore.value.push(Object.assign(options, { visible: true }));
  17. if (options?.openDelay) {
  18. useTimeoutFn(() => {
  19. open();
  20. }, options.openDelay);
  21. } else {
  22. open();
  23. }
  24. };
  25. /** 关闭弹框 */
  26. const closeDialog = (options: DialogOptions, index: number, args?: any) => {
  27. dialogStore.value.splice(index, 1);
  28. options.closeCallBack && options.closeCallBack({ options, index, args });
  29. };
  30. /**
  31. * @description 更改弹框自身属性值
  32. * @param value 属性值
  33. * @param key 属性,默认`title`
  34. * @param index 弹框索引(默认`0`,代表只有一个弹框,对于嵌套弹框要改哪个弹框的属性值就把该弹框索引赋给`index`)
  35. */
  36. const updateDialog = (value: any, key = "title", index = 0) => {
  37. dialogStore.value[index][key] = value;
  38. };
  39. /** 关闭所有弹框 */
  40. const closeAllDialog = () => {
  41. dialogStore.value = [];
  42. };
  43. /** 千万别忘了在下面这三处引入并注册下,放心注册,不使用`addDialog`调用就不会被挂载
  44. * https://github.com/pure-admin/vue-pure-admin/blob/main/src/App.vue#L4
  45. * https://github.com/pure-admin/vue-pure-admin/blob/main/src/App.vue#L13
  46. * https://github.com/pure-admin/vue-pure-admin/blob/main/src/App.vue#L18
  47. */
  48. const ReDialog = withInstall(reDialog);
  49. export type { EventType, ArgsType, DialogProps, ButtonProps, DialogOptions };
  50. export {
  51. ReDialog,
  52. dialogStore,
  53. addDialog,
  54. closeDialog,
  55. updateDialog,
  56. closeAllDialog
  57. };