Commit 399a7c8f authored by wangxuelai's avatar wangxuelai

''

parents 3ef86bce 4bb0869d
......@@ -9,22 +9,4 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"><!-- Polyfills -->
<!--[if lt IE 10]>
<script src="js/console-polyfill.js"></script>
<![endif]-->
<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=XSZBZ-5LHCV-5I2P7-UQHPW-6456F-JBB3B"></script>
<link href="https://cdn.img.shangjiadao.cn/qingxiao/biz/dist/index.css?1568775006121" rel="stylesheet">
<script src="https://cdn.img.shangjiadao.cn/qingxiao/biz/lib/vendor.dll.js?3" charset="utf-8"></script>
<script src="https://cdn.img.shangjiadao.cn/qingxiao/biz/js/console-polyfill.js?3" charset="utf-8"></script>
<script src="https://cdn.img.shangjiadao.cn/qingxiao/biz/js/es6-shim.min.js?3" charset="utf-8"></script>
<script src="https://cdn.img.shangjiadao.cn/qingxiao/biz/js/es5-shim.js?3" charset="utf-8"></script>
<script src="https://cdn.img.shangjiadao.cn/qingxiao/biz/js/es5-sham.min.js?3" charset="utf-8"></script>
<script src="https://cdn.img.shangjiadao.cn/qingxiao/biz/js/json3.min.js?3" charset="utf-8"></script>
<script src="https://cdn.img.shangjiadao.cn/qingxiao/biz/js/html5shiv.min.js?3" charset="utf-8"></script>
<script src="https://cdn.img.shangjiadao.cn/qingxiao/biz/js/polyfill.js?3" charset="utf-8"></script>
</head>
<body>
<div id="root"></div>
<script src="https://cdn.img.shangjiadao.cn/qingxiao/biz/dist/index.js?1568775006121" charset="utf-8"></script>
</body>
</html>
\ No newline at end of file
<![endif]--><script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=XSZBZ-5LHCV-5I2P7-UQHPW-6456F-JBB3B"></script><link href="https://cdn.img.shangjiadao.cn/qingxiao/biz/dist/index.css?1568805108437" rel="stylesheet"><script src="https://cdn.img.shangjiadao.cn/qingxiao/biz/lib/vendor.dll.js?3" charset="utf-8"></script><script src="https://cdn.img.shangjiadao.cn/qingxiao/biz/js/console-polyfill.js?3" charset="utf-8"></script><script src="https://cdn.img.shangjiadao.cn/qingxiao/biz/js/es6-shim.min.js?3" charset="utf-8"></script><script src="https://cdn.img.shangjiadao.cn/qingxiao/biz/js/es5-shim.js?3" charset="utf-8"></script><script src="https://cdn.img.shangjiadao.cn/qingxiao/biz/js/es5-sham.min.js?3" charset="utf-8"></script><script src="https://cdn.img.shangjiadao.cn/qingxiao/biz/js/json3.min.js?3" charset="utf-8"></script><script src="https://cdn.img.shangjiadao.cn/qingxiao/biz/js/html5shiv.min.js?3" charset="utf-8"></script><script src="https://cdn.img.shangjiadao.cn/qingxiao/biz/js/polyfill.js?3" charset="utf-8"></script></head><body><div id="root"></div><script src="https://cdn.img.shangjiadao.cn/qingxiao/biz/dist/index.js?1568805108437" charset="utf-8"></script></body></html>
......@@ -55,7 +55,7 @@
"html-webpack-plugin": "^3.1.0",
"husky": "^0.12.0",
"redbox-react": "^1.4.3",
"roadhog": "^2.0.0",
"roadhog": "^2.5.0-beta.4",
"webpack": "^3.8.1"
}
}
......@@ -9,10 +9,10 @@ if (ENVIRONMENT == 'pro') {
api = 'https://wx.m.shangjiadao.cn/v2/api/';
dakaapi = 'https://qxapi.qingxiao.online/daka/v3/';
} else if (ENVIRONMENT == 'dev') {
api = 'https://wx.m.shangjiadao.cn/v2/api/';
dakaapi = 'https://qxapi.qingxiao.online/daka/v3/';
// api = 'https://test.wp53.cn/v2/api/';
// dakaapi = 'https:clock.wp53.cn/v3/';
// api = 'https://wx.m.shangjiadao.cn/v2/api/';
// dakaapi = 'https://qxapi.qingxiao.online/daka/v3/';
api = 'https://test.wp53.cn/v2/api/';
dakaapi = 'https:clock.wp53.cn/v3/';
} else if (ENVIRONMENT == 'testenv') {
api = 'https://test.wp53.cn/v2/api/';
dakaapi = 'https:clock.wp53.cn/v3/';
......
......@@ -10,8 +10,8 @@ export default {
isFather: false,
activeurl: `${__IMGCDN__}menu/indexactive.png`,
notactiveurl: `${__IMGCDN__}menu/index.png`,
path: '/sjd/headquarters/index',
relativePath: ['/sjd/headquarters/index'],
path: '/hdqrs/index',
relativePath: ['/hdqrs/index'],
},
{
id: '8',
......@@ -23,8 +23,8 @@ export default {
isFather: false,
activeurl: `${__IMGCDN__}menu/schoolinfoactive.png`,
notactiveurl: `${__IMGCDN__}menu/schoolinfo.png`,
path: '/sjd/headquarters/detail',
relativePath: ['/sjd/headquarters/detail'],
path: '/hdqrs/detail',
relativePath: ['/hdqrs/detail'],
},
{
id: '9',
......@@ -36,8 +36,8 @@ export default {
isFather: false,
activeurl: `${__IMGCDN__}menu/schoolstaticactive.png`,
notactiveurl: `${__IMGCDN__}menu/schoolstatic.png`,
path: '/sjd/headquarters/static',
relativePath: ['/sjd/headquarters/static'],
path: '/hdqrs/static',
relativePath: ['/hdqrs/static'],
},
],
};
......@@ -176,7 +176,12 @@ export default {
},
});
} else {
message.error('课表加载失败!', 1);
yield put({
type: 'webapp/errorrequestresolve',
payload: {
data: queryScheduleListData,
},
});
}
},
* changeDate({ payload }, { call, put, select }) {
......
......@@ -102,11 +102,18 @@ export default {
id: departmentid,
});
setTimeout(loadmessage);
yield put({
type: 'updateState',
payload: {
datetime: headquarterDetailData.datetime,
},
});
if (headquarterDetailData.code == 200) {
yield put({
type: 'updateState',
payload: {
sid,
datetime: headquarterDetailData.datetime,
headquarterDetail: headquarterDetailData.data.list || {},
},
});
......@@ -129,7 +136,7 @@ export default {
setTimeout(loadmessage);
if (headquarterDeteleData.code == 200) {
yield put({
type: 'updateState',
type: 'headquarterModelDetail',
payload: {
},
});
......
......@@ -25,6 +25,7 @@ export default {
school_titles: [],
expend_count: [0, 0, 0, 0, 0, 0, 0],
},
datetime: '',
},
subscriptions: {
setup({ dispatch, history }) { // eslint-disable-line
......
......@@ -51,7 +51,7 @@ export default {
if (joinschooldata.code == 200) {
message.success('新建总部成功', 1);
yield put(routerRedux.push({
pathname: '/schoollist',
pathname: '/erp/schoollist',
}));
} else {
yield put({
......
......@@ -107,7 +107,7 @@ export default {
},
});
yield put(routerRedux.push({
pathname: '/schoollist',
pathname: '/erp/schoollist',
}));
} else {
message.error('登录失败,请重试', 1.5);
......
......@@ -103,7 +103,7 @@ export default {
});
// 跳转到完善信息页
yield put(routerRedux.push({
pathname: '/schoollist',
pathname: '/erp/schoollist',
}));
} else {
message.error('注册失败,请重试', 1.5);
......
......@@ -208,7 +208,7 @@ export default {
});
if (schooladd.code == 200) {
yield put(routerRedux.push({
pathname: '/schoollist',
pathname: '/erp/schoollist',
}));
} else {
yield put({
......@@ -253,7 +253,7 @@ export default {
},
* goCreateDepartment({ payload }, { call, put, select }) {
yield put(routerRedux.push({
pathname: '/joinschooladd',
pathname: '/erp/joinschooladd',
}));
},
* goSchoolEdit({ payload }, { call, put, select }) {
......
......@@ -20,6 +20,7 @@ export default {
inviateHoldList: [],
inviateTeacherList: [],
stronghold: null,
datetime: '',
},
subscriptions: {
setup({ dispatch, history }) { // eslint-disable-line
......@@ -36,6 +37,7 @@ export default {
yield put({
type: 'updateState',
payload: {
datetime: schoolListData.datetime,
schoolList: [...schoolListData.data.list],
inviateHoldList: [...schoolListData.data.inviate_hold],
inviateTeacherList: [...schoolListData.data.inviate_teacher],
......@@ -46,6 +48,7 @@ export default {
yield put({
type: 'webapp/errorrequestresolve',
payload: {
datetime: schoolListData.datetime,
data: schoolListData,
},
});
......@@ -54,7 +57,7 @@ export default {
},
* goUserSetting({ payload }, { call, put, select }) {
yield put(routerRedux.push({
pathname: '/usersetting',
pathname: '/erp/usersetting',
}));
},
* goSchoolSystem({ payload }, { call, put, select }) {
......@@ -83,7 +86,7 @@ export default {
},
* addSchool({ payload }, { call, put, select }) {
yield put(routerRedux.push({
pathname: '/schooladd',
pathname: '/erp/schooladd',
}));
},
* joinDepartmentoperate({ payload }, { call, put, select }) {
......@@ -145,7 +148,7 @@ export default {
type,
});
yield put(routerRedux.push({
pathname: '/sjd/headquarters/index',
pathname: '/hdqrs/index',
}));
},
* pageInit({ payload }, { call, put, select }) {
......
......@@ -11,7 +11,7 @@ import {
pageIn,
LocalStorage,
SessionStorage,
// isOnline,
isOnline,
translateType,
} from '../utils/index';
const pathToRegexp = require('path-to-regexp');
......@@ -61,54 +61,8 @@ export default {
globalErrorType: -1,
},
});
const user = LocalStorage.getItem('user');
const departmentid = LocalStorage.getItem('departmentid');
const role = LocalStorage.getItem('role');
const rootMap = LocalStorage.getItem('rootMap');
const sid = LocalStorage.getItem('sid');
let userUserful = true;
if (!user || !user.token || (new Date()).getTime() > user.expiresDateTime * 1000) {
userUserful = false;
} else {
userUserful = true;
if (pathname == '/login') {
dispatch(routerRedux.replace({
pathname: '/schoollist',
}));
}
}
if (['/joinschooladd', '/schoollist', '/schooladd', '/usersetting'].indexOf(pathname) != -1 || pathname.indexOf('sjd') != -1) {
if (!userUserful) { // 检测已sjd开头的url或者headquarters开头的路由
// Modal.warn({
// title: '登录信息丢失,请重新登录',
// onOk: () => {
// },
// });
dispatch(routerRedux.replace({
pathname: '/login',
}));
localStorage.clear();
return;
}
}
if (pathname.indexOf('sjd') != -1 && pathname.indexOf('headquarters') == -1) {
if (!role || !rootMap || !sid) {
dispatch(routerRedux.replace({
pathname: '/schoollist',
}));
return;
}
}
if (pathname.indexOf('headquarters') != -1) {
if (!departmentid) {
dispatch(routerRedux.replace({
pathname: '/schoollist',
}));
return;
}
}
// 监听路由变化 判断缓存是否存在 实现路由守卫的功能
if (pathname.indexOf('headquarters') == -1) {
if (pathname.indexOf('hdqrs') == -1) {
dispatch({
type: 'updateState',
payload: {
......@@ -140,7 +94,9 @@ export default {
},
});
if (pathname === '/login') {
console.log('/login');
dispatch({
type: 'judgeexpire',
});
}
if (pathname === '/register') {
console.log('/register');
......@@ -206,12 +162,35 @@ export default {
},
});
}
// 为了兼容线上的之前的老数据做的跳转
if (pathname === '/schoollist') {
window.location.href = `${location.protocol}//${location.hostname}${location.port == '' ? '' : `:${location.port}`}${location.pathname}#/erp/schoollist`;
}
if (pathname === '/joinschooladd') {
window.location.href = `${location.protocol}//${location.hostname}${location.port == '' ? '' : `:${location.port}`}${location.pathname}#/erp/schoollist`;
}
if (pathname === '/schooladd') {
window.location.href = `${location.protocol}//${location.hostname}${location.port == '' ? '' : `:${location.port}`}${location.pathname}#/erp/schoollist`;
}
if (pathname === '/usersetting') {
window.location.href = `${location.protocol}//${location.hostname}${location.port == '' ? '' : `:${location.port}`}${location.pathname}#/erp/schoollist`;
}
if (pathname === '/sjd/headquarters/index') {
window.location.href = `${location.protocol}//${location.hostname}${location.port == '' ? '' : `:${location.port}`}${location.pathname}#/erp/schoollist`;
}
if (pathname === '/sjd/headquarters/detail') {
window.location.href = `${location.protocol}//${location.hostname}${location.port == '' ? '' : `:${location.port}`}${location.pathname}#/erp/schoollist`;
}
if (pathname === '/sjd/headquarters/static') {
window.location.href = `${location.protocol}//${location.hostname}${location.port == '' ? '' : `:${location.port}`}${location.pathname}#/erp/schoollist`;
}
// 为了兼容线上的之前的老数据做的跳转
if (pathname === '/erp/schoollist') {
dispatch({
type: 'schoollist/queryschoollist',
});
}
if (pathname === '/schooladd') {
if (pathname === '/erp/schooladd') {
dispatch({
type: 'schooladd/getcategorys',
});
......@@ -232,7 +211,7 @@ export default {
},
});
}
if (pathname === '/schoollist') {
if (pathname === '/erp/schoollist') {
dispatch({
type: 'webapp/updateState',
payload: {
......@@ -243,7 +222,7 @@ export default {
},
});
}
if (pathname === '/usersetting') {
if (pathname === '/erp/usersetting') {
dispatch({
type: 'webapp/updateState',
payload: {
......@@ -318,7 +297,7 @@ export default {
},
});
}
if (pathname === '/sjd/headquarters/index') {
if (pathname === '/hdqrs/index') {
dispatch({
type: 'headquarters/headquarterModelIndex',
payload: {
......@@ -339,7 +318,7 @@ export default {
},
});
}
if (pathname === '/sjd/headquarters/static') {
if (pathname === '/hdqrs/static') {
dispatch({
type: 'hqstatistical/headquarterModelDetail',
payload: {
......@@ -367,7 +346,7 @@ export default {
},
});
}
if (pathname === '/sjd/headquarters/detail') {
if (pathname === '/hdqrs/detail') {
dispatch({
type: 'headquarters/headquarterModelDetail',
payload: {
......@@ -445,7 +424,7 @@ export default {
type: 'classmgt/queryinfo',
});
}
if (pathname == '/usersetting') {
if (pathname == '/erp/usersetting') {
dispatch({
type: 'usersetting/queryinfo',
});
......@@ -657,11 +636,17 @@ export default {
type: 'updateState',
});
},
// * judgeexpire({ payload }, { put, call, select }) {
// },
* judgeexpire({ payload }, { put, select }) {
const webapp = yield select(state => state.webapp);
const { userInfo } = webapp;
const isexpire = isOnline((userInfo && userInfo.expiresDateTime) || 0);
if (isexpire) {
window.location.href = `${location.protocol}//${location.hostname}${location.port == '' ? '' : `:${location.port}`}${location.pathname}#/erp/schoollist`;
}
},
* shiftSchool({ payload }, { put, select }) {
yield put(routerRedux.replace({
pathname: '/schoollist',
pathname: '/erp/schoollist',
}));
},
* goHome({ payload }, { put, select }) {
......@@ -733,7 +718,7 @@ export default {
},
* goSchoollist({ payload }, { put, select }) {
yield put(routerRedux.push({
pathname: '/schoollist',
pathname: '/erp/schoollist',
}));
},
* errorrequestresolve({ payload }, { put, select }) {
......@@ -760,6 +745,14 @@ export default {
globalErrorType: 3,
},
});
} else if (data.code === 100001) { // 接口少了token
} else if (data.code === 40202) {
yield put({
type: 'updateState',
payload: {
globalErrorType: 4, // 校区到期
},
});
} else {
message.error(data.msg || '未知错误', 1);
}
......
import React from 'react';
import { connect } from 'dva';
import { Layout, Modal, Button, Drawer, Icon } from 'antd';
import { Redirect } from 'dva/router';
import SjdIndexStyle from './SjdIndex.less';
import SjdMenu from '../components/SjdMenu';
import SjdHeader from '../components/SjdHeader';
import {
LocalStorage,
SessionStorage,
} from '../utils/index';
const { Sider, Content } = Layout;
class SjdIndex extends React.Component {
componentWillUnmount() { // 卸载
const { dispatch } = this.props;
dispatch({
type: 'webapp/unloadstates',
});
}
onClose = () => {
const { dispatch } = this.props;
dispatch({
type: 'webapp/menucollapse',
payload: {
collapsed: true,
},
});
}
signout = () => {
const { dispatch } = this.props;
dispatch({
type: 'webapp/signout',
payload: {
dispatch,
},
});
}
goSchoollist = () => {
const { dispatch } = this.props;
dispatch({
type: 'webapp/goSchoollist',
});
}
render() {
const {
collapsed, locationPathname, screenIsBig, globalErrorType,
} = this.props;
let contentMarginLeft = 0;
let paddingRight = 20;
let paddingLeft = 20;
if (screenIsBig) {
contentMarginLeft = !collapsed ? 204 : 84;
} else {
contentMarginLeft = 0;
paddingRight = 10;
paddingLeft = 10;
}
let mainDom = (
<div className="mainDom">
<Layout
style={{ minHeight: '100vh' }}
>
{!screenIsBig &&
<Drawer
visible={!collapsed}
closable={false}
onClose={this.onClose}
placement="left"
bodyStyle={{ padding: 0 }}
width={200}
>
<SjdMenu />
</Drawer>
}
{screenIsBig &&
<Sider
trigger={null}
collapsible
collapsed={collapsed}
style={{
overflow: 'auto',
height: '100vh',
position: 'fixed',
left: 0,
zIndex: 100,
}}
className={SjdIndexStyle.menusider}
>
<SjdMenu />
</Sider>
}
<Layout>
<SjdHeader />
<Content
className={SjdIndexStyle.content}
style={{
marginLeft: contentMarginLeft,
marginTop: 90,
paddingRight,
paddingLeft,
}}>
{this.props.children}
</Content>
</Layout>
</Layout>
<Modal
title="温馨提示"
style={{ top: 20 }}
visible={globalErrorType == 1}
maskStyle={{ zIndex: 1003 }}
zIndex={1004}
closable={false}
footer={<div><Button onClick={this.signout}>重新登录</Button></div>}
>
<div style={{ display: 'flex', alignItems: 'center' }}>
<Icon type="info-circle" style={{ color: '#faad14', fontSize: '30px', marginRight: '10px' }} />
<span>登录信息过期,请重新登录</span>
</div>
</Modal>
<Modal
title="温馨提示"
style={{ top: 20 }}
visible={globalErrorType == 3}
maskStyle={{ zIndex: 1003 }}
zIndex={1004}
closable={false}
footer={<div><Button onClick={this.signout}>退出</Button></div>}
>
<div style={{ display: 'flex', alignItems: 'center' }}>
<Icon type="info-circle" style={{ color: '#faad14', fontSize: '30px', marginRight: '10px' }} />
<span>账号已关闭</span>
</div>
</Modal>
</div>
);
const redirectLogin = (<Redirect to={{ pathname: '/login' }} />);
const redirectSchoolList = (<Redirect to={{ pathname: '/erp/schoollist' }} />);
const departmentid = LocalStorage.getItem('departmentid');
const user = LocalStorage.getItem('user');
let userUserful = true;
if (!user || !user.token || (new Date()).getTime() > user.expiresDateTime * 1000) {
userUserful = false;
} else {
userUserful = true;
}
if (!userUserful) {
mainDom = redirectLogin;
localStorage.clear();
} else {
if (!departmentid) {
mainDom = redirectSchoolList;
}
}
return (
mainDom
);
}
}
SjdIndex.propTypes = {
};
function mapStateToProps(state) {
const {
collapsed, userInfo, showExpired, menuDrawerShow, screenIsBig, globalErrorType, locationPathname,
} = state.webapp;
return {
collapsed,
userInfo,
showExpired,
screenIsBig,
globalErrorType, // : -1, // 1: 401token失效 2 40200无权限 3 40201账号已关闭
locationPathname,
};
}
export default connect(mapStateToProps)(SjdIndex);
import React from 'react';
import { connect } from 'dva';
import { Layout, Modal, Button, Drawer, Icon } from 'antd';
import { Redirect } from 'dva/router';
import SjdIndexStyle from './SjdIndex.less';
import SjdMenu from '../components/SjdMenu';
import SjdHeader from '../components/SjdHeader';
import {
LocalStorage,
SessionStorage,
} from '../utils/index';
const { Sider, Content } = Layout;
class OuterPage extends React.Component {
componentWillUnmount() { // 卸载
const { dispatch } = this.props;
dispatch({
type: 'webapp/unloadstates',
});
}
render() {
const {
location, globalErrorType, locationPathname,
} = this.props;
const user = LocalStorage.getItem('user');
let userUserful = true;
const redirectDom = (<Redirect to={{ pathname: '/login' }} />);
if (!user || !user.token || (new Date()).getTime() > user.expiresDateTime * 1000) {
userUserful = false;
localStorage.clear();
} else {
userUserful = true;
}
const mainDom = (
<div>
{this.props.children}
</div>
);
const renderDom = userUserful ? mainDom : redirectDom;
return (
renderDom
);
}
}
OuterPage.propTypes = {
};
function mapStateToProps(state) {
const {
locationPathname, globalErrorType,
} = state.webapp;
return {
locationPathname,
globalErrorType, // : -1, // 1: 401token失效 2 40200无权限 3 40201账号已关闭 4 校区套餐到期
};
}
export default connect(mapStateToProps)(OuterPage);
import React from 'react';
import { connect } from 'dva';
import { Layout, Modal, Button, Drawer, Icon } from 'antd';
import { Redirect } from 'dva/router';
import { Redirect, routerRedux } from 'dva/router';
import SjdIndexStyle from './SjdIndex.less';
import SjdMenu from '../components/SjdMenu';
import SjdHeader from '../components/SjdHeader';
......@@ -41,9 +41,16 @@ class SjdIndex extends React.Component {
type: 'webapp/goSchoollist',
});
}
gorecharge = () => {
const { dispatch } = this.props;
dispatch(routerRedux.replace({
pathname: '/rechargedesc',
}));
// window.open('http://website.clock.wp53.cn/?page=7');
}
render() {
const {
collapsed, location, userInfo, showExpired, menuDrawerShow, screenIsBig, globalErrorType,
collapsed, locationPathname, screenIsBig, globalErrorType,
} = this.props;
let contentMarginLeft = 0;
let paddingRight = 20;
......@@ -55,7 +62,7 @@ class SjdIndex extends React.Component {
paddingRight = 10;
paddingLeft = 10;
}
const mainDom = (
let mainDom = (
<div className="mainDom">
<Layout
style={{ minHeight: '100vh' }}
......@@ -131,9 +138,48 @@ class SjdIndex extends React.Component {
<span>账号已关闭</span>
</div>
</Modal>
<Modal
title=""
style={{ top: 20 }}
visible={globalErrorType == 4}
maskStyle={{ zIndex: 1003 }}
zIndex={1004}
closable={false}
centered
footer={<div><Button onClick={this.gorecharge} type="danger"> </Button></div>}
>
<div style={{ display: 'flex', alignItems: 'center', marginBottom: '10px' }}>
<Icon type="info-circle" style={{ color: 'red', fontSize: '24px', marginRight: '10px' }} />
<span style={{ fontSize: '16px', fontWeight: 700, color: '#000' }}>您的账户已到期</span>
</div>
<div style={{ display: 'flex', alignItems: 'center' }}>
<Icon type="info-circle" style={{ fontSize: '24px', opacity: 0, marginRight: '10px' }} />
<span style={{ fontSize: '14px', color: 'rgba(0,0,0,0.65)' }}>请尽快联系客服充值</span>
</div>
</Modal>
</div>
);
const redirectLogin = (<Redirect to={{ pathname: '/login' }} />);
const redirectSchoolList = (<Redirect to={{ pathname: '/erp/schoollist' }} />);
// const renderDom = hasRoot ? mainDom : redirectDom;
const user = LocalStorage.getItem('user');
const role = LocalStorage.getItem('role');
const rootMap = LocalStorage.getItem('rootMap');
const sid = LocalStorage.getItem('sid');
let userUserful = true;
if (!user || !user.token || (new Date()).getTime() > user.expiresDateTime * 1000) {
userUserful = false;
} else {
userUserful = true;
}
if (!userUserful) {
localStorage.clear();
mainDom = redirectLogin;
} else {
if (!role || !rootMap || !sid) {
mainDom = redirectSchoolList;
}
}
return (
mainDom
);
......@@ -145,7 +191,7 @@ SjdIndex.propTypes = {
};
function mapStateToProps(state) {
const {
collapsed, userInfo, showExpired, menuDrawerShow, screenIsBig, globalErrorType,
collapsed, userInfo, showExpired, menuDrawerShow, screenIsBig, globalErrorType, locationPathname,
} = state.webapp;
return {
collapsed,
......@@ -153,6 +199,7 @@ function mapStateToProps(state) {
showExpired,
screenIsBig,
globalErrorType, // : -1, // 1: 401token失效 2 40200无权限 3 40201账号已关闭
locationPathname,
};
}
export default connect(mapStateToProps)(SjdIndex);
......@@ -37,7 +37,7 @@ class ClockItem extends React.Component {
<img alt="" className={pageStyle.bestFlag} src="https://cdn.img.shangjiadao.cn/source/images/dakav4/2b/common/jinx.png" />
}
<div className={pageStyle.userinfobox}>
<img className={pageStyle.useravatar} src={imagify(clock.school_student.avatar, 'image/resize,w_160/format,jpg')} alt={clock.school_student.nickname} />
<img className={pageStyle.useravatar} src={imagify(clock.school_student.avatar)} alt={clock.school_student.nickname} />
<div className={pageStyle.usernamebox}>
<div className={pageStyle.nickname}>
{clock.school_student.nickname}
......
......@@ -46,7 +46,35 @@ class HeadquarterMgtForm extends React.Component {
});
}
goSchoolSystem = (school) => {
const { dispatch } = this.props;
const { dispatch, datetime } = this.props;
if (school.school.expire_time && new Date(datetime.replace(/\-/g, '/')).getTime() >= new Date(school.school.expire_time.replace(/\-/g, '/')).getTime()) {
Modal.error({
title: '该校区已过期',
okText: '确 定',
closable: false,
maskClosable: false,
centered: true,
okButtonProps: {
type: 'danger',
style: {
color: '#fff',
backgroundColor: '#ff4d4f',
borderColor: '#ff4d4f',
},
},
icon: <Icon type="exclamation-circle" style={{ color: 'red' }} />,
onOk: () => {
// const { dispatch } = this.props;
// dispatch(routerRedux.replace({
// pathname: '/rechargedesc',
// }));
// window.open('http://website.clock.wp53.cn/?page=7');
},
onCancel: () => {
},
});
return;
}
dispatch({
type: 'schoollist/goSchoolSystem',
payload: {
......@@ -125,7 +153,7 @@ class HeadquarterMgtForm extends React.Component {
<div>
<a className={pageStyle.alink} href="javascript:;" onClick={() => this.goSchoolSystem(record)}>查看校区</a>
<span className={pageStyle.divideline}>|</span>
<a className={pageStyle.alink} href="javascript:;" onClick={() => this.showDeleteConfirm(record.stronghold_id)}>移除校区</a>
<a className={pageStyle.alink} href="javascript:;" onClick={() => this.showDeleteConfirm(record.id)}>移除校区</a>
</div>
)}
</div>
......@@ -188,9 +216,10 @@ const ClassMgt = Form.create()(HeadquarterMgtForm);
function mapStateToProps(state) {
const {
headquarterDetail,
datetime,
} = state.headquarters;
return {
datetime,
headquarterDetail,
};
}
......
import React from 'react';
import { routerRedux } from 'dva/router';
import { connect } from 'dva';
import { Row, Col, Modal, Form, Input, Button, message, Icon } from 'antd';
import pageStyles from './index.less';
import Cropper from '../../components/Cropper';
import QrcodeShow from '../../components/qrcodeShow';
import { pageIn, imagify } from '../../utils/index';
const { Search } = Input;
const FormItem = Form.Item;
class RechargeDesc extends React.Component {
constructor(props) {
super(props);
this.state = {
previewQrcodeShow: false,
};
}
componentDidMount() {
const that = this;
pageIn('轻校通-套餐介绍');
}
componentWillUnmount() {
const { dispatch } = this.props;
}
goSchoolList = () => {
const { dispatch } = this.props;
dispatch(routerRedux.replace({
pathname: '/erp/schoollist',
}));
}
goUse = () => {
this.setState({
previewQrcodeShow: true,
});
}
closeQrcodeShow = () => {
this.setState({
previewQrcodeShow: false,
});
}
render() {
const { previewQrcodeShow } = this.state;
return (
<div>
<QrcodeShow
previewQrcodeShow={previewQrcodeShow}
closeQrcodeShow={this.closeQrcodeShow}
previewQrcode="qingxiao/biz/image/kfqrcode.png"
title="微信扫描二维码添加客服充值"
/>
<div className={pageStyles.header}>
<Button type="primary" onClick={this.goSchoolList}>
<Icon type="left" />
返回
</Button>
</div>
<div className={`${pageStyles.packagebox} clearfix`}>
<div className={`${pageStyles.packageitem} ${pageStyles.typea}`}>
<div className={pageStyles.packageheader} />
<div className={pageStyles.packagecontent}>
<div className={pageStyles.nowprice}>
<span className={pageStyles.yuanicon}></span>
<span className={pageStyles.price}>3600</span>
</div>
<div className={pageStyles.discount}>
<span className={pageStyles.pricebefore}>原价¥5999</span>
<span className={pageStyles.discountprice}>节省¥2399</span>
</div>
<a href="javascript:;" rel="noopener noreferrer" onClick={this.goUse} target="_blank" className={pageStyles.tousebtn}>充值</a>
<ul className={pageStyles.packagedetail}>
<li className="clearfix">
<div className={pageStyles.detailitemicon}></div>
<div className={pageStyles.detailinfo}>使用时长12个月,<br />附送商家岛使用时长12个月。</div>
</li>
<li className="clearfix">
<div className={pageStyles.detailitemicon}></div>
<div className={pageStyles.detailinfo}>全年7*12小时专业团队问题解答。</div>
</li>
<li className="clearfix">
<div className={pageStyles.detailitemicon}></div>
<div className={pageStyles.detailinfo}>赠招生营销方案策划一次。</div>
</li>
<li className="clearfix">
<div className={pageStyles.detailitemicon}></div>
<div className={pageStyles.detailinfo}>送补差价升级终身包(会员期间使用)</div>
</li>
</ul>
</div>
</div>
<div className={`${pageStyles.packageitem} ${pageStyles.typeb}`}>
<div className={pageStyles.packageheader} />
<div className={pageStyles.packagecontent}>
<div className={pageStyles.nowprice}>
<span className={pageStyles.yuanicon}></span>
<span className={pageStyles.price}>6800</span>
</div>
<div className={pageStyles.discount}>
<span className={pageStyles.pricebefore}>原价¥9999</span>
<span className={pageStyles.discountprice}>节省¥3199</span>
</div>
<a href="javascript:;" rel="noopener noreferrer" onClick={this.goUse} target="_blank" className={pageStyles.tousebtn}>充值</a>
<ul className={pageStyles.packagedetail}>
<li className="clearfix">
<div className={pageStyles.detailitemicon}></div>
<div className={pageStyles.detailinfo}>使用时长24个月,额外再赠6个月,<br />附送商家岛2年铂金包。</div>
</li>
<li className="clearfix">
<div className={pageStyles.detailitemicon}></div>
<div className={pageStyles.detailinfo}>全年7*12小时专业团队问题解答。</div>
</li>
<li className="clearfix">
<div className={pageStyles.detailitemicon}></div>
<div className={pageStyles.detailinfo}>铂金全包策划服务一次,招生营销方<br />案策划一次。</div>
</li>
<li className="clearfix">
<div className={pageStyles.detailitemicon}></div>
<div className={pageStyles.detailinfo}>送商家岛-趣拓客学员精品直播课会员<br />6个月(原价1099元)</div>
</li>
<li className="clearfix">
<div className={pageStyles.detailitemicon}></div>
<div className={pageStyles.detailinfo}>送商家岛-趣拓客学员营销资料库会员<br />6个月(原价1099元)</div>
</li>
<li className="clearfix">
<div className={pageStyles.detailitemicon}></div>
<div className={pageStyles.detailinfo}>送秋季招生拓客加油包一份</div>
</li>
</ul>
</div>
</div>
<div className={`${pageStyles.packageitem} ${pageStyles.typec}`}>
<div className={pageStyles.packageheader} />
<div className={pageStyles.packagecontent}>
<div className={pageStyles.nowprice}>
<span className={pageStyles.yuanicon}></span>
<span className={pageStyles.price}>15999</span>
</div>
<div className={pageStyles.discount}>
<span className={pageStyles.pricebefore}>原价¥29999</span>
<span className={pageStyles.discountprice}>节省¥14000</span>
</div>
<a href="javascript:;" rel="noopener noreferrer" target="_blank" onClick={this.goUse} className={pageStyles.tousebtn}>充值</a>
<ul className={pageStyles.packagedetail}>
<li className="clearfix">
<div className={pageStyles.detailitemicon}></div>
<div className={pageStyles.detailinfo}>终身免费使用轻校产品,<br />附赠商家岛终身免费使用时长。</div>
</li>
<li className="clearfix">
<div className={pageStyles.detailitemicon}></div>
<div className={pageStyles.detailinfo}>额外赠送两个校区终身使用权。</div>
</li>
<li className="clearfix">
<div className={pageStyles.detailitemicon}></div>
<div className={pageStyles.detailinfo}>全年7*12小时四对一专业团队问题解答。</div>
</li>
<li className="clearfix">
<div className={pageStyles.detailitemicon}></div>
<div className={pageStyles.detailinfo}>铂金全包策划服务三次,招生营销方案<br />策划三次。</div>
</li>
<li className="clearfix">
<div className={pageStyles.detailitemicon}></div>
<div className={pageStyles.detailinfo}>送商家岛-趣拓客学员精品直播课会员<br />一年(原价1999元)</div>
</li>
<li className="clearfix">
<div className={pageStyles.detailitemicon}></div>
<div className={pageStyles.detailinfo}>送商家岛-趣拓客学员营销资料库会员<br />一年(原价1999元)</div>
</li>
</ul>
</div>
</div>
</div>
</div>
);
}
}
RechargeDesc.propTypes = {
};
function mapStateToProps(state) {
const {
cropperboxShow,
} = state.uploader;
return {
cropperboxShow,
};
}
export default connect(mapStateToProps)(RechargeDesc);
@import '../../less/variables.less';
.header {
background-color: #fff;
color: #000000;
font-size: 14px;
padding-left: 32px;
line-height: 64px;
color: #00B3FF;
span {
cursor: pointer;
}
}
.packagebox {
display: flex;
align-items: center;
justify-content: center;
.packageitem {
width: 380px;
height: 650px;
border-radius: 10px;
overflow: hidden;
float: left;
margin-right: 70px;
cursor: pointer;
transition: 0.2s;
&.typea {
box-shadow: 0px 6px 15px 0px rgba(0,196,255,0.2);
&:hover {
box-shadow: 0px 13px 29px 0px rgba(0,196,255,0.2);
transform: scale(1.01);
transform-origin: 50% 50%;
}
.packageheader {
background-image: url('@{imagesroot}packagea-title.png');
}
.packagecontent {
border-left: 2px solid #00B3FF;
border-right: 2px solid #00B3FF;
border-bottom: 2px solid #00B3FF;
.tousebtn {
background:linear-gradient(90deg,rgba(0,174,255,1),rgba(0,204,255,1));
background:-webkit-linear-gradient(0,rgba(0,174,255,1),rgba(0,204,255,1));
}
.packagedetail {
.detailitemicon {
background-image: url('@{imagesroot}packagea-icon.png');
}
.detailinfo {
margin-bottom: 34px;
}
}
}
}
&.typeb {
box-shadow: 0px 6px 15px 0px rgba(228,192,134,0.2);
&:hover {
box-shadow: 0px 13px 29px 0px rgba(228,192,134,0.2);
transform: scale(1.01);
transform-origin: 50% 50%;
}
.packageheader {
background-image: url('@{imagesroot}packageb-title.png');
}
.packagecontent {
border-left: 2px solid #EBC88F;
border-right: 2px solid #EBC88F;
border-bottom: 2px solid #EBC88F;
.tousebtn {
background:linear-gradient(90deg,rgba(226,190,132,1),rgba(237,202,145,1));
background:-webkit-linear-gradient(0,rgba(226,190,132,1),rgba(237,202,145,1));
}
.packagedetail {
.detailitemicon {
background-image: url('@{imagesroot}packageb-icon.png');
}
.detailinfo {
margin-bottom: 10px;
}
}
}
}
&.typec {
box-shadow: 0px 6px 15px 0px rgba(242,109,78,0.2);
&:hover {
box-shadow: 0px 13px 29px 0px rgba(242,109,78,0.2);
transform: scale(1.01);
transform-origin: 50% 50%;
}
.packageheader {
background-image: url('@{imagesroot}packagec-title.png');
}
.packagecontent {
border-left: 2px solid #EF49AE;
border-right: 2px solid #EF49AE;
border-bottom: 2px solid #EF49AE;
.tousebtn {
background:linear-gradient(113deg,rgba(238,66,192,1),rgba(243,118,61,1),rgba(255,171,17,1));
background:-webkit-linear-gradient(23deg,rgba(238,66,192,1),rgba(243,118,61,1),rgba(255,171,17,1));
}
.packagedetail {
.detailitemicon {
background-image: url('@{imagesroot}packagec-icon.png');
}
.detailinfo {
margin-bottom: 10px;
}
}
}
}
&:last-child {
margin-right: 0;
}
.packageheader {
width: 380px;
height: 104px;
background-size: 100% 100%;
background-repeat: no-repeat;
}
.packagecontent {
border-radius: 0 0 10px 10px;
padding-top: 20px;
height: 546px;
.nowprice {
text-align: center;
margin-bottom: 18px;
.yuanicon {
font-size: 20px;
color: #000;
line-height: 1;
}
.price {
font-size: 40px;
line-height: 1;
font-weight: 700;
letter-spacing: 1px;
}
}
.discount {
text-align: center;
font-size: 12px;
line-height: 1;
margin-bottom: 40px;
.pricebefore {
color: #7B7B7B;
padding-right: 40px;
text-decoration: line-through;
}
.discountprice {
color: #FF5555;
}
}
.tousebtn {
display: block;
margin: 0 auto 30px;
width: 160px;
height: 48px;
line-height: 48px;
text-align: center;
color: #fff;
border-radius: 4px;
font-size: 16px;
letter-spacing: 1px;
}
.packagedetail {
padding-left: 32px;
}
.detailitemicon {
width: 22px;
height: 22px;
background-size: 100% 100%;
background-repeat: no-repeat;
margin-right: 12px;
float: left;
}
.detailinfo {
float: left;
font-size: 16px;
line-height: 24px;
}
}
}
}
\ No newline at end of file
......@@ -439,7 +439,7 @@ class SchoolAddForm extends React.Component {
});
return (
<div className={`${pageStyles.container} schooladdcontainer`}>
<div className={pageStyles.header} onClick={this.addMobile}>
<div className={pageStyles.header}>
<img src={`${__IMGCDN__}qxlogo.png`} className={pageStyles.headerlogo} alt="轻校" />
</div>
<div className={pageStyles.content}>
......
import React from 'react';
import { connect } from 'dva';
import { Row, Col, Form, Input, Button, Modal, Icon } from 'antd';
import { routerRedux } from 'dva/router';
import pageStyles from './index.less';
import { pageIn, imagify } from '../../utils/index';
const { Search } = Input;
......@@ -25,7 +26,36 @@ class JoinSchoolAddForm extends React.Component {
});
}
goSchoolSystem = (school) => {
const { dispatch } = this.props;
const { dispatch, datetime } = this.props;
if (school.expire_time && new Date(datetime.replace(/\-/g, '/')).getTime() >= new Date(school.expire_time.replace(/\-/g, '/')).getTime()) {
Modal.error({
title: '您的账户已到期',
content: '请尽快联系客服充值',
okText: '确 定',
closable: false,
maskClosable: false,
centered: true,
okButtonProps: {
type: 'danger',
style: {
color: '#fff',
backgroundColor: '#ff4d4f',
borderColor: '#ff4d4f',
},
},
icon: <Icon type="exclamation-circle" style={{ color: 'red' }} />,
onOk: () => {
const { dispatch } = this.props;
dispatch(routerRedux.replace({
pathname: '/rechargedesc',
}));
// window.open('http://website.clock.wp53.cn/?page=7');
},
onCancel: () => {
},
});
return;
}
dispatch({
type: 'schoollist/goSchoolSystem',
payload: {
......@@ -118,6 +148,7 @@ class JoinSchoolAddForm extends React.Component {
userInfo,
stronghold,
globalErrorType,
datetime,
} = this.props;
return (
<Row className={`${pageStyles.container} schoollistcontainer`}>
......@@ -153,6 +184,13 @@ class JoinSchoolAddForm extends React.Component {
}
</Col>
</Row>
<Row className={`${pageStyles.logintimebox} ${pageStyles.expiretimebox}`} type="flex" justify="space-between" align="middle">
<Col span={12} className={pageStyles.timetitle}>套餐到期时间:</Col>
{!ele.expire_time && <Col span={12} className={pageStyles.time}>终身包</Col>}
{ele.expire_time && ele.trial_status == 1 && (new Date(datetime.replace(/\-/, '/')).getTime() >= new Date(ele.expire_time.replace(/\-/, '/')).getTime()) && <Col span={12} className={pageStyles.time}>试用期已过</Col>}
{ele.expire_time && ele.trial_status == 2 && (new Date(datetime.replace(/\-/, '/')).getTime() >= new Date(ele.expire_time.replace(/\-/, '/')).getTime()) && <Col span={12} className={pageStyles.time}>账号已到期</Col>}
{ele.expire_time && (new Date(datetime.replace(/\-/, '/')).getTime() < new Date(ele.expire_time.replace(/\-/, '/')).getTime()) && <Col span={12} className={pageStyles.time}>{ele.expire_time}</Col>}
</Row>
{ele.school_teacher && ele.school_teacher.last_login_time &&
<Row className={pageStyles.logintimebox} type="flex" justify="space-between" align="middle">
<Col span={12} className={pageStyles.timetitle}>上次登录时间:</Col>
......@@ -264,6 +302,7 @@ function mapStateToProps(state) {
inviateHoldList,
inviateTeacherList,
stronghold,
datetime,
} = state.schoollist;
const {
userInfo,
......@@ -276,6 +315,7 @@ function mapStateToProps(state) {
userInfo,
stronghold,
globalErrorType,
datetime,
};
}
export default connect(mapStateToProps)(JoinSchoolAdd);
......@@ -112,6 +112,9 @@
left: 0;
bottom: 45px;
width: 100%;
&.expiretimebox {
bottom: 20px;
}
}
.timetitle {
color: rgba(0,0,0,0.45);
......
......@@ -55,9 +55,14 @@ class SelfJoinForm extends React.Component {
if (selectedCourse.mode_class == 1) {
this.props.form.setFieldsValue({
mode_type: 3,
class_ids: [],
});
const courseModuleInfo = Object.assign({}, this.state.courseModuleInfo, {
class_ids: [],
});
this.setState({
modeType: 3,
courseModuleInfo,
});
searchCourseRelateClass(selectedCourse.id || 0);
}
......@@ -72,6 +77,15 @@ class SelfJoinForm extends React.Component {
mode_type: value,
});
if (value == 3) {
this.props.form.setFieldsValue({
class_ids: [],
});
const courseModuleInfo = Object.assign({}, this.state.courseModuleInfo, {
class_ids: [],
});
this.setState({
courseModuleInfo,
});
searchCourseRelateClass(selectedCourse.id || 0);
}
}
......
......@@ -19,6 +19,16 @@ const SjdIndex = props => (
{ SjdIndex => (<SjdIndex {...props} />) }
</Bundle>
);
const OuterPage = props => (
<Bundle load={() => import(/* webpackChunkName:"outerpage" */'./pages/OuterPage')}>
{ OuterPage => (<OuterPage {...props} />) }
</Bundle>
);
const HdqrsPage = props => (
<Bundle load={() => import(/* webpackChunkName:"hdqrspage" */'./pages/HdqrsPage')}>
{ HdqrsPage => (<HdqrsPage {...props} />) }
</Bundle>
);
const Login = props => (
<Bundle load={() => import(/* webpackChunkName:"login" */'./pages/login/index')}>
{ Login => (<Login {...props} />) }
......@@ -155,7 +165,11 @@ const Institutions = props => (
{ Institutions => (<Institutions {...props} />) }
</Bundle>
);
const RechargeDesc = props => (
<Bundle load={() => import(/* webpackChunkName:"rechargedesc" */'./pages/rechargedesc/index')}>
{ RechargeDesc => (<RechargeDesc {...props} />) }
</Bundle>
);
function RouterConfig({ history }) {
return (
<LocaleProvider locale={zhCN}>
......@@ -176,9 +190,6 @@ function RouterConfig({ history }) {
<Route path="/sjd/classdetail/:classid" exact component={ClassDetail} />
<Route path="/sjd/thememgt/:classid" exact component={ThemeMgt} />
<Route path="/sjd/clockmgt/:themetype/:classid/:themeid" exact component={ClockMgt} />
<Route path="/sjd/headquarters/index" exact component={Headquarters} />
<Route path="/sjd/headquarters/detail" exact component={HeadquartersDetail} />
<Route path="/sjd/headquarters/static" exact component={HqStatistical} />
<Route path="/sjd/student" exact component={Student} />
<Route path="/sjd/studentinfo/:id" exact component={Studentinfo} />
<Route path="/sjd/teacher" exact component={Teacher} />
......@@ -190,14 +201,32 @@ function RouterConfig({ history }) {
</SjdIndex>
)}
/>
<Route path="/joinschooladd" exact component={JoinSchoolAdd} />
<Route path="/schoollist" exact component={SchoolList} />
<Route path="/schooladd" exact component={SchoolAdd} />
<Route
path="/hdqrs"
render={() => (
<HdqrsPage>
<Route path="/hdqrs/index" exact component={Headquarters} />
<Route path="/hdqrs/detail" exact component={HeadquartersDetail} />
<Route path="/hdqrs/static" exact component={HqStatistical} />
</HdqrsPage>
)}
/>
<Route
path="/erp"
render={() => (
<OuterPage>
<Route path="/erp/joinschooladd" exact component={JoinSchoolAdd} />
<Route path="/erp/schoollist" exact component={SchoolList} />
<Route path="/erp/schooladd" exact component={SchoolAdd} />
<Route path="/erp/usersetting" exact component={UserSetting} />
</OuterPage>
)}
/>
<Route path="/resetpsd" exact component={ResetPsd} />
<Route path="/" exact render={() => (<Redirect to="/login" />)} />
<Route path="/login" exact component={Login} />
<Route path="/register" exact component={Register} />
<Route path="/resetpsd" exact component={ResetPsd} />
<Route path="/usersetting" exact component={UserSetting} />
<Route path="/rechargedesc" exact component={RechargeDesc} />
<Route path="/404" render={() => (<Errorpage />)} />
</Switch>
</Router>
......
......@@ -60,6 +60,12 @@ export default function request(options) {
const teacher = LocalStorage.getItem('teacher') || {};
const needAuth = options.needAuth === undefined ? true : false;
if (needAuth) {
if (!user || !user.token) {
return {
code: 100001,
message: 'error'
}
}
options.headers = {
Authorization: `bearer ${user.token}`
}
......
Arguments:
D:\application\nodejs\node.exe C:\Program Files (x86)\Yarn\bin\yarn.js
PATH:
C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Ruby24\bin;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\TortoiseSVN\bin;C:\ProgramData\chocolatey\bin;C:\Program Files (x86)\Yarn\bin\;C:\Program Files\Git\cmd;C:\Program Files (x86)\Common Files\NSEC\;C:\Python27;D:\application\Microsoft VS Code\bin;D:\application\nodejs\;D:\application\Microsoft VS Code\bin;E:\application\Fiddler;C:\Users\Administrator\AppData\Local\Yarn\bin;E:\application\adb;E:\application\IntelliJ IDEA 2018.3.5\bin;;C:\Program Files\Java\jre1.8.0_191\bin;C:\Program Files\Java\jdk1.8.0_191\bin;C:\Users\Administrator\AppData\Roaming\npm
Yarn version:
1.6.0
Node version:
10.16.0
Platform:
win32 x64
Trace:
Error: ENOENT: no such file or directory, copyfile 'C:\Users\Administrator\AppData\Local\Yarn\Cache\v1\npm-ms-2.1.2-d09d1f357b443f493382a8eb3ccd183872ae6009\index.js' -> 'D:\biz.qingxiao.com\node_modules\@babel\core\node_modules\ms\index.js'
npm manifest:
{
"private": true,
"scripts": {
"start": "set NODE_ENV=development&&set PORT=80 && roadhog server",
"build": "set NODE_ENV=production&&roadhog build",
"test-build": "set NODE_ENV=testenv&&roadhog build",
"lint": "eslint --ext .js src test",
"precommit": "npm run lint",
"lib": "webpack --config webpackconfig/webpack.dll.config.js"
},
"dependencies": {
"@antv/data-set": "^0.10.2",
"antd": "^3.20.3",
"axios": "^0.18.0",
"babel-plugin-import": "^1.6.7",
"babel-polyfill": "^6.26.0",
"bizcharts": "^3.5.5",
"bizcharts-plugin-slider": "^2.1.1-beta.1",
"blueimp-md5": "^2.10.0",
"bundle-loader": "^0.5.6",
"clipboard": "^2.0.0",
"co": "^4.6.0",
"console-polyfill": "^0.3.0",
"cropper": "^3.1.4",
"dva": "^2.1.0",
"dva-loading": "^1.0.4",
"echarts": "^4.0.4",
"es3ify-loader": "^0.2.0",
"es5-shim": "^4.5.10",
"eventsource-polyfill": "^0.9.6",
"fetch-ie8": "^1.5.0",
"fetch-jsonp": "^1.1.3",
"jquery": "^3.3.1",
"lodash": "^4.17.5",
"mockjs": "^1.0.1-beta3",
"path-to-regexp": "^2.1.0",
"qrcode.react": "^0.8.0",
"qs": "^6.5.1",
"react": "^16.2.0",
"react-dom": "^16.2.0",
"video-react": "^0.14.1",
"xlsx": "^0.15.0"
},
"devDependencies": {
"babel-eslint": "^8.2.2",
"babel-plugin-dva-hmr": "^0.3.2",
"es3ify-loader": "^0.2.0",
"eslint": "^4.14.0",
"eslint-config-airbnb": "^16.1.0",
"eslint-config-umi": "^0.1.1",
"eslint-plugin-flowtype": "^2.34.1",
"eslint-plugin-import": "^2.6.0",
"eslint-plugin-jsx-a11y": "^5.1.1",
"eslint-plugin-react": "^7.1.0",
"html-webpack-plugin": "^3.1.0",
"husky": "^0.12.0",
"redbox-react": "^1.4.3",
"roadhog": "^2.5.0-beta.4",
"webpack": "^3.8.1"
}
}
yarn manifest:
No manifest
Lockfile:
No lockfile
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment