feat: i18n

This commit is contained in:
wangdan-fit2cloud 2025-01-13 18:54:32 +08:00
parent 8e1a0e678c
commit 5cddada3be
37 changed files with 376 additions and 184 deletions

View File

@ -1,38 +1,39 @@
import { t } from '@/locales'
const input_type_list = [ const input_type_list = [
{ {
label: '文本框', label: t('components.dynamicsForm.input_type_list.TextInput'),
value: 'TextInput' value: 'TextInput'
}, },
{ {
label: '滑块', label: t('components.dynamicsForm.input_type_list.Slider'),
value: 'Slider' value: 'Slider'
}, },
{ {
label: '开关', label: t('components.dynamicsForm.input_type_list.SwitchInput'),
value: 'SwitchInput' value: 'SwitchInput'
}, },
{ {
label: '单选框', label: t('components.dynamicsForm.input_type_list.SingleSelect'),
value: 'SingleSelect' value: 'SingleSelect'
}, },
{ {
label: '多选框', label: t('components.dynamicsForm.input_type_list.MultiSelect'),
value: 'MultiSelect' value: 'MultiSelect'
}, },
{ {
label: '日期', label: t('components.dynamicsForm.input_type_list.DatePicker'),
value: 'DatePicker' value: 'DatePicker'
}, },
{ {
label: 'JSON文本框', label: t('components.dynamicsForm.input_type_list.JsonInput'),
value: 'JsonInput' value: 'JsonInput'
}, },
{ {
label: '选项卡', label: t('components.dynamicsForm.input_type_list.RadioCard'),
value: 'RadioCard' value: 'RadioCard'
}, },
{ {
label: '单行选项卡', label: t('components.dynamicsForm.input_type_list.RadioRow'),
value: 'RadioRow' value: 'RadioRow'
} }
] ]

View File

