|
@@ -0,0 +1,239 @@
|
|
|
+import React from 'react';
|
|
|
+import { Form, Row, Col, Avatar } from 'antd';
|
|
|
+import './index.less';
|
|
|
+import Page from '@src/containers/Page';
|
|
|
+import Block from '@src/components/Block';
|
|
|
+import TableLayout from '@src/layouts/TableLayout';
|
|
|
+import { PrepareStatus, PrepareExaminationTime, ServiceKey, PayModule } from '@src/services/Constant';
|
|
|
+import { formatDate, getMap, formatMoney } from '@src/services/Tools';
|
|
|
+import { User } from '../../../stores/user';
|
|
|
+import { Exercise } from '../../../stores/exercise';
|
|
|
+
|
|
|
+const PrepareStatusMap = getMap(PrepareStatus, 'value', 'label');
|
|
|
+const PrepareExaminationTimeMap = getMap(PrepareExaminationTime, 'value', 'label');
|
|
|
+const ServiceKeyMap = getMap(ServiceKey, 'value', 'label');
|
|
|
+const PayModuleMap = getMap(PayModule, 'value', 'label');
|
|
|
+
|
|
|
+export default class extends Page {
|
|
|
+ constructor(props) {
|
|
|
+ super(props);
|
|
|
+ this.categoryMap = {};
|
|
|
+ }
|
|
|
+
|
|
|
+ init() {
|
|
|
+ Exercise.allStruct().then(result => {
|
|
|
+ this.categoryMap = getMap(result.filter(row => row.level === 2).map(row => { row.title = `${row.titleZh}/${row.titleEn}`; row.value = row.id; return row; }), 'id', 'title');
|
|
|
+ this.setState({ exercise: result });
|
|
|
+ });
|
|
|
+ this.columns = [{
|
|
|
+ title: '订单时间',
|
|
|
+ dataIndex: 'createTime',
|
|
|
+ render: (text) => {
|
|
|
+ return formatDate(text);
|
|
|
+ },
|
|
|
+ }, {
|
|
|
+ title: '购买',
|
|
|
+ dataIndex: 'module',
|
|
|
+ render: (text, record) => {
|
|
|
+ const m = PayModuleMap[text];
|
|
|
+ switch (text) {
|
|
|
+ case 'service':
|
|
|
+ return `${m}: ${ServiceKeyMap[record.moduleExtend]} ${record.isUse ? '已使用' : ''}`;
|
|
|
+ case 'class':
|
|
|
+ return `${m}: ${this.categoryMap[record.moduleExtend]} ${record.isUse ? '已使用' : ''}`;
|
|
|
+ case 'data':
|
|
|
+ default:
|
|
|
+ return `${m || text}`;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ }, {
|
|
|
+ title: '消费金额',
|
|
|
+ dataIndex: 'money',
|
|
|
+ render: (text) => {
|
|
|
+ return formatMoney(text);
|
|
|
+ },
|
|
|
+ }];
|
|
|
+ }
|
|
|
+
|
|
|
+ initData() {
|
|
|
+ const { id } = this.params;
|
|
|
+ let handler;
|
|
|
+ if (id) {
|
|
|
+ handler = User.get({ id });
|
|
|
+ } else {
|
|
|
+ handler = Promise.resolve();
|
|
|
+ }
|
|
|
+ handler
|
|
|
+ .then(result => {
|
|
|
+ this.setState({ data: result });
|
|
|
+ this.refreshPay(this.state.search.page, this.state.search.size);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ refreshPay(p, size) {
|
|
|
+ const { id } = this.params;
|
|
|
+ const { page } = this.state;
|
|
|
+ page.current = p || 1;
|
|
|
+ page.pageSize = size || 20;
|
|
|
+ this.setState({ page });
|
|
|
+ User.listPay({ user_id: id, page: page.current, size: page.pageSize })
|
|
|
+ .then(result => {
|
|
|
+ this.setTableData(result.list, result.total);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ renderBase() {
|
|
|
+ const { data } = this.state;
|
|
|
+ return <Block>
|
|
|
+ <h1>用户基本信息</h1>
|
|
|
+ <Form>
|
|
|
+ <div className="group">
|
|
|
+ <h2>个人资料</h2>
|
|
|
+ <Row>
|
|
|
+ <Col span={12}>
|
|
|
+ <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='用户ID'>
|
|
|
+ {data.id}
|
|
|
+ </Form.Item>
|
|
|
+ </Col>
|
|
|
+ <Col span={12}>
|
|
|
+ <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='用户昵称'>
|
|
|
+ {data.nickname}
|
|
|
+ </Form.Item>
|
|
|
+ </Col>
|
|
|
+ <Col span={12}>
|
|
|
+ <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='用户手机'>
|
|
|
+ {data.mobile}
|
|
|
+ </Form.Item>
|
|
|
+ </Col>
|
|
|
+ <Col span={12}>
|
|
|
+ <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='用户微信'>
|
|
|
+ {data.wechatOpenidPc !== '' ? '已绑定' : '未绑定'},{data.wechatOpenidWechat !== '' ? '已关注' : '未关注'}
|
|
|
+ </Form.Item>
|
|
|
+ </Col>
|
|
|
+ <Col span={12}>
|
|
|
+ <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='邮箱'>
|
|
|
+ {data.email !== '' ? '已绑定' : '未绑定'}
|
|
|
+ </Form.Item>
|
|
|
+ </Col>
|
|
|
+ <Col span={12}>
|
|
|
+ <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='注册时间'>
|
|
|
+ {formatDate(data.createTime)}
|
|
|
+ </Form.Item>
|
|
|
+ </Col>
|
|
|
+ <Col span={12}>
|
|
|
+ <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='头像'>
|
|
|
+ <Avatar src={data.avatar} />
|
|
|
+ </Form.Item>
|
|
|
+ </Col>
|
|
|
+ </Row>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div className="group">
|
|
|
+ <h2>实名认证</h2>
|
|
|
+ <Row>
|
|
|
+ <Col span={12}>
|
|
|
+ <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='身份证id'>
|
|
|
+ {data.realIdentity}
|
|
|
+ </Form.Item>
|
|
|
+ </Col>
|
|
|
+ <Col span={12}>
|
|
|
+ <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='真实姓名'>
|
|
|
+ {data.realName}
|
|
|
+ </Form.Item>
|
|
|
+ </Col>
|
|
|
+ <Col span={12}>
|
|
|
+ <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='地区'>
|
|
|
+ {data.realAddress}
|
|
|
+ </Form.Item>
|
|
|
+ </Col>
|
|
|
+ <Col span={12}>
|
|
|
+ <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='身份证照片'>
|
|
|
+ <Avatar src={data.realPhoto} />
|
|
|
+ </Form.Item>
|
|
|
+ </Col>
|
|
|
+ </Row>
|
|
|
+ </div>
|
|
|
+ <div className="group">
|
|
|
+ <h2>备考信息</h2>
|
|
|
+ <Row>
|
|
|
+ <Col span={12}>
|
|
|
+ <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='身份'>
|
|
|
+ {PrepareStatusMap[data.prepareStatus]}
|
|
|
+ </Form.Item>
|
|
|
+ </Col>
|
|
|
+ <Col span={12}>
|
|
|
+ <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='考试时间'>
|
|
|
+ {PrepareExaminationTimeMap[data.PrepareExaminationTime]}
|
|
|
+ </Form.Item>
|
|
|
+ </Col>
|
|
|
+ <Col span={12}>
|
|
|
+ <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='出分时间'>
|
|
|
+ {data.prepareScoreTime ? formatDate(data.prepareScoreTime) : ''}
|
|
|
+ </Form.Item>
|
|
|
+ </Col>
|
|
|
+ <Col span={12}>
|
|
|
+ <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='目标成绩'>
|
|
|
+ {data.prepareGoal}
|
|
|
+ </Form.Item>
|
|
|
+ </Col>
|
|
|
+ </Row>
|
|
|
+ </div>
|
|
|
+ </Form>
|
|
|
+ </Block>;
|
|
|
+ }
|
|
|
+
|
|
|
+ renderService() {
|
|
|
+ const { data } = this.state;
|
|
|
+ return <Block>
|
|
|
+ <h1>服务开通</h1>
|
|
|
+ <div className="group">
|
|
|
+ <h2>累计消费金额</h2>
|
|
|
+ <span>{data.totalMoney}</span>
|
|
|
+ </div>
|
|
|
+ <div className="group">
|
|
|
+ <h2>已开通服务</h2>
|
|
|
+ {(data.services || []).map(service => {
|
|
|
+ return <p>{ServiceKeyMap[service.service]}: {formatDate(service.startTime)} - {formatDate(service.expireTime)}</p>;
|
|
|
+ })}
|
|
|
+ </div>
|
|
|
+ <div className="group">
|
|
|
+ <h2>已开通课程</h2>
|
|
|
+ {(data.classes || []).map(cls => {
|
|
|
+ return <p>{this.categoryMap[cls.category]}: {formatDate(cls.startTime)} - {formatDate(cls.expireTime)}</p>;
|
|
|
+ })}
|
|
|
+ </div>
|
|
|
+ <div className="group">
|
|
|
+ <h2>消费记录</h2>
|
|
|
+ <TableLayout
|
|
|
+ columns={this.columns}
|
|
|
+ list={this.state.list}
|
|
|
+ pagination={this.state.page}
|
|
|
+ loading={this.props.core.loading}
|
|
|
+ onChange={(pagination) => this.refreshPay(pagination.current, pagination.pageSize)}
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </Block>;
|
|
|
+ }
|
|
|
+
|
|
|
+ renderStudy() {
|
|
|
+ return <Block>
|
|
|
+ <h1>学习统计</h1>
|
|
|
+ <div className="group">
|
|
|
+ <h2>累计学习时间</h2>
|
|
|
+
|
|
|
+ </div>
|
|
|
+ <div className="group">
|
|
|
+ <h2>学习数据</h2>
|
|
|
+
|
|
|
+ </div>
|
|
|
+ </Block>;
|
|
|
+ }
|
|
|
+
|
|
|
+ renderView() {
|
|
|
+ return <div flex>
|
|
|
+ {this.renderBase()}
|
|
|
+ {this.renderService()}
|
|
|
+ {this.renderStudy()}
|
|
|
+ </div>;
|
|
|
+ }
|
|
|
+}
|