diff --git a/public/react/src/App.js b/public/react/src/App.js index e4cd6a732..84b5c0ae4 100644 --- a/public/react/src/App.js +++ b/public/react/src/App.js @@ -75,7 +75,10 @@ const Otherloginstart=Loadable({ loader: () => import('./modules/login/Otherloginstart'), loading: Loading, }) - +const Otherloginsqq=Loadable({ + loader: () => import('./modules/login/Otherloginqq'), + loading: Loading, +}) // const TestIndex = Loadable({ // loader: () => import('./modules/test'), // loading: Loading, @@ -527,6 +530,9 @@ class App extends Component { + diff --git a/public/react/src/AppConfig.js b/public/react/src/AppConfig.js index ece36b61c..c0dbc6687 100644 --- a/public/react/src/AppConfig.js +++ b/public/react/src/AppConfig.js @@ -46,6 +46,7 @@ export function initAxiosInterceptors(props) { //proxy="http://47.96.87.25:48080" proxy="https://pre-newweb.educoder.net" proxy="https://test-newweb.educoder.net" + //proxy="http://192.168.2.63:3001" // 在这里使用requestMap控制,避免用户通过双击等操作发出重复的请求; // 如果需要支持重复的请求,考虑config里面自定义一个allowRepeat参考来控制 @@ -73,15 +74,22 @@ export function initAxiosInterceptors(props) { } requestProxy(config) - var url = `/api${config.url}`; + let url = `/api${config.url}`; + + //qq登录去掉api + if(config.params&&config.params.redirect_uri!=undefined){ + if(config.params.redirect_uri.indexOf('otherloginqq')!=-1){ + url = `${config.url}`; + } + } if(`${config[0]}`!=`true`){ if (window.location.port === "3007") { - if (url.indexOf('.json') == -1) { - - alert('开发提示:请给接口加.json:' + url) - - } + // if (url.indexOf('.json') == -1) { + // + // alert('开发提示:请给接口加.json:' + url) + // + // } config.url = `${proxy}${url}`; if (config.url.indexOf('?') == -1) { config.url = `${config.url}?debug=${debugType}`; diff --git a/public/react/src/modules/competitions/Competitioncommon/CompetitionCommon.js b/public/react/src/modules/competitions/Competitioncommon/CompetitionCommon.js index bde5895e1..8d3726e1a 100755 --- a/public/react/src/modules/competitions/Competitioncommon/CompetitionCommon.js +++ b/public/react/src/modules/competitions/Competitioncommon/CompetitionCommon.js @@ -43,7 +43,7 @@ class CompetitionCommon extends Component{ // }) // } // }).catch((error) => { - // console.log(error) + // //console.log(error) // }) } } @@ -51,8 +51,8 @@ class CompetitionCommon extends Component{ componentDidUpdate = (prevProps) => { if (prevProps.user != this.props.user) { - console.log("componentDidUpdatess"); - console.log(this.props.user); + //console.log("componentDidUpdatess"); + //console.log(this.props.user); if (this.props.user && this.props.user.login != "") { const zul = `/competitions/${this.props.match.params.identifier}/competition_staff.json`; axios.get((zul)).then((result) => { @@ -64,7 +64,7 @@ class CompetitionCommon extends Component{ } } }).catch((error) => { - //console.log(error); + ////console.log(error); }) } } @@ -103,7 +103,7 @@ class CompetitionCommon extends Component{ } } }).catch((error) => { - console.log(error) + //console.log(error) }) //this.props.user 有可能为空 @@ -119,7 +119,7 @@ class CompetitionCommon extends Component{ } } }).catch((error) => { - //console.log(error); + ////console.log(error); }) } @@ -161,7 +161,7 @@ class CompetitionCommon extends Component{ } }).catch((error) => { - console.log(error) + //console.log(error) }) } } @@ -192,7 +192,7 @@ class CompetitionCommon extends Component{ } }).catch((error) => { - console.log(error) + //console.log(error) }) }else{ if (module_url.substring(0, 7) == 'http://' || module_url.substring(0, 8) == 'https://') { @@ -309,7 +309,7 @@ class CompetitionCommon extends Component{ }) } }).catch((error) => { - console.log(error) + //console.log(error) }) } diff --git a/public/react/src/modules/courses/exercise/new/SingleEditor.js b/public/react/src/modules/courses/exercise/new/SingleEditor.js index 1e2005360..624315817 100644 --- a/public/react/src/modules/courses/exercise/new/SingleEditor.js +++ b/public/react/src/modules/courses/exercise/new/SingleEditor.js @@ -16,8 +16,8 @@ const $ = window.$ const { Option } = Select; const tagArray = [ - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', - 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', + 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' ] class SingleEditor extends Component{ @@ -92,13 +92,13 @@ class SingleEditor extends Component{ } - + const intScore = parseFloat(question_score) if (intScore == 0) { this.props.showNotification('分值:必须大于0'); return; } else if(!question_score || intScore == NaN) { this.props.showNotification('分值:不能为空'); return; - } + } if(!answerArray || answerArray.length == 0) { this.props.showNotification('请先点击选择本选择题的正确选项'); return; } @@ -119,9 +119,9 @@ class SingleEditor extends Component{ "question_type":1, "question_score":5, "question_choices":["a答案","b答案","c答案","d答案"], - "standard_answers":[1] + "standard_answers":[1] }*/ - const Id = this.props.match.params.Id + const Id = this.props.match.params.Id if (question_id) { const editUrl = this.props.getEditQuestionUrl(question_id); axios.put(editUrl, { @@ -144,7 +144,7 @@ class SingleEditor extends Component{ }); } else { const url = this.props.getAddQuestionUrl(); - + axios.post(url, { exercise_bank_id: Id, question_title, @@ -162,16 +162,16 @@ class SingleEditor extends Component{ .catch(function (error) { console.log(error); }); - } + } } onCancel = () => { this.props.onEditorCancel() } - + componentDidMount = () => { - + } onOptionClick = (index) => { // if (this.props.exerciseIsPublish) { @@ -186,7 +186,7 @@ class SingleEditor extends Component{ // TODO 新建,然后删除CD选项,再输入题干,会调用到这里,且index是3 return; } - let question_choices = this.state.question_choices.slice(0); + let question_choices = this.state.question_choices.slice(0); question_choices[index] = value; this.setState({ question_choices }) } @@ -200,19 +200,19 @@ class SingleEditor extends Component{ mdReactObject.toShowMode() } this.mdReactObject = that; - + } toShowMode = () => { - + } render() { let { question_title, question_score, question_type, question_choices, standard_answers } = this.state; let { question_id, index, exerciseIsPublish, - // question_title, - // question_type, + // question_title, + // question_type, // question_score, isNew } = this.props; - + // const { getFieldDecorator } = this.props.form; const isAdmin = this.props.isAdmin() @@ -221,9 +221,13 @@ class SingleEditor extends Component{ const qNumber = `question_${index}`; // TODO show模式 isNew为false isEdit为false - // [true, false, true] -> [0, 2] - + // [true, false, true] -> [0, 2] + const answerTagArray = standard_answers.map((item, index) => { return item == true ? tagArray[index] : -1 }).filter(item => item != -1); + console.log("xuanzheshijuan"); + console.log(answerTagArray); + console.log(!exerciseIsPublish); + return(
- :""} + } + :""} - this.ChangeTab(3)} - >{this.props.isAdmin()?"设置":"得分规则"} - {/*{this.props.isAdmin() ? 导出 : ""}*/} - - {this.props.isAdmin() ? -
  • - 导出 - +
  • : ""} + {this.props.isAdmin() ? + teacherdatapage && teacherdatapage.end_immediately === true ? + this.homeworkendss(this.child)}>立即截止 + : "" + : ""} + {this.props.isAdmin() ? + teacherdatapage && teacherdatapage.publish_immediately === true ? + this.homeworkstarts(this.child)}>立即发布 + : "" + : ""} + {this.props.isAdmin() ? + teacherdatapage && teacherdatapage.code_review === true ? + this.workshowmodels(this.child)}>代码查重 + : "" : ""} + { + parseInt(tab)===1? + this.props.isAdmin() ? + this.edenwork()}>编辑作业 + :"" :"" - :"" - } + } - {this.state.view_report === true ? - 查看实训报告 - : ""} - { - teacherdatapage === undefined ? "" - : teacherdatapage.commit_des === null || teacherdatapage.commit_des === undefined ? "" : - {teacherdatapage.commit_des} - } - {teacherdatapage === undefined ? "" : } - {this.props.isStudent() ? - ( - teacherdatapage&&teacherdatapage.redo_work===true? - this.Modalcancelss()}>重做 - :"" - ) - : "" } + {this.state.view_report === true ? + 查看实训报告 + : ""} + { + teacherdatapage === undefined ? "" + : teacherdatapage.commit_des === null || teacherdatapage.commit_des === undefined ? "" : + {teacherdatapage.commit_des} + } + {teacherdatapage === undefined ? "" : } + {this.props.isStudent() ? + ( + teacherdatapage&&teacherdatapage.redo_work===true? + this.Modalcancelss()}>重做 + :"" + ) + : "" } +
    - - {parseInt(tab) === 0 ? this.Getdataback(jobsettingsdata, teacherdata)}>:""} - {parseInt(tab) === 1 ? this.Getdataback(jobsettingsdata, teacherdata)} Showupdateinstructionsboolfalse={(i)=>this.Showupdateinstructionsboolfalse(i)}>:""} - {parseInt(tab) === 2 ? this.Getdataback(jobsettingsdata, teacherdata)}>:""} - {parseInt(tab) === 3 ? this.Getdataback(jobsettingsdata, teacherdata)}>:""} - + {parseInt(tab) === 0 ? this.Getdataback(jobsettingsdata, teacherdata)}>:""} + {parseInt(tab) === 1 ? this.Getdataback(jobsettingsdata, teacherdata)} Showupdateinstructionsboolfalse={(i)=>this.Showupdateinstructionsboolfalse(i)}>:""} + {parseInt(tab) === 2 ? this.Getdataback(jobsettingsdata, teacherdata)}>:""} + {parseInt(tab) === 3 ? this.Getdataback(jobsettingsdata, teacherdata)}>:""} + ) diff --git a/public/react/src/modules/login/LoginDialog.css b/public/react/src/modules/login/LoginDialog.css index 9a9373770..37e2f48b6 100644 --- a/public/react/src/modules/login/LoginDialog.css +++ b/public/react/src/modules/login/LoginDialog.css @@ -136,12 +136,18 @@ .startlogin{ color:#888; } + .weixinheight390{ height: 390px; } + +.qqheight390{ + width: 450px; + height: 390px; +} #log_reg_content { padding: 38px 30px 20px !important; } .textcenter{ text-align: center; -} \ No newline at end of file +} diff --git a/public/react/src/modules/login/LoginDialog.js b/public/react/src/modules/login/LoginDialog.js index 6bd6ac41f..940e70c9a 100644 --- a/public/react/src/modules/login/LoginDialog.js +++ b/public/react/src/modules/login/LoginDialog.js @@ -7,7 +7,7 @@ import Dialog, { DialogContentText, DialogTitle, } from 'material-ui/Dialog'; -import {notification } from 'antd'; +import {notification,Modal } from 'antd'; import axios from 'axios'; @@ -104,8 +104,8 @@ class LoginDialog extends Component { MyEduCoderModals:false, Phonenumberisnotco:undefined, Phonenumberisnotcobool:false, - weixinlogin:false - + weixinlogin:false, + qqlogin:false }; } enter=(num) =>{ @@ -529,14 +529,30 @@ class LoginDialog extends Component { weixinlogin:true }) } + openqqlogin=()=>{ + this.setState({ + qqlogin:true + }) + //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}%2otherloginqq&response_type=code` + 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` + // window.location.href=`https://graph.qq.com/oauth2.0/show?which=Login&display=pc&client_id=101508858&redirect_uri=https%3a%2f%2fwww.educoder.net%2fotherloginstart&tp=qq&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` + ) + } + hideweixinlogin=()=>{ this.setState({ - weixinlogin:false + weixinlogin:false, + qqlogin:false }) } render() { - let{open,login,speedy,loginValue,regular,isGoing,isGoingValue,disabled,bottonclass,Phonenumberisnotco, - dialogBox,shortcutnum,disabledType,gaincode,authCodeType,authCodeclass, isRender,weixinlogin}=this.state; + let{qqlogin,login,isGoing,isGoingValue,disabled,bottonclass,Phonenumberisnotco, + dialogBox, isRender,weixinlogin}=this.state; if (isRender === undefined) { isRender = false @@ -659,8 +675,22 @@ class LoginDialog extends Component { this.openweixinlogin()}> 微信登录 + this.openqqlogin()} className={"ml10"}> + qq登录 + -

    :""} +

    :

    + + ———————— 快速登录 ———————— +

    + {/*this.openweixinlogin()}>*/} + {/*微信登录*/} + {/**/} + this.openphoneqqlogin()} className={"ml10"}> + qq登录 + +
    +

    } } {weixinlogin===true?:""} - {weixinlogin===true?

    + + + {weixinlogin===true?

    this.hideweixinlogin()}>返回账号登录

    :""} @@ -690,110 +722,3 @@ class LoginDialog extends Component { export default LoginDialog ; - -// onkeypress="user_login_keypress(event);" - -// onkeypress="user_login_keypress(event);" - - -{/*
    -
    -
    -

    -
    -
    } - - - -{/*第三方账号登录*/} - -{/*
    -

    第三方账号登录

    -
    - - - -
    -
    } - -// -// {/*
    */} -// {/*
    */} -// {/*
    */} -// {/**/} -// {/**/} -// {/*
    */} -// {/**/} -// {/**/} -// {/**/} -// {/*
    */} -// {/*

    请输入有效的手机号/邮箱号*/} -// {/*

    */} -// {/*
    */} -// -// {/*
    */} -// {/*/!*drag*/ }*/} -// {/*
    */} -// {/*
    */} -// {/*
    */} -// {/*请按住滑块,拖动到最右边*/} -// {/*
    */} -// {/*
    */} -// {/*
    */} -// {/*
    */} -// {/*

    请先拖动滑块完成验证

    */} -// {/*
    */} -// {/*
    */} -// -// {/*

    */} -// {/**/} -// {/**/} -// {/**/} -// {/*

    */} -// -// {/*
    */} -// {/*

    */} -// {/*请输入验证码*/} -// {/*

    */} -// {/*
    */} -// -// {/**/} -// -// {/*

    */} -// -// {/**/} -// {/**/} -// {/**/} -// {/**/} -// -// {/**/} -// {/*忘记密码*/} -// {/*注册*/} -// {/**/} -// -// {/*

    */} -// {/**/} -// {/*
    */} diff --git a/public/react/src/modules/login/Otherlogin.js b/public/react/src/modules/login/Otherlogin.js index 73f0c6dc6..59710ab2f 100644 --- a/public/react/src/modules/login/Otherlogin.js +++ b/public/react/src/modules/login/Otherlogin.js @@ -132,6 +132,8 @@ class Otherlogin extends Component { } postwechatlogin=(type,username,password)=>{ + let query=this.props.location.search; + const types = query.split('?type='); if(type===false){ if(username===undefined||username===""||username===null){ this.setState({ @@ -146,9 +148,11 @@ class Otherlogin extends Component { return } } + + let url = "/bind_user.json"; axios.post(url, { - type: 'wechat', + type: types[1]==="qq"?"qq":'wechat', not_bind:type, username:username, password:password diff --git a/public/react/src/modules/login/Otherloginqq.js b/public/react/src/modules/login/Otherloginqq.js new file mode 100644 index 000000000..30407bf3c --- /dev/null +++ b/public/react/src/modules/login/Otherloginqq.js @@ -0,0 +1,58 @@ +import React, { Component } from 'react'; + +import { BrowserRouter as Router, Route, Link } from "react-router-dom"; + +import { Spin } from 'antd'; +import axios from 'axios'; +class Otherloginqq extends Component { + + componentDidMount() { + let query=this.props.location.search; + + const type = query.split('?code='); + const types = type[1].split('&state='); + let codeurl = `/auth/qq/callback`; + axios.get(codeurl,{params:{ + code:type[1], + redirect_uri:`https://${window.location.host}/otherloginqq` + }}).then((result)=> { + if(result){ + if(result.data.status===0){ + if(result.data.new_user===true){ + window.location.href="/otherlogin?type=qq" + }else{ + // this.getinfo() + if(types[1]==="account"){ + window.location.href="/account/binding" + }else{ + window.location.href="/" + } + + } + } + } + }).catch((error)=>{ + + }) + } + + render() { + // Loading + return ( +
    + + +
    + ); + } +} + +export default Otherloginqq; \ No newline at end of file diff --git a/public/react/src/modules/login/Otherloginstart.js b/public/react/src/modules/login/Otherloginstart.js index fc5d46bbc..9901fc8ad 100644 --- a/public/react/src/modules/login/Otherloginstart.js +++ b/public/react/src/modules/login/Otherloginstart.js @@ -8,31 +8,34 @@ class Otherloginstart extends Component { componentDidMount() { let query=this.props.location.search; - const type = query.split('?code='); - const types = type[1].split('&state='); - console.log(types) - let codeurl = `/auth/wechat/callback.json` - axios.get(codeurl,{params:{ - code:types[0] - }}).then((result)=> { - if(result){ - if(result.data.status===0){ - if(result.data.new_user===true){ - window.location.href="/otherlogin" - }else{ - // this.getinfo() - if(types[1]==="account"){ - window.location.href="/account/binding" + debugger + if(query!= ""){ + const type = query.split('?code='); + const types = type[1].split('&state='); + let codeurl = `/auth/wechat/callback.json` + axios.get(codeurl,{params:{ + code:types[0] + }}).then((result)=> { + if(result){ + if(result.data.status===0){ + if(result.data.new_user===true){ + window.location.href="/otherlogin?type=wechat" }else{ - window.location.href="/" - } + // this.getinfo() + if(types[1]==="account"){ + window.location.href="/account/binding" + }else{ + window.location.href="/" + } + } } } - } - }).catch((error)=>{ + }).catch((error)=>{ + + }) + } - }) } diff --git a/public/react/src/modules/page/component/monaco/TPIMonaco.js b/public/react/src/modules/page/component/monaco/TPIMonaco.js index b814ecb44..59cb5ce35 100644 --- a/public/react/src/modules/page/component/monaco/TPIMonaco.js +++ b/public/react/src/modules/page/component/monaco/TPIMonaco.js @@ -226,6 +226,7 @@ class TPIMonaco extends Component { // https://github.com/Microsoft/monaco-editor/issues/539 window.monaco.editor.setModelLanguage(editor_monaco.getModel(), lang) } else if (prevProps.isEditablePath != this.props.isEditablePath) { + // 当前文件是否可编辑 if (this.props.isEditablePath || this.props.shixun && this.props.shixun.code_edit_permission == true) { editor_monaco.updateOptions({readOnly: false}) } else { @@ -250,6 +251,7 @@ class TPIMonaco extends Component { } } componentWillUnmount() { + // 注意销毁,不然会出现不能编辑的bug this.editor_monaco && this.editor_monaco.dispose() } diff --git a/public/react/src/modules/user/LoginRegisterComponent.js b/public/react/src/modules/user/LoginRegisterComponent.js index 52e0d6869..55a42b62d 100644 --- a/public/react/src/modules/user/LoginRegisterComponent.js +++ b/public/react/src/modules/user/LoginRegisterComponent.js @@ -68,6 +68,7 @@ class LoginRegisterComponent extends Component { registered:undefined, Phonenumberisnotcodmms:undefined, weixinlogin:false, + qqlogin:false } } if(props.loginstatus === false){ @@ -106,7 +107,7 @@ class LoginRegisterComponent extends Component { registered:undefined, Phonenumberisnotcodmms:undefined, weixinlogin:false, - + qqlogin:false } } } @@ -892,9 +893,25 @@ class LoginRegisterComponent extends Component { hideweixinlogin=()=>{ this.setState({ weixinlogin:false, + qqlogin:false, tab:["0"] }) } + + openqqlogin=()=>{ + this.setState({ + qqlogin:true + }) + //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}%2otherloginqq&response_type=code` + 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` + // window.location.href=`https://graph.qq.com/oauth2.0/show?which=Login&display=pc&client_id=101508858&redirect_uri=https%3a%2f%2fwww.educoder.net%2fotherloginstart&tp=qq&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() { const { // 登录 @@ -1040,12 +1057,31 @@ class LoginRegisterComponent extends Component { this.openweixinlogin()}> 微信登录 + this.openqqlogin()} className={"ml10"}> + qq登录 + + +

    :

    + + ———————— 快速登录 ———————— +

    + {/*this.openweixinlogin()}>*/} + {/*微信登录*/} + {/**/} + this.openphoneqqlogin()}> + qq登录 +
    -

    :""} +

    } } + + + + + { weixinlogin===false&&parseInt(tab[0])==1 &&
    @@ -1201,8 +1237,22 @@ class LoginRegisterComponent extends Component { this.openweixinlogin()}> 微信登录 + this.openqqlogin()} className={"ml10"}> + qq登录 + +
    +

    :

    + + ———————— 快速登录 ———————— +

    + {/*this.openweixinlogin()}>*/} + {/*微信登录*/} + {/**/} + this.openphoneqqlogin()}> + qq登录 +
    -

    :""} +

    } } {weixinlogin===true? -

    - this.handleCancel()}>取消 -

    - - - - + } + + +
    + +

    + this.handleCancel()}>取消 +

    - +
    * 我们确保你所提供的信息均处于严格保密状态,不会泄露