Skip to content

Commit f642f40

Browse files
feat: knowledge components
1 parent a23792e commit f642f40

File tree

6 files changed

+67
-80
lines changed

6 files changed

+67
-80
lines changed

ui/src/components/dynamics-form/constructor/items/KnowledgeConstructor.vue

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
<template>
22
<el-form-item
3-
:label="$t('dynamicsForm.Knowledge.label', '可选知识库')"
43
prop="knowledge_list"
5-
:rules="[{ message: '请至少选择一个可选知识库', type: 'array', min: 1 }]"
4+
:rules="[
5+
{
6+
message: $t('dynamicsForm.KnowledgeConstructor.optionalKnowledgePlaceholder'),
7+
type: 'array',
8+
min: 1,
9+
},
10+
]"
611
>
712
<template #label>
813
<div
@@ -16,7 +21,10 @@
1621
>
1722
<CaretRight />
1823
</el-icon>
19-
<span class="lighter">可选知识库</span>
24+
<span class="lighter"
25+
>{{ $t('dynamicsForm.KnowledgeConstructor.optionalKnowledge') }}
26+
<span class="color-danger">*</span>
27+
</span>
2028
<span class="ml-4" v-if="formValue.knowledge_list?.length"
2129
>({{ formValue.knowledge_list.length }})</span
2230
>
@@ -29,14 +37,16 @@
2937
</div>
3038
</template>
3139
<div class="w-full" v-if="collapseData.optional_knowledge">
32-
<el-text type="info" v-if="formValue.knowledge_list?.length === 0">
33-
请选择关联的知识库
34-
</el-text>
35-
<div v-else>
36-
<template v-for="(item, index) in formValue.knowledge_list" :key="item.id">
37-
<div class="flex-between border border-r-6 white-bg mb-4" style="padding: 5px 8px">
40+
<div v-if="formValue.knowledge_list?.length > 0">
41+
<template v-for="(item, index) in formValue.knowledge_list" :key="index">
42+
<div class="flex-between border border-r-6 white-bg mb-8" style="padding: 3px 12px">
3843
<div class="flex align-center" style="width: 80%">
39-
<KnowledgeIcon :type="item.type" class="mr-8" :size="20" />
44+
<KnowledgeIcon
45+
:type="item.type"
46+
class="mr-8"
47+
:size="20"
48+
style="--el-avatar-border-radius: 6px"
49+
/>
4050

4151
<span class="ellipsis cursor" :title="item.name"> {{ item.name }}</span>
4252
</div>
@@ -46,19 +56,20 @@
4656
</div>
4757
</template>
4858
</div>
59+
<el-text type="info" v-else>
60+
{{ $t('dynamicsForm.KnowledgeConstructor.optionalKnowledgePlaceholder') }}
61+
</el-text>
4962
</div>
5063
</el-form-item>
5164
<el-form-item
52-
:label="$t('dynamicsForm.Knowledge.defaultLabel', '默认知识库')"
65+
:label="$t('dynamicsForm.KnowledgeConstructor.defaultKnowledge')"
5366
prop="default_value"
5467
required
55-
:rules="[{ message: '请选择默认知识库', type: 'array', min: 1 }]"
68+
:rules="[{ message: $t('views.chatLog.selectKnowledgePlaceholder'), type: 'array', min: 1 }]"
69+
v-if="formValue.knowledge_list && formValue.knowledge_list.length > 0"
5670
>
5771
<div class="w-full" v-if="formValue.knowledge_list?.length > 0">
58-
<Knowledge
59-
v-model="formValue.default_value"
60-
:form-field="formField"
61-
/>
72+
<Knowledge v-model="formValue.default_value" :form-field="formField" />
6273
</div>
6374
</el-form-item>
6475
<AddKnowledgeDialog
@@ -73,6 +84,7 @@ import { computed, reactive, ref } from 'vue'
7384
import AddKnowledgeDialog from '@/views/application/component/AddKnowledgeDialog.vue'
7485
import Knowledge from '../../items/knowledge/Knowledge.vue'
7586
import type { FormField } from '../../type'
87+
7688
const props = defineProps<{
7789
modelValue: any
7890
}>()

ui/src/components/dynamics-form/constructor/items/ModelConstructor.vue

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020
</el-form-item>
2121

