index.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. import React, { Component } from 'react';
  2. import './index.less';
  3. import { Icon } from 'antd-mobile';
  4. import Assets from '@src/components/Assets';
  5. import { getMap } from '@src/services/Tools';
  6. import { CrowdList } from '../../../Constant';
  7. import Tag from '../Tag';
  8. import Money from '../Money';
  9. import Button from '../Button';
  10. const CrowdMap = getMap(CrowdList, 'value', 'label');
  11. export class Block extends Component {
  12. render() {
  13. const { className = '', children } = this.props;
  14. return <div className={`g-block ${className}`}>{children}</div>;
  15. }
  16. }
  17. export class TopBlock extends Component {
  18. render() {
  19. const { className = '', theme = 'default', children } = this.props;
  20. return <div className={`g-top-block ${className} ${theme}`}>{children}</div>;
  21. }
  22. }
  23. export class TagBlock extends Component {
  24. render() {
  25. const { className = '', theme = 'default', tag, children } = this.props;
  26. return (
  27. <div className={`g-tag-block ${className} ${theme}`}>
  28. <div className="g-tag-block-tag">{tag}</div>
  29. {children}
  30. </div>
  31. );
  32. }
  33. }
  34. export class LinkBlock extends Component {
  35. render() {
  36. const { className = '', theme = 'default', title, sub, onClick } = this.props;
  37. return (
  38. <div className={`g-link-block ${className} ${theme}`} onClick={() => onClick && onClick()}>
  39. <div className="g-link-block-title">{title}</div>
  40. <div className="g-link-block-sub">{sub}</div>
  41. <div className="g-link-block-icon">
  42. <Icon type="right" size="xxs" color="#fff" />
  43. </div>
  44. </div>
  45. );
  46. }
  47. }
  48. export class CourseBlock extends Component {
  49. render() {
  50. const { data } = this.props;
  51. return (
  52. <Block className="course-block" onClick={() => {
  53. linkTo(`/product/course/detail/${data.id}`);
  54. }}>
  55. <div className="title">{data.title}</div>
  56. <div className="block-body">
  57. <Assets name="c_b" src={data.cover} />
  58. <div className="info">
  59. <div className="teacher">
  60. 授课老师<span>{data.teacher}</span>
  61. </div>
  62. <div className="desc">
  63. {data.comment}
  64. </div>
  65. <div className="division" />
  66. <div className="data">
  67. {CrowdMap[data.crowd] && <Tag size="small">适合{CrowdMap[data.crowd]}</Tag>}
  68. <div className="result">
  69. 优质回答<span>{data.askNumber}</span>
  70. </div>
  71. </div>
  72. </div>
  73. </div>
  74. </Block>
  75. );
  76. }
  77. }
  78. export class CourseCoBlock extends Component {
  79. render() {
  80. const { theme, data } = this.props;
  81. return (
  82. <TagBlock className="course-co-block" theme={theme} tag={''} onClick={() => {
  83. linkTo(`/product/course/detail/${data.id}`);
  84. }}>
  85. <div className="title">{data.title}</div>
  86. <div className="info">
  87. <div className="teacher">
  88. 授课老师<span>{data.teacher}</span>
  89. </div>
  90. {CrowdMap[data.crowd] && <Tag size="small">适合{CrowdMap[data.crowd]}</Tag>}
  91. </div>
  92. <div className="desc">
  93. {data.comment}
  94. </div>
  95. </TagBlock>
  96. );
  97. }
  98. }
  99. export class DataBlock extends Component {
  100. render() {
  101. const { data } = this.props;
  102. return (
  103. <Block className="data-block" onClick={() => {
  104. linkTo(`/product/data/detail/${data.id}`);
  105. }}>
  106. <Assets name="d_b" src={data.cover} />
  107. <div className="info">
  108. <div className="title">{data.title}</div>
  109. <div className="desc">{data.comment}</div>
  110. <div className="division" />
  111. <div className="data">
  112. <div className="people">{data.saleNumber}人已购</div>
  113. <Money value={data.price} />
  114. </div>
  115. </div>
  116. </Block>
  117. );
  118. }
  119. }
  120. export class BuyBlock extends Component {
  121. render() {
  122. const { theme } = this.props;
  123. return (
  124. <TopBlock className="buy-block" theme={theme}>
  125. <div className="block-left">
  126. <div className="title">
  127. <Tag theme="border" radius size="small">
  128. 已到期
  129. </Tag>
  130. VIP会员
  131. </div>
  132. <div className="date">有效期:2019-11-20</div>
  133. <div className="desc">请访问千行 GMAT 官网开通使用</div>
  134. </div>
  135. <div className="block-right">
  136. <div className="btn">
  137. <Button radius>开通</Button>
  138. </div>
  139. <div className="tip">¥888/ 3个月</div>
  140. </div>
  141. </TopBlock>
  142. );
  143. }
  144. }