Skip to content

Layout 插件

layout 插件

Layout 插件是 Tiny Engine 的核心布局组件,它定义了整个设计器的界面结构。主要包含以下部分:

  • 顶部工具栏(Toolbars)
  • 左侧插件(Plugins)
  • 右侧设置插件(Settings)
  • 中间内容区域(Canvas)

设计器布局示意图

使用方法

注册表中修改配置

如果我们要修改 layout 插件的配置,我们可以在注册表 registry.js 文件中修改配置。

javascript
export default {
  [META_APP.Layout]: {
    options: {
      // 局部调整插件顺序
      relativeLayoutConfig: {}
      // ... laout 插件配置项
    }
  }
}

支持的 options 配置项为:

  • configProvider 全局配置组件
  • configProviderDesign 规范,可以通过该配置项定制一些自定义的交互规范
  • isShowLine 工具栏是否显示分隔线
  • isShowCollapse 工具栏是否显示折叠菜单
  • layoutConfig 完整布局配置,一旦配置此项,relativeLayoutConfig 将失效
  • relativeLayoutConfig 局部调整插件顺序,仅当 layoutConfig 未配置时生效

自定义插件位置

自定义插件位置可以使用 options.layoutConfig 配置项,也可以使用 options.relativeLayoutConfig 配置项。 ⚠️注意:当使用 options.layoutConfig 配置项时,options.relativeLayoutConfig 配置项将失效。

使用 options.relativeLayoutConfig 配置项修改插件位置

options.relativeLayoutConfig 可以局部调整插件位置。 适用场景:仅调整局部的插件位置,或者是增加新插件时,指定顺序。

支持的相对位置有:

  • insertBefore 显示在指定的插件前面
  • insertAfter 显示在指定的插件后面

使用示例:

javascript
export default {
  [META_APP.Layout]: {
    options: {
      // 局部调整插件顺序
      relativeLayoutConfig: {
        // 将页面 JS 插件显示在页面管理插件前面
        [META_APP.Script]: {
          insertBefore: META_APP.AppManage
        },
        // 将物料面板显示在状态管理插件后面
        [META_APP.Materials]: {
          insertAfter: META_APP.State
        },
        // 将页面 schema 插件显示在物料插件前面
        [META_APP.Schema]: {
          insertBefore: META_APP.Materials
        },
        // 将保存按钮显示在主题切换按钮前面
        [META_APP.Save]: {
          insertBefore: META_APP.ThemeSwitch
        },
        // 将自定义插件显示在大纲树后面
        'engine.plugins.customPlugin': {
          insertAfter: META_APP.OutlineTree
        }
      }
    }
  }
}
使用 options.layoutConfig 配置项修改插件位置

options.layoutConfig 可以全局调整插件位置。 适用场景:调整全局的插件、工具栏的位置,包括新增的插件。 ⚠️注意:

  1. 使用 options.layoutConfig 配置项时,options.relativeLayoutConfig 配置项将失效
  2. 使用该配置项时,需要列举完整的插件列表。没有列举的插件,将不会显示。

默认的布局配置,请参考 默认布局配置

使用示例:

javascript
export default {
  [META_APP.Layout]: {
    options: {
      layoutConfig: {
        plugins: {
          left: {
            top: [
              META_APP.Materials,
              META_APP.OutlineTree,
              META_APP.AppManage,
              META_APP.BlockManage,
              META_APP.Collections,
              META_APP.Bridge,
              META_APP.I18n,
              META_APP.PageController,
              META_APP.State
            ],
            bottom: [META_APP.Schema, META_APP.EditorHelp, META_APP.Robot]
          },
          right: {
            top: [META_APP.Props, META_APP.Styles, META_APP.Event]
          }
        },
        toolbars: {
          left: [META_APP.Breadcrumb, META_APP.Lock, META_APP.Logo],
          center: [META_APP.Media],
          right: [
            [META_APP.ThemeSwitch, META_APP.RedoUndo, META_APP.Clean],
            [META_APP.Preview],
            [META_APP.GenerateCode, META_APP.Save]
          ],
          collapse: [
            [META_APP.Collaboration],
            [META_APP.Refresh, META_APP.Fullscreen],
            [META_APP.Lang],
            [META_APP.ViewSetting]
          ]
        }
      }
    }
  }
}

