Files
FastapiAdmin/backend/site/index.html
T
zhangtao 0dbbe5cbcb feat: 添加多语言支持及资源文件更新
- 添加日语、中文、泰语等多语言支持文件
- 更新静态资源文件包括图片和样式表
- 重构菜单权限树组件,修复父子节点联动问题
- 优化在线用户管理功能,使用会话ID替代用户名
- 更新数据库配置,默认使用MySQL
- 重构文档系统,将mkdocs迁移至backend目录
- 修复Redis哈希操作接口
- 更新前端工具函数,优化列表转树形结构逻辑
- 调整端口配置和环境变量
- 添加开发运维文档和部署脚本

本次提交主要实现了多语言支持、资源文件更新和多个功能优化,同时改进了系统文档结构和部署配置。
2025-05-26 00:36:34 +08:00

1003 lines
30 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="zh" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="这里是网站描述">
<meta name="author" content="948080782x@qq.com">
<link rel="canonical" href="http://127.0.0.1:8888/index.html">
<link rel="icon" href="assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.7">
<title>Fastapi_Vue3_Admin在线文档</title>
<link rel="stylesheet" href="assets/stylesheets/main.8608ea7d.min.css">
<link rel="stylesheet" href="assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#github-1014taotao" class="md-skip">
跳转至
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow md-header--lifted" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="页眉">
<a href="index.html" title="Fastapi_Vue3_Admin在线文档" class="md-header__button md-logo" aria-label="Fastapi_Vue3_Admin在线文档" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Fastapi_Vue3_Admin在线文档
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
帮助文档
</span>
</div>
</div>
</div>
<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">
<input type="text" class="md-search__input" name="query" aria-label="搜索" placeholder="搜索" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon 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>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="查找">
<button type="reset" class="md-search__icon md-icon" title="清空当前内容" aria-label="清空当前内容" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
正在初始化搜索引擎
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://gitee.com/tao__tao/fastapi_vue3_admin.git" title="前往仓库" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
</div>
<div class="md-source__repository">
fastapi_vue_admin
</div>
</a>
</div>
</nav>
<nav class="md-tabs" aria-label="标签" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item md-tabs__item--active">
<a href="index.html" class="md-tabs__link">
帮助文档
</a>
</li>
</ul>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label="导航栏" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="index.html" title="Fastapi_Vue3_Admin在线文档" class="md-nav__button md-logo" aria-label="Fastapi_Vue3_Admin在线文档" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
</a>
Fastapi_Vue3_Admin在线文档
</label>
<div class="md-nav__source">
<a href="https://gitee.com/tao__tao/fastapi_vue3_admin.git" title="前往仓库" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
</div>
<div class="md-source__repository">
fastapi_vue_admin
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
帮助文档
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="index.html" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
帮助文档
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="目录">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
目录
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
<span class="md-ellipsis">
📘 项目介绍
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
<span class="md-ellipsis">
核心亮点
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
<span class="md-ellipsis">
🛠️ 技术栈概览
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_4" class="md-nav__link">
<span class="md-ellipsis">
📌 内置模块
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_5" class="md-nav__link">
<span class="md-ellipsis">
🍪 演示环境
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_6" class="md-nav__link">
<span class="md-ellipsis">
👷 安装和使用
</span>
</a>
<nav class="md-nav" aria-label="👷 安装和使用">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_7" class="md-nav__link">
<span class="md-ellipsis">
版本说明
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_8" class="md-nav__link">
<span class="md-ellipsis">
获取代码
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_9" class="md-nav__link">
<span class="md-ellipsis">
本地后端启动
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_10" class="md-nav__link">
<span class="md-ellipsis">
本地前端启动
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_11" class="md-nav__link">
<span class="md-ellipsis">
本地小程序启动
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_12" class="md-nav__link">
<span class="md-ellipsis">
本地访问地址
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#docker" class="md-nav__link">
<span class="md-ellipsis">
docker 部署
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_13" class="md-nav__link">
<span class="md-ellipsis">
🔧 模块展示
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_14" class="md-nav__link">
<span class="md-ellipsis">
🙏 特别鸣谢
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_15" class="md-nav__link">
<span class="md-ellipsis">
🎨 社区
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#star" class="md-nav__link">
<span class="md-ellipsis">
❤️ Star 支持我
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_16" class="md-nav__link">
<span class="md-ellipsis">
👀 访问统计
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<p align="center">
<img src="https://capsule-render.vercel.app/api?type=waving&color=timeGradient&height=256&&section=header&text=Fastapi%20Vue3%20Admin&fontSize=90&fontAlign=50&fontAlignY=28&desc=一套现代、开源、全栈融合的中后台快速开发平台,给个⭐️支持一下%F0%9F%98%81&descAlign=50&descSize=0&descAlignY=56&animation=twinkling" />
</p>
<p align="center">
<img src="https://media.giphy.com/media/WUlplcMpOCEmTGBtBW/giphy.gif" width="200"/>
</p>
<p align="center">
<img width="700" src="https://readme-typing-svg.demolab.com?font=LXGW+WenKai+TC&size=25&pause=1000&center=true&vCenter=true&random=false&width=600&lines=欢迎来到我的GitHub主页!"/>
</p>
<p align="center">
<a href="https://gitee.com/tao__tao/fastapi_vue3_admin.git" target="_blank">
<img src="https://gitee.com/tao__tao/fastapi_vue3_admin/badge/star.svg?theme=dark" alt="Gitee Stars">
</a>
<a href="https://github.com/1014TaoTao/fastapi_vue3_admin.git" target="_blank">
<img src="https://img.shields.io/github/stars/1014TaoTao/fastapi_vue3_admin?style=social" alt="GitHub Stars">
</a>
<a href="https://gitee.com/tao__tao/fastapi_vue3_admin/blob/master/LICENSE" target="_blank">
<img src="https://img.shields.io/badge/License-MIT-orange" alt="License">
</a>
<img src="https://img.shields.io/badge/Python-≥3.10-blue">
<img src="https://img.shields.io/badge/NodeJS-≥20.0-blue">
<img src="https://img.shields.io/badge/MySQL-≥8.0-blue">
<img src="https://img.shields.io/badge/Redis-≥7.0-blue">
<img src="https://img.shields.io/badge/-HTML5-E34F26?style=flat-square&logo=html5&logoColor=white"/>
<img src="https://img.shields.io/badge/-CSS3-1572B6?style=flat-square&logo=css3"/>
<img src="https://img.shields.io/badge/-JavaScript-563D7C?style=flat-square&logo=bootstrap"/>
</p>
<h1 id="github-1014taotao">📊 GitHub 数据统计作者@1014TaoTao</h1>
<table align="center">
<tr>
<td>
<img height="200px" width="auto" src="https://github-readme-stats.vercel.app/api?username=1014TaoTao&show_icons=true&theme=dracula">
</td>
<td>
<img height="200px" width="auto" src="https://github-readme-stats.vercel.app/api/top-langs/?username=1014TaoTao&layout=compact&theme=dracula">
</td>
<td>
<img height="200px" width="auto" src="https://github-readme-streak-stats.herokuapp.com/?user=1014TaoTao&theme=dracula">
</td>
</tr>
</table>
<p align="center">
<img src="https://github-readme-activity-graph.vercel.app/graph?username=1014TaoTao&theme=dracula&hide_border=true&area=true&custom_title=Activity%20Graph" alt="Activity Graph" title="Activity Graph" />
</p>
<hr />
<h2 id="_1">📘 项目介绍</h2>
<p><strong>Fastapi-Vue3-Admin</strong> 是一套 <strong>完全开源高度模块化技术先进的现代化快速开发平台</strong>旨在帮助开发者高效搭建高质量的企业级中后台系统该项目采用 <strong>前后端分离架构</strong>融合 Python 后端框架 <code>FastAPI</code> 和前端主流框架 <code>Vue3</code>结合 <code>UniApp</code> 实现多端统一开发提供了一站式开箱即用的开发体验</p>
<blockquote>
<p><strong>设计初心</strong>: 以模块化松耦合为核心追求丰富的功能模块简洁易用的接口详尽的开发文档和便捷的维护方式通过统一框架和组件降低技术选型成本遵循开发规范和设计模式构建强大的代码分层模型搭配完善的本地中文化支持专为团队和企业开发场景量身定制</p>
</blockquote>
<pre><code class="language-sh">fastapi_vue3_admin
├─ backend # 后端工程
├─ frontend # 前端工程
├─ devops # 部署工程
├─ mkdocs # 文档工程
├─ uni-app # 移动端工程
├─ docker-compose.yaml # 部署文件
├─ start.sh # 一键部署脚本
├─ LICENSE # 许可协议
| README.en.md # 英文文档
└─ README.md # 中文文档
</code></pre>
<hr />
<h2 id="_2"> 核心亮点</h2>
<table>
<thead>
<tr>
<th>特性</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>🔭 快速开发</td>
<td>一套完全开源的现代化快速开发平台旨在帮助开发者高效搭建高质量的中后台系统</td>
</tr>
<tr>
<td>🌐 全栈整合</td>
<td>前后端分离融合 Python (FastAPI) + Vue3 + UniApp 多端开发</td>
</tr>
<tr>
<td>🧱 模块化设计</td>
<td>系统功能高度解耦便于扩展和维护</td>
</tr>
<tr>
<td>⚡️ 高性能异步</td>
<td>使用 FastAPI 异步框架 + Redis 缓存优化接口响应速度</td>
</tr>
<tr>
<td>🔒 安全认证</td>
<td>支持 JWT OAuth2 认证机制保障系统安全</td>
</tr>
<tr>
<td>📊 权限管理</td>
<td>RBAC 模型实现菜单按钮数据级别的细粒度权限控制</td>
</tr>
<tr>
<td>🚀 快速部署</td>
<td>支持 Docker/Docker Compose/Nginx 一键部署</td>
</tr>
<tr>
<td>📄 开发友好</td>
<td>提供完善的中文文档 + 中文化界面 + 可视化工具链降低学习成本</td>
</tr>
<tr>
<td>📫 跨平台支持</td>
<td>通过 UniApp 支持多端开发包括 H5小程序等</td>
</tr>
<tr>
<td>🚀 快速接入</td>
<td>基于 Vue3Vite5PiniaUniAppAnt Design VueuView-plus 等主流前端技术栈开箱即用</td>
</tr>
</tbody>
</table>
<hr />
<h2 id="_3">🛠️ 技术栈概览</h2>
<table>
<thead>
<tr>
<th>类型</th>
<th>技术选型</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>后端框架</td>
<td>FastAPI / Uvicorn / Pydantic 2.0 / Alembic</td>
<td>现代高性能的异步框架强制类型约束数据迁移</td>
</tr>
<tr>
<td>ORM</td>
<td>SQLAlchemy 2.0</td>
<td>强大的 ORM </td>
</tr>
<tr>
<td>定时任务</td>
<td>APScheduler</td>
<td>轻松实现定时任务</td>
</tr>
<tr>
<td>权限认证</td>
<td>PyJWT</td>
<td>实现 JWT 认证</td>
</tr>
<tr>
<td>前端框架</td>
<td>Vue3 / Vite5 / Pinia / TypeScript</td>
<td>快速开发 Vue3 应用</td>
</tr>
<tr>
<td>UI </td>
<td>Ant Design Vue / uView-plus</td>
<td>快速开发美观的 UI 组件</td>
</tr>
<tr>
<td>移动端</td>
<td>UniApp</td>
<td>快速开发移动端应用</td>
</tr>
<tr>
<td>数据库</td>
<td>MySQL / MongoDB</td>
<td>强大的数据库</td>
</tr>
<tr>
<td>缓存</td>
<td>Redis</td>
<td>强大的缓存数据库</td>
</tr>
<tr>
<td>文档</td>
<td>Swagger / Redoc</td>
<td>自动生成 API 文档</td>
</tr>
<tr>
<td>部署</td>
<td>Docker / Nginx / Docker Compose</td>
<td>快速部署项目</td>
</tr>
</tbody>
</table>
<hr />
<h2 id="_4">📌 内置模块</h2>
<table>
<thead>
<tr>
<th>模块名</th>
<th>子模块名</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>仪表盘</td>
<td>工作台 分析页</td>
<td>常用功能入口</td>
</tr>
<tr>
<td>系统管理</td>
<td>包含菜单部门岗位角色用户日志配置公告字典任务等子模块</td>
<td>系统主功能</td>
</tr>
<tr>
<td>监控管理</td>
<td>在线用户服务器监控缓存监控</td>
<td>系统监控管理功能</td>
</tr>
<tr>
<td>公共管理</td>
<td>接口管理文档管理</td>
<td>项目接口文档</td>
</tr>
<tr>
<td>App </td>
<td>首页工作台个人中心</td>
<td>移动端应用管理</td>
</tr>
</tbody>
</table>
<hr />
<h2 id="_5">🍪 演示环境</h2>
<ul>
<li>演示地址<a href="http://8.137.99.5">http://8.137.99.5</a></li>
<li>管理员账号<code>admin</code> 密码<code>123456</code></li>
<li>演示账号<code>demo</code> 密码<code>123456</code></li>
</ul>
<hr />
<h2 id="_6">👷 安装和使用</h2>
<h3 id="_7">版本说明</h3>
<table>
<thead>
<tr>
<th>类型</th>
<th>技术栈</th>
<th>版本</th>
</tr>
</thead>
<tbody>
<tr>
<td>后端</td>
<td>Python</td>
<td>3.10大于3.10的版本, 会有兼容问题, 将来升级暂时不考虑升级</td>
</tr>
<tr>
<td>后端</td>
<td>FastAPI</td>
<td>0.109</td>
</tr>
<tr>
<td>前端</td>
<td>Node.js</td>
<td>&gt;= 20.0推荐使用最新版</td>
</tr>
<tr>
<td>前端</td>
<td>npm</td>
<td>16.14</td>
</tr>
<tr>
<td>前端</td>
<td>Vue3</td>
<td>3.3</td>
</tr>
<tr>
<td>数据库</td>
<td>MySQL</td>
<td>8.0 推荐使用最新版</td>
</tr>
<tr>
<td>中间件</td>
<td>Redis</td>
<td>7.0 推荐使用最新版</td>
</tr>
<tr>
<td>小程序</td>
<td>uni-app</td>
<td>3.0.0</td>
</tr>
<tr>
<td>小程序</td>
<td>uview-plus</td>
<td>^3.3.74</td>
</tr>
</tbody>
</table>
<hr />
<h3 id="_8">获取代码</h3>
<pre><code class="language-sh"># 克隆代码到本地
git clone https://gitee.com/tao__tao/fastapi_vue3_admin.git
git clone https://github.com/1014TaoTao/fastapi_vue3_admin.git
</code></pre>
<h3 id="_9">本地后端启动</h3>
<pre><code class="language-sh"># 进入后端工程目录
cd backend
# 安装依赖
pip3 install -r requirements.txt
# 启动后端服务
python3 main.py run
python3 main.py run--env=dev
# 生成迁移文件
python3 main.py revision &quot;初始化迁移&quot; --env=dev(不加默认为dev)
# 应用迁移
python3 main.py upgrade --env=dev(不加默认为dev)
</code></pre>
<hr />
<h3 id="_10">本地前端启动</h3>
<pre><code class="language-sh"># 进入前端工程目录
cd frontend
# 安装依赖
npm install
# 启动前端服务
npm run dev
# 构建前端, 生成 `frontend/dist` 目录
npm run build
</code></pre>
<hr />
<h3 id="_11">本地小程序启动</h3>
<pre><code class="language-sh"># 进入移动工程目录
cd uni-app
# 安装依赖
npm install
# 启动小程序
npm run dev:h5
# 构建, 生成 `uni-app/dist` 目录
npm run build
</code></pre>
<hr />
<h3 id="_12">本地访问地址</h3>
<ul>
<li>前端地址: <a href="http://127.0.0.1:5180">http://127.0.0.1:5180</a></li>
<li>小程序地址: <a href="http://127.0.0.1:5181">http://127.0.0.1:5181</a></li>
<li>接口地址: <a href="http://127.0.0.1:8080/api/v1/docs">http://127.0.0.1:8080/api/v1/docs</a></li>
<li>管理员账号<code>admin</code> 密码<code>123456</code></li>
<li>演示账号<code>demo</code> 密码<code>123456</code></li>
</ul>
<hr />
<h3 id="docker">docker 部署</h3>
<pre><code class="language-sh"># 复制脚本 `fastapi_vue3_amdin/start.sh` 脚本文件到服务器, 并赋予执行权限
chmod +x start.sh
# 执行脚本
./start.sh
# 访问地址
# 前端访问: `http://公网地址:80`,
# 接口访问: `http://公网地址:8001/api/v1/docs`
# 登录 `admin/123456` 或 `demo/123456`
# 查看镜像:
docsker images -a
# 查看容器:
docsker compose ps
# 查看日志
docker logs -f &lt;容器名&gt;
# 服务停止
docsker compose down
# 删除镜像
docker rmi &lt;镜像名&gt;
# 删除容器
docker rm &lt;容器名&gt;
</code></pre>
<ul>
<li><strong>部署问题排查</strong>:</li>
<li>后端配置文件 <code>fastapi_vue3_amdin/backend/env/.env.prod.py</code></li>
<li>前端配置文件 <code>fastapi_vue3_amdin/frontend/vite.config.ts</code> <code>fastapi_vue3_amdin/frontend/.env.production</code></li>
<li>部署文件 <code>fastapi_vue3_amdin/docker-compose.yaml</code> <code>fastapi_vue3_amdin/devops/devops/nginx/nginx.conf</code></li>
</ul>
<hr />
<h2 id="_13">🔧 模块展示</h2>
<table>
<tr>
<td><img src="./resources/login.png"/>登陆</td>
<td><img src="./resources/dashboard.png"/>仪表盘</td>
<td><img src="./resources/menu.png"/>菜单管理</td>
<td><img src="./resources/dept.png"/>部门管理</td>
</tr>
<tr>
<td><img src="./resources/position.png"/>岗位管理</td>
<td><img src="./resources/role.png"/>角色管理</td>
<td><img src="./resources/user.png"/>用户管理</td>
<td><img src="./resources/log.png"/>日志管理</td>
</tr>
<tr>
<td><img src="./resources/config.png"/>配置管理</td>
<td><img src="./resources/online.png"/>在线用户管理</td>
<td><img src="./resources/service.png"/>服务器监控</td>
<td><img src="./resources/cache.png"/>缓存监控</td>
</tr>
<tr>
<td><img src="./resources/job.png"/>任务管理</td>
<td><img src="./resources/docs.png"/>接口管理</td>
<td><img src="./resources/redoc.png"/>文档管理</td>
<td><img src="./resources/info.png"/>个人信息</td>
</tr>
</tr>
<td><img src="./resources/help.png"/>在线文档</td>
<td><img src="./resources/dict.png"/>字典管理</td>
</tr>
<tr>
<td><img src="./resources/app-login.png"/>app登陆</td>
<td><img src="./resources/app-home.png"/>app首页</td>
<td><img src="./resources/app-work.png"/>app工作台</td>
<td><img src="./resources/app-me.png"/>app个人中心</td>
</tr>
</table>
<hr />
<h2 id="_14">🙏 特别鸣谢</h2>
<p>感谢以下项目的贡献和支持使本项目得以顺利完成</p>
<ul>
<li><a href="https://fastapi.tiangolo.com/">FastAPI 项目</a></li>
<li><a href="https://v3.cn.vuejs.org/">Vue3 项目</a></li>
<li><a href="https://gitee.com/ktianc/kinit">KInit 项目</a></li>
<li><a href="https://gitee.com/senqi666/fastapi-vue-admin">Fastapi-Vue3-Admin 项目</a></li>
<li><a href="https://gitee.com/mizhexiaoxiao/vue-fastapi-admin">Vue-FastAPI-Admin 项目</a></li>
<li><a href="https://gitee.com/insistence2022/RuoYi-Vue3-FastAPI">RuoYi-Vue3-FastAPI 项目</a></li>
<li><a href="https://github.com/agronholm/apscheduler">APScheduler 项目</a></li>
<li><a href="https://github.com/vitejs/vite">Vite 项目</a></li>
<li><a href="https://github.com/dcloudio/uni-app">UniApp 项目</a></li>
<li><a href="https://uiadmin.net/uview-plus">uView-plus 项目</a></li>
</ul>
<hr />
<h2 id="_15">🎨 社区</h2>
<table>
<tr>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/docs/resources/wechat.jpg"/></td>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/docs/resources/group.jpg"/></td>
<td><img src="https://gitee.com/tao__tao/fastapi_vue3_admin/raw/master/backend/docs/resources/wechatPay.jpg"/></td>
</tr>
</table>
<hr />
<h2 id="star">❤️ Star 支持我</h2>
<p>如果你喜欢这个项目请给我一个 ⭐️ Star 支持一下吧非常感谢</p>
<hr />
<h2 id="_16">👀 访问统计</h2>
<p><img alt="Visitor Count" src="https://profile-counter.glitch.me/1014TaoTao/count.svg" /></p>
<hr />
<p align="center">
<img src="https://capsule-render.vercel.app/api?type=waving&color=timeGradient&height=260&&section=footer&text=感谢&fontSize=90&fontAlign=50&fontAlignY=78&desc=给个%20star ⭐️ %20不过分吧&descAlign=50&descSize=30&descAlignY=46&animation=twinkling" />
</p>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright © 2022 <a href="http://127.0.0.1:8888">Powered by xxxxx@qq.com 版权所有</a>
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": ".", "features": ["navigation.tabs", "navigation.tabs.sticky", "navigation.instant", "search.highlight", "search.suggest", "navigation.footer", "toc.integrate"], "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 src="assets/javascripts/bundle.c8b220af.min.js"></script>
</body>
</html>