# 肠愈同行患者关爱 - 后端服务

肠愈同行患者关爱项目后端，提供管理后台和小程序 API 接口。基于 ThinkJS 3.x 开发。

## 技术栈

- ThinkJS 3.x (Node.js) + Nunjucks 模板
- MySQL (腾讯云 CynosDB)，数据库：`pap_cytx`
- Redis 缓存（端口 6319）
- 腾讯云 COS 文件存储
- 腾讯云 OCR / 人脸核身 / 短信
- Puppeteer（协议签署截图）
- PM2 进程管理，端口 8361

## 功能模块

### 管理后台
- 控制台：统计卡片、趋势图、最近记录
- 患者管理：列表/详情/审核/导出，按瘤种/地区/状态筛选
- 内容管理：首页内容配置
- 系统管理：用户、角色权限、操作日志、短信记录、文件上传

### 小程序 API
- 微信登录 / 手机号绑定 / 修改手机号
- 实名认证（OCR + 人脸核身 + 短信验证）
- 患者资料提交与编辑
- 协议签署（Puppeteer 截图生成）
- 消息中心
- 订阅消息通知（审核结果推送）
- 头像上传

## 目录结构

```
├── src/
│   ├── config/          # 配置（adapter/router/middleware/cos/ocr/sms/faceid）
│   ├── controller/
│   │   ├── admin/       # 后台管理（dashboard/patient/content/auth/upload）
│   │   │   └── system/  # 系统管理（user/role/log/sms）
│   │   ├── base.js      # 基础控制器（JWT认证/权限/日志/短信）
│   │   ├── common.js    # 公共接口（地区数据）
│   │   └── mp.js        # 小程序 API
│   ├── model/           # 数据模型
│   └── service/         # 服务层（wechat/screenshot）
├── view/admin/          # 后台 Nunjucks 模板
├── www/static/          # 静态资源
└── sql/                 # 数据库脚本
```

## 快速开始

```bash
# 安装依赖
pnpm install

# 开发环境
npm start

# ESLint 修复
npm run lint-fix

# 生产部署
pm2 startOrReload pm2.json
```

## 数据库

按顺序执行 `sql/` 目录下的脚本：

1. `init.sql` - 基础表（用户/角色/患者/内容等）
2. `wechat_user.sql` - 微信用户表
3. `verify.sql` - 实名认证相关字段
4. `myinfo.sql` - 患者资料扩展字段
5. `sign.sql` - 协议签署字段
6. `content.sql` - 内容数据
7. `message.sql` - 消息表
8. `subscribe.sql` - 订阅消息记录表

## 访问地址

- 后台管理：http://localhost:8361/admin/dashboard.html
- 小程序 API：http://localhost:8361/mp/*

## 服务器部署 Puppeteer（协议签署截图）

协议签署功能依赖 Puppeteer 调用 Chrome 生成截图，服务器需要安装 Chrome 和中文字体。

### 1. 安装 Chrome

Puppeteer 自带 Chrome 下载，但国内服务器可能下载失败，可手动安装：

```bash
# 创建 Puppeteer 缓存目录
mkdir -p /root/.cache/puppeteer/chrome/linux-146.0.7680.76
cd /root/.cache/puppeteer/chrome/linux-146.0.7680.76

# 从镜像下载 Chrome
wget https://cdn.npmmirror.com/binaries/chrome-for-testing/146.0.7680.76/linux64/chrome-linux64.zip

# 解压并清理
unzip chrome-linux64.zip
rm chrome-linux64.zip
```

验证安装：

```bash
ls /root/.cache/puppeteer/chrome/linux-146.0.7680.76/chrome-linux64/chrome
```

### 2. 检查系统依赖库

```bash
ldd /root/.cache/puppeteer/chrome/linux-146.0.7680.76/chrome-linux64/chrome | grep "not found"
```

如有缺失，安装对应依赖：

```bash
dnf install -y nss atk at-spi2-atk cups-libs libXcomposite libXdamage libXrandr mesa-libgbm pango alsa-lib libdrm libxkbcommon
```

### 3. 安装中文字体

服务器默认无中文字体，截图中文会显示为方框。

```bash
dnf install -y google-noto-sans-cjk-sc-fonts
```

如果 dnf 源中没有，手动安装：

```bash
mkdir -p /usr/share/fonts/chinese
cd /usr/share/fonts/chinese
wget https://github.com/googlefonts/noto-cjk/releases/download/Sans2.004/08_NotoSansCJKsc.zip
unzip 08_NotoSansCJKsc.zip
fc-cache -fv
```

### 4. 重启服务

```bash
pm2 restart cytx_api
```
