Skip to content

Commit c3aa07a

Browse files
feat: document
1 parent dbe9477 commit c3aa07a

10 files changed

Lines changed: 91 additions & 47 deletions

File tree

‎ui/src/api/types/tool.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,4 +210,5 @@ export interface ToolExecutionRecord extends ToolExecutionRecordDetail {
210210
source_icon?: string | null
211211
trigger_type?: import('./trigger').TriggerType | null
212212
create_time: string
213+
workspace_name?: string
213214
}

‎ui/src/assets/iconfont.js‎

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎ui/src/components/global/mk-status-label/index.vue‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
<script setup lang="ts">
2-
import { computed, type Component } from 'vue'
2+
import { computed } from 'vue'
33
import { STATE_LABELS } from '@/constants/state'
44
import { STATE_TYPES } from '@/api/enums'
55
import type { State } from '@/api/types'
6-
import { SuccessFilled, CircleCloseFilled, Loading } from '@element-plus/icons-vue'
76
87
defineOptions({ name: 'MkStatusLabel' })
98
@@ -18,13 +17,13 @@ const props = withDefaults(
1817
)
1918
2019
/* 状态文案与 STATE_LABELS 共用状态键,兼容原有启用/禁用展示。 */
21-
const statusOptions: Partial<Record<State, { icon?: Component; className: string }>> = {
22-
[STATE_TYPES.SUCCESS]: { icon: SuccessFilled, className: 'text-success!' },
23-
[STATE_TYPES.FAILURE]: { icon: CircleCloseFilled, className: 'text-danger!' },
24-
[STATE_TYPES.STARTED]: { icon: Loading, className: 'is-loading' },
25-
[STATE_TYPES.REVOKE]: { icon: Loading, className: 'is-loading' },
26-
[STATE_TYPES.PENDING]: { icon: Loading, className: 'is-loading' },
27-
[STATE_TYPES.REVOKED]: { icon: CircleCloseFilled, className: 'text-danger!' },
20+
const statusOptions: Partial<Record<State, { name?: string; loading?: boolean }>> = {
21+
[STATE_TYPES.SUCCESS]: { name: 'icon_succeed_colorful' },
22+
[STATE_TYPES.FAILURE]: { name: 'icon_close_colorful' },
23+
[STATE_TYPES.STARTED]: { loading: true },
24+
[STATE_TYPES.REVOKE]: { loading: true },
25+
[STATE_TYPES.PENDING]: { loading: true },
26+
[STATE_TYPES.REVOKED]: { name: 'icon_close_colorful' },
2827
}
2928
const presentation = computed(() => {
3029
if (props.status !== undefined) return statusOptions[props.status]
@@ -37,7 +36,8 @@ const label = computed(() =>
3736

3837
<template>
3938
<span class="flex-align-center gap-2">
40-
<MkIcon v-if="presentation?.icon" :icon="presentation.icon" :class="presentation.className" />
39+
<LoadingIcon v-if="presentation?.loading" :size="16" />
40+
<MkIcon v-else-if="presentation?.name" :name="presentation.name" />
4141
<MkIcon v-else-if="status === undefined && !active" name="icon_ban_filled" class="text-N500!" />
4242
<span>{{ label }}</span>
4343
</span>

‎ui/src/constants/CONSTANT_README.md‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,6 @@ const knowledgeTypeLabel = KNOWLEDGE_TYPE_LABELS[knowledgeType]
3939

4040
`state.ts` 的 `STATE_LABELS` 统一维护公共枚举 `STATE_TYPES` 的展示文案。触发器、文件等业务
4141
按需复用 `api/enums/state.ts` 中的状态值;新增状态时同步补齐文案和 `MkStatusLabel` 的图标映射。
42+
43+
`document.ts` 的 `DOCUMENT_HIT_HANDLING_LABELS` 维护文档命中处理方式的展示文案,
44+
映射键引用 API 枚举 `DOCUMENT_HIT_HANDLING`。

‎ui/src/constants/document.ts‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { DOCUMENT_HIT_HANDLING } from '@/api/enums'
2+
3+
/** 文档命中处理方式的展示文案。 */
4+
export const DOCUMENT_HIT_HANDLING_LABELS = {
5+
[DOCUMENT_HIT_HANDLING.OPTIMIZATION]: '模型优化',
6+
[DOCUMENT_HIT_HANDLING.DIRECTLY_RETURN]: '直接回答',
7+
} as const

‎ui/src/views/knowledge-detail/document/index.vue‎

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import DocumentApi from '@/api/admin/workspace/knowledge/document'
66
import SharedDocumentApi from '@/api/admin/workspace/shared/knowledge/document'
77
import CommonApi from '@/api/admin/workspace/common'
88
import CommonSystemApi from '@/api/admin/system/common'
9-
import { DOCUMENT_HIT_HANDLING, DOCUMENT_TASK_STATE, DOCUMENT_TASK_TYPE } from '@/api/enums'
9+
import { DOCUMENT_TASK_STATE, DOCUMENT_TASK_TYPE } from '@/api/enums'
10+
import { DOCUMENT_HIT_HANDLING_LABELS } from '@/constants/document'
1011
import type { Dict, DocumentItem, OptionItem } from '@/api/types'
1112
import { datetimeFormat } from '@/utils/time'
1213
import { isWorkspaceSharedResource } from '@/utils/resource-context'
14+
import { numberFormat } from '@/utils/number'
1315
1416
defineOptions({ name: 'DocumentListView' })
1517
defineProps<ResourceDetailPageProps>()
@@ -54,7 +56,6 @@ function loadDocuments() {
5456
...documentQuery.value,
5557
status: documentStatusFilter.value.status,
5658
task_type: documentStatusFilter.value.task_type,
57-
resource_type: 'document',
5859
})
5960
.then((page) => {
6061
documentData.value = page.records
@@ -90,24 +91,46 @@ onMounted(() => {
9091
:max-table-height="210"
9192
@current-change="loadDocuments"
9293
@size-change="loadDocuments"
94+
resizable
9395
>
9496
<el-table-column prop="name" label="文档名称" min-width="220" show-overflow-tooltip />
9597

9698
<el-table-column prop="status" label="文件状态" width="120">
99+
<!-- // TODO: 补充文档状态类型 -->
100+
<template #default="{ row }"><MkStatusLabel :active="row.status" /></template>
101+
</el-table-column>
102+
<el-table-column label="启用状态" width="100">
103+
<template #default="{ row }"><MkStatusLabel :active="row.is_active" /></template>
104+
</el-table-column>
105+
<el-table-column prop="char_length" label="字符数">
97106
<template #default="{ row }">
98-
<StatusValue :status="row.status" :status-meta="row.status_meta"></StatusValue>
107+
{{ numberFormat(row.char_length) }}
99108
</template>
100109
</el-table-column>
101-
<el-table-column prop="char_length" label="字符数" width="110" />
102-
<el-table-column prop="paragraph_count" label="分段数" width="100" />
103-
<el-table-column prop="hit_num" label="召回次数" width="120" />
104-
<el-table-column label="命中处理" width="110">
105-
<template #default="{ row }">{{ row.hit_handling_method === DOCUMENT_HIT_HANDLING.DIRECTLY_RETURN ? '直接返回' : '模型优化' }}</template>
110+
<el-table-column prop="paragraph_count" label="分段">
111+
<template #default="{ row }">
112+
{{ numberFormat(row.paragraph_count) }}
113+
</template>
106114
</el-table-column>
107-
<el-table-column label="启用状态" width="100">
108-
<template #default="{ row }"><MkStatusLabel :active="row.is_active" /></template>
115+
<!-- 标签 -->
116+
117+
<el-table-column label="召回处理" width="110">
118+
<template #default="{ row }: { row: DocumentItem }">
119+
{{ DOCUMENT_HIT_HANDLING_LABELS[row.hit_handling_method] }}
120+
</template>
121+
</el-table-column>
122+
<el-table-column prop="hit_num" label="召回次数">
123+
<template #default="{ row }">
124+
{{ numberFormat(row.hit_num) }}
125+
</template>
126+
</el-table-column>
127+
<el-table-column label="最后一次召回时间" width="180">
128+
<template #default="{ row }">{{ datetimeFormat(row.last_hit_time) }}</template>
129+
</el-table-column>
130+
<el-table-column prop="nick_name" label="创建者" show-overflow-tooltip />
131+
<el-table-column label="更新时间" width="180">
132+
<template #default="{ row }">{{ datetimeFormat(row.update_time) }}</template>
109133
</el-table-column>
110-
<el-table-column prop="nick_name" label="创建者" min-width="120" show-overflow-tooltip />
111134
<el-table-column label="创建时间" width="180">
112135
<template #default="{ row }">{{ datetimeFormat(row.create_time) }}</template>
113136
</el-table-column>

‎ui/src/views/system/resource-management/tool/index.vue‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ onMounted(() => {
158158
<el-table-column label="来源" width="120">
159159
<template #default="{ row }">{{ row.template_id ? '工具商店' : '自定义' }}</template>
160160
</el-table-column>
161-
<el-table-column label="状态" width="120">
161+
<el-table-column label="启用状态" width="100">
162162
<template #default="{ row }"><MkStatusLabel :active="row.is_active" /></template>
163163
</el-table-column>
164164
<el-table-column v-if="auth.isEE" prop="workspace_name" label="工作空间" min-width="160" show-overflow-tooltip>

‎ui/src/views/workflow/tool/execution-record/ExecutionDetailDrawer.vue‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import type WorkflowApi from '@/api/admin/workspace/tool/workflow'
44
import { TOOL_RECORD_SOURCE, KNOWLEDGE_TYPE } from '@/api/enums'
55
import type { ToolExecutionRecord, ToolExecutionRecordDetail } from '@/api/types'
66
import { datetimeFormat } from '@/utils/time'
7+
import { isSystemSharedResource } from '@/utils/resource-context'
78
import ExecutionDetailContent from '@/workflow-canvas/execution-details/index.vue'
89
import type { ExecutionNodeDetail } from '@/workflow-canvas/execution-details/types'
910
import { WorkflowMode } from '@/workflow-canvas/types'
@@ -70,7 +71,12 @@ watch(
7071
<span class="min-w-0 flex-1 truncate" :title="record.source_name ?? undefined">{{ record.source_name || '-' }}</span>
7172
</div>
7273
</div>
73-
<!-- // TODO 共享资源需要显示工作空间 -->
74+
75+
<!-- TODO 可能需要调整ui -->
76+
<div v-if="isSystemSharedResource()">
77+
<p class="mb-1 text-N600">工作空间</p>
78+
{{ record?.workspace_name || '-' }}
79+
</div>
7480
<div>
7581
<p class="mb-1 text-N600">状态</p>
7682
<MkStatusLabel :status="detail?.state ?? record.state" />

‎ui/src/views/workflow/tool/execution-record/ExecutionRecordDrawer.vue‎

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ import { computed, ref } from 'vue'
33
import type WorkflowApi from '@/api/admin/workspace/tool/workflow'
44
import { TOOL_RECORD_SOURCE, KNOWLEDGE_TYPE, STATE_TYPES } from '@/api/enums'
55
import type { Dict, ToolExecutionRecord } from '@/api/types'
6-
import { datetimeFormat } from '@/utils/time'
76
import ExecutionDetailDrawer from './ExecutionDetailDrawer.vue'
87
import { STATE_LABELS } from '@/constants/state'
8+
import { datetimeFormat } from '@/utils/time'
9+
import { isSystemSharedResource } from '@/utils/resource-context'
910
1011
const props = defineProps<{ api: typeof WorkflowApi; toolId: string }>()
1112
const emit = defineEmits<{ closed: [] }>()
@@ -36,9 +37,9 @@ const searchFields = [
3637
label: '资源类型',
3738
value: 'source_type',
3839
options: [
39-
{ label: '智能体', value: TOOL_RECORD_SOURCE.APPLICATION },
40-
{ label: '知识库', value: TOOL_RECORD_SOURCE.KNOWLEDGE },
41-
{ label: '触发器', value: TOOL_RECORD_SOURCE.TRIGGER },
40+
{ label: sourceLabels[TOOL_RECORD_SOURCE.APPLICATION], value: TOOL_RECORD_SOURCE.APPLICATION },
41+
{ label: sourceLabels[TOOL_RECORD_SOURCE.KNOWLEDGE], value: TOOL_RECORD_SOURCE.KNOWLEDGE },
42+
{ label: sourceLabels[TOOL_RECORD_SOURCE.TRIGGER], value: TOOL_RECORD_SOURCE.TRIGGER },
4243
],
4344
},
4445
]
@@ -124,28 +125,32 @@ defineExpose({ open })
124125
@size-change="loadRecords()"
125126
>
126127
<el-table-column label="触发来源" min-width="130" show-overflow-tooltip>
127-
<template #default="{ row }"
128-
><div class="flex-align-center gap-2">
128+
<template #default="{ row }">
129+
<div class="flex-align-center gap-2">
129130
<ApplicationIcon v-if="row.source_type === TOOL_RECORD_SOURCE.APPLICATION" :icon="row.source_icon" :size="20" />
130131
<KnowledgeIcon v-else-if="row.source_type === TOOL_RECORD_SOURCE.KNOWLEDGE" :type="KNOWLEDGE_TYPE.WORKFLOW" :size="20" />
131132
<TriggerIcon v-else-if="row.source_type === TOOL_RECORD_SOURCE.TRIGGER" :type="row.trigger_type ?? undefined" :size="20" />
132133
<span class="min-w-0 flex-1 truncate" :title="row.source_name || '-'">{{ row.source_name || '-' }}</span>
133134
</div>
134135
</template>
135136
</el-table-column>
136-
<!-- // TODO 共享资源需要显示工作空间 -->
137-
<el-table-column label="类型" width="90"
138-
><template #default="{ row }">{{ sourceLabels[row.source_type as keyof typeof sourceLabels] || '-' }}</template></el-table-column
139-
>
140-
<el-table-column label="状态" width="100"
141-
><template #default="{ row }"><MkStatusLabel :status="row.state" /></template
142-
></el-table-column>
143-
<el-table-column label="耗时" width="90"
144-
><template #default="{ row }">{{ row.run_time == null ? '-' : `${row.run_time.toFixed(2)} s` }}</template></el-table-column
145-
>
146-
<el-table-column label="执行时间" prop="create_time" width="180"
147-
><template #default="{ row }">{{ datetimeFormat(row.create_time) }}</template></el-table-column
148-
>
137+
<el-table-column v-if="isSystemSharedResource()" prop="workspace_name" label="工作空间" show-overflow-tooltip>
138+
<template #default="{ row }">
139+
{{ row.workspace_name }}
140+
</template>
141+
</el-table-column>
142+
<el-table-column label="类型" width="90">
143+
<template #default="{ row }">{{ sourceLabels[row.source_type as keyof typeof sourceLabels] || '-' }}</template>
144+
</el-table-column>
145+
<el-table-column label="状态" width="100">
146+
<template #default="{ row }"><MkStatusLabel :status="row.state" /></template>
147+
</el-table-column>
148+
<el-table-column label="耗时" width="90">
149+
<template #default="{ row }">{{ row.run_time == null ? '-' : `${row.run_time.toFixed(2)} s` }}</template>
150+
</el-table-column>
151+
<el-table-column label="执行时间" prop="create_time" width="180">
152+
<template #default="{ row }">{{ datetimeFormat(row.create_time) }}</template>
153+
</el-table-column>
149154
<el-table-column label="操作" width="70">
150155
<template #default="{ row }">
151156
<!-- 查看执行详情 -->

‎ui/src/workflow-canvas/execution-details/BaseHeader.vue‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<script setup lang="ts">
22
import { computed, type Component } from 'vue'
3-
import { SuccessFilled, CircleCloseFilled, Loading } from '@element-plus/icons-vue'
43
import { formatTokenNumber } from '@/utils/number'
54
import { iconComponent } from '@/workflow-canvas/icons/utils'
65
import type { ExecutionNodeDetail } from './types'
@@ -29,9 +28,9 @@ const tokenCount = computed(() => (props.data?.message_tokens || 0) + (props.dat
2928
<span v-if="showTokens">{{ formatTokenNumber(tokenCount) }} tokens</span>
3029
<span v-if="!isRunning">{{ data?.run_time?.toFixed(2) || '0.00' }} s</span>
3130

32-
<MkIcon v-if="isSuccess" :icon="SuccessFilled" class="text-success!" />
33-
<MkIcon v-else-if="isRunning" :icon="Loading" class="is-loading" />
34-
<MkIcon v-else :icon="CircleCloseFilled" class="text-danger!" />
31+
<MkIcon v-if="isSuccess" name="icon_succeed_colorful" />
32+
<LoadingIcon v-else-if="isRunning" :size="16" />
33+
<MkIcon v-else name="icon_close_colorful" />
3534
</div>
3635
</div>
3736
</template>

0 commit comments

Comments
 (0)