外观
码上分享系统设计文档
概述
码上分享是一个为用户提供"内容创建/上传-链接生成-二维码转换-分享传播"的一站式服务平台。用户可以将二维码分享给他人或贴至产品包装等场景,方便扫码者快速查看对应内容(如产品介绍、宣传物料等)。
核心定位
- 网站名称:码上分享
- 核心价值:为用户提供内容创建/上传-链接生成-二维码转换-分享传播的一站式服务
- 目标用户:需要将内容(文章、图片、视频)转换为二维码进行分享的个人用户和企业用户
数据库设计
表结构
1. 分享内容表(shares_content)
用于存储用户创建的内容信息。
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int | 主键,自增 |
| user_id | int | 用户ID,关联user表 |
| content_type | enum | 内容类型:text-纯文本文章, video-视频, image-图片 |
| title | varchar(200) | 内容标题,最大长度200字符 |
| content | mediumtext | 文本内容(仅content_type为text时使用),最大5000字 |
| preview_url | varchar(500) | 预览链接(仅自己可见),用于预览效果 |
| publish_url | varchar(500) | 正式发布链接(审核通过后生成),用于对外展示 |
| audit_status | enum | 审核状态:待审核/审核中/已通过/已驳回 |
| audit_reason | text | 审核驳回原因及修改建议 |
| old_version_id | int | 旧版本内容ID(用于版本管理,审核期间旧版仍可访问) |
| created_at | timestamp | 创建时间 |
| updated_at | timestamp | 更新时间 |
索引:
user_idcontent_typeaudit_statusold_version_id
2. 分享内容附件表(shares_content_attachment)
用于存储内容的附件信息(图片、视频)。
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int | 主键,自增 |
| content_id | int | 内容ID,关联shares_content表 |
| file_id | int | 文件ID,关联file表 |
| attachment_type | enum | 附件类型:image-图片, video-视频 |
| sort_order | int | 排序顺序,数字越小越靠前 |
| created_at | timestamp | 创建时间 |
| updated_at | timestamp | 更新时间 |
索引:
content_idfile_id(content_id, sort_order)
3. 分享二维码表(shares_qrcode)
用于存储内容对应的二维码信息。
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int | 主键,自增 |
| content_id | int | 内容ID,关联shares_content表 |
| qrcode_url | varchar(500) | 二维码图片URL |
| created_at | timestamp | 创建时间 |
| updated_at | timestamp | 更新时间 |
索引:
content_id
4. 分享统计表(shares_share_statistics)
用于存储内容的分享统计数据。
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int | 主键,自增 |
| content_id | int | 内容ID,关联shares_content表 |
| total_shares | int | 总分享次数 |
| advanced_statistics_enabled | boolean | 是否启用进阶统计(付费功能) |
| advanced_statistics_expire_at | datetime | 进阶统计过期时间(支付10元后享有30天权限) |
| created_at | timestamp | 创建时间 |
| updated_at | timestamp | 更新时间 |
索引:
content_idadvanced_statistics_enabled
5. 分享统计详情表(shares_share_statistics_detail)
用于存储进阶版统计的详细数据(每日分享次数)。
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int | 主键,自增 |
| statistics_id | int | 统计ID,关联shares_share_statistics表 |
| share_date | date | 分享日期,格式YYYY-MM-DD |
| share_count | int | 当日分享次数 |
| created_at | timestamp | 创建时间 |
| updated_at | timestamp | 更新时间 |
索引:
statistics_idshare_date- 唯一索引:
(statistics_id, share_date)
核心功能
1. 内容创建与上传
1.1 内容类型
- 纯文本文章:用户可创建纯文本文章,单篇字数不超过5000字
- 视频:用户可上传视频,单个视频大小不超过100MB
- 图片:用户可上传图片,单张图片大小不超过20MB
1.2 免费额度限制
每个用户享有固定免费资源额度,超出后需按次付费:
- 纯文本文章:可免费发表5篇
- 视频:可免费上传1个
- 图片:可免费上传5张
1.3 内容禁止性要求
所有文章、图片、视频中不得包含任何外部链接及联系方式(如电话、微信、网址等)。
2. 二维码生成功能
2.1 免费链接转二维码
- 用户可直接将自己的链接转换成二维码
- 此功能完全免费且不需要登录即可使用
- 在落地页首页提供
2.2 内容二维码生成
- 用户创建/上传内容后,系统自动生成对应预览链接
- 预览链接仅自己可见
- 用户若对预览效果满意,可进行发布操作
- 用户可基于发布后的正式链接生成二维码,用于分享或实体张贴
- 生成二维码不收费
3. 内容发布与审核
3.1 发布流程
- 用户创建/上传内容后,系统自动生成预览链接
- 用户预览内容效果
- 用户提交发布申请
- 系统检查用户免费额度或余额
- 如果超出免费额度,需要支付0.5元审核成本费
- 内容进入审核队列
- 管理员审核内容
- 审核通过后,系统生成正式发布链接
- 用户可基于正式链接生成二维码
3.2 审核机制
核心原则:所有内容需经管理员审核通过后方可对外展示,确保内容合规性;修改内容时不影响旧版内容的正常访问,保障用户使用连续性。
审核场景:
新增内容审核:
- 用户首次创建/上传内容后,需提交至管理员后台审核
- 审核未通过前,内容不可对外显示,仅用户本人可在个人中心查看草稿
修改内容审核:
- 用户对已通过审核的内容进行修改后,新内容需重新提交审核
- 审核期间,此前已通过审核的旧版内容仍可正常对外展示
- 新内容审核通过后自动替换旧版,且旧版内容不再保存
审核状态:
- 待审核:内容已创建,等待提交审核
- 审核中:内容已提交审核,等待管理员处理
- 已通过:内容审核通过,已生成正式发布链接
- 已驳回:内容审核未通过,需要用户修改后重新提交
审核反馈:
- 内容审核驳回时,需向用户提供"具体驳回原因+针对性修改建议"
- 例如:"内容含违规关键词'XX',请替换为合规表述后重新提交"
版本管理:
- 在个人中心的内容列表中,针对"审核中"状态的内容,用户可分别查看两个版本:
- 已通过的旧版内容(若存在,即该内容此前有审核通过记录)
- 当前待审核的新版内容
- 审核通过后,列表中仅保留新版内容,旧版内容自动清除,不可回溯
4. 分享统计功能
4.1 基础版统计(免费)
- 仅支持查看对应二维码的"总分享次数"
- 无其他维度数据
4.2 进阶版统计(付费)
- 支付10元后可享有30天的数据查看权限
- 支持多维度数据统计及可视化展示
- 例如:"最近30天每日分享次数折线图"等(具体维度可后续补充)
5. 收费规则
5.1 内容发布收费
- 发布内容若超过前述免费资源额度后,每次发布内容需按次缴费(暂定0.5元),作为审核成本费
5.2 进阶统计收费
- 支付10元后可享有30天的详细数据查看权限
- 过期后需要重新支付才能继续查看
API 接口设计
内容管理接口
POST /api/shares/content/create- 创建内容POST /api/shares/content/update- 更新内容POST /api/shares/content/delete- 删除内容GET /api/shares/content/list- 查询内容列表(分页)GET /api/shares/content/detail- 查询内容详情POST /api/shares/content/publish- 发布内容(检查免费额度,超出后扣款0.5元)GET /api/shares/content/check-free-quota- 检查免费额度
二维码生成接口
POST /api/shares/qrcode/link-to-qrcode- 链接转二维码(无需登录)POST /api/shares/qrcode/generate- 为内容生成二维码
分享统计接口
GET /api/shares/statistics- 查询分享统计(基础版或进阶版)POST /api/shares/statistics/enable-advanced- 启用进阶统计(支付10元,有效期30天)
管理员审核接口
GET /api/shares/admin/audit/list- 查询审核内容列表(管理员)GET /api/shares/admin/audit/detail- 查询审核内容详情(管理员)POST /api/shares/admin/audit/approve- 审核通过内容POST /api/shares/admin/audit/reject- 审核驳回内容
SSR 页面路由
GET /shares/preview/*- 内容预览页面(仅自己可见,需要登录)GET /shares/view/*- 内容正式发布页面(公开访问,自动记录分享统计)
前端应用
1. 落地页(apps-home/shares)
- 技术栈:VitePress
- 域名:https://www.veryshares.com
- 核心功能:
- 首页提供免费链接转二维码功能(无需登录)
- 产品介绍和功能说明
- SEO 优化
2. 核心功能应用(apps/shares)
- 技术栈:Vue3 + TypeScript + Element Plus
- 核心功能:
- 内容管理(创建、编辑、删除、查看)
- 内容详情查看页面(包含附件、链接、二维码、旧版本)
- 内容发布(自动检查免费额度,超出后扣款0.5元)
- 二维码生成和展示(支持下载和复制链接)
- 分享统计查看(基础版和进阶版)
- 进阶统计购买(10元/30天,使用 ECharts 可视化展示)
- 页面路由:
/content- 内容管理列表页/content/detail- 内容详情页/content/statistics- 分享统计页
3. 管理员后台(apps/admin)
- 技术栈:Vue3 + TypeScript + Element Plus
- 核心功能:
- 内容审核列表(支持筛选和分页)
- 内容审核详情查看(包含附件、旧版本对比)
- 审核操作(通过/驳回,支持驳回原因输入)
- 页面路由:
/shares-audit- 内容审核列表页
业务流程
用户创建内容流程
- 用户登录系统
- 进入内容管理页面
- 选择内容类型(文本/视频/图片)
- 创建或上传内容
- 系统检查免费额度
- 生成预览链接
- 用户预览内容
- 用户提交发布申请
- 如果超出免费额度,提示支付0.5元
- 内容进入审核队列
- 管理员审核内容
- 审核通过后生成正式链接
- 用户生成二维码
- 用户分享二维码
链接转二维码流程(无需登录)
- 用户访问落地页首页
- 输入要转换的链接
- 点击生成二维码
- 系统生成二维码图片
- 用户下载或分享二维码
技术实现要点
1. 免费额度检查
- 在创建内容时,需要检查用户已使用的免费额度
- 统计用户已创建的内容数量(按类型统计)
- 如果超出免费额度,提示用户需要付费
2. 内容审核
- 管理员后台需要提供内容审核功能
- 审核通过后,自动生成正式发布链接
- 审核驳回时,需要记录驳回原因和建议
3. 版本管理
- 修改已通过审核的内容时,需要保存旧版本ID
- 审核期间,旧版本内容仍可正常访问
- 新版本审核通过后,自动替换旧版本
4. 二维码生成
- 使用 qrcode 库生成二维码
- 将二维码图片上传到七牛云 OSS
- 返回二维码图片URL
5. 分享统计
- 记录每次分享操作
- 基础版统计:仅记录总分享次数
- 进阶版统计:记录每日分享次数,支持可视化展示
开发进度
已完成功能
- ✅ 数据库设计:完成所有表结构设计和迁移文件
- ✅ 后端服务层:
- 内容管理服务(创建、更新、删除、查询)
- 二维码生成服务(链接转二维码、内容二维码生成)
- 分享统计服务(基础版和进阶版统计)
- 内容审核服务(管理员审核功能)
- 免费额度检查服务
- 内容发布服务(包含余额扣款逻辑)
- ✅ 后端控制器和路由:
- 内容管理接口
- 二维码生成接口
- 分享统计接口
- 管理员审核接口
- 内容发布接口
- 免费额度检查接口
- ✅ 前端应用(apps/shares):
- 内容管理页面(列表、创建、编辑、删除)
- 内容详情查看页面
- 内容发布功能(自动检查免费额度)
- 二维码生成和展示功能(支持下载和复制链接)
- 分享统计查看页面(基础版和进阶版)
- 进阶统计购买功能
- ✅ 管理员后台(apps/admin):
- 内容审核列表页面
- 内容审核详情对话框
- 审核操作(通过/驳回)
- ✅ 落地页(apps-home/shares):
- 首页链接转二维码功能(无需登录)
- VitePress 主题配置
- Element Plus 集成
- ✅ SSR 内容展示页面:
- 内容预览页面(
views/shares-preview.ejs,路由:/shares/preview/*,仅自己可见) - 内容正式发布页面(
views/shares-view.ejs,路由:/shares/view/*,公开访问,自动记录分享统计)
- 内容预览页面(
功能实现状态
✅ 所有核心功能已全部实现完成!
详细功能清单
后端服务层:
- ✅ 内容管理服务(创建、更新、删除、查询、发布)
- ✅ 二维码生成服务(链接转二维码、内容二维码生成)
- ✅ 分享统计服务(基础版和进阶版统计)
- ✅ 内容审核服务(管理员审核功能)
- ✅ 免费额度检查服务
- ✅ 内容发布服务(包含余额扣款逻辑)
后端API接口(共17个接口):
- ✅ 内容管理接口(7个):创建、更新、删除、查询列表、查询详情、发布、检查免费额度
- ✅ 二维码生成接口(2个):链接转二维码、内容二维码生成
- ✅ 分享统计接口(2个):查询统计、启用进阶统计
- ✅ 管理员审核接口(4个):查询列表、查询详情、审核通过、审核驳回
- ✅ SSR页面路由(2个):预览页面、发布页面
前端应用(apps/shares):
- ✅ 内容管理页面(列表、创建、编辑、删除)
- ✅ 内容详情查看页面(包含附件、链接、二维码、旧版本)
- ✅ 内容发布功能(自动检查免费额度,超出后扣款0.5元)
- ✅ 二维码生成和展示功能(支持下载和复制链接)
- ✅ 分享统计查看页面(基础版和进阶版,使用 ECharts 可视化)
- ✅ 进阶统计购买功能(10元/30天,集成余额扣款)
管理员后台(apps/admin):
- ✅ 内容审核列表页面(支持筛选和分页)
- ✅ 内容审核详情对话框(包含附件、旧版本对比)
- ✅ 审核操作(通过/驳回,支持驳回原因输入)
落地页(apps-home/shares):
- ✅ 首页链接转二维码功能(无需登录)
- ✅ VitePress 主题配置
- ✅ Element Plus 集成
SSR内容展示页面:
- ✅ 内容预览页面(仅自己可见,需要登录)
- ✅ 内容正式发布页面(公开访问,自动记录分享统计)
后续优化方向
- 支持更多内容类型
- 支持内容分类和标签
- 支持内容搜索功能
- 支持批量操作
- 支持内容模板
- 支持自定义二维码样式
- 支持更多统计维度
- 支持数据导出功能