<template> <view class="page"> <view class="backimg" @click="toTips()"></view> <view class="choose_card"> <view class="check"> <view class="txt1"> 预约租车 </view> <view class="txt2" @click="tomap()"> 地图选车 </view> </view> <view class="area_li"> <view class="city" @click="showCity()"> <view class="txt"> 取车城市 </view> <view class="words" style="white-space: nowrap;"> {{cityList[0].cityName}} <image src="https://lxnapi.ccttiot.com/bike/img/static/uJkuBFsHACP6tnUo5nYm" mode=""></image> </view> </view> <view class="area" @click="getMapLocation()" style="white-space: nowrap;"> <view class="top"> <view class="txt"> 取车地点 </view> <view class="type"> 距最近店铺727m </view> </view> <view class="bot"> <view class="txt3"> {{addressInfo}} </view> <image src="https://lxnapi.ccttiot.com/bike/img/static/uJkuBFsHACP6tnUo5nYm" mode=""></image> </view> </view> <view class="dingw" style="white-space: nowrap;" @click="getaddress()"> 当前位置 <image src="https://lxnapi.ccttiot.com/bike/img/static/unTHfCN5IgnVKDbadsFp" mode=""></image> </view> </view> <view class="time_box"> <view class="time_li"> <view class="txt"> 取车时间 </view> <view class="words" @click="time1=true"> {{time}} <image src="https://lxnapi.ccttiot.com/bike/img/static/uJkuBFsHACP6tnUo5nYm" mode=""></image> </view> </view> <view class="time_li"> <view class="txt"> 选择租车周期 </view> <view class="words" @click="showdata=true"> {{dataInfo.dictLabel}} <image src="https://lxnapi.ccttiot.com/bike/img/static/uJkuBFsHACP6tnUo5nYm" mode=""></image> </view> </view> </view> <view class="btn" @click="tosele()"> 立即选车 </view> <!-- <image class="kefu" src="https://lxnapi.ccttiot.com/bike/img/static/u8osHvZfHL7u3lbveVXx" mode=""></image> --> </view> <view class="car_card" v-for="(item,index) in shopList" :key="index" @click="toStore(item)"> <view class="card_top"> <view class="tit"> {{item.name}} </view> <view class="txt"> {{item.rentalCar}}辆可租 <view class="iconfont icon-xiangyou1"> </view> </view> </view> <view class="type_box"> <view class="type"> {{item.distance}}m </view> <view class="address"> {{item.simpleAddress}} </view> </view> <view class="car_info"> <view class="car_img"> <image :src="item.models[0].picture" mode=""></image> </view> <view class="info"> <view class="modle"> {{item.models[0].model}} </view> <view class="price"> 日租¥ <span>{{item.models[0].price}}</span> </view> </view> </view> </view> <u-picker mode="time" v-model="time1" :params="params" @confirm="confirm1" start-year="2024" :default-time="pickertime" start="2024"></u-picker> <u-mask :show="showdata" @click="closeData()" :z-index='100' /> <view class="choosedata" v-if="showdata"> <view class="tit"> 请选择租车周期 <image src="https://lxnapi.ccttiot.com/bike/img/static/uLzTHCbE6TTRPYj6rv8X" mode="" @click="closeData()"></image> </view> <view class="li" v-for="(item,index) in dataList" :key="index" :class="index == dataIndex? 'act':''" @click="chooseData(item,index)"> {{item.dictLabel}} </view> </view> <tab-bar :indexs='0' style="" :userInfo='userInfo'></tab-bar> </view> </template> <script> const app = getApp(); var xBlufi = require("@/utils/blufi/xBlufi.js"); let _this = null; export default { data() { return { bgc: { backgroundColor: "#fff", }, cityList: [], dataList: [], gps: {}, cityInfo: {}, cityIndex: -1, addressInfo: '', time1: false, params: { year: false, month: true, day: true, hour: false, minute: false, second: false }, startTime: '', pickertime: '', time: '', showdata: false, dataIndex: 0, dataInfo: {}, shopList: [], userInfo:{} } }, onLoad() { this.getcityList() this.getdata() }, computed: { }, onShow() { this.getUserInfo() let that = this uni.getLocation({ type: 'gcj02', success: function(lb) { that.gps.latitude = lb.latitude; that.gps.longitude = lb.longitude; that.getCity() that.getaddress() that.getshopList() }, fail: function(error) { uni.showToast({ title: '未获取到定位信息,请点击设置勾选允许位置信息,即可使用全部功能', icon: 'none', duration: 2000 }); // that.getmarks() // 在这里处理获取位置信息失败的情况 } }) // 获取当前日期,并设置startDate和pickertime const now = new Date(); const month = now.getMonth() + 1; // 月份从0开始,因此加1 const day = now.getDate(); // 格式化为 MM-DD 的字符串 this.startDate = `${month < 10 ? '0' : ''}${month}-${day < 10 ? '0' : ''}${day}`; this.time = `${month < 10 ? '0' : ''}${month}月${day < 10 ? '0' : ''}${day}日`; // 初始化pickertime为当天的默认日期 this.pickertime = this.startDate; }, watch: { }, methods: { getUserInfo(){ this.$u.get("/getInfo").then((res) => { if(res.code==200){ this.userInfo=res.user console.log(this.userInfo); } }); }, tomap(){ if(this.userInfo.userId){ uni.navigateTo({ url:'/page_user/mapSele?index='+this.dataIndex }) }else{ uni.navigateTo({ url:'/pages/login/login' }) } console.log(this.dataInfo,'dataInfo'); // this.dataInfo = item // this.dataIndex = index }, toTips(){ uni.navigateTo({ url:'/page_user/tips' }) }, toStore(item) { if(this.userInfo.userId){ uni.navigateTo({ url: '/page_user/carStore?storeId=' + item.storeId }) }else{ uni.navigateTo({ url:'/pages/login/login' }) } }, getshopList() { let data = { // phoneLon:this.gps.latitude, phoneLon: 120.257144, // phoneLat:this.gps.longitude, phoneLat: 27.105719, isFreeCar: true } this.$u.post(`app/getStoreListByLocation`, data).then((res) => { if (res.code == 200) { this.shopList = res.data; } else { uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }); } }); }, chooseData(item, index) { // let data ={ // Data:item, // index,index // } // uni.setStorageSync('data', item); this.dataInfo = item this.dataIndex = index }, closeData() { this.showdata = false }, confirm1(selectedDate) { // 将用户选择的日期和当前日期进行比较 // 从回调中获取选择的月份和日期 const selectedMonth = parseInt(selectedDate.month, 10); const selectedDay = parseInt(selectedDate.day, 10); // 获取当前日期 const now = new Date(); const currentMonth = now.getMonth() + 1; const currentDay = now.getDate(); // 比较选择的日期和当前日期 if (selectedMonth < currentMonth || (selectedMonth === currentMonth && selectedDay < currentDay)) { // 如果选择的日期比当前日期早,则重置为pickertime const now = new Date(); const month = now.getMonth() + 1; // 月份从0开始,因此加1 const day = now.getDate(); // 格式化为 MM-DD 的字符串 this.time = `${month < 10 ? '0' : ''}${month}月${day < 10 ? '0' : ''}${day}日`; uni.showToast({ title: '选择的日期不能小于当前日期', icon: 'none', duration: 2000 }); } else { // 否则,设置为用户选择的日期 this.time = `${selectedDate.month}月${selectedDate.day}日`; } }, getaddress() { this.$u.get(`app/getAddress?lon=` + this.gps.longitude + '&lat=' + this.gps.latitude).then((res) => { if (res.code == 200) { this.addressInfo = res.data; } else { uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }); } }); }, getCity() { this.$u.get(`app/getCity?lon=` + this.gps.longitude + '&lat=' + this.gps.latitude).then((res) => { if (res.code == 200) { this.cityInfo = res.data; // 假设 cityList 是一个包含城市信息的数组,并且 cityInfo 中有一个唯一标识字段,例如 cityName 或 cityId const index = this.cityList.findIndex(city => city.cityName === this.cityInfo.cityName); if (index !== -1) { this.cityIndex = index console.log('City found at index:', index); // 可以在这里对找到的索引进行其他处理 } else { console.log('City not found in the list'); } } else { uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }); } }); }, showCity() { }, getdata() { this.$u.get("/app/getDictData?dictType=rl_rental_period").then((res) => { if (res.code == 200) { this.dataList = res.data this.dataInfo = this.dataList[0] } else { uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }); } }); }, getcityList() { this.$u.get("app/city/list").then((res) => { if (res.code == 200) { this.cityList = res.data } else { uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }); } }); }, tosele() { if(this.userInfo.userId){ uni.navigateTo({ url: '/page_user/carSelection' }) }else{ uni.navigateTo({ url:'/pages/login/login' }) } }, getMapLocation() { uni.chooseLocation({ success: (res) => { console.log(res); // this.getRegionFn(res); }, fail: () => { // 如果用uni.chooseLocation没有获取到地理位置,则需要获取当前的授权信息,判断是否有地理授权信息 uni.getSetting({ success: (res) => { console.log(res); var status = res.authSetting; if (!status['scope.userLocation']) { // 如果授权信息中没有地理位置的授权,则需要弹窗提示用户需要授权地理信息 uni.showModal({ title: "是否授权当前位置", content: "需要获取您的地理位置,请确认授权,否则地图功能将无法使用", success: (tip) => { if (tip.confirm) { // 如果用户同意授权地理信息,则打开授权设置页面,判断用户的操作 uni.openSetting({ success: (data) => { // 如果用户授权了地理信息在,则提示授权成功 if (data .authSetting[ 'scope.userLocation' ] === true ) { uni.showToast({ title: "授权成功", icon: "success", duration: 1000 }) // 授权成功后,然后再次chooseLocation获取信息 uni.chooseLocation({ success: ( res ) => { console .log( "详细地址", res ); // this.getRegionFn(res); } }) } else { uni.showToast({ title: "授权失败", icon: "none", duration: 1000 }) } } }) } } }) } }, fail: (res) => { uni.showToast({ title: "调用授权窗口失败", icon: "none", duration: 1000 }) } }) } }); }, } } </script> <style lang="scss"> page { background: #F7F7F7; } .page { width: 100%; padding-bottom: 200rpx; .choosedata { padding: 46rpx 37rpx; position: fixed; bottom: 0; width: 750rpx; // height: 757rpx; background: #FFFFFF; border-radius: 20rpx 20rpx 0 0; z-index: 101; .tit { margin-bottom: 54rpx; position: relative; width: 100%; text-align: center; font-weight: 600; font-size: 40rpx; color: #3D3D3D; image { position: absolute; right: 36rpx; width: 52rpx; height: 52rpx; } } .li { margin-bottom: 24rpx; display: flex; flex-wrap: nowrap; align-items: center; justify-content: center; width: 676rpx; height: 88rpx; background: #F7F7F7; border-radius: 14rpx 14rpx 14rpx 14rpx; border: 2rpx solid #fff; font-weight: 600; font-size: 36rpx; color: #3D3D3D; } .act { background: #DCEDFF; border: 2rpx solid #4297F3; } } .car_card { margin: 0 auto; margin-top: 16rpx; padding: 28rpx 34rpx; width: 676rpx; background: #FFFFFF; border-radius: 20rpx 20rpx 20rpx 20rpx; .car_info { margin-top: 44rpx; display: flex; flex-wrap: nowrap; .car_img { image { width: 166rpx; height: 128rpx; } } .info { .modle { font-weight: 600; font-size: 28rpx; color: #3D3D3D; } .price { margin-top: 44rpx; font-weight: 400; font-size: 24rpx; color: #FF1C1C; span { font-weight: 500; font-size: 44rpx; } } } } .card_top { display: flex; flex-wrap: nowrap; align-items: center; justify-content: space-between; .tit { font-weight: 600; font-size: 32rpx; color: #3D3D3D; } .txt { display: flex; flex-wrap: nowrap; align-items: center; font-weight: 400; font-size: 24rpx; color: #3D3D3D; } } .type_box { margin-top: 8rpx; display: flex; flex-wrap: nowrap; align-items: center; .type { padding: 2rpx 12rpx; font-weight: 400; font-size: 24rpx; color: #0D75E5; background: #DCEDFF; border-radius: 4rpx 4rpx 4rpx 4rpx; } .address { margin-left: 20rpx; font-weight: 400; font-size: 28rpx; color: #808080; } } } .kefu { position: fixed; right: 0; bottom: 500rpx; width: 94rpx; height: 94rpx; } .backimg { // position: fixed; width: 750rpx; height: 464rpx; z-index: -10; background-image: url('https://lxnapi.ccttiot.com/bike/img/static/uNurSfSfybEGAJYfXD07'); background-size: cover; /* 背景图片等比缩放以覆盖整个容器 */ background-position: center; } .choose_card { // position: fixed; padding-bottom: 28rpx; margin: 0 auto; margin-top: -60rpx; width: 676rpx; // height: 511rpx; background: #FFFFFF; border-radius: 20rpx 20rpx 20rpx 20rpx; z-index: 110; .check { margin-bottom: 40rpx; display: flex; flex-wrap: nowrap; align-items: center; width: 676rpx; height: 96rpx; background-image: url('https://lxnapi.ccttiot.com/bike/img/static/u5r7QJyFfPruTi4VsXzV'); background-size: cover; /* 背景图片等比缩放以覆盖整个容器 */ background-position: center; .txt1 { width: 50%; text-align: center; font-weight: 600; font-size: 40rpx; color: #3D3D3D; } .txt2 { width: 50%; text-align: center; font-weight: 600; font-size: 36rpx; color: #808080; } } .btn { margin: 0 auto; display: flex; align-items: center; justify-content: center; width: 608rpx; height: 80rpx; background: #6DB3FF; border-radius: 16rpx 16rpx 16rpx 16rpx; margin-top: 20rpx; font-weight: 500; font-size: 36rpx; color: #FFFFFF; } .time_box { margin: 0 auto; padding: 22rpx 24rpx 28rpx 24rpx; display: flex; flex-wrap: nowrap; width: 608rpx; // height: 128rpx; background: #EEEEEE; border-radius: 20rpx 20rpx 20rpx 20rpx; .time_li { width: 50%; .txt { font-weight: 400; font-size: 24rpx; color: #808080; } .words { margin-top: 6rpx; font-weight: 600; font-size: 32rpx; color: #3D3D3D; image { width: 40rpx; height: 22rpx; } } } } .area_li { display: flex; flex-wrap: nowrap; align-items: flex-start; padding: 0 34rpx 28rpx 34rpx; .dingw { display: flex; align-items: center; margin-left: 30rpx; margin-top: 46rpx; font-weight: 400; font-size: 28rpx; color: #808080; image { margin-left: 8rpx; width: 30rpx; height: 30rpx; } } .city { .txt { font-weight: 400; font-size: 24rpx; color: #808080; } .words { margin-top: 6rpx; font-weight: 600; font-size: 32rpx; color: #3D3D3D; image { width: 40rpx; height: 22rpx; } } } .area { margin-left: 20rpx; .top { display: flex; flex-wrap: nowrap; align-items: center; .txt { font-weight: 400; font-size: 24rpx; color: #808080; } .type { margin-left: 10rpx; background: #FFE9D4; border-radius: 4rpx 4rpx 4rpx 4rpx; padding: 2rpx 6rpx; font-weight: 400; font-size: 22rpx; color: #FF8C1E; } } .bot { display: flex; flex-wrap: nowrap; align-items: center; margin-top: 6rpx; .txt3 { font-weight: 600; font-size: 32rpx; color: #3D3D3D; width: 252rpx; /* 设置宽度 */ white-space: nowrap; /* 禁止文本换行 */ overflow: hidden; /* 超出部分隐藏 */ text-overflow: ellipsis; /* 超出部分显示省略号 */ } image { width: 40rpx; height: 22rpx; } } } } } } </style>