index.js 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. import {Component} from "react"
  2. import React from "react"
  3. import {ActivityIndicator, NavBar, Modal} from 'antd-mobile'
  4. import {Icon, Row, Col, message} from 'antd'
  5. import {Query, Mutation} from "react-apollo"
  6. import gql from "graphql-tag"
  7. import SingleAddress from "./singleaddress"
  8. import {getCookie} from "../../../../utils/cookie"
  9. import {userAddressbyprops, delete_address} from "../../../../utils/gql"
  10. import './index.css'
  11. const alert = Modal.alert
  12. class Address extends Component {
  13. constructor(props) {
  14. super(props)
  15. this.state = {
  16. single: false,
  17. addressID: '',
  18. addressChoosed: {}
  19. }
  20. }
  21. componentWillMount() {
  22. let state = this.props.history.location.state || ''
  23. if (state && state.single) {
  24. this.setState({
  25. single: true,
  26. addressID: 'add'
  27. })
  28. }
  29. }
  30. changePage = (bool) => {
  31. this.setState({
  32. single: bool
  33. })
  34. }
  35. changeAddress = (address) => {
  36. this.setState({
  37. addressID: address.id,
  38. addressChoosed: address
  39. })
  40. }
  41. render() {
  42. let {addressChoosed, addressID, single} = this.state
  43. let user_id = getCookie('user_id')
  44. let navContent = single ? '编辑地址' : '地址管理'
  45. return (
  46. <div>
  47. <div className='navbar'>
  48. <NavBar
  49. mode="light"
  50. icon={<Icon type="left"/>}
  51. onLeftClick={() => {
  52. if(single){
  53. this.changePage(false)
  54. }else {
  55. this.props.history.go(-2)
  56. }
  57. }}
  58. >{navContent}</NavBar>
  59. </div>
  60. <div className='content-wrap'>
  61. <Query query={gql(userAddressbyprops)} variables={{user_id}}>
  62. {
  63. ({loading, error, data, refetch}) => {
  64. if (loading) {
  65. return (
  66. <div className="loading-center">
  67. <ActivityIndicator text="Loading..." size="large"/>
  68. </div>
  69. )
  70. }
  71. if (error) {
  72. return 'error!'
  73. }
  74. data = data.userAddressbyprops
  75. // console.log('address data',data)
  76. let defaultAddress = data.find(data => data.default === 1) || ''
  77. return (
  78. <div>
  79. {
  80. this.state.single ?
  81. <SingleAddress
  82. addressID={addressID}
  83. addressChoosed={addressChoosed}
  84. history={this.props.history}
  85. user_id={user_id}
  86. defaultAddress={defaultAddress}
  87. changePage={this.changePage}
  88. refetch={refetch}
  89. />
  90. :
  91. <AddressRender
  92. shoppingAddress={data}
  93. changePage={this.changePage}
  94. changeAddress={this.changeAddress}
  95. history={this.props.history}
  96. refetch={refetch}
  97. />
  98. }
  99. </div>
  100. )
  101. }
  102. }
  103. </Query>
  104. </div>
  105. </div>
  106. )
  107. }
  108. }
  109. export default Address
  110. class AddressRender extends Component {
  111. constructor(props) {
  112. super(props)
  113. this.state = {}
  114. }
  115. changeOrdersAddress =(address) => {
  116. // console.log('address',address,this.props.history)
  117. let {history} = this.props
  118. let prePage = history.location.state.prePage
  119. if(prePage){
  120. sessionStorage.setItem('ordersAddress',JSON.stringify(address))
  121. this.props.history.go(-2)
  122. }
  123. }
  124. deleteAddress = (delete_address, deleteId) => {
  125. alert('', `确定要删除这个收货地址吗?`, [
  126. { text: '取消', onPress: () => console.log('cancel') },
  127. {
  128. text: '确定',
  129. onPress: () => {
  130. delete_address({variables:{id:deleteId}}).then((data)=>{
  131. // console.log('delete data',data)
  132. let num = data.data.deleteuserAddress.replace(/[^0-9]/ig,"")
  133. if(num){
  134. message.success('删除成功')
  135. this.props.refetch()
  136. }
  137. })
  138. }
  139. }
  140. ])
  141. }
  142. render() {
  143. let {changePage, changeAddress, shoppingAddress} = this.props
  144. return (
  145. <div>
  146. <div className='address-add' onClick={() => {
  147. changePage(true)
  148. changeAddress({id: 'add'})
  149. }}>
  150. <Icon type="plus"/>&nbsp;
  151. 添加新地址
  152. </div>
  153. {
  154. !shoppingAddress.length ?
  155. <div className='kind-empty gray'>
  156. <p>暂无收货地址</p>
  157. <p>点击下方按钮可新增地址</p>
  158. </div>:''
  159. }
  160. {
  161. shoppingAddress.length ?
  162. <div className='other-address'>
  163. {shoppingAddress.map(address => {
  164. return (
  165. <div key={address.id} className='address-card'>
  166. <div className='address-info' onClick={() => this.changeOrdersAddress(address)}>
  167. <Row className='address-username-telephone'>
  168. <Col span={6} className='address-username ellipsis'>{address.username}</Col>
  169. <Col span={14} className='address-phone ellipsis'>
  170. {address.telephone}&nbsp;&nbsp;
  171. {address.default ?
  172. <span className='address-label'>默认</span>:''
  173. }
  174. </Col>
  175. </Row>
  176. <Row>
  177. <Col span={24} className='address-address'>{address.province + address.city + address.area + address.address}</Col>
  178. </Row>
  179. </div>
  180. <div className='address-edit'>
  181. <Icon
  182. type="edit"
  183. onClick={()=>{
  184. changePage(true)
  185. changeAddress(address)
  186. }}
  187. />
  188. </div>
  189. <Mutation mutation={gql(delete_address)}
  190. onError={error=>console.log('error',error)}
  191. >
  192. {(delete_address,{ loading, error }) => (
  193. <div className='address-edit'>
  194. <Icon
  195. type="delete"
  196. onClick={()=>{
  197. this.deleteAddress(delete_address,address.id)
  198. }}
  199. />
  200. </div>
  201. )}
  202. </Mutation>
  203. </div>
  204. )
  205. })}
  206. </div>:''
  207. }
  208. </div>
  209. )
  210. }
  211. }