index.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. import {Component} from "react"
  2. import React from "react"
  3. import {userAddressbyprops} from "../../../../utils/gql"
  4. import {ActivityIndicator, NavBar} from 'antd-mobile'
  5. import {Icon, Row, Col} from 'antd'
  6. import {Query} from "react-apollo"
  7. import gql from "graphql-tag"
  8. import './index.css'
  9. import SingleAddress from "./singleaddress"
  10. class Address extends Component {
  11. constructor(props) {
  12. super(props)
  13. this.state = {
  14. single: false,
  15. addressID: '',
  16. addressChoosed: {}
  17. }
  18. }
  19. changePage = (bool) => {
  20. this.setState({
  21. single: bool
  22. })
  23. }
  24. changeAddress = (address) => {
  25. this.setState({
  26. addressID: address.id,
  27. addressChoosed: address
  28. })
  29. }
  30. getDefaultAddress = (data) => (
  31. data.find(data => data.default === 1)
  32. )
  33. getOtherAddress = (data) => {
  34. let defaultAddressIndex = data.find(data => data.default === 1)
  35. let dataCopy = [...data]
  36. dataCopy.splice(defaultAddressIndex, 1)
  37. return dataCopy
  38. }
  39. render() {
  40. let {addressChoosed, addressID} = this.state
  41. return (
  42. <div>
  43. <div className='navbar'>
  44. <NavBar
  45. mode="light"
  46. icon={<Icon type="left"/>}
  47. onLeftClick={() => {
  48. this.props.history.go(-2)
  49. }}
  50. >地址管理</NavBar>
  51. </div>
  52. <div className='content-wrap'>
  53. <Query query={gql(userAddressbyprops)} variables={{user_id: "obR_j5GbxDfGlOolvSeTdZUwfpKA"}}>
  54. {
  55. ({loading, error, data}) => {
  56. if (loading) {
  57. return (
  58. <div className="loading-center">
  59. <ActivityIndicator text="Loading..." size="large"/>
  60. </div>
  61. )
  62. }
  63. if (error) {
  64. return 'error!'
  65. }
  66. data = data.userAddressbyprops
  67. return (
  68. <div>
  69. {
  70. this.state.single ?
  71. <SingleAddress addressID={addressID} addressChoosed={addressChoosed} changePage={this.changePage}/>
  72. :
  73. <AddressRender
  74. defaultAddress={this.getDefaultAddress(data)}
  75. otherAddress={this.getOtherAddress(data)}
  76. changePage={this.changePage}
  77. changeAddress={this.changeAddress}
  78. history={this.props.history}
  79. />
  80. }
  81. </div>
  82. )
  83. }
  84. }
  85. </Query>
  86. </div>
  87. </div>
  88. )
  89. }
  90. }
  91. export default Address
  92. class AddressRender extends Component {
  93. constructor(props) {
  94. super(props)
  95. this.state = {}
  96. }
  97. changeOrdersAddress =(address) => {
  98. console.log('address',address)
  99. sessionStorage.setItem('ordersAddress',JSON.stringify(address))
  100. this.props.history.go(-2)
  101. }
  102. render() {
  103. let {changePage, changeAddress, defaultAddress, otherAddress} = this.props
  104. return (
  105. <div>
  106. <div className='address-add' onClick={() => {
  107. changePage(true)
  108. changeAddress({id: 'add'})
  109. }}>
  110. <Icon type="plus" style={{fontSize: 22, fontWeight: 800}}/>&nbsp;
  111. 添加新地址
  112. </div>
  113. <div className='default-address'>
  114. <div className='address-card' onClick={() => this.changeOrdersAddress(defaultAddress)}>
  115. <Row className='address-username-telephone'>
  116. <Col span={6} className='address-username ellipsis'>{defaultAddress.username}</Col>
  117. <Col span={14} className='address-phone ellipsis'>{defaultAddress.telephone}&nbsp;&nbsp;
  118. <span className='address-label'>默认</span></Col>
  119. </Row>
  120. <Row>
  121. <Col span={20}
  122. className='address-address'>{defaultAddress.province + defaultAddress.city + defaultAddress.area + defaultAddress.address}</Col>
  123. <Col span={2} offset={2}>
  124. <Icon
  125. type="edit"
  126. style={{fontSize: 14}}
  127. onClick={()=>{
  128. changePage(true)
  129. changeAddress(defaultAddress)
  130. }}
  131. />
  132. </Col>
  133. </Row>
  134. </div>
  135. </div>
  136. <div className='other-address'>
  137. {otherAddress.map(address => {
  138. return (
  139. <div key={address.id} className='address-card' onClick={() => this.changeOrdersAddress(address)}>
  140. <Row className='address-username-telephone'>
  141. <Col span={6} className='address-username ellipsis'>{address.username}</Col>
  142. <Col span={14} className='address-phone ellipsis'>{address.telephone}</Col>
  143. </Row>
  144. <Row>
  145. <Col span={20} className='address-address'>{address.province + address.city + address.area + address.address}</Col>
  146. <Col span={2} offset={2}>
  147. <Icon
  148. type="edit"
  149. style={{fontSize: 14}}
  150. onClick={()=>{
  151. changePage(true)
  152. changeAddress(address)
  153. }}
  154. />
  155. </Col>
  156. </Row>
  157. </div>
  158. )
  159. })}
  160. </div>
  161. </div>
  162. )
  163. }
  164. }