From 4e03c1d82dbaf2d8cb8bf42f863cfaffa64aa187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Thu, 23 Mar 2023 16:23:58 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=BD=95=E5=88=9D=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 2 +- src/App.scss | 3 +- src/assets/iconfont/iconfont.css | 83 +++++++++ src/assets/iconfont/iconfont.ttf | Bin 0 -> 7328 bytes src/assets/iconfont/iconfont.woff | Bin 0 -> 4660 bytes src/assets/iconfont/iconfont.woff2 | Bin 0 -> 3976 bytes src/assets/images/commen/avatar.png | Bin 0 -> 836 bytes src/assets/images/login/banner.png | Bin 0 -> 27122 bytes src/assets/logo.png | Bin 0 -> 2457 bytes src/compenents/footer/index.module.scss | 0 src/compenents/footer/index.tsx | 21 +++ src/compenents/index.ts | 2 + src/compenents/no-header/index.module.scss | 29 ++++ src/compenents/no-header/index.tsx | 19 +++ src/index.scss | 185 ++++++++++++++++++++ src/pages/login/index.module.scss | 73 ++++++++ src/pages/login/index.tsx | 190 +++++++++++++++++---- 17 files changed, 572 insertions(+), 35 deletions(-) create mode 100644 src/assets/iconfont/iconfont.css create mode 100644 src/assets/iconfont/iconfont.ttf create mode 100644 src/assets/iconfont/iconfont.woff create mode 100644 src/assets/iconfont/iconfont.woff2 create mode 100644 src/assets/images/commen/avatar.png create mode 100644 src/assets/images/login/banner.png create mode 100644 src/assets/logo.png create mode 100644 src/compenents/footer/index.module.scss create mode 100644 src/compenents/footer/index.tsx create mode 100644 src/compenents/index.ts create mode 100644 src/compenents/no-header/index.module.scss create mode 100644 src/compenents/no-header/index.tsx diff --git a/index.html b/index.html index 775bdd3..6175204 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - Vite + React + TS + PlayEdu
diff --git a/src/App.scss b/src/App.scss index b9d355d..25a8670 100644 --- a/src/App.scss +++ b/src/App.scss @@ -1,7 +1,6 @@ #root { - max-width: 1280px; + width: 100%; margin: 0 auto; - padding: 2rem; text-align: center; } diff --git a/src/assets/iconfont/iconfont.css b/src/assets/iconfont/iconfont.css new file mode 100644 index 0000000..ef30ad7 --- /dev/null +++ b/src/assets/iconfont/iconfont.css @@ -0,0 +1,83 @@ +@font-face { + font-family: "iconfont"; /* Project id 3943555 */ + src: url('iconfont.woff2?t=1679275935231') format('woff2'), + url('iconfont.woff?t=1679275935231') format('woff'), + url('iconfont.ttf?t=1679275935231') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-waterprint:before { + content: "\e747"; +} + +.icon-adduser:before { + content: "\e743"; +} + +.icon-upvideo:before { + content: "\e744"; +} + +.icon-onlinelesson:before { + content: "\e745"; +} + +.icon-department:before { + content: "\e746"; +} + +.icon-icon-drag:before { + content: "\e740"; +} + +.icon-icon-edit:before { + content: "\e741"; +} + +.icon-icon-delete:before { + content: "\e742"; +} + +.icon-icon-video:before { + content: "\e73f"; +} + +.icon-icon-home:before { + content: "\e737"; +} + +.icon-icon-category:before { + content: "\e738"; +} + +.icon-icon-file:before { + content: "\e739"; +} + +.icon-icon-study:before { + content: "\e73a"; +} + +.icon-icon-user:before { + content: "\e73b"; +} + +.icon-icon-setting:before { + content: "\e73c"; +} + +.icon-icon-password:before { + content: "\e73d"; +} + +.icon-a-icon-logout:before { + content: "\e73e"; +} + diff --git a/src/assets/iconfont/iconfont.ttf b/src/assets/iconfont/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d3e0d7d88e5901410c411b1709336cc987865cc3 GIT binary patch literal 7328 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 literal 0 HcmV?d00001 diff --git a/src/assets/iconfont/iconfont.woff b/src/assets/iconfont/iconfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..aab9bdf83129e4c45a734f643083663668db6249 GIT binary patch literal 4660 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 T%bx!@=F$!WCWUG60|5UA^f9y< literal 0 HcmV?d00001 diff --git a/src/assets/iconfont/iconfont.woff2 b/src/assets/iconfont/iconfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..699058c99c34d8b592f25491651ce9225c256c73 GIT binary patch literal 3976 zcmV;34|ni)Pew8T0RR9101t=&3jhEB034tI01r3-0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/commen/avatar.png b/src/assets/images/commen/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..b71724aed2b0af32861cf73d645b11e418e85a20 GIT binary patch literal 836 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw3=&b&bO2I|0(?ST|N8~}|NkGz`|lt0|L3p& z{(=Af0{;gD{SOHK?;rd>H1vOL?EklK|1VzhzoGH}=gavZ*|Yzr&G?^`3gQAmN(zWPaNz&y)&F~X zLG1KQ5QziyOn7Dube~yCkYDi3nGA_D%S&Cf)%aOw!oY;Swj5745U&(OB&hL%5TXJ8^a!XZL(T=^uUh$AE)=&$7o$#lr~%N)~D#cj*SBLf!(?{E>3^5_)K8>zN-If z$q#%uQ%=2oq4xQ6^?YvO^tyfjPa7IuJJj(gvwMBff$g3VHyoA{L&nw+#I=Tn!&f-;vd)vpsd zwYgt)@7;J>JwW^W2~B^AoU0y@PnouHb*1DLw@0X$CVn^mEPh%z`rFMn=QdOxp14J~ zrsHq8v+)k28H;8oeEyoB%W=br`;0eJQ#7-Sk&l>A{kFI#Ea^-$w)oBu{KnpQ>vh}b z&+FfFez@JuH)Eq5lS{$TU8gTq?d0DinSC>pbNcSgH8;{;+K7AD`EPcNp4rx@7R}?z zp0)Sq7iNj2Zkb9|Coc<5Y*AdtaMdTMLh9J@r3Ful4jlZtqqw--{qc!AJ9hNuM%357 z2$qj~d%orS^t|s+_kM2N^!~){qWiy1ZrRVi`g}E)(Wi?#iW#31tEVU)-=0=pStau5 jj{an^LB{Ts5jS#d_ literal 0 HcmV?d00001 diff --git a/src/assets/images/login/banner.png b/src/assets/images/login/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..5c4ef98a9b19c26f6822e4e2a03fdca84752f05d GIT binary patch literal 27122 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 WAnk52;|1LS0000#9 zx#x&|0(()w+WyHNJVZF5&+Q@4&WYy?|38Lu{ig`yIl=zPe=`4m!Vv#m|H*OwH}gM7 zoZvhd@*jmgHTYll*V3OO|0Di)>n8z$%n(q90@}KfNh&QD~+{x_i-5eRlgLz zoj&yNnEbkHoF);J6?W7g12>mub~>Ihj)dL{VOQL2e$nIOuzut^0I=_>1Jni`J@wJk zEph6YWRAWX%K2ouK|xvIS^|}91NlXBGVb}%w#evIrY-8tU0+hisLC6G`X`0urS>?X zp#8c6#`P+btA z1-~-!+mqK{9%$$}RLL5=n|P0`%04D)aqy6wz-q*S2­Y#TCaxUWol9sN~KseHFR zpUS<$OzD{zsiLcVGJpT*Wb{KPr&=xbLR2scrAlDZf4Z zy!m^@)XX~)BifKBe^NyI>tN7%CQiIUqYq+THT03#sDiuPAT7K7V{X2Ls525S3?+-P zoZHf0jZN0&&Kl(P1u=#1Hegv(#)Q&YX_^QR%ufQZr@|RFco7|GBgWyUwI*o~zYvOU z+k7jl=bH*kskS{pV!_NJT*8VpRJt?MxF&xPt+kCCeCK1YTPBChZy7`Pzv{%iE!Ods za}yF@JBcHam3W@ zY6y=|5BrUKEU3&5qh7?-bvFYR()$#~hdYeKB@CWs>1dVsJ;>a50vqAOngBO6yPp|{ z2l^^5wS10_x?LAhW67QqHI^}doMJCCGfN}*<0nGYyGzPE#Df#Da3Pjblw~4?mO+K3 zrid0X&>!@n^WIY%68GQM*m5ZJ3t(hf2}9~R@)h)fMaSK@QS$9siRwI!=wP4C0?(k% zHO-()s=}hAZkn2Hq0_}{lCO0pnHu&3p&hZrew@}iG$yLkPpih%3~_18f2H5N3&~B9 zvzZN~?Fv~qTIc(K{j>~&K}P1oB%%|lpk;;Mh_^kK#w27GL5!?_vZ zeS$5*{`U{r;19+0fQEIKBXxTke+w1!w5d&G*lsDOM%-s=1W8JDSW2q2zSq4$pVlFl zTAVpke5;z%D%aqC|N44Qe;Zgq+wB8fa2DVWku*M{ku)bKfF^SkPPJ2$YKyrWDT`W; zFsNpd!BA65lv3g_?gQGihx( z&W*`y@-kZn9VEE1DsHa{c;#7kr;D3jLlY8=#+$T-9?jf%ei1&CRY+T-2%DX37ra64 z7{Gb@x@PS}4cCHftnoSKc0K4(|;mW%iKaB1dJHkB%mx3wY&hDHg(ut!$(cUpdh-A(m$2lvz z@hX_Je5?y#1LRo#{fqF>-n5z${3*fIRljF9;91y*iglcpLr1=;y~*_CE*8{Kkep{* zF~cAE$?GjvR)g0~2FH>@fB#c7iGg@KHw1LFWZ&~%ui4GrN5I0uz2vS*-TJZW>eXxU z9ih%WzK}rEjRj;m&YV(=Hsj#Oz5Kge?SiNUKLP>+w8MBK1yA4B{K#F0yzVqkE+7_ z7cU^R>h+G4d2LZ0<3$ajLijU}r1Hehp?^*4Z2#J*L35Q&=H{fIz7xKE$DRA@8fooC zCPg?heUKSvH<;R7rp05g? z9t^b3d!;_ohz*gtG`eQ&^EGr{H)mAFu5%Ya$^BtR)~+SH1ymj`SVhaT6;Bb_X2Xc{ zHk~_)&*S6BbI_2c<0P|UeU}6GdQHTJm-|dUk7vuRqGJ*{J5aTT8o#0)_r-))ZIo_7yURdYSnW$;IGUxESemg#^> z*G==Bn{i-JV$OO}pl){$_?nY)+P7AP={tpxPY1YIJcjTKpZbSnQGGknP09K$&5}SV z^=XN%gEu`<7vu+EZc|5xYLwz5*#TnT%PB`oQQOl6Ze(^n3r(hiimi=iXfpDr)OWOK zKHt;*abcS4vVLGOiJh6Qps&2%?~nw&Vv2g7?%E { + return ( + + + + ); +}; diff --git a/src/compenents/index.ts b/src/compenents/index.ts new file mode 100644 index 0000000..877f643 --- /dev/null +++ b/src/compenents/index.ts @@ -0,0 +1,2 @@ +export * from "./footer"; +export * from "./no-header"; \ No newline at end of file diff --git a/src/compenents/no-header/index.module.scss b/src/compenents/no-header/index.module.scss new file mode 100644 index 0000000..7520dd2 --- /dev/null +++ b/src/compenents/no-header/index.module.scss @@ -0,0 +1,29 @@ +.app-header { + background-color: #f6f6f6; + box-sizing: border-box; + -moz-box-sizing: border-box; + /* Firefox */ + -webkit-box-sizing: border-box; + /* Safari */ + padding: 0px 24px; +} + +.main-header { + width: 1200px; + height: 60px; + line-height: 60px; + display: flex; + align-items: center; + justify-content: space-between; + margin: 0 auto; +} + +.App-logo { + width: 124px; + height: 40px; +} + +.top-main { + display: flex; + align-items: center; +} diff --git a/src/compenents/no-header/index.tsx b/src/compenents/no-header/index.tsx new file mode 100644 index 0000000..6fd1f50 --- /dev/null +++ b/src/compenents/no-header/index.tsx @@ -0,0 +1,19 @@ +import React from "react"; +import styles from "./index.module.scss"; +import { useDispatch } from "react-redux"; +import { useNavigate } from "react-router-dom"; +import { Image } from "antd"; +import logo from "../../assets/logo.png"; + +export const NoHeader: React.FC = () => { + const dispatch = useDispatch(); + const navigate = useNavigate(); + + return ( +
+
+ +
+
+ ); +}; diff --git a/src/index.scss b/src/index.scss index 2c3fac6..38e2d6b 100644 --- a/src/index.scss +++ b/src/index.scss @@ -1,3 +1,7 @@ +@import "./assets/iconfont/iconfont.css"; + +$primaryColor: #ff4d4f; + :root { font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; line-height: 1.5; @@ -67,3 +71,184 @@ button:focus-visible { background-color: #f9f9f9; } } + +.w-250px { + width: 250px; +} + +.w-300px { + width: 300px; +} + +.w-350px { + width: 350px; +} + +.w-400px { + width: 200px; +} + +.w-450px { + width: 200px; +} + +.w-500px { + width: 200px; +} + +.mr-5 { + margin-right: 5px; +} + +.ml-5 { + margin-left: 5px; +} + +.ml-8 { + margin-left: 8px; +} + +.mt-10 { + margin-top: 10px; +} + +.ml-15 { + margin-left: 15px; +} + +.ml-120 { + margin-left: 120px; +} + +.ml-16 { + margin-left: 16px; +} + +.mr-16 { + margin-right: 16px; +} + +.mb-8 { + margin-bottom: 8px; +} + +.mb-10 { + margin-bottom: 10px; +} + +.mt-24 { + margin-top: 24px; +} + +.mb-24 { + margin-bottom: 24px; +} + +.mr-24 { + margin-right: 24px; +} + +.mb-28 { + margin-bottom: 28px; +} + +.mt-50 { + margin-top: 50px; +} + +.mb-50 { + margin-bottom: 50px; +} + +.helper-text { + height: 24px; + font-size: 12px; + font-weight: 400; + color: rgba(0, 0, 0, 0.45); + line-height: 24px; +} + +.float-left { + width: 100%; + height: auto; + float: left; +} + +.d-flex { + display: flex; + align-items: center; +} + +.j-flex { + display: flex; + justify-content: center; +} + +.d-j-flex { + display: flex; + align-items: center; + justify-content: center; +} + +.j-r-flex { + display: flex; + justify-content: right; +} + +.j-b-flex { + display: flex; + align-items: center; + justify-content: space-between; +} + +.c-flex { + display: flex; + flex-direction: column; +} + +.c-a-flex { + display: flex; + flex-direction: column; + align-items: center; +} + +.flex-1 { + flex: 1; +} + +.primary { + color: $primaryColor; +} + +.c-yellow { + color: #e1a500; +} + +.c-success { + color: #04c877; +} + +.c-green { + color: #00cc66; +} + +.c-red { + color: $primaryColor; +} + +.login-box { + .ant-btn { + font-size: 18px !important; + font-weight: 500 !important; + } + + .ant-input, + .ant-input-password { + font-weight: 400; + font-size: 18px !important; + background-color: #f6f6f6; + &::placeholder { + color: rgba(0, 0, 0, 0.45); + } + } +} diff --git a/src/pages/login/index.module.scss b/src/pages/login/index.module.scss index e69de29..7da7581 100644 --- a/src/pages/login/index.module.scss +++ b/src/pages/login/index.module.scss @@ -0,0 +1,73 @@ +.login-content { + width: 100%; + float: left; + height: 100vh; + background-color: #fff; + position: relative; + display: flex; + flex-direction: column; + justify-content: space-between; + .title { + width: 120px; + height: auto; + font-size: 30px; + font-weight: 600; + color: #333333; + line-height: 30px; + border-bottom: 4px solid #ff4d4f; + box-sizing: border-box; + padding-bottom: 10px; + margin: 0 auto; + margin-top: 100px; + } + .login-box { + width: 1200px; + height: 366px; + background: #ffffff; + display: flex; + margin: 0 auto; + margin-top: 80px; + .left-box { + width: 595px; + height: 100%; + box-sizing: border-box; + padding: 33px 60px; + .icon { + width: 475px; + height: 300px; + } + } + .right-box { + width: 520px; + height: 100%; + box-sizing: border-box; + border-left: 1px solid #d8d8d8; + padding: 0px 60px; + display: flex; + flex-direction: column; + .captcha-box { + width: 125px; + height: 54px; + margin-left: 15px; + border-radius: 8px; + background-color: rgba(#ff4d4f, 0.1); + display: flex; + + .catpcha-loading-box { + width: 125px; + height: 54px; + line-height: 54px; + text-align: center; + } + + .captcha { + width: 125px; + height: 54px; + border: none; + cursor: pointer; + border-radius: 8px; + } + } + } + } +} diff --git a/src/pages/login/index.tsx b/src/pages/login/index.tsx index efffc50..c9d5698 100644 --- a/src/pages/login/index.tsx +++ b/src/pages/login/index.tsx @@ -1,40 +1,166 @@ -import { Button } from "antd"; +import { Spin, Input, Button, message } from "antd"; +import React, { useState, useEffect } from "react"; +import styles from "./index.module.scss"; +import banner from "../../assets/images/login/banner.png"; import { useDispatch, useSelector } from "react-redux"; +import { useNavigate } from "react-router-dom"; import { loginAction, logoutAction } from "../../store/user/loginUserSlice"; +import { login, system, user } from "../../api/index"; +import { setToken } from "../../utils/index"; +import { Footer, NoHeader } from "../../compenents"; -const LoginPage = () => { +const LoginPage: React.FC = () => { const dispatch = useDispatch(); - const loginState = useSelector((state: any) => { - return state.loginUser.value; - }); - - return ( - <> - + const navigate = useNavigate(); + const [loading, setLoading] = useState(false); + const [image, setImage] = useState(""); + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [captchaVal, setCaptchaVal] = useState(""); + const [captchaKey, setCaptchaKey] = useState(""); + const [captchaLoading, setCaptchaLoading] = useState(true); - {loginState.isLogin && ( - - )} - + useEffect(() => { + fetchImageCaptcha(); + }, []); + + const fetchImageCaptcha = () => { + setCaptchaLoading(true); + system.imageCaptcha().then((res: any) => { + setImage(res.data.image); + setCaptchaKey(res.data.key); + setCaptchaLoading(false); + }); + }; + + const loginSubmit = (e: any) => { + if (!email) { + message.error("请输入学员邮箱账号"); + return; + } + if (!password) { + message.error("请输入密码"); + return; + } + if (!captchaVal) { + message.error("请输入图形验证码"); + return; + } + if (loading) { + return; + } + handleSubmit(); + }; + + const keyUp = (e: any) => { + if (e.keyCode === 13) { + loginSubmit(e); + } + }; + + const handleSubmit = () => { + if (loading) { + return; + } + setLoading(true); + login + .login(email, password, captchaKey, captchaVal) + .then((res: any) => { + const token = res.data.token; + setToken(token); + getUser(); + }) + .catch((e) => { + setLoading(false); + setCaptchaVal(""); + fetchImageCaptcha(); + }); + }; + + const getUser = () => { + user.detail().then((res: any) => { + const data = res.data; + dispatch(logoutAction(data.user)); + setLoading(false); + navigate("/"); + }); + }; + + return ( +
+
+ +
学员登录
+
+
+ +
+
+
+ { + setEmail(e.target.value); + }} + style={{ width: 400, height: 54 }} + placeholder="请输入学员邮箱账号" + onKeyUp={(e) => keyUp(e)} + /> +
+
+ { + setPassword(e.target.value); + }} + style={{ width: 400, height: 54 }} + placeholder="请输入密码" + /> +
+
+ { + setCaptchaVal(e.target.value); + }} + onKeyUp={(e) => keyUp(e)} + /> +
+ {captchaLoading && ( +
+ +
+ )} + + {!captchaLoading && ( + + )} +
+
+
+ +
+
+
+
+
+ +
+
); }; -export default LoginPage; \ No newline at end of file +export default LoginPage;