index.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import React, {Component} from 'react'
  2. import {withRouter} from 'react-router-dom'
  3. import {Query} from "react-apollo"
  4. import gql from "graphql-tag"
  5. import {NavBar, Icon, ActivityIndicator, Badge} from 'antd-mobile'
  6. import {productbyid} from "../../../utils/gql"
  7. import './index.css'
  8. class Detail extends Component {
  9. constructor(props) {
  10. super(props)
  11. this.state = {
  12. id: ''
  13. }
  14. }
  15. componentWillMount() {
  16. let {location} = this.props
  17. if(location && location.state) {
  18. this.setState({
  19. id: location.state.id
  20. })
  21. }
  22. }
  23. render() {
  24. let {id} = this.state
  25. let contentHeight = window.innerHeight
  26. return (
  27. <div className='detail-wrap' style={{height: contentHeight}}>
  28. <div className='detail-navbar-wrap navbar'>
  29. <NavBar
  30. mode="light"
  31. icon={<Icon type="left"/>}
  32. onLeftClick={() => {this.props.history.go(-1)}}
  33. >商品详情
  34. </NavBar>
  35. </div>
  36. <Query query={gql(productbyid)} variables={{id}}>
  37. {
  38. ({loading, error, data}) => {
  39. if (loading) {
  40. return (
  41. <div className="loading-center">
  42. <ActivityIndicator text="Loading..." size="large"/>
  43. </div>
  44. )
  45. }
  46. if (error) {
  47. return 'error!'
  48. }
  49. return (
  50. <DetailRender data={data.productbyid} history={this.props.history}/>
  51. )
  52. }
  53. }
  54. </Query>
  55. </div>
  56. )
  57. }
  58. }
  59. export default withRouter(Detail)
  60. class DetailRender extends Component {
  61. constructor(props) {
  62. super(props)
  63. this.state = {
  64. cartCount:sessionStorage.getItem('cartCount')
  65. }
  66. }
  67. render() {
  68. let {data} = this.props
  69. let {cartCount} = this.state
  70. return (
  71. <div className='detail-wrapper content-wrap'>
  72. <div className='detail-simple-show'>
  73. <div className='detail-img' style={{backgroundImage: "url('"+ data.img + "')"}}/>
  74. <div className='detail-intro'>
  75. <div className='detail-name detail-padding'>{data.name}</div>
  76. <div className='detail-price detail-padding'>
  77. <span>¥{data.price}</span>&nbsp;&nbsp;
  78. <span>¥{data.price}</span>
  79. <span className='detail-stock'>库存 {data.stock}</span>
  80. </div>
  81. </div>
  82. </div>
  83. <div className='detail-complicate-show'>
  84. <div className='detail-padding detail-complicate-title'>商品信息</div>
  85. <div>通过商品详情图片展示</div>
  86. </div>
  87. <div className='detail-footer'>
  88. <div className='detail-bottom'>
  89. <span className='detail-bottom-icon border-right' onClick={()=>{this.props.history.push({pathname: '/home'})}}>
  90. <div className='detail-icon detail-icon-shop'/>
  91. </span>
  92. <span className='detail-bottom-icon' onClick={()=>{this.props.history.push({pathname: '/cart'})}}>
  93. <div className='detail-icon detail-icon-cart'/>
  94. <Badge text={cartCount} overflowCount={90} hot>
  95. <span style={{display: 'inline-block' }} />
  96. </Badge>
  97. </span>
  98. <span className='detail-bottom-button add' onClick={()=>{}}>加入购物车</span>
  99. <span className='detail-bottom-button buy' onClick={()=>{}}>立即购买</span>
  100. </div>
  101. </div>
  102. </div>
  103. )
  104. }
  105. }