diff --git a/ui/src/api/admin/workspace/model/model.ts b/ui/src/api/admin/workspace/model/model.ts index 5637c47f9fa..28a73dfea6a 100644 --- a/ui/src/api/admin/workspace/model/model.ts +++ b/ui/src/api/admin/workspace/model/model.ts @@ -1,5 +1,5 @@ import { del, get, post, put } from '../../core/request' -import type { Dict, ModelPayload, ModelItem } from '@/api/types' +import type { Dict, DynamicFormField, ModelPayload, ModelItem } from '@/api/types' import { getWorkspaceId } from '@/utils/workspace-context' const getPrefix = () => { @@ -36,8 +36,15 @@ const getModelMeta = (modelId: string) => { const deleteModel = (modelId: string) => { return del(`${getPrefix()}/${modelId}`) } + +/** 获取模型参数表单。 */ const getModelParamsForm = (modelId: string) => { - return get(`${getPrefix()}/${modelId}/model_params_form`) + return get(`${getPrefix()}/${modelId}/model_params_form`) +} + +/** 保存模型参数表单。 */ +const putModelParamsForm = (modelId: string, payload: DynamicFormField[]) => { + return put(`${getPrefix()}/${modelId}/model_params_form`, payload) } /** 暂停本地模型下载。 */ @@ -50,8 +57,9 @@ export default { getModelDetail, getModelList, getModelMeta, + getModelParamsForm, postModel, putModel, + putModelParamsForm, putPauseModelDownload, - getModelParamsForm, } diff --git a/ui/src/api/admin/workspace/model/provider.ts b/ui/src/api/admin/workspace/model/provider.ts index a24447c3b35..c5c93397053 100644 --- a/ui/src/api/admin/workspace/model/provider.ts +++ b/ui/src/api/admin/workspace/model/provider.ts @@ -1,5 +1,10 @@ import { get } from '../../core/request' -import type { BaseModelOption, DynamicFormField, ModelProviderItem, ModelTypeOption } from '@/api/types' +import type { + BaseModelOption, + DynamicFormField, + ModelProviderItem, + ModelTypeOption, +} from '@/api/types' const prefix = '/provider' @@ -22,6 +27,16 @@ const getModelCreateForm = (provider: string, modelType: string, modelName: stri }) } +/** 获取基础模型的动态参数表单。 */ +const getBaseModelParamsForm = (provider: string, modelType: string, modelName: string) => { + return get(`${prefix}/model_params_form`, { + model_name: modelName, + model_type: modelType, + provider, + }) +} + + /** 获取供应商支持的模型类型。 */ const getModelTypeList = (provider: string) => { return get(`${prefix}/model_type_list`, { provider }) @@ -35,15 +50,6 @@ const getBaseModelList = (provider: string, modelType: string) => { }) } -/** 获取基础模型的参数表单。 */ -const getBaseModelParamsForm = (provider: string, modelType: string, modelName: string) => { - return get(`${prefix}/model_params_form`, { - model_name: modelName, - model_type: modelType, - provider, - }) -} - export default { getBaseModelList, getBaseModelParamsForm, diff --git a/ui/src/api/types/model.ts b/ui/src/api/types/model.ts index e6c3133d802..2e7815d25b9 100644 --- a/ui/src/api/types/model.ts +++ b/ui/src/api/types/model.ts @@ -44,7 +44,7 @@ export interface DynamicFormField { attrs?: Record default_value?: unknown field: string - input_type?: string + input_type: string label: string | DynamicFormLabel option_list?: Record[] required?: boolean @@ -58,6 +58,7 @@ export interface DynamicFormLabel { tooltip?: string [key: string]: unknown } + input_type: string label: string type?: string } diff --git a/ui/src/assets/login-animation/4robot.gif b/ui/src/assets/login-animation/4robot.gif index b355b9a6d93..0bb0cdb4158 100644 Binary files a/ui/src/assets/login-animation/4robot.gif and b/ui/src/assets/login-animation/4robot.gif differ diff --git a/ui/src/components/COMPONENT_README.md b/ui/src/components/COMPONENT_README.md index fc4a29e6bf9..8fe5155b1dd 100644 --- a/ui/src/components/COMPONENT_README.md +++ b/ui/src/components/COMPONENT_README.md @@ -176,7 +176,8 @@ Element Plus 使用 `ElOnlyChild` 处理浮层触发器。`el-tooltip`、`el-pop 带标题触发器和展开过渡动画的内容折叠组件。组件内部维护展开状态,`default-expanded` 设置初始 状态且默认为 `true`;点击标题行会切换状态,不向外回传展开状态。默认插槽放置折叠内容,标题 默认使用 `title` 属性,也可通过 `label` 插槽自定义;标题触发层可通过 `trigger-class` 和 -`trigger-style` 自定义 class 和行内样式。 +`trigger-style` 自定义 class 和行内样式。指示图标默认显示在标题前,通过 +`indicator-position="after"` 可改为显示在标题后的线性上、下箭头。 ```vue @@ -189,6 +190,11 @@ Element Plus 使用 `ElOnlyChild` 处理浮层触发器。`el-tooltip`、`el-pop
折叠内容
+ + + +
高级设置内容
+
``` ### MkEmpty @@ -343,16 +349,18 @@ Element Plus Dropdown 属性和事件通过 `$attrs` 传入,并暴露 `handleO ### MkViewLayout 路由页面的通用内容结构,统一提供满高弹性布局及可选左侧栏。标题优先使用 `title` Prop,未传入 -时读取当前路由的 `meta.title`。`aside` 和默认作用域插槽都提供 `title` 与对应区域的 `Header` -包装组件;插槽未渲染 `Header` 时,组件会自动显示当前标题,页面需要添加操作区或自定义标题时 -再显式渲染 `Header`。Header 固定在主内容区顶部,其余默认插槽内容由组件统一放入 +时读取当前路由的 `meta.title`。`aside` 作用域插槽提供 `title` 和对应区域的 `Header` 包装组件, +默认作用域插槽另外提供主内容区的 `Footer` 包装组件;插槽未渲染 `Header` 时,组件会自动显示当前 +标题,页面需要添加操作区或自定义标题时再显式渲染 `Header`。Header 固定在主内容区顶部,其余 +默认插槽内容由组件统一放入 `el-scrollbar`,页面不要再为整个主内容区嵌套滚动容器;Tabs、树或其他局部区域需要独立滚动时 -仍可自行使用 `el-scrollbar`。页面可以在同一个插槽中组织标题、内容和空状态,并只写一次业务 -状态判断。传入 `aside` 插槽后才会渲染左侧栏;左右结构上方的独立内容放入 `top` 插槽。页面加载状态通过 -`loading` Prop 传入,由组件将 Element Plus Loading 遮罩绑定到整个布局根节点。默认插槽没有 -渲染 `Header` 时会自动显示当前标题;显式渲染后则由页面控制标题内容。`collapsible` 默认为 -`false`;传入后,展开状态仅在鼠标移入侧栏或焦点进入侧栏时显示收起按钮,收起状态始终显示展开 -按钮。收起时释放侧栏宽度,页面不需要自行维护折叠状态。 +仍可自行使用 `el-scrollbar`。渲染 `Footer` 后固定在主内容区底部,不占用左侧栏空间,适合放置页面 +或全高 Drawer 右侧内容的操作按钮。页面可以在同一个插槽中组织标题、内容、底栏和空状态,并只写 +一次业务状态判断。传入 `aside` 插槽后才会渲染左侧栏;左右结构上方的独立内容放入 `top` 插槽。 +页面加载状态通过 `loading` Prop 传入,由组件将 Element Plus Loading 遮罩绑定到整个布局根节点。 +默认插槽没有渲染 `Header` 时会自动显示当前标题;显式渲染后则由页面控制标题内容。`collapsible` +默认为 `false`;传入后,展开状态仅在鼠标移入侧栏或焦点进入侧栏时显示收起按钮,收起状态始终显示 +展开按钮。收起时释放侧栏宽度,页面不需要自行维护折叠状态。 主内容区固定保留 `px-6` 水平留白。内置滚动容器会抵消两侧留白,再为滚动内容补回 `24px` 水平间距,使滚动条贴齐主区域右边界,并允许 `MkTable` 的底部操作栏延伸至完整主区域宽度。 @@ -371,12 +379,16 @@ Element Plus Dropdown 属性和事件通过 `$attrs` 传入,并暴露 `handleO 左侧列表 -
- + -
+
diff --git a/ui/src/components/mk-dynamics-form/constructor/BasicInfoConstructor.vue b/ui/src/components/mk-dynamics-form/constructor/BasicInfoConstructor.vue index f58cc31d790..d9b0fac402b 100644 --- a/ui/src/components/mk-dynamics-form/constructor/BasicInfoConstructor.vue +++ b/ui/src/components/mk-dynamics-form/constructor/BasicInfoConstructor.vue @@ -101,11 +101,17 @@ const updateForm = (value: DynamicFormConstructorState) => { defineExpose({ validate, getData, render }) - - diff --git a/ui/src/views/model/ParamSettingDrawer.vue b/ui/src/views/model/ParamSettingDrawer.vue new file mode 100644 index 00000000000..6a50cca764a --- /dev/null +++ b/ui/src/views/model/ParamSettingDrawer.vue @@ -0,0 +1,63 @@ + + + diff --git a/ui/src/views/model/components/ModelCard.vue b/ui/src/views/model/components/ModelCard.vue index 098e6d9fbe4..7cb8bcfae01 100644 --- a/ui/src/views/model/components/ModelCard.vue +++ b/ui/src/views/model/components/ModelCard.vue @@ -1,16 +1,20 @@ diff --git a/ui/src/views/model/create-model/CreateModelDrawer.vue b/ui/src/views/model/create-model/CreateModelDrawer.vue deleted file mode 100644 index 0c64b7b0ba3..00000000000 --- a/ui/src/views/model/create-model/CreateModelDrawer.vue +++ /dev/null @@ -1,298 +0,0 @@ - - - diff --git a/ui/src/views/system/chat/users/UserListView.vue b/ui/src/views/system/chat/users/UserListView.vue index 8bfeaee0f32..cf39b7520c8 100644 --- a/ui/src/views/system/chat/users/UserListView.vue +++ b/ui/src/views/system/chat/users/UserListView.vue @@ -261,7 +261,7 @@ onMounted(() => loadChatUsers()) /> -
+
diff --git a/ui/src/views/system/identity/users/UserListView.vue b/ui/src/views/system/identity/users/UserListView.vue index 379ed134472..5debb0834b9 100644 --- a/ui/src/views/system/identity/users/UserListView.vue +++ b/ui/src/views/system/identity/users/UserListView.vue @@ -236,7 +236,7 @@ onMounted(() => loadSystemUsers()) /> -
+
diff --git a/ui/src/views/system/operate-logs/dialog/OperateLogDetailDialog.vue b/ui/src/views/system/operate-logs/dialog/OperateLogDetailDialog.vue index 8665e521075..26be29cea1c 100644 --- a/ui/src/views/system/operate-logs/dialog/OperateLogDetailDialog.vue +++ b/ui/src/views/system/operate-logs/dialog/OperateLogDetailDialog.vue @@ -15,12 +15,11 @@ defineExpose({ open }) diff --git a/ui/src/views/tool/ToolDebugDrawer.vue b/ui/src/views/tool/ToolDebugDrawer.vue index c49d841c69a..d8998d0a6f2 100644 --- a/ui/src/views/tool/ToolDebugDrawer.vue +++ b/ui/src/views/tool/ToolDebugDrawer.vue @@ -1,5 +1,6 @@