hotelDetail.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974
  1. <template>
  2. <view class="hotelDetail">
  3. <zs-skeleton :loading="loading" type="hotelDetail"></zs-skeleton>
  4. <zs-header :background="background"></zs-header>
  5. <view class="img-box" @click="goImgList">
  6. <image class="top-banner" :src="info.pictures[0].path" mode=""></image>
  7. <view class="num-box">
  8. {{info.pictures.length}}张
  9. </view>
  10. </view>
  11. <view class="container">
  12. <view class="title-box">
  13. <view class="title">
  14. {{info.chineseName}}
  15. <view :class="[getTag(info.star).tag]">
  16. {{info.starName}}
  17. </view>
  18. </view>
  19. <view class="star-box">
  20. <image class="star" v-for="i in getTag(info.star).num" src="../static/star.png" mode=""></image>
  21. </view>
  22. </view>
  23. <view class="desc-box">
  24. <view class="text" v-if="info.debutYear">
  25. {{info.debutYear}}年开业
  26. </view>
  27. <view class="text" v-if="info.decorateDate">
  28. {{info.decorateDate}}年装修
  29. </view>
  30. <!-- <view class="text">
  31. {{info.roomCount}}间房
  32. </view> -->
  33. </view>
  34. <view class="address-box">
  35. <view class="address">
  36. {{info.address}}
  37. </view>
  38. <view class="btn-box">
  39. <view class="btn" @click="handleNavigation">
  40. 导航
  41. </view>
  42. <!-- <view class="btn" @click="handleCall">
  43. 电话
  44. </view> -->
  45. </view>
  46. </view>
  47. <view class="choose-box">
  48. <view class="start-box" @click="show = true">
  49. <view class="label">
  50. 入住
  51. </view>
  52. <view class="time-box">
  53. <view class="time">
  54. {{query.checkIn | filterDate('time')}}
  55. </view>
  56. <view class="date">
  57. {{query.checkIn | filterDate('day')}}
  58. </view>
  59. <view class="day">
  60. {{day}}晚
  61. </view>
  62. </view>
  63. </view>
  64. <view class="end-box" @click="show = true">
  65. <view class="label">
  66. 离店
  67. </view>
  68. <view class="time-box">
  69. <view class="time">
  70. {{query.checkOut | filterDate('time')}}
  71. </view>
  72. <view class="date">
  73. {{query.checkOut | filterDate('day')}}
  74. </view>
  75. </view>
  76. </view>
  77. <view class="people-box">
  78. <view class="people" @click="showNum1 = true">
  79. {{query.manNum}}成人
  80. </view>
  81. <view class="child" @click="showNum2 = true">
  82. {{query.childNum}}儿童
  83. </view>
  84. </view>
  85. <image class="jiantou" src="@/static/right.png" mode=""></image>
  86. </view>
  87. <!-- 列表 -->
  88. <zs-list class="store-box" mt="0" @load="loadMore" :status="status" :contentText="contentText">
  89. <view class="hotel-item" v-for="(item,index) in roomList" :key="index">
  90. <template v-if="item.roomId">
  91. <view class="box">
  92. <zs-img :src="item.pictures[0].path" width="200rpx" height="200rpx" radius="full" mode="widthFix"></zs-img>
  93. <view class="info">
  94. <view class="title">
  95. {{item.roomNameCn}}
  96. </view>
  97. <view class="desc">
  98. <view class="item" v-if="item.area">
  99. {{item.area}}
  100. </view>
  101. <view class="item" v-if="item.window">
  102. {{item.window |filterWindow}}
  103. </view>
  104. </view>
  105. <!-- <view class="notice">
  106. 早餐不可取消
  107. </view> -->
  108. </view>
  109. <view class="price-box">
  110. <view class="price">
  111. ¥{{item.ratePlanInfo[0].averagePrice}}
  112. </view>
  113. <view class="label">
  114. </view>
  115. </view>
  116. </view>
  117. <view class="type-box">
  118. <view class="type-item" v-for="(i,d) in item.ratePlanInfo" :key="i.id" @click.native="handleImg(item,d)">
  119. <view class="left">
  120. <view class="name-box">
  121. <view class="name">
  122. {{i.meal.breakfast.desc || i.mealInfo.substr(3)}}
  123. </view>
  124. <view class="name">
  125. {{i.cancel.name}}
  126. </view>
  127. </view>
  128. <view class="residue">
  129. 还剩{{i.counts}}间
  130. </view>
  131. </view>
  132. <view class="right">
  133. <view class="price">
  134. ¥{{i.averagePrice}}
  135. </view>
  136. <image class="buy-btn" src="../static/hotel-buy-btn.png" mode="" @click.stop="handleBuy(i,item)"></image>
  137. </view>
  138. </view>
  139. </view>
  140. </template>
  141. </view>
  142. </zs-list>
  143. </view>
  144. <view class="intro-box" @click="goIntroduce">
  145. <image class="icon" src="@/static/hotel.png" mode=""></image> 酒店介绍
  146. </view>
  147. <u-popup :show="show1" round="16rpx" mode="bottom" @close="show1 = false">
  148. <view class="content">
  149. <image class="img" :src="roomInfo.pictures[0].path" mode=""></image>
  150. <view class="title">
  151. {{roomInfo.roomNameCn}}
  152. </view>
  153. <view class="desc-box">
  154. <view class="item" v-if="roomInfo.area">
  155. {{roomInfo.area}}
  156. </view>
  157. <view class="item">
  158. {{roomInfo.floor}}
  159. </view>
  160. <view class="item" v-if="roomInfo.window.toString() == 'null'">
  161. {{roomInfo.window |filterWindow}}
  162. </view>
  163. </view>
  164. <view class="box">
  165. <view class="menu-item">
  166. <view class="title">
  167. <image class="icon" src="../static/hotel-icon1.png" mode=""></image>
  168. {{roomInfo.ratePlanInfo[roomIndex].bedInfo || ''}}(加床:{{roomInfo.isExtraBed}})
  169. </view>
  170. <view class="title">
  171. <image class="icon" src="../static/hotel-icon2.png" mode=""></image>
  172. {{roomInfo.ratePlanInfo[roomIndex].mealInfo}}
  173. </view>
  174. </view>
  175. <view class="menu-item" v-for="item in roomFacilities" :key="item.name">
  176. <view class="title">
  177. <image class="icon" src="../static/hotel-icon5.png" mode=""></image>
  178. {{item.name}}
  179. </view>
  180. <view class="item-box">
  181. <view class="item" v-for="i in item.list" :key="i">
  182. {{i}}
  183. </view>
  184. </view>
  185. </view>
  186. <!-- <view class="menu-item">
  187. <view class="title">
  188. <image class="icon" src="../static/hotel-icon4.png" mode=""></image>
  189. 家具设施
  190. </view>
  191. <view class="item-box">
  192. <view class="item">
  193. 书桌
  194. </view>
  195. <view class="item">
  196. 坐卧两用沙发
  197. </view>
  198. <view class="item">
  199. 沙发
  200. </view>
  201. </view>
  202. </view>
  203. <view class="menu-item">
  204. <view class="title">
  205. <image class="icon" src="../static/hotel-icon5.png" mode=""></image>
  206. 便利设施
  207. </view>
  208. <view class="item-box">
  209. <view class="item">
  210. 书桌
  211. </view>
  212. <view class="item">
  213. 坐卧两用沙发
  214. </view>
  215. <view class="item">
  216. 沙发
  217. </view>
  218. </view>
  219. </view> -->
  220. </view>
  221. </view>
  222. </u-popup>
  223. <u-calendar
  224. startText="住店"
  225. endText="离店"
  226. :monthNum="5"
  227. confirmDisabledText="请选择离店日期"
  228. :show="show"
  229. mode="range"
  230. @confirm="confirm"
  231. @close="show = false"
  232. ref="calendar"
  233. :rowHeight="100"
  234. closeOnClickOverlay
  235. color="#EE4320"
  236. :defaultDate="[query.checkIn,query.checkOut]"
  237. >
  238. </u-calendar>
  239. <!-- 选择成人 -->
  240. <u-picker title="成人人数" :show="showNum1" closeOnClickOverlay :columns="columns" @close="showNum1 = false" @cancel="showNum1 = false" @confirm="confirmMan"></u-picker>
  241. <!-- 选择儿童 -->
  242. <u-picker title="儿童人数" :show="showNum2" closeOnClickOverlay :columns="columns" @close="showNum2 = false" @cancel="showNum2 = false" @confirm="confirmChild"></u-picker>
  243. </view>
  244. </template>
  245. <script>
  246. import {getHotelDetail,getRoomList} from '@/api/hotel.js'
  247. import {transformFromWGSToGCJ} from '@/utils/tool.js'
  248. export default {
  249. data() {
  250. return {
  251. background: false,
  252. status:'noMore',
  253. loading : true,
  254. list:10,
  255. show:false,
  256. show1:false,
  257. showNum1:false,
  258. showNum2:false,
  259. contentText:{contentdown: "上拉显示更多",contentrefresh: "正在加载...",contentnomore: "没有更多数据了"},
  260. info:{pictures:[]},
  261. columns:[
  262. [
  263. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
  264. ]
  265. ],
  266. query:{
  267. "checkIn": uni.$u.timeFormat(new Date().getTime(), 'yyyy-mm-dd'),
  268. "checkOut": uni.$u.timeFormat(new Date().getTime()+1000*60*60*24, 'yyyy-mm-dd'),
  269. "childAges": [],
  270. "childNum": 0,
  271. "excludeOta": true,
  272. "hotelId": 0,
  273. "manNum": 1,
  274. "roomNum": 1
  275. },
  276. day:1,
  277. pictures:[],
  278. roomList:[],
  279. roomIndex:0,//当前的房型index
  280. roomFacilities:[],
  281. roomInfo:{
  282. area:'',
  283. bedDescription:'',
  284. broadband:'',
  285. facilities:'',
  286. floor:'',
  287. isExtraBed:'',
  288. noSmoking:'',
  289. pictures:'',
  290. ratePlanInfo:'',
  291. roomId:'',
  292. roomNameCn:'',
  293. wifi:'',
  294. window: 4
  295. }
  296. }
  297. },
  298. filters: {
  299. filterDate: function(value,type) {
  300. let timestamp = new Date(value).getTime()
  301. if(type == 'time'){
  302. return uni.$u.timeFormat(timestamp, 'mm月dd日');
  303. }else if(type == 'day'){
  304. let arr = ['日','一','二','三','四','五','六']
  305. let num = new Date(timestamp).getDay()
  306. return `周${arr[num]}`
  307. }
  308. },
  309. filterWindow:function(val){
  310. if(val === 0){
  311. return '无窗'
  312. }else if(val === 1){
  313. return '部分有窗'
  314. }else if(val === 2){
  315. return '有窗'
  316. }else if(val === 3){
  317. return '不确定'
  318. }else if(val === 4){
  319. return '内窗'
  320. }else if(val === 5){
  321. return '天窗'
  322. }else if(val === 6){
  323. return '封闭窗'
  324. }else if(val === 7){
  325. return '飘窗'
  326. }else if(val === 11){
  327. return '不确定'
  328. }else{
  329. return ''
  330. }
  331. },
  332. filterWifi:function(val){
  333. if(val === 1){
  334. return '免费提供'
  335. }else if(val === 2){
  336. return '不提供此服务'
  337. }else if(val === 3){
  338. return '收费提供'
  339. }else if(val === 4){
  340. return '部分收费'
  341. }else if(val === 5){
  342. return '部分提供并收费'
  343. }else if(val === 6){
  344. return '部分能提供并免费'
  345. }else if(val === 7){
  346. return '部分提供并只有部分和收费'
  347. }else if(val === 8){
  348. return '有'
  349. }else if(val === 9){
  350. return '不确定'
  351. }
  352. }
  353. },
  354. methods: {
  355. getTag(star){
  356. if(star == 0 ||star == 1){
  357. return {tag:'tag1',num:1}
  358. }else if(star == 2 ||star == 6){
  359. return {tag:'tag2',num:2}
  360. }if(star == 3 ||star == 7){
  361. return {tag:'tag2',num:3}
  362. }if(star == 4 ||star == 8){
  363. return {tag:'tag3',num:4}
  364. }if(star == 5 ||star == 9){
  365. return {tag:'tag3',num:5}
  366. }
  367. },
  368. confirm(e) {
  369. this.show = false
  370. if(e){
  371. this.day = e.length - 1
  372. this.query.checkIn = e[0]
  373. this.query.checkOut = e[this.day]
  374. this.getRoomList()
  375. }
  376. },
  377. confirmMan(val){
  378. console.log(val);
  379. this.showNum1 = false
  380. this.query.manNum = val.value[0]
  381. this.query.roomNum = val.value[0]
  382. this.getRoomList()
  383. },
  384. confirmChild(val){
  385. console.log(val);
  386. this.showNum2 = false
  387. this.query.childNum = val.value[0]
  388. this.getRoomList()
  389. },
  390. goImgList(){
  391. uni.navigateTo({
  392. url:`./hotelImgList?id=${this.query.hotelId}`
  393. })
  394. uni.setStorageSync('hotelImgList',JSON.stringify(this.pictures))
  395. },
  396. handleBuy(i,item){
  397. if(JSON.parse(uni.getStorageSync('userInfo')).setMealCode != 0&&JSON.parse(uni.getStorageSync('userInfo')).setMealCode){
  398. let that = this
  399. uni.navigateTo({
  400. url:`./makeOut?checkInDate=${this.query.checkIn}&checkOutDate=${this.query.checkOut}&day=${this.day}`,
  401. success: function(res) {
  402. // 通过eventChannel向被打开页面传送数据
  403. let obj = {
  404. manNum:that.query.manNum,
  405. childNum:that.query.childNum,
  406. hotelId:that.query.hotelId,
  407. ratePlanId:i.id,
  408. averagePrice:i.averagePrice,
  409. roomPic:item.pictures[0].path,
  410. hotelPic:that.info.pictures[0].path,
  411. roomNameCn:item.roomNameCn,
  412. area:item.area,
  413. window:item.window,
  414. meal:i.meal.breakfast.desc || i.mealInfo.substr(3),
  415. cancel:i.cancel.name,
  416. }
  417. res.eventChannel.emit('pay', obj)
  418. }
  419. })
  420. }else{
  421. uni.showModal({
  422. title:'此商品需要开通会员才能购买',
  423. cancelText:'下次再说',
  424. confirmText:'立即开通',
  425. success(res) {
  426. if(res.confirm){
  427. uni.navigateTo({
  428. url:'/my/memberCenter/index'
  429. })
  430. }
  431. }
  432. })
  433. }
  434. },
  435. goIntroduce(){
  436. uni.navigateTo({
  437. url:`./introduce?id=${this.query.hotelId}`
  438. })
  439. },
  440. handleImg(item,index){
  441. this.show1 = true
  442. this.roomInfo = item
  443. this.roomIndex = index
  444. console.log(this.roomInfo);
  445. let obj = {}
  446. item.facilities.map(i=>{
  447. if(obj[i.name]){
  448. obj[i.name].push(i.tmpSubFacilities[0].subName)
  449. }else{
  450. obj[i.name] = [i.tmpSubFacilities[0].subName]
  451. }
  452. })
  453. let list = []
  454. for (let key in obj) {
  455. list.push({name:key,list:obj[key]})
  456. }
  457. console.log(111111111,list);
  458. this.roomFacilities = list
  459. },
  460. handleNavigation() {
  461. let {latitude,longitude} = transformFromWGSToGCJ(this.info.latitudeGoogle,this.info.longitudeGoogle)
  462. uni.openLocation({
  463. latitude,
  464. longitude,
  465. name:this.info.storeName,
  466. address:this.info.address,
  467. success: function () {
  468. console.log('success');
  469. }
  470. });
  471. // this.map.openMapApp({
  472. // longitude:this.info.lon,
  473. // latitude:this.info.lat,
  474. // destination:this.info.storeName,
  475. // success(res){
  476. // console.log(res);
  477. // }
  478. // })
  479. },
  480. handleCall() {
  481. if(this.info.tel){
  482. uni.makePhoneCall({
  483. phoneNumber: this.info.tel //仅为示例
  484. });
  485. }else{
  486. uni.showToast({
  487. title:'商家没有预留电话',
  488. icon:'none'
  489. })
  490. }
  491. },
  492. getHotelDetail(hotelId){
  493. this.loading = true
  494. getHotelDetail({hotelId}).then(res=>{
  495. if(res.state == 'Success'){
  496. this.loading = false
  497. this.info = res.content.data
  498. let obj = {}
  499. this.info.pictures.map(item=>{
  500. if(obj[item.name]){
  501. obj[item.name].push(item.path)
  502. }else{
  503. obj[item.name] = [item.path]
  504. }
  505. })
  506. let list = []
  507. for (let key in obj) {
  508. list.push({name:key,list:obj[key]})
  509. }
  510. this.pictures = list
  511. }
  512. })
  513. },
  514. getRoomList(){
  515. uni.showLoading({
  516. title:'加载中'
  517. })
  518. getRoomList(this.query).then(res=>{
  519. uni.hideLoading()
  520. if(res.state == 'Success'){
  521. this.roomList = res.content.data.roomInfo
  522. if(!this.roomList.length){
  523. this.contentText.contentnomore = '酒店可能太抢手,暂无符合条件的报价。请搜索其他酒店或调整入住时间'
  524. }
  525. }
  526. })
  527. }
  528. },
  529. onPageScroll(e) {
  530. if (e.scrollTop >= 50) {
  531. this.background = true
  532. } else {
  533. this.background = false
  534. }
  535. },
  536. onLoad(options) {
  537. this.query.hotelId = options.id
  538. this.day = options.day || 1
  539. if(options.checkInDate){
  540. this.query.checkIn = options.checkInDate
  541. }
  542. if(options.checkOutDate){
  543. this.query.checkOut = options.checkOutDate
  544. }
  545. this.getHotelDetail(options.id)
  546. this.getRoomList()
  547. },
  548. onShareTimeline() {
  549. return {
  550. title: "慧研学惠生活-"+this.info.chineseName,
  551. query: "id="+this.id,
  552. };
  553. },
  554. onShareAppMessage() {
  555. return {
  556. title: "慧研学惠生活-"+this.info.chineseName,
  557. path: "/pages/signUp/index?id="+this.id,
  558. };
  559. },
  560. }
  561. </script>
  562. <style lang="scss" >
  563. .hotelDetail{
  564. padding-bottom: 150rpx;
  565. .img-box{
  566. position: relative;
  567. .top-banner{
  568. width: 750rpx;
  569. height: 382rpx;
  570. vertical-align: bottom;
  571. }
  572. .num-box{
  573. position: absolute;
  574. right: 24rpx;
  575. bottom: 50rpx;
  576. width: 104rpx;
  577. height: 40rpx;
  578. line-height: 40rpx;
  579. text-align: center;
  580. background: rgba(255,255,255,0.5);
  581. border-radius: 26rpx 26rpx 26rpx 26rpx;
  582. font-size: 24rpx;
  583. color: #FFFFFF;
  584. }
  585. }
  586. .container{
  587. position: relative;
  588. z-index: 2;
  589. margin-top: -20rpx;
  590. background: #fff;
  591. border-radius: 16rpx 16rpx 0 0;
  592. padding: 20rpx 24rpx;
  593. .title-box{
  594. display: flex;
  595. align-items: center;
  596. justify-content: space-between;
  597. .title{
  598. font-weight: 600;
  599. font-size: 32rpx;
  600. color: #222222;
  601. width: 550rpx;
  602. white-space: nowrap;
  603. overflow: hidden;
  604. text-overflow: ellipsis;
  605. margin-top: 20rpx;
  606. display: flex;
  607. align-items: center;
  608. }
  609. .star-box{
  610. display: flex;
  611. align-items: center;
  612. .star{
  613. width: 21rpx;
  614. height: 17rpx;
  615. margin-left: 3rpx;
  616. }
  617. }
  618. }
  619. .desc-box{
  620. display: flex;
  621. align-items: center;
  622. font-size: 24rpx;
  623. color: #AAAAAA;
  624. margin-top: 20rpx;
  625. .text{
  626. padding-right: 10rpx;
  627. }
  628. .text+.text{
  629. border-left: 2rpx solid #F0F0F0;
  630. padding-left: 10rpx;
  631. }
  632. }
  633. .address-box{
  634. display: flex;
  635. align-items: center;
  636. justify-content: space-between;
  637. width: 702rpx;
  638. height: 140rpx;
  639. background-image: url('@/static/white-map.png');
  640. background-repeat: repeat;
  641. background-size: 100% 140rpx;
  642. box-sizing: border-box;
  643. padding: 36rpx 24rpx;
  644. margin-top: 20rpx;
  645. .address{
  646. font-weight: 600;
  647. font-size: 24rpx;
  648. color: #222222;
  649. line-height: 40rpx;
  650. overflow: hidden;
  651. padding-right: 20rpx;
  652. text-overflow: ellipsis;
  653. /* 弹性伸缩盒子模型显示 */
  654. display: -webkit-box;
  655. /* 限制在一个块元素显示的文本的行数 */
  656. -webkit-line-clamp: 2;
  657. /* 设置或检索伸缩盒对象的子元素的排列方式 */
  658. -webkit-box-orient: vertical;
  659. }
  660. .btn-box{
  661. display: flex;
  662. .btn+.btn{
  663. margin-left: 16rpx;
  664. }
  665. .btn{
  666. width: 120rpx;
  667. height: 52rpx;
  668. line-height: 52rpx;
  669. text-align: center;
  670. background: #E2ECFF;
  671. border-radius: 26rpx 26rpx 26rpx 26rpx;
  672. font-weight: 300;
  673. font-size: 28rpx;
  674. color: #3879F9;
  675. }
  676. }
  677. }
  678. .choose-box{
  679. background: #F9F9F9;
  680. border-radius: 16rpx 16rpx 16rpx 16rpx;
  681. padding: 24rpx;
  682. display: flex;
  683. align-items: center;
  684. position: relative;
  685. margin-top: 20rpx;
  686. .start-box,.end-box{
  687. padding-right: 24rpx;
  688. .label{
  689. font-size: 24rpx;
  690. color: #222222;
  691. }
  692. .time-box{
  693. display: flex;
  694. align-items: center;
  695. margin-top: 16rpx;
  696. .time{
  697. font-weight: 600;
  698. font-size: 28rpx;
  699. color: #222222;
  700. }
  701. .date{
  702. font-size: 24rpx;
  703. color: #222222;
  704. margin-left: 16rpx;
  705. }
  706. .day{
  707. width: 80rpx;
  708. height: 36rpx;
  709. line-height: 36rpx;
  710. text-align: center;
  711. background: #F0F0F0;
  712. border-radius: 18rpx 18rpx 18rpx 18rpx;
  713. font-size: 20rpx;
  714. color: #222222;
  715. margin-left: 24rpx;
  716. }
  717. }
  718. }
  719. .people-box{
  720. padding-left: 24rpx;
  721. border-left: 2rpx solid #F0F0F0;
  722. .people,.child{
  723. font-size: 24rpx;
  724. color: #222222;
  725. }
  726. .child{
  727. margin-top: 16rpx;
  728. }
  729. }
  730. .jiantou{
  731. width: 48rpx;
  732. height: 48rpx;
  733. position: absolute;
  734. top: 50%;
  735. right: 0%;
  736. margin-top: -24rpx;
  737. }
  738. }
  739. .zs-list {
  740. margin-top: 20rpx;
  741. .hotel-item {
  742. .box{
  743. display: flex;
  744. align-items: center;
  745. background: #fff;
  746. border-bottom: 1rpx solid #F0F0F0;
  747. padding: 24rpx 0;
  748. .info{
  749. padding-left: 20rpx;
  750. flex: 1;
  751. .title{
  752. font-weight: 600;
  753. font-size: 36rpx;
  754. color: #222222;
  755. width: 300rpx;
  756. white-space: nowrap;
  757. overflow: hidden;
  758. text-overflow: ellipsis;
  759. margin-top: 20rpx;
  760. }
  761. .desc{
  762. display: flex;
  763. align-items: center;
  764. font-size: 24rpx;
  765. color: #AAAAAA;
  766. margin-top: 20rpx;
  767. .item{
  768. padding-right: 10rpx;
  769. }
  770. .item+.item{
  771. padding-left: 10rpx;
  772. border-left: 2rpx solid #F0F0F0;
  773. }
  774. }
  775. .notice{
  776. font-size: 24rpx;
  777. color: #AAAAAA;
  778. margin-top: 20rpx;
  779. }
  780. }
  781. .price-box{
  782. display: flex;
  783. align-items: center;
  784. .price{
  785. font-weight: 600;
  786. font-size: 36rpx;
  787. color: #FF4D3A;
  788. }
  789. .label{
  790. font-size: 24rpx;
  791. color: #AAAAAA;
  792. }
  793. }
  794. }
  795. }
  796. .type-box{
  797. .type-item+.type-item{
  798. border-top: 1rpx solid #F0F0F0;
  799. }
  800. .type-item{
  801. display: flex;
  802. justify-content: space-between;
  803. align-items: center;
  804. padding: 28rpx 24rpx;
  805. background: #F9F9F9;
  806. .left{
  807. .name-box{
  808. display: flex;
  809. align-items: center;
  810. font-size: 28rpx;
  811. color: #222222;
  812. .name{
  813. padding-right: 20rpx;
  814. }
  815. .name+.name{
  816. padding-left: 20rpx;
  817. border-left: 1rpx solid #222222;
  818. }
  819. }
  820. .residue{
  821. font-size: 24rpx;
  822. color: #FF4D3A;
  823. margin-top: 16rpx;
  824. }
  825. }
  826. .right{
  827. display: flex;
  828. align-items: center;
  829. .price{
  830. font-weight: 600;
  831. font-size: 36rpx;
  832. color: #FF4D3A;
  833. }
  834. .buy-btn{
  835. width: 76rpx;
  836. height: 84rpx;
  837. margin-left: 20rpx;
  838. }
  839. }
  840. }
  841. }
  842. }
  843. }
  844. .intro-box{
  845. position: fixed;
  846. bottom: 0;
  847. left: 0%;
  848. width: 100%;
  849. height: 98rpx;
  850. line-height: 98rpx;
  851. text-align: center;
  852. border-top: 1rpx solid #EEEEEE;
  853. font-size: 28rpx;
  854. color: #222222;
  855. background: #fff;
  856. z-index: 2;
  857. padding-bottom: env(safe-area-inset-bottom);
  858. .icon{
  859. width: 30rpx;
  860. height: 30rpx;
  861. }
  862. }
  863. .content{
  864. max-height: calc(100vh - 362rpx);
  865. overflow: auto;
  866. border-radius: 16rpx;
  867. padding: 24rpx;
  868. box-sizing: border-box;
  869. .img{
  870. width: 100%;
  871. height: 376rpx;
  872. border-radius: 16rpx;
  873. }
  874. .title{
  875. font-weight: 600;
  876. font-size: 32rpx;
  877. color: #222222;
  878. width: 650rpx;
  879. white-space: nowrap;
  880. overflow: hidden;
  881. text-overflow: ellipsis;
  882. margin-top: 24rpx;
  883. }
  884. .desc-box{
  885. display: flex;
  886. flex-wrap: wrap;
  887. margin-top: 24rpx;
  888. .item{
  889. width: 120rpx;
  890. height: 36rpx;
  891. line-height: 36rpx;
  892. text-align: center;
  893. background: #F0F0F0;
  894. border-radius: 8rpx 8rpx 8rpx 8rpx;
  895. font-size: 24rpx;
  896. color: #AAAAAA;
  897. margin-bottom: 20rpx;
  898. }
  899. .item+.item{
  900. margin-left: 12rpx;
  901. }
  902. }
  903. .box{
  904. .menu-item+.menu-item{
  905. border-top: 1rpx solid #F0F0F0;
  906. }
  907. .menu-item{
  908. margin-bottom: 20rpx;
  909. .title{
  910. display: flex;
  911. align-items: center;
  912. .icon{
  913. width: 30rpx;
  914. height: 30rpx;
  915. margin-right: 12rpx;
  916. }
  917. }
  918. .item-box{
  919. display: flex;
  920. flex-wrap: wrap;
  921. margin-top: 20rpx;
  922. .item{
  923. width: 33%;
  924. text-align: center;
  925. font-size: 24rpx;
  926. color: #AAAAAA;
  927. margin-bottom: 20rpx;
  928. }
  929. }
  930. }
  931. }
  932. }
  933. }
  934. </style>