dev_aliyun2
harry 5 years ago
parent 593cbfc1b8
commit 9456783685

@ -24,10 +24,6 @@ function locationurl(list) {
} }
} }
// TODO 开发期多个身份切换 // TODO 开发期多个身份切换
let debugType = "" let debugType = ""
if (isDev) { if (isDev) {
@ -47,10 +43,6 @@ if (isDev) {
// 学生 // 学生
//debugType="student"; //debugType="student";
function clearAllCookie() { function clearAllCookie() {
cookie.remove('_educoder_session', { path: '/' }); cookie.remove('_educoder_session', { path: '/' });
cookie.remove('autologin_trustie', { path: '/' }); cookie.remove('autologin_trustie', { path: '/' });

@ -1,40 +0,0 @@
body {
margin: 0;
padding: 0;
font-family: sans-serif;
}
.page--header {
z-index: 101 !important;
}
.ant-popover-buttons {
text-align: center !important;
}
/* ie11兼容性问题 评测通过图片被遮挡*/
.page--body {
z-index: 1;
}
/* 隐藏newMessage提示按钮 */
#shixun_comment_block .buttons > p:last-child {
display: none !important;
}
.ant-message{
z-index: 20000;
}
/*.ant-modal-header{*/
/*border-radius: 10px;*/
/*}*/
.ant-upload-list-item-info .anticon-loading, .ant-upload-list-item-info .anticon-paper-clip{
color: #29bd8b !important;
}
.anticon anticon-paper-clip{
color: #29bd8b !important;
}
.MuiModal-root-15{
z-index: 1000 !important;
}

@ -1,46 +0,0 @@
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import './indexPlus.css';
import App from './App';
// 加之前main.js 18.1MB
// import { message } from 'antd';
import message from 'antd/lib/message';
import 'antd/lib/message/style/css';
import { AppContainer } from 'react-hot-loader';
import registerServiceWorker from './registerServiceWorker';
import { configureUrlQuery } from 'react-url-query';
import history from './history';
// link the history used in our app to url-query so it can update the URL with it.
configureUrlQuery({ history });
// ----------------------------------------------------------------------------------- 请求配置
window.__useKindEditor = false;
const render = (Component) => {
ReactDOM.render(
<AppContainer {...this.props} {...this.state}>
<Component {...this.props} {...this.state}/>
</AppContainer>,
document.getElementById('root')
);
}
// ReactDOM.render(
// ,
// document.getElementById('root'));
// registerServiceWorker();
render(App);
if (module.hot) {
module.hot.accept('./App', () => { render(App) });
}

@ -1,10 +1,9 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import { getRandomNumber } from 'educoder';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import {BrowserRouter as Router,Route,Switch} from 'react-router-dom'; import { Route, Switch } from 'react-router-dom';
import Loadable from 'react-loadable'; import Loadable from 'react-loadable';
import Loading from '../../../Loading'; import Loading from '../../../Loading';
import { WordsBtn, MarkdownToHtml, trigger, queryString, getRandomcode } from 'educoder'; import { WordsBtn, trigger, queryString, getRandomcode } from 'educoder';
import axios from 'axios'; import axios from 'axios';
import CoursesListType from '../coursesPublic/CoursesListType'; import CoursesListType from '../coursesPublic/CoursesListType';
import AccessoryModal from "../coursesPublic/AccessoryModal"; import AccessoryModal from "../coursesPublic/AccessoryModal";
@ -17,11 +16,6 @@ import { Spin } from 'antd'
//引入对应跳转的组件 //引入对应跳转的组件
//新建分组/普通作业
const NewWork = Loadable({
loader: () => import('./NewWork'),
loading:Loading,
})
const CommonWorkSetting = Loadable({ const CommonWorkSetting = Loadable({
loader: () => import('./CommonWorkSetting'), loader: () => import('./CommonWorkSetting'),
@ -40,25 +34,9 @@ const CommonWorkAnswer = Loadable({
loader: () => import('./CommonWorkAnswer'), loader: () => import('./CommonWorkAnswer'),
loading: Loading, loading: Loading,
}) })
const CommonWorkAppraise = Loadable({
loader: () => import('./CommonWorkAppraise'),
loading:Loading,
})
const CommonWorkPost = Loadable({
loader: () => import('./CommonWorkPost'),
loading:Loading,
})
const CommonWork = Loadable({
loader: () => import('./commonWork'),
loading:Loading,
})
class CommonWorkDetailIndex extends Component { class CommonWorkDetailIndex extends Component {
constructor(props) { constructor(props) {
super(props) super(props)
this.publishModal = React.createRef();
this.endModal = React.createRef();
this.state = { this.state = {
DownloadType: false, DownloadType: false,
DownloadMessageval: undefined, DownloadMessageval: undefined,
@ -127,20 +105,6 @@ class CommonWorkDetailIndex extends Component{
} else { } else {
this.props.slowDownload(getRandomcode(url)) this.props.slowDownload(getRandomcode(url))
// this.props.showNotification(`正在下载中`);
// this.setState({ donwloading: true })
// downloadFile({
// url: url,
// successCallback: (url) => {
// this.setState({ donwloading: false })
// console.log('successCallback')
// },
// failCallback: (responseHtml, url) => {
// this.setState({ donwloading: false })
// console.log('failCallback')
// }
// })
// window.open("/api"+url, '_blank');
} }
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
@ -164,8 +128,6 @@ class CommonWorkDetailIndex extends Component{
} }
cancelConnectionProject = (work) => { cancelConnectionProject = (work) => {
let workId=this.props.match.params.workId;
let courseId=this.props.match.params.coursesId;
const url = `/homework_commons/${work.homework_id}/student_works/cancel_relate_project.json` const url = `/homework_commons/${work.homework_id}/student_works/cancel_relate_project.json`
axios.get(url).then((response) => { axios.get(url).then((response) => {
@ -196,7 +158,6 @@ class CommonWorkDetailIndex extends Component{
const studentWorkId = this.props.match.params.studentWorkId const studentWorkId = this.props.match.params.studentWorkId
const isGroup = this.props.isGroup() const isGroup = this.props.isGroup()
const moduleName = !isGroup? "普通作业":"分组作业";
const moduleEngName = this.props.getModuleName() const moduleEngName = this.props.getModuleName()
const childModuleName = this.state.moduleName const childModuleName = this.state.moduleName
@ -212,19 +173,16 @@ class CommonWorkDetailIndex extends Component{
// 是列表页 // 是列表页
let params = {} let params = {}
if (isListModule) { if (isListModule) {
// TODO
if (this.child && this.child._getRequestParams) { if (this.child && this.child._getRequestParams) {
params = this.child._getRequestParams() !== undefined ? this.child._getRequestParams() : {}; params = this.child._getRequestParams() !== undefined ? this.child._getRequestParams() : {};
} }
} }
// console.log("普通作业176176176");
// console.log(params);
let exportUrl = `/homework_commons/${workId}/works_list.zip?${queryString.stringify(params)}` let exportUrl = `/homework_commons/${workId}/works_list.zip?${queryString.stringify(params)}`
let exportResultUrl = `/homework_commons/${workId}/works_list.xlsx?${queryString.stringify(params)}` let exportResultUrl = `/homework_commons/${workId}/works_list.xlsx?${queryString.stringify(params)}`
document.title = course_name === undefined ? "" : course_name; document.title = course_name === undefined ? "" : course_name;
return ( return (
<div> <div>
<PublishRightnow ref={this.publishModal} showActionButton={false} {...this.props} checkBoxValues={[workId]} <PublishRightnow showActionButton={false} {...this.props} checkBoxValues={[workId]}
isPublish={true} doWhenSuccess={this.doWhenSuccess} checkBeforePost={this.saveWorkSetting} isPublish={true} doWhenSuccess={this.doWhenSuccess} checkBeforePost={this.saveWorkSetting}
onToPublishClick={this.onToPublishClick} onToPublishClick={this.onToPublishClick}
></PublishRightnow> ></PublishRightnow>
@ -234,7 +192,7 @@ class CommonWorkDetailIndex extends Component{
modalCancel={this.Downloadcal} modalCancel={this.Downloadcal}
modalsType={this.state.DownloadType} modalsType={this.state.DownloadType}
/> />
<PublishRightnow ref={this.endModal} showActionButton={false} {...this.props} checkBoxValues={[workId]} <PublishRightnow showActionButton={false} {...this.props} checkBoxValues={[workId]}
isPublish={false} doWhenSuccess={this.doWhenSuccess}></PublishRightnow> isPublish={false} doWhenSuccess={this.doWhenSuccess}></PublishRightnow>
@ -335,7 +293,7 @@ class CommonWorkDetailIndex extends Component{
float: right; float: right;
} }
`}</style> `}</style>
{this.props.isAdmin()? <Spin spinning={this.state.donwloading} style={{ }}> {this.props.isAdmin() ? <Spin spinning={this.state.donwloading} >
<li className="li_line drop_down fr color-blue font-16 mt20" style={{ "padding": "0 20px" }}> <li className="li_line drop_down fr color-blue font-16 mt20" style={{ "padding": "0 20px" }}>
导出<i className="iconfont icon-xiajiantou font-12 ml2"></i> 导出<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_menu" style={{ "right": "-34px", "left": "unset", "height": "auto" }}> <ul className="drop_down_menu" style={{ "right": "-34px", "left": "unset", "height": "auto" }}>
@ -355,19 +313,12 @@ class CommonWorkDetailIndex extends Component{
</li> </li>
</Spin> : ""} </Spin> : ""}
{/* {isAdmin && <a className={"fr color-blue font-16"} href={exportUrl}></a>}
{isAdmin && <a className={"fr color-blue font-16"} href={exportResultUrl}>导出成绩</a>} */}
{/*<a className={"fr color-blue font-16"}>导出</a>*/}
{end_immediately && <a className={"fr color-blue font-16"} onClick={() => { this.endModal.current.open() } }>立即截止</a>}
{publish_immediately && <a className={"fr color-blue font-16"} onClick={() => { this.publishModal.current.open() } } >立即发布</a>}
{/*<a className={"fr color-blue font-16"}>项目在线质量检测</a>*/}
{isAdmin && <a className={"fr color-blue font-16"} onClick={() => this.props.toEditPage(this.props.match.params, workId)}>编辑作业</a>} {isAdmin && <a className={"fr color-blue font-16"} onClick={() => this.props.toEditPage(this.props.match.params, workId)}>编辑作业</a>}
{ // { //
work_statuses && work_statuses.indexOf('关联项目') != -1 && work_statuses && work_statuses.indexOf('关联项目') != -1 &&
<React.Fragment> <React.Fragment>
<ConnectProject ref="connectProject" {...this.props} connectSuccess={this.connectSuccess}></ConnectProject> <ConnectProject {...this.props} connectSuccess={this.connectSuccess}></ConnectProject>
<WordsBtn style="blue" className={` font-16 fr`} onClick={() => this.openConnectionProject({ homework_id: workId })}>关联项目</WordsBtn> <WordsBtn style="blue" className={` font-16 fr`} onClick={() => this.openConnectionProject({ homework_id: workId })}>关联项目</WordsBtn>
<WordsBtn style="blue" className={` font-16 fr`} onClick={() => this.props.toCreateProject()}>创建项目</WordsBtn> <WordsBtn style="blue" className={` font-16 fr`} onClick={() => this.props.toCreateProject()}>创建项目</WordsBtn>
</React.Fragment> </React.Fragment>
@ -429,7 +380,7 @@ class CommonWorkDetailIndex extends Component{
{/* 作品列表 */} {/* 作品列表 */}
<Route exact path="/courses/:coursesId/common_homeworks/:workId/list" <Route exact path="/courses/:coursesId/common_homeworks/:workId/list"
render={ render={
(props) => (<CommonWorkList ref="commonWorkList" triggerRef={this.bindRef} {...this.props} {...props} {...this.state} {...commonHandler}/>) (props) => (<CommonWorkList triggerRef={this.bindRef} {...this.props} {...props} {...this.state} {...commonHandler} />)
} }
></Route> ></Route>

@ -1,6 +1,6 @@
import React, { Component } from "react"; import React, { Component } from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip,Spin, Pagination} from "antd"; import { Form, Table, Tooltip, Spin, Pagination } from "antd";
import {WordsBtn, ConditionToolTip, queryString, publicSearchs, on, off, NoneData, sortDirections} from 'educoder'; import { queryString, publicSearchs, on, off, NoneData, sortDirections } from 'educoder';
import axios from 'axios'; import axios from 'axios';
import CheckAllGroup from '../common/button/CheckAllGroup' import CheckAllGroup from '../common/button/CheckAllGroup'
import moment from 'moment'; import moment from 'moment';
@ -11,7 +11,6 @@ import ModulationModal from "../coursesPublic/ModulationModal";
import AccessoryModal from "../coursesPublic/AccessoryModal"; import AccessoryModal from "../coursesPublic/AccessoryModal";
import LeaderIcon from './common/LeaderIcon' import LeaderIcon from './common/LeaderIcon'
const $ = window.$; const $ = window.$;
const Search = Input.Search;
function renderScore(score, content) { function renderScore(score, content) {
let color = '#747A7F' let color = '#747A7F'
@ -68,7 +67,8 @@ function buildColumns(that, student_works, studentData) {
<span style={{ minWidth: '50px', display: 'inline-block', textAlign: 'center' }} > <span style={{ minWidth: '50px', display: 'inline-block', textAlign: 'center' }} >
{record.isMine == true && (student_works && student_works.length) ? '我' : (that.state.page - 1) * PAGE_SIZE + index + 1} {record.isMine == true && (student_works && student_works.length) ? '我' : (that.state.page - 1) * PAGE_SIZE + index + 1}
</span> </span>
)}, )
},
}, { }, {
title: '姓名', title: '姓名',
width: 90, width: 90,
@ -84,8 +84,6 @@ function buildColumns(that, student_works, studentData) {
width: '74px', width: '74px',
margin: '0 auto' margin: '0 auto'
}} title={text && text.length > 5 ? text : ''}> }} title={text && text.length > 5 ? text : ''}>
{/* <Tooltip placement="bottom" title={text}>
</Tooltip> */}
{record.is_leader ? {record.is_leader ?
<div style={{ display: 'flex', 'flex-direction': 'column', 'align-items': 'center' }}> <div style={{ display: 'flex', 'flex-direction': 'column', 'align-items': 'center' }}>
<div >{text}</div> <div >{text}</div>
@ -114,7 +112,8 @@ function buildColumns(that, student_works, studentData) {
'width': '98px', 'width': '98px',
display: 'block', display: 'block',
overflow: 'hidden' overflow: 'hidden'
, margin: '0 auto', cursor: 'default'}} , margin: '0 auto', cursor: 'default'
}}
>{record.student_id}</a> >{record.student_id}</a>
</span> </span>
), ),
@ -196,7 +195,8 @@ function buildColumns(that, student_works, studentData) {
{status === 0 ? "未提交" : status === 1 ? "按时提交" : status === 2 ? "延时提交" : ""} {status === 0 ? "未提交" : status === 1 ? "按时提交" : status === 2 ? "延时提交" : ""}
</a> </a>
</span> </span>
)}, )
},
}, { }, {
width: 106, // isStudent ? undefined : 106 , // 匿评中 只有这几列: 序号 姓名 提交状态 更新时间 匿评评分 操作 width: 106, // isStudent ? undefined : 106 , // 匿评中 只有这几列: 序号 姓名 提交状态 更新时间 匿评评分 操作
title: '更新时间', title: '更新时间',
@ -371,12 +371,6 @@ function buildColumns(that, student_works, studentData) {
} }
// update_time最终成绩work_score学号student_id // update_time最终成绩work_score学号student_id
// desc倒序 asc顺序
const orderMap = {
update_time: 'desc',
work_score: 'asc',
student_id: 'asc',
}
const PAGE_SIZE = 20 const PAGE_SIZE = 20
// 类似页面 http://localhost:3007/courses/1309/graduation/graduation_tasks/48/76/setting // 类似页面 http://localhost:3007/courses/1309/graduation/graduation_tasks/48/76/setting
class CommonWorkList extends Component { class CommonWorkList extends Component {
@ -384,9 +378,6 @@ class CommonWorkList extends Component{
constructor(props) { constructor(props) {
super(props) super(props)
this.publishModal = React.createRef();
this.endModal = React.createRef();
this.state = { this.state = {
course_name: "", course_name: "",
homework_name: "", homework_name: "",
@ -722,10 +713,12 @@ class CommonWorkList extends Component{
if (id === undefined) { if (id === undefined) {
StudentData = undefined StudentData = undefined
} else { } else {
StudentData=isStudent ? [{ id, user_name, user_login, student_id, group_name, work_status, update_time, teacher_score, teaching_asistant_score, student_score, StudentData = isStudent ? [{
id, user_name, user_login, student_id, group_name, work_status, update_time, teacher_score, teaching_asistant_score, student_score,
ultimate_score, work_score, student_comment_count, appeal_all_count, appeal_deal_count, ultimate_score, work_score, student_comment_count, appeal_all_count, appeal_deal_count,
late_penalty, absence_penalty, appeal_penalty, project_info, is_leader, late_penalty, absence_penalty, appeal_penalty, project_info, is_leader,
work_group, isMine: true }] : [] work_group, isMine: true
}] : []
} }
const columns = buildColumns(this, student_works, StudentData) const columns = buildColumns(this, student_works, StudentData)
@ -778,9 +771,9 @@ class CommonWorkList extends Component{
reviseAttachmentUrl={`/student_works/${id}/revise_attachment.json`} reviseAttachmentUrl={`/student_works/${id}/revise_attachment.json`}
/> />
<PublishRightnow ref={this.publishModal} showActionButton={false} {...this.props} checkBoxValues={[workId]} <PublishRightnow showActionButton={false} {...this.props} checkBoxValues={[workId]}
isPublish={true} doWhenSuccess={this.doWhenSuccess}></PublishRightnow> isPublish={true} doWhenSuccess={this.doWhenSuccess}></PublishRightnow>
<PublishRightnow ref={this.endModal} showActionButton={false} {...this.props} checkBoxValues={[workId]} <PublishRightnow showActionButton={false} {...this.props} checkBoxValues={[workId]}
isPublish={false} doWhenSuccess={this.doWhenSuccess}></PublishRightnow> isPublish={false} doWhenSuccess={this.doWhenSuccess}></PublishRightnow>
{ {
@ -843,7 +836,7 @@ class CommonWorkList extends Component{
</React.Fragment> : </React.Fragment> :
(!!commit_count || !!uncommit_count) && (!!commit_count || !!uncommit_count) &&
<React.Fragment> <React.Fragment>
<span className="color-orange-tip">{commit_count}</span> {uncommit_count}  <span className="color-orange-tip">{commit_count}</span> {uncommit_count}
{timeMsg || ''} {timeMsg || ''}
<span className="color-orange-tip">{left_time.time}</span> <span className="color-orange-tip">{left_time.time}</span>
</React.Fragment> </React.Fragment>
@ -878,9 +871,6 @@ class CommonWorkList extends Component{
<div className={"justify break_full_word new_li edu-back-white course_table_wrap"} style={{ minHeight: "480px", marginBottom: '30px' }}> <div className={"justify break_full_word new_li edu-back-white course_table_wrap"} style={{ minHeight: "480px", marginBottom: '30px' }}>
<style>{` <style>{`
// .ant-spin-nested-loading > div > .ant-spin .ant-spin-dot {
// top: 72%;}
// }
.singleLine tr.ant-table-row { .singleLine tr.ant-table-row {
background: #f1f9ff; background: #f1f9ff;
} }

@ -1,49 +1,10 @@
import React, { Component } from "react"; import React, { Component } from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd"; import { Form } from "antd";
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import locale from 'antd/lib/date-picker/locale/zh_CN';
import { WordsBtn } from 'educoder'; import { WordsBtn } from 'educoder';
import axios from 'axios';
import Modals from '../../modals/Modals';
import CoursesListType from '../coursesPublic/CoursesListType'; import CoursesListType from '../coursesPublic/CoursesListType';
import HomeworkModal from "../coursesPublic/HomeworkModal";
import moment from 'moment';
import '../css/Courses.css' import '../css/Courses.css'
const { Option} = Select;
const CheckboxGroup = Checkbox.Group;
const confirm = Modal.confirm;
let GraduationTasksnewtype=true;
const $ = window.$;
const Search = Input.Search;
const RadioGroup = Radio.Group;
function scrollTo(className) {
$("html").animate({ scrollTop: $(`${className}`).offset().top - 400 })
}
function range(start, end) {
const result = [];
for (let i = start; i < end; i++) {
result.push(i);
}
return result;
}
function disabledDateTime() {
return {
// disabledHours: () => range(0, 24).splice(4, 20),
disabledMinutes: () => range(1, 30).concat(range(31, 60)),
// disabledSeconds: () => [55, 56],
};
}
function handleDateString (dateString) {
if (!dateString) return dateString;
const ar = dateString.split(':')
if (ar[1] != '00' && ar[1] != '30') {
return [ar[0], '00'].join(':')
}
return dateString
}
// 类似页面 http://localhost:3007/courses/1309/graduation/graduation_tasks/48/76/setting // 类似页面 http://localhost:3007/courses/1309/graduation/graduation_tasks/48/76/setting
class CommonWorkSetting extends Component { class CommonWorkSetting extends Component {
@ -58,21 +19,11 @@ class CommonWorkSetting extends Component{
render() { render() {
const { getFieldDecorator } = this.props.form;
const dateFormat = 'YYYY-MM-DD HH:mm';
let {course_name, homework_name
} =this.state;
let { course_name, homework_name } = this.state;
let courseId = this.props.match.params.coursesId; let courseId = this.props.match.params.coursesId;
let category_id = this.props.match.params.category_id; let category_id = this.props.match.params.category_id;
let task_Id = this.props.match.params.task_Id; let task_Id = this.props.match.params.task_Id;
const radioStyle = {
display: 'block',
height: '30px',
lineHeight: '30px',
};
return ( return (
<React.Fragment> <React.Fragment>

@ -1,13 +1,10 @@
import React, { Component } from "react"; import React, { Component } from "react";
import { Input, InputNumber, Form, Button, Checkbox, Upload, Icon, message, Modal } from "antd"; import { Input, InputNumber, Form, Button, Checkbox, Upload, Icon } from "antd";
import axios from 'axios' import axios from 'axios'
import '../css/busyWork.css' import '../css/busyWork.css'
import '../css/Courses.css' import '../css/Courses.css'
import { getUploadActionUrl, ConditionToolTip, appendFileSizeToUploadFile, appendFileSizeToUploadFileAll } from 'educoder' import { getUploadActionUrl, ConditionToolTip, appendFileSizeToUploadFile, appendFileSizeToUploadFileAll } from 'educoder'
import TPMMDEditor from '../../tpm/challengesnew/TPMMDEditor'; import TPMMDEditor from '../../tpm/challengesnew/TPMMDEditor';
import CBreadcrumb from '../common/CBreadcrumb'
const confirm = Modal.confirm;
const $ = window.$ const $ = window.$
const MAX_TITLE_LENGTH = 60; const MAX_TITLE_LENGTH = 60;

@ -5,7 +5,6 @@ import HomeworkModal from '../coursesPublic/HomeworkModal';
import OneSelfOrderModal from "../coursesPublic/OneSelfOrderModal"; import OneSelfOrderModal from "../coursesPublic/OneSelfOrderModal";
import axios from 'axios' import axios from 'axios'
import moment from 'moment' import moment from 'moment'
import { getNextHalfHourOfMoment } from 'educoder'
class PublishRightnow extends Component { class PublishRightnow extends Component {
constructor(props) { constructor(props) {
super(props); super(props);
@ -96,7 +95,6 @@ class PublishRightnow extends Component{
} }
homeworkstartend = (arg_group_ids, endtime) => { homeworkstartend = (arg_group_ids, endtime) => {
debugger
if (this.usingCheckBeforePost && this.props.checkBeforePost) { if (this.usingCheckBeforePost && this.props.checkBeforePost) {
const goOn = this.props.checkBeforePost(); const goOn = this.props.checkBeforePost();
if (!goOn) { if (!goOn) {
@ -104,7 +102,6 @@ class PublishRightnow extends Component{
return; return;
} }
} }
debugger
const isPublish = this.props.isPublish; const isPublish = this.props.isPublish;
let group_ids = arg_group_ids let group_ids = arg_group_ids
if (this.usingCheckBeforePost) { if (this.usingCheckBeforePost) {
@ -112,7 +109,6 @@ class PublishRightnow extends Component{
return item.id return item.id
}) })
} }
debugger
if (this.state.course_groups.length > 0) { if (this.state.course_groups.length > 0) {
if (this.state.course_groups.length && (!group_ids || group_ids && group_ids.length == 0)) { if (this.state.course_groups.length && (!group_ids || group_ids && group_ids.length == 0)) {
this.props.showNotification('请至少选择一个分班'); this.props.showNotification('请至少选择一个分班');

@ -1,7 +1,4 @@
import React, { Component } from "react"; import React, { Component } from "react";
import { Pagination } from "antd";
import update from 'immutability-helper';
import axios from 'axios'; import axios from 'axios';
import moment from 'moment'; import moment from 'moment';
import _ from 'lodash'; import _ from 'lodash';
@ -17,8 +14,6 @@ import '../../graduation/tasks/GraduationTasksappraiseReply.css';
import './CommonWorkAppraiseReply.css'; import './CommonWorkAppraiseReply.css';
import ModulationModal from "../../coursesPublic/ModulationModal"; import ModulationModal from "../../coursesPublic/ModulationModal";
import Modals from '../../../modals/Modals'; import Modals from '../../../modals/Modals';
const REPLY_PAGE_COUNT = 10
const $ = window.$;
/* /*
@ -115,7 +110,8 @@ class CommonWorkAppraiseReply extends Component{
const task_id = this.props.task_id const task_id = this.props.task_id
// 作业是使用 task_id // 作业是使用 task_id
const url = `/student_works/${task_id}/destroy_score.json` const url = `/student_works/${task_id}/destroy_score.json`
axios.delete(url, { data: { axios.delete(url, {
data: {
score_id: item.id score_id: item.id
} }
}).then((result) => { }).then((result) => {

@ -90,7 +90,6 @@ class ExerciseReviewAndAnswer extends Component{
} }
} }
componentDidUpdate(prevProps) { componentDidUpdate(prevProps) {
// 需要等get_user_info执行完才能getInfo
if (!prevProps.coursedata.name && this.props.coursedata.name) { if (!prevProps.coursedata.name && this.props.coursedata.name) {
this.getInfo() this.getInfo()
} }
@ -198,9 +197,11 @@ class ExerciseReviewAndAnswer extends Component{
let isAdmin = this.props.isAdmin(); let isAdmin = this.props.isAdmin();
if (isAdmin) { if (isAdmin) {
let url = `/exercises/${eId}/review_exercise.json` let url = `/exercises/${eId}/review_exercise.json`
axios.get((url),{params:{ axios.get((url), {
params: {
login: user_id login: user_id
}}).then((result)=>{ }
}).then((result) => {
if (result) { if (result) {
this.setState({ this.setState({
data: result.data, data: result.data,
@ -238,9 +239,11 @@ class ExerciseReviewAndAnswer extends Component{
}) })
} else { } else {
let url = `/exercises/${eId}/start_answer.json` let url = `/exercises/${eId}/start_answer.json`
axios.get((url),{params:{ axios.get((url), {
params: {
login: user_id login: user_id
}}).then((result)=>{ }
}).then((result) => {
if (result.status == 200) { if (result.status == 200) {
this.setState({ this.setState({
data: result.data, data: result.data,

@ -34,7 +34,6 @@ class PollInfo extends Component{
} }
} }
componentDidUpdate(prevProps) { componentDidUpdate(prevProps) {
// 需要等get_user_info执行完才能getInfo
if (!prevProps.current_user && this.props.current_user) { if (!prevProps.current_user && this.props.current_user) {
this.getInfo() this.getInfo()
} }

@ -134,43 +134,6 @@ class LoginDialog extends Component {
Phonenumberisnotco: undefined, Phonenumberisnotco: undefined,
}) })
} }
// let reg = /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/;
// let reg1 = /^1\d{10}$/;
// let reg2=/^[a-zA-z]\w{3,14}$/;
// // let reg3=/^[a-zA-Z0-9]+([.\-_\\]*[a-zA-Z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/;
// let value=this.refs.loginPassText.value;
// let valuenum= value.length;
// if(valuenum>0){
// if(!reg.test(value)&&!reg1.test(value)&&!reg2.test(value)){
// this.setState({regular:1})
// return
// }else{
// // this.setState({loginValue:value});
// this.setState({regular:0});
// var stirngt;
// if(value.length>0){
// var str= value.replace(/\s*/g,"")
// stirngt=str;
// }else{
// stirngt= value;
// }
// this.setState({
// loginValue:stirngt,
// });
// }
// }else{
// this.setState({loginValue:value});
// var stirngt;
// if(value.length>0){
// var str= value.replace(/\s*/g,"")
// stirngt=str;
// }else{
// stirngt= value;
// }
// this.setState({
// loginValue:stirngt,
// });
// }
}; };
//邮箱手机号验证 //邮箱手机号验证
Emailphonenumberverification = (value, id) => { Emailphonenumberverification = (value, id) => {
@ -388,49 +351,9 @@ class LoginDialog extends Component {
} }
return response; return response;
}, (error) => { }, (error) => {
// // if (error.response && error.response.data.error === '401 Unauthorized') {
// // this.back_url = window.location.href;
// // this.setState({
// // isRender: true
// // })
// // // TODO 这里如果样式变了会出现css不加载的情况
// // const $ = window.$;
// // const ilessLoaded = window.getComputedStyle($('.log_nav li.active')[0], null)
// // .getPropertyValue('border-bottom')
// // == "2px solid rgb(69, 155, 229)"
// // if (!ilessLoaded) {
// // const isPort3007 = window.location.port == 3007;
// // let _url_origin = isPort3007 ? 'http://localhost:3000' : ''
// //
// // $('head').append( $('<link rel="stylesheet" type="text/css" />')
// // .attr('href', `${_url_origin}/stylesheets/educoder/edu-main.css`) );
// // $('head').append( $('<link rel="stylesheet" type="text/css" />')
// // .attr('href', `${_url_origin}/stylesheets/educoder/edu-all.css`) );
// // }
// // }
// // return Promise.reject(error);
}); });
} }
handleDialogClose = () => { handleDialogClose = () => {
// if(this.props.match.path==='/'){
// this.setState({
// isRender: false
// })
// this.props.Modifyloginvalue();
// }else{
// if(this.props.isloginCancel===undefined){
// window.location.href="/";
// this.props.Modifyloginvalue();
// // this.setState({
// // isRender: false
// // })
// // this.props.Modifyloginvalue();
// }else{
// this.setState({
// isRender: false
// })
// this.props.Modifyloginvalue();
// }
this.setState({ this.setState({
isRender: false isRender: false
@ -438,14 +361,6 @@ class LoginDialog extends Component {
this.props.Modifyloginvalue(); this.props.Modifyloginvalue();
// this.setState({
// isRender: false
// })
// try {
// this.props.Modifyloginvalue();
// }catch (e) {
//
// }
} }
loginEDU = () => { loginEDU = () => {
@ -464,7 +379,6 @@ class LoginDialog extends Component {
autologin: isGoingValue autologin: isGoingValue
} }
).then((response) => { ).then((response) => {
debugger;
if (response === undefined) { if (response === undefined) {
return return
} }

@ -59,8 +59,6 @@ class Trialapplicationysl extends Component {
} }
getipthon = () => { getipthon = () => {
// console.log("Trialapplicationysl");
// console.log("70");
let url = `/users/get_user_info.json` let url = `/users/get_user_info.json`
axios.get(url).then((result) => { axios.get(url).then((result) => {
console.log(result); console.log(result);

@ -403,34 +403,9 @@ class MessagSub extends Component {
return window.open(`/courses/${item.belong_container_id}/shixun_homeworks/${item.parent_container_id}/list?tab=0`) return window.open(`/courses/${item.belong_container_id}/shixun_homeworks/${item.parent_container_id}/list?tab=0`)
} }
case "StudentWorksScore": case "StudentWorksScore":
//课堂-作业 :id = parent_container_id
// if(item.homework_type==="normal"){
// //普通作业
// return window.open(`/courses/${item.belong_container_id}/common_homeworks/${item.parent_container_id}/list`)
// }
// if(item.homework_type==="group"){
// //分组作业
// return window.open(`/courses/${item.belong_container_id}/group_homeworks/${item.parent_container_id}/list`)
// }
// if(item.homework_type==="practice"){
// //实训作业
// return window.open(`/courses/${item.belong_container_id}/shixun_homeworks/${item.parent_container_id}/list?tab=0`)
// }
return window.open(`/courses/${item.belong_container_id}/common_homeworks/${item.trigger_user.id}/${item.parent_container_id}/appraise`); return window.open(`/courses/${item.belong_container_id}/common_homeworks/${item.trigger_user.id}/${item.parent_container_id}/appraise`);
case "StudentWorksScoresAppeal": case "StudentWorksScoresAppeal":
// if(item.homework_type==="normal"){
// //普通作业
// return window.open(`courses/${item.belong_container_id}/common_homeworks/${item.parent_container_id}/list`)
// }
// if(item.homework_type==="group"){
// //分组作业
// return window.open(`/courses/${item.belong_container_id}/group_homeworks/${item.parent_container_id}/list`)
// }
// if(item.homework_type==="practice"){
// //实训作业
// return window.open(`/courses/${item.belong_container_id}/shixun_homeworks/${item.parent_container_id}/list?tab=0`)
// }
return window.open(`/courses/${item.belong_container_id}/common_homeworks/${item.trigger_user.id}/${item.parent_container_id}/appraise`); return window.open(`/courses/${item.belong_container_id}/common_homeworks/${item.trigger_user.id}/${item.parent_container_id}/appraise`);
case "ChallengeWorkScore": case "ChallengeWorkScore":
return ''; return '';

@ -204,9 +204,6 @@ class NewHeader extends Component {
this.setState({ this.setState({
user: undefined user: undefined
}) })
// let path="/";
// this.props.history.push(path);
// broadcastChannelPostMessage('refreshPage')
window.location.href = "/login" window.location.href = "/login"
message.success('退出成功'); message.success('退出成功');
} }
@ -341,38 +338,11 @@ class NewHeader extends Component {
this.setState({ this.setState({
isRender: true isRender: true
}) })
// var url = `/accounts/logout.json`;
//
// axios.get((url)).then((result) => {
// if(result!==undefined){
// // this.setState({
// // isRender:true
// // })
// window.location.href = "/";
// }
// }).catch((error) => {
// console.log(error);
// })
} }
educoderloginysl = () => { educoderloginysl = () => {
//退出账号
// this.setState({
// isRender:true
// })
// let newTPMsettings=this.props.user&&this.props.user.user_id+'newTPMsettings'
// let shixunopenprocess=this.props.user&&this.props.user.user_id+'shixunopenprocess'
// let openopenpublictype=this.props.user&&this.props.user.user_id+'openopenpublictype'
var url = `/accounts/logout.json`; var url = `/accounts/logout.json`;
// let storage=window.localStorage;
axios.get((url)).then((result) => { axios.get((url)).then((result) => {
// storage.removeItem(newTPMsettings);
// storage.removeItem(shixunopenprocess);
// storage.removeItem( openopenpublictype);
if (result !== undefined) { if (result !== undefined) {
// this.setState({
// isRender:true
// })
// broadcastChannelPostMessage('refreshPage')
window.location.href = "/"; window.location.href = "/";
} }
}).catch((error) => { }).catch((error) => {

@ -1,39 +1,29 @@
import React, { Component } from 'react'; import React from 'react';
import PropTypes from 'prop-types';
import NewHeader from './NewHeader' import NewHeader from './NewHeader'
import NewFooter from './NewFooter' import NewFooter from './NewFooter'
import SiderBar from './SiderBar' import SiderBar from './SiderBar'
import { getUrl, downloadFile } from 'educoder' import { downloadFile } from 'educoder'
import axios from 'axios'; import axios from 'axios';
import { Spin } from 'antd'; import { Spin } from 'antd';
import './TPMIndex.css'; import './TPMIndex.css';
import LoginDialog from '../login/LoginDialog'; import LoginDialog from '../login/LoginDialog';
import AccountProfile from '../user/AccountProfile'; import AccountProfile from '../user/AccountProfile';
import AccountPhoneemail from '../user/AccountPhoneemail'; import AccountPhoneemail from '../user/AccountPhoneemail';
import Trialapplication from "../login/Trialapplication";
// import "antd/dist/antd.css";
// import '../../css/educoder/edu-common.css'
// import '../../css/educoder/edu-all.css'
// import '../../css/educoder/edu-main.css'
const $ = window.$; const $ = window.$;
const versionNum = '0001'; const versionNum = '0001';
// let _url_origin = getUrl()
let _url_origin = ''; let _url_origin = '';
if (window.location.port === "3007") { if (window.location.port === "3007") {
_url_origin = "https://test-newweb.educoder.net"; _url_origin = "https://test-newweb.educoder.net";
} }
// let _url_origin=`https://www.educoder.net`;
if (!window['indexHOCLoaded']) { if (!window['indexHOCLoaded']) {
window.indexHOCLoaded = true; window.indexHOCLoaded = true;
//解决首屏加载问题 //解决首屏加载问题
// $('head').append($('<link rel="stylesheet" type="text/css" />')
// .attr('href', `${_url_origin}/stylesheets/educoder/antd.min.css?1525440977`));
$('head').append($('<link rel="stylesheet" type="text/css" />') $('head').append($('<link rel="stylesheet" type="text/css" />')
.attr('href', `${_url_origin}/stylesheets/css/edu-common.css?3`)); .attr('href', `${_url_origin}/stylesheets/css/edu-common.css?3`));
@ -44,25 +34,7 @@ if (!window['indexHOCLoaded']) {
$('head').append($('<link rel="stylesheet" type="text/css" />') $('head').append($('<link rel="stylesheet" type="text/css" />')
.attr('href', `${_url_origin}/stylesheets/educoder/edu-all.css?3`)); .attr('href', `${_url_origin}/stylesheets/educoder/edu-all.css?3`));
// $('head').append($('<link rel="stylesheet" type="text/css" />')
// .attr('href', `${_url_origin}/stylesheets/educoder/css_min_all.css?1525440977`));
// 加timeout 为了覆盖掉antd的样式
// setTimeout(() => {
// $('head').append( $('<link rel="stylesheet" type="text/css" />')
// .attr('href', `${_url_origin}/stylesheets/css/edu-common.css?1525440977`) );
// $('head').append( $('<link rel="stylesheet" type="text/css" />')
// .attr('href', `${_url_origin}/stylesheets/educoder/edu-all.css?1525440977`) );
// $('head').append( $('<link rel="stylesheet" type="text/css" />')
// .attr('href', `${_url_origin}/stylesheets/educoder/edu-main.css?1525440977`) );
// }, 1000);
$("script").append('<script></script>')
.attr('src', `${_url_origin}/javascripts/jquery-1.8.3-ui-1.9.2-ujs-2.0.3.js?_t=${versionNum}`);
} }
// `${_url_origin}/javascripts/jquery-1.8.3-ui-1.9.2-ujs-2.0.3.js?_t=${versionNum}`
// TODO css加载完成后再打开页面行为和tpm其他页面一致 // TODO css加载完成后再打开页面行为和tpm其他页面一致
export function TPMIndexHOC(WrappedComponent) { export function TPMIndexHOC(WrappedComponent) {
// 这里如果extends WrappedComponent 会出现 WrappedComponent mount twice的问题 // 这里如果extends WrappedComponent 会出现 WrappedComponent mount twice的问题
@ -90,7 +62,6 @@ export function TPMIndexHOC(WrappedComponent) {
// header里面需要有user // header里面需要有user
initCommonState(user) { initCommonState(user) {
// 更新头像后,需要改变参数,不然会被图片缓存影响到 --> 后台已加 ?t=${new Date().getTime()
const newUser = Object.assign({}, { ...user }, { image_url: `${user.image_url}` }); const newUser = Object.assign({}, { ...user }, { image_url: `${user.image_url}` });
this.setState({ this.setState({
user: newUser, user: newUser,
@ -128,7 +99,6 @@ export function TPMIndexHOC(WrappedComponent) {
.then((response) => { .then((response) => {
const status = response.data.status; const status = response.data.status;
if (status == 1) { if (status == 1) {
const new_author_info = Object.assign({}, creator)
this.setState({ this.setState({
watched: !watched watched: !watched
}) })
@ -148,8 +118,6 @@ export function TPMIndexHOC(WrappedComponent) {
} }
componentDidMount() { componentDidMount() {
// console.log("TPMIndexHOC========");
// console.log(this.props);
window.addEventListener('keyup', this.keyupListener) window.addEventListener('keyup', this.keyupListener)
if (this.props.match.path === "/") { if (this.props.match.path === "/") {
@ -166,28 +134,6 @@ export function TPMIndexHOC(WrappedComponent) {
document.title = "翻转课堂"; document.title = "翻转课堂";
} }
// if(this.props.match.path==="/"){
// document.title="EduCoder-IT实践教学平台_信息技术类精品课程网_大学生MOOC平台";
// }else if(this.props.match.path==="/403"){
// document.title="你没有权限访问";
// }else if(this.props.match.path==="/nopage"){
// document.title="没有找到该页面";
// }else if(this.props.match.path==="/shixuns"){
// document.title="EduCoder-IT实践教学平台_信息技术类精品课程网_大学生MOOC平台";
// }else if(this.props.match.path==="/paths"){
// document.title="实践课程_项目实战开发_web前端开发实训_web后端开发实战_人工智能技术-EduCoder";
// }else if(this.props.match.path==="/courses"){
// document.title="实训项目_php后端开发_app前端开发_java_python实训_C语言入门课程-EduCoder";
// }else if(this.props.match.path==="/competitions"){
// document.title="在线竞赛_计算机应用大赛_编程大赛_大学生设计大赛_全国高校绿色计算大赛-EduCoder";
// }else if(this.props.match.path==="/moop_cases"){
// document.title="教学案例-EduCoder";
// }else if(this.props.match.path==="/forums"){
// document.title="交流问答-EduCoder";
// }else if(this.props.match.path==="/forums"){
// document.title="交流问答-EduCoder";
// }
$.ajaxSetup({ $.ajaxSetup({
cache: true cache: true
}); });
@ -216,7 +162,7 @@ export function TPMIndexHOC(WrappedComponent) {
dataquerys: {}, dataquerys: {},
}) })
} }
this.fetchUsers(dataqueryss); this.fetchUser(dataqueryss);
let url = `/users/get_navigation_info.json`; let url = `/users/get_navigation_info.json`;
axios.get(url, { axios.get(url, {
@ -462,71 +408,6 @@ export function TPMIndexHOC(WrappedComponent) {
console.log(error) console.log(error)
}) })
}; };
fetchUsers = (yslurlobject) => {
let url = `/users/get_user_info.json`
let courseId;
let query = this.props.location.pathname;
const type = query.split('/');
if (type[1] == 'courses' && type[2]) {
courseId = parseInt(type[2])
// url += `?course_id=${courseId}`
}
var datay = {};
if (JSON.stringify(yslurlobject) === "{}") {
datay = {
course_id: isNaN(courseId) ? undefined : courseId,
school: 1
}
} else {
datay = {
course_id: isNaN(courseId) ? undefined : courseId,
school: 1,
chinaoocTimestamp: yslurlobject.chinaoocTimestamp,
websiteName: yslurlobject.websiteName,
chinaoocKey: yslurlobject.chinaoocKey,
}
}
axios.get(url, {
params:
datay
},
{
// withCredentials: true
}
).then((response) => {
/*
{
"username": "黄井泉",
"login": "Hjqreturn",
"user_id": 12,
"image_url": "avatar/User/12",
"admin": true,
"is_teacher": false,
"tidding_count": 0
}
*/
if (response === undefined) {
return
}
if (response.data) {
this.initCommonState(response.data)
this.setState({
tpmLoading: false,
coursedata: {
course_identity: response.data.course_identity >= 0 ? response.data.course_identity : undefined,
course_public: response.data.course_public,
name: response.data.course_name,
userid: response.data.user_id
},
})
}
}).catch((error) => {
console.log(error)
})
};
//截取url 数据的 //截取url 数据的
foo = (url) => { foo = (url) => {
var json = {}; var json = {};
@ -534,12 +415,9 @@ export function TPMIndexHOC(WrappedComponent) {
var arr; var arr;
do { do {
arr = regExp.exec(url); arr = regExp.exec(url);
// console.log(arr); // arr = [完整的字符串, key, 等号或'', value或'']
if (arr) { if (arr) {
var key = arr[1]; var key = arr[1];
var value = arr[3]; var value = arr[3];
// arr[2] === ''时, value = undefined
if (!arr[2]) if (!arr[2])
value = undefined; value = undefined;

@ -220,35 +220,6 @@ class InterestpageComponent extends Component {
}) })
} }
// //跳转然后登入
// Jumptotheinterestpage=()=>{
// console.log(this.state.login);
// console.log(this.state.password);
// var url = "/accounts/login.json";
// axios.post(url, {
// login: this.props.login,
// password: this.props.password,
// }).then((response) => {
// if (response === undefined) {
// return
// }
// if (response.status === 200) {
// // if (response.data.status === 402) {
// // window.location.href = response.data.url;
// // } else {
// // broadcastChannelPostMessage('refreshPage')
// // this.setState({
// // isRender: false
// // })
// window.location.href = "/"
// // }
// }
//
//
// }).catch((error) => {
// console.log(error);
// })
// }
setNotcompleteds = () => { setNotcompleteds = () => {
this.setState({ this.setState({
Notcompleteds: true, Notcompleteds: true,

@ -219,35 +219,6 @@ class InterestpageMax extends Component {
}) })
} }
// //跳转然后登入
// Jumptotheinterestpage=()=>{
// console.log(this.state.login);
// console.log(this.state.password);
// var url = "/accounts/login.json";
// axios.post(url, {
// login: this.props.login,
// password: this.props.password,
// }).then((response) => {
// if (response === undefined) {
// return
// }
// if (response.status === 200) {
// // if (response.data.status === 402) {
// // window.location.href = response.data.url;
// // } else {
// // broadcastChannelPostMessage('refreshPage')
// // this.setState({
// // isRender: false
// // })
// window.location.href = "/"
// // }
// }
//
//
// }).catch((error) => {
// console.log(error);
// })
// }
setNotcompleteds = () => { setNotcompleteds = () => {
this.setState({ this.setState({
Notcompleteds: true, Notcompleteds: true,

@ -1,6 +1,6 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import { setmiyah, broadcastChannelPostMessage } from 'educoder'; import { setmiyah, broadcastChannelPostMessage } from 'educoder';
import {Tabs, Input, Checkbox, Button, notification,Menu} from 'antd'; import { Input, Checkbox, Button, notification, Menu } from 'antd';
import passopen from '../../../src/images/login/passopen.png'; import passopen from '../../../src/images/login/passopen.png';
import passoff from '../../../src/images/login/passoff.png'; import passoff from '../../../src/images/login/passoff.png';
import axios from 'axios'; import axios from 'axios';
@ -9,28 +9,13 @@ import CheckInputysl2 from './CheckInputysl';
import Notcompletedysl from './Notcompletedysl'; import Notcompletedysl from './Notcompletedysl';
import './common.css' import './common.css'
import './commontwo.css' import './commontwo.css'
const { TabPane } = Tabs;
const loginInputsyl = {
"width":"434px",
"height": "462px",
"-webkit-box-shadow": "3px 10px 21px 0px rgba(76,76,76,0.15)",
"box-shadow": "3px 10px 21px 0px rgba(76,76,76,0.15)",
"border-radius": "6px",
"background": "#fff"
}
//父组件EducoderLogin.js //父组件EducoderLogin.js
class LoginRegisterComponent extends Component { class LoginRegisterComponent extends Component {
constructor(props) { constructor(props) {
super(props) super(props)
//
// console.log("LoginRegisterComponent");
// console.log("29");
// console.log(props.loginstatus);
if (props.loginstatus === true) { if (props.loginstatus === true) {
// console.log(props.loginstatus);
this.state = { this.state = {
tab: ["0"], tab: ["0"],
classpass: "text", classpass: "text",
@ -400,11 +385,6 @@ class LoginRegisterComponent extends Component {
} }
// if(response.data.profile_completed !== null || response.data.profile_completed === false){
// this.setMyEduCoderModals();
// return;
// }
if (response.status === 200) { if (response.status === 200) {
if (response.data.status === 402) { if (response.data.status === 402) {
window.location.href = response.data.url; window.location.href = response.data.url;

Loading…
Cancel
Save