提交文件
This commit is contained in:
289
.qoder/repowiki/zh/content/项目概述/快速开始.md
Normal file
289
.qoder/repowiki/zh/content/项目概述/快速开始.md
Normal 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)
|
||||
397
.qoder/repowiki/zh/content/项目概述/技术栈.md
Normal file
397
.qoder/repowiki/zh/content/项目概述/技术栈.md
Normal 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 文档)
|
||||
- ORM:SQLAlchemy 2.0(异步引擎、声明式映射)
|
||||
- 数据库:PostgreSQL(生产)、SQLite(迁移/测试)
|
||||
- 迁移:Alembic(异步迁移)
|
||||
- 认证与安全:Pydantic 设置、JWt、Passlib、CORS
|
||||
- 服务器:Uvicorn(开发/生产)
|
||||
- 前端核心
|
||||
- 框架:Vue 3(组合式 API、响应式系统)
|
||||
- 路由:Vue Router 4
|
||||
- 状态:Pinia(轻量状态管理)
|
||||
- UI:Element 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)
|
||||
430
.qoder/repowiki/zh/content/项目概述/核心特性.md
Normal file
430
.qoder/repowiki/zh/content/项目概述/核心特性.md
Normal 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 层与后端交互,不直接依赖服务层。
|
||||
- 外部依赖
|
||||
- 数据库:PostgreSQL,ORM:SQLAlchemy。
|
||||
- Web:FastAPI,异步 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)
|
||||
280
.qoder/repowiki/zh/content/项目概述/系统介绍.md
Normal file
280
.qoder/repowiki/zh/content/项目概述/系统介绍.md
Normal 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)
|
||||
429
.qoder/repowiki/zh/content/项目概述/系统架构.md
Normal file
429
.qoder/repowiki/zh/content/项目概述/系统架构.md
Normal 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。
|
||||
347
.qoder/repowiki/zh/content/项目概述/项目概述.md
Normal file
347
.qoder/repowiki/zh/content/项目概述/项目概述.md
Normal 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.0(async):异步 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
|
||||
Reference in New Issue
Block a user