# 手术图文病历报告系统

基于 **React 19 + TypeScript + Vite + Tailwind CSS** 开发的医疗图文报告管理前端应用。

> 适用于医院场景，支持手术记录图文报告的撰写、视频关键帧抽取、模板管理以及基于角色的用户权限控制。

---

## 功能特性

- **图文报告生成**：富文本编辑器撰写手术记录，支持本地上传图片或从手术视频中截取关键帧插入报告。
- **报告管理**：搜索、筛选、查看、编辑、打印和删除报告。
- **模板管理**：创建和维护报告标准模板，新建报告时可自动加载默认模板。
- **用户管理**：超级管理员可创建/编辑/删除用户，分配角色和可视模板权限。
- **系统设置**：配置视频抽帧百分比位置、AI API 接口地址、默认模板等全局参数。
- **数据持久化**：所有数据存储在浏览器 `localStorage` 中，无需后端服务即可独立运行。

---

## 技术栈

- React 19
- React Router DOM 7
- TypeScript 5.8
- Vite 6
- Tailwind CSS 4
- Lucide React（图标）

---

## 快速开始

### 本地开发

```bash
# 安装依赖
npm install

# 启动开发服务器（端口 3000）
npm run dev
```

### 环境变量

复制 `.env.example` 为 `.env.local` 并填入实际值：

```bash
cp .env.example .env.local
```

- `GEMINI_API_KEY`：Google Gemini API 密钥（预留 AI 功能）
- `APP_URL`：应用部署后的访问地址

---

## Docker 部署

项目已内置 `Dockerfile`、`nginx.conf` 和 `docker-compose.yaml`，可直接构建并运行：

```bash
# 构建镜像并启动容器
docker-compose up -d --build

# 访问应用
# http://localhost:8080
```

### 停止服务

```bash
docker-compose down
```

### 构建说明

- **构建阶段**：使用 `node:20-alpine` 执行 `npm ci` 和 `npm run build`
- **运行阶段**：使用 `nginx:alpine` 托管 `dist/` 静态文件
- **SPA 支持**：`nginx.conf` 已配置 `try_files` 路由回退，刷新页面不 404

---

## 默认测试账号

| 账号     | 密码   | 角色       |
|----------|--------|------------|
| admin    | 123456 | 超级管理员 |
| manager  | 123456 | 管理员     |
| doctor   | 123456 | 医生       |

---

## 项目结构

```
.
├── docker-compose.yaml    # Docker Compose 配置
├── Dockerfile             # 多阶段构建镜像
├── nginx.conf             # Nginx SPA 路由配置
├── package.json           # 项目依赖与脚本
├── public/                # 静态资源（logo、favicon）
├── src/
│   ├── components/        # 公共组件
│   ├── pages/             # 页面组件
│   ├── utils/             # 工具函数（storage、print、defaultContent）
│   ├── App.tsx            # 根组件与路由
│   ├── main.tsx           # 应用入口
│   ├── index.css          # 全局样式与 Tailwind 主题
│   └── types.ts           # TypeScript 类型定义
└── index.html             # Vite 入口 HTML
```

---

## 安全提示

- 本应用为纯前端应用，所有认证和授权逻辑在客户端执行。
- 用户密码以明文形式保存在浏览器 `localStorage` 中（无后端哈希处理）。
- 若用于生产环境，请确保部署在内网或受信任环境中。
