mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2025-04-06 03:57:56 +08:00
feat(editor): 新增已选组件、代码编辑、数据源及其子节点增量缩进配置
This commit is contained in:
parent
34fc0a15b9
commit
47a21d6544
@ -16,7 +16,13 @@
|
|||||||
|
|
||||||
<template #sidebar>
|
<template #sidebar>
|
||||||
<slot name="sidebar" :editorService="editorService">
|
<slot name="sidebar" :editorService="editorService">
|
||||||
<Sidebar :data="sidebar" :layer-content-menu="layerContentMenu" :custom-content-menu="customContentMenu">
|
<Sidebar
|
||||||
|
:data="sidebar"
|
||||||
|
:layer-content-menu="layerContentMenu"
|
||||||
|
:custom-content-menu="customContentMenu"
|
||||||
|
:indent="indent"
|
||||||
|
:next-level-indent-increment="nextLevelIndentIncrement"
|
||||||
|
>
|
||||||
<template #layer-panel-header>
|
<template #layer-panel-header>
|
||||||
<slot name="layer-panel-header"></slot>
|
<slot name="layer-panel-header"></slot>
|
||||||
</template>
|
</template>
|
||||||
|
@ -1,7 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="m-editor-tree" @dragover="handleDragOver">
|
<div class="m-editor-tree" @dragover="handleDragOver">
|
||||||
<template v-if="data?.length">
|
<template v-if="data?.length">
|
||||||
<TreeNode v-for="item in data" :key="item.id" :data="item" :indent="indent" :node-status-map="nodeStatusMap">
|
<TreeNode
|
||||||
|
v-for="item in data"
|
||||||
|
:key="item.id"
|
||||||
|
:data="item"
|
||||||
|
:indent="indent"
|
||||||
|
:next-level-indent-increment="nextLevelIndentIncrement"
|
||||||
|
:node-status-map="nodeStatusMap"
|
||||||
|
>
|
||||||
<template #tree-node-content="{ data: nodeData }">
|
<template #tree-node-content="{ data: nodeData }">
|
||||||
<slot name="tree-node-content" :data="nodeData"> </slot>
|
<slot name="tree-node-content" :data="nodeData"> </slot>
|
||||||
</template>
|
</template>
|
||||||
@ -57,6 +64,7 @@ withDefaults(
|
|||||||
data: TreeNodeData[];
|
data: TreeNodeData[];
|
||||||
nodeStatusMap: Map<Id, LayerNodeStatus>;
|
nodeStatusMap: Map<Id, LayerNodeStatus>;
|
||||||
indent?: number;
|
indent?: number;
|
||||||
|
nextLevelIndentIncrement?: number;
|
||||||
emptyText?: string;
|
emptyText?: string;
|
||||||
}>(),
|
}>(),
|
||||||
{
|
{
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
:parent="data"
|
:parent="data"
|
||||||
:parentsId="[...parentsId, data.id]"
|
:parentsId="[...parentsId, data.id]"
|
||||||
:node-status-map="nodeStatusMap"
|
:node-status-map="nodeStatusMap"
|
||||||
:indent="indent + 11"
|
:indent="indent + nextLevelIndentIncrement"
|
||||||
>
|
>
|
||||||
<template #tree-node-content="{ data: nodeData }">
|
<template #tree-node-content="{ data: nodeData }">
|
||||||
<slot name="tree-node-content" :data="nodeData"> </slot>
|
<slot name="tree-node-content" :data="nodeData"> </slot>
|
||||||
@ -99,9 +99,11 @@ const props = withDefaults(
|
|||||||
parentsId?: Id[];
|
parentsId?: Id[];
|
||||||
nodeStatusMap: Map<Id, LayerNodeStatus>;
|
nodeStatusMap: Map<Id, LayerNodeStatus>;
|
||||||
indent?: number;
|
indent?: number;
|
||||||
|
nextLevelIndentIncrement?: number;
|
||||||
}>(),
|
}>(),
|
||||||
{
|
{
|
||||||
indent: 0,
|
indent: 0,
|
||||||
|
nextLevelIndentIncrement: 11,
|
||||||
parentsId: () => [],
|
parentsId: () => [],
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
@ -80,6 +80,10 @@ export interface EditorProps {
|
|||||||
disabledStageOverlay?: boolean;
|
disabledStageOverlay?: boolean;
|
||||||
/** 禁用属性配置面板右下角显示源码的按钮 */
|
/** 禁用属性配置面板右下角显示源码的按钮 */
|
||||||
disabledShowSrc?: boolean;
|
disabledShowSrc?: boolean;
|
||||||
|
/** 已选组件、代码编辑、数据源缩进配置 */
|
||||||
|
indent?: number;
|
||||||
|
/** 已选组件、代码编辑、数据源子节点缩进增量配置 */
|
||||||
|
nextLevelIndentIncrement?: number;
|
||||||
/** 中间工作区域中画布渲染的内容 */
|
/** 中间工作区域中画布渲染的内容 */
|
||||||
render?: (stage: StageCore) => HTMLDivElement | void | Promise<HTMLDivElement | void>;
|
render?: (stage: StageCore) => HTMLDivElement | void | Promise<HTMLDivElement | void>;
|
||||||
/** 选中时会在画布上复制出一个大小相同的dom,实际拖拽的是这个dom,此方法用于干预这个dom的生成方式 */
|
/** 选中时会在画布上复制出一个大小相同的dom,实际拖拽的是这个dom,此方法用于干预这个dom的生成方式 */
|
||||||
|
@ -182,6 +182,8 @@ const props = withDefaults(
|
|||||||
defineProps<{
|
defineProps<{
|
||||||
data: SideBarData;
|
data: SideBarData;
|
||||||
layerContentMenu: (MenuButton | MenuComponent)[];
|
layerContentMenu: (MenuButton | MenuComponent)[];
|
||||||
|
indent?: number;
|
||||||
|
nextLevelIndentIncrement?: number;
|
||||||
customContentMenu?: (menus: (MenuButton | MenuComponent)[], type: string) => (MenuButton | MenuComponent)[];
|
customContentMenu?: (menus: (MenuButton | MenuComponent)[], type: string) => (MenuButton | MenuComponent)[];
|
||||||
}>(),
|
}>(),
|
||||||
{
|
{
|
||||||
@ -234,6 +236,8 @@ const getItemConfig = (data: SideItem): SideComponent => {
|
|||||||
props: {
|
props: {
|
||||||
layerContentMenu: props.layerContentMenu,
|
layerContentMenu: props.layerContentMenu,
|
||||||
customContentMenu: props.customContentMenu,
|
customContentMenu: props.customContentMenu,
|
||||||
|
indent: props.indent,
|
||||||
|
nextLevelIndentIncrement: props.nextLevelIndentIncrement,
|
||||||
},
|
},
|
||||||
component: LayerPanel,
|
component: LayerPanel,
|
||||||
slots: {},
|
slots: {},
|
||||||
@ -244,6 +248,10 @@ const getItemConfig = (data: SideItem): SideComponent => {
|
|||||||
icon: EditPen,
|
icon: EditPen,
|
||||||
text: '代码编辑',
|
text: '代码编辑',
|
||||||
component: CodeBlockListPanel,
|
component: CodeBlockListPanel,
|
||||||
|
props: {
|
||||||
|
indent: props.indent,
|
||||||
|
nextLevelIndentIncrement: props.nextLevelIndentIncrement,
|
||||||
|
},
|
||||||
slots: {},
|
slots: {},
|
||||||
},
|
},
|
||||||
[SideItemKey.DATA_SOURCE]: {
|
[SideItemKey.DATA_SOURCE]: {
|
||||||
@ -252,6 +260,10 @@ const getItemConfig = (data: SideItem): SideComponent => {
|
|||||||
icon: Coin,
|
icon: Coin,
|
||||||
text: '数据源',
|
text: '数据源',
|
||||||
component: DataSourceListPanel,
|
component: DataSourceListPanel,
|
||||||
|
props: {
|
||||||
|
indent: props.indent,
|
||||||
|
nextLevelIndentIncrement: props.nextLevelIndentIncrement,
|
||||||
|
},
|
||||||
slots: {},
|
slots: {},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
<template>
|
<template>
|
||||||
<Tree :data="codeList" :node-status-map="nodeStatusMap" @node-click="clickHandler">
|
<Tree
|
||||||
|
:data="codeList"
|
||||||
|
:node-status-map="nodeStatusMap"
|
||||||
|
:indent="indent"
|
||||||
|
:next-level-indent-increment="nextLevelIndentIncrement"
|
||||||
|
@node-click="clickHandler"
|
||||||
|
>
|
||||||
<template #tree-node-label="{ data }">
|
<template #tree-node-label="{ data }">
|
||||||
<div
|
<div
|
||||||
:class="{
|
:class="{
|
||||||
@ -45,6 +51,8 @@ defineOptions({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
|
indent?: number;
|
||||||
|
nextLevelIndentIncrement?: number;
|
||||||
customError?: (id: Id, errorType: CodeDeleteErrorType) => any;
|
customError?: (id: Id, errorType: CodeDeleteErrorType) => any;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
|
@ -11,7 +11,14 @@
|
|||||||
</slot>
|
</slot>
|
||||||
|
|
||||||
<!-- 代码块列表 -->
|
<!-- 代码块列表 -->
|
||||||
<CodeBlockList ref="codeBlockList" :custom-error="customError" @edit="editCode" @remove="deleteCode">
|
<CodeBlockList
|
||||||
|
ref="codeBlockList"
|
||||||
|
:custom-error="customError"
|
||||||
|
:indent="indent"
|
||||||
|
:next-level-indent-increment="nextLevelIndentIncrement"
|
||||||
|
@edit="editCode"
|
||||||
|
@remove="deleteCode"
|
||||||
|
>
|
||||||
<template #code-block-panel-tool="{ id, data }">
|
<template #code-block-panel-tool="{ id, data }">
|
||||||
<slot name="code-block-panel-tool" :id="id" :data="data"></slot>
|
<slot name="code-block-panel-tool" :id="id" :data="data"></slot>
|
||||||
</template>
|
</template>
|
||||||
@ -47,6 +54,8 @@ defineOptions({
|
|||||||
});
|
});
|
||||||
|
|
||||||
defineProps<{
|
defineProps<{
|
||||||
|
indent?: number;
|
||||||
|
nextLevelIndentIncrement?: number;
|
||||||
customError?: (id: Id, errorType: CodeDeleteErrorType) => any;
|
customError?: (id: Id, errorType: CodeDeleteErrorType) => any;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
<template>
|
<template>
|
||||||
<Tree :data="list" :node-status-map="nodeStatusMap" @node-click="clickHandler">
|
<Tree
|
||||||
|
:data="list"
|
||||||
|
:node-status-map="nodeStatusMap"
|
||||||
|
:indent="indent"
|
||||||
|
:next-level-indent-increment="nextLevelIndentIncrement"
|
||||||
|
@node-click="clickHandler"
|
||||||
|
>
|
||||||
<template #tree-node-label="{ data }">
|
<template #tree-node-label="{ data }">
|
||||||
<div
|
<div
|
||||||
:class="{
|
:class="{
|
||||||
@ -42,6 +48,11 @@ defineOptions({
|
|||||||
name: 'MEditorDataSourceList',
|
name: 'MEditorDataSourceList',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
defineProps<{
|
||||||
|
indent?: number;
|
||||||
|
nextLevelIndentIncrement?: number;
|
||||||
|
}>();
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
edit: [id: string];
|
edit: [id: string];
|
||||||
remove: [id: string];
|
remove: [id: string];
|
||||||
|
@ -29,7 +29,13 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 数据源列表 -->
|
<!-- 数据源列表 -->
|
||||||
<DataSourceList ref="dataSourceList" @edit="editHandler" @remove="removeHandler"></DataSourceList>
|
<DataSourceList
|
||||||
|
ref="dataSourceList"
|
||||||
|
:indent="indent"
|
||||||
|
:next-level-indent-increment="nextLevelIndentIncrement"
|
||||||
|
@edit="editHandler"
|
||||||
|
@remove="removeHandler"
|
||||||
|
></DataSourceList>
|
||||||
</TMagicScrollbar>
|
</TMagicScrollbar>
|
||||||
|
|
||||||
<DataSourceConfigPanel
|
<DataSourceConfigPanel
|
||||||
@ -61,6 +67,11 @@ defineOptions({
|
|||||||
name: 'MEditorDataSourceListPanel',
|
name: 'MEditorDataSourceListPanel',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
defineProps<{
|
||||||
|
indent?: number;
|
||||||
|
nextLevelIndentIncrement?: number;
|
||||||
|
}>();
|
||||||
|
|
||||||
const eventBus = inject<EventBus>('eventBus');
|
const eventBus = inject<EventBus>('eventBus');
|
||||||
const { dataSourceService } = inject<Services>('services') || {};
|
const { dataSourceService } = inject<Services>('services') || {};
|
||||||
|
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
ref="tree"
|
ref="tree"
|
||||||
:data="nodeData"
|
:data="nodeData"
|
||||||
:node-status-map="nodeStatusMap"
|
:node-status-map="nodeStatusMap"
|
||||||
|
:indent="indent"
|
||||||
|
:next-level-indent-increment="nextLevelIndentIncrement"
|
||||||
@node-dragover="handleDragOver"
|
@node-dragover="handleDragOver"
|
||||||
@node-dragstart="handleDragStart"
|
@node-dragstart="handleDragStart"
|
||||||
@node-dragleave="handleDragLeave"
|
@node-dragleave="handleDragLeave"
|
||||||
@ -70,6 +72,8 @@ defineOptions({
|
|||||||
|
|
||||||
defineProps<{
|
defineProps<{
|
||||||
layerContentMenu: (MenuButton | MenuComponent)[];
|
layerContentMenu: (MenuButton | MenuComponent)[];
|
||||||
|
indent?: number;
|
||||||
|
nextLevelIndentIncrement?: number;
|
||||||
customContentMenu?: (menus: (MenuButton | MenuComponent)[], type: string) => (MenuButton | MenuComponent)[];
|
customContentMenu?: (menus: (MenuButton | MenuComponent)[], type: string) => (MenuButton | MenuComponent)[];
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user