|
@@ -1,9 +1,9 @@
|
|
|
-<script setup lang="ts">
|
|
|
-import { DialogState, dialogStore } from "./index";
|
|
|
+<script setup lang="tsx">
|
|
|
+import { dialogKeyType, DialogState, dialogStore } from "./index";
|
|
|
import { ElButton } from "element-plus";
|
|
|
import XEUtils from "xe-utils";
|
|
|
import sleep from "@/utils/sleep";
|
|
|
-import { nextTick } from "vue";
|
|
|
+import { nextTick, renderSlot } from "vue";
|
|
|
|
|
|
function next(item: DialogState, data: any) {
|
|
|
if (item.closeValue === "confirm") {
|
|
@@ -52,29 +52,42 @@ async function closed(item: DialogState, index: number) {
|
|
|
function setRef(el, item) {
|
|
|
item.componentRef = el;
|
|
|
}
|
|
|
+
|
|
|
+const ConfigProvider = defineComponent({
|
|
|
+ props: {
|
|
|
+ item: Object,
|
|
|
+ },
|
|
|
+ setup(props, { slots }) {
|
|
|
+ provide(dialogKeyType, props.item);
|
|
|
+ return () => renderSlot(slots, "default");
|
|
|
+ },
|
|
|
+});
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
|
<el-dialog
|
|
|
v-for="(item, index) in dialogStore"
|
|
|
:key="`Cy-dialog_${item.dialogKey}`"
|
|
|
+ :style="{ '--el-dialog-border-radius': '14px' }"
|
|
|
v-model="item.visible"
|
|
|
draggable
|
|
|
v-bind="item.dialogProps"
|
|
|
@closed="closed(item, index)"
|
|
|
>
|
|
|
- <component
|
|
|
- :is="item.component"
|
|
|
- :ref="el => setRef(el, item)"
|
|
|
- v-bind="item.params"
|
|
|
- @cyDialogCancel="
|
|
|
- (value: any, isEmits = true) => handleCancel(item, isEmits, value)
|
|
|
- "
|
|
|
- @cyDialogConfirm="
|
|
|
- (value: any, isEmits = true) => handleConfirm(item, isEmits, value)
|
|
|
- "
|
|
|
- :cyDialog="item"
|
|
|
- />
|
|
|
+ <ConfigProvider :item="item">
|
|
|
+ <component
|
|
|
+ :is="item.component"
|
|
|
+ :ref="el => setRef(el, item)"
|
|
|
+ v-bind="item.params"
|
|
|
+ @cyDialogCancel="
|
|
|
+ (value: any, isEmits = true) => handleCancel(item, isEmits, value)
|
|
|
+ "
|
|
|
+ @cyDialogConfirm="
|
|
|
+ (value: any, isEmits = true) => handleConfirm(item, isEmits, value)
|
|
|
+ "
|
|
|
+ :cyDialog="item"
|
|
|
+ />
|
|
|
+ </ConfigProvider>
|
|
|
<template #footer v-if="item.showFooter">
|
|
|
<el-button
|
|
|
size="default"
|