1- # 物料模块API
1+ # 物料模块 API
2+
23## 物料插件元应用
34
45``` js
56export default {
67 id: ' engine.plugins.materials' , // 元应用id
78 title: ' 物料' , // 元应用名称
8- type: ' plugins' , // 元应用类型
9+ type: ' plugins' , // 元应用类型
910 icon: ' plugin-icon-materials' , // 元应用图标
1011 align: ' top' , // 元应用在当前类型下的位置
1112 entry, // 入口文件
1213 layout: MaterialLayout, // 布局文件,可替换布局
1314 options: {
1415 defaultTabId: ' engine.plugins.materials.component' , // 默认激活的Tab的元应用ID
15- displayComponentIds: [' engine.plugins.materials.component' , ' engine.plugins.materials.block' ], // 需要展示的Tab组件ID列表,可以为单个,单个的时候,不展示tab,直接显示该元应用
16- basePropertyOptions // 基础属性配置
16+ displayComponentIds: [' engine.plugins.materials.component' , ' engine.plugins.materials.block' ], // 需要展示的Tab组件ID列表,可以为单个,单个的时候,不展示tab,直接显示该元应用
17+ basePropertyOptions, // 基础属性配置
18+ hiddenBuiltinMaterials: [] // 隐藏的内置物料组件列表,配置的组件不会在物料面板中显示
1719 },
1820 components: {
1921 header: MaterialHeader // 公共组件,可自行提供
@@ -23,17 +25,56 @@ export default {
2325}
2426
2527export { entry , ResourceService , MaterialService }
26-
2728```
2829
29- ### 物料插件元应用暴露出来的API
30+ ### 物料插件配置选项详解
31+
32+ #### hiddenBuiltinMaterials 配置
33+
34+ 用于隐藏不需要在物料面板中显示的内置组件,提高物料面板的整洁性和用户体验。
35+
36+ ** 配置示例:**
37+
3038``` js
31- apis: {
32- fetchGroups: fetchGroups // 获取区块分组列表
39+ // registry.js
40+ export default {
41+ [META_APP .Materials ]: {
42+ options: {
43+ hiddenBuiltinMaterials: [
44+ ' Box' , // 盒子容器(普通div 容器)
45+ ' CanvasRowColContainer' , // 行列容器
46+ ' CanvasFlexBox' , // 弹性容器
47+ ' CanvasSection' , // 全宽居中容器
48+ ' Text' , // 文本
49+ ' Icon' , // 图标
50+ ' Img' , // 图片
51+ ' Slot' , // 插槽(区块插槽需要)
52+ ' RouterView' , // 路由视图(子页面需要,不建议隐藏)
53+ ' RouterLink' , // 路由链接
54+ ' Navigation' , // 导航条
55+ ' NavigationV' , // 纵向导航条
56+ ' Collection' // 数据源容器(数据源功能依赖,不建议隐藏)
57+ ]
58+ }
3359 }
60+ }
61+ ```
62+
63+ ** 使用场景:**
64+
65+ - 隐藏不常用的内置组件,简化物料面板
66+ - 根据项目需求定制显示的组件列表
67+
68+ ### 物料插件元应用暴露出来的 API
69+
70+ ``` js
71+ apis: {
72+ fetchGroups: fetchGroups // 获取区块分组列表
73+ }
3474```
3575
3676## 物料模块元服务
77+
3778### useResource 元服务
3879
3980负责全局统一的资源管理,如:国际化、大纲树、工具类、全局状态,全局数据源
@@ -47,7 +88,6 @@ const resState = reactive({
4788 globalState: []
4889})
4990
50-
5191return {
5292 resState, // 保存着整个tiny-engine的国际化、大纲树、工具类、全局状态,全局数据源数据
5393 fetchResource, // 进行初始化,获取后端返回的资源信息
@@ -67,53 +107,46 @@ return {
67107``` js
68108const materialState = reactive ({
69109 components: [], // 这里存放的是物料插件面板里所有显示的组件
70- blocks: [], // 这里存放的是物料插件面板里所有显示的区块
110+ blocks: [], // 这里存放的是物料插件面板里所有显示的区块
71111 componentsDepsMap: { scripts: [], styles: new Set () }, // 这里存放组件依赖的映射
72112 packages: [] // 物料依赖的包
73113})
74114```
75115
76116** 使用示例**
77117
78- ``` useMaterial().materialState `` `
118+ ` useMaterial().materialState `
79119
801202 . 暴露出来的方法函数详情
81121
82122``` js
83123{
84124 // 状态对象
85125 materialState, // 存放着组件、物料侧区块、第三方依赖信息
86-
87- // 初始化和请求方法
88- initMaterial, // 物料模块初始化,参数: { isInit = true, appData = {} }
89- fetchMaterial, // 请求物料并进行处理
90- refreshMaterial, // 刷新物料,清空后重新初始化和获取
91-
92- // 物料资源获取方法
93- getMaterialsRes, // 获取物料,并返回符合物料协议的bundle.json内容,返回: Promise<Materials>
94- getMaterial, // 获取单个物料,参数: (name: string) => Material
95- getComponentsByGroup, // 根据组名获取指定分组组件,参数: (components: Component[], groupName: string) => Component[]
96-
97- // 物料操作方法
98- generateNode, // 根据包含{ type, component }的组件信息生成组件schema节点
99- setMaterial, // 设置单个物料,参数: (name: string, data: Material) => void
100- addMaterials, // 添加多个物料,参数: (materials: Material) => void
101-
102- // 物料清理方法
103- clearMaterials, // 清空所有物料
104- clearBlockResources, // 清空区块缓存,以便更新最新版区块
105-
106- getBlockByName, // 通过区块名称获取区块
107- getBlockCompileRes, // 获取区块编译结果
108- addBlockResources, // 增加区块缓存,参数: (id: string, resource: BlockResource) => void
109- updateBlockCompileCache, // 更新区块编译缓存
110-
111- // 依赖相关方法
112- getCanvasDeps, // 组装画布依赖,包含物料和工具类的依赖
113- updateCanvasDeps, // 通知画布更新依赖
114-
115- // 配置相关方法
116- getConfigureMap // 获取物料组件的配置信息,返回组件名到配置的映射
126+ // 初始化和请求方法
127+ initMaterial, // 物料模块初始化,参数: { isInit = true, appData = {} }
128+ fetchMaterial, // 请求物料并进行处理
129+ refreshMaterial, // 刷新物料,清空后重新初始化和获取
130+ // 物料资源获取方法
131+ getMaterialsRes, // 获取物料,并返回符合物料协议的bundle.json内容,返回: Promise<Materials>
132+ getMaterial, // 获取单个物料,参数: (name: string) => Material
133+ getComponentsByGroup, // 根据组名获取指定分组组件,参数: (components: Component[], groupName: string) => Component[]
134+ // 物料操作方法
135+ generateNode, // 根据包含{ type, component }的组件信息生成组件schema节点
136+ setMaterial, // 设置单个物料,参数: (name: string, data: Material) => void
137+ addMaterials, // 添加多个物料,参数: (materials: Material) => void
138+ // 物料清理方法
139+ clearMaterials, // 清空所有物料
140+ clearBlockResources, // 清空区块缓存,以便更新最新版区块
141+ getBlockByName, // 通过区块名称获取区块
142+ getBlockCompileRes, // 获取区块编译结果
143+ addBlockResources, // 增加区块缓存,参数: (id: string, resource: BlockResource) => void
144+ updateBlockCompileCache, // 更新区块编译缓存
145+ // 依赖相关方法
146+ getCanvasDeps, // 组装画布依赖,包含物料和工具类的依赖
147+ updateCanvasDeps, // 通知画布更新依赖
148+ // 配置相关方法
149+ getConfigureMap // 获取物料组件的配置信息,返回组件名到配置的映射
117150}
118151```
119152
@@ -122,18 +155,18 @@ const materialState = reactive({
122155``` js
123156// 初始化物料
124157useMaterial ().initMaterial ({ isInit: true , appData }) // appData为远程拉取的应用数据
125-
158+
126159// 获取单个物料
127160const material = useMaterial ().getMaterial (' ComponentName' )
128-
161+
129162// 生成组件节点
130163const node = useMaterial ().generateNode ({ type: ' component' , component: ' Button' })
131164
132165// 刷新物料
133166await useMaterial ().refreshMaterial ()
134167```
135168
136- #### 主要API详解
169+ #### 主要 API 详解
137170
138171##### 初始化和请求相关方法
139172
@@ -171,7 +204,6 @@ refreshMaterial()
171204
172205使用场景:二开工程中,允许用户上传物料,或者是动态更新物料后,需要刷新物料,此时可以调用该方法。
173206
174-
175207##### 物料资源获取方法
176208
1772091 . ` getMaterialsRes ` :获取物料资源
@@ -280,42 +312,47 @@ updateCanvasDeps()
280312使用场景:如果需要画布刷新 script 或者 import-map 的时候,可以调用此方法让画布重新加载。(该方法会调用 getCanvasDeps 方法,获取画布依赖,并通知画布更新依赖)
281313
282314#### 物料类型结构
315+
283316主要的物料类型定义包括:
284317
285- 1 . ` Material ` : 物料包定义,符合物料协议的bundle.json内容
318+ 1 . ` Material ` : 物料包定义,符合物料协议的 bundle.json 内容
319+
286320``` ts
287321interface Material {
288- components: Component []; // 组件列表
289- blocks? : Block []; // 区块列表
290- snippets? : Snippet []; // 物料分组列表
291- packages? : Dependency []; // 物料依赖的包
322+ components: Component [] // 组件列表
323+ blocks? : Block [] // 区块列表
324+ snippets? : Snippet [] // 物料分组列表
325+ packages? : Dependency [] // 物料依赖的包
292326}
293327```
294328
2953292 . ` Component ` : 组件物料定义
330+
296331``` ts
297332interface Component {
298- component: string ; // 组件名称
299- group: string ; // 组件分组
300- npm? : { // 组件NPM包信息
301- package: string ; // 包名
302- script? : string ; // 脚本路径
303- exportName: string ; // 导出名称
304- css? : string ; // 样式路径
305- };
306- schema? : Schema ; // 组件配置信息
333+ component: string // 组件名称
334+ group: string // 组件分组
335+ npm? : {
336+ // 组件NPM包信息
337+ package: string // 包名
338+ script? : string // 脚本路径
339+ exportName: string // 导出名称
340+ css? : string // 样式路径
341+ }
342+ schema? : Schema // 组件配置信息
307343}
308344```
309345
3103463 . ` Block ` : 区块物料定义
347+
311348``` ts
312349interface Block {
313- label: string ; // 区块标识
314- blockName: string ; // 区块名称
315- version? : string ; // 区块版本
316- description? : string ; // 区块描述
317- screenshot? : string ; // 区块截图
318- content? : BlockResource ; // 区块内容
350+ label: string // 区块标识
351+ blockName: string // 区块名称
352+ version? : string // 区块版本
353+ description? : string // 区块描述
354+ screenshot? : string // 区块截图
355+ content? : BlockResource // 区块内容
319356}
320357```
321358
@@ -346,13 +383,13 @@ import { useMaterial, useCanvas } from '@opentiny/tiny-engine'
346383export const addComponent = (componentName ) => {
347384 const material = useMaterial ()
348385 const canvas = useCanvas ()
349-
386+
350387 // 生成组件节点
351- const schema = material .generateNode ({
352- type: ' component' ,
353- component: componentName
388+ const schema = material .generateNode ({
389+ type: ' component' ,
390+ component: componentName
354391 })
355-
392+
356393 // 添加到画布
357394 canvas .canvasApi .value .addComponent (schema)
358395}
@@ -365,14 +402,14 @@ import { useMaterial } from '@opentiny/tiny-engine'
365402
366403export const getComponentConfigure = (componentName ) => {
367404 const material = useMaterial ()
368-
405+
369406 // 获取单个物料信息
370407 const componentInfo = material .getMaterial (componentName)
371-
408+
372409 // 获取组件配置
373410 const configureMap = material .getConfigureMap ()
374411 const configure = configureMap[componentName]
375-
412+
376413 return { componentInfo, configure }
377414}
378415```
0 commit comments