feat: 新增常量配置
This commit is contained in:
76
ruoyi-fastapi-backend/config/constant.py
Normal file
76
ruoyi-fastapi-backend/config/constant.py
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
class CommonConstant:
|
||||||
|
"""
|
||||||
|
常用常量
|
||||||
|
WWW: www主域
|
||||||
|
HTTP: http请求
|
||||||
|
HTTPS: https请求
|
||||||
|
UNIQUE: 校验是否唯一的返回标识(是)
|
||||||
|
NOT_UNIQUE: 校验是否唯一的返回标识(否)
|
||||||
|
"""
|
||||||
|
WWW = 'www.'
|
||||||
|
HTTP = 'http://'
|
||||||
|
HTTPS = 'https://'
|
||||||
|
UNIQUE = True
|
||||||
|
NOT_UNIQUE = False
|
||||||
|
|
||||||
|
|
||||||
|
class HttpStatusConstant:
|
||||||
|
"""
|
||||||
|
返回状态码
|
||||||
|
SUCCESS: 操作成功
|
||||||
|
CREATED: 对象创建成功
|
||||||
|
ACCEPTED: 请求已经被接受
|
||||||
|
NO_CONTENT: 操作已经执行成功,但是没有返回数据
|
||||||
|
MOVED_PERM: 资源已被移除
|
||||||
|
SEE_OTHER: 重定向
|
||||||
|
NOT_MODIFIED: 资源没有被修改
|
||||||
|
BAD_REQUEST: 参数列表错误(缺少,格式不匹配)
|
||||||
|
UNAUTHORIZED: 未授权
|
||||||
|
FORBIDDEN: 访问受限,授权过期
|
||||||
|
NOT_FOUND: 资源,服务未找到
|
||||||
|
BAD_METHOD: 不允许的http方法
|
||||||
|
CONFLICT: 资源冲突,或者资源被锁
|
||||||
|
UNSUPPORTED_TYPE: 不支持的数据,媒体类型
|
||||||
|
ERROR: 系统内部错误
|
||||||
|
NOT_IMPLEMENTED: 接口未实现
|
||||||
|
WARN: 系统警告消息
|
||||||
|
"""
|
||||||
|
SUCCESS = 200
|
||||||
|
CREATED = 201
|
||||||
|
ACCEPTED = 202
|
||||||
|
NO_CONTENT = 204
|
||||||
|
MOVED_PERM = 301
|
||||||
|
SEE_OTHER = 303
|
||||||
|
NOT_MODIFIED = 304
|
||||||
|
BAD_REQUEST = 400
|
||||||
|
UNAUTHORIZED = 401
|
||||||
|
FORBIDDEN = 403
|
||||||
|
NOT_FOUND = 404
|
||||||
|
BAD_METHOD = 405
|
||||||
|
CONFLICT = 409
|
||||||
|
UNSUPPORTED_TYPE = 415
|
||||||
|
ERROR = 500
|
||||||
|
NOT_IMPLEMENTED = 501
|
||||||
|
WARN = 601
|
||||||
|
|
||||||
|
|
||||||
|
class MenuConstant:
|
||||||
|
"""
|
||||||
|
菜单常量
|
||||||
|
TYPE_DIR: 菜单类型(目录)
|
||||||
|
TYPE_MENU: 菜单类型(菜单)
|
||||||
|
TYPE_BUTTON: 菜单类型(按钮)
|
||||||
|
YES_FRAME: 是否菜单外链(是)
|
||||||
|
NO_FRAME: 是否菜单外链(否)
|
||||||
|
LAYOUT: Layout组件标识
|
||||||
|
PARENT_VIEW: ParentView组件标识
|
||||||
|
INNER_LINK: InnerLink组件标识
|
||||||
|
"""
|
||||||
|
TYPE_DIR = 'M'
|
||||||
|
TYPE_MENU = 'C'
|
||||||
|
TYPE_BUTTON = 'F'
|
||||||
|
YES_FRAME = 0
|
||||||
|
NO_FRAME = 1
|
||||||
|
LAYOUT = 'Layout'
|
||||||
|
PARENT_VIEW = 'ParentView'
|
||||||
|
INNER_LINK = 'InnerLink'
|
@@ -10,6 +10,7 @@ from module_admin.entity.vo.login_vo import *
|
|||||||
from module_admin.entity.vo.common_vo import CrudResponseModel
|
from module_admin.entity.vo.common_vo import CrudResponseModel
|
||||||
from module_admin.dao.login_dao import *
|
from module_admin.dao.login_dao import *
|
||||||
from exceptions.exception import LoginException, AuthException
|
from exceptions.exception import LoginException, AuthException
|
||||||
|
from config.constant import CommonConstant, MenuConstant
|
||||||
from config.env import AppConfig, JwtConfig, RedisInitKeyConfig
|
from config.env import AppConfig, JwtConfig, RedisInitKeyConfig
|
||||||
from config.get_db import get_db
|
from config.get_db import get_db
|
||||||
from utils.common_util import CamelCaseUtil
|
from utils.common_util import CamelCaseUtil
|
||||||
@@ -231,7 +232,7 @@ class LoginService:
|
|||||||
:return: 当前用户路由信息对象
|
:return: 当前用户路由信息对象
|
||||||
"""
|
"""
|
||||||
query_user = await UserDao.get_user_by_id(query_db, user_id=user_id)
|
query_user = await UserDao.get_user_by_id(query_db, user_id=user_id)
|
||||||
user_router_menu = sorted([row for row in query_user.get('user_menu_info') if row.menu_type in ['M', 'C']], key=lambda x: x.order_num)
|
user_router_menu = sorted([row for row in query_user.get('user_menu_info') if row.menu_type in [MenuConstant.TYPE_DIR, MenuConstant.TYPE_MENU]], key=lambda x: x.order_num)
|
||||||
menus = cls.__generate_menus(0, user_router_menu)
|
menus = cls.__generate_menus(0, user_router_menu)
|
||||||
user_router = cls.__generate_user_router_menu(menus)
|
user_router = cls.__generate_user_router_menu(menus)
|
||||||
return [router.model_dump(exclude_unset=True, by_alias=True) for router in user_router]
|
return [router.model_dump(exclude_unset=True, by_alias=True) for router in user_router]
|
||||||
@@ -278,7 +279,7 @@ class LoginService:
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
c_menus = permission.children
|
c_menus = permission.children
|
||||||
if c_menus and permission.menu_type == 'M':
|
if c_menus and permission.menu_type == MenuConstant.TYPE_DIR:
|
||||||
router.always_show = True
|
router.always_show = True
|
||||||
router.redirect = 'noRedirect'
|
router.redirect = 'noRedirect'
|
||||||
router.children = cls.__generate_user_router_menu(c_menus)
|
router.children = cls.__generate_user_router_menu(c_menus)
|
||||||
@@ -309,7 +310,7 @@ class LoginService:
|
|||||||
router_path = RouterUtil.inner_link_replace_each(permission.path)
|
router_path = RouterUtil.inner_link_replace_each(permission.path)
|
||||||
children = RouterModel(
|
children = RouterModel(
|
||||||
path=router_path,
|
path=router_path,
|
||||||
component='InnerLink',
|
component=MenuConstant.INNER_LINK,
|
||||||
name=router_path.capitalize(),
|
name=router_path.capitalize(),
|
||||||
meta=MetaModel(
|
meta=MetaModel(
|
||||||
title=permission.menu_name,
|
title=permission.menu_name,
|
||||||
@@ -457,7 +458,7 @@ class RouterUtil:
|
|||||||
if menu.parent_id != 0 and cls.is_inner_link(menu):
|
if menu.parent_id != 0 and cls.is_inner_link(menu):
|
||||||
router_path = cls.inner_link_replace_each(router_path)
|
router_path = cls.inner_link_replace_each(router_path)
|
||||||
# 非外链并且是一级目录(类型为目录)
|
# 非外链并且是一级目录(类型为目录)
|
||||||
if menu.parent_id == 0 and menu.menu_type == 'M' and menu.is_frame == 1:
|
if menu.parent_id == 0 and menu.menu_type == MenuConstant.TYPE_DIR and menu.is_frame == MenuConstant.NO_FRAME:
|
||||||
router_path = f'/{menu.path}'
|
router_path = f'/{menu.path}'
|
||||||
# 非外链并且是一级目录(类型为菜单)
|
# 非外链并且是一级目录(类型为菜单)
|
||||||
elif cls.is_menu_frame(menu):
|
elif cls.is_menu_frame(menu):
|
||||||
@@ -471,13 +472,13 @@ class RouterUtil:
|
|||||||
:param menu: 菜单数对象
|
:param menu: 菜单数对象
|
||||||
:return: 组件信息
|
:return: 组件信息
|
||||||
"""
|
"""
|
||||||
component = 'Layout'
|
component = MenuConstant.LAYOUT
|
||||||
if menu.component and not cls.is_menu_frame(menu):
|
if menu.component and not cls.is_menu_frame(menu):
|
||||||
component = menu.component
|
component = menu.component
|
||||||
elif (menu.component is None or menu.component == '') and menu.parent_id != 0 and cls.is_inner_link(menu):
|
elif (menu.component is None or menu.component == '') and menu.parent_id != 0 and cls.is_inner_link(menu):
|
||||||
component = 'InnerLink'
|
component = MenuConstant.INNER_LINK
|
||||||
elif (menu.component is None or menu.component == '') and cls.is_parent_view(menu):
|
elif (menu.component is None or menu.component == '') and cls.is_parent_view(menu):
|
||||||
component = 'ParentView'
|
component = MenuConstant.PARENT_VIEW
|
||||||
return component
|
return component
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -487,7 +488,7 @@ class RouterUtil:
|
|||||||
:param menu: 菜单数对象
|
:param menu: 菜单数对象
|
||||||
:return: 是否为菜单内部跳转
|
:return: 是否为菜单内部跳转
|
||||||
"""
|
"""
|
||||||
return menu.parent_id == 0 and menu.menu_type == 'C' and menu.is_frame == 1
|
return menu.parent_id == 0 and menu.menu_type == MenuConstant.TYPE_MENU and menu.is_frame == MenuConstant.NO_FRAME
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def is_inner_link(cls, menu: MenuTreeModel):
|
def is_inner_link(cls, menu: MenuTreeModel):
|
||||||
@@ -496,7 +497,7 @@ class RouterUtil:
|
|||||||
:param menu: 菜单数对象
|
:param menu: 菜单数对象
|
||||||
:return: 是否为内链组件
|
:return: 是否为内链组件
|
||||||
"""
|
"""
|
||||||
return menu.is_frame == 1 and cls.is_http(menu.path)
|
return menu.is_frame == MenuConstant.NO_FRAME and cls.is_http(menu.path)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def is_parent_view(cls, menu: MenuTreeModel):
|
def is_parent_view(cls, menu: MenuTreeModel):
|
||||||
@@ -505,7 +506,7 @@ class RouterUtil:
|
|||||||
:param menu: 菜单数对象
|
:param menu: 菜单数对象
|
||||||
:return: 是否为parent_view组件
|
:return: 是否为parent_view组件
|
||||||
"""
|
"""
|
||||||
return menu.parent_id != 0 and menu.menu_type == 'M'
|
return menu.parent_id != 0 and menu.menu_type == MenuConstant.TYPE_DIR
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def is_http(cls, link: str):
|
def is_http(cls, link: str):
|
||||||
@@ -514,7 +515,7 @@ class RouterUtil:
|
|||||||
:param link: 链接
|
:param link: 链接
|
||||||
:return: 是否为http(s)://开头
|
:return: 是否为http(s)://开头
|
||||||
"""
|
"""
|
||||||
return link.startswith('http://') or link.startswith('https://')
|
return link.startswith(CommonConstant.HTTP) or link.startswith(CommonConstant.HTTPS)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def inner_link_replace_each(cls, path: str):
|
def inner_link_replace_each(cls, path: str):
|
||||||
@@ -523,7 +524,7 @@ class RouterUtil:
|
|||||||
:param path: 内链域名
|
:param path: 内链域名
|
||||||
:return: 替换后的内链域名
|
:return: 替换后的内链域名
|
||||||
"""
|
"""
|
||||||
old_values = ["http://", "https://", "www.", ".", ":"]
|
old_values = [CommonConstant.HTTP, CommonConstant.HTTPS, CommonConstant.WWW, ".", ":"]
|
||||||
new_values = ["", "", "", "/", "/"]
|
new_values = ["", "", "", "/", "/"]
|
||||||
for old, new in zip(old_values, new_values):
|
for old, new in zip(old_values, new_values):
|
||||||
path = path.replace(old, new)
|
path = path.replace(old, new)
|
||||||
|
@@ -4,6 +4,7 @@ from fastapi.encoders import jsonable_encoder
|
|||||||
from typing import Any, Dict, Optional
|
from typing import Any, Dict, Optional
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from config.constant import HttpStatusConstant
|
||||||
|
|
||||||
|
|
||||||
class ResponseUtil:
|
class ResponseUtil:
|
||||||
@@ -24,7 +25,7 @@ class ResponseUtil:
|
|||||||
:return: 成功响应结果
|
:return: 成功响应结果
|
||||||
"""
|
"""
|
||||||
result = {
|
result = {
|
||||||
'code': 200,
|
'code': HttpStatusConstant.SUCCESS,
|
||||||
'msg': msg
|
'msg': msg
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,7 +58,7 @@ class ResponseUtil:
|
|||||||
:return: 失败响应结果
|
:return: 失败响应结果
|
||||||
"""
|
"""
|
||||||
result = {
|
result = {
|
||||||
'code': 601,
|
'code': HttpStatusConstant.WARN,
|
||||||
'msg': msg
|
'msg': msg
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,7 +91,7 @@ class ResponseUtil:
|
|||||||
:return: 未认证响应结果
|
:return: 未认证响应结果
|
||||||
"""
|
"""
|
||||||
result = {
|
result = {
|
||||||
'code': 401,
|
'code': HttpStatusConstant.UNAUTHORIZED,
|
||||||
'msg': msg
|
'msg': msg
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,7 +124,7 @@ class ResponseUtil:
|
|||||||
:return: 未认证响应结果
|
:return: 未认证响应结果
|
||||||
"""
|
"""
|
||||||
result = {
|
result = {
|
||||||
'code': 403,
|
'code': HttpStatusConstant.FORBIDDEN,
|
||||||
'msg': msg
|
'msg': msg
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,7 +157,7 @@ class ResponseUtil:
|
|||||||
:return: 错误响应结果
|
:return: 错误响应结果
|
||||||
"""
|
"""
|
||||||
result = {
|
result = {
|
||||||
'code': 500,
|
'code': HttpStatusConstant.ERROR,
|
||||||
'msg': msg
|
'msg': msg
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user