Browse Source

feat: 新增常量配置

master
insistence 7 months ago
parent
commit
6109c45dbe
  1. 76
      ruoyi-fastapi-backend/config/constant.py
  2. 25
      ruoyi-fastapi-backend/module_admin/service/login_service.py
  3. 11
      ruoyi-fastapi-backend/utils/response_util.py

76
ruoyi-fastapi-backend/config/constant.py

@ -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'

25
ruoyi-fastapi-backend/module_admin/service/login_service.py

@ -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)

11
ruoyi-fastapi-backend/utils/response_util.py

@ -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
} }

Loading…
Cancel
Save