diff --git a/src/forge/SecuritySetting/Index.jsx b/src/forge/SecuritySetting/Index.jsx index beb45b42f..cdabd86d3 100644 --- a/src/forge/SecuritySetting/Index.jsx +++ b/src/forge/SecuritySetting/Index.jsx @@ -66,6 +66,10 @@ const Disposition = Loadable({ loader: () => import("./bot/disposition"), loading: Loading, }); +const Mysite = Loadable({ + loader: () => import("./website/mySiteList"), + loading: Loading, +}); function Index(props){ const { current_user,mygetHelmetapi , checkIfLogin } = props; @@ -73,6 +77,8 @@ function Index(props){ const notice_url = mygetHelmetapi && mygetHelmetapi.common && mygetHelmetapi.common.notice; const [ avatarVisible , setAvatarVisible ] = useState(false); + const [active, setActive] = useState(1); + console.log('active', active); useEffect(()=>{ if(checkIfLogin() === false){ @@ -80,6 +86,28 @@ function Index(props){ } },[]) + useEffect(()=>{ + console.log('pathname', pathname, ["/settings/profile"].indexOf(pathname)); + if(["/settings/profile"].indexOf(pathname) !== -1){ + setActive(1); + }else if(["/settings/emails", "/settings/phone", "/settings/password", "/settings/cancel"].indexOf(pathname) !== -1){ + setActive(2); + }else if(["/settings/notice/config"].indexOf(pathname) !== -1){ + setActive(4); + }else if(["/settings/notice"].indexOf(pathname) !== -1){ + setActive(3); + }else if(["/settings/SSH"].indexOf(pathname) !== -1){ + setActive(5); + }else if(["/settings/CLA"].indexOf(pathname) !== -1){ + setActive(6); + }else if(["/settings/mybot"].indexOf(pathname) !== -1){ + setActive(7); + }else if(["/settings/installbot"].indexOf(pathname) !== -1){ + setActive(8); + }else if(["/settings/mysite"].indexOf(pathname) !== -1){ + setActive(9); + } + }, [pathname]) function onCancelAvatar(){ setAvatarVisible(false); @@ -108,23 +136,27 @@ function Index(props){ {notice_url && } + @@ -190,6 +222,12 @@ function Index(props){ )} > + ( + + )} + > ( @@ -224,6 +262,13 @@ function Index(props){ )} > + {/* 个人建站 */} + ( + + )} + > diff --git a/src/forge/SecuritySetting/website/index.scss b/src/forge/SecuritySetting/website/index.scss new file mode 100644 index 000000000..89b9d18c0 --- /dev/null +++ b/src/forge/SecuritySetting/website/index.scss @@ -0,0 +1,8 @@ +.default_head{ + height: 65px; + line-height: 64px; + border-bottom: 1px solid rgba(224, 230, 245, 1); + color:#151d40; + font-size:17px; + padding-bottom:20px; +} \ No newline at end of file diff --git a/src/forge/SecuritySetting/website/mySiteList.jsx b/src/forge/SecuritySetting/website/mySiteList.jsx new file mode 100644 index 000000000..4c2417778 --- /dev/null +++ b/src/forge/SecuritySetting/website/mySiteList.jsx @@ -0,0 +1,16 @@ +import React, { useState, useEffect, Fragment } from "react"; +import { Button, Icon, message, Modal } from "antd"; +import './index.scss'; + +function MySiteList(props){ + const {current_user} = props; + + useEffect(()=>{ + document.title='我的站点'; + }, []) + + return +
我的站点
+
+} +export default MySiteList; \ No newline at end of file diff --git a/src/forge/users/Material/Base.jsx b/src/forge/users/Material/Base.jsx index 20dc79e80..3dc7e27cc 100644 --- a/src/forge/users/Material/Base.jsx +++ b/src/forge/users/Material/Base.jsx @@ -13,10 +13,6 @@ export default Form.create()( // const { username } = props && props.match && props.match.params; const { resetUserInfo , current_user } = props; - useEffect(()=>{ - document.title="基本资料" - }, []) - useEffect(()=>{ if(current_user && current_user.login){ setFieldsValue({ diff --git a/src/forge/users/Material/Index.jsx b/src/forge/users/Material/Index.jsx index bcd84e408..68a0fa4e5 100644 --- a/src/forge/users/Material/Index.jsx +++ b/src/forge/users/Material/Index.jsx @@ -2,6 +2,7 @@ import React , { useEffect , useState } from 'react'; import { Menu } from 'antd'; import Base from './Base'; import Password from './Password'; +import Verification from './verification'; import './Index.scss'; import '../../SecuritySetting/notice/manager/Index.scss'; @@ -13,24 +14,35 @@ function Index(props){ useEffect(()=>{ if(pathname){ + let documentTitle = "基本资料"; if(pathname === `/settings/profile`){ setKey("0"); + documentTitle = "基本资料"; }else{ setKey("1"); switch(pathname){ case '/settings/phone': + documentTitle = "手机号管理"; setType('3'); break; case '/settings/emails': setType('0'); + documentTitle = "邮箱管理"; break; case '/settings/password': setType('1'); + documentTitle = "密码管理"; + break; + case '/settings/verification': + setType('4'); + documentTitle = "身份认证"; break; default: setType('2'); + documentTitle = "账号注销"; } } + document.title = documentTitle; } },[pathname]) @@ -43,15 +55,13 @@ function Index(props){ {props.history.push('/settings/phone')}}>手机号管理 {props.history.push('/settings/emails')}}>邮箱管理 {props.history.push('/settings/password')}}>密码管理 + {props.history.push('/settings/verification')}}>身份认证 {props.history.push('/settings/cancel')}}>账号注销 }
{ - key === "0" ? - - : - + key === "0" ? : type === "4" ? : }
diff --git a/src/forge/users/Material/Index.scss b/src/forge/users/Material/Index.scss index 7e3ac67c6..0e05838f2 100644 --- a/src/forge/users/Material/Index.scss +++ b/src/forge/users/Material/Index.scss @@ -57,6 +57,12 @@ .spanTil{ letter-spacing: normal; } + &.errorTip{ + height: auto; + color:red; + background-color: rgba($color: red, $alpha: 0.05); + border:1px solid red; + } } .tipCont{ min-height: 330px; @@ -167,4 +173,22 @@ } .gotoUpdateEmail{ line-height: 40px; +} +.verificationForm{ + .ant-form-item-label{ + width: 125px; + } + .uploadCard{ + margin-right: 80px; + } + .ant-form-extra{ + text-align: center; + } + .verUpload{ + position: relative; + .ant-form-explain{ + position: absolute; + bottom: 20px; + } + } } \ No newline at end of file diff --git a/src/forge/users/Material/Password.jsx b/src/forge/users/Material/Password.jsx index 4fa070cb1..c2dda19c4 100644 --- a/src/forge/users/Material/Password.jsx +++ b/src/forge/users/Material/Password.jsx @@ -24,7 +24,6 @@ export default Form.create()( useEffect(()=>{ setPassMap({password: undefined, email: undefined, code: undefined}); setUpdatePsdMap({oldPassword: undefined, password: undefined, password1: undefined}); - document.title = type === '0' ? '邮箱管理' : type === '1' ? '密码管理' : type === '2' ? '账号注销' : '手机号管理'; }, type) function submit() { diff --git a/src/forge/users/Material/verification.jsx b/src/forge/users/Material/verification.jsx new file mode 100644 index 000000000..2fb684145 --- /dev/null +++ b/src/forge/users/Material/verification.jsx @@ -0,0 +1,151 @@ +import React , { forwardRef, Fragment, useEffect, useState } from 'react'; +import { Form , Input, Button , Spin, message, Alert } from 'antd'; +import { AlignCenter, AlignTop } from '../../Component/layout'; +import './Index.scss'; +import UploadImage from '../../Team/Component/UploadImage'; +import axios from 'axios'; +import { getImageUrl } from '../../../common/UrlTool'; + +export default Form.create()( + forwardRef((props)=>{ + const { getFieldDecorator, validateFields , setFieldsValue } = props && props.form; + const { resetUserInfo , current_user } = props; + const [loading, setLoading] = useState(false); + const [data, setData] = useState(undefined); + const [reload, setReload] = useState(undefined); + + useEffect(()=>{ + if(current_user && current_user.login){ + setLoading(true); + // 获取用户身份认证信息 + axios.get(`http://ng.learnerhub.net/api/identity_verifications.json`).then(res=>{ + setLoading(false); + if(res && res.status === 200){ + if(res.data && res.data.status === 0){ + return; + } + setData(res.data); + const {name, number, card_back, card_front, hold_card_back, hold_card_front} = res.data; + setFieldsValue({ + name, number, card_back, card_front, hold_card_back, hold_card_front + }) + } + }) + } + },[current_user, reload]) + + function submit() { + validateFields((error, values) => { + if (!error) { + if(data){ + axios.put(`http://ng.learnerhub.net/api/identity_verifications/${data.id}.json`, values).then(res => { + if(res && res.status === 200){ + message.success("提交成功"); + setReload(Math.random()); + } + }).catch((error) => {}); + }else{ + // 新增 + axios.post(`http://ng.learnerhub.net/api/identity_verifications.json`, values).then(res=>{ + if(res && res.status === 200){ + message.success("提交成功"); + setReload(Math.random()); + } + }) + } + } + }); + } + + return ( + + {data && data.state && ( + + {data.state === "待审核" && ( +
+ 您提供的身份信息正在审核,请耐心等待 +
+ )} + {data.state === "已拒绝" &&
+ 您提交的身份信息未提供,原因:{data.description || "无,如有需要请联系平台管理员"} +
} + {data.state === "已通过" && } +
+ )} +
+ + {getFieldDecorator("name", { + rules: [{ required: true, message: "请输入真实姓名" }], + })( + + )} + + + {getFieldDecorator("number", { + rules: [ + { required: true, message: "请输入大陆身份证号码" }, + { pattern: /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}([0-9]|X)$/, message: "请输入正确的中国大陆身份证号码"} + ], + })( + + )} + + + + {getFieldDecorator("card_front", { + rules: [{ required: true, message: "请上传照片" }], + })( + {setFieldsValue({'card_front': id})}} url={data && getImageUrl(`/api/attachments/${data.card_front}`)}/> + )} + + + {getFieldDecorator("card_back", { + rules: [{ required: true, message: "请上传照片" }], + })( + {setFieldsValue({'card_back': id})}} url={data && getImageUrl(`/api/attachments/${data.card_back}`)}/> + )} + + + + + {getFieldDecorator("hold_card_front", { + rules: [{ required: true, message: "请上传照片" }], + })( + {setFieldsValue({'hold_card_front': id})}} url={data && getImageUrl(`/api/attachments/${data.hold_card_front}`)}/> + )} + + + {getFieldDecorator("hold_card_back", { + rules: [{ required: true, message: "请上传照片" }], + })( + {setFieldsValue({'hold_card_back': id})}} url={data && getImageUrl(`/api/attachments/${data.hold_card_back}`)}/> + )} + + + {(!data || (data && data.state === "已拒绝")) && ( + + + + + )} +
+
+ ); + }) +) \ No newline at end of file