Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
feat: 添加用户密码重置功能并优化用户管理界面
refactor(用户管理): 重构用户表单和详情展示逻辑
fix(用户管理): 修复性别显示和角色岗位选择问题
docs: 更新README文档和图片引用路径
style: 清理无用图片资源并更新样式
  • Loading branch information
zhangtao
zhangtao committed Jul 20, 2025
commit 9f619fc065028f5123bfcf58335c8d3ed3a89c82
11 changes: 7 additions & 4 deletions README.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -230,12 +230,13 @@ fastapi_vue3_admin/devops/devops/nginx/nginx.conf
<tr>
<td><img src="./backend/static/image/job.png"/>Task Management</td>
<td><img src="./backend/static/image/docs.png"/>API Management</td>
<td><img src="./backend/static/image/redoc.png"/>Document Management</td>
<td><img src="./backend/static/image/info.png"/>Personal Information</td>
<td><img src="./backend/static/image/analysis.png"/>Analysis Management</td>
<td><img src="./backend/static/image/dict.png"/>Dictionary Management</td>
</tr>
<tr>
<td><img src="./backend/static/image/theme.png"/>Theme Management</td>
<td><img src="./backend/static/image/lock.png"/>Lock Management</td>
<td><img src="./backend/static/image/help.png"/>Online Documentation</td>
<td><img src="./backend/static/image/dict.png"/>Dictionary Management</td>
</tr>
</table>

