mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-26 10:12:51 +00:00
feat: folder
This commit is contained in:
parent
e02d417af9
commit
2e15552853
|
|
@ -41,7 +41,7 @@
|
|||
{{ $t('common.cancel') }}
|
||||
</el-button>
|
||||
<el-button type="primary" @click="submitHandle" :loading="loading">
|
||||
{{ $t('common.add') }}
|
||||
{{ isEdit ? $t('common.confirm') : $t('common.add') }}
|
||||
</el-button>
|
||||
</span>
|
||||
</template>
|
||||
|
|
@ -67,6 +67,7 @@ const loading = ref(false)
|
|||
const dialogVisible = ref<boolean>(false)
|
||||
const sourceType = ref<any>('')
|
||||
const isEdit = ref<boolean>(false)
|
||||
const editId = ref<string>('')
|
||||
|
||||
const folderForm = ref<any>({
|
||||
name: '',
|
||||
|
|
@ -98,11 +99,16 @@ watch(dialogVisible, (bool) => {
|
|||
|
||||
const open = (source: string, id: string, data?: any) => {
|
||||
sourceType.value = source
|
||||
folderForm.value.parent_id = id
|
||||
if (data) {
|
||||
// 编辑当前id
|
||||
editId.value = data.id
|
||||
folderForm.value.name = data.name
|
||||
folderForm.value.desc = data.desc
|
||||
folderForm.value.parent_id = data.parent_id
|
||||
isEdit.value = true
|
||||
} else {
|
||||
// 给当前id添加子id
|
||||
folderForm.value.parent_id = id
|
||||
}
|
||||
dialogVisible.value = true
|
||||
}
|
||||
|
|
@ -111,11 +117,13 @@ const submitHandle = async () => {
|
|||
await FolderFormRef.value.validate((valid: any) => {
|
||||
if (valid) {
|
||||
if (isEdit.value) {
|
||||
folderApi.putFolder(sourceType.value, folderForm.value, loading).then((res) => {
|
||||
MsgSuccess(t('common.editSuccess'))
|
||||
emit('refresh')
|
||||
dialogVisible.value = false
|
||||
})
|
||||
folderApi
|
||||
.putFolder(editId.value, sourceType.value, folderForm.value, loading)
|
||||
.then((res) => {
|
||||
MsgSuccess(t('common.editSuccess'))
|
||||
emit('refresh')
|
||||
dialogVisible.value = false
|
||||
})
|
||||
} else {
|
||||
folderApi.postFolder(sourceType.value, folderForm.value, loading).then((res) => {
|
||||
MsgSuccess(t('common.createSuccess'))
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
highlight-current
|
||||
class="overflow-inherit_node__children"
|
||||
node-key="id"
|
||||
v-loading="loading"
|
||||
>
|
||||
<template #default="{ node, data }">
|
||||
<div class="flex-between w-full" @mouseenter.stop="handleMouseEnter(data)">
|
||||
|
|
@ -36,6 +37,7 @@
|
|||
</div>
|
||||
|
||||
<div
|
||||
v-if="canOperation"
|
||||
@click.stop
|
||||
v-show="hoverNodeId === data.id"
|
||||
@mouseenter.stop="handleMouseEnter(data)"
|
||||
|
|
@ -103,6 +105,10 @@ const props = defineProps({
|
|||
type: String,
|
||||
default: 'views.system.share_knowledge',
|
||||
},
|
||||
canOperation: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
})
|
||||
interface Tree {
|
||||
name: string
|
||||
|
|
@ -122,11 +128,12 @@ const treeRef = ref<TreeInstance>()
|
|||
const filterText = ref('')
|
||||
const hoverNodeId = ref<string | undefined>('')
|
||||
const title = ref('')
|
||||
const loading = ref(false)
|
||||
|
||||
watch(filterText, (val) => {
|
||||
treeRef.value!.filter(val)
|
||||
})
|
||||
let time
|
||||
let time: any
|
||||
|
||||
function handleMouseEnter(data: Tree) {
|
||||
clearTimeout(time)
|
||||
|
|
@ -153,7 +160,7 @@ const handleSharedNodeClick = () => {
|
|||
}
|
||||
|
||||
function deleteFolder(row: Tree) {
|
||||
folderApi.delFolder(row.id as string, props.source).then(() => {
|
||||
folderApi.delFolder(row.id as string, props.source, loading).then(() => {
|
||||
emit('refreshTree')
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,11 +2,11 @@
|
|||
<div v-infinite-scroll="loadData" :infinite-scroll-disabled="disabledScroll">
|
||||
<slot />
|
||||
</div>
|
||||
<div style="padding: 16px 10px">
|
||||
<el-divider v-if="size > 0 && loading">
|
||||
<div style="padding: 0 10px 16px">
|
||||
<el-divider v-if="size > 0 && loading" style="background: none">
|
||||
<el-text type="info"> {{ $t('components.loading') }}...</el-text>
|
||||
</el-divider>
|
||||
<el-divider v-if="noMore">
|
||||
<el-divider v-if="noMore" style="background: none !important">
|
||||
<el-text type="info"> {{ $t('components.noMore') }}</el-text>
|
||||
</el-divider>
|
||||
</div>
|
||||
|
|
@ -21,27 +21,27 @@ const props = defineProps({
|
|||
*/
|
||||
size: {
|
||||
type: Number,
|
||||
default: 0
|
||||
default: 0,
|
||||
},
|
||||
/**
|
||||
* 总数
|
||||
*/
|
||||
total: {
|
||||
type: Number,
|
||||
default: 0
|
||||
default: 0,
|
||||
},
|
||||
/**
|
||||
* 总数
|
||||
*/
|
||||
page_size: {
|
||||
type: Number,
|
||||
default: 0
|
||||
default: 0,
|
||||
},
|
||||
current_page: {
|
||||
type: Number,
|
||||
default: 0
|
||||
default: 0,
|
||||
},
|
||||
loading: Boolean
|
||||
loading: Boolean,
|
||||
})
|
||||
|
||||
const emit = defineEmits(['update:current_page', 'load'])
|
||||
|
|
@ -53,12 +53,12 @@ watch(
|
|||
if (val === 1) {
|
||||
current.value = 1
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
const noMore = computed(
|
||||
() =>
|
||||
props.size > 0 && props.size === props.total && props.total > props.page_size && !props.loading
|
||||
props.size > 0 && props.size === props.total && props.total > props.page_size && !props.loading,
|
||||
)
|
||||
const disabledScroll = computed(() => props.size > 0 && (props.loading || noMore.value))
|
||||
|
||||
|
|
|
|||
|
|
@ -11,10 +11,11 @@
|
|||
<slot name="search"> </slot>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content-container__main p-16">
|
||||
<slot></slot>
|
||||
</div>
|
||||
<el-scrollbar>
|
||||
<div class="content-container__main p-16">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
|
|
|||
|
|
@ -241,3 +241,7 @@
|
|||
.el-form--label-top .el-form-item .el-form-item__label {
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.el-divider__text {
|
||||
background: var(--app-layout-bg-color);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@
|
|||
@handleNodeClick="folderClickHandel"
|
||||
class="p-8"
|
||||
v-loading="folderLoading"
|
||||
:canOperation="false"
|
||||
/>
|
||||
</template>
|
||||
<el-scrollbar>
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
:data="folderList"
|
||||
:currentNodeKey="currentFolder?.id"
|
||||
@handleNodeClick="folderClickHandel"
|
||||
@refreshTree="refreshFolder"
|
||||
class="p-8"
|
||||
/>
|
||||
</template>
|
||||
|
|
@ -129,7 +130,10 @@
|
|||
</el-dropdown>
|
||||
</div>
|
||||
</template>
|
||||
<div v-loading.fullscreen.lock="paginationConfig.current_page === 1 && loading">
|
||||
<div
|
||||
v-loading.fullscreen.lock="paginationConfig.current_page === 1 && loading"
|
||||
style="max-height: calc(100vh - 140px)"
|
||||
>
|
||||
<InfiniteScroll
|
||||
:size="applicationList.length"
|
||||
:total="paginationConfig.total"
|
||||
|
|
@ -367,21 +371,6 @@ function getList() {
|
|||
})
|
||||
}
|
||||
|
||||
function getFolder() {
|
||||
const params = {}
|
||||
folder.asyncGetFolder(FolderSource.APPLICATION, params, loading).then((res: any) => {
|
||||
folderList.value = res.data
|
||||
currentFolder.value = res.data?.[0] || {}
|
||||
getList()
|
||||
})
|
||||
}
|
||||
|
||||
function folderClickHandel(row: any) {
|
||||
currentFolder.value = row
|
||||
applicationList.value = []
|
||||
getList()
|
||||
}
|
||||
|
||||
function clickFolder(item: any) {
|
||||
currentFolder.value.id = item.id
|
||||
applicationList.value = []
|
||||
|
|
@ -482,15 +471,6 @@ const exportApplication = (application: any) => {
|
|||
})
|
||||
}
|
||||
|
||||
const CreateFolderDialogRef = ref()
|
||||
function openCreateFolder() {
|
||||
CreateFolderDialogRef.value.open(FolderSource.APPLICATION, currentFolder.value.parent_id)
|
||||
}
|
||||
function refreshFolder() {
|
||||
applicationList.value = []
|
||||
getFolder()
|
||||
getList()
|
||||
}
|
||||
const elUploadRef = ref()
|
||||
const importApplication = (file: any) => {
|
||||
const formData = new FormData()
|
||||
|
|
@ -515,8 +495,34 @@ const importApplication = (file: any) => {
|
|||
})
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
// 文件夹相关
|
||||
const CreateFolderDialogRef = ref()
|
||||
function openCreateFolder() {
|
||||
CreateFolderDialogRef.value.open(FolderSource.APPLICATION, currentFolder.value.id)
|
||||
}
|
||||
|
||||
function getFolder(bool?: boolean) {
|
||||
const params = {}
|
||||
folder.asyncGetFolder(FolderSource.APPLICATION, params, loading).then((res: any) => {
|
||||
folderList.value = res.data
|
||||
if (bool) {
|
||||
// 初始化刷新
|
||||
currentFolder.value = res.data?.[0] || {}
|
||||
}
|
||||
getList()
|
||||
})
|
||||
}
|
||||
function folderClickHandel(row: any) {
|
||||
currentFolder.value = row
|
||||
applicationList.value = []
|
||||
getList()
|
||||
}
|
||||
function refreshFolder() {
|
||||
applicationList.value = []
|
||||
getFolder()
|
||||
}
|
||||
onMounted(() => {
|
||||
getFolder(true)
|
||||
})
|
||||
</script>
|
||||
|
||||
|
|
|
|||
|
|
@ -61,14 +61,14 @@ const props = withDefaults(
|
|||
|
||||
next_disable: boolean
|
||||
}>(),
|
||||
{}
|
||||
{},
|
||||
)
|
||||
|
||||
const emit = defineEmits(['update:chatId', 'update:currentAbstract', 'refresh'])
|
||||
|
||||
const route = useRoute()
|
||||
const {
|
||||
params: { id }
|
||||
params: { id },
|
||||
} = route
|
||||
const loading = ref(false)
|
||||
const visible = ref(false)
|
||||
|
|
@ -77,7 +77,7 @@ const recordList = ref<chatType[]>([])
|
|||
const paginationConfig = reactive({
|
||||
current_page: 1,
|
||||
page_size: 20,
|
||||
total: 0
|
||||
total: 0,
|
||||
})
|
||||
|
||||
function closeHandle() {
|
||||
|
|
@ -93,7 +93,7 @@ function getChatRecord() {
|
|||
paginationConfig.total = res.data.total
|
||||
const list = res.data.records
|
||||
recordList.value = [...list, ...recordList.value].sort((a, b) =>
|
||||
a.create_time.localeCompare(b.create_time)
|
||||
a.create_time.localeCompare(b.create_time),
|
||||
)
|
||||
if (paginationConfig.current_page === 1) {
|
||||
nextTick(() => {
|
||||
|
|
@ -113,7 +113,7 @@ watch(
|
|||
if (props.chatId) {
|
||||
getChatRecord()
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
watch(visible, (bool) => {
|
||||
|
|
@ -143,7 +143,7 @@ const open = () => {
|
|||
}
|
||||
|
||||
defineExpose({
|
||||
open
|
||||
open,
|
||||
})
|
||||
</script>
|
||||
<style lang="scss">
|
||||
|
|
@ -158,9 +158,5 @@ defineExpose({
|
|||
background: var(--app-layout-bg-color);
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
:deep(.el-divider__text) {
|
||||
background: var(--app-layout-bg-color);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -146,7 +146,11 @@
|
|||
</el-dropdown>
|
||||
</div>
|
||||
</template>
|
||||
<div v-loading.fullscreen.lock="paginationConfig.current_page === 1 && loading">
|
||||
|
||||
<div
|
||||
v-loading.fullscreen.lock="paginationConfig.current_page === 1 && loading"
|
||||
style="max-height: calc(100vh - 140px)"
|
||||
>
|
||||
<InfiniteScroll
|
||||
:size="knowledgeList.length"
|
||||
:total="paginationConfig.total"
|
||||
|
|
@ -456,34 +460,12 @@ function getList() {
|
|||
})
|
||||
}
|
||||
|
||||
function getFolder() {
|
||||
const params = {}
|
||||
folder.asyncGetFolder(FolderSource.KNOWLEDGE, params, loading).then((res: any) => {
|
||||
folderList.value = res.data
|
||||
currentFolder.value = res.data?.[0] || {}
|
||||
getList()
|
||||
})
|
||||
}
|
||||
|
||||
function folderClickHandel(row: any) {
|
||||
currentFolder.value = row
|
||||
knowledgeList.value = []
|
||||
if (currentFolder.value.id === 'share') return
|
||||
getList()
|
||||
}
|
||||
|
||||
function clickFolder(item: any) {
|
||||
currentFolder.value.id = item.id
|
||||
knowledgeList.value = []
|
||||
getList()
|
||||
}
|
||||
|
||||
const CreateFolderDialogRef = ref()
|
||||
|
||||
function openCreateFolder() {
|
||||
CreateFolderDialogRef.value.open(FolderSource.KNOWLEDGE, currentFolder.value.parent_id)
|
||||
}
|
||||
|
||||
const GenerateRelatedDialogRef = ref<InstanceType<typeof GenerateRelatedDialog>>()
|
||||
function openGenerateDialog(row: any) {
|
||||
if (GenerateRelatedDialogRef.value) {
|
||||
|
|
@ -521,14 +503,36 @@ function deleteKnowledge(row: any) {
|
|||
.catch(() => {})
|
||||
}
|
||||
|
||||
// 文件夹相关
|
||||
const CreateFolderDialogRef = ref()
|
||||
function openCreateFolder() {
|
||||
CreateFolderDialogRef.value.open(FolderSource.KNOWLEDGE, currentFolder.value.id)
|
||||
}
|
||||
function getFolder(bool?: boolean) {
|
||||
const params = {}
|
||||
folder.asyncGetFolder(FolderSource.KNOWLEDGE, params, loading).then((res: any) => {
|
||||
folderList.value = res.data
|
||||
if (bool) {
|
||||
// 初始化刷新
|
||||
currentFolder.value = res.data?.[0] || {}
|
||||
}
|
||||
getList()
|
||||
})
|
||||
}
|
||||
function folderClickHandel(row: any) {
|
||||
currentFolder.value = row
|
||||
knowledgeList.value = []
|
||||
if (currentFolder.value.id === 'share') return
|
||||
getList()
|
||||
}
|
||||
function refreshFolder() {
|
||||
console.log(currentFolder.value)
|
||||
knowledgeList.value = []
|
||||
getFolder()
|
||||
getList()
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getFolder()
|
||||
getFolder(true)
|
||||
})
|
||||
</script>
|
||||
|
||||
|
|
|
|||
|
|
@ -324,7 +324,7 @@ function clickFolder(item: any) {
|
|||
const CreateFolderDialogRef = ref()
|
||||
|
||||
function openCreateFolder() {
|
||||
CreateFolderDialogRef.value.open('KNOWLEDGE', currentFolder.value.parent_id)
|
||||
CreateFolderDialogRef.value.open('KNOWLEDGE', currentFolder.value.id)
|
||||
}
|
||||
|
||||
const GenerateRelatedDialogRef = ref<InstanceType<typeof GenerateRelatedDialog>>()
|
||||
|
|
|
|||
|
|
@ -426,7 +426,7 @@ function configInitParams(item: any) {
|
|||
|
||||
const CreateFolderDialogRef = ref()
|
||||
function openCreateFolder() {
|
||||
CreateFolderDialogRef.value.open('TOOL', currentFolder.value.parent_id)
|
||||
CreateFolderDialogRef.value.open('TOOL', currentFolder.value.id)
|
||||
}
|
||||
|
||||
const elUploadRef = ref()
|
||||
|
|
|
|||
|
|
@ -242,7 +242,7 @@ function folderClickHandel(row: any) {
|
|||
const CreateFolderDialogRef = ref()
|
||||
|
||||
function openCreateFolder() {
|
||||
CreateFolderDialogRef.value.open('KNOWLEDGE', currentFolder.value.parent_id)
|
||||
CreateFolderDialogRef.value.open('KNOWLEDGE', currentFolder.value.id)
|
||||
}
|
||||
|
||||
const GenerateRelatedDialogRef = ref<InstanceType<typeof GenerateRelatedDialog>>()
|
||||
|
|
|
|||
|
|
@ -386,7 +386,7 @@ function folderClickHandel(row: any) {
|
|||
const CreateFolderDialogRef = ref()
|
||||
|
||||
function openCreateFolder() {
|
||||
CreateFolderDialogRef.value.open('KNOWLEDGE', currentFolder.value.parent_id)
|
||||
CreateFolderDialogRef.value.open('KNOWLEDGE', currentFolder.value.id)
|
||||
}
|
||||
|
||||
const GenerateRelatedDialogRef = ref<InstanceType<typeof GenerateRelatedDialog>>()
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
:data="folderList"
|
||||
:currentNodeKey="currentFolder?.id"
|
||||
@handleNodeClick="folderClickHandel"
|
||||
@refreshTree ="refreshFolder"
|
||||
shareTitle="views.system.share_tool"
|
||||
isShared
|
||||
class="p-8"
|
||||
|
|
@ -109,183 +110,195 @@
|
|||
</div>
|
||||
</template>
|
||||
|
||||
<div>
|
||||
<el-row v-if="toolList.length > 0" :gutter="15">
|
||||
<template v-for="(item, index) in toolList" :key="index">
|
||||
<el-col
|
||||
v-if="item.resource_type === 'folder'"
|
||||
:xs="24"
|
||||
:sm="12"
|
||||
:md="12"
|
||||
:lg="8"
|
||||
:xl="6"
|
||||
class="mb-16"
|
||||
>
|
||||
<CardBox
|
||||
:title="item.name"
|
||||
:description="item.desc || $t('common.noData')"
|
||||
class="cursor"
|
||||
@click="clickFolder(item)"
|
||||
<div
|
||||
v-loading.fullscreen.lock="paginationConfig.current_page === 1 && loading"
|
||||
style="max-height: calc(100vh - 140px)"
|
||||
>
|
||||
<InfiniteScroll
|
||||
:size="toolList.length"
|
||||
:total="paginationConfig.total"
|
||||
:page_size="paginationConfig.page_size"
|
||||
v-model:current_page="paginationConfig.current_page"
|
||||
@load="getList"
|
||||
:loading="loading"
|
||||
>
|
||||
<el-row v-if="toolList.length > 0" :gutter="15">
|
||||
<template v-for="(item, index) in toolList" :key="index">
|
||||
<el-col
|
||||
v-if="item.resource_type === 'folder'"
|
||||
:xs="24"
|
||||
:sm="12"
|
||||
:md="12"
|
||||
:lg="8"
|
||||
:xl="6"
|
||||
class="mb-16"
|
||||
>
|
||||
<template #icon>
|
||||
<el-avatar shape="square" :size="32" style="background: none">
|
||||
<AppIcon iconName="app-folder" style="font-size: 32px"></AppIcon>
|
||||
</el-avatar>
|
||||
</template>
|
||||
<template #subTitle>
|
||||
<el-text class="color-secondary lighter" size="small">
|
||||
{{ $t('common.creator') }}: {{ item.nick_name }}
|
||||
</el-text>
|
||||
</template>
|
||||
</CardBox>
|
||||
</el-col>
|
||||
<el-col v-else :xs="24" :sm="12" :md="12" :lg="8" :xl="6" class="mb-16">
|
||||
<CardBox :title="item.name" :description="item.desc" class="cursor">
|
||||
<template #icon>
|
||||
<el-avatar
|
||||
v-if="isAppIcon(item?.icon)"
|
||||
shape="square"
|
||||
:size="32"
|
||||
style="background: none"
|
||||
class="mr-8"
|
||||
>
|
||||
<img :src="item?.icon" alt="" />
|
||||
</el-avatar>
|
||||
<el-avatar v-else class="avatar-green" shape="square" :size="32">
|
||||
<img src="@/assets/node/icon_tool.svg" style="width: 58%" alt="" />
|
||||
</el-avatar>
|
||||
</template>
|
||||
<template #subTitle>
|
||||
<el-text class="color-secondary lighter" size="small">
|
||||
{{ $t('common.creator') }}: {{ item.nick_name }}
|
||||
</el-text>
|
||||
</template>
|
||||
<CardBox
|
||||
:title="item.name"
|
||||
:description="item.desc || $t('common.noData')"
|
||||
class="cursor"
|
||||
@click="clickFolder(item)"
|
||||
>
|
||||
<template #icon>
|
||||
<el-avatar shape="square" :size="32" style="background: none">
|
||||
<AppIcon iconName="app-folder" style="font-size: 32px"></AppIcon>
|
||||
</el-avatar>
|
||||
</template>
|
||||
<template #subTitle>
|
||||
<el-text class="color-secondary lighter" size="small">
|
||||
{{ $t('common.creator') }}: {{ item.nick_name }}
|
||||
</el-text>
|
||||
</template>
|
||||
</CardBox>
|
||||
</el-col>
|
||||
<el-col v-else :xs="24" :sm="12" :md="12" :lg="8" :xl="6" class="mb-16">
|
||||
<CardBox :title="item.name" :description="item.desc" class="cursor">
|
||||
<template #icon>
|
||||
<el-avatar
|
||||
v-if="isAppIcon(item?.icon)"
|
||||
shape="square"
|
||||
:size="32"
|
||||
style="background: none"
|
||||
class="mr-8"
|
||||
>
|
||||
<img :src="item?.icon" alt="" />
|
||||
</el-avatar>
|
||||
<el-avatar v-else class="avatar-green" shape="square" :size="32">
|
||||
<img src="@/assets/node/icon_tool.svg" style="width: 58%" alt="" />
|
||||
</el-avatar>
|
||||
</template>
|
||||
<template #subTitle>
|
||||
<el-text class="color-secondary lighter" size="small">
|
||||
{{ $t('common.creator') }}: {{ item.nick_name }}
|
||||
</el-text>
|
||||
</template>
|
||||
|
||||
<template #footer>
|
||||
<div v-if="item.is_active" class="flex align-center">
|
||||
<el-icon class="color-success mr-8" style="font-size: 16px">
|
||||
<SuccessFilled />
|
||||
</el-icon>
|
||||
<span class="color-secondary">
|
||||
{{ $t('common.status.enabled') }}
|
||||
</span>
|
||||
</div>
|
||||
<div v-else class="flex align-center">
|
||||
<AppIcon iconName="app-disabled" class="color-secondary mr-8"></AppIcon>
|
||||
<span class="color-secondary">
|
||||
{{ $t('common.status.disabled') }}
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #mouseEnter>
|
||||
<div @click.stop>
|
||||
<el-switch
|
||||
v-model="item.is_active"
|
||||
:before-change="() => changeState(item)"
|
||||
size="small"
|
||||
class="mr-4"
|
||||
v-hasPermission="[
|
||||
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
PermissionConst.TOOL_EDIT.getWorkspacePermission,
|
||||
]"
|
||||
/>
|
||||
<el-divider direction="vertical" />
|
||||
<el-dropdown trigger="click">
|
||||
<el-button text @click.stop>
|
||||
<el-icon>
|
||||
<MoreFilled />
|
||||
</el-icon>
|
||||
</el-button>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item
|
||||
v-if="
|
||||
!item.template_id &&
|
||||
hasPermission(
|
||||
[
|
||||
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
PermissionConst.TOOL_EDIT.getWorkspacePermission,
|
||||
],
|
||||
'OR',
|
||||
)
|
||||
"
|
||||
:disabled="!canEdit(item)"
|
||||
@click.stop="openCreateDialog(item)"
|
||||
>
|
||||
<el-icon>
|
||||
<EditPen />
|
||||
</el-icon>
|
||||
{{ $t('common.edit') }}
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:disabled="!canEdit(item)"
|
||||
v-if="
|
||||
!item.template_id &&
|
||||
hasPermission(
|
||||
[
|
||||
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
PermissionConst.TOOL_EXPORT.getWorkspacePermission,
|
||||
],
|
||||
'OR',
|
||||
)
|
||||
"
|
||||
@click.stop="copyTool(item)"
|
||||
>
|
||||
<AppIcon iconName="app-copy"></AppIcon>
|
||||
{{ $t('common.copy') }}
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
v-if="item.init_field_list?.length > 0"
|
||||
:disabled="!canEdit(item)"
|
||||
@click.stop="configInitParams(item)"
|
||||
>
|
||||
<AppIcon iconName="app-operation" class="mr-4"></AppIcon>
|
||||
{{ $t('common.param.initParam') }}
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
v-if="
|
||||
!item.template_id &&
|
||||
hasPermission(
|
||||
[
|
||||
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
PermissionConst.TOOL_EXPORT.getWorkspacePermission,
|
||||
],
|
||||
'OR',
|
||||
)
|
||||
"
|
||||
:disabled="!canEdit(item)"
|
||||
@click.stop="exportTool(item)"
|
||||
>
|
||||
<AppIcon iconName="app-export"></AppIcon>
|
||||
{{ $t('common.export') }}
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
v-if="
|
||||
hasPermission(
|
||||
[
|
||||
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
PermissionConst.TOOL_DELETE.getWorkspacePermission,
|
||||
],
|
||||
'OR',
|
||||
)
|
||||
"
|
||||
:disabled="!canEdit(item)"
|
||||
divided
|
||||
@click.stop="deleteTool(item)"
|
||||
>
|
||||
<el-icon><Delete /></el-icon>
|
||||
{{ $t('common.delete') }}
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
</div>
|
||||
</template>
|
||||
</CardBox>
|
||||
</el-col>
|
||||
</template>
|
||||
</el-row>
|
||||
<el-empty :description="$t('common.noData')" v-else />
|
||||
<template #footer>
|
||||
<div v-if="item.is_active" class="flex align-center">
|
||||
<el-icon class="color-success mr-8" style="font-size: 16px">
|
||||
<SuccessFilled />
|
||||
</el-icon>
|
||||
<span class="color-secondary">
|
||||
{{ $t('common.status.enabled') }}
|
||||
</span>
|
||||
</div>
|
||||
<div v-else class="flex align-center">
|
||||
<AppIcon iconName="app-disabled" class="color-secondary mr-8"></AppIcon>
|
||||
<span class="color-secondary">
|
||||
{{ $t('common.status.disabled') }}
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #mouseEnter>
|
||||
<div @click.stop>
|
||||
<el-switch
|
||||
v-model="item.is_active"
|
||||
:before-change="() => changeState(item)"
|
||||
size="small"
|
||||
class="mr-4"
|
||||
v-hasPermission="[
|
||||
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
PermissionConst.TOOL_EDIT.getWorkspacePermission,
|
||||
]"
|
||||
/>
|
||||
<el-divider direction="vertical" />
|
||||
<el-dropdown trigger="click">
|
||||
<el-button text @click.stop>
|
||||
<el-icon>
|
||||
<MoreFilled />
|
||||
</el-icon>
|
||||
</el-button>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item
|
||||
v-if="
|
||||
!item.template_id &&
|
||||
hasPermission(
|
||||
[
|
||||
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
PermissionConst.TOOL_EDIT.getWorkspacePermission,
|
||||
],
|
||||
'OR',
|
||||
)
|
||||
"
|
||||
:disabled="!canEdit(item)"
|
||||
@click.stop="openCreateDialog(item)"
|
||||
>
|
||||
<el-icon>
|
||||
<EditPen />
|
||||
</el-icon>
|
||||
{{ $t('common.edit') }}
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:disabled="!canEdit(item)"
|
||||
v-if="
|
||||
!item.template_id &&
|
||||
hasPermission(
|
||||
[
|
||||
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
PermissionConst.TOOL_EXPORT.getWorkspacePermission,
|
||||
],
|
||||
'OR',
|
||||
)
|
||||
"
|
||||
@click.stop="copyTool(item)"
|
||||
>
|
||||
<AppIcon iconName="app-copy"></AppIcon>
|
||||
{{ $t('common.copy') }}
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
v-if="item.init_field_list?.length > 0"
|
||||
:disabled="!canEdit(item)"
|
||||
@click.stop="configInitParams(item)"
|
||||
>
|
||||
<AppIcon iconName="app-operation" class="mr-4"></AppIcon>
|
||||
{{ $t('common.param.initParam') }}
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
v-if="
|
||||
!item.template_id &&
|
||||
hasPermission(
|
||||
[
|
||||
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
PermissionConst.TOOL_EXPORT.getWorkspacePermission,
|
||||
],
|
||||
'OR',
|
||||
)
|
||||
"
|
||||
:disabled="!canEdit(item)"
|
||||
@click.stop="exportTool(item)"
|
||||
>
|
||||
<AppIcon iconName="app-export"></AppIcon>
|
||||
{{ $t('common.export') }}
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
v-if="
|
||||
hasPermission(
|
||||
[
|
||||
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
PermissionConst.TOOL_DELETE.getWorkspacePermission,
|
||||
],
|
||||
'OR',
|
||||
)
|
||||
"
|
||||
:disabled="!canEdit(item)"
|
||||
divided
|
||||
@click.stop="deleteTool(item)"
|
||||
>
|
||||
<el-icon><Delete /></el-icon>
|
||||
{{ $t('common.delete') }}
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
</div>
|
||||
</template>
|
||||
</CardBox>
|
||||
</el-col>
|
||||
</template>
|
||||
</el-row>
|
||||
<el-empty :description="$t('common.noData')" v-else />
|
||||
</InfiniteScroll>
|
||||
</div>
|
||||
</ContentContainer>
|
||||
<InitParamDrawer ref="InitParamDrawerRef" @refresh="refresh" />
|
||||
|
|
@ -373,15 +386,11 @@ function getList() {
|
|||
})
|
||||
}
|
||||
|
||||
function getFolder() {
|
||||
const params = {}
|
||||
folder.asyncGetFolder(FolderSource.TOOL, params, loading).then((res: any) => {
|
||||
folderList.value = res.data
|
||||
currentFolder.value = res.data?.[0] || {}
|
||||
getList()
|
||||
})
|
||||
function clickFolder(item: any) {
|
||||
currentFolder.value.id = item.id
|
||||
toolList.value = []
|
||||
getList()
|
||||
}
|
||||
|
||||
async function changeState(row: any) {
|
||||
if (row.is_active) {
|
||||
MsgConfirm(
|
||||
|
|
@ -444,24 +453,6 @@ function refresh(data: any) {
|
|||
getList()
|
||||
}
|
||||
|
||||
function refreshFolder() {
|
||||
toolList.value = []
|
||||
getFolder()
|
||||
getList()
|
||||
}
|
||||
|
||||
function folderClickHandel(row: any) {
|
||||
currentFolder.value = row
|
||||
toolList.value = []
|
||||
getList()
|
||||
}
|
||||
|
||||
function clickFolder(item: any) {
|
||||
currentFolder.value.id = item.id
|
||||
toolList.value = []
|
||||
getList()
|
||||
}
|
||||
|
||||
function copyTool(row: any) {
|
||||
ToolDrawertitle.value = t('views.tool.copyTool')
|
||||
const obj = cloneDeep(row)
|
||||
|
|
@ -506,11 +497,6 @@ function configInitParams(item: any) {
|
|||
})
|
||||
}
|
||||
|
||||
const CreateFolderDialogRef = ref()
|
||||
function openCreateFolder() {
|
||||
CreateFolderDialogRef.value.open(FolderSource.TOOL, currentFolder.value.parent_id)
|
||||
}
|
||||
|
||||
const elUploadRef = ref()
|
||||
function importTool(file: any) {
|
||||
const formData = new FormData()
|
||||
|
|
@ -535,8 +521,36 @@ function importTool(file: any) {
|
|||
})
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
// 文件夹相关
|
||||
const CreateFolderDialogRef = ref()
|
||||
function openCreateFolder() {
|
||||
CreateFolderDialogRef.value.open(FolderSource.TOOL, currentFolder.value.id)
|
||||
}
|
||||
function getFolder(bool?: boolean) {
|
||||
const params = {}
|
||||
folder.asyncGetFolder(FolderSource.TOOL, params, loading).then((res: any) => {
|
||||
folderList.value = res.data
|
||||
if (bool) {
|
||||
// 初始化刷新
|
||||
currentFolder.value = res.data?.[0] || {}
|
||||
}
|
||||
getList()
|
||||
})
|
||||
}
|
||||
function refreshFolder() {
|
||||
toolList.value = []
|
||||
getFolder()
|
||||
}
|
||||
|
||||
function folderClickHandel(row: any) {
|
||||
currentFolder.value = row
|
||||
toolList.value = []
|
||||
getList()
|
||||
}
|
||||
|
||||
|
||||
onMounted(() => {
|
||||
getFolder(true)
|
||||
})
|
||||
</script>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue