From b2a8d27178fa5c50cf1a5c5a9497ee2050375f01 Mon Sep 17 00:00:00 2001 From: jialin Date: Mon, 19 Jan 2026 10:37:30 +0800 Subject: [PATCH] feat: provider form --- src/components/icon-font/index.tsx | 2 +- src/components/list-input/index.tsx | 12 +- src/components/list-input/list-item.tsx | 37 +++++-- src/components/seal-form/seal-select.tsx | 6 +- src/components/seal-form/wrapper/select.ts | 6 +- src/pages/maas-provider/apis/index.ts | 4 +- .../components/provider-models.tsx | 62 ++++++++++- src/pages/maas-provider/config/index.ts | 2 +- .../maas-provider/forms/access-token.tsx | 26 +++++ .../maas-provider/forms/advance-config.tsx | 58 ++++++++++ src/pages/maas-provider/forms/basic.tsx | 38 +++++++ src/pages/maas-provider/forms/index.tsx | 104 +++++++++++++++++- .../maas-provider/forms/supported-models.tsx | 75 +++++++++++++ .../hooks/use-create-provider.ts | 11 +- src/pages/maas-provider/index.tsx | 13 +-- 15 files changed, 424 insertions(+), 32 deletions(-) create mode 100644 src/pages/maas-provider/forms/access-token.tsx create mode 100644 src/pages/maas-provider/forms/advance-config.tsx create mode 100644 src/pages/maas-provider/forms/basic.tsx create mode 100644 src/pages/maas-provider/forms/supported-models.tsx diff --git a/src/components/icon-font/index.tsx b/src/components/icon-font/index.tsx index 63ea7fe4..7252140a 100644 --- a/src/components/icon-font/index.tsx +++ b/src/components/icon-font/index.tsx @@ -2,7 +2,7 @@ import { createFromIconfontCN } from '@ant-design/icons'; // import './iconfont/iconfont.js'; const IconFont = createFromIconfontCN({ - scriptUrl: '//at.alicdn.com/t/c/font_4613488_qm5jah0zmp8.js' + scriptUrl: '//at.alicdn.com/t/c/font_4613488_j0qgzymxj98.js' }); export default IconFont; diff --git a/src/components/list-input/index.tsx b/src/components/list-input/index.tsx index ac4f8b73..ed04faee 100644 --- a/src/components/list-input/index.tsx +++ b/src/components/list-input/index.tsx @@ -15,6 +15,13 @@ interface ListInputProps { onChange: (data: string[]) => void; onBlur?: (e: any, index: number) => void; onDelete?: (index: number) => void; + renderItem?: ( + data: any, + props: { + onChange: (value: string) => void; + onBlur?: (e: any) => void; + } + ) => React.ReactNode; } const ListInput: React.FC = (props) => { @@ -28,7 +35,8 @@ const ListInput: React.FC = (props) => { btnText, options, labelExtra, - trim = true + trim = true, + renderItem } = props; const [list, setList] = React.useState<{ value: string; uid: number }[]>([]); const countRef = React.useRef(0); @@ -92,12 +100,14 @@ const ListInput: React.FC = (props) => { onBlur?.(e, index)} onRemove={() => handleOnRemove(index)} onChange={(val) => handleOnChange(val, index)} trim={trim} + renderItem={renderItem} /> ); })} diff --git a/src/components/list-input/list-item.tsx b/src/components/list-input/list-item.tsx index b0b7942d..119b3ced 100644 --- a/src/components/list-input/list-item.tsx +++ b/src/components/list-input/list-item.tsx @@ -8,11 +8,19 @@ interface LabelItemProps { onRemove: () => void; onChange: (value: string) => void; onBlur?: (e: any) => void; + renderItem?: ( + data: any, + props: { + onChange: (value: string) => void; + onBlur?: (e: any) => void; + } + ) => React.ReactNode; value: string; label?: string; placeholder?: string; options?: Global.HintOptions[]; trim?: boolean; + data?: any; } const ListItem: React.FC = (props) => { @@ -23,7 +31,9 @@ const ListItem: React.FC = (props) => { label, value, options, - trim = true + trim = true, + data, + renderItem } = props; const handleOnChange = (value: any) => { @@ -32,15 +42,22 @@ const ListItem: React.FC = (props) => { return (
- + {renderItem ? ( + renderItem(data, { + onChange: handleOnChange, + onBlur + }) + ) : ( + + )} + + ); + }; + + const handleOnChange = (values: string[]) => {}; + + return ( + <> + +
+ +
+ + ); +}; + +export default SupportedModels; diff --git a/src/pages/maas-provider/hooks/use-create-provider.ts b/src/pages/maas-provider/hooks/use-create-provider.ts index 84f8e0ab..78d68188 100644 --- a/src/pages/maas-provider/hooks/use-create-provider.ts +++ b/src/pages/maas-provider/hooks/use-create-provider.ts @@ -19,8 +19,15 @@ const useCreateProvider = (options: { refresh: () => void }) => { provider: null }); - const openModal = () => { - setOpenModalStatus({ ...openModalStatus, open: true }); + const openModal = (action: PageActionType, row?: ListItem) => { + setOpenModalStatus({ + ...openModalStatus, + open: true, + title: action === PageAction.CREATE ? 'Create Provider' : 'Edit Provider', + action, + currentData: row, + provider: row ? row.provider : null + }); }; const closeModal = () => { diff --git a/src/pages/maas-provider/index.tsx b/src/pages/maas-provider/index.tsx index 2619dd42..a7d5340d 100644 --- a/src/pages/maas-provider/index.tsx +++ b/src/pages/maas-provider/index.tsx @@ -22,7 +22,6 @@ import { PROVIDER_MODELS_API, deleteProvider, queryMaasProviders, - queryProviderModels, updateProvider } from './apis'; import AddMaasProvider from './components/add-provider-modal'; @@ -73,7 +72,7 @@ const MaasProvider: React.FC = () => { }); const handleClickDropdown = () => { - openProviderModal(); + openProviderModal('create'); }; const handleModalOk = async (data: FormData) => { @@ -149,10 +148,10 @@ const MaasProvider: React.FC = () => { cluster_id: row.id, page: -1 }; - const data = await queryProviderModels(params, { - token: options?.token - }); - return data?.items || []; + // const data = await queryProviderModels(params, { + // token: options?.token + // }); + return [1, 2, 3]; } ); @@ -217,7 +216,7 @@ const MaasProvider: React.FC = () => { loadend={dataSource.loadend} rowSelection={rowSelection} columns={columns} - childParentKey="cluster_id" + childParentKey="provider_id" expandable={true} empty={