2222
<el-form-item
23-
:label="$t('dynamicsForm.ModelConstructor.optionalModel.label')"
23+
:label="$t('dynamicsForm.ModelConstructor.optionalModel')"
2424
required
2525
prop="provider_list"
2626
:rules="[
2727
{
2828
required: true,
29-
message: $t('dynamicsForm.ModelConstructor.optionalModel.required'),
29+
message: $t('dynamicsForm.ModelConstructor.modelPlaceholder'),
3030
type: 'array',
3131
},
3232
]"
@@ -35,7 +35,7 @@
3535
<ModelSelect
3636
multiple
3737
v-model="selectedIds"
38-
:placeholder="$t('dynamicsForm.ModelConstructor.optionalModel.required')"
38+
:placeholder="$t('dynamicsForm.ModelConstructor.modelPlaceholder')"
3939
:options="groupedModelOptions"
4040
@change="handleProviderListChange"
4141
:model-type="formValue.model_type"
@@ -44,12 +44,12 @@
4444
</div>
4545
</el-form-item>
4646
<el-form-item
47-
:label="$t('dynamicsForm.ModelConstructor.defaultModel.label')"
47+
:label="$t('dynamicsForm.ModelConstructor.defaultModel')"
4848
required
4949
:rules="[
5050
{
5151
required: true,
52-
message: $t('dynamicsForm.ModelConstructor.defaultModel.required'),
52+
message: $t('dynamicsForm.ModelConstructor.modelPlaceholder'),
5353
},
5454
]"
5555
v-if="formValue.provider_list && formValue.provider_list.length > 0"
@@ -58,7 +58,7 @@
5858
<el-select
5959
v-model="formValue.default_value"
6060
value-key="model_id"
61-
:placeholder="$t('dynamicsForm.ModelConstructor.defaultModel.required')"
61+
:placeholder="$t('dynamicsForm.ModelConstructor.modelPlaceholder')"
6262
>
6363
<el-option-group
6464
v-for="(modelList, providerName) in selectedModelsOptions"
@@ -251,13 +251,6 @@ function handleProviderListChange() {
251251
}
252252
}
253253
254-
function removeSelectedModel(modelId: string) {
255-
formValue.value.provider_list = formValue.value.provider_list.filter(
256-
(p: any) => p.model_id !== modelId,
257-
)
258-
handleProviderListChange()
259-
}
260-
261254
const getData = () => {
262255
const providerList = (formValue.value.provider_list || []).map((p: any) => {
263256
const modelInfo = getModelInfo(p.model_id)

ui/src/components/dynamics-form/items/Knowledge/Knowledge.vue

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,23 @@
44
v-model="selectedIds"
55
multiple
66
class="w-full"
7-
:placeholder="$t('dynamicsForm.Knowledge.placeholder', '请选择知识库')"
7+
:placeholder="$t('views.chatLog.selectKnowledgePlaceholder')"
88
>
99
<el-option v-for="item in availableList" :key="item.id" :label="item.name" :value="item.id">
10-
<div class="flex align-center">
11-
<KnowledgeIcon :type="item.type" class="mr-8" :size="20" />
10+
<el-space :size="8">
11+
<KnowledgeIcon :type="item.type" :size="20" style="--el-avatar-border-radius: 6px" />
1212
<span>{{ item.name }}</span>
13-
</div>
13+
</el-space>
1414
</el-option>
15-
<template #tag>
16-
<el-tag
17-
v-for="item in selectedItems"
18-
:key="item.id"
19-
closable
20-
type="info"
21-
@close="removeItem(item.id)"
22-
style="margin-right: 4px"
23-
>
24-
<div class="flex align-center">
25-
<KnowledgeIcon :type="item.type" class="mr-4" :size="16" />
26-
<span>{{ item.name }}</span>
27-
</div>
28-
</el-tag>
15+
<template #label="{ label, value }">
16+
<el-space :size="8">
17+
<KnowledgeIcon
18+
:type="relatedObject(availableList, value, 'id')?.type"
19+
:size="14"
20+
style="--el-avatar-border-radius: 4px"
21+
/>
22+
<span>{{ label }}</span>
23+
</el-space>
2924
</template>
3025
</el-select>
3126
</div>
@@ -34,7 +29,7 @@
3429
<script setup lang="ts">
3530
import { computed } from 'vue'
3631
import type { FormField } from '../../type'
37-
32+
import { relatedObject } from '@/utils/array'
3833
const props = withDefaults(
3934
defineProps<{
4035
modelValue?: string[]
@@ -57,19 +52,11 @@ const availableList = computed(() => {
5752
return (props.formField.attrs?.knowledge_list as any[]) || []
5853
})
5954
60-
const selectedItems = computed(() => {
61-
return availableList.value.filter((k: any) => selectedIds.value.includes(k.id))
62-
})
63-
6455
const selectedIds = computed({
6556
get: () => model_value.value || [],
6657
set: (ids: string[]) => {
6758
model_value.value = ids
6859
},
6960
})
70-
71-
function removeItem(id: string) {
72-
model_value.value = model_value.value.filter((item_id: string) => item_id !== id)
73-
}
7461
</script>
7562
<style lang="scss" scoped></style>

ui/src/locales/lang/en-US/dynamics-form.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -131,13 +131,13 @@ export default {
131131
},
132132
},
133133
ModelConstructor: {
134-
optionalModel: {
135-
label: 'Optional Model',
136-
required: 'Please select optional models',
137-
},
138-
defaultModel: {
139-
label: 'Default Model',
140-
required: 'Please select a default model',
141-
},
134+
optionalModel: 'Optional Model',
135+
defaultModel: 'Default Model',
136+
modelPlaceholder: 'Please enter a model',
137+
},
138+
KnowledgeConstructor: {
139+
optionalModel: 'Optional Model',
140+
defaultModel: 'Default Model',
141+
modelPlaceholder: 'Please enter a model',
142142
},
143143
}

ui/src/locales/lang/zh-CN/dynamics-form.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,13 @@ export default {
130130
},
131131
},
132132
ModelConstructor: {
133-
optionalModel: {
134-
label: '可选模型',
135-
required: '请选择可选模型',
136-
},
137-
defaultModel: {
138-
label: '默认模型',
139-
required: '请选择默认模型',
140-
},
133+
optionalModel: '可选模型',
134+
defaultModel: '默认模型',
135+
modelPlaceholder: '请选择模型',
136+
},
137+
KnowledgeConstructor: {
138+
optionalKnowledge: '可选知识库',
139+
optionalKnowledgePlaceholder: '请选择可选知识库',
140+
defaultKnowledge: '默认知识库',
141141
},
142142
}

ui/src/locales/lang/zh-Hant/dynamics-form.ts

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -131,13 +131,8 @@ export default {
131131
},
132132
},
133133
ModelConstructor: {
134-
optionalModel: {
135-
label: '可選模型',
136-
required: '請選擇可選模型',
137-
},
138-
defaultModel: {
139-
label: '默認模型',
140-
required: '請選擇默認模型',
141-
},
134+
optionalModel: '選擇模型',
135+
defaultModel: '預設模型',
136+
modelPlaceholder: '請輸入模型名稱',
142137
},
143138
}

0 commit comments

Comments
 (0)