2025-05-08 08:23:03 +00:00
|
|
|
<template>
|
2025-07-04 09:42:12 +00:00
|
|
|
<LayoutContainer showCollapse class="tool-manage">
|
2025-05-08 08:23:03 +00:00
|
|
|
<template #left>
|
2025-06-26 09:00:11 +00:00
|
|
|
<h4 class="p-12-16 pb-0 mt-12">{{ $t('views.tool.title') }}</h4>
|
2025-07-15 10:40:53 +00:00
|
|
|
<div class="p-8">
|
|
|
|
|
<folder-tree
|
|
|
|
|
:source="SourceTypeEnum.TOOL"
|
|
|
|
|
:data="folderList"
|
|
|
|
|
:currentNodeKey="folder.currentFolder?.id"
|
|
|
|
|
@handleNodeClick="folderClickHandle"
|
|
|
|
|
@refreshTree="refreshFolder"
|
|
|
|
|
:shareTitle="$t('views.shared.shared_tool')"
|
|
|
|
|
:showShared="permissionPrecise['is_share']()"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
2025-05-08 08:23:03 +00:00
|
|
|
</template>
|
2025-07-15 09:15:20 +00:00
|
|
|
<ToolListContainer @refreshFolder="refreshFolder">
|
2025-06-24 06:49:09 +00:00
|
|
|
<template #header>
|
2025-07-16 05:49:46 +00:00
|
|
|
<h2 v-if="folder.currentFolder?.id === 'share'">
|
|
|
|
|
{{ $t('views.shared.shared_tool') }}
|
|
|
|
|
</h2>
|
|
|
|
|
<FolderBreadcrumb :folderList="folderList" @click="folderClickHandle" v-else />
|
2025-08-11 05:12:56 +00:00
|
|
|
<div class="mt-16 mb-16">
|
|
|
|
|
<el-radio-group v-model="toolType" @change="radioChange" class="app-radio-button-group">
|
|
|
|
|
<el-radio-button value="">{{ $t('views.tool.all') }}</el-radio-button>
|
|
|
|
|
<el-radio-button value="CUSTOM">{{ $t('views.tool.title') }}</el-radio-button>
|
|
|
|
|
<el-radio-button value="MCP">MCP</el-radio-button>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
</div>
|
2025-05-15 02:25:05 +00:00
|
|
|
</template>
|
2025-06-24 06:49:09 +00:00
|
|
|
</ToolListContainer>
|
2025-05-08 08:23:03 +00:00
|
|
|
</LayoutContainer>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script lang="ts" setup>
|
2025-06-09 13:27:12 +00:00
|
|
|
import { onMounted, ref, reactive, computed } from 'vue'
|
2025-06-24 06:49:09 +00:00
|
|
|
import ToolListContainer from '@/views/tool/component/ToolListContainer.vue'
|
2025-06-26 12:25:24 +00:00
|
|
|
import { SourceTypeEnum } from '@/enums/common'
|
2025-06-23 07:52:03 +00:00
|
|
|
import permissionMap from '@/permission'
|
|
|
|
|
import { useRoute } from 'vue-router'
|
2025-06-24 06:49:09 +00:00
|
|
|
import useStore from '@/stores'
|
2025-06-23 07:52:03 +00:00
|
|
|
const route = useRoute()
|
2025-06-24 06:49:09 +00:00
|
|
|
const { folder, tool } = useStore()
|
2025-05-15 02:25:05 +00:00
|
|
|
|
2025-06-24 14:12:17 +00:00
|
|
|
const apiType = computed(() => {
|
2025-06-23 07:52:03 +00:00
|
|
|
if (route.path.includes('shared')) {
|
|
|
|
|
return 'systemShare'
|
|
|
|
|
} else if (route.path.includes('resource-management')) {
|
|
|
|
|
return 'systemManage'
|
|
|
|
|
} else {
|
|
|
|
|
return 'workspace'
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
const permissionPrecise = computed(() => {
|
2025-06-24 14:12:17 +00:00
|
|
|
return permissionMap['tool'][apiType.value]
|
2025-06-23 07:52:03 +00:00
|
|
|
})
|
|
|
|
|
|
2025-05-08 08:23:03 +00:00
|
|
|
const loading = ref(false)
|
2025-08-11 05:12:56 +00:00
|
|
|
const toolType = ref('')
|
2025-05-12 10:28:58 +00:00
|
|
|
|
2025-05-09 06:42:51 +00:00
|
|
|
const folderList = ref<any[]>([])
|
2025-05-08 08:23:03 +00:00
|
|
|
|
2025-06-19 09:10:39 +00:00
|
|
|
function getFolder(bool?: boolean) {
|
|
|
|
|
const params = {}
|
2025-06-26 12:25:24 +00:00
|
|
|
folder.asyncGetFolder(SourceTypeEnum.TOOL, params, loading).then((res: any) => {
|
2025-06-19 09:10:39 +00:00
|
|
|
folderList.value = res.data
|
|
|
|
|
if (bool) {
|
|
|
|
|
// 初始化刷新
|
2025-06-30 07:43:23 +00:00
|
|
|
folder.setCurrentFolder(res.data?.[0] || {})
|
2025-06-19 09:10:39 +00:00
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-30 08:33:49 +00:00
|
|
|
function folderClickHandle(row: any) {
|
2025-07-07 08:59:24 +00:00
|
|
|
if (row.id === folder.currentFolder?.id) {
|
|
|
|
|
return
|
|
|
|
|
}
|
2025-06-30 07:43:23 +00:00
|
|
|
folder.setCurrentFolder(row)
|
2025-06-24 06:49:09 +00:00
|
|
|
tool.setToolList([])
|
|
|
|
|
}
|
|
|
|
|
|
2025-08-11 05:12:56 +00:00
|
|
|
function radioChange() {
|
|
|
|
|
tool.setToolType(toolType.value)
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-24 06:49:09 +00:00
|
|
|
function refreshFolder() {
|
|
|
|
|
getFolder()
|
2025-06-19 09:10:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
getFolder(true)
|
2025-05-08 08:23:03 +00:00
|
|
|
})
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped></style>
|