Skip to content

Commit d0d7511

Browse files
feat: tool template
1 parent 84be5e2 commit d0d7511

7 files changed

Lines changed: 45 additions & 12 deletions

File tree

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { post } from '../../../core/request'
2+
import type { AddInternalToolPayload, AddStoreToolPayload, ToolItem, UpdateStoreToolPayload } from '@/api/types'
3+
4+
const prefix = '/system/shared/tool'
5+
6+
/** 将系统内置工具添加到当前工作空间。 */
7+
const postInternalTool = (toolId: string, payload: AddInternalToolPayload) => {
8+
return post<AddInternalToolPayload, ToolItem>(`${prefix}/${toolId}/add_internal_tool`, payload)
9+
}
10+
11+
/** 将商店工具添加到当前工作空间。 */
12+
const postStoreTool = (toolId: string, payload: AddStoreToolPayload) => {
13+
return post<AddStoreToolPayload, ToolItem>(`${prefix}/${toolId}/add_store_tool`, payload)
14+
}
15+
16+
/** 将工作空间中的商店工具更新到最新版本。 */
17+
const postStoreToolUpdate = (toolId: string, payload: UpdateStoreToolPayload) => {
18+
return post<UpdateStoreToolPayload, ToolItem>(`${prefix}/${toolId}/update_store_tool`, payload)
19+
}
20+
21+
export default { postInternalTool, postStoreTool, postStoreToolUpdate }

‎ui/src/views/VIEW_README.md‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,9 @@ Workspace 的自定义工具和工作流工具菜单
302302
把不同工具类型的字段重新合并到一个通用表单中。所有调用 `postTool` 创建工具的流程在接口成功后
303303
先调用 `auth.loadAuthBaseProfile()` 刷新当前用户基础资料,再执行成功提示以及列表刷新或工作流页面
304304
跳转;`putTool` 编辑流程不触发该刷新。跨资源范围复用且需要请求的 Action 和表单接收页面传入的完整 Tool API,不额外
305-
维护逐方法接口类型;固定服务于 Workspace 工具商店的 `StoreToolFormDialog` 直接内聚对应请求。
305+
维护逐方法接口类型;`ApplyStoreToolDialog` 内聚商店应用请求,提交时通过
306+
`isSystemSharedResource()` 选择 System 共享资源或 Workspace 的 Tool API 和 Tool Store API,
307+
覆盖内置工具、工作流模板及商店工具三个分支。
306308
工具启用状态属于固定的卡片内交互,由 `ToolStatusSwitch`
307309
使用卡片传入的 Tool API 更新,并通过 `update` 事件通知页面替换列表数据。工具批量选择状态、
308310
批量移动和批量删除流程由 `ToolView` 管理;`MoveToolAction` 复用公共 `MoveToDialog` 完成单个工具移动,