@ -7,35 +7,35 @@
:model="form_data" :model="form_data"
v-bind="$attrs" v-bind="$attrs"
> >
<el-form-item label="参数" :required="true" prop="field" :rules="rules.field"> <el-form-item :label="$t('components.dynamicsForm.paramForm.field.label')" :required="true" prop="field" :rules="rules.field">
<el-input <el-input
v-model="form_data.field" v-model="form_data.field"
:maxlength="64" :maxlength="64"
placeholder="请输入参数" :placeholder="$t('components.dynamicsForm.paramForm.field.placeholder')"
show-word-limit show-word-limit
/> />
</el-form-item> </el-form-item>
<el-form-item label="显示名称" :required="true" prop="label" :rules="rules.label"> <el-form-item :label="$t('components.dynamicsForm.paramForm.name.label')" :required="true" prop="label" :rules="rules.label">
<el-input <el-input
v-model="form_data.label" v-model="form_data.label"
:maxlength="64" :maxlength="64"
show-word-limit show-word-limit
placeholder="请输入显示名称" :placeholder="$t('components.dynamicsForm.paramForm.name.placeholder')"
/> />
</el-form-item> </el-form-item>
<el-form-item label="参数提示说明"> <el-form-item :label="$t('components.dynamicsForm.paramForm.tooltip.label')">
<el-input <el-input
v-model="form_data.tooltip" v-model="form_data.tooltip"
:maxlength="128" :maxlength="128"
show-word-limit show-word-limit
placeholder="请输入参数提示说明" :placeholder="$t('components.dynamicsForm.paramForm.tooltip.placeholder')"
/> />
</el-form-item> </el-form-item>
<el-form-item label="是否必填" :required="true" prop="required" :rules="rules.required"> <el-form-item :label="$t('components.dynamicsForm.paramForm.required.label')" :required="true" prop="required" :rules="rules.required">
<el-switch v-model="form_data.required" :active-value="true" :inactive-value="false" /> <el-switch v-model="form_data.required" :active-value="true" :inactive-value="false" />
</el-form-item> </el-form-item>
<el-form-item label="组件类型" :required="true" prop="input_type" :rules="rules.input_type"> <el-form-item :label="$t('components.dynamicsForm.paramForm.input_type.label')" :required="true" prop="input_type" :rules="rules.input_type">
<el-select v-model="form_data.input_type" placeholder="请选择组件类型"> <el-select v-model="form_data.input_type" :placeholder="$t('components.dynamicsForm.paramForm.input_type.placeholder')">
<el-option <el-option
v-for="input_type in input_type_list" v-for="input_type in input_type_list"
:key="input_type.value" :key="input_type.value"
@ -57,6 +57,7 @@ import { onMounted, ref, nextTick } from 'vue'
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import _ from 'lodash' import _ from 'lodash'
import { input_type_list as input_type_list_data } from '@/components/dynamics-form/constructor/data' import { input_type_list as input_type_list_data } from '@/components/dynamics-form/constructor/data'
import { t } from '@/locales'
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
modelValue?: any modelValue?: any
@ -80,10 +81,10 @@ const form_data = ref<any>({
input_type: '' input_type: ''
}) })
const rules = { const rules = {
label: [{ required: true, message: '显示名称 为必填属性' }], label: [{ required: true, message: t('components.dynamicsForm.paramForm.name.requiredMessage') }],
field: [{ required: true, message: '参数 为必填属性' }], field: [{ required: true, message: t('components.dynamicsForm.paramForm.field.requiredMessage') }],
required: [{ required: true, message: '是否必填 为必填属性' }], required: [{ required: true, message: t('components.dynamicsForm.paramForm.required.requiredMessage') }],
input_type: [{ required: true, message: '组建类型 为必填属性' }] input_type: [{ required: true, message: t('components.dynamicsForm.paramForm.input_type.requiredMessage') }]
} }
const getData = () => { const getData = () => {
let label: string | any = form_data.value.label let label: string | any = form_data.value.label

View File

@ -29,7 +29,7 @@
class="defaultValueItem" class="defaultValueItem"
:required="formValue.required" :required="formValue.required"
prop="default_value" prop="default_value"
label="默认值" :label="$t('components.dynamicsForm.default.label')"
:rules="formValue.required ? [{ required: true, message: '默认值 为必填属性' }] : []" :rules="formValue.required ? [{ required: true, message: '默认值 为必填属性' }] : []"
> >
<div class="defaultValueCheckbox"> <div class="defaultValueCheckbox">

View File

@ -1,7 +1,7 @@
<template> <template>
<el-form-item <el-form-item
class="defaultValueItem" class="defaultValueItem"
label="默认值" :label="$t('components.dynamicsForm.default.label')"
:required="formValue.required" :required="formValue.required"
prop="default_value" prop="default_value"
:rules="[default_value_rule]" :rules="[default_value_rule]"

View File

@ -47,7 +47,7 @@
</el-form-item> </el-form-item>
<el-form-item <el-form-item
class="defaultValueItem" class="defaultValueItem"
label="默认值" :label="$t('components.dynamicsForm.default.label')"
:required="formValue.required" :required="formValue.required"
prop="default_value" prop="default_value"
:rules="formValue.required ? [{ required: true, message: '默认值 为必填属性' }] : []" :rules="formValue.required ? [{ required: true, message: '默认值 为必填属性' }] : []"

View File

@ -48,7 +48,7 @@
</el-form-item> </el-form-item>
<el-form-item <el-form-item
class="defaultValueItem" class="defaultValueItem"
label="默认值" :label="$t('components.dynamicsForm.default.label')"
:required="formValue.required" :required="formValue.required"
prop="default_value" prop="default_value"
:rules="formValue.required ? [{ required: true, message: '默认值 为必填属性' }] : []" :rules="formValue.required ? [{ required: true, message: '默认值 为必填属性' }] : []"

View File

@ -48,7 +48,7 @@
</el-form-item> </el-form-item>
<el-form-item <el-form-item
class="defaultValueItem" class="defaultValueItem"
label="默认值" :label="$t('components.dynamicsForm.default.label')"
:required="formValue.required" :required="formValue.required"
prop="default_value" prop="default_value"
:rules="formValue.required ? [{ required: true, message: '默认值 为必填属性' }] : []" :rules="formValue.required ? [{ required: true, message: '默认值 为必填属性' }] : []"

View File

@ -50,7 +50,7 @@
class="defaultValueItem" class="defaultValueItem"
:required="formValue.required" :required="formValue.required"
prop="default_value" prop="default_value"
label="默认值" :label="$t('components.dynamicsForm.default.label')"
:rules="formValue.required ? [{ required: true, message: '默认值 为必填属性' }] : []" :rules="formValue.required ? [{ required: true, message: '默认值 为必填属性' }] : []"
> >
<div class="defaultValueCheckbox"> <div class="defaultValueCheckbox">

View File

@ -51,7 +51,7 @@
</el-col> </el-col>
<el-form-item <el-form-item
label="默认值" :label="$t('components.dynamicsForm.default.label')"
:required="formValue.required" :required="formValue.required"
prop="default_value" prop="default_value"
:rules="formValue.required ? [{ required: true, message: '默认值 为必填属性' }] : []" :rules="formValue.required ? [{ required: true, message: '默认值 为必填属性' }] : []"

View File

@ -1,6 +1,6 @@
<template> <template>
<el-form-item <el-form-item
label="默认值" :label="$t('components.dynamicsForm.default.label')"
:required="formValue.required" :required="formValue.required"
prop="default_value" prop="default_value"
:rules="formValue.required ? [{ required: true, message: '默认值 为必填属性' }] : []" :rules="formValue.required ? [{ required: true, message: '默认值 为必填属性' }] : []"

View File

@ -52,7 +52,7 @@
class="defaultValueItem" class="defaultValueItem"
:required="formValue.required" :required="formValue.required"
prop="default_value" prop="default_value"
label="默认值" :label="$t('components.dynamicsForm.default.label')"
:rules=" :rules="
formValue.required ? [{ required: true, message: '默认值 为必填属性' }, ...rules] : rules formValue.required ? [{ required: true, message: '默认值 为必填属性' }, ...rules] : rules
" "

View File

@ -1,11 +1,10 @@
import { t } from '@/locales'
export enum PermissionType { export enum PermissionType {
PRIVATE = '私有', PRIVATE = 'common.private',
PUBLIC = '公用' PUBLIC = 'common.public'
} }
export enum PermissionDesc { export enum PermissionDesc {
PRIVATE = '仅当前用户使用', PRIVATE = 'views.template.templateForm.form.permissionType.privateDesc',
PUBLIC = '所有用户都可使用,不能编辑' PUBLIC = 'views.template.templateForm.form.permissionType.publicDesc',
} }
export enum modelType { export enum modelType {

View File

@ -36,6 +36,8 @@ export default {
creator: 'Creator', creator: 'Creator',
debug: 'Debug', debug: 'Debug',
modify: 'Modify', modify: 'Modify',
required: 'Required',
noData: 'No data',
status: { status: {
label: 'Status', label: 'Status',
enableSuccess: 'Enable Successful', enableSuccess: 'Enable Successful',

View File

@ -25,8 +25,6 @@ export default {
functionForm: { functionForm: {
title: { title: {
copy: 'Copy', copy: 'Copy',
editParam: 'Edit Parameters',
addParam: 'Add Parameter',
baseInfo: 'Basic Information' baseInfo: 'Basic Information'
}, },
form: { form: {
@ -68,7 +66,6 @@ export default {
outputParam: 'Output Parameters', outputParam: 'Output Parameters',
paramInfo1: 'Displayed when using the function', paramInfo1: 'Displayed when using the function',
paramInfo2: 'Not displayed when using the function', paramInfo2: 'Not displayed when using the function',
required: 'Required',
code: 'Code', code: 'Code',
result: 'Result' result: 'Result'
}, },

View File

@ -21,6 +21,10 @@ export default {
TTI: 'Image Generation' TTI: 'Image Generation'
}, },
templateForm: { templateForm: {
title: {
editParam: 'Edit Parameters',
addParam: 'Add Parameter',
},
form: { form: {
provider: { provider: {
label: 'Provider', label: 'Provider',

View File

@ -30,12 +30,14 @@ export default {
export: '导出', export: '导出',
exportSuccess: '导出成功', exportSuccess: '导出成功',
unavailable: '(不可用)', unavailable: '(不可用)',
public: '公', public: '公',
private: '私有', private: '私有',
paramSetting: '参数设置', paramSetting: '参数设置',
creator: '创建者', creator: '创建者',
debug: '调试', debug: '调试',
modify: '修改', modify: '修改',
required: '必填',
noData: '暂无数据',
status: { status: {
label: '状态', label: '状态',
enableSuccess: '启用成功', enableSuccess: '启用成功',

View File

@ -0,0 +1,43 @@
export default {
input_type_list: {
TextInput: '文本框',
Slider: '滑块',
SwitchInput: '开关',
SingleSelect: '单选框',
MultiSelect: '多选框',
DatePicker: '日期',
JsonInput: 'JSON文本框',
RadioCard: '选项卡',
RadioRow: '单行选项卡'
},
default: {
label: '默认值',
placeholder: '请输入默认值',
requiredMessage: '请输入默认值'
},
paramForm: {
field: {
label: '参数',
placeholder: '请输入参数',
requiredMessage: '参数 为必填属性'
},
name: {
label: '显示名称',
placeholder: '请输入显示名称',
requiredMessage: '显示名称 为必填属性'
},
tooltip: {
label: '参数提示说明',
placeholder: '请输入参数提示说明'
},
required: {
label: '是否必填',
requiredMessage: '是否必填 为必填属性'
},
input_type: {
label: '组件类型',
placeholder: '请选择组件类型',
requiredMessage: '组建类型 为必填属性'
}
}
}

View File

@ -1 +1,4 @@
export default {} import dynamicsForm from './dynamics-form'
export default {
dynamicsForm
}

View File

@ -23,8 +23,6 @@ export default {
functionForm: { functionForm: {
title: { title: {
copy: '副本', copy: '副本',
editParam: '编辑参数',
addParam: '添加参数',
baseInfo: '基础信息' baseInfo: '基础信息'
}, },
form: { form: {
@ -66,7 +64,6 @@ export default {
outputParam: '输出参数', outputParam: '输出参数',
paramInfo1: '使用函数时显示', paramInfo1: '使用函数时显示',
paramInfo2: '使用函数时不显示', paramInfo2: '使用函数时不显示',
required: '必填',
code: '代码', code: '代码',
result: '结果' result: '结果'
}, },

View File

@ -6,12 +6,20 @@ export default {
searchBar: { searchBar: {
placeholder: '按名称搜索' placeholder: '按名称搜索'
}, },
delete: {}, delete: {
setting: {}, confirmTitle: '删除模型',
confirmMessage: '是否删除模型:'
},
tip: { tip: {
createSuccessMessage: '创建模型成功', createSuccessMessage: '创建模型成功',
createErrorMessage: '基础信息有填写错误', createErrorMessage: '基础信息有填写错误',
errorMessage:'变量已存在: ' errorMessage: '变量已存在: ',
emptyMessage1: '请先选择基础信息的模型类型和基础模型',
emptyMessage2: '所选模型不支持参数设置',
updateSuccessMessage: '修改模型成功',
saveSuccessMessage: '模型参数保存成功',
downloadError: '下载失败',
noModel: '模型在Ollama不存在'
}, },
model: { model: {
allModel: '全部模型', allModel: '全部模型',
@ -28,7 +36,11 @@ export default {
templateForm: { templateForm: {
title: { title: {
baseInfo: '基础信息', baseInfo: '基础信息',
advancedInfo: '高级设置' advancedInfo: '高级设置',
modelParams: '模型参数',
editParam: '编辑参数',
addParam: '添加参数',
paramSetting: '模型参数设置'
}, },
form: { form: {
templateName: { templateName: {
@ -39,9 +51,8 @@ export default {
}, },
permissionType: { permissionType: {
label: '权限', label: '权限',
placeholder: '请给基础模型设置一个名称', privateDesc: '仅当前用户使用',
tooltip: 'MaxKB 中自定义的模型名称', publicDesc: '所有用户都可使用,不能编辑'
requiredMessage: '权限不能为空'
}, },
model_type: { model_type: {
label: '模型类型', label: '模型类型',
@ -53,9 +64,18 @@ export default {
tooltip5: '重排模型:在高级编排应用中使用多路召回时,对候选分段进行重新排序的模型。', tooltip5: '重排模型:在高级编排应用中使用多路召回时,对候选分段进行重新排序的模型。',
tooltip6: '图片理解:在高级编排应用中用于图片理解的视觉模型。', tooltip6: '图片理解:在高级编排应用中用于图片理解的视觉模型。',
tooltip7: '图片生成:在高级编排应用中用于图片生成的视觉模型。', tooltip7: '图片生成:在高级编排应用中用于图片生成的视觉模型。',
requiredMessage: '模型类型不能为空', requiredMessage: '模型类型不能为空'
warningMessage: '模型类型不能为空' },
base_model: {
label: '基础模型',
tooltip: '列表中未列出的模型,直接输入模型名称,回车即可添加',
placeholder: '自定义输入基础模型后回车即可',
requiredMessage: '基础模型不能为空'
} }
} }
},
download: {
downloading: '正在下载中',
cancelDownload: '取消下载'
} }
} }

View File

@ -30,12 +30,14 @@ export default {
export: '匯出', export: '匯出',
exportSuccess: '匯出成功', exportSuccess: '匯出成功',
unavailable: '(不可用)', unavailable: '(不可用)',
public: '公', public: '公',
private: '私有', private: '私有',
paramSetting: '參數設定', paramSetting: '參數設定',
creator: '建立者', creator: '建立者',
debug: '調試', debug: '調試',
modify: '修改', modify: '修改',
required: '必填',
noData: '暂无数据',
status: { status: {
label: '狀態', label: '狀態',
enableSuccess: '啟用成功', enableSuccess: '啟用成功',

View File

@ -23,8 +23,6 @@ export default {
functionForm: { functionForm: {
title: { title: {
copy: '副本', copy: '副本',
editParam: '編輯參數',
addParam: '添加參數',
baseInfo: '基礎信息' baseInfo: '基礎信息'
}, },
form: { form: {
@ -66,7 +64,6 @@ export default {
outputParam: '輸出參數', outputParam: '輸出參數',
paramInfo1: '使用函數時顯示', paramInfo1: '使用函數時顯示',
paramInfo2: '使用函數時不顯示', paramInfo2: '使用函數時不顯示',
required: '必填',
code: '代碼', code: '代碼',
result: '結果' result: '結果'
}, },

View File

@ -21,11 +21,12 @@ export default {
TTI: '圖片生成' TTI: '圖片生成'
}, },
templateForm: { templateForm: {
title: {
editParam: '編輯參數',
addParam: '添加參數',
},
form: { form: {
provider: {
label: '供應商',
placeholder: '選擇供應商'
}
} }
} }
} }

View File

@ -2,8 +2,8 @@
<el-dialog <el-dialog
:title=" :title="
isEdit isEdit
? $t('views.functionLib.functionForm.title.editParam') ? $t('views.template.templateForm.title.editParam')
: $t('views.functionLib.functionForm.title.addParam') : $t('views.template.templateForm.title.addParam')
" "
v-model="dialogVisible" v-model="dialogVisible"
:close-on-click-modal="false" :close-on-click-modal="false"

View File

@ -53,9 +53,9 @@
:class="form.permission_type === key ? 'active' : ''" :class="form.permission_type === key ? 'active' : ''"
> >
<el-radio :value="key" size="large"> <el-radio :value="key" size="large">
<p class="mb-4">{{ value }}</p> <p class="mb-4">{{ $t(value) }}</p>
<el-text type="info"> <el-text type="info">
{{ PermissionDesc[key] }} {{ $t(PermissionDesc[key]) }}
</el-text> </el-text>
</el-radio> </el-radio>
</el-card> </el-card>
@ -87,7 +87,7 @@
<el-tag type="info" class="info-tag">{{ row.type }}</el-tag> <el-tag type="info" class="info-tag">{{ row.type }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('views.functionLib.functionForm.form.param.required')"> <el-table-column :label="$t('common.required')">
<template #default="{ row }"> <template #default="{ row }">
<div @click.stop> <div @click.stop>
<el-switch size="small" v-model="row.is_required" /> <el-switch size="small" v-model="row.is_required" />
@ -141,7 +141,10 @@
</div> </div>
</div> </div>
<h4 class="title-decoration-1 mb-16 mt-16"> <h4 class="title-decoration-1 mb-16 mt-16">
{{ $t('views.functionLib.functionForm.form.param.outputParam') }} <el-text type="info" class="color-secondary"> {{ $t('views.functionLib.functionForm.form.param.paramInfo1') }} </el-text> {{ $t('views.functionLib.functionForm.form.param.outputParam') }}
<el-text type="info" class="color-secondary">
{{ $t('views.functionLib.functionForm.form.param.paramInfo1') }}
</el-text>
</h4> </h4>
<div class="flex-between border-r-4 p-8-12 mb-8 layout-bg lighter"> <div class="flex-between border-r-4 p-8-12 mb-8 layout-bg lighter">
<span>{{ $t('views.functionLib.functionForm.form.param.result') }} {result}</span> <span>{{ $t('views.functionLib.functionForm.form.param.result') }} {result}</span>
@ -159,7 +162,12 @@
</template> </template>
<!-- Codemirror 弹出层 --> <!-- Codemirror 弹出层 -->
<el-dialog v-model="dialogVisible" :title="'Python '+ $t('views.functionLib.functionForm.form.param.code')" append-to-body fullscreen> <el-dialog
v-model="dialogVisible"
:title="'Python ' + $t('views.functionLib.functionForm.form.param.code')"
append-to-body
fullscreen
>
<CodemirrorEditor <CodemirrorEditor
v-model="cloneContent" v-model="cloneContent"
style=" style="
@ -233,8 +241,20 @@ watch(visible, (bool) => {
}) })
const rules = reactive({ const rules = reactive({
name: [{ required: true, message: t('views.functionLib.functionForm.form.functionName.requiredMessage'), trigger: 'blur' }], name: [
permission_type: [{ required: true, message: t('views.functionLib.functionForm.form.permission_type.requiredMessage'), trigger: 'change' }] {
required: true,
message: t('views.functionLib.functionForm.form.functionName.requiredMessage'),
trigger: 'blur'
}
],
permission_type: [
{
required: true,
message: t('views.functionLib.functionForm.form.permission_type.requiredMessage'),
trigger: 'change'
}
]
}) })
function openCodemirrorDialog() { function openCodemirrorDialog() {

View File

@ -7,7 +7,13 @@
:before-close="cancelClick" :before-close="cancelClick"
> >
<template #header> <template #header>
<h4>{{ isEdit ? '编辑参数' : '添加参数' }}</h4> <h4>
{{
isEdit
? $t('views.template.templateForm.title.editParam')
: $t('views.template.templateForm.title.addParam')
}}
</h4>
</template> </template>
<template #default> <template #default>
<DynamicsFormConstructor <DynamicsFormConstructor
@ -20,7 +26,9 @@
<template #footer> <template #footer>
<div style="flex: auto"> <div style="flex: auto">
<el-button @click="cancelClick">{{ $t('common.cancel') }}</el-button> <el-button @click="cancelClick">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="confirmClick()">{{ isEdit ? $t('common.save') : $t('common.add') }}</el-button> <el-button type="primary" @click="confirmClick()">{{
isEdit ? $t('common.save') : $t('common.add')
}}</el-button>
</div> </div>
</template> </template>
</el-drawer> </el-drawer>

View File

@ -11,10 +11,10 @@
<template #header="{ close, titleId, titleClass }"> <template #header="{ close, titleId, titleClass }">
<el-breadcrumb separator=">"> <el-breadcrumb separator=">">
<el-breadcrumb-item> <el-breadcrumb-item>
<span @click="toSelectProvider" class="select-provider" <span @click="toSelectProvider" class="select-provider">
>{{ $t('views.template.providerPlaceholder') }}</span {{ $t('views.template.providerPlaceholder') }}
></el-breadcrumb-item </span>
> </el-breadcrumb-item>
<el-breadcrumb-item <el-breadcrumb-item
><span class="active-breadcrumb">{{ ><span class="active-breadcrumb">{{
`${$t('common.add')} ${providerValue?.name}` `${$t('common.add')} ${providerValue?.name}`
@ -23,7 +23,7 @@
</el-breadcrumb> </el-breadcrumb>
</template> </template>
<el-tabs v-model="activeName"> <el-tabs v-model="activeName">
<el-tab-pane label="基础信息" name="base-info"> <el-tab-pane :label="$t('views.template.templateForm.title.baseInfo')" name="base-info">
<DynamicsForm <DynamicsForm
v-model="form_data" v-model="form_data"
:render_data="model_form_field" :render_data="model_form_field"
@ -39,11 +39,11 @@
<template #label> <template #label>
<div class="flex align-center" style="display: inline-flex"> <div class="flex align-center" style="display: inline-flex">
<div class="mr-4"> <div class="mr-4">
<span>模型名称 </span> <span> {{ $t('views.template.templateForm.form.templateName.label') }} </span>
</div> </div>
<el-tooltip effect="dark" placement="right"> <el-tooltip effect="dark" placement="right">
<template #content> <template #content>
<p>MaxKB 中自定义的模型名称</p> <p>{{ $t('views.template.templateForm.form.templateName.tooltip') }}</p>
</template> </template>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon> <AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip> </el-tooltip>
@ -53,12 +53,12 @@
v-model="base_form_data.name" v-model="base_form_data.name"
maxlength="64" maxlength="64"
show-word-limit show-word-limit
placeholder="请给基础模型设置一个名称" :placeholder="$t('views.template.templateForm.form.templateName.placeholder')"
/> />
</el-form-item> </el-form-item>
<el-form-item prop="permission_type" :rules="base_form_data_rule.permission_type"> <el-form-item prop="permission_type" :rules="base_form_data_rule.permission_type">
<template #label> <template #label>
<span>权限</span> <span>{{ $t('views.template.templateForm.form.permissionType.label') }}</span>
</template> </template>
<el-radio-group v-model="base_form_data.permission_type" class="card__radio"> <el-radio-group v-model="base_form_data.permission_type" class="card__radio">
<el-row :gutter="16"> <el-row :gutter="16">
@ -70,9 +70,9 @@
:class="base_form_data.permission_type === key ? 'active' : ''" :class="base_form_data.permission_type === key ? 'active' : ''"
> >
<el-radio :value="key" size="large"> <el-radio :value="key" size="large">
<p class="mb-4">{{ value }}</p> <p class="mb-4">{{ $t(value) }}</p>
<el-text type="info"> <el-text type="info">
{{ PermissionDesc[key] }} {{ $t(PermissionDesc[key]) }}
</el-text> </el-text>
</el-radio> </el-radio>
</el-card> </el-card>
@ -84,18 +84,18 @@
<el-form-item prop="model_type" :rules="base_form_data_rule.model_type"> <el-form-item prop="model_type" :rules="base_form_data_rule.model_type">
<template #label> <template #label>
<div class="flex align-center" style="display: inline-flex"> <div class="flex align-center" style="display: inline-flex">
<span class="mr-4">模型类型 </span> <span class="mr-4"
>{{ $t('views.template.templateForm.form.model_type.label') }}
</span>
<el-tooltip effect="dark" placement="right"> <el-tooltip effect="dark" placement="right">
<template #content> <template #content>
<p>大语言模型在应用中与AI对话的推理模型</p> <p>{{ $t('views.template.templateForm.form.model_type.tooltip1') }}</p>
<p>向量模型在知识库中对文档内容进行向量化的模型</p> <p>{{ $t('views.template.templateForm.form.model_type.tooltip2') }}</p>
<p>语音识别在应用中开启语音识别后用于语音转文字的模型</p> <p>{{ $t('views.template.templateForm.form.model_type.tooltip3') }}</p>
<p>语音合成在应用中开启语音播放后用于文字转语音的模型</p> <p>{{ $t('views.template.templateForm.form.model_type.tooltip4') }}</p>
<p> <p>{{ $t('views.template.templateForm.form.model_type.tooltip5') }}</p>
重排模型在高级编排应用中使用多路召回时对候选分段进行重新排序的模型 <p>{{ $t('views.template.templateForm.form.model_type.tooltip6') }}</p>
</p> <p>{{ $t('views.template.templateForm.form.model_type.tooltip7') }}</p>
<p>图片理解在高级编排应用中用于图片理解的视觉模型</p>
<p>图片生成在高级编排应用中用于图片生成的视觉模型</p>
</template> </template>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon> <AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip> </el-tooltip>
@ -106,7 +106,7 @@
@change="list_base_model($event, true)" @change="list_base_model($event, true)"
v-model="base_form_data.model_type" v-model="base_form_data.model_type"
class="w-full m-2" class="w-full m-2"
placeholder="请选择模型类型" :placeholder="$t('views.template.templateForm.form.model_type.placeholder')"
> >
<el-option <el-option
v-for="item in model_type_list" v-for="item in model_type_list"
@ -121,8 +121,10 @@
<template #label> <template #label>
<div class="flex align-center" style="display: inline-flex"> <div class="flex align-center" style="display: inline-flex">
<div class="mr-4"> <div class="mr-4">
<span>基础模型 </span> <span>{{ $t('views.template.templateForm.form.base_model.label') }} </span>
<span class="danger">列表中未列出的模型直接输入模型名称回车即可添加</span> <span class="danger ml-4">{{
$t('views.template.templateForm.form.base_model.tooltip')
}}</span>
</div> </div>
</div> </div>
</template> </template>
@ -131,7 +133,7 @@
v-loading="base_model_loading" v-loading="base_model_loading"
v-model="base_form_data.model_name" v-model="base_form_data.model_name"
class="w-full m-2" class="w-full m-2"
placeholder="自定义输入基础模型后回车即可" :placeholder="$t('views.template.templateForm.form.base_model.placeholder')"
filterable filterable
allow-create allow-create
default-first-option default-first-option
@ -156,10 +158,13 @@
</template> </template>
</DynamicsForm> </DynamicsForm>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="高级设置" name="advanced-info"> <el-tab-pane
:label="$t('views.template.templateForm.title.advancedInfo')"
name="advanced-info"
>
<el-empty <el-empty
v-if="!base_form_data.model_type || !base_form_data.model_name" v-if="!base_form_data.model_type || !base_form_data.model_name"
description="请先选择基础信息的模型类型和基础模型" :description="$t('views.template.tip.emptyMessage1')"
/> />
<el-empty <el-empty
v-else-if=" v-else-if="
@ -167,10 +172,10 @@
base_form_data.model_type === 'EMBEDDING' || base_form_data.model_type === 'EMBEDDING' ||
base_form_data.model_type === 'STT' base_form_data.model_type === 'STT'
" "
description="所选模型不支持参数设置" :description="$t('views.template.tip.emptyMessage2')"
/> />
<div class="flex-between mb-8" v-else> <div class="flex-between mb-8" v-else>
<h5>模型参数</h5> <h5>{{ $t('views.template.templateForm.title.modelParams') }}</h5>
<el-button <el-button
type="text" type="text"
@click.stop="openAddDrawer()" @click.stop="openAddDrawer()"
@ -181,7 +186,7 @@
base_form_data.model_type !== 'TTI' base_form_data.model_type !== 'TTI'
" "
> >
<AppIcon iconName="Plus" class="add-icon" />添加 <AppIcon iconName="Plus" class="add-icon" />{{ $t('common.add') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
@ -189,7 +194,11 @@
v-if="base_form_data.model_params_form?.length > 0" v-if="base_form_data.model_params_form?.length > 0"
class="mb-16" class="mb-16"
> >
<el-table-column prop="label" label="显示名称" show-overflow-tooltip> <el-table-column
prop="label"
:label="$t('components.dynamicsForm.paramForm.name.label')"
show-overflow-tooltip
>
<template #default="{ row }"> <template #default="{ row }">
<span v-if="row.label && row.label.input_type === 'TooltipLabel'">{{ <span v-if="row.label && row.label.input_type === 'TooltipLabel'">{{
row.label.label row.label.label
@ -197,16 +206,27 @@
<span v-else>{{ row.label }}</span> <span v-else>{{ row.label }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="field" label="参数" show-overflow-tooltip /> <el-table-column
<el-table-column label="组件类型" width="110px"> prop="field"
:label="$t('components.dynamicsForm.paramForm.field.label')"
show-overflow-tooltip
/>
<el-table-column
:label="$t('components.dynamicsForm.paramForm.input_type.label')"
width="110px"
>
<template #default="{ row }"> <template #default="{ row }">
<el-tag type="info" class="info-tag">{{ <el-tag type="info" class="info-tag">{{
input_type_list.find((item) => item.value === row.input_type)?.label input_type_list.find((item) => item.value === row.input_type)?.label
}}</el-tag> }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="default_value" label="默认值" show-overflow-tooltip /> <el-table-column
<el-table-column label="必填"> prop="default_value"
:label="$t('components.dynamicsForm.default.label')"
show-overflow-tooltip
/>
<el-table-column :label="$t('common.required')">
<template #default="{ row }"> <template #default="{ row }">
<div @click.stop> <div @click.stop>
<el-switch disabled size="small" v-model="row.required" /> <el-switch disabled size="small" v-model="row.required" />
@ -238,7 +258,9 @@
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
<el-button @click="close">{{ $t('common.cancel') }}</el-button> <el-button @click="close">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="submit" :loading="loading"> {{$t('common.save')}} </el-button> <el-button type="primary" @click="submit" :loading="loading">
{{ $t('common.save') }}
</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
@ -256,6 +278,7 @@ import { MsgError, MsgSuccess, MsgWarning } from '@/utils/message'
import { PermissionType, PermissionDesc } from '@/enums/model' import { PermissionType, PermissionDesc } from '@/enums/model'
import { input_type_list } from '@/components/dynamics-form/constructor/data' import { input_type_list } from '@/components/dynamics-form/constructor/data'
import AddParamDrawer from '@/views/template/component/AddParamDrawer.vue' import AddParamDrawer from '@/views/template/component/AddParamDrawer.vue'
import { t } from '@/locales'
const providerValue = ref<Provider>() const providerValue = ref<Provider>()
const dynamicsFormRef = ref<InstanceType<typeof DynamicsForm>>() const dynamicsFormRef = ref<InstanceType<typeof DynamicsForm>>()
@ -272,10 +295,26 @@ const activeName = ref('base-info')
const AddParamRef = ref() const AddParamRef = ref()
const base_form_data_rule = ref<FormRules>({ const base_form_data_rule = ref<FormRules>({
name: { required: true, trigger: 'blur', message: '模型名称不能为空' }, name: {
permission_type: { required: true, trigger: 'change', message: '权限不能为空' }, required: true,
model_type: { required: true, trigger: 'change', message: '模型类型不能为空' }, trigger: 'blur',
model_name: { required: true, trigger: 'change', message: '基础模型不能为空' } message: t('views.template.templateForm.form.templateName.requiredMessage')
},
permission_type: {
required: true,
trigger: 'change',
message: t('views.template.templateForm.form.permissionType.requiredMessage')
},
model_type: {
required: true,
trigger: 'change',
message: t('views.template.templateForm.form.model_type.requiredMessage')
},
model_name: {
required: true,
trigger: 'change',
message: t('views.template.templateForm.form.base_model.requiredMessage')
}
}) })
const base_form_data = ref<{ const base_form_data = ref<{
@ -306,7 +345,7 @@ const form_data = computed({
const getModelForm = (model_name: string) => { const getModelForm = (model_name: string) => {
if (!form_data.value.model_type) { if (!form_data.value.model_type) {
MsgWarning('请先选择模型类型') MsgWarning(t('views.template.templateForm.form.model_type.requiredMessage'))
base_form_data.value.model_name = '' base_form_data.value.model_name = ''
return return
} }
@ -383,13 +422,13 @@ const submit = () => {
loading loading
).then((ok) => { ).then((ok) => {
close() close()
MsgSuccess('创建模型成功') MsgSuccess(t('views.template.tip.createSuccessMessage'))
emit('submit') emit('submit')
}) })
} }
}) })
.catch(() => { .catch(() => {
MsgError('基础信息有填写错误') MsgError(t('views.template.tip.createErrorMessage'))
}) })
} }
@ -414,11 +453,11 @@ function refresh(data: any, index: any) {
} }
if (field === data.field && index !== i) { if (field === data.field && index !== i) {
MsgError('变量已存在: ' + data.field) MsgError(t('views.template.tip.errorMessage') + data.field)
return return
} }
if (label === label2 && index !== i) { if (label === label2 && index !== i) {
MsgError('变量已存在: ' + label) MsgError(t('views.template.tip.errorMessage') + label)
return return
} }
} }

View File

@ -31,11 +31,11 @@
<template #label> <template #label>
<div class="flex align-center" style="display: inline-flex"> <div class="flex align-center" style="display: inline-flex">
<div class="mr-4"> <div class="mr-4">
<span>模型名称 </span> <span>{{ $t('views.template.templateForm.form.templateName.label') }} </span>
</div> </div>
<el-tooltip effect="dark" placement="right"> <el-tooltip effect="dark" placement="right">
<template #content> <template #content>
<p>MaxKB 中自定义的模型名称</p> <p>{{ $t('views.template.templateForm.form.templateName.tooltip') }}</p>
</template> </template>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon> <AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip> </el-tooltip>
@ -45,12 +45,12 @@
v-model="base_form_data.name" v-model="base_form_data.name"
maxlength="64" maxlength="64"
show-word-limit show-word-limit
placeholder="请给基础模型设置一个名称" :placeholder="$t('views.template.templateForm.form.templateName.placeholder')"
/> />
</el-form-item> </el-form-item>
<el-form-item prop="permission_type" :rules="base_form_data_rule.permission_type"> <el-form-item prop="permission_type" :rules="base_form_data_rule.permission_type">
<template #label> <template #label>
<span>权限</span> <span>{{ $t('views.template.templateForm.form.permissionType.label') }}</span>
</template> </template>
<el-radio-group v-model="base_form_data.permission_type" class="card__radio"> <el-radio-group v-model="base_form_data.permission_type" class="card__radio">
@ -63,9 +63,9 @@
:class="base_form_data.permission_type === key ? 'active' : ''" :class="base_form_data.permission_type === key ? 'active' : ''"
> >
<el-radio :value="key" size="large"> <el-radio :value="key" size="large">
<p class="mb-4">{{ value }}</p> <p class="mb-4">{{ $t(value) }}</p>
<el-text type="info"> <el-text type="info">
{{ PermissionDesc[key] }} {{ $t(PermissionDesc[key]) }}
</el-text> </el-text>
</el-radio> </el-radio>
</el-card> </el-card>
@ -76,7 +76,7 @@
</el-form-item> </el-form-item>
<el-form-item prop="model_type" :rules="base_form_data_rule.model_type"> <el-form-item prop="model_type" :rules="base_form_data_rule.model_type">
<template #label> <template #label>
<span>模型类型</span> <span>{{ $t('views.template.templateForm.form.model_type.label') }}</span>
</template> </template>
<el-select <el-select
disabled disabled
@ -84,7 +84,7 @@
@change="list_base_model($event, true)" @change="list_base_model($event, true)"
v-model="base_form_data.model_type" v-model="base_form_data.model_type"
class="w-full m-2" class="w-full m-2"
placeholder="请选择模型类型" :placeholder="$t('views.template.templateForm.form.model_type.placeholder')"
> >
<el-option <el-option
v-for="item in model_type_list" v-for="item in model_type_list"
@ -98,8 +98,10 @@
<template #label> <template #label>
<div class="flex align-center" style="display: inline-flex"> <div class="flex align-center" style="display: inline-flex">
<div class="mr-4"> <div class="mr-4">
<span>基础模型 </span> <span>{{ $t('views.template.templateForm.form.base_model.label') }} </span>
<span class="danger">列表中未列出的模型直接输入模型名称回车即可添加</span> <span class="danger">{{
$t('views.template.templateForm.form.base_model.tooltip')
}}</span>
</div> </div>
</div> </div>
</template> </template>
@ -108,7 +110,7 @@
v-loading="base_model_loading" v-loading="base_model_loading"
v-model="base_form_data.model_name" v-model="base_form_data.model_name"
class="w-full m-2" class="w-full m-2"
placeholder="请选择基础模型" :placeholder="$t('views.template.templateForm.form.base_model.requiredMessage')"
filterable filterable
allow-create allow-create
default-first-option default-first-option
@ -152,6 +154,7 @@ import DynamicsForm from '@/components/dynamics-form/index.vue'
import type { FormRules } from 'element-plus' import type { FormRules } from 'element-plus'
import { MsgSuccess } from '@/utils/message' import { MsgSuccess } from '@/utils/message'
import { PermissionType, PermissionDesc } from '@/enums/model' import { PermissionType, PermissionDesc } from '@/enums/model'
import { t } from '@/locales'
const providerValue = ref<Provider>() const providerValue = ref<Provider>()
const dynamicsFormRef = ref<InstanceType<typeof DynamicsForm>>() const dynamicsFormRef = ref<InstanceType<typeof DynamicsForm>>()
@ -167,9 +170,21 @@ const model_form_field = ref<Array<FormField>>([])
const dialogVisible = ref<boolean>(false) const dialogVisible = ref<boolean>(false)
const base_form_data_rule = ref<FormRules>({ const base_form_data_rule = ref<FormRules>({
name: { required: true, trigger: 'blur', message: '模型名称不能为空' }, name: {
model_type: { required: true, trigger: 'change', message: '模型类型不能为空' }, required: true,
model_name: { required: true, trigger: 'change', message: '基础模型不能为空' } trigger: 'blur',
message: t('views.template.templateForm.form.templateName.requiredMessage')
},
model_type: {
required: true,
trigger: 'change',
message: t('views.template.templateForm.form.model_type.requiredMessage')
},
model_name: {
required: true,
trigger: 'change',
message: t('views.template.templateForm.form.base_model.requiredMessage')
}
}) })
const base_form_data = ref<{ const base_form_data = ref<{
@ -260,7 +275,7 @@ const submit = () => {
}, },
loading loading
).then((ok) => { ).then((ok) => {
MsgSuccess('修改模型成功') MsgSuccess(t('views.template.tip.updateSuccessMessage'))
close() close()
emit('submit') emit('submit')
}) })

View File

@ -16,7 +16,7 @@
<span v-if="currentModel.status === 'PAUSE_DOWNLOAD'"> <span v-if="currentModel.status === 'PAUSE_DOWNLOAD'">
<el-tooltip <el-tooltip
effect="dark" effect="dark"
:content="`基础模型: ${props.model.model_name} 下载失败`" :content="`${$t('views.template.templateForm.form.base_model.label')}: ${props.model.model_name} ${$t('views.template.tip.downloadError')}`"
placement="top" placement="top"
> >
<el-icon class="danger ml-4" size="18"><Warning /></el-icon> <el-icon class="danger ml-4" size="18"><Warning /></el-icon>
@ -24,9 +24,9 @@
</span> </span>
</div> </div>
<div class="mt-4"> <div class="mt-4">
<el-tag v-if="model.permission_type === 'PRIVATE'" type="danger" class="danger-tag" <el-tag v-if="model.permission_type === 'PRIVATE'" type="danger" class="danger-tag">{{
>私有</el-tag $t('common.private')
> }}</el-tag>
<el-tag v-else type="info" class="info-tag"> {{ $t('common.public') }}</el-tag> <el-tag v-else type="info" class="info-tag"> {{ $t('common.public') }}</el-tag>
</div> </div>
</div> </div>
@ -36,13 +36,17 @@
<div class="mt-16"> <div class="mt-16">
<ul> <ul>
<li class="flex mt-16"> <li class="flex mt-16">
<el-text type="info">模型类型</el-text> <el-text type="info">{{
$t('views.template.templateForm.form.model_type.label')
}}</el-text>
<span class="ellipsis ml-16"> <span class="ellipsis ml-16">
{{ $t(modelType[model.model_type as keyof typeof modelType]) }}</span {{ $t(modelType[model.model_type as keyof typeof modelType]) }}</span
> >
</li> </li>
<li class="flex mt-12"> <li class="flex mt-12">
<el-text type="info">基础模型</el-text> <el-text type="info">{{
$t('views.template.templateForm.form.base_model.label')
}}</el-text>
<span class="ellipsis-1 ml-16" style="height: 20px; width: 70%"> <span class="ellipsis-1 ml-16" style="height: 20px; width: 70%">
{{ model.model_name }}</span {{ model.model_name }}</span
> >
@ -60,14 +64,14 @@
<DownloadLoading class="percentage" /> <DownloadLoading class="percentage" />
<div class="percentage-label flex-center"> <div class="percentage-label flex-center">
正在下载中 <span class="dotting"></span> {{ $t('views.template.download.downloading') }} <span class="dotting"></span>
<el-button <el-button
link link
type="primary" type="primary"
class="ml-16" class="ml-16"
:disabled="!is_permisstion" :disabled="!is_permisstion"
@click.stop="cancelDownload" @click.stop="cancelDownload"
>取消下载</el-button >{{ $t('views.template.download.cancelDownload') }}</el-button
> >
</div> </div>
</div> </div>
@ -104,7 +108,7 @@
icon="Setting" icon="Setting"
@click.stop="openParamSetting" @click.stop="openParamSetting"
> >
模型参数设置 {{ $t('views.template.templateForm.title.paramSetting') }}
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item <el-dropdown-item
icon="Delete" icon="Delete"
@ -133,7 +137,7 @@ import { MsgConfirm } from '@/utils/message'
import { modelType } from '@/enums/model' import { modelType } from '@/enums/model'
import useStore from '@/stores' import useStore from '@/stores'
import ParamSettingDialog from './ParamSettingDialog.vue' import ParamSettingDialog from './ParamSettingDialog.vue'
import { t } from '@/locales'
const props = defineProps<{ const props = defineProps<{
model: Model model: Model
provider_list: Array<Provider> provider_list: Array<Provider>
@ -157,7 +161,7 @@ const currentModel = computed(() => {
const errMessage = computed(() => { const errMessage = computed(() => {
if (currentModel.value.meta && currentModel.value.meta.message) { if (currentModel.value.meta && currentModel.value.meta.message) {
if (currentModel.value.meta.message === 'pull model manifest: file does not exist') { if (currentModel.value.meta.message === 'pull model manifest: file does not exist') {
return `${currentModel.value.model_name} 模型在Ollama不存在` return `${currentModel.value.model_name} ${t('views.template.tip.noModel')}`
} }
return currentModel.value.meta.message return currentModel.value.meta.message
} }
@ -167,10 +171,14 @@ const emit = defineEmits(['change', 'update:model'])
const editModelRef = ref<InstanceType<typeof EditModel>>() const editModelRef = ref<InstanceType<typeof EditModel>>()
let interval: any let interval: any
const deleteModel = () => { const deleteModel = () => {
MsgConfirm(`删除模型 `, `是否删除模型:${props.model.name} ?`, { MsgConfirm(
t('views.template.delete.confirmTitle'),
`${t('views.template.delete.confirmMessage')}${props.model.name} ?`,
{
confirmButtonText: t('common.delete'), confirmButtonText: t('common.delete'),
confirmButtonClass: 'danger' confirmButtonClass: 'danger'
}) }
)
.then(() => { .then(() => {
ModelApi.deleteModel(props.model.id).then(() => { ModelApi.deleteModel(props.model.id).then(() => {
emit('change') emit('change')

View File

@ -1,6 +1,6 @@
<template> <template>
<el-dialog <el-dialog
title="模型参数设置" :title="$t('views.template.templateForm.title.paramSetting')"
v-model="dialogVisible" v-model="dialogVisible"
width="800px" width="800px"
:close-on-click-modal="false" :close-on-click-modal="false"
@ -8,9 +8,11 @@
:destroy-on-close="true" :destroy-on-close="true"
:before-close="close" :before-close="close"
> >
<el-button type="primary" @click="openAddDrawer()" class="mb-12"> 添加参数 </el-button> <el-button type="primary" @click="openAddDrawer()" class="mb-12">
{{ $t('views.template.templateForm.title.addParam') }}
</el-button>
<el-table :data="modelParamsForm" class="mb-16"> <el-table :data="modelParamsForm" class="mb-16">
<el-table-column prop="label" label="显示名称" show-overflow-tooltip> <el-table-column prop="label" :label="$t('components.dynamicsForm.paramForm.name.label')" show-overflow-tooltip>
<template #default="{ row }"> <template #default="{ row }">
<span v-if="row.label && row.label.input_type === 'TooltipLabel'">{{ <span v-if="row.label && row.label.input_type === 'TooltipLabel'">{{
row.label.label row.label.label
@ -18,16 +20,20 @@
<span v-else>{{ row.label }}</span> <span v-else>{{ row.label }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="field" label="参数" show-overflow-tooltip /> <el-table-column prop="field" :label="$t('components.dynamicsForm.paramForm.field.label')" show-overflow-tooltip />
<el-table-column label="组件类型" width="110px"> <el-table-column :label="$t('components.dynamicsForm.paramForm.input_type.label')" width="110px">
<template #default="{ row }"> <template #default="{ row }">
<el-tag type="info" class="info-tag">{{ <el-tag type="info" class="info-tag">{{
input_type_list.find((item) => item.value === row.input_type)?.label input_type_list.find((item) => item.value === row.input_type)?.label
}}</el-tag> }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="default_value" label="默认值" show-overflow-tooltip /> <el-table-column
<el-table-column label="必填"> prop="default_value"
:label="$t('components.dynamicsForm.default.label')"
show-overflow-tooltip
/>
<el-table-column :label="$t('common.required')">
<template #default="{ row }"> <template #default="{ row }">
<div @click.stop> <div @click.stop>
<el-switch disabled size="small" v-model="row.required" /> <el-switch disabled size="small" v-model="row.required" />
@ -57,7 +63,9 @@
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
<el-button @click="close">{{ $t('common.cancel') }}</el-button> <el-button @click="close">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="submit" :loading="loading"> {{$t('common.save')}} </el-button> <el-button type="primary" @click="submit" :loading="loading">
{{ $t('common.save') }}
</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
@ -119,11 +127,11 @@ function refresh(data: any, index: any) {
} }
if (field === data.field && index !== i) { if (field === data.field && index !== i) {
MsgError('变量已存在: ' + data.field) MsgError(t('views.template.tip.errorMessage') + data.field)
return return
} }
if (label === label2 && index !== i) { if (label === label2 && index !== i) {
MsgError('变量已存在: ' + label) MsgError(t('views.template.tip.errorMessage') + label)
return return
} }
} }
@ -136,7 +144,7 @@ function refresh(data: any, index: any) {
function submit() { function submit() {
ModelApi.updateModelParamsForm(props.model.id, modelParamsForm.value, loading).then((ok) => { ModelApi.updateModelParamsForm(props.model.id, modelParamsForm.value, loading).then((ok) => {
MsgSuccess('模型参数保存成功') MsgSuccess(t('views.template.tip.saveSuccessMessage'))
close() close()
// emit('submit') // emit('submit')
}) })

View File

@ -49,7 +49,7 @@
import { ref } from 'vue' import { ref } from 'vue'
import ModelApi from '@/api/model' import ModelApi from '@/api/model'
import type { Provider } from '@/api/type/model' import type { Provider } from '@/api/type/model'
import { modelTypeList } from './data.ts' import { modelTypeList } from './data'
import { t } from '@/locales' import { t } from '@/locales'
const loading = ref<boolean>(false) const loading = ref<boolean>(false)

View File

@ -90,9 +90,18 @@
@change="search_type_change" @change="search_type_change"
> >
<el-option :label="$t('common.creator')" value="create_user" /> <el-option :label="$t('common.creator')" value="create_user" />
<el-option label="权限" value="permission_type" /> <el-option
<el-option label="模型类型" value="model_type" /> :label="$t('views.template.templateForm.form.permissionType.label')"
<el-option label="模型名称" value="name" /> value="permission_type"
/>
<el-option
:label="$t('views.template.templateForm.form.model_type.label')"
value="model_type"
/>
<el-option
:label="$t('views.template.templateForm.form.templateName.label')"
value="name"
/>
</el-select> </el-select>
<el-input <el-input
v-if="search_type === 'name'" v-if="search_type === 'name'"
@ -124,8 +133,8 @@
@change="list_model" @change="list_model"
style="width: 220px" style="width: 220px"
> >
<el-option label="公有" value="PUBLIC" /> <el-option :label="$t('views.template.templateForm.form.permissionType.public')" value="PUBLIC" />
<el-option label="私有" value="PRIVATE" /> <el-option :label="$t('views.template.templateForm.form.permissionType.private')" value="PRIVATE" />
</el-select> </el-select>
<el-select <el-select
v-else-if="search_type === 'model_type'" v-else-if="search_type === 'model_type'"
@ -166,7 +175,7 @@
</el-col> </el-col>
</template> </template>
</el-row> </el-row>
<el-empty description="暂无数据" v-else /> <el-empty :description="$t('common.noData')" v-else />
</div> </div>
</el-scrollbar> </el-scrollbar>
</div> </div>
@ -192,7 +201,7 @@ import type { Provider, Model } from '@/api/type/model'
import AppIcon from '@/components/icons/AppIcon.vue' import AppIcon from '@/components/icons/AppIcon.vue'
import ModelCard from '@/views/template/component/ModelCard.vue' import ModelCard from '@/views/template/component/ModelCard.vue'
import { splitArray } from '@/utils/common' import { splitArray } from '@/utils/common'
import { modelTypeList } from '@/views/template/component/data.ts' import { modelTypeList } from '@/views/template/component/data'
import CreateModelDialog from '@/views/template/component/CreateModelDialog.vue' import CreateModelDialog from '@/views/template/component/CreateModelDialog.vue'
import SelectProviderDialog from '@/views/template/component/SelectProviderDialog.vue' import SelectProviderDialog from '@/views/template/component/SelectProviderDialog.vue'
import { t } from '@/locales' import { t } from '@/locales'

View File

@ -1,6 +1,10 @@
<template> <template>
<el-dialog <el-dialog
:title="isEdit ? '编辑参数' : '添加参数'" :title="
isEdit
? $t('views.template.templateForm.title.editParam')
: $t('views.template.templateForm.title.addParam')
"
v-model="dialogVisible" v-model="dialogVisible"
:close-on-click-modal="false" :close-on-click-modal="false"
:close-on-press-escape="false" :close-on-press-escape="false"
@ -29,17 +33,17 @@
<el-switch size="small" v-model="form.is_required"></el-switch> <el-switch size="small" v-model="form.is_required"></el-switch>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label="默认值" :label="$t('components.dynamicsForm.default.label')"
prop="default_value" prop="default_value"
:rules="{ :rules="{
required: form.is_required, required: form.is_required,
message: '请输入默认值', message: $t('components.dynamicsForm.paramForm.default.requiredMessage'),
trigger: 'blur' trigger: 'blur'
}" }"
> >
<el-input <el-input
v-model="form.default_value" v-model="form.default_value"
placeholder="请输入默认值" :placeholder="$t('components.dynamicsForm.paramForm.default.placeholder')"
@blur="form.name = form.name.trim()" @blur="form.name = form.name.trim()"
/> />
</el-form-item> </el-form-item>

View File

@ -14,8 +14,8 @@
class="mb-16" class="mb-16"
> >
<el-table-column prop="variable" label="参数" /> <el-table-column prop="variable" label="参数" />
<el-table-column prop="default_value" label="默认值" /> <el-table-column prop="default_value" :label="$t('components.dynamicsForm.default.label')" />
<el-table-column label="必填"> <el-table-column :label="$t('common.required')">
<template #default="{ row }"> <template #default="{ row }">
<div @click.stop> <div @click.stop>
<el-switch disabled size="small" v-model="row.is_required" /> <el-switch disabled size="small" v-model="row.is_required" />

View File

@ -1,6 +1,10 @@
<template> <template>
<el-dialog <el-dialog
:title="isEdit ? '编辑参数' : '添加参数'" :title="
isEdit
? $t('views.template.templateForm.title.editParam')
: $t('views.template.templateForm.title.addParam')
"
v-model="dialogVisible" v-model="dialogVisible"
:close-on-click-modal="false" :close-on-click-modal="false"
:close-on-press-escape="false" :close-on-press-escape="false"
@ -72,7 +76,9 @@ const currentRow = computed(() => {
label: row.label || row.name, label: row.label || row.name,
default_value: row.default_value, default_value: row.default_value,
required: row.required != undefined ? row.required : row.is_required, required: row.required != undefined ? row.required : row.is_required,
option_list: row.option_list ? row.option_list: row.optionList.map((o: any) => { option_list: row.option_list
? row.option_list
: row.optionList.map((o: any) => {
return { key: o, value: o } return { key: o, value: o }
}) })
} }

View File

@ -47,12 +47,15 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="default_value" label="默认值"> <el-table-column
prop="default_value"
:label="$t('components.dynamicsForm.default.label')"
>
<template #default="{ row }"> <template #default="{ row }">
<span :title="row.default_value" class="ellipsis-1">{{ getDefaultValue(row) }}</span> <span :title="row.default_value" class="ellipsis-1">{{ getDefaultValue(row) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="必填"> <el-table-column :label="$t('common.required')">
<template #default="{ row }"> <template #default="{ row }">
<div @click.stop> <div @click.stop>
<el-switch disabled size="small" v-model="row.required" /> <el-switch disabled size="small" v-model="row.required" />

View File

@ -86,14 +86,17 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="default_value" label="默认值"> <el-table-column
prop="default_value"
:label="$t('components.dynamicsForm.default.label')"
>
<template #default="{ row }"> <template #default="{ row }">
<span :title="row.default_value" class="ellipsis-1">{{ <span :title="row.default_value" class="ellipsis-1">{{
getDefaultValue(row) getDefaultValue(row)
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="必填"> <el-table-column :label="$t('common.required')">
<template #default="{ row }"> <template #default="{ row }">
<div @click.stop> <div @click.stop>
<el-switch disabled size="small" v-model="row.required" /> <el-switch disabled size="small" v-model="row.required" />