2020-04-28 17:23:34 +08:00
|
|
|
|
import React, { Component } from 'react';
|
2020-03-16 14:12:11 +08:00
|
|
|
|
import './App.css';
|
2020-04-28 17:23:34 +08:00
|
|
|
|
import { ConfigProvider } from 'antd'
|
2020-03-16 14:12:11 +08:00
|
|
|
|
import zhCN from 'antd/lib/locale-provider/zh_CN';
|
|
|
|
|
import {
|
|
|
|
|
BrowserRouter as Router,
|
|
|
|
|
Route,
|
|
|
|
|
Switch
|
|
|
|
|
} from 'react-router-dom';
|
|
|
|
|
import axios from 'axios';
|
|
|
|
|
import LoginDialog from './modules/login/LoginDialog';
|
|
|
|
|
import Notcompletedysl from './modules/user/Notcompletedysl';
|
|
|
|
|
import Trialapplicationysl from './modules/login/Trialapplicationysl';
|
|
|
|
|
import Trialapplicationreview from './modules/user/Trialapplicationreview';
|
|
|
|
|
import Addcourses from "./modules/courses/coursesPublic/Addcourses";
|
|
|
|
|
import AccountProfile from "./modules/user/AccountProfile";
|
|
|
|
|
import Accountnewprofile from './modules/user/Accountnewprofile';
|
|
|
|
|
import Certifiedprofessional from './modules/modals/Certifiedprofessional';
|
|
|
|
|
|
|
|
|
|
import Loading from './Loading'
|
|
|
|
|
|
|
|
|
|
import Loadable from 'react-loadable';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import moment from 'moment'
|
|
|
|
|
|
2020-04-28 17:23:34 +08:00
|
|
|
|
import { MuiThemeProvider, createMuiTheme } from 'material-ui/styles';
|
2020-03-16 14:12:11 +08:00
|
|
|
|
|
|
|
|
|
import history from './history';
|
|
|
|
|
|
2020-04-28 17:23:34 +08:00
|
|
|
|
import { SnackbarHOC } from 'educoder'
|
|
|
|
|
import { initAxiosInterceptors } from './AppConfig'
|
2020-03-16 14:12:11 +08:00
|
|
|
|
import { Provider } from 'react-redux';
|
|
|
|
|
import configureStore from './redux/stores/configureStore';
|
|
|
|
|
const store = configureStore();
|
|
|
|
|
|
|
|
|
|
const theme = createMuiTheme({
|
|
|
|
|
palette: {
|
|
|
|
|
primary: {
|
|
|
|
|
main: '#4CACFF',
|
|
|
|
|
contrastText: 'rgba(255, 255, 255, 0.87)'
|
|
|
|
|
},
|
2020-04-28 17:23:34 +08:00
|
|
|
|
secondary: { main: '#4CACFF' }, // #11cb5f This is just green.A700 as hex.
|
2020-03-16 14:12:11 +08:00
|
|
|
|
},
|
|
|
|
|
});
|
2020-04-28 17:23:34 +08:00
|
|
|
|
//forge项目
|
|
|
|
|
const Projects = Loadable({
|
|
|
|
|
loader: () => import('./forge/Index'),
|
|
|
|
|
loading: Loading,
|
|
|
|
|
})
|
2020-03-16 14:12:11 +08:00
|
|
|
|
|
|
|
|
|
//403页面
|
|
|
|
|
const Shixunauthority = Loadable({
|
|
|
|
|
loader: () => import('./modules/403/Shixunauthority'),
|
|
|
|
|
loading: Loading,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//404页面
|
|
|
|
|
const Shixunnopage = Loadable({
|
|
|
|
|
loader: () => import('./modules/404/Shixunnopage'),
|
|
|
|
|
loading: Loading,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
//500页面
|
|
|
|
|
const http500 = Loadable({
|
|
|
|
|
loader: () => import('./modules/500/http500'),
|
|
|
|
|
loading: Loading,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
class App extends Component {
|
|
|
|
|
constructor(props) {
|
|
|
|
|
super(props)
|
|
|
|
|
this.state = {
|
2020-04-28 17:23:34 +08:00
|
|
|
|
Addcoursestype: false,
|
|
|
|
|
Addcoursestypes: false,
|
|
|
|
|
mydisplay: false,
|
|
|
|
|
occupation: 0,
|
2020-03-16 14:12:11 +08:00
|
|
|
|
mygetHelmetapi: null,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
2020-04-28 17:23:34 +08:00
|
|
|
|
HideAddcoursestypess = (i) => {
|
2020-03-16 14:12:11 +08:00
|
|
|
|
this.setState({
|
2020-04-28 17:23:34 +08:00
|
|
|
|
Addcoursestype: false,
|
|
|
|
|
Addcoursestypes: false,
|
|
|
|
|
mydisplay: true,
|
|
|
|
|
occupation: i,
|
2020-03-16 14:12:11 +08:00
|
|
|
|
})
|
|
|
|
|
};
|
2020-04-28 17:23:34 +08:00
|
|
|
|
hideAddcoursestypes = () => {
|
2020-03-16 14:12:11 +08:00
|
|
|
|
this.setState({
|
2020-04-28 17:23:34 +08:00
|
|
|
|
Addcoursestypes: false
|
2020-03-16 14:12:11 +08:00
|
|
|
|
})
|
|
|
|
|
};
|
2020-04-28 17:23:34 +08:00
|
|
|
|
ModalCancelsy = () => {
|
2020-03-16 14:12:11 +08:00
|
|
|
|
this.setState({
|
2020-04-28 17:23:34 +08:00
|
|
|
|
mydisplay: false,
|
2020-03-16 14:12:11 +08:00
|
|
|
|
})
|
|
|
|
|
window.location.href = "/";
|
|
|
|
|
};
|
2020-04-28 17:23:34 +08:00
|
|
|
|
ModalshowCancelsy = () => {
|
2020-03-16 14:12:11 +08:00
|
|
|
|
this.setState({
|
2020-04-28 17:23:34 +08:00
|
|
|
|
mydisplay: true,
|
2020-03-16 14:12:11 +08:00
|
|
|
|
})
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
disableVideoContextMenu = () => {
|
2020-04-28 17:23:34 +08:00
|
|
|
|
window.$("body").on("mousedown", "video", function (event) {
|
|
|
|
|
if (event.which === 3) {
|
|
|
|
|
window.$('video').bind('contextmenu', function () { return false; });
|
2020-03-16 14:12:11 +08:00
|
|
|
|
} else {
|
|
|
|
|
window.$('video').unbind('contextmenu');
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
componentDidMount() {
|
|
|
|
|
document.title = "loading...";
|
|
|
|
|
this.disableVideoContextMenu();
|
|
|
|
|
history.listen(() => {
|
|
|
|
|
this.forceUpdate()
|
|
|
|
|
const $ = window.$
|
|
|
|
|
$("html").animate({ scrollTop: $('html').scrollTop() - 0 })
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
initAxiosInterceptors(this.props);
|
2020-04-28 17:23:34 +08:00
|
|
|
|
this.getAppdata();
|
2020-03-16 14:12:11 +08:00
|
|
|
|
|
|
|
|
|
window.addEventListener('error', (event) => {
|
|
|
|
|
const msg = `${event.type}: ${event.message}`;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
//修改登录方法
|
2020-04-28 17:23:34 +08:00
|
|
|
|
Modifyloginvalue = () => {
|
2020-03-16 14:12:11 +08:00
|
|
|
|
this.setState({
|
2020-04-28 17:23:34 +08:00
|
|
|
|
isRender: false,
|
2020-03-16 14:12:11 +08:00
|
|
|
|
})
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//获取数据为空的时候
|
|
|
|
|
gettablogourlnull = () => {
|
|
|
|
|
this.setState({
|
|
|
|
|
mygetHelmetapi: undefined
|
|
|
|
|
});
|
2020-04-28 17:23:34 +08:00
|
|
|
|
document.title = "EduCoder";
|
2020-03-16 14:12:11 +08:00
|
|
|
|
var link = document.createElement('link'),
|
|
|
|
|
oldLink = document.getElementById('dynamic-favicon');
|
|
|
|
|
link.id = 'dynamic-favicon';
|
|
|
|
|
link.rel = 'shortcut icon';
|
2020-03-17 21:58:04 +08:00
|
|
|
|
link.href = "/react/build/./favicon.ico";
|
2020-03-16 14:12:11 +08:00
|
|
|
|
if (oldLink) {
|
|
|
|
|
document.head.removeChild(oldLink);
|
|
|
|
|
}
|
|
|
|
|
document.head.appendChild(link);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//获取数据的时候
|
|
|
|
|
gettablogourldata = (response) => {
|
|
|
|
|
document.title = response.data.setting.name;
|
|
|
|
|
var link = document.createElement('link'),
|
|
|
|
|
oldLink = document.getElementById('dynamic-favicon');
|
|
|
|
|
link.id = 'dynamic-favicon';
|
|
|
|
|
link.rel = 'shortcut icon';
|
|
|
|
|
link.href = '/' + response.data.setting.tab_logo_url;
|
|
|
|
|
if (oldLink) {
|
|
|
|
|
document.head.removeChild(oldLink);
|
|
|
|
|
}
|
|
|
|
|
document.head.appendChild(link);
|
|
|
|
|
}
|
2020-04-28 17:23:34 +08:00
|
|
|
|
//获取当前定制信息
|
|
|
|
|
getAppdata = () => {
|
2020-03-16 14:12:11 +08:00
|
|
|
|
let url = "/setting.json";
|
|
|
|
|
axios.get(url).then((response) => {
|
|
|
|
|
// console.log("app.js开始请求/setting.json");
|
|
|
|
|
// console.log("获取当前定制信息");
|
2020-04-28 17:23:34 +08:00
|
|
|
|
if (response) {
|
|
|
|
|
if (response.data) {
|
2020-03-16 14:12:11 +08:00
|
|
|
|
this.setState({
|
2020-04-28 17:23:34 +08:00
|
|
|
|
mygetHelmetapi: response.data.setting
|
2020-03-16 14:12:11 +08:00
|
|
|
|
});
|
|
|
|
|
//存储配置到游览器
|
2020-04-28 17:23:34 +08:00
|
|
|
|
localStorage.setItem('chromesetting', JSON.stringify(response.data.setting));
|
|
|
|
|
localStorage.setItem('chromesettingresponse', JSON.stringify(response));
|
2020-03-16 14:12:11 +08:00
|
|
|
|
try {
|
|
|
|
|
if (response.data.setting.tab_logo_url) {
|
|
|
|
|
this.gettablogourldata(response);
|
|
|
|
|
} else {
|
|
|
|
|
this.gettablogourlnull();
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
this.gettablogourlnull();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
this.gettablogourlnull();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
this.gettablogourlnull();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}).catch((error) => {
|
|
|
|
|
this.gettablogourlnull();
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
render() {
|
2020-04-28 17:23:34 +08:00
|
|
|
|
let { mygetHelmetapi } = this.state;
|
|
|
|
|
// console.log("appappapp");
|
|
|
|
|
// console.log(mygetHelmetapi);
|
2020-03-16 14:12:11 +08:00
|
|
|
|
return (
|
|
|
|
|
<Provider store={store}>
|
|
|
|
|
<ConfigProvider locale={zhCN}>
|
|
|
|
|
<MuiThemeProvider theme={theme}>
|
2020-04-28 17:23:34 +08:00
|
|
|
|
<Accountnewprofile {...this.props}{...this.state} />
|
|
|
|
|
<LoginDialog {...this.props} {...this.state} Modifyloginvalue={() => this.Modifyloginvalue()}></LoginDialog>
|
2020-03-16 14:12:11 +08:00
|
|
|
|
<Notcompletedysl {...this.props} {...this.state}></Notcompletedysl>
|
|
|
|
|
<Trialapplicationysl {...this.props} {...this.state}></Trialapplicationysl>
|
|
|
|
|
<Trialapplicationreview {...this.props} {...this.state}></Trialapplicationreview>
|
2020-04-28 17:23:34 +08:00
|
|
|
|
<Addcourses {...this.props} {...this.state} HideAddcoursestypess={(i) => this.HideAddcoursestypess(i)} />
|
|
|
|
|
<AccountProfile {...this.props} {...this.state} />
|
|
|
|
|
<Certifiedprofessional {...this.props} {...this.state} ModalCancelsy={this.ModalCancelsy} ModalshowCancelsy={this.ModalshowCancelsy} />
|
2020-03-16 14:12:11 +08:00
|
|
|
|
<Router>
|
|
|
|
|
<Switch>
|
2020-04-28 17:23:34 +08:00
|
|
|
|
{/*项目*/}
|
|
|
|
|
<Route
|
|
|
|
|
path={"/projects"}
|
|
|
|
|
render={
|
|
|
|
|
(props) => {
|
|
|
|
|
return (<Projects {...this.props} {...props} {...this.state} />)
|
|
|
|
|
}
|
|
|
|
|
}>
|
|
|
|
|
</Route>
|
2020-03-16 14:12:11 +08:00
|
|
|
|
{/*403*/}
|
2020-04-28 17:23:34 +08:00
|
|
|
|
<Route path="/403" component={Shixunauthority} />
|
2020-03-16 14:12:11 +08:00
|
|
|
|
|
2020-04-28 17:23:34 +08:00
|
|
|
|
<Route path="/500" component={http500} />
|
2020-03-16 14:12:11 +08:00
|
|
|
|
|
|
|
|
|
{/*404*/}
|
2020-04-28 17:23:34 +08:00
|
|
|
|
<Route path="/nopage" component={Shixunnopage} />
|
2020-03-16 14:12:11 +08:00
|
|
|
|
|
|
|
|
|
<Route exact path="/"
|
2020-04-28 17:23:34 +08:00
|
|
|
|
render={
|
2020-04-29 10:42:53 +08:00
|
|
|
|
(props) => (<Projects {...this.props} {...props} {...this.state}></Projects>)
|
2020-04-28 17:23:34 +08:00
|
|
|
|
}
|
2020-03-16 14:12:11 +08:00
|
|
|
|
/>
|
2020-04-28 17:23:34 +08:00
|
|
|
|
<Route component={Shixunnopage} />
|
2020-03-16 14:12:11 +08:00
|
|
|
|
|
|
|
|
|
</Switch>
|
|
|
|
|
</Router>
|
|
|
|
|
</MuiThemeProvider>
|
|
|
|
|
</ConfigProvider>
|
|
|
|
|
</Provider>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// moment国际化,设置为中文
|
|
|
|
|
moment.defineLocale('zh-cn', {
|
|
|
|
|
months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
|
|
|
|
|
monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
|
|
|
|
|
weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
|
|
|
|
|
weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
|
|
|
|
|
weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
|
|
|
|
|
longDateFormat: {
|
|
|
|
|
LT: 'Ah点mm分',
|
|
|
|
|
LTS: 'Ah点m分s秒',
|
|
|
|
|
L: 'YYYY-MM-DD',
|
|
|
|
|
LL: 'YYYY年MMMD日',
|
|
|
|
|
LLL: 'YYYY年MMMD日Ah点mm分',
|
|
|
|
|
LLLL: 'YYYY年MMMD日ddddAh点mm分',
|
|
|
|
|
l: 'YYYY-MM-DD',
|
|
|
|
|
ll: 'YYYY年MMMD日',
|
|
|
|
|
lll: 'YYYY年MMMD日Ah点mm分',
|
|
|
|
|
llll: 'YYYY年MMMD日ddddAh点mm分'
|
|
|
|
|
},
|
|
|
|
|
meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
|
|
|
|
|
meridiemHour: function (hour, meridiem) {
|
|
|
|
|
if (hour === 12) {
|
|
|
|
|
hour = 0;
|
|
|
|
|
}
|
|
|
|
|
if (meridiem === '凌晨' || meridiem === '早上' ||
|
|
|
|
|
meridiem === '上午') {
|
|
|
|
|
return hour;
|
|
|
|
|
} else if (meridiem === '下午' || meridiem === '晚上') {
|
|
|
|
|
return hour + 12;
|
|
|
|
|
} else {
|
|
|
|
|
// '中午'
|
|
|
|
|
return hour >= 11 ? hour : hour + 12;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
meridiem: function (hour, minute, isLower) {
|
|
|
|
|
var hm = hour * 100 + minute;
|
|
|
|
|
if (hm < 600) {
|
|
|
|
|
return '凌晨';
|
|
|
|
|
} else if (hm < 900) {
|
|
|
|
|
return '早上';
|
|
|
|
|
} else if (hm < 1130) {
|
|
|
|
|
return '上午';
|
|
|
|
|
} else if (hm < 1230) {
|
|
|
|
|
return '中午';
|
|
|
|
|
} else if (hm < 1800) {
|
|
|
|
|
return '下午';
|
|
|
|
|
} else {
|
|
|
|
|
return '晚上';
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
calendar: {
|
|
|
|
|
sameDay: function () {
|
|
|
|
|
return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT';
|
|
|
|
|
},
|
|
|
|
|
nextDay: function () {
|
|
|
|
|
return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT';
|
|
|
|
|
},
|
|
|
|
|
lastDay: function () {
|
|
|
|
|
return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT';
|
|
|
|
|
},
|
|
|
|
|
nextWeek: function () {
|
|
|
|
|
var startOfWeek, prefix;
|
|
|
|
|
startOfWeek = moment().startOf('week');
|
|
|
|
|
prefix = this.unix() - startOfWeek.unix() >= 7 * 24 * 3600 ? '[下]' : '[本]';
|
|
|
|
|
return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
|
|
|
|
|
},
|
|
|
|
|
lastWeek: function () {
|
|
|
|
|
var startOfWeek, prefix;
|
|
|
|
|
startOfWeek = moment().startOf('week');
|
|
|
|
|
prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]';
|
|
|
|
|
return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
|
|
|
|
|
},
|
|
|
|
|
sameElse: 'LL'
|
|
|
|
|
},
|
|
|
|
|
ordinalParse: /\d{1,2}(日|月|周)/,
|
|
|
|
|
ordinal: function (number, period) {
|
|
|
|
|
switch (period) {
|
|
|
|
|
case 'd':
|
|
|
|
|
case 'D':
|
|
|
|
|
case 'DDD':
|
|
|
|
|
return number + '日';
|
|
|
|
|
case 'M':
|
|
|
|
|
return number + '月';
|
|
|
|
|
case 'w':
|
|
|
|
|
case 'W':
|
|
|
|
|
return number + '周';
|
|
|
|
|
default:
|
|
|
|
|
return number;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
relativeTime: {
|
|
|
|
|
future: '%s内',
|
|
|
|
|
past: '%s前',
|
|
|
|
|
s: '几秒',
|
|
|
|
|
m: '1分钟',
|
|
|
|
|
mm: '%d分钟',
|
|
|
|
|
h: '1小时',
|
|
|
|
|
hh: '%d小时',
|
|
|
|
|
d: '1天',
|
|
|
|
|
dd: '%d天',
|
|
|
|
|
M: '1个月',
|
|
|
|
|
MM: '%d个月',
|
|
|
|
|
y: '1年',
|
|
|
|
|
yy: '%d年'
|
|
|
|
|
},
|
|
|
|
|
week: {
|
|
|
|
|
// GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
|
|
|
|
|
dow: 1, // Monday is the first day of the week.
|
|
|
|
|
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
|
|
|
|
}
|
|
|
|
|
});
|
2020-04-28 17:23:34 +08:00
|
|
|
|
export default SnackbarHOC()(App);
|