diff --git a/apps/dataset/serializers/document_serializers.py b/apps/dataset/serializers/document_serializers.py index 62f4c90bd..677251eae 100644 --- a/apps/dataset/serializers/document_serializers.py +++ b/apps/dataset/serializers/document_serializers.py @@ -56,7 +56,6 @@ from embedding.task.embedding import embedding_by_document, delete_embedding_by_ delete_embedding_by_document, update_embedding_dataset_id, delete_embedding_by_paragraph_ids, \ embedding_by_document_list from smartdoc.conf import PROJECT_DIR -from django.db import models parse_qa_handle_list = [XlsParseQAHandle(), CsvParseQAHandle(), XlsxParseQAHandle()] parse_table_handle_list = [CsvSplitHandle(), XlsSplitHandle(), XlsxSplitHandle()] @@ -364,6 +363,7 @@ class DocumentSerializers(ApiMixin, serializers.Serializer): "文档名称")) hit_handling_method = serializers.CharField(required=False, error_messages=ErrMessage.char("命中处理方式")) is_active = serializers.BooleanField(required=False, error_messages=ErrMessage.boolean("文档是否可用")) + task_type = serializers.IntegerField(required=False, error_messages=ErrMessage.integer("任务类型")) status = serializers.CharField(required=False, error_messages=ErrMessage.char("文档状态")) def get_query_set(self): @@ -375,8 +375,22 @@ class DocumentSerializers(ApiMixin, serializers.Serializer): query_set = query_set.filter(**{'hit_handling_method': self.data.get('hit_handling_method')}) if 'is_active' in self.data and self.data.get('is_active') is not None: query_set = query_set.filter(**{'is_active': self.data.get('is_active')}) - if 'status' in self.data and self.data.get('status') is not None: - query_set = query_set.filter(**{'status': self.data.get('status')}) + if 'status' in self.data and self.data.get( + 'status') is not None: + task_type = self.data.get('task_type') + status = self.data.get( + 'status') + if task_type is not None: + query_set = query_set.annotate( + reversed_status=Reverse('status'), + task_type_status=Substr('reversed_status', TaskType(task_type).value, + TaskType(task_type).value), + ).filter(task_type_status__in=[State(status).value]).values('id') + else: + if status != State.SUCCESS.value: + query_set = query_set.filter(status__icontains=status) + else: + query_set = query_set.filter(status__iregex='^[2n]*$') query_set = query_set.order_by('-create_time', 'id') return query_set diff --git a/ui/src/views/document/index.vue b/ui/src/views/document/index.vue index 809ea6090..c3e6052ef 100644 --- a/ui/src/views/document/index.vue +++ b/ui/src/views/document/index.vue @@ -99,33 +99,43 @@ >全部 成功 失败 索引中 排队中 生成问题中 @@ -481,13 +491,18 @@ function openDatasetDialog(row?: any) { function dropdownHandle(obj: any) { filterMethod.value[obj.attr] = obj.command + if (obj.attr == 'status') { + filterMethod.value['task_type'] = obj.task_type + } + getList() } -function beforeCommand(attr: string, val: any) { +function beforeCommand(attr: string, val: any, task_type?: number) { return { attr: attr, - command: val + command: val, + task_type } } const cancelTask = (row: any, task_type: number) => {