From 6610f7f065f891fa005fa194ddc040b0f34fb1bc Mon Sep 17 00:00:00 2001 From: caishi <1149225589@qq.com> Date: Mon, 26 Dec 2022 15:26:57 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=96=B9=E7=99=BB=E5=BD=95-?= =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/css/edu-purge.css | 15 +- src/App.js | 10 + src/common/marked.js | 2 +- src/components/render-html.jsx | 1 + src/forge/Account/Index.jsx | 38 ++++ src/forge/Account/bind.jsx | 99 ++++++++++ src/forge/Account/image/lock.png | Bin 0 -> 435 bytes src/forge/Account/image/logo.png | Bin 0 -> 3542 bytes src/forge/Account/image/phone.svg | 3 + src/forge/Account/image/shield.png | Bin 0 -> 420 bytes src/forge/Account/image/user.png | Bin 0 -> 413 bytes src/forge/Account/index.scss | 85 +++++++++ src/forge/Account/unbind.jsx | 271 ++++++++++++++++++++++++++++ src/forge/Main/CoderDepotReadme.jsx | 1 - src/forge/Main/Index.scss | 4 +- 15 files changed, 525 insertions(+), 4 deletions(-) create mode 100644 src/forge/Account/Index.jsx create mode 100644 src/forge/Account/bind.jsx create mode 100644 src/forge/Account/image/lock.png create mode 100644 src/forge/Account/image/logo.png create mode 100644 src/forge/Account/image/phone.svg create mode 100644 src/forge/Account/image/shield.png create mode 100644 src/forge/Account/image/user.png create mode 100644 src/forge/Account/index.scss create mode 100644 src/forge/Account/unbind.jsx diff --git a/public/css/edu-purge.css b/public/css/edu-purge.css index eb8625a44..c289a14dd 100644 --- a/public/css/edu-purge.css +++ b/public/css/edu-purge.css @@ -1080,7 +1080,20 @@ a.shixun-task-btn { word-wrap: break-word; word-break: break-word; } - +.markdown_anchors{ + position: relative; +} +.markdown_anchors:hover .anchors{ + display: inline-block; +} +.markdown_anchors .anchors:hover{ + text-decoration: none; +} +.markdown_anchors .anchors { + color: inherit; + margin-left: -14px; + display: none; +} .markdown code { padding: 0; line-height: 23px; diff --git a/src/App.js b/src/App.js index 0e5921da5..0d86e4341 100644 --- a/src/App.js +++ b/src/App.js @@ -102,11 +102,16 @@ const Home = Loadable({ loading: Loading, }) +const Relaction = Loadable({ + loader: () => import("./forge/Account/Index"), + loading: Loading, +}); const LoginRegisterPage = Loadable({ loader: () => import("./modules/loginRegister/LoginRegisterPage"), loading: Loading, }); + const AboutUs = Loadable({ loader: () => import("./forge/AboutUs/AboutUs"), loading: Loading, @@ -371,6 +376,11 @@ class App extends Component { ) } /> + {/* 关联账号 */} + } + > {/* 登录 */} ' + text + '' + return '' + text + '' } marked.setOptions({ silent: true, diff --git a/src/components/render-html.jsx b/src/components/render-html.jsx index 3b7e4b520..9eafa5c74 100644 --- a/src/components/render-html.jsx +++ b/src/components/render-html.jsx @@ -31,6 +31,7 @@ export default ({ rs = rs.replace("

[TOC]

", getTocContent()) cleanToc() } + // 循环匹配所有emoji let matchStr = str.match(strRegexSub); if(matchStr && matchStr.length>0){ for(var i=0;i < matchStr.length;i++){ diff --git a/src/forge/Account/Index.jsx b/src/forge/Account/Index.jsx new file mode 100644 index 000000000..18087d324 --- /dev/null +++ b/src/forge/Account/Index.jsx @@ -0,0 +1,38 @@ +import React , { useState } from 'react'; +import './index.scss'; +import logo from './image/logo.png'; +import { Menu } from 'antd'; +import Bind from './bind'; +import UnBind from './unbind'; + +function Index(props){ + const [ key , setKey ] = useState("0"); + + // 选择menu + function chooseMenuFunc(e){ + setKey(e.key) + } + return( +
+
+ +
+
+

关联账号

+
+ + 已有账号,进行绑定 + 无账号,注册并绑定 + + { + key === "0" ? + + : + + } +
+
+
+ ) +} +export default Index; \ No newline at end of file diff --git a/src/forge/Account/bind.jsx b/src/forge/Account/bind.jsx new file mode 100644 index 000000000..33453191b --- /dev/null +++ b/src/forge/Account/bind.jsx @@ -0,0 +1,99 @@ +import React ,{ useState } from 'react'; +import { Form , Input , Button } from 'antd'; +import phone from './image/phone.svg'; +import lock from "./image/lock.png"; +import axios from 'axios'; + + +const phonereg = /^([1][3456789])\d{9}$/ +const emailreg = /^[a-zA-Z0-9]+([.\-_\\]*[a-zA-Z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/ +function Bind(props){ + const { form } = props; + + const { getFieldDecorator , getFieldsValue } = form; + const [ bindFlag , setBindFlag] = useState(true); + const type = props.match.params.type; + + // 绑定登录 + function bindloginFunc(){ + const {username, password } = getFieldsValue(); + if(username && password){ + var url = '/bind_user.json'; + axios.post(url,{ + username,password,type + }).then(result=>{ + if(result){ + window.location.href = "/"+result.data.login; + } + }) + } + } + + function accountConfirm(r,v,c){ + if(v){ + const {password } = getFieldsValue(); + if(!(phonereg.test(v) || emailreg.test(v))){ + setBindFlag(true); + c(`请输入正确的手机号或邮箱地址`); + }else if(password){ + setBindFlag(false); + } + }else{ + c(); + setBindFlag(true); + } + } + function psdConfirm(r,v,c){ + if(v){ + const { username } = getFieldsValue(); + if(phonereg.test(username) || emailreg.test(username)){ + setBindFlag(false); + }else{ + setBindFlag(true); + } + }else{ + c(); + setBindFlag(true); + } + } + return( +
+
+ + {getFieldDecorator('username',{ + rules:[ + { + required:true, + message:"请输入手机号或邮箱地址" + }, + { + validator: (rule, value, callback) => { accountConfirm(rule, value, callback) } + } + ], + validateTrigger:"onInput", + })(} size="large" placeholder="请输入手机号或邮箱地址"/>)} + + + {getFieldDecorator('password', { + rules: [ + { + required:true, + message:"请输入登录密码" + }, + { + validator: (rule, value, callback) => { psdConfirm(rule, value, callback) } + } + ], + validateTrigger:"onInput", + })( + } className="psd" size="large" placeholder="请输入登录密码" />, + )} + + +
+
+ ) +} +export default Form.create({ name: 'Bind' })(Bind); \ No newline at end of file diff --git a/src/forge/Account/image/lock.png b/src/forge/Account/image/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..4d5d27c2f6788dd40b7a26b81bd05e17d0c94ec3 GIT binary patch literal 435 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 QC;$Ke07*qoM6N<$g4-h0?*IS* literal 0 HcmV?d00001 diff --git a/src/forge/Account/image/phone.svg b/src/forge/Account/image/phone.svg new file mode 100644 index 000000000..a33d110a9 --- /dev/null +++ b/src/forge/Account/image/phone.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/forge/Account/image/shield.png b/src/forge/Account/image/shield.png new file mode 100644 index 0000000000000000000000000000000000000000..475867bf3bb14f69fcf3d71772da6b5b26e8d8e6 GIT binary patch literal 420 zcmV;V0bBlwP)-=X5Z#4THpvb22Fe6_zf?jIbAot-;0eMJ$PG9`Qa~z% zK00^=JwcKtm7mRi^gHO_3{5Ea@7uTU?E|6ZOS5$VNY8{2`NDo}>p@-o$jdijpvRrK#JtTr1A{2-ePlZ$Hh9oaXNHXB}F~9c-XyZ>D z3)AI_yor5cZd8uj7hehBT$5fInu_o0&63x{gdZ93k@Q} z9Ba0#jCo$({gN!$sV^X~E4%P);j8$>{c= zc8q1b4Z-?x;t%_kz(t(yq_=4`5W&PB^r{utX#~PenK?C(w%#7=HSEp<&G2_`NLJr=YH{AT& z<}tZS-duna3zUZ(DaEq<>!CF|%oIqg+mKk_Ux%D3%n$GjU|g+uoE)n*00000NkvXX Hu0mjf5G=K_ literal 0 HcmV?d00001 diff --git a/src/forge/Account/index.scss b/src/forge/Account/index.scss new file mode 100644 index 000000000..1c9de9ccd --- /dev/null +++ b/src/forge/Account/index.scss @@ -0,0 +1,85 @@ +.bodies{ + height: 100vh; + width: 100%; + background-color: rgba(245, 248, 255, 1); + .logo{ + width: 100%; + background-color: #fff; + padding:7px 26px; + } + .content{ + padding-top: 50px; + margin:0px auto; + width: 570px; + &>p{ + height:42px; + line-height:42px; + font-weight:400; + color:#000000; + font-size:30px; + margin-bottom: 32px!important; + text-align: center; + } + .panels{ + background-color: #fff; + border-radius:6.6px; + padding:32px 42px; + .panelsMenu{ + border-bottom: none!important; + margin-bottom: 36px!important; + .ant-menu-item{ + padding: 0px; + margin-right: 60px!important; + } + } + .bind_form{ + padding-bottom: 48px; + .has-error .ant-input:focus,.has-error .ant-input, .has-error .ant-input:hover{ + border-color: #ff4d4f!important; + } + .ant-btn-primary[disabled]{ + background-color:rgba(70, 106, 255,0.55); + color: #fff; + border:none + } + .ant-input-group-addon{ + background-color: transparent; + } + .ant-input{ + border-left: none; + background-color: #fff!important; + } + .ant-input:focus,.ant-input:hover{ + border-right: 1px solid #ddd!important; + border-color: #ddd!important; + border-left: none!important; + } + .codeBut{ + border:1px solid rgba(70, 106, 255, 1)!important; + span{ + color: rgba(70, 106, 255, 1); + } + } + .codeBut.disable{ + border:1px solid #ddd!important; + span{ + color: #ddd; + } + } + .login_register_head{ + display: flex; + justify-content: space-between; + align-items: center; + &>span:first-child{ + font-size: 1.5em; + font-weight: 600; + color: #000000; + line-height: 1.5; + } + //注册页面的获取验证码输入框 + .ant-btn{margin-left: 15px; } + } + } + } + } +} \ No newline at end of file diff --git a/src/forge/Account/unbind.jsx b/src/forge/Account/unbind.jsx new file mode 100644 index 000000000..57db4d8e3 --- /dev/null +++ b/src/forge/Account/unbind.jsx @@ -0,0 +1,271 @@ +import React ,{ useState , useRef } from 'react'; +import { Form , Input , Button , message } from 'antd'; +import user from "./image/user.png"; +import lock from "./image/lock.png"; +import shield from './image/shield.png'; +import phone from './image/phone.svg'; +import axios from 'axios'; +import { setmiyah } from 'educoder'; + +const phonereg = /^([1][3456789])\d{9}$/ +const emailreg = /^[a-zA-Z0-9]+([.\-_\\]*[a-zA-Z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/ +function Bind(props){ + const { form } = props; + const seconds = useRef(); + let interval = undefined; + const { getFieldDecorator , getFieldsValue } = form; + const [ bindFlag , setBindFlag] = useState(true); + const [ captchaFlag , setCaptchaFlag ] = useState(true); + const [secondsStr, setSecondsStr] = useState(60); + const [ getCaptchaBut , setGetCaptchaBut ] = useState(true); + + + //判断用户名(username)是否注册 + function usernameConfirm(rule, value, callback){ + value ? axios.post(`/accounts/check.json`, { + value: value, + type: 1 + }).then(response => { + if(response){ + if (response.data.status === -1) { + callback('该名称已经被使用'); + } else { + const { captcha , password , confirm_password,username} = getFieldsValue(); + if( captcha && password && confirm_password && (password === confirm_password) &&(phonereg.test(username) || emailreg.test(username)) ){ + setBindFlag(false); + } + } + } + callback(); + }):callback(); + } + + function accountConfirm(rule, value, callback){ + if(value){ + const { captcha , password , confirm_password,register_username} = getFieldsValue(); + if(!(phonereg.test(value) || emailreg.test(value))){ + setCaptchaFlag(true); + callback(`请输入正确的手机号或邮箱地址`); + }else{ + setCaptchaFlag(false); + if(captcha && password && confirm_password && (password === confirm_password) && register_username){ + setBindFlag(false); + } + } + callback(); + }else{ + setBindFlag(true); + callback(); + } + } + function psdConfirm(r,v,c){ + if(v){ + const { username , captcha , confirm_password , register_username } = getFieldsValue(); + if(register_username && (phonereg.test(username) || emailreg.test(username)) && captcha && confirm_password && (v=== confirm_password) ){ + setBindFlag(false); + }else{ + setBindFlag(true); + } + c(); + }else{ + c(); + setBindFlag(true); + } + } + function captchaConfirm(r,v,c){ + if(v){ + const { username , password , confirm_password , register_username } = getFieldsValue(); + if(register_username && (phonereg.test(username) || emailreg.test(username)) && password && confirm_password && (password ===confirm_password) ){ + setBindFlag(false); + }else{ + setBindFlag(true); + } + c(); + }else{ + c(); + setBindFlag(true); + } + } + function repsdConfirm(r,v,c){ + if(v){ + const { username , password , register_username , captcha} = getFieldsValue(); + if(v !== password){ + c("两次输入的密码不一样"); + }else{ + c(); + } + if((phonereg.test(username) || emailreg.test(username)) && password && register_username && captcha){ + setBindFlag(false); + }else{ + setBindFlag(true); + } + c(); + }else{ + c(); + } + } + + //获取验证码 + function getCaptcha() { + const { username }= getFieldsValue(); + if (username) { + // 倒计时开始 + setCaptchaFlag(true); + setGetCaptchaBut(false); + seconds.current = 60; + setSecondsStr(60); + !interval && clearInterval(interval); + interval = setInterval(() => { + if (seconds.current > 1) { + let oldSeconds = seconds.current; + seconds.current = oldSeconds - 1; + setSecondsStr(oldSeconds - 1); + } else { + clearInterval(interval); + //倒计时结束->可以获取验证码 + setCaptchaFlag(false); + setGetCaptchaBut(true); + } + }, 1000) + + //请求获取验证码接口 + axios.get(`/accounts/get_verification_code.json`, { + params: { + login: username, + type: 1, + smscode: setmiyah(username), + } + }).then(response => { + if (response.data && response.data.status === 0) { + //验证码发送成功 + setGetCaptchaBut(false); + } + }) + } + } + // 绑定登录 + function bindRegFunc(){ + form.validateFields((err, values) => { + if (!err) { + var url = '/accounts/register.json'; + axios.post(url,{ + namespace: values.register_username, + login: values.username, + password: values.password, + password_confirmation: values.confirm_password, + code: values.captcha + }).then(response=>{ + if(response.data && response.data.status === -6){ + //验证码不正确 + form.setFields({captcha: {value:values.captcha,errors:[new Error('验证码错误,请重新输入')]}}); + + }else if(response.data && response.data.status === 0){ + //注册成功,页面跳转即可,注册后登录流程forge处理了 + window.location.href = "/"+values.register_username; + } + }) + } + }) + } + return( +
+
+ + {getFieldDecorator('register_username',{ + rules:[ + { + required:true, + message:"请输入用户名" + }, + { + pattern: /^[a-zA-Z]/, + message: "用户名必须以字母开头" + }, + { + pattern: /[a-zA-Z0-9]$/, + message: "用户名只能使用英文字母和数字" + }, + { + min: 4, + max: 15, + message: "用户名长度为4到15个字符" + }, + { + validator: (rule, value, callback) => { usernameConfirm(rule, value, callback) } + } + ], + validateTrigger:"onBlur", + validateFirst: true, + })(} size="large" autoComplete="off"/>)} + + + {getFieldDecorator('username',{ + rules:[ + { + required:true, + message:"请输入手机号或邮箱地址" + }, + { + validator: (rule, value, callback) => { accountConfirm(rule, value, callback) } + } + ], + validateTrigger:"onInput", + })(} size="large" placeholder="请输入手机号或邮箱地址"/>)} + + +
+ {getFieldDecorator('captcha', { + rules: [{ + required: true, + message: "请输入验证码" + }, + { + validator: (rule, value, callback) => { captchaConfirm(rule, value, callback) } + }], + validateTrigger: "onInput", + })( + } placeholder="请输入验证码" autoComplete="off"/> + )} + +
+
+ + {getFieldDecorator('password', { + rules: [ + { + required:true, + message:"请输入登录密码" + }, + { + validator: (rule, value, callback) => { psdConfirm(rule, value, callback) } + } + ], + validateTrigger:"onInput", + })( + } className="psd" size="large" placeholder="请输入登录密码" />, + )} + + + {getFieldDecorator('confirm_password', { + rules: [ + { + required:true, + message:"请再次输入登录密码" + }, + { + validator: (rule, value, callback) => { repsdConfirm(rule, value, callback) } + } + ], + validateTrigger:"onBlur", + })( + } className="psd" size="large" placeholder="请确认登录密码" />, + )} + + +
+
+ ) +} +export default Form.create({ name: 'Bind' })(Bind); \ No newline at end of file diff --git a/src/forge/Main/CoderDepotReadme.jsx b/src/forge/Main/CoderDepotReadme.jsx index 93d8b04c2..5e8bc3532 100644 --- a/src/forge/Main/CoderDepotReadme.jsx +++ b/src/forge/Main/CoderDepotReadme.jsx @@ -19,7 +19,6 @@ function CoderDepotReadme({ operate , history , readme , ChangeFile }){ },[readme]) useEffect(()=>{ - let path = history.location.pathname; const items = $.map($("#readme").find("h1,h2,h3,h4,h5,h6"), function (el, _) { const anchor = el.id; const level = el.tagName.replace("H", ""); diff --git a/src/forge/Main/Index.scss b/src/forge/Main/Index.scss index f17bc4805..a2ff111c4 100644 --- a/src/forge/Main/Index.scss +++ b/src/forge/Main/Index.scss @@ -521,7 +521,9 @@ } } } - +.readmeFile{ + overflow: inherit; +} .readmeFile p{ white-space: normal; } \ No newline at end of file