项目面向非遗缠花作品的数字化展示与内容运营场景,通过 NFC 标签和二维码连接实物作品与线上内容,让用户能够便捷了解作品故事、工艺特点和制作过程。立项目标是建立一个长期稳定的访问入口,使客户可以自主更新文字、图片和视频,减少内容维护对开发人员的依赖,并支持内容更新后继续使用原有标签和二维码。
系统包含公开展示页和独立管理后台。公开页支持手机、平板和电脑访问,以文字、图片、图文组合及视频模块展示内容;后台提供管理员登录、素材上传与验证、模块编辑与排序、草稿保存、预览发布、二维码生成,以及默认关闭的可选访问统计功能。
管理员的操作路径为“登录后台 → 上传素材 → 编辑内容 → 保存草稿 → 预览 → 发布”。访客通过“NFC 触碰或二维码扫码 → 打开统一展示页 → 浏览图文与播放视频”访问内容。草稿修改不会影响已发布页面,发布后新访问或刷新即可读取最新内容,无需重新写入 NFC 标签。
项目采用前后端分离与 Serverless 架构,通过 npm Workspaces 管理公开页、管理后台、服务端和共享代码。公开页部署在 `/`,后台部署在 `/admin/`,业务请求通过 `/api` 网关进入云函数。数据库保存页面内容、素材元数据和访问记录,私有云存储保存图片与视频,浏览器通过服务端签发的临时地址上传或读取素材。
| 模块 | 技术栈与实现思路 |
|---|---|
| 公开展示 | React、TypeScript、Vite;实现响应式布局、模块化内容渲染、图片懒加载、视频点击加载及失败重试。 |
| 管理后台 | React、Ant Design、CloudBase 托管认证;实现素材管理、内容编辑、草稿预览、发布和设置。 |
| 业务服务 | Node.js、TypeScript、CloudBase 云函数;统一处理管理员鉴权、参数校验、发布逻辑、媒体验证和统计清理。 |
| 数据与存储 | PostgreSQL JSONB 保存灵活的内容结构,通过数据库事务与 RPC 保证提交一致性;私有素材桶结合签名地址控制访问。 |
| 共享代码 | TypeScript、Zod;统一前后端数据类型和校验规则,减少接口字段不一致的问题。 |
**我的负责模块和结果:**
我负责项目的全栈开发与部署交付,包括公开展示页、管理后台、业务接口、共享数据模型、PostgreSQL 适配、素材上传验证及云端部署。同时完成部署配置、源码与上传包整理,并编写客户操作手册、部署手册和验收资料,支持客户后续自主维护和部署。
根据项目的 **2026 年 10 月 7 日检查记录**,全仓 TypeScript 检查、生产构建和 44 项测试通过。演示环境已完成真实登录、图片与视频上传、草稿保存、预览发布、刷新持久化及视频播放验证;客户试用环境已完成部署和基础接口检查。
**遇到的难点和解决方案:**
1. **并发编辑与发布一致性。**多个窗口编辑同一页面可能覆盖内容,素材删除也可能与发布产生冲突。我使用草稿版本校验、数据库版本比较和原子 RPC 提交,过期编辑返回冲突提示并保留当前内容;发布切换完整快照,同时在事务中检查素材引用,避免页面引用已删除素材。
2. **素材上传安全与播放兼容。**文件扩展名和浏览器声明不能证明真实格式。我采用“临时目录直传 → 服务端读取并验证 → 写入最终目录”的流程,使用 Sharp 解析图片,检查 MP4 内部结构及 H.264/AAC 编码。客户端不能覆盖最终素材,正在被草稿或发布页面引用的素材也不能直接删除。
3. **PostgreSQL 与现有业务接口适配。