소스 검색

docs: AGENTS.md 新增 C-18~C-21 讲稿预览与素材预览变更记录

bob 1 개월 전
부모
커밋
9939ecd125
1개의 변경된 파일과 52개의 추가작업 그리고 0개의 파일을 삭제
  1. 52 0
      AGENTS.md

+ 52 - 0
AGENTS.md

@@ -435,3 +435,55 @@
 - 验证证据:`npm run check`、`npm run build`、`git diff --check` 全部通过。
 - 未确认与风险:未在生产环境构建部署。
 - 关联:C-20260923-05。
+
+### C-20260923-18|口播稿富文本弹窗与课程附件多选追加
+
+- 日期:2026-09-23
+- 类型:功能 / 样式 / 接口
+- 需求与原因:长篇口播稿需要独立编辑空间与基础排版;分集素材和通用资产需要一次选择多份,也能多次添加待上传文件。
+- 修改范围:课程详情页改为口播稿摘要与“编辑”入口,新增富文本弹窗,支持加粗、斜体、列表和长篇滚动编辑;保存到原讲稿字段,旧纯文本按段落显示;服务端保存时清理富文本标签。分集附件和通用附件的多次文件选择改为追加,显示待上传清单与删除入口,每批限 20 份。平台制作队列和组织管理详情按安全富文本显示讲稿,复制讲稿时提取纯文字。
+- 保留/新增判断:遵守 D-001、D-005、D-009;讲稿沿用原字段,富文本使用显式格式标记区分旧纯文本,展示时清理 HTML;附件仍经原鉴权接口保存,不开放公开静态路径。
+- 功能确认状态:部分确认
+- 验证证据:`npm run check`、`npm run build`、`git diff --check` 通过;核对原上传接口支持 multipart 多文件、每次最多 20 份且单份最大 200 MB。
+- 未确认与风险:未在已登录浏览器实际执行富文本保存、刷新回显、多次选择文件及上传;未部署公网。构建有既存的大包提示。旧分集创建弹窗仍提供纯文本初稿入口,创建后可进入新弹窗排版。
+- 后续修改提示:若增加讲稿导出、搜索或下游 AI 处理,应先将富文本转换为纯文本或明确解析格式;新增讲稿展示处不得直接信任数据库中的 HTML。
+- 关联:C-20260923-04、C-20260923-17。
+
+### C-20260923-19|课程素材全屏预览与讲稿弹窗布局、统计
+
+- 日期:2026-09-23
+- 类型:功能 / 修复 / 样式 / 接口 / 部署配置
+- 需求与原因:用户要求 PPTX、PDF、Word、图片和视频上传后可预览,PDF 与 PPTX 可翻页;用户截图显示口播稿弹窗的工具栏和底部操作透出遮罩,并要求实时字数和口播时间估算。
+- 修改范围:`src/components/CourseAssetPreview.tsx` 新增全屏预览,图片按原比例展示、视频使用浏览器播放控件、PDF 逐页渲染,PPTX 与 Word 调用鉴权转换接口后逐页渲染;分集和通用素材列表增加预览及下载入口,文件选择器标明支持格式。`server/index.ts` 新增课程素材鉴权预览接口,LibreOffice 按需转 PDF 并在私有上传卷缓存,删除素材或课程时清理对应缓存;`Dockerfile` 安装 LibreOffice 和中文字体。`src/components/LectureNotesDialog.tsx` 与 `src/styles.css` 修复弹窗整体白色容器、滚动和窄屏布局,增加实时字数与按每分钟约 260 字计算的时长;`src/api.ts` 的组织课程预览请求携带当前工作区标识。
+- 保留/新增判断:遵守 D-001、D-005、D-008、D-009。预览先按素材所属课程和用户/组织角色鉴权;转换后的 PDF 保存在私有上传卷的 `.previews` 目录,不开放公共静态路径。时长仅为按字数估算,不代表成片实际时长。
+- 功能确认状态:部分确认
+- 验证证据:`npm run check`、`npm run build`、`git diff --check` 与本地 Docker 镜像构建通过;在隔离数据库、服务和上传目录中批量上传 PPTX 与图片,另上传 PDF、DOCX、MP4。PPTX 转换得到 6 页 PDF,浏览器实际从第 1 页翻到第 2 页;PDF 同样翻页,Word 显示转换后页面,图片全屏展示,MP4 显示播放控件;生产镜像内分别实际转换 PPTX 和 DOCX 并返回 PDF。未登录、其他用户、目标素材不存在分别返回 401、403、404;组织课程正确工作区访问返回 200,其他组织工作区返回 404,即使指定目标工作区但不属于该组织也返回 403。浏览器确认讲稿弹窗各区域在同一白色容器内,输入后字数与时间实时变化,取消后文字未保存。
+- 未确认与风险:未部署到公网或使用生产数据验收;未在真实手机上验证讲稿弹窗触控与所有浏览器的视频编码兼容性,也未压测超大文档。PDF.js 工作线程与 LibreOffice 会增加前端资源体积和生产镜像体积;构建仍有主包超过 500 kB 的提示。非浏览器支持的视频格式需下载原文件查看。
+- 后续修改提示:扩展预览类型时继续复用课程鉴权与工作区校验,不得直接公开缓存文件;生产部署前核对新镜像体积、上传持久卷、LibreOffice 可用性,并按 D-009 验证公网路径。
+- 关联:C-20260923-18。
+
+### C-20260923-20|修复本地 PPTX 预览调用并导入演讲者备注
+
+- 日期:2026-09-23
+- 类型:修复 / 功能
+- 需求与原因:用户上传的 PPTX 在课程详情提示预览生成失败,并希望上传时自动把演讲者备注提取为口播稿。
+- 修改范围:`server/index.ts` 的 LibreOffice 调用支持 `SOFFICE_PATH`,并在本机运行时提供现有依赖路径作为回退;新增 `server/pptx-notes.ts` 读取 PPTX 备注正文;上传单份 PPTX 时,对指定分集或仅有一个分集的课程,在口播稿为空时写入逐页备注。上传结果返回导入页数,课程详情显示导入提示。增加 `jszip`、`fast-xml-parser` 依赖。
+- 保留/新增判断:遵守 D-001、D-005、D-007、D-009。备注只填空白讲稿,不覆盖人工内容;多分集课程的通用素材不自动猜测目标分集。原始 PPTX 继续保存在原鉴权路径。
+- 功能确认状态:部分确认
+- 验证证据:用户文件的 ZIP 校验通过,6 页均有演讲者备注;本机 LibreOffice 转换成功并生成 259015 字节 PDF;现有本地服务进程的 PATH 未包含 soffice,定位到原预览失败原因。使用新解析函数读取该文件得到 6 段正文;`npm run check`、`npm run build`、`git diff --check` 通过。
+- 未确认与风险:未在已登录浏览器完成上传到分集、刷新回显和预览接口的端到端验证;未部署公网。该课程现有口播稿非空,按保留规则不自动回填。PPTX 备注顺序目前按 notesSlide 编号读取,重排过幻灯片但备注 XML 编号未重排的文件可能顺序不一致。
+- 后续修改提示:生产环境优先使用镜像内 soffice 或显式 `SOFFICE_PATH`;如需覆盖已有口播稿,应增加用户确认与预览差异。处理特殊 PPTX 时应按 presentation 关系映射真实页序。
+- 关联:C-20260923-19。
+
+### C-20260923-21|确保生产容器可转换 PPTX 并修复预览中文缺字
+
+- 日期:2026-09-23
+- 类型:修复 / 部署配置
+- 需求与原因:用户要求部署服务器后仍能调用 LibreOffice,并反馈当前预览中中文文字缺失,需增加原文件优先提示。
+- 修改范围:`Dockerfile` 在安装 LibreOffice 后检查 `/usr/bin/soffice` 可执行;`docker-compose.prod.yml` 显式设置 `SOFFICE_PATH`;`server/index.ts` 在 macOS 转换时提供系统中文字体目录与微软雅黑到冬青黑体的替代配置,预览缓存升级为 `v2` 以跳过已生成的缺字 PDF,删除素材时一并清理两版缓存;`src/components/CourseAssetPreview.tsx` 与 `src/styles.css` 加入预览差异提示。
+- 保留/新增判断:遵守 D-005、D-008、D-009。生产容器继续使用镜像内 LibreOffice 和 Noto CJK 字体;转换结果仍仅存私有上传卷,经鉴权接口读取。预览仅供查看,原文件为准。
+- 功能确认状态:部分确认
+- 验证证据:使用部署脚本相同的 `linux/amd64` 架构构建生产镜像成功;容器中 `/usr/bin/soffice --version` 正常,`fc-match 微软雅黑` 匹配 Noto Sans CJK;以用户 PPTX 在容器内转换成功,PDF 第一页正文完整可见且文字层含中文。本机原配置生成的 PDF 中文缺失;显式加载 macOS 字体目录与替代规则后,同文件转换的第一页中文完整可见。
+- 未确认与风险:尚未部署服务器,未验证公网实际课程接口及持久卷中的新缓存;其他罕见或嵌入字体不保证版式完全一致。生产部署后仍需按 D-009 验证真实预览路径。
+- 后续修改提示:升级 LibreOffice 或字体包时,用有中文及演讲者备注的真实 PPTX 检查渲染图和文字层;如更改缓存算法,更新缓存版本并维护删除清理。
+- 关联:C-20260923-19、C-20260923-20。