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
图片addPicturereplacePicture
图标addShapereplaceShape
插图addShapesreplaceShapes

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=vector

3. 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

CloudSpaceResourceUserDesignResource把不同来源适配成统一列表接口。

6. 下载状态机

主调用链见第一屏。状态:

preparing
downloading
completed
canceled
failed

下载由宿主实现,页面负责显示进度和取消。切换Tab时会终止当前任务。

7. 下载后的动作

downloadDone根据菜单分派到Libraries,默认动作见第一屏的总表。

onlyDownload=true时只返回文件路径,不操作PPT。

8. 新增和替换判定

图片:

当前选区可替换
→ replacePicture
 
没有选区、线段或占位符
→ addPicture

图标:

当前选区不是图片
→ replaceShape
 
其他情况
→ addShape

插图:

有选中Shape
→ replaceShapes
 
无选区
→ addShapes

右键菜单还可以传入:

autoNewSlide
keepSourceFormatting

9. 平台适配

入口:

window.Application ? WpsImpl : CppImpl

Windows和macOS

Libraries/impl/cpp.ts
→ postMessageToClient("Libraries.*")
→ Native宿主

WPS

Libraries/impl/wps.ts
→ window.Application

WPS实现包含:

  • 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-controller

11. 与AiPPT的关系

模板广场可以在左侧菜单中内嵌AiPPT:

LinkMenu.AiPPT
→ views/AiPPT
→ AiPPTView withoutContainer

AiPPT生成完成后使用同一套Client.downloadLibraries接口打开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/

相关文档: