!36 新功能及若干bug修复优化

Merge pull request !36 from 李强/dvadmin-liqianglog
pull/37/head
李强 2021-07-11 07:40:51 +00:00 committed by Gitee
commit b828ceea51
233 changed files with 8257 additions and 7941 deletions

View File

@ -2,7 +2,7 @@
[![img](https://img.shields.io/badge/license-MIT-blue.svg)](https://gitee.com/liqianglog/django-vue-admin/blob/master/LICENSE) [![img](https://img.shields.io/badge/python-%3E=3.6.x-green.svg)](https://python.org/) [![PyPI - Django Version badge](https://img.shields.io/badge/django%20versions-2.2-blue)](https://docs.djangoproject.com/zh-hans/2.2/) [![img](https://img.shields.io/badge/node-%3E%3D%2012.0.0-brightgreen)](https://nodejs.org/zh-cn/) [![img](https://gitee.com/liqianglog/django-vue-admin/badge/star.svg?theme=dark)](https://gitee.com/liqianglog/django-vue-admin) [![img](https://img.shields.io/badge/license-MIT-blue.svg)](https://gitee.com/liqianglog/django-vue-admin/blob/master/LICENSE) [![img](https://img.shields.io/badge/python-%3E=3.6.x-green.svg)](https://python.org/) [![PyPI - Django Version badge](https://img.shields.io/badge/django%20versions-2.2-blue)](https://docs.djangoproject.com/zh-hans/2.2/) [![img](https://img.shields.io/badge/node-%3E%3D%2012.0.0-brightgreen)](https://nodejs.org/zh-cn/) [![img](https://gitee.com/liqianglog/django-vue-admin/badge/star.svg?theme=dark)](https://gitee.com/liqianglog/django-vue-admin)
[预 览](https://demo.django-vue-admin.com) | [官 网文档](https://www.django-vue-admin.com) | [群聊](https://qm.qq.com/cgi-bin/qm/qr?k=fOdnHhC8DJlRHGYSnyhoB8P5rgogA6Vs&jump_from=webapi) | [社区](https://bbs.django-vue-admin.com/) | [Github](https://github.com/liqianglog/django-vue-admin)
## 平台简介 ## 平台简介
@ -14,9 +14,11 @@ Django-Vue-Admin 是一套全部开源的快速开发平台,毫无保留给个
* 支持加载动态权限菜单,多方式轻松权限控制。 * 支持加载动态权限菜单,多方式轻松权限控制。
* 特别鸣谢:<u>[Gin-Vue-Admin](https://www.gin-vue-admin.com/)</u>[RuoYi](https://gitee.com/y_project/RuoYi-Vue) [Vue-Element-Admin](https://github.com/PanJiaChen/vue-element-admin)。 * 特别鸣谢:<u>[Gin-Vue-Admin](https://www.gin-vue-admin.com/)</u>[RuoYi](https://gitee.com/y_project/RuoYi-Vue) [Vue-Element-Admin](https://github.com/PanJiaChen/vue-element-admin)。
## QQ群 ## 交流
- QQ群号812482043 - 社区:[戳我](https://bbs.django-vue-admin.com)
- QQ群号812482043 <a target="_blank" href="https://qm.qq.com/cgi-bin/qm/qr?k=fOdnHhC8DJlRHGYSnyhoB8P5rgogA6Vs&jump_from=webapi"><img border="0" src="//pub.idqqimg.com/wpa/images/group.png" alt="django-vue-admin交流01群" title="django-vue-admin交流01群"></a>
- 二维码 - 二维码

View File

@ -88,8 +88,6 @@ services:
volumes: volumes:
- ./dvadmin-backend:/dvadmin-backend - ./dvadmin-backend:/dvadmin-backend
- ./logs/log:/var/log - ./logs/log:/var/log
env_file:
- ./.env
ports: ports:
- "8000:8000" - "8000:8000"
expose: expose:

View File

@ -1,7 +1,7 @@
""" """
Django settings for application project. Django settings for application project.
Generated by 'django-admin startproject' using Django 1.11.21. Generated by 'django-admin startproject' using Django 2.2.16.
For more information on this file, see For more information on this file, see
https://docs.djangoproject.com/en/1.11/topics/settings/ https://docs.djangoproject.com/en/1.11/topics/settings/
@ -46,6 +46,7 @@ INSTALLED_APPS = [
'corsheaders', 'corsheaders',
'captcha', 'captcha',
'django_celery_beat', 'django_celery_beat',
'drf_yasg', # swagger 接口
# 自定义app # 自定义app
'apps.vadmin.permission', 'apps.vadmin.permission',
'apps.vadmin.op_drf', 'apps.vadmin.op_drf',
@ -70,7 +71,7 @@ MIDDLEWARE = [
CORS_ORIGIN_ALLOW_ALL = CORS_ORIGIN_ALLOW_ALL CORS_ORIGIN_ALLOW_ALL = CORS_ORIGIN_ALLOW_ALL
# 允许ajax请求携带cookie # 允许ajax请求携带cookie
CORS_ALLOW_CREDENTIALS = CORS_ALLOW_CREDENTIALS CORS_ALLOW_CREDENTIALS = CORS_ALLOW_CREDENTIALS
X_FRAME_OPTIONS = "ALLOW-FROM"
ROOT_URLCONF = 'application.urls' ROOT_URLCONF = 'application.urls'
TEMPLATES = [ TEMPLATES = [
@ -332,4 +333,4 @@ CELERYBEAT_SCHEDULER = 'django_celery_beat.schedulers.DatabaseScheduler' # Back
# 接口权限 # 接口权限
INTERFACE_PERMISSION = locals().get("INTERFACE_PERMISSION", False) INTERFACE_PERMISSION = locals().get("INTERFACE_PERMISSION", False)
DJANGO_CELERY_BEAT_TZ_AWARE = False DJANGO_CELERY_BEAT_TZ_AWARE = False
CELERY_TIMEZONE = 'Asia/Shanghai' # celery 时区问题 CELERY_TIMEZONE = 'Asia/Shanghai' # celery 时区问题

View File

@ -22,8 +22,22 @@ from django.urls import re_path, include
from django.views.static import serve from django.views.static import serve
from rest_framework.views import APIView from rest_framework.views import APIView
from apps.vadmin.utils.response import SuccessResponse from apps.vadmin.op_drf.response import SuccessResponse
from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
schema_view = get_schema_view(
openapi.Info(
title="Snippets API",
default_version='v1',
description="Test description",
terms_of_service="https://www.google.com/policies/terms/",
contact=openapi.Contact(email="contact@snippets.local"),
license=openapi.License(name="BSD License"),
),
public=True,
permission_classes=[permissions.AllowAny],
)
class CaptchaRefresh(APIView): class CaptchaRefresh(APIView):
authentication_classes = [] authentication_classes = []
@ -42,4 +56,8 @@ class CaptchaRefresh(APIView):
urlpatterns = [ urlpatterns = [
re_path(r'media/(?P<path>.*)', serve, {"document_root": settings.MEDIA_ROOT}), re_path(r'media/(?P<path>.*)', serve, {"document_root": settings.MEDIA_ROOT}),
re_path(r'^admin/', include('apps.vadmin.urls')), re_path(r'^admin/', include('apps.vadmin.urls')),
re_path(r'^$', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
re_path(r'^swagger(?P<format>\.json|\.yaml)$', schema_view.without_ui(cache_timeout=0), name='schema-json'),
re_path(r'^swagger/$', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
re_path(r'^redoc/$', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
] ]

View File

@ -2,6 +2,6 @@ from django.apps import AppConfig
class DpCmdbConfig(AppConfig): class DpCmdbConfig(AppConfig):
name = 'vadmin.celery' name = 'apps.vadmin.celery'

View File

@ -1,8 +1,8 @@
from django_celery_beat.models import IntervalSchedule, CrontabSchedule, PeriodicTask from django_celery_beat.models import IntervalSchedule, CrontabSchedule, PeriodicTask
from rest_framework import serializers from rest_framework import serializers
from ..op_drf.serializers import CustomModelSerializer from apps.vadmin.op_drf.serializers import CustomModelSerializer
from ..utils.exceptions import APIException from apps.vadmin.utils.exceptions import APIException
class IntervalScheduleSerializer(CustomModelSerializer): class IntervalScheduleSerializer(CustomModelSerializer):

View File

@ -2,13 +2,11 @@ from django_celery_beat.admin import TaskSelectWidget
from django_celery_beat.models import IntervalSchedule, CrontabSchedule, PeriodicTask from django_celery_beat.models import IntervalSchedule, CrontabSchedule, PeriodicTask
from rest_framework.views import APIView from rest_framework.views import APIView
from ..celery.filters import IntervalScheduleFilter, CrontabScheduleFilter, PeriodicTaskFilter from apps.vadmin.celery.filters import IntervalScheduleFilter, CrontabScheduleFilter, PeriodicTaskFilter
from ..celery.serializers import IntervalScheduleSerializer, CrontabScheduleSerializer, PeriodicTaskSerializer from apps.vadmin.celery.serializers import IntervalScheduleSerializer, CrontabScheduleSerializer, PeriodicTaskSerializer
from ..op_drf.views import CustomAPIView from apps.vadmin.op_drf.views import CustomAPIView
from ..op_drf.viewsets import CustomModelViewSet from apps.vadmin.op_drf.viewsets import CustomModelViewSet
from ..system.models import DictData from apps.vadmin.op_drf.response import SuccessResponse
from ..system.serializers import DictDataSerializer
from ..utils.response import SuccessResponse
class IntervalScheduleModelViewSet(CustomModelViewSet): class IntervalScheduleModelViewSet(CustomModelViewSet):
@ -59,7 +57,7 @@ class PeriodicTaskModelViewSet(CustomModelViewSet):
enabled 是否开启 enabled 是否开启
""" """
queryset = PeriodicTask.objects.all() queryset = PeriodicTask.objects.exclude(name="celery.backend_cleanup")
serializer_class = PeriodicTaskSerializer serializer_class = PeriodicTaskSerializer
filter_class = PeriodicTaskFilter filter_class = PeriodicTaskFilter
search_fields = ('name', 'task', 'date_changed') search_fields = ('name', 'task', 'date_changed')

View File

@ -2,5 +2,5 @@ from django.apps import AppConfig
class MonitorConfig(AppConfig): class MonitorConfig(AppConfig):
name = 'vadmin.monitor' name = 'apps.vadmin.monitor'
verbose_name = "系统监控" verbose_name = "系统监控"

View File

@ -1,6 +1,6 @@
import django_filters import django_filters
from .models import Server, Monitor from apps.vadmin.monitor.models import Server, Monitor
class ServerFilter(django_filters.rest_framework.FilterSet): class ServerFilter(django_filters.rest_framework.FilterSet):

View File

@ -1,3 +1,3 @@
from ..models.monitor import Monitor from apps.vadmin.monitor.models.monitor import Monitor
from ..models.server import Server from apps.vadmin.monitor.models.server import Server
from ..models.sys_files import SysFiles from apps.vadmin.monitor.models.sys_files import SysFiles

View File

@ -1,6 +1,6 @@
from django.db.models import CharField, ForeignKey, CASCADE from django.db.models import CharField, ForeignKey, CASCADE
from ...op_drf.models import CoreModel from apps.vadmin.op_drf.models import CoreModel
class Monitor(CoreModel): class Monitor(CoreModel):

View File

@ -1,6 +1,6 @@
from django.db.models import CharField, ForeignKey, CASCADE from django.db.models import CharField, ForeignKey, CASCADE
from ...op_drf.models import CoreModel from apps.vadmin.op_drf.models import CoreModel
class SysFiles(CoreModel): class SysFiles(CoreModel):

View File

@ -1,5 +1,5 @@
from .models import Server, Monitor from apps.vadmin.monitor.models import Server, Monitor
from ..op_drf.serializers import CustomModelSerializer from apps.vadmin.op_drf.serializers import CustomModelSerializer
# ================================================= # # ================================================= #

View File

@ -5,10 +5,10 @@ import time
import psutil import psutil
from ..monitor.models import Server, Monitor, SysFiles from apps.vadmin.monitor.models import Server, Monitor, SysFiles
from ..op_drf.response import SuccessResponse from apps.vadmin.op_drf.response import SuccessResponse
from ..system.models import ConfigSettings from apps.vadmin.system.models import ConfigSettings
from ..utils.decorators import BaseCeleryApp from apps.vadmin.utils.decorators import BaseCeleryApp
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
from platform import platform from platform import platform

View File

@ -1,7 +1,7 @@
from django.urls import re_path from django.urls import re_path
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
from .views import ServerModelViewSet, MonitorModelViewSet from apps.vadmin.monitor.views import ServerModelViewSet, MonitorModelViewSet
router = DefaultRouter() router = DefaultRouter()
router.register(r'server', ServerModelViewSet) router.register(r'server', ServerModelViewSet)

View File

@ -1,13 +1,13 @@
from django_celery_beat.models import PeriodicTask, IntervalSchedule, CrontabSchedule from django_celery_beat.models import PeriodicTask, IntervalSchedule, CrontabSchedule
from rest_framework.request import Request from rest_framework.request import Request
from .filters import ServerFilter, MonitorFilter from apps.vadmin.monitor.filters import ServerFilter, MonitorFilter
from .models import Server, Monitor, SysFiles from apps.vadmin.monitor.models import Server, Monitor, SysFiles
from .serializers import ServerSerializer, MonitorSerializer, UpdateServerSerializer from apps.vadmin.monitor.serializers import ServerSerializer, MonitorSerializer, UpdateServerSerializer
from ..op_drf.response import SuccessResponse, ErrorResponse from apps.vadmin.op_drf.response import SuccessResponse, ErrorResponse
from ..op_drf.viewsets import CustomModelViewSet from apps.vadmin.op_drf.viewsets import CustomModelViewSet
from ..permission.permissions import CommonPermission from apps.vadmin.permission.permissions import CommonPermission
from ..system.models import ConfigSettings from apps.vadmin.system.models import ConfigSettings
class ServerModelViewSet(CustomModelViewSet): class ServerModelViewSet(CustomModelViewSet):

View File

@ -1,7 +1,7 @@
from django.apps import AppConfig
import logging import logging
from django.apps import AppConfig
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -2,7 +2,7 @@ from django.contrib.auth import get_user_model
from django.db import models from django.db import models
from django.db.models import SET_NULL from django.db.models import SET_NULL
from ..utils.string_util import uuid_8, uuid_16, uuid_32, uuid_36 from apps.vadmin.utils.string_util import uuid_8, uuid_16, uuid_32, uuid_36
class IdField(models.CharField): class IdField(models.CharField):

View File

@ -10,7 +10,7 @@ from django.utils import six
from mongoengine.queryset import visitor from mongoengine.queryset import visitor
from rest_framework.filters import BaseFilterBackend, SearchFilter, OrderingFilter from rest_framework.filters import BaseFilterBackend, SearchFilter, OrderingFilter
from ..utils.model_util import get_dept from apps.vadmin.utils.model_util import get_dept
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -4,11 +4,11 @@ from django.http import Http404
from django.shortcuts import get_object_or_404 as _get_object_or_404 from django.shortcuts import get_object_or_404 as _get_object_or_404
from rest_framework.settings import api_settings from rest_framework.settings import api_settings
from apps.vadmin.utils.jsonpath_util import get_jsonpath, filter_json, search_json
from apps.vadmin.utils.sort_util import sortList
from . import mixins from . import mixins
from .pagination import Pagination, JsonPagination from .pagination import JsonPagination
from .response import SuccessResponse from .response import SuccessResponse
from ..utils.jsonpath_util import get_jsonpath, filter_json, search_json
from ..utils.sort_util import sortList
from .views import CustomAPIView from .views import CustomAPIView

View File

@ -1,5 +1,4 @@
import logging import logging
from django.core.cache import cache
class RedisHandler(logging.StreamHandler): class RedisHandler(logging.StreamHandler):
@ -7,4 +6,3 @@ class RedisHandler(logging.StreamHandler):
def emit(self, record): def emit(self, record):
msg = self.format(record) msg = self.format(record)
print(msg) print(msg)

View File

@ -13,6 +13,7 @@ class Command(BaseCommand):
创建App命令: 创建App命令:
python manage.py createapp app名 python manage.py createapp app名
python manage.py createapp app01 app02 ... python manage.py createapp app01 app02 ...
python manage.py createapp 一级文件名/app01 ... # 支持多级目录建app
""" """
def add_arguments(self, parser): def add_arguments(self, parser):
@ -21,7 +22,9 @@ class Command(BaseCommand):
def handle(self, *args, **options): def handle(self, *args, **options):
app_name = options.get('app_name') app_name = options.get('app_name')
for name in app_name: for name in app_name:
app_path = os.path.join(BASE_DIR, "apps", name) names = name.split('/')
dnames = ".".join(names)
app_path = os.path.join(BASE_DIR, "apps", *names)
# 判断app是否存在 # 判断app是否存在
if os.path.exists(app_path): if os.path.exists(app_path):
print(f"创建失败App {name} 已存在!") print(f"创建失败App {name} 已存在!")
@ -39,20 +42,20 @@ class Command(BaseCommand):
content = f"""from django.apps import AppConfig content = f"""from django.apps import AppConfig
class {name.capitalize()}Config(AppConfig): class {name[-1].capitalize()}Config(AppConfig):
name = '{name}' name = 'apps.{dnames}'
verbose_name = "{name}App" verbose_name = "{names[-1]}App"
""" """
with open(os.path.join(app_path, "apps.py"), 'w', encoding='UTF-8') as f: with open(os.path.join(app_path, "apps.py"), 'w', encoding='UTF-8') as f:
f.write(content) f.write(content)
f.close() f.close()
# 注册app到 settings.py 中 # 注册app到 settings.py 中
injection(os.path.join(BASE_DIR, "application", "settings.py"), f" 'apps.{name}',\n", "INSTALLED_APPS", injection(os.path.join(BASE_DIR, "application", "settings.py"), f" 'apps.{dnames}',\n", "INSTALLED_APPS",
"]") "]")
# 注册app到 urls.py 中 # 注册app到 urls.py 中
injection(os.path.join(BASE_DIR, "application", "urls.py"), injection(os.path.join(BASE_DIR, "application", "urls.py"),
f" re_path(r'^{name}/', include('apps.{name}.urls')),\n", "urlpatterns = [", f" re_path(r'^{name}/', include('apps.{dnames}.urls')),\n", "urlpatterns = [",
"]") "]")
print(f"创建 {name} App成功") print(f"创建 {name} App成功")

View File

@ -9,11 +9,11 @@ from django.conf import settings
from django.contrib.auth.models import AnonymousUser from django.contrib.auth.models import AnonymousUser
from django.utils.deprecation import MiddlewareMixin from django.utils.deprecation import MiddlewareMixin
from apps.vadmin.op_drf.response import ErrorJsonResponse
from apps.vadmin.permission.models import Menu from apps.vadmin.permission.models import Menu
from apps.vadmin.system.models import OperationLog from apps.vadmin.system.models import OperationLog
from ..utils.request_util import get_request_ip, get_request_data, get_request_path, get_browser, get_os, \ from apps.vadmin.utils.request_util import get_request_ip, get_request_data, get_request_path, get_browser, get_os, \
get_login_location, get_request_canonical_path, get_request_user, get_verbose_name get_login_location, get_request_canonical_path, get_request_user, get_verbose_name
from ..utils.response import ErrorJsonResponse
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -5,9 +5,9 @@ from rest_framework import status
from rest_framework.relations import ManyRelatedField, RelatedField, PrimaryKeyRelatedField from rest_framework.relations import ManyRelatedField, RelatedField, PrimaryKeyRelatedField
from rest_framework.request import Request from rest_framework.request import Request
from apps.vadmin.utils.export_excel import excel_to_data, export_excel_save_model
from apps.vadmin.utils.request_util import get_verbose_name
from .response import SuccessResponse from .response import SuccessResponse
from ..utils.export_excel import excel_to_data, export_excel_save_model
from ..utils.request_util import get_verbose_name
class CreateModelMixin(mixins.CreateModelMixin): class CreateModelMixin(mixins.CreateModelMixin):
@ -317,7 +317,8 @@ class ImportSerializerMixin:
# 示例数据 # 示例数据
queryset = self.filter_queryset(self.get_queryset()) queryset = self.filter_queryset(self.get_queryset())
return SuccessResponse( return SuccessResponse(
export_excel_save_model(request, self.import_field_data.values(), [], f'导入{get_verbose_name(queryset)}模板.xls')) export_excel_save_model(request, self.import_field_data.values(), [],
f'导入{get_verbose_name(queryset)}模板.xls'))
updateSupport = request.data.get('updateSupport') updateSupport = request.data.get('updateSupport')
# 从excel中组织对应的数据结构然后使用序列化器保存 # 从excel中组织对应的数据结构然后使用序列化器保存
data = excel_to_data(request.data.get('file_url'), self.import_field_data) data = excel_to_data(request.data.get('file_url'), self.import_field_data)

View File

@ -1,5 +1,4 @@
from collections import OrderedDict from collections import OrderedDict
from typing import Any
from rest_framework.pagination import PageNumberPagination, _positive_int from rest_framework.pagination import PageNumberPagination, _positive_int
from rest_framework.utils.urls import replace_query_param from rest_framework.utils.urls import replace_query_param

View File

@ -1,7 +1,7 @@
""" """
常用的Response以及Django的ResponseDRF的Response 常用的Response以及Django的ResponseDRF的Response
""" """
from django.http.response import DjangoJSONEncoder from django.http.response import DjangoJSONEncoder, JsonResponse
from rest_framework.response import Response from rest_framework.response import Response
@ -26,13 +26,16 @@ class SuccessResponse(Response):
def __init__(self, data=None, msg='success', status=None, template_name=None, headers=None, exception=False, def __init__(self, data=None, msg='success', status=None, template_name=None, headers=None, exception=False,
content_type=None): content_type=None):
std_data = { self.std_data = {
"code": 200, "code": 200,
"data": data, "data": data,
"msg": msg, "msg": msg,
"status": 'success' "status": 'success'
} }
super().__init__(std_data, status, template_name, headers, exception, content_type) super().__init__(self.std_data, status, template_name, headers, exception, content_type)
def __str__(self):
return str(self.std_data)
class ErrorResponse(Response): class ErrorResponse(Response):
@ -43,10 +46,46 @@ class ErrorResponse(Response):
def __init__(self, data=None, msg='error', code=201, status=None, template_name=None, headers=None, def __init__(self, data=None, msg='error', code=201, status=None, template_name=None, headers=None,
exception=False, content_type=None): exception=False, content_type=None):
self.std_data = {
"code": code,
"data": data,
"msg": msg,
"status": 'error'
}
super().__init__(self.std_data, status, template_name, headers, exception, content_type)
def __str__(self):
return str(self.std_data)
class SuccessJsonResponse(JsonResponse):
"""
标准JsonResponse, SuccessJsonResponse(data)SuccessJsonResponse(data=data)
(1)仅SuccessResponse无法使用时才能推荐使用SuccessJsonResponse
"""
def __init__(self, data, msg='success', encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs):
std_data = {
"code": 200,
"data": data,
"msg": msg,
"status": 'success'
}
super().__init__(std_data, encoder, safe, json_dumps_params, **kwargs)
class ErrorJsonResponse(JsonResponse):
"""
标准JsonResponse, 仅ErrorResponse无法使用时才能使用ErrorJsonResponse
(1)默认错误码返回2001, 也可以指定其他返回码:ErrorJsonResponse(code=xxx)
"""
def __init__(self, data, msg='error', code=201, encoder=OpDRFJSONEncoder, safe=True, json_dumps_params=None,
**kwargs):
std_data = { std_data = {
"code": code, "code": code,
"data": data, "data": data,
"msg": msg, "msg": msg,
"status": 'error' "status": 'error'
} }
super().__init__(std_data, status, template_name, headers, exception, content_type) super().__init__(std_data, encoder, safe, json_dumps_params, **kwargs)

View File

@ -3,7 +3,7 @@
""" """
from rest_framework.validators import UniqueValidator, qs_exists from rest_framework.validators import UniqueValidator, qs_exists
from vadmin.utils.exceptions import APIException from apps.vadmin.utils.exceptions import APIException
class CustomUniqueValidator(UniqueValidator): class CustomUniqueValidator(UniqueValidator):

View File

@ -6,11 +6,8 @@ from rest_framework.exceptions import APIException as DRFAPIException
from rest_framework.request import Request from rest_framework.request import Request
from rest_framework.views import APIView from rest_framework.views import APIView
from ..utils import exceptions from apps.vadmin.utils import exceptions
from ..utils.model_util import ModelRelateUtils from .response import ErrorResponse
from .logging.view_logger import CustomerRelationshipViewLogger
from .response import SuccessResponse, ErrorResponse
from .serializers import CustomModelSerializer
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -11,12 +11,11 @@ from rest_framework.request import Request
from rest_framework.settings import api_settings from rest_framework.settings import api_settings
from rest_framework.viewsets import ViewSetMixin from rest_framework.viewsets import ViewSetMixin
from ..utils.exceptions import APIException from apps.vadmin.utils.exceptions import APIException
from . import mixins from . import mixins
from .filters import MongoSearchFilter, MongoOrderingFilter, AdvancedSearchFilter, MongoAdvancedSearchFilter from .filters import MongoSearchFilter, MongoOrderingFilter, AdvancedSearchFilter, MongoAdvancedSearchFilter
from .generics import GenericAPIView from .generics import GenericAPIView
from .logging.view_logger import CustomerModelViewLogger from .logging.view_logger import CustomerModelViewLogger
from .pagination import Pagination
from .serializers import CustomModelSerializer from .serializers import CustomModelSerializer
@ -173,8 +172,122 @@ class MongoGenericAPIView(GenericAPIView):
class MongoGenericViewSet(ViewSetMixin, MongoGenericAPIView): class MongoGenericViewSet(ViewSetMixin, MongoGenericAPIView):
pagination_class = Pagination extra_filter_backends = []
pass pagination_class = api_settings.DEFAULT_PAGINATION_CLASS
filter_backends = [DjangoFilterBackend, OrderingFilter, SearchFilter, AdvancedSearchFilter]
view_logger_classes = (CustomerModelViewLogger,)
def handle_logging(self, request: Request, *args, **kwargs):
view_loggers = self.get_view_loggers(request, *args, **kwargs)
for view_logger in view_loggers:
handle_action = getattr(view_logger, f'handle_{self.action}', None)
if handle_action and isinstance(handle_action, (FunctionType, MethodType)):
handle_action(request, *args, **kwargs)
def get_serializer(self, *args, **kwargs):
serializer_class = self.get_serializer_class()
kwargs['context'] = self.get_serializer_context()
serializer = serializer_class(*args, **kwargs)
if isinstance(serializer, CustomModelSerializer):
serializer.request = self.request
return serializer
def filter_queryset(self, queryset):
for backend in set(set(self.filter_backends) | set(self.extra_filter_backends or [])):
queryset = backend().filter_queryset(self.request, queryset, self)
queryset = self.action_extra_filter_queryset(queryset)
return queryset
def action_extra_filter_queryset(self, queryset):
action__extra_filter_backends = getattr(self, f"{self.action}_extra_filter_backends", None)
if not action__extra_filter_backends:
return queryset
for backend in action__extra_filter_backends:
queryset = backend().filter_queryset(self.request, queryset, self)
return queryset
def get_serializer_class(self):
action_serializer_name = f"{self.action}_serializer_class"
action_serializer_class = getattr(self, action_serializer_name, None)
if action_serializer_class:
return action_serializer_class
return super().get_serializer_class()
def reverse_action(self, url_name, *args, **kwargs):
return super().reverse_action(url_name, *args, **kwargs)
def get_action_extra_permissions(self):
"""
获取已配置的action权限校验,并且实例化其对象
:return:
"""
action_extra_permission_classes = getattr(self, f"{self.action}_extra_permission_classes", None)
if not action_extra_permission_classes:
return []
return [permission() for permission in action_extra_permission_classes]
def check_action_extra_permissions(self, request):
"""
逐个校验action权限校验
:param request:
:return:
"""
for permission in self.get_action_extra_permissions():
if not permission.has_permission(request, self):
self.permission_denied(
request, message=getattr(permission, 'message', None)
)
def check_action_extra_object_permissions(self, request, obj):
"""
action方法的专属对象权限校验
:param request:
:param obj:
:return:
"""
for permission in self.get_action_extra_permissions():
if not permission.has_object_permission(request, self, obj):
self.permission_denied(
request, message=getattr(permission, 'message', None)
)
def initial(self, request, *args, **kwargs):
"""
重写initial方法
(1)新增action的权限校验
:param request:
:param args:
:param kwargs:
:return:
"""
super().initial(request, *args, **kwargs)
self.check_action_extra_permissions(request)
def get_object(self):
queryset = self.filter_queryset(self.get_queryset())
lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field
assert lookup_url_kwarg in self.kwargs, (
'Expected view %s to be called with a URL keyword argument '
'named "%s". Fix your URL conf, or set the `.lookup_field` '
'attribute on the view correctly.' %
(self.__class__.__name__, lookup_url_kwarg)
)
filter_kwargs = {self.lookup_field: self.kwargs[lookup_url_kwarg]}
obj = get_object_or_404(queryset, **filter_kwargs)
self.check_object_permissions(self.request, obj)
return obj
def check_object_permissions(self, request, obj):
"""
重新check_object_permissions
(1)新增action方法的专属对象权限检查入口
(2)先校验共同的object_permissions, 再校验action的object_permissions
:param request:
:param obj:
:return:
"""
super().check_object_permissions(request, obj)
self.check_action_extra_object_permissions(request, obj)
class ReadOnlyModelViewSet(mixins.RetrieveModelMixin, class ReadOnlyModelViewSet(mixins.RetrieveModelMixin,

View File

@ -1,8 +1,8 @@
import django_filters import django_filters
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from ..permission.models import Menu, Dept, Post, Role from apps.vadmin.permission.models import Menu, Dept, Post, Role
from ..utils.model_util import get_dept from apps.vadmin.utils.model_util import get_dept
UserProfile = get_user_model() UserProfile = get_user_model()

View File

@ -5,7 +5,7 @@ from django.conf import settings
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from django.db import connection from django.db import connection
from ....scripts import getSql from apps.vadmin.scripts import getSql
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -1,5 +1,5 @@
from ..models.dept import Dept from apps.vadmin.permission.models.dept import Dept
from ..models.menu import Menu from apps.vadmin.permission.models.menu import Menu
from ..models.post import Post from apps.vadmin.permission.models.post import Post
from ..models.role import Role from apps.vadmin.permission.models.role import Role
from ..models.users import UserProfile from apps.vadmin.permission.models.users import UserProfile

View File

@ -1,7 +1,7 @@
from django.db.models import CASCADE from django.db.models import CASCADE
from django.db.models import CharField, IntegerField, ForeignKey from django.db.models import CharField, IntegerField, ForeignKey
from ...op_drf.models import CoreModel from apps.vadmin.op_drf.models import CoreModel
class Dept(CoreModel): class Dept(CoreModel):

View File

@ -1,7 +1,8 @@
from django.core.cache import cache from django.core.cache import cache
from django.db.models import IntegerField, ForeignKey, CharField, CASCADE, Q from django.db.models import IntegerField, ForeignKey, CharField, CASCADE, Q
from ...op_drf.models import CoreModel from application import settings
from apps.vadmin.op_drf.models import CoreModel
class Menu(CoreModel): class Menu(CoreModel):
@ -42,7 +43,8 @@ class Menu(CoreModel):
:return: :return:
""" """
try: try:
interface_dict = cache.get('permission_interface_dict', {}) interface_dict = cache.get('permission_interface_dict', {}) if getattr(settings, "REDIS_ENABLE",
False) else {}
except: except:
interface_dict = {} interface_dict = {}
if not interface_dict: if not interface_dict:
@ -52,7 +54,8 @@ class Menu(CoreModel):
interface_dict[ele.get('interface_method', '')].append(ele.get('interface_path')) interface_dict[ele.get('interface_method', '')].append(ele.get('interface_path'))
else: else:
interface_dict[ele.get('interface_method', '')] = [ele.get('interface_path')] interface_dict[ele.get('interface_method', '')] = [ele.get('interface_path')]
cache.set('permission_interface_dict', interface_dict, 84600) if getattr(settings, "REDIS_ENABLE", False):
cache.set('permission_interface_dict', interface_dict, 84600)
return interface_dict return interface_dict
@classmethod @classmethod
@ -61,7 +64,8 @@ class Menu(CoreModel):
清空缓存中的接口列表 清空缓存中的接口列表
:return: :return:
""" """
cache.delete('permission_interface_dict') if getattr(settings, "REDIS_ENABLE", False):
cache.delete('permission_interface_dict')
class Meta: class Meta:
verbose_name = '菜单管理' verbose_name = '菜单管理'

View File

@ -1,6 +1,6 @@
from django.db.models import IntegerField, BooleanField, CharField, TextField from django.db.models import IntegerField, BooleanField, CharField, TextField
from ...op_drf.models import CoreModel from apps.vadmin.op_drf.models import CoreModel
class Post(CoreModel): class Post(CoreModel):

View File

@ -1,6 +1,6 @@
from django.db.models import IntegerField, BooleanField, CharField, TextField, ManyToManyField from django.db.models import IntegerField, BooleanField, CharField, TextField, ManyToManyField
from ...op_drf.models import CoreModel from apps.vadmin.op_drf.models import CoreModel
class Role(CoreModel): class Role(CoreModel):
@ -16,7 +16,7 @@ class Role(CoreModel):
roleSort = IntegerField(verbose_name="角色顺序") roleSort = IntegerField(verbose_name="角色顺序")
status = CharField(max_length=8, verbose_name="角色状态") status = CharField(max_length=8, verbose_name="角色状态")
admin = BooleanField(default=False, verbose_name="是否为admin") admin = BooleanField(default=False, verbose_name="是否为admin")
dataScope = CharField(max_length=8,default='1', choices=DATASCOPE_CHOICES, verbose_name="权限范围",) dataScope = CharField(max_length=8, default='1', choices=DATASCOPE_CHOICES, verbose_name="权限范围", )
remark = TextField(verbose_name="备注", help_text="备注", null=True, blank=True) remark = TextField(verbose_name="备注", help_text="备注", null=True, blank=True)
dept = ManyToManyField(to='permission.Dept', verbose_name='数据权限-关联部门', db_constraint=False) dept = ManyToManyField(to='permission.Dept', verbose_name='数据权限-关联部门', db_constraint=False)
menu = ManyToManyField(to='permission.Menu', verbose_name='关联菜单权限', db_constraint=False) menu = ManyToManyField(to='permission.Menu', verbose_name='关联菜单权限', db_constraint=False)

View File

@ -5,7 +5,7 @@ from django.contrib.auth.models import UserManager, AbstractUser
from django.core.cache import cache from django.core.cache import cache
from django.db.models import IntegerField, ForeignKey, CharField, TextField, ManyToManyField, CASCADE from django.db.models import IntegerField, ForeignKey, CharField, TextField, ManyToManyField, CASCADE
from ...op_drf.models import CoreModel from apps.vadmin.op_drf.models import CoreModel
class UserProfile(AbstractUser, CoreModel): class UserProfile(AbstractUser, CoreModel):
@ -25,11 +25,13 @@ class UserProfile(AbstractUser, CoreModel):
user_type = IntegerField(default=0, verbose_name="用户类型") user_type = IntegerField(default=0, verbose_name="用户类型")
post = ManyToManyField(to='permission.Post', verbose_name='关联岗位', db_constraint=False) post = ManyToManyField(to='permission.Post', verbose_name='关联岗位', db_constraint=False)
role = ManyToManyField(to='permission.Role', verbose_name='关联角色', db_constraint=False) role = ManyToManyField(to='permission.Role', verbose_name='关联角色', db_constraint=False)
dept = ForeignKey(to='permission.Dept', verbose_name='归属部门', on_delete=CASCADE, db_constraint=False, null=True, blank=True) dept = ForeignKey(to='permission.Dept', verbose_name='归属部门', on_delete=CASCADE, db_constraint=False, null=True,
blank=True)
@property @property
def get_user_interface_dict(self): def get_user_interface_dict(self):
interface_dict = cache.get(f'permission_interface_dict_{self.username}', {}) interface_dict = cache.get(f'permission_interface_dict_{self.username}', {}) if \
getattr(settings, "REDIS_ENABLE", False) else {}
if not interface_dict: if not interface_dict:
for ele in self.role.filter(status='1', menu__status='1').values('menu__interface_path', for ele in self.role.filter(status='1', menu__status='1').values('menu__interface_path',
'menu__interface_method').distinct(): 'menu__interface_method').distinct():
@ -40,7 +42,8 @@ class UserProfile(AbstractUser, CoreModel):
interface_dict[ele.get('menu__interface_method', '')].append(interface_path) interface_dict[ele.get('menu__interface_method', '')].append(interface_path)
else: else:
interface_dict[ele.get('menu__interface_method', '')] = [interface_path] interface_dict[ele.get('menu__interface_method', '')] = [interface_path]
cache.set(f'permission_interface_dict_{self.username}', interface_dict, 84600) if getattr(settings, "REDIS_ENABLE", False):
cache.set(f'permission_interface_dict_{self.username}', interface_dict, 84600)
return interface_dict return interface_dict
@property @property
@ -49,6 +52,7 @@ class UserProfile(AbstractUser, CoreModel):
清空缓存中的接口列表 清空缓存中的接口列表
:return: :return:
""" """
if not getattr(settings, "REDIS_ENABLE", False): return ""
return cache.delete(f'permission_interface_dict_{self.username}') return cache.delete(f'permission_interface_dict_{self.username}')
class Meta: class Meta:

View File

@ -10,8 +10,8 @@ from rest_framework.permissions import (BasePermission,
from rest_framework.request import Request from rest_framework.request import Request
from rest_framework.views import APIView from rest_framework.views import APIView
from .models import Dept from apps.vadmin.permission.models import Dept
from ..utils.model_util import get_dept from apps.vadmin.utils.model_util import get_dept
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
User = get_user_model() User = get_user_model()

View File

@ -1,10 +1,10 @@
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from rest_framework import serializers from rest_framework import serializers
from ..op_drf.serializers import CustomModelSerializer from apps.vadmin.op_drf.serializers import CustomModelSerializer
from ..op_drf.validator import CustomUniqueValidator from apps.vadmin.op_drf.validator import CustomUniqueValidator
from ..permission.models import Menu, Dept, Post, Role from apps.vadmin.permission.models import Menu, Dept, Post, Role
from ..system.models import MessagePush from apps.vadmin.system.models import MessagePush
UserProfile = get_user_model() UserProfile = get_user_model()

View File

@ -3,8 +3,8 @@ import logging
from captcha.models import CaptchaStore from captcha.models import CaptchaStore
from ..utils.decorators import BaseCeleryApp from apps.vadmin.utils.decorators import BaseCeleryApp
from ..utils.response import SuccessResponse from apps.vadmin.op_drf.response import SuccessResponse
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@BaseCeleryApp(name='apps.vadmin.permission.tasks.clear_invalid_captcha') @BaseCeleryApp(name='apps.vadmin.permission.tasks.clear_invalid_captcha')

View File

@ -1,7 +1,7 @@
from django.urls import re_path from django.urls import re_path
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
from ..permission.views import MenuModelViewSet, DeptModelViewSet, PostModelViewSet, RoleModelViewSet, \ from apps.vadmin.permission.views import MenuModelViewSet, DeptModelViewSet, PostModelViewSet, RoleModelViewSet, \
UserProfileModelViewSet UserProfileModelViewSet
router = DefaultRouter() router = DefaultRouter()

View File

@ -2,18 +2,18 @@ from django.contrib.auth import authenticate, get_user_model
from rest_framework.request import Request from rest_framework.request import Request
from rest_framework.views import APIView from rest_framework.views import APIView
from .permissions import CommonPermission, DeptDestroyPermission from apps.vadmin.op_drf.response import SuccessResponse, ErrorResponse
from ..op_drf.filters import DataLevelPermissionsFilter from apps.vadmin.permission.permissions import CommonPermission, DeptDestroyPermission
from ..op_drf.viewsets import CustomModelViewSet from apps.vadmin.op_drf.filters import DataLevelPermissionsFilter
from ..permission.filters import MenuFilter, DeptFilter, PostFilter, RoleFilter, UserProfileFilter from apps.vadmin.op_drf.viewsets import CustomModelViewSet
from ..permission.models import Role, Menu, Dept, Post from apps.vadmin.permission.filters import MenuFilter, DeptFilter, PostFilter, RoleFilter, UserProfileFilter
from ..permission.serializers import UserProfileSerializer, MenuSerializer, RoleSerializer, \ from apps.vadmin.permission.models import Role, Menu, Dept, Post
from apps.vadmin.permission.serializers import UserProfileSerializer, MenuSerializer, RoleSerializer, \
MenuCreateUpdateSerializer, DeptSerializer, DeptCreateUpdateSerializer, PostSerializer, PostCreateUpdateSerializer, \ MenuCreateUpdateSerializer, DeptSerializer, DeptCreateUpdateSerializer, PostSerializer, PostCreateUpdateSerializer, \
RoleCreateUpdateSerializer, DeptTreeSerializer, MenuTreeSerializer, UserProfileCreateUpdateSerializer, \ RoleCreateUpdateSerializer, DeptTreeSerializer, MenuTreeSerializer, UserProfileCreateUpdateSerializer, \
PostSimpleSerializer, RoleSimpleSerializer, ExportUserProfileSerializer, ExportRoleSerializer, ExportPostSerializer, \ PostSimpleSerializer, RoleSimpleSerializer, ExportUserProfileSerializer, ExportRoleSerializer, ExportPostSerializer, \
UserProfileImportSerializer UserProfileImportSerializer
from ..system.models import DictDetails from apps.vadmin.system.models import DictDetails
from ..utils.response import SuccessResponse, ErrorResponse
UserProfile = get_user_model() UserProfile = get_user_model()

View File

@ -25,18 +25,18 @@
-- Records of permission_dept -- Records of permission_dept
-- ---------------------------- -- ----------------------------
INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (1, '', 'admin', '2021-02-27 07:26:20.518695', '2021-02-27 15:18:39.000000', 'XX创新科技', 1, NULL, '15888888888', 'cxkj@qq.com', '1', 1,NULL, 1); INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (1, '', 'admin', '2021-02-27 07:26:20.518695', '2021-02-27 15:18:39.000000', 'XX创新科技', 1, NULL, '15888888888', 'cxkj@qq.com', '1', 1,NULL, 1);
INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (2, '', 'admin', '2021-02-27 07:25:09.041807', '2021-02-27 07:25:09.041853', '北京总公司', 1, NULL, NULL, NULL, '1', 1, 1, 1); INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (2, '', 'admin', '2021-02-27 07:25:09.041807', '2021-02-27 07:25:09.041853', '北京总公司', 1, NULL, NULL, NULL, '1', 1, 1, 2);
INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (3, '', 'admin', '2021-02-27 07:26:14.418894', '2021-02-27 07:25:25.195849', '上海分公司', 2, NULL, NULL, NULL, '1', 1, 1, 1); INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (3, '', 'admin', '2021-02-27 07:26:14.418894', '2021-02-27 07:25:25.195849', '上海分公司', 2, NULL, NULL, NULL, '1', 1, 1, 3);
INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (4, '', 'admin', '2021-02-27 07:26:01.993095', '2021-02-27 07:25:38.904644', '杭州分公司', 4, NULL, NULL, NULL, '1', 1, 1, 1); INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (4, '', 'admin', '2021-02-27 07:26:01.993095', '2021-02-27 07:25:38.904644', '杭州分公司', 4, NULL, NULL, NULL, '1', 1, 1, 4);
INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (5, '', 'admin', '2021-02-27 07:28:15.854856', '2021-02-27 07:25:54.379081', '深圳分公司', 3, NULL, NULL, NULL, '0', 1, 1, 1); INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (5, '', 'admin', '2021-02-27 07:28:15.854856', '2021-02-27 07:25:54.379081', '深圳分公司', 3, NULL, NULL, NULL, '0', 1, 1, 5);
INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (6, '', 'admin', '2021-02-27 07:26:37.589741', '2021-02-27 07:26:37.589780', '研发部门', 1, NULL, NULL, NULL, '1', 1, 2, 1); INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (6, '', 'admin', '2021-02-27 07:26:37.589741', '2021-02-27 07:26:37.589780', '研发部门', 1, NULL, NULL, NULL, '1', 1, 2, 6);
INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (7, '', 'admin', '2021-02-27 07:26:47.781467', '2021-02-27 07:26:47.781511', '市场部门', 2, NULL, NULL, NULL, '1', 1, 2, 1); INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (7, '', 'admin', '2021-02-27 07:26:47.781467', '2021-02-27 07:26:47.781511', '市场部门', 2, NULL, NULL, NULL, '1', 1, 2, 7);
INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (8, '', 'admin', '2021-02-27 07:26:57.059878', '2021-02-27 07:26:57.059923', '测试部门', 3, NULL, NULL, NULL, '1', 1, 2, 1); INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (8, '', 'admin', '2021-02-27 07:26:57.059878', '2021-02-27 07:26:57.059923', '测试部门', 3, NULL, NULL, NULL, '1', 1, 2, 8);
INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (9, '', 'admin', '2021-02-27 07:27:06.088134', '2021-02-27 07:27:06.088178', '财务部门', 4, NULL, NULL, NULL, '1', 1, 2, 1); INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (9, '', 'admin', '2021-02-27 07:27:06.088134', '2021-02-27 07:27:06.088178', '财务部门', 4, NULL, NULL, NULL, '1', 1, 2, 9);
INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (10, '', 'admin', '2021-02-27 07:27:15.287731', '2021-02-27 07:27:15.287772', '运维部门', 5, NULL, NULL, NULL, '1', 1, 2, 1); INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (10, '', 'admin', '2021-02-27 07:27:15.287731', '2021-02-27 07:27:15.287772', '运维部门', 5, NULL, NULL, NULL, '1', 1, 2, 10);
INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (11, '', 'admin', '2021-02-27 07:27:24.834369', '2021-02-27 07:27:24.834413', '市场部门', 1, NULL, NULL, NULL, '1', 1, 3, 1); INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (11, '', 'admin', '2021-02-27 07:27:24.834369', '2021-02-27 07:27:24.834413', '市场部门', 1, NULL, NULL, NULL, '1', 1, 3, 11);
INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (12, '', 'admin', '2021-02-27 07:27:34.161898', '2021-02-27 07:27:34.161944', '财务部门', 2, NULL, NULL, NULL, '1', 1, 3, 1); INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (12, '', 'admin', '2021-02-27 07:27:34.161898', '2021-02-27 07:27:34.161944', '财务部门', 2, NULL, NULL, NULL, '1', 1, 3, 12);
INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (13, '', 'admin', '2021-02-27 07:28:20.474025', '2021-02-27 07:27:47.938676', '市场部门', 1, NULL, NULL, NULL, '0', 1, 5, 1); INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (13, '', 'admin', '2021-02-27 07:28:20.474025', '2021-02-27 07:27:47.938676', '市场部门', 1, NULL, NULL, NULL, '0', 1, 5, 13);
INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (14, '', 'admin', '2021-02-27 07:28:23.394188', '2021-02-27 07:27:53.794331', '财务部门', 2, NULL, NULL, NULL, '0', 1, 5, 1); INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (14, '', 'admin', '2021-02-27 07:28:23.394188', '2021-02-27 07:27:53.794331', '财务部门', 2, NULL, NULL, NULL, '0', 1, 5, 14);
INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (15, '', 'admin', '2021-02-27 07:28:03.368497', '2021-02-27 07:28:03.368540', '市场部门', 1, NULL, NULL, NULL, '1', 1, 4, 1); INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (15, '', 'admin', '2021-02-27 07:28:03.368497', '2021-02-27 07:28:03.368540', '市场部门', 1, NULL, NULL, NULL, '1', 1, 4, 15);
INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (16, '', 'admin', '2021-02-27 07:28:10.532392', '2021-02-27 07:28:10.532436', '财务部门', 2, NULL, NULL, NULL, '1', 1, 4, 1); INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (16, '', 'admin', '2021-02-27 07:28:10.532392', '2021-02-27 07:28:10.532436', '财务部门', 2, NULL, NULL, NULL, '1', 1, 4, 16);

View File

@ -97,9 +97,9 @@ INSERT INTO `permission_menu` (id, description, modifier, update_datetime, creat
INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (64, '', 'admin', '2021-03-16 14:31:27.618230', '2021-03-16 14:31:01.026470', '2', NULL, '登录日志查询', 1, '1', NULL, NULL, '/admin/system/logininfor/', 'GET', 'admin:system:logininfor:get', '1', '1', '1', 1, 62, '1'); INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (64, '', 'admin', '2021-03-16 14:31:27.618230', '2021-03-16 14:31:01.026470', '2', NULL, '登录日志查询', 1, '1', NULL, NULL, '/admin/system/logininfor/', 'GET', 'admin:system:logininfor:get', '1', '1', '1', 1, 62, '1');
INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (65, '', 'admin', '2021-03-16 14:31:44.112525', '2021-03-16 14:31:44.112572', '2', NULL, '操作日志查询', 1, '1', NULL, NULL, '/admin/system/operlog/', 'GET', 'admin:system:operlog:get', '1', '1', '1', 1, 63, '1'); INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (65, '', 'admin', '2021-03-16 14:31:44.112525', '2021-03-16 14:31:44.112572', '2', NULL, '操作日志查询', 1, '1', NULL, NULL, '/admin/system/operlog/', 'GET', 'admin:system:operlog:get', '1', '1', '1', 1, 63, '1');
INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (66, '', 'admin', '2021-03-26 00:47:50.628148', '2021-03-16 14:33:05.483003', '0', 'monitor', '系统监控', 3, '1', '/monitor', NULL, NULL, 'GET', NULL, '1', '1', '1', 1, NULL, '1'); INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (66, '', 'admin', '2021-03-26 00:47:50.628148', '2021-03-16 14:33:05.483003', '0', 'monitor', '系统监控', 3, '1', '/monitor', NULL, NULL, 'GET', NULL, '1', '1', '1', 1, NULL, '1');
INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (67, '', 'admin', '2021-03-16 14:49:59.260322', '2021-03-16 14:34:59.165065', '1', 'online', '在线用户', 1, '1', 'online', 'vadmin/monitor/online/index', '', 'GET', '', '1', '1', '1', 1, 66, '1'); -- INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (67, '', 'admin', '2021-03-16 14:49:59.260322', '2021-03-16 14:34:59.165065', '1', 'online', '在线用户', 1, '1', 'online', 'vadmin/monitor/online/index', '', 'GET', '', '1', '1', '1', 1, 66, '1');
INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (68, '', 'admin', '2021-03-16 14:36:00.989981', '2021-03-16 14:35:50.894454', '2', NULL, '在线用户查询', 1, '1', NULL, NULL, '/admin/monitor/online/', 'GET', 'admin:monitor:online:get', '1', '1', '1', 1, 67, '1'); -- INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (68, '', 'admin', '2021-03-16 14:36:00.989981', '2021-03-16 14:35:50.894454', '2', NULL, '在线用户查询', 1, '1', NULL, NULL, '/admin/monitor/online/', 'GET', 'admin:monitor:online:get', '1', '1', '1', 1, 67, '1');
INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (69, '', 'admin', '2021-03-16 14:37:10.577186', '2021-03-16 14:37:10.577231', '2', NULL, '用户强退', 2, '1', NULL, NULL, '/admin/monitor/online/{id}/', 'PUT', 'admin:monitor:online:{id}:put', '1', '1', '1', 1, 67, '1'); -- INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (69, '', 'admin', '2021-03-16 14:37:10.577186', '2021-03-16 14:37:10.577231', '2', NULL, '用户强退', 2, '1', NULL, NULL, '/admin/monitor/online/{id}/', 'PUT', 'admin:monitor:online:{id}:put', '1', '1', '1', 1, 67, '1');
INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (70, '', 'admin', '2021-03-26 00:49:56.410579', '2021-03-16 14:45:51.507961', '1', 'job', '定时任务', 2, '1', 'celery', 'vadmin/monitor/celery/index', '', 'GET', NULL, '1', '1', '1', 1, 66, '1'); INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (70, '', 'admin', '2021-03-26 00:49:56.410579', '2021-03-16 14:45:51.507961', '1', 'job', '定时任务', 2, '1', 'celery', 'vadmin/monitor/celery/index', '', 'GET', NULL, '1', '1', '1', 1, 66, '1');
INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (71, '', 'admin', '2021-03-16 15:04:11.799260', '2021-03-16 14:59:53.619219', '2', NULL, '任务查询', 1, '1', NULL, NULL, '/admin/monitor/celery/', 'GET', 'admin:monitor:celery:get', '1', '1', '1', 1, 70, '1'); INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (71, '', 'admin', '2021-03-16 15:04:11.799260', '2021-03-16 14:59:53.619219', '2', NULL, '任务查询', 1, '1', NULL, NULL, '/admin/monitor/celery/', 'GET', 'admin:monitor:celery:get', '1', '1', '1', 1, 70, '1');
INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (72, '', 'admin', '2021-03-16 15:04:06.645135', '2021-03-16 15:00:21.809600', '2', NULL, '任务新增', 2, '1', NULL, NULL, '/admin/monitor/celery/', 'POST', 'admin:monitor:celery:post', '1', '1', '1', 1, 70, '1'); INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (72, '', 'admin', '2021-03-16 15:04:06.645135', '2021-03-16 15:00:21.809600', '2', NULL, '任务新增', 2, '1', NULL, NULL, '/admin/monitor/celery/', 'POST', 'admin:monitor:celery:post', '1', '1', '1', 1, 70, '1');

View File

@ -103,6 +103,16 @@ INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (7, 1, 7);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (8, 1, 8); INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (8, 1, 8);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (9, 1, 9); INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (9, 1, 9);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (10, 1, 10); INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (10, 1, 10);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (11, 2, 1);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (12, 2, 2);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (13, 2, 3);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (14, 2, 4);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (15, 2, 5);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (16, 2, 6);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (17, 2, 7);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (18, 2, 8);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (19, 2, 9);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (20, 2, 10);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (21, 1, 11); INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (21, 1, 11);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (22, 1, 13); INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (22, 1, 13);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (23, 1, 14); INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (23, 1, 14);
@ -178,13 +188,5 @@ INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (95, 1, 87);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (96, 1, 88); INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (96, 1, 88);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (97, 1, 90); INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (97, 1, 90);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (98, 1, 91); INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (98, 1, 91);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (11, 2, 1); INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (99, 2, 97);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (12, 2, 2); INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (100, 1, 97);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (13, 2, 3);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (14, 2, 4);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (15, 2, 5);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (16, 2, 6);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (17, 2, 7);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (18, 2, 8);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (19, 2, 9);
INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (20, 2, 10);

View File

@ -2,5 +2,5 @@ from django.apps import AppConfig
class SystemConfig(AppConfig): class SystemConfig(AppConfig):
name = 'vadmin.system' name = 'apps.vadmin.system'
verbose_name = "系统管理" verbose_name = "系统管理"

View File

@ -1,7 +1,7 @@
import django_filters import django_filters
from .models import LoginInfor, OperationLog, CeleryLog from apps.vadmin.system.models import DictDetails, DictData, ConfigSettings, MessagePush, SaveFile
from ..system.models import DictDetails, DictData, ConfigSettings, MessagePush, SaveFile from apps.vadmin.system.models import LoginInfor, OperationLog, CeleryLog
class DictDataFilter(django_filters.rest_framework.FilterSet): class DictDataFilter(django_filters.rest_framework.FilterSet):

View File

@ -1,10 +1,9 @@
from ..models.config_settings import ConfigSettings from apps.vadmin.system.models.celery_log import CeleryLog
from ..models.dict_data import DictData from apps.vadmin.system.models.config_settings import ConfigSettings
from ..models.dict_details import DictDetails from apps.vadmin.system.models.dict_data import DictData
from ..models.save_file import SaveFile from apps.vadmin.system.models.dict_details import DictDetails
from ..models.message_push import MessagePush from apps.vadmin.system.models.logininfor import LoginInfor
from ..models.message_push import MessagePushUser from apps.vadmin.system.models.message_push import MessagePush
from ..models.logininfor import LoginInfor from apps.vadmin.system.models.message_push import MessagePushUser
from ..models.operation_log import OperationLog from apps.vadmin.system.models.operation_log import OperationLog
from ..models.celery_log import CeleryLog from apps.vadmin.system.models.save_file import SaveFile

View File

@ -1,6 +1,6 @@
from django.db.models import CharField, BooleanField, TextField from django.db.models import CharField, BooleanField, TextField
from ...op_drf.models import CoreModel from apps.vadmin.op_drf.models import CoreModel
class CeleryLog(CoreModel): class CeleryLog(CoreModel):

View File

@ -1,6 +1,6 @@
from django.db.models import CharField, ForeignKey, BooleanField, CASCADE from django.db.models import CharField, ForeignKey, BooleanField, CASCADE
from ...op_drf.models import CoreModel from apps.vadmin.op_drf.models import CoreModel
class ConfigSettings(CoreModel): class ConfigSettings(CoreModel):

View File

@ -1,6 +1,6 @@
from django.db.models import TextField, CharField,ForeignKey from django.db.models import TextField, CharField,ForeignKey
from ...op_drf.models import CoreModel from apps.vadmin.op_drf.models import CoreModel
class DictData(CoreModel): class DictData(CoreModel):

View File

@ -1,6 +1,6 @@
from django.db.models import CharField, ForeignKey, BooleanField, CASCADE from django.db.models import CharField, ForeignKey, BooleanField, CASCADE
from ...op_drf.models import CoreModel from apps.vadmin.op_drf.models import CoreModel
class DictDetails(CoreModel): class DictDetails(CoreModel):

View File

@ -1,6 +1,6 @@
from django.db.models import CharField, BooleanField, TextField from django.db.models import CharField, BooleanField, TextField
from ...op_drf.models import CoreModel from apps.vadmin.op_drf.models import CoreModel
class LoginInfor(CoreModel): class LoginInfor(CoreModel):

View File

@ -2,8 +2,8 @@ from django.conf import settings
from django.db import models from django.db import models
from django.db.models import * from django.db.models import *
from ...op_drf.fields import UpdateDateTimeField, CreateDateTimeField from apps.vadmin.op_drf.fields import UpdateDateTimeField, CreateDateTimeField
from ...op_drf.models import CoreModel from apps.vadmin.op_drf.models import CoreModel
""" """
消息通知模型 消息通知模型

View File

@ -1,6 +1,6 @@
from django.db.models import TextField, CharField, BooleanField from django.db.models import TextField, CharField, BooleanField
from ...op_drf.models import CoreModel from apps.vadmin.op_drf.models import CoreModel
class OperationLog(CoreModel): class OperationLog(CoreModel):
@ -12,7 +12,7 @@ class OperationLog(CoreModel):
request_ip = CharField(max_length=32, verbose_name="请求ip地址", null=True, blank=True) request_ip = CharField(max_length=32, verbose_name="请求ip地址", null=True, blank=True)
request_browser = CharField(max_length=64, verbose_name="请求浏览器", null=True, blank=True) request_browser = CharField(max_length=64, verbose_name="请求浏览器", null=True, blank=True)
response_code = CharField(max_length=32, verbose_name="响应状态码", null=True, blank=True) response_code = CharField(max_length=32, verbose_name="响应状态码", null=True, blank=True)
request_location = CharField(max_length=64,verbose_name="操作地点", null=True, blank=True) request_location = CharField(max_length=64, verbose_name="操作地点", null=True, blank=True)
request_os = CharField(max_length=64, verbose_name="操作系统", null=True, blank=True) request_os = CharField(max_length=64, verbose_name="操作系统", null=True, blank=True)
json_result = TextField(verbose_name="返回信息", null=True, blank=True) json_result = TextField(verbose_name="返回信息", null=True, blank=True)
status = BooleanField(default=False, verbose_name="响应状态") status = BooleanField(default=False, verbose_name="响应状态")

View File

@ -1,10 +1,10 @@
import os import os
import uuid import uuid
from django.db.models import CharField, FileField,BooleanField from django.db.models import CharField, FileField, BooleanField
from django.utils import timezone from django.utils import timezone
from ...op_drf.models import CoreModel from apps.vadmin.op_drf.models import CoreModel
def files_path(instance, filename): def files_path(instance, filename):

View File

@ -1,9 +1,10 @@
from django.core.cache import cache from django.core.cache import cache
from rest_framework import serializers from rest_framework import serializers
from .models import LoginInfor, OperationLog, CeleryLog from application import settings
from ..op_drf.serializers import CustomModelSerializer from apps.vadmin.op_drf.serializers import CustomModelSerializer
from ..system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush, MessagePushUser from apps.vadmin.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush, MessagePushUser
from apps.vadmin.system.models import LoginInfor, OperationLog, CeleryLog
# ================================================= # # ================================================= #
@ -81,7 +82,8 @@ class DictDetailsCreateUpdateSerializer(CustomModelSerializer):
""" """
def save(self, **kwargs): def save(self, **kwargs):
cache.delete('system_dict_details') if getattr(settings, "REDIS_ENABLE", False):
cache.delete('system_dict_details')
return super().save(**kwargs) return super().save(**kwargs)
class Meta: class Meta:
@ -120,7 +122,8 @@ class ConfigSettingsCreateUpdateSerializer(CustomModelSerializer):
""" """
def save(self, **kwargs): def save(self, **kwargs):
cache.delete('system_configKey') if getattr(settings, "REDIS_ENABLE", False):
cache.delete('system_configKey')
return super().save(**kwargs) return super().save(**kwargs)
class Meta: class Meta:
@ -147,7 +150,10 @@ class SaveFileCreateUpdateSerializer(CustomModelSerializer):
""" """
文件管理 创建/更新时的列化器 文件管理 创建/更新时的列化器
""" """
file_url = serializers.CharField(source='file.url', read_only=True) file_url = serializers.SerializerMethodField(read_only=True)
def get_file_url(self, obj: SaveFile):
return getattr(obj.file, "url", obj.file) if hasattr(obj, "file") else ""
def save(self, **kwargs): def save(self, **kwargs):
files = self.context.get('request').FILES.get('file') files = self.context.get('request').FILES.get('file')

View File

@ -1,7 +1,7 @@
from django.urls import re_path from django.urls import re_path
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
from ..system.views import DictDataModelViewSet, DictDetailsModelViewSet, \ from apps.vadmin.system.views import DictDataModelViewSet, DictDetailsModelViewSet, \
ConfigSettingsModelViewSet, SaveFileModelViewSet, MessagePushModelViewSet, LoginInforModelViewSet, \ ConfigSettingsModelViewSet, SaveFileModelViewSet, MessagePushModelViewSet, LoginInforModelViewSet, \
OperationLogModelViewSet, CeleryLogModelViewSet, SystemInfoApiView OperationLogModelViewSet, CeleryLogModelViewSet, SystemInfoApiView

View File

@ -6,25 +6,25 @@ from django.db.models import Q
from rest_framework.request import Request from rest_framework.request import Request
from rest_framework.views import APIView from rest_framework.views import APIView
from .models import LoginInfor, OperationLog, CeleryLog from apps.vadmin.op_drf.filters import DataLevelPermissionsFilter
from ..op_drf.filters import DataLevelPermissionsFilter from apps.vadmin.op_drf.response import SuccessResponse
from ..op_drf.viewsets import CustomModelViewSet from apps.vadmin.op_drf.viewsets import CustomModelViewSet
from ..permission.permissions import CommonPermission from apps.vadmin.permission.permissions import CommonPermission
from ..system.filters import DictDetailsFilter, DictDataFilter, ConfigSettingsFilter, MessagePushFilter, \ from apps.vadmin.system.filters import DictDetailsFilter, DictDataFilter, ConfigSettingsFilter, MessagePushFilter, \
SaveFileFilter, LoginInforFilter, OperationLogFilter, CeleryLogFilter SaveFileFilter, LoginInforFilter, OperationLogFilter, CeleryLogFilter
from ..system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush from apps.vadmin.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush
from ..system.models import MessagePushUser from apps.vadmin.system.models import LoginInfor, OperationLog, CeleryLog
from ..system.serializers import DictDataSerializer, DictDataCreateUpdateSerializer, DictDetailsSerializer, \ from apps.vadmin.system.models import MessagePushUser
from apps.vadmin.system.serializers import DictDataSerializer, DictDataCreateUpdateSerializer, DictDetailsSerializer, \
DictDetailsCreateUpdateSerializer, ConfigSettingsSerializer, \ DictDetailsCreateUpdateSerializer, ConfigSettingsSerializer, \
ConfigSettingsCreateUpdateSerializer, SaveFileSerializer, SaveFileCreateUpdateSerializer, \ ConfigSettingsCreateUpdateSerializer, SaveFileSerializer, SaveFileCreateUpdateSerializer, \
ExportConfigSettingsSerializer, ExportDictDataSerializer, ExportDictDetailsSerializer, \ ExportConfigSettingsSerializer, ExportDictDataSerializer, ExportDictDetailsSerializer, \
MessagePushSerializer, MessagePushCreateUpdateSerializer, ExportMessagePushSerializer, LoginInforSerializer, \ MessagePushSerializer, MessagePushCreateUpdateSerializer, ExportMessagePushSerializer, LoginInforSerializer, \
OperationLogSerializer, ExportOperationLogSerializer, ExportLoginInforSerializer, CeleryLogSerializer, \ OperationLogSerializer, ExportOperationLogSerializer, ExportLoginInforSerializer, CeleryLogSerializer, \
ExportCeleryLogSerializer ExportCeleryLogSerializer
from ..utils.export_excel import export_excel_save_model from apps.vadmin.utils.export_excel import export_excel_save_model
from ..utils.file_util import get_all_files, remove_empty_dir, delete_files from apps.vadmin.utils.file_util import get_all_files, remove_empty_dir, delete_files
from ..utils.response import SuccessResponse from apps.vadmin.utils.system_info_utils import get_memory_used_percent, get_cpu_used_percent, get_disk_used_percent
from ..utils.system_info_utils import get_memory_used_percent, get_cpu_used_percent, get_disk_used_percent
class DictDataModelViewSet(CustomModelViewSet): class DictDataModelViewSet(CustomModelViewSet):
@ -72,7 +72,7 @@ class DictDetailsModelViewSet(CustomModelViewSet):
:param kwargs: :param kwargs:
:return: :return:
""" """
dict_details_dic = cache.get('system_dict_details', {}) dict_details_dic = cache.get('system_dict_details', {}) if getattr(settings, "REDIS_ENABLE", False) else {}
if not dict_details_dic: if not dict_details_dic:
queryset = self.filter_queryset(self.get_queryset()) queryset = self.filter_queryset(self.get_queryset())
queryset_dic = queryset.order_by('sort').values('dict_data__dictType', 'dictLabel', 'dictValue', queryset_dic = queryset.order_by('sort').values('dict_data__dictType', 'dictLabel', 'dictValue',
@ -83,7 +83,8 @@ class DictDetailsModelViewSet(CustomModelViewSet):
dict_details_dic[dictType].append(ele) dict_details_dic[dictType].append(ele)
else: else:
dict_details_dic[dictType] = [ele] dict_details_dic[dictType] = [ele]
cache.set('system_dict_details', dict_details_dic, 84600) if getattr(settings, "REDIS_ENABLE", False):
cache.set('system_dict_details', dict_details_dic, 84600)
return SuccessResponse(dict_details_dic.get(kwargs.get('pk'), [])) return SuccessResponse(dict_details_dic.get(kwargs.get('pk'), []))
def clearCache(self, request: Request, *args, **kwargs): def clearCache(self, request: Request, *args, **kwargs):
@ -94,7 +95,8 @@ class DictDetailsModelViewSet(CustomModelViewSet):
:param kwargs: :param kwargs:
:return: :return:
""" """
cache.delete('system_dict_details') if getattr(settings, "REDIS_ENABLE", False):
cache.delete('system_dict_details')
return SuccessResponse(msg='清理成功!') return SuccessResponse(msg='清理成功!')
def export(self, request: Request, *args, **kwargs): def export(self, request: Request, *args, **kwargs):
@ -137,12 +139,13 @@ class ConfigSettingsModelViewSet(CustomModelViewSet):
:param kwargs: :param kwargs:
:return: :return:
""" """
config_key_dic = cache.get('system_configKey') config_key_dic = cache.get('system_configKey') if getattr(settings, "REDIS_ENABLE", False) else ""
if not config_key_dic: if not config_key_dic:
queryset = self.filter_queryset(self.get_queryset()) queryset = self.filter_queryset(self.get_queryset())
config_key_dic = {ele.get('configKey'): ele.get('configValue') for ele in config_key_dic = {ele.get('configKey'): ele.get('configValue') for ele in
queryset.values('configValue', 'configKey')} queryset.values('configValue', 'configKey')}
cache.set('system_configKey', config_key_dic, 84600) if getattr(settings, "REDIS_ENABLE", False):
cache.set('system_configKey', config_key_dic, 84600)
return SuccessResponse(msg=config_key_dic.get(kwargs.get('pk'), '')) return SuccessResponse(msg=config_key_dic.get(kwargs.get('pk'), ''))
def clearCache(self, request: Request, *args, **kwargs): def clearCache(self, request: Request, *args, **kwargs):
@ -153,7 +156,8 @@ class ConfigSettingsModelViewSet(CustomModelViewSet):
:param kwargs: :param kwargs:
:return: :return:
""" """
cache.delete('system_configKey') if getattr(settings, "REDIS_ENABLE", False):
cache.delete('system_configKey')
return SuccessResponse(msg='清理成功!') return SuccessResponse(msg='清理成功!')
@ -173,6 +177,13 @@ class SaveFileModelViewSet(CustomModelViewSet):
search_fields = ('configName',) search_fields = ('configName',)
ordering = '-create_datetime' # 默认排序 ordering = '-create_datetime' # 默认排序
def create(self, request: Request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return SuccessResponse(serializer.data, status=201, headers=headers)
def clearsavefile(self, request: Request, *args, **kwargs): def clearsavefile(self, request: Request, *args, **kwargs):
""" """
清理废弃文件 清理废弃文件
@ -185,8 +196,8 @@ class SaveFileModelViewSet(CustomModelViewSet):
file_list = get_all_files(os.path.join(settings.MEDIA_ROOT, 'system')) file_list = get_all_files(os.path.join(settings.MEDIA_ROOT, 'system'))
queryset_files = [os.path.join(os.path.join(settings.MEDIA_ROOT) + os.sep, ele) for ele in queryset_files = [os.path.join(os.path.join(settings.MEDIA_ROOT) + os.sep, ele) for ele in
list(self.get_queryset().values_list('file', flat=True))] list(self.get_queryset().values_list('file', flat=True))]
queryset_files_dir = set(map(lambda absdir: os.path.abspath(absdir), queryset_files))
delete_list = list(set(file_list) - set(queryset_files)) delete_list = list(set(file_list) - queryset_files_dir)
# 进行文件删除操作 # 进行文件删除操作
delete_files(delete_list) delete_files(delete_list)
# 递归删除空文件 # 递归删除空文件

View File

@ -2,5 +2,5 @@ from django.apps import AppConfig
class TemplateConfig(AppConfig): class TemplateConfig(AppConfig):
name = 'vadmin.template' name = 'apps.vadmin.template'
verbose_name = "模板App" verbose_name = "模板App"

View File

@ -22,9 +22,9 @@ from django.urls import re_path, include
from rest_framework.documentation import include_docs_urls from rest_framework.documentation import include_docs_urls
from rest_framework.views import APIView from rest_framework.views import APIView
from .permission.views import GetUserProfileView, GetRouters from apps.vadmin.permission.views import GetUserProfileView, GetRouters
from .utils.login import LoginView, LogoutView from apps.vadmin.utils.login import LoginView, LogoutView
from .utils.response import SuccessResponse from apps.vadmin.op_drf.response import SuccessResponse
class CaptchaRefresh(APIView): class CaptchaRefresh(APIView):
@ -44,7 +44,6 @@ class CaptchaRefresh(APIView):
urlpatterns = [ urlpatterns = [
re_path('api-token-auth/', LoginView.as_view(), name='api_token_auth'), re_path('api-token-auth/', LoginView.as_view(), name='api_token_auth'),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'docs/', include_docs_urls(title='接口文档')),
re_path(r'^login/$', LoginView.as_view()), re_path(r'^login/$', LoginView.as_view()),
re_path(r'^logout/$', LogoutView.as_view()), re_path(r'^logout/$', LogoutView.as_view()),
re_path(r'^getInfo/$', GetUserProfileView.as_view()), re_path(r'^getInfo/$', GetUserProfileView.as_view()),

View File

@ -12,8 +12,8 @@ from django.utils.translation import ugettext as _
from rest_framework import exceptions from rest_framework import exceptions
from rest_framework_jwt.utils import jwt_decode_handler from rest_framework_jwt.utils import jwt_decode_handler
from .jwt_util import jwt_get_session_id from apps.vadmin.permission.models.users import UserProfile
from ..permission.models.users import UserProfile from apps.vadmin.utils.jwt_util import jwt_get_session_id
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
User = get_user_model() User = get_user_model()
@ -92,7 +92,7 @@ class RedisOpAuthJwtAuthentication(OpAuthJwtAuthentication):
def authenticate(self, request): def authenticate(self, request):
res = super().authenticate(request) res = super().authenticate(request)
if res: if res and getattr(settings, "REDIS_ENABLE", False):
user, token = res user, token = res
session_id = jwt_get_session_id(token) session_id = jwt_get_session_id(token)
key = f"{self.prefix}_{session_id}_{user.username}" key = f"{self.prefix}_{session_id}_{user.username}"
@ -101,4 +101,4 @@ class RedisOpAuthJwtAuthentication(OpAuthJwtAuthentication):
return user, token return user, token
else: else:
raise exceptions.AuthenticationFailed("登录信息失效,请重新登录!") raise exceptions.AuthenticationFailed("登录信息失效,请重新登录!")
return None return res

View File

@ -1,13 +1,10 @@
import logging import logging
from captcha.models import CaptchaStore
from django.conf import settings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend from django.contrib.auth.backends import ModelBackend
from django.utils import timezone from django.utils import timezone
from rest_framework.authentication import SessionAuthentication as DjangoSessionAuthentication from rest_framework.authentication import SessionAuthentication as DjangoSessionAuthentication
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
UserModel = get_user_model() UserModel = get_user_model()

View File

@ -15,8 +15,8 @@ from rest_framework.response import Response
from rest_framework_extensions.settings import extensions_api_settings from rest_framework_extensions.settings import extensions_api_settings
from application.celery import app from application.celery import app
from .string_util import bas64_encode_text, bas64_decode_text from apps.vadmin.system.models import CeleryLog
from ..system.models import CeleryLog from apps.vadmin.utils.string_util import bas64_encode_text, bas64_decode_text
def get_cache(alias=None): def get_cache(alias=None):
@ -34,12 +34,13 @@ def BaseCeleryApp(name, save_success_logs=True):
:param save_success_logs: 是否保存成功的日志(适用于频率高的celery任务成功不需要保存日志则传False) :param save_success_logs: 是否保存成功的日志(适用于频率高的celery任务成功不需要保存日志则传False)
:return: :return:
""" """
def wraps(func): def wraps(func):
@app.task(name=name) @app.task(name=name)
@functools.wraps(func) @functools.wraps(func)
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
obj = CeleryLog() obj = CeleryLog()
obj.name = ''.join(str(func.__doc__).replace(' ','').split('\n')[:2]) obj.name = ''.join(str(func.__doc__).replace(' ', '').split('\n')[:2])
obj.func_name = str(func.__name__) obj.func_name = str(func.__name__)
obj.kwargs = f"*args{args}\n**kwargs{kwargs}" obj.kwargs = f"*args{args}\n**kwargs{kwargs}"
start_time = datetime.now() start_time = datetime.now()
@ -305,7 +306,7 @@ class CacheResponse(object):
is_no_cache = True is_no_cache = True
response = None response = None
if not is_no_cache: if not is_no_cache:
response = self.cache.get(key) response = self.cache.get(key) if getattr(settings, "REDIS_ENABLE", False) else None
if not response: if not response:
response = view_method(view_instance, request, *args, **kwargs) response = view_method(view_instance, request, *args, **kwargs)
response = view_instance.finalize_response(request, response, *args, **kwargs) response = view_instance.finalize_response(request, response, *args, **kwargs)
@ -313,10 +314,11 @@ class CacheResponse(object):
if not response.status_code >= 400 or self.cache_errors: if not response.status_code >= 400 or self.cache_errors:
if not is_no_cache: if not is_no_cache:
if isinstance(response, Response): if getattr(settings, "REDIS_ENABLE", False):
self.cache.set(key, response.data, self.timeout) if isinstance(response, Response):
else: self.cache.set(key, response.data, self.timeout)
self.cache.set(key, response, self.timeout) else:
self.cache.set(key, response, self.timeout)
handle_refresh_cache_fun = getattr(view_instance, 'handle_refresh_cache', None) handle_refresh_cache_fun = getattr(view_instance, 'handle_refresh_cache', None)
if handle_refresh_cache_fun: if handle_refresh_cache_fun:
handle_refresh_cache_fun(request=request, key=key, cache=self.cache) handle_refresh_cache_fun(request=request, key=key, cache=self.cache)

View File

@ -4,8 +4,7 @@ import traceback
from rest_framework import exceptions from rest_framework import exceptions
from rest_framework.views import set_rollback from rest_framework.views import set_rollback
from .request_util import get_verbose_name from apps.vadmin.op_drf.response import ErrorResponse
from .response import ErrorResponse
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -7,8 +7,8 @@ import xlrd
import xlwt import xlwt
from django.conf import settings from django.conf import settings
from ..system.models import SaveFile from apps.vadmin.system.models import SaveFile
from ..system.serializers import SaveFileSerializer from apps.vadmin.system.serializers import SaveFileSerializer
def len_byte(value): def len_byte(value):
@ -152,7 +152,7 @@ def excel_to_data(file_url, field_data):
:return: :return:
""" """
# 读取excel 文件 # 读取excel 文件
data = xlrd.open_workbook(os.path.join(settings.BASE_DIR, *file_url.split(os.sep))) data = xlrd.open_workbook(os.path.join(settings.BASE_DIR.replace('\\', os.sep), *file_url.split(os.sep)))
table = data.sheets()[0] table = data.sheets()[0]
# 创建一个空列表存储Excel的数据 # 创建一个空列表存储Excel的数据
tables = [] tables = []

View File

@ -10,12 +10,11 @@ from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView from rest_framework.views import APIView
from rest_framework_jwt.views import ObtainJSONWebToken, jwt_response_payload_handler from rest_framework_jwt.views import ObtainJSONWebToken, jwt_response_payload_handler
from .exceptions import GenException from apps.vadmin.system.models.logininfor import LoginInfor
from .jwt_util import jwt_get_session_id from apps.vadmin.utils.exceptions import GenException
from .request_util import get_request_ip, get_os, get_browser, get_login_location from apps.vadmin.utils.jwt_util import jwt_get_session_id
from .response import SuccessResponse, ErrorResponse from apps.vadmin.utils.request_util import get_request_ip, get_os, get_browser, get_login_location
# from .jwt_util import jwt_response_payload_handler from apps.vadmin.op_drf.response import SuccessResponse, ErrorResponse
from ..system.models.logininfor import LoginInfor
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -32,7 +31,8 @@ class LogoutView(APIView):
user.user_secret = uuid4() user.user_secret = uuid4()
user.save() user.save()
key = f"{self.prefix}_{user.username}" key = f"{self.prefix}_{user.username}"
cache.delete(key) if getattr(settings, "REDIS_ENABLE", False):
cache.delete(key)
return SuccessResponse() return SuccessResponse()
@ -62,7 +62,7 @@ class LoginView(ObtainJSONWebToken):
else: else:
raise GenException(message='验证码错误') raise GenException(message='验证码错误')
def save_login_infor(self, request, msg='',status=True,session_id=''): def save_login_infor(self, request, msg='', status=True, session_id=''):
User = get_user_model() User = get_user_model()
instance = LoginInfor() instance = LoginInfor()
instance.session_id = session_id instance.session_id = session_id
@ -88,8 +88,9 @@ class LoginView(ObtainJSONWebToken):
username = user.username username = user.username
session_id = jwt_get_session_id(token) session_id = jwt_get_session_id(token)
key = f"{self.prefix}_{session_id}_{username}" key = f"{self.prefix}_{session_id}_{username}"
cache.set(key, token, self.ex.total_seconds()) if getattr(settings, "REDIS_ENABLE", False):
self.save_login_infor(request, '登录成功',session_id=session_id) cache.set(key, token, self.ex.total_seconds())
self.save_login_infor(request, '登录成功', session_id=session_id)
if self.JWT_AUTH_COOKIE and token: if self.JWT_AUTH_COOKIE and token:
expiration = (datetime.datetime.utcnow() + self.ex) expiration = (datetime.datetime.utcnow() + self.ex)
response.set_cookie(self.JWT_AUTH_COOKIE, response.set_cookie(self.JWT_AUTH_COOKIE,
@ -98,7 +99,7 @@ class LoginView(ObtainJSONWebToken):
domain=settings.SESSION_COOKIE_DOMAIN, domain=settings.SESSION_COOKIE_DOMAIN,
httponly=False) httponly=False)
return response return response
self.save_login_infor(request, '登录失败,账户/密码不正确',False) self.save_login_infor(request, '登录失败,账户/密码不正确', False)
return ErrorResponse(data=serializer.errors, msg='账户/密码不正确') return ErrorResponse(data=serializer.errors, msg='账户/密码不正确')
# def handle_exception(self, exc): # def handle_exception(self, exc):

View File

@ -6,7 +6,7 @@ from django.apps.config import AppConfig
from django.db.models.fields import Field from django.db.models.fields import Field
from rest_framework.renderers import JSONRenderer from rest_framework.renderers import JSONRenderer
from ..permission.models import Dept from apps.vadmin.permission.models import Dept
def get_primary_field(model, many=False): def get_primary_field(model, many=False):

View File

@ -10,6 +10,7 @@ from django.core.cache import cache
from django.urls.resolvers import ResolverMatch from django.urls.resolvers import ResolverMatch
from user_agents import parse from user_agents import parse
from application import settings
from apps.vadmin.utils.authentication import OpAuthJwtAuthentication from apps.vadmin.utils.authentication import OpAuthJwtAuthentication
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -161,11 +162,12 @@ def get_login_location(request, *args, **kwargs):
:param kwargs: :param kwargs:
:return: :return:
""" """
if not getattr(settings, "ENABLE_LOGIN_LOCATION", False): return ""
import requests import requests
import eventlet # 导入eventlet这个模块 import eventlet # 导入eventlet这个模块
request_ip = get_request_ip(request) request_ip = get_request_ip(request)
# 从缓存中获取 # 从缓存中获取
location = cache.get(request_ip) location = cache.get(request_ip) if getattr(settings, "REDIS_ENABLE", False) else ""
if location: if location:
return location return location
# 通过api 获取再缓存redis # 通过api 获取再缓存redis
@ -176,7 +178,8 @@ def get_login_location(request, *args, **kwargs):
r = requests.get(apiurl) r = requests.get(apiurl)
content = r.content.decode('GBK') content = r.content.decode('GBK')
location = str(content).replace('\r', '').replace('\n', '')[:64] location = str(content).replace('\r', '').replace('\n', '')[:64]
cache.set(request_ip, location, 86400) if getattr(settings, "REDIS_ENABLE", False):
cache.set(request_ip, location, 86400)
return location return location
except Exception as e: except Exception as e:
pass pass

View File

@ -1,91 +0,0 @@
"""
常用的Response以及Django的ResponseDRF的Response
"""
from django.http.response import DjangoJSONEncoder, JsonResponse
from rest_framework.response import Response
class OpDRFJSONEncoder(DjangoJSONEncoder):
"""
重写DjangoJSONEncoder
(1)默认返回支持中文格式的json字符串
"""
def __init__(self, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False,
indent=None, separators=None, default=None):
super().__init__(skipkeys=skipkeys, ensure_ascii=False, check_circular=check_circular,
allow_nan=allow_nan, sort_keys=sort_keys, indent=indent, separators=separators,
default=default)
class SuccessResponse(Response):
"""
标准响应成功的返回, SuccessResponse(data)或者SuccessResponse(data=data)
(1)默认错误码返回2000, 不支持指定其他返回码
"""
def __init__(self, data=None, msg='success', status=None, template_name=None, headers=None, exception=False,
content_type=None):
self.std_data = {
"code": 200,
"data": data,
"msg": msg,
"status": 'success'
}
super().__init__(self.std_data, status, template_name, headers, exception, content_type)
def __str__(self):
return str(self.std_data)
class ErrorResponse(Response):
"""
标准响应错误的返回,ErrorResponse(msg='xxx')
(1)默认错误码返回2001, 也可以指定其他返回码:ErrorResponse(code=xxx)
"""
def __init__(self, data=None, msg='error', code=201, status=None, template_name=None, headers=None,
exception=False, content_type=None):
self.std_data = {
"code": code,
"data": data,
"msg": msg,
"status": 'error'
}
super().__init__(self.std_data, status, template_name, headers, exception, content_type)
def __str__(self):
return str(self.std_data)
class SuccessJsonResponse(JsonResponse):
"""
标准JsonResponse, SuccessJsonResponse(data)SuccessJsonResponse(data=data)
(1)仅SuccessResponse无法使用时才能推荐使用SuccessJsonResponse
"""
def __init__(self, data, msg='success', encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs):
std_data = {
"code": 200,
"data": data,
"msg": msg,
"status": 'success'
}
super().__init__(std_data, encoder, safe, json_dumps_params, **kwargs)
class ErrorJsonResponse(JsonResponse):
"""
标准JsonResponse, 仅ErrorResponse无法使用时才能使用ErrorJsonResponse
(1)默认错误码返回2001, 也可以指定其他返回码:ErrorJsonResponse(code=xxx)
"""
def __init__(self, data, msg='error', code=201, encoder=OpDRFJSONEncoder, safe=True, json_dumps_params=None,
**kwargs):
std_data = {
"code": code,
"data": data,
"msg": msg,
"status": 'error'
}
super().__init__(std_data, encoder, safe, json_dumps_params, **kwargs)

View File

@ -44,3 +44,5 @@ API_LOG_ENABLE = True
API_LOG_METHODS = ['POST', 'DELETE', 'PUT'] # 'ALL' or ['POST', 'DELETE'] API_LOG_METHODS = ['POST', 'DELETE', 'PUT'] # 'ALL' or ['POST', 'DELETE']
# 接口权限 # 接口权限
INTERFACE_PERMISSION = True INTERFACE_PERMISSION = True
# 是否开启登录ip转换成城市位置
ENABLE_LOGIN_LOCATION = True

View File

@ -27,3 +27,4 @@ coreapi==2.3.3
user-agents==2.2.0 user-agents==2.2.0
eventlet==0.30.2 eventlet==0.30.2
psutil==5.8.0 psutil==5.8.0
drf-yasg ==1.20.0

View File

@ -5,6 +5,7 @@ src/assets
# 忽略public目录下文件的语法检查 # 忽略public目录下文件的语法检查
public public
# 忽略当前目录下为js的文件的语法检查 # 忽略当前目录下为js的文件的语法检查
*.js # *.js
# 忽略当前目录下为vue的文件的语法检查 # 忽略当前目录下为vue的文件的语法检查
*.vue # *.vue
vue.config.js

View File

@ -2,18 +2,18 @@
module.exports = { module.exports = {
root: true, root: true,
parserOptions: { parserOptions: {
parser: 'babel-eslint', parser: "babel-eslint",
sourceType: 'module' sourceType: "module"
}, },
env: { env: {
browser: true, browser: true,
node: true, node: true,
es6: true, es6: true
}, },
extends: ['plugin:vue/recommended', 'eslint:recommended'], extends: ["plugin:vue/recommended", "eslint:recommended"],
// add your custom rules here // add your custom rules here
//it is base on https://github.com/vuejs/eslint-config-vue // it is base on https://github.com/vuejs/eslint-config-vue
rules: { rules: {
"vue/max-attributes-per-line": [2, { "vue/max-attributes-per-line": [2, {
"singleline": 10, "singleline": 10,
@ -23,177 +23,199 @@ module.exports = {
} }
}], }],
"vue/singleline-html-element-content-newline": "off", "vue/singleline-html-element-content-newline": "off",
"vue/multiline-html-element-content-newline":"off", "vue/multiline-html-element-content-newline": "off",
"vue/name-property-casing": ["error", "PascalCase"], "vue/name-property-casing": ["error", "PascalCase"],
"vue/no-v-html": "off", "vue/no-v-html": "off",
'accessor-pairs': 2, "accessor-pairs": 2,
'arrow-spacing': [2, { "arrow-spacing": [2, {
'before': true, "before": true,
'after': true "after": true
}], }],
'block-spacing': [2, 'always'], "block-spacing": [2, "always"],
'brace-style': [2, '1tbs', { "brace-style": [2, "1tbs", {
'allowSingleLine': true "allowSingleLine": true
}], }],
'camelcase': [0, { "camelcase": [0, {
'properties': 'always' "properties": "always"
}], }],
'comma-dangle': [2, 'never'], "comma-dangle": [2, "never"],
'comma-spacing': [2, { "comma-spacing": [2, {
'before': false, "before": false,
'after': true "after": true
}], }],
'comma-style': [2, 'last'], "comma-style": [2, "last"],
'constructor-super': 2, "constructor-super": 2,
'curly': [2, 'multi-line'], "curly": [2, "multi-line"],
'dot-location': [2, 'property'], "dot-location": [2, "property"],
'eol-last': 2, "eol-last": 2,
'eqeqeq': ["error", "always", {"null": "ignore"}], "eqeqeq": 0,
'generator-star-spacing': [2, { "generator-star-spacing": [2, {
'before': true, "before": true,
'after': true "after": true
}], }],
'handle-callback-err': [2, '^(err|error)$'], "handle-callback-err": [2, "^(err|error)$"],
'indent': [2, 2, { "indent": [2, 2, {
'SwitchCase': 1 "SwitchCase": 2
}], }],
'jsx-quotes': [2, 'prefer-single'], "jsx-quotes": [2, "prefer-single"],
'key-spacing': [2, { "key-spacing": [2, {
'beforeColon': false, "beforeColon": false,
'afterColon': true "afterColon": true
}], }],
'keyword-spacing': [2, { "keyword-spacing": [2, {
'before': true, "before": true,
'after': true "after": true
}], }],
'new-cap': [2, { "new-cap": [2, {
'newIsCap': true, "newIsCap": true,
'capIsNew': false "capIsNew": false
}], }],
'new-parens': 2, "new-parens": 2,
'no-array-constructor': 2, "no-array-constructor": 2,
'no-caller': 2, "no-caller": 2,
'no-console': 'off', "no-console": "off",
'no-class-assign': 2, "no-class-assign": 2,
'no-cond-assign': 2, "no-cond-assign": 2,
'no-const-assign': 2, "no-const-assign": 2,
'no-control-regex': 0, "no-control-regex": 0,
'no-delete-var': 2, "no-delete-var": 2,
'no-dupe-args': 2, "no-dupe-args": 2,
'no-dupe-class-members': 2, "no-dupe-class-members": 2,
'no-dupe-keys': 2, "no-dupe-keys": 2,
'no-duplicate-case': 2, "no-duplicate-case": 2,
'no-empty-character-class': 2, "no-empty-character-class": 2,
'no-empty-pattern': 2, "no-empty-pattern": 2,
'no-eval': 2, "no-eval": 2,
'no-ex-assign': 2, "no-ex-assign": 2,
'no-extend-native': 2, "no-extend-native": 2,
'no-extra-bind': 2, "no-extra-bind": 2,
'no-extra-boolean-cast': 2, "no-extra-boolean-cast": 2,
'no-extra-parens': [2, 'functions'], "no-extra-parens": [2, "functions"],
'no-fallthrough': 2, "no-fallthrough": 2,
'no-floating-decimal': 2, "no-floating-decimal": 2,
'no-func-assign': 2, "no-func-assign": 2,
'no-implied-eval': 2, "no-implied-eval": 2,
'no-inner-declarations': [2, 'functions'], "no-inner-declarations": [2, "functions"],
'no-invalid-regexp': 2, "no-invalid-regexp": 2,
'no-irregular-whitespace': 2, "no-irregular-whitespace": 2,
'no-iterator': 2, "no-iterator": 2,
'no-label-var': 2, "no-label-var": 2,
'no-labels': [2, { "no-labels": [2, {
'allowLoop': false, "allowLoop": false,
'allowSwitch': false "allowSwitch": false
}], }],
'no-lone-blocks': 2, "no-lone-blocks": 2,
'no-mixed-spaces-and-tabs': 2, "no-mixed-spaces-and-tabs": 2,
'no-multi-spaces': 2, "no-multi-spaces": 2,
'no-multi-str': 2, "no-multi-str": 2,
'no-multiple-empty-lines': [2, { "no-multiple-empty-lines": [2, {
'max': 1 "max": 1
}], }],
'no-native-reassign': 2, "no-native-reassign": 2,
'no-negated-in-lhs': 2, "no-negated-in-lhs": 2,
'no-new-object': 2, "no-new-object": 2,
'no-new-require': 2, "no-new-require": 2,
'no-new-symbol': 2, "no-new-symbol": 2,
'no-new-wrappers': 2, "no-new-wrappers": 2,
'no-obj-calls': 2, "no-obj-calls": 2,
'no-octal': 2, "no-octal": 2,
'no-octal-escape': 2, "no-octal-escape": 2,
'no-path-concat': 2, "no-path-concat": 2,
'no-proto': 2, "no-proto": 2,
'no-redeclare': 2, "no-redeclare": 2,
'no-regex-spaces': 2, "no-regex-spaces": 2,
'no-return-assign': [2, 'except-parens'], "no-return-assign": [2, "except-parens"],
'no-self-assign': 2, "no-self-assign": 2,
'no-self-compare': 2, "no-self-compare": 2,
'no-sequences': 2, "no-sequences": 2,
'no-shadow-restricted-names': 2, "no-shadow-restricted-names": 2,
'no-spaced-func': 2, "no-spaced-func": 2,
'no-sparse-arrays': 2, "no-sparse-arrays": 2,
'no-this-before-super': 2, "no-this-before-super": 2,
'no-throw-literal': 2, "no-throw-literal": 2,
'no-trailing-spaces': 2, "no-trailing-spaces": 2,
'no-undef': 2, "no-undef": 2,
'no-undef-init': 2, "no-undef-init": 2,
'no-unexpected-multiline': 2, "no-unexpected-multiline": 2,
'no-unmodified-loop-condition': 2, "no-unmodified-loop-condition": 2,
'no-unneeded-ternary': [2, { "no-unneeded-ternary": [2, {
'defaultAssignment': false "defaultAssignment": false
}], }],
'no-unreachable': 2, "no-unreachable": 2,
'no-unsafe-finally': 2, "no-unsafe-finally": 2,
'no-unused-vars': [2, { "no-unused-vars": [2, {
'vars': 'all', "vars": "all",
'args': 'none' "args": "none"
}], }],
'no-useless-call': 2, "no-useless-call": 2,
'no-useless-computed-key': 2, "no-useless-computed-key": 2,
'no-useless-constructor': 2, "no-useless-constructor": 2,
'no-useless-escape': 0, "no-useless-escape": 0,
'no-whitespace-before-property': 2, "no-whitespace-before-property": 2,
'no-with': 2, "no-with": 2,
'one-var': [2, { "one-var": [2, {
'initialized': 'never' "initialized": "never"
}], }],
'operator-linebreak': [2, 'after', { "operator-linebreak": [2, "after", {
'overrides': { "overrides": {
'?': 'before', "?": "before",
':': 'before' ":": "before"
} }
}], }],
'padded-blocks': [2, 'never'], "padded-blocks": [2, "never"],
'quotes': [2, 'single', { "quotes": [2, "double", {
'avoidEscape': true, "avoidEscape": true,
'allowTemplateLiterals': true "allowTemplateLiterals": true
}], }],
'semi': [2, 'never'], "semi": [2, "always"],
'semi-spacing': [2, { "semi-spacing": [2, {
'before': false, "before": false,
'after': true "after": true
}], }],
'space-before-blocks': [2, 'always'], "space-before-blocks": [2, "always"],
'space-before-function-paren': [2, 'never'], "space-before-function-paren": [2, "never"],
'space-in-parens': [2, 'never'], "space-in-parens": [2, "never"],
'space-infix-ops': 2, "space-infix-ops": 2,
'space-unary-ops': [2, { "space-unary-ops": [2, {
'words': true, "words": true,
'nonwords': false "nonwords": false
}], }],
'spaced-comment': [2, 'always', { "spaced-comment": [2, "always", {
'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] "markers": ["global", "globals", "eslint", "eslint-disable", "*package", "!", ","]
}], }],
'template-curly-spacing': [2, 'never'], "template-curly-spacing": [2, "never"],
'use-isnan': 2, "use-isnan": 2,
'valid-typeof': 2, "valid-typeof": 2,
'wrap-iife': [2, 'any'], "wrap-iife": [2, "any"],
'yield-star-spacing': [2, 'both'], "yield-star-spacing": [2, "both"],
'yoda': [2, 'never'], "yoda": [2, "never"],
'prefer-const': 2, "prefer-const": 2,
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, "no-debugger": process.env.NODE_ENV === "production" ? 2 : 0,
'object-curly-spacing': [2, 'always', { "object-curly-spacing": [2, "always", {
objectsInObjects: false objectsInObjects: false
}], }],
'array-bracket-spacing': [2, 'never'] "array-bracket-spacing": [2, "never"],
"vue/no-unused-components": 0,
// 对component中的组件命名样式实施特定的大小写
"vue/component-name-in-template-casing": 0,
// 允许HTML未闭合标签
"vue/html-self-closing": 0,
// 允许props修改
"vue/no-mutating-props": 0,
// 允许computed修改名称
"vue/no-side-effects-in-computed-properties": 0,
// $emit不校验kebab-case
"vue/custom-event-name-casing": 0,
// 允许v-for和v-if一起用
"vue/no-use-v-if-with-v-for": 0,
"vue/require-default-prop": 0,
"vue/require-valid-default-prop": 0,
"vue/require-prop-types": 0,
"vue/no-lone-template": 0,
"vue/no-template-shadow": 0,
"vue/this-in-template": 0,
"vue/prop-name-casing": 0,
// 允许在 case 子句中使用词法声明
"no-case-declarations": 0
} }
} };

View File

@ -9,7 +9,8 @@
"build:prod": "vue-cli-service build", "build:prod": "vue-cli-service build",
"build:stage": "vue-cli-service build --mode staging", "build:stage": "vue-cli-service build --mode staging",
"preview": "node build/index.js --preview", "preview": "node build/index.js --preview",
"lint": "eslint --ext .js,.vue src" "lint": "eslint --fix --ext .js --ext .jsx --ext .vue src",
"lint-fix": "eslint --fix --ext .js --ext .jsx --ext .vue src"
}, },
"husky": { "husky": {
"hooks": { "hooks": {
@ -43,7 +44,6 @@
"core-js": "3.8.1", "core-js": "3.8.1",
"echarts": "^4.9.0", "echarts": "^4.9.0",
"element-ui": "2.15.0", "element-ui": "2.15.0",
"eslint-loader": "^4.0.2",
"file-saver": "2.0.4", "file-saver": "2.0.4",
"fuse.js": "6.4.3", "fuse.js": "6.4.3",
"highlight.js": "9.18.5", "highlight.js": "9.18.5",
@ -69,10 +69,17 @@
"@vue/cli-plugin-eslint": "4.4.6", "@vue/cli-plugin-eslint": "4.4.6",
"@vue/cli-service": "4.4.6", "@vue/cli-service": "4.4.6",
"@vue/composition-api": "^1.0.0-rc.6", "@vue/composition-api": "^1.0.0-rc.6",
"babel-eslint": "10.1.0", "babel-eslint": "^10.1.0",
"chalk": "4.1.0", "chalk": "4.1.0",
"connect": "3.6.6", "connect": "3.6.6",
"eslint": "7.15.0", "eslint": "^7.15.0",
"eslint-config-standard": "^16.0.3",
"eslint-loader": "^4.0.2",
"eslint-plugin-html": "^6.1.2",
"eslint-plugin-import": "^2.23.4",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^5.1.0",
"eslint-plugin-standard": "^5.0.0",
"eslint-plugin-vue": "7.2.0", "eslint-plugin-vue": "7.2.0",
"lint-staged": "10.5.3", "lint-staged": "10.5.3",
"runjs": "4.4.2", "runjs": "4.4.2",

View File

@ -5,7 +5,7 @@
</template> </template>
<script> <script>
export default { export default {
name: 'App' name: "App"
} };
</script> </script>

View File

@ -1,4 +1,4 @@
import request from '@/utils/request' import request from "@/utils/request";
// 登录方法 // 登录方法
export function login(username, password, code, uuid) { export function login(username, password, code, uuid) {
@ -7,34 +7,34 @@ export function login(username, password, code, uuid) {
password, password,
idValueC: code, idValueC: code,
idKeyC: uuid idKeyC: uuid
} };
return request({ return request({
url: '/admin/login/', url: "/admin/login/",
method: 'post', method: "post",
data: data data: data
}) });
} }
// 获取用户详细信息 // 获取用户详细信息
export function getInfo() { export function getInfo() {
return request({ return request({
url: '/admin/getInfo/', url: "/admin/getInfo/",
method: 'get' method: "get"
}) });
} }
// 退出方法 // 退出方法
export function logout() { export function logout() {
return request({ return request({
url: '/admin/logout/', url: "/admin/logout/",
method: 'post' method: "post"
}) });
} }
// 获取验证码 // 获取验证码
export function getCodeImg() { export function getCodeImg() {
return request({ return request({
url: '/admin/captcha/refresh/', url: "/admin/captcha/refresh/",
method: 'get' method: "get"
}) });
} }

View File

@ -1,9 +1,9 @@
import request from '@/utils/request' import request from "@/utils/request";
// 获取路由 // 获取路由
export const getRouters = () => { export const getRouters = () => {
return request({ return request({
url: '/admin/getRouters/', url: "/admin/getRouters/",
method: 'get' method: "get"
}) });
} };

View File

@ -1,9 +1,9 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询缓存详细 // 查询缓存详细
export function getCache() { export function getCache() {
return request({ return request({
url: '/monitor/cache', url: "/monitor/cache",
method: 'get' method: "get"
}) });
} }

View File

@ -1,15 +1,15 @@
import request from '@/utils/request' import request from "@/utils/request";
/** /**
* 封装celery任务信息接口请求 * 封装celery任务信息接口请求
*/ */
// 获取 // 获取
export const sync_data_prefix = '/admin/celery'; export const sync_data_prefix = "/admin/celery";
// 获取 // 获取
export function getIntervalschedulea(id) { export function getIntervalschedulea(id) {
return request({ return request({
url: `${sync_data_prefix}/intervalschedule/${id}/`, url: `${sync_data_prefix}/intervalschedule/${id}/`,
method: 'get' method: "get"
}); });
} }
@ -17,7 +17,7 @@ export function getIntervalschedulea(id) {
export function listIntervalschedule(params) { export function listIntervalschedule(params) {
return request({ return request({
url: `${sync_data_prefix}/intervalschedule/`, url: `${sync_data_prefix}/intervalschedule/`,
method: 'get', method: "get",
params params
}); });
} }
@ -26,7 +26,7 @@ export function listIntervalschedule(params) {
export function updateIntervalschedule(data) { export function updateIntervalschedule(data) {
return request({ return request({
url: `${sync_data_prefix}/intervalschedule/${data.id}/`, url: `${sync_data_prefix}/intervalschedule/${data.id}/`,
method: 'put', method: "put",
data data
}); });
} }
@ -34,7 +34,7 @@ export function updateIntervalschedule(data) {
export function createIntervalschedule(data) { export function createIntervalschedule(data) {
return request({ return request({
url: `${sync_data_prefix}/intervalschedule/`, url: `${sync_data_prefix}/intervalschedule/`,
method: 'post', method: "post",
data data
}); });
} }
@ -42,7 +42,7 @@ export function createIntervalschedule(data) {
export function deleteIntervalschedule(id) { export function deleteIntervalschedule(id) {
return request({ return request({
url: `${sync_data_prefix}/intervalschedule/${id}/`, url: `${sync_data_prefix}/intervalschedule/${id}/`,
method: 'delete' method: "delete"
}); });
} }
@ -50,7 +50,7 @@ export function deleteIntervalschedule(id) {
export function getCrontabSchedule(id) { export function getCrontabSchedule(id) {
return request({ return request({
url: `${sync_data_prefix}/crontabschedule/${id}/`, url: `${sync_data_prefix}/crontabschedule/${id}/`,
method: 'get' method: "get"
}); });
} }
@ -58,7 +58,7 @@ export function getCrontabSchedule(id) {
export function listCrontabSchedule(params) { export function listCrontabSchedule(params) {
return request({ return request({
url: `${sync_data_prefix}/crontabschedule/`, url: `${sync_data_prefix}/crontabschedule/`,
method: 'get', method: "get",
params params
}); });
} }
@ -67,7 +67,7 @@ export function listCrontabSchedule(params) {
export function updateCrontabSchedule(data) { export function updateCrontabSchedule(data) {
return request({ return request({
url: `${sync_data_prefix}/crontabschedule/${data.id}/`, url: `${sync_data_prefix}/crontabschedule/${data.id}/`,
method: 'put', method: "put",
data data
}); });
} }
@ -75,7 +75,7 @@ export function updateCrontabSchedule(data) {
export function createCrontabSchedule(data) { export function createCrontabSchedule(data) {
return request({ return request({
url: `${sync_data_prefix}/crontabschedule/`, url: `${sync_data_prefix}/crontabschedule/`,
method: 'post', method: "post",
data data
}); });
} }
@ -83,7 +83,7 @@ export function createCrontabSchedule(data) {
export function deleteCrontabSchedule(id) { export function deleteCrontabSchedule(id) {
return request({ return request({
url: `${sync_data_prefix}/crontabschedule/${id}/`, url: `${sync_data_prefix}/crontabschedule/${id}/`,
method: 'delete' method: "delete"
}); });
} }
@ -91,7 +91,7 @@ export function deleteCrontabSchedule(id) {
export function getPeriodicTask(id) { export function getPeriodicTask(id) {
return request({ return request({
url: `${sync_data_prefix}/periodictask/${id}/`, url: `${sync_data_prefix}/periodictask/${id}/`,
method: 'get' method: "get"
}); });
} }
@ -99,7 +99,7 @@ export function getPeriodicTask(id) {
export function listPeriodicTask(params) { export function listPeriodicTask(params) {
return request({ return request({
url: `${sync_data_prefix}/periodictask/`, url: `${sync_data_prefix}/periodictask/`,
method: 'get', method: "get",
params params
}); });
} }
@ -107,7 +107,7 @@ export function listPeriodicTask(params) {
export function TasksAsChoices(params) { export function TasksAsChoices(params) {
return request({ return request({
url: `${sync_data_prefix}/tasks_as_choices/`, url: `${sync_data_prefix}/tasks_as_choices/`,
method: 'get', method: "get",
params params
}); });
} }
@ -116,7 +116,7 @@ export function TasksAsChoices(params) {
export function updatePeriodicTask(data) { export function updatePeriodicTask(data) {
return request({ return request({
url: `${sync_data_prefix}/periodictask/${data.id}/`, url: `${sync_data_prefix}/periodictask/${data.id}/`,
method: 'put', method: "put",
data data
}); });
} }
@ -124,7 +124,7 @@ export function updatePeriodicTask(data) {
export function createPeriodicTask(data) { export function createPeriodicTask(data) {
return request({ return request({
url: `${sync_data_prefix}/periodictask/`, url: `${sync_data_prefix}/periodictask/`,
method: 'post', method: "post",
data data
}); });
} }
@ -132,7 +132,7 @@ export function createPeriodicTask(data) {
export function deletePeriodicTask(id) { export function deletePeriodicTask(id) {
return request({ return request({
url: `${sync_data_prefix}/periodictask/${id}/`, url: `${sync_data_prefix}/periodictask/${id}/`,
method: 'delete' method: "delete"
}); });
} }
@ -140,7 +140,7 @@ export function deletePeriodicTask(id) {
export function operatesyncdata(data) { export function operatesyncdata(data) {
return request({ return request({
url: `${sync_data_prefix}/operate_celery/`, url: `${sync_data_prefix}/operate_celery/`,
method: 'post', method: "post",
data data
}); });
} }
@ -148,33 +148,33 @@ export function operatesyncdata(data) {
// 查询定时任务日志列表 // 查询定时任务日志列表
export function list(query) { export function list(query) {
return request({ return request({
url: '/admin/system/celery_log/', url: "/admin/system/celery_log/",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 删除定时任务日志 // 删除定时任务日志
export function delCeleryLog(infoId) { export function delCeleryLog(infoId) {
return request({ return request({
url: `/admin/system/celery_log/${infoId}/`, url: `/admin/system/celery_log/${infoId}/`,
method: 'delete' method: "delete"
}) });
} }
// 清空定时任务日志 // 清空定时任务日志
export function cleanCeleryLog() { export function cleanCeleryLog() {
return request({ return request({
url: '/admin/system/celery_log/clean', url: "/admin/system/celery_log/clean",
method: 'delete' method: "delete"
}) });
} }
// 导出定时任务日志 // 导出定时任务日志
export function exportCeleryLog(query) { export function exportCeleryLog(query) {
return request({ return request({
url: '/admin/system/celery_log/export', url: "/admin/system/celery_log/export",
method: 'get', method: "get",
params: query params: query
}) });
} }

View File

@ -1,55 +1,55 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询定时任务调度列表 // 查询定时任务调度列表
export function listJob(query) { export function listJob(query) {
return request({ return request({
url: '/monitor/job/list', url: "/monitor/job/list",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 查询定时任务调度详细 // 查询定时任务调度详细
export function getJob(jobId) { export function getJob(jobId) {
return request({ return request({
url: '/monitor/job/' + jobId, url: "/monitor/job/" + jobId,
method: 'get' method: "get"
}) });
} }
// 新增定时任务调度 // 新增定时任务调度
export function addJob(data) { export function addJob(data) {
return request({ return request({
url: '/monitor/job', url: "/monitor/job",
method: 'post', method: "post",
data: data data: data
}) });
} }
// 修改定时任务调度 // 修改定时任务调度
export function updateJob(data) { export function updateJob(data) {
return request({ return request({
url: '/monitor/job', url: "/monitor/job",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 删除定时任务调度 // 删除定时任务调度
export function delJob(jobId) { export function delJob(jobId) {
return request({ return request({
url: '/monitor/job/' + jobId, url: "/monitor/job/" + jobId,
method: 'delete' method: "delete"
}) });
} }
// 导出定时任务调度 // 导出定时任务调度
export function exportJob(query) { export function exportJob(query) {
return request({ return request({
url: '/monitor/job/export', url: "/monitor/job/export",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 任务状态修改 // 任务状态修改
@ -57,24 +57,23 @@ export function changeJobStatus(jobId, status) {
const data = { const data = {
jobId, jobId,
status status
} };
return request({ return request({
url: '/monitor/job/changeStatus', url: "/monitor/job/changeStatus",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 定时任务立即执行一次 // 定时任务立即执行一次
export function runJob(jobId, jobGroup) { export function runJob(jobId, jobGroup) {
const data = { const data = {
jobId, jobId,
jobGroup jobGroup
} };
return request({ return request({
url: '/monitor/job/run', url: "/monitor/job/run",
method: 'put', method: "put",
data: data data: data
}) });
} }

View File

@ -1,35 +1,35 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询调度日志列表 // 查询调度日志列表
export function listJobLog(query) { export function listJobLog(query) {
return request({ return request({
url: '/monitor/jobLog/list', url: "/monitor/jobLog/list",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 删除调度日志 // 删除调度日志
export function delJobLog(jobLogId) { export function delJobLog(jobLogId) {
return request({ return request({
url: '/monitor/jobLog/' + jobLogId, url: "/monitor/jobLog/" + jobLogId,
method: 'delete' method: "delete"
}) });
} }
// 清空调度日志 // 清空调度日志
export function cleanJobLog() { export function cleanJobLog() {
return request({ return request({
url: '/monitor/jobLog/clean', url: "/monitor/jobLog/clean",
method: 'delete' method: "delete"
}) });
} }
// 导出调度日志 // 导出调度日志
export function exportJobLog(query) { export function exportJobLog(query) {
return request({ return request({
url: '/monitor/jobLog/export', url: "/monitor/jobLog/export",
method: 'get', method: "get",
params: query params: query
}) });
} }

View File

@ -1,35 +1,35 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询登录日志列表 // 查询登录日志列表
export function list(query) { export function list(query) {
return request({ return request({
url: '/admin/system/logininfor/', url: "/admin/system/logininfor/",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 删除登录日志 // 删除登录日志
export function delLogininfor(infoId) { export function delLogininfor(infoId) {
return request({ return request({
url: `/admin/system/logininfor/${infoId}/`, url: `/admin/system/logininfor/${infoId}/`,
method: 'delete' method: "delete"
}) });
} }
// 清空登录日志 // 清空登录日志
export function cleanLogininfor() { export function cleanLogininfor() {
return request({ return request({
url: '/admin/system/logininfor/clean', url: "/admin/system/logininfor/clean",
method: 'delete' method: "delete"
}) });
} }
// 导出登录日志 // 导出登录日志
export function exportLogininfor(query) { export function exportLogininfor(query) {
return request({ return request({
url: '/admin/system/logininfor/export', url: "/admin/system/logininfor/export",
method: 'get', method: "get",
params: query params: query
}) });
} }

View File

@ -1,18 +1,18 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询在线用户列表 // 查询在线用户列表
export function list(query) { export function list(query) {
return request({ return request({
url: '/admin/monitor/online/list', url: "/admin/monitor/online/list",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 强退用户 // 强退用户
export function forceLogout(tokenId) { export function forceLogout(tokenId) {
return request({ return request({
url: '/admin/monitor/online/' + tokenId, url: "/admin/monitor/online/" + tokenId,
method: 'delete' method: "delete"
}) });
} }

View File

@ -1,35 +1,35 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询操作日志列表 // 查询操作日志列表
export function list(query) { export function list(query) {
return request({ return request({
url: '/monitor/operlog/list', url: "/monitor/operlog/list",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 删除操作日志 // 删除操作日志
export function delOperlog(operId) { export function delOperlog(operId) {
return request({ return request({
url: '/monitor/operlog/' + operId, url: "/monitor/operlog/" + operId,
method: 'delete' method: "delete"
}) });
} }
// 清空操作日志 // 清空操作日志
export function cleanOperlog() { export function cleanOperlog() {
return request({ return request({
url: '/monitor/operlog/clean', url: "/monitor/operlog/clean",
method: 'delete' method: "delete"
}) });
} }
// 导出操作日志 // 导出操作日志
export function exportOperlog(query) { export function exportOperlog(query) {
return request({ return request({
url: '/monitor/operlog/export', url: "/monitor/operlog/export",
method: 'get', method: "get",
params: query params: query
}) });
} }

View File

@ -1,50 +1,50 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询服务器信息详细 // 查询服务器信息详细
export function getServerList(params) { export function getServerList(params) {
return request({ return request({
url: 'admin/monitor/server/', url: "admin/monitor/server/",
params, params,
method: 'get' method: "get"
}) });
} }
// 修改服务器信息 // 修改服务器信息
export function updateServerInfo(id, data) { export function updateServerInfo(id, data) {
let {name, remark} = data; const { name, remark } = data;
return request({ return request({
url: `admin/monitor/server/${id}/`, url: `admin/monitor/server/${id}/`,
data: { data: {
name, name,
remark remark
}, },
method: 'PUT' method: "PUT"
}) });
} }
// 获取监控配置信息 // 获取监控配置信息
export function getMonitorStatusInfo() { export function getMonitorStatusInfo() {
return request({ return request({
url: 'admin/monitor/monitor/enabled/', url: "admin/monitor/monitor/enabled/",
method: 'get' method: "get"
}) });
} }
// 更新监控配置信息 // 更新监控配置信息
export function updateMonitorStatusInfo(params) { export function updateMonitorStatusInfo(params) {
return request({ return request({
url: 'admin/monitor/monitor/enabled/', url: "admin/monitor/monitor/enabled/",
params, params,
method: 'get' method: "get"
}) });
} }
// 清空记录 // 清空记录
export function cleanMonitorLog() { export function cleanMonitorLog() {
return request({ return request({
url: 'admin/monitor/monitor/clean/', url: "admin/monitor/monitor/clean/",
method: 'delete' method: "delete"
}) });
} }
// 获取监控记录 // 获取监控记录
@ -52,14 +52,14 @@ export function getMonitorLogs(id, params) {
return request({ return request({
url: `admin/monitor/monitor/rate/${id}/`, url: `admin/monitor/monitor/rate/${id}/`,
params, params,
method: 'get' method: "get"
}) });
} }
// 获取服务器最新监控日志信息 // 获取服务器最新监控日志信息
export function getServerLatestLog(id) { export function getServerLatestLog(id) {
return request({ return request({
url: `admin/monitor/monitor/info/${id}/`, url: `admin/monitor/monitor/info/${id}/`,
method: 'get' method: "get"
}) });
} }

View File

@ -1,68 +1,68 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询部门列表 // 查询部门列表
export function listDept(query) { export function listDept(query) {
return request({ return request({
url: '/admin/permission/dept/', url: "/admin/permission/dept/",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 查询部门列表排除节点 // 查询部门列表排除节点
export function listDeptExcludeChild(deptId) { export function listDeptExcludeChild(deptId) {
return request({ return request({
url: '/admin/permission/dept/exclude/' + deptId + '/', url: "/admin/permission/dept/exclude/" + deptId + "/",
method: 'get' method: "get"
}) });
} }
// 查询部门详细 // 查询部门详细
export function getDept(deptId) { export function getDept(deptId) {
return request({ return request({
url: '/admin/permission/dept/' + deptId + '/', url: "/admin/permission/dept/" + deptId + "/",
method: 'get' method: "get"
}) });
} }
// 查询部门下拉树结构 // 查询部门下拉树结构
export function treeselect() { export function treeselect() {
return request({ return request({
url: '/admin/permission/dept/treeselect/?status=1', url: "/admin/permission/dept/treeselect/?status=1",
method: 'get' method: "get"
}) });
} }
// 根据角色ID查询部门树结构 // 根据角色ID查询部门树结构
export function roleDeptTreeselect(roleId) { export function roleDeptTreeselect(roleId) {
return request({ return request({
url: '/admin/permission/dept/roleDeptTreeselect/' + roleId + '/?status=1', url: "/admin/permission/dept/roleDeptTreeselect/" + roleId + "/?status=1",
method: 'get' method: "get"
}) });
} }
// 新增部门 // 新增部门
export function addDept(data) { export function addDept(data) {
return request({ return request({
url: '/admin/permission/dept/', url: "/admin/permission/dept/",
method: 'post', method: "post",
data: data data: data
}) });
} }
// 修改部门 // 修改部门
export function updateDept(data) { export function updateDept(data) {
return request({ return request({
url: '/admin/permission/dept/' + data.id + '/', url: "/admin/permission/dept/" + data.id + "/",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 删除部门 // 删除部门
export function delDept(deptId) { export function delDept(deptId) {
return request({ return request({
url: '/admin/permission/dept/' + deptId + '', url: "/admin/permission/dept/" + deptId + "",
method: 'delete' method: "delete"
}) });
} }

View File

@ -1,60 +1,60 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询菜单列表 // 查询菜单列表
export function listMenu(query) { export function listMenu(query) {
return request({ return request({
url: '/admin/permission/menus/', url: "/admin/permission/menus/",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 查询菜单详细 // 查询菜单详细
export function getMenu(menuId) { export function getMenu(menuId) {
return request({ return request({
url: '/admin/permission/menus/' + menuId, url: "/admin/permission/menus/" + menuId,
method: 'get' method: "get"
}) });
} }
// 查询菜单下拉树结构 // 查询菜单下拉树结构
export function treeselect() { export function treeselect() {
return request({ return request({
url: '/admin/permission/menus/treeselect/?status=1', url: "/admin/permission/menus/treeselect/?status=1",
method: 'get' method: "get"
}) });
} }
// 根据角色ID查询菜单下拉树结构 // 根据角色ID查询菜单下拉树结构
export function roleMenuTreeselect(roleId) { export function roleMenuTreeselect(roleId) {
return request({ return request({
url: '/admin/permission/menus/roleMenuTreeselect/' + roleId + '/?status=1', url: "/admin/permission/menus/roleMenuTreeselect/" + roleId + "/?status=1",
method: 'get' method: "get"
}) });
} }
// 新增菜单 // 新增菜单
export function addMenu(data) { export function addMenu(data) {
return request({ return request({
url: '/admin/permission/menus/', url: "/admin/permission/menus/",
method: 'post', method: "post",
data: data data: data
}) });
} }
// 修改菜单 // 修改菜单
export function updateMenu(data) { export function updateMenu(data) {
return request({ return request({
url: '/admin/permission/menus/'+ data.id + '/', url: "/admin/permission/menus/" + data.id + "/",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 删除菜单 // 删除菜单
export function delMenu(menuId) { export function delMenu(menuId) {
return request({ return request({
url: '/admin/permission/menus/' + menuId + '/', url: "/admin/permission/menus/" + menuId + "/",
method: 'delete' method: "delete"
}) });
} }

View File

@ -6,23 +6,23 @@
* @Description: In User Settings Edit * @Description: In User Settings Edit
* @FilePath: \dvadmin-ui\src\api\permission\msg.js * @FilePath: \dvadmin-ui\src\api\permission\msg.js
*/ */
import request from '@/utils/request' import request from "@/utils/request";
// 查询消息列表 // 查询消息列表
export function getList(query) { export function getList(query) {
return request({ return request({
url: '/admin/system/config/', url: "/admin/system/config/",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 查看详情 // 查看详情
export function getDesc(configId) { export function getDesc(configId) {
return request({ return request({
url: '/admin/system/config/' + configId + '/', url: "/admin/system/config/" + configId + "/",
method: 'get' method: "get"
}) });
} }
// // 根据消息标题查询 // // 根据消息标题查询
@ -36,35 +36,34 @@ export function getDesc(configId) {
// 新增消息 // 新增消息
export function addMsg(data) { export function addMsg(data) {
return request({ return request({
url: '/admin/system/config/', url: "/admin/system/config/",
method: 'post', method: "post",
data: data data: data
}) });
} }
// 修改消息 // 修改消息
export function updateMsg(data) { export function updateMsg(data) {
return request({ return request({
url: '/admin/system/config/' + data.id + '/', url: "/admin/system/config/" + data.id + "/",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 删除消息 // 删除消息
export function delMsg(configId) { export function delMsg(configId) {
return request({ return request({
url: '/admin/system/config/' + configId + '/', url: "/admin/system/config/" + configId + "/",
method: 'delete' method: "delete"
}) });
} }
// 导出消息 // 导出消息
export function exportMsg(query) { export function exportMsg(query) {
return request({ return request({
url: '/admin/system/config/export/', url: "/admin/system/config/export/",
method: 'get', method: "get",
params: query params: query
}) });
} }

View File

@ -1,53 +1,53 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询岗位列表 // 查询岗位列表
export function listPost(query) { export function listPost(query) {
return request({ return request({
url: '/admin/permission/post/', url: "/admin/permission/post/",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 查询岗位详细 // 查询岗位详细
export function getPost(postId) { export function getPost(postId) {
return request({ return request({
url: '/admin/permission/post/' + postId + '/', url: "/admin/permission/post/" + postId + "/",
method: 'get' method: "get"
}) });
} }
// 新增岗位 // 新增岗位
export function addPost(data) { export function addPost(data) {
return request({ return request({
url: '/admin/permission/post/', url: "/admin/permission/post/",
method: 'post', method: "post",
data: data data: data
}) });
} }
// 修改岗位 // 修改岗位
export function updatePost(data) { export function updatePost(data) {
return request({ return request({
url: '/admin/permission/post/' + data.id + '/', url: "/admin/permission/post/" + data.id + "/",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 删除岗位 // 删除岗位
export function delPost(postId) { export function delPost(postId) {
return request({ return request({
url: '/admin/permission/post/' + postId + '/', url: "/admin/permission/post/" + postId + "/",
method: 'delete' method: "delete"
}) });
} }
// 导出岗位 // 导出岗位
export function exportPost(query) { export function exportPost(query) {
return request({ return request({
url: '/admin/permission/post/export/', url: "/admin/permission/post/export/",
method: 'get', method: "get",
params: query params: query
}) });
} }

View File

@ -1,47 +1,47 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询角色列表 // 查询角色列表
export function listRole(query) { export function listRole(query) {
return request({ return request({
url: '/admin/permission/role/', url: "/admin/permission/role/",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 查询角色详细 // 查询角色详细
export function getRole(roleId) { export function getRole(roleId) {
return request({ return request({
url: '/admin/permission/role/' + roleId + '/', url: "/admin/permission/role/" + roleId + "/",
method: 'get' method: "get"
}) });
} }
// 新增角色 // 新增角色
export function addRole(data) { export function addRole(data) {
return request({ return request({
url: '/admin/permission/role/', url: "/admin/permission/role/",
method: 'post', method: "post",
data: data data: data
}) });
} }
// 修改角色 // 修改角色
export function updateRole(data) { export function updateRole(data) {
return request({ return request({
url: '/admin/permission/role/' + data.id + '/', url: "/admin/permission/role/" + data.id + "/",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 角色数据权限 // 角色数据权限
export function dataScope(data) { export function dataScope(data) {
return request({ return request({
url: '/admin/permission/role/' + data.id + '/', url: "/admin/permission/role/" + data.id + "/",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 角色状态修改 // 角色状态修改
@ -49,27 +49,27 @@ export function changeRoleStatus(roleId, status) {
const data = { const data = {
roleId, roleId,
status status
} };
return request({ return request({
url: '/admin/permission/role/changeStatus/', url: "/admin/permission/role/changeStatus/",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 删除角色 // 删除角色
export function delRole(roleId) { export function delRole(roleId) {
return request({ return request({
url: '/admin/permission/role/' + roleId + '/', url: "/admin/permission/role/" + roleId + "/",
method: 'delete' method: "delete"
}) });
} }
// 导出角色 // 导出角色
export function exportRole(query) { export function exportRole(query) {
return request({ return request({
url: '/admin/permission/role/export/', url: "/admin/permission/role/export/",
method: 'get', method: "get",
params: query params: query
}) });
} }

View File

@ -1,56 +1,56 @@
import request from '@/utils/request' import request from "@/utils/request";
import {praseStrEmpty} from "@/utils/ruoyi"; import { praseStrEmpty } from "@/utils/ruoyi";
// 查询用户列表 // 查询用户列表
export function listUser(query) { export function listUser(query) {
return request({ return request({
url: '/admin/permission/user/', url: "/admin/permission/user/",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 查询用户详细 // 查询用户详细
export function getUser(userId) { export function getUser(userId) {
return request({ return request({
url: '/admin/permission/user/details/?userId=' + praseStrEmpty(userId), url: "/admin/permission/user/details/?userId=" + praseStrEmpty(userId),
method: 'get' method: "get"
}) });
} }
// 新增用户 // 新增用户
export function addUser(data) { export function addUser(data) {
return request({ return request({
url: '/admin/permission/user/', url: "/admin/permission/user/",
method: 'post', method: "post",
data: data data: data
}) });
} }
// 修改用户 // 修改用户
export function updateUser(data) { export function updateUser(data) {
return request({ return request({
url: '/admin/permission/user/' + data.id + '/', url: "/admin/permission/user/" + data.id + "/",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 删除用户 // 删除用户
export function delUser(userId) { export function delUser(userId) {
return request({ return request({
url: '/admin/permission/user/' + userId + '/', url: "/admin/permission/user/" + userId + "/",
method: 'delete' method: "delete"
}) });
} }
// 导出用户 // 导出用户
export function exportUser(query) { export function exportUser(query) {
return request({ return request({
url: '/admin/permission/user/export/', url: "/admin/permission/user/export/",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 用户密码重置 // 用户密码重置
@ -58,12 +58,12 @@ export function resetUserPwd(userId, password) {
const data = { const data = {
userId, userId,
password password
} };
return request({ return request({
url: '/admin/permission/user/resetPwd/', url: "/admin/permission/user/resetPwd/",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 用户状态修改 // 用户状态修改
@ -71,29 +71,29 @@ export function changeUserStatus(userId, status) {
const data = { const data = {
userId, userId,
status status
} };
return request({ return request({
url: '/admin/permission/user/changeStatus/', url: "/admin/permission/user/changeStatus/",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 查询用户个人信息 // 查询用户个人信息
export function getUserProfile() { export function getUserProfile() {
return request({ return request({
url: '/admin/permission/user/profile/', url: "/admin/permission/user/profile/",
method: 'get' method: "get"
}) });
} }
// 修改用户个人信息 // 修改用户个人信息
export function updateUserProfile(data) { export function updateUserProfile(data) {
return request({ return request({
url: '/admin/permission/user/profile/', url: "/admin/permission/user/profile/",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 用户密码重置 // 用户密码重置
@ -101,36 +101,36 @@ export function updateUserPwd(oldPassword, newPassword) {
const data = { const data = {
oldPassword, oldPassword,
newPassword newPassword
} };
return request({ return request({
url: '/admin/permission/user/profile/updatePwd/', url: "/admin/permission/user/profile/updatePwd/",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 用户头像上传 // 用户头像上传
export function uploadAvatar(data) { export function uploadAvatar(data) {
return request({ return request({
url: '/admin/permission/user/profile/avatar/', url: "/admin/permission/user/profile/avatar/",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 下载用户导入模板 // 下载用户导入模板
export function importTemplate() { export function importTemplate() {
return request({ return request({
url: '/admin/permission/user/importTemplate/', url: "/admin/permission/user/importTemplate/",
method: 'get' method: "get"
}) });
} }
// 用户导入 // 用户导入
export function importsUser(data) { export function importsUser(data) {
return request({ return request({
url: '/admin/permission/user/importTemplate/', url: "/admin/permission/user/importTemplate/",
method: 'post', method: "post",
data: data data: data
}) });
} }

View File

@ -1,69 +1,69 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询参数列表 // 查询参数列表
export function listConfig(query) { export function listConfig(query) {
return request({ return request({
url: '/admin/system/config/', url: "/admin/system/config/",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 查询参数详细 // 查询参数详细
export function getConfig(configId) { export function getConfig(configId) {
return request({ return request({
url: '/admin/system/config/' + configId + '/', url: "/admin/system/config/" + configId + "/",
method: 'get' method: "get"
}) });
} }
// 根据参数键名查询参数值 // 根据参数键名查询参数值
export function getConfigKey(configKey) { export function getConfigKey(configKey) {
return request({ return request({
url: '/admin/system/config/configKey/' + configKey + '/?status=1', url: "/admin/system/config/configKey/" + configKey + "/?status=1",
method: 'get' method: "get"
}) });
} }
// 新增参数配置 // 新增参数配置
export function addConfig(data) { export function addConfig(data) {
return request({ return request({
url: '/admin/system/config/', url: "/admin/system/config/",
method: 'post', method: "post",
data: data data: data
}) });
} }
// 修改参数配置 // 修改参数配置
export function updateConfig(data) { export function updateConfig(data) {
return request({ return request({
url: '/admin/system/config/' + data.id + '/', url: "/admin/system/config/" + data.id + "/",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 删除参数配置 // 删除参数配置
export function delConfig(configId) { export function delConfig(configId) {
return request({ return request({
url: '/admin/system/config/' + configId + '/', url: "/admin/system/config/" + configId + "/",
method: 'delete' method: "delete"
}) });
} }
// 清理参数缓存 // 清理参数缓存
export function clearCache() { export function clearCache() {
return request({ return request({
url: '/admin/system/config/clearCache/', url: "/admin/system/config/clearCache/",
method: 'delete' method: "delete"
}) });
} }
// 导出参数 // 导出参数
export function exportConfig(query) { export function exportConfig(query) {
return request({ return request({
url: '/admin/system/config/export/', url: "/admin/system/config/export/",
method: 'get', method: "get",
params: query params: query
}) });
} }

View File

@ -1,61 +1,61 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询字典数据列表 // 查询字典数据列表
export function listData(query) { export function listData(query) {
return request({ return request({
url: '/admin/system/dict/data/', url: "/admin/system/dict/data/",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 查询字典数据详细 // 查询字典数据详细
export function getData(dictCode) { export function getData(dictCode) {
return request({ return request({
url: '/admin/system/dict/data/' + dictCode + '/', url: "/admin/system/dict/data/" + dictCode + "/",
method: 'get' method: "get"
}) });
} }
// 根据字典类型查询字典数据信息 // 根据字典类型查询字典数据信息
export function getDicts(dictType) { export function getDicts(dictType) {
return request({ return request({
url: '/admin/system/dict/get/type/' + dictType + '/?status=1', url: "/admin/system/dict/get/type/" + dictType + "/?status=1",
method: 'get' method: "get"
}) });
} }
// 新增字典数据 // 新增字典数据
export function addData(data) { export function addData(data) {
return request({ return request({
url: '/admin/system/dict/data' + '/', url: "/admin/system/dict/data" + "/",
method: 'post', method: "post",
data: data data: data
}) });
} }
// 修改字典数据 // 修改字典数据
export function updateData(data) { export function updateData(data) {
return request({ return request({
url: '/admin/system/dict/data/' + data.id + '/', url: "/admin/system/dict/data/" + data.id + "/",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 删除字典数据 // 删除字典数据
export function delData(dictCode) { export function delData(dictCode) {
return request({ return request({
url: '/admin/system/dict/data/' + dictCode + '/', url: "/admin/system/dict/data/" + dictCode + "/",
method: 'delete' method: "delete"
}) });
} }
// 导出字典数据 // 导出字典数据
export function exportData(query) { export function exportData(query) {
return request({ return request({
url: '/admin/system/dict/data/export/', url: "/admin/system/dict/data/export/",
method: 'get', method: "get",
params: query params: query
}) });
} }

View File

@ -1,69 +1,69 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询字典类型列表 // 查询字典类型列表
export function listType(query) { export function listType(query) {
return request({ return request({
url: '/admin/system/dict/type/', url: "/admin/system/dict/type/",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 查询字典类型详细 // 查询字典类型详细
export function getType(dictId) { export function getType(dictId) {
return request({ return request({
url: '/admin/system/dict/type/' + dictId + '/', url: "/admin/system/dict/type/" + dictId + "/",
method: 'get' method: "get"
}) });
} }
// 新增字典类型 // 新增字典类型
export function addType(data) { export function addType(data) {
return request({ return request({
url: '/admin/system/dict/type/', url: "/admin/system/dict/type/",
method: 'post', method: "post",
data: data data: data
}) });
} }
// 修改字典类型 // 修改字典类型
export function updateType(data) { export function updateType(data) {
return request({ return request({
url: '/admin/system/dict/type/' + data.id + '/', url: "/admin/system/dict/type/" + data.id + "/",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 删除字典类型 // 删除字典类型
export function delType(dictId) { export function delType(dictId) {
return request({ return request({
url: '/admin/system/dict/type/' + dictId + '/', url: "/admin/system/dict/type/" + dictId + "/",
method: 'delete' method: "delete"
}) });
} }
// 清理参数缓存 // 清理参数缓存
export function clearCache() { export function clearCache() {
return request({ return request({
url: '/admin/system/dict/type/clearCache/', url: "/admin/system/dict/type/clearCache/",
method: 'delete' method: "delete"
}) });
} }
// 导出字典类型 // 导出字典类型
export function exportType(query) { export function exportType(query) {
return request({ return request({
url: '/admin/system/dict/type/export/', url: "/admin/system/dict/type/export/",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 获取字典选择框列表 // 获取字典选择框列表
export function optionselect() { export function optionselect() {
return request({ return request({
url: '/admin/system/dict/type/optionselect', url: "/admin/system/dict/type/optionselect",
method: 'get' method: "get"
}) });
} }

View File

@ -1,71 +1,70 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询通知列表 // 查询通知列表
export function listMessage(query) { export function listMessage(query) {
return request({ return request({
url: '/admin/system/message/', url: "/admin/system/message/",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 查询通知详细 // 查询通知详细
export function getMessage(messageId) { export function getMessage(messageId) {
return request({ return request({
url: '/admin/system/message/' + messageId + '/', url: "/admin/system/message/" + messageId + "/",
method: 'get' method: "get"
}) });
} }
// 新增通知配置 // 新增通知配置
export function addMessage(data) { export function addMessage(data) {
return request({ return request({
url: '/admin/system/message/', url: "/admin/system/message/",
method: 'post', method: "post",
data: data data: data
}) });
} }
// 修改通知配置 // 修改通知配置
export function updateMessage(data) { export function updateMessage(data) {
return request({ return request({
url: '/admin/system/message/' + data.id + '/', url: "/admin/system/message/" + data.id + "/",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 删除通知配置 // 删除通知配置
export function delMessage(messageId) { export function delMessage(messageId) {
return request({ return request({
url: '/admin/system/message/' + messageId + '/', url: "/admin/system/message/" + messageId + "/",
method: 'delete' method: "delete"
}) });
} }
// 导出通知 // 导出通知
export function exportMessage(query) { export function exportMessage(query) {
return request({ return request({
url: '/admin/system/message/export/', url: "/admin/system/message/export/",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 获取用户通知列表 // 获取用户通知列表
export function userMessage(query) { export function userMessage(query) {
return request({ return request({
url: '/admin/system/message/user_messages/', url: "/admin/system/message/user_messages/",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 修改通知为已读 // 修改通知为已读
export function updateIsRead(data) { export function updateIsRead(data) {
return request({ return request({
url: '/admin/system/message/is_read/'+ data.id + '/', url: "/admin/system/message/is_read/" + data.id + "/",
method: 'put', method: "put"
}) });
} }

View File

@ -1,44 +1,44 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询公告列表 // 查询公告列表
export function listNotice(query) { export function listNotice(query) {
return request({ return request({
url: '/admin/system/notice/list', url: "/admin/system/notice/list",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 查询公告详细 // 查询公告详细
export function getNotice(noticeId) { export function getNotice(noticeId) {
return request({ return request({
url: '/admin/system/notice/' + noticeId, url: "/admin/system/notice/" + noticeId,
method: 'get' method: "get"
}) });
} }
// 新增公告 // 新增公告
export function addNotice(data) { export function addNotice(data) {
return request({ return request({
url: '/admin/system/notice', url: "/admin/system/notice",
method: 'post', method: "post",
data: data data: data
}) });
} }
// 修改公告 // 修改公告
export function updateNotice(data) { export function updateNotice(data) {
return request({ return request({
url: '/admin/system/notice', url: "/admin/system/notice",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 删除公告 // 删除公告
export function delNotice(noticeId) { export function delNotice(noticeId) {
return request({ return request({
url: '/admin/system/notice/' + noticeId, url: "/admin/system/notice/" + noticeId,
method: 'delete' method: "delete"
}) });
} }

View File

@ -1,35 +1,35 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询操作日志列表 // 查询操作日志列表
export function list(query) { export function list(query) {
return request({ return request({
url: '/admin/system/operation_log/', url: "/admin/system/operation_log/",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 删除操作日志 // 删除操作日志
export function delOperationLog(operId) { export function delOperationLog(operId) {
return request({ return request({
url: '/admin/system/operation_log/' + operId + '/', url: "/admin/system/operation_log/" + operId + "/",
method: 'delete' method: "delete"
}) });
} }
// 清空操作日志 // 清空操作日志
export function cleanOperationLog() { export function cleanOperationLog() {
return request({ return request({
url: '/admin/system/operation_log/clean/', url: "/admin/system/operation_log/clean/",
method: 'delete' method: "delete"
}) });
} }
// 导出操作日志 // 导出操作日志
export function exportOperationLog(query) { export function exportOperationLog(query) {
return request({ return request({
url: '/admin/system/operation_log/export/', url: "/admin/system/operation_log/export/",
method: 'get', method: "get",
params: query params: query
}) });
} }

View File

@ -1,36 +1,35 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询文件列表 // 查询文件列表
export function listSaveFile(query) { export function listSaveFile(query) {
return request({ return request({
url: '/admin/system/savefile/', url: "/admin/system/savefile/",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 新增文件 // 新增文件
export function addSaveFile(data) { export function addSaveFile(data) {
return request({ return request({
url: '/admin/system/savefile/', url: "/admin/system/savefile/",
method: 'post', method: "post",
data: data data: data
}) });
} }
// 删除文件 // 删除文件
export function delSaveFile(menuId) { export function delSaveFile(menuId) {
return request({ return request({
url: '/admin/system/savefile/' + menuId + '/', url: "/admin/system/savefile/" + menuId + "/",
method: 'delete' method: "delete"
}) });
} }
// 清理废弃文件 // 清理废弃文件
export function clearSaveFile() { export function clearSaveFile() {
return request({ return request({
url: '/admin/system/clearsavefile/', url: "/admin/system/clearsavefile/",
method: 'post' method: "post"
}) });
} }

View File

@ -1,76 +1,76 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询生成表数据 // 查询生成表数据
export function listTable(query) { export function listTable(query) {
return request({ return request({
url: '/tool/gen/list', url: "/tool/gen/list",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 查询db数据库列表 // 查询db数据库列表
export function listDbTable(query) { export function listDbTable(query) {
return request({ return request({
url: '/tool/gen/db/list', url: "/tool/gen/db/list",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 查询表详细信息 // 查询表详细信息
export function getGenTable(tableId) { export function getGenTable(tableId) {
return request({ return request({
url: '/tool/gen/' + tableId, url: "/tool/gen/" + tableId,
method: 'get' method: "get"
}) });
} }
// 修改代码生成信息 // 修改代码生成信息
export function updateGenTable(data) { export function updateGenTable(data) {
return request({ return request({
url: '/tool/gen', url: "/tool/gen",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 导入表 // 导入表
export function importTable(data) { export function importTable(data) {
return request({ return request({
url: '/tool/gen/importTable', url: "/tool/gen/importTable",
method: 'post', method: "post",
params: data params: data
}) });
} }
// 预览生成代码 // 预览生成代码
export function previewTable(tableId) { export function previewTable(tableId) {
return request({ return request({
url: '/tool/gen/preview/' + tableId, url: "/tool/gen/preview/" + tableId,
method: 'get' method: "get"
}) });
} }
// 删除表数据 // 删除表数据
export function delTable(tableId) { export function delTable(tableId) {
return request({ return request({
url: '/tool/gen/' + tableId, url: "/tool/gen/" + tableId,
method: 'delete' method: "delete"
}) });
} }
// 生成代码自定义路径 // 生成代码自定义路径
export function genCode(tableName) { export function genCode(tableName) {
return request({ return request({
url: '/tool/gen/genCode/' + tableName, url: "/tool/gen/genCode/" + tableName,
method: 'get' method: "get"
}) });
} }
// 同步数据库 // 同步数据库
export function synchDb(tableName) { export function synchDb(tableName) {
return request({ return request({
url: '/tool/gen/synchDb/' + tableName, url: "/tool/gen/synchDb/" + tableName,
method: 'get' method: "get"
}) });
} }

Some files were not shown because too many files have changed in this diff Show More