2023-12-22 00:47:01 +08:00
|
|
|
|
import { VNode, h, render } from 'vue';
|
|
|
|
|
|
import MonacoEditorDialogComp from './MonacoEditorDialogComp.vue';
|
|
|
|
|
|
|
|
|
|
|
|
export type MonacoEditorDialogProps = {
|
|
|
|
|
|
content: string;
|
|
|
|
|
|
title: string;
|
|
|
|
|
|
language: string;
|
|
|
|
|
|
height?: string;
|
|
|
|
|
|
width?: string;
|
2023-12-22 12:29:46 +08:00
|
|
|
|
confirmFn?: Function; // 点击确认的回调函数,入参editor value
|
|
|
|
|
|
cancelFn?: Function; // 点击取消 或 关闭弹窗的回调函数
|
2023-12-22 00:47:01 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const boxId = 'monaco-editor-dialog-id';
|
|
|
|
|
|
|
|
|
|
|
|
let boxInstance: VNode;
|
|
|
|
|
|
|
|
|
|
|
|
const MonacoEditorDialog = (props: MonacoEditorDialogProps): void => {
|
|
|
|
|
|
if (!boxInstance) {
|
|
|
|
|
|
const container = document.createElement('div');
|
|
|
|
|
|
container.id = boxId;
|
|
|
|
|
|
// 创建 虚拟dom
|
|
|
|
|
|
boxInstance = h(MonacoEditorDialogComp);
|
|
|
|
|
|
// 将虚拟dom渲染到 container dom 上
|
|
|
|
|
|
render(boxInstance, container);
|
|
|
|
|
|
// 最后将 container 追加到 body 上
|
|
|
|
|
|
document.body.appendChild(container);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const boxVue = boxInstance.component;
|
|
|
|
|
|
if (boxVue) {
|
|
|
|
|
|
// 调用open方法显示弹框,注意不能使用boxVue.ctx来调用组件函数(build打包后ctx会获取不到)
|
|
|
|
|
|
boxVue.exposed?.open(props);
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
export default MonacoEditorDialog;
|