fix(editor): 新增数据源时,设置初始值

This commit is contained in:
roymondchen 2023-09-14 20:33:11 +08:00
parent 7a617d4a17
commit 75b0d9cdf3
3 changed files with 18 additions and 38 deletions

View File

@ -93,12 +93,6 @@ export default {
default: () => ({}),
},
/** 组件的属性配置表单的dsl */
datasourceConfigs: {
type: Object as PropType<Record<string, FormConfig>>,
default: () => ({}),
},
/** 添加数据源时的默认值 */
datasourceValues: {
type: Object as PropType<Record<string, Partial<DataSourceSchema>>>,
@ -106,7 +100,7 @@ export default {
},
/** 数据源的属性配置表单的dsl */
dataScourceConfigs: {
datasourceConfigs: {
type: Object as PropType<Record<string, FormConfig>>,
default: () => ({}),
},

View File

@ -8,7 +8,6 @@
:config="dataSourceConfig"
:values="initValues"
:disabled="disabled"
@change="changeHandler"
@submit="submitHandler"
@error="errorHandler"
></MFormDrawer>
@ -16,10 +15,10 @@
<script setup lang="ts">
import { computed, inject, ref, watchEffect } from 'vue';
import { cloneDeep, mergeWith } from 'lodash-es';
import { tMagicMessage } from '@tmagic/design';
import { MFormDrawer } from '@tmagic/form';
import { FormConfig, MFormDrawer } from '@tmagic/form';
import { DataSourceSchema } from '@tmagic/schema';
import type { Services } from '@editor/type';
@ -33,42 +32,22 @@ const props = defineProps<{
disabled: boolean;
}>();
const type = ref('base');
const emit = defineEmits(['submit']);
const services = inject<Services>('services');
const size = computed(() => globalThis.document.body.clientWidth - (services?.uiService.get('columnWidth').left || 0));
const dataSourceConfig = computed(() => services?.dataSourceService.getFormConfig(type.value) || []);
const fomDrawer = ref<InstanceType<typeof MFormDrawer>>();
const initValues = ref({});
const initValues = ref<Partial<DataSourceSchema>>({});
const dataSourceConfig = ref<FormConfig>([]);
watchEffect(() => {
initValues.value = props.values;
type.value = props.values.type || 'base';
dataSourceConfig.value = services?.dataSourceService.getFormConfig(initValues.value.type) || [];
});
const changeHandler = (value: Record<string, any>) => {
if (value.type === type.value) {
return;
}
type.value = value.type || 'base';
initValues.value = mergeWith(
cloneDeep(value),
services?.dataSourceService.getFormValue(type.value) || {},
(objValue, srcValue) => {
if (Array.isArray(srcValue)) {
return srcValue;
}
},
);
};
const submitHandler = (values: any) => {
emit('submit', values);
};

View File

@ -35,8 +35,9 @@
</TMagicScrollbar>
</template>
<script setup lang="ts" name="MEditorDataSourceListPanel">
<script setup lang="ts">
import { computed, inject, ref } from 'vue';
import { mergeWith } from 'lodash-es';
import { TMagicButton, TMagicPopover, TMagicScrollbar } from '@tmagic/design';
import type { DataSourceSchema } from '@tmagic/schema';
@ -71,12 +72,18 @@ const datasourceTypeList = computed(() =>
const addHandler = (type: string) => {
if (!editDialog.value) return;
dataSourceValues.value = {
type,
};
const datasourceType = datasourceTypeList.value.find((item) => item.type === type);
dataSourceValues.value = mergeWith(
{ type, title: datasourceType?.text },
dataSourceService?.getFormValue(type) || {},
(objValue, srcValue) => {
if (Array.isArray(srcValue)) {
return srcValue;
}
},
);
dialogTitle.value = `新增${datasourceType?.text || ''}`;
editDialog.value.show();