mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2026-08-13 00:08:39 +00:00
71 lines
1.6 KiB
Vue
71 lines
1.6 KiB
Vue
<template>
|
|
<component
|
|
:is="slideType === 'box' ? MFormBox : MFormDrawer"
|
|
ref="fomDrawer"
|
|
label-width="80px"
|
|
:close-on-press-escape="false"
|
|
:title="title"
|
|
:width="size"
|
|
:config="dataSourceConfig"
|
|
:values="initValues"
|
|
:disabled="disabled"
|
|
@submit="submitHandler"
|
|
@error="errorHandler"
|
|
></component>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { computed, inject, ref, watchEffect } from 'vue';
|
|
|
|
import { tMagicMessage } from '@tmagic/design';
|
|
import { FormConfig, MFormBox, MFormDrawer } from '@tmagic/form';
|
|
import { DataSourceSchema } from '@tmagic/schema';
|
|
|
|
import type { Services, SlideType } from '@editor/type';
|
|
|
|
defineOptions({
|
|
name: 'MEditorDataSourceConfigPanel',
|
|
});
|
|
|
|
const props = defineProps<{
|
|
title?: string;
|
|
values: any;
|
|
disabled: boolean;
|
|
slideType?: SlideType;
|
|
}>();
|
|
|
|
const emit = defineEmits(['submit']);
|
|
|
|
const services = inject<Services>('services');
|
|
|
|
const size = computed(() => globalThis.document.body.clientWidth - (services?.uiService.get('columnWidth').left || 0));
|
|
|
|
const fomDrawer = ref<InstanceType<typeof MFormDrawer>>();
|
|
|
|
const initValues = ref<Partial<DataSourceSchema>>({});
|
|
const dataSourceConfig = ref<FormConfig>([]);
|
|
|
|
watchEffect(() => {
|
|
initValues.value = props.values;
|
|
dataSourceConfig.value = services?.dataSourceService.getFormConfig(initValues.value.type) || [];
|
|
});
|
|
|
|
const submitHandler = (values: any) => {
|
|
emit('submit', values);
|
|
};
|
|
|
|
const errorHandler = (error: any) => {
|
|
tMagicMessage.error(error.message);
|
|
};
|
|
|
|
defineExpose({
|
|
show() {
|
|
fomDrawer.value?.show();
|
|
},
|
|
|
|
hide() {
|
|
fomDrawer.value?.hide();
|
|
},
|
|
});
|
|
</script>
|