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