1
0

page.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. import React from 'react';
  2. import { Form, Row, Col, Avatar, Button } from 'antd';
  3. import './index.less';
  4. import Page from '@src/containers/Page';
  5. import Block from '@src/components/Block';
  6. import TableLayout from '@src/layouts/TableLayout';
  7. import { formatDate, getMap, formatMoney } from '@src/services/Tools';
  8. import { UserUrl, PrepareStatus, PrepareExaminationTime, ServiceKey, PayModule } from '../../../../Constant';
  9. import { User } from '../../../stores/user';
  10. import { Exercise } from '../../../stores/exercise';
  11. const PrepareStatusMap = getMap(PrepareStatus, 'value', 'label');
  12. const PrepareExaminationTimeMap = getMap(PrepareExaminationTime, 'value', 'label');
  13. const ServiceKeyMap = getMap(ServiceKey, 'value', 'label');
  14. const PayModuleMap = getMap(PayModule, 'value', 'label');
  15. export default class extends Page {
  16. constructor(props) {
  17. super(props);
  18. this.categoryMap = {};
  19. }
  20. init() {
  21. Exercise.allStruct().then(result => {
  22. 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');
  23. this.setState({ exercise: result });
  24. });
  25. this.columns = [{
  26. title: '订单时间',
  27. dataIndex: 'createTime',
  28. render: (text) => {
  29. return formatDate(text);
  30. },
  31. }, {
  32. title: '购买',
  33. dataIndex: 'module',
  34. render: (text, record) => {
  35. const m = PayModuleMap[text];
  36. switch (text) {
  37. case 'service':
  38. return `${m}: ${ServiceKeyMap[record.moduleExtend]} ${record.isUse ? '已使用' : ''}`;
  39. case 'class':
  40. return `${m}: ${this.categoryMap[record.moduleExtend]} ${record.isUse ? '已使用' : ''}`;
  41. case 'data':
  42. default:
  43. return `${m || text}`;
  44. }
  45. },
  46. }, {
  47. title: '消费金额',
  48. dataIndex: 'money',
  49. render: (text) => {
  50. return formatMoney(text);
  51. },
  52. }];
  53. }
  54. initData() {
  55. const { id } = this.params;
  56. let handler;
  57. if (id) {
  58. handler = User.get({ id });
  59. } else {
  60. handler = Promise.resolve();
  61. }
  62. handler
  63. .then(result => {
  64. this.setState({ data: result });
  65. this.refreshPay(this.state.search.page, this.state.search.size);
  66. });
  67. }
  68. refreshPay(p, size) {
  69. const { id } = this.params;
  70. const { page } = this.state;
  71. page.current = p || 1;
  72. page.pageSize = size || 20;
  73. this.setState({ page });
  74. User.listPay({ user_id: id, page: page.current, size: page.pageSize })
  75. .then(result => {
  76. this.setTableData(result.list, result.total);
  77. });
  78. }
  79. renderBase() {
  80. const { data = {} } = this.state;
  81. return <Block>
  82. <h1>用户基本信息</h1>
  83. <Form>
  84. <div className="group">
  85. <h2>个人资料</h2>
  86. <Row>
  87. <Col span={12}>
  88. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='用户ID'>
  89. {data.id}
  90. </Form.Item>
  91. </Col>
  92. <Col span={12}>
  93. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='用户昵称'>
  94. {data.nickname}
  95. </Form.Item>
  96. </Col>
  97. <Col span={12}>
  98. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='用户手机'>
  99. {data.mobile}
  100. </Form.Item>
  101. </Col>
  102. <Col span={12}>
  103. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='用户微信'>
  104. {data.wechatOpenidPc !== '' ? '已绑定' : '未绑定'},{data.wechatOpenidWechat !== '' ? '已关注' : '未关注'}
  105. </Form.Item>
  106. </Col>
  107. <Col span={12}>
  108. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='邮箱'>
  109. {data.email !== '' ? '已绑定' : '未绑定'}
  110. </Form.Item>
  111. </Col>
  112. <Col span={12}>
  113. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='注册时间'>
  114. {formatDate(data.createTime)}
  115. </Form.Item>
  116. </Col>
  117. <Col span={12}>
  118. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='头像'>
  119. <Avatar src={data.avatar} />
  120. </Form.Item>
  121. </Col>
  122. </Row>
  123. </div>
  124. <div className="group">
  125. <h2>实名认证</h2>
  126. <Row>
  127. <Col span={12}>
  128. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='身份证id'>
  129. {data.realIdentity}
  130. </Form.Item>
  131. </Col>
  132. <Col span={12}>
  133. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='真实姓名'>
  134. {data.realName}
  135. </Form.Item>
  136. </Col>
  137. <Col span={12}>
  138. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='地区'>
  139. {data.realAddress}
  140. </Form.Item>
  141. </Col>
  142. <Col span={12}>
  143. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='身份证照片'>
  144. <Avatar src={data.realPhotoFront} />
  145. <Avatar src={data.realPhotoBack} />
  146. </Form.Item>
  147. </Col>
  148. </Row>
  149. </div>
  150. <div className="group">
  151. <h2>备考信息</h2>
  152. <Row>
  153. <Col span={12}>
  154. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='身份'>
  155. {PrepareStatusMap[data.prepareStatus]}
  156. </Form.Item>
  157. </Col>
  158. <Col span={12}>
  159. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='考试时间'>
  160. {PrepareExaminationTimeMap[data.PrepareExaminationTime]}
  161. </Form.Item>
  162. </Col>
  163. <Col span={12}>
  164. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='出分时间'>
  165. {data.prepareScoreTime ? formatDate(data.prepareScoreTime) : ''}
  166. </Form.Item>
  167. </Col>
  168. <Col span={12}>
  169. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='目标成绩'>
  170. {data.prepareGoal}
  171. </Form.Item>
  172. </Col>
  173. </Row>
  174. </div>
  175. </Form>
  176. </Block>;
  177. }
  178. renderService() {
  179. const { data = {} } = this.state;
  180. return <Block>
  181. <h1>服务开通</h1>
  182. <div className="group">
  183. <h2>累计消费金额</h2>
  184. <span>{data.totalMoney}</span>
  185. </div>
  186. <div className="group">
  187. <h2>已开通服务</h2>
  188. {(data.services || []).map(service => {
  189. return <p>{ServiceKeyMap[service.service]}: {formatDate(service.startTime)} - {formatDate(service.expireTime)}</p>;
  190. })}
  191. </div>
  192. <div className="group">
  193. <h2>已开通课程</h2>
  194. {(data.classes || []).map(cls => {
  195. return <p>{this.categoryMap[cls.category]}: {formatDate(cls.startTime)} - {formatDate(cls.expireTime)}</p>;
  196. })}
  197. </div>
  198. <div className="group">
  199. <h2>消费记录</h2>
  200. <TableLayout
  201. columns={this.columns}
  202. list={this.state.list}
  203. pagination={this.state.page}
  204. loading={this.props.core.loading}
  205. onChange={(pagination) => this.refreshPay(pagination.current, pagination.pageSize)}
  206. />
  207. </div>
  208. </Block>;
  209. }
  210. renderStudy() {
  211. return <Block>
  212. <h1>学习统计</h1>
  213. <div className="group">
  214. <h2>累计学习时间</h2>
  215. </div>
  216. <div className="group">
  217. <h2>学习数据</h2>
  218. <Button onClick={() => {
  219. User.token({ id: this.params.id || 1 })
  220. .then(token => {
  221. const w = window.open('about:blank');
  222. w.location.href = `${UserUrl}/my/data?token=${token}`;
  223. });
  224. }}>查看</Button>
  225. </div>
  226. </Block>;
  227. }
  228. renderView() {
  229. return <div flex>
  230. {this.renderBase()}
  231. {this.renderService()}
  232. {this.renderStudy()}
  233. </div>;
  234. }
  235. }