Commit d45aa43a authored by baixian's avatar baixian

数据中心

parent 1df4cab2
......@@ -104,6 +104,19 @@ export default {
path: '/sjd/integralmanage',
relativePath: ['/sjd/integralmanage', '/sjd/integralmanage'],
},
{
id: '11',
name: '数据中心',
isFather: false,
style: {
width: '20px',
height: '20px',
},
activeurl: `${__IMGCDN__}menu/datacenteractive.png`,
notactiveurl: `${__IMGCDN__}menu/datacenter.png`,
path: '/sjd/datacenter',
relativePath: ['/sjd/datacenter'],
},
// {
// id: '2',
// name: '小程序管理',
......
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';
export default {
namespace: 'datacenter',
state: {
},
subscriptions: {
setup({ dispatch, history }) { // eslint-disable-line
},
},
effects: {
* chooseColor({ payload }, { call, put, select }) {
const { color } = payload;
const { editCourseInfo } = yield select(state => state.course);
editCourseInfo.color = color.value;
yield put({
type: 'updateState',
payload: {
editCourseInfo: { ...editCourseInfo },
},
});
},
* pageInit({ payload }, { call, put, select }) {
yield put({
type: 'updateState',
payload: {
},
});
},
},
reducers: {
save(state, action) {
return { ...state, ...action.payload };
},
updateState(state, action) {
return { ...state, ...action.payload };
},
},
};
import { connect } from 'dva';
import React from 'react';
import {
Icon,
Button,
message,
Row,
Col,
Input,
Select,
Checkbox,
Table,
Modal,
Form,
Radio,
RadioGroup,
Alert,
Tooltip,
Card,
DatePicker,
Avatar,
} from 'antd';
import moment from 'moment';
import pageStyle from './index.less';
import { pageIn, hasBtnPower } from '../../utils/index';
const { RangePicker } = DatePicker;
const { Option } = Select;
const { TextArea } = Input;
class DataCenterForm extends React.Component {
componentDidMount() { // 挂载
pageIn('数据中心');
}
componentWillUnmount() { // 卸载
}
render() {
const {
colorList,
} = this.props;
const dataSource = [
];
const studentClueColumns = [
{
title: '头像',
dataIndex: 'sort',
render: (text) => {
return (
<div>
{ text }
<Avatar size={44} icon="user" />
</div>);
},
},
{
title: '微信昵称',
},
{
title: '电话号码',
},
{
title: '留下线索时间',
},
];
const studentUpColumns = [
{
title: '头像',
dataIndex: 'sort',
render: (text) => {
return (
<div>
{ text }
<Avatar size={44} icon="user" />
</div>);
},
},
{
title: '姓名',
},
{
title: '电话号码',
},
{
title: '线索贡献',
},
];
const teacherUpColumns = [
{
title: '昵称',
dataIndex: 'sort',
render: (text) => {
return (
<div>
{ text }
<Avatar size={44} icon="user" />
</div>);
},
},
{
title: '姓名',
},
{
title: '电话号码',
},
{
title: '潜在学员线索贡献',
},
];
const classUpColumns = [
{
title: '昵称',
dataIndex: 'sort',
render: (text) => {
return (
<div>
{ text }
<Avatar size={44} icon="user" />
</div>);
},
},
{
title: '姓名',
},
{
title: '电话号码',
},
{
title: '潜在学员线索贡献',
},
];
return (
<div className={pageStyle.container}>
<div className={pageStyle.head}>
<Row>
<Col>
<div className={pageStyle.timebox}>
<span className={pageStyle.timeTip}>创建时间:</span>
<RangePicker
disabledDate={this.disabledDate}
onChange={this.onRangePickerChange}
allowClear={false}
className={pageStyle.rangePicker}
/>
<Button style={{ marginRight: 30 }}>近七天</Button>
<Button style={{ marginRight: 30 }}>30</Button>
<Button type="primary">筛选</Button>
</div>
</Col>
</Row>
</div>
<div className={pageStyle.middleBox}>
<Row gutter={30}>
<Col xs={{ span: 24 }} sm={{ span: 8 }} lg={{ span: 8 }} md={{ span: 8 }}>
<div className={pageStyle.staticLeft}>
<div className={pageStyle.staticItem}>
<div className={pageStyle.staticTitle}>
<span>访客数</span>
<Tooltip
placement="top"
title="筛选时间内,店铺所有页面(包括店铺主页、习作广场、个人中心等)被访问的人数,日去重多天累加。一个人在同一天内访问多次只记为一人。"
>
<Icon style={{ cursor: 'pointer' }} type="question-circle" />
</Tooltip>
</div>
<div className={pageStyle.staticNum}>
<span>5</span>
</div>
</div>
<div className={pageStyle.staticItem}>
<div className={pageStyle.staticTitle}>
<span>浏览量</span>
<Tooltip
placement="top"
title="筛选时间内,店铺所有页面(包括店铺主页、打卡详情、个人中心等)被访问的次数,一个人在筛选时间内访问多次记为多次。"
>
<Icon style={{ cursor: 'pointer' }} type="question-circle" />
</Tooltip>
</div>
<div className={pageStyle.staticNum}>
<span>5</span>
</div>
</div>
</div>
</Col>
<Col xs={{ span: 24 }} sm={{ span: 16 }} lg={{ span: 16 }} md={{ span: 16 }}>
<div className={pageStyle.staticRight}>
<div className={pageStyle.staticItem}>
<div className={pageStyle.staticTitle}>
<span>分享访问人数</span>
<Tooltip
placement="top"
title="筛选时间内,通过他人分享链接访问产生的访客数,日去重多天累加。一个人在同一天内访问多次只记为一人。"
>
<Icon style={{ cursor: 'pointer' }} type="question-circle" />
</Tooltip>
</div>
<div className={pageStyle.staticNum}>
<span>5</span>
</div>
</div>
<div className={pageStyle.staticItem}>
<div className={pageStyle.staticTitle}>
<span>微官网曝光次数</span>
<Tooltip
placement="top"
title="通过分享链接以及老学员进入主页,微官网的展示次数"
>
<Icon style={{ cursor: 'pointer' }} type="question-circle" />
</Tooltip>
</div>
<div className={pageStyle.staticNum}>
<span>5</span>
</div>
</div>
<div className={pageStyle.staticItem}>
<div className={pageStyle.staticTitle}>
<span>分享访问次数</span>
<Tooltip
placement="top"
title="筛选时间内,通过他人分享链接访问被分享页面的浏览量。"
>
<Icon style={{ cursor: 'pointer' }} type="question-circle" />
</Tooltip>
</div>
<div className={pageStyle.staticNum}>
<span>5</span>
</div>
</div>
</div>
</Col>
</Row>
</div>
<div className={pageStyle.footer}>
<Row gutter={30}>
<Col xs={{ span: 24 }} sm={{ span: 12 }} lg={{ span: 12 }} md={{ span: 12 }}>
<div className={pageStyle.commonTable}>
<div className={pageStyle.commonTitle}><span className={pageStyle.line}></span>潜在学员线索</div>
<Table size="small" dataSource={dataSource} columns={studentClueColumns} />
</div>
</Col>
<Col xs={{ span: 24 }} sm={{ span: 12 }} lg={{ span: 12 }} md={{ span: 12 }}>
<div className={pageStyle.commonTable}>
<div className={pageStyle.commonTitle}><span className={pageStyle.line}></span>学员贡献排行</div>
<Table size="small" dataSource={dataSource} columns={studentUpColumns} />
</div>
</Col>
</Row>
</div>
<div className={pageStyle.footer}>
<Row gutter={30}>
<Col xs={{ span: 24 }} sm={{ span: 12 }} lg={{ span: 12 }} md={{ span: 12 }}>
<div className={pageStyle.commonTable}>
<div className={pageStyle.commonTitle}><span className={pageStyle.line}></span>老师贡献排行</div>
<Table size="small" dataSource={dataSource} columns={teacherUpColumns} />
</div>
</Col>
<Col xs={{ span: 24 }} sm={{ span: 12 }} lg={{ span: 12 }} md={{ span: 12 }}>
<div className={pageStyle.commonTable}>
<div className={pageStyle.commonTitle}><span className={pageStyle.line}></span>班级贡献排行</div>
<Table size="small" dataSource={dataSource} columns={classUpColumns} />
</div>
</Col>
</Row>
</div>
</div>
);
}
}
DataCenterForm.propTypes = {
};
const DataCenter = Form.create()(DataCenterForm);
function mapStateToProps(state) {
const {
colorList,
} = state.course;
return {
colorList,
};
}
export default connect(mapStateToProps)(DataCenter);
.head {
padding: 20px 28px;
background-color: #fff;
.timeTip {
font-size:14px;
font-weight:400;
color:rgba(0,0,0,0.85);
}
.rangePicker {
margin-right: 30px;
margin-left: 5px;
}
}
.middleBox {
margin-top: 25px;
.staticItem {
background-color: #fff;
padding: 15px 30px;
height: 90px;
}
.staticLeft {
display: flex;
.staticItem {
width: 50%;
}
.staticItem:first-child {
border-right: 1px solid #E9E9E9;
}
}
.staticRight {
display: flex;
.staticItem {
width: 33.33%;
}
.staticItem:not(:last-child) {
border-right: 1px solid #E9E9E9;
}
}
.staticTitle {
span {
font-size:14px;
font-weight:400;
color:rgba(0,0,0,0.45);
display: inline-block;
margin-right: 5px;
}
}
.staticNum {
margin-top: 10px;
span {
font-size:24px;
font-family:HelveticaNeue;
color:rgba(0,0,0,0.85);
}
}
}
.footer {
margin-top: 25px;
.commonTable {
background-color: #fff;
.commonTitle {
font-size:16px;
font-family:PingFangSC-Medium,PingFang SC;
font-weight:600;
line-height: 24px;
padding: 15px 0 15px 10px;
color:rgba(0,0,0,0.85);
border-bottom: 1px solid #E8E8E8;
.line {
width: 3px;
height: 19px;
background-color: #1890FF;
display: inline-block;
vertical-align: -10%;
margin-right: 6px;
}
}
:global {
.ant-table-placeholder {
border-top: none;
}
.ant-table-small {
border: none;
}
.ant-table-thead > tr > th {
border-bottom: none;
font-size: 14px;
font-weight: 600;
}
.ant-table-tbody > tr > td {
border-bottom: none;
}
}
}
}
......@@ -185,6 +185,11 @@ const CalendarClock = props => (
{ CalendarClock => (<CalendarClock {...props} />) }
</Bundle>
);
const DataCenter = props => (
<Bundle load={() => import(/* webpackChunkName:"DataCenter" */'./pages/datacenter/index')}>
{ DataCenter => (<DataCenter {...props} />) }
</Bundle>
);
function RouterConfig({ history }) {
return (
<ConfigProvider locale={zhCN}>
......@@ -194,7 +199,6 @@ function RouterConfig({ history }) {
path="/sjd"
render={() => (
<SjdIndex>
<Route path="/sjd/storesetting" exact component={Storesetting} />
<Route path="/sjd/newtheme" config={{ needAuth: true }} exact component={NewTheme} />
<Route path="/sjd/integralmanage" config={{ needAuth: true }} exact component={Integralmanage} />
<Route path="/sjd/officialweb" config={{ needAuth: true }} exact component={Officialweb} />
......@@ -219,6 +223,7 @@ function RouterConfig({ history }) {
<Route path="/sjd/newtheme/jobclock/:id/:isCopy" exact component={JobClock} />
<Route path="/sjd/newtheme/calendarclock/:id" exact component={CalendarClock} />
<Route path="/sjd/newtheme/calendarclock/:id/:isCopy" exact component={CalendarClock} />
<Route path="/sjd/datacenter" exact component={DataCenter} />
</SjdIndex>
)}
/>
......
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