Commit 21a99a56 authored by baixian's avatar baixian

ERP新版youhua

parents 59fbc397 a82ec764
......@@ -18,5 +18,5 @@
</head>
<body>
<div id="root"></div>
<script type="text/javascript" src="https://cdn.img.shangjiadao.cn/qingxiao/biz/dist/main.cd6731.js"></script></body>
<script type="text/javascript" src="https://cdn.img.shangjiadao.cn/qingxiao/biz/dist/main.d943d4.js"></script></body>
</html>
\ No newline at end of file
......@@ -251,4 +251,8 @@ export default {
livesUrl: `${dakaapi}member/live/url`,
livesEnd: `${dakaapi}member/live/end`,
},
clockmember: {
list: `${dakaapi}member/subject_students`,
deleteSubjectStudent: `${dakaapi}member/subject_student/kick_out`,
},
};
import { routerRedux } from 'dva/router';
import { message } from 'antd';
import { delay } from 'redux-saga';
import moment from 'moment';
import {
LocalStorage,
SessionStorage,
isExpired,
getRandomFilename,
} from '../utils/index';
import errorcode from '../common/errorcode';
import * as uploader from '../services/uploader';
import * as memberListAjax from '../services/clockmember';
import * as commonAjax from '../services/common';
export default {
namespace: 'clockmember',
state: {
clockList: [],
clockListTotal: 0,
clockListParams: {
page: 1,
perPage: 10,
subject_type: 1,
subject_id: 0,
},
},
subscriptions: {
setup({ dispatch, history }) { // eslint-disable-line
},
},
effects: {
* queryList({ payload }, { call, put, select }) {
const { params } = payload;
const { sid } = yield select(state => state.webapp);
const { clockListParams, clockListTotal } = yield select(state => state.clockmember);
const loading = message.loading('数据加载中...', 0.5);
const newParams = Object.assign(clockListParams, params, {
school_id: sid,
});
let newTotal = clockListTotal;
const data = yield call(memberListAjax.memberList, {
...newParams,
});
setTimeout(loading);
if (data.code == 200) {
if (data.data.total != undefined) {
newTotal = data.data.total;
}
yield put({
type: 'updateState',
payload: {
clockList: data.data && data.data.list,
clockListTotal: newTotal,
clockListParams: { ...newParams },
},
});
} else {
yield put({
type: 'webapp/errorrequestresolve',
payload: {
data,
},
});
}
},
* handleTickOut({ payload }, { call, put, select }) {
const { record } = payload;
const data = yield call(memberListAjax.deleteSubjectStudent, {
id: record.id,
});
if (data.code == 200) {
yield put({
type: 'queryList',
payload: {
params: {
page: 1,
perPage: 10,
},
},
});
} else {
yield put({
type: 'webapp/errorrequestresolve',
payload: {
data,
},
});
}
},
* goBack({ payload }, { call, put, select }) {
yield put(routerRedux.goBack());
},
* reset({ payload }, { call, put, select }) {
yield put({
type: 'queryList',
payload: {
params: {
page: 1,
perPage: 10,
},
},
});
},
* createLive({ payload }, { put, select }) {
yield put(routerRedux.push({
pathname: '/sjd/addLive',
}));
},
* goEdit({ payload }, { put, select }) {
const { id } = payload;
yield put(routerRedux.push({
pathname: `/sjd/editLive/${id}`,
}));
},
* pageInit({ payload }, { call, put, select }) {
yield put({
type: 'updateState',
payload: {
clockList: [],
clockListTotal: 0,
clockListParams: {
page: 1,
perPage: 10,
subject_type: 1,
subject_id: 0,
},
},
});
},
},
reducers: {
save(state, action) {
return { ...state, ...action.payload };
},
updateState(state, action) {
return { ...state, ...action.payload };
},
},
};
import { routerRedux } from 'dva/router';
import { message } from 'antd';
import {
LocalStorage,
SessionStorage,
isExpired,
} from '../utils/index';
import errorcode from '../common/errorcode';
import * as courseAjax from '../services/course';
import * as commonAjax from '../services/common';
export default {
namespace: 'common',
state: {
previewQrcode: '',
previewQrcodeShow: false,
downloadTitle: '',
},
subscriptions: {
setup({ dispatch, history }) { // eslint-disable-line
},
},
effects: {
* getCode({ payload }, { call, put, select }) {
const { record } = payload;
const loading = message.loading('小程序码生成中,请稍等...', 0);
let params;
switch (record.subject_type) {
case 1:
params = {
scene: `t=${record.id}&s=${record.school_id}&w=0`,
page: 'src/pages/themeindex/landpage',
width: 430,
};
break;
case 2:
params = {
scene: `t=${record.id}&s=${record.school_id}&w=0`,
page: 'src/pages/calendarthemeindex/landpage',
width: 430,
};
break;
case 3:
params = {
scene: `t=${record.id}&s=${record.school_id}&w=0`,
page: 'src/pages/sharemoretheme/index',
width: 430,
};
break;
default:
params = {};
break;
}
const data = yield call(commonAjax.generateQrcode, params);
setTimeout(loading);
if (data.code === 200) {
message.success('小程序码生成成功', 1);
yield put({
type: 'updateState',
payload: {
previewQrcode: data.data.url,
previewQrcodeShow: true,
downloadTitle: record.title,
},
});
} else {
message.error('小程序码生成失败', 1);
}
},
* pageInit({ payload }, { call, put, select }) {
yield put({
type: 'updateState',
payload: {
previewQrcode: '',
previewQrcodeShow: false,
downloadTitle: '',
},
});
},
},
reducers: {
save(state, action) {
return { ...state, ...action.payload };
},
updateState(state, action) {
return { ...state, ...action.payload };
},
},
};
......@@ -508,7 +508,7 @@ export default {
},
});
yield put({
type: 'newthemelist/getCode',
type: 'common/getCode',
payload: {
record: {
school_id: data.data.school_id,
......
......@@ -59,6 +59,8 @@ import officialtheme from './officialtheme';
import liveclass from './liveclass';
import createmarke from './createmarke';
import newthemelist from './newthemelist';
import clockmember from './clockmember';
import common from './common';
export default {
loginModel,
indexstaicModel,
......@@ -112,4 +114,6 @@ export default {
liveclass,
createmarke,
newthemelist,
clockmember,
common,
};
......@@ -213,15 +213,10 @@ export default {
},
});
},
* createLive({ payload }, { put, select }) {
yield put(routerRedux.push({
pathname: '/sjd/addLive',
}));
},
* goEdit({ payload }, { put, select }) {
const { id } = payload;
* goClockMember({ payload }, { put, select }) {
const { record } = payload;
yield put(routerRedux.push({
pathname: `/sjd/editLive/${id}`,
pathname: `/sjd/member/${record.subject_type}/${record.id}`,
}));
},
* pageInit({ payload }, { call, put, select }) {
......
......@@ -6,19 +6,16 @@ import * as thememgtajax from '../services/thememgt';
import errorcode from '../common/errorcode';
import * as themeAjax from '../services/createtheme';
import * as commonAjax from '../services/common';
import * as themeListAjax from '../services/newthemelist';
export default {
namespace: 'thememgt',
state: {
classId: 0,
themeListSearchQuery: {
sort_type: 1,
class_id: 0,
type: '',
page: 1,
perPage: 10,
school_id: 0,
start_time: '',
end_time: '',
subject_type: '',
},
subjectType: '',
......@@ -35,53 +32,38 @@ export default {
effects: {
* querythemelist({ payload }, { call, put, select }) {
const { params } = payload;
const { sid } = yield select(state => state.webapp);
const { themeListSearchQuery, themeTotal } = yield select(state => state.thememgt);
let newThemeTotal = themeTotal;
const { params, classId } = payload;
if (classId) {
yield put({
type: 'updateState',
payload: {
classId,
},
});
}
if (!sid) {
return;
}
const newThemeListSearchQuery = Object.assign(themeListSearchQuery, params, { school_id: sid });
const loadmessage = message.loading('数据加载中...', 0);
const themeListData = yield call(thememgtajax.themeList, newThemeListSearchQuery);
setTimeout(loadmessage);
if (themeListData.code == 200) {
if (themeListData.data && themeListData.data.total != undefined) {
newThemeTotal = themeListData.data.total;
const loading = message.loading('数据加载中...', 0.5);
const newParams = Object.assign(themeListSearchQuery, params, {
school_id: sid,
});
let newTotal = themeTotal;
const data = yield call(themeListAjax.clockList, {
...newParams,
});
setTimeout(loading);
if (data.code == 200) {
if (data.data.total != undefined) {
newTotal = data.data.total;
}
yield put({
type: 'updateState',
payload: {
sid,
themeTotal: newThemeTotal,
themeList: (themeListData.data && themeListData.data.list) || [],
themeListSearchQuery: newThemeListSearchQuery,
themeTotal: newTotal,
themeList: (data.data && data.data.list) || [],
themeListSearchQuery: newParams,
},
});
} else {
yield put({
type: 'updateState',
payload: {
logining: false,
themeListSearchQuery: newThemeListSearchQuery,
},
});
yield put({
type: 'webapp/errorrequestresolve',
payload: {
data: themeListData,
data,
},
});
// message.error(themeListData.msg, 1);
}
},
* goclockmgt({ payload }, { call, put, select }) {
......@@ -94,52 +76,6 @@ export default {
pathname: `/sjd/clockmgt/${payload.subject_type}/${classId}/${payload.subject_id}`,
}));
},
* getCode({ payload }, { call, put, select }) {
const { record } = payload;
const loading = message.loading('小程序码生成中,请稍等...', 0);
let params;
switch (record.subject_type) {
case 1:
params = {
scene: `i=${record.class_id}&t=${record.id}&w=${record.school_id}`,
page: 'src/pages/themeindex/index',
width: 430,
};
break;
case 2:
params = {
scene: `i=${record.class_id}&t=${record.id}&w=${record.school_id}`,
page: 'src/pages/calendarthemeindex/index',
width: 430,
};
break;
case 3:
params = {
scene: `i=${record.class_id}&t=${record.id}`,
page: 'src/pages/sharemoretheme/index',
width: 430,
};
break;
default:
params = {};
break;
}
const data = yield call(commonAjax.generateQrcode, params);
setTimeout(loading);
if (data.code === 200) {
message.success('小程序码生成成功', 1);
yield put({
type: 'updateState',
payload: {
previewQrcode: data.data.url,
previewQrcodeShow: true,
downloadTitle: record.title,
},
});
} else {
message.error('小程序码生成失败', 1);
}
},
* subjecttypechange({ payload }, { call, put, select }) {
const { subjectType } = payload;
yield put({
......@@ -176,55 +112,16 @@ export default {
},
});
},
* search({ payload }, { call, put, select }) {
const {
themeListSearchQuery,
startTime,
endTime,
subjectType,
} = yield select(state => state.thememgt);
themeListSearchQuery.start_time = (startTime && `${startTime.format('YYYY-MM-DD')}`) || '';
themeListSearchQuery.end_time = (endTime && `${endTime.format('YYYY-MM-DD')}`) || '';
themeListSearchQuery.subject_type = subjectType;
yield put({
type: 'updateState',
payload: {
themeListSearchQuery: { ...themeListSearchQuery },
},
});
yield put({
type: 'querythemelist',
payload: {
params: {
page: 1,
},
},
});
},
* resetsearch({ payload }, { call, put, select }) {
const {
themeListSearchQuery,
startTime,
endTime,
subjectType,
} = yield select(state => state.thememgt);
themeListSearchQuery.start_time = '';
themeListSearchQuery.end_time = '';
themeListSearchQuery.subject_type = '';
yield put({
type: 'updateState',
payload: {
themeListSearchQuery: { ...themeListSearchQuery },
startTime: '',
endTime: '',
subjectType: '',
},
});
* reset({ payload }, { call, put, select }) {
yield put({
type: 'querythemelist',
payload: {
params: {
sort_type: 1,
type: '',
page: 1,
perPage: 10,
subject_type: '',
},
},
});
......@@ -295,13 +192,9 @@ export default {
classId: 0,
themeListSearchQuery: {
sort_type: 1,
class_id: 0,
type: '',
page: 1,
perPage: 10,
school_id: 0,
start_time: '',
end_time: '',
subject_type: '',
},
subjectType: '',
......
......@@ -567,7 +567,7 @@ export default {
},
{
path: pathname,
name: '主题管理',
name: '打卡管理',
},
],
},
......@@ -1031,6 +1031,33 @@ export default {
});
}
dispatch({ type: 'menumatch', payload: { pathname } });
const clockMemberActive = pathToRegexp('/sjd/member/:type/:id').exec(pathname);
if (clockMemberActive) {
dispatch({
type: 'clockmember/queryList',
payload: {
params: {
subject_type: clockMemberActive[1],
subject_id: clockMemberActive[2],
},
},
});
dispatch({
type: 'updateState',
payload: {
breadcrumbList: [
{
path: 'sjd/clockList',
name: '打卡列表',
},
{
path: pathname,
name: '学员管理',
},
],
},
});
}
if (pathname === '/sjd/integralmanage') {
dispatch({
type: 'integral/integralModelList',
......
......@@ -671,12 +671,10 @@ class ClassMgtForm extends React.Component {
}
<span className="hreflink" onClick={() => this.goClassDetail(record, 2)}>学员管理</span>
<span className={pageStyle.divideline}>|</span>
{/* {hasBtnPower('sjd/classmgt', 'thememgt') && */}
{/* <BtnPermission btnId="30002"> */}
{/* <span className="hreflink" onClick={() => this.goThemeMgt(record)}>打卡管理</span> */}
{/* <span className={pageStyle.divideline}>|</span> */}
{/* </BtnPermission> */}
{/* } */}
<span>
<span className="hreflink" onClick={() => this.goThemeMgt(record)}>打卡管理</span>
<span className={pageStyle.divideline}>|</span>
</span>
{ hasBtnPower('sjd/classmgt', 'callStudent') &&
<span>
<span className="hreflink" onClick={() => this.goClassDetail(record, 3)}>点名</span>
......
import { connect } from 'dva';
import React from 'react';
import {
Icon,
Button,
Row,
Col,
Input,
Select,
Checkbox,
Table,
Modal,
Form,
Alert,
Badge,
message,
Pagination,
Tooltip, DatePicker,
Divider,
Avatar,
} from 'antd';
import moment from 'moment';
import { routerRedux } from 'dva/router';
import pageStyle from './index.less';
import { pageIn, hasBtnPower, btnPermission, translateType, imagify } from '../../utils/index';
import BtnPermission from '../../components/BtnPermission';
import QrcodeShow from '../../components/qrcodeShow';
const { Option } = Select;
const { TextArea } = Input;
const { Search } = Input;
const { RangePicker } = DatePicker;
class LiveClass extends React.Component {
constructor(props) {
super(props);
this.state = {
};
}
componentDidMount() { // 挂载
pageIn('学生管理');
}
componentWillUnmount() { // 卸载
}
handleTickOut = (record) => {
const { dispatch } = this.props;
Modal.confirm({
title: '提示',
content: '该学生将从此打卡活动活动中踢出,此次打卡记录也将会清除。',
okText: '确定',
cancelText: '取消',
icon: <Icon type="info-circle" theme="filled" style={{ color: '#1890ff', fontSize: 30 }} />,
onOk() {
dispatch({
type: 'clockmember/handleTickOut',
payload: {
record,
},
});
},
});
}
render() {
const {
userPermission,
clockListParams,
clockListTotal,
clockList,
} = this.props;
const columns = [
{
title: '姓名',
dataIndex: 'title',
key: 'title',
render: (text, record) => {
return (
<div>
<Avatar style={{ marginRight: 10 }} size={44} src={imagify(record.avatar ? record.avatar : record.school_student.avatar)} />
<span>{record.school_student && record.school_student.nickname ? record.school_student.nickname : record.name}</span>
</div>
);
},
},
{
title: '加入时间',
dataIndex: 'created_at',
key: 'created_at',
},
{
title: '手机号',
dataIndex: 'mobile',
key: 'mobile',
render: (text, record) => {
return (
<div>
<span>{text || '-'}</span>
</div>
);
},
},
{
title: '操作',
dataIndex: 'c',
key: 'c',
render: (text, record) => {
return (
<div className={pageStyle.tableoperatebox}>
<span className="hreflink" onClick={() => this.handleTickOut(record)}>踢出本次打卡</span>
</div>
);
},
},
];
return (
<div className={pageStyle.container}>
<div className={pageStyle.tablebox}>
<Table
rowKey="id"
dataSource={clockList}
columns={columns}
scroll={{ x: 'max-content' }}
pagination={false}
bordered
footer={null}
/>
<div className={pageStyle.tablefooterbox}>
<span className={pageStyle.tablefooterstatic}>{clockListTotal}条数据</span>
<Pagination
showSizeChanger
showQuickJumper
onShowSizeChange={this.sizeChange}
total={Number(clockListTotal)}
onChange={this.changePagination}
current={Number(clockListParams.page) || 1}
pageSize={clockListParams.perPage}
/>
</div>
</div>
</div>
);
}
}
LiveClass.propTypes = {
};
const LiveClassForm = Form.create()(LiveClass);
function mapStateToProps(state) {
const {
clockListParams,
clockListTotal,
clockList,
} = state.clockmember;
const {
guideStep,
guideShow,
} = state.userguide;
const {
userPermission,
schoolUserInfo,
} = state.webapp;
return {
userPermission,
guideStep,
guideShow,
schoolUserInfo,
clockListParams,
clockListTotal,
clockList,
};
}
export default connect(mapStateToProps)(LiveClassForm);
@import '../../less/variables.less';
.container {
background-color: #fff;
border-radius: 2px;
padding: 20px;
}
.headerbox{
background-color: #fff;
.headerbtn {
color: #2194FF;
font-size: 14px;
cursor: pointer;
}
padding-bottom: 18px;
}
.searchrow {
.formitem {
display: flex;
align-items: center;
.formitemlabel {
color: #000000;
font-size: 14px;
line-height: 1;
min-width: 70px;
white-space: nowrap;
}
}
}
.selectitem {
display: block;
}
.searchbtnbox {
height: 54px;
display: flex;
align-items: flex-end;
}
.resetbtn {
margin-right: 16px;
}
.tablebox {
background: #fff;
:global {
.ant-table-fixed {
border-bottom: 1px solid #E8E8E8 !important;
}
.ant-table tbody tr:nth-child(2n) {
background-color: #FBFBFB;
}
.ant-table-thead > tr > th, .ant-table-tbody > tr > td {
padding: 11px 10px;
}
.ant-table-bordered .ant-table-tbody tr td {
border-bottom: none;
border-right: none!important;
}
.ant-table-bordered .ant-table-thead tr th {
border-bottom: none;
border-right: none!important;
}
.ant-table-bordered .ant-table-thead tr th:last-child {
border-right: 1px solid #e8e8e8!important;
}
.ant-table-bordered .ant-table-tbody tr td:last-child {
border-right: 1px solid #e8e8e8!important;
}
.ant-table-bordered .ant-table-tbody tr:last-child {
border-bottom: 1px solid #e8e8e8!important;
}
}
}
.divideline {
color: #E9E9E9;
padding: 0 8px;
}
.alink {
color: #1890FF;
}
.classNamebox {
max-width: 250px;
word-break: break-all;
color: #1890FF;
cursor: pointer;
}
.tableoperatebox {
min-width: 160px;
line-height: 30px;
}
.endsearchcol {
margin-bottom: 18px;
}
.endclassfooter {
display: flex;
align-items: center;
justify-content: space-between;
}
.classroomitem {
margin-bottom: 5px;
.classroom {
color:rgba(0,0,0,0.85);
}
.aLink {
color: #1890FF;
padding-left: 21px;
}
}
.rightList {
display: flex;
align-items: center;
height: 32px;
.resetIcon {
width: 14px;
height: 14px;
cursor: pointer;
margin-right: 15px;
}
.expend {
font-size:13px;
font-family:PingFangSC-Regular,PingFang SC;
font-weight:400;
color:rgba(102,102,102,1);
display: inline-block;
cursor: pointer;
}
}
.tablefooterbox {
color: rgba(0,0,0,0.6);
font-size: 16px;
line-height: 50px;
display: flex;
background-color: #fff;
align-items: center;
justify-content: space-between;
padding-left: 14px;
padding-right: 14px;
margin-top: 10px;
.tablefooterstatic {
color:rgba(0,0,0,0.65);
font-size: 14px;
}
}
.shiftbox {
display: flex;
align-items: center;
border-bottom: 1px solid #e8e8e8;
.tabitem {
color: #000000;
font-size: 16px;
line-height: 1;
padding: 10px 11px 10px;
border-bottom: 3px solid transparent;
margin: 0 20px;
cursor: pointer;
&:first-child {
margin-left: 0;
}
&.active {
border-color: #1890FF;
color: #1890FF;
font-weight: 700;
}
&:hover {
border-color: #1890FF;
color: #1890FF;
font-weight: 700;
}
}
}
.formList {
margin: 10px 0;
}
......@@ -180,7 +180,7 @@ class LiveClass extends React.Component {
lookClockMgt = (record) => {
const { dispatch } = this.props;
dispatch({
type: 'newthemelist/getCode',
type: 'common/getCode',
payload: {
record,
},
......@@ -189,7 +189,7 @@ class LiveClass extends React.Component {
closeQrcodeShow = () => {
const { dispatch } = this.props;
dispatch({
type: 'newthemelist/updateState',
type: 'common/updateState',
payload: {
previewQrcodeShow: false,
},
......@@ -241,6 +241,15 @@ class LiveClass extends React.Component {
},
});
}
goClockMember = (record) => {
const { dispatch } = this.props;
dispatch({
type: 'newthemelist/goClockMember',
payload: {
record,
},
});
}
render() {
const {
userPermission,
......@@ -331,6 +340,10 @@ class LiveClass extends React.Component {
{
record.status == 1 && <span className="hreflink" onClick={() => this.savePublish(record)}>发布<Divider type="vertical" /></span>
}
{/* { */}
{/* record.subject_type != 3 && */}
{/* <span className="hreflink" onClick={() => this.goClockMember(record)}>学生管理<Divider type="vertical" /></span> */}
{/* } */}
<span className="hreflink" onClick={() => this.lookClockMgt(record)}>扫码查看</span>
<Divider type="vertical" />
<span className="hreflink" onClick={() => this.goClockMgt(record)}>点评</span>
......@@ -431,14 +444,16 @@ function mapStateToProps(state) {
clockListParams,
clockListTotal,
clockList,
previewQrcodeShow,
previewQrcode,
downloadTitle,
} = state.newthemelist;
const {
guideStep,
guideShow,
} = state.userguide;
const {
previewQrcodeShow,
previewQrcode,
downloadTitle,
} = state.common;
const {
userPermission,
schoolUserInfo,
......
This diff is collapsed.
.classmgtcontainer {
@import '../../less/variables.less';
.container {
background-color: #fff;
padding: 25px 0 29px 0;
border-radius: 2px;
padding: 20px;
}
.activeamount{
background-color: #cccccc;
color: #666666;
text-align: center;
line-height: 50px;
font-size: 20px;
.headerbox{
background-color: #fff;
.headerbtn {
color: #2194FF;
font-size: 14px;
cursor: pointer;
}
padding-bottom: 18px;
}
.searchrow {
margin-bottom: 20px;
.formitem {
display: flex;
align-items: center;
.formitemlabel {
color: #000000;
font-size: 14px;
line-height: 1;
min-width: 70px;
white-space: nowrap;
}
}
}
.selectitem {
display: block;
}
.tablecell {
text-align: center;
.searchbtnbox {
height: 54px;
display: flex;
align-items: flex-end;
}
.searchbox {
padding-left: 12px;
.resetbtn {
margin-right: 16px;
}
:global {
.thememgtcontainer {
.ant-form-item {
margin-bottom: 0;
.tablebox {
background: #fff;
:global {
.ant-table-fixed {
border-bottom: 1px solid #E8E8E8 !important;
}
.ant-table tbody tr:nth-child(2n) {
background-color: #FBFBFB;
}
.ant-table-thead > tr > th, .ant-table-tbody > tr > td {
padding: 11px 10px;
}
.ant-table-bordered .ant-table-tbody tr td {
border-bottom: none;
border-right: none!important;
}
.ant-table-bordered .ant-table-thead tr th {
border-bottom: none;
border-right: none!important;
}
.ant-table-bordered .ant-table-thead tr th:last-child {
border-right: 1px solid #e8e8e8!important;
}
.ant-table-bordered .ant-table-tbody tr td:last-child {
border-right: 1px solid #e8e8e8!important;
}
.ant-table-bordered .ant-table-tbody tr:last-child {
border-bottom: 1px solid #e8e8e8!important;
}
}
}
\ No newline at end of file
}
.divideline {
color: #E9E9E9;
padding: 0 8px;
}
.alink {
color: #1890FF;
}
.classNamebox {
max-width: 250px;
word-break: break-all;
color: #1890FF;
cursor: pointer;
}
.tableoperatebox {
min-width: 160px;
line-height: 30px;
}
.endsearchcol {
margin-bottom: 18px;
}
.endclassfooter {
display: flex;
align-items: center;
justify-content: space-between;
}
.classroomitem {
margin-bottom: 5px;
.classroom {
color:rgba(0,0,0,0.85);
}
.aLink {
color: #1890FF;
padding-left: 21px;
}
}
.rightList {
display: flex;
align-items: center;
height: 32px;
.resetIcon {
width: 14px;
height: 14px;
cursor: pointer;
margin-right: 15px;
}
.expend {
font-size:13px;
font-family:PingFangSC-Regular,PingFang SC;
font-weight:400;
color:rgba(102,102,102,1);
display: inline-block;
cursor: pointer;
}
}
.tablefooterbox {
color: rgba(0,0,0,0.6);
font-size: 16px;
line-height: 50px;
display: flex;
background-color: #fff;
align-items: center;
justify-content: space-between;
padding-left: 14px;
padding-right: 14px;
margin-top: 10px;
.tablefooterstatic {
color:rgba(0,0,0,0.65);
font-size: 14px;
}
}
.shiftbox {
display: flex;
align-items: center;
border-bottom: 1px solid #e8e8e8;
.tabitem {
color: #000000;
font-size: 16px;
line-height: 1;
padding: 10px 11px 10px;
border-bottom: 3px solid transparent;
margin: 0 20px;
cursor: pointer;
&:first-child {
margin-left: 0;
}
&.active {
border-color: #1890FF;
color: #1890FF;
font-weight: 700;
}
&:hover {
border-color: #1890FF;
color: #1890FF;
font-weight: 700;
}
}
}
.formList {
margin: 10px 0;
}
......@@ -296,6 +296,11 @@ const ClockList = props => (
{ ClockList => (<ClockList {...props} />) }
</Bundle>
);
const ClockMember = props => (
<Bundle load={() => import(/* webpackChunkName:"ClockMember" */'./pages/clockmember/index')}>
{ ClockMember => (<ClockMember {...props} />) }
</Bundle>
);
function RouterConfig({ history }) {
return (
<ConfigProvider locale={zhCN}>
......@@ -355,6 +360,7 @@ function RouterConfig({ history }) {
<Route path="/sjd/addLive" exact component={AddLive} />
<Route path="/sjd/editLive/:id" exact component={AddLive} />
<Route path="/sjd/clockList" exact component={ClockList} />
<Route path="/sjd/member/:type/:id" exact component={ClockMember} />
<Route component={Errorpage} />
</Switch>
</SjdIndex>
......
import qs from 'qs';
import request from '../utils/request';
import api from '../common/api';
export function memberList(params) {
const data = qs.stringify(params);
return request({
url: `${api.clockmember.list}?${data}`,
method: 'GET',
});
}
export function deleteSubjectStudent(params) {
const data = qs.stringify(params);
return request({
url: `${api.clockmember.deleteSubjectStudent}/${params.id}`,
method: 'POST',
data,
});
}
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