From e76ab23cf06d16be6a1bc08458819ab6217d665b Mon Sep 17 00:00:00 2001 From: cp3hnu Date: Fri, 26 Apr 2024 17:16:33 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E9=80=80=E5=87=BA=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E5=92=8Ctoken=E5=A4=B1=E6=95=88=E7=9A=84=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- react-ui/config/config.ts | 1 + react-ui/src/app.tsx | 17 +------- .../src/components/HeaderDropdown/index.tsx | 9 +---- .../RightContent/AvatarDropdown.tsx | 19 ++------- .../src/components/RightContent/index.tsx | 39 +++++++++---------- .../experimentText/addExperimentModal.tsx | 8 +++- react-ui/src/requestConfig.ts | 28 ++++++------- react-ui/src/services/session.ts | 5 +-- react-ui/src/services/system/auth.ts | 4 +- react-ui/src/utils/ui.tsx | 16 ++++++++ 10 files changed, 68 insertions(+), 78 deletions(-) diff --git a/react-ui/config/config.ts b/react-ui/config/config.ts index 405f85c..4d7d3db 100644 --- a/react-ui/config/config.ts +++ b/react-ui/config/config.ts @@ -163,4 +163,5 @@ export default defineConfig({ }, javascriptEnabled: true, }, + // plugins: ['umi-plugin-keep-alive'], }); diff --git a/react-ui/src/app.tsx b/react-ui/src/app.tsx index 10ab35b..f8a3221 100644 --- a/react-ui/src/app.tsx +++ b/react-ui/src/app.tsx @@ -133,22 +133,7 @@ export const layout: RunTimeLayoutConfig = ({ initialState }) => { // 增加一个 loading 的状态 childrenRender: (children) => { // if (initialState?.loading) return ; - return ( - <> - {children} - {/* { - setInitialState((preInitialState) => ({ - ...preInitialState, - settings, - })); - }} - /> */} - - ); + return <>{children}; }, ...initialState?.settings, }; diff --git a/react-ui/src/components/HeaderDropdown/index.tsx b/react-ui/src/components/HeaderDropdown/index.tsx index ae560fd..36153a7 100644 --- a/react-ui/src/components/HeaderDropdown/index.tsx +++ b/react-ui/src/components/HeaderDropdown/index.tsx @@ -17,13 +17,8 @@ const HeaderDropdown: React.FC = ({ overlayClassName: cls, }, }; }); - return ( - target.parentElement || document.body} - {...restProps} - /> - ); + + return ; }; export default HeaderDropdown; diff --git a/react-ui/src/components/RightContent/AvatarDropdown.tsx b/react-ui/src/components/RightContent/AvatarDropdown.tsx index c6c52a9..fca317e 100644 --- a/react-ui/src/components/RightContent/AvatarDropdown.tsx +++ b/react-ui/src/components/RightContent/AvatarDropdown.tsx @@ -1,13 +1,12 @@ import { clearSessionToken } from '@/access'; -import { PageEnum } from '@/enums/pagesEnums'; import { setRemoteMenu } from '@/services/session'; import { logout } from '@/services/system/auth'; +import { gotoLoginPage } from '@/utils/ui'; import { LogoutOutlined, SettingOutlined, UserOutlined } from '@ant-design/icons'; import { setAlpha } from '@ant-design/pro-components'; import { useEmotionCss } from '@ant-design/use-emotion-css'; import { history, useModel } from '@umijs/max'; import { Avatar, Spin } from 'antd'; -import { stringify } from 'querystring'; import type { MenuInfo } from 'rc-menu/lib/interface'; import React, { useCallback } from 'react'; import { flushSync } from 'react-dom'; @@ -23,7 +22,7 @@ const Name = () => { const nameClassName = useEmotionCss(({ token }) => { return { - width: '70px', + // width: '70px', height: '48px', overflow: 'hidden', lineHeight: '48px', @@ -64,19 +63,7 @@ const AvatarDropdown: React.FC = ({ menu }) => { await logout(); clearSessionToken(); setRemoteMenu(null); - const { search, pathname } = window.location; - const urlParams = new URL(window.location.href).searchParams; - /** 此方法会跳转到 redirect 参数所在的位置 */ - const redirect = urlParams.get('redirect'); - // Note: There may be security issues, please note - if (window.location.pathname !== PageEnum.LOGIN && !redirect) { - history.replace({ - pathname: PageEnum.LOGIN, - search: stringify({ - redirect: pathname + search, - }), - }); - } + gotoLoginPage(); }; const actionClassName = useEmotionCss(({ token }) => { return { diff --git a/react-ui/src/components/RightContent/index.tsx b/react-ui/src/components/RightContent/index.tsx index c2a4a7b..6fbfa37 100644 --- a/react-ui/src/components/RightContent/index.tsx +++ b/react-ui/src/components/RightContent/index.tsx @@ -1,6 +1,5 @@ -import { QuestionCircleOutlined } from '@ant-design/icons'; import { useEmotionCss } from '@ant-design/use-emotion-css'; -import { SelectLang, useModel } from '@umijs/max'; +import { useModel } from '@umijs/max'; import React from 'react'; import Avatar from './AvatarDropdown'; @@ -17,21 +16,21 @@ const GlobalHeaderRight: React.FC = () => { }; }); - const actionClassName = useEmotionCss(({ token }) => { - return { - display: 'flex', - float: 'right', - height: '48px', - marginLeft: 'auto', - overflow: 'hidden', - cursor: 'pointer', - padding: '0 12px', - borderRadius: token.borderRadius, - '&:hover': { - backgroundColor: token.colorBgTextHover, - }, - }; - }); + // const actionClassName = useEmotionCss(({ token }) => { + // return { + // display: 'flex', + // float: 'right', + // height: '48px', + // marginLeft: 'auto', + // overflow: 'hidden', + // cursor: 'pointer', + // padding: '0 12px', + // borderRadius: token.borderRadius, + // '&:hover': { + // backgroundColor: token.colorBgTextHover, + // }, + // }; + // }); const { initialState } = useModel('@@initialState'); @@ -41,15 +40,15 @@ const GlobalHeaderRight: React.FC = () => { return (
- { window.open('https://pro.ant.design/docs/getting-started'); }} > - - + */} + {/* */}
); diff --git a/react-ui/src/pages/Experiment/experimentText/addExperimentModal.tsx b/react-ui/src/pages/Experiment/experimentText/addExperimentModal.tsx index 3e58ee2..1433fb8 100644 --- a/react-ui/src/pages/Experiment/experimentText/addExperimentModal.tsx +++ b/react-ui/src/pages/Experiment/experimentText/addExperimentModal.tsx @@ -145,7 +145,13 @@ function AddExperimentModal({ name="description" rules={[{ required: true, message: '请输入实验描述' }]} > - + { const { status, data } = response; - // console.log('response', response); - if (status >= 200 && status < 300 && data && (data instanceof Blob || data.code === 200)) { - return response; - } else { - if (data && data.msg) { - message.error(data.msg); + if (status >= 200 && status < 300) { + if (data && (data instanceof Blob || data.code === 200)) { + return response; + } else if (data && data.code === 401) { + clearSessionToken(); + setRemoteMenu(null); + gotoLoginPage(false); } else { - message.error('请求失败'); + message.error(data?.msg ?? '请求失败'); + return Promise.reject(response); } + } else { + message.error('请求失败'); return Promise.reject(response); } }, diff --git a/react-ui/src/services/session.ts b/react-ui/src/services/session.ts index 44861d3..39b0ff8 100644 --- a/react-ui/src/services/session.ts +++ b/react-ui/src/services/session.ts @@ -1,8 +1,7 @@ -import { createIcon } from '@/utils/IconUtil'; import { MenuDataItem } from '@ant-design/pro-components'; import { request } from '@umijs/max'; import React, { lazy } from 'react'; -import { createFromIconfontCN } from '@ant-design/icons'; + let remoteMenu: any = null; export function getRemoteMenu() { @@ -101,7 +100,7 @@ export function convertCompatRouters(childrens: API.RoutersMenuItem[]): any[] { return { path: item.path, // icon:'icon-a-057_fenlei', - icon: 'icon-'+item.meta.icon, + icon: 'icon-' + item.meta.icon, // icon: item.meta.icon, name: item.meta.title, routes: item.children ? convertCompatRouters(item.children) : undefined, diff --git a/react-ui/src/services/system/auth.ts b/react-ui/src/services/system/auth.ts index 031b2ef..e69e571 100644 --- a/react-ui/src/services/system/auth.ts +++ b/react-ui/src/services/system/auth.ts @@ -28,8 +28,8 @@ export async function login(body: API.LoginParams, options?: Record /** 退出登录接口 POST /api/login/outLogin */ export async function logout() { - return request>('/api/logout', { - method: 'delete', + return request>('/api/auth/logout', { + method: 'DELETE', }); } diff --git a/react-ui/src/utils/ui.tsx b/react-ui/src/utils/ui.tsx index 51a7414..1ac54b1 100644 --- a/react-ui/src/utils/ui.tsx +++ b/react-ui/src/utils/ui.tsx @@ -3,7 +3,9 @@ * @Date: 2024-04-19 14:42:51 * @Description: UI 公共方法 */ +import { PageEnum } from '@/enums/pagesEnums'; import themes from '@/styles/theme.less'; +import { history } from '@umijs/max'; import { Modal, type ModalFuncProps, type UploadFile } from 'antd'; // 自定义 Confirm 弹框 @@ -43,3 +45,17 @@ export const getFileListFromEvent = (e: any) => { return item; }); }; + +// 去登录页面 +export const gotoLoginPage = (toHome: boolean = true) => { + const { search, pathname } = window.location; + const urlParams = new URLSearchParams(); + urlParams.append('redirect', pathname + search); + const newSearch = toHome ? '' : urlParams.toString(); + if (window.location.pathname !== PageEnum.LOGIN) { + history.replace({ + pathname: PageEnum.LOGIN, + search: newSearch, + }); + } +}; From be873035ad3a8ad9e98d82626d3880f5e780f5d0 Mon Sep 17 00:00:00 2001 From: cp3hnu Date: Sun, 28 Apr 2024 08:46:06 +0800 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20=E5=88=A0=E9=99=A4=E5=A4=87?= =?UTF-8?q?=E4=BB=BD=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../images/backup/component-icon-7-Failed.png | Bin 3217 -> 0 bytes .../images/backup/component-icon-7-Omitted.png | Bin 3115 -> 0 bytes .../images/backup/component-icon-7-Pending.png | Bin 3239 -> 0 bytes .../images/backup/component-icon-7-Running.png | Bin 3084 -> 0 bytes .../images/backup/component-icon-7-Skipped.png | Bin 3115 -> 0 bytes .../images/backup/component-icon-7-Succeeded.png | Bin 3322 -> 0 bytes .../assets/images/backup/component-icon-7.png | Bin 1435 -> 0 bytes .../experimentText/addExperimentModal.tsx | 1 + 8 files changed, 1 insertion(+) delete mode 100644 react-ui/public/assets/images/backup/component-icon-7-Failed.png delete mode 100644 react-ui/public/assets/images/backup/component-icon-7-Omitted.png delete mode 100644 react-ui/public/assets/images/backup/component-icon-7-Pending.png delete mode 100644 react-ui/public/assets/images/backup/component-icon-7-Running.png delete mode 100644 react-ui/public/assets/images/backup/component-icon-7-Skipped.png delete mode 100644 react-ui/public/assets/images/backup/component-icon-7-Succeeded.png delete mode 100644 react-ui/public/assets/images/backup/component-icon-7.png diff --git a/react-ui/public/assets/images/backup/component-icon-7-Failed.png b/react-ui/public/assets/images/backup/component-icon-7-Failed.png deleted file mode 100644 index 2427996b7f47222d2e3408932666352306e6a857..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3217 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 DGP4ez diff --git a/react-ui/public/assets/images/backup/component-icon-7-Omitted.png b/react-ui/public/assets/images/backup/component-icon-7-Omitted.png deleted file mode 100644 index 33a4445eb39e6cc0c934948254aa8b2662edb227..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3115 zcmbVOXFD4T15IK@f~!`E)q$q8X3W}qlr#jPrKvPVtuEtQjZKZ{trBgCrb<<8s%oVK zCA7wkQG3*=+Eiopb^pS9p68tN;e0#i%SpawXTb}BK>z>%ua%{#{fYbiM=KBme+9Yh`ML4s~D6web_~5>7zgG%%zQETmq*>C-bR#z5I%EQfu? z*%UxGwmj7DLpraA*;Sz-4eJ6^<8EatKiele84o8CJQ^;5C9-#e*sZWKoa|C+cJwxG zQevER-8R{-Zm@aH!m%Y{tj_vJB_{|)9inpf@2|= zZkdd#1$kZvn!Q|frn<8a36!PET|lk3Zo5HP{@Bc22fNEmBN88>U0wJ6!<`OSp@*wB zhpQT8`nH4nPqF2M(E=XJ+TV-FyS3A<^tyz^M2o5B$m_>z6Ia5v=98a}}Q@C!!Eif7hPK%T*|M}*pipQF{XNV0y~Q|9eaCX-p?^)-*% zd&dnhCdBDl3B*-j311$N^SMNjxVRC>L>TM;nlW0H?X(DL1EGx}IBGy`E-(^qBQ zpBXN_-sz~x<{FrxA;h8lV0{1JB+GiKb?=;@={1zzgK1jy_#taMQ8lM0B<5jSJBTU> zT3=dSRhOfy<&1!R?s(ue<%Y%;i_tV~#Yr3$#Md}WS+m+O z%@HhxhbhoVaZiSFN%X5L)V7Ane{w=LZzO*j6+~8u{r>zpDb-JJ`8anTwL+&tvMP2OAI9v+t5FA0J*^9j|}7k^$>9W-IwtH0-1O zgTOk+JPox`GVN%S7CicCVR`|Xx8pY4U7ny$;N^E$trResvkDP%7x=ZbKGi}_$x>Z6 z0UqSr2GTAe@=)6B@D&u4l=Nu^EqMUA6@!fKV2#8yMjeGMi9AoRP^HONg_*f<>kS~@ zfhV>|5HK|LMLVpcPc%<2-tFgnl>mp+E>5ompDLOVV~YY*=esC${mTBnnc7*KFLIkg zdpEXYhsc{dBlomya7sDLtf~su?!3X6sG$a_F{KQmbSti{t|kqL-s;s0-N4?*kpwFw zP;=W3t~Z5R(5izn%(s2x zsi$&SdA)i}Ft$~iMdj=O$iqG~mhunJjd(m*OjF zrbkCsAg40>)7;J`zma{0*eh?zH$fin2Du==u6rR0aeHeMf*AiOXs@e$iCc0=vZMe0 z<%qM5^G`y*{b8e!+q4z$2+{iu$0XMHv64`G3lEqRxQx1unV;A=g$fA?xy_KF7<+9$ zTAyrs*(6;7+EX^;@axy5yl6Qm&oo~SX<7Zp{r;)=r(|Nbebwks_SV{|INo799@6qe zr=8h;K;LQNY<;b|X;WfQnBG?4K7;&6w4t!l(|@Y@NK)fCZOcw9hlwxRv*i(W4lra~ z6Kp)JMS%^x#m0Uti(mM4YdcThDR_C7>@miFD&f@P`d4!#TGJLA?yibT zO7^-nM`)j)b=rFO^zx_6*Wb_QJL*PG|8-8B9^njIIEyFXN=jeUt};uU|Eo};A$+fF z<9Em0zt7cuy?1{waZr&S>4Gq(ncur84~y)gY@@1fJL9e*feXoEOpi!xJD|atqf$W+NL^$@8 zjg;Wdw*ghx1bEqF0j(FC+wplSU*af>|r7Q?XZ*4y+^D3$_QI!z0 zcPYMShmIY749F%PMC$0GzuNiwb=wqC0G{;em4`NHov?J*yrT|-Lk7UnSn@Z26$Ou6 z81w;5>)<~Lb12hi>To~)B*$GN>gs)O;v%VweEV%Ra`&ELgPw+6n$kyl`e}IxmdgG8 z&5oteNSs}7ThRp3{Ouj)SM~w=j`$|?gacyWyO%?W#x5g;G=yk4AZvrb?pnjcM3$ipITDi~6HqzN_ z11*|^X$NFtR~BZlLvG2Wd<_K@JR7g;e$a24CR8Gi^DoN`%SEJjA~40f0loG#_GoR6 zO~VgLw?YxWgK%Z7fy^1I?D-Lo$Ay1miXkL`a@`pzgE`ZD@B1J_WfnPaNdIA&J5Vs= z-Rt1xor??Cn$1&hZhG!%Wf&CJ2USBzMAO_t_Hkj4HMD|G$X4uvP*}Q`B34n$zq$#u zaNhO;gMa9TW{tuMm+?-skKXZxDGyW0^~LO01ePV!$`F<6W@H4%0tv55AdOjzPPt3z z5*$5Tn4pql_*5JDOoa){{WM3^_j67KiRJJ`|rmZ z5GvY6qgN&T&PUULrj%HbMM0DjqSVZ3Fg1fiLMls|j?>9n8K?I7z?M~q%z*HgR5WmV zJUC@dr3jVs+2?-Y>uj9pmE1V_S&W9hl;o=**o3)+rB@#Z+U0FAs6)w%Gj%ffap&}b zpWdv2TN2|#M)}!i{`-91Xg26KC4`;EyrI*E(RLA^XbYTpgwEK85$>Ksx9r>!BG2J$Y@MJkR z)MjI9fNHsc5vk2v*Xx60G!zhih4IogQ4!v5U{U|gut|)mtPW?(Eso|bTvUTe?ECih zdKyfw!E3bqtXiZ&I_+Pr$&1R$0jYx@uSuj`rSur*h#oZg!m;izW)I~R3l30$)THeR zV_-GRld}RbJrxwniaC;|X>$vJmQ3J=+2om17ua*E&I9EfUUiGxfgl(ymh5p2DC@)L sHpjPw_@_5#kqX%46x|!~|6lZngLs?K2|`czoV@SjjXk3;}~#o18rj%BFx@BAnq0Ryg{#jS-~UXkAnf0>Sz1n6+3m%aIO0J8guWz zGo~4YXQH5QXK0#{5`O>bvlq2cCa=WpAPpFr?R%jPo{{2 za06;F^kp%bIkbJaCi_mMYK08#9Az8tYnt|#HRzVYM6iT=uZnrhQG zT$dh4CB`IIp8QY-2PL3g$eHuUKcq;Ta@-mqzx+NaMKCG2LUTZKUt4_z z!(*N^25B-P=g?Mb&XsO4RFWp zHn-Z|ov>JzgH&N%_fo)SG-)oQ{c))qKVKw5@aig6&vhQZ?8AZHu+g{UIuqUDo3UhQZXg?*7G}@1;1WSACIvfsacjk5BdJlyt{E^e^trJHnt zgv#H~sl)P=vv5_BjIohQl|rtt2$&3$`#rUk2t-3>EBV2N-{XC{9<>akaUN5Y6_5NG zXK(mVM&#%bv5)DuqSm3+y86Y?=9`TLZKY6iLgZ=^eoIW{a-lz-FHgb=*~*IH1!pbs zu~raTYzI+EcnYK@x7ig@wJo-pwm3w8xL1`v(Vt2+?Lf}nFkowLd`!S%ZYx(P z5tMyAE@oSX_!>McI7#Fu{1H#mkgvxyxS_Vc@3zH#n=x`LQR41rk~40@OJmyh0cOP< zf$76-)@#p;0TLP~d)yy5q;igmqUUG&_^X+2^WH7*lF6el^LUaNCW;m@(+KI?O{BLq z;i$soJ!7BpH<5oKROSbg(G9P6SuzV1i2~7V}d$-7S&*XB&r(=Rg^gtX7f&B4Uer zQ&2fy@-0NtOY9hoo7E9x&a@R_YV+&{zCqL&w-a%Q@9mCRcbYy~vn0 zBQmo6xR$k=It|7}hYM#Pbtzm@!Z?YaN*+o1Hqnm8Lu}oof21$ka~7hwn5#^eXVa;S z!j1yW(=~b5mOHVZpWmRCY7m_`-)B?+qnb8yB|7Td3&T&;@&Y#5*6f2*JCCT>}WC>j`fXOpxHkurt057)Vub@HmPjy%(J#KWOu>fF) zn0Oqj=()9@xLfJbNLR1cXji@L@)9ck^w?N6Z!ho_|B!moMn~=PBBPZ&Nq_+s*wMV% z%FDRC50K?Edp)_8D0Kn(wPsAw7F0u>9`lA%yq`U zq?ujTdktl1S#_4PgplGSEW7TV05ZG01|9Mjs_vHiF1OHlWg4Uf#Jj~p84CU$QLJcT zA|G;OQT1QS2Osp4&(J`(VL>|=+qdu{a82fTT2Z~$XZ7eE@)@>1vd@?Kk>w5p-YuFE z^SY_PA4&I0Q(p21GY^l0#>gL)Rc{)Nb#ZKtA=191m_ms+02#+~?yst+NqCo(`2W}% z>?)r#`H%dTUb=qaqa8F`4Av+t1UwRDNuzIf9k4i-6&SMb!0Zc{^t+cnMzE7w(V=I_ z9GJ>p5a7$I)?)8kOXf65tmIdv)7yd$Xy0_=-bYPkjl=aJFXv7i{n}NtM)4S4rkdc& z3@3HUoj~T>2021FIs?ImX%edB=R>}Z+z9aOpMS)<}eD(m4+N-!-1{{5n_4GTiZD8USl z1mWru^zg1ktbWiwTrgM$>#kZ2^L{*raNUn-Sy5cjBjFoYB|ixJnT!*>&Y%? znHndd#AF*hjqjckr|xNj?X5xysh&RLq}x_J6K6KQvBnpqvKkzt%s4PdV`Ea3`>MBk z$*Y>^@=M`g{$K4>TbkSI;tkmX^IYO$gTEG^RBubk^$@2uDq;))2Q2bS6Dh9VDSBK4 zyH<4Uep4H)Sye7_XzVT~|JOU;0T~+=-C|^2LM(TJemQ^c6t2<>{*~HU2+L2-cq${e zN7OO!D(P{w0ctk|z2T~E?eUY>m`%?0T#(3m`X`CE8+@~Ea>7dzb%QC3C6&;p@2(%eqx6Hb zLrvv(v^Q3?JIaM~-=UvOD)l0!bQZ>|2t-5})F`slLIlekt@M;K3j*c9b8quP(gz~A(~j>s8XX046$(a~l$ z*zDV?)>_Q{I-1B%=%0PT$Pc=)4P8}^2$03?+O6qVHEqtxqzN|-3k0HA-tSbW3+cfb zgzf8?*|F25>JPa#w9{Ss?DGhNbP~mSwnO|GH=gB=ljC8okcV&$4MXJNL8)yO$U zjt-xza*lH5>-!hJ_j%s;{o(!L{po$4H{H(GT!2@a7XSbVAS~ea|2*h_F$Z|sbHu{NnWa-hZXuGlOhFAI@Jc2bM<(-RHNXxD@y8-n#L46?+c9`{)OL2u zDYC}tWe`3pIrTf;_Q*dnwHCV=w)T8-V_<+X!ZktpGw_^U5Wf0$u}JTNMIIbMvtR~n zBM~603DaU+AoAD~qps8{ZEKJfkyBLXR*jdmbJrsH2K@`3A%?+n_C^0;kEHbTZ@f7 z3?Ws8eC&zgq-fa2uo>(=)wJMTKsX>_1|0QrEU6sl($!+LJ@@3cvD{_byHYQ{9OW!c zzo9Nkwu;96FeK5Tims2c+&6c^-Lz??P$}fLr1hRtZ*eqrM|OBTFRj+7z=0t<)V6XB zVz3*ixD_oP_g8qRrE+V2>~u2?K=%Fos)P&gBy-s~MeY3c(-sAA@Stn!T%by|hwbrO zbK19VtI^ygg4b@I&!J6l{>3HNIK(&hYZW9DfH%ILcpP zevOJ7GjrNf@tm<79cpL=1p7(_1cG`oSj-%hl;>HcQ}*mIAq;$QC@_wV2K=8WC>vu%u(au`jJDC2N zyD`mq=u2#N8osxo)W?0CLv7ALyTpEtR^7~k42m1*Pbva`MQpVT9`;GhK8~JusmfvM zOGrDT>n1T`^?5#or)s$r|fPaH^lUh#MGAK zpMK6&u&ixZIgb)`v{o;NbUaE!1ceh%)C2qfro{Dzigjg@gx+jl-U=`7rNDgxjz z=W{k+)`>M%0jwV29Og%GO2*wmNPOC#8kaU>b^G%qFY*A_pThyDW_HFND(LllPL3Nz z^bS}CsMF%%4PL~B>c?m9GY@)#M~l4*qqKhioP*^pYCikUmBDfg@^F-33^YfB*zCS# z>B#4jeXF`G1C1$F!LNhyE+NAly`hEf{y9b=%ck}ucY6`R@~jEm%p|(DpEzDgm|&2= zcl%CE1&*duZ$KiSr-bWDpQtt!OxExHz>puAfx29klb>0Ex~x2yIo0x;sJxN9o@@Tg zx7$BEW#1<(=E|zr#YI1>76%=U+*dgD-=YPnV76%W;ruqfeP%tdbtlF;8x|L%b;w;+Yq$LQHAmyi{Y#Y=FYMkf zSA5p5m(t50YI@B!V><`i-2Sxpk+sx2(jEw8kMlm8@okOC6p-?qPRcE@h3`(0fW;$& zlDbQ^GnA(VL{eEuhcg8v^4pllyzx@G$0c#v&rWY}nc_66`CF_I@v4v7uz?KUf5b33 zX`NF$6I*vIe=jJjvh`BY>$~+s_1+P>WThRA!#lheKQC^$?Ej5W(cjl%B)j{E#jd~g zuh978gx=LizGmAK$C6$!mH65)l#H(qKI(u!p~gPRmnvL3=w*xH?;VKbAFRis8k$iQ zYcY?lcUCosyAT2;A-6l^fWhruvp;&qw=m-zy~?L9i_ctbm0MK@7kS+4QO@KSQSdx- zly>WsAJs9jk=BrAs(v5K{iUIyBSyqEO7QI6@^tlEFUuqUNS*Hk5^Cyj2#X9G<(r-p zRv_WR(iGctbgMh)31Gp&EG^g>bVGPLNPC#3n5!?b6#U4hiF4MK54hSf+ZNOg9VI;HO;swhKP~zDTbDS8uKR&@k$pzgSrWb5fRu z)u(=PzLF!<4XZfGrfexbyFPWo-=(WYJl! z(*j*VHISvQ<_9jQ-I$CauAoftq5 zs8iAV+uXTRl#U_ZM_a_7B!I)LIVo`$+MW`vD#cXV)VZuT)OR@pgfS66rs^h?mCn?~ z+bRh87)5{_B~YZqjZc%uUY1X9Uf99T&e9V$KlDkdun1s-1=j$FT(Im@Y2|`D^5>$) z_R>MU7a459q>t6tJ+vz7;K26EKmiL<<)+&)l+CCpUw^7!Y4x`? zEf3!lTTcgeWCcMBoiZNtvkTjTbFN9b0m#g+D+hZV@z~CaXHB!$f<^{L4&tb-+f3f3 zHh>fPLQB=`@~;y8=!j;)n$<+aGt(?aGrtYUN(v^>Z?1F* zQ)AE?GaQF#z*qAiwe^F1exBjBY#@GdY_U*DLY5Z9D#(A;XspM=4E-?a_H)}Iv*`F- z^R9qA&lof$CqVgos#+8S%k^B)QP#>%&sX4yL8A`^A~7`gbO?plz>%ua%{#{fYbiM=KBme+9Yh`ML4s~D6web_~5>7zgG%%zQETmq*>C-bR#z5I%EQfu? z*%UxGwmj7DLpraA*;Sz-4eJ6^<8EatKiele84o8CJQ^;5C9-#e*sZWKoa|C+cJwxG zQevER-8R{-Zm@aH!m%Y{tj_vJB_{|)9inpf@2|= zZkdd#1$kZvn!Q|frn<8a36!PET|lk3Zo5HP{@Bc22fNEmBN88>U0wJ6!<`OSp@*wB zhpQT8`nH4nPqF2M(E=XJ+TV-FyS3A<^tyz^M2o5B$m_>z6Ia5v=98a}}Q@C!!Eif7hPK%T*|M}*pipQF{XNV0y~Q|9eaCX-p?^)-*% zd&dnhCdBDl3B*-j311$N^SMNjxVRC>L>TM;nlW0H?X(DL1EGx}IBGy`E-(^qBQ zpBXN_-sz~x<{FrxA;h8lV0{1JB+GiKb?=;@={1zzgK1jy_#taMQ8lM0B<5jSJBTU> zT3=dSRhOfy<&1!R?s(ue<%Y%;i_tV~#Yr3$#Md}WS+m+O z%@HhxhbhoVaZiSFN%X5L)V7Ane{w=LZzO*j6+~8u{r>zpDb-JJ`8anTwL+&tvMP2OAI9v+t5FA0J*^9j|}7k^$>9W-IwtH0-1O zgTOk+JPox`GVN%S7CicCVR`|Xx8pY4U7ny$;N^E$trResvkDP%7x=ZbKGi}_$x>Z6 z0UqSr2GTAe@=)6B@D&u4l=Nu^EqMUA6@!fKV2#8yMjeGMi9AoRP^HONg_*f<>kS~@ zfhV>|5HK|LMLVpcPc%<2-tFgnl>mp+E>5ompDLOVV~YY*=esC${mTBnnc7*KFLIkg zdpEXYhsc{dBlomya7sDLtf~su?!3X6sG$a_F{KQmbSti{t|kqL-s;s0-N4?*kpwFw zP;=W3t~Z5R(5izn%(s2x zsi$&SdA)i}Ft$~iMdj=O$iqG~mhunJjd(m*OjF zrbkCsAg40>)7;J`zma{0*eh?zH$fin2Du==u6rR0aeHeMf*AiOXs@e$iCc0=vZMe0 z<%qM5^G`y*{b8e!+q4z$2+{iu$0XMHv64`G3lEqRxQx1unV;A=g$fA?xy_KF7<+9$ zTAyrs*(6;7+EX^;@axy5yl6Qm&oo~SX<7Zp{r;)=r(|Nbebwks_SV{|INo799@6qe zr=8h;K;LQNY<;b|X;WfQnBG?4K7;&6w4t!l(|@Y@NK)fCZOcw9hlwxRv*i(W4lra~ z6Kp)JMS%^x#m0Uti(mM4YdcThDR_C7>@miFD&f@P`d4!#TGJLA?yibT zO7^-nM`)j)b=rFO^zx_6*Wb_QJL*PG|8-8B9^njIIEyFXN=jeUt};uU|Eo};A$+fF z<9Em0zt7cuy?1{waZr&S>4Gq(ncur84~y)gY@@1fJL9e*feXoEOpi!xJD|atqf$W+NL^$@8 zjg;Wdw*ghx1bEqF0j(FC+wplSU*af>|r7Q?XZ*4y+^D3$_QI!z0 zcPYMShmIY749F%PMC$0GzuNiwb=wqC0G{;em4`NHov?J*yrT|-Lk7UnSn@Z26$Ou6 z81w;5>)<~Lb12hi>To~)B*$GN>gs)O;v%VweEV%Ra`&ELgPw+6n$kyl`e}IxmdgG8 z&5oteNSs}7ThRp3{Ouj)SM~w=j`$|?gacyWyO%?W#x5g;G=yk4AZvrb?pnjcM3$ipITDi~6HqzN_ z11*|^X$NFtR~BZlLvG2Wd<_K@JR7g;e$a24CR8Gi^DoN`%SEJjA~40f0loG#_GoR6 zO~VgLw?YxWgK%Z7fy^1I?D-Lo$Ay1miXkL`a@`pzgE`ZD@B1J_WfnPaNdIA&J5Vs= z-Rt1xor??Cn$1&hZhG!%Wf&CJ2USBzMAO_t_Hkj4HMD|G$X4uvP*}Q`B34n$zq$#u zaNhO;gMa9TW{tuMm+?-skKXZxDGyW0^~LO01ePV!$`F<6W@H4%0tv55AdOjzPPt3z z5*$5Tn4pql_*5JDOoa){{WM3^_j67KiRJJ`|rmZ z5GvY6qgN&T&PUULrj%HbMM0DjqSVZ3Fg1fiLMls|j?>9n8K?I7z?M~q%z*HgR5WmV zJUC@dr3jVs+2?-Y>uj9pmE1V_S&W9hl;o=**o3)+rB@#Z+U0FAs6)w%Gj%ffap&}b zpWdv2TN2|#M)}!i{`-91Xg26KC4`;EyrI*E(RLA^XbYTpgwEK85$>Ksx9r>!BG2J$Y@MJkR z)MjI9fNHsc5vk2v*Xx60G!zhih4IogQ4!v5U{U|gut|)mtPW?(Eso|bTvUTe?ECih zdKyfw!E3bqtXiZ&I_+Pr$&1R$0jYx@uSuj`rSur*h#oZg!m;izW)I~R3l30$)THeR zV_-GRld}RbJrxwniaC;|X>$vJmQ3J=+2om17ua*E&I9EfUUiGxfgl(ymh5p2DC@)L sHpjPw_@_5#kqX%46x|!~|6lZngLs?K2|`czoV}01 z$aI{(kifJR3RLPJ3K9gZe{@<<2N?l*%;-q#XcCmtsw06;b+oNefsVy82@z7hLPN+G zN#47jv+QQxd)a+^@9w_ky}Y|Kk0fvJ*Ph>=d(S=R?4p1?GD-qUMvYbu79_9?y9p#P z2`s}TkYU4>8YY2dm;^FxxKhI;undzxh7DJ0m<2G#*kU|Yg`fFD?Dni2C2w|YQT*;h z{O%lncM3nvilQ9%gS`Y6BV~kCiGQvKU^M{B1UhwP;M_oWq$9U4dK21jpV3N}<;{hB zbpnhH6c0?vot1m133e0f9Kc_8A-vX9!IQv9)OSE_#ZQO?eWvG4INN&^&iDNdZVdh} zsqF6wPJ@~G3t>*d<1n}IF{5l4f7zA_a9IxwVQpm)eL(?r{Cl@vhoiC#T1!!z(}*AEYdc}`U-z@b)9;q=V(e`8I8^@d>mGm{4|=Y7IfnjS>aaGvI^Lp zX)t;mVa@s3rRsoT^`(@UZdI-=Z;Aw!{Idvcu^VXF28_(^&}-M$!@FItrJ7S*`wx#_ z0V^i&qVK{847Ux=j;sNO+O-Tt)bMuaUTEsr;!IjDYgHF-hc6bbrdF0Cv_>b*Wd$&O z-THS|i8X0zA$p{IR z(#))FtZ7_AM^*qszu(0Reeaj;ZeN}j*ZW*q1FOjYd^`FgrwY-+!f9~(LZ z)~*~S7bfJ~3mtbfEf7FhYswBmfjSY6bZm$J^#0Yh zsh4M7rZP=9Es`Q&OLCr!`_yN z*_SOqEu)wk*D>0GX?w4qw|`v=m3VoKQO6^!reV#Zwoi8-frD3Sxw@f{%(G>`r?Nup zm}_8@SF`y_6k|yW2+hS@SLL$Mi%S7EJpu5ewuf!wT1HpsI-<}>(w+&{+VaDwS@#c@ zJKggJPKB$uM@%05?@oW0$_ttIu7FLdV^z2dJ;pssp9>nmcnyyHz&LoSWDi`z$nwz} zFPV-uPaO;E%KzvJmeH_oc=!XXD8!0_0ccSaDDs&DcXuMda+DyfD*YAADxg#j0F05r zfy+WAPaN*jF0?V!_0u;QoZE*KBd_UVSCXA zn)M-U=YWWnXg2NL7;J-kg41I(%N;CgD8@>xL9;&0d%cd0jtl`-g@QOH>XtGyEDV8? z#vS-1er@9wc5JyA_tX*u#(k5IYG5QF)G|idP=~HQFCE@PM!qSR=s`)TAZyvPt{lhC(j@K_5fbd;sj5>pWQQ}P-PG{%=V_u*=TQ$#pBC%!=T;GG(Q8OXdok9bkcY#l?>n$btJz{qhb8OHx1+om#{7K; z+jwd4pTXVj)ps?g1HJo^$}wN)MW5w#QSI`5N}OEBPU0OxArIe=HID#nUjdro;CG6f zaj`KWm5m5%rxPLgreW#e%4&EKVBsu)S1vv>{OFJqp*g8Tk0`w`^)FQQIKpx~!(qX*en&S4`3ILz`e8Ir9Y@=TCj5k)nD0`v6*8QLRs$TfO0|f<2Y%oNPLSIlu=FsGm)77RsqTaL(Pjmh+YY_Ek_;~Z$#lt zn+oq>;P`qstlU$l91;Z}T3!MZkQhy!RJ>$0)T7|;Wb5dMU(t36OaPcs6kTl15|{(Q z-K{DTn8%XG4SHox5GpW>t0;iZX8hU7RPCKmaDA`)cS2 zpR!SeBS8x0(0ihwDp^E;+Q;+F3_VoW_A3WP`pBv&QOm(+aFSO*EDAN(erccnrGW~- zR=g2HyloGcW6+A=>P5k2g@$1s{s!FozbYWqZCCdte+HN|7PawJx9Q>t?bP59Ea?pM zy8nYCBEkkE5j7XMGb^}OY9KfuScg1f+HTbm%wbKX=WLsHFprTOWeC*(U)#Lewt`8VjmL|t4Lrrz{~{X#oFZ*gaqaQ z7*17=V|iBH@jj6wf!P2nsbwvR9)2HzZA|pKNMLrr>TtzMI8p)3V(T!%2`z!8_mn6# z%+AE-F$M;PG=E>KXj{q3qf>c=*TXEiMrxRyhM5a;#GUUJp4nQ7H^#)oy`BVSBWViD z1Qck9+auXHXhq?fI+ig^gYKzH9*vi2ZV6JtyP9$_;=&kBv7+KZp#w2>oH z?R1Q>^&EQ(c)bE%4AN-B!aH)O(^3}j=7H2Z4WNob%_v}WaeBh& zDYJYGI#1z!{3ncg8BK{AQe4OAB^^~HXuH%n(Ub#G!8#pKff<6=^Xu#B-TA!Jr1pMd20LT(_mjP?CtaY83ShAsqnql>jQAPl9crm? zXpG?Ro#-8*jNoP~t1jK4jXGdL)1gJ-bcQB@Wf(LGEQv}c(=;y~&myye1ZE?xB+zW1 zUlRerTh>!xXnAcgo+aiTz}+r4Gzb^$BG+cnMumpmZQ(oZA8)iUCXCi3tFHx70d}I_ zun6z+opw)$IvtB$J;xd*`pmN3K<@VWR3xUR;+h--qrsTPg;Fs{KiW)}jj`Rex&oH$ zp*Xva)9Jj|4_2h|+FSuM2Bs&lRN>$F(#Z7v58%uMi2`WGRDiIZ;gL!RB5ivDOr%3u z)|~_-Fn99vy|x7AyU5*jD1o_?pYOFLFyBS)u0sjTo&0>SErIzia(5j{VD9ASdu<8K zcagj6Py%x&Ki_LhV7`moU565wJNfxuTLSZ4n@^l=hUiI1B= z0_0Ih0+ayNb0SU!-9OgPG*J(Q4(dH7&f2i;9JY-SUs zmgmn`zpHawtF0+${}hb5d4pt(+Dd1uCgWTsHo{ry+b{lA8Kuit;4o9+Dw3A zTISmr@ur`V6qFQHPg6-jNkK_L^$5hKpnH$?QhvACzu7fiOowV(#bR!EM^m;N)|xuV z8c*{7Pp)t19oo%)4*j&|gT6h|y&a;L==h$ildizgthd+Kov-d>$4)(OyExM#O($1p z>QxA&)&PYZ5lKn$qEP^|2QV)Hr5|E!Ru+Nj4bjuT&eW((-Sz+->2nzLeVILS+6KM)P#q^9=~fj<08Q=<<85 z0pgM3sj<6jzu+*N(ZuFVSvgA6duhZuT>(`MuaPYaePc#MB8cF`&(k*=F>BxWmGZ7wMnXu%HYuYwE;uiAsw8qq`@~ z*~mMJUYh{0?4Mxc__Pd|Y`Xq?1?RPSk;}Ee$_@s0v$uV+Oem(f81-*t6)PGpMfF*S zkzU0=4l>6!P`N|q^u|Ceww?^6tfh7N|1c1SD#9w0F?U=PIfJ27k!;C`};bOq5$MtqRT?a{m4ar^170rt_mqC zKx|}wsyYZ#6W>SFG+12uwfeP^XJ*Agi4M@Ba|{YcNqnr`#dne-F7W+19PCI+(>4Vu zT0qj&VrU@={U#u76`&A*v?yB_(ya%SZ6k#9x6G+KUR8){A5=vdp>-^Wl;Z9=*h%wc zfY@K^&9eb-Tt3Q#ROTE`el0xUN=xWSuCqKtq8<9tm3ZT19d_Vd?8L{mH-XA1Xn;c7 z`iBJ?eM8&+rzy5nMOD)!Hf37@aRp8)LAHEPu+$B*bxxl$ZQD{7W$IP}RHxzFQrD@V p+hSxLI}#udy#y!$sx!fe{sEie=yqg*pWFZd002ovPDHLkV1jW{tpWf5 diff --git a/react-ui/src/pages/Experiment/experimentText/addExperimentModal.tsx b/react-ui/src/pages/Experiment/experimentText/addExperimentModal.tsx index 1433fb8..f5b2bfc 100644 --- a/react-ui/src/pages/Experiment/experimentText/addExperimentModal.tsx +++ b/react-ui/src/pages/Experiment/experimentText/addExperimentModal.tsx @@ -144,6 +144,7 @@ function AddExperimentModal({ label="实验描述" name="description" rules={[{ required: true, message: '请输入实验描述' }]} + style={{ marginBottom: '48px' }} >