MrShi
8 小时以前 658107c8a09e2ef74bab1ad7114eeaf367848a25
bicycle/pages/index/index.vue
@@ -17,7 +17,7 @@
                  id="mapId"
                  class="map"
                  scale="15"
                  :show-location="true"
                  :show-location="mapShowLocation"
                  :polygons="eleBusinessArea"
                  :markers="markers"
                  :latitude="latitude"
@@ -44,9 +44,10 @@
                  <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">
@@ -65,14 +66,15 @@
                     </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>
@@ -99,8 +101,23 @@
            </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>
      <!-- 自行车-缴纳押金 --> 
@@ -111,6 +128,16 @@
               <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>
@@ -307,19 +334,14 @@
               },
               {
                  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: {},
@@ -344,7 +366,9 @@
               }
            ],
            onPullDownRefresh: false,
            timerdian: null
            timerdian: null,
            taocan: [],
            mapShowLocation: false
         }
      },
      components: { tram },
@@ -353,10 +377,8 @@
      },
      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()
@@ -492,7 +514,11 @@
                  })
               }
            })
         this.getTC()
         uni.$on('update', data => {
            this.carRental()
         })
         uni.$on('sweep', () => {
            this.carRental()
         })
      },
@@ -500,13 +526,26 @@
         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);  // 计算小时数
@@ -715,14 +754,18 @@
         },
         // 跳转
         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) {
@@ -824,16 +867,18 @@
                     } = 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'
                              });
                           }
                        })
                     })
@@ -931,68 +976,7 @@
                     //手机定位服务(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();
                  }
               },
            });
@@ -1005,16 +989,27 @@
               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 });
@@ -1472,6 +1467,15 @@
                  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;
@@ -1604,7 +1608,7 @@
            
            .index_zw1 {
               width: 100%;
               height: calc(env(safe-area-inset-bottom) + 310rpx);
               height: calc(env(safe-area-inset-bottom) + 390rpx);
            }
            .index_zw {
@@ -1617,14 +1621,14 @@
      .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 {
@@ -1661,6 +1665,53 @@
               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%;
@@ -1675,6 +1726,19 @@
            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;
            }
         }
      }
@@ -1794,6 +1858,53 @@
         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%;
@@ -1835,7 +1946,7 @@
            width: 100%;
            display: flex;
            align-items: center;
            margin-top: 100rpx;
            margin-top: 40rpx;
            image {
               width: 32rpx;
@@ -2149,4 +2260,4 @@
         }
      }
   }
</style>
</style>