dialog_form.vue
1.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/**
* 封装内容显示为form的对话框,外部只需传入form相关的配置,以及对话框尺寸标题等即可。
*/
<script lang="ts" setup name="Dialog_form">
import { ref } from 'vue';
const emits = defineEmits(["formDialogBtnClick", "formDialogSelectChange", "formDialogRadioGroupChange"]);
/** { visible: false, size: number, title: string, submitBtnLoading: false, formInfo: { id: xx, items: xx, rules:xx }, btns: { 'cancel': xx, } } */
const props = defineProps({
dialogConfigInfo: {
type: Object,
default: {},
},
});
const dialogRef = ref();
const dialogInfo = computed(() => {
return {
visible: props.dialogConfigInfo.visible,
size: props.dialogConfigInfo.size,
direction: "column",
header: {
title: props.dialogConfigInfo.title,
},
contents: [
{
type: 'form',
title: '',
formInfo: props.dialogConfigInfo.formInfo
}
],
footer: {
btns: [
{ type: "default", label: "取消", value: "cancel" },
{ type: "primary", label: "确定", value: "submit", loading: props.dialogConfigInfo.submitBtnLoading ?? false },
],
},
}
})
const formDialogBtnClick = (btn, info) => {
props.dialogConfigInfo.btns[btn.value]?.(btn, info);
};
const formDialogRadioGroupChange = (val, row, item) => {
emits('formDialogRadioGroupChange', val, row, item);
}
const formDialogSelectChange = (val, item, row) => {
emits('formDialogSelectChange', val, row, item);
}
defineExpose({
dialogRef,
});
</script>
<template>
<Dialog ref="dialogRef" :dialogInfo="dialogInfo" @btnClick="formDialogBtnClick"
@radioGroupChange="formDialogRadioGroupChange" @select-change="formDialogSelectChange">
<!-- 默认插槽内容 -->
<slot></slot>
</Dialog>
</template>