Expand All @@ -253,7 +254,9 @@ Thanks to the contributions and support of the following projects, which have en
- [RuoYi-Vue3-FastAPI Project](https://gitee.com/insistence2022/RuoYi-Vue3-FastAPI)
- [APScheduler Project](https://github.com/agronholm/apscheduler)
- [Vite Project](https://github.com/vitejs/vite)

- [Vue3-element-admin Project](https://gitee.com/youlaiorg/vue3-element-admin)
- [Vue3-element-plus-admin Project](https://gitee.com/kailong110120130/vue-element-plus-admin)
-
---

## 🎨 Community
Expand Down
20 changes: 6 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -229,13 +229,14 @@ fastapi_vue3_amdin/devops/devops/nginx/nginx.conf
</tr>
<tr>
<td><img src="./backend/static/image/job.png"/>任务管理</td>
<td><img src="./backend/static/image/dict.png"/>字典管理</td>
<td><img src="./backend/static/image/analysis.png"/>分析管理</td>
<td><img src="./backend/static/image/docs.png"/>接口管理</td>
<td><img src="./backend/static/image/redoc.png"/>文档管理</td>
<td><img src="./backend/static/image/info.png"/>个人信息</td>
</tr>
</tr>
<td><img src="./backend/static/image/theme.png"/>系统主题</td>
<td><img src="./backend/static/image/help.png"/>在线文档</td>
<td><img src="./backend/static/image/dict.png"/>字典管理</td>
<td><img src="./backend/static/image/lock.png"/>系统锁屏</td>
</tr>
</table>

Expand All @@ -253,17 +254,8 @@ fastapi_vue3_amdin/devops/devops/nginx/nginx.conf
- [RuoYi-Vue3-FastAPI 项目](https://gitee.com/insistence2022/RuoYi-Vue3-FastAPI)
- [APScheduler 项目](https://github.com/agronholm/apscheduler)
- [Vite 项目](https://github.com/vitejs/vite)
## Project Source Code

| Project | Gitee | Github | GitCode|
| ---- | ----| ---- | ---- |
| vue3-element-admin ✅| [vue3-element-admin](https://gitee.com/youlaiorg/vue3-element-admin) | [vue3-element-admin](https://github.com/youlaitech/vue3-element-admin) | [vue3-element-admin](https://gitcode.com/youlai/vue3-element-admin) |
| vue3-element-admin JS Version| [vue3-element-admin-js](https://gitee.com/youlaiorg/vue3-element-admin-js) | [vue3-element-admin-js](https://github.com/youlaitech/vue3-element-admin-js) | [vue3-element-admin-js](https://gitcode.com/youlai/vue3-element-admin-js) |
| vue3-element-admin Lite Version | [vue3-element-template](https://gitee.com/youlaiorg/vue3-element-template) | [vue3-element-template](https://github.com/youlaitech/vue3-element-template) |[vue3-element-template](https://gitcode.com/youlai/vue3-element-template)|
| vue-uniapp-admin Mobile Version | [vue-uniapp-admin](https://gitee.com/youlaiorg/vue-uniapp-admin) | [vue-uniapp-admin](https://github.com/youlaitech/vue-uniapp-admin) |[vue-uniapp-admin](https://gitcode.com/youlai/vue-uniapp-admin)|
| Java Backend | [youlai-boot](https://gitee.com/youlaiorg/youlai-boot) | [youlai-boot](https://github.com/haoxianrui/youlai-boot.git) |[youlai-boot](https://gitcode.com/youlai/youlai-boot.git)|
| Node Backend | [youlai-nest](https://gitee.com/youlaiorg/youlai-nest) | [youlai-nest](https://github.com/haoxianrui/youlai-nest.git) |[youlai-nest](https://gitcode.com/youlai/youlai-nest.git)|
---
- [Vue3-element-admin 项目](https://gitee.com/youlaiorg/vue3-element-admin)
- [Vue3-element-plus-admin 项目](https://gitee.com/kailong110120130/vue-element-plus-admin)

## 🎨 社区

Expand Down
9 changes: 9 additions & 0 deletions backend/app/api/v1/controllers/system/user_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from app.api.v1.schemas.system.auth_schema import AuthSchema
from app.api.v1.schemas.system.user_schema import (
CurrentUserUpdateSchema,
ResetPasswordSchema,
UserCreateSchema,
UserForgetPasswordSchema,
UserRegisterSchema,
Expand Down Expand Up @@ -66,6 +67,14 @@ async def change_current_user_password_controller(
logger.info(f"修改密码成功: {result_dict}")
return SuccessResponse(data=result_dict, msg='修改密码成功, 请重新登录')

@router.put("/reset/password", summary="重置密码", description="重置密码")
async def change_current_user_password_controller(
data: ResetPasswordSchema,
auth: AuthSchema = Depends(get_current_user)
) -> JSONResponse:
result_dict = await UserService.reset_user_password_service(data=data, auth=auth)
logger.info(f"重置密码成功: {result_dict}")
return SuccessResponse(data=result_dict, msg='重置密码成功')

@router.post('/register', summary="注册用户", description="注册用户")
async def register_user_controller(
Expand Down
6 changes: 6 additions & 0 deletions backend/app/api/v1/schemas/system/user_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@ class UserChangePasswordSchema(BaseModel):
new_password: str = Field(default=None, max_length=128, description="新密码")


class ResetPasswordSchema(BaseModel):
"""修改密码"""
id: int = Field(..., description="主键ID")
password: str = Field(default=None, min_length=6, max_length=128, description="新密码")


class UserCreateSchema(CurrentUserUpdateSchema):
"""新增"""
model_config = ConfigDict(from_attributes=True)
Expand Down
17 changes: 17 additions & 0 deletions backend/app/api/v1/services/system/user_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
from app.api.v1.schemas.system.menu_schema import MenuOutSchema
from app.api.v1.schemas.system.user_schema import (
CurrentUserUpdateSchema,
ResetPasswordSchema,
UserOutSchema,
UserCreateSchema,
UserUpdateSchema,
Expand Down Expand Up @@ -244,6 +245,22 @@ async def change_user_password_service(cls, auth: AuthSchema, data: UserChangePa
new_password_hash = PwdUtil.set_password_hash(password=data.new_password)
new_user = await UserCRUD(auth).change_password_crud(id=user.id, password_hash=new_password_hash)
return UserOutSchema.model_validate(new_user).model_dump()

@classmethod
async def reset_user_password_service(cls, auth: AuthSchema, data: ResetPasswordSchema) -> Dict:
"""修改用户密码"""
if not data.password:
raise CustomException(msg='密码不能为空')

# 验证用户
user = await UserCRUD(auth).get_by_id_crud(id=data.id)
if not user:
raise CustomException(msg="用户不存在")

# 更新密码
new_password_hash = PwdUtil.set_password_hash(password=data.new_password)
new_user = await UserCRUD(auth).change_password_crud(id=user.id, password_hash=new_password_hash)
return UserOutSchema.model_validate(new_user).model_dump()

@classmethod
async def register_user_service(cls, auth: AuthSchema, data: UserRegisterSchema) -> Dict:
Expand Down
Binary file modified backend/dev_sql.db
Binary file not shown.
56 changes: 30 additions & 26 deletions backend/docs/index.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<div align="center">
<p align="center">
<img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/logo.png" width="100"/>
<img src="../static/image/logo.png" width="100"/>
</p>
<h2 align="center">Fastapi-Vue3-Admin v1.0.0</h2>
<h4 align="center">一套现代、开源、全栈融合的中后台快速开发平台,给个⭐️支持一下</h4>
Expand All @@ -26,6 +26,10 @@

---

简体中文 | [English](./README.en.md)

---

## 📘 项目介绍(作者:@1014TaoTao)

**Fastapi-Vue3-Admin** 是一套 **完全开源、高度模块化、技术先进的现代化快速开发平台**,旨在帮助开发者高效搭建高质量的企业级中后台系统。该项目采用 **前后端分离架构**,融合 Python 后端框架 `FastAPI` 和前端主流框架 `Vue3` 实现多端统一开发,提供了一站式开箱即用的开发体验。
Expand Down Expand Up @@ -206,32 +210,33 @@ fastapi_vue3_amdin/devops/devops/nginx/nginx.conf

<table>
<tr>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/login.png"/>登陆</td>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/dashboard.png"/>仪表盘</td>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/menu.png"/>菜单管理</td>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/dept.png"/>部门管理</td>
<td><img src="../static/image/login.png"/>登陆</td>
<td><img src="../static/image/dashboard.png"/>仪表盘</td>
<td><img src="../static/image/menu.png"/>菜单管理</td>
<td><img src="../static/image/dept.png"/>部门管理</td>
</tr>
<tr>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/position.png"/>岗位管理</td>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/role.png"/>角色管理</td>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/user.png"/>用户管理</td>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/log.png"/>日志管理</td>
<td><img src="../static/image/position.png"/>岗位管理</td>
<td><img src="../static/image/role.png"/>角色管理</td>
<td><img src="../static/image/user.png"/>用户管理</td>
<td><img src="../static/image/log.png"/>日志管理</td>
</tr>
<tr>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/config.png"/>配置管理</td>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/online.png"/>在线用户管理</td>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/service.png"/>服务器监控</td>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/cache.png"/>缓存监控</td>
<td><img src="../static/image/config.png"/>配置管理</td>
<td><img src="../static/image/online.png"/>在线用户管理</td>
<td><img src="../static/image/service.png"/>服务器监控</td>
<td><img src="../static/image/cache.png"/>缓存监控</td>
</tr>
<tr>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/job.png"/>任务管理</td>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/docs.png"/>接口管理</td>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/redoc.png"/>文档管理</td>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/info.png"/>个人信息</td>
<td><img src="../static/image/job.png"/>任务管理</td>
<td><img src="../static/image/dict.png"/>字典管理</td>
<td><img src="../static/image/analysis.png"/>分析管理</td>
<td><img src="../static/image/docs.png"/>接口管理</td>
</tr>
<tr>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/help.png"/>在线文档</td>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/dict.png"/>字典管理</td>
</tr>
<td><img src="../static/image/theme.png"/>系统主题</td>
<td><img src="../static/image/help.png"/>在线文档</td>
<td><img src="../static/image/lock.png"/>系统锁屏</td>
</tr>
</table>

Expand All @@ -249,17 +254,16 @@ fastapi_vue3_amdin/devops/devops/nginx/nginx.conf
- [RuoYi-Vue3-FastAPI 项目](https://gitee.com/insistence2022/RuoYi-Vue3-FastAPI)
- [APScheduler 项目](https://github.com/agronholm/apscheduler)
- [Vite 项目](https://github.com/vitejs/vite)

---
- [Vue3-element-admin 项目](https://gitee.com/youlaiorg/vue3-element-admin)
- [Vue3-element-plus-admin 项目](https://gitee.com/kailong110120130/vue-element-plus-admin)

## 🎨 社区


<table>
<tr>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/wechat.jpg"/></td>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/group.jpg"/></td>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/static/image/wechatPay.jpg"/></td>
<td><img src="../static/image/wechat.jpg"/></td>
<td><img src="../static/image/group.jpg"/></td>
<td><img src="../static/image/wechatPay.jpg"/></td>
</tr>
</table>

Expand Down
Binary file added backend/static/image/analysis.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified backend/static/image/cache.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified backend/static/image/config.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified backend/static/image/dashboard.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified backend/static/image/dept.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified backend/static/image/dict.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified backend/static/image/docs.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified backend/static/image/group.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed backend/static/image/info.png
Binary file not shown.
Binary file modified backend/static/image/job.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added backend/static/image/lock.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified backend/static/image/log.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified backend/static/image/login.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified backend/static/image/menu.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified backend/static/image/notice.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified backend/static/image/online.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified backend/static/image/position.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed backend/static/image/redoc.png
Binary file not shown.
Binary file modified backend/static/image/role.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified backend/static/image/service.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added backend/static/image/theme.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified backend/static/image/user.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 changes: 8 additions & 13 deletions frontend/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,27 @@ fastapi_project/frontend
│ └─ site # 帮助文档模块
├─ src # 源代码
│ ├─ api # 接口文件
│ ├─ assets # 静态资源文件
│ ├─ components # 组件模块
│ ├─ constants # 常量模块
│ ├─ lang # 语言模块
│ ├─ layouts # 布局模块
│ ├─ plugins # 插件模块
│ ├─ router # 路由模块
│ ├─ store # 状态管理模块
│ ├─ styles # 样式模块
│ ├─ types # 类型模块
│ ├─ utils # 工具模块
│ ├─ view # 视图模块
│ ├─ App.vue # 根组件
│ ├─ main.js # 入口文件
│ └─ styles.css # 全局样式文件
│ └─ settings.js # 全局样式文件
├─ .env.development # 项目开发环境配置
├─ .env.production # 项目生产环境配置
├─ index.html # 模板文件
├─ package.json # 项目依赖文件
├─ tsconfig.json # ts配置文件
├─ uno.config.json # uno配置文件
├─ vite.config.js # vite服务配置文件
└─ README.md # 项目说明文档

Expand All @@ -38,16 +45,4 @@ npm install
npm run dev
# 构建前端, 生成 `frontend/dist` 目录
npm run build

# 安装 pnpm
npm install pnpm -g

# 设置镜像源(可忽略)
pnpm config set registry https://registry.npmmirror.com

# 安装依赖
pnpm install

# 启动运行
pnpm run dev
```
10 changes: 9 additions & 1 deletion frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,19 +40,27 @@
"vue3-cron-plus-picker": "^1.0.2"
},
"devDependencies": {
"@commitlint/cli": "^19.8.1",
"@commitlint/config-conventional": "^19.8.1",
"@iconify/utils": "^2.3.0",
"@types/codemirror": "^5.60.16",
"@types/lodash-es": "^4.17.12",
"@types/node": "^22.16.5",
"@types/nprogress": "^0.2.3",
"@types/path-browserify": "^1.0.3",
"@types/qs": "^6.14.0",
"@vitejs/plugin-vue": "^6.0.0",
"eslint": "^9.31.0",
"globals": "^15.15.0",
"sass": "^1.89.2",
"terser": "^5.43.1",
"typescript": "^5.8.3",
"typescript-eslint": "^8.36.0",
"unocss": "66.2.3",
"unplugin-auto-import": "^19.3.0",
"unplugin-vue-components": "^28.8.0",
"@vitejs/plugin-vue": "^6.0.0",
"vue-eslint-parser": "^10.2.0",
"vue-tsc": "^2.2.12",
"vite": "^6.3.5"
},
"engines": {
Expand Down
Binary file modified frontend/public/favicon.ico
Binary file not shown.
Binary file removed frontend/public/logo copy 2.png
Binary file not shown.
26 changes: 17 additions & 9 deletions frontend/public/site/404.html
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@


<link rel="icon" href="/assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.7">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.14">



<title>Fastapi_Vue3_Admin在线文档</title>



<link rel="stylesheet" href="/assets/stylesheets/main.8608ea7d.min.css">
<link rel="stylesheet" href="/assets/stylesheets/main.342714a4.min.css">



Expand Down Expand Up @@ -105,11 +105,13 @@



<label class="md-header__button md-icon" for="__search">

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">


<label class="md-header__button md-icon" for="__search">

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
Expand Down Expand Up @@ -143,6 +145,7 @@
</div>
</div>
</div>



<div class="md-header__source">
Expand All @@ -169,10 +172,12 @@




<li class="md-tabs__item">
<a href="/index.html" class="md-tabs__link">





帮助文档
Expand Down Expand Up @@ -245,6 +250,7 @@
<a href="/index.html" class="md-nav__link">



<span class="md-ellipsis">
帮助文档

Expand Down Expand Up @@ -315,10 +321,12 @@ <h1>404 - Not found</h1>
</div>


<script id="__config" type="application/json">{"base": "/", "features": ["navigation.tabs", "navigation.tabs.sticky", "navigation.instant", "search.highlight", "search.suggest", "navigation.footer", "toc.integrate", "navigation.top", "content.code.copy"], "search": "/assets/javascripts/workers/search.f8cc74c7.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}}</script>


<script id="__config" type="application/json">{"base": "/", "features": ["navigation.tabs", "navigation.tabs.sticky", "navigation.instant", "search.highlight", "search.suggest", "navigation.footer", "toc.integrate", "navigation.top", "content.code.copy"], "search": "/assets/javascripts/workers/search.d50fe291.min.js", "tags": null, "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": null}</script>


<script src="/assets/javascripts/bundle.c8b220af.min.js"></script>
<script src="/assets/javascripts/bundle.13a4f30d.min.js"></script>


</body>
Expand Down
Loading