Michelle ZanandCursor b4e1a041de Keep cover crop image visible while zooming.
Do not revoke the preview blob URL until the dialog closes, so resizing the image on zoom does not blank it.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-08 13:19:15 +08:00

卓米会小程序

微信原生小程序 + Node.js 后端(含管理后台)。

miniprogram/   小程序(WXML / WXSS / JS),用微信开发者工具导入
server/        Express 后端 + 管理后台,数据存 server/data/db.json

快速开始

cd server
npm install
npm start            # http://localhost:3000,管理后台 /admin
npm test             # 接口冒烟测试(使用临时数据库,不影响真实数据)
  1. 微信开发者工具导入 miniprogram/,详情 → 本地设置 → 勾选「不校验合法域名」。
  2. 小程序请求地址在 miniprogram/config.js(默认 http://127.0.0.1:3000)。
  3. 管理后台默认账号 admin / 123456,上线前务必在后台修改密码。

环境变量

变量 说明
PORT 端口,默认 3000
WX_APPID / WX_SECRET 配置后走真实 code2session 登录;不配置则为演示登录
WX_SUBSCRIBE_TMPL_ID 可选,订阅消息模板 ID(也可在管理后台「提醒设置」里填)
WX_MINI_STATE 订阅消息跳转版本:formal / trial / developer,默认 formal
DB_FILE 数据文件路径,默认 server/data/db.json
UPLOAD_DIR 上传目录,默认 server/public/uploads

功能对照

  • 可转发:活动页 onShareAppMessage 分享到详情页,链接带分享人 openid,报名时记录来源。
  • 可编辑:后台增删改活动(含往期、置顶、封面图、视频)、海报、报名、签到码。
  • 可数据统计:后台「数据统计」看报名/签到/分享来源,报名可导出 CSV。
  • 可微信登录:wx.login → /api/login → code2session。

小程序管理员只在后台「管理员」页设置;管理员在「往期」页直接看到增加、删除、置顶,界面上没有管理员登录入口。

目录说明

server/
  app.js              Express 应用(路由挂载、静态资源、统一错误处理)
  server.js           启动入口
  routes/public.js    小程序接口 /api/*
  routes/admin.js     管理后台接口 /api/admin/*
  lib/db.js           JSON 存储:内存缓存 + 原子写入 + 旧数据迁移
  lib/auth.js         用户 / 管理员鉴权
  lib/passwords.js    管理员密码 scrypt 哈希
  lib/serialize.js    活动 / 用户数据整形
  lib/upload.js       图片视频上传(multer)
  lib/wechat.js       code2session
  public/admin.html   管理后台单页
miniprogram/
  utils/api.js        所有接口封装(自动登录、token 过期自动重登)
  utils/activity.js   导航、报名跳转、分享参数
  components/activity-board  首页 / 详情页共用的活动卡片

上线前

  • 服务器配置 HTTPS 域名,并在小程序后台添加 request / uploadFile / downloadFile 合法域名。
  • 修改管理后台默认密码;数据量大时换成正式数据库。
  • 在小程序后台填写《用户隐私保护指引》(昵称、头像、手机号、位置)。
S
Description
No description provided
Readme
193 KiB
Languages
JavaScript 66.4%
HTML 33.6%