chenkun 2 долоо хоног өмнө
parent
commit
95dbdd2256
1 өөрчлөгдсөн 114 нэмэгдсэн , 33 устгасан
  1. 114 33
      src/views/documents/Index.vue

+ 114 - 33
src/views/documents/Index.vue

@@ -503,31 +503,31 @@
           </el-col>
 
           <el-col :span="12" v-if="editForm.table_type === 'standard'">
-            <el-form-item label="标准编号">
+            <el-form-item label="* 标准编号">
               <el-input v-model="editForm.standard_no" placeholder="请输入标准编号" />
             </el-form-item>
           </el-col>
 
           <el-col :span="12">
-            <el-form-item :label="authorityLabel">
+            <el-form-item :label="'* ' + authorityLabel">
               <el-input v-model="editForm.issuing_authority" :placeholder="'请输入' + authorityLabel" />
             </el-form-item>
           </el-col>
 
           <el-col :span="12">
-            <el-form-item :label="dateLabel">
+            <el-form-item :label="'* ' + dateLabel">
               <el-date-picker v-model="editForm.release_date" type="date" placeholder="选择日期" value-format="YYYY-MM-DD" style="width: 100%" />
             </el-form-item>
           </el-col>
 
           <el-col :span="12" v-if="editForm.table_type === 'standard'">
-            <el-form-item label="实施日期">
+            <el-form-item label="* 实施日期">
               <el-date-picker v-model="editForm.implementation_date" type="date" placeholder="选择实施日期" value-format="YYYY-MM-DD" style="width: 100%" />
             </el-form-item>
           </el-col>
 
           <el-col :span="12" v-if="editForm.table_type === 'standard' || editForm.table_type === 'regulation'">
-            <el-form-item label="文件类型">
+            <el-form-item :label="editForm.table_type === 'standard' ? '* 文件类型' : '文件类型'">
               <el-select v-model="editForm.document_type" placeholder="请选择文件类型" style="width: 100%">
                 <el-option v-for="item in documentTypeOptions" :key="item" :label="item" :value="item" />
               </el-select>
@@ -535,7 +535,7 @@
           </el-col>
 
           <el-col :span="12" v-if="editForm.table_type === 'standard'">
-            <el-form-item label="专业领域">
+            <el-form-item label="* 专业领域">
               <el-select v-model="editForm.professional_field" placeholder="请选择专业领域" style="width: 100%">
                 <el-option v-for="item in professionalFieldOptions" :key="item" :label="item" :value="item" />
               </el-select>
@@ -543,7 +543,7 @@
           </el-col>
 
           <el-col :span="12" v-if="editForm.table_type === 'standard'">
-            <el-form-item label="时效性">
+            <el-form-item label="* 时效性">
               <el-select v-model="editForm.validity" placeholder="请选择时效性" style="width: 100%">
                 <el-option label="现行" value="现行" />
                 <el-option label="已废止" value="已废止" />
@@ -553,13 +553,13 @@
           </el-col>
 
           <el-col :span="12" v-if="editForm.table_type === 'standard'">
-            <el-form-item label="起草单位">
+            <el-form-item label="* 起草单位">
               <el-input v-model="editForm.drafting_unit" placeholder="请输入起草单位" />
             </el-form-item>
           </el-col>
 
           <el-col :span="12" v-if="editForm.table_type === 'standard'">
-            <el-form-item label="批准部门">
+            <el-form-item label="* 批准部门">
               <el-input v-model="editForm.approving_department" placeholder="请输入批准部门" />
             </el-form-item>
           </el-col>
@@ -602,7 +602,7 @@
 
           <template v-if="editForm.table_type === 'construction_plan'">
             <el-col :span="12">
-              <el-form-item label="项目名称">
+              <el-form-item label="* 项目名称">
                 <el-input v-model="editForm.project_name" placeholder="请输入项目名称" />
               </el-form-item>
             </el-col>
@@ -612,40 +612,40 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="方案类别">
+              <el-form-item label="* 方案类别">
                 <el-select v-model="editForm.plan_category" placeholder="请选择方案类别" style="width: 100%">
                   <el-option v-for="item in planCategoryOptions" :key="item" :label="item" :value="item" />
                 </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="一级分类">
+              <el-form-item label="* 一级分类">
                 <el-input v-model="editForm.level_1_classification" disabled />
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="二级分类">
+              <el-form-item label="* 二级分类">
                 <el-select v-model="editForm.level_2_classification" placeholder="请选择二级分类" style="width: 100%">
                   <el-option v-for="item in level2Options" :key="item" :label="item" :value="item" />
                 </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="三级分类">
+              <el-form-item label="* 三级分类">
                 <el-select v-model="editForm.level_3_classification" placeholder="请选择三级分类" style="width: 100%">
                   <el-option v-for="item in level3Options" :key="item" :label="item" :value="item" />
                 </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="四级分类">
+              <el-form-item label="* 四级分类">
                 <el-select v-model="editForm.level_4_classification" placeholder="请选择四级分类" style="width: 100%">
                   <el-option v-for="item in level4Options" :key="item" :label="item" :value="item" />
                 </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="24">
