Skip to content

CodeLayout

编辑器外壳布局组件。

Props

属性描述类型默认值
layoutConfig基础布局数据CodeLayoutConfig
langConfig组件内置语言数据定义CodeLayoutLangConfig
mainMenuConfig内置主菜单配置MenuOptions
emptyText组中没有面板时的空文本string'Drag a view here to display'
saveBeforeUnload是否应该在 window.beforeunload 时触发 canSaveLayout 事件booleantrue

Events

事件名描述参数
canLoadLayout组件加载时触发此事件,可在此事件中执行加载布局操作ref: CodeLayoutInstance
canSaveLayout组件卸载时触发此事件,可在此事件中执行加载保存操作ref: CodeLayoutInstance

Slots

插槽名描述参数
panelRender面板内容渲染核心位置{ panel: CodeLayoutPanelInternal, open: boolean }
titleBarIcon标题栏渲染图标位置-
titleBarMenu标题栏渲染主菜单位置-
titleBarCenter标题栏中心位置-
titleBarRight标题栏右侧位置-
activityBarTopBar主活动栏顶部-
activityBarBottom主活动栏底部-
activityBarSecondaryTopBar副活动栏顶部-
activityBarSecondarBottom副活动栏底部-
emptyGroup空组渲染插槽{ panel: CodeLayoutGridInternal }
centerArea中心区域,这里可以放置SliptLayout或者其他编辑器核心组件-
statusBar状态栏位置-
emptyGroup自定义渲染空组内容{ grid: CodeLayoutGrid }

CodeLayoutInstance

addGroup: (panel: CodeLayoutPanel, target: CodeLayoutGrid) => CodeLayoutPanelInternal

说明:

在顶级组下添加子组。

参数:

名称说明
panel要添加的组数据
target添加的目标根网格

返回值:

类型说明
CodeLayoutPanelInternal返回的组实例

removeGroup(panel: CodeLayoutPanelInternal): void

说明:

从顶级组下移除组。

参数:

名称说明
panel要移除的组数据

relayoutAll: () => void

说明:

强制重新布局所有组。

一般情况下向组中添加面板,会自动完成布局,但也可手动调用布局。

relayoutGroup(name: string): void

说明:

强制布局指定名称的组。

一般情况下向组中添加面板,会自动完成布局,但也可手动调用布局。

参数:

名称说明
name组名称

getRootGrid(target: CodeLayoutGrid): CodeLayoutGridInternal

说明:

获取指定的根组。

参数:

名称说明
target根组名称

返回值:

类型说明
CodeLayoutGridInternal返回的顶级组实例

getPanelByName(name: string): CodeLayoutPanelInternal | undefined

说明:

通过名称获取指定的面板。

参数:

名称说明
name面板名称

返回值:

类型说明
CodeLayoutPanelInternal or undefined找到的面板实例,如果在组件中未找到此面板,则返回undefined

clearLayout(): void

说明:

清空当前组件中的所有面板与组数据。

loadLayout(json: any, instantiatePanelCallback: (data: CodeLayoutPanel) => CodeLayoutPanel): void

说明:

加载布局数据,根据面板名称实例化面板。

注,由于保存布局数据仅保存每个布局的基础位置、大小等信息,并不包含无法序列化的信息(例如回调函数,图标),所以加载布局数据时需要在 instantiatePanelCallback 中,根据传入的面板名称填充这些数据。

ts
const data = localStorage.getItem('LayoutData');
if (data) {
  //If load layout from data, need fill panel data
  codeLayout.value.loadLayout(JSON.parse(data), (panel) => {
    switch (panel.name) {
      case 'explorer':
        panel.title = 'Explorer';
        panel.tooltip = 'Explorer';
        panel.badge = '2';
        panel.iconLarge = () => h(IconFile);
        break;
    }
    return panel;
  });
} else {
  //No data, create new layout
  //...
}

参数:

名称说明
jsonsaveLayout 返回的布局数据
instantiatePanelCallback实例化面板回调,传入参数为面板基础信息

