Initial commit: 心理咨询预约系统

PHP 前后端一体:首页咨询师列表、预约表单、管理后台、二维码准入与邮件通知;敏感配置与提交数据通过 .gitignore 排除。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
litianming
2026-06-04 10:17:09 +08:00
commit 08ce60344d
49 changed files with 3490 additions and 0 deletions

129
README.md Normal file
View File

@@ -0,0 +1,129 @@
# 心理咨询 H5
移动端心理咨询预约系统。纯 HTML/CSS/JS 前端 + PHP 后端,医生与议题由 JSON 配置,支持二维码准入与管理端数据导出。
## 功能
- 首页展示可配置咨询师列表
- 点击咨询师或「预约服务」进入咨询表单
- 联系方式必填,咨询议题可选(配置于 `data/topics.json`
- 提交记录本地存储,管理端登录后导出 CSV/JSON
- 二维码访问控制URL 携带 `access` 令牌)
## 环境要求
- PHP 7.4+(需开启 `json``session` 扩展)
- 可写权限:`data/` 目录
## 快速启动
```bash
cd 心理咨询
php -S 0.0.0.0:8080
```
浏览器访问:
| 页面 | 地址 |
|------|------|
| 首页(需带 token | http://localhost:8080/index.html?access=你的accessToken |
| 生成二维码 | http://localhost:8080/qr.html |
| 管理后台 | http://localhost:8080/admin.html |
默认管理账号:`frankfrank` / `frankfrank`(见 `config/app.json`
## 配置说明
详见 [config/README.md](config/README.md)
| 文件 | 用途 |
|------|------|
| `config/app.json` | 站点标题、访问令牌、管理账密、客服电话 |
| `data/doctors.json` | 咨询师列表 |
| `data/topics.json` | 咨询议题选项 |
| `assets/avatars/` | 咨询师头像图片 |
**部署前务必修改** `config/app.json` 中的 `accessToken` 为随机长字符串。
## 二维码访问
1. 修改 `accessToken` 后访问 `qr.html`
2. 扫描生成的二维码或分发链接(含 `?access=token`
3. 用户首次访问校验通过后,同浏览器 session 内可继续访问
> 说明:若用户复制完整链接仍可访问。如需更高安全性,可定期更换 token 并重新制码。
## 生产部署
### Apache
- 站点根目录指向本项目
- 确保启用 `mod_authz_core``.htaccess` 会禁止直接下载 `data/submissions.json`
### Nginx
```nginx
location ~ /data/submissions\.json$ {
deny all;
}
```
确保 PHP-FPM 正常处理 `.php` 文件,`data/` 目录对 PHP 进程可写。
### 提交无反应 / 提交失败排查
API **不会**写死 localhost地址随当前访问域名自动计算。若点击提交无反应按下面检查
1. **浏览器直接访问** `https://你的域名/api/config.php`
- 应返回 JSON若 404 → `api/` 目录未上传或站点根目录不对
- 若下载文件 / 显示源码 → PHP 未启用,在宝塔里给站点选 PHP 版本
2. **`data/` 目录可写**(宝塔 → 文件 → 权限设为 755 或 775属主 `www`
- 不可写时提交会提示「保存失败」
3. **重新上传** 最新的 `js/api.js``js/consult.js`(旧版若初始化报错会导致提交按钮未绑定)
4. **F12 开发者工具 → Network**,点提交看 `submit.php` 的请求 URL 是否为当前域名下的 `/api/submit.php`
5. 须先通过二维码进入(或 URL 带 `?access=token`),否则会被准入拦截
### 调试页面
部署后若提交异常,可访问(**须带与二维码相同的 access 令牌**
```
https://你的域名/debug.html?access=你的accessToken
```
功能环境检测、data 目录写权限、测试提交、测试邮件发送,并在页面底部输出详细日志。
**提交成功但页面无反应**:通常是发邮件耗时过长导致超时。现已改为「先返回成功、再后台发邮件」,请重新上传 `api/submit.php``api/mailer.php``js/api.js``js/consult.js`
| 接口 | 方法 | 说明 |
|------|------|------|
| `api/config.php` | GET | 公开配置 |
| `api/doctors.php` | GET | 医生列表 |
| `api/topics.php` | GET | 议题列表 |
| `api/submit.php` | POST | 提交咨询 |
| `api/login.php` | POST | 管理登录 |
| `api/logout.php` | POST | 管理退出 |
| `api/check.php` | GET | 检查登录状态 |
| `api/submissions.php` | GET | 提交列表(需登录) |
| `api/export.php` | GET | 导出 `?format=csv\|json`(需登录) |
## 目录结构
```
心理咨询/
├── index.html # 首页
├── consult.html # 预约表单
├── admin.html # 管理后台
├── qr.html # 二维码生成
├── api/ # PHP 接口
├── config/ # 系统配置
├── data/ # 业务数据
├── assets/ # 静态资源
├── css/ # 样式
└── js/ # 脚本
```