Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
admin
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
c2b439c4
authored
May 18, 2024
by
YunaiV
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【新增】AI:聊天角色的温度、token 数的 input-number 组件
parent
de754a6a
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
46 additions
and
45 deletions
+46
-45
src/views/ai/model/chatModel/ChatModelForm.vue
+19
-3
src/views/ai/model/chatRole/ChatRoleForm.vue
+27
-42
No files found.
src/views/ai/model/chatModel/ChatModelForm.vue
View file @
c2b439c4
...
@@ -48,13 +48,29 @@
...
@@ -48,13 +48,29 @@
</el-radio-group>
</el-radio-group>
</el-form-item>
</el-form-item>
<el-form-item
label=
"温度参数"
prop=
"temperature"
>
<el-form-item
label=
"温度参数"
prop=
"temperature"
>
<el-input
v-model=
"formData.temperature"
placeholder=
"请输入温度参数"
/>
<el-input-number
v-model=
"formData.temperature"
placeholder=
"请输入温度参数"
:min=
"0"
:max=
"2"
:precision=
"2"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"回复数 Token 数"
prop=
"maxTokens"
>
<el-form-item
label=
"回复数 Token 数"
prop=
"maxTokens"
>
<el-input
v-model=
"formData.maxTokens"
placeholder=
"请输入回复数 Token 数"
/>
<el-input-number
v-model=
"formData.maxTokens"
placeholder=
"请输入回复数 Token 数"
:min=
"0"
:max=
"4096"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"上下文数量"
prop=
"maxContexts"
>
<el-form-item
label=
"上下文数量"
prop=
"maxContexts"
>
<el-input
v-model=
"formData.maxContexts"
placeholder=
"请输入上下文数量"
/>
<el-input-number
v-model=
"formData.maxContexts"
placeholder=
"请输入上下文数量"
:min=
"0"
:max=
"20"
/>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
<template
#
footer
>
<template
#
footer
>
...
...
src/views/ai/model/chatRole/ChatRoleForm.vue
View file @
c2b439c4
...
@@ -8,10 +8,10 @@
...
@@ -8,10 +8,10 @@
v-loading=
"formLoading"
v-loading=
"formLoading"
>
>
<el-form-item
label=
"角色名称"
prop=
"name"
>
<el-form-item
label=
"角色名称"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入角色名称"
/>
<el-input
v-model=
"formData.name"
placeholder=
"请输入角色名称"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"角色头像"
prop=
"avatar"
>
<el-form-item
label=
"角色头像"
prop=
"avatar"
>
<UploadImg
v-model=
"formData.avatar"
height=
"60px"
width=
"60px"
/>
<UploadImg
v-model=
"formData.avatar"
height=
"60px"
width=
"60px"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"绑定模型"
prop=
"modelId"
v-if=
"!isUser(formType)"
>
<el-form-item
label=
"绑定模型"
prop=
"modelId"
v-if=
"!isUser(formType)"
>
<el-select
v-model=
"formData.modelId"
placeholder=
"请选择模型"
clearable
>
<el-select
v-model=
"formData.modelId"
placeholder=
"请选择模型"
clearable
>
...
@@ -24,17 +24,14 @@
...
@@ -24,17 +24,14 @@
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"角色类别"
prop=
"category"
v-if=
"!isUser(formType)"
>
<el-form-item
label=
"角色类别"
prop=
"category"
v-if=
"!isUser(formType)"
>
<el-input
v-model=
"formData.category"
placeholder=
"请输入角色类别"
/>
<el-input
v-model=
"formData.category"
placeholder=
"请输入角色类别"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"角色描述"
prop=
"description"
>
<el-form-item
label=
"角色描述"
prop=
"description"
>
<el-input
type=
"textarea"
v-model=
"formData.description"
placeholder=
"请输入角色描述"
/>
<el-input
type=
"textarea"
v-model=
"formData.description"
placeholder=
"请输入角色描述"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"角色设定"
prop=
"systemMessage"
>
<el-form-item
label=
"角色设定"
prop=
"systemMessage"
>
<el-input
type=
"textarea"
v-model=
"formData.systemMessage"
placeholder=
"请输入角色设定"
/>
<el-input
type=
"textarea"
v-model=
"formData.systemMessage"
placeholder=
"请输入角色设定"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"欢迎语👏🏻"
prop=
"welcomeMessage"
v-if=
"isUser(formType)"
>
<el-input
type=
"textarea"
v-model=
"formData.welcomeMessage"
placeholder=
"请输入欢迎语"
/>
</el-form-item>
<el-form-item
label=
"是否公开"
prop=
"publicStatus"
v-if=
"!isUser(formType)"
>
<el-form-item
label=
"是否公开"
prop=
"publicStatus"
v-if=
"!isUser(formType)"
>
<el-radio-group
v-model=
"formData.publicStatus"
>
<el-radio-group
v-model=
"formData.publicStatus"
>
<el-radio
<el-radio
...
@@ -47,7 +44,7 @@
...
@@ -47,7 +44,7 @@
</el-radio-group>
</el-radio-group>
</el-form-item>
</el-form-item>
<el-form-item
label=
"角色排序"
prop=
"sort"
v-if=
"!isUser(formType)"
>
<el-form-item
label=
"角色排序"
prop=
"sort"
v-if=
"!isUser(formType)"
>
<el-input-number
v-model=
"formData.sort"
placeholder=
"请输入角色排序"
class=
"!w-1/1"
/>
<el-input-number
v-model=
"formData.sort"
placeholder=
"请输入角色排序"
class=
"!w-1/1"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"开启状态"
prop=
"status"
v-if=
"!isUser(formType)"
>
<el-form-item
label=
"开启状态"
prop=
"status"
v-if=
"!isUser(formType)"
>
<el-radio-group
v-model=
"formData.status"
>
<el-radio-group
v-model=
"formData.status"
>
...
@@ -68,15 +65,15 @@
...
@@ -68,15 +65,15 @@
</Dialog>
</Dialog>
</template>
</template>
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
{
getIntDictOptions
,
getBoolDictOptions
,
DICT_TYPE
}
from
'@/utils/dict'
import
{
getIntDictOptions
,
getBoolDictOptions
,
DICT_TYPE
}
from
'@/utils/dict'
import
{
ChatRoleApi
,
ChatRoleVO
}
from
'@/api/ai/model/chatRole'
import
{
ChatRoleApi
,
ChatRoleVO
}
from
'@/api/ai/model/chatRole'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
import
{
ChatModelApi
,
ChatModelVO
}
from
'@/api/ai/model/chatModel'
import
{
ChatModelApi
,
ChatModelVO
}
from
'@/api/ai/model/chatModel'
/** AI 聊天角色 表单 */
/** AI 聊天角色 表单 */
defineOptions
({
name
:
'ChatRoleForm'
})
defineOptions
({
name
:
'ChatRoleForm'
})
const
{
t
}
=
useI18n
()
// 国际化
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
const
message
=
useMessage
()
// 消息弹窗
const
dialogVisible
=
ref
(
false
)
// 弹窗的是否展示
const
dialogVisible
=
ref
(
false
)
// 弹窗的是否展示
...
@@ -92,44 +89,36 @@ const formData = ref({
...
@@ -92,44 +89,36 @@ const formData = ref({
sort
:
undefined
,
sort
:
undefined
,
description
:
undefined
,
description
:
undefined
,
systemMessage
:
undefined
,
systemMessage
:
undefined
,
welcomeMessage
:
undefined
,
publicStatus
:
true
,
publicStatus
:
true
,
status
:
CommonStatusEnum
.
ENABLE
status
:
CommonStatusEnum
.
ENABLE
})
})
// 是否
const
isUser
=
(
type
:
string
)
=>
{
return
(
type
===
'my-create'
||
type
===
'my-update'
)
}
const
formRules
=
ref
()
// reactive(formRulesObj)
const
formRules
=
ref
()
// reactive(formRulesObj)
const
formRef
=
ref
()
// 表单 Ref
const
formRef
=
ref
()
// 表单 Ref
const
chatModelList
=
ref
([]
as
ChatModelVO
[])
// 聊天模型列表
const
chatModelList
=
ref
([]
as
ChatModelVO
[])
// 聊天模型列表
/** 是否【我】自己创建,私有角色 */
// TODO @fan:建议改成计算函数 computed
const
isUser
=
(
type
:
string
)
=>
{
return
type
===
'my-create'
||
type
===
'my-update'
}
// TODO @fan:直接使用 formRules;只要隐藏掉的字段,它是不会校验的哈;
const
getFormRules
=
async
(
type
:
string
)
=>
{
const
getFormRules
=
async
(
type
:
string
)
=>
{
let
formRulesObj
=
{
let
formRulesObj
=
{
name
:
[{
required
:
true
,
message
:
'角色名称不能为空'
,
trigger
:
'blur'
}],
name
:
[{
required
:
true
,
message
:
'角色名称不能为空'
,
trigger
:
'blur'
}],
avatar
:
[{
required
:
true
,
message
:
'角色头像不能为空'
,
trigger
:
'blur'
}],
avatar
:
[{
required
:
true
,
message
:
'角色头像不能为空'
,
trigger
:
'blur'
}],
category
:
[{
required
:
true
,
message
:
'角色类别不能为空'
,
trigger
:
'blur'
}],
category
:
[{
required
:
true
,
message
:
'角色类别不能为空'
,
trigger
:
'blur'
}],
sort
:
[{
required
:
true
,
message
:
'角色排序不能为空'
,
trigger
:
'blur'
}],
sort
:
[{
required
:
true
,
message
:
'角色排序不能为空'
,
trigger
:
'blur'
}],
description
:
[{
required
:
true
,
message
:
'角色描述不能为空'
,
trigger
:
'blur'
}],
description
:
[{
required
:
true
,
message
:
'角色描述不能为空'
,
trigger
:
'blur'
}],
systemMessage
:
[{
required
:
true
,
message
:
'角色设定不能为空'
,
trigger
:
'blur'
}],
systemMessage
:
[{
required
:
true
,
message
:
'角色设定不能为空'
,
trigger
:
'blur'
}],
// welcomeMessage: [{ required: true, message: '欢迎语不能为空', trigger: 'blur' }],
publicStatus
:
[{
required
:
true
,
message
:
'是否公开不能为空'
,
trigger
:
'blur'
}]
publicStatus
:
[{
required
:
true
,
message
:
'是否公开不能为空'
,
trigger
:
'blur'
}]
}
if
(
isUser
(
type
))
{
formRulesObj
[
'welcomeMessage'
]
=
[{
required
:
true
,
message
:
'欢迎语不能为空'
,
trigger
:
'blur'
}]
}
}
formRules
.
value
=
reactive
(
formRulesObj
)
formRules
.
value
=
reactive
(
formRulesObj
)
}
}
/** 打开弹窗 */
/** 打开弹窗 */
// TODO @fan:title 是不是收敛到 type 判断生成 title,会更合理
const
open
=
async
(
type
:
string
,
id
?:
number
,
title
?:
string
)
=>
{
const
open
=
async
(
type
:
string
,
id
?:
number
,
title
?:
string
)
=>
{
dialogVisible
.
value
=
true
dialogVisible
.
value
=
true
dialogTitle
.
value
=
title
||
t
(
'action.'
+
type
)
dialogTitle
.
value
=
title
||
t
(
'action.'
+
type
)
...
@@ -148,7 +137,7 @@ const open = async (type: string, id?: number, title?: string) => {
...
@@ -148,7 +137,7 @@ const open = async (type: string, id?: number, title?: string) => {
// 获得下拉数据
// 获得下拉数据
chatModelList
.
value
=
await
ChatModelApi
.
getChatModelSimpleList
(
CommonStatusEnum
.
ENABLE
)
chatModelList
.
value
=
await
ChatModelApi
.
getChatModelSimpleList
(
CommonStatusEnum
.
ENABLE
)
}
}
defineExpose
({
open
})
// 提供 open 方法,用于打开弹窗
defineExpose
({
open
})
// 提供 open 方法,用于打开弹窗
/** 提交表单 */
/** 提交表单 */
const
emit
=
defineEmits
([
'success'
])
// 定义 success 事件,用于操作成功后的回调
const
emit
=
defineEmits
([
'success'
])
// 定义 success 事件,用于操作成功后的回调
...
@@ -159,10 +148,8 @@ const submitForm = async () => {
...
@@ -159,10 +148,8 @@ const submitForm = async () => {
formLoading
.
value
=
true
formLoading
.
value
=
true
try
{
try
{
const
data
=
formData
.
value
as
unknown
as
ChatRoleVO
const
data
=
formData
.
value
as
unknown
as
ChatRoleVO
// tip: my-create、my-update 是 chat 角色仓库调用
// tip: my-create、my-update 是 chat 角色仓库调用
// tip: create、else 是后台管理调用
// tip: create、else 是后台管理调用
if
(
formType
.
value
===
'my-create'
)
{
if
(
formType
.
value
===
'my-create'
)
{
await
ChatRoleApi
.
createMy
(
data
)
await
ChatRoleApi
.
createMy
(
data
)
message
.
success
(
t
(
'common.createSuccess'
))
message
.
success
(
t
(
'common.createSuccess'
))
...
@@ -184,7 +171,6 @@ const submitForm = async () => {
...
@@ -184,7 +171,6 @@ const submitForm = async () => {
}
}
}
}
/** 重置表单 */
/** 重置表单 */
const
resetForm
=
()
=>
{
const
resetForm
=
()
=>
{
formData
.
value
=
{
formData
.
value
=
{
...
@@ -196,7 +182,6 @@ const resetForm = () => {
...
@@ -196,7 +182,6 @@ const resetForm = () => {
sort
:
undefined
,
sort
:
undefined
,
description
:
undefined
,
description
:
undefined
,
systemMessage
:
undefined
,
systemMessage
:
undefined
,
welcomeMessage
:
undefined
,
publicStatus
:
true
,
publicStatus
:
true
,
status
:
CommonStatusEnum
.
ENABLE
status
:
CommonStatusEnum
.
ENABLE
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment