From a8127efd86a044f3f193f4832aa65bc019311a58 Mon Sep 17 00:00:00 2001 From: wxg0103 <727495428@qq.com> Date: Tue, 24 Jun 2025 11:09:19 +0800 Subject: [PATCH] refactor: add valid --- apps/locales/en_US/LC_MESSAGES/django.po | 6 ++ apps/locales/zh_CN/LC_MESSAGES/django.po | 8 +- apps/locales/zh_Hant/LC_MESSAGES/django.po | 8 +- .../serializers/valid_serializers.py | 56 +++++++++++++ apps/system_manage/urls.py | 3 +- apps/system_manage/views/__init__.py | 1 + apps/system_manage/views/valid.py | 31 +++++++ ui/src/api/system/user-manage.ts | 16 +++- ui/src/locales/lang/en-US/views/login.ts | 2 +- .../locales/lang/en-US/views/user-manage.ts | 1 + ui/src/locales/lang/zh-CN/views/login.ts | 2 +- .../locales/lang/zh-CN/views/user-manage.ts | 1 + ui/src/locales/lang/zh-Hant/views/login.ts | 2 +- .../locales/lang/zh-Hant/views/user-manage.ts | 1 + ui/src/stores/modules/common.ts | 28 +++---- .../user-manage/component/UserDrawer.vue | 17 +++- ui/src/views/system/user-manage/index.vue | 83 ++++++++++--------- 17 files changed, 205 insertions(+), 61 deletions(-) create mode 100644 apps/system_manage/serializers/valid_serializers.py create mode 100644 apps/system_manage/views/valid.py diff --git a/apps/locales/en_US/LC_MESSAGES/django.po b/apps/locales/en_US/LC_MESSAGES/django.po index 8ff40ab2f..b9d8e3719 100644 --- a/apps/locales/en_US/LC_MESSAGES/django.po +++ b/apps/locales/en_US/LC_MESSAGES/django.po @@ -8366,4 +8366,10 @@ msgid "Get tool list" msgstr "" msgid "Setting" +msgstr "" + +msgid "Get verification results" +msgstr "" + +msgid "Validation" msgstr "" \ No newline at end of file diff --git a/apps/locales/zh_CN/LC_MESSAGES/django.po b/apps/locales/zh_CN/LC_MESSAGES/django.po index 9144d2832..30f0f7023 100644 --- a/apps/locales/zh_CN/LC_MESSAGES/django.po +++ b/apps/locales/zh_CN/LC_MESSAGES/django.po @@ -8492,4 +8492,10 @@ msgid "Get tool list" msgstr "获取工具列表" msgid "Setting" -msgstr "设置" \ No newline at end of file +msgstr "设置" + +msgid "Get verification results" +msgstr "获取验证结果" + +msgid "Validation" +msgstr "验证" diff --git a/apps/locales/zh_Hant/LC_MESSAGES/django.po b/apps/locales/zh_Hant/LC_MESSAGES/django.po index 90a62ad1e..15c522519 100644 --- a/apps/locales/zh_Hant/LC_MESSAGES/django.po +++ b/apps/locales/zh_Hant/LC_MESSAGES/django.po @@ -8492,4 +8492,10 @@ msgid "Get tool list" msgstr "獲取工具列表" msgid "Setting" -msgstr "設置" \ No newline at end of file +msgstr "設置" + +msgid "Get verification results" +msgstr "獲取驗證結果" + +msgid "Validation" +msgstr "驗證" \ No newline at end of file diff --git a/apps/system_manage/serializers/valid_serializers.py b/apps/system_manage/serializers/valid_serializers.py new file mode 100644 index 000000000..1b518f9ad --- /dev/null +++ b/apps/system_manage/serializers/valid_serializers.py @@ -0,0 +1,56 @@ +# coding=utf-8 +""" + @project: MaxKB + @Author:虎 + @file: valid_serializers.py + @date:2024/7/8 18:00 + @desc: +""" +import re + +from django.core import validators +from django.core.cache import cache +from django.db.models import QuerySet +from rest_framework import serializers + +from application.models import Application +from common.constants.cache_version import Cache_Version +from common.exception.app_exception import AppApiException +from knowledge.models import Knowledge +from users.models import User +from django.utils.translation import gettext_lazy as _ + +model_message_dict = { + 'dataset': {'model': Knowledge, 'count': 50, + 'message': _( + 'The community version supports up to 50 knowledge bases. If you need more knowledge bases, please contact us (https://fit2cloud.com/).')}, + 'application': {'model': Application, 'count': 5, + 'message': _( + 'The community version supports up to 5 applications. If you need more applications, please contact us (https://fit2cloud.com/).')}, + 'user': {'model': User, 'count': 2, + 'message': _( + 'The community version supports up to 2 users. If you need more users, please contact us (https://fit2cloud.com/).')} +} + + +class ValidSerializer(serializers.Serializer): + valid_type = serializers.CharField(required=True, label=_('type'), validators=[ + validators.RegexValidator(regex=re.compile("^application|knowledge|user$"), + message="类型只支持:application|knowledge|user", code=500) + ]) + valid_count = serializers.IntegerField(required=True, label=_('check quantity')) + + def valid(self, is_valid=True): + if is_valid: + self.is_valid(raise_exception=True) + model_value = model_message_dict.get(self.data.get('valid_type')) + license_is_valid = cache.get(Cache_Version.SYSTEM.get_key(key='license_is_valid'), + version=Cache_Version.SYSTEM.get_version()) + is_license_valid = license_is_valid if license_is_valid is not None else False + if not is_license_valid: + if self.data.get('valid_count') != model_value.get('count'): + raise AppApiException(400, model_value.get('message')) + if QuerySet( + model_value.get('model')).count() >= model_value.get('count'): + raise AppApiException(400, model_value.get('message')) + return True diff --git a/apps/system_manage/urls.py b/apps/system_manage/urls.py index b18c09686..547ccd0a1 100644 --- a/apps/system_manage/urls.py +++ b/apps/system_manage/urls.py @@ -7,5 +7,6 @@ urlpatterns = [ path('workspace//user_resource_permission/user/', views.WorkSpaceUserResourcePermissionView.as_view()), path('email_setting', views.SystemSetting.Email.as_view()), - path('profile', views.SystemProfile.as_view()) + path('profile', views.SystemProfile.as_view()), + path('valid//', views.Valid.as_view()) ] diff --git a/apps/system_manage/views/__init__.py b/apps/system_manage/views/__init__.py index c7b9d2aef..feb26cdba 100644 --- a/apps/system_manage/views/__init__.py +++ b/apps/system_manage/views/__init__.py @@ -9,3 +9,4 @@ from .user_resource_permission import * from .email_setting import * from .system_profile import * +from .valid import * diff --git a/apps/system_manage/views/valid.py b/apps/system_manage/views/valid.py new file mode 100644 index 000000000..5d1ddfc54 --- /dev/null +++ b/apps/system_manage/views/valid.py @@ -0,0 +1,31 @@ +# coding=utf-8 +""" + @project: MaxKB + @Author:虎 + @file: valid.py + @date:2024/7/8 17:50 + @desc: +""" +from drf_spectacular.utils import extend_schema +from rest_framework.request import Request +from rest_framework.views import APIView + +from common.auth import TokenAuth +from django.utils.translation import gettext_lazy as _ + +from common.result import result +from system_manage.serializers.valid_serializers import ValidSerializer + + +class Valid(APIView): + authentication_classes = [TokenAuth] + + @extend_schema( + methods=['GET'], + description=_('Get verification results'), + summary=_('Get verification results'), + operation_id=_('Get verification results'), # type: ignore + tags=[_('Validation')] # type: ignore + ) + def get(self, request: Request, valid_type: str, valid_count: int): + return result.success(ValidSerializer(data={'valid_type': valid_type, 'valid_count': valid_count}).valid()) diff --git a/ui/src/api/system/user-manage.ts b/ui/src/api/system/user-manage.ts index 09c41603f..e99066a41 100644 --- a/ui/src/api/system/user-manage.ts +++ b/ui/src/api/system/user-manage.ts @@ -101,6 +101,19 @@ const getSystemDefaultPassword: ( } +/** + * 获取校验 + * @param valid_type 校验类型: application|knowledge|user + * @param valid_count 校验数量: 5 | 50 | 2 + */ +const getValid: ( + valid_type: string, + valid_count: number, + loading?: Ref +) => Promise> = (valid_type, valid_count, loading) => { + return get(`/valid/${valid_type}/${valid_count}`, undefined, loading) +} + export default { getUserManage, putUserManage, @@ -109,5 +122,6 @@ export default { putUserManagePassword, resetPassword, resetCurrentPassword, - getSystemDefaultPassword + getSystemDefaultPassword, + getValid } diff --git a/ui/src/locales/lang/en-US/views/login.ts b/ui/src/locales/lang/en-US/views/login.ts index 4a77c0902..cf02969e9 100644 --- a/ui/src/locales/lang/en-US/views/login.ts +++ b/ui/src/locales/lang/en-US/views/login.ts @@ -5,7 +5,7 @@ export default { label: 'Username', placeholder: 'Please enter username', requiredMessage: 'Please enter username', - lengthMessage: 'Length must be between 6 and 20 words', + lengthMessage: 'Length must be between 4 and 20 words', }, password: { label: 'Login Password', diff --git a/ui/src/locales/lang/en-US/views/user-manage.ts b/ui/src/locales/lang/en-US/views/user-manage.ts index 7c5ab6a16..4eca16e98 100644 --- a/ui/src/locales/lang/en-US/views/user-manage.ts +++ b/ui/src/locales/lang/en-US/views/user-manage.ts @@ -26,6 +26,7 @@ export default { nick_name: { label: 'Name', placeholder: 'Please enter name', + lengthMessage: 'Length must be between 2 and 20 characters', }, phone: { label: 'Phone', diff --git a/ui/src/locales/lang/zh-CN/views/login.ts b/ui/src/locales/lang/zh-CN/views/login.ts index d38f78078..c62aac36d 100644 --- a/ui/src/locales/lang/zh-CN/views/login.ts +++ b/ui/src/locales/lang/zh-CN/views/login.ts @@ -5,7 +5,7 @@ export default { label: '用户名', placeholder: '请输入用户名', requiredMessage: '请输入用户名', - lengthMessage: '长度在 6 到 20 个字符', + lengthMessage: '长度在 4 到 20 个字符', }, password: { label: '登录密码', diff --git a/ui/src/locales/lang/zh-CN/views/user-manage.ts b/ui/src/locales/lang/zh-CN/views/user-manage.ts index 0edd4d29c..9c907a9e8 100644 --- a/ui/src/locales/lang/zh-CN/views/user-manage.ts +++ b/ui/src/locales/lang/zh-CN/views/user-manage.ts @@ -23,6 +23,7 @@ export default { nick_name: { label: '姓名', placeholder: '请输入姓名', + lengthMessage: '长度在 2 到 20 个字符', }, phone: { diff --git a/ui/src/locales/lang/zh-Hant/views/login.ts b/ui/src/locales/lang/zh-Hant/views/login.ts index e21e568e3..207b83c7e 100644 --- a/ui/src/locales/lang/zh-Hant/views/login.ts +++ b/ui/src/locales/lang/zh-Hant/views/login.ts @@ -5,7 +5,7 @@ export default { label: '使用者名稱', placeholder: '請輸入使用者名稱', requiredMessage: '請輸入使用者名稱', - lengthMessage: '長度須介於 6 到 20 個字元之間', + lengthMessage: '長度須介於 4 到 20 個字元之間', }, password: { label: '登入密碼', diff --git a/ui/src/locales/lang/zh-Hant/views/user-manage.ts b/ui/src/locales/lang/zh-Hant/views/user-manage.ts index b6a271ac6..1659df6c8 100644 --- a/ui/src/locales/lang/zh-Hant/views/user-manage.ts +++ b/ui/src/locales/lang/zh-Hant/views/user-manage.ts @@ -24,6 +24,7 @@ export default { nick_name: { label: '姓名', placeholder: '請輸入姓名', + lengthMessage: '長度須介於 2 到 20 個字元之間', }, phone: { diff --git a/ui/src/stores/modules/common.ts b/ui/src/stores/modules/common.ts index 5cd054db7..0a52ebdb4 100644 --- a/ui/src/stores/modules/common.ts +++ b/ui/src/stores/modules/common.ts @@ -1,7 +1,7 @@ import { defineStore } from 'pinia' import { DeviceType, ValidType } from '@/enums/common' -// import type { Ref } from 'vue' -// import userApi from '@/api/user/user' +import type { Ref } from 'vue' +import userApi from '@/api/system/user-manage' export interface commonTypes { breadcrumb: any @@ -34,18 +34,18 @@ const useCommonStore = defineStore('common',{ isMobile() { return this.device === DeviceType.Mobile }, - // async asyncGetValid(valid_type: ValidType, valid_count: number, loading?: Ref) { - // return new Promise((resolve, reject) => { - // userApi - // .getValid(valid_type, valid_count, loading) - // .then((data) => { - // resolve(data) - // }) - // .catch((error) => { - // reject(error) - // }) - // }) - // } + async asyncGetValid(valid_type: ValidType, valid_count: number, loading?: Ref) { + return new Promise((resolve, reject) => { + userApi + .getValid(valid_type, valid_count, loading) + .then((data) => { + resolve(data) + }) + .catch((error) => { + reject(error) + }) + }) + } } }) diff --git a/ui/src/views/system/user-manage/component/UserDrawer.vue b/ui/src/views/system/user-manage/component/UserDrawer.vue index f997a8560..7c60589e1 100644 --- a/ui/src/views/system/user-manage/component/UserDrawer.vue +++ b/ui/src/views/system/user-manage/component/UserDrawer.vue @@ -27,7 +27,7 @@ > - +
{{ - $t('views.userManage.createUser') - }} + $t('views.userManage.createUser') + }} +