saveLayout(): any

说明:

保存用户拖拽后的布局至JSON数据中,在下一次进入后可调用 loadLayout 重新从JSON数据加载恢复原布局。

注:一些基础布局数据(CodeLayoutConfig)需要调用此函数后才会同步至响应变量中,因此应该先调用此函数再保存基础布局数据。

返回值:

类型说明
object布局数据

CodeLayoutConfig

基础布局数据定义对象。

在创建对象时可以复制默认数据:

ts
import { defaultCodeLayoutConfig } from 'vue-code-layout';

const config = reactive<CodeLayoutConfig>({
  ...defaultCodeLayoutConfig,
  primarySideBarWidth: 40,
});
PropertyDescriptionTypeDefault
primarySideBarSwitchWithActivityBar
控制在活动栏中点击选中项目时,是否执行切换显示主侧栏的操作
booleantrue
primarySideBarPosition主侧栏的位置'left'│'right''left'
primarySideBarWidth主侧栏的大小(0-100,百分比)number20
primarySideBarMinWidth主侧栏的最小大小(像素)number170
secondarySideBarWidth辅助侧边栏的大小(0-100,百分比)number20
secondarySideBarMinWidth辅助侧边栏的最小大小(像素)number170
secondarySideBarAsActivityBar辅助侧边栏是否像主侧边栏一样显示为活动栏booleanfalse
bottomPanelHeight面板的大小(0-100,百分比)number30
bottomPanelMinHeight面板最小大小(像素)number40
bottomAlignment面板布局位置
  • left: 底部左对齐
  • center:底部居中
  • right:底部右对齐
  • justify:底部两端对齐
  • left-side:左侧
  • right-side:右侧
'left'│'center'│'right'│'justify'│'left-side'│'right-side''center'
activityBarPosition活动栏的布局位置
  • side: 左侧
  • top:顶部
  • hidden:隐藏
'side'│'top'│'hidden''side'
secondaryActivityBarPosition第二活动栏(当 secondarySideBarAsActivityBar 设置为 true)的布局位置
  • side: 左侧
  • top:顶部
  • hidden:隐藏
'side'│'top'│'hidden''side'
panelHeaderHeight面板标题的高度(像素)number24
panelMinHeight所有面板缩放最小高度(像素)number150
titleBar是否显示标题栏booleantrue
titleBarShowCustomizeLayout是否在标题栏顶部显示自定义布局弹窗booleantrue
activityBar是否显示活动栏booleantrue
primarySideBar是否显示主侧栏booleantrue
secondarySideBar是否显示辅助侧边栏booleanfalse
bottomPanel是否显示面板booleantrue
bottomPanelMaximize面板是否可以最大化booleantrue
statusBar是否显示状态栏booleantrue
menuBar是否显示菜单栏booleantrue
onResetDefault当用户在自定义布局弹窗中点击重置按钮时,触发此回调() => void-
onStartDrag当用户开始拖拽面板时,触发此回调,可以返回false,阻止用户拖动(panel: CodeLayoutPanelInternal) => boolean-
onEndDrag用户完成拖拽面板时触发此回调(panel: CodeLayoutPanelInternal) => void-
onDropToGrid当用户拖拽面板至一个根组时,触发此回调,可以返回false,阻止用户拖动(panel: CodeLayoutPanelInternal, grid: CodeLayoutGrid) => boolean-
onDropToPanel当用户拖拽面板至另一个面板时,触发此回调,可以返回false,阻止用户拖动(reference: CodeLayoutPanelInternal, referencePosition: CodeLayoutDragDropReferencePosition, panel: CodeLayoutPanelInternal, dropTo: string) => boolean-
onGridFirstDrop当用户拖拽面板至一个组时,触发此回调,可以自定义修改最终加入组的面板数据(grid: CodeLayoutGrid, panel: CodeLayoutPanelInternal) => CodeLayoutPanelInternal-
onNoAutoShinkTabGroup当设置了不收缩的TAB组尝试收缩时,会触发此回调(group: CodeLayoutPanelInternal) => void-
onNoAutoShinkNormalGroup当设置了不收缩的普通组尝试收缩时,会触发此回调(group: CodeLayoutPanelInternal) => void-

