Recharge.jsx 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. import React, { Component } from 'react'
  2. import { getCoinRechargeItemsGuest, addCoinRechargeOrderGuest, addPayOrderGuest } from '@/services/common'
  3. import styles from './Recharge.less'
  4. import iconGold from '@/assets/icon_gold.png'
  5. import iconDefaultAvatar from '@/assets/icon_default_avatar.png'
  6. import { notification, Modal } from 'antd'
  7. import Login from './Login'
  8. class Recharge extends Component {
  9. constructor (props) {
  10. super(props)
  11. this.state = {
  12. choosenItem: {},
  13. visible: false,
  14. userInfo: {},
  15. }
  16. }
  17. componentDidMount () {
  18. const userString = localStorage.userInfo
  19. const { no, amount, res } = this.props.location.query
  20. if (userString) {
  21. const json = JSON.parse(userString)
  22. this.setState({ userInfo: json })
  23. }
  24. if (res === '1') {
  25. notification.success({
  26. message: '充值成功',
  27. description: <div><p>订单号: {no}</p><p>支付金额: {amount}</p> </div>,
  28. duration: 0
  29. })
  30. }
  31. this.getCoinRechargeItemsGuest()
  32. }
  33. // 获取充值项目
  34. getCoinRechargeItemsGuest = async () => {
  35. const _state = {}
  36. try {
  37. const { code, data } = await getCoinRechargeItemsGuest()
  38. if (code === 'OK' && data) {
  39. const { list } = data
  40. const payAliPc = list && list.find(item => item.payWay === 204)
  41. _state.payAliPc = (payAliPc && payAliPc.items) || []
  42. }
  43. } catch (e) {
  44. console.log(e)
  45. }
  46. this.setState(_state)
  47. }
  48. onChoose = (item) => () => {
  49. this.setState({ choosenItem: item })
  50. }
  51. // 充值
  52. onRecharge = async (e) => {
  53. e.preventDefault()
  54. const { choosenItem, userInfo } = this.state
  55. if (!choosenItem || !choosenItem.itemId) {
  56. notification.error({message: '请选择充值金额'})
  57. return
  58. }
  59. if (!userInfo || !userInfo.userId) {
  60. notification.error({ message: '请先登录' })
  61. return
  62. }
  63. if (this.state.uploading) {
  64. return
  65. }
  66. this.setState({ uploading: true })
  67. // 创建金币充值订单
  68. const { code, data } = await addCoinRechargeOrderGuest({
  69. itemId: choosenItem.itemId, userId: userInfo.userId
  70. })
  71. if (code === 'OK' && data) {
  72. const { orderId } = data
  73. this.addPayOrderGuest(orderId)
  74. }
  75. }
  76. addPayOrderGuest = async (orderId) => {
  77. const { code, data } = await addPayOrderGuest({ orderId })
  78. if (code === 'OK' && data) {
  79. const { payParams } = data
  80. const node = document.createElement('div')
  81. node.innerHTML = payParams
  82. document.body.appendChild(node)
  83. if (document.forms[0]) {
  84. document.forms[0].submit();
  85. }
  86. }
  87. this.setState({ uploading: false })
  88. }
  89. // 登录
  90. onLogin = () => {
  91. this.setState({ visible: true })
  92. }
  93. onModalCancel = () => {
  94. this.setState({ visible: false })
  95. }
  96. // 登录成功
  97. onLoginOk = (data) => {
  98. localStorage.userInfo = JSON.stringify(data)
  99. this.setState({ visible: false, userInfo: data })
  100. }
  101. // 退出登录
  102. onLoginOut = () => {
  103. localStorage.removeItem('userInfo')
  104. this.setState({
  105. userInfo: {}
  106. })
  107. }
  108. render () {
  109. const { payAliPc, choosenItem, visible, userInfo, uploading, payParams } = this.state
  110. return (
  111. <div className={styles['wrap']}>
  112. <div className={styles['header-wrap']}>
  113. <div className={styles['user-default-info']} onClick={this.onLogin} hidden={userInfo && userInfo.userId}>
  114. <img src={iconDefaultAvatar} alt=""/>
  115. <span>登录</span>
  116. </div>
  117. <div className={styles['user-info']} hidden={!userInfo || !userInfo.userId}>
  118. <img src={userInfo.userAvatar} alt=""/>
  119. <div className={styles['user-name']}>
  120. <h4>{userInfo.userName}</h4>
  121. <p>ID:{userInfo.userId}</p>
  122. </div>
  123. </div>
  124. <div hidden={!userInfo || !userInfo.userId} onClick={this.onLoginOut} className={styles['logout-btn']}>
  125. 退出登录
  126. </div>
  127. </div>
  128. <div className={styles['content-wrap']}>
  129. <div className={styles['banner-bg']}></div>
  130. <div className={styles['main-content-wrap']}>
  131. <div className={styles['list-wrap']}>
  132. {
  133. payAliPc && payAliPc.map((item) => (
  134. <div
  135. key={item.itemId}
  136. className={styles['list-item-wrap']}
  137. >
  138. <div
  139. className={
  140. `${styles['list-item']} ${choosenItem && choosenItem.itemId === item.itemId ? styles['list-item-active'] : ''}`
  141. }
  142. onClick={this.onChoose(item)}
  143. >
  144. <div className={styles['item-top']}>
  145. <img src={iconGold} alt=""/>
  146. <span>{item.itemCoin}</span>
  147. </div>
  148. <div className={styles['item-price']}>¥ {item.itemPrice}</div>
  149. </div>
  150. </div>
  151. ))
  152. }
  153. </div>
  154. <div className={styles['recharge-btn-wrap']}>
  155. <a
  156. href="#"
  157. className={`${styles['recharge-btn']} ${uploading?styles['recharge-btn-loading']:''}`}
  158. onClick={this.onRecharge}
  159. >充值</a>
  160. </div>
  161. </div>
  162. </div>
  163. <Login
  164. visible={visible}
  165. onCancel={this.onModalCancel}
  166. onOk={this.onLoginOk}
  167. />
  168. </div>
  169. )
  170. }
  171. }
  172. export default Recharge