11import { obcluster } from '@/api' ;
2+ import { CustomFormItem } from '@/components/CustomFormItem' ;
3+ import InputNumber from '@/components/InputNumber' ;
4+ import SelectWithTooltip from '@/components/SelectWithTooltip' ;
5+ import { MINIMAL_CONFIG , SUFFIX_UNIT } from '@/constants' ;
6+ import { getStorageClasses } from '@/services' ;
27import { intl } from '@/utils/intl' ;
38import { useRequest } from 'ahooks' ;
4- import { Button , Col , Drawer , Form , Input , message , Row , Space } from 'antd' ;
5- import React from 'react' ;
9+ import { Button , Col , Drawer , Form , Row , Space , message } from 'antd' ;
10+ import React , { useEffect } from 'react' ;
611
712export interface ParametersModalProps {
813 visible : boolean ;
@@ -13,6 +18,46 @@ export interface ParametersModalProps {
1318 namespace : string ;
1419}
1520
21+ export const TooltipItemContent = ( { item } ) => {
22+ return (
23+ < ul style = { { margin : 0 , padding : '10px' } } >
24+ { item . toolTipData . map ( ( data : any ) => {
25+ const key = Object . keys ( data ) [ 0 ] ;
26+ if ( typeof data [ key ] === 'string' ) {
27+ return (
28+ < li style = { { listStyle : 'none' } } key = { key } >
29+ < div
30+ style = { {
31+ display : 'flex' ,
32+ justifyContent : 'space-between' ,
33+ } }
34+ >
35+ < p > { key } :</ p >
36+ < p > { data [ key ] } </ p >
37+ </ div >
38+ </ li >
39+ ) ;
40+ } else {
41+ const value = JSON . stringify ( data [ key ] ) || String ( data [ key ] ) ;
42+ return (
43+ < li style = { { listStyle : 'none' } } key = { key } >
44+ < div
45+ style = { {
46+ display : 'flex' ,
47+ justifyContent : 'space-between' ,
48+ } }
49+ >
50+ < p > { key } :</ p >
51+ < p > { value } </ p >
52+ </ div >
53+ </ li >
54+ ) ;
55+ }
56+ } ) }
57+ </ ul >
58+ ) ;
59+ } ;
60+
1661const ResourceDrawer : React . FC < ParametersModalProps > = ( {
1762 visible,
1863 onCancel,
@@ -24,6 +69,34 @@ const ResourceDrawer: React.FC<ParametersModalProps> = ({
2469 const [ form ] = Form . useForm < API . CreateClusterData > ( ) ;
2570 const { validateFields } = form ;
2671
72+ useEffect ( ( ) => {
73+ const data = { } ;
74+ const log = { } ;
75+ const redoLog = { } ;
76+
77+ initialValues ?. forEach ( ( item ) => {
78+ if ( item . type === 'data' ) {
79+ data [ item . label ] = item . value ;
80+ }
81+ if ( item . type === 'log' ) {
82+ log [ item . label ] = item . value ;
83+ }
84+ if ( item . type === 'redoLog' ) {
85+ redoLog [ item . label ] = item . value ;
86+ }
87+ } ) ;
88+
89+ form . setFieldValue ( [ 'storage' ] , {
90+ data,
91+ log,
92+ redoLog,
93+ } ) ;
94+ } , [ initialValues ] ) ;
95+
96+ const { data : storageClassesRes } = useRequest ( getStorageClasses , { } ) ;
97+
98+ const storageClasses = storageClassesRes ?. data ;
99+
27100 const { runAsync : patchOBCluster , loading } = useRequest (
28101 obcluster . patchOBCluster ,
29102 {
@@ -42,6 +115,9 @@ const ResourceDrawer: React.FC<ParametersModalProps> = ({
42115 } ,
43116 ) ;
44117
118+ const fontStyle : React . CSSProperties = {
119+ fontWeight : 600 ,
120+ } ;
45121 return (
46122 < Drawer
47123 title = { '存储资源编辑' }
@@ -57,38 +133,7 @@ const ResourceDrawer: React.FC<ParametersModalProps> = ({
57133 loading = { loading }
58134 onClick = { ( ) => {
59135 validateFields ( ) . then ( ( value ) => {
60- const { resource } = value ;
61-
62- const date = resource
63- ?. filter ( ( item ) => item . type === 'data' )
64- ?. map ( ( item1 ) =>
65- item1 . label === 'size'
66- ? { size : item1 . value }
67- : { storageClass : item1 . value } ,
68- ) ;
69- const log = resource
70- ?. filter ( ( item ) => item . type === 'log' )
71- ?. map ( ( item1 ) =>
72- item1 . label === 'size'
73- ? { size : item1 . value }
74- : { storageClass : item1 . value } ,
75- ) ;
76- const redoLog = resource
77- ?. filter ( ( item ) => item . type === 'redoLog' )
78- ?. map ( ( item1 ) =>
79- item1 . label === 'size'
80- ? { size : item1 . value }
81- : { storageClass : item1 . value } ,
82- ) ;
83-
84- const body = {
85- storage : {
86- data : date ,
87- log : log ,
88- redoLog : redoLog ,
89- } ,
90- } ;
91- patchOBCluster ( name , namespace , body , `存储资源编辑成功` ) ;
136+ patchOBCluster ( name , namespace , value , `存储资源编辑成功` ) ;
92137 } ) ;
93138 } }
94139 >
@@ -97,77 +142,106 @@ const ResourceDrawer: React.FC<ParametersModalProps> = ({
97142 </ Space >
98143 }
99144 >
100- < Form form = { form } layout = "vertical" style = { { marginBottom : 56 } } >
101- < Form . List name = "resource" initialValue = { initialValues } >
102- { ( fields ) => (
103- < >
104- { fields . map ( ( { key, name } , index ) => {
105- return (
106- < div key = { key } >
107- < Row gutter = { 8 } >
108- < Col span = { 10 } >
109- < Form . Item
110- label = {
111- index === 0 &&
112- intl . formatMessage ( {
113- id : 'src.pages.Cluster.Detail.Overview.0F9AD89D' ,
114- defaultMessage : '参数名' ,
115- } )
116- }
117- name = { [ name , 'key' ] }
118- rules = { [
119- {
120- required : true ,
121- message : intl . formatMessage ( {
122- id : 'src.pages.Cluster.Detail.Overview.F0473B44' ,
123- defaultMessage : '请输入参数名' ,
124- } ) ,
125- } ,
126- ] }
127- >
128- < Input
129- placeholder = { intl . formatMessage ( {
130- id : 'src.pages.Cluster.Detail.Overview.C118F812' ,
131- defaultMessage : '请输入' ,
132- } ) }
133- />
134- </ Form . Item >
135- </ Col >
136- < Col span = { 10 } >
137- < Form . Item
138- label = {
139- index === 0 &&
140- intl . formatMessage ( {
141- id : 'src.pages.Cluster.Detail.Overview.4E02366B' ,
142- defaultMessage : '参数值' ,
143- } )
144- }
145- name = { [ name , 'value' ] }
146- rules = { [
147- {
148- required : true ,
149- message : intl . formatMessage ( {
150- id : 'src.pages.Cluster.Detail.Overview.5DA70D14' ,
151- defaultMessage : '请输入参数值' ,
152- } ) ,
153- } ,
154- ] }
155- >
156- < Input
157- placeholder = { intl . formatMessage ( {
158- id : 'src.pages.Cluster.Detail.Overview.E26B7DFD' ,
159- defaultMessage : '请输入' ,
160- } ) }
161- />
162- </ Form . Item >
163- </ Col >
164- </ Row >
165- </ div >
166- ) ;
167- } ) }
168- </ >
169- ) }
170- </ Form . List >
145+ < Form form = { form } layout = "vertical" >
146+ < Row gutter = { 16 } >
147+ < Col span = { 24 } >
148+ < p style = { fontStyle } > 数据</ p >
149+ < div style = { { display : 'flex' , justifyContent : 'flex-start' } } >
150+ < CustomFormItem
151+ style = { { marginRight : '8px' } }
152+ label = "size"
153+ name = { [ 'storage' , 'data' , 'size' ] }
154+ >
155+ < InputNumber
156+ min = { MINIMAL_CONFIG . data }
157+ addonAfter = { SUFFIX_UNIT }
158+ placeholder = { intl . formatMessage ( {
159+ id : 'OBDashboard.Cluster.New.Observer.PleaseEnter' ,
160+ defaultMessage : '请输入' ,
161+ } ) }
162+ />
163+ </ CustomFormItem >
164+ < CustomFormItem
165+ label = "storageClass"
166+ name = { [ 'storage' , 'data' , 'storageClass' ] }
167+ >
168+ { storageClasses && (
169+ < SelectWithTooltip
170+ name = { [ 'storage' , 'data' , 'storageClass' ] }
171+ form = { form }
172+ selectList = { storageClasses }
173+ TooltipItemContent = { TooltipItemContent }
174+ />
175+ ) }
176+ </ CustomFormItem >
177+ </ div >
178+ </ Col >
179+ < Col span = { 24 } >
180+ < p style = { fontStyle } > 日志</ p >
181+ < div style = { { display : 'flex' , justifyContent : 'flex-start' } } >
182+ < CustomFormItem
183+ style = { { marginRight : '8px' } }
184+ label = "size"
185+ name = { [ 'storage' , 'log' , 'size' ] }
186+ >
187+ < InputNumber
188+ min = { MINIMAL_CONFIG . log }
189+ addonAfter = { SUFFIX_UNIT }
190+ placeholder = { intl . formatMessage ( {
191+ id : 'OBDashboard.Cluster.New.Observer.PleaseEnter' ,
192+ defaultMessage : '请输入' ,
193+ } ) }
194+ />
195+ </ CustomFormItem >
196+ < CustomFormItem
197+ label = "storageClass"
198+ name = { [ 'storage' , 'log' , 'storageClass' ] }
199+ >
200+ { storageClasses && (
201+ < SelectWithTooltip
202+ form = { form }
203+ name = { [ 'storage' , 'log' , 'storageClass' ] }
204+ selectList = { storageClasses }
205+ TooltipItemContent = { TooltipItemContent }
206+ />
207+ ) }
208+ </ CustomFormItem >
209+ </ div >
210+ </ Col >
211+ < Col span = { 24 } >
212+ < p style = { fontStyle } > redoLog</ p >
213+ < div style = { { display : 'flex' , justifyContent : 'flex-start' } } >
214+ < CustomFormItem
215+ style = { { marginRight : '8px' } }
216+ label = "size"
217+ name = { [ 'storage' , 'redoLog' , 'size' ] }
218+ >
219+ < InputNumber
220+ min = { MINIMAL_CONFIG . redoLog }
221+ addonAfter = { SUFFIX_UNIT }
222+ placeholder = { intl . formatMessage ( {
223+ id : 'OBDashboard.Cluster.New.Observer.PleaseEnter' ,
224+ defaultMessage : '请输入' ,
225+ } ) }
226+ />
227+ </ CustomFormItem >
228+ < CustomFormItem
229+ label = "storageClass"
230+ validateTrigger = "onBlur"
231+ name = { [ 'storage' , 'redoLog' , 'storageClass' ] }
232+ >
233+ { storageClasses && (
234+ < SelectWithTooltip
235+ form = { form }
236+ name = { [ 'storage' , 'redoLog' , 'storageClass' ] }
237+ selectList = { storageClasses }
238+ TooltipItemContent = { TooltipItemContent }
239+ />
240+ ) }
241+ </ CustomFormItem >
242+ </ div >
243+ </ Col >
244+ </ Row >
171245 </ Form >
172246 </ Drawer >
173247 ) ;
0 commit comments