detail.vue 39 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753
  1. <template>
  2. <view class="container" :style="'overflow:' + (showPage ? 'hidden' : 'visible')" v-if="info">
  3. <!-- 顶部分段器区域 -->
  4. <view class="control">
  5. <uni-segmented-control :current="activeIndex" :values="headerList" style-type="text" active-color="#096562" @clickItem="onClickItem" />
  6. </view>
  7. <!-- 顶部民宿图片区域 -->
  8. <view class="banner">
  9. <swiper autoplay circular class="swiper">
  10. <swiper-item class="swiper_item" v-for="(item, current) in info.hotelFileInfoList" :key="item.id" @click="handleClickSwiper(info.hotelFileInfoList, current)">
  11. <img mode="aspectFill" class="img" :src="item.url" />
  12. </swiper-item>
  13. </swiper>
  14. <view class="slogan">
  15. <img src="../../static/index/slogan.png" />
  16. </view>
  17. <!-- 720°全景链接区域 -->
  18. <view class="full" v-if="info.linkProUrl" @click="handleGoPull(info.linkProUrl)">
  19. <img src="../../static/index/full.png" />
  20. 720°全景
  21. </view>
  22. <!-- 收藏按钮区域 -->
  23. <view class="collect">
  24. <uni-fav circle bgColorChecked="#096562" :checked="info.is_collect_hotel" @click="changeCollect(info.is_collect_hotel)" />
  25. </view>
  26. </view>
  27. <!-- 民宿详细信息区域 -->
  28. <view class="detail">
  29. <view class="detail_name">{{ info.hotel_name }}</view>
  30. <view class="detail_info">
  31. <view class="info_left">{{ info.fitupTime }}装修 | {{ info.openTime }}开业</view>
  32. <view class="info_right" @click="goPageDetailInfo">
  33. 设施/详情
  34. <img src="../../static/index/right.png" />
  35. </view>
  36. </view>
  37. <view class="detail_group">
  38. <view class="group_item" v-for="item in info.hconfigList" :key="item.id">
  39. <img :src="item.fileUrl" />
  40. {{ item.name }}
  41. </view>
  42. </view>
  43. <view class="address">
  44. <view class="address_left">{{ info.hposition }}</view>
  45. <view class="address_right">
  46. <view class="right_box" @click="handleMap(info)">
  47. <img src="../../static/index/map.png" />
  48. </view>
  49. <view class="right_box" @click="handlePhone(info.managerPhone)">
  50. <img src="../../static/index/phone.png" />
  51. </view>
  52. </view>
  53. </view>
  54. <view class="distance" v-if="distance">距离我{{ distance }}km</view>
  55. </view>
  56. <!-- 房型信息区域 -->
  57. <view class="body">
  58. <!-- 选择日期区域 -->
  59. <view class="body_header" @click="handleOpen()">
  60. <view class="header_start">
  61. <view class="header_top">{{ getWeek(startTime) }}入住</view>
  62. <view class="header_bottom">{{ startTime.slice(5, 7) }}月{{ startTime.slice(8, 10) }}日</view>
  63. </view>
  64. <view class="header_night">
  65. <view class="night_line"></view>
  66. <view class="night_box">{{ nightNum }}晚</view>
  67. <view class="night_line"></view>
  68. </view>
  69. <view class="header_end">
  70. <view class="header_top">{{ getWeek(endTime) }}离店</view>
  71. <view class="header_bottom">{{ endTime.slice(5, 7) }}月{{ endTime.slice(8, 10) }}日</view>
  72. </view>
  73. </view>
  74. <!-- 日历组件 -->
  75. <uv-calendars
  76. ref="calendar"
  77. range
  78. title="选择日期"
  79. start-text="住店"
  80. end-text="离店"
  81. color="#096562"
  82. confirmColor="#096562"
  83. :selected="selected"
  84. :startDate="earlyTime"
  85. :endDate="lateTime"
  86. @monthSwitch="monthSwitch"
  87. @confirm="handleConfirm"
  88. />
  89. <!-- 房型列表区域 -->
  90. <view class="body_content" v-if="list.length">
  91. <!-- 每一个房型盒子区域 -->
  92. <view class="body_box" v-for="item in list" :key="item.id" @click="handleLookDetail(item)">
  93. <view class="box_left">
  94. <img mode="aspectFill" :src="item.fileInfoList[0].url" />
  95. </view>
  96. <view class="box_center">
  97. <view class="center_top">{{ item.hName }}</view>
  98. <view class="center_center">
  99. <view class="center_item" v-if="item.hAreas">{{ item.hAreas }}㎡ 剩余{{ item.remainRooms }}间</view>
  100. </view>
  101. <view class="center_bottom">
  102. <img v-for="item2 in item.hConfigList" :key="item2.id" class="img" :src="item2.fileUrl" />
  103. </view>
  104. </view>
  105. <view class="box_right">
  106. <view class="right_price">
  107. <text>¥</text>
  108. {{ item.price }}
  109. </view>
  110. <view class="right_btn" :class="{ inactive: item.remainRooms * 1 <= 0 }" @click.stop="goPageAffOrder(item)">订</view>
  111. </view>
  112. </view>
  113. <!-- 点击房型弹窗区域 -->
  114. <uv-popup ref="popup" bgColor="none" :safeAreaInsetBottom="false">
  115. <view class="body_pop">
  116. <!-- 轮播图区域 -->
  117. <swiper indicator-dots circular indicator-color="#FFFFFF" indicator-active-color="#096562" class="pop_swiper">
  118. <swiper-item class="pop_swiper_item" v-for="item in roomInfo.fileInfoList" :key="item.id">
  119. <img class="img" :src="item.url" />
  120. </swiper-item>
  121. </swiper>
  122. <!-- 轮播图关闭图标区域 -->
  123. <img class="pop_icon" src="../../static/index/close.png" @click="handleClosePop" />
  124. <view class="pop_body">
  125. <view class="body_title">{{ roomInfo.hName }}</view>
  126. <view class="body_tags">
  127. <view class="tags_item">
  128. <img class="img" src="../../static/index/place.png" />
  129. {{ roomInfo.hAreas }}㎡
  130. </view>
  131. <view class="tags_item" v-for="item2 in roomInfo.hConfigList" :key="item2.id">
  132. <img class="img" :src="item2.fileUrl" />
  133. {{ item2.name }}
  134. </view>
  135. </view>
  136. <view class="body_title2">费用明细</view>
  137. <view class="body_detail">
  138. <!-- <view class="detail_old">¥{{ roomInfo.price }}</view> -->
  139. <!-- <view class="detail_box">
  140. 黄金会员9折
  141. <text>-¥25</text>
  142. </view>
  143. <view class="detail_box">
  144. 活动
  145. <text>-¥2.5</text>
  146. </view> -->
  147. <view class="detail_new">
  148. 每间每晚
  149. <view class="ml_10 color">¥</view>
  150. <view class="price color">{{ roomInfo.price }}</view>
  151. </view>
  152. </view>
  153. <view class="body_bottom">
  154. <view class="bottom_left" @click="handlePhone(info.managerPhone)">
  155. <img class="img" src="../../static/index/phone2.png" />
  156. 联系商家
  157. </view>
  158. <view class="bottom_right">
  159. <text>¥</text>
  160. {{ roomInfo.price }}
  161. <view class="btn" :class="{ inactive: roomInfo.remainRooms * 1 <= 0 }" @click="goPageAffOrder(roomInfo)">预定</view>
  162. </view>
  163. </view>
  164. </view>
  165. </view>
  166. </uv-popup>
  167. </view>
  168. <view class="noData" v-else>
  169. <img src="../../static/images/noData.png" />
  170. 暂无数据
  171. </view>
  172. </view>
  173. <!-- 评价区域 -->
  174. <view class="evaluate">
  175. <view class="evaluate_title">评价</view>
  176. <view class="evaluate_body">
  177. <!-- 评分区域 -->
  178. <view class="header" v-if="score">
  179. <view class="header_box">
  180. <!-- 总评分区域 -->
  181. <view class="box_left">{{ score }}</view>
  182. <view class="box_right">
  183. <!-- 位置评分区域 -->
  184. <view class="right_item">
  185. <view class="item_info">位置 {{ scoreWz }}</view>
  186. <view class="item_progress">
  187. <progress activeColor="#0BAD8B" backgroundColor="#CCCCCC" stroke-width="10" border-radius="92" :percent="((scoreWz * 1) / 5) * 100" />
  188. </view>
  189. </view>
  190. <!-- 设施评分区域 -->
  191. <view class="right_item">
  192. <view class="item_info">设施 {{ scoreSs }}</view>
  193. <view class="item_progress">
  194. <progress activeColor="#0BAD8B" backgroundColor="#CCCCCC" stroke-width="10" border-radius="92" :percent="((scoreSs * 1) / 5) * 100" />
  195. </view>
  196. </view>
  197. <!-- 服务评分区域 -->
  198. <view class="right_item">
  199. <view class="item_info">服务 {{ scoreFw }}</view>
  200. <view class="item_progress">
  201. <progress activeColor="#0BAD8B" backgroundColor="#CCCCCC" stroke-width="10" border-radius="92" :percent="((scoreFw * 1) / 5) * 100" />
  202. </view>
  203. </view>
  204. <!-- 卫生评分区域 -->
  205. <view class="right_item">
  206. <view class="item_info">卫生 {{ scoreWs }}</view>
  207. <view class="item_progress">
  208. <progress activeColor="#0BAD8B" backgroundColor="#CCCCCC" stroke-width="10" border-radius="92" :percent="((scoreWs * 1) / 5) * 100" />
  209. </view>
  210. </view>
  211. </view>
  212. </view>
  213. </view>
  214. <!-- 每一个评价区域 -->
  215. <view class="evaluate_box" v-for="item in commentList" :key="item.id" @click="handleGoDetail(item)">
  216. <!-- 用户信息区域 -->
  217. <view class="box_userInfo">
  218. <img mode="aspectFill" :src="item.headPhoto" />
  219. <view class="userInfo_msg">
  220. <view class="msg_name">{{ item.userName }}</view>
  221. <view class="msg_star">
  222. <uni-rate readonly activeColor="#FFC300" :size="16" :value="item.score" />
  223. </view>
  224. </view>
  225. </view>
  226. <!-- 入住时间区域 -->
  227. <view class="box_time" v-if="item.liveTime">{{ item.liveTime.slice(0, 10) }}入住,{{ item.commentTime.slice(0, 10) }}发表 | {{ item.houseName }}</view>
  228. <!-- 评价内容区域 -->
  229. <uv-read-more show-height="85rpx" closeText="全文" color="#096663" fontSize="24rpx" textIndent="0" :toggle="true" :shadowStyle="shadowStyle">
  230. <view class="box_content">
  231. {{ item.content }}
  232. </view>
  233. </uv-read-more>
  234. <!-- 图片区域 -->
  235. <view class="box_img">
  236. <img
  237. v-for="(ele, index) in item.url"
  238. :key="index"
  239. mode="aspectFill"
  240. v-if="ele.indexOf('jpg') !== -1 || ele.indexOf('png') !== -1"
  241. :src="ele"
  242. @click.stop="handleClickImg(ele, index)"
  243. />
  244. <video
  245. :id="item.id + index2"
  246. class="video"
  247. :show-fullscreen-btn="false"
  248. :show-play-btn="false"
  249. v-for="(video, index2) in item.url"
  250. :key="index2"
  251. v-if="video.indexOf('mp4') !== -1"
  252. :src="video"
  253. @fullscreenchange="fullscreenchange"
  254. @click.stop="handleClickVideo(item.id + index2)"
  255. ></video>
  256. </view>
  257. </view>
  258. <view class="foot" @click="handleGoPage" v-if="commentList.length">
  259. 查看全部{{ total }}条评价
  260. <img src="../../static/index/right.png" />
  261. </view>
  262. <view class="noData" v-if="commentList.length === 0">
  263. <img src="../../static/images/noData.png" />
  264. 暂无评论
  265. </view>
  266. </view>
  267. </view>
  268. <!-- 周边民宿区域 -->
  269. <view class="rim">
  270. <!-- 标题区域 -->
  271. <view class="rim_title">周边民宿</view>
  272. <!-- 周边民宿列表区域 -->
  273. <view class="rim_body">
  274. <!-- 每一个民宿区域 -->
  275. <view class="rim_box" v-for="item in rimList" :key="item.id" @click="testGo(item)">
  276. <img mode="aspectFill" :src="item.url" />
  277. <view class="box_info">
  278. <view class="info_top">{{ item.name }}</view>
  279. <view class="info_center">{{ item.leave }}</view>
  280. <view class="info_bottom">
  281. <view class="bottom_rate">{{ item.rate }}分</view>
  282. <view class="bottom_num">{{ item.num }}条评论</view>
  283. <view class="bottom_price">
  284. ¥{{ item.price }}
  285. <text>起</text>
  286. </view>
  287. </view>
  288. </view>
  289. </view>
  290. </view>
  291. <!-- 查看全部 -->
  292. <view class="rim_more" @click="test">
  293. 查看全部
  294. <img src="../../static/index/right.png" />
  295. </view>
  296. </view>
  297. <!-- 周边景点区域 -->
  298. <view class="scenicSpot">
  299. <!-- 标题区域 -->
  300. <view class="scenicSpot_title">周边景点</view>
  301. <!-- 周边景点列表区域 -->
  302. <view class="scenicSpot_body">
  303. <!-- 每一个景点区域 -->
  304. <view class="scenicSpot_box" v-for="item in scenicSpotList" :key="item.id">
  305. <img mode="aspectFill" :src="item.url" />
  306. <view class="box_info">
  307. <view class="info_top">{{ item.name }}</view>
  308. <view class="info_center">距您查询酒店直线{{ item.distance }}km</view>
  309. <view class="info_bottom">
  310. <view class="bottom_rate">{{ item.rate }}分</view>
  311. <view class="bottom_num">{{ item.num }}条评论</view>
  312. <view class="bottom_price">
  313. ¥{{ item.price }}
  314. <text>起</text>
  315. </view>
  316. </view>
  317. </view>
  318. </view>
  319. </view>
  320. <!-- 查看全部 -->
  321. <view class="scenicSpot_more" @click="test">
  322. 查看全部
  323. <img src="../../static/index/right.png" />
  324. </view>
  325. </view>
  326. </view>
  327. </template>
  328. <script>
  329. export default {
  330. data() {
  331. return {
  332. // 滚动穿透控制
  333. showPage: false,
  334. // 房型数据数组
  335. list: [],
  336. // 住几晚
  337. nightNum: 1,
  338. // 选择日期数组
  339. dayList: [],
  340. // 酒店信息
  341. info: null,
  342. // 房间信息
  343. roomInfo: {},
  344. // 民宿Id
  345. hotelId: '',
  346. // 是否有定位权限
  347. showLocation: false,
  348. // 是否展示距离
  349. distance: '',
  350. // 入住时间 YYYY-MM-DD
  351. startTime: '',
  352. // 离店时间 YYYY-MM-DD
  353. endTime: '',
  354. // 日历可以选择的最早日期
  355. earlyTime: '',
  356. // 日历可以选择的最晚日期
  357. lateTime: '',
  358. activeIndex: 0,
  359. headerList: ['预定', '评价', '周边'],
  360. // 评价列表数据
  361. commentList: [],
  362. queryDom: null,
  363. // 评价Dom距离页面顶部的距离
  364. domTop: null,
  365. // 周边Dom距离页面顶部的距离
  366. domTopRim: null,
  367. selected: [],
  368. // 总评分
  369. score: '',
  370. // 服务评分
  371. scoreFw: '',
  372. // 设施评分
  373. scoreSs: '',
  374. // 卫生评分
  375. scoreWs: '',
  376. // 位置评分
  377. scoreWz: '',
  378. // 评论总条数
  379. total: null,
  380. // 是否收藏
  381. ischecked: false,
  382. // video 上下文 videoContext 对象
  383. videoContext: null,
  384. // 是否是全屏状态
  385. isFullScreen: false,
  386. rimList: [
  387. {
  388. id: 1726150980,
  389. url: 'https://chtech.ncjti.edu.cn/hotelReservation/fileload/download/16311442750812_8.jpg',
  390. name: '九岭山房民宿',
  391. leave: '金宿',
  392. rate: 4.8,
  393. num: 109,
  394. price: 180
  395. },
  396. {
  397. id: 1102488098,
  398. url: 'https://chtech.ncjti.edu.cn/hotelReservation/fileload/download/1933617026前台.jpg',
  399. name: '云上九岭',
  400. leave: '白金',
  401. rate: 4.5,
  402. num: 21,
  403. price: 880
  404. },
  405. {
  406. id: 1147515780,
  407. url: 'https://chtech.ncjti.edu.cn/hotelReservation/fileload/download/1922593201民宿图片2.jpg',
  408. name: '靖安三闲居民宿',
  409. leave: '白金',
  410. rate: 4.6,
  411. num: 89,
  412. price: 680
  413. },
  414. {
  415. id: 1851521611,
  416. url: 'https://chtech.ncjti.edu.cn/hotelReservation/fileload/download/14323863982h0k15000000ym7ji8285_W_1080_808_R5_D.jpg',
  417. name: '野塘隐夏民宿',
  418. leave: '白金',
  419. rate: 4.7,
  420. num: 81,
  421. price: 650
  422. }
  423. ],
  424. scenicSpotList: [
  425. {
  426. id: 1,
  427. url: 'https://jinganminsu-1320402385.cos.ap-nanjing.myqcloud.com/static//20230922113014_c1d59da5595928a4d865418eeae861b.png',
  428. name: '九仙君澜水上乐园',
  429. distance: 1.3,
  430. rate: 4.8,
  431. num: 69,
  432. price: 160
  433. },
  434. {
  435. id: 2,
  436. url: 'https://jinganminsu-1320402385.cos.ap-nanjing.myqcloud.com/static//20230922112928_113d3f4c04eda11cea9051d516613aa.png',
  437. name: '九仙君澜温泉',
  438. distance: 1.5,
  439. rate: 4.5,
  440. num: 11,
  441. price: 880
  442. },
  443. {
  444. id: 3,
  445. url: 'https://jinganminsu-1320402385.cos.ap-nanjing.myqcloud.com/static//20230922112955_639270c554d315e5a845d6c26ad8548.png',
  446. name: '白沙坪度假村',
  447. distance: 3,
  448. rate: 4.6,
  449. num: 89,
  450. price: 388
  451. },
  452. {
  453. id: 4,
  454. url: 'https://jinganminsu-1320402385.cos.ap-nanjing.myqcloud.com/static//20230922112850_1bba201e62087a806240c668d0f2bf8.png',
  455. name: '百丈山萝卜潭',
  456. distance: 3.5,
  457. rate: 4.7,
  458. num: 81,
  459. price: 550
  460. }
  461. ]
  462. }
  463. },
  464. mounted() {
  465. // 开启转发功能
  466. uni.showShareMenu({
  467. withShareTicket: true,
  468. menus: ['shareAppMessage', 'shareTimeline']
  469. })
  470. },
  471. onLoad(options) {
  472. this.getTimes()
  473. this.hotelId = options.id
  474. this.distance = options.distance === 'undefined' ? false : options.distance
  475. uni.getSetting({
  476. success: (res) => {
  477. this.showLocation = res.authSetting['scope.userLocation']
  478. this.getHotelInfo()
  479. this.getEvaData()
  480. }
  481. })
  482. },
  483. onPageScroll(e) {
  484. if (!this.queryDom) {
  485. this.queryDom = uni.createSelectorQuery().in(this)
  486. this.queryDom
  487. .select('.evaluate')
  488. .boundingClientRect((data) => {
  489. this.domTop = data.top
  490. })
  491. .exec()
  492. this.queryDom
  493. .select('.rim')
  494. .boundingClientRect((data) => {
  495. this.domTopRim = data.top
  496. })
  497. .exec()
  498. }
  499. if (e.scrollTop > this.domTopRim) {
  500. this.activeIndex = 2
  501. } else if (e.scrollTop > this.domTop) {
  502. this.activeIndex = 1
  503. } else {
  504. this.activeIndex = 0
  505. }
  506. },
  507. methods: {
  508. test() {
  509. uni.showToast({
  510. title: '功能开发中',
  511. icon: 'none',
  512. mask: true
  513. })
  514. },
  515. testGo(item) {
  516. this.info = null
  517. this.activeIndex = 0
  518. this.score = ''
  519. this.scoreFw = ''
  520. this.scoreSs = ''
  521. this.scoreWs = ''
  522. this.scoreWz = ''
  523. this.commentList = []
  524. this.getHotelInfo(item.id)
  525. this.getEvaData(item.id)
  526. uni.pageScrollTo({
  527. scrollTop: 0
  528. })
  529. // this.queryDom = null
  530. },
  531. // 进入全屏和退出全屏时触发的回调
  532. fullscreenchange(e) {
  533. this.isFullScreen = e.detail.fullScreen
  534. },
  535. // 点击视频控件时触发的回调
  536. handleClickVideo(id) {
  537. this.videoContext = uni.createVideoContext(id)
  538. if (this.isFullScreen) {
  539. this.videoContext.stop()
  540. this.videoContext.exitFullScreen()
  541. } else {
  542. this.videoContext.requestFullScreen()
  543. this.videoContext.play()
  544. }
  545. },
  546. // 点击收藏按钮回调
  547. async changeCollect(is_collect_hotel) {
  548. let userInfo = uni.getStorageSync('userInfo')
  549. let openid = uni.getStorageSync('openid')
  550. if (userInfo && openid) {
  551. const res = await this.$myRequest({
  552. url: is_collect_hotel ? '/mhotel/ahpdelCollectHotel.action' : '/mhotel/ahpcollectHotel.action',
  553. data: {
  554. userId: uni.getStorageSync('userInfo').id,
  555. hotelId: this.hotelId
  556. }
  557. })
  558. // console.log(res)
  559. if (res.code === 200) {
  560. uni.showToast({
  561. title: is_collect_hotel ? '取消收藏成功' : '收藏成功',
  562. icon: 'success',
  563. mask: true
  564. })
  565. this.info.is_collect_hotel = !this.info.is_collect_hotel
  566. }
  567. } else {
  568. uni.showToast({
  569. title: '请先登录',
  570. icon: 'none',
  571. mask: true
  572. })
  573. setTimeout(() => {
  574. uni.navigateTo({
  575. url: '/pages/login/login'
  576. })
  577. }, 1500)
  578. }
  579. },
  580. // 获取评论数据
  581. async getEvaData(id) {
  582. const res = await this.$myRequest({
  583. url: '/mhotel/abcaevaluatePage.action',
  584. data: {
  585. hotelId: id ? id : this.hotelId,
  586. page: 1,
  587. rows: 5,
  588. status: 0
  589. }
  590. })
  591. // console.log(res);
  592. if (res.code === 200 && res.page.pageList) {
  593. this.score = res.score.score.toFixed(1)
  594. this.scoreFw = res.score.scoreFw.toFixed(1)
  595. this.scoreSs = res.score.scoreSs.toFixed(1)
  596. this.scoreWs = res.score.scoreWs.toFixed(1)
  597. this.scoreWz = res.score.scoreWz.toFixed(1)
  598. this.commentList = res.page.pageList
  599. this.total = res.page.total
  600. }
  601. },
  602. // 获取民宿信息
  603. async getHotelInfo(id) {
  604. const res = await this.$myRequest({
  605. url: '/mhotel/ahpgetHouseByHotelId.action',
  606. data: {
  607. hotelId: id ? id : this.hotelId,
  608. userId: uni.getStorageSync('userInfo').id,
  609. queryStartTime: this.startTime,
  610. queryEndTime: this.endTime
  611. }
  612. })
  613. // console.log(res)
  614. if (res.code === 200) {
  615. this.info = res.data.data
  616. this.list = res.data.data.houseList
  617. uni.setNavigationBarTitle({
  618. title: res.data.data.hotel_name
  619. })
  620. }
  621. },
  622. onClickItem(e) {
  623. this.activeIndex = e.currentIndex
  624. if (this.activeIndex === 1) {
  625. uni.pageScrollTo({
  626. selector: '.evaluate'
  627. })
  628. } else if (this.activeIndex === 0) {
  629. uni.pageScrollTo({
  630. scrollTop: 0
  631. })
  632. } else if (this.activeIndex === 2) {
  633. uni.pageScrollTo({
  634. selector: '.rim'
  635. })
  636. }
  637. },
  638. monthSwitch(e) {
  639. let time = e.year + '-' + e.month.toString().padStart(2, 0) + '-01'
  640. this.handleOpen(time)
  641. },
  642. // 选择日期确定回调
  643. handleConfirm(e) {
  644. this.startTime = e.range.before
  645. this.endTime = e.range.after
  646. this.dayList = e.range.data
  647. this.nightNum = e.range.data.length - 1
  648. this.getHotelInfo()
  649. },
  650. // 点击地图图标回调
  651. handleMap(item) {
  652. if (this.showLocation) {
  653. let lat = item.hpositionWens.split(',')[0] * 1
  654. let lng = item.hpositionWens.split(',')[1] * 1
  655. uni.openLocation({
  656. latitude: lat,
  657. longitude: lng,
  658. name: item.hname,
  659. address: item.hposition,
  660. success: () => {}
  661. })
  662. } else {
  663. uni.showModal({
  664. content: '当前没有定位权限,是否去设置打开?',
  665. confirmText: '确认',
  666. cancelText: '取消',
  667. success: (res) => {
  668. if (res.confirm) {
  669. uni.openSetting({
  670. success: (res) => {
  671. this.showLocation = true
  672. this.handleMap(item)
  673. }
  674. })
  675. } else {
  676. uni.showToast({
  677. title: '获取定位权限失败,无法使用地图功能',
  678. icon: 'none',
  679. mask: true
  680. })
  681. }
  682. }
  683. })
  684. }
  685. },
  686. // 点击电话图标回调
  687. handlePhone(phone) {
  688. uni.makePhoneCall({
  689. phoneNumber: phone
  690. })
  691. },
  692. // 点击弹窗关闭图标回调
  693. handleClosePop() {
  694. this.showPage = false
  695. this.$refs.popup.close()
  696. },
  697. // 点击每一个户型回调
  698. handleLookDetail(item) {
  699. this.roomInfo = item
  700. this.showPage = true
  701. this.$refs.popup.open('bottom')
  702. },
  703. // 点击设施详情回调
  704. goPageDetailInfo() {
  705. uni.navigateTo({
  706. url: `/pages/detailInfo/detailInfo?hotelId=${this.hotelId}`
  707. })
  708. },
  709. // 点击 订 预定 按钮回调
  710. goPageAffOrder(item) {
  711. let flag = uni.getStorageSync('openid')
  712. if (flag) {
  713. if (!this.startTime) {
  714. uni.showToast({
  715. title: '请选择入住时间',
  716. icon: 'none'
  717. })
  718. return
  719. }
  720. if (!this.endTime) {
  721. uni.showToast({
  722. title: '请选择离店时间',
  723. icon: 'none'
  724. })
  725. return
  726. }
  727. if (item.remainRooms * 1 > 0) {
  728. this.$refs.popup.close()
  729. this.showPage = false
  730. let info = JSON.stringify({
  731. nightNum: this.nightNum,
  732. startTimeDay: this.startTime.slice(8, 10),
  733. startTimeMonth: this.startTime.slice(5, 7),
  734. startTimeWeek: this.getWeek(this.startTime),
  735. endTimeDay: this.endTime.slice(8, 10),
  736. endTimeMonth: this.endTime.slice(5, 7),
  737. endTimeWeek: this.getWeek(this.endTime),
  738. item: item,
  739. queryStartTime: this.startTime,
  740. queryEndTime: this.endTime,
  741. dayList: this.dayList,
  742. hTypeName: this.info.hTypeName,
  743. hotelName: this.info.hotel_name,
  744. hotelId: this.hotelId
  745. })
  746. uni.navigateTo({
  747. url: `/pages/affirmOrder/affirmOrder?info=${info}`
  748. })
  749. } else {
  750. uni.showToast({
  751. title: '该房间已售罄',
  752. icon: 'none',
  753. mask: true
  754. })
  755. }
  756. } else {
  757. uni.showToast({
  758. title: '请先登录',
  759. icon: 'none',
  760. mask: true
  761. })
  762. setTimeout(() => {
  763. uni.navigateTo({
  764. url: '/pages/login/login'
  765. })
  766. }, 1500)
  767. }
  768. },
  769. // 点击日期区域回调
  770. async handleOpen(time) {
  771. const res = await this.$myRequest({
  772. url: '/mhotel/house/price/priceCalendar.action',
  773. data: {
  774. merchantId: this.info.managerId,
  775. startTime: time ? time : this.startTime
  776. }
  777. })
  778. if (res.code === 200) {
  779. this.selected = res.data
  780. }
  781. if (!time) {
  782. this.$refs.calendar.open()
  783. }
  784. },
  785. // 传入参数获取当前是星期几
  786. getWeek(time) {
  787. let date = new Date(time)
  788. let week = date.getDay()
  789. let weekList = ['日', '一', '二', '三', '四', '五', '六']
  790. let res = '周' + weekList[week]
  791. return res
  792. },
  793. // 获取今明两天的日期 YYYY-MM-DD
  794. getTimes() {
  795. // 今天
  796. let today = new Date()
  797. // 明天
  798. let tomorrow = new Date(today.getTime() + 24 * 60 * 60 * 1000)
  799. let late = new Date(today.getTime() + 24 * 60 * 60 * 1000 * 14)
  800. this.startTime = `${today.getFullYear()}-${(today.getMonth() + 1).toString().padStart(2, 0)}-${today.getDate().toString().padStart(2, 0)}`
  801. this.endTime = `${tomorrow.getFullYear()}-${(tomorrow.getMonth() + 1).toString().padStart(2, 0)}-${tomorrow.getDate().toString().padStart(2, 0)}`
  802. this.dayList = [this.startTime, this.endTime]
  803. this.earlyTime = this.startTime
  804. this.lateTime = `${late.getFullYear()}-${(late.getMonth() + 1).toString().padStart(2, 0)}-${late.getDate().toString().padStart(2, 0)}`
  805. },
  806. handleGoPull(linkProUrl) {
  807. let temURL = linkProUrl.slice(22)
  808. let url = 'https://f10mfe54bri.720yun.com' + temURL
  809. uni.navigateTo({
  810. url: `/pages/web/web?url=${url}`
  811. })
  812. },
  813. // 点击每一个评价回调
  814. handleGoDetail(item) {
  815. uni.navigateTo({
  816. url: `/pages/appraiseDetail/appraiseDetail?id=${item.id}`
  817. })
  818. },
  819. // 点击评价图片回调
  820. handleClickImg(url, index) {
  821. if (this.videoContext) {
  822. this.videoContext.stop()
  823. }
  824. // 预览图片
  825. uni.previewImage({
  826. current: index,
  827. urls: [url]
  828. })
  829. },
  830. handleGoPage() {
  831. uni.navigateTo({
  832. url: `/pages/appraise/appraise?hotelId=${this.hotelId}`
  833. })
  834. },
  835. handleClickSwiper(urls, current) {
  836. const temList = urls.map((ele) => ele.url)
  837. uni.previewImage({
  838. urls: temList,
  839. current
  840. })
  841. }
  842. }
  843. }
  844. </script>
  845. <style lang="scss" scoped>
  846. .container {
  847. display: flex;
  848. flex-direction: column;
  849. align-items: center;
  850. position: relative;
  851. padding-bottom: 20rpx;
  852. min-height: 100vh;
  853. background-color: #f2f3f5;
  854. .control {
  855. z-index: 999;
  856. position: sticky;
  857. top: 0;
  858. width: 100%;
  859. height: 100rpx;
  860. background-color: #fff;
  861. }
  862. .banner {
  863. position: relative;
  864. width: 750rpx;
  865. height: 422rpx;
  866. .swiper {
  867. height: 422rpx;
  868. .swiper_item {
  869. width: 100%;
  870. height: 100%;
  871. .img {
  872. width: 100%;
  873. height: 100%;
  874. }
  875. }
  876. }
  877. .img {
  878. width: 100%;
  879. height: 100%;
  880. }
  881. .slogan {
  882. position: absolute;
  883. top: 0;
  884. left: 0;
  885. display: flex;
  886. justify-content: center;
  887. align-items: center;
  888. width: 163rpx;
  889. height: 60rpx;
  890. background-color: rgba(255, 255, 255, 0.4);
  891. img {
  892. width: 125rpx;
  893. height: 44rpx;
  894. }
  895. }
  896. .full {
  897. position: absolute;
  898. top: 13rpx;
  899. right: 20rpx;
  900. display: flex;
  901. align-items: center;
  902. justify-content: space-around;
  903. width: 173rpx;
  904. height: 60rpx;
  905. color: #fff;
  906. font-size: 24rpx;
  907. border-radius: 11rpx;
  908. background-color: rgba(0, 0, 0, 0.5);
  909. img {
  910. width: 40rpx;
  911. height: 40rpx;
  912. }
  913. }
  914. .collect {
  915. position: absolute;
  916. top: 68rpx;
  917. left: 8rpx;
  918. }
  919. }
  920. .detail {
  921. z-index: 1;
  922. float: left;
  923. margin-top: -177rpx;
  924. box-sizing: border-box;
  925. padding: 0 30rpx 30rpx;
  926. width: 710rpx;
  927. border-radius: 10rpx;
  928. background-color: #fff;
  929. .detail_name {
  930. margin-top: 25rpx;
  931. font-size: 34rpx;
  932. font-weight: bold;
  933. }
  934. .detail_info {
  935. display: flex;
  936. justify-content: space-between;
  937. margin-top: 10rpx;
  938. .info_left {
  939. color: #999999;
  940. font-size: 20rpx;
  941. }
  942. .info_right {
  943. display: flex;
  944. align-items: center;
  945. color: #096562;
  946. font-size: 24rpx;
  947. img {
  948. margin-left: 6rpx;
  949. width: 10rpx;
  950. height: 20rpx;
  951. }
  952. }
  953. }
  954. .detail_group {
  955. display: flex;
  956. flex-wrap: wrap;
  957. margin-top: 5rpx;
  958. width: 450rpx;
  959. .group_item {
  960. display: flex;
  961. align-items: center;
  962. margin-right: 10rpx;
  963. margin-bottom: 10rpx;
  964. color: #999999;
  965. font-size: 20rpx;
  966. img {
  967. margin-right: 5rpx;
  968. width: 22rpx;
  969. height: 22rpx;
  970. }
  971. }
  972. }
  973. .address {
  974. display: flex;
  975. justify-content: space-between;
  976. margin-top: 8rpx;
  977. font-size: 28rpx;
  978. font-weight: bold;
  979. .address_left {
  980. width: 480rpx;
  981. overflow: hidden;
  982. text-overflow: ellipsis;
  983. white-space: nowrap;
  984. }
  985. .address_right {
  986. display: flex;
  987. .right_box {
  988. margin-left: 28rpx;
  989. width: 50rpx;
  990. height: 78rpx;
  991. img {
  992. width: 100%;
  993. height: 100%;
  994. }
  995. }
  996. }
  997. }
  998. .distance {
  999. margin-top: -35rpx;
  1000. color: #999999;
  1001. font-size: 24rpx;
  1002. }
  1003. }
  1004. .body {
  1005. float: left;
  1006. margin-top: 20rpx;
  1007. // padding-bottom: 30rpx;
  1008. width: 710rpx;
  1009. border-radius: 10rpx;
  1010. background-color: #fff;
  1011. .body_header {
  1012. display: flex;
  1013. justify-content: space-around;
  1014. box-sizing: border-box;
  1015. padding: 0 30rpx;
  1016. height: 150rpx;
  1017. .header_start {
  1018. display: flex;
  1019. flex-direction: column;
  1020. justify-content: center;
  1021. align-items: center;
  1022. width: 213rpx;
  1023. height: 150rpx;
  1024. font-size: 30rpx;
  1025. .header_top {
  1026. margin-bottom: 10rpx;
  1027. color: #999999;
  1028. font-size: 24rpx;
  1029. }
  1030. .header_bottom {
  1031. font-size: 34rpx;
  1032. font-weight: bold;
  1033. }
  1034. }
  1035. .header_night {
  1036. display: flex;
  1037. justify-content: center;
  1038. align-items: center;
  1039. .night_line {
  1040. width: 17rpx;
  1041. height: 1rpx;
  1042. background-color: #296de3;
  1043. }
  1044. .night_box {
  1045. display: flex;
  1046. align-items: center;
  1047. justify-content: center;
  1048. width: 81rpx;
  1049. height: 46rpx;
  1050. font-size: 24rpx;
  1051. border-radius: 66rpx;
  1052. border: 1rpx solid #296de3;
  1053. }
  1054. }
  1055. .header_end {
  1056. display: flex;
  1057. flex-direction: column;
  1058. justify-content: center;
  1059. align-items: center;
  1060. width: 213rpx;
  1061. height: 150rpx;
  1062. font-size: 30rpx;
  1063. .header_top {
  1064. margin-bottom: 10rpx;
  1065. color: #999999;
  1066. font-size: 24rpx;
  1067. }
  1068. .header_bottom {
  1069. font-size: 34rpx;
  1070. font-weight: bold;
  1071. }
  1072. }
  1073. }
  1074. .body_content {
  1075. .body_box {
  1076. box-sizing: border-box;
  1077. padding: 0 30rpx;
  1078. margin-bottom: 30rpx;
  1079. display: flex;
  1080. height: 193rpx;
  1081. border-bottom: 1rpx solid #cccccc;
  1082. .box_left {
  1083. width: 213rpx;
  1084. height: 161rpx;
  1085. border-radius: 5rpx;
  1086. img {
  1087. width: 100%;
  1088. height: 100%;
  1089. }
  1090. }
  1091. .box_center {
  1092. margin-left: 16rpx;
  1093. .center_top {
  1094. font-size: 34rpx;
  1095. font-weight: bold;
  1096. }
  1097. .center_center {
  1098. display: flex;
  1099. flex-wrap: wrap;
  1100. margin-top: 10rpx;
  1101. color: #999999;
  1102. font-size: 24rpx;
  1103. .center_item {
  1104. margin-right: 15rpx;
  1105. }
  1106. }
  1107. .center_bottom {
  1108. margin-top: 25rpx;
  1109. .img {
  1110. margin-right: 15rpx;
  1111. width: 30rpx;
  1112. height: 30rpx;
  1113. }
  1114. }
  1115. }
  1116. .box_right {
  1117. display: flex;
  1118. flex-direction: column;
  1119. align-items: flex-end;
  1120. margin-left: auto;
  1121. margin-top: 20rpx;
  1122. .right_price {
  1123. color: #ff5733;
  1124. font-size: 42rpx;
  1125. text {
  1126. font-size: 24rpx;
  1127. }
  1128. }
  1129. .right_btn {
  1130. display: flex;
  1131. justify-content: center;
  1132. align-items: center;
  1133. margin-top: 10rpx;
  1134. width: 100rpx;
  1135. height: 66rpx;
  1136. color: #fff;
  1137. font-size: 36rpx;
  1138. border-radius: 11rpx;
  1139. background-color: #096562;
  1140. }
  1141. .inactive {
  1142. background-color: #cccccc;
  1143. }
  1144. }
  1145. }
  1146. .body_pop {
  1147. position: relative;
  1148. height: 955rpx;
  1149. border-radius: 22rpx 22rpx 0 0;
  1150. background-color: #fff;
  1151. overflow-y: auto;
  1152. .pop_swiper {
  1153. height: 422rpx;
  1154. border-radius: 22rpx 22rpx 0 0;
  1155. .pop_swiper_item {
  1156. width: 100%;
  1157. height: 100%;
  1158. .img {
  1159. width: 100%;
  1160. height: 100%;
  1161. border-radius: 22rpx 22rpx 0 0;
  1162. }
  1163. }
  1164. }
  1165. .pop_icon {
  1166. position: absolute;
  1167. top: 20rpx;
  1168. right: 30rpx;
  1169. width: 58rpx;
  1170. height: 58rpx;
  1171. }
  1172. .pop_body {
  1173. box-sizing: border-box;
  1174. padding: 0 20rpx 30rpx;
  1175. .body_title {
  1176. margin-top: 30rpx;
  1177. font-size: 32rpx;
  1178. font-weight: bold;
  1179. }
  1180. .body_tags {
  1181. display: flex;
  1182. flex-wrap: wrap;
  1183. margin-top: 20rpx;
  1184. .tags_item {
  1185. display: flex;
  1186. align-items: center;
  1187. margin-right: 76rpx;
  1188. margin-bottom: 20rpx;
  1189. color: #383838;
  1190. font-size: 24rpx;
  1191. .img {
  1192. margin-right: 5rpx;
  1193. width: 28rpx;
  1194. height: 28rpx;
  1195. }
  1196. }
  1197. }
  1198. .body_title2 {
  1199. margin-top: 20rpx;
  1200. font-size: 28rpx;
  1201. }
  1202. .body_detail {
  1203. display: flex;
  1204. flex-direction: column;
  1205. justify-content: space-between;
  1206. // align-items: flex-end;
  1207. box-sizing: border-box;
  1208. padding: 20rpx 30rpx;
  1209. margin-top: 18rpx;
  1210. width: 710rpx;
  1211. height: 266rpx;
  1212. font-size: 24rpx;
  1213. border-radius: 7rpx;
  1214. background-color: #f2f2f2;
  1215. .detail_old {
  1216. text-align: end;
  1217. text-decoration: line-through;
  1218. }
  1219. .detail_box {
  1220. display: flex;
  1221. justify-content: space-between;
  1222. color: #808080;
  1223. text {
  1224. color: #ff5733;
  1225. }
  1226. }
  1227. .detail_new {
  1228. display: flex;
  1229. justify-content: flex-end;
  1230. align-items: center;
  1231. font-size: 24rpx;
  1232. .color {
  1233. color: #ff5733;
  1234. }
  1235. .price {
  1236. font-size: 36rpx;
  1237. }
  1238. .ml_10 {
  1239. margin-left: 10rpx;
  1240. }
  1241. }
  1242. }
  1243. .body_bottom {
  1244. display: flex;
  1245. justify-content: space-between;
  1246. align-items: center;
  1247. margin-top: 250rpx;
  1248. height: 80rpx;
  1249. .bottom_left {
  1250. display: flex;
  1251. align-items: center;
  1252. color: #333333;
  1253. font-size: 24rpx;
  1254. .img {
  1255. margin-right: 10rpx;
  1256. width: 48rpx;
  1257. height: 48rpx;
  1258. }
  1259. }
  1260. .bottom_right {
  1261. display: flex;
  1262. align-items: center;
  1263. color: #ff5733;
  1264. font-size: 40rpx;
  1265. font-weight: bold;
  1266. text {
  1267. font-size: 24rpx;
  1268. }
  1269. .btn {
  1270. display: flex;
  1271. justify-content: center;
  1272. align-items: center;
  1273. margin-left: 30rpx;
  1274. width: 238rpx;
  1275. height: 80rpx;
  1276. color: #fff;
  1277. font-size: 32rpx;
  1278. font-weight: 400;
  1279. border-radius: 64rpx;
  1280. background-color: #096562;
  1281. }
  1282. .inactive {
  1283. background-color: #cccccc;
  1284. }
  1285. }
  1286. }
  1287. }
  1288. }
  1289. }
  1290. .noData {
  1291. display: flex;
  1292. flex-direction: column;
  1293. justify-content: center;
  1294. align-items: center;
  1295. padding-bottom: 20rpx;
  1296. img {
  1297. margin-top: 60rpx;
  1298. width: 600rpx;
  1299. height: 600rpx;
  1300. }
  1301. }
  1302. }
  1303. .evaluate {
  1304. width: 710rpx;
  1305. background-color: #f2f3f5;
  1306. .evaluate_title {
  1307. line-height: 83rpx;
  1308. font-size: 32rpx;
  1309. font-weight: bold;
  1310. }
  1311. .evaluate_body {
  1312. display: flex;
  1313. flex-direction: column;
  1314. // margin-bottom: 20rpx;
  1315. width: 710rpx;
  1316. border-radius: 11rpx;
  1317. background-color: #fff;
  1318. .header {
  1319. display: flex;
  1320. align-items: center;
  1321. margin: 25rpx 20rpx;
  1322. width: 670rpx;
  1323. height: 120rpx;
  1324. border-radius: 13rpx;
  1325. background-color: #e4f0ef;
  1326. .header_box {
  1327. display: flex;
  1328. height: 70rpx;
  1329. .box_left {
  1330. display: flex;
  1331. justify-content: center;
  1332. align-items: center;
  1333. width: 140rpx;
  1334. color: #096562;
  1335. font-size: 60rpx;
  1336. font-weight: 900;
  1337. border-right: 1rpx solid #cccccc;
  1338. }
  1339. .box_right {
  1340. flex: 1;
  1341. display: flex;
  1342. flex-wrap: wrap;
  1343. color: #808080;
  1344. font-size: 24rpx;
  1345. .right_item {
  1346. display: flex;
  1347. align-items: center;
  1348. width: 50%;
  1349. .item_info {
  1350. margin-left: 33rpx;
  1351. }
  1352. .item_progress {
  1353. margin-right: 20rpx;
  1354. padding: 0 13rpx;
  1355. flex: 1;
  1356. }
  1357. }
  1358. }
  1359. }
  1360. }
  1361. .evaluate_box {
  1362. box-sizing: border-box;
  1363. padding: 0 20rpx;
  1364. margin: 0 auto 20rpx;
  1365. width: 710rpx;
  1366. border-radius: 18rpx;
  1367. background-color: #fff;
  1368. .box_userInfo {
  1369. display: flex;
  1370. align-items: center;
  1371. height: 115rpx;
  1372. img {
  1373. width: 70rpx;
  1374. height: 70rpx;
  1375. border-radius: 50%;
  1376. }
  1377. .userInfo_msg {
  1378. margin-left: 18rpx;
  1379. .msg_name {
  1380. font-size: 28rpx;
  1381. }
  1382. .msg_star {
  1383. margin-left: -5rpx;
  1384. margin-top: 5rpx;
  1385. }
  1386. }
  1387. }
  1388. .box_time {
  1389. display: flex;
  1390. align-items: center;
  1391. color: #a6a6a6;
  1392. font-size: 24rpx;
  1393. }
  1394. .box_content {
  1395. margin-top: 15rpx;
  1396. font-size: 24rpx;
  1397. color: #000;
  1398. }
  1399. .box_img {
  1400. display: grid;
  1401. grid-template-columns: 1fr 1fr 1fr;
  1402. grid-auto-rows: auto;
  1403. gap: 10rpx;
  1404. margin-top: 20rpx;
  1405. img {
  1406. width: 216rpx;
  1407. height: 216rpx;
  1408. border-radius: 20rpx;
  1409. }
  1410. .video {
  1411. width: 216rpx;
  1412. height: 216rpx;
  1413. border-radius: 20rpx;
  1414. }
  1415. }
  1416. }
  1417. .foot {
  1418. display: flex;
  1419. justify-content: center;
  1420. align-items: center;
  1421. padding-bottom: 20rpx;
  1422. height: 68rpx;
  1423. font-size: 24rpx;
  1424. font-weight: bold;
  1425. color: #096663;
  1426. img {
  1427. margin-left: 10rpx;
  1428. width: 10rpx;
  1429. height: 18rpx;
  1430. }
  1431. }
  1432. .noData {
  1433. display: flex;
  1434. flex-direction: column;
  1435. justify-content: center;
  1436. align-items: center;
  1437. padding-bottom: 60rpx;
  1438. img {
  1439. margin-top: 160rpx;
  1440. width: 600rpx;
  1441. height: 600rpx;
  1442. }
  1443. }
  1444. }
  1445. }
  1446. .rim {
  1447. width: 710rpx;
  1448. background-color: #f2f3f5;
  1449. .rim_title {
  1450. line-height: 83rpx;
  1451. font-size: 32rpx;
  1452. font-weight: bold;
  1453. }
  1454. .rim_body {
  1455. .rim_box {
  1456. display: flex;
  1457. margin-bottom: 20rpx;
  1458. width: 710rpx;
  1459. height: 150rpx;
  1460. background-color: #fff;
  1461. img {
  1462. width: 126rpx;
  1463. height: 150rpx;
  1464. }
  1465. .box_info {
  1466. display: flex;
  1467. flex-direction: column;
  1468. justify-content: space-evenly;
  1469. padding: 0 24rpx;
  1470. box-sizing: border-box;
  1471. width: 584rpx;
  1472. height: 150rpx;
  1473. .info_top {
  1474. font-size: 28rpx;
  1475. font-weight: bold;
  1476. }
  1477. .info_center {
  1478. font-size: 24rpx;
  1479. color: #808080;
  1480. }
  1481. .info_bottom {
  1482. display: flex;
  1483. align-items: center;
  1484. font-size: 24rpx;
  1485. .bottom_rate {
  1486. color: #ff5733;
  1487. }
  1488. .bottom_num {
  1489. margin-left: 15rpx;
  1490. color: #a6a6a6;
  1491. }
  1492. .bottom_price {
  1493. margin-left: auto;
  1494. font-size: 28rpx;
  1495. color: #ff5733;
  1496. text {
  1497. font-size: 20rpx;
  1498. color: #a6a6a6;
  1499. }
  1500. }
  1501. }
  1502. }
  1503. }
  1504. }
  1505. .rim_more {
  1506. display: flex;
  1507. justify-content: center;
  1508. align-items: center;
  1509. width: 710rpx;
  1510. height: 70rpx;
  1511. color: #096663;
  1512. font-size: 24rpx;
  1513. font-weight: bold;
  1514. background-color: #fff;
  1515. img {
  1516. margin-left: 10rpx;
  1517. margin-top: 2rpx;
  1518. width: 10rpx;
  1519. height: 18rpx;
  1520. }
  1521. }
  1522. }
  1523. .scenicSpot {
  1524. width: 710rpx;
  1525. background-color: #f2f3f5;
  1526. .scenicSpot_title {
  1527. line-height: 83rpx;
  1528. font-size: 32rpx;
  1529. font-weight: bold;
  1530. }
  1531. .scenicSpot_body {
  1532. .scenicSpot_box {
  1533. display: flex;
  1534. margin-bottom: 20rpx;
  1535. width: 710rpx;
  1536. height: 150rpx;
  1537. background-color: #fff;
  1538. img {
  1539. width: 126rpx;
  1540. height: 150rpx;
  1541. }
  1542. .box_info {
  1543. display: flex;
  1544. flex-direction: column;
  1545. justify-content: space-evenly;
  1546. padding: 0 24rpx;
  1547. box-sizing: border-box;
  1548. width: 584rpx;
  1549. height: 150rpx;
  1550. .info_top {
  1551. font-size: 28rpx;
  1552. font-weight: bold;
  1553. }
  1554. .info_center {
  1555. font-size: 24rpx;
  1556. color: #808080;
  1557. }
  1558. .info_bottom {
  1559. display: flex;
  1560. align-items: center;
  1561. font-size: 24rpx;
  1562. .bottom_rate {
  1563. color: #ff5733;
  1564. }
  1565. .bottom_num {
  1566. margin-left: 15rpx;
  1567. color: #a6a6a6;
  1568. }
  1569. .bottom_price {
  1570. margin-left: auto;
  1571. font-size: 28rpx;
  1572. color: #ff5733;
  1573. text {
  1574. font-size: 20rpx;
  1575. color: #a6a6a6;
  1576. }
  1577. }
  1578. }
  1579. }
  1580. }
  1581. }
  1582. .scenicSpot_more {
  1583. display: flex;
  1584. justify-content: center;
  1585. align-items: center;
  1586. width: 710rpx;
  1587. height: 70rpx;
  1588. color: #096663;
  1589. font-size: 24rpx;
  1590. font-weight: bold;
  1591. background-color: #fff;
  1592. img {
  1593. margin-left: 10rpx;
  1594. margin-top: 2rpx;
  1595. width: 10rpx;
  1596. height: 18rpx;
  1597. }
  1598. }
  1599. }
  1600. }
  1601. </style>