page.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. import React from 'react';
  2. import './index.less';
  3. import Page from '@src/containers/Page';
  4. import { Checkbox } from 'antd';
  5. // import Assets from '@src/components/Assets';
  6. import { getMap } from '@src/services/Tools';
  7. import Button from '../../../components/Button';
  8. import Money from '../../../components/Money';
  9. import { Order } from '../../../stores/order';
  10. import { Main } from '../../../stores/main';
  11. import { ServiceKey, OrderInfoMap } from '../../../../Constant';
  12. const ServiceKeyMap = getMap(ServiceKey, 'value', 'label');
  13. export default class extends Page {
  14. initState() {
  15. return {};
  16. }
  17. initData() {
  18. const { id } = this.params;
  19. Order.getOrder(id).then(order => {
  20. order.packageMap = {};
  21. (order.packages || []).forEach(row => {
  22. order.packageMap[row.id] = row;
  23. });
  24. order.courseMap = {};
  25. (order.courses || []).forEach(row => {
  26. order.courseMap[row.id] = row;
  27. });
  28. order.dataMap = {};
  29. (order.datas || []).forEach(row => {
  30. order.dataMap[row.id] = row;
  31. });
  32. order.checkouts.forEach(checkout => {
  33. checkout.info = OrderInfoMap[checkout.productType];
  34. switch (checkout.productType) {
  35. case 'service':
  36. checkout.title = ServiceKeyMap[checkout.service];
  37. checkout.info = checkout.info[checkout.service];
  38. break;
  39. case 'data':
  40. checkout.title = order.dataMap[checkout.productId].title;
  41. break;
  42. case 'course_package':
  43. checkout.title = order.packageMap[checkout.productId].title;
  44. break;
  45. case 'course':
  46. checkout.title = order.courseMap[checkout.productId].title;
  47. break;
  48. default:
  49. }
  50. });
  51. const [checkout] = order.checkouts.filter(row => row.parentId === 0);
  52. this.setState({ order, checkout });
  53. });
  54. Main.getContract('course').then(result => {
  55. this.setState({ contract: result });
  56. });
  57. }
  58. pay() {
  59. const { id } = this.params;
  60. Order.wechatJs(id).then(() => { });
  61. }
  62. renderView() {
  63. const { order = {}, contract = {}, checkout = {} } = this.state;
  64. const { info = {}, productType } = checkout;
  65. let content = '';
  66. switch (productType) {
  67. case 'data':
  68. content = this.renderData();
  69. break;
  70. case 'course_package':
  71. content = this.renderCoursePackage();
  72. break;
  73. case 'course':
  74. case 'service':
  75. content = this.renderSingle();
  76. break;
  77. default:
  78. }
  79. return (
  80. <div className="detail">
  81. <div className="title" style={{ marginBottom: 0 }}>
  82. 商品信息
  83. </div>
  84. {content}
  85. {info.refund_policy && [< div className="title">退款政策</div>,
  86. <div className="desc">本产品为虚拟产品,购买成功后不支持退款。</div>]}
  87. {info.copyright_notes && [<div className="title">版权说明</div>,
  88. <div className="desc">本商品仅限购买者本人使用,不可商用和传播。</div>]}
  89. {order.productTypes && order.productTypes.indexOf('course') > 0 && <div className="agree">
  90. <Checkbox checked />
  91. 我已阅读并同意 <a onClick={() => this.setState({ showContract: true })}>{contract.title}</a>
  92. </div>}
  93. <div className="fixed">
  94. <div className="tip">*若在购买过程中遇到问题,请联系千行小助手协助解决</div>
  95. <div className="fee">
  96. 应付: <Money value={order.money} size="lager" />
  97. </div>
  98. <Button
  99. width={110}
  100. className="f-r"
  101. radius
  102. onClick={() => {
  103. this.pay();
  104. }}
  105. >
  106. 立即购买
  107. </Button>
  108. </div>
  109. </div >
  110. );
  111. }
  112. renderData() {
  113. const { checkout } = this.state;
  114. return (
  115. <div className="info data">
  116. <div className="info-block">
  117. {checkout.title} <Money className="f-r" value={checkout.money} />
  118. </div>
  119. <div className="info-block">
  120. 开通有效期 <span className="f-r">{checkout.expireDays ? `${checkout.expireDays}天` : '永久'}</span>
  121. </div>
  122. </div>
  123. );
  124. }
  125. renderCoursePackage() {
  126. const { checkout, order } = this.state;
  127. return (
  128. <div className="info course-package">
  129. <div className="info-block">
  130. {checkout.title} <Money className="f-r" value={checkout.money} />
  131. </div>
  132. <div className="info-block">
  133. {order.checkouts.map(row => {
  134. if (row.parentId === 0) return null;
  135. return <div className="info-item">
  136. {row.title} <span className="f-r">开通有效期: {checkout.expireDays ? `${checkout.expireDays}天` : '永久'} 使用有效期: {checkout.useExpireDays ? `${checkout.useExpireDays}天` : '永久'}</span>
  137. </div>;
  138. })}
  139. </div>
  140. </div>
  141. );
  142. }
  143. renderSingle() {
  144. const { checkout } = this.state;
  145. console.log(checkout);
  146. return (
  147. <div className="info single">
  148. <div className="info-block">
  149. {checkout.title} <Money className="f-r" value={checkout.money} />
  150. </div>
  151. <div className="info-block">
  152. 开通有效期 <span className="f-r">{checkout.expireDays ? `${checkout.expireDays}天` : '永久'}</span>
  153. </div>
  154. <div className="info-block">
  155. 使用有效期 <span className="f-r">{checkout.useExpireDays ? `${checkout.useExpireDays}天` : '永久'}</span>
  156. </div>
  157. </div>
  158. );
  159. }
  160. }