Commit a8c70bf1 authored by sujie@126.com's avatar sujie@126.com

Merge branch 'wxl-develop' of git.server:wangxuelai/biz.qingxiao.com into wxl-develop

parents 67a9c908 fef64be9
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>轻校</title><link rel="shortcut icon" href="https://cdn.img.shangjiadao.cn/qingxiao/biz/image/qxlogo4.png"><meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0;" name="viewport"><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="/dist/index.css?1565746061406" rel="stylesheet"><script src="/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="/dist/index.js?1565746061406" 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="/dist/index.css?1565771827295" rel="stylesheet"><script src="/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="/dist/index.js?1565771827295" charset="utf-8"></script></body></html>
\ No newline at end of file
......@@ -2,6 +2,7 @@
import { routerRedux } from 'dva/router';
import { message } from 'antd';
import { delay } from 'redux-saga';
import moment from 'moment';
import co from 'co';
import {
LocalStorage,
......@@ -181,7 +182,7 @@ export default {
},
* querystudentChangeScheduleList({ payload }, { call, put, select }) {
const {
studentChangeScheduleListQueryParams, studentChangeScheduleListTotal, classDetail, classId, studentChangeScheduleListLoading,
studentChangeScheduleListQueryParams, studentChangeScheduleListTotal, classDetail, classId, studentChangeScheduleListLoading, datetime,
} = yield select(state => state.classdetail);
const { sid } = yield select(state => state.webapp);
const { params, action } = payload;
......@@ -203,7 +204,7 @@ export default {
school_id: sid,
course_id: classDetail.course_id,
exclude_class_id: params.exclude_class_id || classId,
start_time: '',
start_time: moment(datetime, 'YYYY-MM-DD'),
end_time: '',
});
const queryScheduleListData = yield call(schedulemgtAjax.scheduleList, newScheduleListQueryParams);
......
......@@ -614,6 +614,7 @@ export default {
* saveStatusChange({ payload }, { call, put, select }) {
const { selectedClasskey, selectedClass, statusChangeSubmitting } = yield select(state => state.classmgt);
const { sid } = yield select(state => state.webapp);
const { status } = payload;
if (selectedClasskey.length == 0) {
message.warn('请选择需要结业的班级', 1);
return;
......@@ -630,7 +631,7 @@ export default {
const changeClassStatusData = yield call(classMgtAjax.changeClassStatus, {
ids: selectedClass.map(ele => ele.id).join(','),
school_id: sid,
status: 2,
status,
});
yield put({
type: 'updateState',
......@@ -660,7 +661,7 @@ export default {
},
},
});
message.success('结业成功', 1);
message.success(status == 1 ? '撤销结业成功' : '结业成功', 1);
} else {
message.error(changeClassStatusData.msg, 1);
}
......@@ -683,6 +684,9 @@ export default {
},
* goThemeMgt({ payload }, { call, put, select }) {
const { classInfo, type } = payload;
yield put({
type: 'thememgt/pageInit',
});
yield put(routerRedux.push({
pathname: `/sjd/thememgt/${classInfo.id}`,
}));
......
......@@ -629,6 +629,8 @@ export default {
const loading = message.loading('数据加载中...', 1);
const newClassListQueryParams = Object.assign(classListQueryParams, params, {
school_id: sid,
page: 1,
perPage: 1000,
// teacher_id: 77,
});
const classListData = yield call(classMgtAjax.getClassList, newClassListQueryParams);
......@@ -649,7 +651,6 @@ export default {
type: 'updateState',
payload: {
classList: (classListData.data && classListData.data.list) || [],
classListQueryParams: { ...newClassListQueryParams },
},
});
} else {
......
......@@ -176,7 +176,6 @@ export default {
});
},
* pageInit({ payload }, { call, put, select }) {
console.log('ssssssssssssssssss');
yield put({
type: 'updateState',
payload: {
......
......@@ -407,7 +407,7 @@ class ClassDetailForm extends React.Component {
delCoursePlan = (plan) => {
const { dispatch } = this.props;
Modal.confirm({
title: '您确定删除这条排课记录吗?',
title: '确定要删除排课吗?',
onOk: () => {
dispatch({
type: 'classdetail/delCoursePlan',
......@@ -425,7 +425,7 @@ class ClassDetailForm extends React.Component {
return;
}
Modal.confirm({
title: '您确定删除这条排课记录吗?',
title: '确定要删除排课吗?',
onOk: () => {
dispatch({
type: 'classdetail/delCoursePlans',
......
import { connect } from 'dva';
import React from 'react';
import PropTypes from 'prop-types';
import { Icon, Button, Row, Col, Input, Select, Checkbox, Table, Modal, Form, Alert } from 'antd';
import { Icon, Button, Row, Col, Input, Select, Checkbox, Table, Modal, Form, Alert, InputNumber } from 'antd';
import pageStyle from './EditClassModal.less';
import { pageIn } from '../../utils/index';
const { Option } = Select;
const { TextArea } = Input;
class EditClassModal extends React.Component {
state = {
classRoomId: '',
};
componentDidMount() { // 挂载
pageIn('班级管理');
// 初始化地图函数 自定义函数名init
......@@ -28,6 +31,11 @@ class EditClassModal extends React.Component {
form.resetFields();
close();
}
getCurrentClassRoom = (e) => {
this.setState({
classRoomId: e,
});
}
render() {
const {
visible,
......@@ -39,12 +47,20 @@ class EditClassModal extends React.Component {
classSubmitting,
classroomList,
isEdit,
form,
} = this.props;
const { classRoomId } = this.state;
let classRoom;
let class_room_id;
if (isEdit == 1) {
classRoom = classroomList.find(ele => ele.id == editClassInfo.class_room_id);
class_room_id = classRoom ? editClassInfo.class_room_id : '';
}
const { getFieldDecorator } = this.props.form;
return (
<Modal
visible={visible}
title={isEdit ? '编辑班级' : '新增班级'}
title={isEdit == 1 ? '编辑班级' : '新增班级'}
okText="确定"
onCancel={this.close}
onOk={this.save}
......@@ -107,9 +123,12 @@ class EditClassModal extends React.Component {
initialValue: editClassInfo.capacity,
rules: [
{ required: true, message: '班级容量不能为空' },
{ pattern: /^[0-9]*[1-9][0-9]*$/, message: '班级容量须为正整数' },
{
pattern: /^\d+$/,
message: '请输入大于0的整数',
},
],
})(<Input type="text" placeholder="请输入班级容量" />)}
})(<InputNumber placeholder="请输入班级容量" style={{ width: '100%' }} />)}
</Form.Item>
<Form.Item
label="上课次数:"
......@@ -125,9 +144,13 @@ class EditClassModal extends React.Component {
{getFieldDecorator('total', {
initialValue: editClassInfo.total,
rules: [
{ pattern: /^[0-9]*[1-9][0-9]*$/, message: '上课次数须为正整数' },
{
pattern: /^\d+$/,
message: '请输入大于0的整数',
},
{ required: true, message: '上课次数不能为空' },
],
})(<Input type="text" placeholder="请输入上课次数" />)}
})(<InputNumber placeholder="请输入上课次数" style={{ width: '100%' }} />)}
</Form.Item>
<Form.Item
label="课次消耗:"
......@@ -145,9 +168,13 @@ class EditClassModal extends React.Component {
{getFieldDecorator('expend', {
initialValue: editClassInfo.expend,
rules: [
{
pattern: /^\d+$/,
message: '请输入大于0的整数',
},
{ required: true, message: '课次消耗不能为空' },
],
})(<Input type="text" placeholder="请输入课次消耗" />)}
})(<InputNumber placeholder="请输入课次消耗" style={{ width: '100%' }} />)}
</Col>
<Col span={5} style={{ color: '#000000', fontSize: '14px' }}>
课时
......@@ -170,7 +197,7 @@ class EditClassModal extends React.Component {
{getFieldDecorator('teacher_id', {
initialValue: editClassInfo.teacher_id,
})(
<Select mode="multiple">
<Select mode="multiple" allowClear placeholder="请选择老师">
{teacherList.map(ele => (
<Option value={ele.id}>{ele.nickname}</Option>
))}
......@@ -195,9 +222,9 @@ class EditClassModal extends React.Component {
<Row gutter={8}>
<Col span={19}>
{getFieldDecorator('class_room_id', {
initialValue: (editClassInfo.class_room_id && Number(editClassInfo.class_room_id)) || '',
initialValue: class_room_id,
})(
<Select>
<Select allowClear placeholder="请选择教室" onChange={this.getCurrentClassRoom}>
<Option value=""></Option>
{classroomList.map(ele => <Option value={ele.id}>{ele.title}</Option>)}
</Select>)}
......
......@@ -89,12 +89,18 @@ class ClassMgtForm extends React.Component {
});
}
searchParamsChange = (e, type, key) => {
const { dispatch } = this.props;
const { dispatch, copyClassListQueryParams } = this.props;
let getvalue = '';
if (type == 'Input') {
getvalue = e.target.value;
} else if (type == 'Select') {
getvalue = e;
} else if (type == 'Radio') {
if ({ ...copyClassListQueryParams }.assign_class_status == e.target.value) {
getvalue = 0;
} else {
getvalue = e.target.value;
}
} else {
console.log('else');
}
......@@ -257,6 +263,9 @@ class ClassMgtForm extends React.Component {
const { dispatch } = this.props;
dispatch({
type: 'classmgt/saveStatusChange',
payload: {
status: 2,
},
});
}
singleClassStatusChange = (classinfo) => {
......@@ -273,6 +282,39 @@ class ClassMgtForm extends React.Component {
onOk: () => {
dispatch({
type: 'classmgt/saveStatusChange',
payload: {
status: 2,
},
});
},
onCancel: () => {
dispatch({
type: 'classmgt/updateState',
payload: {
selectedClasskey: [],
selectedClass: [],
},
});
},
});
}
singleResetClassStatusChange = (classinfo) => {
const { dispatch } = this.props;
dispatch({
type: 'classmgt/updateState',
payload: {
selectedClasskey: [1],
selectedClass: [classinfo],
},
});
Modal.confirm({
title: '撤销结业后,班级可以重新加入学生和排课。您确定要撤销结业吗?',
onOk: () => {
dispatch({
type: 'classmgt/saveStatusChange',
payload: {
status: 1,
},
});
},
onCancel: () => {
......@@ -389,7 +431,7 @@ class ClassMgtForm extends React.Component {
render: (text, record, index) => {
return (
<div >
{record.expend_time}/{record.total}
{record.expend}/{record.total}
</div>
);
},
......@@ -409,7 +451,7 @@ class ClassMgtForm extends React.Component {
<span className={pageStyle.divideline}>|</span>
<a className={pageStyle.alink} href="javascript:;" onClick={() => this.goClassDetail(record, 3)}>点名</a>
<span className={pageStyle.divideline}>|</span>
{record.status == 2 && <a className={pageStyle.alink} href="javascript:;">已结业</a>}
{record.status == 2 && <a className={pageStyle.alink} onClick={() => this.singleResetClassStatusChange(record)} href="javascript:;">已结业</a>}
{record.status == 1 && <a className={pageStyle.alink} href="javascript:;" onClick={() => this.singleClassStatusChange(record)}>结业</a>}
</div>
);
......@@ -472,16 +514,16 @@ class ClassMgtForm extends React.Component {
</Col>
<Col className={pageStyle.formitem} xs={{ span: 24 }} sm={{ span: 24 }} md={{ span: 12 }} lg={{ span: 6 }}>
<div className={pageStyle.formitemlabel}>是否排课</div>
<Radio.Group style={{ width: '100%', lineHeight: '32px' }}>
<Row type="flex" align="center" justify="center">
<Col span={12}>
<Radio value="A">已排课</Radio>
</Col>
<Col span={12}>
<Radio value="C">未排课</Radio>
</Col>
</Row>
</Radio.Group>
<Row type="flex" align="center" justify="center">
<Col span={12}>
<Radio value={2} onClick={e => this.searchParamsChange(e, 'Radio', 'assign_class_status')} checked={copyClassListQueryParams.assign_class_status == 2}>已排课</Radio>
</Col>
<Col span={12}>
<Radio value={1} onClick={e => this.searchParamsChange(e, 'Radio', 'assign_class_status')} checked={copyClassListQueryParams.assign_class_status == 1}>未排课</Radio>
</Col>
</Row>
{/* <Radio.Group style={{ width: '100%', lineHeight: '32px' }} value={copyClassListQueryParams.assign_class_status} onChange={e => this.searchParamsChange(e, 'Radio', 'assign_class_status')}>
</Radio.Group> */}
</Col>
<Col className={pageStyle.searchbtnbox} xs={{ span: 12 }} sm={{ span: 12 }} md={{ span: 12 }} lg={{ span: 6 }}>
<Button className={pageStyle.resetbtn} onClick={this.reset}>重置</Button>
......@@ -517,6 +559,7 @@ class ClassMgtForm extends React.Component {
courseList={courseList}
teacherList={teacherList}
classroomList={classroomList}
isEdit={2}
/>
<ClassRoomMgt
visible={classRoomMgtShow}
......
......@@ -22,6 +22,7 @@ class StudentAddForm extends React.Component {
},
],
modeType: 1,
usefulClassList: [],
// ages: 0,
// addVisible: false,
// delVisible: false,
......@@ -79,7 +80,7 @@ class StudentAddForm extends React.Component {
});
}
courseChange = (value) => {
const { courseList } = this.props;
const { courseList, classList } = this.props;
const { modeTypeArr } = this.state;
const currentCourse = courseList.find(ele => ele.id == value);
const newModeTypaArr = [];
......@@ -107,6 +108,10 @@ class StudentAddForm extends React.Component {
this.props.form.setFieldsValue({
mode_type: newModeTypaArr[0].value,
});
const usefulClassList = classList.filter(ele => ele.course_id == value);
this.setState({
usefulClassList,
});
setTimeout(() => {
this.setState({
modeType: newModeTypaArr[0].value,
......@@ -126,9 +131,9 @@ class StudentAddForm extends React.Component {
const {
visible,
courseList,
classList,
hide,
} = this.props;
const { usefulClassList } = this.state;
const { modeType, modeTypeArr } = this.state;
const { getFieldDecorator } = this.props.form;
return (
......@@ -410,7 +415,7 @@ class StudentAddForm extends React.Component {
rules: [
{
pattern: /^\d+$/,
message: '请输入大于0的数字',
message: '请输入大于0的整数',
},
{
required: true,
......@@ -438,7 +443,7 @@ class StudentAddForm extends React.Component {
rules: [
{
pattern: /^\d+$/,
message: '请输入大于0的数字',
message: '请输入大于0的整数',
},
{
required: true,
......@@ -470,7 +475,7 @@ class StudentAddForm extends React.Component {
rules: [
{
pattern: /^\d+$/,
message: '请输入大于0的数字',
message: '请输入大于0的整数',
},
{
required: true,
......@@ -499,7 +504,7 @@ class StudentAddForm extends React.Component {
rules: [
{
pattern: /^\d+$/,
message: '请输入大于0的数字',
message: '请输入大于0的整数',
},
{
required: true,
......@@ -541,7 +546,7 @@ class StudentAddForm extends React.Component {
placeholder="请选择班级"
style={{ width: 200 }}
>
{classList.map(ele => <Option value={ele.id}>{ele.title}</Option>)}
{usefulClassList.map(ele => <Option value={ele.id}>{ele.title}</Option>)}
</Select>,
)}
</Form.Item>
......
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