UnisKB/ui/src/views/dataset/component/BaseForm.vue

146 lines
3.2 KiB
Vue
Raw Normal View History

2023-10-27 09:49:06 +00:00
<template>
2023-11-22 09:04:47 +00:00
<el-form
ref="FormRef"
:model="form"
:rules="rules"
label-position="top"
require-asterisk-position="right"
v-loading="loading"
2023-11-22 09:04:47 +00:00
>
2025-01-13 03:15:51 +00:00
<el-form-item :label="$t('views.dataset.datasetForm.form.datasetName.label')" prop="name">
2023-10-27 09:49:06 +00:00
<el-input
2023-12-18 06:42:13 +00:00
v-model="form.name"
2025-01-13 03:15:51 +00:00
:placeholder="$t('views.dataset.datasetForm.form.datasetName.placeholder')"
2023-10-27 09:49:06 +00:00
maxlength="64"
show-word-limit
2023-12-19 09:57:11 +00:00
@blur="form.name = form.name.trim()"
2023-10-27 09:49:06 +00:00
/>
</el-form-item>
2025-01-13 03:15:51 +00:00
<el-form-item
:label="$t('views.dataset.datasetForm.form.datasetDescription.label')"
prop="desc"
>
2023-10-27 09:49:06 +00:00
<el-input
2023-12-18 06:42:13 +00:00
v-model="form.desc"
2023-10-27 09:49:06 +00:00
type="textarea"
2025-01-13 03:15:51 +00:00
:placeholder="$t('views.dataset.datasetForm.form.datasetDescription.placeholder')"
2024-03-04 07:26:13 +00:00
maxlength="256"
2023-10-27 09:49:06 +00:00
show-word-limit
:autosize="{ minRows: 3 }"
2023-12-19 09:57:11 +00:00
@blur="form.desc = form.desc.trim()"
2023-10-27 09:49:06 +00:00
/>
</el-form-item>
2025-01-13 03:15:51 +00:00
<el-form-item
2025-01-21 03:51:29 +00:00
:label="$t('views.dataset.datasetForm.form.EmbeddingModel.label')"
2025-01-13 03:15:51 +00:00
prop="embedding_mode_id"
>
<ModelSelect
v-model="form.embedding_mode_id"
2025-01-21 03:51:29 +00:00
:placeholder="$t('views.dataset.datasetForm.form.EmbeddingModel.placeholder')"
2025-01-13 03:15:51 +00:00
:options="modelOptions"
></ModelSelect>
</el-form-item>
2023-10-27 09:49:06 +00:00
</el-form>
</template>
<script setup lang="ts">
2023-11-14 10:12:55 +00:00
import { ref, reactive, onMounted, onUnmounted, computed, watch } from 'vue'
import { groupBy } from 'lodash'
2023-11-10 09:18:00 +00:00
import useStore from '@/stores'
2024-01-08 09:53:50 +00:00
import type { datasetData } from '@/api/type/dataset'
2025-01-13 03:15:51 +00:00
import { t } from '@/locales'
2023-11-10 09:18:00 +00:00
const props = defineProps({
data: {
type: Object,
default: () => {}
}
})
const { model } = useStore()
2024-01-08 09:53:50 +00:00
const form = ref<datasetData>({
2023-10-27 09:49:06 +00:00
name: '',
desc: '',
embedding_mode_id: ''
2023-10-27 09:49:06 +00:00
})
const rules = reactive({
2025-01-13 03:15:51 +00:00
name: [
{
required: true,
message: t('views.dataset.datasetForm.form.datasetName.requiredMessage'),
trigger: 'blur'
}
],
desc: [
{
required: true,
message: t('views.dataset.datasetForm.form.datasetDescription.requiredMessage'),
trigger: 'blur'
}
],
embedding_mode_id: [
{
required: true,
2025-01-21 03:51:29 +00:00
message: t('views.dataset.datasetForm.form.EmbeddingModel.requiredMessage'),
2025-01-13 03:15:51 +00:00
trigger: 'change'
}
]
2023-10-27 09:49:06 +00:00
})
2023-10-27 09:49:06 +00:00
const FormRef = ref()
const loading = ref(false)
const modelOptions = ref<any>([])
2023-11-10 09:18:00 +00:00
watch(
() => props.data,
(value) => {
2023-11-10 11:05:52 +00:00
if (value && JSON.stringify(value) !== '{}') {
2023-11-10 09:18:00 +00:00
form.value.name = value.name
2024-07-18 08:57:21 +00:00
form.value.desc = value.desc
form.value.embedding_mode_id = value.embedding_mode_id
2023-11-10 09:18:00 +00:00
}
},
{
immediate: true
}
)
2023-11-22 03:05:06 +00:00
/*
表单校验
*/
2023-10-27 09:49:06 +00:00
function validate() {
if (!FormRef.value) return
2023-11-02 01:56:14 +00:00
return FormRef.value.validate((valid: any) => {
2023-10-27 09:49:06 +00:00
return valid
})
}
function getModel() {
loading.value = true
model
.asyncGetModel({ model_type: 'EMBEDDING' })
.then((res: any) => {
modelOptions.value = groupBy(res?.data, 'provider')
loading.value = false
})
.catch(() => {
loading.value = false
})
}
2023-11-10 09:18:00 +00:00
onMounted(() => {
getModel()
2023-11-10 09:18:00 +00:00
})
2023-11-14 10:12:55 +00:00
onUnmounted(() => {
form.value = {
name: '',
desc: '',
embedding_mode_id: ''
2023-11-14 10:12:55 +00:00
}
FormRef.value?.clearValidate()
2023-11-14 10:12:55 +00:00
})
2024-01-08 09:53:50 +00:00
2023-10-27 09:49:06 +00:00
defineExpose({
2023-11-02 01:56:14 +00:00
validate,
form
2023-10-27 09:49:06 +00:00
})
</script>
<style scoped lang="scss"></style>