UnisKB/ui/src/views/document/index.vue

238 lines
6.9 KiB
Vue
Raw Normal View History

2023-11-07 11:04:59 +00:00
<template>
<LayoutContainer header="文档">
<div class="main-calc-height">
2023-11-10 03:36:04 +00:00
<div class="p-24">
2023-11-07 11:04:59 +00:00
<div class="flex-between">
2023-11-10 09:18:00 +00:00
<el-button
type="primary"
@click="router.push({ path: '/dataset/upload', query: { id: datasetId } })"
2023-11-09 10:52:06 +00:00
>上传文档</el-button
>
2023-11-07 11:04:59 +00:00
<el-input
v-model="filterText"
placeholder="按 文档名称 搜索"
prefix-icon="Search"
class="w-240"
2023-11-10 09:18:00 +00:00
@change="getList"
2023-11-07 11:04:59 +00:00
/>
</div>
2023-11-09 10:52:06 +00:00
<app-table
class="mt-16"
:data="documentData"
:pagination-config="paginationConfig"
quick-create
@sizeChange="handleSizeChange"
@changePage="handleCurrentChange"
@cell-mouse-enter="cellMouseEnter"
@cell-mouse-leave="cellMouseLeave"
2023-11-10 09:18:00 +00:00
@creatQuick="creatQuickHandle"
2023-11-10 11:05:52 +00:00
@row-click="rowClickHandle"
2023-11-10 03:36:04 +00:00
v-loading="loading"
2023-11-21 03:43:47 +00:00
:max-height="tableHeight"
2023-11-09 10:52:06 +00:00
>
<el-table-column prop="name" label="文件名称" min-width="280">
<template #default="{ row }">
<ReadWrite
@change="editName"
:data="row.name"
:showEditIcon="row.id === currentMouseId"
/>
</template>
</el-table-column>
2023-11-07 11:04:59 +00:00
<el-table-column prop="char_length" label="字符数" align="right">
<template #default="{ row }">
{{ toThousands(row.char_length) }}
</template>
</el-table-column>
<el-table-column prop="paragraph_count" label="分段" align="right" />
2023-11-09 10:52:06 +00:00
<el-table-column prop="status" label="文件状态" min-width="90">
<template #default="{ row }">
<el-text v-if="row.status === '1'">
<el-icon class="success"><SuccessFilled /></el-icon>
</el-text>
<el-text v-else-if="row.status === '2'">
<el-icon class="danger"><CircleCloseFilled /></el-icon>
</el-text>
<el-text v-else-if="row.status === '0'">
<el-icon class="is-loading primary"><Loading /></el-icon>
</el-text>
</template>
2023-11-07 11:04:59 +00:00
</el-table-column>
<el-table-column prop="name" label="启动状态">
<template #default="{ row }">
2023-11-10 11:05:52 +00:00
<div @click.stop>
<el-switch v-model="row.is_active" @change="changeState($event, row)" />
</div>
2023-11-07 11:04:59 +00:00
</template>
</el-table-column>
<el-table-column prop="create_time" label="创建时间" width="170">
<template #default="{ row }">
{{ datetimeFormat(row.create_time) }}
</template>
</el-table-column>
<el-table-column prop="update_time" label="更新时间" width="170">
<template #default="{ row }">
{{ datetimeFormat(row.update_time) }}
</template>
</el-table-column>
<el-table-column prop="name" label="操作" align="center">
<template #default="{ row }">
2023-11-10 09:18:00 +00:00
<span v-if="row.status === 2">
2023-11-07 11:04:59 +00:00
<el-tooltip effect="dark" content="刷新" placement="top">
<el-button type="primary" text>
<el-icon><RefreshRight /></el-icon>
2023-11-09 10:52:06 +00:00
</el-button>
</el-tooltip>
</span>
2023-11-07 11:04:59 +00:00
<span class="ml-4">
<el-tooltip effect="dark" content="删除" placement="top">
2023-11-10 11:05:52 +00:00
<el-button type="primary" text @click.stop="deleteDocument(row)">
2023-11-07 11:04:59 +00:00
<el-icon><Delete /></el-icon>
</el-button>
</el-tooltip>
</span>
</template>
</el-table-column>
2023-11-09 10:52:06 +00:00
</app-table>
2023-11-07 11:04:59 +00:00
</div>
</div>
</LayoutContainer>
</template>
<script setup lang="ts">
2023-11-09 10:52:06 +00:00
import { ref, onMounted, reactive } from 'vue'
2023-11-07 11:04:59 +00:00
import { useRouter, useRoute } from 'vue-router'
import datasetApi from '@/api/dataset'
import { toThousands } from '@/utils/utils'
import { datetimeFormat } from '@/utils/time'
2023-11-10 03:36:04 +00:00
import { MsgSuccess, MsgConfirm } from '@/utils/message'
2023-11-07 11:04:59 +00:00
const router = useRouter()
const route = useRoute()
2023-11-10 09:18:00 +00:00
const {
params: { datasetId }
} = route as any
2023-11-09 10:52:06 +00:00
2023-11-07 11:04:59 +00:00
const loading = ref(false)
const filterText = ref('')
const documentData = ref<any[]>([])
2023-11-09 10:52:06 +00:00
const currentMouseId = ref(null)
2023-11-21 03:43:47 +00:00
const tableHeight = ref(0)
2023-11-09 10:52:06 +00:00
const paginationConfig = reactive({
currentPage: 1,
pageSize: 10,
total: 0
})
2023-11-10 11:05:52 +00:00
function rowClickHandle(row: any) {
router.push({ path: `/dataset/${datasetId}/${row.id}` })
}
2023-11-10 09:18:00 +00:00
// 快速创建空白文档
function creatQuickHandle(val: string) {
loading.value = true
const obj = { name: val }
datasetApi
.postDocument(datasetId, obj)
.then((res) => {
getList()
MsgSuccess('创建成功')
})
.catch(() => {
loading.value = false
})
}
2023-11-10 03:36:04 +00:00
function deleteDocument(row: any) {
MsgConfirm(
`是否删除文档:${row.name} ?`,
`此文档下的 ${row.paragraph_count} 个分段都会被删除,请谨慎操作。`,
{
confirmButtonText: '删除',
confirmButtonClass: 'danger'
}
)
.then(() => {
loading.value = true
datasetApi
.delDocument(datasetId, row.id)
.then(() => {
MsgSuccess('删除成功')
getList()
})
.catch(() => {
loading.value = false
})
})
.catch(() => {})
}
2023-11-10 09:18:00 +00:00
// 更新名称或状态
2023-11-10 03:36:04 +00:00
function updateData(documentId: string, data: any) {
loading.value = true
datasetApi
.putDocument(datasetId, documentId, data)
.then((res) => {
const index = documentData.value.findIndex((v) => v.id === documentId)
documentData.value.splice(index, 1, res.data)
MsgSuccess('修改成功')
loading.value = false
})
.catch(() => {
loading.value = false
})
}
function changeState(bool: Boolean, row: any) {
const obj = {
is_active: bool
}
currentMouseId.value && updateData(row.id, obj)
}
function editName(val: string) {
const obj = {
name: val
}
currentMouseId.value && updateData(currentMouseId.value, obj)
}
2023-11-09 10:52:06 +00:00
function cellMouseEnter(row: any) {
currentMouseId.value = row.id
}
function cellMouseLeave() {
currentMouseId.value = null
}
function handleSizeChange(val: number) {
console.log(`${val} items per page`)
}
function handleCurrentChange(val: number) {
console.log(`current page: ${val}`)
}
2023-11-07 11:04:59 +00:00
function getList() {
loading.value = true
datasetApi
.getDocument(datasetId as string, filterText.value)
.then((res) => {
documentData.value = res.data
2023-11-09 10:52:06 +00:00
paginationConfig.total = res.data.length
2023-11-07 11:04:59 +00:00
loading.value = false
})
.catch(() => {
loading.value = false
})
}
onMounted(() => {
2023-11-21 03:43:47 +00:00
tableHeight.value = window.innerHeight - 300
window.onresize = () => {
return (() => {
tableHeight.value = window.innerHeight - 300
})()
}
2023-11-07 11:04:59 +00:00
getList()
})
</script>
<style lang="scss" scoped></style>