Commit 9b4f7ef5 authored by baixian's avatar baixian

优化

parent c607f33d
import React from 'react';
import {
Router,
Route,
Switch,
Redirect,
routerRedux,
} from 'dva/router';
// import $ from 'jquery';
import { connect } from 'dva';
import {
message,
Row,
Col,
Modal,
Icon,
DatePicker,
Card,
Badge,
Table,
Pagination,
Tooltip,
Form,
Input,
Checkbox,
Radio,
} from 'antd';
import moment from 'moment';
import pageStyle from './index.less';
import BtnPermission from '../../components/BtnPermission';
import {
pageIn,
hasBtnPower,
DayCount,
formatDay,
btnPermission,
} from '../../utils/index';
import CourseChart from '../../components/CourseChart';
import PlanCourse from '../../components/PlanCourse';
import ClassRoomMgt from '../classmgt/classRoomMgt';
import AddCourseTime from '../classdetail/AddCourseTime';
import CourseTimeList from '../classdetail/CourseTimeList';
import StudentAdd from '../student/StudentAdd';
import Cropper from '../../components/Cropper';
import RepeatStudent from '../student/RepeatStudent';
import CallStudents from '../../components/CallStudents';
import ChangeCourse from '../classdetail/ChangeCourse';
import StudentLeaveModal from './StudentLeaveModal';
import AddCourseModal from '../course/AddCourseModal';
import EditClassModal from '../classmgt/EditClassModal';
const { RangePicker } = DatePicker;
class StaticCenter extends React.Component {
constructor(props) {
super(props);
this.state = {
avatorUploader: {
maxsize: 8192, // 奖品图片最大尺寸KBcropper: {
cropper: {
croppered_params: [], // 图片裁剪后的参数
config: {
dragMode: 'move',
viewMode: 1,
aspectRatio: 1,
autoCropArea: 0.8,
guides: !1,
center: !0,
highlight: !1,
dragCrop: !1,
cropBoxMovable: !1,
cropBoxResizable: !1,
zoom: -0.2,
checkImageOrigin: !0,
background: !1,
rotatable: !0,
},
},
},
};
}
componentDidMount() { // 挂载
pageIn('轻校-概况');
const callwarnbtn = document.getElementById('index_callwarn');
const { dispatch } = this.props;
if (callwarnbtn) {
dispatch({
type: 'userguide/getposition',
payload: {
page: 'indexstatic2',
doms: {
callwarnbtn,
},
},
});
}
}
componentDidUpdate() {
}
componentWillUnmount() { // 卸载
}
dayshift(start_time, end_time) {
const { dispatch, sid } = this.props;
dispatch({
type: 'indexstaic/querychartstatic',
payload: {
sid,
init: false,
start_date: start_time,
end_date: end_time,
},
});
}
createTheme = () => {
const { dispatch, userPermission } = this.props;
if (!btnPermission(userPermission, 30002)) {
message.warn('暂无权限,请联系管理员开通【主题管理权限】', 1);
return;
}
dispatch({
type: 'createtheme/goTheme',
payload: {
index: 1,
},
});
}
createCalendarTheme = () => {
const { dispatch, userPermission } = this.props;
if (!btnPermission(userPermission, 30002)) {
message.warn('暂无权限,请联系管理员开通【主题管理权限】', 1);
return;
}
dispatch({
type: 'createtheme/goTheme',
payload: {
index: 2,
},
});
}
createUnlockTheme = () => {
message.warning('功能即将开放,敬请期待');
}
disabledDate=(current) => {
return current > moment();
}
goPlanCourse = () => {
const {
dispatch, classId, rulePlanDetail, schoolUserInfo,
} = this.props;
dispatch({
type: 'plancourse/queryClassList',
});
dispatch({
type: 'plancourse/updateState',
payload: {
classId,
PlanCourseShow: true,
edittype: 'add',
widthClassSelect: true,
rulePlanDetail: {
...rulePlanDetail,
teacher_id: schoolUserInfo && schoolUserInfo.id ? schoolUserInfo.id : '',
times: ['10:00-11:00'],
},
},
});
}
plancoursesaveSubmit = () => {
const { dispatch } = this.props;
dispatch({
type: 'coursechart/queryScheduleList',
});
}
goDeadlineStudent = () => {
const { dispatch, renew, guideShow } = this.props;
if (guideShow) {
return;
}
if (renew.total === 0) {
message.warning('暂无学员课时数过低需要续费喔');
return;
}
dispatch({
type: 'indexstaic/goDeadlineStudent',
});
}
goBirthStudent = () => {
const { dispatch, birthday, guideShow } = this.props;
if (guideShow) {
return;
}
if (birthday.total === 0) {
message.warning('今天没有学员生日喔');
return;
}
dispatch({
type: 'indexstaic/goBirthStudent',
});
}
goCallStudent = () => {
const { dispatch, callData, guideShow } = this.props;
if (guideShow) {
return;
}
if (callData.total === 0) {
message.warning('当前暂无未点名课次喔');
return;
}
dispatch({
type: 'indexstaic/goCallStudent',
});
}
goPlanClass = () => {
const { dispatch, guideShow } = this.props;
if (guideShow) {
return;
}
dispatch({
type: 'indexstaic/goPlanClass',
});
}
goPlanStudent = () => {
const { dispatch, assign, guideShow } = this.props;
if (guideShow) {
return;
}
if (assign.total === 0) {
message.warning('当前暂无未分配学员喔');
return;
}
dispatch({
type: 'indexstaic/goPlanStudent',
});
}
classroomMgt = () => {
const { dispatch } = this.props;
dispatch({
type: 'indexstaic/updateState',
payload: {
classRoomMgtShow: true,
},
});
}
closeroomMgt = () => {
const { dispatch } = this.props;
dispatch({
type: 'indexstaic/updateState',
payload: {
classRoomMgtShow: false,
},
});
}
addClassRoom = (value, callBack) => {
const { dispatch } = this.props;
dispatch({
type: 'indexstaic/addClassRoom',
payload: {
value,
callBack,
},
});
}
delClassroom = (classroom) => {
const { dispatch } = this.props;
Modal.confirm({
title: `确定删除教室【${classroom.title}】吗`,
okButtonProps: {
type: 'danger',
style: {
color: '#fff',
backgroundColor: '#ff4d4f',
borderColor: '#ff4d4f',
},
},
centered: true,
icon: <Icon type="close-circle" style={{ color: 'red' }} />,
onOk: () => {
dispatch({
type: 'indexstaic/delClassroom',
payload: {
classroom,
},
});
},
});
}
delTime = (ele) => {
const { dispatch } = this.props;
Modal.confirm({
title: `确定删除时间【${ele.start_time}${ele.end_time}】吗`,
okButtonProps: {
type: 'danger',
style: {
color: '#fff',
backgroundColor: '#ff4d4f',
borderColor: '#ff4d4f',
},
},
centered: true,
icon: <Icon type="close-circle" style={{ color: 'red' }} />,
onOk: () => {
dispatch({
type: 'indexstaic/delTime',
payload: {
time: ele,
},
});
},
});
}
manageCourseTime = () => {
const { dispatch } = this.props;
dispatch({
type: 'indexstaic/updateState',
payload: {
courseTimeListShow: true,
},
});
}
closeCourseTimeList = () => {
const { dispatch } = this.props;
dispatch({
type: 'indexstaic/updateState',
payload: {
courseTimeListShow: false,
},
});
}
addCourseTime = () => {
const { dispatch } = this.props;
dispatch({
type: 'indexstaic/updateState',
payload: {
addCourseTimeShow: true,
},
});
}
saveCourseTime = (value) => {
const { dispatch } = this.props;
dispatch({
type: 'indexstaic/saveCourseTime',
payload: {
value,
},
});
}
closeAddCourseTime = () => {
const { dispatch } = this.props;
dispatch({
type: 'indexstaic/updateState',
payload: {
addCourseTimeShow: false,
},
});
}
onRangePickerChange =(dates, dateStrings) => {
this.dayshift(new Date(dateStrings[0].replace(/-/g, '/')).getTime(), new Date(dateStrings[1].replace(/-/g, '/')).getTime());
}
onSlideChange =(obj) => {
const {
startValue, endValue, startText, endText,
} = obj;
// - (24 * 60 * 60 * 1000)
this.ds.setState('start', new Date((`${startText} 00:00:00`).replace(/-/g, '/')).getTime());
this.ds.setState('end', new Date((`${endText} 23:59:59`).replace(/-/g, '/')).getTime());
}
// 添加学员方法
setModal1Visible(visible) {
const {
dispatch, schoolUserInfo, guideShow, userPermission,
} = this.props;
if (guideShow) {
return;
}
if (visible == true && !btnPermission(userPermission, 30007)) {
message.warn('暂无权限,请联系管理员开通【添加学员】', 1);
return;
}
dispatch({
type: 'students/updateState',
payload: {
operator: { ...schoolUserInfo },
studentAvator: '',
},
});
dispatch({
type: 'students/modalshoworhide',
payload: {
visible,
},
});
}
saveStudent = (value) => {
const { schoolUserInfo, dispatch } = this.props;
dispatch({
type: 'students/updateState',
payload: {
operator: schoolUserInfo,
addOrUpdateDiaShow: false,
},
});
dispatch({
type: 'students/studentsAdd',
payload: {
...value,
params: {
type: 'index', // 首页
},
},
});
}
uploadStudentAvator = ({ files, uploadtype }) => {
const { dispatch } = this.props;
dispatch({
type: 'uploader/queryimgsignature',
payload: {
files,
avatorUploader: this.state.avatorUploader,
uploadtype,
},
});
}
cancelCropper = () => {
const { dispatch } = this.props;
dispatch({
type: 'uploader/cancelcropper',
});
}
getCropperUrl = (url) => {
const { dispatch } = this.props;
dispatch({
type: 'uploader/updateState',
payload: {
cropperUrl: url,
},
});
}
sureCropper = () => {
const { dispatch } = this.props;
dispatch({
type: 'uploader/surecropper',
payload: {
},
});
}
sureAddRepeatStudent = () => {
const { dispatch } = this.props;
dispatch({
type: 'students/sureAddRepeatStudent',
payload: {
params: {
type: 'index', // 首页
},
},
});
}
changeSchedule = (record) => {
const { dispatch, datetime } = this.props;
if (new Date(datetime.replace(/-/g, '/')).getTime() - new Date(record.start_time.replace(/-/g, '/')).getTime() > 0) {
message.error('本课时已经开始,无法调课', 0.5);
return;
}
if (record.call_time) {
message.warn('该课时已点名,不能调课', 0.5);
return;
}
dispatch({
type: 'classdetail/updateState',
payload: {
changeScheduleShow: true,
selectScheduleinfo: record,
},
});
dispatch({
type: 'classdetail/queryScheduleStudentList',
payload: {
params: {
page: 1,
perPage: 10,
},
},
});
}
toCallStudent = (schedule) => {
const {
dispatch, datetime, classDetail, classStudentTotal,
} = this.props;
if (schedule.class.graduation_status == 2) {
Modal.warn({
title: '已结业班级不允许点名',
});
return;
}
if (new Date(datetime.replace(/-/g, '/')).getTime() - new Date(schedule.start_time.replace(/-/g, '/')).getTime() < (-2 * 3600 * 1000)) {
message.error(' 开课前两小时才能点名');
return;
}
dispatch({
type: 'callstudents/updateState',
payload: {
callStudentsShow: true,
expend: schedule.class.expend,
copyExpend: schedule.class.expend,
courseId: schedule.course_id,
classroomId: schedule.class_room_id,
classId: schedule.class_id,
canAddStudent: true,
rule_leave: (schedule.course && schedule.course.rule_leave) || 1,
rule_absent: (schedule.course && schedule.course.rule_absent) || 1,
},
});
dispatch({
type: 'callstudents/queryCallStudentList',
payload: {
callStudentSchedule: schedule,
callType: 3,
},
});
dispatch({
type: 'callstudents/queryLeaveList',
payload: {
params: {
schedule_id: schedule.id,
},
},
});
}
toEditCallStudents = (schedule) => {
const { dispatch } = this.props;
dispatch({
type: 'callstudents/updateState',
payload: {
callStudentsShow: true,
expend: schedule.class.expend,
copyExpend: schedule.class.expend,
courseId: schedule.course_id,
classroomId: schedule.class_room_id,
classId: schedule.class_id,
canAddStudent: false,
rule_leave: (schedule.course && schedule.course.rule_leave) || 1,
rule_absent: (schedule.course && schedule.course.rule_absent) || 1,
},
});
dispatch({
type: 'callstudents/queryEditCallStudentList',
payload: {
callStudentSchedule: schedule,
callType: 3,
},
});
}
saveCallStudents = (scheduleId) => {
const { dispatch } = this.props;
dispatch({
type: 'coursechart/queryScheduleList',
});
}
onChangeScheduleIndex = (e) => {
const { dispatch } = this.props;
dispatch({
type: 'classdetail/updateState',
payload: {
changeScheduleIndex: e.target.value,
},
});
}
scheduleStudentsizeChange = (page, perPage) => {
const { dispatch } = this.props;
dispatch({
type: 'classdetail/queryScheduleStudentList',
payload: {
params: {
page: 1,
perPage,
},
},
});
}
changeScheduleStudentPagination = (page, perPage) => {
const { dispatch } = this.props;
dispatch({
type: 'classdetail/queryScheduleStudentList',
payload: {
params: {
page,
perPage,
},
},
});
}
cancelAddRepeatStudent = () => {
const { dispatch } = this.props;
dispatch({
type: 'students/updateState',
payload: {
repeatStudentShow: false,
},
});
}
closeChangeSchedule = () => {
const { dispatch } = this.props;
dispatch({
type: 'classdetail/updateState',
payload: {
changeScheduleShow: false,
selectScheduleinfo: {},
changeScheduleIndex: 1,
},
});
}
changeStudentSchedule = (student) => {
const { dispatch } = this.props;
dispatch({
type: 'classdetail/updateState',
payload: {
studentChangeScheduleShow: true,
selectChangeScheduleStudent: student,
},
});
dispatch({
type: 'classdetail/querystudentChangeScheduleList',
payload: {
exclude_student_id: student.id,
params: {
page: 1,
perPage: 10,
},
},
});
}
sureAdjustCourse = (value) => {
const { dispatch } = this.props;
dispatch({
type: 'classdetail/sureAdjustCourse',
payload: {
sureAdjustCourse: value,
callBack: () => {
dispatch({
type: 'coursechart/queryScheduleList',
});
},
},
});
}
hideStudentChangeSchedule = () => {
const { dispatch } = this.props;
dispatch({
type: 'classdetail/updateState',
payload: {
studentChangeScheduleShow: false,
selectChangeScheduleStudent: {},
},
});
}
toChangeScheduleStudentsizeChange = (page, perPage) => {
const { dispatch } = this.props;
dispatch({
type: 'classdetail/querystudentChangeScheduleList',
payload: {
params: {
page: 1,
perPage,
},
},
});
}
sureChangeStudentSchedule = (schedule) => {
const { dispatch } = this.props;
Modal.confirm({
title: '您确定给该学生调课吗?',
centered: true,
onOk: () => {
dispatch({
type: 'classdetail/sureChangeStudentSchedule',
payload: {
schedule,
},
});
},
});
}
toChangeScheduleStudentsizeChange = (page, perPage) => {
const { dispatch } = this.props;
dispatch({
type: 'classdetail/querystudentChangeScheduleList',
payload: {
params: {
page: 1,
perPage,
},
},
});
}
changeChangeScheduleStudentPagination = (page, perPage) => {
const { dispatch } = this.props;
dispatch({
type: 'classdetail/querystudentChangeScheduleList',
payload: {
params: {
page,
perPage,
},
},
});
}
// 请假弹框
goLeaveShow = () => {
const { dispatch, leaveNum } = this.props;
if (leaveNum === 0) {
dispatch({
type: 'indexstaic/queryLeaveList',
payload: {
params: {
status: '',
page: 1,
perPage: 10,
name: '',
},
},
});
}
dispatch({
type: 'indexstaic/updateState',
payload: {
leaveVisible: true,
},
});
}
createCourse = () => {
const { dispatch, userPermission } = this.props;
if (!btnPermission(userPermission, 50000)) {
message.warn('暂无权限,请联系管理员开通【新增课程权限】', 1);
return;
}
dispatch({
type: 'course/updateState',
payload: {
editCourseModalShow: true,
},
});
}
closeCourse = () => {
const { dispatch } = this.props;
dispatch({
type: 'course/updateState',
payload: {
editCourseModalShow: false,
editCourseInfo: {
id: 0,
school_id: 0,
title: '',
color: 1,
mode_time: 1,
mode_interval: 1,
mode_class: 1,
rule_leave: 1,
rule_absent: 1,
},
},
});
}
saveCourse = (values) => {
const { dispatch } = this.props;
dispatch({
type: 'course/courseModelAdd',
payload: {
...values,
type: 'indexhref',
},
});
}
chooseColor = (color) => {
const { dispatch } = this.props;
dispatch({
type: 'course/chooseColor',
payload: color,
});
}
createClass = () => {
const { dispatch, userPermission } = this.props;
if (!btnPermission(userPermission, 30001)) {
message.warn('暂无权限,请联系管理员开通【添加班级】', 1);
return;
}
dispatch({
type: 'classmgt/updateState',
payload: {
editClassModalShow: true,
},
});
}
saveClass = (values, form) => {
const { dispatch } = this.props;
dispatch({
type: 'classmgt/saveClass',
payload: {
values,
form,
type: 'indexhref', // indexhref 从首页跳转
},
});
}
closeEditClassModal = () => {
const { dispatch } = this.props;
dispatch({
type: 'classmgt/updateState',
payload: {
editClassModalShow: false,
editClassInfo: {
school_id: '',
course_id: '',
title: '',
capacity: '',
total: '',
expend: '',
teacher_id: [],
class_room_id: '',
remark: '',
},
},
});
}
render() {
const that = this;
const {
staticcenter,
clockCharts,
days,
clockChartsSuccess,
renew,
callData,
birthday,
assign,
teacherList,
courseList,
classroomList,
classRoomMgtShow,
classRoomSubmitting,
addCourseTimeShow,
timeArr,
addTimeSubmitting,
chartEndDate,
chartStartDate,
scheduleCount,
courseTimeListShow,
addOrUpdateDiaShow,
datetime,
studentAvator,
cropperboxShow,
uploadImgUrl,
avatorUploader,
repeatStudentShow,
queryRepeatStudentsLoading,
repeatStudentList,
studentChangeScheduleShow,
studentChangeScheduleList,
studentChangeScheduleListLoading,
studentChangeScheduleListTotal,
studentChangeScheduleListQueryParams,
leaveVisible,
leaveTotal,
leaveNum,
editCourseModalShow,
editCourseInfo,
courseSubmiting,
colorList,
editClassInfo,
editClassModalShow,
classSubmitting,
userPermission,
} = this.props;
const studentChangeScheduleColumns = [
{
title: '上课时间',
dataIndex: 'start_time',
key: 'start_time',
render: (text, record, index) => {
return (
<div className={pageStyle.classNamebox}>
<div>{record.start_time}</div>
<div>{record.end_time}</div>
</div>
);
},
},
{
title: '上课老师',
dataIndex: 'nickname',
key: 'nickname',
render: (text, record, index) => {
return (
<div>
{(record.school_teacher && record.school_teacher.nickname) || '——'}
</div>
);
},
},
{
title: '上课教室',
dataIndex: 'mobile',
key: 'mobile',
render: (text, record, index) => {
return (
<div>
{(record.class_room && record.class_room.title) || '——'}
</div>
);
},
},
// {
// title: '上课内容',
// dataIndex: 'content',
// key: 'content',
// render: (text, record, index) => {
// return (
// <div>
// <Tooltip title={record.content.length > 20 ? record.content : ''}>
// <div>{(record.content && record.content.substr(0, 20)) || '无'}{(record.content && record.content.length > 20) ? '...' : ''}</div>
// </Tooltip>
// </div>
// );
// },
// },
{
title: '操作',
dataIndex: 'course',
key: 'course',
render: (text, record, index) => {
return (
<span className="hreflink" onClick={() => this.sureChangeStudentSchedule(record)}>调课</span>
);
},
},
];
return (
<div className={pageStyle.container}>
<Modal
visible={studentChangeScheduleShow}
title="调整课次"
okText="确定"
onCancel={this.hideStudentChangeSchedule}
onOk={() => {}}
width={912}
footer={null}
>
<Row>
<Table
rowKey="id"
dataSource={studentChangeScheduleList}
columns={studentChangeScheduleColumns}
loading={studentChangeScheduleListLoading}
scroll={{ x: 'max-content' }}
pagination={false}
footer={() => (
<div className="tablefooterbox">
<span className="tablefooterstatic">{studentChangeScheduleListTotal}条数据</span>
<Pagination
showSizeChanger
showQuickJumper
onShowSizeChange={this.toChangeScheduleStudentsizeChange}
total={Number(studentChangeScheduleListTotal)}
onChange={this.changeChangeScheduleStudentPagination}
current={Number(studentChangeScheduleListQueryParams.page) || 1}
pageSize={studentChangeScheduleListQueryParams.perPage}
/>
</div>
)}
/>
</Row>
</Modal>
<ClassRoomMgt
visible={classRoomMgtShow}
classroomList={classroomList}
classRoomSubmitting={classRoomSubmitting}
close={this.closeroomMgt}
addClassRoom={this.addClassRoom}
delClassroom={this.delClassroom}
/>
<PlanCourse
classroomList={classroomList}
classroomMgt={this.classroomMgt}
addCourseTime={this.addCourseTime}
saveSubmit={this.plancoursesaveSubmit}
manageCourseTime={this.manageCourseTime}
teacherList={teacherList}
timeArr={timeArr}
/>
<AddCourseTime
visible={addCourseTimeShow}
saveCourseTime={this.saveCourseTime}
close={this.closeAddCourseTime}
addTimeSubmitting={addTimeSubmitting}
/>
<CourseTimeList
visible={courseTimeListShow}
close={this.closeCourseTimeList}
timeArr={timeArr}
delTime={this.delTime}
addCourseTime={this.addCourseTime}
/>
<div className={pageStyle.topbox}>
<Row gutter={24}>
<Col xs={{ span: 24 }} sm={{ span: 24 }} lg={{ span: 24 }} xl={{ span: 16 }} md={{ span: 24 }}>
<div className={pageStyle.staticcard}>
<div className={pageStyle.cardtitle}>
<span>机构数据</span>
</div>
<div className={pageStyle.staticitembox}>
<div className={pageStyle.staticitem}>
<div className={pageStyle.staticname}><img className={pageStyle.staticicon} src={`${__IMGCDN__}index/index_icon1.png`} alt="" />机构学生</div>
<div className={pageStyle.statictotal} style={{ width: '55%' }}>{staticcenter.student_total || 0}<span className={pageStyle.statictip}></span></div>
</div>
<div className={pageStyle.staticitem}>
<div className={pageStyle.staticname}><img className={pageStyle.staticicon} src={`${__IMGCDN__}index/index_icon2.png`} alt="" />本月消课</div>
<div className={pageStyle.statictotal} style={{ width: '62%' }}>{staticcenter.expend_count || 0}<span className={pageStyle.statictip}>课时</span></div>
</div>
<div className={pageStyle.staticitem}>
<div className={pageStyle.staticname}><img className={pageStyle.staticicon} src={`${__IMGCDN__}index/index_icon3.png`} alt="" />本月授课</div>
<div className={pageStyle.statictotal} style={{ width: '58%' }}>{staticcenter.call_count || 0}<span className={pageStyle.statictip}></span></div>
</div>
<div className={pageStyle.staticitem}>
<div className={pageStyle.staticname}><img className={pageStyle.staticicon} src={`${__IMGCDN__}index/index_icon4.png`} alt="" />本月新生</div>
<div className={pageStyle.statictotal} style={{ width: '58%' }}>{staticcenter.student_month_count || 0}<span className={pageStyle.statictip}></span></div>
</div>
</div>
</div>
<div className={pageStyle.staticcard}>
<div className={pageStyle.cardtitle}>
<span>打卡数据</span>
</div>
<div className={pageStyle.staticitembox}>
<div className={pageStyle.staticitem}>
<div className={pageStyle.staticname}><img className={pageStyle.staticicon} src={`${__IMGCDN__}index/index_icon5.png`} alt="" />打卡数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
<div className={pageStyle.statictotal}>{staticcenter.clock_count || 0}<span className={pageStyle.statictip}></span></div>
</div>
<div className={pageStyle.staticitem}>
<div className={pageStyle.staticname}><img className={pageStyle.staticicon} src={`${__IMGCDN__}index/index_icon6.png`} alt="" />昨日新增学员</div>
<div className={pageStyle.statictotal}>{staticcenter.yestday_student_count || 0}<span className={pageStyle.statictip}></span></div>
</div>
<div className={pageStyle.staticitem}>
<div className={pageStyle.staticname}><img className={pageStyle.staticicon} src={`${__IMGCDN__}index/index_icon7.png`} alt="" />昨日新增未点评</div>
<div className={pageStyle.statictotal}>{staticcenter.yesterday_no_review || 0}<span className={pageStyle.statictip}></span></div>
</div>
</div>
</div>
</Col>
{hasBtnPower('sjd/indexstaic', 'planSchedule') &&
<Col xs={{ span: 24 }} sm={{ span: 24 }} lg={{ span: 24 }} xl={{ span: 8 }} md={{ span: 24 }}>
<div className={pageStyle.makebox}>
<div className={pageStyle.cardtitle}>
<span>工作台</span>
</div>
<div className={pageStyle.makeitembox}>
<div className={pageStyle.makeitem} onClick={this.createTheme}>
<div className={pageStyle.makeitemLeft}>
<div className={`${pageStyle.themeicon} ${pageStyle.themeiconb}`}>
<img src={`${__IMGCDN__}index/theme_1.png`} alt="" />
</div>
<div className={pageStyle.themetypename}>新建作业打卡</div>
</div>
</div>
<div className={pageStyle.makeitem} onClick={this.createCalendarTheme}>
<div className={pageStyle.makeitemLeft}>
<div className={`${pageStyle.themeicon} ${pageStyle.themeicona}`}>
<img src={`${__IMGCDN__}index/theme_2.png`} alt="" />
</div>
<div className={pageStyle.themetypename}>新建日历打卡</div>
</div>
</div>
<div className={pageStyle.makeitem} onClick={this.createUnlockTheme}>
<div className={pageStyle.makeitemLeft}>
<div className={`${pageStyle.themeicon} ${pageStyle.themeiconc}`}>
<img src={`${__IMGCDN__}index/theme_3.png`} alt="" />
</div>
<div className={pageStyle.themetypename}>新建闯关打卡</div>
</div>
</div>
<div className={pageStyle.makeitem} onClick={() => this.setModal1Visible(true)}>
<div className={pageStyle.makeitemLeft}>
<div className={`${pageStyle.themeicon} ${pageStyle.themeiconc}`}>
<img src={`${__IMGCDN__}index/theme_4.png`} alt="" />
</div>
<div className={pageStyle.themetypename}>学员报名</div>
</div>
</div>
<div className={pageStyle.makeitem} onClick={this.createClass}>
<div className={pageStyle.makeitemLeft}>
<div className={`${pageStyle.themeicon} ${pageStyle.themeiconc}`}>
<img src={`${__IMGCDN__}index/theme_5.png`} alt="" />
</div>
<div className={pageStyle.themetypename}>新建班级</div>
</div>
</div>
<div className={pageStyle.makeitem} onClick={this.createCourse}>
<div className={pageStyle.makeitemLeft}>
<div className={`${pageStyle.themeicon} ${pageStyle.themeiconc}`}>
<img src={`${__IMGCDN__}index/theme_6.png`} alt="" />
</div>
<div className={pageStyle.themetypename}>新建课程</div>
</div>
</div>
</div>
</div>
</Col>
}
</Row>
{hasBtnPower('sjd/indexstaic', 'planSchedule') &&
<Card className={pageStyle.informList} bodyStyle={{ borderRadius: 6, padding: '36px 0' }} bordered={false}>
<Row gutter={24}>
<Col xs={{ span: 8, offset: 0 }} sm={{ span: 8, offset: 0 }} md={{ span: 4, offset: 1 }} lg={{ span: 4, offset: 0 }} xl={{ span: 4, offset: 0 }}>
<div className={pageStyle.informItem} onClick={this.goCallStudent}>
<div className={pageStyle.informImg} id="index_callwarn"><img src={`${__IMGCDN__}index/inform_icon2.png`} alt="" />
<Badge className={pageStyle.informNum} overflowCount={999} count={callData.total}>
</Badge>
</div>
<div className={pageStyle.informTip}>点名提醒</div>
</div>
</Col>
{btnPermission(userPermission, 2) &&
<Col xs={{ span: 8, offset: 0 }} sm={{ span: 8, offset: 0 }} md={{ span: 4, offset: 1 }} lg={{ span: 4, offset: 1 }} xl={{ span: 4, offset: 1 }}>
<div className={pageStyle.informItem} onClick={this.goPlanStudent}>
<div className={pageStyle.informImg} id="index_planwarn"><img src={`${__IMGCDN__}index/inform_icon3.png`} alt="" />
<Badge className={pageStyle.informNum} overflowCount={999} count={assign.total}>
</Badge>
</div>
<div className={pageStyle.informTip}>分配提醒</div>
</div>
</Col>
}
{btnPermission(userPermission, 2) &&
<Col xs={{ span: 8, offset: 0 }} sm={{ span: 8, offset: 0 }} md={{ span: 4, offset: 1 }} lg={{ span: 4, offset: 1 }} xl={{ span: 4, offset: 1 }}>
<div className={pageStyle.informItem} onClick={this.goBirthStudent}>
<div className={pageStyle.informImg} id="index_birthwarn"><img src={`${__IMGCDN__}index/inform_icon4.png`} alt="" />
<Badge className={pageStyle.informNum} overflowCount={999} count={birthday.total}>
</Badge>
</div>
<div className={pageStyle.informTip}>生日提醒</div>
</div>
</Col>
}
<Col xs={{ span: 8, offset: 0 }} sm={{ span: 8, offset: 0 }} md={{ span: 4, offset: 1 }} lg={{ span: 4, offset: 1 }} xl={{ span: 4, offset: 1 }}>
<div className={pageStyle.informItem} onClick={this.goLeaveShow}>
<div className={pageStyle.informImg} id="index_paywarn"><img src={`${__IMGCDN__}index/inform_icon6.png`} alt="" />
<Badge className={pageStyle.informNum} overflowCount={999} count={leaveNum}>
</Badge>
</div>
<div className={pageStyle.informTip}>请假提醒</div>
</div>
</Col>
{btnPermission(userPermission, 2) &&
<Col xs={{ span: 8, offset: 0 }} sm={{ span: 8, offset: 0 }} md={{ span: 4, offset: 1 }} lg={{ span: 4, offset: 1 }} xl={{ span: 4, offset: 1 }}>
<div className={pageStyle.informItem} onClick={this.goDeadlineStudent}>
<div className={pageStyle.informImg} id="index_paywarn"><img src={`${__IMGCDN__}index/inform_icon5.png`} alt="" />
<Badge className={pageStyle.informNum} overflowCount={999} count={renew.total}>
</Badge>
</div>
<div className={pageStyle.informTip}>续费提醒</div>
</div>
</Col>
}
</Row>
</Card>
}
</div>
<Row gutter={24}>
<Col span={24}>
<div className={pageStyle.Schedulebox}>
<CourseChart
changeSchedule={this.changeSchedule}
teacherList={teacherList}
goPlanCourse={this.goPlanCourse}
toCallStudent={this.toCallStudent}
toEditCallStudents={this.toEditCallStudents}
/>
</div>
</Col>
</Row>
<StudentAdd
visible={addOrUpdateDiaShow}
save={this.saveStudent}
datetime={datetime}
hide={() => this.setModal1Visible(false)}
uploadAvator={this.uploadStudentAvator}
studentAvator={studentAvator}
/>
{cropperboxShow && <Cropper
avatorUploader={this.state.avatorUploader}
cancelCropper={this.cancelCropper}
getCropperUrl={this.getCropperUrl}
sureCropper={this.sureCropper}
uploadImgUrl={uploadImgUrl}
/>}
<RepeatStudent
visible={repeatStudentShow}
onCancel={this.cancelAddRepeatStudent}
onOk={this.sureAddRepeatStudent}
loading={queryRepeatStudentsLoading}
dataSource={repeatStudentList}
/>
{/* <AddCourseTime */}
{/* visible={addCourseTimeShow} */}
{/* saveCourseTime={this.saveCourseTime} */}
{/* close={this.closeAddCourseTime} */}
{/* timeArr={timeArr} */}
{/* addTimeSubmitting={addTimeSubmitting} */}
{/* delTime={this.delTime} */}
{/* /> */}
<ChangeCourse
{...this.props}
scheduleStudentsizeChange={this.scheduleStudentsizeChange}
changeScheduleStudentPagination={this.changeScheduleStudentPagination}
closeChangeSchedule={this.closeChangeSchedule}
onChangeScheduleIndex={this.onChangeScheduleIndex}
changeStudentSchedule={this.changeStudentSchedule}
sureAdjustCourse={this.sureAdjustCourse}
timeArr={timeArr}
/>
<CallStudents
callBack={this.saveCallStudents}
/>
<StudentLeaveModal
visible={leaveVisible}
/>
<AddCourseModal
visible={editCourseModalShow}
courseSubmiting={courseSubmiting}
colorList={colorList}
editCourseInfo={editCourseInfo}
isEdit
close={this.closeCourse}
save={this.saveCourse}
chooseColor={this.chooseColor}
/>
<EditClassModal
editClassInfo={editClassInfo}
wrappedComponentRef={this.saveFormRef}
visible={editClassModalShow}
classroomMgt={this.classroomMgt}
close={this.closeEditClassModal}
save={this.saveClass}
classSubmitting={classSubmitting}
courseList={courseList}
teacherList={teacherList}
classroomList={classroomList}
isEdit={2}
/>
</div>
);
}
}
StaticCenter.propTypes = {
};
function mapStateToProps(state) {
const {
staticcenter,
clockCharts,
sid,
days,
clockChartsSuccess,
renew,
callData,
birthday,
assign,
teacherList,
courseList,
classroomList,
classRoomMgtShow,
classRoomSubmitting,
addCourseTimeShow,
timeArr,
addTimeSubmitting,
chartEndDate,
chartStartDate,
scheduleCount,
courseTimeListShow,
datetime,
leaveVisible,
leaveTotal,
leaveNum,
} = state.indexstaic;
// eslint-disable-next-line no-empty-pattern
const {} = state.createtheme;
const {
cropperboxShow,
uploadImgUrl,
avatorUploader,
} = state.uploader;
const {
addOrUpdateDiaShow,
studentAvator,
repeatStudentShow,
queryRepeatStudentsLoading,
repeatStudentList,
} = state.students;
const {
changeScheduleShow,
changeScheduleIndex,
selectScheduleinfo,
scheduleStudentTotal,
scheduleStudentList,
scheduleStudentListLoading,
queryScheduleStudentListParams,
scheduleUpdateSubmitting,
studentChangeScheduleShow,
studentChangeScheduleList,
studentChangeScheduleListLoading,
studentChangeScheduleListTotal,
studentChangeScheduleListQueryParams,
} = state.classdetail;
const {
schoolUserInfo,
userPermission,
} = state.webapp;
const {
guideShow,
} = state.userguide;
const {
editCourseModalShow,
editCourseInfo,
courseSubmiting,
colorList,
} = state.course;
const {
editClassInfo,
editClassModalShow,
classSubmitting,
} = state.classmgt;
const {
rulePlanDetail,
} = state.plancourse;
return {
staticcenter,
clockCharts,
sid,
days,
clockChartsSuccess,
renew,
callData,
birthday,
assign,
teacherList,
courseList,
classroomList,
classRoomMgtShow,
classRoomSubmitting,
addCourseTimeShow,
timeArr,
addTimeSubmitting,
chartEndDate,
chartStartDate,
scheduleCount,
courseTimeListShow,
addOrUpdateDiaShow,
datetime,
studentAvator,
cropperboxShow,
uploadImgUrl,
avatorUploader,
repeatStudentShow,
queryRepeatStudentsLoading,
repeatStudentList,
changeScheduleShow,
changeScheduleIndex,
selectScheduleinfo,
scheduleStudentTotal,
scheduleStudentList,
scheduleStudentListLoading,
queryScheduleStudentListParams,
scheduleUpdateSubmitting,
studentChangeScheduleShow,
studentChangeScheduleList,
studentChangeScheduleListLoading,
studentChangeScheduleListTotal,
studentChangeScheduleListQueryParams,
schoolUserInfo,
guideShow,
leaveVisible,
leaveTotal,
leaveNum,
editCourseModalShow,
editCourseInfo,
courseSubmiting,
colorList,
editClassInfo,
editClassModalShow,
classSubmitting,
rulePlanDetail,
userPermission,
};
}
export default connect(mapStateToProps)(StaticCenter);
@import '../../less/variables.less';
.topbox {
// display: flex;
// margin-bottom: 20px;
}
.staticbox {
width: 820px;
margin-right: 20px;
// height: 510px;
min-width: 410px;
}
.staticcard {
height: 147px;
background-color: #fff;
border-radius: 6px;
margin-bottom: 14px;
// &:nth-child(1) {
// }
&:nth-child(2) {
.staticitembox {
.staticitem {
.staticname {
justify-content: center;
}
}
}
}
}
.makebox {
background-color: #fff;
height: 310px;
border-radius: 6px;
}
.cardtitle {
padding: 20px 20px 10px;
display: flex;
align-items: center;
line-height: 1;
position: relative;
}
.cardtitleline {
width:4px;
height:16px;
background:rgba(25,181,254,1);
border-radius:2px;
}
.cardtitle span {
font-size:16px;
font-family:PingFang-SC-Bold;
color:rgba(0,0,0,1);
}
.staticitembox {
display: flex;
align-items: center;
justify-content: space-around;
text-align: center;
// margin-top: 60px;
}
.staticitem {
flex: 1;
justify-content: center;
align-items: center;
padding: 0 20px;
}
.statictotal {
font-size:24px;
color:rgba(0,0,0,1);
line-height: 32px;
.statictip {
font-size:14px;
color:#999999;
line-height:24px;
display: inline-block;
margin-left: 10px;
}
}
.staticname {
color: #999999;
font-size: 14px;
line-height: 22px;
margin: 10px 0;
font-family:PingFangSC;
font-weight:400;
display: flex;
align-items: center;
.staticicon {
width: 30px;
height: 30px;
margin-right: 17px;
}
}
.makeitembox {
padding: 5px 24px;
display: flex;
flex-wrap: wrap;
}
.makeitem {
cursor: pointer;
height: 70px;
border-radius:6px;
margin-bottom: 15px;
display: flex;
align-items: center;
color: #FFFFFF;
width: 48%;
.makeitemLeft {
display: flex;
align-items: center;
margin-left: 14px;
}
&:nth-child(2n+1) {
margin-right: 10px;
}
&:nth-child(1) {
background:rgba(255,184,121,1);
}
&:nth-child(1):hover {
box-shadow:0px 0px 10px 0px rgba(255,184,121,1);
}
&:nth-child(2) {
background:#63B7FF;
}
&:nth-child(2):hover {
box-shadow:0px 0px 10px 0px #63B7FF;
}
&:nth-child(3) {
background:#24CACC;
}
&:nth-child(3):hover {
box-shadow:0px 0px 10px 0px #24CACC;
}
&:nth-child(4) {
background:#50C666;
}
&:nth-child(4):hover {
box-shadow:0px 0px 10px 0px #50C666;
}
&:nth-child(5) {
background:#FFB532;
}
&:nth-child(5):hover {
box-shadow:0px 0px 10px 0px #FFB532;
}
&:nth-child(6) {
background:#FF586F;
}
&:nth-child(6):hover {
box-shadow:0px 0px 10px 0px #FF586F;
}
}
.themeicon {
img {
width: 47px;
height: 48px;
margin-right: 15px;
}
}
.themetypename {
font-size:18px;
font-weight:400;
color:#fff;
}
.chartbox {
// width: 1656px;
// min-width: 870px;
background-color: #fff;
border-radius: 2px;
padding-top: 20px;
padding-right: 52px;
height: auto;
.cardtitle {
span {
font-size:16px;
font-family:PingFangSC;
font-weight:500;
color:rgba(0,0,0,0.85);
}
}
.cardtitleline {
float: left;
}
}
.chartbox{
.cardrest{
span {
color: red;
}
}
}
.chartbox {
.cardtitlereset {
display: flex;
align-items: center;
padding: 4px 0 18px 20px;
position: relative;
width: 100%;
margin-top: -8px;
span {
font-size:16px;
font-family:PingFangSC;
font-weight:500;
color:rgba(0,0,0,0.85);
}
}
}
.informList {
border-radius: 6px;
margin-bottom: 14px;
.informItem {
cursor: pointer;
text-align: center;
.informImg {
width: 77px;
height: 77px;
position: relative;
margin: 0 auto;
margin-bottom: 3px;
&>img {
width: 77px;
height: 77px;
}
.informNum {
position: absolute;
top: 0;
right: -10px;
}
}
.informTip {
font-size:18px;
font-weight:500;
color:#515558;
line-height:1;
margin-top: 28px;
}
}
}
@media (min-width: 1680px) {
.chartbox {
.cardtitlereset {
position: absolute;
}
}
}
.staticcolorbox {
display: flex;
// position: absolute;
// right: 0;
//float: right;
z-index: 2;
}
.staticchartcolor {
width: 53px;
height: 9px;
border-radius: 5px;
&.blue {
background-color: #63B7FF;
}
&.orange {
background-color: #FFB879;
}
&.green {
background-color: #24CACC;
}
}
.staticchartitem {
display: flex;
align-items: center;
justify-content: center;
padding-left: 20px;
}
.staticchartname {
font-size: 20px;
color: #000000;
padding-left: 23px;
}
.chartdayshift {
display: flex;
margin-left: 30px;
cursor: pointer;
// position: absolute;
// right: 0;
}
.dayshift {
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
font-weight: 400;
letter-spacing: 1px;
font-family:PingFangSC;
color: #595959;
margin-right: 24px;
&:first-child {
border-right: none;
border-radius: 10px 0 0 10px;
}
&:last-child {
border-left: none;
border-radius: 0 10px 10px 0;
}
&.tabactive {
color: #1890FF;
}
}
.chartcontent {
width: 100%;
//height: 400px;
display: flex;
align-items: center;
justify-content: center;
color: red;
font-size: 20px;
}
.chartcontentfail {
width: 100%;
height: 100px;
display: flex;
align-items: center;
justify-content: center;
color: red;
font-size: 20px;
}
.todoitem{
background: #fff;
//width: 375px;
.items{
padding: 15px 0 20px 40px;
margin-bottom: 20px;
}
.cardtitle {
padding: 16px 0 14px 20px;
display: flex;
align-items: center;
line-height: 1;
position: relative;
border-bottom: solid 1px rgba(233,233,233,1);
}
.renew{
margin-bottom: 16px;
cursor: pointer;
span{
padding: 0 8px;
background:rgba(255,255,255,1);
border-radius:3px;
border:1px solid rgba(255,24,24,1);
color: #FF1818;
margin-right: 8px;
cursor: pointer;
}
}
.renew:hover {
color:rgba(24,144,255,1);
}
.birthday{
margin-bottom: 16px;
cursor: pointer;
span{
padding: 0 8px;
background:rgba(255,255,255,1);
border-radius:3px;
border:1px solid rgba(24,144,255,1);
margin-right: 8px;
color: #1890FF;
}
}
.birthday:hover {
color:rgba(24,144,255,1);
}
}
.Schedulebox{
// height: 1000px;
background: #fff;
margin-bottom: 20px;
border-radius: 6px;
}
.rangePicker {
width: 350px;
}
@media (max-width: 510px) {
.staticitem {
padding: 0;
}
.chartbox {
.cardtitlereset {
display: block;
}
.chartdayshift {
margin-left: 0;
margin-top: 10px;
}
}
}
@media screen and (min-width: 1200px) and (max-width: 1920px) {
.topbox {
:global {
.ant-col-xl-8 {
padding-left: 2px !important;
}
}
}
}
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