fix: click twice for submitting deployment form, using iconfont static files

This commit is contained in:
jialin
2026-05-29 16:19:17 +08:00
committed by jialin
parent 34098e8950
commit 7e048ee537
14 changed files with 3055 additions and 10 deletions
+1 -2
View File
@@ -3,7 +3,6 @@ node_modules
.umi-production
public/static/*.js
public/static/*.css
src/components/icon-font/iconfont/iconfont.js
src/components/icon-font/iconfont/*.css
src/components/iconfont/
+1 -1
View File
@@ -3,5 +3,5 @@ module.exports = {
rules: {
'selector-class-pattern': null
},
ignoreFiles: ['public/static/*.css']
ignoreFiles: ['public/static/*.css', 'src/components/iconfont/iconfont.css']
};
+2 -1
View File
@@ -14,7 +14,8 @@ export default defineConfig([
'dist',
'src/.umi/',
'src/.umi-production/',
'src/.umi-test/'
'src/.umi-test/',
'src/components/iconfont/'
]),
{
files: ['**/*.{ts,tsx,js,jsx}'],
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
+2 -1
View File
@@ -1,6 +1,7 @@
import { routeCacheAtom, setRouteCache } from '@/atoms/route-cache';
import { userAtom } from '@/atoms/user';
import DarkMask from '@/components/dark-mask';
import '@/components/iconfont/iconfont.js';
import PluginExtraFields from '@/components/plugin-extra-fields';
import routeCachekey from '@/config/route-cachekey';
import { DEFAULT_ENTER_PAGE, GPUSTACK_API_BASE_URL } from '@/config/settings';
@@ -356,7 +357,7 @@ export default (props: any) => {
config={{
apiBaseUrl: GPUSTACK_API_BASE_URL,
theme: userSettings.theme,
iconUrl: '//at.alicdn.com/t/c/font_4613488_jmdepcs90im.js',
iconUrl: '',
isDarkTheme: userSettings.isDarkTheme,
defaultColorPrimary: COLOR_PRIMARY
}}
@@ -30,6 +30,7 @@ interface FormContextProps {
flatBackendOptions: BackendOption[];
initialValues?: FormData; // for editing model
modelContextData?: Record<string, any>;
submitAttempted?: boolean;
clearCacheFormValues?: () => void;
onValuesChange?: (changedValues: any, allValues: any) => void;
onBackendChange: (backend: string, option: any) => void;
+5
View File
@@ -101,6 +101,7 @@ const DataForm: React.FC<DataFormProps> = forwardRef((props, ref) => {
const [form] = Form.useForm();
const intl = useIntl();
const [activeKey, setActiveKey] = React.useState<string[]>([]);
const [submitAttempted, setSubmitAttempted] = React.useState(false);
const { modelContextData, fetchContextLength } = useQueryContextLength();
const localPath = Form.useWatch('local_path', form);
const modelScopeModelId = Form.useWatch('model_scope_model_id', form);
@@ -229,6 +230,7 @@ const DataForm: React.FC<DataFormProps> = forwardRef((props, ref) => {
..._.omit(data, ['scheduleType']),
...gpuSelector
};
console.log('submit form data:', allValues);
onOk(allValues);
};
@@ -282,6 +284,8 @@ const DataForm: React.FC<DataFormProps> = forwardRef((props, ref) => {
};
const handleOnFinishFailed = (errorInfo: any) => {
setSubmitAttempted(true);
console.log('Failed:', errorInfo);
const { errorFields } = errorInfo;
if (errorFields && errorFields.length > 0) {
const collapseKeys: string[] = [];
@@ -398,6 +402,7 @@ const DataForm: React.FC<DataFormProps> = forwardRef((props, ref) => {
workerLabelOptions: workerLabelOptions,
initialValues: initialValues,
modelContextData: modelContextData,
submitAttempted: submitAttempted,
clearCacheFormValues: clearCacheFormValues,
onValuesChange: onValuesChange,
onBackendChange: handleBackendChange
+3 -4
View File
@@ -2,6 +2,7 @@ import { MetadataList } from '@gpustack/core-ui';
import { useIntl } from '@umijs/max';
import { Form } from 'antd';
import { useEffect, useMemo, useRef, useState } from 'react';
import { useFormContext } from '../config/form-context';
import { FormData, LoraListItem } from '../config/types';
import useQueryModelLoraList from '../services/use-query-lora-list';
import LoraItem from './lora-list-item';
@@ -20,9 +21,10 @@ const ModelLoraList = () => {
console.log('fetching lora list with base', base, form.getFieldsValue());
const { dataList: defaultDataList, fetchData } = useQueryModelLoraList();
const { submitAttempted } = useFormContext();
const validated = !!submitAttempted;
const [itemList, setItemList] = useState<ItemValue[]>([]);
const [validated, setValidated] = useState(false);
const initializedRef = useRef(false);
const prevBaseRef = useRef<string>('');
@@ -150,9 +152,6 @@ const ModelLoraList = () => {
rules={[
{
validator: async (_, value: LoraListItem[]) => {
if (!validated) {
setValidated(true);
}
if (!value || value.length === 0) return;
for (const it of value) {
+1 -1
View File
@@ -206,7 +206,7 @@ const Login = () => {
config={{
apiBaseUrl: GPUSTACK_API_BASE_URL,
theme: userSettings.theme,
iconUrl: '//at.alicdn.com/t/c/font_4613488_vy4szhexci.js',
iconUrl: '',
isDarkTheme: userSettings.isDarkTheme,
defaultColorPrimary: COLOR_PRIMARY
}}