From e5baa6ee1cfcbedceec7466df02076ea87c35250 Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Thu, 3 Apr 2025 20:42:08 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20Enhance=20ModelSettingsVisu?= =?UTF-8?q?alEditor=20with=20pricing=20modes=20and=20improved=20model=20ma?= =?UTF-8?q?nagement=20features?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Operation/ModelSettingsVisualEditor.js | 420 +++++++++++++++--- 1 file changed, 363 insertions(+), 57 deletions(-) diff --git a/web/src/pages/Setting/Operation/ModelSettingsVisualEditor.js b/web/src/pages/Setting/Operation/ModelSettingsVisualEditor.js index b8a1ae50..114d82de 100644 --- a/web/src/pages/Setting/Operation/ModelSettingsVisualEditor.js +++ b/web/src/pages/Setting/Operation/ModelSettingsVisualEditor.js @@ -1,10 +1,12 @@ // ModelSettingsVisualEditor.js -import React, { useEffect, useState } from 'react'; -import { Table, Button, Input, Modal, Form, Space } from '@douyinfe/semi-ui'; -import { IconDelete, IconPlus, IconSearch, IconSave } from '@douyinfe/semi-icons'; +import React, { useContext, useEffect, useState, useRef } from 'react'; +import { Table, Button, Input, Modal, Form, Space, RadioGroup, Radio, Tabs, TabPane } from '@douyinfe/semi-ui'; +import { IconDelete, IconPlus, IconSearch, IconSave, IconEdit } from '@douyinfe/semi-icons'; import { showError, showSuccess } from '../../../helpers'; import { API } from '../../../helpers'; import { useTranslation } from 'react-i18next'; +import { StatusContext } from '../../../context/Status/index.js'; +import { getQuotaPerUnit } from '../../../helpers/render.js'; export default function ModelSettingsVisualEditor(props) { const { t } = useTranslation(); @@ -14,7 +16,11 @@ export default function ModelSettingsVisualEditor(props) { const [searchText, setSearchText] = useState(''); const [currentPage, setCurrentPage] = useState(1); const [loading, setLoading] = useState(false); + const [pricingMode, setPricingMode] = useState('per-token'); // 'per-token' or 'per-request' + const [pricingSubMode, setPricingSubMode] = useState('ratio'); // 'ratio' or 'token-price' + const formRef = useRef(null); const pageSize = 10; + const quotaPerUnit = getQuotaPerUnit() useEffect(() => { try { @@ -171,11 +177,19 @@ export default function ModelSettingsVisualEditor(props) { title: t('操作'), key: 'action', render: (_, record) => ( - +