Files
rag-local/ui-src/src/views/DatasetList.vue
T
2026-08-05 10:28:44 +08:00

122 lines
3.8 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="ds-page">
<div class="ds-head">
<el-button type="primary" @click="openCreate">新建数据集</el-button>
</div>
<el-table :data="datasets" v-loading="loading" empty-text="暂无数据集">
<el-table-column prop="name" label="名称" min-width="160" show-overflow-tooltip />
<el-table-column prop="description" label="描述" min-width="200" show-overflow-tooltip />
<el-table-column label="向量模型" width="200">
<template #default="{ row }">
<span v-if="row.embedding_cfg_id">{{ embeddingName(row.embedding_cfg_id) }}</span>
<el-tag v-else size="small" type="info">未绑定仅全文检索</el-tag>
</template>
</el-table-column>
<el-table-column prop="created_at" label="创建时间" width="170" />
<el-table-column label="操作" width="150" fixed="right">
<template #default="{ row }">
<el-button link type="primary" @click="$router.push('/datasets/' + row.id)">详情</el-button>
<el-button link type="danger" @click="remove(row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-dialog v-model="dialogVisible" :title="editing ? '编辑数据集' : '新建数据集'" width="480px">
<el-form :model="form" label-width="90px">
<el-form-item label="名称" required>
<el-input v-model="form.name" placeholder="如:产品手册" />
</el-form-item>
<el-form-item label="描述">
<el-input v-model="form.description" type="textarea" :rows="2" />
</el-form-item>
<el-form-item label="向量模型">
<el-select v-model="form.embedding_cfg_id" clearable placeholder="不绑定则仅全文检索" style="width: 100%">
<el-option v-for="m in embedders" :key="m.id" :label="m.name" :value="m.id" />
</el-select>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" :loading="saving" @click="save">保存</el-button>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { onMounted, ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { listDatasets, saveDataset, deleteDataset } from '../api/dataset.js'
import { listModelConfigs } from '../api/model_config.js'
const datasets = ref([])
const embedders = ref([])
const loading = ref(false)
const saving = ref(false)
const dialogVisible = ref(false)
const editing = ref(false)
const form = ref({ id: 0, name: '', description: '', embedding_cfg_id: 0 })
onMounted(async () => {
await load()
try {
embedders.value = await listModelConfigs('embedding')
} catch { /* 忽略 */ }
})
async function load() {
loading.value = true
try {
datasets.value = await listDatasets()
} finally {
loading.value = false
}
}
function embeddingName(id) {
const m = embedders.value.find(x => x.id === id)
return m ? m.name : '(已删除的配置)'
}
function openCreate() {
editing.value = false
form.value = { id: 0, name: '', description: '', embedding_cfg_id: 0 }
dialogVisible.value = true
}
async function save() {
if (!form.value.name.trim()) {
ElMessage.warning('请输入数据集名称')
return
}
saving.value = true
try {
await saveDataset(form.value)
ElMessage.success('保存成功')
dialogVisible.value = false
await load()
} finally {
saving.value = false
}
}
async function remove(row) {
try {
await ElMessageBox.confirm(`删除数据集「${row.name}」?`, '删除确认', { type: 'warning' })
} catch {
return
}
try {
await deleteDataset(row.id)
ElMessage.success('已删除')
await load()
} catch { /* request.js 已提示 */ }
}
</script>
<style scoped>
.ds-head {
margin-bottom: 12px;
}
</style>