diff --git a/apps/oss/serializers/file.py b/apps/oss/serializers/file.py index cfa22c016..c3584caee 100644 --- a/apps/oss/serializers/file.py +++ b/apps/oss/serializers/file.py @@ -7,7 +7,7 @@ from django.utils.translation import gettext_lazy as _ from rest_framework import serializers from common.exception.app_exception import NotFound404 -from knowledge.models import File +from knowledge.models import File, FileSourceType from tools.serializers.tool import UploadedFileField mime_types = { @@ -57,6 +57,13 @@ mime_types = { class FileSerializer(serializers.Serializer): file = UploadedFileField(required=True, label=_('file')) meta = serializers.JSONField(required=False, allow_null=True) + source_id = serializers.CharField( + required=False, allow_null=True, label=_('source id'), default=FileSourceType.TEMPORARY_120_MINUTE.value + ) + source_type = serializers.ChoiceField( + choices=FileSourceType.choices, required=False, allow_null=True, label=_('source type'), + default=FileSourceType.TEMPORARY_120_MINUTE + ) def upload(self, with_valid=True): if with_valid: @@ -65,7 +72,13 @@ class FileSerializer(serializers.Serializer): if not meta: meta = {'debug': True} file_id = meta.get('file_id', uuid.uuid7()) - file = File(id=file_id, file_name=self.data.get('file').name, meta=meta) + file = File( + id=file_id, + file_name=self.data.get('file').name, + meta=meta, + source_id=self.data.get('source_id') or FileSourceType.TEMPORARY_120_MINUTE.value, + source_type=self.data.get('source_type') or FileSourceType.TEMPORARY_120_MINUTE + ) file.save(self.data.get('file').read()) return f'./oss/file/{file_id}' diff --git a/apps/oss/views/file.py b/apps/oss/views/file.py index 21f2c4be2..12fdb8070 100644 --- a/apps/oss/views/file.py +++ b/apps/oss/views/file.py @@ -42,7 +42,11 @@ class FileView(APIView): ) @log(menu='file', operate='Upload file') def post(self, request: Request): - return result.success(FileSerializer(data={'file': request.FILES.get('file')}).upload()) + return result.success(FileSerializer(data={ + 'file': request.FILES.get('file'), + 'source_id': request.data.get('source_id'), + 'source_type': request.data.get('source_type'), + }).upload()) class Operate(APIView): authentication_classes = [TokenAuth] diff --git a/ui/src/views/document/upload/SetRules.vue b/ui/src/views/document/upload/SetRules.vue index 0ee40f93b..c25256122 100644 --- a/ui/src/views/document/upload/SetRules.vue +++ b/ui/src/views/document/upload/SetRules.vue @@ -112,7 +112,7 @@

{{ $t('views.document.setRules.title.preview') }}

- +
diff --git a/ui/src/views/knowledge/component/EditParagraphDialog.vue b/ui/src/views/knowledge/component/EditParagraphDialog.vue index 9fffaddc7..37e104625 100644 --- a/ui/src/views/knowledge/component/EditParagraphDialog.vue +++ b/ui/src/views/knowledge/component/EditParagraphDialog.vue @@ -10,7 +10,7 @@ > - +

@@ -52,7 +52,7 @@

- +
@@ -62,7 +63,14 @@ const editHandle = (item: any, cIndex: number) => { EditParagraphDialogRef.value.open(item) } -const props = defineProps<{ modelValue: Array; isConnect: boolean }>() +const props = defineProps({ + modelValue: { + type: Array, + default: () => [] + }, + isConnect: Boolean, + knowledgeId: String +}) const paragraph_list = computed(() => { return props.modelValue.slice(0, page_size.value * (current_page.value - 1) + page_size.value) diff --git a/ui/src/views/knowledge/component/ParagraphPreview.vue b/ui/src/views/knowledge/component/ParagraphPreview.vue index 2ca96adee..b0d2123ca 100644 --- a/ui/src/views/knowledge/component/ParagraphPreview.vue +++ b/ui/src/views/knowledge/component/ParagraphPreview.vue @@ -15,7 +15,7 @@
- +
@@ -32,7 +32,8 @@ defineProps({ type: Array, default: () => [] }, - isConnect: Boolean + isConnect: Boolean, + knowledgeId: String }) const activeName = ref(0) diff --git a/ui/src/views/paragraph/component/ParagraphDialog.vue b/ui/src/views/paragraph/component/ParagraphDialog.vue index a050af35d..4a4b98944 100644 --- a/ui/src/views/paragraph/component/ParagraphDialog.vue +++ b/ui/src/views/paragraph/component/ParagraphDialog.vue @@ -19,7 +19,7 @@ - +
diff --git a/ui/src/views/paragraph/component/ParagraphForm.vue b/ui/src/views/paragraph/component/ParagraphForm.vue index 70d500e50..b703fa3d6 100644 --- a/ui/src/views/paragraph/component/ParagraphForm.vue +++ b/ui/src/views/paragraph/component/ParagraphForm.vue @@ -54,7 +54,8 @@ const props = defineProps({ type: Object, default: () => {} }, - isEdit: Boolean + isEdit: Boolean, + knowledgeId: String }) const toolbars = [ @@ -120,6 +121,7 @@ watch( watch( () => props.isEdit, (value) => { + console.log(props.data, props.knowledgeId) if (!value) { paragraphFormRef.value?.clearValidate() } @@ -145,6 +147,8 @@ const onUploadImg = async (files: any, callback: any) => { return new Promise((rev, rej) => { const fd = new FormData() fd.append('file', file) + fd.append('source_id', props.knowledgeId as string) + fd.append('source_type', 'KNOWLEDGE') imageApi .postImage(fd)