Commit 0e0b887a authored by wangxuelai's avatar wangxuelai

Merge branch 'wxl-develop'

parents 71f228ee b16b1666
const path = require('path');
let imagePath = '';
if (process.env.NODE_ENV == 'development') {
imagePath = "'/image/'";
} else if (process.env.NODE_ENV == 'testenv') {
imagePath = "'/image/'";
} else if (process.env.NODE_ENV == 'production') {
imagePath = "'https://cdn.img.shangjiadao.cn/qingxiao/biz/image/'";
}
export default {
"env": {
"development": {
......@@ -6,7 +14,15 @@ export default {
'_CDN_': '',
'ENVIRONMENT': 'dev',
// '__IMGCDN__': 'http://wxloss.oss-cn-hangzhou.aliyuncs.com/qingxiaobiz/'
'__IMGCDN__': 'https://cdn.img.shangjiadao.cn/qingxiao/biz/image/'
'__IMGCDN__': '/image/'
}
},
"testenv": {
define: {
'_CDN_': '',
'ENVIRONMENT': 'testenv',
// '__IMGCDN__': 'http://wxloss.oss-cn-hangzhou.aliyuncs.com/qingxiaobiz/'
'__IMGCDN__': '/image/'
}
},
"production": {
......@@ -22,7 +38,7 @@ export default {
],
"theme": {
"primary-color": "#1890FF",
"imagepath": process.env.NODE_ENV == 'production' ? "'https://cdn.img.shangjiadao.cn/qingxiao/biz/image/'" : "'http://localhost:80/image/'",
"imagepath": imagePath,
},
es5ImcompatibleVersions: true,
"proxy": {
......
......@@ -3,7 +3,7 @@
"scripts": {
"start": "set NODE_ENV=development&&set PORT=80 && roadhog server",
"build": "set NODE_ENV=production&&roadhog build",
"test-build": "set NODE_ENV=development&&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"
......
......@@ -9,8 +9,11 @@ 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://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/';
}
......@@ -124,6 +127,7 @@ export default {
birthday: `${dakaapi}member/erp/todo/birthday`,
call: `${dakaapi}member/erp/todo/call`,
assign: `${dakaapi}member/erp/todo/assign`,
todoSchedule: `${dakaapi}member/erp/todo/schedule`,
},
thememgt: {
themeList: `${dakaapi}member/subject/mixed`,
......
......@@ -1151,7 +1151,7 @@ export default {
});
if (classDetailData.code == 200) {
classDetail = classDetailData.data;
classDetail.teacher_id = classDetailData.data.school_teachers.map(ele => ele.id) || [];
classDetail.teacher_id = (classDetailData.data.school_teachers && classDetailData.data.school_teachers.map(ele => ele.id)) || [];
yield put({
type: 'updateState',
payload: {
......
......@@ -64,6 +64,7 @@ export default {
student_id: '',
my: '',
miss_call_day: '',
schedule_count: '',
},
classListQueryParamsB: {
school_id: 0,
......@@ -443,6 +444,7 @@ export default {
student_id: '',
my: '',
miss_call_day: '',
schedule_count: '',
},
},
});
......@@ -463,6 +465,7 @@ export default {
student_id: '',
my: '',
miss_call_day: '',
schedule_count: '',
}),
},
},
......@@ -776,6 +779,7 @@ export default {
extra: 'course,class_room',
student_id: '',
my: '',
schedule_count: '',
},
copyClassListQueryParams: {
school_id: 0,
......@@ -791,6 +795,7 @@ export default {
student_id: '',
my: '',
miss_call_day: '',
schedule_count: '',
},
classListQueryParamsB: {
school_id: 0,
......
......@@ -50,6 +50,7 @@ export default {
assign: {
total: 0,
},
scheduleCount: 0,
teacherList: [],
courseList: [],
classroomList: [],
......@@ -182,6 +183,17 @@ export default {
});
yield put(routerRedux.push('/sjd/classmgt'));
},
* goPlanClass({ payload }, { call, put, select }) {
const { classListQueryParams } = yield select(state => state.classmgt);
classListQueryParams.schedule_count = 3;
yield put({
type: 'updateState',
payload: {
classListQueryParams: { ...classListQueryParams },
},
});
yield put(routerRedux.push('/sjd/classmgt'));
},
* goPlanStudent({ payload }, { call, put, select }) {
const { studentListQueryParams, searchstudentListQueryParams } = yield select(state => state.students);
const { dateTime } = yield select(state => state.indexstaic);
......@@ -428,6 +440,27 @@ export default {
// message.error(callData.msg, 1);
}
},
* todoSchedule({ payload }, { call, put, select }) {
const { sid } = yield select(state => state.webapp);
const callData = yield call(indexstaticajax.todoSchedule, { school_id: sid, my: LocalStorage.getItem('role') == 1 ? 1 : '' });
if (callData.code == 200) {
yield put({
type: 'updateState',
payload: {
sid,
scheduleCount: callData.data.total,
},
});
} else {
yield put({
type: 'webapp/errorrequestresolve',
payload: {
data: callData,
},
});
// message.error(callData.msg, 1);
}
},
* queryinfo({ payload }, { call, put, select }) {
const { sid } = yield select(state => state.webapp);
if (!sid) {
......@@ -577,6 +610,7 @@ export default {
assign: {
total: 0,
},
scheduleCount: 0,
teacherList: [],
courseList: [],
classroomList: [],
......
......@@ -540,7 +540,7 @@ export default {
});
}
if (data.code == 200) {
message.success('保存成功', 1);
message.success(`${values.switch == 1 ? '开启' : '关闭'}成功`, 1);
course.id = data.data.id;
newpageInfo.forEach((ele) => {
const element = ele;
......
......@@ -58,6 +58,13 @@ export default {
businessIsBind: businessInfoData.data.consumer_id != 0,
},
});
} else {
yield put({
type: 'webapp/errorrequestresolve',
payload: {
data: businessInfoData,
},
});
}
},
* getverifycode({ payload }, { call, put, select }) {
......
......@@ -193,6 +193,9 @@ export default {
dispatch({
type: 'indexstaic/assign',
});
dispatch({
type: 'indexstaic/todoSchedule',
});
dispatch({
type: 'webapp/updateState',
payload: {
......@@ -654,42 +657,8 @@ export default {
type: 'updateState',
});
},
* judgeexpire({ payload }, { put, call, select }) {
// const webapp = yield select(state => state.webapp);
// const { userInfo } = webapp;
// const { isLogin, isSchoolAdd } = payload;
// if ((LocalStorage.getItem('user') && LocalStorage.getItem('user').token && LocalStorage.getItem('dakarole') == 1) || (LocalStorage.getItem('teacher') && LocalStorage.getItem('teacher').token && LocalStorage.getItem('dakarole') == 2)) {
// const memberSchools = yield call(users.memberSchools);
// if (memberSchools.data.list.length > 0) {
// LocalStorage.setItem('sid', memberSchools.data.list[0].id);
// yield put({
// type: 'webapp/updateState',
// payload: {
// sid: memberSchools.data.list[0].id,
// },
// });
// yield put(routerRedux.push({
// pathname: '/sjd/indexstaic',
// }));
// } else {
// if (isSchoolAdd) {
// return;
// }
// yield put(routerRedux.push({
// pathname: '/schooladd',
// }));
// }
// } else {
// LocalStorage.removeItem('user');
// LocalStorage.removeItem('dakarole');
// LocalStorage.removeItem('teacher');
// if (isSchoolAdd) {
// yield put(routerRedux.push({
// pathname: '/login',
// }));
// }
// }
},
// * judgeexpire({ payload }, { put, call, select }) {
// },
* shiftSchool({ payload }, { put, select }) {
yield put(routerRedux.replace({
pathname: '/schoollist',
......
......@@ -103,20 +103,6 @@ class SjdIndex extends React.Component {
</Content>
</Layout>
</Layout>
<Modal
title="温馨提示"
style={{ top: 20 }}
visible={globalErrorType == 2}
maskStyle={{ zIndex: 1003 }}
zIndex={1004}
closable={false}
footer={<div><Button onClick={this.goSchoollist}>确定</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 }}
......
......@@ -958,7 +958,7 @@ class ClassDetailForm extends React.Component {
{record.rule.type == 1 &&
<div>
<div>{record.rule.start_date}开始</div>
<div>({record.rule.week_day.map(ele => (
<div>({record.rule.week_day && record.rule.week_day.map(ele => (
`${record.rule.is_repeat == 1 ? '每周' : '隔周'}${['一', '二', '三', '四', '五', '六', '日'][ele - 1]}`
)).join('/')})
</div>
......@@ -1418,7 +1418,7 @@ class ClassDetailForm extends React.Component {
<Col xs={{ span: 24 }} sm={{ span: 12 }} md={{ span: 12 }} lg={{ span: 6 }}>
<span className={pageStyle.detailtitle}>班级老师:</span>
{classDetail.school_teachers && classDetail.school_teachers.length > 0 &&
<span className={pageStyle.detaildesc}>{classDetail.school_teachers.map(ele => ele.nickname).join(',')}</span>
<span className={pageStyle.detaildesc}>{classDetail.school_teachers && classDetail.school_teachers.map(ele => ele.nickname).join(',')}</span>
}
{(!classDetail.school_teachers || classDetail.school_teachers.length == 0) &&
<span className={pageStyle.detaildesc}>未绑定</span>
......
......@@ -107,6 +107,12 @@ class StaticCenter extends React.Component {
type: 'indexstaic/goCallStudent',
});
}
goPlanClass = () => {
const { dispatch } = this.props;
dispatch({
type: 'indexstaic/goPlanClass',
});
}
goPlanStudent = () => {
const { dispatch } = this.props;
dispatch({
......@@ -248,6 +254,7 @@ class StaticCenter extends React.Component {
addTimeSubmitting,
chartEndDate,
chartStartDate,
scheduleCount,
} = this.props;
const dataArray = clockCharts;
const month = dataArray.dates;
......@@ -520,6 +527,7 @@ class StaticCenter extends React.Component {
{birthday.total > 0 && <div className={pageStyle.birthday} onClick={this.goBirthStudent}><span>生日</span>本日有{birthday.total || 0}名学员生日待祝福</div>}
{callData.total > 0 && <div className={pageStyle.birthday} onClick={this.goCallStudent}><span>点名</span>本周有{callData.total || 0}个课时尚未点名</div>}
{assign.total > 0 && <div className={pageStyle.birthday} onClick={this.goPlanStudent}><span>分配</span>有{assign.total || 0}名学员未安排班级</div>}
{scheduleCount > 0 && <div className={pageStyle.birthday} onClick={this.goPlanClass}><span>排课</span>有{scheduleCount}个班级课表即将结束</div>}
</div>
</div>
</div>
......@@ -574,6 +582,7 @@ function mapStateToProps(state) {
addTimeSubmitting,
chartEndDate,
chartStartDate,
scheduleCount,
} = state.indexstaic;
return {
staticcenter,
......@@ -595,6 +604,7 @@ function mapStateToProps(state) {
addTimeSubmitting,
chartEndDate,
chartStartDate,
scheduleCount,
};
}
export default connect(mapStateToProps)(StaticCenter);
......
......@@ -34,13 +34,13 @@ class Institutions extends React.Component {
<div className={pageStyles.rowinfo} span={20}>{schoolDetail.title}</div>
</div>
{schoolDetail.contact_people &&
<div className={pageStyles.rowline} gutter="32">
<div className={`${pageStyles.rowline} ${pageStyles.contactpeople}`} gutter="32">
<div className={pageStyles.rowinfotitle}>&nbsp;&nbsp;&nbsp;&nbsp;人:</div>
<div className={pageStyles.rowinfo}>{schoolDetail.contact_people}</div>
</div>
}
{schoolDetail.tel_phone &&
<div className={pageStyles.rowline} gutter="32">
<div className={`${pageStyles.rowline} ${pageStyles.contactpeople}`} gutter="32">
<div className={pageStyles.rowinfotitle}>联系方式:</div>
<div className={pageStyles.rowinfo}>{schoolDetail.tel_phone.join(',')}</div>
</div>
......
......@@ -21,6 +21,9 @@
display: flex;
align-items: center;
flex-flow:row wrap;
&.contactpeople {
align-items: flex-start;
}
}
.rowinfotitle {
color: rgba(0,0,0,0.65);
......
......@@ -157,7 +157,7 @@ class GoodsAddModal extends React.Component {
onCancel={this.close}
confirmLoading={submitting}
onOk={this.save}
className="modifyclassModal"
className="goodsaddModal"
maskClosable={false}
zIndex={110}
>
......
......@@ -404,10 +404,12 @@
cursor: pointer;
}
:global {
.ant-form-item {
margin-bottom: 0;
.ant-form-item-children {
padding-left: 0;
.goodsaddModal {
.ant-form-item {
margin-bottom: 0;
.ant-form-item-children {
padding-left: 0;
}
}
}
}
......
import React from 'react';
import { connect } from 'dva';
import { Row, Col, Form, Input, Button } from 'antd';
import { Row, Col, Form, Input, Button, Modal, Icon } from 'antd';
import pageStyles from './index.less';
import { pageIn } from '../../utils/index';
const { Search } = Input;
......@@ -74,7 +74,9 @@ class JoinSchoolAddForm extends React.Component {
}
render() {
const { getFieldDecorator, getFieldValue } = this.props.form;
const { codeArr, title, schoolSubmiting } = this.props;
const {
codeArr, title, schoolSubmiting, globalErrorType,
} = this.props;
const { pwdvisible, thistitle } = this.state;
const formItemLayout = {
labelCol: {
......@@ -178,6 +180,34 @@ class JoinSchoolAddForm extends React.Component {
</Row>
</Form>
</div>
<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>
);
}
......@@ -193,10 +223,12 @@ function mapStateToProps(state) {
title,
schoolSubmiting,
} = state.joinschooladd;
const { globalErrorType } = state.webapp;
return {
codeArr,
title,
schoolSubmiting,
globalErrorType,
};
}
export default connect(mapStateToProps)(JoinSchoolAdd);
......@@ -84,6 +84,17 @@ class Officialweb extends React.Component {
type: 'officialweb/previewofficialweb',
});
}
courseSwitch = (e) => {
const { dispatch } = this.props;
dispatch({
type: 'officialweb/courseinfopost',
payload: {
values: {
switch: e ? 1 : 2,
},
},
});
}
render() {
const {
pageInfo,
......@@ -94,6 +105,7 @@ class Officialweb extends React.Component {
previewQrcodeShow,
previewQrcode,
course,
coursePostStatus,
} = this.props;
let renderDom;
const newPageInfo = pageInfo;
......@@ -105,11 +117,13 @@ class Officialweb extends React.Component {
return (
<div className={pageStyle.container}>
<div className={pageStyle.mobilecontainer}>
<div className={pageStyle.floatcoursebox}>
{/*
<div className={pageStyle.floatcoursebox}>
<Course
course={course}
/>
</div>
*/}
{
newPageInfo.map((ele, index) => {
switch (ele.type) {
......@@ -182,6 +196,8 @@ class Officialweb extends React.Component {
<Course
course={ele.data}
showStatus
courseSwitch={this.courseSwitch}
coursePostStatus={coursePostStatus}
/>
{dragoverindex == index && <div className={pageStyle.dropendbox}>松开鼠标,模块会放在这里</div>}
</div>
......@@ -193,11 +209,11 @@ class Officialweb extends React.Component {
{index == (newPageInfo.length - 1) && <div className={`${pageStyle.blockOperateItem} ${pageStyle.blockOperateItemGrey}`}><Icon className={pageStyle.blockOperateItemIcon} type="arrow-down" /></div>}
</div>
*/}
{moduleSelect == index &&
{/* moduleSelect == index &&
<div className={pageStyle.editbox}>
<CourseEditor />
</div>
}
*/}
</div>
);
break;
......@@ -216,8 +232,8 @@ class Officialweb extends React.Component {
</div>
{moduleSelect == index &&
<div className={pageStyle.blockOperateBox}>
{index == 2 && <div className={`${pageStyle.blockOperateItem} ${pageStyle.blockOperateItemGrey}`}><Icon className={pageStyle.blockOperateItemIcon} type="arrow-up" /></div>}
{index > 2 && <div className={pageStyle.blockOperateItem} onClick={() => this.pageBlockMove(index, 'up')}><Icon className={pageStyle.blockOperateItemIcon} type="arrow-up" /></div>}
{index == 3 && <div className={`${pageStyle.blockOperateItem} ${pageStyle.blockOperateItemGrey}`}><Icon className={pageStyle.blockOperateItemIcon} type="arrow-up" /></div>}
{index > 3 && <div className={pageStyle.blockOperateItem} onClick={() => this.pageBlockMove(index, 'up')}><Icon className={pageStyle.blockOperateItemIcon} type="arrow-up" /></div>}
{index < (newPageInfo.length - 1) && <div className={pageStyle.blockOperateItem} onClick={() => this.pageBlockMove(index, 'down')}><Icon className={pageStyle.blockOperateItemIcon} type="arrow-down" /></div>}
{index == (newPageInfo.length - 1) && <div className={`${pageStyle.blockOperateItem} ${pageStyle.blockOperateItemGrey}`}><Icon className={pageStyle.blockOperateItemIcon} type="arrow-down" /></div>}
</div>
......@@ -240,8 +256,8 @@ class Officialweb extends React.Component {
</div>
{moduleSelect == index &&
<div className={pageStyle.blockOperateBox}>
{index == 2 && <div className={`${pageStyle.blockOperateItem} ${pageStyle.blockOperateItemGrey}`}><Icon className={pageStyle.blockOperateItemIcon} type="arrow-up" /></div>}
{index > 2 && <div className={pageStyle.blockOperateItem} onClick={() => this.pageBlockMove(index, 'up')}><Icon className={pageStyle.blockOperateItemIcon} type="arrow-up" /></div>}
{index == 3 && <div className={`${pageStyle.blockOperateItem} ${pageStyle.blockOperateItemGrey}`}><Icon className={pageStyle.blockOperateItemIcon} type="arrow-up" /></div>}
{index > 3 && <div className={pageStyle.blockOperateItem} onClick={() => this.pageBlockMove(index, 'up')}><Icon className={pageStyle.blockOperateItemIcon} type="arrow-up" /></div>}
{index < (newPageInfo.length - 1) && <div className={pageStyle.blockOperateItem} onClick={() => this.pageBlockMove(index, 'down')}><Icon className={pageStyle.blockOperateItemIcon} type="arrow-down" /></div>}
{index == (newPageInfo.length - 1) && <div className={`${pageStyle.blockOperateItem} ${pageStyle.blockOperateItemGrey}`}><Icon className={pageStyle.blockOperateItemIcon} type="arrow-down" /></div>}
</div>
......@@ -289,6 +305,7 @@ function mapStateToProps(state) {
previewQrcodeShow,
previewQrcode,
course,
coursePostStatus,
} = state.officialweb;
const {
cropperboxShow,
......@@ -305,6 +322,7 @@ function mapStateToProps(state) {
previewQrcodeShow,
previewQrcode,
course,
coursePostStatus,
};
}
export default connect(mapStateToProps)(Officialweb);
......
import React from 'react';
import { connect } from 'dva';
import { Carousel } from 'antd';
import { Carousel, Switch } from 'antd';
import PageStyle from './Course.less';
import { imagify } from '../../../utils';
function Course(props) {
const { course, showStatus } = props;
const {
course, showStatus, courseSwitch, coursePostStatus,
} = props;
// {showStatus && <div className={`${PageStyle.courseStatue} ${course.switch == 1 ? PageStyle.courseopen : PageStyle.courseclose}`}>{course.switch == 1 && '开启'}{course.switch == 2 && '关闭'}</div>}
return (
<div className={PageStyle.Coursecontainer}>
{showStatus && <div className={`${PageStyle.courseStatue} ${course.switch == 1 ? PageStyle.courseopen : PageStyle.courseclose}`}>{course.switch == 1 && '开启'}{course.switch == 2 && '关闭'}</div>}
{showStatus &&
<div className={PageStyle.courseStatue}>
<Switch
onChange={courseSwitch}
checked={course.switch == 1}
checkedChildren="开"
unCheckedChildren="关"
loading={coursePostStatus}
/>
</div>
}
<div className={PageStyle.Coursebox}>
<img className={PageStyle.clockicon} src={`${__IMGCDN__}floatclockicon.png`} alt="" />
<span>立即预约,免费领取试听课</span>
......
......@@ -42,9 +42,9 @@
}
.courseStatue {
position: absolute;
top: 50%;
transform: translateY(-50%);
right: 4px;
top: 4px;
// transform: translateY(-50%);
left: 4px;
width: 40px;
height: 24px;
font-size: 12px;
......
import fetchJsonp from 'fetch-jsonp';
import React from 'react';
import { connect } from 'dva';
import { Row, Col, Form, Input, Button, Checkbox, message, Modal, Cascader } from 'antd';
import { Row, Col, Form, Input, Button, Checkbox, message, Modal, Cascader, Icon } from 'antd';
import pageStyles from './index.less';
import { LocalStorage, SessionStorage, pageIn, getRandomString } from '../../utils/index';
import disData from '../../common/dis.data';
......@@ -380,6 +380,7 @@ class SchoolAddForm extends React.Component {
locationAddress,
mobile,
form,
globalErrorType,
} = this.props;
const {
location,
......@@ -584,6 +585,34 @@ class SchoolAddForm extends React.Component {
</div>
</Form>
</Modal>
<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>
);
}
......@@ -602,6 +631,7 @@ function mapStateToProps(state) {
latitude,
mobile,
} = state.schooladd;
const { globalErrorType } = state.webapp;
return {
categorys,
selectcategorys,
......@@ -609,6 +639,7 @@ function mapStateToProps(state) {
longitude,
latitude,
mobile,
globalErrorType,
};
}
export default connect(mapStateToProps)(SchoolAdd);
......@@ -10,6 +10,7 @@
.container {
min-height: 100vh;
background-color: #fff;
padding-left: 24px;
}
.content {
padding: 23px 25px 27px;
......
import React from 'react';
import { connect } from 'dva';
import { Row, Col, Form, Input, Button, Modal } from 'antd';
import { Row, Col, Form, Input, Button, Modal, Icon } from 'antd';
import pageStyles from './index.less';
import { pageIn, imagify } from '../../utils/index';
const { Search } = Input;
......@@ -101,6 +101,15 @@ class JoinSchoolAddForm extends React.Component {
},
});
}
signout = () => {
const { dispatch } = this.props;
dispatch({
type: 'webapp/signout',
payload: {
dispatch,
},
});
}
render() {
const {
schoolList,
......@@ -108,6 +117,7 @@ class JoinSchoolAddForm extends React.Component {
inviateTeacherList,
userInfo,
stronghold,
globalErrorType,
} = this.props;
return (
<Row className={`${pageStyles.container} schoollistcontainer`}>
......@@ -211,6 +221,34 @@ class JoinSchoolAddForm extends React.Component {
</Row>
</Row>
</Row>
<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>
</Row>
);
}
......@@ -229,6 +267,7 @@ function mapStateToProps(state) {
} = state.schoollist;
const {
userInfo,
globalErrorType,
} = state.webapp;
return {
schoolList,
......@@ -236,6 +275,7 @@ function mapStateToProps(state) {
inviateTeacherList,
userInfo,
stronghold,
globalErrorType,
};
}
export default connect(mapStateToProps)(JoinSchoolAdd);
......@@ -220,7 +220,7 @@ class StudentAddForm extends React.Component {
</Col>
<Col sm={{ span: 8 }} style={{ textAlign: 'center' }}>
<img className={pageStyle.avatar} src={imagify(studentAvator) || `${__IMGCDN__}defaultavatar.png`} alt="1" />
<span style={{ position: 'relative' }}>
<span style={{ position: 'relative', color: '#1890FF' }} >
<input type="file" id="uploadinput" className={pageStyle.fileuploadinput} onChange={(e) => { this.uploadAvator(e); }} accept="image/*" />
上传头像
</span>
......
......@@ -23,7 +23,7 @@
:global {
.addstudentcontent {
.ant-form-item {
margin-bottom: 20px;
// margin-bottom: 20px;
}
}
}
\ No newline at end of file
......@@ -178,7 +178,7 @@ class StudentAddForm extends React.Component {
</Col>
<Col sm={{ span: 8 }} style={{ textAlign: 'center' }}>
<img className={pageStyle.avatar} src={imagify(studentAvator) || `${__IMGCDN__}defaultavatar.png`} alt="" />
<span style={{ position: 'relative' }}>
<span style={{ position: 'relative', color: '#1890FF' }}>
<input type="file" id="uploadinput" className={pageStyle.fileuploadinput} onChange={(e) => { this.uploadAvator(e); }} accept="image/*" />
上传头像
</span>
......
......@@ -197,7 +197,7 @@ class ThemeMgt extends React.Component {
<div className={pageStyle.tablecell}>
{record.subject_type == 1 && record.clock_record_count}
{record.subject_type == 2 && record.clock_record_count}
{record.subject_type == 3 && record.clock_people}
{record.subject_type == 3 && record.clock_record_count}
</div>
),
},
......
import React from 'react';
import { connect } from 'dva';
import { Row, Col, Modal, Form, Input, Button, message } from 'antd';
import { Row, Col, Modal, Form, Input, Button, message, Icon } from 'antd';
import pageStyles from './index.less';
import BindWx from './BindWx';
import UpdateNickname from './UpdateNickname';
......@@ -240,6 +240,7 @@ class UserSettingForm extends React.Component {
checkoutVerifyCode,
nicknameChangeShow,
nicknameSubmitting,
globalErrorType,
} = this.props;
const { getFieldDecorator } = this.props.form;
return (
......@@ -411,6 +412,34 @@ class UserSettingForm extends React.Component {
onCancel={() => this.toupdateNickanem(false)}
nicknameSubmitting={nicknameSubmitting}
/>
<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>
</Row>
);
}
......@@ -429,6 +458,7 @@ function mapStateToProps(state) {
} = state.uploader;
const {
userInfo,
globalErrorType,
} = state.webapp;
const {
counting,
......@@ -467,6 +497,7 @@ function mapStateToProps(state) {
checkoutVerifyCode,
nicknameChangeShow,
nicknameSubmitting,
globalErrorType,
};
}
export default connect(mapStateToProps)(UserSetting);
......@@ -25,6 +25,13 @@ export function birthday({ schoolId }) {
method: 'GET',
});
}
export function todoSchedule(params) {
const data = qs.stringify(params);
return request({
url: `${api.todo.todoSchedule}?${data}`,
method: 'GET',
});
}
export function call(params) {
const data = qs.stringify(params);
return request({
......
......@@ -31,6 +31,23 @@ const proFile = {
}
}
};
const testFile ={
title: '轻校',
template: './public/index.ejs',
filename: '../index.html',
inject: false,
// hash: true,
files: {
CDN: '',
header: {
js: ["lib/vendor.dll.js"],
css: [ "dist/index.css" ]
},
footer: {
js: ["dist/index.js"]
}
}
};
const devFile ={
title: '轻校',
template: './public/index.ejs',
......@@ -49,13 +66,20 @@ const devFile ={
};
module.exports = function (config, env) {
const newConfig = config;
const production = process.env.NODE_ENV == 'production';
if (!production) { // 线下环境
// newConfig.output.filename = "[name].js";
// newConfig.output.path = path.resolve(__dirname, './dist');
// newConfig.output.publicPath = "dist/";
// const production = process.env.NODE_ENV == 'production';
const NODE_ENV = process.env.NODE_ENV;
let htmlOption;
if (NODE_ENV == 'development') { // 线下环境
newConfig.output.chunkFilename = "[name].js?[chunkhash:4]";
htmlOption = devFile;
} else if (NODE_ENV == 'testenv') {
newConfig.output.filename = "[name].js";
newConfig.output.path = path.resolve(__dirname, './dist');
newConfig.output.publicPath = "/dist/";
newConfig.output.chunkFilename = "[name].js?[chunkhash:6]";
htmlOption = testFile;
} else { // 线上环境
htmlOption = proFile;
newConfig.plugins.push(new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false,
......@@ -67,8 +91,6 @@ module.exports = function (config, env) {
newConfig.output.publicPath = "https://cdn.img.shangjiadao.cn/qingxiao/biz/dist/";
newConfig.output.chunkFilename = "[name].js?[chunkhash:6]";
}
let htmlOption;
production ? htmlOption = proFile : htmlOption = devFile;
newConfig.plugins.push(new HtmlWebpackPlugin(htmlOption));
newConfig.plugins.push(new webpack.DllReferencePlugin({
context: __dirname,
......
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