PHP 前后端一体:首页咨询师列表、预约表单、管理后台、二维码准入与邮件通知;敏感配置与提交数据通过 .gitignore 排除。 Co-authored-by: Cursor <cursoragent@cursor.com>
130 lines
4.3 KiB
Markdown
130 lines
4.3 KiB
Markdown
# 心理咨询 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/ # 脚本
|
||
```
|