sceneryDetails.jsx 6.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. import CustomNav from '@/components/CustomNav'
  2. import ax from '@/assets/icons/housemantj/onlove.png'
  3. import dw from '@/assets/icons/housemantj/地址.png'
  4. import titlejd from '@/assets/icons/housemantj/推荐景点.png'
  5. import titlems from '@/assets/icons/housemantj/推荐美食.png'
  6. import showMore from '@/assets/icons/housemantj/查看更多.png'
  7. import share from '@/assets/icons/housemantj/景点分享.png'
  8. import good from '@/assets/icons/housemantj/景点爆赞.png'
  9. import baozan from '@/assets/icons/housemantj/爆赞.png'
  10. import weibaozan from '@/assets/icons/housemantj/未赞.png'
  11. import zhuandao from "@/assets/icons/housemantj/backTop.png";
  12. import withLayout from '@/layouts'
  13. import { useState, useEffect} from 'react'
  14. import { getTouristDetail, getExtendContent, getRecommendList } from '@/services/home'
  15. import { Swiper, SwiperItem, Button } from '@tarojs/components';
  16. import useSave from "@/utils/hooks/useSave"
  17. import useLike from "@/utils/hooks/useLike"
  18. import Cards from '@/components/foodCards/foodCards.jsx'
  19. import Taro, { useShareAppMessage } from '@tarojs/taro'
  20. import Extend from '../components/Extend/extend'
  21. import './sceneryDetails.less'
  22. export default withLayout((props) => {
  23. const { router, person, location } = props
  24. const { id } = props.router.params
  25. const [detail, setDetail] = useState({})
  26. const [isSaved, toggleSave] = useSave(detail.isSaved, 'tourist', id)
  27. const [isLike, toggleLike] = useLike(detail.isLike, 'tourist', id)
  28. const [distance, setDistance] = useState()
  29. //banner图集数组
  30. const [imglist, setimglist] = useState([])
  31. const [index, setIndex] = useState(0)
  32. const handchange = (e) => {
  33. setIndex(e.detail.current)
  34. }
  35. //本店指南
  36. const [extend, setExtend] = useState([])
  37. //当前指南总数
  38. const [newextNum, setNewextNum] = useState(0)
  39. //全部指南个数
  40. const [AllextNum, setAllextNum] = useState(0)
  41. //指南当前页数
  42. const [epage, setepage] = useState(2)
  43. const extendMore = () => {
  44. setepage(epage + 1)
  45. getExtendContent('tourist', id, { pageNum: epage }).then((res) => {
  46. setExtend([...extend, ...res.records])
  47. setNewextNum(newextNum + res.records.length)
  48. })
  49. }
  50. // 推荐套餐列表
  51. const [recommend, setRecommend] = useState([])
  52. const openMap = () => {
  53. const [lng, lat] = detail.location.split(',')
  54. Taro.openLocation({
  55. longitude: lng - 0,
  56. latitude: lat - 0,
  57. name: detail.touristName,
  58. address: detail.address,
  59. scale: 12,
  60. })
  61. }
  62. useEffect(() => {
  63. if (id) {
  64. getTouristDetail(id).then((res) => {
  65. setDetail(res)
  66. setimglist(res.imageList || [])
  67. getRecommendList({ location: res.locaton }).then((res2) => {
  68. setRecommend(res2 || [])
  69. })
  70. })
  71. getExtendContent('tourist', id).then((res) => {
  72. setExtend(res.records || [])
  73. setAllextNum(res.total)
  74. setNewextNum(res.records.length)
  75. })
  76. } else {
  77. getRecommendList({ location }).then((res2) => {
  78. setRecommend(res2 || [])
  79. })
  80. }
  81. }, [id, location])
  82. // 分享
  83. useShareAppMessage(() => {
  84. return {
  85. title: detail.touristName,
  86. path: `/pages/details/mjDetails/sceneryDetails?id=${id}`,
  87. imageUrl: detail.poster,
  88. }
  89. })
  90. return (
  91. <view className='page-index'>
  92. <view className='index-navbar'>
  93. <CustomNav title='十公里' />
  94. </view>
  95. <view style={{ overflow: 'hidden', padding: '0 30rpx', height: '100%', background: '#F8F8F8' }}>
  96. <scroll-view scroll-y="true" style={{ height: '100%' }}>
  97. <view className='storeDetails'>
  98. <Swiper
  99. className='.swiper'
  100. circular
  101. current={index}
  102. onChange={handchange}
  103. >
  104. {
  105. imglist.map((item) =>
  106. <SwiperItem>
  107. <image src={item.url} className='storeImage' >
  108. <view className='tpPage'>
  109. <text>{index + 1}/{imglist.length}</text>
  110. </view>
  111. </image>
  112. </SwiperItem>
  113. )
  114. }
  115. </Swiper>
  116. <view className='storeJs'>
  117. <view className='introduce'>
  118. <text className='storeName'>{detail.touristName}</text>
  119. </view>
  120. <view className='bz'>
  121. <image src={baozan} style={{ width: '15px', height: '15px', marginRight: '10px', marginBottom: '-2px' }} />
  122. <text className='bzRight'>爆赞{detail.likeNum}</text>
  123. </view>
  124. <view className='wz'>{detail.address}</view>
  125. <view className='dpPosition' onClick={openMap}>
  126. <image src={dw} className='dwTip' />
  127. <view className='distance'>{distance}公里<image src={zhuandao} className="zhuandao" /></view>
  128. </view>
  129. </view>
  130. </view>
  131. <view className='jdjs'>
  132. <view>{detail.description}</view>
  133. <view className='line'></view>
  134. <view className='sc' onClick={toggleSave}>
  135. <image className='scTip' src={isSaved > 0 ? ax : good} /><text>{isSaved > 0 ? '已收藏' : '加入收藏'}</text>
  136. </view>
  137. </view>
  138. <view style={{ position: 'relative', display: extend == '' ? 'none' : '' }}>
  139. <view className='title'>
  140. <image src={titlejd} />景点介绍
  141. </view>
  142. {(extend || []).map((item) => <Extend item={item} />)}
  143. <view className='showMore' style={{ display: newextNum == AllextNum ? 'none' : '' }} onClick={extendMore}>
  144. <view>点击查看更多</view>
  145. <image src={showMore} className='moreTip' />
  146. </view>
  147. </view>
  148. <view style={{ position: 'relative', display: recommend == '' ? 'none' : '' }}>
  149. <view className='title'>
  150. <image src={titlems} />老板推荐好吃的
  151. </view>
  152. {(recommend || []).map((item) => <Cards item={item} />)}
  153. </view>
  154. <view className='bottom'>已经到底了~</view>
  155. </scroll-view>
  156. </view>
  157. <view className='bottomTab'>
  158. <Button openType='share' className='sharebtn'>分享</Button>
  159. <view className='tab'>
  160. <image className='share' src={share} />分享
  161. </view>
  162. <view className='tab' onClick={toggleLike}>
  163. <image className='good' style={{top:'1px'}} src={isLike > 0 ? baozan : weibaozan} />{isLike > 0 ? '已爆赞' : '爆赞'}
  164. </view>
  165. <view className='tab' onClick={toggleSave}>
  166. <image className='collection' src={isSaved > 0 ? ax : good} />{isSaved > 0 ? '已收藏' : '加入收藏'}
  167. </view>
  168. </view>
  169. </view>
  170. )
  171. })