近 7 天打卡趋势
券库发放统计 奖品1 / 奖品2 / 奖品3
打卡数据展板 数据口径说明
「今日 / 昨日 / 本周 / 本月签收」按用户表的 更新时间 统计;「已完成全部拼图」指 打卡1~打卡8 全部为已完成状态的用户数;「总卡数」为用户表总记录数。库存数据来自库存表最新一条「每日库存」。此排版参考你提供的原型图,字段以你导出的 Excel 为准。
数据操作
用户数据管理
| 用户ID | 手机号 | openid | 拼图状态(1~8) | 完成数 | 奖品状态 | 创建时间 | 更新时间 | 操作 |
|---|
库存记录
| 数据ID | 每日库存 | 提交用户 | 创建时间 | 更新时间 | 操作 |
|---|
「每日库存」为活动每日可发放的券/礼券总量。参考原型中的「券库发放统计 券15 / 礼券15」,此处对应库存表的记录;如需区分券种,可把 奖品1~奖品3 当作三类券在用户表中统计。
后台操作日志
| ID | 操作 | 对象 | 详情 | 操作人 | IP | 时间 |
|---|
真实模式下日志写入 admin_logs 表(按 README 第 4 步创建);演示模式仅保存在当前浏览器会话中。
接入宝塔现有数据库
🔍 数据库连接与表结构自检
api/config.php 里哪些列名填错了。api/config.php 里,不会出现在网页、代码仓库或聊天记录中。数据库名你已经给了(两个 u10146941_dbq…),我已在配置里预填为表名,你只需在 phpMyAdmin 核对一次。第 1 步 · 搞清楚「IVX 数据库名」和「MySQL 库名」
IVX 里叫「数据库」的对象,落到 MySQL 里通常就是一张表。你给的两个名字更像表名,而真正的 MySQL 库名、账号、密码要在宝塔面板 → 数据库 页面查看。所以配置里把它们拆成了 $DB_NAME(MySQL 库名)和 $TABLE_USERS / $TABLE_STOCK(表名)两项。
第 2 步 · 确认是否允许外部直连
- 若数据本来就存在宝塔服务器自建的 MySQL:后台直连即可,这是最简单的方式。
- 若用的是 IVX 托管云数据库:通常不开放外网直连。可选:① 在 IVX 后台把数据导出 CSV / 通过开放 API 同步到宝塔 MySQL;② 用 IVX 的「自定义数据库」把数据源切到你自己宝塔的 MySQL,让小程序和后台共用一个库;③ 后台改为调用 IVX 云函数/API(需要 IVX 侧配合)。
- 宝塔需放行 3306(仅本机访问填
127.0.0.1最安全),MySQL 账号需授权对应来源 IP。
第 3 步 · 上传文件
- 宝塔 → 网站 → 新建站点(必须选 PHP 7.4+ / 8.x,不能选纯静态,也不能绑到「Python 项目管理器」;不需要 composer、不需要 Node)。
- 把整个
checkin-admin目录上传到站点根目录(index.html在根,api/是子目录),浏览器访问http://你的域名/。 - phpMyAdmin 选中库 → SQL → 粘贴 README 第 4 步里的建表语句,创建
admin_logs日志表。不要把说明文字粘进 SQL 框。
第 4 步 · 改配置(唯一要动的文件)
编辑 api/config.php:填 $DB_HOST / $DB_PORT / $DB_NAME / $DB_USER / $DB_PASS;核对 $TABLE_USERS / $TABLE_STOCK;若两张表分属两个库,填 $DB2_NAME 等第二组配置。
第 5 步 · 对齐列名(最容易踩的坑)
phpMyAdmin 打开用户表「结构」页,看真实列名。如果就是中文(用户ID、打卡1…),配置不用改;如果是 col_1 / field1 / 拼音 之类,把 $FIELD 右侧逐个改成真实列名即可,后台代码一行都不用动。库存表同理改 $STOCK_FIELD。
第 6 步 · 改密码并加固
- 立刻把
$ADMIN_PASS从默认admin888改成强密码(或用password_hash填$ADMIN_PASS_HASH)。 - 站点设置为需要登录访问 / 限制 IP,或把后台放在单独的子域名 + HTTPS。
- 给
api/config.php设置禁止直接下载(Nginx 可加location ~ /api/config.php { deny all; })。 - 定期备份数据库;「清理 N 天前数据」是不可逆删除,执行前先导出 CSV 备份。
每日 0 点自动新增库存(券库)
系统会在每天 0 点自动往库存表插入一条「每日库存 = 200」的记录,提交用户标记为「系统自动」;当天已生成则跳过,不会重复。活动到 2027-02-15 结束:当天(含)生成最后一条,次日 0 点起永久停止,不再产生新记录。开关、数量与截止日在 api/config.php 的 $AUTO_STOCK_ENABLED / $AUTO_STOCK_DAILY / $AUTO_STOCK_END_DATE。
- 精确 0 点执行(推荐):宝塔 → 计划任务 → 添加任务,类型「Shell 脚本」,周期「每天 0 点 0 分」,脚本
php /www/wwwroot/你的站点/api/cron_stock.php。 - 用「访问 URL」型任务:先在
config.php设随机$CRON_KEY,URL 填http://你的域名/api/cron_stock.php?key=你的密钥。密钥留空时 URL 方式会被拒绝,只能走 Shell 脚本。 - 兜底:即使没配计划任务,每次打开看板或库存页也会检查并补上当天记录(时间不是精确 0 点)。两者同时启用不会重复插入。
api/cron_stock.log。字段对照(来自你导出的两份 Excel)
用户表 26 列:用户ID、手机号、密码、openid、unionid、邮箱地址、昵称、头像、被屏蔽、用户类型、登录类型、打卡1~打卡8、奖品1~奖品3、备用1、备用2、创建时间、更新时间。
库存表 5 列:数据ID、每日库存、提交用户、创建时间、更新时间。