+
+
+ {t('计费方式')}
+
+
handleBillingModeChange(event.target.value)}
+ >
+ {t('按量计费')}
+ {t('按次计费')}
+
+
+ {t(
+ '这个界面默认按价格填写,保存时会自动换算回后端需要的倍率 JSON。',
+ )}
+
+
+
+ {selectedWarnings.length > 0 ? (
+
+ {t('当前提示')}
+ {selectedWarnings.map((warning) => (
+
+ {warning}
+
+ ))}
+
+ ) : null}
+
+ {selectedModel.billingMode === 'per-request' ? (
+
handleNumericFieldChange('fixedPrice', value)}
+ extraText={t('适合 MJ / 任务类等按次收费模型。')}
+ />
+ ) : (
+ <>
+
+ {t('基础价格')}
+ handleNumericFieldChange('inputPrice', value)}
+ />
+ {selectedModel.completionRatioLocked ? (
+
+ ) : null}
+
+ handleNumericFieldChange('completionPrice', value)
+ }
+ headerAction={
+
+ handleOptionalFieldToggle('completionPrice', checked)
+ }
+ />
+ }
+ hidden={
+ !isOptionalFieldEnabled(selectedModel, 'completionPrice')
+ }
+ disabled={
+ !hasValue(selectedModel.inputPrice) ||
+ selectedModel.completionRatioLocked
+ }
+ extraText={
+ selectedModel.completionRatioLocked
+ ? t(
+ '后端固定倍率:{{ratio}}。该字段仅展示换算后的价格。',
+ {
+ ratio: selectedModel.lockedCompletionRatio || '-',
+ },
+ )
+ : !isOptionalFieldEnabled(
+ selectedModel,
+ 'completionPrice',
+ )
+ ? t('当前未启用,需要时再打开即可。')
+ : ''
+ }
+ />
+ handleNumericFieldChange('cachePrice', value)}
+ headerAction={
+
+ handleOptionalFieldToggle('cachePrice', checked)
+ }
+ />
+ }
+ hidden={!isOptionalFieldEnabled(selectedModel, 'cachePrice')}
+ disabled={!hasValue(selectedModel.inputPrice)}
+ extraText={
+ !isOptionalFieldEnabled(selectedModel, 'cachePrice')
+ ? t('当前未启用,需要时再打开即可。')
+ : ''
+ }
+ />
+
+ handleNumericFieldChange('createCachePrice', value)
+ }
+ headerAction={
+
+ handleOptionalFieldToggle('createCachePrice', checked)
+ }
+ />
+ }
+ hidden={
+ !isOptionalFieldEnabled(selectedModel, 'createCachePrice')
+ }
+ disabled={!hasValue(selectedModel.inputPrice)}
+ extraText={
+ !isOptionalFieldEnabled(
+ selectedModel,
+ 'createCachePrice',
+ )
+ ? t('当前未启用,需要时再打开即可。')
+ : ''
+ }
+ />
+
+
+
+
+
{t('扩展价格')}
+
+ {t('这些价格都是可选项,不填也可以。')}
+
+
+ handleNumericFieldChange('imagePrice', value)}
+ headerAction={
+
+ handleOptionalFieldToggle('imagePrice', checked)
+ }
+ />
+ }
+ hidden={!isOptionalFieldEnabled(selectedModel, 'imagePrice')}
+ disabled={!hasValue(selectedModel.inputPrice)}
+ extraText={
+ !isOptionalFieldEnabled(selectedModel, 'imagePrice')
+ ? t('当前未启用,需要时再打开即可。')
+ : ''
+ }
+ />
+
+ handleNumericFieldChange('audioInputPrice', value)
+ }
+ headerAction={
+
+ handleOptionalFieldToggle('audioInputPrice', checked)
+ }
+ />
+ }
+ hidden={!isOptionalFieldEnabled(selectedModel, 'audioInputPrice')}
+ disabled={!hasValue(selectedModel.inputPrice)}
+ extraText={
+ !isOptionalFieldEnabled(
+ selectedModel,
+ 'audioInputPrice',
+ )
+ ? t('当前未启用,需要时再打开即可。')
+ : ''
+ }
+ />
+
+ handleNumericFieldChange('audioOutputPrice', value)
+ }
+ headerAction={
+
+ handleOptionalFieldToggle('audioOutputPrice', checked)
+ }
+ />
+ }
+ hidden={
+ !isOptionalFieldEnabled(selectedModel, 'audioOutputPrice')
+ }
+ disabled={!hasValue(selectedModel.audioInputPrice)}
+ extraText={
+ !isOptionalFieldEnabled(
+ selectedModel,
+ 'audioInputPrice',
+ )
+ ? t('请先开启并填写音频输入价格。')
+ : !isOptionalFieldEnabled(
+ selectedModel,
+ 'audioOutputPrice',
+ )
+ ? t('当前未启用,需要时再打开即可。')
+ : ''
+ }
+ />
+
+ >
+ )}
+
+
+ {t('保存预览')}
+
+ {t(
+ '下面展示这个模型保存后会写入哪些后端字段,便于和原始 JSON 编辑框保持一致。',
+ )}
+
+
+ {previewRows.map((row) => (
+
+ {row.label}
+ {row.value}
+
+ ))}
+
+
+
+ )}
+