From d04c2c75f917ac895372ae25ea75f098008a01f9 Mon Sep 17 00:00:00 2001 From: caishi <1149225589@qq.com> Date: Wed, 5 Jul 2023 13:56:23 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9D=9E=E8=AE=A1=E5=9B=BE=E7=AB=9E=E8=B5=9B?= =?UTF-8?q?=E4=B9=9F=E8=A6=81=E5=A2=9E=E5=8A=A0=E4=BD=9C=E5=93=81=E6=8F=90?= =?UTF-8?q?=E4=BA=A4tab?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 12 +- src/components/AsyncButton/index.tsx | 22 + .../components/OauthPanel/index.tsx | 2 +- .../components/OauthPanel/qq.png | Bin 0 -> 7663 bytes .../components/OauthPanel/qq.svg | 1 + .../components/OauthPanel/qq.svg~merged | 33 -- .../components/OauthPanel/wechat.png | Bin 0 -> 8077 bytes .../components/OauthPanel/wechat.svg | 35 +- src/models/competitions/index.ts | 10 +- src/models/user/index.ts | 2 +- .../Detail/components/WorkSubmit/index.less | 43 ++ .../Detail/components/WorkSubmit/index.tsx | 479 ++++++++++++++++++ src/pages/Competitions/Detail/index.tsx | 13 +- src/service/competitions.ts | 7 + yarn.lock | 6 +- 15 files changed, 583 insertions(+), 82 deletions(-) create mode 100644 src/components/AsyncButton/index.tsx create mode 100644 src/components/User/PopLoginRegister/components/OauthPanel/qq.png create mode 100644 src/components/User/PopLoginRegister/components/OauthPanel/qq.svg delete mode 100644 src/components/User/PopLoginRegister/components/OauthPanel/qq.svg~merged create mode 100644 src/components/User/PopLoginRegister/components/OauthPanel/wechat.png create mode 100644 src/pages/Competitions/Detail/components/WorkSubmit/index.less create mode 100644 src/pages/Competitions/Detail/components/WorkSubmit/index.tsx diff --git a/package-lock.json b/package-lock.json index bfe90fc0..9971f966 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8340,9 +8340,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001287", - "resolved": "https://registry.npmmirror.com/caniuse-lite/download/caniuse-lite-1.0.30001287.tgz", - "integrity": "sha512-4udbs9bc0hfNrcje++AxBuc6PfLNHwh3PO9kbwnfCQWyqtlzg3py0YgFu8jyRTTo85VAz4U+VLxSlID09vNtWA==" + "version": "1.0.30001512", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", + "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==" }, "node_modules/canvg": { "version": "3.0.9", @@ -34122,9 +34122,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001287", - "resolved": "https://registry.npmmirror.com/caniuse-lite/download/caniuse-lite-1.0.30001287.tgz", - "integrity": "sha512-4udbs9bc0hfNrcje++AxBuc6PfLNHwh3PO9kbwnfCQWyqtlzg3py0YgFu8jyRTTo85VAz4U+VLxSlID09vNtWA==" + "version": "1.0.30001512", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", + "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==" }, "canvg": { "version": "3.0.9", diff --git a/src/components/AsyncButton/index.tsx b/src/components/AsyncButton/index.tsx new file mode 100644 index 00000000..4033b42c --- /dev/null +++ b/src/components/AsyncButton/index.tsx @@ -0,0 +1,22 @@ +import { Button } from 'antd' +import React, { useState } from 'react' +import { ButtonProps } from 'antd/es/button' + + +interface AsyncButtonProps extends ButtonProps { + onClick: (e?: React.MouseEvent) => Promise +} + +export const AsyncButton = ({ children, ...props }: AsyncButtonProps) => { + const [btnLoading, setBtnLoading] = useState(false) + return +} \ No newline at end of file diff --git a/src/components/User/PopLoginRegister/components/OauthPanel/index.tsx b/src/components/User/PopLoginRegister/components/OauthPanel/index.tsx index 343c28ce..8013079e 100644 --- a/src/components/User/PopLoginRegister/components/OauthPanel/index.tsx +++ b/src/components/User/PopLoginRegister/components/OauthPanel/index.tsx @@ -4,7 +4,7 @@ import qqUrl from './qq.svg' import { isPc, openNewWindow } from '@/utils/util' import styles from './index.less' import ENV from '@/utils/env'; -const HOST = window.location.host +const HOST = window.location.host; const redirect_uri = ENV.QQLoginCB export default ({ onWechatLogin, setType, loginType }: { onWechatLogin: any, setType: any, loginType: number }) => { diff --git a/src/components/User/PopLoginRegister/components/OauthPanel/qq.png b/src/components/User/PopLoginRegister/components/OauthPanel/qq.png new file mode 100644 index 0000000000000000000000000000000000000000..f6937c2baef3a1737d65941801afb13762d7c6a2 GIT binary patch literal 7663 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 GC7*Hb@qc97{-6kz!S1ZjTijmunyz1bW#O zxYL-Gc=NNsRE@f~&MURmd7xQ+x?Jz@Gd#R!z0!B$98A&L#v6Z-v{G^2TnD#h5t0x{ zQjNqrlVvX(tm-&D=F3k?3u9Be1jXpMK$OMyRtdaPYkYzix9Y&J*L2rZQ_A}6sou5U z3e~fjZOiRkUdQp4u6yaCXLz;#Q}4y4YG?T1%pz`}y$yqgF-V5p}=yYA0&;Gj3J3SNRt(|hj6!+esjQi0Il2HAkGjr#u3JCL{S5wcP&|h zNC$WY6#k~4yp(D#Uffu3NF4)f`?E_c&wA9eyW&Jqa;U3xLW?8;K0LjE^+ANh1D?c4 z8)Hb~MWl_OSexm$+FRD<2DL1A8>;)s3BP?uOja>NNZvdo&|^elh>$>6Azp+GpXwDz z{p1QSot87fLTAfOH>}`PSI=hqRt?;`scw%%jrq0~@1I}9?F4q3A`Kfz(ikau?oNQT zPD<)_1{!Mnj$SP1(!w{WNkasr=UIl35~55YGIetv43|<8S*zt;cF{iJHNNbP z{X3LpsEGXK8KtgG%UlN-uV;6iMMB)WsBppJA|8?wsnKn^RY-yWDd~2YntcpMyFtyM z0O~h{qy@8afS{QmB(`(VJ=4<&%^<`18aSg@M#^W3xW1PcGZkLB2)eAY$J-v<2jydA5@EklE@5GsiPDUKGv2Q=`E zD%+Vc=_;rC!EjzSpZTZ9UHgZ7pq*av{u2B8;*$$06AvUAJ~^jxr&P!YWRj6#!5-Nr zV?%+?w$Y<)J;nkAp6R6NBro(EI?yv|R#Kd)HO|(w-m~&k6uek!-?J>>+Aexl_A0yl zRJvv%#EjDT;&g^<0)?2sPNfCffF2_y86jr3Gi15n-c#G?<%-ExDSL0;Yoo}jyhH(l z9CV3*be-592&_;Vr)l7g(AdX+mLXuN;h$SX-`7%CfO2(_>RNfePhlP}#15tL0xC@~oB-vV<5;AS+}fA>>9HlQuvO!)zC02445AR7Ir1w98_~9vL}4Q_JN=?%g8UZL7TS| z+cO1eKyM?+#voM(L8A$oC015w07zyc%W#_IlA3^~`+)`Ce1~c+(ygN>phX4^x+UO= z(E)VgneF5xh>*n{DA`07w4uT=3w9u(Jgc8Hmn0Y#bbcurf6OJBFL*GH4?sj@_}p-+>B*1$t4MYxyYB z>L`SIQeJdp5a{%Ge^sjL1vrT9Dg6?t3UYiBl9*4wIy6@|GT=8!Ru=7Z#BQYSmHdVY4%PAZo5<)nVln+LE0pmzmRCoy#wP9oq{ z6N13^fKNsc9{6m5ft^4Y;1dh<*jPEVx7+ryh%C^cTL*M73FU!aND9CSWZ8lCKzCiS z>dAQFq+vkkY_9{JE^?PGSm0>@4B!!j>Ohd}U=q+V1pTVeb%{CP{pSOL>c#Ik_|(sp?t;WhK(`@i5a_dLAnL3u z0c%*EK#MVG%$iF(Dog_$Kl*X^^YsVhxxvP24R@@;IDZi d!L9qQ{|nemI9(X_Q*HnN002ovPDHLkV1jDpySo4Y literal 0 HcmV?d00001 diff --git a/src/components/User/PopLoginRegister/components/OauthPanel/qq.svg b/src/components/User/PopLoginRegister/components/OauthPanel/qq.svg new file mode 100644 index 00000000..b0d3eaa1 --- /dev/null +++ b/src/components/User/PopLoginRegister/components/OauthPanel/qq.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/User/PopLoginRegister/components/OauthPanel/qq.svg~merged b/src/components/User/PopLoginRegister/components/OauthPanel/qq.svg~merged deleted file mode 100644 index 495690e9..00000000 --- a/src/components/User/PopLoginRegister/components/OauthPanel/qq.svg~merged +++ /dev/null @@ -1,33 +0,0 @@ -<<<<<<< HEAD - - - - -Created with Sketch. - - - - - - - - - - - - - - - -======= - ->>>>>>> dev diff --git a/src/components/User/PopLoginRegister/components/OauthPanel/wechat.png b/src/components/User/PopLoginRegister/components/OauthPanel/wechat.png new file mode 100644 index 0000000000000000000000000000000000000000..2cca81b42a953b5f9a331042e1a1ca8839ac3bf2 GIT binary patch literal 8077 zcmV;8A9CP{P)%fnzNW*vjs*fIo6j2-L{%a$d}ddt#`H1Fx|dfdC`R@be$RbAcF zlE#MQFt$#=s;aBM``z#V{r~sYEy2&(pHhgWJS8DeOL@GLJ=T)`xZ^#U#lXGs#uWT5 z3rDt|CU4$oe`)$+%a-mS|12BfSp~cszzMip(EoGmtrp8S!?vxxv3}E)C~jS7fz6vy zNgLb<-5TN9Y=CD4@G_uF0ZzfaLW6WAJn_&1(1-dEn>uu%ZNS>b0;@M(gkme)2iT3U zSOYv8z(1pacLI9LmXyU7z)uXdz#ZvpJw9D+Jr37c^*}QEOp;@d!Hq6xkYj7v3i1nwz#9;*Mpf-k> zaq~dWPPSeT4(GLcC`Q#sQ5=Mk)u{dZV5EuCji4LA^n?ujF;q9!KNG+&Dd44y24QqL z0Xmfm&Ey1R522YmP(jrE7P!l+I5oxdsqj2su|YX(5O4;PWjG89l79%nEHEns(+c(o z#f}JesEB`?iFtUciA)+HM9l>#-4kY_7WkU^T6*r=3Y#q8x6mGNmlF6T1H6pYMmlVu zn@4ci0MQtZ0r}7j&KWCN>-qee<8g(MTm~!`*4dfoDbP8}C!eXL0g`{opJED!e?oCz zJ>c(m9OBU0A*2D{8%44Ms;iJ~z?VqPQh|QbfOnFQO}8S7Ko8Ygk}+^5B07dM;?w6l z{5lSAb_CjEI0FebE^jFwDB554mYKHX-J>YPx_{@037p7;KnU7KK98xnrlbRXS*p;Zwv}|Qj zW=;n569(J{+XO|M)%QJ$v!aSfq$6dt7{VV3_+1Cy53Dc@wLvZg-v%{(t_l)jeu&*r zx#OlUvhNfelY*Ofg?vuU5E{m7;Ey#?SDcSD`d-HN69xT*055`VYxUZc)pKJw!4OW= zhZE1@j0|(B?{YJWO-5@CXqt(RlQJ@;vH{+fkxr~H%8%U>+TwuSP^})Ytse0HJ%{!BG`7E}w`ej=bBH{hjUTN2V-j$>FoxeIrAlwOK7 zNmnPm+14DhZNGHeLS2E!yH)UD^PW$w0|xC9Y$^ffxWS z@G_9CVA-bmB@JuZAbE6nct-M${rh=pxJKN!0{L`fL1M;8b^Rnj?-}rJV2?eDV@rtF z!0jL83gPg-wRg6IS{cat^GuTqT5HRNVW@r5nX4($^kO{dsPA^e38o{(TlXH~zNnAb zmYC7=ktYj!Pk{Fd_GANhcr8vfFjRMYt=(mfU=ESf_F@kyx*3bv zw%f5Ay3j*{7~Zp|!EKX=ki&h%M%Pak^hE(*6zl<<;3$qah&x@!9j@^XPb9%nhrwKe zl7W=!ch53VOlmCcFLNikKv|~wb_3{hG4|1JIDw2M?|*EJzg<=%j%JA~E0F_p$dduR zXTY`fOWcSKkRWUsF<_6>c&&h2k_4t0)Y5L7FxPx$fGk?QZhD_Gzvx~JTf4d%TiR>v7zL<0A3V4p)AhgdO9Yx$XigQM4`!Z%%xzd5JA*f_0 zY+OL$TkI4(r^nr-#$swN=vuvHv0z-3lVT6luUkx6C=~!f81u&MN7-tFzGoD9#TasI z45fX#og8%oy(8ddVCz&}`)qCfs#CaHvnvC*%d4Cv1osNXvZ5QwGQJKOp)CnzQqYO9 z_V<*wgo(Z^W?*zMoIbyBp&E>?}G8&)WE9i>?ZlvVK ztvCj3ZT-fkaJ?FCPdQ>MKT~4emqXB)(l}Nk3-ihUx>?)KXGihO4v4Z~(6&`F)|dF$2Sj z>~;f~lg}K0^@jOD#bDW1Zf!3({} zdYuM21 z<)yU3*um;XlJ`D2&evl>Xjq=p@)E~V#_+r|(b_$Sm#|ynR~27FaYc~@Wx80}#RaS% z{8g@Ae;bbQmjrBckeOgR-#_#U>hbR6t+MYg8#QVRqQ(H(ECmUT|U;XzZJ%2-|StexC~{<5`$FX!6z-@2swH=5uhNo|qjha{85ng-FHu}9aZD1><7^~k;pLa^)P&)ld z6*1npp8@Z52K+NhH`_mZ8~=Rd`rKTV(g6# z66!Lpsk4k+gtW6y4SLdGR=`Z;1YHdrz;UN>bqYTNz6*X|h5w}_FYjsWuz2FYW$SKX z}jE(zRdY?B#DSZIpZWU(1okJqUa*U-x&c8+cXe@$Nf#4deBD zlB~C_eq)_mS{&*Sjo;f6ANIQ780eO{&R%o3qgRyJ==vd<*z%ouL;d*ZAGIcY|C{X?x_=|xZ??&txvzn=o?Y@VmKW&0n=`8_HS!e%I-Qaw6I8{1qSNf|a=` z`MG`W+0{Dx9|(rWDFl*^)i2D)XZUU}wsId$;bj@mrce4Iy*eTqJJ6&I}hFups~ zfw>Q|WAd{M`e*apkq@*5-)4M_W_*NZJjUY_H*vWB?d&+YQbG@Pm~Ou>pVUG9kdrm$h0J|f-s(1AaRgC(;7r^#}Ojp|^5M?S)*h@=qA5^xkvo(LuIPew-(#KZCBE=4$CyBb1Uy zpR6_TZF+`sczpK+*Hs`81s%WOoK|fm2Y6e+OtVWT!WVIi;UeS*La{zKMXjX!IJaFVUX~qXKws*=eiY~{F zQK`=Fe`1=KCJc88rAKIIog;SO)C^Am-_lBW?0^aQ^tS+)4Su4_vGy-4t!I~5Ful*^ z>pst>mA`Ys0O=j~&D_ELPrs9E*5Ad-+QlbzEWPt=xQp){yn=?*7ZSDp>`b!Ld~`ct zCg3|v?3&>P8gS+bF@D?*oHw>cf)baa2OCHSi7P8{=jZTDu}Xj+2`WOdU8FOq?C706 z?=Yv&Fn)FI5`O)h`%f68dh|4R?0OzouKy;h`;+V3mgH|bc$|9Wlwz-SB`Hi-e zq%C8~PVmH0&h-?5Vj*z$4-f@MTh&9ZMCz#&IlxVZX#?&%R5ajm%;P93WkoB)j0D`0 zfd$hjuRrHuR@Rci{p0@Iy8jK-yw$vT&8OS;{nzmu**AMT8-{;}jl;j&_WADVFSC8} zQ>^a4mgk@HskYCzPkxerJNCi$Q6$6qlHtKZnKyW9lJhj+p(HR)MFVa!&Qic_OQu^9i0m`hnij2L5&Y&pF!oF;}f`PvaZWIJfUQBLP&G4_e@OkwaPcY!87k*l2@yPfevUB<`ODl}Fgtk=?ny4!a$>CE%ruej5b4UH z?Zr)|*%k0a!vp>S!MWxfyUt#8CC}FF*5}oVn~j^$hww`(DqwfonK#MY~++ zgB)!<#KF1maK_N}EURRvm>qvM+|AyZuP|DB8KbqAmVWP{xjXsc;a@HH=9aXWoo#7F zv3=(ZuhI-(GQgdXzgBRK(d*n7mn0FL3P!CHb-Dc1&+*(9zugn)ckFs0FBtt3P8)i4 zPuri!MtY3&yZe8sEgLnmksPyA8CUR+JEwT}k^!zIC5ZWmki5$PZge_VIV>`}WUSEM z|Ju{O#@WMfSQMYzc5dP&Yd_1{fvXnX_CzRD2ZE$kXJBi<|(f0olTgI>Wh*~w3?{$M3Sde_TN{S41r`TL7vbmvo7vT@`FHVnUQ z(QQw3gTwRR<$H&&Yaf;?$v%s{H$^ce902#0#Y4o4It}s<;(v6Q*HI zB9Tj#(*}Cu#%+xBJvYJVSmROl&HMuc{;90$e+kPf&&jZR;OP&bki2-!%_oZIqWkTb z{O|l^{6Du%)3bY|acJ3PFzN4agj_#X=O@Q)3-#>SPKi&|p;`}l0M)u?CzrxoKc~zR z7Q3Vdzu#ZO+czDe8Bg)x;VnFR^s_*e9oKUPsd=YRbyg6_38ZT9#*O<*2QU^zvxg17 zv-br|1rN6aUX(?n<)*g^rVmc>qNb$Td*ahWYVSd1Zl1qFaaA_BS{OMgYlNb_80Kpr zFI@Fu9v=H7jrd6EAVDTy>Fm6#)_<9^hkv67_>OOrBlYid?}3*s45V1)=f&o?E5SWu zb>0)vawxr}_USCyY_zAOc;yQ!L7f|7#fLk|h5deU6vzgztS+7Fx+U{i^yf8ilYxARv+TSKKsZ5oXe@$cP$F&15<5$kO3(x8A1<$VA=q&X9r+<^Z zGhZ!T6rtE-OUfE@I^wG7CI?&ydM?jqfTshGq>_X$q<%Z&@cO8ZL(zbj8(NuxZsrk!ur8i9oG=v zBja0m^w`H10ADO=E6mIV#;0bvuIV$QnuJM}(4L#pX%Ja|V>Sq}3DIeqgs&Oyv{)Xs zGR{9NUV+f{8cDmjZ?mcxsESulbedCANJtz}Wp)3htmyk?`n*;2xhv2CQIFnFG#_EC z{v&GcDlS^}2~HdOH4e|;$N$@RWqY7386>wG-1LT6@fU}txka}jppr>gP2JoVe zn=2m7L?C}It&2m&cUd-H=WZ0kofz3B8yy&wb>YJN?wsa#x0#cS`+GXCZ0k~5fux7X>>#Y=`vU%C9p52x?8W2kCVRnuRVz_y{$roMG0(-te zctTU%Y#lF~%&8}IY8~%W_{ya=U*}e(IL8LPtpU;zprXI+1ahu%%BG}Qpk&PJqQAxS zDGTt$?_A{Ec8)jMEMn>nL8t-O6FHA-GG|f8i}MT3bmd?!SslXHIxc+tIOIi9#21r= zXWD~G&fD5{uk5+apt9_=EO3^2`CeQ{uisz%O^!e{6*o)3yrSQ#KVuIb9Q zjvITJUE*Dskgr+p=^;0gYwG=GlaENno6HX_wQ|LZThaP0<`5Q{j9KcCN`i4Q`O1K| z4v_1umK#bj`s&dpH|bG%t=&<|?h~GnuMfJ|B`2EU$-gST)^effZ#4LlQVZ8>=DK9b zQXPpDbkOD;lgq|W(+x@%A;{H2>{TnuVn{KIEcM;_3#uMFs(71I<$~3&g zq|%~Hbqes=xuj2u4oOd82}0h|hB!_sV`kR_~bLCkV8ZC99;08p&gn4Y2^JFOsOYjH2GD(hvfa|@e- zKWH?$UxQ3Q7*+}NsC>Umc*2(r<^WF@qsd+NZCw~!i|{nC4TWE;;s-JbpcSe3l{n_6 zY&D>iDz1pDqrMGQP$D(X5jkh(rIGEA`TgEXTIo9Mmu1`>L2=*P;%{7hbj8&wxCy>pksoc zwTx=lQi0WjijG7$$Vl?>nI_*z=9yShQqxyCctj_C>36}ckdrc|6@zWJ@^8n6DmaTWImwN_muInIEZH&(-xe{Eb|oqx zl=`uMK}wcnaf70?bX&edGdha#47;U|zMME=dL!hLSg)mG1yT$9w%U2lwOCSQ)?&zM zwPA4C;$R($W5p>BZ7yX2_}M`6p&;f*n%Np`CnPc~_uSU=C0o9u$a0f?nuW!R3)FJhEy?Lo#D7zY^NO_)}KmO@p0BXIc3K+@1MV!#dpA{``~ zE|I5oyF#?&OE8tPJY5gGY>_d)54Q-qj9c=eB%W|_!-xyxh!3JT+XkvFSaq0Ro&aMT zLh+<}}}pm$nEFOKoNDz0XF zA}@7(t?5$XNr~sU=sP)7qXuu1ink$HUX}qC8>3hnEy_q+piS*$&Tkh>3oWpxq~uF= z!BWLQ0}t6qF*jaq;h3lhZ!Y!LqB^`Rd{KZ1S@t^@N5<^{|nI4A`B^zCI_!44(Z9!sR2l&FCg zvh`28EufRS@(m?C?(O`Q> z4YU^%hZ5<##4;k*4WL=w7ZMu@ahu4W`GW0>f}Y;hr0tdjeK>P9+yM`#9;Bd0xXQx` zJlv{_6YAFyj_qnh-=)dA3LOK`JjpCtP)dD_NsH&H&jI1=1!?*>w z?-4g+WF;aN5mI_Buxl0Kxd=H>C!TB|e{OC`&=qvcr|VnE6mPnr**;XknQ!7sA4juY zxi}i|K+8&q4^2jFx#uN*d0q$q);^ttZsk^=~R%72q~&a&1g45CO{9i!2Y?u ztxOr{Nigm4#z_WvRl$*UoXT>9Y~X0ddk#W3f(BcI9%|5=h)9Q1odTw8H|OA|?Dixo zuA=-DYz?{wH`0$W(&0*M-~Ap?C!ssQN?CQMiVE^iHHckh$E`CZLJ zR6WGJi>SH?-2e>@{v4v2f~^~(Oj0zk`u(Z~c>vWXQ5xW8jOy2q5vm@c{zKgSt{dn% znJL^1uiNb%HS_26Ju_EAb*j|}37{PS*TCw}6L6QKI0^&9D9z;mu(x+yjP3UQj(>3j z)3ScL1n-sJ(A3mp^o^!}af{w1K)K`)oq%t<%l9vCLcO#NPzJpDhF{!feQB{SJzBR0 zNCK|5nEFrOR5|^#o+j_)RxM0lbi0SW-e<9!8$FXhz0_tslV7;lu@`HE#r7|L{<8$P b>|FmpMnghXpGokM00000NkvXXu0mjfCLIkn literal 0 HcmV?d00001 diff --git a/src/components/User/PopLoginRegister/components/OauthPanel/wechat.svg b/src/components/User/PopLoginRegister/components/OauthPanel/wechat.svg index 6e1940a4..ccd9347b 100644 --- a/src/components/User/PopLoginRegister/components/OauthPanel/wechat.svg +++ b/src/components/User/PopLoginRegister/components/OauthPanel/wechat.svg @@ -1,34 +1 @@ - - - - -Created with Sketch. - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/src/models/competitions/index.ts b/src/models/competitions/index.ts index 4b37b167..12dcf096 100755 --- a/src/models/competitions/index.ts +++ b/src/models/competitions/index.ts @@ -1,6 +1,5 @@ import { Effect, Reducer, Subscription } from 'umi'; -import { Action } from '@@/plugin-dva/connect' import { getCompetitionsList, addApplytojoincourse , competitionTeams, @@ -34,7 +33,8 @@ import { getCompetitionsList, getShixun, getCourse, Results, - TabResults + TabResults, + getWorkSubmitUpdateRes } from "@/service/competitions"; export interface CompetitionsModelState { name: string; @@ -88,6 +88,7 @@ export interface CompetitionsType { getCourse:Effect; Results:Effect; TabResults:Effect; + getWorkSubmitUpdateRes?:Effect; }; reducers: { save: Reducer; @@ -113,6 +114,11 @@ const CompetitionsModel: CompetitionsType = { }, effects: { + //获取头部信息 + *getWorkSubmitUpdateRes({ payload, callback }, { call, put }) { + const response = yield call(getWorkSubmitUpdateRes, payload); + return response; + }, // 获取页面数据 * getList({ payload }, { call, put }) { const listParams = payload; diff --git a/src/models/user/index.ts b/src/models/user/index.ts index dc14a588..4f3209e6 100755 --- a/src/models/user/index.ts +++ b/src/models/user/index.ts @@ -92,7 +92,7 @@ const UserModel: UserModelType = { }, *getUserInfo({ payload }, { call, put }) { // location.search,,debug:"admin" - const response = yield call(getUserInfo, { ...payload}) + const response = yield call(getUserInfo, { ...payload,debug:"student"}) localStorage.userInfo = JSON.stringify(response); yield put({ diff --git a/src/pages/Competitions/Detail/components/WorkSubmit/index.less b/src/pages/Competitions/Detail/components/WorkSubmit/index.less new file mode 100644 index 00000000..7a43a1c1 --- /dev/null +++ b/src/pages/Competitions/Detail/components/WorkSubmit/index.less @@ -0,0 +1,43 @@ +[class^='ant-upload-list-item-info']{ + padding:10px; + height: 26px; + background: #F6F7F9; + border-radius: 15px; +} +[class^="ant-table-cell"]::before{ + background: rgba(255,255,255,0); +} +.WorkSubmit{ + &Desc{ + width: 100%; + padding: 8px 14px; + background: #f5f5f5; + color:#9096a3; + font-size: 12px; + border-radius: 0 0 8px 8px; + margin: 20px 0 30px 0; + } + .span{ + font-size: 12px; + font-weight: 400; + color: #C5C5C5; + span{ + color: #717171; + } + } + .search{ + width: 292px; + border-radius: 19px; + height: 38px; + padding: 5px 14px; + font-size: 14px; + } + .downBut{ + border-radius: 16px; + color: #3061D0; + padding: 0 20px; + height: 32px; + border: 1px solid #BACFFE; + box-shadow: 0px 2px 4px 0px #E0DFE1, inset 0px 1px 3px 0px rgba(255,255,255,0.5); + } +} \ No newline at end of file diff --git a/src/pages/Competitions/Detail/components/WorkSubmit/index.tsx b/src/pages/Competitions/Detail/components/WorkSubmit/index.tsx new file mode 100644 index 00000000..f81e095b --- /dev/null +++ b/src/pages/Competitions/Detail/components/WorkSubmit/index.tsx @@ -0,0 +1,479 @@ + +import React, { useEffect, useRef, useState } from 'react' +import type { FC } from 'react'; +import { + connect, + ConnectProps, + Dispatch, + useParams +} from 'umi'; +import { + Tabs, + Row, + Pagination, + Table, + Button, + Modal, + Form, + message, + Upload, + Tooltip, + Input +} from 'antd'; +import { + UploadOutlined +} from '@ant-design/icons'; +import styles from './index.less'; +import NoData from '@/components/NoData'; +import { AsyncButton } from '@/components/AsyncButton'; +import MarkdownEditor from '@/components/markdown-editor'; +import RenderHtml from '@/components/RenderHtml'; +import moment from 'moment'; +import { uploadFile } from '@/components/UploadFile'; +import JSZip from 'jszip'; +import {downLoadLink} from "@/utils/util"; +import Fetch from '@/utils/fetch'; + +interface PageProps extends Partial { + dispatch?: Dispatch, + userinfo?:any, + Editable?:boolean, + ItemData?:any, + TabResults?:any, + HeaderDetail?:any, + StaffDetail?:any, + getTabResults?:Function,//获取Tab和md数据 +} + +const WorkSubmit: FC = ({ + dispatch, + userinfo, + Editable, + ItemData, + TabResults, + HeaderDetail, + StaffDetail, + getTabResults=()=>{} + }) => { + // 开启/关闭 编辑 + const [isEdit,setIsEdit] = useState(false) + const { identifier } = useParams(); + // 提交作品:1, 仅提交文件:2 + const [modelType,setModelType] = useState(1); + // 竞赛管理员、超管、运营 + const [identity,setIdentity] = useState(false); + const [isSubmitModel,setIsSubmitModel] = useState(false); + // 上传列表数据 + const [fileList,setFileList] = useState([]); + // 表格数据 + const [tableLoading,setTableLoading] = useState(false); + const [rowTable,setRowTable] = useState({ + name:"", + url:"", + id:null, + fileList:[], + }); + const [tableList,setTableList] = useState({ + total_count:0, + results:[], + }); + // 当前赛事 + const [gameItem,setGameItem] = useState(null); + // 分页,搜索 + const [urlData,setUrlData] = useState({ + page:1, + per_page:20, + keyword:"", + }); + // MD内容 + const [mdContent,setMdContent] = useState(""); + // 下载所有文件时打包成zip文件 + const [zipAll, setZipAll] = useState(new JSZip()); + useEffect(()=>{ + setIdentity(userinfo?.admin||userinfo?.business||Editable) + },[userinfo?.admin,userinfo?.business,Editable]) + useEffect(()=>{ + if(ItemData?.only_file)setModelType(2); + },[ItemData]) + useEffect(()=>{ + if(TabResults.stages&&TabResults.stages?.length>0){ + TabResults.stages?.[0]?.children?.length>0 ? + setGameItem(TabResults.stages?.[0]?.children?.[0]||null) : + setGameItem(TabResults.stages?.[0]||null); + } + },[TabResults.stages]) + useEffect(()=>{ + getResults(); + },[gameItem?.id,urlData.page]) + // 表格头部数据 + const columns:any[] = [ + { + title: 队伍名称, + dataIndex: 'team_name', + width:"120px", + ellipsis:true, + render: (text: any) => {text||"- -"}, + isShow:[1,2], + }, + { + title: 提交人, + dataIndex: 'user_name', + width:"120px", + ellipsis:true, + render: (text: any) => {text||"- -"}, + isShow:[1,2], + }, + { + title: 作品名称, + dataIndex: 'name', + ellipsis:true, + render: (text: any,record:any) => text?{text}:"--", + isShow:[1], + }, + { + title: 作品文件, + dataIndex: 'file_name', + width:modelType==1?"180px":"", + ellipsis:true, + render: (text: any) => {text||"- -"}, + isShow:[1,2], + }, + { + title: 更新时间, + dataIndex: 'updated_at', + width:"180px", + render: (text: any) => text || '- -', + isShow:[1,2], + }, + { + title: 操作, + dataIndex: 'result_url', + ellipsis:true, + width:"140px", + align: 'center', + render: (text: any,record:any) => + {!identity&&} + downLoadLink(record.file_name,text)}>{identity?"下载文件":"下载"} + , + isShow:[1,2], + }, + ].filter((item:any)=>item.isShow.includes(modelType)) + // 获取列表数据 + const getResults = async ()=> { + setTableLoading(true) + const data:any = await dispatch({ + type: 'competitions/Results', + payload: { + identifier: identifier, + stage_id: gameItem?.id, + module_type:'worksubmit', + ...urlData, + } + }) + setTableList(data) + setTableLoading(false) + } + // 更新MD内容 + const getUpMDContent = async (data:any)=>{ + const res:any = await dispatch({ + type: 'competitions/updateMdContent', + payload: { + identifier: identifier, + stage_id: gameItem?.id, + competition_module_id:ItemData.id, + content:mdContent, + md_content_id:data?.id, + } + }) + res.status==0&&message.success(res.message); + setIsEdit(false); + await getTabResults(); + } + // 作品提交或者编辑 + const handleFormFinish = async (values:any)=>{ + console.log(values,fileList); + let res:any; + if(modelType==2&&fileList.length==0){ + message.error("请选择文件"); + return; + } + const Data:any = { + login:userinfo?.login, + container_type:"Competition", + file_name:fileList?.[0]?.name, + stage_type:gameItem?.id, + container_id:HeaderDetail?.id, + result_id:rowTable?.id, + module_type:'worksubmit', + } + if(modelType==1){ + const res:any = await Fetch(`/api/competitions/${identifier}/check_result_url.json`, + { + method:"GET", + params:{ + url:values.url, + stage_id:gameItem?.id, + result_id:rowTable?.id, + } + } + ) + if(res?.status!=0)return + Data["name"]=values.name; + Data["url"]=values.url; + } + if(modelType==1&&fileList.length==0){ + res=await dispatch({ + type: 'competitions/getWorkSubmitUpdateRes', + payload: { + identifier:identifier, + result_id:rowTable?.id, + name:values.name, + url:values.url, + stage_id:gameItem?.id, + result_url:rowTable?.result_url, + module_type:'worksubmit', + } + }) + }else{ + res=await uploadFile(fileList[0],Data) + } + if(res?.status == 0){ + message.success("提交成功"); + }else{ + message.info(res?.message||"提交失败"); + } + setIsSubmitModel(false); + setFileList([]); + getResults(); + } + // 下载所有作品 + const handleAllDownload = async ()=>{ + const res:any = await dispatch({ + type: 'competitions/Results', + payload: { + identifier: identifier, + stage_id: gameItem?.id, + page:1, + per_page:9999999, // TODO :查询所有列表数据 + keyword:"", + module_type:'worksubmit', + } + }) + const DownloadList = res?.results?.filter((item:any)=>item?.result_url&&item.file_name) + const modal = Modal.info({ + width: 460, + title:
正在导出参赛文件,请勿关闭或操作当前浏览器窗口
, + content:
当前进度: {0}/{DownloadList.length}
, + maskClosable: false, + className: styles.modal, + onOk: () => { + } + }); + const nameLsit:string[] = []; + const addzip = async (data:any,progress:number)=>{ + try{ + const zip = new JSZip(); + const response = await fetch(data.result_url, {method:"get"}); + const blob = await response.blob(); + zip.file(data.file_name,blob); + await zip.generateAsync({type:"blob"}).then((blob)=>{ + const getNameFile = (name:string,index:number=0)=>{ + if((index==0&&nameLsit.includes(name))||nameLsit.includes(`${name}(${index})`)){ + getNameFile(name,index+1); + }else{ + nameLsit.push(index==0 ? name:`${name}(${index})`) + zipAll.file(index==0 ? name+".zip" : `${name}(${index})`+".zip",blob); + } + } + getNameFile(`${data?.team_name}-${data?.user_name}`); + }) + modal.update({ + content:
当前进度: {progress}/{DownloadList.length}
, + }) + }catch(error){ + message.error(`${data.file_name}下载失败`); + } + } + if(DownloadList.length>0){ + let i = 0; + for (let item of DownloadList) { + await addzip(item,++i); + } + zipAll.generateAsync({type:"blob"}).then((blob)=>{ + downLoadLink(HeaderDetail.name,window.URL.createObjectURL(blob)); + }) + } + modal.destroy() + } + const uploadProps = { + maxCount: 1, + withCredentials: true, + fileList:fileList, + onRemove: () => { + setFileList([]); + }, + beforeUpload: (file: any) => { + const fileSize = file.size / 1024 / 1024; + const fileType = file.name.split(".").slice(-1)[0].toLowerCase(); + if ((modelType==1&&fileSize > 150||modelType==2&&fileSize/1024 > 1)||fileSize==0) { + message.error(`${file.name} 文件无法上传。${fileSize == 0 ? "文件内容不能为空" : `超过文件大小限制(${modelType==1? '150MB':'1G'})`}`) + return Promise.reject() + } + setFileList([file]) + return false + } + }; + + + return (
+ {gameItem? + {!identity&&StaffDetail.enrolled&&} + {identity&&!isEdit&&} + } + onChange={(activeKey)=>{ + const item = TabResults.stages.find((item:any)=>item.id==activeKey) + item.children.length>0?setGameItem(item.children[0]):setGameItem(item) + }}> + {TabResults.stages?.map((item:any,index:number)=>{item.name}
} key={item.id}> + { + isEdit ? + <> + setMdContent(e)}/> + + getUpMDContent(TabResults.rule_contents[index])}>提交 + + + : + } + {item.children.length>0&&{setGameItem(item.children.find((item:any)=>item.id==activeKey))}}> + {item.children?.map((ChildItem:any)=>)} + } + )} + :
+ {(StaffDetail.enrolled||identity)&& + {!identity&&StaffDetail.enrolled&&} + {identity&&!isEdit&&} + } + { + isEdit ? + <> + setMdContent(e)}/> + + getUpMDContent(TabResults.rule_contents?.[0])}>提交 + + + : + } +
} + {identity&& + + } + onChange={(e:any)=>{ + urlData.keyword = e.target.value + setUrlData(urlData) + }} + style={{background:"#F6F7F9"}} + bordered={false} + onPressEnter={getResults}/> +
当前共计作品{tableList.total_count}
+
+ + {modelType==1&&} + } className={styles.downBut} style={{marginLeft:"20px"}} onClick={handleAllDownload}>下载所有文件 + +
} + }} pagination={false}/> + + { + (gameItem?.end_time&&gameItem?.start_time||HeaderDetail.start_time&&HeaderDetail.end_time)&& + 提交时间:{moment(gameItem?.start_time||HeaderDetail.start_time).format("YYYY-MM-DD HH:mm:ss")}{moment(gameItem?.end_time||HeaderDetail.end_time).format("YYYY-MM-DD HH:mm:ss")} + } + { + urlData.page = page + setUrlData(urlData) + }}/> + + + 参数作品提交} + open={isSubmitModel} + bodyStyle={{padding:" 0px 25px 10px 25px"}} + footer={null} + onCancel={()=>{setIsSubmitModel(false);setFileList([]);setRowTable(null);}}> +
说明:参赛作品不支持删除,大赛进行中上传后的作品如需修改,可在【作品提交】列表点击“编辑”进行修改。
+
+ {modelType==1&&<> + + + + + } + { + if (Array.isArray(e))return e; + return e?.fileList; + }}> + {modelType==1&& + + + { e.preventDefault(); e.stopPropagation(); }}> +

