You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/public/react/src/modules/user/account/AccountBinding.js

279 lines
7.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import React, { Component } from 'react';
import { SnackbarHOC, getImageUrl, WordsBtn } from 'educoder';
import { Form, Button, Input ,Modal } from 'antd'
import Modals from "../../modals/Modals";
import '../../courses/css/Courses.css'
import './common.css'
import axios from 'axios'
class AccountSecure extends Component {
constructor (props) {
super(props)
this.state = {
Modalstype:false,
list:[{
en_type: "wechat",
id: null,
nickname: "",
},{
en_type: "qq",
id: null,
nickname: "",
}
]
}
}
IsPC=()=>{
var userAgentInfo = navigator.userAgent;
var Agents = ["Android", "iPhone",
"SymbianOS", "Windows Phone",
"iPad", "iPod"];
var flag = true;
for (var v = 0; v < Agents.length; v++) {
if (userAgentInfo.indexOf(Agents[v]) > 0) {
flag = false;
break;
}
}
return flag;
}
componentDidMount() {
let {basicInfo}=this.props;
let {list}=this.state;
let newlist=list;
if(basicInfo===undefined||JSON.stringify(basicInfo) == "{}"||basicInfo&&basicInfo.open_users.length===0){
}else{
basicInfo&&basicInfo.open_users.map((item,key)=>{
newlist.map((items,keys)=>{
if(item.en_type===items.en_type){
items.id=item.id;
items.nickname=item.nickname;
}
})
})
}
this.setState({
list:newlist
})
}
showModal=()=>{
this.setState({
visible: true,
});
};
handleOk=(e)=> {
this.setState({
visible: false,
});
};
handleCancel=()=>{
this.setState({
visible: false,
});
};
Cancelundologins=()=>{
this.setState({
Modalstype:false,
ModalCancel:this.Cancelundologin,
ModalSave:this.Saveundologin,
})
}
Saveundologin=(id)=>{
let {basicInfo}=this.props;
let url=`/users/accounts/${basicInfo.id}/open_users/${id}.json`;
axios.delete(url).then((result)=>{
if(result.data.status===0){
this.props.showNotification('解绑成功');
this.Cancelundologins()
this.props.getBasicInfo()
}
}).catch((error)=>{
console.log(error)
})
}
undologin=(type,id)=>{
this.setState({
Modalstype:true,
Modalstopval:type==="wechat"?"是否确定解绑微信账号?":"是否确定解绑QQ账号",
ModalCancel:this.Cancelundologins,
ModalSave:()=>this.Saveundologin(id),
})
}
openqqlogin=()=>{
window.location.href=`https://graph.qq.com/oauth2.0/show?which=Login&display=pc&client_id=101508858&redirect_uri=https%3a%2f%2f${window.location.host}%2fotherloginqq&response_type=code`
}
openphoneqqlogin=()=>{
window.open(
`https://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=716027609&pt_3rd_aid=101508858&daid=383&pt_skey_valid=0&style=35&s_url=http%3A%2F%2Fconnect.qq.com&refer_cgi=authorize&which=&client_id=101508858&response_type=code&scope=get_user_info&redirect_uri=https%3a%2f%2ftest-newweb.educoder.net%2fotherloginqq&response_type=code`
)
}
render() {
let flag = this.IsPC(); //true为PC端false为手机端
let {list}=this.state;
return (
<div>
<div className="basicForm settingForm">
{/*提示*/}
<Modals
modalsType={this.state.Modalstype}
modalsTopval={this.state.Modalstopval}
modalCancel={this.state.ModalCancel}
modalSave={this.state.ModalSave}
loadtype={this.state.loadtype}
/>
<style>{`
// .flexRow {
// padding: 15px 0;
// }
.flexRow .name {
margin-left: 20px;
color: #999999;
text-align: center;
flex: 0 0 100px;
}
.flexRow .description {
flex: 1;
color: #CDCDCD;
}
.description span {
color: #05101A;
}
.flexRow .status {
width: 100px;
color: #28AC7F;
text-align: right;
}
// .flexTable .flexTable {
// border-bottom: 1px solid #EBEBEB;
// }
.settingForm label{
color: #999999;
font-size: 14px !important ;
margin-left: 120px;
}
.settingForm input {
width: 340px;
}
.settingForm input.validateInput {
width: 220px;
}
.settingForm .formItemInline button {
width: 110px;
margin-left: 10px;
}
.settingForm .ant-form-item-label {
width: 204px;
}
.formItemInline .ant-form-explain{
position:absolute;
bottom:-17px;
left:0px;
width:100%;
}
.weixinlogo{
font-size: 40px !important;
color: #4eaf2b;
}
.qqlogo{
font-size: 40px !important;
color: #29a1e6;
}
.lineheight60{
line-height: 60px;
}
.pt19{
padding-top: 19px;
}
`}</style>
<div className="title">绑定登录账号</div>
<Form>
{list.map((item,key)=>{
return(
<div className="flexTable" key={key}>
<div className="flexTable">
<div className="flexRow">
<div className="name">
{item.en_type!="qq"?<i className={"iconfont icon-weixin2 weixinlogo mr10"}></i>:<i className={"iconfont icon-qq qqlogo mr10"}></i>}
{item.en_type!="qq"?<span className={"color-ooo"}>微信</span>:<span className={"color-ooo"}>QQ</span>}
</div>
<div className="description lineheight60">
<span className={"color-grey-9 ml80"}>{item.nickname}</span>
</div>
<div className="status pt19">
{item.en_type!="qq"?<WordsBtn style={ item.id===null?"blue":"colorgrey9"} className={item.id===null?"borderBottom":""}
onClick={
item.id===null?() => this.showModal("wechat"):() => this.undologin("wechat",item.id)
}
>{item.id===null?"绑定":"解绑"}</WordsBtn>:<WordsBtn style={ item.id===null?"blue":"colorgrey9"} className={item.id===null?"borderBottom":""}
onClick={
item.id===null?flag===true?() => this.openphoneqqlogin():() => this.openqqlogin():() => this.undologin("qq",item.id)
}
>{item.id===null?"绑定":"解绑"}</WordsBtn>}
</div>
</div>
</div>
</div>
)
})
}
</Form>
<style>
{
`
.ml70{
margin-left: 70px;
}
`
}
</style>
<Modal
closable={false}
footer={null}
visible={this.state.visible}
onOk={this.handleOk}
onCancel={this.handleCancel}
>
<div>
<iframe
className={"weixinheight390 ml70"}
frameBorder="0"
sandbox="allow-scripts allow-same-origin allow-top-navigation"
scrolling="no"
src={`https://open.weixin.qq.com/connect/qrconnect?appid=wx6b119e2d829c13fa&redirect_uri=https%3a%2f%2f${window.location.host}%2fotherloginstart&response_type=code&scope=snsapi_login&state=account#wechat_redirect`}></iframe>
<p className="clearfix pagemancenter">
<a className={"startlogin color-blue"} onClick={()=>this.handleCancel()}>取消</a>
</p>
</div>
</Modal>
</div>
<div style={{color: '#989898', marginLeft: '20px'}}>* 我们确保你所提供的信息均处于严格保密状态不会泄露</div>
</div>
);
}
}
const WrappedAccountSecure = Form.create({ name: 'AccountSecure' })(AccountSecure);
export default WrappedAccountSecure;