release:公开仓库
46
README.md
@ -1,24 +1,29 @@
|
|||||||
# Mini RBAC
|
# Mini RBAC
|
||||||
仅保留核心权限控制的极简后台管理系统。
|
`Python(FastAPI)`、`VUE3`实现,仅保留核心权限控制的极简后台管理。
|
||||||
## 进度
|
![index](./imgs/index.png)
|
||||||
## 权限控制
|
## 功能
|
||||||
|
### 权限控制
|
||||||
- [x] 前端菜单权限控制
|
- [x] 前端菜单权限控制
|
||||||
- [x] 前端路由权限控制
|
- [x] 前端路由权限控制
|
||||||
- [x] 前端按钮权限控制
|
- [x] 前端按钮权限控制
|
||||||
- [x] 后端接口权限控制
|
- [x] 后端接口权限控制
|
||||||
|
### 业务功能
|
||||||
|
- [x] 登录、退出、切换角色
|
||||||
|
- [x] 用户管理 -> 新增、编辑、删除、查询
|
||||||
|
- [x] 角色管理 -> 新增、编辑、删除、查询
|
||||||
|
- [x] 菜单管理 -> 新增、编辑、删除、查询
|
||||||
|
|
||||||
## 功能导向
|
|
||||||
- [x] 登录、退出
|
# 使用框架&工具
|
||||||
- [ ] 用户管理
|
|
||||||
- [ ] 角色管理
|
|
||||||
- [ ] 菜单管理
|
|
||||||
# 技术实现
|
|
||||||
## 前端 `node 16.15 LTS`
|
## 前端 `node 16.15 LTS`
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
"@kangc/v-md-editor": "^2.3.15",
|
||||||
"ant-design-vue": "^3.2.12",
|
"ant-design-vue": "^3.2.12",
|
||||||
"axios": "^0.27.2",
|
"axios": "^0.27.2",
|
||||||
|
"echarts": "^5.3.3",
|
||||||
"moment": "^2.29.4",
|
"moment": "^2.29.4",
|
||||||
|
"normalize.css": "^8.0.1",
|
||||||
"pinia": "^2.0.21",
|
"pinia": "^2.0.21",
|
||||||
"pinia-plugin-persistedstate": "^2.2.0",
|
"pinia-plugin-persistedstate": "^2.2.0",
|
||||||
"vue": "^3.2.38",
|
"vue": "^3.2.38",
|
||||||
@ -31,8 +36,27 @@
|
|||||||
bcrypt==4.0.0
|
bcrypt==4.0.0
|
||||||
fastapi==0.82.0
|
fastapi==0.82.0
|
||||||
passlib==1.7.4
|
passlib==1.7.4
|
||||||
|
pytest==7.1.3
|
||||||
python-jose==3.3.0
|
python-jose==3.3.0
|
||||||
tomli==2.0.1
|
requests==2.28.1
|
||||||
tortoise-orm==0.19.2
|
|
||||||
uvicorn==0.18.3
|
uvicorn==0.18.3
|
||||||
|
tortoise-orm==0.19.2
|
||||||
|
websockets==10.3
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>更多图片</summary>
|
||||||
|
|
||||||
|
### 页面
|
||||||
|
![login](./imgs/login.png)
|
||||||
|
![change](./imgs//select.png)
|
||||||
|
![user](./imgs/useradd.png)
|
||||||
|
![role](./imgs/menuadd.png)
|
||||||
|
![menu](./imgs/roleadd.png)
|
||||||
|
### 接口
|
||||||
|
![user-api](./imgs/user-api.png)
|
||||||
|
![role-menu](./imgs/role-menu-api.png)
|
||||||
|
|
||||||
|
</details>
|
@ -1,2 +1,2 @@
|
|||||||
VITE_BASE_URL = /api
|
VITE_BASE_URL = /api
|
||||||
VITE_WEBSOCKET = /socket
|
VITE_WS = ws://localhost:8000/ws
|
||||||
|
@ -5,7 +5,7 @@ import EachartView from '@/components/echart/eachart-view.vue'
|
|||||||
import MarkdownView from '@/components/markdown/preview-view.vue'
|
import MarkdownView from '@/components/markdown/preview-view.vue'
|
||||||
|
|
||||||
/** websocket */
|
/** websocket */
|
||||||
let ws = new WebSocket('ws://localhost:8000/ws')
|
let ws = new WebSocket(import.meta.env.VITE_WS)
|
||||||
|
|
||||||
// 响应式数据
|
// 响应式数据
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
|
@ -25,10 +25,6 @@ export default defineConfig({
|
|||||||
target: 'http://localhost:8000',
|
target: 'http://localhost:8000',
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
rewrite: (path) => path.replace(/^\/api/, '')
|
rewrite: (path) => path.replace(/^\/api/, '')
|
||||||
},
|
|
||||||
'/socket': {
|
|
||||||
target: 'ws://localhost:8000/ws',
|
|
||||||
ws: true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
BIN
imgs/index.png
Normal file
After Width: | Height: | Size: 144 KiB |
BIN
imgs/login.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
imgs/menuadd.png
Normal file
After Width: | Height: | Size: 75 KiB |
BIN
imgs/role-menu-api.png
Normal file
After Width: | Height: | Size: 69 KiB |
BIN
imgs/roleadd.png
Normal file
After Width: | Height: | Size: 86 KiB |
BIN
imgs/select.png
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
imgs/user-api.png
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
imgs/useradd.png
Normal file
After Width: | Height: | Size: 57 KiB |