Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions ui/src/views/VIEW_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -738,11 +738,13 @@ Workspace API 内部通过 `getWorkspaceId()` 读取当前路由工作空间。
保存使用内容 loading 与按钮 loading,入口防止重复提交,不禁用各表单字段。
`putKnowledgeSyncSetting` 成功后,以后台返回值更新草稿和详情 `meta.sync_setting`;失败保留草稿。
同步方式复用 `constants/knowledge.ts` 的 `KNOWLEDGE_SYNC_OPTIONS`,按当前来源描述三种方式。
`components/SyncLogTable.vue` 在日志页签按需挂载,接收知识库 ID,调用分页日志接口。
`components/SyncLogTable.vue` 在日志页签按需挂载,接收知识库 ID 和 `index.vue` 传入的完整同步 API 对象,
通过 `api.getKnowledgeSyncLogPage` 调用分页日志接口。
日志表格沿用同步时间、同步内容、同步方式、同步状态、耗时五列,不新增操作入口。
同步内容按“共 N 个文档(已同步、跳过、删除、失败)”展示,仅附加非零的跳过、删除和失败计数;
跳过执行时直接展示原因,后台结果信息通过同步内容的悬停提示查看。
状态使用圆点和“成功 / 失败 / 同步中 / 已跳过”文案,完整同步使用“完整同步”标签。
状态复用 `MkStatusLabel`,同步中使用 `loading`,成功和失败分别使用 `success`、`failure`,
不配置跳过状态;完整同步使用“完整同步”标签。
进入日志页签、切换知识库和分页时查询,不做定时刷新。
设置菜单的类型筛选由路由维护;当前仅接入 Workspace 接口,暂不增加前端权限判断。
更换向量模型需确认,先保存再重新向量化,整条流程禁止重复提交;向量化失败时保留原模型比较基准,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
<script setup lang="ts">
import { ref, watch } from 'vue'
import SyncApi from '@/api/admin/workspace/knowledge/sync'
import type SyncApi from '@/api/admin/workspace/knowledge/sync'
import { KNOWLEDGE_SYNC_STATUS, KNOWLEDGE_SYNC_TYPE } from '@/api/enums'
import type { KnowledgeSyncLog, KnowledgeSyncStatus } from '@/api/types'
import type { StatusLabelOptions } from '@/components/global/mk-status-label/types'
import { KNOWLEDGE_SYNC_OPTIONS } from '@/constants/knowledge'
import { datetimeFormat } from '@/utils/time'

defineOptions({ name: 'KnowledgeSyncLogTable' })
const props = defineProps<{ knowledgeId: string }>()
const props = defineProps<{ api: typeof SyncApi; knowledgeId: string }>()

// 进入日志页签、切换知识库和翻页时查询。
const loading = ref(false)
const syncLogs = ref<KnowledgeSyncLog[]>([])
const paginationConfig = ref({ currentPage: 1, pageSize: 10, total: 0 })
const syncStatusOptions: Record<KnowledgeSyncStatus, { dotClass: string; label: string }> = {
[KNOWLEDGE_SYNC_STATUS.RUNNING]: { dotClass: 'bg-primary', label: '同步中' },
[KNOWLEDGE_SYNC_STATUS.SUCCESS]: { dotClass: 'bg-success', label: '成功' },
[KNOWLEDGE_SYNC_STATUS.FAILURE]: { dotClass: 'bg-danger', label: '失败' },
[KNOWLEDGE_SYNC_STATUS.SKIPPED]: { dotClass: 'bg-N500', label: '已跳过' },
const syncStatusOptions: Partial<Record<KnowledgeSyncStatus, StatusLabelOptions>> = {
[KNOWLEDGE_SYNC_STATUS.RUNNING]: { type: 'loading', label: '同步中' },
[KNOWLEDGE_SYNC_STATUS.SUCCESS]: { type: 'success', label: '成功' },
[KNOWLEDGE_SYNC_STATUS.FAILURE]: { type: 'failure', label: '失败' },
}

function getSyncContent(log: KnowledgeSyncLog) {
Expand All @@ -35,7 +35,8 @@ function getSyncContent(log: KnowledgeSyncLog) {
function loadSyncLogs() {
if (loading.value) return
loading.value = true
return SyncApi.getKnowledgeSyncLogPage(props.knowledgeId, paginationConfig.value)
return props.api
.getKnowledgeSyncLogPage(props.knowledgeId, paginationConfig.value)
.then((page) => {
syncLogs.value = page.records
paginationConfig.value.total = page.total
Expand Down Expand Up @@ -86,11 +87,7 @@ watch(
</el-table-column>
<el-table-column label="同步状态" width="120">
<template #default="{ row }">
<span v-if="syncStatusOptions[row.status as KnowledgeSyncStatus]" class="flex-align-center gap-2">
<span class="h-1.5 w-1.5 shrink-0 rounded-full" :class="syncStatusOptions[row.status as KnowledgeSyncStatus].dotClass" />
<span>{{ syncStatusOptions[row.status as KnowledgeSyncStatus].label }}</span>
</span>
<span v-else>{{ row.status }}</span>
<MkStatusLabel v-if="syncStatusOptions[row.status as KnowledgeSyncStatus]" v-bind="syncStatusOptions[row.status as KnowledgeSyncStatus]" />
</template>
</el-table-column>
<el-table-column label="耗时" width="110">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,6 @@ watch(
<el-button type="primary" class="mt-4" :loading="saving" :disabled="!settingLoaded" @click="handleSave">保存</el-button>
</el-form>
</div>
<SyncLogTable v-if="activeTab === 'logs' && knowledge" :knowledge-id="knowledge.id" />
<SyncLogTable v-if="activeTab === 'logs' && knowledge" :api="SyncApi" :knowledge-id="knowledge.id" />
</div>
</template>
Loading