任何内容型平台在 C 端跑起来之后,都会立刻遇到同一个问题:运营侧没有趁手的工具——赛事内容要人工核对与补全、用户与队伍的异常数据要能查、公共字典(技能)被哪四处引用着没人说得清、谁能进后台改数据全靠口头约定。
这个作品是面向运营/管理员的 Web 后台,与 C 端小程序共用同一份线上数据库,重点解决三件事:内容运营(赛事维护 + AI 辅助生成简介)、数据核查与治理(用户/队伍/字典的可查可删、删除前引用检查)、以及权限治理(身份与权限分离、自研管理员鉴权、改密即让其它设备下线)。
与小程序共用同一份线上云数据库的 Web 运营后台,Vue3 + Vite 单页应用,含管理员登录体系与 5 个业务模块:
1、数据看板:用户 / 队伍 / 赛事总量、报名中赛事、匹配中用户与队伍;赛事按级别、状态、类型三级分布(环形图),队伍按赛事分布 Top6(柱状图)——全部为可计算的真实指标,不画假曲线。
2、用户管理:按姓名 / 学号搜索(服务端分页);身份与权限分离(学生/老师/管理员是身份,能否改数据看权限开关);列表字段脱敏,邮箱仅在详情接口下发。
3、队伍管理:按赛事筛选,回填队长 / 成员 / 指导老师,展示准入限制与匹配池状态,删除时联动清理引用。
4、赛事管理:真实枚举(级别六档 / 类型三档含混合类型 / 状态三态);支持调用大模型生成赛事简介(10~25 秒慢接口,行级 loading 不锁页、可重试)。
5、技能字典:全表 + 本地搜索、引用计数统计、增改删;删除前由服务端做四处引用检查,有引用一律拦截并给出明细,不做破坏性级联。
另含管理员登录(不预置默认密码,新管理员首次登录由本人现场设置)、修改密码即让其它设备登录立即失效。
在线演示(mock 演示数据):`https://team-backend-mock-cloud1-d8gb9nir3847ec081.webapps.tcloudbase.com` ,演示账号 `admin / admin123`
源码(含接口契约 `docs/api.md`):`gitee.com/baiguanliang/smart-team-backend-management`
我的职责:独立完成架构分层、接口契约设计、全部页面开发、与真实云环境的联调及部署上线。
技术栈:Vue 3(``)· Vite · Vue Router · Pinia · Element Plus · ECharts;后端复用微信云开发的云函数,与小程序共用同一套业务能力。
架构分层("数据从哪来"只有一个地方知道答案):
`页面 views` → `状态层 Pinia stores` → `接口层 api/*(与接口契约一一对应)` → `请求插槽(mock 实现 / 云函数实现,同一套函数签名)` → `本地假后端(扮演云端 6 个集合的真实字段与存储形态)`
两条硬约定:契约先行——所有接口先写进 `docs/api.md`(字段、错误码、权限、后端待办,迭代至 v0.1.19),页面按契约开发;契约不等于数据库行——库里的嵌套结构由接口层消化成扁平 DTO。
实现亮点与难点:
1、浏览器里没有微信 OPENID:原鉴权依赖 `getWXContext().OPENID`,网页端所有写操作恒返回 403。对比"平台自定义登录"(私钥保管与身份注入未知项太多)后,选择「SDK 匿名登录 + 自研 HMAC token」,核心是把传输通道与身份认证解耦——匿名登录只解决"有资格调用云函数",谁是谁由自签 token 决定。token 由 `node:crypto` 实现、零第三方依赖,用时间恒定比较防时序攻击;token 只放身份不放权限,服务端每次请求重读权限,撤销权限当场生效;改密即强制下线通过令牌版本号 +1 实现,不需要服务端会话表。云函数侧同步升级为双通道鉴权,一套云函数同时服务小程序与网页端,后端不用写两遍。
2、mock 与真后端"同签名双实现",一行环境变量切换,页面与状态层零改动;换后端时改动被限制在接口层,不污染业务
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!

下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
评论