chore(stage-pages): resolve type

This commit is contained in:
RainbowBird
2026-05-08 21:34:11 +08:00
parent f8d1fa7a64
commit 54b0af0a08
3 changed files with 23 additions and 8 deletions
+2 -2
View File
@@ -685,7 +685,7 @@ pages:
empty: Здесь пока ничего нет. Добавьте одно ниже!
add:
title: Новый
description: "Заполните новый сервер, затем нажмите кнопку «Сохранить и перезапустить» — он будет перемещен в «Конфигурация» выше."
description: 'Заполните новый сервер, затем нажмите кнопку «Сохранить и перезапустить» — он будет перемещен в «Конфигурация» выше.'
pending-badge: Не сохранено
status:
unknown: Не загружен
@@ -902,7 +902,7 @@ pages:
description: >-
Провайдеры транскрипции (speech-to-text): Whisper.cpp, OpenAI, Azure Speech
artistry:
title: Artistry
title: Artistry
description: Поставщики моделей генерации и создания изображений, например ComfyUI, Replicate.
items:
comfyui:
@@ -685,7 +685,7 @@ pages:
empty: 这里什么都还没有哦,在下面添加一个!
add:
title: 新建
description: "填写新的服务器配置,然后点击「保存并重启」,完成后将会更新至上方的「已配置」"
description: '填写新的服务器配置,然后点击「保存并重启」,完成后将会更新至上方的「已配置」'
pending-badge: 未保存
status:
unknown: 未加载
@@ -159,6 +159,16 @@ function setFieldValue(key: string, value: unknown) {
providerConfigEdit.value.config[key] = value
}
// NOTICE: Bridges the polymorphic `Record<string, unknown>` config store and typed
// string inputs (ProviderApiKeyInput / ProviderBaseUrlInput / ProviderAccountIdInput /
// FieldCombobox). The schema layer (createProviderConfig) already guarantees these
// fields are strings; this is the single boundary point where we coerce. Removable
// once `InferenceServiceProvider.config` is narrowed per-provider via the schema.
function getStringField(key: string): string {
const value = providerConfigEdit.value?.config?.[key]
return typeof value === 'string' ? value : ''
}
const headerRows = ref<Array<{ key: string, value: string }>>([{ key: '', value: '' }])
const isSyncingHeaders = ref(false)
@@ -401,28 +411,31 @@ function handleDeleteProvider() {
<div v-for="field in basicFields" :key="field.key">
<ProviderApiKeyInput
v-if="field.key === 'apiKey'"
v-model="providerConfigEdit.config[field.key]"
:model-value="getStringField(field.key)"
:provider-name="providerDefinition?.nameLocalize({ t }) || providerDefinition?.name || ''"
:label="field.label"
:description="field.description"
:placeholder="field.placeholder"
:required="field.required"
@update:model-value="setFieldValue(field.key, $event)"
/>
<ProviderBaseUrlInput
v-else-if="field.key === 'baseUrl'"
v-model="providerConfigEdit.config[field.key]"
:model-value="getStringField(field.key)"
:label="field.label"
:description="field.description"
:placeholder="field.placeholder"
:required="field.required"
@update:model-value="setFieldValue(field.key, $event)"
/>
<ProviderAccountIdInput
v-else-if="field.key === 'accountId'"
v-model="providerConfigEdit.config[field.key]"
:model-value="getStringField(field.key)"
:label="field.label"
:description="field.description"
:placeholder="field.placeholder"
:required="field.required"
@update:model-value="setFieldValue(field.key, $event)"
/>
<FieldInput
v-else
@@ -456,19 +469,21 @@ function handleDeleteProvider() {
/>
<ProviderBaseUrlInput
v-else-if="field.key === 'baseUrl'"
v-model="providerConfigEdit.config[field.key]"
:model-value="getStringField(field.key)"
:label="field.label"
:description="field.description"
:placeholder="field.placeholder"
:required="field.required"
@update:model-value="setFieldValue(field.key, $event)"
/>
<FieldCombobox
v-else-if="field.type === 'select'"
v-model="providerConfigEdit.config[field.key]"
:model-value="getStringField(field.key)"
:label="field.label"
:description="field.description"
:placeholder="field.placeholder"
:options="field.options"
@update:model-value="setFieldValue(field.key, $event)"
/>
<FieldInput
v-else