!21 RuoYi-Vue3-FastAPI v1.5.0
Merge pull request !21 from insistence/develop
This commit is contained in:
12
README.md
12
README.md
@@ -1,12 +1,12 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<img alt="logo" src="https://oscimg.oschina.net/oscnet/up-d3d0a9303e11d522a06cd263f3079027715.png">
|
<img alt="logo" src="https://oscimg.oschina.net/oscnet/up-d3d0a9303e11d522a06cd263f3079027715.png">
|
||||||
</p>
|
</p>
|
||||||
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi-Vue3-FastAPI v1.4.0</h1>
|
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi-Vue3-FastAPI v1.5.0</h1>
|
||||||
<h4 align="center">基于RuoYi-Vue3+FastAPI前后端分离的快速开发框架</h4>
|
<h4 align="center">基于RuoYi-Vue3+FastAPI前后端分离的快速开发框架</h4>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://gitee.com/insistence2022/RuoYi-Vue3-FastAPI/stargazers"><img src="https://gitee.com/insistence2022/RuoYi-Vue3-FastAPI/badge/star.svg?theme=dark"></a>
|
<a href="https://gitee.com/insistence2022/RuoYi-Vue3-FastAPI/stargazers"><img src="https://gitee.com/insistence2022/RuoYi-Vue3-FastAPI/badge/star.svg?theme=dark"></a>
|
||||||
<a href="https://github.com/insistence/RuoYi-Vue3-FastAPI"><img src="https://img.shields.io/github/stars/insistence/RuoYi-Vue3-FastAPI?style=social"></a>
|
<a href="https://github.com/insistence/RuoYi-Vue3-FastAPI"><img src="https://img.shields.io/github/stars/insistence/RuoYi-Vue3-FastAPI?style=social"></a>
|
||||||
<a href="https://gitee.com/insistence2022/RuoYi-Vue3-FastAPI"><img src="https://img.shields.io/badge/RuoYiVue3FastAPI-v1.4.0-brightgreen.svg"></a>
|
<a href="https://gitee.com/insistence2022/RuoYi-Vue3-FastAPI"><img src="https://img.shields.io/badge/RuoYiVue3FastAPI-v1.5.0-brightgreen.svg"></a>
|
||||||
<a href="https://gitee.com/insistence2022/RuoYi-Vue3-FastAPI/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
|
<a href="https://gitee.com/insistence2022/RuoYi-Vue3-FastAPI/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
|
||||||
<img src="https://img.shields.io/badge/python-≥3.9-blue">
|
<img src="https://img.shields.io/badge/python-≥3.9-blue">
|
||||||
<img src="https://img.shields.io/badge/MySQL-≥5.7-blue">
|
<img src="https://img.shields.io/badge/MySQL-≥5.7-blue">
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
RuoYi-Vue3-FastAPI是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
|
RuoYi-Vue3-FastAPI是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
|
||||||
|
|
||||||
* 前端采用Vue3、Element Plus,基于<u>[RuoYi-Vue3](https://github.com/yangzongzhuan/RuoYi-Vue3)</u>前端项目修改。
|
* 前端采用Vue3、Element Plus,基于<u>[RuoYi-Vue3](https://github.com/yangzongzhuan/RuoYi-Vue3)</u>前端项目修改。
|
||||||
* 后端采用FastAPI、sqlalchemy、MySQL、Redis、OAuth2 & Jwt。
|
* 后端采用FastAPI、sqlalchemy、MySQL(PostgreSQL)、Redis、OAuth2 & Jwt。
|
||||||
* 权限认证使用OAuth2 & Jwt,支持多终端认证系统。
|
* 权限认证使用OAuth2 & Jwt,支持多终端认证系统。
|
||||||
* 支持加载动态权限菜单,多方式轻松权限控制。
|
* 支持加载动态权限菜单,多方式轻松权限控制。
|
||||||
* Vue2版本:
|
* Vue2版本:
|
||||||
@@ -127,15 +127,17 @@ npm run dev 或 yarn dev
|
|||||||
# 进入后端目录
|
# 进入后端目录
|
||||||
cd ruoyi-fastapi-backend
|
cd ruoyi-fastapi-backend
|
||||||
|
|
||||||
# 安装项目依赖环境
|
# 如果使用的是MySQL数据库,请执行以下命令安装项目依赖环境
|
||||||
pip3 install -r requirements.txt
|
pip3 install -r requirements.txt
|
||||||
|
# 如果使用的是PostgreSQL数据库,请执行以下命令安装项目依赖环境
|
||||||
|
pip3 install -r requirements-pg.txt
|
||||||
|
|
||||||
# 配置环境
|
# 配置环境
|
||||||
在.env.dev文件中配置开发环境的数据库和redis
|
在.env.dev文件中配置开发环境的数据库和redis
|
||||||
|
|
||||||
# 运行sql文件
|
# 运行sql文件
|
||||||
1.新建数据库ruoyi-fastapi(默认,可修改)
|
1.新建数据库ruoyi-fastapi(默认,可修改)
|
||||||
2.使用命令或数据库连接工具运行sql文件夹下的ruoyi-fastapi.sql
|
2.如果使用的是MySQL数据库,使用命令或数据库连接工具运行sql文件夹下的ruoyi-fastapi.sql;如果使用的是PostgreSQL数据库,使用命令或数据库连接工具运行sql文件夹下的ruoyi-fastapi-pg.sql
|
||||||
|
|
||||||
# 运行后端
|
# 运行后端
|
||||||
python3 app.py --env=dev
|
python3 app.py --env=dev
|
||||||
|
@@ -10,7 +10,7 @@ APP_HOST = '0.0.0.0'
|
|||||||
# 应用端口
|
# 应用端口
|
||||||
APP_PORT = 9099
|
APP_PORT = 9099
|
||||||
# 应用版本
|
# 应用版本
|
||||||
APP_VERSION= '1.4.0'
|
APP_VERSION= '1.5.0'
|
||||||
# 应用是否开启热重载
|
# 应用是否开启热重载
|
||||||
APP_RELOAD = true
|
APP_RELOAD = true
|
||||||
# 应用是否开启IP归属区域查询
|
# 应用是否开启IP归属区域查询
|
||||||
@@ -30,6 +30,8 @@ JWT_REDIS_EXPIRE_MINUTES = 30
|
|||||||
|
|
||||||
|
|
||||||
# -------- 数据库配置 --------
|
# -------- 数据库配置 --------
|
||||||
|
# 数据库类型,可选的有'mysql'、'postgresql',默认为'mysql'
|
||||||
|
DB_TYPE = 'mysql'
|
||||||
# 数据库主机
|
# 数据库主机
|
||||||
DB_HOST = '127.0.0.1'
|
DB_HOST = '127.0.0.1'
|
||||||
# 数据库端口
|
# 数据库端口
|
||||||
|
@@ -10,7 +10,7 @@ APP_HOST = '0.0.0.0'
|
|||||||
# 应用端口
|
# 应用端口
|
||||||
APP_PORT = 9099
|
APP_PORT = 9099
|
||||||
# 应用版本
|
# 应用版本
|
||||||
APP_VERSION= '1.4.0'
|
APP_VERSION= '1.5.0'
|
||||||
# 应用是否开启热重载
|
# 应用是否开启热重载
|
||||||
APP_RELOAD = false
|
APP_RELOAD = false
|
||||||
# 应用是否开启IP归属区域查询
|
# 应用是否开启IP归属区域查询
|
||||||
@@ -30,6 +30,8 @@ JWT_REDIS_EXPIRE_MINUTES = 30
|
|||||||
|
|
||||||
|
|
||||||
# -------- 数据库配置 --------
|
# -------- 数据库配置 --------
|
||||||
|
# 数据库类型,可选的有'mysql'、'postgresql',默认为'mysql'
|
||||||
|
DB_TYPE = 'mysql'
|
||||||
# 数据库主机
|
# 数据库主机
|
||||||
DB_HOST = '127.0.0.1'
|
DB_HOST = '127.0.0.1'
|
||||||
# 数据库端口
|
# 数据库端口
|
||||||
|
@@ -9,6 +9,11 @@ ASYNC_SQLALCHEMY_DATABASE_URL = (
|
|||||||
f'mysql+asyncmy://{DataBaseConfig.db_username}:{quote_plus(DataBaseConfig.db_password)}@'
|
f'mysql+asyncmy://{DataBaseConfig.db_username}:{quote_plus(DataBaseConfig.db_password)}@'
|
||||||
f'{DataBaseConfig.db_host}:{DataBaseConfig.db_port}/{DataBaseConfig.db_database}'
|
f'{DataBaseConfig.db_host}:{DataBaseConfig.db_port}/{DataBaseConfig.db_database}'
|
||||||
)
|
)
|
||||||
|
if DataBaseConfig.db_type == 'postgresql':
|
||||||
|
ASYNC_SQLALCHEMY_DATABASE_URL = (
|
||||||
|
f'postgresql+asyncpg://{DataBaseConfig.db_username}:{quote_plus(DataBaseConfig.db_password)}@'
|
||||||
|
f'{DataBaseConfig.db_host}:{DataBaseConfig.db_port}/{DataBaseConfig.db_database}'
|
||||||
|
)
|
||||||
|
|
||||||
async_engine = create_async_engine(
|
async_engine = create_async_engine(
|
||||||
ASYNC_SQLALCHEMY_DATABASE_URL,
|
ASYNC_SQLALCHEMY_DATABASE_URL,
|
||||||
|
@@ -4,6 +4,7 @@ import sys
|
|||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
from pydantic_settings import BaseSettings
|
from pydantic_settings import BaseSettings
|
||||||
|
from typing import Literal
|
||||||
|
|
||||||
|
|
||||||
class AppSettings(BaseSettings):
|
class AppSettings(BaseSettings):
|
||||||
@@ -38,6 +39,7 @@ class DataBaseSettings(BaseSettings):
|
|||||||
数据库配置
|
数据库配置
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
db_type: Literal['mysql', 'postgresql'] = 'mysql'
|
||||||
db_host: str = '127.0.0.1'
|
db_host: str = '127.0.0.1'
|
||||||
db_port: int = 3306
|
db_port: int = 3306
|
||||||
db_username: str = 'root'
|
db_username: str = 'root'
|
||||||
|
@@ -82,6 +82,11 @@ SQLALCHEMY_DATABASE_URL = (
|
|||||||
f'mysql+pymysql://{DataBaseConfig.db_username}:{quote_plus(DataBaseConfig.db_password)}@'
|
f'mysql+pymysql://{DataBaseConfig.db_username}:{quote_plus(DataBaseConfig.db_password)}@'
|
||||||
f'{DataBaseConfig.db_host}:{DataBaseConfig.db_port}/{DataBaseConfig.db_database}'
|
f'{DataBaseConfig.db_host}:{DataBaseConfig.db_port}/{DataBaseConfig.db_database}'
|
||||||
)
|
)
|
||||||
|
if DataBaseConfig.db_type == 'postgresql':
|
||||||
|
SQLALCHEMY_DATABASE_URL = (
|
||||||
|
f'postgresql+psycopg2://{DataBaseConfig.db_username}:{quote_plus(DataBaseConfig.db_password)}@'
|
||||||
|
f'{DataBaseConfig.db_host}:{DataBaseConfig.db_port}/{DataBaseConfig.db_database}'
|
||||||
|
)
|
||||||
engine = create_engine(
|
engine = create_engine(
|
||||||
SQLALCHEMY_DATABASE_URL,
|
SQLALCHEMY_DATABASE_URL,
|
||||||
echo=DataBaseConfig.db_echo,
|
echo=DataBaseConfig.db_echo,
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from fastapi import APIRouter, Depends, Form, Query, Request
|
from fastapi import APIRouter, Depends, Form, Request
|
||||||
from pydantic_validation_decorator import ValidateFields
|
from pydantic_validation_decorator import ValidateFields
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from config.enums import BusinessType
|
from config.enums import BusinessType
|
||||||
@@ -24,7 +24,7 @@ configController = APIRouter(prefix='/system/config', dependencies=[Depends(Logi
|
|||||||
)
|
)
|
||||||
async def get_system_config_list(
|
async def get_system_config_list(
|
||||||
request: Request,
|
request: Request,
|
||||||
config_page_query: ConfigPageQueryModel = Query(),
|
config_page_query: ConfigPageQueryModel = Depends(ConfigPageQueryModel.as_query),
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
):
|
):
|
||||||
# 获取分页数据
|
# 获取分页数据
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from fastapi import APIRouter, Depends, Query, Request
|
from fastapi import APIRouter, Depends, Request
|
||||||
from pydantic_validation_decorator import ValidateFields
|
from pydantic_validation_decorator import ValidateFields
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from typing import List
|
from typing import List
|
||||||
@@ -42,7 +42,7 @@ async def get_system_dept_tree_for_edit_option(
|
|||||||
)
|
)
|
||||||
async def get_system_dept_list(
|
async def get_system_dept_list(
|
||||||
request: Request,
|
request: Request,
|
||||||
dept_query: DeptQueryModel = Query(),
|
dept_query: DeptQueryModel = Depends(DeptQueryModel.as_query),
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
data_scope_sql: str = Depends(GetDataScope('SysDept')),
|
data_scope_sql: str = Depends(GetDataScope('SysDept')),
|
||||||
):
|
):
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from fastapi import APIRouter, Depends, Form, Query, Request
|
from fastapi import APIRouter, Depends, Form, Request
|
||||||
from pydantic_validation_decorator import ValidateFields
|
from pydantic_validation_decorator import ValidateFields
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from typing import List
|
from typing import List
|
||||||
@@ -32,7 +32,7 @@ dictController = APIRouter(prefix='/system/dict', dependencies=[Depends(LoginSer
|
|||||||
)
|
)
|
||||||
async def get_system_dict_type_list(
|
async def get_system_dict_type_list(
|
||||||
request: Request,
|
request: Request,
|
||||||
dict_type_page_query: DictTypePageQueryModel = Query(),
|
dict_type_page_query: DictTypePageQueryModel = Depends(DictTypePageQueryModel.as_query),
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
):
|
):
|
||||||
# 获取分页数据
|
# 获取分页数据
|
||||||
@@ -152,7 +152,7 @@ async def query_system_dict_type_data(request: Request, dict_type: str, query_db
|
|||||||
)
|
)
|
||||||
async def get_system_dict_data_list(
|
async def get_system_dict_data_list(
|
||||||
request: Request,
|
request: Request,
|
||||||
dict_data_page_query: DictDataPageQueryModel = Query(),
|
dict_data_page_query: DictDataPageQueryModel = Depends(DictDataPageQueryModel.as_query),
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
):
|
):
|
||||||
# 获取分页数据
|
# 获取分页数据
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from fastapi import APIRouter, Depends, Form, Query, Request
|
from fastapi import APIRouter, Depends, Form, Request
|
||||||
from pydantic_validation_decorator import ValidateFields
|
from pydantic_validation_decorator import ValidateFields
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from config.enums import BusinessType
|
from config.enums import BusinessType
|
||||||
@@ -32,7 +32,7 @@ jobController = APIRouter(prefix='/monitor', dependencies=[Depends(LoginService.
|
|||||||
)
|
)
|
||||||
async def get_system_job_list(
|
async def get_system_job_list(
|
||||||
request: Request,
|
request: Request,
|
||||||
job_page_query: JobPageQueryModel = Query(),
|
job_page_query: JobPageQueryModel = Depends(JobPageQueryModel.as_query),
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
):
|
):
|
||||||
# 获取分页数据
|
# 获取分页数据
|
||||||
@@ -148,7 +148,7 @@ async def export_system_job_list(
|
|||||||
)
|
)
|
||||||
async def get_system_job_log_list(
|
async def get_system_job_log_list(
|
||||||
request: Request,
|
request: Request,
|
||||||
job_log_page_query: JobLogPageQueryModel = Query(),
|
job_log_page_query: JobLogPageQueryModel = Depends(JobLogPageQueryModel.as_query),
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
):
|
):
|
||||||
# 获取分页数据
|
# 获取分页数据
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
from fastapi import APIRouter, Depends, Form, Query, Request
|
from fastapi import APIRouter, Depends, Form, Request
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from config.enums import BusinessType
|
from config.enums import BusinessType
|
||||||
from config.get_db import get_db
|
from config.get_db import get_db
|
||||||
@@ -29,7 +29,7 @@ logController = APIRouter(prefix='/monitor', dependencies=[Depends(LoginService.
|
|||||||
)
|
)
|
||||||
async def get_system_operation_log_list(
|
async def get_system_operation_log_list(
|
||||||
request: Request,
|
request: Request,
|
||||||
operation_log_page_query: OperLogPageQueryModel = Query(),
|
operation_log_page_query: OperLogPageQueryModel = Depends(OperLogPageQueryModel.as_query),
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
):
|
):
|
||||||
# 获取分页数据
|
# 获取分页数据
|
||||||
@@ -88,7 +88,7 @@ async def export_system_operation_log_list(
|
|||||||
)
|
)
|
||||||
async def get_system_login_log_list(
|
async def get_system_login_log_list(
|
||||||
request: Request,
|
request: Request,
|
||||||
login_log_page_query: LoginLogPageQueryModel = Query(),
|
login_log_page_query: LoginLogPageQueryModel = Depends(LoginLogPageQueryModel.as_query),
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
):
|
):
|
||||||
# 获取分页数据
|
# 获取分页数据
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from fastapi import APIRouter, Depends, Query, Request
|
from fastapi import APIRouter, Depends, Request
|
||||||
from pydantic_validation_decorator import ValidateFields
|
from pydantic_validation_decorator import ValidateFields
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from typing import List
|
from typing import List
|
||||||
@@ -48,7 +48,7 @@ async def get_system_role_menu_tree(
|
|||||||
)
|
)
|
||||||
async def get_system_menu_list(
|
async def get_system_menu_list(
|
||||||
request: Request,
|
request: Request,
|
||||||
menu_query: MenuQueryModel = Query(),
|
menu_query: MenuQueryModel = Depends(MenuQueryModel.as_query),
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
|
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
|
||||||
):
|
):
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from fastapi import APIRouter, Depends, Query, Request
|
from fastapi import APIRouter, Depends, Request
|
||||||
from pydantic_validation_decorator import ValidateFields
|
from pydantic_validation_decorator import ValidateFields
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from config.enums import BusinessType
|
from config.enums import BusinessType
|
||||||
@@ -23,7 +23,7 @@ noticeController = APIRouter(prefix='/system/notice', dependencies=[Depends(Logi
|
|||||||
)
|
)
|
||||||
async def get_system_notice_list(
|
async def get_system_notice_list(
|
||||||
request: Request,
|
request: Request,
|
||||||
notice_page_query: NoticePageQueryModel = Query(),
|
notice_page_query: NoticePageQueryModel = Depends(NoticePageQueryModel.as_query),
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
):
|
):
|
||||||
# 获取分页数据
|
# 获取分页数据
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
from fastapi import APIRouter, Depends, Query, Request
|
from fastapi import APIRouter, Depends, Request
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from config.enums import BusinessType
|
from config.enums import BusinessType
|
||||||
from config.get_db import get_db
|
from config.get_db import get_db
|
||||||
@@ -18,7 +18,9 @@ onlineController = APIRouter(prefix='/monitor/online', dependencies=[Depends(Log
|
|||||||
@onlineController.get(
|
@onlineController.get(
|
||||||
'/list', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('monitor:online:list'))]
|
'/list', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('monitor:online:list'))]
|
||||||
)
|
)
|
||||||
async def get_monitor_online_list(request: Request, online_page_query: OnlineQueryModel = Query()):
|
async def get_monitor_online_list(
|
||||||
|
request: Request, online_page_query: OnlineQueryModel = Depends(OnlineQueryModel.as_query)
|
||||||
|
):
|
||||||
# 获取全量数据
|
# 获取全量数据
|
||||||
online_query_result = await OnlineService.get_online_list_services(request, online_page_query)
|
online_query_result = await OnlineService.get_online_list_services(request, online_page_query)
|
||||||
logger.info('获取成功')
|
logger.info('获取成功')
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from fastapi import APIRouter, Depends, Form, Query, Request
|
from fastapi import APIRouter, Depends, Form, Request
|
||||||
from pydantic_validation_decorator import ValidateFields
|
from pydantic_validation_decorator import ValidateFields
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from config.enums import BusinessType
|
from config.enums import BusinessType
|
||||||
@@ -24,7 +24,7 @@ postController = APIRouter(prefix='/system/post', dependencies=[Depends(LoginSer
|
|||||||
)
|
)
|
||||||
async def get_system_post_list(
|
async def get_system_post_list(
|
||||||
request: Request,
|
request: Request,
|
||||||
post_page_query: PostPageQueryModel = Query(),
|
post_page_query: PostPageQueryModel = Depends(PostPageQueryModel.as_query),
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
):
|
):
|
||||||
# 获取分页数据
|
# 获取分页数据
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from fastapi import APIRouter, Depends, Form, Query, Request
|
from fastapi import APIRouter, Depends, Form, Request
|
||||||
from pydantic_validation_decorator import ValidateFields
|
from pydantic_validation_decorator import ValidateFields
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from config.enums import BusinessType
|
from config.enums import BusinessType
|
||||||
@@ -43,7 +43,7 @@ async def get_system_role_dept_tree(
|
|||||||
)
|
)
|
||||||
async def get_system_role_list(
|
async def get_system_role_list(
|
||||||
request: Request,
|
request: Request,
|
||||||
role_page_query: RolePageQueryModel = Query(),
|
role_page_query: RolePageQueryModel = Depends(RolePageQueryModel.as_query),
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
data_scope_sql: str = Depends(GetDataScope('SysDept')),
|
data_scope_sql: str = Depends(GetDataScope('SysDept')),
|
||||||
):
|
):
|
||||||
@@ -211,7 +211,7 @@ async def reset_system_role_status(
|
|||||||
)
|
)
|
||||||
async def get_system_allocated_user_list(
|
async def get_system_allocated_user_list(
|
||||||
request: Request,
|
request: Request,
|
||||||
user_role: UserRolePageQueryModel = Query(),
|
user_role: UserRolePageQueryModel = Depends(UserRolePageQueryModel.as_query),
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
data_scope_sql: str = Depends(GetDataScope('SysUser')),
|
data_scope_sql: str = Depends(GetDataScope('SysUser')),
|
||||||
):
|
):
|
||||||
@@ -230,7 +230,7 @@ async def get_system_allocated_user_list(
|
|||||||
)
|
)
|
||||||
async def get_system_unallocated_user_list(
|
async def get_system_unallocated_user_list(
|
||||||
request: Request,
|
request: Request,
|
||||||
user_role: UserRolePageQueryModel = Query(),
|
user_role: UserRolePageQueryModel = Depends(UserRolePageQueryModel.as_query),
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
data_scope_sql: str = Depends(GetDataScope('SysUser')),
|
data_scope_sql: str = Depends(GetDataScope('SysUser')),
|
||||||
):
|
):
|
||||||
@@ -246,7 +246,7 @@ async def get_system_unallocated_user_list(
|
|||||||
@Log(title='角色管理', business_type=BusinessType.GRANT)
|
@Log(title='角色管理', business_type=BusinessType.GRANT)
|
||||||
async def add_system_role_user(
|
async def add_system_role_user(
|
||||||
request: Request,
|
request: Request,
|
||||||
add_role_user: CrudUserRoleModel = Query(),
|
add_role_user: CrudUserRoleModel = Depends(CrudUserRoleModel.as_query),
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
|
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
|
||||||
data_scope_sql: str = Depends(GetDataScope('SysDept')),
|
data_scope_sql: str = Depends(GetDataScope('SysDept')),
|
||||||
@@ -274,7 +274,7 @@ async def cancel_system_role_user(
|
|||||||
@Log(title='角色管理', business_type=BusinessType.GRANT)
|
@Log(title='角色管理', business_type=BusinessType.GRANT)
|
||||||
async def batch_cancel_system_role_user(
|
async def batch_cancel_system_role_user(
|
||||||
request: Request,
|
request: Request,
|
||||||
batch_cancel_user_role: CrudUserRoleModel = Query(),
|
batch_cancel_user_role: CrudUserRoleModel = Depends(CrudUserRoleModel.as_query),
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
):
|
):
|
||||||
batch_cancel_user_role_result = await UserService.delete_user_role_services(query_db, batch_cancel_user_role)
|
batch_cancel_user_role_result = await UserService.delete_user_role_services(query_db, batch_cancel_user_role)
|
||||||
|
@@ -2,9 +2,10 @@ import os
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from fastapi import APIRouter, Depends, File, Form, Query, Request, UploadFile
|
from fastapi import APIRouter, Depends, File, Form, Query, Request, UploadFile
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from typing import Optional, Union
|
from typing import Literal, Optional, Union
|
||||||
from pydantic_validation_decorator import ValidateFields
|
from pydantic_validation_decorator import ValidateFields
|
||||||
from config.get_db import get_db
|
from config.get_db import get_db
|
||||||
|
from config.enums import BusinessType
|
||||||
from config.env import UploadConfig
|
from config.env import UploadConfig
|
||||||
from module_admin.annotation.log_annotation import Log
|
from module_admin.annotation.log_annotation import Log
|
||||||
from module_admin.aspect.data_scope import GetDataScope
|
from module_admin.aspect.data_scope import GetDataScope
|
||||||
@@ -30,7 +31,6 @@ from module_admin.service.login_service import LoginService
|
|||||||
from module_admin.service.user_service import UserService
|
from module_admin.service.user_service import UserService
|
||||||
from module_admin.service.role_service import RoleService
|
from module_admin.service.role_service import RoleService
|
||||||
from module_admin.service.dept_service import DeptService
|
from module_admin.service.dept_service import DeptService
|
||||||
from config.enums import BusinessType
|
|
||||||
from utils.common_util import bytes2file_response
|
from utils.common_util import bytes2file_response
|
||||||
from utils.log_util import logger
|
from utils.log_util import logger
|
||||||
from utils.page_util import PageResponseModel
|
from utils.page_util import PageResponseModel
|
||||||
@@ -57,7 +57,7 @@ async def get_system_dept_tree(
|
|||||||
)
|
)
|
||||||
async def get_system_user_list(
|
async def get_system_user_list(
|
||||||
request: Request,
|
request: Request,
|
||||||
user_page_query: UserPageQueryModel = Query(),
|
user_page_query: UserPageQueryModel = Depends(UserPageQueryModel.as_query),
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
data_scope_sql: str = Depends(GetDataScope('SysUser')),
|
data_scope_sql: str = Depends(GetDataScope('SysUser')),
|
||||||
):
|
):
|
||||||
@@ -220,7 +220,7 @@ async def query_detail_system_user_profile(
|
|||||||
)
|
)
|
||||||
async def query_detail_system_user(
|
async def query_detail_system_user(
|
||||||
request: Request,
|
request: Request,
|
||||||
user_id: Optional[Union[int, str]] = '',
|
user_id: Optional[Union[int, Literal['']]] = '',
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
|
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
|
||||||
data_scope_sql: str = Depends(GetDataScope('SysUser')),
|
data_scope_sql: str = Depends(GetDataScope('SysUser')),
|
||||||
@@ -296,7 +296,7 @@ async def change_system_user_profile_info(
|
|||||||
@Log(title='个人信息', business_type=BusinessType.UPDATE)
|
@Log(title='个人信息', business_type=BusinessType.UPDATE)
|
||||||
async def reset_system_user_password(
|
async def reset_system_user_password(
|
||||||
request: Request,
|
request: Request,
|
||||||
reset_password: ResetPasswordModel = Query(),
|
reset_password: ResetPasswordModel = Depends(ResetPasswordModel.as_query),
|
||||||
query_db: AsyncSession = Depends(get_db),
|
query_db: AsyncSession = Depends(get_db),
|
||||||
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
|
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
|
||||||
):
|
):
|
||||||
|
@@ -71,6 +71,7 @@ class ConfigDao:
|
|||||||
if query_object.begin_time and query_object.end_time
|
if query_object.begin_time and query_object.end_time
|
||||||
else True,
|
else True,
|
||||||
)
|
)
|
||||||
|
.order_by(SysConfig.config_id)
|
||||||
.distinct()
|
.distinct()
|
||||||
)
|
)
|
||||||
config_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
|
config_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
|
||||||
|
@@ -84,6 +84,7 @@ class DictTypeDao:
|
|||||||
if query_object.begin_time and query_object.end_time
|
if query_object.begin_time and query_object.end_time
|
||||||
else True,
|
else True,
|
||||||
)
|
)
|
||||||
|
.order_by(SysDictType.dict_id)
|
||||||
.distinct()
|
.distinct()
|
||||||
)
|
)
|
||||||
dict_type_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
|
dict_type_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
|
||||||
|
@@ -69,6 +69,7 @@ class JobDao:
|
|||||||
SysJob.job_group == query_object.job_group if query_object.job_group else True,
|
SysJob.job_group == query_object.job_group if query_object.job_group else True,
|
||||||
SysJob.status == query_object.status if query_object.status else True,
|
SysJob.status == query_object.status if query_object.status else True,
|
||||||
)
|
)
|
||||||
|
.order_by(SysJob.job_id)
|
||||||
.distinct()
|
.distinct()
|
||||||
)
|
)
|
||||||
job_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
|
job_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
from datetime import datetime, time
|
from datetime import datetime, time
|
||||||
from sqlalchemy import delete, select
|
from sqlalchemy import delete, desc, select
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
from module_admin.entity.do.job_do import SysJobLog
|
from module_admin.entity.do.job_do import SysJobLog
|
||||||
@@ -35,6 +35,7 @@ class JobLogDao:
|
|||||||
if query_object.begin_time and query_object.end_time
|
if query_object.begin_time and query_object.end_time
|
||||||
else True,
|
else True,
|
||||||
)
|
)
|
||||||
|
.order_by(desc(SysJobLog.create_time))
|
||||||
.distinct()
|
.distinct()
|
||||||
)
|
)
|
||||||
job_log_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
|
job_log_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
|
||||||
|
@@ -72,6 +72,7 @@ class NoticeDao:
|
|||||||
if query_object.begin_time and query_object.end_time
|
if query_object.begin_time and query_object.end_time
|
||||||
else True,
|
else True,
|
||||||
)
|
)
|
||||||
|
.order_by(SysNotice.notice_id)
|
||||||
.distinct()
|
.distinct()
|
||||||
)
|
)
|
||||||
notice_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
|
notice_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
|
||||||
|
@@ -318,6 +318,7 @@ class UserDao:
|
|||||||
and_(SysUser.dept_id == SysDept.dept_id, SysDept.status == '0', SysDept.del_flag == '0'),
|
and_(SysUser.dept_id == SysDept.dept_id, SysDept.status == '0', SysDept.del_flag == '0'),
|
||||||
isouter=True,
|
isouter=True,
|
||||||
)
|
)
|
||||||
|
.order_by(SysUser.user_id)
|
||||||
.distinct()
|
.distinct()
|
||||||
)
|
)
|
||||||
user_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
|
user_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
|
||||||
|
@@ -19,4 +19,4 @@ class SysConfig(Base):
|
|||||||
create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间')
|
create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间')
|
||||||
update_by = Column(String(64), nullable=True, default='', comment='更新者')
|
update_by = Column(String(64), nullable=True, default='', comment='更新者')
|
||||||
update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间')
|
update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间')
|
||||||
remark = Column(String(500), nullable=True, default='', comment='备注')
|
remark = Column(String(500), nullable=True, default=None, comment='备注')
|
||||||
|
@@ -18,8 +18,8 @@ class SysDept(Base):
|
|||||||
leader = Column(String(20), nullable=True, default=None, comment='负责人')
|
leader = Column(String(20), nullable=True, default=None, comment='负责人')
|
||||||
phone = Column(String(11), nullable=True, default=None, comment='联系电话')
|
phone = Column(String(11), nullable=True, default=None, comment='联系电话')
|
||||||
email = Column(String(50), nullable=True, default=None, comment='邮箱')
|
email = Column(String(50), nullable=True, default=None, comment='邮箱')
|
||||||
status = Column(String(1), nullable=True, default=0, comment='部门状态(0正常 1停用)')
|
status = Column(String(1), nullable=True, default='0', comment='部门状态(0正常 1停用)')
|
||||||
del_flag = Column(String(1), nullable=True, default=0, comment='删除标志(0代表存在 2代表删除)')
|
del_flag = Column(String(1), nullable=True, default='0', comment='删除标志(0代表存在 2代表删除)')
|
||||||
create_by = Column(String(64), nullable=True, default='', comment='创建者')
|
create_by = Column(String(64), nullable=True, default='', comment='创建者')
|
||||||
create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间')
|
create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间')
|
||||||
update_by = Column(String(64), nullable=True, default='', comment='更新者')
|
update_by = Column(String(64), nullable=True, default='', comment='更新者')
|
||||||
|
@@ -18,7 +18,7 @@ class SysDictType(Base):
|
|||||||
create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间')
|
create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间')
|
||||||
update_by = Column(String(64), nullable=True, default='', comment='更新者')
|
update_by = Column(String(64), nullable=True, default='', comment='更新者')
|
||||||
update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间')
|
update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间')
|
||||||
remark = Column(String(500), nullable=True, default='', comment='备注')
|
remark = Column(String(500), nullable=True, default=None, comment='备注')
|
||||||
|
|
||||||
__table_args__ = (UniqueConstraint('dict_type', name='uq_sys_dict_type_dict_type'),)
|
__table_args__ = (UniqueConstraint('dict_type', name='uq_sys_dict_type_dict_type'),)
|
||||||
|
|
||||||
@@ -35,12 +35,12 @@ class SysDictData(Base):
|
|||||||
dict_label = Column(String(100), nullable=True, default='', comment='字典标签')
|
dict_label = Column(String(100), nullable=True, default='', comment='字典标签')
|
||||||
dict_value = Column(String(100), nullable=True, default='', comment='字典键值')
|
dict_value = Column(String(100), nullable=True, default='', comment='字典键值')
|
||||||
dict_type = Column(String(100), nullable=True, default='', comment='字典类型')
|
dict_type = Column(String(100), nullable=True, default='', comment='字典类型')
|
||||||
css_class = Column(String(100), nullable=True, default='', comment='样式属性(其他样式扩展)')
|
css_class = Column(String(100), nullable=True, default=None, comment='样式属性(其他样式扩展)')
|
||||||
list_class = Column(String(100), nullable=True, default='', comment='表格回显样式')
|
list_class = Column(String(100), nullable=True, default=None, comment='表格回显样式')
|
||||||
is_default = Column(String(1), nullable=True, default='N', comment='是否默认(Y是 N否)')
|
is_default = Column(String(1), nullable=True, default='N', comment='是否默认(Y是 N否)')
|
||||||
status = Column(String(1), nullable=True, default='0', comment='状态(0正常 1停用)')
|
status = Column(String(1), nullable=True, default='0', comment='状态(0正常 1停用)')
|
||||||
create_by = Column(String(64), nullable=True, default='', comment='创建者')
|
create_by = Column(String(64), nullable=True, default='', comment='创建者')
|
||||||
create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间')
|
create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间')
|
||||||
update_by = Column(String(64), nullable=True, default='', comment='更新者')
|
update_by = Column(String(64), nullable=True, default='', comment='更新者')
|
||||||
update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间')
|
update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间')
|
||||||
remark = Column(String(500), nullable=True, default='', comment='备注')
|
remark = Column(String(500), nullable=True, default=None, comment='备注')
|
||||||
|
@@ -11,32 +11,26 @@ class SysJob(Base):
|
|||||||
__tablename__ = 'sys_job'
|
__tablename__ = 'sys_job'
|
||||||
|
|
||||||
job_id = Column(Integer, primary_key=True, autoincrement=True, comment='任务ID')
|
job_id = Column(Integer, primary_key=True, autoincrement=True, comment='任务ID')
|
||||||
job_name = Column(String(64, collation='utf8_general_ci'), nullable=False, comment='任务名称')
|
job_name = Column(String(64), nullable=True, default='', comment='任务名称')
|
||||||
job_group = Column(String(64, collation='utf8_general_ci'), nullable=False, default='default', comment='任务组名')
|
job_group = Column(String(64), nullable=True, default='default', comment='任务组名')
|
||||||
job_executor = Column(
|
job_executor = Column(String(64), nullable=True, default='default', comment='任务执行器')
|
||||||
String(64, collation='utf8_general_ci'), nullable=False, default='default', comment='任务执行器'
|
invoke_target = Column(String(500), nullable=False, comment='调用目标字符串')
|
||||||
)
|
job_args = Column(String(255), nullable=True, default='', comment='位置参数')
|
||||||
invoke_target = Column(String(500, collation='utf8_general_ci'), nullable=False, comment='调用目标字符串')
|
job_kwargs = Column(String(255), nullable=True, default='', comment='关键字参数')
|
||||||
job_args = Column(String(255, collation='utf8_general_ci'), nullable=True, comment='位置参数')
|
cron_expression = Column(String(255), nullable=True, default='', comment='cron执行表达式')
|
||||||
job_kwargs = Column(String(255, collation='utf8_general_ci'), nullable=True, comment='关键字参数')
|
|
||||||
cron_expression = Column(
|
|
||||||
String(255, collation='utf8_general_ci'), nullable=True, default='', comment='cron执行表达式'
|
|
||||||
)
|
|
||||||
misfire_policy = Column(
|
misfire_policy = Column(
|
||||||
String(20, collation='utf8_general_ci'),
|
String(20),
|
||||||
nullable=True,
|
nullable=True,
|
||||||
default='3',
|
default='3',
|
||||||
comment='计划执行错误策略(1立即执行 2执行一次 3放弃执行)',
|
comment='计划执行错误策略(1立即执行 2执行一次 3放弃执行)',
|
||||||
)
|
)
|
||||||
concurrent = Column(
|
concurrent = Column(String(1), nullable=True, default='1', comment='是否并发执行(0允许 1禁止)')
|
||||||
String(1, collation='utf8_general_ci'), nullable=True, default='1', comment='是否并发执行(0允许 1禁止)'
|
status = Column(String(1), nullable=True, default='0', comment='状态(0正常 1暂停)')
|
||||||
)
|
create_by = Column(String(64), nullable=True, default='', comment='创建者')
|
||||||
status = Column(String(1, collation='utf8_general_ci'), nullable=True, default='0', comment='状态(0正常 1暂停)')
|
|
||||||
create_by = Column(String(64, collation='utf8_general_ci'), nullable=True, default='', comment='创建者')
|
|
||||||
create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间')
|
create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间')
|
||||||
update_by = Column(String(64, collation='utf8_general_ci'), nullable=True, default='', comment='更新者')
|
update_by = Column(String(64), nullable=True, default='', comment='更新者')
|
||||||
update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间')
|
update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间')
|
||||||
remark = Column(String(500, collation='utf8_general_ci'), nullable=True, default='', comment='备注信息')
|
remark = Column(String(500), nullable=True, default='', comment='备注信息')
|
||||||
|
|
||||||
|
|
||||||
class SysJobLog(Base):
|
class SysJobLog(Base):
|
||||||
@@ -47,18 +41,14 @@ class SysJobLog(Base):
|
|||||||
__tablename__ = 'sys_job_log'
|
__tablename__ = 'sys_job_log'
|
||||||
|
|
||||||
job_log_id = Column(Integer, primary_key=True, autoincrement=True, comment='任务日志ID')
|
job_log_id = Column(Integer, primary_key=True, autoincrement=True, comment='任务日志ID')
|
||||||
job_name = Column(String(64, collation='utf8_general_ci'), nullable=False, comment='任务名称')
|
job_name = Column(String(64), nullable=False, comment='任务名称')
|
||||||
job_group = Column(String(64, collation='utf8_general_ci'), nullable=False, comment='任务组名')
|
job_group = Column(String(64), nullable=False, comment='任务组名')
|
||||||
job_executor = Column(
|
job_executor = Column(String(64), nullable=False, comment='任务执行器')
|
||||||
String(64, collation='utf8_general_ci'), nullable=False, default='default', comment='任务执行器'
|
invoke_target = Column(String(500), nullable=False, comment='调用目标字符串')
|
||||||
)
|
job_args = Column(String(255), nullable=True, default='', comment='位置参数')
|
||||||
invoke_target = Column(String(500, collation='utf8_general_ci'), nullable=False, comment='调用目标字符串')
|
job_kwargs = Column(String(255), nullable=True, default='', comment='关键字参数')
|
||||||
job_args = Column(String(255, collation='utf8_general_ci'), nullable=True, comment='位置参数')
|
job_trigger = Column(String(255), nullable=True, default='', comment='任务触发器')
|
||||||
job_kwargs = Column(String(255, collation='utf8_general_ci'), nullable=True, comment='关键字参数')
|
job_message = Column(String(500), nullable=True, default='', comment='日志信息')
|
||||||
job_trigger = Column(String(255, collation='utf8_general_ci'), nullable=True, comment='任务触发器')
|
status = Column(String(1), nullable=True, default='0', comment='执行状态(0正常 1失败)')
|
||||||
job_message = Column(String(500, collation='utf8_general_ci'), nullable=True, default='', comment='日志信息')
|
exception_info = Column(String(2000), nullable=True, default='', comment='异常信息')
|
||||||
status = Column(
|
|
||||||
String(1, collation='utf8_general_ci'), nullable=True, default='0', comment='执行状态(0正常 1失败)'
|
|
||||||
)
|
|
||||||
exception_info = Column(String(2000, collation='utf8_general_ci'), nullable=True, default='', comment='异常信息')
|
|
||||||
create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间')
|
create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间')
|
||||||
|
@@ -11,15 +11,13 @@ class SysLogininfor(Base):
|
|||||||
__tablename__ = 'sys_logininfor'
|
__tablename__ = 'sys_logininfor'
|
||||||
|
|
||||||
info_id = Column(Integer, primary_key=True, autoincrement=True, comment='访问ID')
|
info_id = Column(Integer, primary_key=True, autoincrement=True, comment='访问ID')
|
||||||
user_name = Column(String(50, collation='utf8_general_ci'), nullable=True, default='', comment='用户账号')
|
user_name = Column(String(50), nullable=True, default='', comment='用户账号')
|
||||||
ipaddr = Column(String(128, collation='utf8_general_ci'), nullable=True, default='', comment='登录IP地址')
|
ipaddr = Column(String(128), nullable=True, default='', comment='登录IP地址')
|
||||||
login_location = Column(String(255, collation='utf8_general_ci'), nullable=True, default='', comment='登录地点')
|
login_location = Column(String(255), nullable=True, default='', comment='登录地点')
|
||||||
browser = Column(String(50, collation='utf8_general_ci'), nullable=True, default='', comment='浏览器类型')
|
browser = Column(String(50), nullable=True, default='', comment='浏览器类型')
|
||||||
os = Column(String(50, collation='utf8_general_ci'), nullable=True, default='', comment='操作系统')
|
os = Column(String(50), nullable=True, default='', comment='操作系统')
|
||||||
status = Column(
|
status = Column(String(1), nullable=True, default='0', comment='登录状态(0成功 1失败)')
|
||||||
String(1, collation='utf8_general_ci'), nullable=True, default='0', comment='登录状态(0成功 1失败)'
|
msg = Column(String(255), nullable=True, default='', comment='提示消息')
|
||||||
)
|
|
||||||
msg = Column(String(255, collation='utf8_general_ci'), nullable=True, default='', comment='提示消息')
|
|
||||||
login_time = Column(DateTime, nullable=True, default=datetime.now(), comment='访问时间')
|
login_time = Column(DateTime, nullable=True, default=datetime.now(), comment='访问时间')
|
||||||
|
|
||||||
idx_sys_logininfor_s = Index('idx_sys_logininfor_s', status)
|
idx_sys_logininfor_s = Index('idx_sys_logininfor_s', status)
|
||||||
@@ -34,20 +32,20 @@ class SysOperLog(Base):
|
|||||||
__tablename__ = 'sys_oper_log'
|
__tablename__ = 'sys_oper_log'
|
||||||
|
|
||||||
oper_id = Column(BigInteger, primary_key=True, autoincrement=True, comment='日志主键')
|
oper_id = Column(BigInteger, primary_key=True, autoincrement=True, comment='日志主键')
|
||||||
title = Column(String(50, collation='utf8_general_ci'), nullable=True, default='', comment='模块标题')
|
title = Column(String(50), nullable=True, default='', comment='模块标题')
|
||||||
business_type = Column(Integer, default=0, comment='业务类型(0其它 1新增 2修改 3删除)')
|
business_type = Column(Integer, default=0, comment='业务类型(0其它 1新增 2修改 3删除)')
|
||||||
method = Column(String(100, collation='utf8_general_ci'), nullable=True, default='', comment='方法名称')
|
method = Column(String(100), nullable=True, default='', comment='方法名称')
|
||||||
request_method = Column(String(10, collation='utf8_general_ci'), nullable=True, default='', comment='请求方式')
|
request_method = Column(String(10), nullable=True, default='', comment='请求方式')
|
||||||
operator_type = Column(Integer, default=0, comment='操作类别(0其它 1后台用户 2手机端用户)')
|
operator_type = Column(Integer, default=0, comment='操作类别(0其它 1后台用户 2手机端用户)')
|
||||||
oper_name = Column(String(50, collation='utf8_general_ci'), nullable=True, default='', comment='操作人员')
|
oper_name = Column(String(50), nullable=True, default='', comment='操作人员')
|
||||||
dept_name = Column(String(50, collation='utf8_general_ci'), nullable=True, default='', comment='部门名称')
|
dept_name = Column(String(50), nullable=True, default='', comment='部门名称')
|
||||||
oper_url = Column(String(255, collation='utf8_general_ci'), nullable=True, default='', comment='请求URL')
|
oper_url = Column(String(255), nullable=True, default='', comment='请求URL')
|
||||||
oper_ip = Column(String(128, collation='utf8_general_ci'), nullable=True, default='', comment='主机地址')
|
oper_ip = Column(String(128), nullable=True, default='', comment='主机地址')
|
||||||
oper_location = Column(String(255, collation='utf8_general_ci'), nullable=True, default='', comment='操作地点')
|
oper_location = Column(String(255), nullable=True, default='', comment='操作地点')
|
||||||
oper_param = Column(String(2000, collation='utf8_general_ci'), nullable=True, default='', comment='请求参数')
|
oper_param = Column(String(2000), nullable=True, default='', comment='请求参数')
|
||||||
json_result = Column(String(2000, collation='utf8_general_ci'), nullable=True, default='', comment='返回参数')
|
json_result = Column(String(2000), nullable=True, default='', comment='返回参数')
|
||||||
status = Column(Integer, default=0, comment='操作状态(0正常 1异常)')
|
status = Column(Integer, default=0, comment='操作状态(0正常 1异常)')
|
||||||
error_msg = Column(String(2000, collation='utf8_general_ci'), nullable=True, default='', comment='错误消息')
|
error_msg = Column(String(2000), nullable=True, default='', comment='错误消息')
|
||||||
oper_time = Column(DateTime, nullable=True, default=datetime.now(), comment='操作时间')
|
oper_time = Column(DateTime, nullable=True, default=datetime.now(), comment='操作时间')
|
||||||
cost_time = Column(BigInteger, default=0, comment='消耗时间')
|
cost_time = Column(BigInteger, default=0, comment='消耗时间')
|
||||||
|
|
||||||
|
@@ -11,12 +11,12 @@ class SysNotice(Base):
|
|||||||
__tablename__ = 'sys_notice'
|
__tablename__ = 'sys_notice'
|
||||||
|
|
||||||
notice_id = Column(Integer, primary_key=True, autoincrement=True, comment='公告ID')
|
notice_id = Column(Integer, primary_key=True, autoincrement=True, comment='公告ID')
|
||||||
notice_title = Column(String(50, collation='utf8_general_ci'), nullable=False, comment='公告标题')
|
notice_title = Column(String(50), nullable=False, comment='公告标题')
|
||||||
notice_type = Column(String(1, collation='utf8_general_ci'), nullable=False, comment='公告类型(1通知 2公告)')
|
notice_type = Column(String(1), nullable=False, comment='公告类型(1通知 2公告)')
|
||||||
notice_content = Column(LargeBinary, comment='公告内容')
|
notice_content = Column(LargeBinary, comment='公告内容')
|
||||||
status = Column(String(1, collation='utf8_general_ci'), default='0', comment='公告状态(0正常 1关闭)')
|
status = Column(String(1), default='0', comment='公告状态(0正常 1关闭)')
|
||||||
create_by = Column(String(64, collation='utf8_general_ci'), default='', comment='创建者')
|
create_by = Column(String(64), default='', comment='创建者')
|
||||||
create_time = Column(DateTime, comment='创建时间', default=datetime.now())
|
create_time = Column(DateTime, comment='创建时间', default=datetime.now())
|
||||||
update_by = Column(String(64, collation='utf8_general_ci'), default='', comment='更新者')
|
update_by = Column(String(64), default='', comment='更新者')
|
||||||
update_time = Column(DateTime, comment='更新时间', default=datetime.now())
|
update_time = Column(DateTime, comment='更新时间', default=datetime.now())
|
||||||
remark = Column(String(255, collation='utf8_general_ci'), comment='备注')
|
remark = Column(String(255), comment='备注')
|
||||||
|
@@ -19,4 +19,4 @@ class SysPost(Base):
|
|||||||
create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间')
|
create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间')
|
||||||
update_by = Column(String(64), default='', comment='更新者')
|
update_by = Column(String(64), default='', comment='更新者')
|
||||||
update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间')
|
update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间')
|
||||||
remark = Column(String(500), nullable=True, default='', comment='备注')
|
remark = Column(String(500), nullable=True, default=None, comment='备注')
|
||||||
|
@@ -11,23 +11,23 @@ class SysRole(Base):
|
|||||||
__tablename__ = 'sys_role'
|
__tablename__ = 'sys_role'
|
||||||
|
|
||||||
role_id = Column(Integer, primary_key=True, autoincrement=True, comment='角色ID')
|
role_id = Column(Integer, primary_key=True, autoincrement=True, comment='角色ID')
|
||||||
role_name = Column(String(30, collation='utf8_general_ci'), nullable=False, comment='角色名称')
|
role_name = Column(String(30), nullable=False, comment='角色名称')
|
||||||
role_key = Column(String(100, collation='utf8_general_ci'), nullable=False, comment='角色权限字符串')
|
role_key = Column(String(100), nullable=False, comment='角色权限字符串')
|
||||||
role_sort = Column(Integer, nullable=False, comment='显示顺序')
|
role_sort = Column(Integer, nullable=False, comment='显示顺序')
|
||||||
data_scope = Column(
|
data_scope = Column(
|
||||||
String(1, collation='utf8_general_ci'),
|
String(1),
|
||||||
default='1',
|
default='1',
|
||||||
comment='数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
|
comment='数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
|
||||||
)
|
)
|
||||||
menu_check_strictly = Column(Integer, default=1, comment='菜单树选择项是否关联显示')
|
menu_check_strictly = Column(Integer, default=1, comment='菜单树选择项是否关联显示')
|
||||||
dept_check_strictly = Column(Integer, default=1, comment='部门树选择项是否关联显示')
|
dept_check_strictly = Column(Integer, default=1, comment='部门树选择项是否关联显示')
|
||||||
status = Column(String(1, collation='utf8_general_ci'), nullable=False, comment='角色状态(0正常 1停用)')
|
status = Column(String(1), nullable=False, default='0', comment='角色状态(0正常 1停用)')
|
||||||
del_flag = Column(String(1, collation='utf8_general_ci'), default='0', comment='删除标志(0代表存在 2代表删除)')
|
del_flag = Column(String(1), default='0', comment='删除标志(0代表存在 2代表删除)')
|
||||||
create_by = Column(String(64, collation='utf8_general_ci'), default='', comment='创建者')
|
create_by = Column(String(64), default='', comment='创建者')
|
||||||
create_time = Column(DateTime, default=datetime.now(), comment='创建时间')
|
create_time = Column(DateTime, default=datetime.now(), comment='创建时间')
|
||||||
update_by = Column(String(64, collation='utf8_general_ci'), default='', comment='更新者')
|
update_by = Column(String(64), default='', comment='更新者')
|
||||||
update_time = Column(DateTime, default=datetime.now(), comment='更新时间')
|
update_time = Column(DateTime, default=datetime.now(), comment='更新时间')
|
||||||
remark = Column(String(500, collation='utf8_general_ci'), comment='备注')
|
remark = Column(String(500), default=None, comment='备注')
|
||||||
|
|
||||||
|
|
||||||
class SysRoleDept(Base):
|
class SysRoleDept(Base):
|
||||||
|
@@ -11,24 +11,24 @@ class SysUser(Base):
|
|||||||
__tablename__ = 'sys_user'
|
__tablename__ = 'sys_user'
|
||||||
|
|
||||||
user_id = Column(Integer, primary_key=True, autoincrement=True, comment='用户ID')
|
user_id = Column(Integer, primary_key=True, autoincrement=True, comment='用户ID')
|
||||||
dept_id = Column(Integer, comment='部门ID')
|
dept_id = Column(Integer, default=None, comment='部门ID')
|
||||||
user_name = Column(String(30, collation='utf8_general_ci'), nullable=False, comment='用户账号')
|
user_name = Column(String(30), nullable=False, comment='用户账号')
|
||||||
nick_name = Column(String(30, collation='utf8_general_ci'), nullable=False, comment='用户昵称')
|
nick_name = Column(String(30), nullable=False, comment='用户昵称')
|
||||||
user_type = Column(String(2, collation='utf8_general_ci'), default='00', comment='用户类型(00系统用户)')
|
user_type = Column(String(2), default='00', comment='用户类型(00系统用户)')
|
||||||
email = Column(String(50, collation='utf8_general_ci'), default='', comment='用户邮箱')
|
email = Column(String(50), default='', comment='用户邮箱')
|
||||||
phonenumber = Column(String(11, collation='utf8_general_ci'), default='', comment='手机号码')
|
phonenumber = Column(String(11), default='', comment='手机号码')
|
||||||
sex = Column(String(1, collation='utf8_general_ci'), default='0', comment='用户性别(0男 1女 2未知)')
|
sex = Column(String(1), default='0', comment='用户性别(0男 1女 2未知)')
|
||||||
avatar = Column(String(100, collation='utf8_general_ci'), default='', comment='头像地址')
|
avatar = Column(String(100), default='', comment='头像地址')
|
||||||
password = Column(String(100, collation='utf8_general_ci'), default='', comment='密码')
|
password = Column(String(100), default='', comment='密码')
|
||||||
status = Column(String(1, collation='utf8_general_ci'), default='0', comment='帐号状态(0正常 1停用)')
|
status = Column(String(1), default='0', comment='帐号状态(0正常 1停用)')
|
||||||
del_flag = Column(String(1, collation='utf8_general_ci'), default='0', comment='删除标志(0代表存在 2代表删除)')
|
del_flag = Column(String(1), default='0', comment='删除标志(0代表存在 2代表删除)')
|
||||||
login_ip = Column(String(128, collation='utf8_general_ci'), default='', comment='最后登录IP')
|
login_ip = Column(String(128), default='', comment='最后登录IP')
|
||||||
login_date = Column(DateTime, comment='最后登录时间')
|
login_date = Column(DateTime, comment='最后登录时间')
|
||||||
create_by = Column(String(64, collation='utf8_general_ci'), default='', comment='创建者')
|
create_by = Column(String(64), default='', comment='创建者')
|
||||||
create_time = Column(DateTime, comment='创建时间', default=datetime.now())
|
create_time = Column(DateTime, comment='创建时间', default=datetime.now())
|
||||||
update_by = Column(String(64, collation='utf8_general_ci'), default='', comment='更新者')
|
update_by = Column(String(64), default='', comment='更新者')
|
||||||
update_time = Column(DateTime, comment='更新时间', default=datetime.now())
|
update_time = Column(DateTime, comment='更新时间', default=datetime.now())
|
||||||
remark = Column(String(500, collation='utf8_general_ci'), comment='备注')
|
remark = Column(String(500), default=None, comment='备注')
|
||||||
|
|
||||||
|
|
||||||
class SysUserRole(Base):
|
class SysUserRole(Base):
|
||||||
|
@@ -3,6 +3,7 @@ from pydantic import BaseModel, ConfigDict, Field
|
|||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
from pydantic_validation_decorator import NotBlank, Size
|
from pydantic_validation_decorator import NotBlank, Size
|
||||||
from typing import Literal, Optional
|
from typing import Literal, Optional
|
||||||
|
from module_admin.annotation.pydantic_annotation import as_query
|
||||||
|
|
||||||
|
|
||||||
class ConfigModel(BaseModel):
|
class ConfigModel(BaseModel):
|
||||||
@@ -53,6 +54,7 @@ class ConfigQueryModel(ConfigModel):
|
|||||||
end_time: Optional[str] = Field(default=None, description='结束时间')
|
end_time: Optional[str] = Field(default=None, description='结束时间')
|
||||||
|
|
||||||
|
|
||||||
|
@as_query
|
||||||
class ConfigPageQueryModel(ConfigQueryModel):
|
class ConfigPageQueryModel(ConfigQueryModel):
|
||||||
"""
|
"""
|
||||||
参数配置管理分页查询模型
|
参数配置管理分页查询模型
|
||||||
|
@@ -3,6 +3,7 @@ from pydantic import BaseModel, ConfigDict, Field
|
|||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
from pydantic_validation_decorator import Network, NotBlank, Size
|
from pydantic_validation_decorator import Network, NotBlank, Size
|
||||||
from typing import Literal, Optional
|
from typing import Literal, Optional
|
||||||
|
from module_admin.annotation.pydantic_annotation import as_query
|
||||||
|
|
||||||
|
|
||||||
class DeptModel(BaseModel):
|
class DeptModel(BaseModel):
|
||||||
@@ -52,6 +53,7 @@ class DeptModel(BaseModel):
|
|||||||
self.get_email()
|
self.get_email()
|
||||||
|
|
||||||
|
|
||||||
|
@as_query
|
||||||
class DeptQueryModel(DeptModel):
|
class DeptQueryModel(DeptModel):
|
||||||
"""
|
"""
|
||||||
部门管理不分页查询模型
|
部门管理不分页查询模型
|
||||||
|
@@ -3,6 +3,7 @@ from pydantic import BaseModel, ConfigDict, Field
|
|||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
from pydantic_validation_decorator import NotBlank, Pattern, Size
|
from pydantic_validation_decorator import NotBlank, Pattern, Size
|
||||||
from typing import Literal, Optional
|
from typing import Literal, Optional
|
||||||
|
from module_admin.annotation.pydantic_annotation import as_query
|
||||||
|
|
||||||
|
|
||||||
class DictTypeModel(BaseModel):
|
class DictTypeModel(BaseModel):
|
||||||
@@ -99,6 +100,7 @@ class DictTypeQueryModel(DictTypeModel):
|
|||||||
end_time: Optional[str] = Field(default=None, description='结束时间')
|
end_time: Optional[str] = Field(default=None, description='结束时间')
|
||||||
|
|
||||||
|
|
||||||
|
@as_query
|
||||||
class DictTypePageQueryModel(DictTypeQueryModel):
|
class DictTypePageQueryModel(DictTypeQueryModel):
|
||||||
"""
|
"""
|
||||||
字典类型管理分页查询模型
|
字典类型管理分页查询模型
|
||||||
@@ -127,6 +129,7 @@ class DictDataQueryModel(DictDataModel):
|
|||||||
end_time: Optional[str] = Field(default=None, description='结束时间')
|
end_time: Optional[str] = Field(default=None, description='结束时间')
|
||||||
|
|
||||||
|
|
||||||
|
@as_query
|
||||||
class DictDataPageQueryModel(DictDataQueryModel):
|
class DictDataPageQueryModel(DictDataQueryModel):
|
||||||
"""
|
"""
|
||||||
字典数据管理分页查询模型
|
字典数据管理分页查询模型
|
||||||
|
@@ -3,6 +3,7 @@ from pydantic import BaseModel, ConfigDict, Field
|
|||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
from pydantic_validation_decorator import NotBlank, Size
|
from pydantic_validation_decorator import NotBlank, Size
|
||||||
from typing import Literal, Optional
|
from typing import Literal, Optional
|
||||||
|
from module_admin.annotation.pydantic_annotation import as_query
|
||||||
|
|
||||||
|
|
||||||
class JobModel(BaseModel):
|
class JobModel(BaseModel):
|
||||||
@@ -76,6 +77,7 @@ class JobQueryModel(JobModel):
|
|||||||
end_time: Optional[str] = Field(default=None, description='结束时间')
|
end_time: Optional[str] = Field(default=None, description='结束时间')
|
||||||
|
|
||||||
|
|
||||||
|
@as_query
|
||||||
class JobPageQueryModel(JobQueryModel):
|
class JobPageQueryModel(JobQueryModel):
|
||||||
"""
|
"""
|
||||||
定时任务管理分页查询模型
|
定时任务管理分页查询模型
|
||||||
@@ -112,6 +114,7 @@ class JobLogQueryModel(JobLogModel):
|
|||||||
end_time: Optional[str] = Field(default=None, description='结束时间')
|
end_time: Optional[str] = Field(default=None, description='结束时间')
|
||||||
|
|
||||||
|
|
||||||
|
@as_query
|
||||||
class JobLogPageQueryModel(JobLogQueryModel):
|
class JobLogPageQueryModel(JobLogQueryModel):
|
||||||
"""
|
"""
|
||||||
定时任务日志管理分页查询模型
|
定时任务日志管理分页查询模型
|
||||||
|
@@ -2,6 +2,7 @@ from datetime import datetime
|
|||||||
from pydantic import BaseModel, ConfigDict, Field
|
from pydantic import BaseModel, ConfigDict, Field
|
||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
from typing import Literal, Optional
|
from typing import Literal, Optional
|
||||||
|
from module_admin.annotation.pydantic_annotation import as_query
|
||||||
|
|
||||||
|
|
||||||
class OperLogModel(BaseModel):
|
class OperLogModel(BaseModel):
|
||||||
@@ -67,6 +68,7 @@ class OperLogQueryModel(OperLogModel):
|
|||||||
end_time: Optional[str] = Field(default=None, description='结束时间')
|
end_time: Optional[str] = Field(default=None, description='结束时间')
|
||||||
|
|
||||||
|
|
||||||
|
@as_query
|
||||||
class OperLogPageQueryModel(OperLogQueryModel):
|
class OperLogPageQueryModel(OperLogQueryModel):
|
||||||
"""
|
"""
|
||||||
操作日志管理分页查询模型
|
操作日志管理分页查询模型
|
||||||
@@ -99,6 +101,7 @@ class LoginLogQueryModel(LogininforModel):
|
|||||||
end_time: Optional[str] = Field(default=None, description='结束时间')
|
end_time: Optional[str] = Field(default=None, description='结束时间')
|
||||||
|
|
||||||
|
|
||||||
|
@as_query
|
||||||
class LoginLogPageQueryModel(LoginLogQueryModel):
|
class LoginLogPageQueryModel(LoginLogQueryModel):
|
||||||
"""
|
"""
|
||||||
登录日志管理分页查询模型
|
登录日志管理分页查询模型
|
||||||
|
@@ -3,6 +3,7 @@ from pydantic import BaseModel, ConfigDict, Field
|
|||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
from pydantic_validation_decorator import NotBlank, Size
|
from pydantic_validation_decorator import NotBlank, Size
|
||||||
from typing import Literal, Optional
|
from typing import Literal, Optional
|
||||||
|
from module_admin.annotation.pydantic_annotation import as_query
|
||||||
|
|
||||||
|
|
||||||
class MenuModel(BaseModel):
|
class MenuModel(BaseModel):
|
||||||
@@ -67,6 +68,7 @@ class MenuModel(BaseModel):
|
|||||||
self.get_perms()
|
self.get_perms()
|
||||||
|
|
||||||
|
|
||||||
|
@as_query
|
||||||
class MenuQueryModel(MenuModel):
|
class MenuQueryModel(MenuModel):
|
||||||
"""
|
"""
|
||||||
菜单管理不分页查询模型
|
菜单管理不分页查询模型
|
||||||
|
@@ -3,6 +3,7 @@ from pydantic import BaseModel, ConfigDict, Field
|
|||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
from pydantic_validation_decorator import NotBlank, Size, Xss
|
from pydantic_validation_decorator import NotBlank, Size, Xss
|
||||||
from typing import Literal, Optional
|
from typing import Literal, Optional
|
||||||
|
from module_admin.annotation.pydantic_annotation import as_query
|
||||||
|
|
||||||
|
|
||||||
class NoticeModel(BaseModel):
|
class NoticeModel(BaseModel):
|
||||||
@@ -42,6 +43,7 @@ class NoticeQueryModel(NoticeModel):
|
|||||||
end_time: Optional[str] = Field(default=None, description='结束时间')
|
end_time: Optional[str] = Field(default=None, description='结束时间')
|
||||||
|
|
||||||
|
|
||||||
|
@as_query
|
||||||
class NoticePageQueryModel(NoticeQueryModel):
|
class NoticePageQueryModel(NoticeQueryModel):
|
||||||
"""
|
"""
|
||||||
通知公告管理分页查询模型
|
通知公告管理分页查询模型
|
||||||
|
@@ -2,6 +2,7 @@ from datetime import datetime
|
|||||||
from pydantic import BaseModel, ConfigDict, Field
|
from pydantic import BaseModel, ConfigDict, Field
|
||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
from module_admin.annotation.pydantic_annotation import as_query
|
||||||
|
|
||||||
|
|
||||||
class OnlineModel(BaseModel):
|
class OnlineModel(BaseModel):
|
||||||
@@ -21,6 +22,7 @@ class OnlineModel(BaseModel):
|
|||||||
login_time: Optional[datetime] = Field(default=None, description='登录时间')
|
login_time: Optional[datetime] = Field(default=None, description='登录时间')
|
||||||
|
|
||||||
|
|
||||||
|
@as_query
|
||||||
class OnlineQueryModel(OnlineModel):
|
class OnlineQueryModel(OnlineModel):
|
||||||
"""
|
"""
|
||||||
岗位管理不分页查询模型
|
岗位管理不分页查询模型
|
||||||
|
@@ -3,6 +3,7 @@ from pydantic import BaseModel, ConfigDict, Field
|
|||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
from pydantic_validation_decorator import NotBlank, Size
|
from pydantic_validation_decorator import NotBlank, Size
|
||||||
from typing import Literal, Optional
|
from typing import Literal, Optional
|
||||||
|
from module_admin.annotation.pydantic_annotation import as_query
|
||||||
|
|
||||||
|
|
||||||
class PostModel(BaseModel):
|
class PostModel(BaseModel):
|
||||||
@@ -52,6 +53,7 @@ class PostQueryModel(PostModel):
|
|||||||
end_time: Optional[str] = Field(default=None, description='结束时间')
|
end_time: Optional[str] = Field(default=None, description='结束时间')
|
||||||
|
|
||||||
|
|
||||||
|
@as_query
|
||||||
class PostPageQueryModel(PostQueryModel):
|
class PostPageQueryModel(PostQueryModel):
|
||||||
"""
|
"""
|
||||||
岗位管理分页查询模型
|
岗位管理分页查询模型
|
||||||
|
@@ -3,6 +3,7 @@ from pydantic import BaseModel, ConfigDict, Field, field_validator, model_valida
|
|||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
from pydantic_validation_decorator import NotBlank, Size
|
from pydantic_validation_decorator import NotBlank, Size
|
||||||
from typing import List, Literal, Optional, Union
|
from typing import List, Literal, Optional, Union
|
||||||
|
from module_admin.annotation.pydantic_annotation import as_query
|
||||||
|
|
||||||
|
|
||||||
class RoleModel(BaseModel):
|
class RoleModel(BaseModel):
|
||||||
@@ -103,6 +104,7 @@ class RoleQueryModel(RoleModel):
|
|||||||
end_time: Optional[str] = Field(default=None, description='结束时间')
|
end_time: Optional[str] = Field(default=None, description='结束时间')
|
||||||
|
|
||||||
|
|
||||||
|
@as_query
|
||||||
class RolePageQueryModel(RoleQueryModel):
|
class RolePageQueryModel(RoleQueryModel):
|
||||||
"""
|
"""
|
||||||
角色管理分页查询模型
|
角色管理分页查询模型
|
||||||
|
@@ -5,6 +5,7 @@ from pydantic.alias_generators import to_camel
|
|||||||
from pydantic_validation_decorator import Network, NotBlank, Size, Xss
|
from pydantic_validation_decorator import Network, NotBlank, Size, Xss
|
||||||
from typing import List, Literal, Optional, Union
|
from typing import List, Literal, Optional, Union
|
||||||
from exceptions.exception import ModelValidatorException
|
from exceptions.exception import ModelValidatorException
|
||||||
|
from module_admin.annotation.pydantic_annotation import as_query
|
||||||
from module_admin.entity.vo.dept_vo import DeptModel
|
from module_admin.entity.vo.dept_vo import DeptModel
|
||||||
from module_admin.entity.vo.post_vo import PostModel
|
from module_admin.entity.vo.post_vo import PostModel
|
||||||
from module_admin.entity.vo.role_vo import RoleModel
|
from module_admin.entity.vo.role_vo import RoleModel
|
||||||
@@ -161,6 +162,7 @@ class UserQueryModel(UserModel):
|
|||||||
end_time: Optional[str] = Field(default=None, description='结束时间')
|
end_time: Optional[str] = Field(default=None, description='结束时间')
|
||||||
|
|
||||||
|
|
||||||
|
@as_query
|
||||||
class UserPageQueryModel(UserQueryModel):
|
class UserPageQueryModel(UserQueryModel):
|
||||||
"""
|
"""
|
||||||
用户管理分页查询模型
|
用户管理分页查询模型
|
||||||
@@ -188,6 +190,7 @@ class EditUserModel(AddUserModel):
|
|||||||
role: Optional[List] = Field(default=[], description='角色信息')
|
role: Optional[List] = Field(default=[], description='角色信息')
|
||||||
|
|
||||||
|
|
||||||
|
@as_query
|
||||||
class ResetPasswordModel(BaseModel):
|
class ResetPasswordModel(BaseModel):
|
||||||
"""
|
"""
|
||||||
重置密码模型
|
重置密码模型
|
||||||
@@ -237,6 +240,7 @@ class UserRoleQueryModel(UserModel):
|
|||||||
role_id: Optional[int] = Field(default=None, description='角色ID')
|
role_id: Optional[int] = Field(default=None, description='角色ID')
|
||||||
|
|
||||||
|
|
||||||
|
@as_query
|
||||||
class UserRolePageQueryModel(UserRoleQueryModel):
|
class UserRolePageQueryModel(UserRoleQueryModel):
|
||||||
"""
|
"""
|
||||||
用户角色关联管理分页查询模型
|
用户角色关联管理分页查询模型
|
||||||
@@ -265,6 +269,7 @@ class UserRoleResponseModel(BaseModel):
|
|||||||
user: UserInfoModel = Field(description='用户信息')
|
user: UserInfoModel = Field(description='用户信息')
|
||||||
|
|
||||||
|
|
||||||
|
@as_query
|
||||||
class CrudUserRoleModel(BaseModel):
|
class CrudUserRoleModel(BaseModel):
|
||||||
"""
|
"""
|
||||||
新增、删除用户关联角色及角色关联用户模型
|
新增、删除用户关联角色及角色关联用户模型
|
||||||
|
@@ -253,7 +253,7 @@ class DeptService:
|
|||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
dept_id_list = dept.ancestors.split(',')
|
dept_id_list = dept.ancestors.split(',')
|
||||||
await DeptDao.update_dept_status_normal_dao(query_db, dept_id_list)
|
await DeptDao.update_dept_status_normal_dao(query_db, list(map(int, dept_id_list)))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def update_dept_children(cls, query_db: AsyncSession, dept_id: int, new_ancestors: str, old_ancestors: str):
|
async def update_dept_children(cls, query_db: AsyncSession, dept_id: int, new_ancestors: str, old_ancestors: str):
|
||||||
|
17
ruoyi-fastapi-backend/requirements-pg.txt
Normal file
17
ruoyi-fastapi-backend/requirements-pg.txt
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
APScheduler==3.10.4
|
||||||
|
asyncpg==0.30.0
|
||||||
|
DateTime==5.5
|
||||||
|
fastapi[all]==0.115.0
|
||||||
|
loguru==0.7.2
|
||||||
|
openpyxl==3.1.5
|
||||||
|
pandas==2.2.2
|
||||||
|
passlib[bcrypt]==1.7.4
|
||||||
|
Pillow==10.4.0
|
||||||
|
psutil==6.0.0
|
||||||
|
pydantic-validation-decorator==0.1.4
|
||||||
|
PyJWT[crypto]==2.8.0
|
||||||
|
psycopg2==2.9.10
|
||||||
|
redis==5.0.7
|
||||||
|
requests==2.32.3
|
||||||
|
SQLAlchemy[asyncio]==2.0.31
|
||||||
|
user-agents==2.2.0
|
977
ruoyi-fastapi-backend/sql/ruoyi-fastapi-pg.sql
Normal file
977
ruoyi-fastapi-backend/sql/ruoyi-fastapi-pg.sql
Normal file
@@ -0,0 +1,977 @@
|
|||||||
|
-- ----------------------------
|
||||||
|
-- 1、部门表
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists sys_dept;
|
||||||
|
create table sys_dept (
|
||||||
|
dept_id bigserial,
|
||||||
|
parent_id bigint default 0,
|
||||||
|
ancestors varchar(50) default '',
|
||||||
|
dept_name varchar(30) default '',
|
||||||
|
order_num int4 default 0,
|
||||||
|
leader varchar(20) default null,
|
||||||
|
phone varchar(11) default null,
|
||||||
|
email varchar(50) default null,
|
||||||
|
status char(1) default '0',
|
||||||
|
del_flag char(1) default '0',
|
||||||
|
create_by varchar(64) default '',
|
||||||
|
create_time timestamp(0),
|
||||||
|
update_by varchar(64) default '',
|
||||||
|
update_time timestamp(0),
|
||||||
|
primary key (dept_id)
|
||||||
|
);
|
||||||
|
alter sequence sys_dept_dept_id_seq restart 200;
|
||||||
|
comment on column sys_dept.dept_id is '部门id';
|
||||||
|
comment on column sys_dept.parent_id is '父部门id';
|
||||||
|
comment on column sys_dept.ancestors is '祖级列表';
|
||||||
|
comment on column sys_dept.dept_name is '部门名称';
|
||||||
|
comment on column sys_dept.order_num is '显示顺序';
|
||||||
|
comment on column sys_dept.leader is '负责人';
|
||||||
|
comment on column sys_dept.phone is '联系电话';
|
||||||
|
comment on column sys_dept.email is '邮箱';
|
||||||
|
comment on column sys_dept.status is '部门状态(0正常 1停用)';
|
||||||
|
comment on column sys_dept.del_flag is '删除标志(0代表存在 2代表删除)';
|
||||||
|
comment on column sys_dept.create_by is '创建者';
|
||||||
|
comment on column sys_dept.create_time is '创建时间';
|
||||||
|
comment on column sys_dept.update_by is '更新者';
|
||||||
|
comment on column sys_dept.update_time is '更新时间';
|
||||||
|
comment on table sys_dept is '部门表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 初始化-部门表数据
|
||||||
|
-- ----------------------------
|
||||||
|
insert into sys_dept values(100, 0, '0', '集团总公司', 0, '年糕', '15888888888', 'niangao@qq.com', '0', '0', 'admin', current_timestamp, '', null);
|
||||||
|
insert into sys_dept values(101, 100, '0,100', '深圳分公司', 1, '年糕', '15888888888', 'niangao@qq.com', '0', '0', 'admin', current_timestamp, '', null);
|
||||||
|
insert into sys_dept values(102, 100, '0,100', '长沙分公司', 2, '年糕', '15888888888', 'niangao@qq.com', '0', '0', 'admin', current_timestamp, '', null);
|
||||||
|
insert into sys_dept values(103, 101, '0,100,101', '研发部门', 1, '年糕', '15888888888', 'niangao@qq.com', '0', '0', 'admin', current_timestamp, '', null);
|
||||||
|
insert into sys_dept values(104, 101, '0,100,101', '市场部门', 2, '年糕', '15888888888', 'niangao@qq.com', '0', '0', 'admin', current_timestamp, '', null);
|
||||||
|
insert into sys_dept values(105, 101, '0,100,101', '测试部门', 3, '年糕', '15888888888', 'niangao@qq.com', '0', '0', 'admin', current_timestamp, '', null);
|
||||||
|
insert into sys_dept values(106, 101, '0,100,101', '财务部门', 4, '年糕', '15888888888', 'niangao@qq.com', '0', '0', 'admin', current_timestamp, '', null);
|
||||||
|
insert into sys_dept values(107, 101, '0,100,101', '运维部门', 5, '年糕', '15888888888', 'niangao@qq.com', '0', '0', 'admin', current_timestamp, '', null);
|
||||||
|
insert into sys_dept values(108, 102, '0,100,102', '市场部门', 1, '年糕', '15888888888', 'niangao@qq.com', '0', '0', 'admin', current_timestamp, '', null);
|
||||||
|
insert into sys_dept values(109, 102, '0,100,102', '财务部门', 2, '年糕', '15888888888', 'niangao@qq.com', '0', '0', 'admin', current_timestamp, '', null);
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 2、用户信息表
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists sys_user;
|
||||||
|
create table sys_user (
|
||||||
|
user_id bigserial not null,
|
||||||
|
dept_id bigint default null,
|
||||||
|
user_name varchar(30) not null,
|
||||||
|
nick_name varchar(30) not null,
|
||||||
|
user_type varchar(2) default '00',
|
||||||
|
email varchar(50) default '',
|
||||||
|
phonenumber varchar(11) default '',
|
||||||
|
sex char(1) default '0',
|
||||||
|
avatar varchar(100) default '',
|
||||||
|
password varchar(100) default '',
|
||||||
|
status char(1) default '0',
|
||||||
|
del_flag char(1) default '0',
|
||||||
|
login_ip varchar(128) default '',
|
||||||
|
login_date timestamp(0),
|
||||||
|
create_by varchar(64) default '',
|
||||||
|
create_time timestamp(0),
|
||||||
|
update_by varchar(64) default '',
|
||||||
|
update_time timestamp(0),
|
||||||
|
remark varchar(500) default null,
|
||||||
|
primary key (user_id)
|
||||||
|
);
|
||||||
|
alter sequence sys_user_user_id_seq restart 100;
|
||||||
|
comment on column sys_user.user_id is '用户ID';
|
||||||
|
comment on column sys_user.dept_id is '部门ID';
|
||||||
|
comment on column sys_user.user_name is '用户账号';
|
||||||
|
comment on column sys_user.nick_name is '用户昵称';
|
||||||
|
comment on column sys_user.user_type is '用户类型(00系统用户)';
|
||||||
|
comment on column sys_user.email is '用户邮箱';
|
||||||
|
comment on column sys_user.phonenumber is '手机号码';
|
||||||
|
comment on column sys_user.sex is '用户性别(0男 1女 2未知)';
|
||||||
|
comment on column sys_user.avatar is '头像地址';
|
||||||
|
comment on column sys_user.password is '密码';
|
||||||
|
comment on column sys_user.status is '帐号状态(0正常 1停用)';
|
||||||
|
comment on column sys_user.del_flag is '删除标志(0代表存在 2代表删除)';
|
||||||
|
comment on column sys_user.login_ip is '最后登录IP';
|
||||||
|
comment on column sys_user.login_date is '最后登录时间';
|
||||||
|
comment on column sys_user.create_by is '创建者';
|
||||||
|
comment on column sys_user.create_time is '创建时间';
|
||||||
|
comment on column sys_user.update_by is '更新者';
|
||||||
|
comment on column sys_user.update_time is '更新时间';
|
||||||
|
comment on column sys_user.remark is '备注';
|
||||||
|
comment on table sys_user is '用户信息表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 3、岗位信息表
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists sys_post;
|
||||||
|
create table sys_post (
|
||||||
|
post_id bigserial not null,
|
||||||
|
post_code varchar(64) not null,
|
||||||
|
post_name varchar(50) not null,
|
||||||
|
post_sort int4 not null,
|
||||||
|
status char(1) not null,
|
||||||
|
create_by varchar(64) default '',
|
||||||
|
create_time timestamp(0),
|
||||||
|
update_by varchar(64) default '',
|
||||||
|
update_time timestamp(0),
|
||||||
|
remark varchar(500) default null,
|
||||||
|
primary key (post_id)
|
||||||
|
);
|
||||||
|
alter sequence sys_post_post_id_seq restart 5;
|
||||||
|
comment on column sys_post.post_id is '岗位ID';
|
||||||
|
comment on column sys_post.post_code is '岗位编码';
|
||||||
|
comment on column sys_post.post_name is '岗位名称';
|
||||||
|
comment on column sys_post.post_sort is '显示顺序';
|
||||||
|
comment on column sys_post.status is '状态(0正常 1停用)';
|
||||||
|
comment on column sys_post.create_by is '创建者';
|
||||||
|
comment on column sys_post.create_time is '创建时间';
|
||||||
|
comment on column sys_post.update_by is '更新者';
|
||||||
|
comment on column sys_post.update_time is '更新时间';
|
||||||
|
comment on column sys_post.remark is '备注';
|
||||||
|
comment on table sys_post is '岗位信息表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 初始化-岗位信息表数据
|
||||||
|
-- ----------------------------
|
||||||
|
insert into sys_post values(1, 'ceo', '董事长', 1, '0', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_post values(2, 'se', '项目经理', 2, '0', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_post values(3, 'hr', '人力资源', 3, '0', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_post values(4, 'user', '普通员工', 4, '0', 'admin', current_timestamp, '', null, '');
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 初始化-用户信息表数据
|
||||||
|
-- ----------------------------
|
||||||
|
insert into sys_user values(1, 103, 'admin', '超级管理员', '00', 'niangao@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', current_timestamp, 'admin', current_timestamp, '', null, '管理员');
|
||||||
|
insert into sys_user values(2, 105, 'niangao', '年糕', '00', 'niangao@qq.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', current_timestamp, 'admin', current_timestamp, '', null, '测试员');
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 4、角色信息表
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists sys_role;
|
||||||
|
create table sys_role (
|
||||||
|
role_id bigserial not null,
|
||||||
|
role_name varchar(30) not null,
|
||||||
|
role_key varchar(100) not null,
|
||||||
|
role_sort int4 not null,
|
||||||
|
data_scope char(1) default '1',
|
||||||
|
menu_check_strictly smallint default 1,
|
||||||
|
dept_check_strictly smallint default 1,
|
||||||
|
status char(1) not null,
|
||||||
|
del_flag char(1) default '0',
|
||||||
|
create_by varchar(64) default '',
|
||||||
|
create_time timestamp(0),
|
||||||
|
update_by varchar(64) default '',
|
||||||
|
update_time timestamp(0),
|
||||||
|
remark varchar(500) default null,
|
||||||
|
primary key (role_id)
|
||||||
|
);
|
||||||
|
alter sequence sys_role_role_id_seq restart 3;
|
||||||
|
comment on column sys_role.role_id is '角色ID';
|
||||||
|
comment on column sys_role.role_name is '角色名称';
|
||||||
|
comment on column sys_role.role_key is '角色权限字符串';
|
||||||
|
comment on column sys_role.role_sort is '显示顺序';
|
||||||
|
comment on column sys_role.data_scope is '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)';
|
||||||
|
comment on column sys_role.menu_check_strictly is '菜单树选择项是否关联显示';
|
||||||
|
comment on column sys_role.dept_check_strictly is '部门树选择项是否关联显示';
|
||||||
|
comment on column sys_role.status is '角色状态(0正常 1停用)';
|
||||||
|
comment on column sys_role.del_flag is '删除标志(0代表存在 2代表删除)';
|
||||||
|
comment on column sys_role.create_by is '创建者';
|
||||||
|
comment on column sys_role.create_time is '创建时间';
|
||||||
|
comment on column sys_role.update_by is '更新者';
|
||||||
|
comment on column sys_role.update_time is '更新时间';
|
||||||
|
comment on column sys_role.remark is '备注';
|
||||||
|
comment on table sys_role is '角色信息表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 初始化-角色信息表数据
|
||||||
|
-- ----------------------------
|
||||||
|
insert into sys_role values(1, '超级管理员', 'admin', 1, 1, 1, 1, '0', '0', 'admin', current_timestamp, '', null, '超级管理员');
|
||||||
|
insert into sys_role values(2, '普通角色', 'common', 2, 2, 1, 1, '0', '0', 'admin', current_timestamp, '', null, '普通角色');
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 5、菜单权限表
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists sys_menu;
|
||||||
|
create table sys_menu (
|
||||||
|
menu_id bigserial not null,
|
||||||
|
menu_name varchar(50) not null,
|
||||||
|
parent_id bigint default 0,
|
||||||
|
order_num int4 default 0,
|
||||||
|
path varchar(200) default '',
|
||||||
|
component varchar(255) default null,
|
||||||
|
query varchar(255) default null,
|
||||||
|
route_name varchar(50) default '',
|
||||||
|
is_frame int4 default 1,
|
||||||
|
is_cache int4 default 0,
|
||||||
|
menu_type char(1) default '',
|
||||||
|
visible char(1) default '0',
|
||||||
|
status char(1) default '0',
|
||||||
|
perms varchar(100) default null,
|
||||||
|
icon varchar(100) default '#',
|
||||||
|
create_by varchar(64) default '',
|
||||||
|
create_time timestamp(0),
|
||||||
|
update_by varchar(64) default '',
|
||||||
|
update_time timestamp(0),
|
||||||
|
remark varchar(500) default '',
|
||||||
|
primary key (menu_id)
|
||||||
|
);
|
||||||
|
alter sequence sys_menu_menu_id_seq restart 2000;
|
||||||
|
comment on column sys_menu.menu_id is '菜单ID';
|
||||||
|
comment on column sys_menu.menu_name is '菜单名称';
|
||||||
|
comment on column sys_menu.parent_id is '父菜单ID';
|
||||||
|
comment on column sys_menu.order_num is '显示顺序';
|
||||||
|
comment on column sys_menu.path is '路由地址';
|
||||||
|
comment on column sys_menu.component is '组件路径';
|
||||||
|
comment on column sys_menu.query is '路由参数';
|
||||||
|
comment on column sys_menu.route_name is '路由名称';
|
||||||
|
comment on column sys_menu.is_frame is '是否为外链(0是 1否)';
|
||||||
|
comment on column sys_menu.is_cache is '是否缓存(0缓存 1不缓存)';
|
||||||
|
comment on column sys_menu.menu_type is '菜单类型(M目录 C菜单 F按钮)';
|
||||||
|
comment on column sys_menu.visible is '菜单状态(0显示 1隐藏)';
|
||||||
|
comment on column sys_menu.status is '菜单状态(0正常 1停用)';
|
||||||
|
comment on column sys_menu.perms is '权限标识';
|
||||||
|
comment on column sys_menu.icon is '菜单图标';
|
||||||
|
comment on column sys_menu.create_by is '创建者';
|
||||||
|
comment on column sys_menu.create_time is '创建时间';
|
||||||
|
comment on column sys_menu.update_by is '更新者';
|
||||||
|
comment on column sys_menu.update_time is '更新时间';
|
||||||
|
comment on column sys_menu.remark is '备注';
|
||||||
|
comment on table sys_menu is '菜单权限表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 初始化-菜单信息表数据
|
||||||
|
-- ----------------------------
|
||||||
|
-- 一级菜单
|
||||||
|
insert into sys_menu values(1, '系统管理', 0, '1', 'system', null, '', '', 1, 0, 'M', '0', '0', '', 'system', 'admin', current_timestamp, '', null, '系统管理目录');
|
||||||
|
insert into sys_menu values(2, '系统监控', 0, '2', 'monitor', null, '', '', 1, 0, 'M', '0', '0', '', 'monitor', 'admin', current_timestamp, '', null, '系统监控目录');
|
||||||
|
insert into sys_menu values(3, '系统工具', 0, '3', 'tool', null, '', '', 1, 0, 'M', '0', '0', '', 'tool', 'admin', current_timestamp, '', null, '系统工具目录');
|
||||||
|
insert into sys_menu values(4, '若依官网', 0, '4', 'http://ruoyi.vip', null, '', '', 0, 0, 'M', '0', '0', '', 'guide', 'admin', current_timestamp, '', null, '若依官网地址');
|
||||||
|
-- 二级菜单
|
||||||
|
insert into sys_menu values(100, '用户管理', 1, '1', 'user', 'system/user/index', '', '', 1, 0, 'C', '0', '0', 'system:user:list', 'user', 'admin', current_timestamp, '', null, '用户管理菜单');
|
||||||
|
insert into sys_menu values(101, '角色管理', 1, '2', 'role', 'system/role/index', '', '', 1, 0, 'C', '0', '0', 'system:role:list', 'peoples', 'admin', current_timestamp, '', null, '角色管理菜单');
|
||||||
|
insert into sys_menu values(102, '菜单管理', 1, '3', 'menu', 'system/menu/index', '', '', 1, 0, 'C', '0', '0', 'system:menu:list', 'tree-table', 'admin', current_timestamp, '', null, '菜单管理菜单');
|
||||||
|
insert into sys_menu values(103, '部门管理', 1, '4', 'dept', 'system/dept/index', '', '', 1, 0, 'C', '0', '0', 'system:dept:list', 'tree', 'admin', current_timestamp, '', null, '部门管理菜单');
|
||||||
|
insert into sys_menu values(104, '岗位管理', 1, '5', 'post', 'system/post/index', '', '', 1, 0, 'C', '0', '0', 'system:post:list', 'post', 'admin', current_timestamp, '', null, '岗位管理菜单');
|
||||||
|
insert into sys_menu values(105, '字典管理', 1, '6', 'dict', 'system/dict/index', '', '', 1, 0, 'C', '0', '0', 'system:dict:list', 'dict', 'admin', current_timestamp, '', null, '字典管理菜单');
|
||||||
|
insert into sys_menu values(106, '参数设置', 1, '7', 'config', 'system/config/index', '', '', 1, 0, 'C', '0', '0', 'system:config:list', 'edit', 'admin', current_timestamp, '', null, '参数设置菜单');
|
||||||
|
insert into sys_menu values(107, '通知公告', 1, '8', 'notice', 'system/notice/index', '', '', 1, 0, 'C', '0', '0', 'system:notice:list', 'message', 'admin', current_timestamp, '', null, '通知公告菜单');
|
||||||
|
insert into sys_menu values(108, '日志管理', 1, '9', 'log', '', '', '', 1, 0, 'M', '0', '0', '', 'log', 'admin', current_timestamp, '', null, '日志管理菜单');
|
||||||
|
insert into sys_menu values(109, '在线用户', 2, '1', 'online', 'monitor/online/index', '', '', 1, 0, 'C', '0', '0', 'monitor:online:list', 'online', 'admin', current_timestamp, '', null, '在线用户菜单');
|
||||||
|
insert into sys_menu values(110, '定时任务', 2, '2', 'job', 'monitor/job/index', '', '', 1, 0, 'C', '0', '0', 'monitor:job:list', 'job', 'admin', current_timestamp, '', null, '定时任务菜单');
|
||||||
|
insert into sys_menu values(111, '数据监控', 2, '3', 'druid', 'monitor/druid/index', '', '', 1, 0, 'C', '0', '0', 'monitor:druid:list', 'druid', 'admin', current_timestamp, '', null, '数据监控菜单');
|
||||||
|
insert into sys_menu values(112, '服务监控', 2, '4', 'server', 'monitor/server/index', '', '', 1, 0, 'C', '0', '0', 'monitor:server:list', 'server', 'admin', current_timestamp, '', null, '服务监控菜单');
|
||||||
|
insert into sys_menu values(113, '缓存监控', 2, '5', 'cache', 'monitor/cache/index', '', '', 1, 0, 'C', '0', '0', 'monitor:cache:list', 'redis', 'admin', current_timestamp, '', null, '缓存监控菜单');
|
||||||
|
insert into sys_menu values(114, '缓存列表', 2, '6', 'cacheList', 'monitor/cache/list', '', '', 1, 0, 'C', '0', '0', 'monitor:cache:list', 'redis-list', 'admin', current_timestamp, '', null, '缓存列表菜单');
|
||||||
|
insert into sys_menu values(115, '表单构建', 3, '1', 'build', 'tool/build/index', '', '', 1, 0, 'C', '0', '0', 'tool:build:list', 'build', 'admin', current_timestamp, '', null, '表单构建菜单');
|
||||||
|
insert into sys_menu values(116, '代码生成', 3, '2', 'gen', 'tool/gen/index', '', '', 1, 0, 'C', '0', '0', 'tool:gen:list', 'code', 'admin', current_timestamp, '', null, '代码生成菜单');
|
||||||
|
insert into sys_menu values(117, '系统接口', 3, '3', 'swagger', 'tool/swagger/index', '', '', 1, 0, 'C', '0', '0', 'tool:swagger:list', 'swagger', 'admin', current_timestamp, '', null, '系统接口菜单');
|
||||||
|
-- 三级菜单
|
||||||
|
insert into sys_menu values(500, '操作日志', 108, '1', 'operlog', 'monitor/operlog/index', '', '', 1, 0, 'C', '0', '0', 'monitor:operlog:list', 'form', 'admin', current_timestamp, '', null, '操作日志菜单');
|
||||||
|
insert into sys_menu values(501, '登录日志', 108, '2', 'logininfor', 'monitor/logininfor/index', '', '', 1, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor', 'admin', current_timestamp, '', null, '登录日志菜单');
|
||||||
|
-- 用户管理按钮
|
||||||
|
insert into sys_menu values(1000, '用户查询', 100, '1', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:query', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1001, '用户新增', 100, '2', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:add', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1002, '用户修改', 100, '3', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:edit', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1003, '用户删除', 100, '4', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:remove', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1004, '用户导出', 100, '5', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:export', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1005, '用户导入', 100, '6', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:import', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1006, '重置密码', 100, '7', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:resetPwd', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
-- 角色管理按钮
|
||||||
|
insert into sys_menu values(1007, '角色查询', 101, '1', '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:query', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1008, '角色新增', 101, '2', '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:add', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1009, '角色修改', 101, '3', '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:edit', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1010, '角色删除', 101, '4', '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:remove', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1011, '角色导出', 101, '5', '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:export', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
-- 菜单管理按钮
|
||||||
|
insert into sys_menu values(1012, '菜单查询', 102, '1', '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:query', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1013, '菜单新增', 102, '2', '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:add', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1014, '菜单修改', 102, '3', '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:edit', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1015, '菜单删除', 102, '4', '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:remove', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
-- 部门管理按钮
|
||||||
|
insert into sys_menu values(1016, '部门查询', 103, '1', '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:query', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1017, '部门新增', 103, '2', '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:add', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1018, '部门修改', 103, '3', '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:edit', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1019, '部门删除', 103, '4', '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:remove', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
-- 岗位管理按钮
|
||||||
|
insert into sys_menu values(1020, '岗位查询', 104, '1', '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:query', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1021, '岗位新增', 104, '2', '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:add', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1022, '岗位修改', 104, '3', '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:edit', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1023, '岗位删除', 104, '4', '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:remove', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1024, '岗位导出', 104, '5', '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:export', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
-- 字典管理按钮
|
||||||
|
insert into sys_menu values(1025, '字典查询', 105, '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:query', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1026, '字典新增', 105, '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:add', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1027, '字典修改', 105, '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:edit', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1028, '字典删除', 105, '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:remove', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1029, '字典导出', 105, '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:export', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
-- 参数设置按钮
|
||||||
|
insert into sys_menu values(1030, '参数查询', 106, '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:query', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1031, '参数新增', 106, '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:add', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1032, '参数修改', 106, '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:edit', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1033, '参数删除', 106, '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:remove', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1034, '参数导出', 106, '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:export', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
-- 通知公告按钮
|
||||||
|
insert into sys_menu values(1035, '公告查询', 107, '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:query', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1036, '公告新增', 107, '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:add', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1037, '公告修改', 107, '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:edit', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1038, '公告删除', 107, '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:remove', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
-- 操作日志按钮
|
||||||
|
insert into sys_menu values(1039, '操作查询', 500, '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:query', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1040, '操作删除', 500, '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:remove', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1041, '日志导出', 500, '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:export', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
-- 登录日志按钮
|
||||||
|
insert into sys_menu values(1042, '登录查询', 501, '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:query', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1043, '登录删除', 501, '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:remove', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1044, '日志导出', 501, '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:export', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1045, '账户解锁', 501, '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:unlock', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
-- 在线用户按钮
|
||||||
|
insert into sys_menu values(1046, '在线查询', 109, '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:query', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1047, '批量强退', 109, '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:batchLogout', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1048, '单条强退', 109, '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:forceLogout', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
-- 定时任务按钮
|
||||||
|
insert into sys_menu values(1049, '任务查询', 110, '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:query', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1050, '任务新增', 110, '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:add', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1051, '任务修改', 110, '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:edit', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1052, '任务删除', 110, '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:remove', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1053, '状态修改', 110, '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:changeStatus', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1054, '任务导出', 110, '6', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:export', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
-- 代码生成按钮
|
||||||
|
insert into sys_menu values(1055, '生成查询', 116, '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:query', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1056, '生成修改', 116, '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:edit', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1057, '生成删除', 116, '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:remove', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1058, '导入代码', 116, '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1059, '预览代码', 116, '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_menu values(1060, '生成代码', 116, '6', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:code', '#', 'admin', current_timestamp, '', null, '');
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 6、用户和角色关联表 用户N-1角色
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists sys_user_role;
|
||||||
|
create table sys_user_role (
|
||||||
|
user_id bigint not null,
|
||||||
|
role_id bigint not null,
|
||||||
|
primary key (user_id, role_id)
|
||||||
|
);
|
||||||
|
comment on column sys_user_role.user_id is '用户ID';
|
||||||
|
comment on column sys_user_role.role_id is '角色ID';
|
||||||
|
comment on table sys_user_role is '用户和角色关联表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 初始化-用户和角色关联表数据
|
||||||
|
-- ----------------------------
|
||||||
|
insert into sys_user_role values (1, 1);
|
||||||
|
insert into sys_user_role values (2, 2);
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 7、角色和菜单关联表 角色1-N菜单
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists sys_role_menu;
|
||||||
|
create table sys_role_menu (
|
||||||
|
role_id bigint not null,
|
||||||
|
menu_id bigint not null,
|
||||||
|
primary key (role_id, menu_id)
|
||||||
|
);
|
||||||
|
comment on column sys_role_menu.role_id is '角色ID';
|
||||||
|
comment on column sys_role_menu.menu_id is '菜单ID';
|
||||||
|
comment on table sys_role_menu is '角色和菜单关联表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 初始化-角色和菜单关联表数据
|
||||||
|
-- ----------------------------
|
||||||
|
insert into sys_role_menu values (2, 1);
|
||||||
|
insert into sys_role_menu values (2, 2);
|
||||||
|
insert into sys_role_menu values (2, 3);
|
||||||
|
insert into sys_role_menu values (2, 4);
|
||||||
|
insert into sys_role_menu values (2, 100);
|
||||||
|
insert into sys_role_menu values (2, 101);
|
||||||
|
insert into sys_role_menu values (2, 102);
|
||||||
|
insert into sys_role_menu values (2, 103);
|
||||||
|
insert into sys_role_menu values (2, 104);
|
||||||
|
insert into sys_role_menu values (2, 105);
|
||||||
|
insert into sys_role_menu values (2, 106);
|
||||||
|
insert into sys_role_menu values (2, 107);
|
||||||
|
insert into sys_role_menu values (2, 108);
|
||||||
|
insert into sys_role_menu values (2, 109);
|
||||||
|
insert into sys_role_menu values (2, 110);
|
||||||
|
insert into sys_role_menu values (2, 111);
|
||||||
|
insert into sys_role_menu values (2, 112);
|
||||||
|
insert into sys_role_menu values (2, 113);
|
||||||
|
insert into sys_role_menu values (2, 114);
|
||||||
|
insert into sys_role_menu values (2, 115);
|
||||||
|
insert into sys_role_menu values (2, 116);
|
||||||
|
insert into sys_role_menu values (2, 117);
|
||||||
|
insert into sys_role_menu values (2, 500);
|
||||||
|
insert into sys_role_menu values (2, 501);
|
||||||
|
insert into sys_role_menu values (2, 1000);
|
||||||
|
insert into sys_role_menu values (2, 1001);
|
||||||
|
insert into sys_role_menu values (2, 1002);
|
||||||
|
insert into sys_role_menu values (2, 1003);
|
||||||
|
insert into sys_role_menu values (2, 1004);
|
||||||
|
insert into sys_role_menu values (2, 1005);
|
||||||
|
insert into sys_role_menu values (2, 1006);
|
||||||
|
insert into sys_role_menu values (2, 1007);
|
||||||
|
insert into sys_role_menu values (2, 1008);
|
||||||
|
insert into sys_role_menu values (2, 1009);
|
||||||
|
insert into sys_role_menu values (2, 1010);
|
||||||
|
insert into sys_role_menu values (2, 1011);
|
||||||
|
insert into sys_role_menu values (2, 1012);
|
||||||
|
insert into sys_role_menu values (2, 1013);
|
||||||
|
insert into sys_role_menu values (2, 1014);
|
||||||
|
insert into sys_role_menu values (2, 1015);
|
||||||
|
insert into sys_role_menu values (2, 1016);
|
||||||
|
insert into sys_role_menu values (2, 1017);
|
||||||
|
insert into sys_role_menu values (2, 1018);
|
||||||
|
insert into sys_role_menu values (2, 1019);
|
||||||
|
insert into sys_role_menu values (2, 1020);
|
||||||
|
insert into sys_role_menu values (2, 1021);
|
||||||
|
insert into sys_role_menu values (2, 1022);
|
||||||
|
insert into sys_role_menu values (2, 1023);
|
||||||
|
insert into sys_role_menu values (2, 1024);
|
||||||
|
insert into sys_role_menu values (2, 1025);
|
||||||
|
insert into sys_role_menu values (2, 1026);
|
||||||
|
insert into sys_role_menu values (2, 1027);
|
||||||
|
insert into sys_role_menu values (2, 1028);
|
||||||
|
insert into sys_role_menu values (2, 1029);
|
||||||
|
insert into sys_role_menu values (2, 1030);
|
||||||
|
insert into sys_role_menu values (2, 1031);
|
||||||
|
insert into sys_role_menu values (2, 1032);
|
||||||
|
insert into sys_role_menu values (2, 1033);
|
||||||
|
insert into sys_role_menu values (2, 1034);
|
||||||
|
insert into sys_role_menu values (2, 1035);
|
||||||
|
insert into sys_role_menu values (2, 1036);
|
||||||
|
insert into sys_role_menu values (2, 1037);
|
||||||
|
insert into sys_role_menu values (2, 1038);
|
||||||
|
insert into sys_role_menu values (2, 1039);
|
||||||
|
insert into sys_role_menu values (2, 1040);
|
||||||
|
insert into sys_role_menu values (2, 1041);
|
||||||
|
insert into sys_role_menu values (2, 1042);
|
||||||
|
insert into sys_role_menu values (2, 1043);
|
||||||
|
insert into sys_role_menu values (2, 1044);
|
||||||
|
insert into sys_role_menu values (2, 1045);
|
||||||
|
insert into sys_role_menu values (2, 1046);
|
||||||
|
insert into sys_role_menu values (2, 1047);
|
||||||
|
insert into sys_role_menu values (2, 1048);
|
||||||
|
insert into sys_role_menu values (2, 1049);
|
||||||
|
insert into sys_role_menu values (2, 1050);
|
||||||
|
insert into sys_role_menu values (2, 1051);
|
||||||
|
insert into sys_role_menu values (2, 1052);
|
||||||
|
insert into sys_role_menu values (2, 1053);
|
||||||
|
insert into sys_role_menu values (2, 1054);
|
||||||
|
insert into sys_role_menu values (2, 1055);
|
||||||
|
insert into sys_role_menu values (2, 1056);
|
||||||
|
insert into sys_role_menu values (2, 1057);
|
||||||
|
insert into sys_role_menu values (2, 1058);
|
||||||
|
insert into sys_role_menu values (2, 1059);
|
||||||
|
insert into sys_role_menu values (2, 1060);
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 8、角色和部门关联表 角色1-N部门
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists sys_role_dept;
|
||||||
|
create table sys_role_dept (
|
||||||
|
role_id bigint not null,
|
||||||
|
dept_id bigint not null,
|
||||||
|
primary key (role_id, dept_id)
|
||||||
|
);
|
||||||
|
comment on column sys_role_dept.role_id is '角色ID';
|
||||||
|
comment on column sys_role_dept.dept_id is '部门ID';
|
||||||
|
comment on table sys_role_dept is '角色和部门关联表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 初始化-角色和部门关联表数据
|
||||||
|
-- ----------------------------
|
||||||
|
insert into sys_role_dept values (2, 100);
|
||||||
|
insert into sys_role_dept values (2, 101);
|
||||||
|
insert into sys_role_dept values (2, 105);
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 9、用户与岗位关联表 用户1-N岗位
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists sys_user_post;
|
||||||
|
create table sys_user_post (
|
||||||
|
user_id bigint not null,
|
||||||
|
post_id bigint not null,
|
||||||
|
primary key (user_id, post_id)
|
||||||
|
);
|
||||||
|
comment on column sys_user_post.user_id is '用户ID';
|
||||||
|
comment on column sys_user_post.post_id is '岗位ID';
|
||||||
|
comment on table sys_user_post is '用户与岗位关联表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 初始化-用户与岗位关联表数据
|
||||||
|
-- ----------------------------
|
||||||
|
insert into sys_user_post values (1, 1);
|
||||||
|
insert into sys_user_post values (2, 2);
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 10、操作日志记录
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists sys_oper_log;
|
||||||
|
create table sys_oper_log (
|
||||||
|
oper_id bigserial not null,
|
||||||
|
title varchar(50) default '',
|
||||||
|
business_type int4 default 0,
|
||||||
|
method varchar(100) default '',
|
||||||
|
request_method varchar(10) default '',
|
||||||
|
operator_type int4 default 0,
|
||||||
|
oper_name varchar(50) default '',
|
||||||
|
dept_name varchar(50) default '',
|
||||||
|
oper_url varchar(255) default '',
|
||||||
|
oper_ip varchar(128) default '',
|
||||||
|
oper_location varchar(255) default '',
|
||||||
|
oper_param varchar(2000) default '',
|
||||||
|
json_result varchar(2000) default '',
|
||||||
|
status int4 default 0,
|
||||||
|
error_msg varchar(2000) default '',
|
||||||
|
oper_time timestamp(0),
|
||||||
|
cost_time int8 default 0,
|
||||||
|
primary key (oper_id)
|
||||||
|
);
|
||||||
|
alter sequence sys_oper_log_oper_id_seq restart 100;
|
||||||
|
create index idx_sys_oper_log_bt on sys_oper_log(business_type);
|
||||||
|
create index idx_sys_oper_log_s on sys_oper_log(status);
|
||||||
|
create index idx_sys_oper_log_ot on sys_oper_log(oper_time);
|
||||||
|
comment on column sys_oper_log.oper_id is '日志主键';
|
||||||
|
comment on column sys_oper_log.title is '模块标题';
|
||||||
|
comment on column sys_oper_log.business_type is '业务类型(0其它 1新增 2修改 3删除)';
|
||||||
|
comment on column sys_oper_log.method is '方法名称';
|
||||||
|
comment on column sys_oper_log.request_method is '请求方式';
|
||||||
|
comment on column sys_oper_log.operator_type is '操作类别(0其它 1后台用户 2手机端用户)';
|
||||||
|
comment on column sys_oper_log.oper_name is '操作人员';
|
||||||
|
comment on column sys_oper_log.dept_name is '部门名称';
|
||||||
|
comment on column sys_oper_log.oper_url is '请求URL';
|
||||||
|
comment on column sys_oper_log.oper_ip is '主机地址';
|
||||||
|
comment on column sys_oper_log.oper_location is '操作地点';
|
||||||
|
comment on column sys_oper_log.oper_param is '请求参数';
|
||||||
|
comment on column sys_oper_log.json_result is '返回参数';
|
||||||
|
comment on column sys_oper_log.status is '操作状态(0正常 1异常)';
|
||||||
|
comment on column sys_oper_log.error_msg is '错误消息';
|
||||||
|
comment on column sys_oper_log.oper_time is '操作时间';
|
||||||
|
comment on table sys_oper_log is '操作日志记录';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 11、字典类型表
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists sys_dict_type;
|
||||||
|
create table sys_dict_type (
|
||||||
|
dict_id bigserial not null,
|
||||||
|
dict_name varchar(100) default '',
|
||||||
|
dict_type varchar(100) unique default '',
|
||||||
|
status char(1) default '0',
|
||||||
|
create_by varchar(64) default '',
|
||||||
|
create_time timestamp(0),
|
||||||
|
update_by varchar(64) default '',
|
||||||
|
update_time timestamp(0),
|
||||||
|
remark varchar(500) default null,
|
||||||
|
primary key (dict_id)
|
||||||
|
);
|
||||||
|
alter sequence sys_dict_type_dict_id_seq restart 100;
|
||||||
|
comment on column sys_dict_type.dict_id is '字典主键';
|
||||||
|
comment on column sys_dict_type.dict_name is '字典名称';
|
||||||
|
comment on column sys_dict_type.dict_type is '字典类型';
|
||||||
|
comment on column sys_dict_type.status is '状态(0正常 1停用)';
|
||||||
|
comment on column sys_dict_type.create_by is '创建者';
|
||||||
|
comment on column sys_dict_type.create_time is '创建时间';
|
||||||
|
comment on column sys_dict_type.update_by is '更新者';
|
||||||
|
comment on column sys_dict_type.update_time is '更新时间';
|
||||||
|
comment on column sys_dict_type.remark is '备注';
|
||||||
|
comment on table sys_dict_type is '字典类型表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 初始化-字典类型表数据
|
||||||
|
-- ----------------------------
|
||||||
|
insert into sys_dict_type values(1, '用户性别', 'sys_user_sex', '0', 'admin', current_timestamp, '', null, '用户性别列表');
|
||||||
|
insert into sys_dict_type values(2, '菜单状态', 'sys_show_hide', '0', 'admin', current_timestamp, '', null, '菜单状态列表');
|
||||||
|
insert into sys_dict_type values(3, '系统开关', 'sys_normal_disable', '0', 'admin', current_timestamp, '', null, '系统开关列表');
|
||||||
|
insert into sys_dict_type values(4, '任务状态', 'sys_job_status', '0', 'admin', current_timestamp, '', null, '任务状态列表');
|
||||||
|
insert into sys_dict_type values(5, '任务分组', 'sys_job_group', '0', 'admin', current_timestamp, '', null, '任务分组列表');
|
||||||
|
insert into sys_dict_type values(6, '任务执行器', 'sys_job_executor', '0', 'admin', current_timestamp, '', null, '任务执行器列表');
|
||||||
|
insert into sys_dict_type values(7, '系统是否', 'sys_yes_no', '0', 'admin', current_timestamp, '', null, '系统是否列表');
|
||||||
|
insert into sys_dict_type values(8, '通知类型', 'sys_notice_type', '0', 'admin', current_timestamp, '', null, '通知类型列表');
|
||||||
|
insert into sys_dict_type values(9, '通知状态', 'sys_notice_status', '0', 'admin', current_timestamp, '', null, '通知状态列表');
|
||||||
|
insert into sys_dict_type values(10, '操作类型', 'sys_oper_type', '0', 'admin', current_timestamp, '', null, '操作类型列表');
|
||||||
|
insert into sys_dict_type values(11, '系统状态', 'sys_common_status', '0', 'admin', current_timestamp, '', null, '登录状态列表');
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 12、字典数据表
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists sys_dict_data;
|
||||||
|
create table sys_dict_data (
|
||||||
|
dict_code bigserial not null,
|
||||||
|
dict_sort int4 default 0,
|
||||||
|
dict_label varchar(100) default '',
|
||||||
|
dict_value varchar(100) default '',
|
||||||
|
dict_type varchar(100) default '',
|
||||||
|
css_class varchar(100) default null,
|
||||||
|
list_class varchar(100) default null,
|
||||||
|
is_default char(1) default 'N',
|
||||||
|
status char(1) default '0',
|
||||||
|
create_by varchar(64) default '',
|
||||||
|
create_time timestamp(0),
|
||||||
|
update_by varchar(64) default '',
|
||||||
|
update_time timestamp(0),
|
||||||
|
remark varchar(500) default null,
|
||||||
|
primary key (dict_code)
|
||||||
|
);
|
||||||
|
alter sequence sys_dict_data_dict_code_seq restart 100;
|
||||||
|
comment on column sys_dict_data.dict_code is '字典编码';
|
||||||
|
comment on column sys_dict_data.dict_sort is '字典排序';
|
||||||
|
comment on column sys_dict_data.dict_label is '字典标签';
|
||||||
|
comment on column sys_dict_data.dict_value is '字典键值';
|
||||||
|
comment on column sys_dict_data.dict_type is '字典类型';
|
||||||
|
comment on column sys_dict_data.css_class is '样式属性(其他样式扩展)';
|
||||||
|
comment on column sys_dict_data.list_class is '表格回显样式';
|
||||||
|
comment on column sys_dict_data.is_default is '是否默认(Y是 N否)';
|
||||||
|
comment on column sys_dict_data.status is '状态(0正常 1停用)';
|
||||||
|
comment on column sys_dict_data.create_by is '创建者';
|
||||||
|
comment on column sys_dict_data.create_time is '创建时间';
|
||||||
|
comment on column sys_dict_data.update_by is '更新者';
|
||||||
|
comment on column sys_dict_data.update_time is '更新时间';
|
||||||
|
comment on column sys_dict_data.remark is '备注';
|
||||||
|
comment on table sys_dict_data is '字典数据表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 初始化-字典数据表数据
|
||||||
|
-- ----------------------------
|
||||||
|
insert into sys_dict_data values(1, 1, '男', '0', 'sys_user_sex', '', '', 'Y', '0', 'admin', current_timestamp, '', null, '性别男');
|
||||||
|
insert into sys_dict_data values(2, 2, '女', '1', 'sys_user_sex', '', '', 'N', '0', 'admin', current_timestamp, '', null, '性别女');
|
||||||
|
insert into sys_dict_data values(3, 3, '未知', '2', 'sys_user_sex', '', '', 'N', '0', 'admin', current_timestamp, '', null, '性别未知');
|
||||||
|
insert into sys_dict_data values(4, 1, '显示', '0', 'sys_show_hide', '', 'primary', 'Y', '0', 'admin', current_timestamp, '', null, '显示菜单');
|
||||||
|
insert into sys_dict_data values(5, 2, '隐藏', '1', 'sys_show_hide', '', 'danger', 'N', '0', 'admin', current_timestamp, '', null, '隐藏菜单');
|
||||||
|
insert into sys_dict_data values(6, 1, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'admin', current_timestamp, '', null, '正常状态');
|
||||||
|
insert into sys_dict_data values(7, 2, '停用', '1', 'sys_normal_disable', '', 'danger', 'N', '0', 'admin', current_timestamp, '', null, '停用状态');
|
||||||
|
insert into sys_dict_data values(8, 1, '正常', '0', 'sys_job_status', '', 'primary', 'Y', '0', 'admin', current_timestamp, '', null, '正常状态');
|
||||||
|
insert into sys_dict_data values(9, 2, '暂停', '1', 'sys_job_status', '', 'danger', 'N', '0', 'admin', current_timestamp, '', null, '停用状态');
|
||||||
|
insert into sys_dict_data values(10, 1, '默认', 'default', 'sys_job_group', '', '', 'Y', '0', 'admin', current_timestamp, '', null, '默认分组');
|
||||||
|
insert into sys_dict_data values(11, 2, '数据库', 'sqlalchemy', 'sys_job_group', '', '', 'N', '0', 'admin', current_timestamp, '', null, '数据库分组');
|
||||||
|
insert into sys_dict_data values(12, 3, 'redis', 'redis', 'sys_job_group', '', '', 'N', '0', 'admin', current_timestamp, '', null, 'reids分组');
|
||||||
|
insert into sys_dict_data values(13, 1, '默认', 'default', 'sys_job_executor', '', '', 'N', '0', 'admin', current_timestamp, '', null, '线程池');
|
||||||
|
insert into sys_dict_data values(14, 2, '进程池', 'processpool', 'sys_job_executor', '', '', 'N', '0', 'admin', current_timestamp, '', null, '进程池');
|
||||||
|
insert into sys_dict_data values(15, 1, '是', 'Y', 'sys_yes_no', '', 'primary', 'Y', '0', 'admin', current_timestamp, '', null, '系统默认是');
|
||||||
|
insert into sys_dict_data values(16, 2, '否', 'N', 'sys_yes_no', '', 'danger', 'N', '0', 'admin', current_timestamp, '', null, '系统默认否');
|
||||||
|
insert into sys_dict_data values(17, 1, '通知', '1', 'sys_notice_type', '', 'warning', 'Y', '0', 'admin', current_timestamp, '', null, '通知');
|
||||||
|
insert into sys_dict_data values(18, 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', '0', 'admin', current_timestamp, '', null, '公告');
|
||||||
|
insert into sys_dict_data values(19, 1, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', current_timestamp, '', null, '正常状态');
|
||||||
|
insert into sys_dict_data values(20, 2, '关闭', '1', 'sys_notice_status', '', 'danger', 'N', '0', 'admin', current_timestamp, '', null, '关闭状态');
|
||||||
|
insert into sys_dict_data values(21, 99, '其他', '0', 'sys_oper_type', '', 'info', 'N', '0', 'admin', current_timestamp, '', null, '其他操作');
|
||||||
|
insert into sys_dict_data values(22, 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', '0', 'admin', current_timestamp, '', null, '新增操作');
|
||||||
|
insert into sys_dict_data values(23, 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', '0', 'admin', current_timestamp, '', null, '修改操作');
|
||||||
|
insert into sys_dict_data values(24, 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', current_timestamp, '', null, '删除操作');
|
||||||
|
insert into sys_dict_data values(25, 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', current_timestamp, '', null, '授权操作');
|
||||||
|
insert into sys_dict_data values(26, 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', current_timestamp, '', null, '导出操作');
|
||||||
|
insert into sys_dict_data values(27, 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', current_timestamp, '', null, '导入操作');
|
||||||
|
insert into sys_dict_data values(28, 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', current_timestamp, '', null, '强退操作');
|
||||||
|
insert into sys_dict_data values(29, 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', current_timestamp, '', null, '生成操作');
|
||||||
|
insert into sys_dict_data values(30, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', current_timestamp, '', null, '清空操作');
|
||||||
|
insert into sys_dict_data values(31, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', current_timestamp, '', null, '正常状态');
|
||||||
|
insert into sys_dict_data values(32, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', current_timestamp, '', null, '停用状态');
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 13、参数配置表
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists sys_config;
|
||||||
|
create table sys_config (
|
||||||
|
config_id serial not null,
|
||||||
|
config_name varchar(100) default '',
|
||||||
|
config_key varchar(100) default '',
|
||||||
|
config_value varchar(500) default '',
|
||||||
|
config_type char(1) default 'N',
|
||||||
|
create_by varchar(64) default '',
|
||||||
|
create_time timestamp(0),
|
||||||
|
update_by varchar(64) default '',
|
||||||
|
update_time timestamp(0),
|
||||||
|
remark varchar(500) default null,
|
||||||
|
primary key (config_id)
|
||||||
|
);
|
||||||
|
alter sequence sys_config_config_id_seq restart 100;
|
||||||
|
comment on column sys_config.config_id is '参数主键';
|
||||||
|
comment on column sys_config.config_name is '参数名称';
|
||||||
|
comment on column sys_config.config_key is '参数键名';
|
||||||
|
comment on column sys_config.config_value is '参数键值';
|
||||||
|
comment on column sys_config.config_type is '系统内置(Y是 N否)';
|
||||||
|
comment on column sys_config.create_by is '创建者';
|
||||||
|
comment on column sys_config.create_time is '创建时间';
|
||||||
|
comment on column sys_config.update_by is '更新者';
|
||||||
|
comment on column sys_config.update_time is '更新时间';
|
||||||
|
comment on column sys_config.remark is '备注';
|
||||||
|
comment on table sys_config is '参数配置表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 初始化-参数配置表数据
|
||||||
|
-- ----------------------------
|
||||||
|
insert into sys_config values(1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', current_timestamp, '', null, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow' );
|
||||||
|
insert into sys_config values(2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', current_timestamp, '', null, '初始化密码 123456' );
|
||||||
|
insert into sys_config values(3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', current_timestamp, '', null, '深色主题theme-dark,浅色主题theme-light' );
|
||||||
|
insert into sys_config values(4, '账号自助-验证码开关', 'sys.account.captchaEnabled', 'true', 'Y', 'admin', current_timestamp, '', null, '是否开启验证码功能(true开启,false关闭)');
|
||||||
|
insert into sys_config values(5, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 'admin', current_timestamp, '', null, '是否开启注册用户功能(true开启,false关闭)');
|
||||||
|
insert into sys_config values(6, '用户登录-黑名单列表', 'sys.login.blackIPList', '', 'Y', 'admin', current_timestamp, '', null, '设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段)');
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 14、系统访问记录
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists sys_logininfor;
|
||||||
|
create table sys_logininfor (
|
||||||
|
info_id bigserial not null,
|
||||||
|
user_name varchar(50) default '',
|
||||||
|
ipaddr varchar(128) default '',
|
||||||
|
login_location varchar(255) default '',
|
||||||
|
browser varchar(50) default '',
|
||||||
|
os varchar(50) default '',
|
||||||
|
status char(1) default '0',
|
||||||
|
msg varchar(255) default '',
|
||||||
|
login_time timestamp(0),
|
||||||
|
primary key (info_id)
|
||||||
|
);
|
||||||
|
alter sequence sys_logininfor_info_id_seq restart 100;
|
||||||
|
create index idx_sys_logininfor_s on sys_logininfor(status);
|
||||||
|
create index idx_sys_logininfor_lt on sys_logininfor(login_time);
|
||||||
|
comment on column sys_logininfor.info_id is '访问ID';
|
||||||
|
comment on column sys_logininfor.user_name is '用户账号';
|
||||||
|
comment on column sys_logininfor.ipaddr is '登录IP地址';
|
||||||
|
comment on column sys_logininfor.login_location is '登录地点';
|
||||||
|
comment on column sys_logininfor.browser is '浏览器类型';
|
||||||
|
comment on column sys_logininfor.os is '操作系统';
|
||||||
|
comment on column sys_logininfor.status is '登录状态(0成功 1失败)';
|
||||||
|
comment on column sys_logininfor.msg is '提示消息';
|
||||||
|
comment on column sys_logininfor.login_time is '访问时间';
|
||||||
|
comment on table sys_logininfor is '系统访问记录';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 15、定时任务调度表
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists sys_job;
|
||||||
|
create table sys_job (
|
||||||
|
job_id bigserial not null,
|
||||||
|
job_name varchar(64) default '',
|
||||||
|
job_group varchar(64) default 'default',
|
||||||
|
job_executor varchar(64) default 'default',
|
||||||
|
invoke_target varchar(500) not null,
|
||||||
|
job_args varchar(255) default '',
|
||||||
|
job_kwargs varchar(255) default '',
|
||||||
|
cron_expression varchar(255) default '',
|
||||||
|
misfire_policy varchar(20) default '3',
|
||||||
|
concurrent char(1) default '1',
|
||||||
|
status char(1) default '0',
|
||||||
|
create_by varchar(64) default '',
|
||||||
|
create_time timestamp(0),
|
||||||
|
update_by varchar(64) default '',
|
||||||
|
update_time timestamp(0),
|
||||||
|
remark varchar(500) default '',
|
||||||
|
primary key (job_id, job_name, job_group)
|
||||||
|
);
|
||||||
|
alter sequence sys_job_job_id_seq restart 100;
|
||||||
|
comment on column sys_job.job_id is '任务ID';
|
||||||
|
comment on column sys_job.job_name is '任务名称';
|
||||||
|
comment on column sys_job.job_group is '任务组名';
|
||||||
|
comment on column sys_job.job_executor is '任务执行器';
|
||||||
|
comment on column sys_job.invoke_target is '调用目标字符串';
|
||||||
|
comment on column sys_job.job_args is '位置参数';
|
||||||
|
comment on column sys_job.job_kwargs is '关键字参数';
|
||||||
|
comment on column sys_job.cron_expression is 'cron执行表达式';
|
||||||
|
comment on column sys_job.misfire_policy is '计划执行错误策略(1立即执行 2执行一次 3放弃执行)';
|
||||||
|
comment on column sys_job.concurrent is '是否并发执行(0允许 1禁止)';
|
||||||
|
comment on column sys_job.status is '状态(0正常 1暂停)';
|
||||||
|
comment on column sys_job.create_by is '创建者';
|
||||||
|
comment on column sys_job.create_time is '创建时间';
|
||||||
|
comment on column sys_job.update_by is '更新者';
|
||||||
|
comment on column sys_job.update_time is '更新时间';
|
||||||
|
comment on column sys_job.remark is '备注信息';
|
||||||
|
comment on table sys_job is '定时任务调度表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 初始化-定时任务调度表数据
|
||||||
|
-- ----------------------------
|
||||||
|
insert into sys_job values(1, '系统默认(无参)', 'default', 'default', 'module_task.scheduler_test.job', null, null, '0/10 * * * * ?', '3', '1', '1', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_job values(2, '系统默认(有参)', 'default', 'default', 'module_task.scheduler_test.job', 'test', null, '0/15 * * * * ?', '3', '1', '1', 'admin', current_timestamp, '', null, '');
|
||||||
|
insert into sys_job values(3, '系统默认(多参)', 'default', 'default', 'module_task.scheduler_test.job', 'new', '{test: 111}', '0/20 * * * * ?', '3', '1', '1', 'admin', current_timestamp, '', null, '');
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 16、定时任务调度日志表
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists sys_job_log;
|
||||||
|
create table sys_job_log (
|
||||||
|
job_log_id bigserial not null,
|
||||||
|
job_name varchar(64) not null,
|
||||||
|
job_group varchar(64) not null,
|
||||||
|
job_executor varchar(64) not null,
|
||||||
|
invoke_target varchar(500) not null,
|
||||||
|
job_args varchar(255) default '',
|
||||||
|
job_kwargs varchar(255) default '',
|
||||||
|
job_trigger varchar(255) default '',
|
||||||
|
job_message varchar(500),
|
||||||
|
status char(1) default '0',
|
||||||
|
exception_info varchar(2000) default '',
|
||||||
|
create_time timestamp(0),
|
||||||
|
primary key (job_log_id)
|
||||||
|
);
|
||||||
|
comment on column sys_job_log.job_log_id is '任务日志ID';
|
||||||
|
comment on column sys_job_log.job_name is '任务名称';
|
||||||
|
comment on column sys_job_log.job_group is '任务组名';
|
||||||
|
comment on column sys_job_log.job_executor is '任务执行器';
|
||||||
|
comment on column sys_job_log.invoke_target is '调用目标字符串';
|
||||||
|
comment on column sys_job_log.job_args is '位置参数';
|
||||||
|
comment on column sys_job_log.job_kwargs is '关键字参数';
|
||||||
|
comment on column sys_job_log.job_trigger is '任务触发器';
|
||||||
|
comment on column sys_job_log.job_message is '日志信息';
|
||||||
|
comment on column sys_job_log.status is '执行状态(0正常 1失败)';
|
||||||
|
comment on column sys_job_log.exception_info is '异常信息';
|
||||||
|
comment on column sys_job_log.create_time is '创建时间';
|
||||||
|
comment on table sys_job_log is '定时任务调度日志表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 17、通知公告表
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists sys_notice;
|
||||||
|
create table sys_notice (
|
||||||
|
notice_id serial not null,
|
||||||
|
notice_title varchar(50) not null,
|
||||||
|
notice_type char(1) not null,
|
||||||
|
notice_content bytea default null,
|
||||||
|
status char(1) default '0',
|
||||||
|
create_by varchar(64) default '',
|
||||||
|
create_time timestamp(0),
|
||||||
|
update_by varchar(64) default '',
|
||||||
|
update_time timestamp(0),
|
||||||
|
remark varchar(255) default null,
|
||||||
|
primary key (notice_id)
|
||||||
|
);
|
||||||
|
alter sequence sys_notice_notice_id_seq restart 10;
|
||||||
|
comment on column sys_notice.notice_id is '公告ID';
|
||||||
|
comment on column sys_notice.notice_title is '公告标题';
|
||||||
|
comment on column sys_notice.notice_type is '公告类型(1通知 2公告)';
|
||||||
|
comment on column sys_notice.notice_content is '公告内容';
|
||||||
|
comment on column sys_notice.status is '公告状态(0正常 1关闭)';
|
||||||
|
comment on column sys_notice.create_by is '创建者';
|
||||||
|
comment on column sys_notice.create_time is '创建时间';
|
||||||
|
comment on column sys_notice.update_by is '更新者';
|
||||||
|
comment on column sys_notice.update_time is '更新时间';
|
||||||
|
comment on column sys_notice.remark is '备注';
|
||||||
|
comment on table sys_notice is '通知公告表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 初始化-公告信息表数据
|
||||||
|
-- ----------------------------
|
||||||
|
insert into sys_notice values(1, '温馨提醒:2018-07-01 vfadmin新版本发布啦', '2', '新版本内容', '0', 'admin', current_timestamp, '', null, '管理员');
|
||||||
|
insert into sys_notice values(2, '维护通知:2018-07-01 vfadmin系统凌晨维护', '1', '维护内容', '0', 'admin', current_timestamp, '', null, '管理员');
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 18、代码生成业务表
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists gen_table;
|
||||||
|
create table gen_table (
|
||||||
|
table_id bigserial not null,
|
||||||
|
table_name varchar(200) default '',
|
||||||
|
table_comment varchar(500) default '',
|
||||||
|
sub_table_name varchar(64) default null,
|
||||||
|
sub_table_fk_name varchar(64) default null,
|
||||||
|
class_name varchar(100) default '',
|
||||||
|
tpl_category varchar(200) default 'crud',
|
||||||
|
tpl_web_type varchar(30) default '',
|
||||||
|
package_name varchar(100),
|
||||||
|
module_name varchar(30),
|
||||||
|
business_name varchar(30),
|
||||||
|
function_name varchar(50),
|
||||||
|
function_author varchar(50),
|
||||||
|
gen_type char(1) default '0',
|
||||||
|
gen_path varchar(200) default '/',
|
||||||
|
options varchar(1000),
|
||||||
|
create_by varchar(64) default '',
|
||||||
|
create_time timestamp(0),
|
||||||
|
update_by varchar(64) default '',
|
||||||
|
update_time timestamp(0),
|
||||||
|
remark varchar(500) default null,
|
||||||
|
primary key (table_id)
|
||||||
|
);
|
||||||
|
comment on column gen_table.table_id is '编号';
|
||||||
|
comment on column gen_table.table_name is '表名称';
|
||||||
|
comment on column gen_table.table_comment is '表描述';
|
||||||
|
comment on column gen_table.sub_table_name is '关联子表的表名';
|
||||||
|
comment on column gen_table.sub_table_fk_name is '子表关联的外键名';
|
||||||
|
comment on column gen_table.class_name is '实体类名称';
|
||||||
|
comment on column gen_table.tpl_category is '使用的模板(crud单表操作 tree树表操作)';
|
||||||
|
comment on column gen_table.tpl_web_type is '前端模板类型(element-ui模版 element-plus模版)';
|
||||||
|
comment on column gen_table.package_name is '生成包路径';
|
||||||
|
comment on column gen_table.module_name is '生成模块名';
|
||||||
|
comment on column gen_table.business_name is '生成业务名';
|
||||||
|
comment on column gen_table.function_name is '生成功能名';
|
||||||
|
comment on column gen_table.function_author is '生成功能作者';
|
||||||
|
comment on column gen_table.gen_type is '生成代码方式(0zip压缩包 1自定义路径)';
|
||||||
|
comment on column gen_table.gen_path is '生成路径(不填默认项目路径)';
|
||||||
|
comment on column gen_table.options is '其它生成选项';
|
||||||
|
comment on column gen_table.create_by is '创建者';
|
||||||
|
comment on column gen_table.create_time is '创建时间';
|
||||||
|
comment on column gen_table.update_by is '更新者';
|
||||||
|
comment on column gen_table.update_time is '更新时间';
|
||||||
|
comment on column gen_table.remark is '备注';
|
||||||
|
comment on table gen_table is '代码生成业务表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 19、代码生成业务表字段
|
||||||
|
-- ----------------------------
|
||||||
|
drop table if exists gen_table_column;
|
||||||
|
create table gen_table_column (
|
||||||
|
column_id bigserial not null,
|
||||||
|
table_id varchar(64),
|
||||||
|
column_name varchar(200),
|
||||||
|
column_comment varchar(500),
|
||||||
|
column_type varchar(100),
|
||||||
|
java_type varchar(500),
|
||||||
|
java_field varchar(200),
|
||||||
|
is_pk char(1),
|
||||||
|
is_increment char(1),
|
||||||
|
is_required char(1),
|
||||||
|
is_insert char(1),
|
||||||
|
is_edit char(1),
|
||||||
|
is_list char(1),
|
||||||
|
is_query char(1),
|
||||||
|
query_type varchar(200) default 'EQ',
|
||||||
|
html_type varchar(200),
|
||||||
|
dict_type varchar(200) default '',
|
||||||
|
sort int4,
|
||||||
|
create_by varchar(64) default '',
|
||||||
|
create_time timestamp(0),
|
||||||
|
update_by varchar(64) default '',
|
||||||
|
update_time timestamp(0),
|
||||||
|
primary key (column_id)
|
||||||
|
);
|
||||||
|
comment on column gen_table_column.column_id is '编号';
|
||||||
|
comment on column gen_table_column.table_id is '归属表编号';
|
||||||
|
comment on column gen_table_column.column_name is '列名称';
|
||||||
|
comment on column gen_table_column.column_comment is '列描述';
|
||||||
|
comment on column gen_table_column.column_type is '列类型';
|
||||||
|
comment on column gen_table_column.java_type is 'JAVA类型';
|
||||||
|
comment on column gen_table_column.java_field is 'JAVA字段名';
|
||||||
|
comment on column gen_table_column.is_pk is '是否主键(1是)';
|
||||||
|
comment on column gen_table_column.is_increment is '是否自增(1是)';
|
||||||
|
comment on column gen_table_column.is_required is '是否必填(1是)';
|
||||||
|
comment on column gen_table_column.is_insert is '是否为插入字段(1是)';
|
||||||
|
comment on column gen_table_column.is_edit is '是否编辑字段(1是)';
|
||||||
|
comment on column gen_table_column.is_list is '是否列表字段(1是)';
|
||||||
|
comment on column gen_table_column.is_query is '是否查询字段(1是)';
|
||||||
|
comment on column gen_table_column.query_type is '查询方式(等于、不等于、大于、小于、范围)';
|
||||||
|
comment on column gen_table_column.html_type is '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)';
|
||||||
|
comment on column gen_table_column.dict_type is '字典类型';
|
||||||
|
comment on column gen_table_column.sort is '排序';
|
||||||
|
comment on column gen_table_column.create_by is '创建者';
|
||||||
|
comment on column gen_table_column.create_time is '创建时间';
|
||||||
|
comment on column gen_table_column.update_by is '更新者';
|
||||||
|
comment on column gen_table_column.update_time is '更新时间';
|
||||||
|
comment on table gen_table_column is '代码生成业务表字段';
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION "find_in_set"(int8, varchar)
|
||||||
|
RETURNS "pg_catalog"."bool" AS $BODY$
|
||||||
|
DECLARE
|
||||||
|
STR ALIAS FOR $1;
|
||||||
|
STRS ALIAS FOR $2;
|
||||||
|
POS INTEGER;
|
||||||
|
STATUS BOOLEAN;
|
||||||
|
BEGIN
|
||||||
|
SELECT POSITION( ','||STR||',' IN ','||STRS||',') INTO POS;
|
||||||
|
IF POS > 0 THEN
|
||||||
|
STATUS = TRUE;
|
||||||
|
ELSE
|
||||||
|
STATUS = FALSE;
|
||||||
|
END IF;
|
||||||
|
RETURN STATUS;
|
||||||
|
END;
|
||||||
|
$BODY$
|
||||||
|
LANGUAGE plpgsql VOLATILE
|
||||||
|
COST 100;
|
@@ -7,7 +7,8 @@ from openpyxl.styles import Alignment, PatternFill
|
|||||||
from openpyxl.utils import get_column_letter
|
from openpyxl.utils import get_column_letter
|
||||||
from openpyxl.worksheet.datavalidation import DataValidation
|
from openpyxl.worksheet.datavalidation import DataValidation
|
||||||
from sqlalchemy.engine.row import Row
|
from sqlalchemy.engine.row import Row
|
||||||
from typing import List
|
from typing import Any, Dict, List, Literal, Union
|
||||||
|
from config.database import Base
|
||||||
from config.env import CachePathConfig
|
from config.env import CachePathConfig
|
||||||
|
|
||||||
|
|
||||||
@@ -38,13 +39,71 @@ def worship():
|
|||||||
""")
|
""")
|
||||||
|
|
||||||
|
|
||||||
|
class SqlalchemyUtil:
|
||||||
|
"""
|
||||||
|
sqlalchemy工具类
|
||||||
|
"""
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def base_to_dict(
|
||||||
|
cls, obj: Union[Base, Dict], transform_case: Literal['no_case', 'snake_to_camel', 'camel_to_snake'] = 'no_case'
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
将sqlalchemy模型对象转换为字典
|
||||||
|
|
||||||
|
:param obj: sqlalchemy模型对象或普通字典
|
||||||
|
:param transform_case: 转换得到的结果形式,可选的有'no_case'(不转换)、'snake_to_camel'(下划线转小驼峰)、'camel_to_snake'(小驼峰转下划线),默认为'no_case'
|
||||||
|
:return: 字典结果
|
||||||
|
"""
|
||||||
|
if isinstance(obj, Base):
|
||||||
|
base_dict = obj.__dict__.copy()
|
||||||
|
base_dict.pop('_sa_instance_state', None)
|
||||||
|
elif isinstance(obj, dict):
|
||||||
|
base_dict = obj.copy()
|
||||||
|
if transform_case == 'snake_to_camel':
|
||||||
|
return {CamelCaseUtil.snake_to_camel(k): v for k, v in base_dict.items()}
|
||||||
|
elif transform_case == 'camel_to_snake':
|
||||||
|
return {SnakeCaseUtil.camel_to_snake(k): v for k, v in base_dict.items()}
|
||||||
|
|
||||||
|
return base_dict
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def serialize_result(
|
||||||
|
cls, result: Any, transform_case: Literal['no_case', 'snake_to_camel', 'camel_to_snake'] = 'no_case'
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
将sqlalchemy查询结果序列化
|
||||||
|
|
||||||
|
:param result: sqlalchemy查询结果
|
||||||
|
:param transform_case: 转换得到的结果形式,可选的有'no_case'(不转换)、'snake_to_camel'(下划线转小驼峰)、'camel_to_snake'(小驼峰转下划线),默认为'no_case'
|
||||||
|
:return: 序列化结果
|
||||||
|
"""
|
||||||
|
if isinstance(result, (Base, dict)):
|
||||||
|
return cls.base_to_dict(result, transform_case)
|
||||||
|
elif isinstance(result, list):
|
||||||
|
return [cls.serialize_result(row, transform_case) for row in result]
|
||||||
|
elif isinstance(result, Row):
|
||||||
|
if all([isinstance(row, Base) for row in result]):
|
||||||
|
return [cls.base_to_dict(row, transform_case) for row in result]
|
||||||
|
elif any([isinstance(row, Base) for row in result]):
|
||||||
|
return [cls.serialize_result(row, transform_case) for row in result]
|
||||||
|
else:
|
||||||
|
result_dict = result._asdict()
|
||||||
|
if transform_case == 'snake_to_camel':
|
||||||
|
return {CamelCaseUtil.snake_to_camel(k): v for k, v in result_dict.items()}
|
||||||
|
elif transform_case == 'camel_to_snake':
|
||||||
|
return {SnakeCaseUtil.camel_to_snake(k): v for k, v in result_dict.items()}
|
||||||
|
return result_dict
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
class CamelCaseUtil:
|
class CamelCaseUtil:
|
||||||
"""
|
"""
|
||||||
下划线形式(snake_case)转小驼峰形式(camelCase)工具方法
|
下划线形式(snake_case)转小驼峰形式(camelCase)工具方法
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def snake_to_camel(cls, snake_str):
|
def snake_to_camel(cls, snake_str: str):
|
||||||
"""
|
"""
|
||||||
下划线形式字符串(snake_case)转换为小驼峰形式字符串(camelCase)
|
下划线形式字符串(snake_case)转换为小驼峰形式字符串(camelCase)
|
||||||
|
|
||||||
@@ -57,41 +116,14 @@ class CamelCaseUtil:
|
|||||||
return words[0] + ''.join(word.capitalize() for word in words[1:])
|
return words[0] + ''.join(word.capitalize() for word in words[1:])
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def transform_result(cls, result):
|
def transform_result(cls, result: Any):
|
||||||
"""
|
"""
|
||||||
针对不同类型将下划线形式(snake_case)批量转换为小驼峰形式(camelCase)方法
|
针对不同类型将下划线形式(snake_case)批量转换为小驼峰形式(camelCase)方法
|
||||||
|
|
||||||
:param result: 输入数据
|
:param result: 输入数据
|
||||||
:return: 小驼峰形式结果
|
:return: 小驼峰形式结果
|
||||||
"""
|
"""
|
||||||
if result is None:
|
return SqlalchemyUtil.serialize_result(result=result, transform_case='snake_to_camel')
|
||||||
return result
|
|
||||||
# 如果是字典,直接转换键
|
|
||||||
elif isinstance(result, dict):
|
|
||||||
return {cls.snake_to_camel(k): v for k, v in result.items()}
|
|
||||||
# 如果是一组字典或其他类型的列表,遍历列表进行转换
|
|
||||||
elif isinstance(result, list):
|
|
||||||
return [
|
|
||||||
cls.transform_result(row)
|
|
||||||
if isinstance(row, (dict, Row))
|
|
||||||
else (
|
|
||||||
cls.transform_result({c.name: getattr(row, c.name) for c in row.__table__.columns}) if row else row
|
|
||||||
)
|
|
||||||
for row in result
|
|
||||||
]
|
|
||||||
# 如果是sqlalchemy的Row实例,遍历Row进行转换
|
|
||||||
elif isinstance(result, Row):
|
|
||||||
return [
|
|
||||||
cls.transform_result(row)
|
|
||||||
if isinstance(row, dict)
|
|
||||||
else (
|
|
||||||
cls.transform_result({c.name: getattr(row, c.name) for c in row.__table__.columns}) if row else row
|
|
||||||
)
|
|
||||||
for row in result
|
|
||||||
]
|
|
||||||
# 如果是其他类型,如模型实例,先转换为字典
|
|
||||||
else:
|
|
||||||
return cls.transform_result({c.name: getattr(result, c.name) for c in result.__table__.columns})
|
|
||||||
|
|
||||||
|
|
||||||
class SnakeCaseUtil:
|
class SnakeCaseUtil:
|
||||||
@@ -100,7 +132,7 @@ class SnakeCaseUtil:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def camel_to_snake(cls, camel_str):
|
def camel_to_snake(cls, camel_str: str):
|
||||||
"""
|
"""
|
||||||
小驼峰形式字符串(camelCase)转换为下划线形式字符串(snake_case)
|
小驼峰形式字符串(camelCase)转换为下划线形式字符串(snake_case)
|
||||||
|
|
||||||
@@ -112,41 +144,14 @@ class SnakeCaseUtil:
|
|||||||
return re.sub('([a-z0-9])([A-Z])', r'\1_\2', words).lower()
|
return re.sub('([a-z0-9])([A-Z])', r'\1_\2', words).lower()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def transform_result(cls, result):
|
def transform_result(cls, result: Any):
|
||||||
"""
|
"""
|
||||||
针对不同类型将下划线形式(snake_case)批量转换为小驼峰形式(camelCase)方法
|
针对不同类型将下划线形式(snake_case)批量转换为小驼峰形式(camelCase)方法
|
||||||
|
|
||||||
:param result: 输入数据
|
:param result: 输入数据
|
||||||
:return: 小驼峰形式结果
|
:return: 小驼峰形式结果
|
||||||
"""
|
"""
|
||||||
if result is None:
|
return SqlalchemyUtil.serialize_result(result=result, transform_case='camel_to_snake')
|
||||||
return result
|
|
||||||
# 如果是字典,直接转换键
|
|
||||||
elif isinstance(result, dict):
|
|
||||||
return {cls.camel_to_snake(k): v for k, v in result.items()}
|
|
||||||
# 如果是一组字典或其他类型的列表,遍历列表进行转换
|
|
||||||
elif isinstance(result, list):
|
|
||||||
return [
|
|
||||||
cls.transform_result(row)
|
|
||||||
if isinstance(row, (dict, Row))
|
|
||||||
else (
|
|
||||||
cls.transform_result({c.name: getattr(row, c.name) for c in row.__table__.columns}) if row else row
|
|
||||||
)
|
|
||||||
for row in result
|
|
||||||
]
|
|
||||||
# 如果是sqlalchemy的Row实例,遍历Row进行转换
|
|
||||||
elif isinstance(result, Row):
|
|
||||||
return [
|
|
||||||
cls.transform_result(row)
|
|
||||||
if isinstance(row, dict)
|
|
||||||
else (
|
|
||||||
cls.transform_result({c.name: getattr(row, c.name) for c in row.__table__.columns}) if row else row
|
|
||||||
)
|
|
||||||
for row in result
|
|
||||||
]
|
|
||||||
# 如果是其他类型,如模型实例,先转换为字典
|
|
||||||
else:
|
|
||||||
return cls.transform_result({c.name: getattr(result, c.name) for c in result.__table__.columns})
|
|
||||||
|
|
||||||
|
|
||||||
def bytes2human(n, format_str='%(value).1f%(symbol)s'):
|
def bytes2human(n, format_str='%(value).1f%(symbol)s'):
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "vfadmin",
|
"name": "vfadmin",
|
||||||
"version": "1.4.0",
|
"version": "1.5.0",
|
||||||
"description": "vfadmin管理系统",
|
"description": "vfadmin管理系统",
|
||||||
"author": "insistence",
|
"author": "insistence",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
@@ -13,7 +13,7 @@
|
|||||||
:disable-transitions="true"
|
:disable-transitions="true"
|
||||||
:key="item.value + ''"
|
:key="item.value + ''"
|
||||||
:index="index"
|
:index="index"
|
||||||
:type="item.elTagType === 'primary' ? '' : item.elTagType"
|
:type="item.elTagType"
|
||||||
:class="item.elTagClass"
|
:class="item.elTagClass"
|
||||||
>{{ item.label + " " }}</el-tag>
|
>{{ item.label + " " }}</el-tag>
|
||||||
</template>
|
</template>
|
||||||
|
@@ -47,6 +47,7 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { getToken } from "@/utils/auth";
|
import { getToken } from "@/utils/auth";
|
||||||
|
import { isExternal } from "@/utils/validate";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
modelValue: [String, Object, Array],
|
modelValue: [String, Object, Array],
|
||||||
@@ -93,7 +94,7 @@ watch(() => props.modelValue, val => {
|
|||||||
// 然后将数组转为对象数组
|
// 然后将数组转为对象数组
|
||||||
fileList.value = list.map(item => {
|
fileList.value = list.map(item => {
|
||||||
if (typeof item === "string") {
|
if (typeof item === "string") {
|
||||||
if (item.indexOf(baseUrl) === -1) {
|
if (item.indexOf(baseUrl) === -1 && !isExternal(item)) {
|
||||||
item = { name: baseUrl + item, url: baseUrl + item };
|
item = { name: baseUrl + item, url: baseUrl + item };
|
||||||
} else {
|
} else {
|
||||||
item = { name: item, url: item };
|
item = { name: item, url: item };
|
||||||
|
@@ -218,7 +218,7 @@ function handleUnlock() {
|
|||||||
function handleExport() {
|
function handleExport() {
|
||||||
proxy.download("monitor/logininfor/export", {
|
proxy.download("monitor/logininfor/export", {
|
||||||
...queryParams.value,
|
...queryParams.value,
|
||||||
}, `config_${new Date().getTime()}.xlsx`);
|
}, `logininfor_${new Date().getTime()}.xlsx`);
|
||||||
}
|
}
|
||||||
|
|
||||||
getList();
|
getList();
|
||||||
|
@@ -20,7 +20,12 @@
|
|||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="系统内置" prop="configType">
|
<el-form-item label="系统内置" prop="configType">
|
||||||
<el-select v-model="queryParams.configType" placeholder="系统内置" clearable>
|
<el-select
|
||||||
|
v-model="queryParams.configType"
|
||||||
|
placeholder="系统内置"
|
||||||
|
clearable
|
||||||
|
style="width: 240px"
|
||||||
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in sys_yes_no"
|
v-for="dict in sys_yes_no"
|
||||||
:key="dict.value"
|
:key="dict.value"
|
||||||
|
Reference in New Issue
Block a user