| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| import React, { useEffect, useState } from 'react';
|
| import { Card, Spin, Tabs } from '@douyinfe/semi-ui';
|
| import { useTranslation } from 'react-i18next';
|
|
|
| import GroupRatioSettings from '../../pages/Setting/Ratio/GroupRatioSettings';
|
| import ModelRatioSettings from '../../pages/Setting/Ratio/ModelRatioSettings';
|
| import ModelSettingsVisualEditor from '../../pages/Setting/Ratio/ModelSettingsVisualEditor';
|
| import ModelRatioNotSetEditor from '../../pages/Setting/Ratio/ModelRationNotSetEditor';
|
| import UpstreamRatioSync from '../../pages/Setting/Ratio/UpstreamRatioSync';
|
|
|
| import { API, showError, toBoolean } from '../../helpers';
|
|
|
| const RatioSetting = () => {
|
| const { t } = useTranslation();
|
|
|
| let [inputs, setInputs] = useState({
|
| ModelPrice: '',
|
| ModelRatio: '',
|
| CacheRatio: '',
|
| CompletionRatio: '',
|
| GroupRatio: '',
|
| GroupGroupRatio: '',
|
| ImageRatio: '',
|
| AudioRatio: '',
|
| AudioCompletionRatio: '',
|
| AutoGroups: '',
|
| DefaultUseAutoGroup: false,
|
| ExposeRatioEnabled: false,
|
| UserUsableGroups: '',
|
| 'group_ratio_setting.group_special_usable_group': '',
|
| });
|
|
|
| const [loading, setLoading] = useState(false);
|
|
|
| const getOptions = async () => {
|
| const res = await API.get('/api/option/');
|
| const { success, message, data } = res.data;
|
| if (success) {
|
| let newInputs = {};
|
| data.forEach((item) => {
|
| if (item.value.startsWith('{') || item.value.startsWith('[')) {
|
| try {
|
| item.value = JSON.stringify(JSON.parse(item.value), null, 2);
|
| } catch (e) {
|
|
|
| }
|
| }
|
| if (['DefaultUseAutoGroup', 'ExposeRatioEnabled'].includes(item.key)) {
|
| newInputs[item.key] = toBoolean(item.value);
|
| } else {
|
| newInputs[item.key] = item.value;
|
| }
|
| });
|
| setInputs(newInputs);
|
| } else {
|
| showError(message);
|
| }
|
| };
|
|
|
| const onRefresh = async () => {
|
| try {
|
| setLoading(true);
|
| await getOptions();
|
| } catch (error) {
|
| showError('刷新失败');
|
| } finally {
|
| setLoading(false);
|
| }
|
| };
|
|
|
| useEffect(() => {
|
| onRefresh();
|
|
|
| }, []);
|
|
|
| return (
|
| <Spin spinning={loading} size='large'>
|
| {/* 模型倍率设置以及可视化编辑器 */}
|
| <Card style={{ marginTop: '10px' }}>
|
| <Tabs type='card'>
|
| <Tabs.TabPane tab={t('模型倍率设置')} itemKey='model'>
|
| <ModelRatioSettings options={inputs} refresh={onRefresh} />
|
| </Tabs.TabPane>
|
| <Tabs.TabPane tab={t('分组倍率设置')} itemKey='group'>
|
| <GroupRatioSettings options={inputs} refresh={onRefresh} />
|
| </Tabs.TabPane>
|
| <Tabs.TabPane tab={t('可视化倍率设置')} itemKey='visual'>
|
| <ModelSettingsVisualEditor options={inputs} refresh={onRefresh} />
|
| </Tabs.TabPane>
|
| <Tabs.TabPane tab={t('未设置倍率模型')} itemKey='unset_models'>
|
| <ModelRatioNotSetEditor options={inputs} refresh={onRefresh} />
|
| </Tabs.TabPane>
|
| <Tabs.TabPane tab={t('上游倍率同步')} itemKey='upstream_sync'>
|
| <UpstreamRatioSync options={inputs} refresh={onRefresh} />
|
| </Tabs.TabPane>
|
| </Tabs>
|
| </Card>
|
| </Spin>
|
| );
|
| };
|
|
|
| export default RatioSetting;
|
|
|