Files
MemRelay/projects/d44c219a-0b31-4de1-b160-323eb34a4c6a/C 端模块化编排契约与媒体存储层级.md
T

30 lines
3.1 KiB
Markdown

---
title: C 端模块化编排契约与媒体存储层级
type: fact
permalink: main/projects/d44c219a-0b31-4de1-b160-323eb34a4c6a/c-端模块化编排契约与媒体存储层级
stable_id: 3efd0adf-f91b-4d78-b163-5365c257d6d4
scope: project
project_id: d44c219a-0b31-4de1-b160-323eb34a4c6a
memory_type: fact
status: active
revision: 1
restored_from_commit: 6a6a895eafcca6052e81a14fca103a42635dd1c2
created_at: '2026-09-23T15:06:26.114527+00:00'
updated_at: '2026-09-23T15:06:26.114602+00:00'
tags:
- client
- trace-layout
- media
- storage
---
模块化编排(`packages/shared/src/trace-modules.ts`):布局 `{ version: 1, modules: [...] }`,数组顺序即展示顺序,每模块 `{ id, type, visible, title?, config }`。
- 系统单例模块(id 固定):`HERO_CAROUSEL`(hero) / `AUTHENTICITY_STATUS`(authenticity) / `PRODUCT_INTRO`(product-intro) / `SHOWCASE`(showcase) / `CERTIFICATES`(certificates) / `TIMELINE`(timeline) / `BLOCKCHAIN`(blockchain);可重复自定义模块:`IMAGE_TEXT`(图文,imagePosition 上/下/左/右)、`HORIZONTAL_GALLERY`(横向图库)。
- 限制:最多 32 模块、标题 120 字、正文 5000 字、图库 30 张;白名单校验未知字段全拒;不开放 HTML/CSS。函数:`validateTraceLayout/parseTraceLayout`(非法抛错)、`resolveTraceLayout`(非法回默认)、`templateTraceLayout`(剥离作品媒体/文案)、`createDefaultTraceLayout`。
- 默认顺序(旧数据无布局时):轮播 → 防伪 → 产品介绍 → 作品展示 → 版权证书 → 时间轴 → 区块链。
- 模板 `defaultTraceLayout` 只存结构(顺序/显隐/标题/imagePosition),建档时深拷贝到 `Artwork.traceLayout`,之后互不影响;作品布局随快照走审核。
- 公开接口过滤 `visible=false` 模块并把自定义模块媒体 key 转 URL;系统模块无内容自动隐藏(BLOCKCHAIN 保留“暂未上链”态)。防伪状态模块可排序/隐藏(甲方要求能置底),但首扫激活/计数/日志由后端固定执行。
- 固定不可配置:顶栏(显示作品名)、预览提示条、加载/错误页、隐私说明、页脚。版权证书区不显示类型角标。
- 后台 `TraceModuleEditor.vue`:上下移/拖拽/显隐/标题覆盖/自定义模块增删复制;卡片可折叠(默认全收,新增/复制自动展开,折叠按钮在拖动手柄右侧序号左侧,纯 UI 不写入 JSON)。ArtworkEdit 将轮播/介绍/展示/时间轴/证书编辑嵌入对应模块卡。
媒体存储层级(人类可读):`{模板ID}/{档案编号}/` 下放 `作品图_{ts}_{n}`、`作品展示_...`、`节点-{标题}_...`、`证书-{名称}_...`(水印 `_wm`)、`模块图文-{标题}_...`、`模块图库-{标题}_...`;出库实况图 `{模板ID}/{档案编号}/{追溯码}/出库实况_...`。实现:上传先进临时日期目录,实体保存时 move 归位并改写 DB 引用(新建时档案号尚未生成);归位失败不阻断业务;编辑旧档案渐进迁移存量。本地驱动无 CDN 时返回相对路径 `/uploads/{key}`。原始出库 ZIP 存 `.private/` 前缀。