index.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import React, { Component } from 'react';
  2. import './index.less';
  3. import Assets from '@src/components/Assets';
  4. import { formatMoney } from '@src/services/Tools';
  5. import Modal from '../Modal';
  6. import Tabs from '../Tabs';
  7. import { SpecialRadioGroup } from '../Radio';
  8. import Invite from '../Invite';
  9. import Button from '../Button';
  10. import { Main } from '../../stores/main';
  11. import { Order } from '../../stores/order';
  12. import { ServiceParamMap } from '../../../Constant';
  13. export default class extends Component {
  14. constructor(props) {
  15. super(props);
  16. this.state = { tab: '2', pay: '', select: null, auth: true };
  17. Main.getService('vip')
  18. .then(result => {
  19. result.package = result.package.map((row, index) => {
  20. row.label = `${row.title}: ¥${formatMoney(row.price)}`;
  21. row.value = ServiceParamMap.vip[index].value;
  22. return row;
  23. });
  24. this.setState({ service: result });
  25. });
  26. }
  27. select(key) {
  28. Order.speedPay().then(result => {
  29. this.setState({ order: result });
  30. });
  31. this.setState({ select: key });
  32. }
  33. render() {
  34. const { show, onClose } = this.props;
  35. const { tab } = this.state;
  36. return (
  37. <Modal className="vip-renew-modal" show={show} width={630} title="VIP续期" onClose={onClose}>
  38. <div className="vip-renew-wrapper">
  39. <Tabs
  40. border
  41. size="small"
  42. active={tab}
  43. width={80}
  44. tabs={[{ key: '1', title: '购买' }, { key: '2', title: '免费领取' }]}
  45. onChange={key => this.setState({ tab: key })}
  46. />
  47. {this[`renderTab${tab}`]()}
  48. </div>
  49. </Modal>
  50. );
  51. }
  52. renderTab1() {
  53. const { pay, select, service = {}, order } = this.state;
  54. return (
  55. <div className="tab-1-layout">
  56. <div className="select-layout">
  57. <SpecialRadioGroup
  58. list={service.package || []}
  59. value={select}
  60. width={150}
  61. space={10}
  62. onChange={key => this.select(key)}
  63. />
  64. </div>
  65. {order && <div className="pay-layout">
  66. <Tabs
  67. border
  68. size="small"
  69. active={pay}
  70. width={80}
  71. tabs={[{ key: 'alipay', title: '支付宝' }, { key: 'wechatpay', title: '微信' }]}
  72. render={item => <Assets name={item.key} />}
  73. onChange={key => this.setState({ pay: key })}
  74. />
  75. <div className="qrcode">
  76. <Assets name="qrcode" />
  77. </div>
  78. <div className="t">请使用手机微信或支付宝扫码付款</div>
  79. <div className="t">支付金额: ¥ {order.money}</div>
  80. </div>}
  81. </div>
  82. );
  83. }
  84. renderTab2() {
  85. const { data, onReal, onPrepare } = this.props;
  86. return (
  87. <div className="tab-2-layout">
  88. <div className="list">
  89. <div className="item">
  90. {data.bindReal && <span className="over">已完成</span>}
  91. <Assets className="icon" name="realname2" />
  92. <div className="t">
  93. <Assets name="gift" />
  94. 6个月
  95. </div>
  96. <Button size="small" radius disabled={data.bindReal} onClick={() => {
  97. onReal();
  98. }}>
  99. 实名认证
  100. </Button>
  101. </div>
  102. <div className="item">
  103. <Assets className="icon" name="invite" />
  104. <div className="t">
  105. <Assets name="gift" />
  106. 7天/每位好友
  107. </div>
  108. <Button size="small" radius>
  109. 邀请好友
  110. </Button>
  111. </div>
  112. <div className="item">
  113. {data.bindPrepare && <span className="over">已完成</span>}
  114. <Assets className="icon" name="information2" />
  115. <div className="t">
  116. <Assets name="gift" />
  117. 1个月
  118. </div>
  119. <Button size="small" radius disabled={data.bindPrepare} onClick={() => {
  120. onPrepare();
  121. }}>
  122. 完善信息
  123. </Button>
  124. </div>
  125. </div>
  126. <Invite data={data} />
  127. </div>
  128. );
  129. }
  130. }