模型配置字段相关修改

This commit is contained in:
2026-05-23 15:04:59 +08:00
parent 38166cb0b8
commit 7c60e34de0
3 changed files with 140 additions and 34 deletions

View File

@@ -92,7 +92,14 @@
import { ref, reactive, watch, onMounted } from 'vue';
import { ElMessage, type FormInstance, type FormRules } from 'element-plus';
import { Search, CircleCheck } from '@element-plus/icons-vue';
import { getModelModuleList, addModelModule, getModelTypeList, normalizeModelTypeOptions } from '/@/api/settings/modelConfig/modelModule';
import {
getModelModuleList,
addModelModule,
getModelTypeList,
normalizeModelTypeOptions,
type CreateModelParams,
type ModelFormEntry,
} from '/@/api/settings/modelConfig/modelModule';
import { checkIsSuperAdmin } from '/@/api/system/user/index';
import { getApiErrorMessage } from '/@/utils/request';
import EditModule from '/@/views/settings/modelConfig/modelModule/component/editModule.vue';
@@ -101,7 +108,7 @@ interface ModelItem {
id: string;
tenantId?: number;
modelName: string;
modelType: number;
modelType: number | string;
baseUrl: string;
route: string;
httpMethod: string;
@@ -113,9 +120,10 @@ interface ModelItem {
operatorName?: string;
responseBody?: Record<string, unknown>;
tokenConfig?: Record<string, unknown> | string;
form?: any;
requestMapping?: any;
responseMapping?: any;
extendMapping?: Record<string, unknown> | string;
form?: ModelFormEntry[] | Record<string, unknown>;
requestMapping?: Record<string, unknown>;
responseMapping?: Record<string, unknown>;
maxConcurrency?: number;
queueLimit?: number;
timeoutSeconds?: number;
@@ -206,13 +214,30 @@ watch(
}
);
const getModelTypeName = (type: number) => {
const getModelTypeName = (type: number | string) => {
const typeMap: Record<number, string> = {
1: '推理模型',
2: '图片模型',
3: '音频模型',
};
return typeMap[type] || '未知类型';
return typeMap[Number(type)] || '未知类型';
};
const parseJsonObjectField = (raw: unknown): Record<string, unknown> => {
if (raw && typeof raw === 'object' && !Array.isArray(raw)) {
return raw as Record<string, unknown>;
}
if (typeof raw === 'string') {
try {
const parsed = JSON.parse(raw || '{}');
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
return parsed as Record<string, unknown>;
}
} catch {
return {};
}
}
return {};
};
const fetchModelList = async () => {
@@ -270,7 +295,13 @@ const handleCreatePrivateModel = async () => {
creatingModel.value = true;
const builtInModel = builtInModelToClone.value;
const createParams = {
const formList: ModelFormEntry[] = Array.isArray(builtInModel.form)
? (builtInModel.form as ModelFormEntry[])
: Object.entries((builtInModel.form as Record<string, unknown>) || {}).map(([key, value]) => ({
key: String(key),
value: String(value ?? ''),
}));
const createParams: CreateModelParams = {
modelName: apiKeyForm.modelName,
modelType: builtInModel.modelType,
operatorName: builtInModel.operatorName || '',
@@ -281,9 +312,9 @@ const handleCreatePrivateModel = async () => {
enabled: builtInModel.enabled ?? 1,
isChatModel: builtInModel.isChatModel || 0,
apiKey: apiKeyForm.apiKey,
form: builtInModel.form || {},
requestMapping: builtInModel.requestMapping || {},
responseMapping: builtInModel.responseMapping || {},
form: formList,
requestMapping: (builtInModel.requestMapping as Record<string, unknown>) || {},
responseMapping: (builtInModel.responseMapping as Record<string, unknown>) || {},
responseBody: builtInModel.responseBody || {},
maxConcurrency: builtInModel.maxConcurrency || 10,
queueLimit: builtInModel.queueLimit || 100,
@@ -293,8 +324,9 @@ const handleCreatePrivateModel = async () => {
retryQueueMaxSeconds: builtInModel.retryQueueMaxSeconds || 60,
autoCleanSeconds: builtInModel.autoCleanSeconds || 300,
remark: builtInModel.remark || '',
tokenMapping: builtInModel.tokenMapping || '',
tokenConfig: builtInModel.tokenConfig || {},
extendMapping: parseJsonObjectField(builtInModel.extendMapping),
tokenConfig: parseJsonObjectField(builtInModel.tokenConfig),
};
const res: any = await addModelModule(createParams);