-              <el-form-item label="方案摘要">
+              <el-form-item label="* 方案摘要">
                 <el-input v-model="editForm.plan_summary" type="textarea" :rows="3" placeholder="请输入方案摘要" />
               </el-form-item>
             </el-col>
@@ -1177,27 +1177,108 @@ const confirmIngest = async () => {
   }
   
   ingesting.value = true
+  
   try {
-    // 统一使用 batch-enter 接口
-    const res = await request.post<ApiResponse>('/api/v1/sample/documents/batch-enter', {
-      ids: selectedIds.value,
-      kb_method: ingestForm.kb_method, // 使用用户选择的切分方式
-      chunk_size: ingestForm.chunk_size,
-      separator: ingestForm.separator,
-      table_type: searchQuery.table_type // 传递当前的表类型上下文
-    })
+    // 1. 临时请求选中 ID 的详情数据,确保校验时数据是最新的且完整的
+    const detailPromises = selectedIds.value.map(id => documentApi.getDetail(id))
+    const detailResults = await Promise.all(detailPromises)
+    const selectedDocs = detailResults.map(res => res.data)
     
-    if (res.code === 0) {
-      ElMessage.success(res.message || '已加入入库队列')
-      // 入库成功后清空选择并刷新列表
-      selectedIds.value = []
-      ingestDialogVisible.value = false // 关闭弹窗
-      fetchDocuments()
+    // 2. 检查基本信息字段完善度
+    let isIncomplete = false
+    let missingFields: string[] = []
+    
+    for (const doc of selectedDocs) {
+      const type = doc.source_type || searchQuery.table_type
+      
+      if (type === 'standard') {
+        const standardFields = [
+          { key: 'standard_no', label: '标准编号' },
+          { key: 'issuing_authority', label: '发布单位' },
+          { key: 'release_date', label: '发布日期' },
+          { key: 'implementation_date', label: '实施日期' },
+          { key: 'document_type', label: '文件类型' },
+          { key: 'professional_field', label: '专业领域' },
+          { key: 'validity', label: '时效性' },
+          { key: 'drafting_unit', label: '起草单位' },
+          { key: 'approving_department', label: '批准部门' }
+        ]
+        for (const f of standardFields) {
+          const val = doc[f.key as keyof typeof doc]
+          if (val === null || val === undefined || (typeof val === 'string' && val.trim() === '')) {
+            isIncomplete = true
+            if (!missingFields.includes(f.label)) missingFields.push(f.label)
+          }
+        }
+      } else if (type === 'construction_plan') {
+        const planFields = [
+          { key: 'issuing_authority', label: '编制单位' },
+          { key: 'release_date', label: '编制日期' },
+          { key: 'project_name', label: '项目名称' },
+          { key: 'plan_category', label: '方案类型' },
+          { key: 'level_1_classification', label: '一级分类' },
+          { key: 'level_2_classification', label: '二级分类' },
+          { key: 'level_3_classification', label: '三级分类' },
+          { key: 'level_4_classification', label: '四级分类' },
+          { key: 'plan_summary', label: '方案摘要' }
+        ]
+        for (const f of planFields) {
+          const val = doc[f.key as keyof typeof doc]
+          if (val === null || val === undefined || (typeof val === 'string' && val.trim() === '')) {
+            isIncomplete = true
+            if (!missingFields.includes(f.label)) missingFields.push(f.label)
+          }
+        }
+      }
+      if (isIncomplete && selectedIds.value.length === 1) break // 如果是单个,直接跳出
     }
-  } catch (error: any) {
-    if (error !== 'cancel') {
-      console.error('入库失败:', error)
+
+    const startIngest = async () => {
+      try {
+        const res = await request.post<ApiResponse>('/api/v1/sample/documents/batch-enter', {
+          ids: selectedIds.value,
+          kb_method: ingestForm.kb_method,
+          chunk_size: ingestForm.chunk_size,
+          separator: ingestForm.separator,
+          table_type: searchQuery.table_type
+        })
+        
+        if (res.code === 0) {
+          ElMessage.success(res.message || '已加入入库队列')
+          selectedIds.value = []
+          ingestDialogVisible.value = false
+          fetchDocuments()
+        }
+      } catch (error: any) {
+        if (error !== 'cancel') {
+          console.error('入库失败:', error)
+        }
+      }
     }
+
+    if (isIncomplete) {
+      ingesting.value = false // 弹窗前先结束 loading,方便用户操作
+      try {
+        await ElMessageBox.confirm(
+          '该文档基本信息其中某几个字段未补充完善,可能导致无法检索的问题,你是否继续?',
+          '提示',
+          {
+            confirmButtonText: '继续',
+            cancelButtonText: '取消',
+            type: 'warning',
+          }
+        )
+        ingesting.value = true // 继续后重新开启 loading
+        await startIngest()
+      } catch (error) {
+        // 用户取消
+      }
+    } else {
+      await startIngest()
+    }
+  } catch (error) {
+    console.error('获取详情或入库失败:', error)
+    ElMessage.error('入库准备失败,请重试')
   } finally {
     ingesting.value = false
   }