From a891fbe8262841cccbea31b6553b94c117a5a357 Mon Sep 17 00:00:00 2001 From: lan Date: Sat, 15 Jun 2024 20:04:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E8=BF=87=E6=9C=9F=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/admin/views.py | 6 ++-- apps/base/models.py | 8 +++++- core/storage.py | 1 + fcb-fronted/src/locals/i18n.ts | 2 +- fcb-fronted/src/locals/zh.ts | 1 + fcb-fronted/src/views/Admin/SettingView.vue | 20 +++++++++++-- fcb-fronted/src/views/Share/SendView.vue | 14 +++++---- main.py | 32 +++++---------------- 8 files changed, 45 insertions(+), 39 deletions(-) diff --git a/apps/admin/views.py b/apps/admin/views.py index 1455d9f..b03895f 100644 --- a/apps/admin/views.py +++ b/apps/admin/views.py @@ -8,7 +8,7 @@ from fastapi import APIRouter, Depends from apps.admin.depends import admin_required from apps.admin.pydantics import IDData -from apps.base.models import FileCodes +from apps.base.models import FileCodes, KeyValue from core.response import APIResponse from core.settings import settings from core.storage import file_storage @@ -44,7 +44,7 @@ async def file_list(page: float = 1, size: int = 10): @admin_api.get('/config/get', dependencies=[Depends(admin_required)]) async def get_config(): - return APIResponse(detail=settings.__dict__) + return APIResponse(detail=settings.items()) @admin_api.patch('/config/update', dependencies=[Depends(admin_required)]) @@ -52,7 +52,7 @@ async def update_config(data: dict): admin_token = data.get('admin_token') if admin_token is None or admin_token == '': return APIResponse(code=400, detail='管理员密码不能为空') - + await KeyValue.filter(key='settings').update(value=data) for k, v in data.items(): settings.__setattr__(k, v) return APIResponse() diff --git a/apps/base/models.py b/apps/base/models.py index 2c2b769..a56dfc3 100644 --- a/apps/base/models.py +++ b/apps/base/models.py @@ -24,7 +24,6 @@ class FileCodes(Model): expired_at: Optional[datetime] = fields.DatetimeField(null=True, description='过期时间') expired_count: Optional[int] = fields.IntField(description='可用次数', default=0) used_count: Optional[int] = fields.IntField(description='已用次数', default=0) - created_at: Optional[datetime] = fields.DatetimeField(auto_now_add=True, description='创建时间') async def is_expired(self): @@ -41,4 +40,11 @@ class FileCodes(Model): return f"{self.file_path}/{self.uuid_file_name}" +class KeyValue(Model): + id: Optional[int] = fields.IntField(pk=True) + key: Optional[str] = fields.CharField(max_length=255, description='键', index=True, unique=True) + value: Optional[str] = fields.JSONField(description='值', null=True) + created_at: Optional[datetime] = fields.DatetimeField(auto_now_add=True, description='创建时间') + + file_codes_pydantic = pydantic_model_creator(FileCodes, name='FileCodes') diff --git a/core/storage.py b/core/storage.py index c64dc48..af43114 100644 --- a/core/storage.py +++ b/core/storage.py @@ -288,4 +288,5 @@ storages = { 'onedrive': OneDriveFileStorage, 'opendal': OpenDALFileStorage, } + file_storage: FileStorageInterface = storages[settings.file_storage]() diff --git a/fcb-fronted/src/locals/i18n.ts b/fcb-fronted/src/locals/i18n.ts index e0a23c1..a0e4ae3 100644 --- a/fcb-fronted/src/locals/i18n.ts +++ b/fcb-fronted/src/locals/i18n.ts @@ -4,7 +4,7 @@ const language = ( navigator.language || 'zh_cn' ).toLowerCase(); const lang = (localStorage.getItem('language') || language).replace(/-/, '_'); -console.log(lang) + const i18n = createI18n({ silentTranslationWarn: true, globalInjection: true, diff --git a/fcb-fronted/src/locals/zh.ts b/fcb-fronted/src/locals/zh.ts index 9cd0719..e5335b2 100644 --- a/fcb-fronted/src/locals/zh.ts +++ b/fcb-fronted/src/locals/zh.ts @@ -56,6 +56,7 @@ export default { background: '背景图片', admin_token: '管理密码', uploadSize: '文件大小', + expireStyle: '过期方式', uploadSizeNote: '最大文件大小,单位:(Bytes),1mb=1 * 1024 * 1024', openUpload: { title: '开启上传', diff --git a/fcb-fronted/src/views/Admin/SettingView.vue b/fcb-fronted/src/views/Admin/SettingView.vue index bc67075..adc6fa5 100644 --- a/fcb-fronted/src/views/Admin/SettingView.vue +++ b/fcb-fronted/src/views/Admin/SettingView.vue @@ -23,15 +23,28 @@ {{ t('admin.settings.uploadSizeNote') }} + + + + + + + + + - + {{ t('admin.settings.openUpload.note') }} - + @@ -105,6 +118,7 @@ const config = ref({ name: '', description: '', file_storage: '', + expireStyle: [], admin_token: '', keywords: '', openUpload: 1, @@ -112,7 +126,7 @@ const config = ref({ uploadMinute: 1, s3_access_key_id: '', background: '', - page_explain:'', + page_explain: '', s3_secret_access_key: '', aws_session_token: '', s3_signature_version: '', diff --git a/fcb-fronted/src/views/Share/SendView.vue b/fcb-fronted/src/views/Share/SendView.vue index 0164869..f3d97fd 100644 --- a/fcb-fronted/src/views/Share/SendView.vue +++ b/fcb-fronted/src/views/Share/SendView.vue @@ -3,8 +3,10 @@ import { ref } from 'vue' import CardTools from "@/components/CardTools.vue"; import UploadFile from "@/components/UploadFile.vue"; import UploadText from "@/components/UploadText.vue"; - import { useI18n } from 'vue-i18n' +import { useConfigStore } from "@/stores/config"; + +const { config } = useConfigStore(); const { t } = useI18n() const shareData = ref({ @@ -27,11 +29,11 @@ const shareData = ref({ >