From 3dd68e5d21d251fe6c40753191a694f0c08920ee Mon Sep 17 00:00:00 2001
From: H0nGzA1 <2505811377@qq.com>
Date: Wed, 12 Apr 2023 01:58:34 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E2=9C=A8=20=E8=B4=A6=E5=8F=B7=E9=94=81?=
=?UTF-8?q?=E5=AE=9A=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
backend/dvadmin/system/views/login.py | 15 ++-
web/src/views/system/user/crud.tsx | 9 +-
web/src/views/system/user/index.vue | 159 +++++++++++++-------------
3 files changed, 90 insertions(+), 93 deletions(-)
diff --git a/backend/dvadmin/system/views/login.py b/backend/dvadmin/system/views/login.py
index 35923cc..766a6c7 100644
--- a/backend/dvadmin/system/views/login.py
+++ b/backend/dvadmin/system/views/login.py
@@ -1,11 +1,9 @@
import base64
import hashlib
from datetime import datetime, timedelta
-
from captcha.views import CaptchaStore, captcha_image
from django.contrib import auth
from django.contrib.auth import login
-from django.contrib.auth.hashers import make_password, check_password
from django.shortcuts import redirect
from django.utils.translation import gettext_lazy as _
from drf_yasg import openapi
@@ -14,9 +12,7 @@ from rest_framework import serializers
from rest_framework.views import APIView
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework_simplejwt.views import TokenObtainPairView
-
from django.conf import settings
-
from application import dispatch
from dvadmin.system.models import Users
from dvadmin.utils.json_response import ErrorResponse, DetailResponse
@@ -58,6 +54,7 @@ class LoginSerializer(TokenObtainPairSerializer):
captcha = serializers.CharField(
max_length=6, required=False, allow_null=True, allow_blank=True
)
+
class Meta:
model = Users
fields = "__all__"
@@ -79,13 +76,18 @@ class LoginSerializer(TokenObtainPairSerializer):
raise CustomValidationError("验证码过期")
else:
if self.image_code and (
- self.image_code.response == captcha
- or self.image_code.challenge == captcha
+ self.image_code.response == captcha
+ or self.image_code.challenge == captcha
):
self.image_code and self.image_code.delete()
else:
self.image_code and self.image_code.delete()
raise CustomValidationError("图片验证码错误")
+
+ user = Users.objects.get(username=attrs['username'])
+ if not user.is_active:
+ raise CustomValidationError("账号被锁定")
+
data = super().validate(attrs)
data["name"] = self.user.name
data["userId"] = self.user.id
@@ -107,6 +109,7 @@ class LoginSerializer(TokenObtainPairSerializer):
save_login_log(request=request)
return {"code": 2000, "msg": "请求成功", "data": data}
+
class LoginView(TokenObtainPairView):
"""
登录接口
diff --git a/web/src/views/system/user/crud.tsx b/web/src/views/system/user/crud.tsx
index deda080..c09ab52 100644
--- a/web/src/views/system/user/crud.tsx
+++ b/web/src/views/system/user/crud.tsx
@@ -1,15 +1,12 @@
import * as api from './api';
-import { dict, PageQuery, AddReq, DelReq, EditReq, CrudExpose, CrudOptions, compute } from '@fast-crud/fast-crud';
+import { dict, UserPageQuery, AddReq, DelReq, EditReq, compute, CreateCrudOptionsProps, CreateCrudOptionsRet } from '@fast-crud/fast-crud';
import { request } from '/@/utils/service';
import { dictionary } from '/@/utils/dictionary';
import { successMessage } from '/@/utils/message';
import { inject } from 'vue';
-interface CreateCrudOptionsTypes {
- crudOptions: CrudOptions;
-}
-export const createCrudOptions = function ({ crudExpose }: { crudExpose: CrudExpose }): CreateCrudOptionsTypes {
- const pageRequest = async (query: PageQuery) => {
+export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
+ const pageRequest = async (query: UserPageQuery) => {
return await api.GetList(query);
};
const editRequest = async ({ form, row }: EditReq) => {
diff --git a/web/src/views/system/user/index.vue b/web/src/views/system/user/index.vue
index c6fe04d..99e88e3 100644
--- a/web/src/views/system/user/index.vue
+++ b/web/src/views/system/user/index.vue
@@ -1,65 +1,64 @@
-
-
-
-
-
- 部门列表
-
-
-
-
-
-
-
-
-
- {{ node.label }}
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ 部门列表
+
+
+
+
+
+
+
+
+
+ {{ node.label }}
+
+
+
+
+
+
+
+
+
+
+