feat: Knowledge base workflow icons and styles

This commit is contained in:
wangdan-fit2cloud 2025-12-24 15:40:35 +08:00
parent 081eb60411
commit df6e9ae6e6
18 changed files with 80 additions and 31 deletions

View File

@ -406,13 +406,13 @@ const putKnowledgeWorkflow: (
const exportKnowledgeWorkflow = (
knowledge_id: string,
knowledge_name: string,
loading?: Ref<boolean>
loading?: Ref<boolean>,
) => {
return exportFile(
knowledge_name + '.kbwf',
`${prefix.value}/${knowledge_id}/workflow/export`,
undefined,
loading
loading,
)
}
/**
@ -421,12 +421,11 @@ const exportKnowledgeWorkflow = (
const importKnowledgeWorkflow: (
knowledge_id: string,
data: any,
loading?:Ref<boolean>
) => Promise<Result<any>> = (knowledge_id, data, loading)=>{
return post(`${prefix.value}/${knowledge_id}/workflow/import`,data,undefined,loading)
loading?: Ref<boolean>,
) => Promise<Result<any>> = (knowledge_id, data, loading) => {
return post(`${prefix.value}/${knowledge_id}/workflow/import`, data, undefined, loading)
}
const listKnowledgeVersion: (
knowledge_id: string,
loading?: Ref<boolean>,
@ -470,7 +469,12 @@ const cancelWorkflowAction: (
knowledge_action_id: string,
loading?: Ref<boolean>,
) => Promise<Result<any>> = (knowledge_id: string, knowledge_action_id, loading) => {
return post(`${prefix.value}/${knowledge_id}/action/${knowledge_action_id}/cancel`, {}, loading)
return post(
`${prefix.value}/${knowledge_id}/action/${knowledge_action_id}/cancel`,
{},
undefined,
loading,
)
}
/**
* mcp
@ -520,5 +524,5 @@ export default {
getWorkflowActionPage,
cancelWorkflowAction,
exportKnowledgeWorkflow,
importKnowledgeWorkflow
importKnowledgeWorkflow,
}

View File

@ -230,6 +230,27 @@ export const iconMap: any = {
])
},
},
'app-import': {
iconReader: () => {
return h('i', [
h(
'svg',
{
style: { height: '100%', width: '100%' },
viewBox: '0 0 1024 1024',
version: '1.1',
xmlns: 'http://www.w3.org/2000/svg',
},
[
h('path', {
d: 'M519.381333 554.24l92.416 90.325333c8.533333 8.32 8.533333 21.845333 0 30.165334l-30.848 30.165333a22.186667 22.186667 0 0 1-30.890666 0L411.178667 569.173333l-30.890667-30.165333a41.984 41.984 0 0 1 0-60.330667l169.813333-165.973333a22.186667 22.186667 0 0 1 30.848 0l30.848 30.208c8.533333 8.32 8.533333 21.845333 0 30.165333l-100.437333 98.133334 405.376-1.706667h0.213333c12.032 0 21.76 9.642667 21.717334 21.418667l-0.170667 40.405333a21.589333 21.589333 0 0 1-21.76 21.248l-397.354667 1.706667zM674.688 170.666667H172.629333v682.666666h502.058667c12.032 0 21.802667 9.557333 21.802667 21.333334v42.666666c0 11.776-9.770667 21.333333-21.845334 21.333334H129.024A43.178667 43.178667 0 0 1 85.333333 896V128c0-23.552 19.541333-42.666667 43.648-42.666667h545.706667c12.032 0 21.802667 9.557333 21.802667 21.333334v42.666666c0 11.776-9.770667 21.333333-21.845334 21.333334z',
fill: 'currentColor',
}),
],
),
])
},
},
'app-404': {
iconReader: () => {
return h('i', [

View File

@ -110,6 +110,8 @@ export default {
documentSplitTip: 'Each document can preview only the first five segments',
paragraphRules: 'Segmentation Rules',
writeContent: 'Content Written',
cancel: 'Cancel Execution',
cancelExecutionTip: 'Are you sure you want to cancel the selected task? ',
},
KnowledgeSource: {
title: 'Knowledge Source',

View File

@ -76,6 +76,8 @@ export default {
fail: 'Failed',
all: 'All',
padding: 'Padding',
REVOKED: 'Cancelled',
REVOKE: 'Cancelling',
},
param: {
outputParam: 'Output Parameters',

View File

@ -130,7 +130,6 @@ export default {
PENDING: 'Queuing',
GENERATE: 'Generating',
SYNC: 'Syncing',
REVOKE: 'Cancelling',
finish: 'Finish',
},
enableStatus: {

View File

@ -11,6 +11,8 @@ export default {
},
operation: {
toImportDoc: 'Go to Import Documents',
importWorkflow: 'Import Workflow',
exportWorkflow: 'Export Workflow',
},
setting: {
restoreVersion: 'Restore Previous Version"',

View File

@ -108,6 +108,8 @@ export default {
documentSplitTip: '每个文档仅能预览前五个分段',
paragraphRules: '分段规则',
writeContent: '写入内容',
cancel: '取消执行',
cancelExecutionTip: '确定取消所选的任务?',
},
KnowledgeSource: {
title: '知识来源',

View File

@ -77,6 +77,8 @@ export default {
fail: '失败',
all: '全部',
padding: '执行中',
REVOKED: '已取消',
REVOKE: '取消中',
},
param: {
outputParam: '输出参数',

View File

@ -122,7 +122,6 @@ export default {
PENDING: '排队中',
GENERATE: '生成中',
SYNC: '同步中',
REVOKE: '取消中',
finish: '完成',
},
enableStatus: {

View File

@ -11,6 +11,8 @@ export default {
},
operation: {
toImportDoc: '去导入文档',
importWorkflow: '导入工作流',
exportWorkflow: '导出工作流',
},
setting: {
restoreVersion: '恢复版本',

View File

@ -108,6 +108,8 @@ export default {
documentSplitTip: '每個文件僅能預覽前五個段落',
paragraphRules: '分段規則',
writeContent: '寫入內容',
cancel: '取消執行',
cancelExecutionTip: '確定取消所選的任務?',
},
KnowledgeSource: {
title: '知識來源',

View File

@ -76,6 +76,8 @@ export default {
fail: '失敗',
all: '全部',
padding: '執行中',
REVOKED: '已取消',
REVOKE: '取消中',
},
param: {
outputParam: '輸出參數',

View File

@ -123,7 +123,6 @@ export default {
PENDING: '排隊中',
GENERATE: '生成中',
SYNC: '同步中',
REVOKE: '取消中',
finish: '完圓',
},
enableStatus: {

View File

@ -11,6 +11,8 @@ export default {
},
operation: {
toImportDoc: '去導入文檔',
importWorkflow: '導入工作流',
exportWorkflow: '導出工作流',
},
setting: {
restoreVersion: '恢復版本',

View File

@ -78,7 +78,7 @@ const taskTypeMap = {
const stateMap: any = {
[State.PENDING]: (type: number) => t('views.document.fileStatus.PENDING'),
[State.STARTED]: (type: number) => startedMap[type],
[State.REVOKE]: (type: number) => t('views.document.fileStatus.REVOKE'),
[State.REVOKE]: (type: number) => t('common.status.REVOKE'),
[State.REVOKED]: (type: number) => t('common.status.success'),
[State.FAILURE]: (type: number) => t('common.status.fail'),
[State.SUCCESS]: (type: number) => t('common.status.success'),

View File

@ -52,14 +52,14 @@
v-else-if="props.currentContent?.state === 'REVOKED'"
>
<el-icon class="color-danger"><CircleCloseFilled /></el-icon>
{{ $t('common.status.REVOKED', '已取消') }}
{{ $t('common.status.REVOKED') }}
</el-text>
<el-text
class="color-text-primary"
v-else-if="props.currentContent?.state === 'REVOKE'"
>
<el-icon class="is-loading color-primary"><Loading /></el-icon>
{{ $t('views.document.fileStatus.REVOKE', '取消中') }}
{{ $t('common.status.REVOKE') }}
</el-text>
<el-text class="color-text-primary" v-else>
<el-icon class="is-loading color-primary"><Loading /></el-icon>

View File

@ -66,11 +66,11 @@
</el-text>
<el-text class="color-text-primary" v-else-if="row.state === 'REVOKED'">
<el-icon class="color-danger"><CircleCloseFilled /></el-icon>
{{ $t('common.status.REVOKED', '已取消') }}
{{ $t('common.status.REVOKED') }}
</el-text>
<el-text class="color-text-primary" v-else-if="row.state === 'REVOKE'">
<el-icon class="is-loading color-primary"><Loading /></el-icon>
{{ $t('views.document.fileStatus.REVOKE', '取消中') }}
{{ $t('common.status.REVOKE') }}
</el-text>
<el-text class="color-text-primary" v-else>
<el-icon class="is-loading color-primary"><Loading /></el-icon>
@ -93,7 +93,7 @@
</template>
</el-table-column>
<el-table-column :label="$t('common.operation')" width="80">
<el-table-column :label="$t('common.operation')" width="90">
<template #default="{ row }">
<div class="flex">
<el-tooltip effect="dark" :content="$t('chat.executionDetails.title')" placement="top">
@ -103,10 +103,11 @@
</el-tooltip>
<el-tooltip
effect="dark"
:content="$t('chat.executionDetails.cancel', '取消')"
:content="$t('chat.executionDetails.cancel')"
placement="top"
v-if="row.state === 'PADDING'"
>
<el-button type="primary" text @click.stop="cancel(row)">
<el-button type="danger" text @click.stop="cancelExecution(row)">
<el-icon><CircleCloseFilled /></el-icon>
</el-button>
</el-tooltip>
@ -133,6 +134,8 @@ import { computed, ref, reactive } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { datetimeFormat } from '@/utils/time'
import type { Dict } from '@/api/type/common'
import { MsgError, MsgConfirm } from '@/utils/message'
import { t } from '@/locales'
const drawer = ref<boolean>(false)
const route = useRoute()
@ -176,10 +179,15 @@ const toDetails = (row: any) => {
ExecutionDetailDrawerRef.value?.open()
}
const cancel = (row: any) => {
loadSharedApi({ type: 'knowledge', systemType: apiType.value })
.cancelWorkflowAction(active_knowledge_id.value, row.id, loading)
.then((ok: any) => {})
const cancelExecution = (row: any) => {
MsgConfirm(t('common.tip'), t('chat.executionDetails.cancelExecutionTip'), {
confirmButtonText: t('common.confirm'),
confirmButtonClass: 'danger',
}).then(() => {
loadSharedApi({ type: 'knowledge', systemType: apiType.value })
.cancelWorkflowAction(active_knowledge_id.value, row.id, loading)
.then((ok: any) => {})
})
}
const changeFilterHandle = () => {
query.value = { user_name: '', status: '' }

View File

@ -59,13 +59,6 @@
<AppIcon iconName="app-to-import-doc" class="color-secondary"></AppIcon>
{{ $t('workflow.operation.toImportDoc') }}
</el-dropdown-item>
<el-dropdown-item
@click.stop="exportKnowledgeWorkflow(detail.name, detail.id)"
v-if="permissionPrecise.workflow_export(id)"
>
<AppIcon iconName="app-export" class="color-secondary"></AppIcon>
{{ $t('common.export') }}
</el-dropdown-item>
<el-upload
class="import-button"
ref="elUploadRef"
@ -80,9 +73,17 @@
>
<el-dropdown-item>
<AppIcon iconName="app-import" class="color-secondary"></AppIcon>
{{ $t('common.import', '导入') }}
{{ $t('workflow.operation.importWorkflow') }}
</el-dropdown-item>
</el-upload>
<el-dropdown-item
@click.stop="exportKnowledgeWorkflow(detail.name, detail.id)"
v-if="permissionPrecise.workflow_export(id)"
>
<AppIcon iconName="app-export" class="color-secondary"></AppIcon>
{{ $t('workflow.operation.exportWorkflow') }}
</el-dropdown-item>
<el-dropdown-item @click="openListAction" divided>
<AppIcon iconName="app-execution-record" class="color-secondary"></AppIcon>
{{ $t('workflow.ExecutionRecord') }}