isShowLine 是否显示工具栏分隔线

isShowLine 配置项用于控制工具栏是否显示分隔线。

使用示例:

javascript
export default {
  [META_APP.Layout]: {
    options: {
      isShowLine: false
    }
  }
}

显示分隔线示意图:

显示分隔线示意图

不显示分隔线示意图:

不显示分隔线示意图

isShowCollapse 是否显示工具栏折叠菜单

isShowCollapse 配置项用于控制工具栏是否显示折叠菜单。

使用示例:

javascript
export default {
  [META_APP.Layout]: {
    options: {
      isShowCollapse: true
    }
  }
}

显示折叠菜单示意图:

显示折叠菜单示意图

不显示折叠菜单示意图:

不显示折叠菜单示意图

configProvider 全局配置组件

等同于 @opentiny/vue 的 ConfigProvider 全局配置。

使用示例:

javascript
import { ConfigProvider as TinyConfigProvider } from '@opentiny/vue'

export default {
  [META_APP.Layout]: {
    options: {
      configProvider: TinyConfigProvider
    }
  }
}

configProviderDesign 规范

configProviderDesign 配置项用于配置规范,相当于给 ConfigProvider 组件的 design 配置项。

ConfigProvider 组件文档

使用示例:

javascript
import designSmbConfig from '@opentiny/vue-design-smb'

export default {
  [META_APP.Layout]: {
    options: {
      configProviderDesign: designSmbConfig
    }
  }
}

useLayout 元服务

useLayout 是一个元服务,提供了管理布局状态和与布局交互的功能。

基本用法

javascript
import { useLayout } from '@opentiny/tiny-engine'

export default {
  setup() {
    const { 
      layoutState, 
      closePlugin, 
      closeSetting
    } = useLayout()
    
    // 使用布局服务提供的方法和状态
    
    return {
      // ...
    }
  }
}

API 参考

状态

状态名称类型描述
layoutStateObject布局状态对象,包含 plugins 和 settings 状态
leftFixedPanelsStorageRef<Array<string>>固定在左侧的面板列表
rightFixedPanelsStorageRef<Array<string>>固定在右侧的面板列表

方法

方法名参数返回值描述
closePlugin(forceClose?: boolean)void关闭左侧插件面板
closeSetting(forceClose?: boolean)void关闭右侧设置面板
activePlugin(pluginName: string)Promise<IMetaApi>激活左侧插件面板
activeSetting(pluginName: string)void激活右侧设置面板
changeLeftFixedPanels(pluginName: string)void更改左侧固定面板
changeRightFixedPanels(pluginName: string)void更改右侧固定面板

示例

切换插件面板

javascript
import { useLayout, META_APP } from '@opentiny/tiny-engine'

export default {
  setup() {
    const { activePlugin, activeSetting } = useLayout()
    
    // 打开材料面板
    const openMaterialsPanel = () => {
      activePlugin(META_APP.Materials)
    }
    
    // 打开属性设置面板
    const openPropsPanel = () => {
      activeSetting(META_APP.Props)
    }
  }
}

固定面板

javascript
import { useLayout, META_APP } from '@opentiny/tiny-engine'

export default {
  setup() {
    const { changeLeftFixedPanels, leftFixedPanelsStorage } = useLayout()
    
    // 固定或取消固定材料面板
    const toggleFixMaterialsPanel = () => {
      changeLeftFixedPanels(META_APP.Materials)
    }
    
    return {
      toggleFixMaterialsPanel,
      leftFixedPanelsStorage
    }
  }
}