django-vue3-admin-web/node_modules/vxe-pc-ui/es/drawer/index.js
2025-10-20 21:21:14 +08:00

66 lines
2.1 KiB
JavaScript

import { VxeUI } from '@vxe-ui/core';
import XEUtils from 'xe-utils';
import VxeDrawerComponent, { allActiveDrawers } from './src/drawer';
import { dynamicApp, dynamicStore, checkDynamic } from '../dynamics';
function handleDrawer(options) {
// 使用动态组件渲染动态弹框
checkDynamic();
return new Promise(resolve => {
if (options && options.id && allActiveDrawers.some(comp => comp.props.id === options.id)) {
resolve('exist');
}
else {
const _onHide = options.onHide;
const drawerOpts = Object.assign(options, {
key: XEUtils.uniqueId(),
modelValue: true,
onHide(params) {
const drawerList = dynamicStore.drawers;
if (_onHide) {
_onHide(params);
}
dynamicStore.drawers = drawerList.filter(item => item.key !== drawerOpts.key);
resolve(params.type);
}
});
dynamicStore.drawers.push(drawerOpts);
}
});
}
function getDrawer(id) {
return XEUtils.find(allActiveDrawers, $drawer => $drawer.props.id === id);
}
/**
* 全局关闭动态的活动窗口(只能用于关闭动态的创建的活动窗口)
* 如果传 id 则关闭指定的窗口
* 如果不传则关闭所有窗口
*/
function closeDrawer(id) {
const drawers = id ? [getDrawer(id)] : allActiveDrawers;
const restPromises = [];
drawers.forEach($drawer => {
if ($drawer) {
restPromises.push($drawer.close());
}
});
return Promise.all(restPromises);
}
function openDrawer(options) {
return handleDrawer(Object.assign({}, options));
}
export const DrawerController = {
get: getDrawer,
close: closeDrawer,
open: openDrawer
};
export const VxeDrawer = Object.assign(VxeDrawerComponent, {
install: function (app) {
app.component(VxeDrawerComponent.name, VxeDrawerComponent);
}
});
VxeUI.drawer = DrawerController;
dynamicApp.use(VxeDrawer);
VxeUI.component(VxeDrawerComponent);
export const Drawer = VxeDrawer;
export default VxeDrawer;