提交文件

This commit is contained in:
2026-02-28 15:16:15 +08:00
parent 1a4e50e0a4
commit 44f250f58e
159 changed files with 61268 additions and 0 deletions

View File

@@ -0,0 +1,289 @@
# 快速开始
<cite>
**本文引用的文件**
- [backend/.env.example](file://backend/.env.example)
- [backend/requirements.txt](file://backend/requirements.txt)
- [backend/app/core/config.py](file://backend/app/core/config.py)
- [backend/app/main.py](file://backend/app/main.py)
- [backend/init_db.py](file://backend/init_db.py)
- [backend/alembic.ini](file://backend/alembic.ini)
- [docs/backend.md](file://docs/backend.md)
- [docs/frontend.md](file://docs/frontend.md)
- [docs/database.md](file://docs/database.md)
- [frontend/package.json](file://frontend/package.json)
- [frontend/vite.config.js](file://frontend/vite.config.js)
- [frontend/src/router/index.js](file://frontend/src/router/index.js)
- [frontend/src/api/request.js](file://frontend/src/api/request.js)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能注意事项](#性能注意事项)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本快速开始指南面向首次部署“医院绩效管理系统”的用户,帮助你在本地完成环境搭建、依赖安装、数据库初始化与配置,并顺利启动后端与前端服务,完成首次登录与基本操作。文档同时提供默认管理员账号与初始密码、常见问题排查与系统访问指引,确保你能快速体验系统核心功能。
## 项目结构
系统采用前后端分离架构:
- 后端:基于 FastAPI + SQLAlchemy 2.0 + PostgreSQL 的异步 API 服务,提供认证、基础数据、考核、统计与工资等功能模块。
- 前端:基于 Vue 3 + Element Plus + Pinia + Vue Router 的单页应用,通过 Axios 与后端交互,路由守卫保障登录态。
```mermaid
graph TB
subgraph "后端"
A["FastAPI 应用<br/>app/main.py"]
B["配置中心<br/>app/core/config.py"]
C["数据库引擎/会话<br/>app/core/database.py"]
D["初始化脚本<br/>init_db.py"]
E["数据库迁移配置<br/>alembic.ini"]
end
subgraph "前端"
F["Vite 开发服务器<br/>vite.config.js"]
G["路由配置<br/>src/router/index.js"]
H["HTTP 请求封装<br/>src/api/request.js"]
end
U["浏览器/用户"] --> F
F --> A
A --> B
A --> C
A --> D
A --> E
U --> G
G --> H
```
图表来源
- [backend/app/main.py](file://backend/app/main.py#L15-L80)
- [backend/app/core/config.py](file://backend/app/core/config.py#L9-L47)
- [backend/init_db.py](file://backend/init_db.py#L11-L83)
- [backend/alembic.ini](file://backend/alembic.ini#L1-L44)
- [frontend/vite.config.js](file://frontend/vite.config.js#L1-L22)
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L1-L116)
- [frontend/src/api/request.js](file://frontend/src/api/request.js#L1-L66)
章节来源
- [docs/backend.md](file://docs/backend.md#L16-L58)
- [docs/frontend.md](file://docs/frontend.md#L17-L48)
## 核心组件
- 后端应用入口与中间件:负责创建 FastAPI 实例、注册路由前缀、CORS、健康检查与全局异常处理。
- 配置中心集中管理应用名称、版本、API 前缀、数据库连接、JWT 密钥与跨域白名单等。
- 初始化脚本:创建数据库表并注入默认测试数据(含默认管理员账户)。
- 前端路由与请求封装:统一 API 基址、请求头携带 Token、统一错误处理与登录态校验。
章节来源
- [backend/app/main.py](file://backend/app/main.py#L15-L80)
- [backend/app/core/config.py](file://backend/app/core/config.py#L9-L47)
- [backend/init_db.py](file://backend/init_db.py#L69-L79)
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L103-L113)
- [frontend/src/api/request.js](file://frontend/src/api/request.js#L14-L63)
## 架构总览
系统启动顺序概览如下:
```mermaid
sequenceDiagram
participant Dev as "开发者"
participant Backend as "后端服务"
participant Frontend as "前端服务"
participant DB as "数据库"
Dev->>Backend : 启动后端(uvicorn)
Backend->>DB : 连接数据库(配置中心)
Backend->>Backend : 注册路由/中间件
Dev->>Frontend : 启动前端(Vite)
Frontend->>Backend : 发起登录请求(/api/v1/auth/login)
Backend-->>Frontend : 返回访问令牌(Token)
Frontend->>Backend : 带Token访问受保护接口
Backend-->>Frontend : 返回业务数据
```
图表来源
- [backend/app/main.py](file://backend/app/main.py#L19-L51)
- [backend/app/core/config.py](file://backend/app/core/config.py#L13-L16)
- [frontend/src/api/request.js](file://frontend/src/api/request.js#L14-L26)
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L103-L113)
## 详细组件分析
### 环境与依赖准备
- Python 环境
- 使用 Python 3.10+(推荐 3.10 或更高),确保 pip 可用。
- 在后端目录安装依赖:参考后端开发指南中的安装命令。
- Node.js 环境
- 使用 Node.js 18+,确保 npm 可用。
- 在前端目录安装依赖:参考前端开发指南中的安装命令。
章节来源
- [docs/backend.md](file://docs/backend.md#L454-L468)
- [docs/frontend.md](file://docs/frontend.md#L380-L394)
- [backend/requirements.txt](file://backend/requirements.txt#L1-L17)
- [frontend/package.json](file://frontend/package.json#L1-L27)
### 数据库安装与配置
- 数据库选择
- 默认配置使用 PostgreSQL异步驱动也可使用 SQLite用于迁移工具
- PostgreSQL 安装与准备
- 安装 PostgreSQL 服务,创建数据库与用户,确保网络可达。
- 修改后端环境变量或配置文件中的数据库连接串,使其指向你的数据库实例。
- Alembic 迁移配置
- 迁移工具默认使用 SQLite 路径,若使用 PostgreSQL需调整迁移配置指向相同数据库。
章节来源
- [backend/.env.example](file://backend/.env.example#L3-L4)
- [backend/alembic.ini](file://backend/alembic.ini#L7-L7)
- [docs/database.md](file://docs/database.md#L274-L285)
### 项目克隆与初始化
- 克隆仓库到本地后,进入后端目录执行依赖安装与数据库初始化。
- 初始化数据库时,系统会自动创建所有表并写入默认测试数据(含默认管理员账户)。
章节来源
- [backend/init_db.py](file://backend/init_db.py#L11-L83)
### 环境变量配置
- 复制示例环境文件并按需修改:
- 数据库连接串PostgreSQL
- JWT 密钥(生产环境务必替换为足够强度的密钥)
- 调试模式与跨域白名单
- 配置文件加载优先级与缓存策略由配置模块统一管理。
章节来源
- [backend/.env.example](file://backend/.env.example#L1-L11)
- [backend/app/core/config.py](file://backend/app/core/config.py#L35-L47)
### 系统启动与访问
- 启动后端服务
- 使用 uvicorn 启动 FastAPI 应用,默认监听 0.0.0.0:8000。
- 后端提供健康检查接口与 OpenAPI 文档入口。
- 启动前端服务
- 使用 Vite 启动前端开发服务器,默认监听 0.0.0.0:5173。
- 前端通过代理将 /api 前缀转发至后端 8000 端口。
- 访问系统
- 前端地址http://localhost:5173
- 后端文档http://localhost:8000/api/v1/docs
章节来源
- [backend/app/main.py](file://backend/app/main.py#L83-L92)
- [frontend/vite.config.js](file://frontend/vite.config.js#L12-L20)
- [docs/backend.md](file://docs/backend.md#L460-L475)
### 默认管理员账号与初始密码
- 默认管理员用户名admin
- 默认管理员初始密码admin123
- 首次登录后建议立即修改密码并完善角色权限。
章节来源
- [backend/init_db.py](file://backend/init_db.py#L69-L79)
### 首次登录后的基本操作
- 登录后进入工作台,可按需进行以下基础操作:
- 基础数据管理:维护科室、员工、考核指标与指标模板。
- 考核管理:创建与管理绩效考核记录。
- 工资核算:基于考核结果生成工资核算记录。
- 统计报表:查看部门与个人的绩效统计与趋势。
- 经济核算:查看财务相关数据。
- 系统管理:维护菜单与系统参数(如适用)。
章节来源
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L3-L96)
## 依赖关系分析
后端与前端的关键依赖关系如下:
```mermaid
graph LR
subgraph "后端依赖"
R1["FastAPI"]
R2["SQLAlchemy 2.0"]
R3["Pydantic/Settings"]
R4["Alembic"]
R5["asyncpg/aiosqlite"]
R6["Uvicorn"]
end
subgraph "前端依赖"
F1["Vue 3"]
F2["Vue Router"]
F3["Pinia"]
F4["Element Plus/Axios"]
F5["Vite"]
end
R1 --> R2
R1 --> R3
R1 --> R6
R2 --> R5
R4 --> R2
F1 --> F2
F1 --> F3
F4 --> R1
F5 --> F1
```
图表来源
- [backend/requirements.txt](file://backend/requirements.txt#L1-L17)
- [frontend/package.json](file://frontend/package.json#L11-L25)
章节来源
- [docs/backend.md](file://docs/backend.md#L3-L15)
- [docs/frontend.md](file://docs/frontend.md#L3-L16)
## 性能注意事项
- 数据库连接池:合理设置连接池大小与溢出数量,避免并发过高导致连接争用。
- 分页与查询:列表接口支持分页与条件过滤,建议前端按需传参,避免一次性拉取大量数据。
- 异步 I/O后端采用异步 SQLAlchemy 与异步 PostgreSQL 驱动,注意在业务逻辑中正确使用异步上下文。
- 前端渲染:大表格与图表建议开启虚拟滚动与懒加载,减少首屏压力。
[本节为通用建议,不直接分析具体文件]
## 故障排除指南
- 后端无法启动
- 检查端口占用与防火墙设置;确认 uvicorn 启动命令与主机/端口配置。
- 查看后端日志输出,定位异常堆栈。
- 前端无法访问后端接口
- 确认前端代理配置指向后端地址;检查 /api 前缀是否一致。
- 若出现跨域问题,检查后端 CORS 配置与前端代理配置。
- 登录失败或 Token 过期
- 确认用户名与密码正确Token 过期会触发自动跳转登录页。
- 检查后端 JWT 密钥配置与前端请求头 Authorization。
- 数据库连接失败
- 检查数据库连接串、凭据与网络连通性;确认数据库已创建且用户具备权限。
- 如使用 Alembic 进行迁移,确保迁移配置与实际数据库一致。
- 健康检查失败
- 访问后端健康检查接口,确认服务状态与版本信息。
章节来源
- [backend/app/main.py](file://backend/app/main.py#L53-L76)
- [frontend/vite.config.js](file://frontend/vite.config.js#L14-L19)
- [frontend/src/api/request.js](file://frontend/src/api/request.js#L38-L63)
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L103-L113)
- [backend/app/core/config.py](file://backend/app/core/config.py#L28-L30)
## 结论
通过本快速开始指南,你可以在本地完成环境准备、依赖安装、数据库初始化与配置,并成功启动后端与前端服务。首次登录后即可进行基础数据与考核流程的体验。遇到问题时,可依据故障排除指南逐项排查。建议在生产环境中进一步完善安全配置与运维监控。
[本节为总结性内容,不直接分析具体文件]
## 附录
### 常用命令速查
- 后端
- 安装依赖pip install -r requirements.txt
- 启动开发服务器uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
- 运行测试pytest
- 前端
- 安装依赖npm install
- 启动开发服务器npm run dev
- 构建生产包npm run build
- 预览生产包npm run preview
章节来源
- [docs/backend.md](file://docs/backend.md#L454-L468)
- [docs/frontend.md](file://docs/frontend.md#L380-L394)

View File

@@ -0,0 +1,397 @@
# 技术栈
<cite>
**本文引用的文件**
- [backend/requirements.txt](file://backend/requirements.txt)
- [frontend/package.json](file://frontend/package.json)
- [backend/app/core/config.py](file://backend/app/core/config.py)
- [backend/app/main.py](file://backend/app/main.py)
- [backend/app/core/database.py](file://backend/app/core/database.py)
- [backend/alembic/env.py](file://backend/alembic/env.py)
- [backend/alembic.ini](file://backend/alembic.ini)
- [frontend/vite.config.js](file://frontend/vite.config.js)
- [frontend/src/main.js](file://frontend/src/main.js)
- [frontend/src/router/index.js](file://frontend/src/router/index.js)
- [frontend/src/stores/index.js](file://frontend/src/stores/index.js)
- [frontend/src/stores/user.js](file://frontend/src/stores/user.js)
- [backend/app/models/models.py](file://backend/app/models/models.py)
- [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [组件详解](#组件详解)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本项目为医院绩效管理系统,采用前后端分离架构。后端使用 Python 3.10+、FastAPI 框架、SQLAlchemy 2.0 ORM、PostgreSQL 数据库以及 Alembic 进行数据库迁移;前端采用 Vue 3、Element Plus、ECharts、Pinia 等现代前端技术栈,配合 Vite 构建工具与 Uvicorn 开发服务器。本文档系统梳理技术选型、版本兼容性、依赖关系与架构设计,并提供可视化图示帮助理解。
## 项目结构
项目采用“backend + frontend + 文档”三层组织方式:
- 后端FastAPI 应用、数据库模型与服务层、API 路由、配置与 Alembic 迁移
- 前端Vue 3 单页应用、路由与 Pinia 状态管理、Element Plus UI 组件库、ECharts 图表
- 文档:系统设计、数据库设计、前后端说明与接口文档
```mermaid
graph TB
subgraph "后端"
A["FastAPI 应用<br/>app/main.py"]
B["配置模块<br/>app/core/config.py"]
C["数据库引擎与会话<br/>app/core/database.py"]
D["模型定义<br/>app/models/models.py"]
E["API 路由聚合<br/>app/api/v1/__init__.py"]
F["Alembic 迁移环境<br/>alembic/env.py"]
G["Alembic 配置<br/>alembic.ini"]
end
subgraph "前端"
H["Vite 构建与代理<br/>vite.config.js"]
I["入口应用<br/>src/main.js"]
J["路由配置<br/>src/router/index.js"]
K["状态管理(Pinia)<br/>src/stores/*"]
end
A --> B
A --> E
A --> C
C --> D
F --> D
H --> A
I --> J
I --> K
```
图表来源
- [backend/app/main.py](file://backend/app/main.py#L15-L80)
- [backend/app/core/config.py](file://backend/app/core/config.py#L9-L47)
- [backend/app/core/database.py](file://backend/app/core/database.py#L9-L39)
- [backend/app/models/models.py](file://backend/app/models/models.py#L1-L438)
- [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py#L1-L17)
- [backend/alembic/env.py](file://backend/alembic/env.py#L1-L66)
- [backend/alembic.ini](file://backend/alembic.ini#L1-L44)
- [frontend/vite.config.js](file://frontend/vite.config.js#L1-L22)
- [frontend/src/main.js](file://frontend/src/main.js#L1-L24)
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L1-L116)
- [frontend/src/stores/index.js](file://frontend/src/stores/index.js#L1-L3)
章节来源
- [backend/app/main.py](file://backend/app/main.py#L1-L92)
- [frontend/vite.config.js](file://frontend/vite.config.js#L1-L22)
## 核心组件
- 后端核心
- Web 框架FastAPI异步支持、自动 OpenAPI 文档)
- ORMSQLAlchemy 2.0(异步引擎、声明式映射)
- 数据库PostgreSQL生产、SQLite迁移/测试)
- 迁移Alembic异步迁移
- 认证与安全Pydantic 设置、JWt、Passlib、CORS
- 服务器Uvicorn开发/生产)
- 前端核心
- 框架Vue 3组合式 API、响应式系统
- 路由Vue Router 4
- 状态Pinia轻量状态管理
- UIElement Plus中文化、图标库
- 图表ECharts统计与趋势展示
- 构建Vite快速热更新、按需打包
章节来源
- [backend/requirements.txt](file://backend/requirements.txt#L1-L17)
- [frontend/package.json](file://frontend/package.json#L1-L27)
- [backend/app/core/config.py](file://backend/app/core/config.py#L9-L47)
- [backend/app/main.py](file://backend/app/main.py#L15-L80)
- [frontend/src/main.js](file://frontend/src/main.js#L1-L24)
## 架构总览
系统采用前后端分离架构,前端通过 Axios 发起请求,后端提供 RESTful API数据库通过 SQLAlchemy 异步访问,迁移通过 Alembic 管理。
```mermaid
graph TB
FE["前端应用<br/>Vue 3 + Element Plus + ECharts + Pinia"]
RT["路由<br/>Vue Router"]
ST["状态管理<br/>Pinia Store"]
AX["HTTP 客户端<br/>Axios"]
API["后端 API<br/>FastAPI"]
DB["数据库<br/>PostgreSQL"]
AS["异步引擎<br/>SQLAlchemy 2.0"]
AL["迁移<br/>Alembic"]
FE --> RT
FE --> ST
FE --> AX
AX --> API
API --> AS
AS --> DB
API --> AL
```
图表来源
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L1-L116)
- [frontend/src/stores/user.js](file://frontend/src/stores/user.js#L1-L49)
- [frontend/src/main.js](file://frontend/src/main.js#L1-L24)
- [backend/app/main.py](file://backend/app/main.py#L15-L80)
- [backend/app/core/database.py](file://backend/app/core/database.py#L9-L39)
- [backend/alembic/env.py](file://backend/alembic/env.py#L42-L54)
## 组件详解
### 后端技术栈与实现要点
- FastAPI 应用与中间件
- 应用实例创建、CORS 中间件、异常处理、健康检查端点
- 文档地址与 API 前缀统一管理
- 配置管理
- 使用 Pydantic Settings 加载 .env集中管理数据库、JWT、跨域、分页等配置
- 数据库与 ORM
- 异步引擎与会话工厂,自动事务提交/回滚/关闭
- 模型定义覆盖科室、员工、指标、考核、工资、计划、菜单、模板等业务实体
- API 路由
- v1 版本路由聚合,包含认证、基础数据、考核、工资、统计、财务、计划、菜单、模板等模块
- 迁移与版本控制
- Alembic 异步迁移环境,支持离线/在线模式,基于配置加载数据库元数据
```mermaid
classDiagram
class Settings {
+APP_NAME
+DATABASE_URL
+SECRET_KEY
+CORS_ORIGINS
+API_PREFIX
}
class DatabaseEngine {
+create_async_engine()
+async_sessionmaker()
}
class Base {
<<declarative_base>>
}
class Department
class Staff
class Indicator
class Assessment
class AssessmentDetail
class SalaryRecord
class PerformancePlan
class PlanKpiRelation
class Menu
class IndicatorTemplate
class TemplateIndicator
Settings --> DatabaseEngine : "提供连接配置"
DatabaseEngine --> Base : "创建异步引擎"
Base <|-- Department
Base <|-- Staff
Base <|-- Indicator
Base <|-- Assessment
Base <|-- AssessmentDetail
Base <|-- SalaryRecord
Base <|-- PerformancePlan
Base <|-- PlanKpiRelation
Base <|-- Menu
Base <|-- IndicatorTemplate
Base <|-- TemplateIndicator
```
图表来源
- [backend/app/core/config.py](file://backend/app/core/config.py#L9-L47)
- [backend/app/core/database.py](file://backend/app/core/database.py#L9-L39)
- [backend/app/models/models.py](file://backend/app/models/models.py#L62-L438)
章节来源
- [backend/app/main.py](file://backend/app/main.py#L15-L80)
- [backend/app/core/config.py](file://backend/app/core/config.py#L9-L47)
- [backend/app/core/database.py](file://backend/app/core/database.py#L9-L39)
- [backend/app/models/models.py](file://backend/app/models/models.py#L1-L438)
- [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py#L1-L17)
### 前端技术栈与实现要点
- 应用入口与插件
- Vue 3 应用挂载、Pinia、Vue Router、Element Plus 国际化与全局注册图标
- 路由与导航
- 基于 Vue Router 的历史模式路由,动态导入视图组件,路由守卫校验登录态
- 状态管理
- Pinia Store 导出用户相关状态与方法,持久化 Token 与用户信息
- 构建与开发
- Vite 作为构建工具,本地开发服务器端口与后端 API 代理配置
```mermaid
sequenceDiagram
participant U as "用户"
participant V as "Vue 应用"
participant R as "路由守卫"
participant S as "用户状态(Pinia)"
participant A as "认证API(Axios)"
U->>V : "访问系统"
V->>R : "进入路由"
R->>S : "读取本地Token"
alt "未登录"
R-->>U : "重定向到登录页"
else "已登录"
R-->>V : "放行"
V->>A : "调用登录/获取用户信息"
A-->>S : "写入Token与用户信息"
V-->>U : "渲染页面"
end
```
图表来源
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L104-L113)
- [frontend/src/stores/user.js](file://frontend/src/stores/user.js#L11-L31)
- [frontend/src/main.js](file://frontend/src/main.js#L19-L21)
章节来源
- [frontend/src/main.js](file://frontend/src/main.js#L1-L24)
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L1-L116)
- [frontend/src/stores/index.js](file://frontend/src/stores/index.js#L1-L3)
- [frontend/src/stores/user.js](file://frontend/src/stores/user.js#L1-L49)
### 数据模型与关系
系统数据模型围绕“科室—员工—指标—考核—工资—计划—模板—菜单”等核心实体展开,采用 SQLAlchemy 2.0 的声明式映射与异步引擎,支持复杂查询与关系映射。
```mermaid
erDiagram
DEPARTMENTS ||--o{ STAFF : "属于"
STAFF ||--o{ ASSESSMENTS : "参与"
STAFF ||--o{ SALARY_RECORDS : "产生"
INDICATORS ||--o{ ASSESSMENT_DETAILS : "被考核"
ASSESSMENTS ||--o{ ASSESSMENT_DETAILS : "包含"
PERFORMANCE_PLANS ||--o{ PLAN_KPI_RELATIONS : "关联"
INDICATORS ||--o{ PLAN_KPI_RELATIONS : "被关联"
USERS ||--o{ PERFORMANCE_PLANS : "提交/审批"
DEPARTMENTS ||--o{ PERFORMANCE_PLANS : "归属"
STAFF ||--o{ PERFORMANCE_PLANS : "责任人"
INDICATOR_TEMPLATES ||--o{ TEMPLATE_INDICATORS : "包含"
INDICATORS ||--o{ TEMPLATE_INDICATORS : "被包含"
MENUS ||--o{ MENUS : "父子关系"
```
图表来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L62-L438)
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L1-L438)
## 依赖关系分析
- 后端依赖
- Web 框架与服务器FastAPI、Uvicorn
- ORM 与数据库SQLAlchemy 2.0、asyncpg异步 PostgreSQL 驱动、aiosqlite异步 SQLite
- 配置与安全Pydantic Settings、python-jose、passlib、email-validator、python-dotenv
- 测试与工具httpx、pytest、pytest-asyncio、Alembic
- 前端依赖
- 框架与生态Vue 3、Vue Router、Pinia、Axios
- UI 与图标Element Plus、Element Plus Icons
- 图表与工具ECharts、Day.js
- 构建与开发Vite、@vitejs/plugin-vue、Sass
```mermaid
graph LR
subgraph "后端"
RQ["requirements.txt"]
FA["FastAPI"]
UV["Uvicorn"]
SA["SQLAlchemy 2.0"]
AP["asyncpg"]
AI["aiosqlite"]
AL["Alembic"]
PY["Pydantic Settings/JWT/Passlib"]
end
subgraph "前端"
PN["package.json"]
VUE["Vue 3"]
VR["Vue Router"]
PI["Pinia"]
AX["Axios"]
EP["Element Plus"]
IC["Element Plus Icons"]
EC["ECharts"]
DJ["Day.js"]
VI["Vite/@vitejs/plugin-vue"]
end
RQ --> FA
RQ --> UV
RQ --> SA
RQ --> AP
RQ --> AI
RQ --> AL
RQ --> PY
PN --> VUE
PN --> VR
PN --> PI
PN --> AX
PN --> EP
PN --> IC
PN --> EC
PN --> DJ
PN --> VI
```
图表来源
- [backend/requirements.txt](file://backend/requirements.txt#L1-L17)
- [frontend/package.json](file://frontend/package.json#L1-L27)
章节来源
- [backend/requirements.txt](file://backend/requirements.txt#L1-L17)
- [frontend/package.json](file://frontend/package.json#L1-L27)
## 性能考量
- 异步优先
- 后端使用 SQLAlchemy 2.0 异步引擎与 FastAPI 异步特性,提升高并发下的吞吐与资源利用率
- 数据库连接池
- 通过配置连接池大小与溢出数量,平衡并发与资源占用
- 前端按需加载
- 路由动态导入与组件懒加载,减少首屏体积与加载时间
- 构建优化
- Vite 提供快速冷启动与热更新,生产构建进行 Tree Shaking 与压缩
- API 文档与调试
- 自动生成 OpenAPI 文档,便于联调与问题定位
## 故障排查指南
- 后端常见问题
- 数据库连接失败:检查数据库 URL、驱动安装与网络连通性
- 迁移执行异常:确认 Alembic 配置与异步迁移环境正确
- CORS 跨域错误:核对允许源与请求头配置
- 前端常见问题
- 接口 404/跨域:检查 Vite 代理配置与后端 API 前缀
- 登录后无法跳转:检查路由守卫逻辑与 Token 存储
- 日志与监控
- 后端日志输出与异常捕获有助于定位问题
- 前端控制台与网络面板用于排查接口与路由问题
章节来源
- [backend/app/main.py](file://backend/app/main.py#L58-L75)
- [frontend/vite.config.js](file://frontend/vite.config.js#L12-L20)
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L104-L113)
## 结论
本项目在后端采用 FastAPI + SQLAlchemy 2.0 + PostgreSQL 的现代化异步技术栈,在前端采用 Vue 3 + Element Plus + ECharts + Pinia 的高效开发体验。结合 Alembic 的数据库迁移能力与 Vite 的工程化工具链,整体具备良好的性能、可维护性与扩展性。建议在生产环境中进一步完善数据库索引、缓存策略与安全加固,并持续演进前端组件化与自动化测试。
## 附录
- 版本与兼容性
- Python 3.10+(后端)
- FastAPI >= 0.115.0
- Uvicorn[standard] >= 0.32.0
- SQLAlchemy >= 2.0.36
- asyncpg >= 0.30.0(异步 PostgreSQL 驱动)
- aiosqlite >= 0.19.0(异步 SQLite 驱动)
- Alembic >= 1.14.0
- Pydantic >= 2.10.0
- Pydantic Settings >= 2.6.0
- Vue >= 3.4.15
- Vue Router >= 4.2.5
- Pinia >= 2.1.7
- Element Plus >= 2.5.3
- ECharts >= 5.4.3
- Vite >= 5.0.11
- 配置与部署要点
- 后端通过 .env 与 Pydantic Settings 管理配置,生产环境务必替换默认密钥与数据库凭据
- 前端开发服务器端口与代理需与后端监听端口一致
- 数据库迁移建议在开发环境使用 Alembic 异步迁移,生产环境谨慎操作并备份
章节来源
- [backend/requirements.txt](file://backend/requirements.txt#L1-L17)
- [frontend/package.json](file://frontend/package.json#L1-L27)
- [backend/app/core/config.py](file://backend/app/core/config.py#L18-L33)
- [frontend/vite.config.js](file://frontend/vite.config.js#L12-L20)
- [backend/alembic.ini](file://backend/alembic.ini#L7-L7)

View File

@@ -0,0 +1,430 @@
# 核心特性
<cite>
**本文引用的文件**
- [backend/app/main.py](file://backend/app/main.py)
- [backend/app/api/v1/performance_plans.py](file://backend/app/api/v1/performance_plans.py)
- [backend/app/api/v1/assessments.py](file://backend/app/api/v1/assessments.py)
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py)
- [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py)
- [backend/app/services/performance_plan_service.py](file://backend/app/services/performance_plan_service.py)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py)
- [backend/app/services/salary_service.py](file://backend/app/services/salary_service.py)
- [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py)
- [backend/app/models/models.py](file://backend/app/models/models.py)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py)
- [frontend/src/views/assessment/Assessments.vue](file://frontend/src/views/assessment/Assessments.vue)
- [frontend/src/views/reports/Reports.vue](file://frontend/src/views/reports/Reports.vue)
- [frontend/src/views/salary/Salary.vue](file://frontend/src/views/salary/Salary.vue)
- [frontend/src/views/basic/Templates.vue](file://frontend/src/views/basic/Templates.vue)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本系统围绕“医院绩效管理系统”的核心业务目标,提供以下关键能力:
- 平衡计分卡BSC多维度考核支持财务、客户、内部流程、学习与成长四个维度的指标采集与加权统计。
- 完整的绩效考核流程管理:覆盖草稿、提交、审核、确认的全流程闭环,支持批量创建与批量处理。
- 智能工资核算计算:基于考核加权得分与员工绩效系数自动计算绩效奖金,支持批量生成与批量确认。
- 丰富的数据分析报表:提供维度分析、科室统计、趋势分析、排名、指标完成度等多维报表。
- 灵活的权限控制系统:通过角色与菜单权限控制访问范围,保障数据安全。
系统同时具备良好的扩展性与定制能力,支持指标模板管理、流程自定义、报表定制等,满足不同科室与医院的差异化需求。
## 项目结构
后端采用 FastAPI + SQLAlchemy 2.0 + PostgreSQL 的现代化架构,按功能域划分 API、服务层、模型与数据结构前端采用 Vue 3 + Element Plus + ECharts 实现交互式报表与工作流操作。
```mermaid
graph TB
subgraph "后端"
A["FastAPI 应用<br/>app/main.py"]
B["API 路由层<br/>api/v1/*"]
C["服务层<br/>services/*"]
D["数据模型<br/>models/models.py"]
E["数据结构<br/>schemas/schemas.py"]
end
subgraph "前端"
F["考核管理<br/>Assessments.vue"]
G["报表中心<br/>Reports.vue"]
H["工资管理<br/>Salary.vue"]
I["模板管理<br/>Templates.vue"]
end
A --> B --> C --> D
B --> E
F --> B
G --> B
H --> B
I --> B
```
图示来源
- [backend/app/main.py](file://backend/app/main.py#L15-L77)
- [backend/app/api/v1/performance_plans.py](file://backend/app/api/v1/performance_plans.py#L1-L310)
- [backend/app/api/v1/assessments.py](file://backend/app/api/v1/assessments.py#L1-L166)
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py#L1-L156)
- [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L1-L242)
- [backend/app/services/performance_plan_service.py](file://backend/app/services/performance_plan_service.py#L1-L342)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L1-L263)
- [backend/app/services/salary_service.py](file://backend/app/services/salary_service.py#L1-L260)
- [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L1-L300)
- [backend/app/models/models.py](file://backend/app/models/models.py#L1-L438)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L1-L743)
- [frontend/src/views/assessment/Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L1-L311)
- [frontend/src/views/reports/Reports.vue](file://frontend/src/views/reports/Reports.vue#L1-L367)
- [frontend/src/views/salary/Salary.vue](file://frontend/src/views/salary/Salary.vue#L1-L335)
- [frontend/src/views/basic/Templates.vue](file://frontend/src/views/basic/Templates.vue#L1-L638)
章节来源
- [backend/app/main.py](file://backend/app/main.py#L19-L39)
- [backend/app/api/v1/performance_plans.py](file://backend/app/api/v1/performance_plans.py#L18-L310)
- [backend/app/api/v1/assessments.py](file://backend/app/api/v1/assessments.py#L17-L166)
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py#L17-L156)
- [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L14-L242)
- [frontend/src/views/assessment/Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L1-L311)
- [frontend/src/views/reports/Reports.vue](file://frontend/src/views/reports/Reports.vue#L1-L367)
- [frontend/src/views/salary/Salary.vue](file://frontend/src/views/salary/Salary.vue#L1-L335)
- [frontend/src/views/basic/Templates.vue](file://frontend/src/views/basic/Templates.vue#L1-L638)
## 核心组件
- 平衡计分卡BSC多维度考核通过指标维度字段与加权得分计算支持按维度聚合统计与可视化。
- 绩效考核流程管理:提供草稿、提交、审核、确认的四级状态机,支持批量创建与批量处理。
- 工资核算与发放:依据考核加权得分与员工绩效系数计算绩效奖金,支持批量生成与批量确认。
- 数据分析与报表:提供维度分析、科室统计、趋势分析、排名、指标完成度等报表接口与前端图表。
- 指标模板管理:支持模板类型、维度权重、指标集合的维护,便于快速复制与推广。
- 权限控制:基于用户角色与菜单权限,限制对敏感流程与报表的访问。
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L29-L35)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L71-L156)
- [backend/app/services/salary_service.py](file://backend/app/services/salary_service.py#L127-L190)
- [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L19-L72)
- [frontend/src/views/assessment/Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L178-L292)
- [frontend/src/views/reports/Reports.vue](file://frontend/src/views/reports/Reports.vue#L134-L308)
- [frontend/src/views/salary/Salary.vue](file://frontend/src/views/salary/Salary.vue#L190-L311)
- [frontend/src/views/basic/Templates.vue](file://frontend/src/views/basic/Templates.vue#L356-L572)
## 架构总览
系统采用前后端分离架构,后端提供 RESTful API前端通过 Element Plus 与 ECharts 进行交互与可视化展示。数据模型统一定义于 SQLAlchemy服务层封装业务逻辑API 层负责请求解析与响应格式化。
```mermaid
graph TB
FE["前端界面<br/>Assessments/Reports/Salary/Templates"]
API["API 路由层<br/>performance_plans/assessments/salary/stats"]
SVC["服务层<br/>performance_plan/assessment/salary/stats"]
ORM["数据模型<br/>SQLAlchemy Models"]
DB["数据库<br/>PostgreSQL"]
FE --> API --> SVC --> ORM --> DB
DB --> ORM --> SVC --> API --> FE
```
图示来源
- [backend/app/main.py](file://backend/app/main.py#L15-L77)
- [backend/app/api/v1/performance_plans.py](file://backend/app/api/v1/performance_plans.py#L18-L310)
- [backend/app/api/v1/assessments.py](file://backend/app/api/v1/assessments.py#L17-L166)
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py#L17-L156)
- [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L14-L242)
- [backend/app/services/performance_plan_service.py](file://backend/app/services/performance_plan_service.py#L15-L342)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L14-L263)
- [backend/app/services/salary_service.py](file://backend/app/services/salary_service.py#L14-L260)
- [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L16-L300)
- [backend/app/models/models.py](file://backend/app/models/models.py#L1-L438)
## 详细组件分析
### 平衡计分卡BSC多维度考核
- 功能亮点
- 指标维度:财务、客户、内部流程、学习与成长四维,支持按维度聚合与加权平均。
- 统计接口:提供维度得分、指标完成度、趋势分析等报表。
- 可视化:前端集成 ECharts支持柱状图、饼图等展示。
- 技术实现
- 模型层定义维度枚举与指标权重字段。
- 服务层按维度聚合计算总分与权重,并输出平均分。
- API 层提供维度分析与指标完成度接口。
- 业务价值
- 帮助管理者从多维度审视运营成效,识别薄弱环节,指导资源投入与改进方向。
```mermaid
flowchart TD
Start(["开始"]) --> Load["加载考核数据<br/>按维度与权重聚合"]
Load --> Calc["计算维度总分/权重/平均分"]
Calc --> Output["输出维度统计结果"]
Output --> Chart["前端渲染图表"]
Chart --> End(["结束"])
```
图示来源
- [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L19-L72)
- [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L17-L33)
- [frontend/src/views/reports/Reports.vue](file://frontend/src/views/reports/Reports.vue#L183-L295)
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L29-L35)
- [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L19-L72)
- [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L17-L33)
- [frontend/src/views/reports/Reports.vue](file://frontend/src/views/reports/Reports.vue#L183-L295)
### 绩效考核流程管理
- 功能亮点
- 流程状态:草稿、已提交、已审核、已确认、已驳回,支持逐级流转。
- 批量能力:支持批量创建考核、批量生成工资、批量确认工资。
- 明细管理:支持按指标维度录入实际值与得分,自动计算总分与加权得分。
- 技术实现
- 服务层封装状态机与明细计算逻辑。
- API 层提供提交、审核、确认等动作接口。
- 前端提供工作流操作按钮与批量处理入口。
- 业务价值
- 规范考核流程,提升效率与透明度,减少人工干预与错误。
```mermaid
sequenceDiagram
participant U as "用户"
participant FE as "前端界面"
participant API as "API 路由"
participant SVC as "服务层"
participant DB as "数据库"
U->>FE : 选择科室/周期/指标
FE->>API : POST /assessments/batch-create
API->>SVC : 批量创建考核
SVC->>DB : 插入Assessment与Details
SVC-->>API : 返回创建结果
API-->>FE : 列表刷新
FE->>U : 展示草稿状态
U->>FE : 提交/审核/确认
FE->>API : POST /assessments/{id}/submit 或 /review 或 /finalize
API->>SVC : 更新状态
SVC->>DB : 写入状态与时间戳
SVC-->>API : 返回成功
API-->>FE : 刷新状态
```
图示来源
- [backend/app/api/v1/assessments.py](file://backend/app/api/v1/assessments.py#L148-L166)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L208-L262)
- [frontend/src/views/assessment/Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L257-L286)
章节来源
- [backend/app/api/v1/assessments.py](file://backend/app/api/v1/assessments.py#L17-L166)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L17-L263)
- [frontend/src/views/assessment/Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L178-L292)
### 智能工资核算计算
- 功能亮点
- 自动计算:基于考核加权得分与员工绩效系数计算绩效奖金。
- 批量生成:按科室批量生成工资记录,支持批量确认。
- 可编辑:支持对绩效奖金、补贴、扣款进行微调。
- 技术实现
- 服务层封装奖金计算与记录生成逻辑。
- API 层提供生成、确认、批量处理接口。
- 前端提供编辑弹窗与批量操作按钮。
- 业务价值
- 减少手工计算误差,提高薪酬发放效率与一致性。
```mermaid
flowchart TD
S(["开始"]) --> Fetch["读取已确认考核记录"]
Fetch --> Calc["计算绩效奖金 = 基数×(得分/100)×系数"]
Calc --> Create["创建工资记录(含基本工资+奖金)"]
Create --> Pending["状态=待确认"]
Pending --> Confirm["批量确认/手动确认"]
Confirm --> Pay["薪酬发放"]
Pay --> E(["结束"])
```
图示来源
- [backend/app/services/salary_service.py](file://backend/app/services/salary_service.py#L127-L190)
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py#L96-L156)
- [frontend/src/views/salary/Salary.vue](file://frontend/src/views/salary/Salary.vue#L247-L306)
章节来源
- [backend/app/services/salary_service.py](file://backend/app/services/salary_service.py#L17-L190)
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py#L71-L156)
- [frontend/src/views/salary/Salary.vue](file://frontend/src/views/salary/Salary.vue#L190-L311)
### 丰富的数据分析报表
- 功能亮点
- 维度分析:按财务、客户、内部流程、学习与成长维度统计得分。
- 科室统计:按科室汇总平均分、员工数、奖金总额等。
- 趋势分析:按月度展示平均得分与加权得分趋势。
- 排名:按加权得分对员工进行排名。
- 指标完成度:统计指标平均分与完成率。
- 技术实现
- 服务层聚合统计并返回结构化数据。
- API 层提供多类统计接口。
- 前端使用 ECharts 渲染图表与表格。
- 业务价值
- 为管理层提供决策依据,及时发现异常与改进机会。
```mermaid
sequenceDiagram
participant U as "用户"
participant FE as "报表页面"
participant API as "统计接口"
participant SVC as "统计服务"
participant DB as "数据库"
U->>FE : 选择统计周期
FE->>API : GET /stats/department
API->>SVC : 聚合科室统计
SVC->>DB : 查询/聚合
SVC-->>API : 返回统计结果
API-->>FE : 渲染表格与图表
FE-->>U : 展示维度分析/趋势/排名
```
图示来源
- [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L36-L242)
- [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L75-L146)
- [frontend/src/views/reports/Reports.vue](file://frontend/src/views/reports/Reports.vue#L134-L171)
章节来源
- [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L17-L242)
- [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L16-L300)
- [frontend/src/views/reports/Reports.vue](file://frontend/src/views/reports/Reports.vue#L134-L308)
### 指标模板管理(扩展与定制)
- 功能亮点
- 模板类型:通用、手术临床、非手术有病房、非手术无病房、医技、护理、行政、后勤等。
- 维度权重:支持为模板配置财务、客户、内部流程、学习与成长权重。
- 指标集合:支持为模板添加/编辑/移除指标,设置目标值、权重、评分方法等。
- 技术实现
- 模型层定义模板与模板指标关联。
- 服务层提供模板 CRUD 与指标管理。
- 前端提供模板列表、详情、编辑与指标管理界面。
- 业务价值
- 快速复制成熟模板,降低指标设计成本,提升一致性与可复用性。
```mermaid
classDiagram
class IndicatorTemplate {
+template_name
+template_code
+template_type
+dimension_weights
+assessment_cycle
}
class TemplateIndicator {
+indicator_id
+category
+target_value
+weight
+scoring_method
}
IndicatorTemplate "1" o-- "many" TemplateIndicator : "包含"
```
图示来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L387-L438)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L698-L743)
- [frontend/src/views/basic/Templates.vue](file://frontend/src/views/basic/Templates.vue#L356-L572)
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L387-L438)
- [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py#L640-L743)
- [frontend/src/views/basic/Templates.vue](file://frontend/src/views/basic/Templates.vue#L356-L638)
### 权限控制系统(扩展与定制)
- 功能亮点
- 角色与菜单:支持管理员、经理、普通员工等角色,菜单权限控制。
- 操作权限:部分流程(提交、审核、确认、生成、确认工资)需具备相应角色。
- 技术实现
- 安全中间件与依赖注入校验当前用户与角色。
- API 层通过装饰器限制操作权限。
- 业务价值
- 确保流程合规与数据安全,防止越权操作。
章节来源
- [backend/app/api/v1/performance_plans.py](file://backend/app/api/v1/performance_plans.py#L194-L225)
- [backend/app/api/v1/assessments.py](file://backend/app/api/v1/assessments.py#L105-L132)
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py#L71-L93)
## 依赖关系分析
- 组件耦合
- API 层仅依赖服务层接口,职责清晰,便于测试与替换。
- 服务层依赖模型层进行数据持久化,避免直接操作数据库。
- 前端通过 API 层与后端交互,不直接依赖服务层。
- 外部依赖
- 数据库PostgreSQLORMSQLAlchemy。
- WebFastAPI异步 IO 支持。
- 前端Vue 3、Element Plus、ECharts。
- 潜在风险
- 统计查询复杂度随数据量增长而上升,建议在关键字段建立索引与缓存策略。
```mermaid
graph LR
FE["前端"] --> API["API 路由"]
API --> SVC["服务层"]
SVC --> ORM["SQLAlchemy 模型"]
ORM --> DB["PostgreSQL"]
```
图示来源
- [backend/app/main.py](file://backend/app/main.py#L15-L77)
- [backend/app/models/models.py](file://backend/app/models/models.py#L1-L438)
- [backend/app/services/performance_plan_service.py](file://backend/app/services/performance_plan_service.py#L15-L342)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L14-L263)
- [backend/app/services/salary_service.py](file://backend/app/services/salary_service.py#L14-L260)
- [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L16-L300)
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L1-L438)
- [backend/app/services/performance_plan_service.py](file://backend/app/services/performance_plan_service.py#L15-L342)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L14-L263)
- [backend/app/services/salary_service.py](file://backend/app/services/salary_service.py#L14-L260)
- [backend/app/services/stats_service.py](file://backend/app/services/stats_service.py#L16-L300)
## 性能考虑
- 查询优化
- 对常用筛选字段(如状态、周期、部门)建立索引,减少全表扫描。
- 使用分页与子查询统计总数,避免一次性加载大量数据。
- 计算优化
- 工资计算与统计聚合尽量在服务层一次性完成,减少往返次数。
- 对高频报表(如维度分析、趋势分析)引入缓存或物化视图。
- 前端体验
- 使用虚拟滚动与懒加载展示长列表,提升交互流畅度。
- 图表渲染采用防抖与 resize 监听,避免频繁重绘。
## 故障排查指南
- 常见问题
- 状态不可逆:若状态非草稿或非已提交,提交/审核/确认接口会返回失败。
- 重复生成:若已存在对应周期的工资记录,生成接口会拒绝重复创建。
- 权限不足:提交、审核、确认、生成、确认工资等接口需具备相应角色。
- 定位方法
- 查看后端日志与异常捕获,定位具体错误原因。
- 前端检查请求参数与响应状态码,确认必填项与格式。
- 处理建议
- 对状态机错误,先刷新页面查看最新状态再执行后续操作。
- 对权限错误,确认当前用户角色与菜单权限配置。
章节来源
- [backend/app/api/v1/assessments.py](file://backend/app/api/v1/assessments.py#L105-L132)
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py#L96-L110)
- [backend/app/main.py](file://backend/app/main.py#L58-L75)
## 结论
本系统以平衡计分卡为核心,贯通“计划—考核—工资—报表—模板—权限”全链路,既满足标准化管理需求,又提供灵活的扩展与定制能力。通过前后端分离与模块化设计,系统具备良好的可维护性与可扩展性,适合在不同规模与类型的医院落地应用。
## 附录
- 使用场景与案例
- 场景一:月度绩效考核
- 操作:管理员批量创建考核 → 考核人提交 → 主管审核 → 确认 → 自动生成工资 → 批量确认 → 发放。
- 价值:缩短考核周期,提升薪酬发放效率。
- 场景二:维度分析与改进
- 操作:查看维度分析 → 识别低分维度 → 下发改进计划 → 模板化固化 → 跟踪趋势。
- 价值:驱动持续改进,提升整体运营水平。
- 场景三:模板复用与推广
- 操作:选择成熟模板 → 调整权重与指标 → 应用到新科室 → 批量生成考核 → 统一口径。
- 价值:降低设计成本,提升一致性与可比性。
章节来源
- [frontend/src/views/assessment/Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L257-L286)
- [frontend/src/views/reports/Reports.vue](file://frontend/src/views/reports/Reports.vue#L134-L171)
- [frontend/src/views/basic/Templates.vue](file://frontend/src/views/basic/Templates.vue#L356-L572)

View File

@@ -0,0 +1,280 @@
# 系统介绍
<cite>
**本文引用的文件**
- [docs/index.md](file://docs/index.md)
- [docs/详细设计.md](file://docs/详细设计.md)
- [backend/app/main.py](file://backend/app/main.py)
- [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py)
- [backend/app/models/models.py](file://backend/app/models/models.py)
- [backend/app/api/v1/assessments.py](file://backend/app/api/v1/assessments.py)
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py)
- [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py)
- [backend/app/services/salary_service.py](file://backend/app/services/salary_service.py)
- [frontend/src/router/index.js](file://frontend/src/router/index.js)
- [frontend/src/main.js](file://frontend/src/main.js)
</cite>
## 目录
1. [引言](#引言)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 引言
本系统面向县级中医院围绕“战略目标—执行—考核—改进”的闭环管理构建覆盖全院的绩效管理体系。系统以平衡计分卡BSC理论为指导将医院战略目标逐级分解到科室与个人层面通过信息化手段实现指标定义、数据采集、自动计算、流程审批与结果应用最终形成“目标-执行-考核-改进”的可持续管理模式。系统支持多维度、可量化的KPI体系覆盖全院各类科室与岗位支撑绩效工资核算、统计分析与可视化决策。
## 项目结构
系统采用前后端分离架构,后端基于 FastAPI + SQLAlchemy 2.0(异步),前端基于 Vue 3 + Element Plus数据库采用 PostgreSQL。核心模块包括基础数据管理、绩效考核、工资核算、统计报表、系统管理等路由与视图清晰划分便于扩展与维护。
```mermaid
graph TB
FE["前端应用<br/>Vue 3 + Element Plus"] --> BE["后端应用<br/>FastAPI + SQLAlchemy"]
BE --> DB["数据库<br/>PostgreSQL"]
FE --> API["API 接口<br/>/api/v1/*"]
API --> Services["服务层<br/>assessment_service / salary_service / stats_service"]
Services --> Models["数据模型<br/>Department / Staff / Indicator / Assessment / SalaryRecord"]
```
图表来源
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L1-L116)
- [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py#L1-L17)
- [backend/app/models/models.py](file://backend/app/models/models.py#L1-L438)
章节来源
- [docs/index.md](file://docs/index.md#L16-L71)
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L1-L116)
- [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py#L1-L17)
## 核心组件
- 基础数据管理:科室、员工、指标、指标模板、菜单等基础信息维护。
- 绩效考核管理:支持草稿→提交→审核→确认的流程化管理,支持批量创建与生成。
- 工资核算管理:基于考核结果自动生成工资记录,支持单条与批量确认。
- 统计报表:提供 BSC 维度分析、科室统计、趋势分析、周期统计、关键指标仪表盘等。
- 系统管理:菜单管理、用户与权限、工作流与日志等。
章节来源
- [docs/index.md](file://docs/index.md#L18-L26)
- [backend/app/api/v1/assessments.py](file://backend/app/api/v1/assessments.py#L1-L166)
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py#L1-L156)
- [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L1-L200)
## 架构总览
系统采用分层架构:前端负责交互与可视化,后端提供 REST API 与业务服务,数据层持久化到 PostgreSQL。核心业务流程包括“指标定义—方案配置—数据采集—自动计算—流程审批—结果应用”。
```mermaid
graph TB
subgraph "表现层"
UI["工作台 / 科室管理 / 员工管理 / 考核管理 / 工资核算 / 报表 / 系统管理"]
end
subgraph "应用层"
APIS["API 路由层<br/>/api/v1/*"]
SVC["服务层<br/>assessment_service / salary_service / stats_service"]
end
subgraph "数据层"
MODELS["数据模型<br/>Department / Staff / Indicator / Assessment / SalaryRecord / Menu / PerformancePlan / IndicatorTemplate"]
DB["PostgreSQL"]
end
UI --> APIS
APIS --> SVC
SVC --> MODELS
MODELS --> DB
```
图表来源
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L1-L116)
- [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py#L1-L17)
- [backend/app/models/models.py](file://backend/app/models/models.py#L1-L438)
## 详细组件分析
### 平衡计分卡BSC理论应用
- 维度设计:系统内置财务、客户(患者/内部客户)、内部流程、学习与成长四个维度,指标可标注对应维度,支持按维度聚合分析。
- 战略落地:通过“绩效计划”模块将医院战略目标逐级分解到科室与个人,形成“计划—执行—考核—改进”的闭环。
- 多元化评分:支持区间法、目标参照法、加分/扣分法、比较法等评分方法,确保客观公正。
- 结果应用:考核结果与绩效工资、晋升、评优等联动,驱动持续改进。
章节来源
- [docs/详细设计.md](file://docs/详细设计.md#L3-L26)
- [docs/详细设计.md](file://docs/详细设计.md#L59-L196)
- [backend/app/models/models.py](file://backend/app/models/models.py#L29-L35)
### 绩效考核管理流程
- 流程状态:草稿、已提交、已审核、已确认、已驳回,支持逐级审批与退回修正。
- 关键能力:单条创建/更新、批量创建、提交、审核、确认;支持按员工、科室、周期、状态过滤查询。
- 数据模型:考核主表、明细表、指标关联、员工与科室关系,保证数据完整性与可追溯性。
```mermaid
sequenceDiagram
participant U as "用户"
participant API as "API 路由"
participant Svc as "AssessmentService"
participant DB as "数据库"
U->>API : "POST /api/v1/assessments"
API->>Svc : "create(assessment_data)"
Svc->>DB : "插入 Assessment + AssessmentDetail"
DB-->>Svc : "返回主键与时间戳"
Svc-->>API : "Assessment 对象"
API-->>U : "{code : 200, data : {id}}"
U->>API : "POST /api/v1/assessments/{id}/submit"
API->>Svc : "submit(id)"
Svc->>DB : "更新状态=SUBMITTED"
DB-->>Svc : "刷新状态"
Svc-->>API : "Assessment 对象"
API-->>U : "{code : 200, message : '提交成功'}"
```
图表来源
- [backend/app/api/v1/assessments.py](file://backend/app/api/v1/assessments.py#L80-L116)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L70-L170)
章节来源
- [backend/app/api/v1/assessments.py](file://backend/app/api/v1/assessments.py#L1-L166)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L1-L200)
- [backend/app/models/models.py](file://backend/app/models/models.py#L149-L203)
### 工资核算管理流程
- 自动计算:根据已确认的考核加权得分与员工绩效系数,按固定公式计算绩效奖金,自动汇总应发工资。
- 批量生成:支持按科室批量生成工资记录,避免重复劳动。
- 状态控制:仅“待确认”状态可更新与确认,保证数据一致性。
```mermaid
sequenceDiagram
participant U as "用户"
participant API as "API 路由"
participant Svc as "SalaryService"
participant DB as "数据库"
U->>API : "POST /api/v1/salary/generate?staff_id=...&year=&month="
API->>Svc : "generate_from_assessment(staff_id, year, month)"
Svc->>DB : "查询 Staff 与已确认 Assessment"
Svc->>Svc : "calculate_performance_bonus()"
Svc->>DB : "插入 SalaryRecord(total_salary=pending)"
DB-->>Svc : "返回记录"
Svc-->>API : "SalaryRecord 对象"
API-->>U : "{code : 200, data : {id}}"
```
图表来源
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py#L96-L111)
- [backend/app/services/salary_service.py](file://backend/app/services/salary_service.py#L127-L191)
章节来源
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py#L1-L156)
- [backend/app/services/salary_service.py](file://backend/app/services/salary_service.py#L1-L200)
### 统计报表与分析
- BSC 维度分析:按财务、客户、内部流程、学习与成长四个维度聚合统计。
- 科室绩效统计:支持按周期查看各科室平均分、人数、排名等。
- 趋势分析:支持按月度趋势查看科室与个人得分变化。
- 关键指标仪表盘:床位使用率、药占比、材料占比、患者满意度等关键指标可视化。
- 周期统计:汇总当期周期内的科室数量、员工数量、平均分等。
章节来源
- [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L17-L200)
- [backend/app/models/models.py](file://backend/app/models/models.py#L29-L35)
### 数据模型与关系
系统通过清晰的实体关系支撑业务闭环,核心实体包括:科室、员工、指标、考核主表与明细、工资记录、菜单、绩效计划、指标模板等。
```mermaid
erDiagram
DEPARTMENTS ||--o{ STAFF : "拥有"
STAFF ||--o{ ASSESSMENTS : "参与"
STAFF ||--o{ SALARY_RECORDS : "产生"
INDICATORS ||--o{ ASSESSMENT_DETAILS : "被评分"
ASSESSMENTS ||--o{ ASSESSMENT_DETAILS : "包含"
USERS ||--o{ ASSESSMENTS : "审核/确认"
PERFORMANCE_PLANS ||--o{ PLAN_KPI_RELATIONS : "关联指标"
INDICATORS ||--o{ PLAN_KPI_RELATIONS : "被关联"
INDICATOR_TEMPLATES ||--o{ TEMPLATE_INDICATORS : "包含"
INDICATORS ||--o{ TEMPLATE_INDICATORS : "被引用"
MENUS ||--o{ MENUS : "父子关系"
```
图表来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L62-L438)
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L1-L438)
## 依赖分析
- 前端依赖Vue 3、Element Plus、Pinia、Vite、ECharts路由与图标注册国际化配置。
- 后端依赖FastAPI、SQLAlchemy 2.0异步、Pydantic v2、PostgreSQL、CORS 中间件。
- 模块耦合API 路由层薄封装,服务层集中业务逻辑,模型层定义数据与约束,降低耦合、提升可测试性。
```mermaid
graph LR
FE_Main["frontend/src/main.js"] --> FE_Router["frontend/src/router/index.js"]
BE_Main["backend/app/main.py"] --> API_Init["backend/app/api/v1/__init__.py"]
API_Init --> API_Assess["backend/app/api/v1/assessments.py"]
API_Init --> API_Salary["backend/app/api/v1/salary.py"]
API_Init --> API_Stats["backend/app/api/v1/stats.py"]
API_Assess --> Svc_Assess["backend/app/services/assessment_service.py"]
API_Salary --> Svc_Salary["backend/app/services/salary_service.py"]
Svc_Assess --> Models["backend/app/models/models.py"]
Svc_Salary --> Models
```
图表来源
- [frontend/src/main.js](file://frontend/src/main.js#L1-L24)
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L1-L116)
- [backend/app/main.py](file://backend/app/main.py#L1-L92)
- [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py#L1-L17)
- [backend/app/api/v1/assessments.py](file://backend/app/api/v1/assessments.py#L1-L166)
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py#L1-L156)
- [backend/app/api/v1/stats.py](file://backend/app/api/v1/stats.py#L1-L200)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L1-L200)
- [backend/app/services/salary_service.py](file://backend/app/services/salary_service.py#L1-L200)
- [backend/app/models/models.py](file://backend/app/models/models.py#L1-L438)
章节来源
- [frontend/src/main.js](file://frontend/src/main.js#L1-L24)
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L1-L116)
- [backend/app/main.py](file://backend/app/main.py#L1-L92)
- [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py#L1-L17)
## 性能考虑
- 异步数据库访问:使用 SQLAlchemy 2.0 异步会话,提升并发与吞吐。
- 查询优化:模型层建立索引(如科室类型、状态、周期等),服务层分页与条件过滤,减少全表扫描。
- 缓存策略:可引入 Redis 缓存热点指标与报表结果,降低数据库压力。
- 前端渲染ECharts 与 Element Plus 组件按需加载,路由懒加载,减少首屏体积。
- 批量操作:批量生成工资与批量确认接口,减少重复请求与事务开销。
## 故障排查指南
- 常见错误与定位
- 404资源不存在如考核/工资记录),检查 ID 与查询条件。
- 400状态不允许如非草稿/已确认状态下更新),检查流程状态机。
- 权限不足:审核/确认接口需管理员或经理权限,确认当前用户角色。
- 数据异常:核查指标权重、目标值、计算方法与数据来源配置。
- 日志与健康检查
- 后端提供健康检查接口,便于快速判断服务可用性。
- 全局异常与校验异常处理器记录请求 URL、状态码与异常信息便于定位问题。
- 前端路由守卫
- 登录态校验失败将重定向至登录页,检查本地存储 token 是否有效。
章节来源
- [backend/app/main.py](file://backend/app/main.py#L54-L75)
- [backend/app/api/v1/assessments.py](file://backend/app/api/v1/assessments.py#L91-L116)
- [backend/app/api/v1/salary.py](file://backend/app/api/v1/salary.py#L132-L156)
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L103-L113)
## 结论
本系统以平衡计分卡为核心理念,结合现代技术栈,构建了覆盖全院的绩效管理体系。通过标准化的流程、可量化的指标与自动化的计算,实现从“战略—执行—考核—改进”的闭环,支撑绩效工资核算与多维度分析,助力医院提升运营效率、医疗质量与服务水平。
## 附录
- 快速开始与默认账号
- 后端启动命令、前端启动命令与访问地址详见项目文档。
- 默认账号:用户名 admin密码 admin123。
- 技术栈概览
- 后端FastAPI + SQLAlchemy 2.0(异步)+ PostgreSQL + Pydantic v2。
- 前端Vue 3 + Element Plus + Pinia + Vite + ECharts。
章节来源
- [docs/index.md](file://docs/index.md#L41-L71)

View File

@@ -0,0 +1,429 @@
# 系统架构
<cite>
**本文引用的文件**
- [backend/app/main.py](file://backend/app/main.py)
- [backend/app/core/config.py](file://backend/app/core/config.py)
- [backend/app/core/database.py](file://backend/app/core/database.py)
- [backend/app/core/security.py](file://backend/app/core/security.py)
- [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py)
- [backend/app/api/v1/auth.py](file://backend/app/api/v1/auth.py)
- [backend/app/models/models.py](file://backend/app/models/models.py)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py)
- [backend/app/services/staff_service.py](file://backend/app/services/staff_service.py)
- [backend/requirements.txt](file://backend/requirements.txt)
- [frontend/src/main.js](file://frontend/src/main.js)
- [frontend/src/router/index.js](file://frontend/src/router/index.js)
- [frontend/src/stores/user.js](file://frontend/src/stores/user.js)
- [frontend/src/api/request.js](file://frontend/src/api/request.js)
- [frontend/package.json](file://frontend/package.json)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本系统为“医院绩效管理系统”,采用前后端分离架构,后端基于 FastAPI + SQLAlchemy 2.0 + PostgreSQL 的异步数据访问栈,前端基于 Vue 3 + Pinia + Element Plus。系统围绕“分层架构 + 微服务理念(按功能域拆分 API 路由)”组织模块,覆盖用户认证、基础数据管理(科室、员工、指标)、绩效考核(含流程化状态机)、工资核算、数据分析与报表、系统管理(菜单)等核心领域。
## 项目结构
- 后端Python/FastAPI
- 应用入口与中间件app/main.py
- 配置中心app/core/config.py
- 数据库连接与会话app/core/database.py
- 安全与认证app/core/security.py
- API 路由聚合app/api/v1/__init__.py
- 典型业务路由app/api/v1/auth.py 等
- 数据模型app/models/models.py
- 服务层app/services/*(如 assessment_service.py、staff_service.py
- 依赖声明backend/requirements.txt
- 前端Vue 3
- 应用入口frontend/src/main.js
- 路由frontend/src/router/index.js
- 状态管理frontend/src/stores/user.js
- HTTP 封装frontend/src/api/request.js
- 依赖声明frontend/package.json
```mermaid
graph TB
subgraph "前端"
FE_Main["frontend/src/main.js"]
FE_Router["frontend/src/router/index.js"]
FE_Store["frontend/src/stores/user.js"]
FE_API["frontend/src/api/request.js"]
end
subgraph "后端"
BE_App["backend/app/main.py"]
BE_Config["backend/app/core/config.py"]
BE_DB["backend/app/core/database.py"]
BE_Security["backend/app/core/security.py"]
BE_API_Auth["backend/app/api/v1/auth.py"]
BE_API_Router["backend/app/api/v1/__init__.py"]
BE_Models["backend/app/models/models.py"]
BE_Svc_Assess["backend/app/services/assessment_service.py"]
BE_Svc_Staff["backend/app/services/staff_service.py"]
end
FE_Main --> FE_Router
FE_Main --> FE_Store
FE_Main --> FE_API
FE_API --> BE_App
BE_App --> BE_API_Router
BE_API_Router --> BE_API_Auth
BE_App --> BE_DB
BE_App --> BE_Security
BE_DB --> BE_Models
BE_API_Auth --> BE_Security
BE_API_Auth --> BE_DB
BE_Svc_Assess --> BE_DB
BE_Svc_Staff --> BE_DB
```
图表来源
- [backend/app/main.py](file://backend/app/main.py#L15-L77)
- [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py#L1-L17)
- [backend/app/api/v1/auth.py](file://backend/app/api/v1/auth.py#L1-L74)
- [backend/app/core/database.py](file://backend/app/core/database.py#L1-L39)
- [backend/app/core/security.py](file://backend/app/core/security.py#L1-L110)
- [backend/app/models/models.py](file://backend/app/models/models.py#L1-L438)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L1-L263)
- [backend/app/services/staff_service.py](file://backend/app/services/staff_service.py#L1-L112)
- [frontend/src/main.js](file://frontend/src/main.js#L1-L24)
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L1-L116)
- [frontend/src/stores/user.js](file://frontend/src/stores/user.js#L1-L49)
- [frontend/src/api/request.js](file://frontend/src/api/request.js#L1-L66)
章节来源
- [backend/app/main.py](file://backend/app/main.py#L15-L77)
- [backend/app/core/config.py](file://backend/app/core/config.py#L1-L47)
- [backend/app/core/database.py](file://backend/app/core/database.py#L1-L39)
- [backend/app/core/security.py](file://backend/app/core/security.py#L1-L110)
- [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py#L1-L17)
- [backend/app/api/v1/auth.py](file://backend/app/api/v1/auth.py#L1-L74)
- [backend/app/models/models.py](file://backend/app/models/models.py#L1-L438)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L1-L263)
- [backend/app/services/staff_service.py](file://backend/app/services/staff_service.py#L1-L112)
- [frontend/src/main.js](file://frontend/src/main.js#L1-L24)
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L1-L116)
- [frontend/src/stores/user.js](file://frontend/src/stores/user.js#L1-L49)
- [frontend/src/api/request.js](file://frontend/src/api/request.js#L1-L66)
- [frontend/package.json](file://frontend/package.json#L1-L27)
- [backend/requirements.txt](file://backend/requirements.txt#L1-L17)
## 核心组件
- 应用入口与生命周期
- 后端通过 create_app 构建 FastAPI 实例,注册 CORS、全局异常处理器、健康检查端点并挂载 API 路由前缀。
- 前端通过 main.js 初始化应用、注册插件与路由,挂载到 DOM。
- 配置中心
- 统一读取 .env提供应用名、版本、API 前缀、数据库连接、JWT 参数、跨域白名单、分页参数等。
- 数据库与会话
- 使用 SQLAlchemy 2.0 异步引擎与会话工厂,提供 get_db 依赖注入,自动事务提交/回滚与关闭。
- 安全与认证
- 基于 OAuth2 密码流JWT 生成与校验,支持当前用户解析、活跃用户校验、管理员/经理权限校验。
- API 路由聚合
- v1 路由聚合器统一 include 各业务模块路由(认证、基础数据、考核、工资、统计、财务、计划、菜单、模板等)。
- 数据模型
- 覆盖科室、员工、指标、考核记录、考核明细、工资记录、绩效计划、计划-KPI 关联、菜单、指标模板等。
- 服务层
- AssessmentService 提供考核的增删改查、批量创建、状态流转(草稿/提交/审核/确认)。
- StaffService 提供员工的查询、创建、更新、删除、按科室检索。
- 前端
- 路由定义页面级视图Pinia Store 管理用户态Axios 封装统一请求/响应拦截与错误提示。
章节来源
- [backend/app/main.py](file://backend/app/main.py#L15-L77)
- [backend/app/core/config.py](file://backend/app/core/config.py#L9-L47)
- [backend/app/core/database.py](file://backend/app/core/database.py#L9-L39)
- [backend/app/core/security.py](file://backend/app/core/security.py#L21-L110)
- [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py#L1-L17)
- [backend/app/models/models.py](file://backend/app/models/models.py#L62-L438)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L14-L263)
- [backend/app/services/staff_service.py](file://backend/app/services/staff_service.py#L13-L112)
- [frontend/src/main.js](file://frontend/src/main.js#L1-L24)
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L1-L116)
- [frontend/src/stores/user.js](file://frontend/src/stores/user.js#L1-L49)
- [frontend/src/api/request.js](file://frontend/src/api/request.js#L1-L66)
## 架构总览
系统采用“前后端分离 + 分层架构 + 微服务理念(按功能域拆分 API
- 展示层Vue 3 单页应用Element Plus 组件库Pinia 状态管理。
- 控制层FastAPI 路由与依赖注入OAuth2/JWT 认证CORS 放通。
- 业务层:服务类封装业务规则与流程(如考核状态机)。
- 数据层SQLAlchemy 2.0 ORM + 异步数据库连接PostgreSQL。
- 数据模型:强类型枚举与关系映射,确保数据一致性与可维护性。
```mermaid
graph TB
UI["前端界面<br/>Vue 3 + Element Plus"] --> API["后端 API<br/>FastAPI"]
API --> AUTH["认证与授权<br/>JWT/OAuth2"]
API --> SVC["服务层<br/>业务规则与流程"]
API --> ORM["数据访问<br/>SQLAlchemy 异步"]
ORM --> DB["数据库<br/>PostgreSQL"]
AUTH --- SEC["安全工具<br/>密码哈希/令牌"]
SVC --- MODELS["数据模型<br/>枚举/关系"]
```
图表来源
- [backend/app/main.py](file://backend/app/main.py#L19-L48)
- [backend/app/core/security.py](file://backend/app/core/security.py#L24-L110)
- [backend/app/core/database.py](file://backend/app/core/database.py#L10-L39)
- [backend/app/models/models.py](file://backend/app/models/models.py#L16-L61)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L14-L206)
- [frontend/src/main.js](file://frontend/src/main.js#L1-L24)
## 详细组件分析
### 认证与授权组件
- 后端
- OAuth2 密码流令牌端点,登录时校验用户名/密码与账户状态,签发 JWT。
- 当前用户解析与权限校验(活跃用户、管理员、经理)。
- 前端
- 登录成功写入本地存储 token后续请求自动附加 Authorization 头。
- 401 自动跳转登录页,统一错误提示。
```mermaid
sequenceDiagram
participant U as "用户"
participant FE as "前端"
participant API as "后端 API"
participant SEC as "安全模块"
participant DB as "数据库"
U->>FE : 输入账号密码
FE->>API : POST /api/v1/auth/login
API->>SEC : 校验密码/账户状态
SEC->>DB : 查询用户
DB-->>SEC : 用户信息
SEC-->>API : 生成访问令牌
API-->>FE : 返回 access_token
FE->>FE : 保存 token 到本地存储
FE->>API : 后续请求携带 Authorization
```
图表来源
- [backend/app/api/v1/auth.py](file://backend/app/api/v1/auth.py#L17-L38)
- [backend/app/core/security.py](file://backend/app/core/security.py#L55-L91)
- [frontend/src/api/request.js](file://frontend/src/api/request.js#L15-L26)
- [frontend/src/stores/user.js](file://frontend/src/stores/user.js#L11-L20)
章节来源
- [backend/app/api/v1/auth.py](file://backend/app/api/v1/auth.py#L17-L38)
- [backend/app/core/security.py](file://backend/app/core/security.py#L55-L110)
- [frontend/src/api/request.js](file://frontend/src/api/request.js#L15-L63)
- [frontend/src/stores/user.js](file://frontend/src/stores/user.js#L11-L49)
### 绩效考核组件
- 服务层
- 支持按条件筛选、分页、关联加载(员工与科室、指标)。
- 创建/更新时计算总分与加权得分,支持批量为科室员工初始化考核。
- 状态机:草稿 → 提交 → 审核(通过/驳回)→ 确认。
- 数据模型
- Assessment/AssessmentDetail/Indicator/Staff 等多表关联,索引覆盖常用查询字段。
```mermaid
flowchart TD
Start(["开始"]) --> Create["创建考核记录<br/>计算总分/加权分"]
Create --> Details["创建明细项<br/>关联指标"]
Details --> Submit["提交考核<br/>状态=提交"]
Submit --> Review{"审核通过?"}
Review --> |是| Approve["审核通过<br/>状态=审核通过"]
Review --> |否| Reject["审核驳回<br/>状态=驳回"]
Approve --> Finalize["确认考核<br/>状态=确认"]
Reject --> End(["结束"])
Finalize --> End
```
图表来源
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L71-L206)
- [backend/app/models/models.py](file://backend/app/models/models.py#L149-L203)
章节来源
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L18-L263)
- [backend/app/models/models.py](file://backend/app/models/models.py#L149-L203)
### 员工管理组件
- 服务层
- 支持按科室、状态、关键词搜索,分页返回员工列表与总数。
- 提供创建、更新、删除、按科室获取在职员工等能力。
- 数据模型
- Staff 与 Department 多对一关系,索引覆盖常用过滤字段。
```mermaid
classDiagram
class Staff {
+int id
+string employee_id
+string name
+int department_id
+string position
+float base_salary
+float performance_ratio
+StaffStatus status
}
class Department {
+int id
+string name
+string code
+DeptType dept_type
}
Staff --> Department : "属于"
```
图表来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L88-L114)
- [backend/app/models/models.py](file://backend/app/models/models.py#L62-L86)
章节来源
- [backend/app/services/staff_service.py](file://backend/app/services/staff_service.py#L17-L112)
- [backend/app/models/models.py](file://backend/app/models/models.py#L88-L114)
### 数据模型与关系
- 关键实体与枚举:科室类型、平衡计分卡维度、员工状态、考核状态、指标类型、计划状态、菜单类型、模板类型等。
- 主要关系:部门-员工(一对多)、员工-考核(一对多)、考核-明细(一对多)、明细-指标(多对一)、计划-KPI 关联、菜单父子关系等。
- 索引策略:在常用过滤字段上建立索引,提升查询性能。
```mermaid
erDiagram
DEPARTMENTS ||--o{ STAFF : "拥有"
STAFF ||--o{ ASSESSMENTS : "被考核"
ASSESSMENTS ||--o{ ASSESSMENT_DETAILS : "包含"
INDICATORS ||--o{ ASSESSMENT_DETAILS : "被使用"
STAFF ||--o{ SALARY_RECORDS : "产生"
PERFORMANCE_PLANS ||--o{ PLAN_KPI_RELATIONS : "关联"
INDICATORS ||--o{ PLAN_KPI_RELATIONS : "被纳入"
MENUS ||--o{ MENUS : "父子"
```
图表来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L62-L438)
章节来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L16-L438)
### 前后端交互与路由
- 前端
- 路由定义页面级视图,包含仪表盘、基础数据、考核管理、工资核算、统计报表、经济核算、绩效计划、系统管理等。
- 路由守卫校验 token未登录重定向至登录页。
- 后端
- API 路由前缀统一为 /api/v1各模块独立注册。
- 认证模块提供登录、注册、当前用户信息接口。
```mermaid
sequenceDiagram
participant R as "浏览器"
participant RT as "前端路由"
participant AX as "Axios 请求"
participant AP as "FastAPI 路由"
participant DB as "数据库"
R->>RT : 访问 / 或具体页面
RT->>AX : 发起 API 请求
AX->>AP : /api/v1/...带 Authorization
AP->>DB : 查询/写入数据
DB-->>AP : 返回结果
AP-->>AX : JSON 响应
AX-->>RT : 渲染页面
```
图表来源
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L104-L113)
- [frontend/src/api/request.js](file://frontend/src/api/request.js#L7-L12)
- [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py#L1-L17)
章节来源
- [frontend/src/router/index.js](file://frontend/src/router/index.js#L1-L116)
- [frontend/src/api/request.js](file://frontend/src/api/request.js#L1-L66)
- [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py#L1-L17)
## 依赖关系分析
- 后端依赖
- Web 框架FastAPI
- 异步数据库SQLAlchemy 2.0 + asyncpg
- 安全python-jose + passlib[bcrypt]
- 配置pydantic-settings
- 测试pytest + pytest-asyncio
- 前端依赖
- 运行时vue、vue-router、pinia、axios、element-plus
- 构建vite、sass
```mermaid
graph LR
subgraph "后端"
F["FastAPI"]
S["SQLAlchemy 2.0"]
P["asyncpg"]
J["python-jose"]
B["passlib[bcrypt]"]
PS["pydantic-settings"]
PY["pytest + pytest-asyncio"]
end
subgraph "前端"
V["Vue 3"]
VR["vue-router"]
PI["Pinia"]
AX["axios"]
EP["Element Plus"]
VT["vite"]
SC["sass"]
end
F --> S
S --> P
F --> J
F --> B
F --> PS
F --> PY
V --> VR
V --> PI
V --> AX
V --> EP
V --> VT
V --> SC
```
图表来源
- [backend/requirements.txt](file://backend/requirements.txt#L1-L17)
- [frontend/package.json](file://frontend/package.json#L11-L25)
章节来源
- [backend/requirements.txt](file://backend/requirements.txt#L1-L17)
- [frontend/package.json](file://frontend/package.json#L1-L27)
## 性能考虑
- 异步 I/O后端使用 SQLAlchemy 2.0 异步引擎与会话,降低高并发下的阻塞。
- 连接池:通过配置池大小与溢出参数,平衡吞吐与资源占用。
- 查询优化:模型中为高频过滤字段建立索引,服务层使用 selectinload 减少 N+1 查询。
- 分页与总数:服务层先统计总数再分页,避免一次性加载大结果集。
- 前端缓存:合理利用浏览器缓存与 Pinia 状态持久化,减少重复请求。
## 故障排查指南
- 登录失败
- 检查用户名/密码与账户状态;确认 JWT 生成与返回。
- 前端:确认 Authorization 头是否正确附加。
- 权限错误403
- 确认当前用户角色与所需权限;检查 get_current_admin_user/get_current_manager_user 逻辑。
- 数据库连接问题
- 检查 DATABASE_URL、池大小与超时配置确认 PostgreSQL 可达。
- 健康检查
- 访问 /health 端点确认服务可用与版本信息。
章节来源
- [backend/app/api/v1/auth.py](file://backend/app/api/v1/auth.py#L30-L34)
- [backend/app/core/security.py](file://backend/app/core/security.py#L94-L109)
- [backend/app/core/config.py](file://backend/app/core/config.py#L18-L21)
- [backend/app/main.py](file://backend/app/main.py#L54-L56)
- [frontend/src/api/request.js](file://frontend/src/api/request.js#L39-L62)
## 结论
本系统以“前后端分离 + 分层架构 + 微服务理念”实现模块化与可扩展性,结合异步数据库访问与严格的权限控制,满足医院绩效管理在数据一致性、安全性与可维护性方面的关键需求。建议持续完善测试覆盖、日志与监控体系,并在生产环境调整安全密钥与跨域策略。
## 附录
- 部署建议
- 后端:使用 uvicorn 运行配置反向代理Nginx与 HTTPS分离 .env 与敏感配置。
- 前端:构建产物部署至静态服务器或 CDN配置正确的 API 前缀与跨域。
- 开发建议
- 使用 Alembic 管理数据库迁移;完善单元与集成测试;引入 OpenAPI 文档与 Redoc。

View File

@@ -0,0 +1,347 @@
# 项目概述
<cite>
**本文引用的文件**
- [README.md](file://README.md)
- [docs/index.md](file://docs/index.md)
- [docs/详细设计.md](file://docs/详细设计.md)
- [backend/app/main.py](file://backend/app/main.py)
- [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py)
- [backend/app/core/config.py](file://backend/app/core/config.py)
- [backend/app/models/models.py](file://backend/app/models/models.py)
- [backend/app/api/v1/assessments.py](file://backend/app/api/v1/assessments.py)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py)
- [backend/app/api/v1/performance_plans.py](file://backend/app/api/v1/performance_plans.py)
- [backend/app/services/indicator_service.py](file://backend/app/services/indicator_service.py)
- [frontend/src/main.js](file://frontend/src/main.js)
- [frontend/package.json](file://frontend/package.json)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本项目为县级中医院打造的“医院绩效管理系统”围绕平衡计分卡BSC理论构建覆盖财务、客户、内部流程、学习与成长四个维度的绩效管理体系。系统支持指标模板化、计划与考核流程化、工资核算自动化以及多维度统计分析旨在将医院战略目标逐级分解到科室与个人形成“目标—执行—考核—改进”的闭环管理提升运营效率、医疗质量与服务水平。
- 适用场景:县级及以上公立中医院的全院级绩效管理,涵盖临床、医技、护理、行政、后勤等多科室类型。
- 核心用户:院级管理者、科室主任、普通员工、绩效管理员、财务与人事相关人员。
- 预期收益:统一指标口径、降低人工干预、提高考核透明度与效率、支撑绩效工资与晋升评优等结果应用。
章节来源
- file://docs/index.md#L16-L26
- file://docs/详细设计.md#L3-L17
## 项目结构
系统采用前后端分离架构,后端基于 FastAPI + SQLAlchemy 2.0 异步 ORM前端基于 Vue 3 + Element Plus数据库采用 PostgreSQL具备良好的扩展性与工程化能力。
```mermaid
graph TB
FE["前端应用<br/>Vue 3 + Element Plus"] --> API["后端API<br/>FastAPI + Uvicorn"]
API --> DB["数据库<br/>PostgreSQL 14+"]
API --> AUTH["认证与安全<br/>JWT + 权限控制"]
API --> SVC["业务服务层<br/>异步服务封装"]
SVC --> MODELS["数据模型<br/>SQLAlchemy ORM"]
```
图表来源
- [backend/app/main.py](file://backend/app/main.py#L19-L39)
- [backend/app/core/config.py](file://backend/app/core/config.py#L18-L21)
- [frontend/src/main.js](file://frontend/src/main.js#L1-L24)
章节来源
- file://docs/index.md#L27-L40
- file://backend/app/main.py#L1-L92
- file://backend/app/core/config.py#L1-L47
- file://frontend/package.json#L11-L26
## 核心组件
- 系统入口与路由聚合
- 后端应用通过主程序创建 FastAPI 实例,注册跨域中间件与全局异常处理,并挂载 v1 版本 API 路由器。
- API 路由器集中包含认证、部门、员工、指标、考核、工资、统计、财务、计划、菜单、模板等模块。
- 数据模型与枚举
- 定义了平衡计分卡维度枚举、科室类型、员工状态、考核状态、指标类型等,支撑多维度指标与流程控制。
- 业务服务层
- 提供指标、考核、绩效计划等核心业务的查询、创建、更新、流程推进等服务方法,保证数据一致性与事务边界。
- 前端应用
- 使用 Vue 3 Composition API、Element Plus UI、Pinia 状态管理、Vite 构建,提供登录、导航、视图与交互组件。
章节来源
- file://backend/app/main.py#L15-L78
- file://backend/app/api/v1/__init__.py#L1-L17
- file://backend/app/models/models.py#L29-L61
- file://frontend/src/main.js#L1-L24
## 架构总览
系统采用分层架构表现层负责用户交互应用层承载业务流程服务层封装数据访问与领域逻辑数据层持久化与外部系统集成。API 层统一对外提供 REST 接口,支持分页、过滤与鉴权。
```mermaid
graph TB
subgraph "表现层"
UI["Web门户/管理界面"]
end
subgraph "应用层"
AUTHM["认证模块"]
PLANM["计划管理模块"]
ASSESSM["考核管理模块"]
SALARYM["工资核算模块"]
STATSM["统计分析模块"]
end
subgraph "服务层"
SVCA["指标服务"]
SVCB["考核服务"]
SVCC["计划服务"]
end
subgraph "数据层"
MODELS["数据模型/ORM"]
DB["PostgreSQL"]
end
UI --> AUTHM
UI --> PLANM
UI --> ASSESSM
UI --> SALARYM
UI --> STATSM
AUTHM --> SVCA
PLANM --> SVCC
ASSESSM --> SVCB
SALARYM --> SVCB
STATSM --> SVCA
STATSM --> SVCB
STATSM --> SVCC
SVCA --> MODELS
SVCB --> MODELS
SVCC --> MODELS
MODELS --> DB
```
图表来源
- [backend/app/api/v1/performance_plans.py](file://backend/app/api/v1/performance_plans.py#L1-L200)
- [backend/app/api/v1/assessments.py](file://backend/app/api/v1/assessments.py#L1-L166)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L1-L200)
- [backend/app/models/models.py](file://backend/app/models/models.py#L117-L147)
## 详细组件分析
### 平衡计分卡BSC维度与指标体系
- 四个维度映射
- 财务维度:关注收入、成本、结余等财务指标,支撑资源投入与回报评估。
- 客户维度:聚焦患者满意度、服务效率、医疗质量等,体现外部客户价值。
- 内部流程维度:强调诊疗流程、院感控制、药品耗材管理等内部运营效率。
- 学习与成长维度:关注人员培训、信息系统能力、科研教学等可持续发展能力。
- 指标类型与模板
- 指标类型包括质量、数量、效率、服务、成本等;系统内置多科室类型的指标模板,支持按模板导入与覆盖。
- 指标包含维度、权重、目标值、计算方法、适用科室类型等元数据,支撑差异化考核。
```mermaid
classDiagram
class Indicator {
+名称
+编码
+指标类型
+平衡计分卡维度
+权重
+最高分值
+目标值
+计算方法
+适用科室类型
+是否一票否决
}
class IndicatorTemplate {
+模板名称
+模板编码
+模板类型
+维度权重
+考核周期
}
class TemplateIndicator {
+目标值
+权重
+评分方法
+排序
}
IndicatorTemplate "1" o-- "many" TemplateIndicator : "包含"
TemplateIndicator "many" --> "1" Indicator : "关联"
```
图表来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L117-L147)
- [backend/app/models/models.py](file://backend/app/models/models.py#L387-L438)
- [backend/app/services/indicator_service.py](file://backend/app/services/indicator_service.py#L106-L154)
章节来源
- file://backend/app/models/models.py#L29-L61
- file://backend/app/models/models.py#L117-L147
- file://backend/app/models/models.py#L387-L438
- file://backend/app/services/indicator_service.py#L157-L197
### 绩效计划管理(从战略到执行)
- 功能要点
- 支持医院级、科室级、个人级三层计划,明确年度/月度目标、关键举措与责任人。
- 提供计划树形结构、统计信息、审批流程与版本管理。
- 关键流程
- 制定 → 上报 → 审批 → 发布 → 执行 → 跟踪 → 评估 → 调整。
```mermaid
sequenceDiagram
participant Admin as "管理员"
participant PlanAPI as "计划API"
participant PlanSvc as "计划服务"
participant DB as "数据库"
Admin->>PlanAPI : 创建/更新/提交计划
PlanAPI->>PlanSvc : 调用业务方法
PlanSvc->>DB : 写入计划与关联指标
DB-->>PlanSvc : 返回结果
PlanSvc-->>PlanAPI : 返回响应
PlanAPI-->>Admin : 成功/失败提示
```
图表来源
- [backend/app/api/v1/performance_plans.py](file://backend/app/api/v1/performance_plans.py#L161-L200)
- [backend/app/api/v1/performance_plans.py](file://backend/app/api/v1/performance_plans.py#L98-L158)
章节来源
- file://docs/详细设计.md#L59-L68
- file://backend/app/api/v1/performance_plans.py#L21-L96
### 绩效考核流程(草稿→提交→审核→确认)
- 流程节点
- 草稿:允许修改与保存。
- 已提交:进入审核环节。
- 已审核:等待最终确认。
- 已确认:流程结束,可进入工资核算。
- 关键接口
- 列表查询、详情查看、创建、更新、提交、审核、确认、批量创建等。
```mermaid
stateDiagram-v2
[*] --> 草稿
草稿 --> 已提交 : "提交"
已提交 --> 已审核 : "审核通过"
已提交 --> 已驳回 : "审核驳回"
已审核 --> 已确认 : "确认"
已确认 --> [*]
已驳回 --> 草稿 : "修改后重新提交"
```
图表来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L45-L52)
- [backend/app/api/v1/assessments.py](file://backend/app/api/v1/assessments.py#L105-L146)
章节来源
- file://docs/详细设计.md#L111-L121
- file://backend/app/api/v1/assessments.py#L20-L166
- file://backend/app/services/assessment_service.py#L158-L200
### 薪酬核算与结果应用
- 核算依据
- 基于考核结果与绩效系数,结合基本工资、绩效得分、奖惩与补贴等要素,自动生成绩效工资。
- 应用联动
- 考核结果与职称晋升、评优评先、培训发展、岗位调整等人力资源决策联动。
```mermaid
flowchart TD
Start(["开始"]) --> LoadAssess["加载考核结果"]
LoadAssess --> CalcScore["计算绩效得分与加权分"]
CalcScore --> FetchRules["读取薪酬规则"]
FetchRules --> Compute["计算绩效奖金/扣款"]
Compute --> Approve["审批/确认"]
Approve --> Publish["发布工资记录"]
Publish --> End(["结束"])
```
图表来源
- [backend/app/models/models.py](file://backend/app/models/models.py#L205-L231)
- [backend/app/services/assessment_service.py](file://backend/app/services/assessment_service.py#L71-L108)
章节来源
- file://docs/详细设计.md#L132-L144
- file://backend/app/models/models.py#L205-L231
### 前端交互与用户体验
- 技术栈
- Vue 3 + Composition API、Element Plus UI 组件库、Pinia 状态管理、Axios 请求、Vite 构建。
- 能力
- 登录认证、路由导航、视图组件化、图表展示ECharts、国际化与主题样式。
章节来源
- file://frontend/src/main.js#L1-L24
- file://frontend/package.json#L11-L26
## 依赖分析
- 后端依赖
- FastAPI + Uvicorn高性能异步 Web 框架与 ASGI 服务器。
- SQLAlchemy 2.0async异步 ORM支持 PostgreSQL。
- Pydantic v2数据验证与序列化。
- JWT用户认证与权限控制。
- 前端依赖
- Vue 3、Element Plus、Pinia、ECharts、Day.js、Axios、Vite。
```mermaid
graph LR
Backend["后端依赖"] --> FastAPI["FastAPI"]
Backend --> SQLA["SQLAlchemy 2.0(async)"]
Backend --> Postgres["PostgreSQL"]
Backend --> JWT["Pydantic/JWT"]
Frontend["前端依赖"] --> Vue["Vue 3"]
Frontend --> EP["Element Plus"]
Frontend --> Pinia["Pinia"]
Frontend --> ECharts["ECharts"]
Frontend --> Axios["Axios"]
Frontend --> Vite["Vite"]
```
图表来源
- [docs/index.md](file://docs/index.md#L27-L40)
- [backend/app/core/config.py](file://backend/app/core/config.py#L18-L26)
- [frontend/package.json](file://frontend/package.json#L11-L26)
章节来源
- file://docs/index.md#L27-L40
- file://backend/app/core/config.py#L18-L26
- file://frontend/package.json#L11-L26
## 性能考虑
- 异步 I/O 与连接池
- 使用异步 SQLAlchemy 与数据库连接池,提升并发与吞吐。
- 查询优化
- 模型层建立索引(如科室类型、状态、时间范围等),服务层使用分页与条件过滤,避免全表扫描。
- 缓存与计算
- 对高频指标与统计结果可引入 Redis 缓存,减少重复计算。
- 前端性能
- 组件懒加载、按需引入 UI 组件、图表按需渲染,降低首屏压力。
## 故障排查指南
- 常见问题定位
- API 异常:检查全局异常处理器日志,定位请求 URL、状态码与错误堆栈。
- 数据库连接:确认数据库地址、端口、凭据与连接池配置。
- 权限与认证:核对 JWT 密钥、过期时间与前端 Token 存储。
- 日志与健康检查
- 后端提供健康检查接口,前端可访问 API 文档与调试页面。
- 查看应用日志与错误日志,定位业务异常与参数校验失败。
章节来源
- file://backend/app/main.py#L58-L76
- file://backend/app/core/config.py#L18-L33
- file://docs/index.md#L48-L71
## 结论
本系统以平衡计分卡为核心理念,结合指标模板化、计划与考核流程化、薪酬自动化与多维分析,构建了覆盖全院的绩效管理体系。通过前后端分离与现代化技术栈,系统具备良好的可扩展性与工程化能力,能够有效支撑医院的战略落地与持续改进。
## 附录
- 快速启动
- 后端:安装依赖、复制环境变量示例、迁移数据库、启动服务。
- 前端:安装依赖、启动开发服务器。
- 访问地址
- 前端:本地开发端口
- API 文档Swagger UI
章节来源
- file://docs/index.md#L41-L71