‎ui/src/views/home/components/HomeQuickCreate.vue‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ onMounted(() =>
5959
</template>
6060
</ButtonCreateApplication>
6161
<!-- 创建知识库 -->
62-
<ButtonCreateKnowledge trigger="hover" fit-trigger-width popper-class="rounded-xl!" :folder-id="workspaceId" @refresh="handleCreateKnowledge">
62+
<ButtonCreateKnowledge trigger="hover" fit-trigger-width popper-class="rounded-xl!" folder-id="default" @refresh="handleCreateKnowledge">
6363
<template #trigger>
6464
<el-card shadow="hover">
6565
<div class="flex-between gap-3">
@@ -74,7 +74,7 @@ onMounted(() =>
7474
</template>
7575
</ButtonCreateKnowledge>
7676
<!-- 创建工具 -->
77-
<ButtonCreateTool trigger="hover" fit-trigger-width popper-class="rounded-xl!" :folder-id="workspaceId" @refresh="handleCreateTool">
77+
<ButtonCreateTool trigger="hover" fit-trigger-width popper-class="rounded-xl!" folder-id="default" @refresh="handleCreateTool">
7878
<template #trigger>
7979
<el-card shadow="hover">
8080
<div class="flex-between gap-3">

‎ui/src/views/system/shared-resources/ToolSharedView.vue‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ function handleToolUpdate(tool: ToolItem) {
7979
<div class="flex-align-center gap-3">
8080
<MkComplexSearch :fields="searchFields" @change="handleSearchChange" />
8181
<!-- 创建共享工具 -->
82-
<ButtonCreateTool :api="SystemSharedToolApi" folder-id="" @refresh="refreshTools" />
82+
<ButtonCreateTool folder-id="default" :api="SystemSharedToolApi" @refresh="refreshTools" />
8383
</div>
8484
</component>
8585
<div v-loading="toolOperationLoading" class="min-h-0 flex-1">

‎ui/src/views/tool/ToolView.vue‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ onMounted(() => {
241241
<!-- 工具商店 -->
242242
<ButtonToolStore :folder-id="currentFolder.id" @refresh="refreshTool" />
243243
<!-- 创建 -->
244-
<ButtonCreateTool :folder-id="currentFolder.id" @refresh="refreshTool" />
244+
<ButtonCreateTool :folder-id="currentFolder.id" :api="ToolApi" @refresh="refreshTool" />
245245
</template>
246246
</template>
247247
</div>

‎ui/src/views/tool/components/ButtonCreateTool.vue‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,13 @@ const { auth } = useStore()
1919
const props = withDefaults(
2020
defineProps<{
2121
api?: typeof ToolApi | typeof SystemSharedToolApi
22-
showWorkflow?: boolean
2322
folderId: string
2423
trigger?: 'click' | 'hover' | 'contextmenu'
2524
popperStyle?: CSSProperties
2625
popperClass?: string
2726
fitTriggerWidth?: boolean
2827
}>(),
29-
{ api: () => ToolApi, showWorkflow: true, trigger: 'click', fitTriggerWidth: false },
28+
{ api: () => ToolApi, trigger: 'click', fitTriggerWidth: false, folderId: 'default' },
3029
)
3130
3231
const emit = defineEmits<{ refresh: [] }>()
@@ -128,7 +127,7 @@ function handleRefresh() {
128127
<span>工具</span>
129128
</MkDropdownItem>
130129
<!-- 创建工作流工具 -->
131-
<MkDropdownItem v-if="showWorkflow" class="py-2!" @click="handleOpenWorkflowForm">
130+
<MkDropdownItem class="py-2!" @click="handleOpenWorkflowForm">
132131
<template #icon><ToolIcon :type="TOOL_TYPE.WORKFLOW" /></template>
133132
<span>工作流</span>
134133
</MkDropdownItem>

‎ui/src/views/tool/tool-store/ApplyStoreToolDialog.vue‎

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,22 @@ import { reactive, ref } from 'vue'
33
import type { FormInstance, FormRules } from 'element-plus'
44
import ToolApi from '@/api/admin/workspace/tool/tool'
55
import WorkspaceToolStoreApi from '@/api/admin/workspace/tool/store'
6+
import SystemSharedToolApi from '@/api/admin/system/shared-resources/tool/tool'
7+
import SystemSharedToolStoreApi from '@/api/admin/system/shared-resources/tool/store'
68
import { TOOL_TYPE } from '@/api/enums'
79
import type { ToolItem, ToolStoreItem } from '@/api/types'
810
import { useStore } from '@/stores'
911
import { MsgSuccess } from '@/utils/message'
12+
import { isSystemSharedResource } from '@/utils/resource-context'
1013
1114
defineOptions({ name: 'StoreToolFormDialog' })
1215
13-
const props = defineProps<{ folderId?: string }>()
16+
const props = withDefaults(
17+
defineProps<{
18+
folderId: string
19+
}>(),
20+
{ folderId: 'default' },
21+
)
1422
1523
const { auth } = useStore()
1624
@@ -36,14 +44,17 @@ function handleSubmit() {
3644
loading.value = true
3745
3846
const commonPayload = { folder_id: props.folderId || 'default', name }
47+
const isSharedResource = isSystemSharedResource()
48+
const toolApi = isSharedResource ? SystemSharedToolApi : ToolApi
49+
const toolStoreApi = isSharedResource ? SystemSharedToolStoreApi : WorkspaceToolStoreApi
3950
let request: Promise<ToolItem>
4051
4152
if (tool.source === 'internal') {
42-
request = WorkspaceToolStoreApi.postInternalTool(tool.id, commonPayload)
53+
request = toolStoreApi.postInternalTool(tool.id, commonPayload)
4354
} else if (tool.label === 'workflow_template') {
44-
request = ToolApi.postTool({ ...commonPayload, code: '{}', tool_type: TOOL_TYPE.WORKFLOW, work_flow_template: tool })
55+
request = toolApi.postTool({ ...commonPayload, code: '{}', tool_type: TOOL_TYPE.WORKFLOW, work_flow_template: tool })
4556
} else {
46-
request = WorkspaceToolStoreApi.postStoreTool(tool.id, {
57+
request = toolStoreApi.postStoreTool(tool.id, {
4758
...commonPayload,
4859
download_callback_url: tool.downloadCallbackUrl ?? '',
4960
download_url: tool.downloadUrl ?? '',

0 commit comments

Comments
 (0)