提示:

+

1. 一次最多上传1个文件。

+

2. 单个文件大小请勿超过150M。

+ }> + { e.preventDefault(); e.stopPropagation(); }} className='iconfont icon-tishixiaowenhao ml5' style={{ cursor: 'pointer', color: '#C5C5C5' }} /> +
+
+
} + {modelType==2&& +

+

拖拽文件或者点击上传

+
} +
+ + + + + + + +
+ ) +} + + +export default connect(( + { + }: { + }) => ({ + }))(WorkSubmit) diff --git a/src/pages/Competitions/Detail/index.tsx b/src/pages/Competitions/Detail/index.tsx index e392c86a..e2e29285 100644 --- a/src/pages/Competitions/Detail/index.tsx +++ b/src/pages/Competitions/Detail/index.tsx @@ -35,6 +35,7 @@ import PhoneModal from '../components/PhoneModal' import env from '@/utils/env'; import ClaModal from '../components/ClaModal'; import SubCompetition from './components/SubCompetition'; +import WorkSubmit from './components/WorkSubmit'; interface PageProps extends ConnectProps { globalSetting: GlobalSettingModelState; @@ -97,6 +98,8 @@ const competitionDetails: FC = ({ const [isopen,setisopen]=useState(false); const [datas,setdatas]=useState(''); const [visible,setVisible]=useState(false); + // 作品提交 + const [isWorkSubmit,setIsWorkSubmit] = useState(false); const loction = useLocation(); const see = useRef(null); @@ -180,9 +183,14 @@ const competitionDetails: FC = ({ setItemData(data); setshowmake(false); setentrance(false) + setIsWorkSubmit(false); setModelType(item.module_type); - if (item.module_type === "chart") { + if (item.module_type === "worksubmit") { + setIssee(false); + setIsWorkSubmit(true); + getTabResults(); + }else if (item.module_type === "chart") { setIsRanKing(true) setIssee(false); getChartRules(); @@ -644,10 +652,11 @@ async function JoinTeams(name: any) { {isAward ? : null} {isRanKing ? : null} {ISsee ? : null} - {!ISsee &&!showmake&&!entrance&& !isRanKing && !isAward && !MdTab ? : null} + {!ISsee &&!showmake&&!entrance&& !isRanKing && !isAward && !MdTab && !isWorkSubmit ? : null} {MdTab && } {showmake && } {entrance&& } + {isWorkSubmit&&} diff --git a/src/service/competitions.ts b/src/service/competitions.ts index 24c160f0..544ea2fb 100755 --- a/src/service/competitions.ts +++ b/src/service/competitions.ts @@ -1,5 +1,12 @@ import Fetch from '@/utils/fetch'; import ENV from '@/utils/env'; +// 作品提交-作品编辑 /api/competitions/test22/update_result.json +export async function getWorkSubmitUpdateRes(params:any) { + return Fetch(`/api/competitions/${params.identifier}/update_result.json`, { + method: 'post', + body: params, + }); +} //获取在线竞赛列表 export async function getCompetitionsList(params: any) { return Fetch('/api/competitions.json', { diff --git a/yarn.lock b/yarn.lock index dac5c1ee..20292e0e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4307,9 +4307,9 @@ "lodash.uniq" "^4.5.0" "caniuse-lite@^1.0.0", "caniuse-lite@^1.0.30000981", "caniuse-lite@^1.0.30001109", "caniuse-lite@^1.0.30001286": - "integrity" "sha512-4udbs9bc0hfNrcje++AxBuc6PfLNHwh3PO9kbwnfCQWyqtlzg3py0YgFu8jyRTTo85VAz4U+VLxSlID09vNtWA==" - "resolved" "https://registry.npmmirror.com/caniuse-lite/download/caniuse-lite-1.0.30001287.tgz" - "version" "1.0.30001287" + "integrity" "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==" + "resolved" "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz" + "version" "1.0.30001512" "canvg@^3.0.6": "integrity" "sha1-m6CV8Vi5S5fKLJwcQHhbEdwI320="