feat(editor): 优化数据源字段选择器交互

This commit is contained in:
roymondchen 2024-07-02 13:02:21 +08:00
parent 882d222800
commit ef04fd31f0

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="m-editor-data-source-field-select"> <div class="m-editor-data-source-field-select">
<template v-if="checkStrictly">
<TMagicSelect <TMagicSelect
:model-value="selectDataSourceId" :model-value="selectDataSourceId"
clearable clearable
@ -40,6 +41,21 @@
}" }"
@change="fieldChangeHandler" @change="fieldChangeHandler"
></TMagicCascader> ></TMagicCascader>
</template>
<TMagicCascader
v-else
clearable
filterable
:model-value="modelValue"
:disabled="disabled"
:size="size"
:options="cascaderOptions"
:props="{
checkStrictly,
}"
@change="onChangeHandler"
></TMagicCascader>
<TMagicButton <TMagicButton
v-if="selectDataSourceId && hasDataSourceSidePanel" v-if="selectDataSourceId && hasDataSourceSidePanel"
@ -132,6 +148,16 @@ const fieldsOptions = computed(() => {
return getCascaderOptionsFromFields(ds.fields, props.dataSourceFieldType); return getCascaderOptionsFromFields(ds.fields, props.dataSourceFieldType);
}); });
const cascaderOptions = computed(() => {
const options =
dataSources.value?.map((ds) => ({
label: ds.title || ds.id,
value: valueIsKey.value ? ds.id : `${DATA_SOURCE_FIELDS_SELECT_VALUE_PREFIX}${ds.id}`,
children: getCascaderOptionsFromFields(ds.fields, props.dataSourceFieldType),
})) || [];
return options.filter((option) => option.children.length);
});
const dsChangeHandler = (v: string) => { const dsChangeHandler = (v: string) => {
modelValue.value = [v]; modelValue.value = [v];
emit('change', modelValue.value); emit('change', modelValue.value);
@ -142,6 +168,11 @@ const fieldChangeHandler = (v: string[] = []) => {
emit('change', modelValue.value); emit('change', modelValue.value);
}; };
const onChangeHandler = (v: string[] = []) => {
modelValue.value = v;
emit('change', v);
};
const hasDataSourceSidePanel = computed(() => const hasDataSourceSidePanel = computed(() =>
(services?.uiService.get('sideBarItems') || []).find((item) => item.$key === SideItemKey.DATA_SOURCE), (services?.uiService.get('sideBarItems') || []).find((item) => item.$key === SideItemKey.DATA_SOURCE),
); );