CodeLayoutLangConfig

基础语言定义对象。

属性描述类型默认值
lang指定组件使用的语言stringen
stringsOverride覆盖语言字符串Partial<CodeLayoutLangDefine>-

CodeLayoutPanelInternal

面板/组实例类定义。

由于组和面板使用同一个数据实例,一些属性和方法一不同的使用场景,标注(仅组中使用)仅可在作为组的实例中使用,请参照文档使用。

属性描述类型默认值
name面板名称,用于查找面板string-
title面板标题string-
tooltip面板的工具提示string-
badge面板的标记string-
open指定当前面板是否是打开状态booleanfalse
startOpen创建时指定当前面板是否处于打开状态booleanfalse
iconSmall面板小图标() => VNode-
iconLarge面板大图标(通常显示在活动栏)() => VNode-
resizeable指定当前面板是否可以调整大小booleantrue
visible指定当前面板是否显示booleantrue
showBadge指定当前面板的标记(badge)是否显示booleantrue
size当前面板的大小(像素),创建时指定为0将由组件自动分配大小number0
parentGroup获取当前面板的父级组CodeLayoutPanelInternal-
parentGrid获取当前面板所属的顶级组CodeLayoutGrid-
accept设置当前面板可以拖放到哪些顶级网格上CodeLayoutGrid[]-
noHide是否禁止用户对当前面板做出隐藏操作booleanfalse
noAutoShink是否禁止自动收缩当前网格(仅组有效)booleanfalse
actions当前面板的自定义操作CodeLayoutActionButton[]false
data面板的自定义数据any-

addPanel(panel: CodeLayoutPanel, startOpen = false): CodeLayoutPanelInternal

说明:

(仅组中使用)向当前组添加子面板。

参数:

名称说明
panel面板数据
startOpen添加时是否是打开状态

返回值:

子面板实例。

removePanel(panel: CodeLayoutPanel, shrink = false): CodeLayoutPanelInternal

说明:

(仅组中使用)向当前组移除子面板。

参数:

名称说明
panel面板实例
shrink是否执行收缩操作

openPanel(closeOthers = true): void

说明:

打开自己面板。

参数:

名称说明
closeOthers打开自己时,是否同时关闭同级的其他面板

closePanel(): void

说明:

关闭自己面板。

togglePanel(): void

说明:

切换自己面板的打开状态。

removeSelfWithShrink(): void

说明:

从父级移除自己并且触发自动收缩。

removeSelf(): void

说明:

从父级移除自己。

reselectActiveChild(): void

说明:

(仅组中使用)重新选中一个可用的面板作为激活的面板。

activeSelf(): void

说明:

激活自己作为父级激活的面板。

getContainerSize(): number

说明:

获取网格宿主容器大小(像素)。

notifyRelayout(): void

说明:

(仅组中使用)通知宿主容器强制重新布局。

relayoutAllWithNewPanel(panels: CodeLayoutPanelInternal[], referencePanel?: CodeLayoutPanelInternal): void

说明:

(仅组中使用)当向组中添加了面板时,通知宿主容器强制重新布局。

参数:

名称说明
panels新添加的面板实例
referencePanel预留参数,无需传递

relayoutAllWithRemovePanel(panel: CodeLayoutPanelInternal): void

说明:

(仅组中使用)当向组中移除了面板时,通知宿主容器强制重新布局。一般情况不需要手动调用。

relayoutAllWithResizedSize(panel: CodeLayoutPanelInternal): void

说明:

(仅组中使用)当宿主容器大小变化时通知其强制重新布局。一般情况不需要手动调用。

CodeLayoutGridInternal

顶级网格组实例类定义。

collapse(open: boolean): void

说明:

展开或折叠当前顶级网格。

参数:

名称说明
open是否是展开

Released under the MIT License.