mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-04 07:27:41 +08:00
65 lines
1.6 KiB
TypeScript
65 lines
1.6 KiB
TypeScript
import { ref } from "vue";
|
||
import reDrawer from "./index.vue";
|
||
import { useTimeoutFn } from "@vueuse/core";
|
||
import { withInstall } from "@pureadmin/utils";
|
||
import type {
|
||
EventType,
|
||
ArgsType,
|
||
DrawerProps,
|
||
DrawerOptions,
|
||
ButtonProps
|
||
} from "./type";
|
||
|
||
const drawerStore = ref<Array<DrawerOptions>>([]);
|
||
|
||
/** 打开抽屉 */
|
||
const addDrawer = (options: DrawerOptions) => {
|
||
const open = () =>
|
||
drawerStore.value.push(Object.assign(options, { visible: true }));
|
||
if (options?.openDelay) {
|
||
useTimeoutFn(() => {
|
||
open();
|
||
}, options.openDelay);
|
||
} else {
|
||
open();
|
||
}
|
||
};
|
||
|
||
/** 关闭抽屉 */
|
||
const closeDrawer = (options: DrawerOptions, index: number, args?: any) => {
|
||
drawerStore.value[index].visible = false;
|
||
options.closeCallBack && options.closeCallBack({ options, index, args });
|
||
|
||
const closeDelay = options?.closeDelay ?? 200;
|
||
useTimeoutFn(() => {
|
||
drawerStore.value.splice(index, 1);
|
||
}, closeDelay);
|
||
};
|
||
|
||
/**
|
||
* @description 更改抽屉自身属性值
|
||
* @param value 属性值
|
||
* @param key 属性,默认`title`
|
||
* @param index 弹框索引(默认`0`,代表只有一个弹框,对于嵌套弹框要改哪个弹框的属性值就把该弹框索引赋给`index`)
|
||
*/
|
||
const updateDrawer = (value: any, key = "title", index = 0) => {
|
||
drawerStore.value[index][key] = value;
|
||
};
|
||
|
||
/** 关闭所有弹框 */
|
||
const closeAllDrawer = () => {
|
||
drawerStore.value = [];
|
||
};
|
||
|
||
const ReDrawer = withInstall(reDrawer);
|
||
|
||
export type { EventType, ArgsType, DrawerOptions, DrawerProps, ButtonProps };
|
||
export {
|
||
ReDrawer,
|
||
drawerStore,
|
||
addDrawer,
|
||
closeDrawer,
|
||
updateDrawer,
|
||
closeAllDrawer
|
||
};
|