| | |
| | | id="mapId" |
| | | class="map" |
| | | scale="15" |
| | | :show-location="true" |
| | | :show-location="mapShowLocation" |
| | | :polygons="eleBusinessArea" |
| | | :markers="markers" |
| | | :latitude="latitude" |
| | |
| | | <text class="f26 c3 mt10">{{item.name}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="index_box_vip"> |
| | | <view class="index_box_vip" v-if="tcList.length > 0"> |
| | | <view class="index_box_vip_head"> |
| | | <text>热销套餐</text> |
| | | <button open-type="getPhoneNumber" @getphonenumber="getPhone" v-if="!userInfo.mobile">获取手机号</button> |
| | | <text @click="jumpTC">更多优惠 ></text> |
| | | </view> |
| | | <scroll-view scroll-x class="scrollView"> |
| | |
| | | </view> |
| | | <view class="vip3"> |
| | | <view class="vip3_info">低至{{item.dayPrice}}元/天</view> |
| | | <view class="vip3_button" @click="purchase(item.id)">购买</view> |
| | | <button class="vip3_button" open-type="getPhoneNumber" @getphonenumber="getPhone" v-if="!userInfo.mobile">购买</button> |
| | | <view class="vip3_button" @click="purchase(item.id)" v-else>购买</view> |
| | | </view> |
| | | </view> |
| | | </scroll-view> |
| | | </view> |
| | | <view class="index_box_poster" @click="jumpX"> |
| | | <!-- <view class="index_box_poster" @click="jumpX"> |
| | | <image class="imgfull" :src="info.leaseNoticeUrl" mode="widthFix"></image> |
| | | </view> |
| | | </view> --> |
| | | <view class="index_box_video" v-if="info.leaseVideoUrl"> |
| | | <video class="img100b" :src="info.leaseVideoUrl" enable-danmu danmu-btn controls></video> |
| | | </view> |
| | |
| | | </view> |
| | | <image src="@/static/images/ic_safe@2x.png" mode="widthFix"></image> |
| | | </view> |
| | | <view class="index_scancode_fl" v-if="taocan.length > 0"> |
| | | <view class="index_scancode_fl_tips">福利</view> |
| | | <swiper v-if="taocan.length > 1" class="index_scancode_fl_swiper" vertical autoplay circular interval="3000" duration="500" :indicator-dots="false"> |
| | | <swiper-item v-for="(item, index) in taocan" :key="index"> |
| | | <view class="index_scancode_fl_text">仅需{{ item.price || 0 }}元 可得“{{ item.name || '' }}”骑行卡</view> |
| | | </swiper-item> |
| | | </swiper> |
| | | <view v-else class="index_scancode_fl_text">仅需{{ taocan[0] ? taocan[0].price || 0 : 0 }}元 可得“{{ taocan[0] ? taocan[0].name || '' : '' }}”骑行卡</view> |
| | | <view class="index_scancode_fl_btn" @click="jumpTC">去看看</view> |
| | | </view> |
| | | <button class="index_scancode_bottom" open-type="getPhoneNumber" @getphonenumber="getPhone" v-if="!userInfo.mobile">扫码租车</button> |
| | | <view class="index_scancode_bottom" @click="carRental" v-else>扫码租车</view> |
| | | <view class="index_scancode_xieyi"> |
| | | <text @click.stop="jumpgz">计费规则</text> |
| | | <text>|</text> |
| | | <text @click.stop="jumpX">租赁须知</text> |
| | | </view> |
| | | <view class="index_scancode_zw"></view> |
| | | </view> |
| | | <!-- 自行车-缴纳押金 --> |
| | |
| | | <text>温馨提示</text> |
| | | <text>骑行需要缴纳{{(info.deposit / 100).toFixed(2)}}元自行车押金</text> |
| | | <text>(押金随时可退)</text> |
| | | </view> |
| | | <view class="index_scancode_fl" v-if="taocan.length > 0"> |
| | | <view class="index_scancode_fl_tips">福利</view> |
| | | <swiper v-if="taocan.length > 1" class="index_scancode_fl_swiper" vertical autoplay circular interval="3000" duration="500" :indicator-dots="false"> |
| | | <swiper-item v-for="(item, index) in taocan" :key="index"> |
| | | <view class="index_scancode_fl_text">仅需{{ item.price || 0 }}元 可得“{{ item.name || '' }}”骑行卡</view> |
| | | </swiper-item> |
| | | </swiper> |
| | | <view v-else class="index_scancode_fl_text">仅需{{ taocan[0] ? taocan[0].price || 0 : 0 }}元 可得“{{ taocan[0] ? taocan[0].name || '' : '' }}”骑行卡</view> |
| | | <view class="index_scancode_fl_btn" @click="jumpTC">去看看</view> |
| | | </view> |
| | | <view class="deposit_read" @click="active = !active"> |
| | | <image src="@/static/icon/ic_select@2x.png" mode="widthFix" v-if="!active"></image> |
| | |
| | | }, |
| | | { |
| | | id: 3, |
| | | name: '计价规则', |
| | | icon: require('@/static/images/home_ic_guize@2x.png') |
| | | name: '团购验券', |
| | | icon: require('@/static/images/home_ic_yajing@x.png') |
| | | }, |
| | | { |
| | | id: 4, |
| | | name: '消费明细', |
| | | icon: require('@/static/images/home_ic_mingxi@2x.png') |
| | | }, |
| | | { |
| | | id: 5, |
| | | name: '运营中心', |
| | | icon: require('@/static/icon/home_ic_mingxi.png') |
| | | }, |
| | | name: '个人中心', |
| | | icon: require('@/static/images/home_ic_jiesuan@x.png') |
| | | } |
| | | ], |
| | | |
| | | info: {}, |
| | |
| | | } |
| | | ], |
| | | onPullDownRefresh: false, |
| | | timerdian: null |
| | | timerdian: null, |
| | | taocan: [], |
| | | mapShowLocation: false |
| | | } |
| | | }, |
| | | components: { tram }, |
| | |
| | | }, |
| | | async onLoad(options) { |
| | | var that = this; |
| | | await this.$onLaunched; |
| | | |
| | | if (JSON.stringify(this.userInfo) == '{}') { |
| | | await this.$onLaunched; |
| | | } |
| | | await this.getAddress() |
| | | // await this.getHomeInfo() |
| | | await this.getSite() |
| | |
| | | }) |
| | | } |
| | | }) |
| | | this.getTC() |
| | | uni.$on('update', data => { |
| | | this.carRental() |
| | | }) |
| | | uni.$on('sweep', () => { |
| | | this.carRental() |
| | | }) |
| | | }, |
| | |
| | | this.onPullDownRefresh = true |
| | | this.refresh() |
| | | }, |
| | | onShow() { |
| | | async onShow() { |
| | | await this.$onLaunched; |
| | | this.refresh() |
| | | }, |
| | | onPageScroll(e) { |
| | | this.top = e.scrollTop |
| | | }, |
| | | methods: { |
| | | // 热销套餐 |
| | | getTC() { |
| | | this.$u.api.discountPage({ |
| | | capacity: 10, |
| | | page: 1, |
| | | model: {} |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | | this.taocan = res.data.records |
| | | } |
| | | }) |
| | | }, |
| | | // 分钟转换 |
| | | convertMinutesToHours(minutes) { |
| | | const hours = Math.floor(minutes / 60); // 计算小时数 |
| | |
| | | }, |
| | | // 跳转 |
| | | async jump(item) { |
| | | if (!this.userInfo || !this.userInfo.mobile) return |
| | | await this.refresh() |
| | | if (item.id === 3) { |
| | | // uni.navigateTo({ |
| | | // url: '/pages/pricingRules/pricingRules' |
| | | // }); |
| | | uni.navigateTo({ |
| | | url: '/pages/pricingRules/pricingRules' |
| | | url: '/pages/couponRedemption/couponRedemption' |
| | | }); |
| | | } else if (item.id === 4) { |
| | | uni.navigateTo({ |
| | | url: '/pages/consumptionDetails/consumptionDetails' |
| | | url: '/pages/personalCenter/personalCenter' |
| | | }); |
| | | } else if (item.id === 5) { |
| | | if (!this.userInfo.sysuser) { |
| | |
| | | } = loginRes; |
| | | that.$u.api.wxLogin({ |
| | | code |
| | | }) |
| | | .then(res => { |
| | | }).then(res => { |
| | | that.$store.commit('setToken', res.data.token) |
| | | that.$u.api.wxPhone({ |
| | | encryptedData: e.detail.encryptedData, |
| | | iv: e.detail.iv, |
| | | sessionKey: res.data.sessionKey |
| | | }).then(result => { |
| | | if (result.code === 200) { |
| | | that.$store.commit('setUserInfo', result.data |
| | | .userResponse) |
| | | that.$store.commit('setUserInfo', result.data.userResponse) |
| | | uni.redirectTo({ |
| | | url: '/pages/index/index' |
| | | }); |
| | | } |
| | | }) |
| | | }) |
| | |
| | | //手机定位服务(GPS)未授权 |
| | | uni.showToast({ title: "请打开手机GPS", icon: "none" }); |
| | | } else { |
| | | // 2、判断微信小程序是否授权位置信息 |
| | | uni.authorize({ |
| | | //授权请求窗口 |
| | | scope: "scope.userLocation", |
| | | success: (res) => { |
| | | that.fnGetlocation(); |
| | | }, |
| | | fail: (err) => { |
| | | err = err["errMsg"]; |
| | | uni.showModal({ content: "需要授权位置信息", confirmText: "确认授权" }) |
| | | .then((res) => { |
| | | if (res.confirm) { |
| | | uni.openSetting({ |
| | | success: (res) => { |
| | | if (res.authSetting["scope.userLocation"]) { |
| | | // 授权成功 |
| | | uni.showToast({ title: "授权成功", icon: "none" }); |
| | | that.fnGetlocation(); |
| | | } else { |
| | | // 未授权 |
| | | uni.showToast({ title: "授权失败,请重新授权", icon: "none" }); |
| | | uni.showModal({ |
| | | title: "授权", |
| | | content: "获取授权" + authouName + "失败,是否前往授权设置?", |
| | | success: function(result) { |
| | | if (result.confirm) { |
| | | uni.openSetting(); |
| | | } |
| | | }, |
| | | fail: function() { |
| | | uni.showToast({ title: "系统错误!", icon: "none" }); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | if (res.cancel) { |
| | | // 取消授权 |
| | | uni.showToast({ title: "你拒绝了授权,无法获得周边信息", icon: "none" }); |
| | | } |
| | | }); |
| | | }, |
| | | complete(res) { |
| | | if (res.errMsg == "authorize:ok") { |
| | | that.fnGetlocation(); |
| | | } else { |
| | | uni.showModal({ |
| | | title: "授权", |
| | | content: "获取授权" + authouName + "失败,是否前往授权设置?", |
| | | success: function(result) { |
| | | if (result.confirm) { |
| | | uni.openSetting(); |
| | | } |
| | | }, |
| | | fail: function() { |
| | | uni.showToast({ title: "系统错误!", icon: "none" }); |
| | | }, |
| | | }); |
| | | } |
| | | }, |
| | | }); |
| | | that.fnGetlocation(); |
| | | } |
| | | }, |
| | | }); |
| | |
| | | altitude: true, |
| | | isHighAccuracy: true, |
| | | success: function(res) { |
| | | that.mapShowLocation = true |
| | | that.latitude = res.latitude |
| | | that.longitude = res.longitude |
| | | }, |
| | | fail(err) { |
| | | if (err.errMsg === "getLocation:fail auth deny" || err.errMsg === "getLocation:fail authorize no response") { |
| | | uni.showModal({ content: "需要授权位置信息", confirmText: "确认授权" }).then((res) => { |
| | | if (res.confirm) { |
| | | uni.openSetting({ |
| | | success: (settingRes) => { |
| | | if (settingRes.authSetting["scope.userLocation"]) { |
| | | that.fnGetlocation(); |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | return |
| | | } |
| | | if (err.errMsg === "getLocation:fail 频繁调用会增加电量损耗,可考虑使用 wx.onLocationChange 监听地理位置变化") { |
| | | uni.showToast({ title: "请勿频繁定位", icon: "none" }); |
| | | } |
| | | if (err.errMsg === "getLocation:fail auth deny") { |
| | | // 未授权 |
| | | uni.showToast({ title: "无法定位,请重新获取位置信息", icon: "none" }); |
| | | } |
| | | if (err.errMsg === "getLocation:fail:ERROR_NOCELL&WIFI_LOCATIONSWITCHOFF") { |
| | | uni.showModal({ content: "请开启手机定位服务", showCancel: false }); |
| | |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | position: relative; |
| | | button { |
| | | position: absolute; |
| | | right: 0; |
| | | top: 0; |
| | | width: 200rpx; |
| | | height: 40rpx; |
| | | opacity: 0; |
| | | } |
| | | text { |
| | | &:nth-child(1) { |
| | | font-weight: 600; |
| | |
| | | |
| | | .index_zw1 { |
| | | width: 100%; |
| | | height: calc(env(safe-area-inset-bottom) + 310rpx); |
| | | height: calc(env(safe-area-inset-bottom) + 390rpx); |
| | | } |
| | | |
| | | .index_zw { |
| | |
| | | |
| | | .index_scancode { |
| | | width: 100%; |
| | | height: 306rpx; |
| | | // height: 306rpx; |
| | | background: linear-gradient(360deg, #FFFFFF 0%, #FFFFFF 58%, #D0FFFD 100%); |
| | | box-shadow: 0rpx -6rpx 16rpx 0rpx rgba(0, 0, 0, 0.1); |
| | | border-radius: 32rpx 32rpx 0rpx 0rpx; |
| | | position: fixed; |
| | | bottom: 0; |
| | | left: 0; |
| | | padding: 30rpx 20rpx; |
| | | padding: 30rpx 20rpx 30rpx 20rpx; |
| | | box-sizing: border-box; |
| | | |
| | | .index_scancode_top { |
| | |
| | | flex-shrink: 0; |
| | | } |
| | | } |
| | | |
| | | .index_scancode_fl { |
| | | width: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | margin-top: 18rpx; |
| | | .index_scancode_fl_tips { |
| | | flex-shrink: 0; |
| | | width: 64rpx; |
| | | height: 36rpx; |
| | | line-height: 36rpx; |
| | | text-align: center; |
| | | background: #FF5A31; |
| | | border-radius: 2rpx 12rpx 2rpx 12rpx; |
| | | margin-right: 16rpx; |
| | | font-weight: 400; |
| | | font-size: 24rpx; |
| | | color: #FFFFFF; |
| | | } |
| | | .index_scancode_fl_text { |
| | | flex: 1; |
| | | height: 36rpx; |
| | | line-height: 36rpx; |
| | | font-weight: 400; |
| | | font-size: 26rpx; |
| | | color: #FF5A31; |
| | | white-space: nowrap; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | } |
| | | .index_scancode_fl_swiper { |
| | | flex: 1; |
| | | height: 36rpx; |
| | | } |
| | | .index_scancode_fl_btn { |
| | | flex-shrink: 0; |
| | | height: 36rpx; |
| | | line-height: 36rpx; |
| | | text-align: center; |
| | | background: #EAF9F8; |
| | | border-radius: 4rpx; |
| | | font-weight: 400; |
| | | font-size: 24rpx; |
| | | color: #01B6AD; |
| | | margin-left: 8rpx; |
| | | } |
| | | } |
| | | |
| | | .index_scancode_bottom { |
| | | width: 100%; |
| | |
| | | font-weight: 500; |
| | | color: #FFFFFF; |
| | | margin-top: 30rpx; |
| | | } |
| | | |
| | | .index_scancode_xieyi { |
| | | width: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | margin-top: 30rpx; |
| | | text { |
| | | font-weight: 400; |
| | | font-size: 26rpx; |
| | | color: #999999; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | background: linear-gradient(360deg, #FFFFFF 0%, #FFFFFF 58%, #D0FFFD 100%); |
| | | box-shadow: 0rpx -6rpx 16rpx 0rpx rgba(0, 0, 0, 0.1); |
| | | border-radius: 32rpx 32rpx 0rpx 0rpx; |
| | | |
| | | .index_scancode_fl { |
| | | width: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | margin-top: 30rpx; |
| | | .index_scancode_fl_tips { |
| | | flex-shrink: 0; |
| | | width: 64rpx; |
| | | height: 36rpx; |
| | | line-height: 36rpx; |
| | | text-align: center; |
| | | background: #FF5A31; |
| | | border-radius: 2rpx 12rpx 2rpx 12rpx; |
| | | margin-right: 16rpx; |
| | | font-weight: 400; |
| | | font-size: 24rpx; |
| | | color: #FFFFFF; |
| | | } |
| | | .index_scancode_fl_text { |
| | | flex: 1; |
| | | height: 36rpx; |
| | | line-height: 36rpx; |
| | | font-weight: 400; |
| | | font-size: 26rpx; |
| | | color: #FF5A31; |
| | | white-space: nowrap; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | } |
| | | .index_scancode_fl_swiper { |
| | | flex: 1; |
| | | height: 36rpx; |
| | | } |
| | | .index_scancode_fl_btn { |
| | | flex-shrink: 0; |
| | | height: 36rpx; |
| | | line-height: 36rpx; |
| | | text-align: center; |
| | | background: #EAF9F8; |
| | | border-radius: 4rpx; |
| | | font-weight: 400; |
| | | font-size: 24rpx; |
| | | color: #01B6AD; |
| | | margin-left: 8rpx; |
| | | } |
| | | } |
| | | |
| | | .deposit_text { |
| | | width: 100%; |
| | |
| | | width: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | margin-top: 100rpx; |
| | | margin-top: 40rpx; |
| | | |
| | | image { |
| | | width: 32rpx; |
| | |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | | </style> |