mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2025-12-07 18:56:58 +08:00
refactor(editor): 新增数据源按钮封装成组件
This commit is contained in:
parent
a2a9556ab8
commit
70d730ca82
@ -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 CodeBlockList } from './layouts/sidebar/code-block/CodeBlockList.vue';
|
||||||
export { default as CodeBlockListPanel } from './layouts/sidebar/code-block/CodeBlockListPanel.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 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 PropsPanel } from './layouts/props-panel/PropsPanel.vue';
|
||||||
export { default as PropsFormPanel } from './layouts/props-panel/FormPanel.vue';
|
export { default as PropsFormPanel } from './layouts/props-panel/FormPanel.vue';
|
||||||
export { default as ToolButton } from './components/ToolButton.vue';
|
export { default as ToolButton } from './components/ToolButton.vue';
|
||||||
|
|||||||
@ -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>
|
||||||
@ -2,28 +2,13 @@
|
|||||||
<TMagicScrollbar class="data-source-list-panel m-editor-layer-panel">
|
<TMagicScrollbar class="data-source-list-panel m-editor-layer-panel">
|
||||||
<div class="search-wrapper">
|
<div class="search-wrapper">
|
||||||
<SearchInput @search="filterTextChangeHandler"></SearchInput>
|
<SearchInput @search="filterTextChangeHandler"></SearchInput>
|
||||||
<TMagicPopover
|
<DataSourceAddButton
|
||||||
v-if="editable"
|
v-if="editable"
|
||||||
placement="right"
|
add-button-text="新增"
|
||||||
trigger="hover"
|
:add-button-config="{ type: 'primary', size: 'small' }"
|
||||||
popper-class="data-source-list-panel-add-menu"
|
:datasource-type-list="datasourceTypeList"
|
||||||
:destroy-on-close="true"
|
@add="addHandler"
|
||||||
>
|
></DataSourceAddButton>
|
||||||
<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>
|
|
||||||
|
|
||||||
<slot name="data-source-panel-search"></slot>
|
<slot name="data-source-panel-search"></slot>
|
||||||
</div>
|
</div>
|
||||||
@ -63,15 +48,15 @@
|
|||||||
import { computed, inject, useTemplateRef, watch } from 'vue';
|
import { computed, inject, useTemplateRef, watch } from 'vue';
|
||||||
import { mergeWith } from 'lodash-es';
|
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 ContentMenu from '@editor/components/ContentMenu.vue';
|
||||||
import SearchInput from '@editor/components/SearchInput.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 { useDataSourceEdit } from '@editor/hooks/use-data-source-edit';
|
||||||
import { useServices } from '@editor/hooks/use-services';
|
import { useServices } from '@editor/hooks/use-services';
|
||||||
import type { CustomContentMenuFunction, DataSourceListSlots, EventBus, MenuButton, MenuComponent } from '@editor/type';
|
import type { CustomContentMenuFunction, DataSourceListSlots, EventBus, MenuButton, MenuComponent } from '@editor/type';
|
||||||
|
|
||||||
|
import DataSourceAddButton from './DataSourceAddButton.vue';
|
||||||
import DataSourceConfigPanel from './DataSourceConfigPanel.vue';
|
import DataSourceConfigPanel from './DataSourceConfigPanel.vue';
|
||||||
import DataSourceList from './DataSourceList.vue';
|
import DataSourceList from './DataSourceList.vue';
|
||||||
import { useContentMenu } from './useContentMenu';
|
import { useContentMenu } from './useContentMenu';
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user