dialog_form.vue
1.62 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
/**
* 封装内容显示为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 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);
}
</script>
<template>
<Dialog :dialogInfo="dialogInfo" @btnClick="formDialogBtnClick" @radioGroupChange="formDialogRadioGroupChange"
@select-change="formDialogSelectChange" />
</template>