map.vue 24 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021
  1. <template>
  2. <view class="map">
  3. <MyNav title="IHG地图" bgColor="" :backIcon="false"></MyNav>
  4. <!-- 查询 -->
  5. <view class="search" v-if="true">
  6. <view class="search-top" style="padding: 16rpx 30rpx 0rpx;margin-bottom: 20rpx;">
  7. <view class="search-loupe" @click="isopenSearch = !isopenSearch">
  8. <image style="width: 32rpx;height: 32rpx;" src="/static/icon/search02.png" mode=""></image>
  9. </view>
  10. <view class="search-area-all">
  11. <view :class="isSelectArea?'search-area':'search-areaClick'" @click="openArea">
  12. <text>地区</text>
  13. <image v-if="isSelectArea" style="width: 16rpx;height: 10rpx;" src="/static/icon/down01.png"
  14. mode="">
  15. </image>
  16. <image v-if="!isSelectArea" style="width: 16rpx;height: 10rpx;" src="/static/icon/up01.png"
  17. mode="">
  18. </image>
  19. </view>
  20. <view :class="isSelectBrand?'search-area':'search-areaClick'" @click="openBrand">
  21. <text>品牌</text>
  22. <image v-if="isSelectBrand" style="width: 16rpx;height: 10rpx;" src="/static/icon/down01.png"
  23. mode="">
  24. </image>
  25. <image v-if="!isSelectBrand" style="width: 16rpx;height: 10rpx;" src="/static/icon/up01.png"
  26. mode="">
  27. </image>
  28. </view>
  29. <view class="search-area" :class="isSelectSift?'search-area':'search-areaClick'" @click="openSift">
  30. <text>更多筛选</text>
  31. <image v-if="isSelectSift" style="width: 16rpx;height: 10rpx;" src="/static/icon/down01.png"
  32. mode="">
  33. </image>
  34. <image v-if="!isSelectSift" style="width: 16rpx;height: 10rpx;" src="/static/icon/up01.png"
  35. mode="">
  36. </image>
  37. </view>
  38. </view>
  39. <image style=" flex: none; width: 52rpx;height: 46rpx;" src="/static/icon/vip.png" mode=""></image>
  40. </view>
  41. <view class="search-detail" v-if="isopenSearch">
  42. <u-input placeholder="输入酒店/城市名称搜索酒店" border='none'>
  43. <template slot="suffix" style='margin-right:40rpx;'>
  44. <u-image :showLoading="true" :showError='true' src="/static/icon/search.png" width="40rpx"
  45. height="32rpx"></u-image>
  46. </template>
  47. </u-input>
  48. </view>
  49. <!-- 选择地区 -->
  50. <view class="search-detail" v-if="!isSelectArea">
  51. <view class="search-detail-area">
  52. <view class="areaTitle" v-for="(item,index) in areaList" :key="index" @click="checked(index)">
  53. <view :class="{'active-area':isActive === index}">
  54. {{item.title}}
  55. </view>
  56. </view>
  57. </view>
  58. <view class="search-detail-btn">
  59. <view class="search-detail-btn-left">
  60. <text>取消</text>
  61. </view>
  62. <view class="search-detail-btn-right">
  63. <text>确认</text>
  64. </view>
  65. </view>
  66. </view>
  67. <!-- 选择品牌-->
  68. <view class="search-detail" v-if="!isSelectBrand">
  69. <view class="search-detail-area">
  70. <view class="areaTitle" v-for="(item,index) in brandList" :key="index" @click="checked(index)">
  71. <view :class="{'active-area':isActive === index}">
  72. {{item.title}}
  73. </view>
  74. </view>
  75. </view>
  76. <view class="search-detail-btn">
  77. <view class="search-detail-btn-left">
  78. <text>取消</text>
  79. </view>
  80. <view class="search-detail-btn-right">
  81. <text>确认</text>
  82. </view>
  83. </view>
  84. </view>
  85. <!-- 筛选-->
  86. <view class="search-detail" v-if="!isSelectSift">
  87. <view class="partner">
  88. <view class="partner-top" @click="selectPartner">
  89. <text>合作伙伴</text>
  90. <image v-if="isPartner" style=" width: 20rpx; height: 12rpx; " src="/static/icon/up02.png"
  91. mode=""></image>
  92. <image v-if="!isPartner" style=" width: 20rpx; height: 12rpx; " src="/static/icon/down02.png"
  93. mode=""></image>
  94. </view>
  95. <view class="partner-main" v-if="isPartner">
  96. <uni-data-checkbox multiple v-model="value" :localdata="partner" @change="change">
  97. </uni-data-checkbox>
  98. </view>
  99. <view class="partner-top" style="border-top: none;" @click="selectJoin">
  100. <text>加盟品牌</text>
  101. <image v-if="isJoin" style=" width: 20rpx; height: 12rpx; " src="/static/icon/up02.png" mode="">
  102. </image>
  103. <image v-if="!isJoin" style=" width: 20rpx; height: 12rpx; " src="/static/icon/down02.png"
  104. mode=""></image>
  105. </view>
  106. <view class="partner-main" v-if="isJoin">
  107. <uni-data-checkbox multiple v-model="value" :localdata="partner" @change="change">
  108. </uni-data-checkbox>
  109. </view>
  110. <view class="search-detail-btn">
  111. <view class="search-detail-btn-left">
  112. <text>取消</text>
  113. </view>
  114. <view class="search-detail-btn-right">
  115. <text>确认</text>
  116. </view>
  117. </view>
  118. </view>
  119. </view>
  120. </view>
  121. <view class="address" v-if="isShow">
  122. <view style="height:1232rpx;">
  123. <hch-position ref="map" :markers="markers" @moveToMarkId="moveToMarkId"/>
  124. </view>
  125. <view class="address-nav" style="overflow-x: visible;">
  126. <view class="address-nav-btn">
  127. <view class="" @click="goLocation">
  128. <image style="width: 84rpx;height: 84rpx;" src="/static/icon/location.png" mode=""></image>
  129. </view>
  130. <view class="" @click="goHotelList">
  131. <image style="width: 84rpx;height: 84rpx;" src="/static/icon/list.png" mode=""></image>
  132. </view>
  133. </view>
  134. <view id="switch-container"
  135. style="width: 100%; overflow-x: scroll; display: none;align-items: center;justify-content: space-between;">
  136. </view>
  137. <scroll-view style="width: calc(100% + 32rpx);height:318rpx;white-space: nowrap;" :scroll-x="true" :scroll-left="scrolls.scrollX" :scroll-with-animation="true">
  138. <view style="width: 16rpx;display: inline-block;"></view>
  139. <view class="address-detail" v-for="(item,index) in hotelList" :key="index">
  140. <view class="mark">
  141. <image style=""
  142. :src="item.bg_img" mode="aspectFill"></image>
  143. </view>
  144. <view class="inner">
  145. <view class="address-detail-main">
  146. <view class="address-detail-main-left">
  147. <text class="title">{{item.name}}</text>
  148. <view class="content">
  149. <text>{{item.label}}</text>
  150. </view>
  151. <view class="bottom">
  152. <text class="bottom-left">¥</text>
  153. <text class="bottom-right">{{item.min_price}}起</text>
  154. </view>
  155. </view>
  156. <view class="address-detail-main-right" @click="goBook(item.id)">
  157. <text>预订</text>
  158. </view>
  159. </view>
  160. <view class="address-detail-position">
  161. <image style="width: 18rpx;height: 22rpx;" src="/static/icon/address02.png" mode="">
  162. </image>
  163. <text style="margin-left:4rpx ;">{{item.distance}}km</text>
  164. </view>
  165. </view>
  166. </view>
  167. <view style="width: 1rpx;display: inline-block;"></view>
  168. </scroll-view>
  169. </view>
  170. </view>
  171. <!-- 酒店列表 -->
  172. <view class="hotel-list" v-if="!isShow">
  173. <view class="hotel-list-item" v-for="(item,index) in hotelList" :key="index" @click="goBook(item.id)">
  174. <view class="wrap">
  175. <view class="mark">
  176. <image style="width: 694rpx;height: 318rpx;border-radius: 10rpx;" :src="item.bg_img"
  177. mode=""></image>
  178. </view>
  179. <view class="inner">
  180. <view class="address-detail-main">
  181. <view class="address-detail-main-left">
  182. <text class="title">{{item.name}}</text>
  183. <view class="content">
  184. <text>{{item.label}}</text>
  185. </view>
  186. <view class="bottom">
  187. <text class="bottom-left">¥</text>
  188. <text class="bottom-right">{{item.min_price}}起</text>
  189. </view>
  190. </view>
  191. <view class="address-detail-main-right" @click.stop="goBook(item.id)">
  192. <text>预订</text>
  193. </view>
  194. </view>
  195. <view class="address-detail-position">
  196. <image style="width: 18rpx;height: 22rpx;" src="/static/icon/address02.png" mode=""></image>
  197. <text style="margin-left:4rpx ;">{{item.distance}}km</text>
  198. </view>
  199. </view>
  200. </view>
  201. </view>
  202. <!-- 触底 -->
  203. <view class="home-bottom">
  204. <uni-load-more :status="status" color="#CCCCCC" :content-text="contentText" />
  205. </view>
  206. <view class="return-btn" @click="returnBtn">
  207. <image style="width: 132rpx;height: 132rpx;border-radius: 50%;" src="/static/icon/return01.png" mode="">
  208. </image>
  209. </view>
  210. </view>
  211. <view style="height: 110rpx;"></view>
  212. <tab-bar></tab-bar>
  213. </view>
  214. </template>
  215. <script>
  216. import TabBar from '../../components/TabBar/tabbar.vue'
  217. import HchPosition from '../../components/hch-position/hch-position.vue'
  218. import MyNav from "@/components/my-nav/my-nav.vue"
  219. export default {
  220. components: {
  221. TabBar,
  222. HchPosition,
  223. MyNav
  224. },
  225. data() {
  226. return {
  227. scrolls:{scrollX: 0},
  228. hotelList:[],
  229. //门店在地图上的标记 以下字段必填
  230. markers: [],
  231. //经纬度
  232. latitude:'',
  233. longitude:'',
  234. //暂无数据
  235. status: 'noMore',
  236. contentText: {
  237. contentdown: '查看更多',
  238. contentrefresh: '加载中',
  239. contentnomore: '—— 已经到底啦 ——'
  240. },
  241. //是否展示地图
  242. isShow: true,
  243. value: [0],
  244. //合作伙伴
  245. partner: [{
  246. text: '足球',
  247. value: 0
  248. }, {
  249. text: '篮球',
  250. value: 1
  251. }, {
  252. text: '游泳',
  253. value: 2
  254. }, {
  255. text: '游泳',
  256. value: 3
  257. }, {
  258. text: '游泳',
  259. value: 4
  260. }, {
  261. text: '游泳',
  262. value: 5
  263. }, {
  264. text: '游泳',
  265. value: 6
  266. }, {
  267. text: '游泳',
  268. value: 7
  269. }, ],
  270. //品牌
  271. brandList: [{
  272. title: '谷歌'
  273. }, {
  274. title: '微软'
  275. }, {
  276. title: 'iphone'
  277. }, {
  278. title: '新希望'
  279. }, {
  280. title: '三江重工'
  281. }, {
  282. title: 'JavaScript'
  283. }],
  284. //地区
  285. areaList: [{
  286. title: '重庆'
  287. }, {
  288. title: '成都'
  289. }, {
  290. title: '绵阳'
  291. }, {
  292. title: '广汉'
  293. }, {
  294. title: '内江'
  295. }, {
  296. title: '宜宾'
  297. }, {
  298. title: '大理'
  299. }, {
  300. title: '自贡'
  301. }, {
  302. title: '贵州'
  303. }, {
  304. title: '泸州'
  305. }],
  306. //激活指定table菜单
  307. isActive: 0,
  308. //展开搜索
  309. isopenSearch: false,
  310. //选择地区
  311. isSelectArea: true,
  312. //选择品牌
  313. isSelectBrand: true,
  314. //刷选
  315. isSelectSift: true,
  316. //是否展示合作伙伴
  317. isPartner: false,
  318. //是否展示加盟品牌
  319. isJoin: false,
  320. }
  321. },
  322. onLoad() {
  323. //获取经纬度
  324. this.updated()
  325. this.$api.hotel.getHotelCategory().then(res=>{
  326. console.log(res)
  327. })
  328. },
  329. methods: {
  330. goLocation(){
  331. let _this = this
  332. uni.getLocation({
  333. type: "gcj02", //返回可以用于wx.openLocation的经纬度
  334. success: function(res) {
  335. _this.latitude = res.latitude
  336. _this.longitude = res.longitude
  337. _this.$refs.map.goLocation(res.latitude,res.longitude)
  338. //获取酒店列表
  339. _this.getList()
  340. },
  341. fail: function(res) {
  342. console.log(res)
  343. }
  344. })
  345. },
  346. //在地图渲染更新完成时触发的方法
  347. updated() {
  348. let _this = this
  349. uni.getLocation({
  350. type: "gcj02", //返回可以用于wx.openLocation的经纬度
  351. success: function(res) {
  352. _this.latitude = res.latitude
  353. _this.longitude = res.longitude
  354. _this.$refs.map.goLocation(res.latitude,res.longitude)
  355. //获取酒店列表
  356. _this.getList()
  357. },
  358. fail: function(res) {
  359. console.log(res)
  360. }
  361. })
  362. },
  363. //计算酒店距离我的位置--int
  364. calcDistanceFromHotel({x0,y0},{x1,y1}){
  365. //x0,y0是我的坐标(经纬度)
  366. //x1,y1是酒店坐标(经纬度)
  367. // console.log(x0,y0,x1,y1);
  368. return this.space(x0,y0,x1,y1);
  369. return Math.sqrt(Math.pow(Math.abs(x1-x0),2)+Math.pow(Math.abs(y1-y0),2));//返回距离
  370. },
  371. //遍历所有酒店,并计算出酒店分别与我的距离--数组
  372. setEachHotelDistance(hotelArray=[],{x0,y0}){
  373. hotelArray.map(item=>{
  374. item.distanceToMe=this.calcDistanceFromHotel({x0,y0},{x1:item.longitude,y1:item.latitude})
  375. return item;
  376. })
  377. return hotelArray;
  378. },
  379. //筛选出距离我最近的酒店--对象
  380. getMinDistanceHotel({x0,y0}){
  381. this.markers=this.setEachHotelDistance(this.markers,{x0,y0});
  382. this.markers.sort((prev,next)=>{
  383. return prev.distanceToMe-next.distanceToMe;
  384. })
  385. return this.markers[0];
  386. },
  387. space(lat1, lng1, lat2, lng2) {
  388. var radLat1 = lat1 * Math.PI / 180.0;
  389. var radLat2 = lat2 * Math.PI / 180.0;
  390. var a = radLat1 - radLat2;
  391. var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
  392. var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
  393. Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
  394. s = s * 6378.137;
  395. s = Math.round(s * 10000) / 10000;
  396. return s // 单位千米
  397. },
  398. //-------------------------------------
  399. getList() {
  400. this.$api.hotel.getHotelList({
  401. page: 1
  402. }).then(res => {
  403. this.hotelList = res.data.data
  404. this.markers = this.hotelList.map(item=>{
  405. const distance =this.calcDistanceFromHotel({x0:this.latitude, y0:this.longitude}, {x1:item.latitude,y1:item.longitude}).toFixed(1);
  406. item.distance = distance;
  407. return {
  408. id:item.id,
  409. latitude: item.latitude,
  410. longitude: item.longitude,
  411. width:'34rpx',
  412. height:'40rpx',
  413. iconPath:'../../static/icon/late02.png' ,
  414. distance: distance,
  415. active: {
  416. width: '90rpx',
  417. height: '100rpx',
  418. iconPath: item.logo,
  419. },
  420. noActive:{
  421. width:'34rpx',
  422. height:'40rpx',
  423. iconPath:'../../static/icon/late02.png' ,
  424. },
  425. callout1: {
  426. content:item.name,
  427. borderRadius: 10,
  428. padding: 10,
  429. display: "ALWAYS",
  430. }
  431. }
  432. })
  433. console.log(this.markers, '----->markers')
  434. let mylongitude = this.longitude
  435. let mylatitude = this.latitude
  436. let a = this.getMinDistanceHotel({x0:mylongitude,y0:mylatitude})
  437. console.log(a,'----->最近酒店');
  438. })
  439. },
  440. //去预定页面
  441. goBook(id) {
  442. uni.navigateTo({
  443. url: '/pages/map/hotel-book/index?hotel_id='+id
  444. })
  445. },
  446. //返回上一级
  447. returnBtn() {
  448. this.isShow = !this.isShow
  449. },
  450. //打开酒店列表
  451. goHotelList() {
  452. console.log(111);
  453. this.isShow = !this.isShow
  454. },
  455. //是否展示加盟品牌
  456. selectJoin() {
  457. this.isJoin = !this.isJoin
  458. },
  459. //是否展示合作伙伴
  460. selectPartner() {
  461. this.isPartner = !this.isPartner
  462. },
  463. //合作伙伴刷选
  464. change(e) {
  465. console.log('e:', e);
  466. },
  467. //菜单index切换
  468. checked(index) {
  469. this.isActive = index
  470. },
  471. //展开地区选择
  472. openArea() {
  473. console.log(111);
  474. this.isSelectArea = !this.isSelectArea
  475. },
  476. //展开品牌选择
  477. openBrand() {
  478. this.isSelectBrand = !this.isSelectBrand
  479. },
  480. //展开筛选选择
  481. openSift() {
  482. this.isSelectSift = !this.isSelectSift
  483. },
  484. //下面酒店位移
  485. moveToMarkId(markId){
  486. this.markers.forEach((item,index) => {
  487. if(markId == item.id){
  488. this.scrolls.scrollX = ((496+16) * index) + 'rpx';
  489. return;
  490. }
  491. })
  492. }
  493. }
  494. }
  495. </script>
  496. <style lang="scss" scoped>
  497. page {
  498. height: 100%;
  499. }
  500. .map {
  501. height: 100%;
  502. background-color: #f9f9f9;
  503. display: flex;
  504. flex-direction: column;
  505. }
  506. .return-btn {
  507. position: fixed;
  508. right: 0;
  509. top: 927rpx;
  510. z-index: 99;
  511. }
  512. .home-bottom {
  513. height: 60rpx;
  514. background-color: #f9f9f9;
  515. }
  516. .hotel-list {
  517. width: 100%;
  518. background-color: #f9f9f9;
  519. padding: 32rpx 30rpx;
  520. padding-bottom: 200rpx;
  521. .hotel-list-item {
  522. width: 100%;
  523. margin-bottom: 20rpx;
  524. .wrap {
  525. width: 100%;
  526. height: 318rpx;
  527. position: relative;
  528. box-shadow: 0px 4rpx 8rpx 0px rgba(0, 0, 0, 0.08);
  529. border-radius: 10rpx;
  530. .inner {
  531. width: 100%;
  532. height: 318rpx;
  533. border-radius: 10rpx;
  534. position: absolute;
  535. z-index: 2;
  536. top: 0;
  537. left: 0;
  538. .address-detail-main {
  539. position: absolute;
  540. left: 0;
  541. bottom: 30rpx;
  542. width: 100%;
  543. display: flex;
  544. align-items: flex-end;
  545. justify-content: space-between;
  546. .address-detail-main-left {
  547. position: absolute;
  548. left: 20rpx;
  549. .title {
  550. font-size: 32rpx;
  551. font-weight: bold;
  552. color: #FFFFFF;
  553. }
  554. .content {
  555. margin: 12rpx 0 20rpx;
  556. width: 92rpx;
  557. height: 34rpx;
  558. background: rgba(142, 160, 166, .6);
  559. border-radius: 17rpx;
  560. color: #ffffff;
  561. font-size: 22rpx;
  562. display: flex;
  563. align-items: center;
  564. justify-content: center;
  565. }
  566. .bottom {
  567. display: flex;
  568. align-items: center;
  569. justify-content: flex-start;
  570. .bottom-left {
  571. font-size: 24rpx;
  572. font-weight: bold;
  573. color: #ffffff;
  574. margin-right: 6rpx;
  575. }
  576. .bottom-right {
  577. font-size: 32rpx;
  578. font-weight: bold;
  579. color: #ffffff;
  580. }
  581. }
  582. }
  583. .address-detail-main-right {
  584. position: absolute;
  585. right: 24rpx;
  586. width: 120rpx;
  587. height: 44rpx;
  588. background: #FF6300;
  589. box-shadow: 0px 4rpx 8rpx 0px rgba(0, 0, 0, 0.08);
  590. border-radius: 22rpx;
  591. display: flex;
  592. align-items: center;
  593. justify-content: center;
  594. color: #ffffff;
  595. font-size: 28rpx;
  596. }
  597. }
  598. .address-detail-position {
  599. position: absolute;
  600. top: 22rpx;
  601. right: 24rpx;
  602. display: flex;
  603. align-items: center;
  604. justify-content: center;
  605. font-weight: 500;
  606. color: #FFFFFF;
  607. font-size: 20rpx;
  608. }
  609. }
  610. }
  611. }
  612. }
  613. .search-detail {
  614. width: 100%;
  615. position: absolute;
  616. top: 88rpx;
  617. z-index: 999 !important;
  618. background-color: #ffffff;
  619. box-shadow: 0px 12rpx 16rpx 0px rgba(220, 222, 229, 0.4);
  620. padding: 20rpx 30rpx 20rpx;
  621. .partner {
  622. .partner-top {
  623. height: 88rpx;
  624. border-top: 2rpx solid #F0F0F0;
  625. border-bottom: 2rpx solid #F0F0F0;
  626. display: flex;
  627. align-items: center;
  628. justify-content: space-between;
  629. color: #333;
  630. font-size: 28rpx;
  631. }
  632. .partner-main {
  633. margin-top: 32rpx;
  634. ::v-deep .uni-data-checklist .checklist-group .checklist-box {
  635. width: 26%;
  636. }
  637. ::v-deep .uni-data-checklist .checklist-group .checklist-box .checkbox__inner {
  638. width: 48rpx;
  639. height: 48rpx;
  640. }
  641. ::v-deep .uni-data-checklist .checklist-group .checklist-box .checkbox__inner .checkbox__inner-icon {
  642. top: 6rpx !important;
  643. left: 17rpx !important;
  644. height: 24rpx !important;
  645. width: 15rpx !important;
  646. border-right-color: #ff6200;
  647. border-bottom-color: #ff6200;
  648. }
  649. ::v-deep .uni-data-checklist .checklist-group .checklist-box.is--default.is-checked .checklist-text {
  650. color: #666 !important;
  651. font-size: 24rpx !important;
  652. }
  653. ::v-deep .checklist-text {
  654. font-size: 24rpx !important;
  655. }
  656. ::v-deep .uni-data-checklist .checklist-group .checklist-box.is--default.is-checked .checkbox__inner {
  657. border-color: #EDEDED !important;
  658. background-color: #ffffff;
  659. }
  660. }
  661. }
  662. .search-detail-area {
  663. width: 100%;
  664. display: flex;
  665. flex-wrap: wrap;
  666. justify-content: flex-start;
  667. align-items: center;
  668. .areaTitle {
  669. width: 156rpx;
  670. height: 56rpx;
  671. background: #FFFFFF;
  672. border: 2rpx solid #EDEDED;
  673. border-radius: 28rpx;
  674. font-size: 28rpx;
  675. color: #666;
  676. display: flex;
  677. justify-content: center;
  678. align-items: center;
  679. margin-right: 20rpx;
  680. margin-bottom: 18rpx;
  681. &:nth-child(4n) {
  682. margin-right: 0;
  683. }
  684. }
  685. // .areaTitle-item {
  686. // width: 156rpx;
  687. // height: 56rpx;
  688. // background-color: #F1F1F1;
  689. // border-radius: 26rpx;
  690. // font-size: 24rpx;
  691. // color: #999;
  692. // display: flex;
  693. // justify-content: center;
  694. // align-items: center;
  695. // }
  696. .active-area {
  697. width: 156rpx;
  698. height: 56rpx;
  699. border-radius: 28rpx;
  700. background-color: #FF6200;
  701. color: #fff;
  702. display: flex;
  703. justify-content: center;
  704. align-items: center;
  705. }
  706. }
  707. .search-detail-btn {
  708. display: flex;
  709. align-items: center;
  710. justify-content: space-between;
  711. margin: 38rpx 0 20rpx;
  712. .search-detail-btn-left {
  713. flex: 1;
  714. height: 76rpx;
  715. background: rgba(237, 237, 237, .55);
  716. border-radius: 8rpx;
  717. color: #999999;
  718. font-size: 30rpx;
  719. display: flex;
  720. align-items: center;
  721. justify-content: center;
  722. font-weight: bold;
  723. }
  724. .search-detail-btn-right {
  725. flex: 1;
  726. height: 76rpx;
  727. background: linear-gradient(270deg, #FF6200 0%, #FF9342 100%);
  728. border-radius: 8rpx;
  729. color: #FFFFFF;
  730. font-size: 30rpx;
  731. display: flex;
  732. align-items: center;
  733. justify-content: center;
  734. margin-left: 22rpx;
  735. font-weight: bold;
  736. }
  737. }
  738. ::v-deep .u-input {
  739. width: 690rpx !important;
  740. height: 68rpx !important;
  741. background: #F1F1F1;
  742. border-radius: 74rpx;
  743. }
  744. ::v-deep .u-input__content__field-wrapper {
  745. padding-left: 36rpx;
  746. }
  747. }
  748. .search-top {
  749. display: flex;
  750. align-items: center;
  751. justify-content: space-between;
  752. }
  753. .search {
  754. position: relative;
  755. flex: none;
  756. width: 100%;
  757. background: #FFFFFF;
  758. box-shadow: 0px 12rpx 16rpx 0px rgba(220, 222, 229, 0.4);
  759. display: flex;
  760. flex-direction: column;
  761. align-items: inherit;
  762. justify-content: space-between;
  763. .search-loupe {
  764. flex: none;
  765. width: 60rpx;
  766. height: 60rpx;
  767. background: #FFFFFF;
  768. border-radius: 50%;
  769. border: 2rpx solid #EDEDED;
  770. display: flex;
  771. align-items: center;
  772. justify-content: center;
  773. margin-right: 16rpx;
  774. }
  775. .search-area-all {
  776. flex: 1;
  777. display: flex;
  778. align-items: center;
  779. justify-content: flex-start;
  780. .search-areaClick {
  781. padding: 12rpx 22rpx;
  782. height: 52rpx;
  783. background: #FFFFFF;
  784. border-radius: 26rpx;
  785. border: 2rpx solid #FF6200;
  786. font-weight: 500;
  787. color: #FF6200;
  788. font-size: 28rpx;
  789. display: flex;
  790. align-items: center;
  791. justify-content: center;
  792. margin-right: 16rpx;
  793. text {
  794. margin-right: 8rpx;
  795. }
  796. }
  797. .search-area {
  798. padding: 12rpx 22rpx;
  799. height: 52rpx;
  800. background: #FFFFFF;
  801. border-radius: 26rpx;
  802. border: 2rpx solid #EDEDED;
  803. font-weight: 500;
  804. color: #666666;
  805. font-size: 28rpx;
  806. display: flex;
  807. align-items: center;
  808. justify-content: center;
  809. margin-right: 16rpx;
  810. text {
  811. margin-right: 8rpx;
  812. }
  813. }
  814. }
  815. }
  816. .address-nav {
  817. position: absolute;
  818. width: 100%;
  819. bottom: 34rpx;
  820. padding: 0 16rpx;
  821. display: flex;
  822. flex-direction: column;
  823. align-items: center;
  824. justify-content: space-between;
  825. overflow-x: scroll;
  826. .address-nav-btn {
  827. width: 100%;
  828. display: flex;
  829. align-items: center;
  830. justify-content: space-between;
  831. }
  832. }
  833. .address {
  834. flex: 1;
  835. position: relative;
  836. .address-detail {
  837. display: inline-block;
  838. position: relative;
  839. flex: none;
  840. width: 496rpx;
  841. height: 318rpx;
  842. border-radius: 10rpx;
  843. margin-right: 16rpx;
  844. &:last-child {
  845. margin-right: 0rpx;
  846. }
  847. .mark{
  848. height: inherit;
  849. width: inherit;
  850. image{
  851. width: 100%;
  852. height:100%;
  853. border-radius: 10rpx;
  854. }
  855. }
  856. .inner {
  857. width: 100%;
  858. height: inherit;
  859. border-radius: 10rpx;
  860. position: absolute;
  861. z-index: 2;
  862. top: 0;
  863. left: 0;
  864. .address-detail-main {
  865. position: absolute;
  866. left: 0;
  867. bottom: 30rpx;
  868. width: 100%;
  869. display: flex;
  870. align-items: flex-end;
  871. justify-content: space-between;
  872. .address-detail-main-left {
  873. position: absolute;
  874. left: 20rpx;
  875. .title {
  876. font-size: 32rpx;
  877. font-weight: bold;
  878. color: #FFFFFF;
  879. }
  880. .content {
  881. margin: 12rpx 0 20rpx;
  882. width: 92rpx;
  883. height: 34rpx;
  884. background: rgba(142, 160, 166, .6);
  885. border-radius: 17rpx;
  886. color: #ffffff;
  887. font-size: 22rpx;
  888. display: flex;
  889. align-items: center;
  890. justify-content: center;
  891. }
  892. .bottom {
  893. display: flex;
  894. align-items: center;
  895. justify-content: flex-start;
  896. .bottom-left {
  897. font-size: 24rpx;
  898. font-weight: bold;
  899. color: #ffffff;
  900. margin-right: 6rpx;
  901. }
  902. .bottom-right {
  903. font-size: 32rpx;
  904. font-weight: bold;
  905. color: #ffffff;
  906. }
  907. }
  908. }
  909. .address-detail-main-right {
  910. position: absolute;
  911. right: 24rpx;
  912. width: 120rpx;
  913. height: 44rpx;
  914. background: #FF6300;
  915. box-shadow: 0px 4rpx 8rpx 0px rgba(0, 0, 0, 0.08);
  916. border-radius: 22rpx;
  917. display: flex;
  918. align-items: center;
  919. justify-content: center;
  920. color: #ffffff;
  921. font-size: 28rpx;
  922. }
  923. }
  924. .address-detail-position {
  925. position: absolute;
  926. top: 22rpx;
  927. right: 24rpx;
  928. display: flex;
  929. align-items: center;
  930. justify-content: center;
  931. font-weight: 500;
  932. color: #FFFFFF;
  933. font-size: 20rpx;
  934. }
  935. }
  936. }
  937. }
  938. </style>