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

147 lines
3.3 KiB
Vue
Raw Normal View History

2025-05-27 11:06:47 +00:00
<template>
<el-form
ref="FormRef"
:model="form"
:rules="rules"
label-position="top"
require-asterisk-position="right"
v-loading="loading"
>
2025-06-04 10:08:52 +00:00
<el-form-item :label="$t('views.knowledge.form.knowledgeName.label')" prop="name">
2025-05-27 11:06:47 +00:00
<el-input
v-model="form.name"
2025-06-04 10:08:52 +00:00
:placeholder="$t('views.knowledge.form.knowledgeName.placeholder')"
2025-05-27 11:06:47 +00:00
maxlength="64"
show-word-limit
@blur="form.name = form.name.trim()"
/>
</el-form-item>
2025-06-04 10:08:52 +00:00
<el-form-item :label="$t('views.knowledge.form.knowledgeDescription.label')" prop="desc">
2025-05-27 11:06:47 +00:00
<el-input
v-model="form.desc"
type="textarea"
2025-06-04 10:08:52 +00:00
:placeholder="$t('views.knowledge.form.knowledgeDescription.placeholder')"
2025-05-27 11:06:47 +00:00
maxlength="256"
show-word-limit
:autosize="{ minRows: 3 }"
@blur="form.desc = form.desc.trim()"
/>
</el-form-item>
<el-form-item
2025-06-04 10:08:52 +00:00
:label="$t('views.knowledge.form.EmbeddingModel.label')"
prop="embedding_model_id"
2025-05-27 11:06:47 +00:00
>
<ModelSelect
v-model="form.embedding_model_id"
2025-06-04 10:08:52 +00:00
:placeholder="$t('views.knowledge.form.EmbeddingModel.placeholder')"
2025-05-27 11:06:47 +00:00
:options="modelOptions"
:model-type="'EMBEDDING'"
showFooter
></ModelSelect>
</el-form-item>
</el-form>
</template>
<script setup lang="ts">
2025-06-25 03:19:35 +00:00
import { ref, reactive, onMounted, onUnmounted, computed, watch } from 'vue'
import { groupBy } from 'lodash'
import type { knowledgeData } from '@/api/type/knowledge'
import { t } from '@/locales'
2025-06-25 08:59:42 +00:00
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
2025-06-06 01:39:01 +00:00
2025-06-25 03:19:35 +00:00
const props = defineProps<{
2025-06-25 04:32:48 +00:00
data?: {
2025-06-25 03:19:35 +00:00
type: Object
default: () => {}
}
apiType: 'systemShare' | 'workspace' | 'systemManage'
}>()
2025-06-04 10:08:52 +00:00
const form = ref<knowledgeData>({
2025-05-27 11:06:47 +00:00
name: '',
desc: '',
embedding_model_id: '',
2025-05-27 11:06:47 +00:00
})
const rules = reactive({
name: [
{
required: true,
2025-06-04 10:08:52 +00:00
message: t('views.knowledge.form.knowledgeName.requiredMessage'),
trigger: 'blur',
},
2025-05-27 11:06:47 +00:00
],
desc: [
{
required: true,
2025-06-04 10:08:52 +00:00
message: t('views.knowledge.form.knowledgeDescription.requiredMessage'),
trigger: 'blur',
},
2025-05-27 11:06:47 +00:00
],
embedding_model_id: [
2025-05-27 11:06:47 +00:00
{
required: true,
2025-06-04 10:08:52 +00:00
message: t('views.knowledge.form.EmbeddingModel.requiredMessage'),
trigger: 'change',
},
],
2025-05-27 11:06:47 +00:00
})
const FormRef = ref()
const loading = ref(false)
const modelOptions = ref<any>([])
watch(
() => props.data,
2025-06-25 03:19:35 +00:00
(value: any) => {
2025-05-27 11:06:47 +00:00
if (value && JSON.stringify(value) !== '{}') {
form.value.name = value.name
form.value.desc = value.desc
form.value.embedding_model_id = value.embedding_model_id
2025-05-27 11:06:47 +00:00
}
},
{
2025-06-04 10:08:52 +00:00
immediate: true,
},
2025-05-27 11:06:47 +00:00
)
2025-06-06 01:39:01 +00:00
2025-05-27 11:06:47 +00:00
/*
表单校验
*/
function validate() {
if (!FormRef.value) return
return FormRef.value.validate((valid: any) => {
return valid
})
}
2025-06-25 04:32:48 +00:00
function getSelectModel() {
2025-05-27 11:06:47 +00:00
loading.value = true
2025-06-25 08:59:42 +00:00
loadSharedApi({ type: 'model', systemType: props.apiType })
.getSelectModelList({ model_type: 'EMBEDDING' })
2025-05-27 11:06:47 +00:00
.then((res: any) => {
modelOptions.value = groupBy(res?.data, 'provider')
loading.value = false
})
.catch(() => {
loading.value = false
})
}
onMounted(() => {
2025-06-25 04:32:48 +00:00
getSelectModel()
2025-05-27 11:06:47 +00:00
})
onUnmounted(() => {
form.value = {
name: '',
desc: '',
embedding_model_id: '',
2025-05-27 11:06:47 +00:00
}
FormRef.value?.clearValidate()
})
defineExpose({
validate,
2025-06-04 10:08:52 +00:00
form,
2025-05-27 11:06:47 +00:00
})
</script>
<style scoped lang="scss"></style>