refactor(editor): 新增数据源按钮封装成组件

This commit is contained in:
roymondchen 2025-12-04 17:31:38 +08:00
parent a2a9556ab8
commit 70d730ca82
3 changed files with 55 additions and 23 deletions

View File

@ -92,6 +92,7 @@ export { default as KeyValue } from './fields/KeyValue.vue';
export { default as CodeBlockList } from './layouts/sidebar/code-block/CodeBlockList.vue';
export { default as CodeBlockListPanel } from './layouts/sidebar/code-block/CodeBlockListPanel.vue';
export { default as DataSourceConfigPanel } from './layouts/sidebar/data-source/DataSourceConfigPanel.vue';
export { default as DataSourceAddButton } from './layouts/sidebar/data-source/DataSourceAddButton.vue';
export { default as PropsPanel } from './layouts/props-panel/PropsPanel.vue';
export { default as PropsFormPanel } from './layouts/props-panel/FormPanel.vue';
export { default as ToolButton } from './components/ToolButton.vue';

View File

@ -0,0 +1,46 @@
<template>
<TMagicPopover
placement="right"
trigger="hover"
popper-class="data-source-list-panel-add-menu"
:destroy-on-close="true"
>
<template #reference>
<TMagicButton v-bind="addButtonConfig || {}">{{ addButtonText || '' }}</TMagicButton>
</template>
<ToolButton
v-for="(item, index) in datasourceTypeList"
:data="{
type: 'button',
text: item.text,
handler: () => {
$emit('add', item.type);
},
}"
:key="index"
></ToolButton>
</TMagicPopover>
</template>
<script setup lang="ts">
import { type ButtonProps, TMagicButton, TMagicPopover } from '@tmagic/design';
import ToolButton from '@editor/components/ToolButton.vue';
defineOptions({
name: 'MEditorDataSourceAddButton',
});
defineProps<{
datasourceTypeList: {
text: string;
type: string;
}[];
addButtonConfig?: ButtonProps;
addButtonText?: string;
}>();
defineEmits<{
add: [type: string];
}>();
</script>

View File

@ -2,28 +2,13 @@
<TMagicScrollbar class="data-source-list-panel m-editor-layer-panel">
<div class="search-wrapper">
<SearchInput @search="filterTextChangeHandler"></SearchInput>
<TMagicPopover
<DataSourceAddButton
v-if="editable"
placement="right"
trigger="hover"
popper-class="data-source-list-panel-add-menu"
:destroy-on-close="true"
>
<template #reference>
<TMagicButton type="primary" size="small">新增</TMagicButton>
</template>
<ToolButton
v-for="(item, index) in datasourceTypeList"
:data="{
type: 'button',
text: item.text,
handler: () => {
addHandler(item.type);
},
}"
:key="index"
></ToolButton>
</TMagicPopover>
add-button-text="新增"
:add-button-config="{ type: 'primary', size: 'small' }"
:datasource-type-list="datasourceTypeList"
@add="addHandler"
></DataSourceAddButton>
<slot name="data-source-panel-search"></slot>
</div>
@ -63,15 +48,15 @@
import { computed, inject, useTemplateRef, watch } from 'vue';
import { mergeWith } from 'lodash-es';
import { TMagicButton, tMagicMessageBox, TMagicPopover, TMagicScrollbar } from '@tmagic/design';
import { tMagicMessageBox, TMagicScrollbar } from '@tmagic/design';
import ContentMenu from '@editor/components/ContentMenu.vue';
import SearchInput from '@editor/components/SearchInput.vue';
import ToolButton from '@editor/components/ToolButton.vue';
import { useDataSourceEdit } from '@editor/hooks/use-data-source-edit';
import { useServices } from '@editor/hooks/use-services';
import type { CustomContentMenuFunction, DataSourceListSlots, EventBus, MenuButton, MenuComponent } from '@editor/type';
import DataSourceAddButton from './DataSourceAddButton.vue';
import DataSourceConfigPanel from './DataSourceConfigPanel.vue';
import DataSourceList from './DataSourceList.vue';
import { useContentMenu } from './useContentMenu';