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"}>
+
+
- :""}
+ :
+
+ ———————— 快速登录 ————————
+
+ }
}
{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);"
-
-
-{/* }
-
-
-
-{/*第三方账号登录*/}
-
-{/* }
-
-//
-// {/**/}
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"}>
+
+
+
+ :
+
+ ———————— 快速登录 ————————
+
- :""}
+ }
}
+
+
+
+
+
{
weixinlogin===false&&parseInt(tab[0])==1 &&
+ :
+
+ ———————— 快速登录 ————————
+
- :""}
+ }
}
{weixinlogin===true?