Skip to content

Commit 18194cc

Browse files
committed
feat: add Data Source tool functionality and localization
1 parent 39fd365 commit 18194cc

File tree

10 files changed

+565
-0
lines changed

10 files changed

+565
-0
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 5.2.8 on 2025-11-17 07:07
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('tools', '0003_alter_tool_template_id'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='tool',
15+
name='tool_type',
16+
field=models.CharField(choices=[('INTERNAL', '内置'), ('CUSTOM', '自定义'), ('MCP', 'MCP工具'), ('DATA_SOURCE', '数据源')], db_index=True, default='CUSTOM', max_length=20, verbose_name='工具类型'),
17+
),
18+
]

apps/tools/models/tool.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class ToolType(models.TextChoices):
3232
INTERNAL = "INTERNAL", '内置'
3333
CUSTOM = "CUSTOM", "自定义"
3434
MCP = "MCP", "MCP工具"
35+
DATA_SOURCE = "DATA_SOURCE", "数据源"
3536

3637

3738
class Tool(AppModelMixin):

ui/src/locales/lang/en-US/views/tool.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ export default {
44
createTool: 'Create Tool',
55
editTool: 'Edit Tool',
66
createMcpTool: 'Create MCP',
7+
createDataSourceTool: 'Create Data Source',
8+
dataSource: 'Data Source',
9+
editDataSourceTool: 'Edit Data Source',
710
editMcpTool: 'Edit MCP',
811
copyTool: 'Copy Tool',
912
importTool: 'Import Tool',

ui/src/locales/lang/zh-CN/views/tool.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ export default {
44
createTool: '创建工具',
55
editTool: '编辑工具',
66
createMcpTool: '创建MCP',
7+
createDataSourceTool: '创建数据源',
8+
dataSource: '数据源',
9+
editDataSourceTool: '编辑数据源',
710
editMcpTool: '编辑MCP',
811
copyTool: '复制工具',
912
importTool: '导入工具',

ui/src/locales/lang/zh-Hant/views/tool.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ export default {
44
createTool: '建立工具',
55
editTool: '編輯工具',
66
createMcpTool: '建立MCP',
7+
createDataSourceTool: '建立資料來源',
8+
dataSource: '資料來源',
9+
editDataSourceTool: '編輯資料來源',
710
editMcpTool: '編輯MCP',
811
copyTool: '複製工具',
912
importTool: '匯入工具',

ui/src/views/system-resource-management/ToolResourceIndex.vue

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
<el-table-column prop="tool_type" :label="$t('views.system.resource_management.type')">
8383
<template #default="scope">
8484
<span v-if="scope.row.tool_type === 'MCP'"> MCP </span>
85+
<span v-else-if="scope.row.tool_type === 'DATA_SOURCE'"> {{ $t('views.tool.dataSource') }} </span>
8586
<span v-else-if="scope.row.version">{{ $t('views.tool.toolStore.title') }}</span>
8687
<span v-else>
8788
{{
@@ -248,6 +249,23 @@
248249
</el-button>
249250
</span>
250251
</el-tooltip>
252+
<el-tooltip
253+
effect="dark"
254+
:content="$t('common.edit')"
255+
placement="top"
256+
v-if="!row.template_id && row.tool_type === 'DATA_SOURCE' && permissionPrecise.edit()"
257+
>
258+
<span class="mr-8">
259+
<el-button
260+
type="primary"
261+
text
262+
@click.stop="openCreateDataSourceDialog(row)"
263+
:title="$t('common.edit')"
264+
>
265+
<AppIcon iconName="app-edit"></AppIcon>
266+
</el-button>
267+
</span>
268+
</el-tooltip>
251269

252270
<el-tooltip
253271
effect="dark"
@@ -323,6 +341,7 @@
323341
<InitParamDrawer ref="InitParamDrawerRef" @refresh="refresh" />
324342
<ToolFormDrawer ref="ToolFormDrawerRef" @refresh="refresh" :title="ToolDrawertitle" />
325343
<McpToolFormDrawer ref="McpToolFormDrawerRef" @refresh="refresh" :title="McpToolDrawertitle" />
344+
<DataSourceToolFormDrawer ref="DataSourceToolFormDrawerRef" @refresh="refresh" :title="DataSourceToolDrawertitle" />
326345
<AddInternalToolDialog ref="AddInternalToolDialogRef" @refresh="confirmAddInternalTool" />
327346
<McpToolConfigDialog ref="McpToolConfigDialogRef" @refresh="refresh" />
328347
<ResourceAuthorizationDrawer :type="SourceTypeEnum.TOOL" ref="ResourceAuthorizationDrawerRef" />
@@ -337,6 +356,7 @@ import ToolResourceApi from '@/api/system-resource-management/tool'
337356
import AddInternalToolDialog from '@/views/tool/toolStore/AddInternalToolDialog.vue'
338357
import ToolFormDrawer from '@/views/tool/ToolFormDrawer.vue'
339358
import McpToolFormDrawer from '@/views/tool/McpToolFormDrawer.vue'
359+
import DataSourceToolFormDrawer from '@/views/tool/DataSourceToolFormDrawer.vue'
340360
import ResourceAuthorizationDrawer from '@/components/resource-authorization-drawer/index.vue'
341361
import { t } from '@/locales'
342362
import { SourceTypeEnum } from '@/enums/common'
@@ -460,8 +480,10 @@ async function copyTool(row: any) {
460480
461481
const ToolFormDrawerRef = ref()
462482
const McpToolFormDrawerRef = ref()
483+
const DataSourceToolFormDrawerRef = ref()
463484
const ToolDrawertitle = ref('')
464485
const McpToolDrawertitle = ref('')
486+
const DataSourceToolDrawertitle = ref('')
465487
466488
function openCreateDialog(data?: any) {
467489
// 有template_id的不允许编辑,是模板转换来的
@@ -495,6 +517,22 @@ function openCreateMcpDialog(data?: any) {
495517
}
496518
}
497519
520+
function openCreateDataSourceDialog(data?: any) {
521+
// 有template_id的不允许编辑,是模板转换来的
522+
if (data?.template_id) {
523+
return
524+
}
525+
526+
DataSourceToolDrawertitle.value = data ? t('views.tool.editDataSourceTool') : t('views.tool.createDataSourceTool')
527+
if (data) {
528+
ToolResourceApi.getToolById(data?.id, loading).then((res: any) => {
529+
DataSourceToolFormDrawerRef.value.open(res.data)
530+
})
531+
} else {
532+
DataSourceToolFormDrawerRef.value.open(data)
533+
}
534+
}
535+
498536
const AddInternalToolDialogRef = ref<InstanceType<typeof AddInternalToolDialog>>()
499537
function addInternalTool(data?: any, isEdit?: boolean) {
500538
AddInternalToolDialogRef.value?.open(data, isEdit)

ui/src/views/system-shared/ToolSharedIndex.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
<el-radio-button value="">{{ $t('views.tool.all') }}</el-radio-button>
1515
<el-radio-button value="CUSTOM">{{ $t('views.tool.title') }}</el-radio-button>
1616
<el-radio-button value="MCP">MCP</el-radio-button>
17+
<el-radio-button value="DATA_SOURCE">{{ $t('views.tool.dataSource') }}</el-radio-button>
1718
</el-radio-group>
1819
</el-space>
1920
</template>

0 commit comments

Comments
 (0)