title: 模板与素材库业务逻辑 date: 2026-08-27 tags:
- AiPPT
- 模板
- 素材库
- Libraries status: active
模板与素材库业务逻辑
快速认识
模板广场同时承载资源库、我的空间和AiPPT入口。资源下载完成后,页面根据资源类型和当前选区决定“新增”还是“替换”。
入口:
pages/online/template-source-lib主调用链:
点击资源
→ 获取下载URL
→ startDownload
→ Client.download
→ progress更新
→ completed返回filePath
→ downloadDone
→ Libraries执行宿主操作下载后的动作:
| 资源 | 默认动作 |
|---|---|
| 模板 | Libraries.addPresentation打开新PPT |
| 单页/关系图 | Libraries.addSlide插入Slide |
| 图片 | addPicture或replacePicture |
| 图标 | addShape或replaceShape |
| 插图 | addShapes或replaceShapes |
Hash入口参数:
| 参数 | 用途 |
|---|---|
defaultMenu | 默认菜单 |
onlyTab | 限制Tab |
onlyMenu | 限制菜单 |
onlyDownload=true | 只下载,不插入PPT |
showAiPPT | 显示AiPPT菜单 |
1. 页面结构
App
→ FunctionPanel
→ SideMenu
→ TemplatePlayground或MySpace或AiPPT顶层Tab:
| Tab | 内容 |
|---|---|
| 资源库 | 平台提供的模板和素材 |
| 我的空间 | 用户上传和生成的资源 |
资源菜单:
TemplateLib 模板
SinglePageLib 单页
RelationshipDiagramLib 关系图
ImageLib 图片
IconLib 图标
IllustrationLib 插图默认启用模板、单页、图片、图标和插图。服务端接口可以调整菜单列表。
2. 打开参数
页面通过Hash参数控制入口,参数表见第一屏。
WPS Ribbon示例:
template-source-lib.html#defaultMenu=template
template-source-lib.html#defaultMenu=diagram
template-source-lib.html#defaultMenu=picture
template-source-lib.html#defaultMenu=icon
template-source-lib.html#defaultMenu=vector3. Store
主Store:
store/useStore.ts保存:
- 当前Tab和菜单;
- 启用菜单;
- Hash参数;
- 缩放配置;
- 热门搜索;
- 下载状态和进度;
- Abort控制器。
切换Tab或重置页面会取消当前下载。
资源库Store:
store/useTemplatePlaygroundStore.ts我的空间Store:
store/useMySpaceStore.ts搜索历史按菜单保存,最多10条。
4. 资源库接口
代码:
common/http/TemplatePlayground.ts| 接口 | 用途 |
|---|---|
POST /plugin/resource/{type}/list | 资源列表 |
POST /plugin/resource/{type}/guess/like | 猜你喜欢 |
POST /plugin/resource/{type}/similar | 相似内容 |
GET /plugin/resource/tag/{type}/list | 标签 |
GET .../favorite/{id} | 收藏 |
GET .../unfavorite/{id} | 取消收藏 |
POST .../user/favorite/list | 收藏列表 |
GET .../download/{id} | 下载URL |
POST .../user/download/list | 下载历史 |
GET /resource/resourcePermission/list/v2 | 资源权限 |
5. 我的空间
代码:
common/http/MySpace.ts
modules/user-resource-module/接口:
| 接口 | 用途 |
|---|---|
POST /plugin/resource/user/{type}/upload/list | 我的上传列表 |
POST /plugin/resource/user/{type}/upload | 上传 |
POST .../rename | 重命名 |
DELETE .../delete | 删除 |
GET /resource/user/cloud/size | 空间容量 |
GET .../download/{id} | 下载URL |
CloudSpaceResource和UserDesignResource把不同来源适配成统一列表接口。
6. 下载状态机
主调用链见第一屏。状态:
preparing
downloading
completed
canceled
failed下载由宿主实现,页面负责显示进度和取消。切换Tab时会终止当前任务。
7. 下载后的动作
downloadDone根据菜单分派到Libraries,默认动作见第一屏的总表。
onlyDownload=true时只返回文件路径,不操作PPT。
8. 新增和替换判定
图片:
当前选区可替换
→ replacePicture
没有选区、线段或占位符
→ addPicture图标:
当前选区不是图片
→ replaceShape
其他情况
→ addShape插图:
有选中Shape
→ replaceShapes
无选区
→ addShapes右键菜单还可以传入:
autoNewSlide
keepSourceFormatting9. 平台适配
入口:
window.Application ? WpsImpl : CppImplWindows和macOS
Libraries/impl/cpp.ts
→ postMessageToClient("Libraries.*")
→ Native宿主WPS
Libraries/impl/wps.ts
→ window.ApplicationWPS实现包含:
Slides.InsertFromFile;- 保留源格式;
- Shape几何替换;
- Copy/Paste回退;
- 插入图片、图标和插图。
10. 我的上传
上传入口打开:
cloud-space.html流程:
读取当前选中Slide或Shape
→ Libraries.uploadPresentation/uploadSlide/uploadPicture/uploadShape(s)
→ 导出本地中间文件
→ multipart上传
→ 刷新我的空间上传Controller:
pages/online/cloud-space/modules/upload-controller11. 与AiPPT的关系
模板广场可以在左侧菜单中内嵌AiPPT:
LinkMenu.AiPPT
→ views/AiPPT
→ AiPPTView withoutContainerAiPPT生成完成后使用同一套Client.download和Libraries接口打开PPT或插入单页。
详细流程见 AiPPT智能生成业务逻辑。
12. 代码位置
pages/online/template-source-lib/
common/http/TemplatePlayground.ts
common/http/MySpace.ts
modules/user-resource-module/
common/client-communication/Libraries/
pages/online/cloud-space/相关文档: