diff --git a/web/src/components/settings/ChatsSetting.js b/web/src/components/settings/ChatsSetting.js index 6330808d..cc345594 100644 --- a/web/src/components/settings/ChatsSetting.js +++ b/web/src/components/settings/ChatsSetting.js @@ -1,7 +1,7 @@ import React, { useEffect, useState } from 'react'; import { Card, Spin } from '@douyinfe/semi-ui'; import SettingsChats from '../../pages/Setting/Chat/SettingsChats.js'; -import { API, showError } from '../../helpers'; +import { API, showError, toBoolean } from '../../helpers'; const ChatsSetting = () => { let [inputs, setInputs] = useState({ @@ -21,7 +21,7 @@ const ChatsSetting = () => { item.key.endsWith('Enabled') || ['DefaultCollapseSidebar'].includes(item.key) ) { - newInputs[item.key] = item.value === 'true' ? true : false; + newInputs[item.key] = toBoolean(item.value); } else { newInputs[item.key] = item.value; } diff --git a/web/src/components/settings/DashboardSetting.js b/web/src/components/settings/DashboardSetting.js index 4fa1ad10..ac1a73ed 100644 --- a/web/src/components/settings/DashboardSetting.js +++ b/web/src/components/settings/DashboardSetting.js @@ -1,6 +1,6 @@ import React, { useEffect, useState, useMemo } from 'react'; import { Card, Spin, Button, Modal } from '@douyinfe/semi-ui'; -import { API, showError, showSuccess } from '../../helpers'; +import { API, showError, showSuccess, toBoolean } from '../../helpers'; import SettingsAPIInfo from '../../pages/Setting/Dashboard/SettingsAPIInfo.js'; import SettingsAnnouncements from '../../pages/Setting/Dashboard/SettingsAnnouncements.js'; import SettingsFAQ from '../../pages/Setting/Dashboard/SettingsFAQ.js'; @@ -45,7 +45,7 @@ const DashboardSetting = () => { } if (item.key.endsWith('Enabled') && (item.key === 'DataExportEnabled')) { - newInputs[item.key] = item.value === 'true' ? true : false; + newInputs[item.key] = toBoolean(item.value); } }); setInputs(newInputs); diff --git a/web/src/components/settings/DrawingSetting.js b/web/src/components/settings/DrawingSetting.js index d2cdce1e..7b35ea64 100644 --- a/web/src/components/settings/DrawingSetting.js +++ b/web/src/components/settings/DrawingSetting.js @@ -1,7 +1,7 @@ import React, { useEffect, useState } from 'react'; import { Card, Spin } from '@douyinfe/semi-ui'; import SettingsDrawing from '../../pages/Setting/Drawing/SettingsDrawing.js'; -import { API, showError } from '../../helpers'; +import { API, showError, toBoolean } from '../../helpers'; const DrawingSetting = () => { let [inputs, setInputs] = useState({ @@ -23,7 +23,7 @@ const DrawingSetting = () => { let newInputs = {}; data.forEach((item) => { if (item.key.endsWith('Enabled')) { - newInputs[item.key] = item.value === 'true' ? true : false; + newInputs[item.key] = toBoolean(item.value); } else { newInputs[item.key] = item.value; } diff --git a/web/src/components/settings/ModelSetting.js b/web/src/components/settings/ModelSetting.js index 1d583634..5f81ecb6 100644 --- a/web/src/components/settings/ModelSetting.js +++ b/web/src/components/settings/ModelSetting.js @@ -1,7 +1,7 @@ import React, { useEffect, useState } from 'react'; import { Card, Spin, Tabs } from '@douyinfe/semi-ui'; -import { API, showError, showSuccess } from '../../helpers'; +import { API, showError, showSuccess, toBoolean } from '../../helpers'; import { useTranslation } from 'react-i18next'; import SettingGeminiModel from '../../pages/Setting/Model/SettingGeminiModel.js'; import SettingClaudeModel from '../../pages/Setting/Model/SettingClaudeModel.js'; @@ -44,7 +44,7 @@ const ModelSetting = () => { } } if (item.key.endsWith('Enabled') || item.key.endsWith('enabled')) { - newInputs[item.key] = item.value === 'true' ? true : false; + newInputs[item.key] = toBoolean(item.value); } else { newInputs[item.key] = item.value; } diff --git a/web/src/components/settings/OperationSetting.js b/web/src/components/settings/OperationSetting.js index 75a5c81a..baebe026 100644 --- a/web/src/components/settings/OperationSetting.js +++ b/web/src/components/settings/OperationSetting.js @@ -5,7 +5,7 @@ import SettingsSensitiveWords from '../../pages/Setting/Operation/SettingsSensit import SettingsLog from '../../pages/Setting/Operation/SettingsLog.js'; import SettingsMonitoring from '../../pages/Setting/Operation/SettingsMonitoring.js'; import SettingsCreditLimit from '../../pages/Setting/Operation/SettingsCreditLimit.js'; -import { API, showError } from '../../helpers'; +import { API, showError, toBoolean } from '../../helpers'; const OperationSetting = () => { let [inputs, setInputs] = useState({ @@ -54,7 +54,7 @@ const OperationSetting = () => { item.key.endsWith('Enabled') || ['DefaultCollapseSidebar'].includes(item.key) ) { - newInputs[item.key] = item.value === 'true' ? true : false; + newInputs[item.key] = toBoolean(item.value); } else { newInputs[item.key] = item.value; } diff --git a/web/src/components/settings/PaymentSetting.js b/web/src/components/settings/PaymentSetting.js index 91a40a2b..a65a57b7 100644 --- a/web/src/components/settings/PaymentSetting.js +++ b/web/src/components/settings/PaymentSetting.js @@ -2,7 +2,7 @@ import React, { useEffect, useState } from 'react'; import { Card, Spin } from '@douyinfe/semi-ui'; import SettingsGeneralPayment from '../../pages/Setting/Payment/SettingsGeneralPayment.js'; import SettingsPaymentGateway from '../../pages/Setting/Payment/SettingsPaymentGateway.js'; -import { API, showError } from '../../helpers'; +import { API, showError, toBoolean } from '../../helpers'; import { useTranslation } from 'react-i18next'; const PaymentSetting = () => { @@ -42,7 +42,7 @@ const PaymentSetting = () => { break; default: if (item.key.endsWith('Enabled')) { - newInputs[item.key] = item.value === 'true' ? true : false; + newInputs[item.key] = toBoolean(item.value); } else { newInputs[item.key] = item.value; } diff --git a/web/src/components/settings/RateLimitSetting.js b/web/src/components/settings/RateLimitSetting.js index 21580d1a..e7f105ec 100644 --- a/web/src/components/settings/RateLimitSetting.js +++ b/web/src/components/settings/RateLimitSetting.js @@ -1,7 +1,7 @@ import React, { useEffect, useState } from 'react'; import { Card, Spin } from '@douyinfe/semi-ui'; -import { API, showError } from '../../helpers/index.js'; +import { API, showError, toBoolean } from '../../helpers/index.js'; import { useTranslation } from 'react-i18next'; import RequestRateLimit from '../../pages/Setting/RateLimit/SettingsRequestRateLimit.js'; @@ -28,7 +28,7 @@ const RateLimitSetting = () => { } if (item.key.endsWith('Enabled')) { - newInputs[item.key] = item.value === 'true' ? true : false; + newInputs[item.key] = toBoolean(item.value); } else { newInputs[item.key] = item.value; } diff --git a/web/src/components/settings/RatioSetting.js b/web/src/components/settings/RatioSetting.js index b0284e1d..01c2637c 100644 --- a/web/src/components/settings/RatioSetting.js +++ b/web/src/components/settings/RatioSetting.js @@ -8,7 +8,7 @@ import ModelSettingsVisualEditor from '../../pages/Setting/Ratio/ModelSettingsVi import ModelRatioNotSetEditor from '../../pages/Setting/Ratio/ModelRationNotSetEditor.js'; import UpstreamRatioSync from '../../pages/Setting/Ratio/UpstreamRatioSync.js'; -import { API, showError } from '../../helpers'; +import { API, showError, toBoolean } from '../../helpers'; const RatioSetting = () => { const { t } = useTranslation(); @@ -51,7 +51,7 @@ const RatioSetting = () => { } } if (['DefaultUseAutoGroup', 'ExposeRatioEnabled'].includes(item.key)) { - newInputs[item.key] = item.value === 'true' ? true : false; + newInputs[item.key] = toBoolean(item.value); } else { newInputs[item.key] = item.value; } diff --git a/web/src/components/settings/SystemSetting.js b/web/src/components/settings/SystemSetting.js index 0699e6cc..aec8ea69 100644 --- a/web/src/components/settings/SystemSetting.js +++ b/web/src/components/settings/SystemSetting.js @@ -17,6 +17,7 @@ import { removeTrailingSlash, showError, showSuccess, + toBoolean, } from '../../helpers'; import axios from 'axios'; import { useTranslation } from 'react-i18next'; @@ -106,7 +107,7 @@ const SystemSetting = () => { case 'LinuxDOOAuthEnabled': case 'oidc.enabled': case 'WorkerAllowHttpImageRequestEnabled': - item.value = item.value === 'true'; + item.value = toBoolean(item.value); break; case 'Price': case 'MinTopUp': diff --git a/web/src/helpers/boolean.js b/web/src/helpers/boolean.js new file mode 100644 index 00000000..692196e0 --- /dev/null +++ b/web/src/helpers/boolean.js @@ -0,0 +1,10 @@ +export const toBoolean = (value) => { + // 兼容字符串、数字以及布尔原生类型 + if (typeof value === 'boolean') return value; + if (typeof value === 'number') return value === 1; + if (typeof value === 'string') { + const v = value.toLowerCase(); + return v === 'true' || v === '1'; + } + return false; +}; \ No newline at end of file diff --git a/web/src/helpers/index.js b/web/src/helpers/index.js index 1524afbe..507a3df1 100644 --- a/web/src/helpers/index.js +++ b/web/src/helpers/index.js @@ -6,3 +6,4 @@ export * from './render'; export * from './log'; export * from './data'; export * from './token'; +export * from './boolean';