feat:新增地图视图效果,接口待对接

This commit is contained in:
2025-08-08 14:51:45 +08:00
parent 67eb4e5516
commit c5b8026fba
49 changed files with 2811 additions and 884 deletions
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1 +1 @@
<view class="container data-v-f7bf7b27"><view class="device-header data-v-f7bf7b27"><view class="{{['device-status-card', 'data-v-f7bf7b27', b]}}"><view class="status-indicator data-v-f7bf7b27"></view><text class="status-text data-v-f7bf7b27">{{a}}</text></view><view class="device-title data-v-f7bf7b27"><text class="name data-v-f7bf7b27">共享风扇</text><view class="device-meta data-v-f7bf7b27"><text class="id-label data-v-f7bf7b27">设备号:</text><text class="id-value data-v-f7bf7b27">{{c}}</text></view></view></view><view class="card device-info-card data-v-f7bf7b27"><view class="card-row data-v-f7bf7b27"><view class="card-item data-v-f7bf7b27"><view class="item-icon location-icon data-v-f7bf7b27"><image class="data-v-f7bf7b27" src="{{d}}" mode="aspectFill" style="width:45rpx;height:45rpx"></image></view><view class="item-content data-v-f7bf7b27"><text class="item-label data-v-f7bf7b27">当前位置</text><text class="item-value data-v-f7bf7b27">{{e}}</text></view></view><view class="card-item data-v-f7bf7b27"><view class="{{['item-icon', 'battery-icon', 'data-v-f7bf7b27', g && 'battery-low']}}"><image class="data-v-f7bf7b27" src="{{f}}" mode="aspectFill" style="width:45rpx;height:45rpx"></image></view><view class="item-content data-v-f7bf7b27"><text class="item-label data-v-f7bf7b27">电池电量</text><text class="item-value data-v-f7bf7b27">{{h}}%</text></view></view></view></view><view class="card pricing-card data-v-f7bf7b27"><view class="card-header data-v-f7bf7b27"><text class="card-title data-v-f7bf7b27">计费规则</text></view><view class="pricing-banner data-v-f7bf7b27"><view class="pricing-main data-v-f7bf7b27"><text class="price data-v-f7bf7b27">¥{{i}}</text><text class="unit data-v-f7bf7b27">/小时</text></view><text class="cap-price data-v-f7bf7b27">封顶 ¥{{j}}</text></view><view class="pricing-rules data-v-f7bf7b27"><view class="rule-item data-v-f7bf7b27"><view class="rule-dot data-v-f7bf7b27"></view><text class="rule-text data-v-f7bf7b27">不足60分钟按60分钟计费</text></view><view class="rule-item data-v-f7bf7b27"><view class="rule-dot data-v-f7bf7b27"></view><text class="rule-text data-v-f7bf7b27">持续计费至99元视为买断</text></view></view></view><view class="card notice-card data-v-f7bf7b27"><view class="card-header data-v-f7bf7b27"><text class="card-title data-v-f7bf7b27">使用须知</text></view><view class="notice-items data-v-f7bf7b27"><view class="notice-item data-v-f7bf7b27"><view class="notice-dot data-v-f7bf7b27"></view><text class="notice-text data-v-f7bf7b27">请在使用前检查设备是否完好</text></view><view class="notice-item data-v-f7bf7b27"><view class="notice-dot data-v-f7bf7b27"></view><text class="notice-text data-v-f7bf7b27">请在指定区域内使用设备</text></view><view class="notice-item data-v-f7bf7b27"><view class="notice-dot data-v-f7bf7b27"></view><text class="notice-text data-v-f7bf7b27">归还时请确保设备完好,避免损坏</text></view></view></view><view class="footer data-v-f7bf7b27"><button class="{{['rent-button', 'data-v-f7bf7b27', l && 'return-button']}}" bindtap="{{m}}"><text class="data-v-f7bf7b27">{{k}}</text></button><view class="wechat-credit data-v-f7bf7b27"><image src="{{n}}" mode="aspectFit" class="wx-icon data-v-f7bf7b27"></image><view class="credit-text data-v-f7bf7b27"><text class="data-v-f7bf7b27">微信支付分</text><text class="credit-divider data-v-f7bf7b27">|</text><text class="credit-score data-v-f7bf7b27">550分及以上优享</text></view></view></view><view wx:if="{{o}}" class="phone-auth-popup data-v-f7bf7b27"><view class="popup-mask data-v-f7bf7b27" catchtap="{{p}}"></view><view class="popup-content data-v-f7bf7b27"><view class="popup-header data-v-f7bf7b27"><text class="popup-title data-v-f7bf7b27">授权获取手机号</text></view><view class="popup-body data-v-f7bf7b27"><view class="auth-desc data-v-f7bf7b27"><text class="data-v-f7bf7b27">为了提供更好的服务,需要授权获取您的手机号</text></view><button class="auth-btn data-v-f7bf7b27" open-type="getPhoneNumber" bindgetphonenumber="{{q}}"> 一键获取手机号 </button><view class="auth-cancel data-v-f7bf7b27" bindtap="{{r}}"><text class="data-v-f7bf7b27">暂不授权</text></view></view></view></view></view>
<view class="container data-v-f998093e"><view class="device-header data-v-f998093e"><view class="{{['device-status-card', 'data-v-f998093e', b]}}"><view class="status-indicator data-v-f998093e"></view><text class="status-text data-v-f998093e">{{a}}</text></view><view class="device-title data-v-f998093e"><text class="name data-v-f998093e">共享风扇</text><view class="device-meta data-v-f998093e"><text class="id-label data-v-f998093e">设备号:</text><text class="id-value data-v-f998093e">{{c}}</text></view></view></view><view class="card device-info-card data-v-f998093e"><view class="card-row data-v-f998093e"><view class="card-item data-v-f998093e"><view class="item-icon location-icon data-v-f998093e"><image class="data-v-f998093e" src="{{d}}" mode="aspectFill" style="width:45rpx;height:45rpx"></image></view><view class="item-content data-v-f998093e"><text class="item-label data-v-f998093e">当前位置</text><text class="item-value data-v-f998093e">{{e}}</text></view></view></view></view><view class="card pricing-card data-v-f998093e"><view class="card-header data-v-f998093e"><text class="card-title data-v-f998093e">计费规则</text></view><view class="pricing-banner data-v-f998093e"><view class="pricing-main data-v-f998093e"><text class="price data-v-f998093e">¥{{f}}</text><text class="unit data-v-f998093e">/小时</text></view><text class="cap-price data-v-f998093e">封顶 ¥{{g}}</text></view><view class="pricing-rules data-v-f998093e"><view class="rule-item data-v-f998093e"><view class="rule-dot data-v-f998093e"></view><text class="rule-text data-v-f998093e">不足60分钟按60分钟计费</text></view><view class="rule-item data-v-f998093e"><view class="rule-dot data-v-f998093e"></view><text class="rule-text data-v-f998093e">持续计费至99元视为买断</text></view></view></view><view class="card notice-card data-v-f998093e"><view class="card-header data-v-f998093e"><text class="card-title data-v-f998093e">使用须知</text></view><view class="notice-items data-v-f998093e"><view class="notice-item data-v-f998093e"><view class="notice-dot data-v-f998093e"></view><text class="notice-text data-v-f998093e">请在使用前检查设备是否完好</text></view><view class="notice-item data-v-f998093e"><view class="notice-dot data-v-f998093e"></view><text class="notice-text data-v-f998093e">请在指定区域内使用设备</text></view><view class="notice-item data-v-f998093e"><view class="notice-dot data-v-f998093e"></view><text class="notice-text data-v-f998093e">归还时请确保设备完好,避免损坏</text></view></view></view><view class="footer data-v-f998093e"><button class="{{['rent-button', 'data-v-f998093e', i && 'return-button']}}" bindtap="{{j}}"><text class="data-v-f998093e">{{h}}</text></button><view class="wechat-credit data-v-f998093e"><image src="{{k}}" mode="aspectFit" class="wx-icon data-v-f998093e"></image><view class="credit-text data-v-f998093e"><text class="data-v-f998093e">微信支付分</text><text class="credit-divider data-v-f998093e">|</text><text class="credit-score data-v-f998093e">550分及以上优享</text></view></view></view><view wx:if="{{l}}" class="phone-auth-popup data-v-f998093e"><view class="popup-mask data-v-f998093e" catchtap="{{m}}"></view><view class="popup-content data-v-f998093e"><view class="popup-header data-v-f998093e"><text class="popup-title data-v-f998093e">授权获取手机号</text></view><view class="popup-body data-v-f998093e"><view class="auth-desc data-v-f998093e"><text class="data-v-f998093e">为了提供更好的服务,需要授权获取您的手机号</text></view><button class="auth-btn data-v-f998093e" open-type="getPhoneNumber" bindgetphonenumber="{{n}}"> 一键获取手机号 </button><view class="auth-cancel data-v-f998093e" bindtap="{{o}}"><text class="data-v-f998093e">暂不授权</text></view></view></view></view></view>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+4 -2
View File
@@ -1,4 +1,6 @@
{
"navigationBarTitleText": "共享风扇",
"usingComponents": {}
"navigationBarTitleText": "附近场地",
"usingComponents": {
"map-component": "../../components/MapComponent"
}
}
+1 -1
View File
@@ -1 +1 @@
<view class="container data-v-cb03dff0"><view class="header data-v-cb03dff0"><view class="header-bg data-v-cb03dff0"><view class="circle-decoration circle-1 data-v-cb03dff0"></view><view class="circle-decoration circle-2 data-v-cb03dff0"></view><view class="wave-decoration data-v-cb03dff0"></view></view><view class="header-content data-v-cb03dff0"><view class="brand-area data-v-cb03dff0"><image class="brand-logo data-v-cb03dff0" src="{{a}}" mode="aspectFit"></image><view class="brand-text data-v-cb03dff0"><text class="title data-v-cb03dff0">共享风扇</text><text class="subtitle data-v-cb03dff0">随时随地,享受清凉</text></view></view><view class="header-info data-v-cb03dff0"><view class="service-tag data-v-cb03dff0"><text class="data-v-cb03dff0">便捷租赁</text><text class="dot data-v-cb03dff0">·</text><text class="data-v-cb03dff0">品质保障</text></view></view></view></view><view class="scan-section data-v-cb03dff0"><view class="scan-card data-v-cb03dff0"><view class="scan-btn data-v-cb03dff0" bindtap="{{c}}"><image class="scan-icon data-v-cb03dff0" src="{{b}}" mode="aspectFit"/><text class="scan-text data-v-cb03dff0">扫码使用</text></view><view class="scan-desc data-v-cb03dff0"><text class="data-v-cb03dff0">扫描设备二维码即可使用或归还</text></view></view></view><view class="price-card data-v-cb03dff0"><view class="card-header data-v-cb03dff0"><text class="card-title data-v-cb03dff0">收费规则</text></view><view class="price-rules data-v-cb03dff0"><view class="price-item data-v-cb03dff0"><view class="price-tag data-v-cb03dff0">5.0<text class="unit data-v-cb03dff0">元/小时</text></view></view><view class="divider data-v-cb03dff0"></view><view class="rule-list data-v-cb03dff0"><view class="rule-item data-v-cb03dff0"><view class="rule-dot data-v-cb03dff0"></view><text class="data-v-cb03dff0">不足1小时按1小时计费</text></view><view class="rule-item data-v-cb03dff0"><view class="rule-dot data-v-cb03dff0"></view><text class="data-v-cb03dff0">封顶99元,计费达99元视为买断</text></view></view></view></view><view class="usage-steps data-v-cb03dff0"><view class="steps-header data-v-cb03dff0"><text class="steps-title data-v-cb03dff0">使用流程</text></view><view class="steps-container data-v-cb03dff0"><view class="step-item data-v-cb03dff0"><view class="step-icon data-v-cb03dff0"><text class="step-number data-v-cb03dff0">1</text></view><text class="step-text data-v-cb03dff0">扫码弹出</text></view><view class="step-arrow data-v-cb03dff0"></view><view class="step-item data-v-cb03dff0"><view class="step-icon data-v-cb03dff0"><text class="step-number data-v-cb03dff0">2</text></view><text class="step-text data-v-cb03dff0">使用风扇</text></view><view class="step-arrow data-v-cb03dff0"></view><view class="step-item data-v-cb03dff0"><view class="step-icon data-v-cb03dff0"><text class="step-number data-v-cb03dff0">3</text></view><text class="step-text data-v-cb03dff0">插入归还</text></view><view class="step-arrow data-v-cb03dff0"></view><view class="step-item data-v-cb03dff0"><view class="step-icon data-v-cb03dff0"><text class="step-number data-v-cb03dff0">4</text></view><text class="step-text data-v-cb03dff0">结束订单</text></view></view></view><view wx:if="{{d}}" class="phone-auth-popup data-v-cb03dff0"><view class="popup-mask data-v-cb03dff0" catchtap="{{e}}"></view><view class="popup-content data-v-cb03dff0"><view class="popup-header data-v-cb03dff0"><text class="popup-title data-v-cb03dff0">授权获取手机号</text></view><view class="popup-body data-v-cb03dff0"><view class="auth-desc data-v-cb03dff0"><text class="data-v-cb03dff0">为了提供更好的服务和紧急联系,需要授权获取您的手机号</text></view><button class="auth-btn data-v-cb03dff0" open-type="getPhoneNumber" bindgetphonenumber="{{f}}"><text class="data-v-cb03dff0">一键获取手机号</text></button><view class="auth-cancel data-v-cb03dff0" bindtap="{{g}}"><text class="data-v-cb03dff0">暂不授权</text></view></view></view></view></view>
<view class="container data-v-ef66b09a"><map-component wx:if="{{a}}" class="r data-v-ef66b09a" u-r="mapRef" bindrelocate="{{c}}" bindscan="{{d}}" bindshowList="{{e}}" bindmarkerTap="{{f}}" bindmapCenterChange="{{g}}" u-i="ef66b09a-0" bind:__l="__l" u-p="{{h}}"/><view wx:if="{{i}}" class="map-loading-placeholder data-v-ef66b09a"><view class="loading-content data-v-ef66b09a"><view class="loading-spinner data-v-ef66b09a"></view><text class="data-v-ef66b09a">正在获取位置信息...</text></view></view><view wx:if="{{j}}" class="location-popup data-v-ef66b09a"><view class="popup-mask data-v-ef66b09a" bindtap="{{k}}"></view><view class="{{['location-sheet', 'data-v-ef66b09a', t && 'expanded']}}"><view class="sheet-handle data-v-ef66b09a" bindtap="{{l}}"><view class="handle-bar data-v-ef66b09a"></view></view><view class="sheet-header data-v-ef66b09a"><text class="sheet-title data-v-ef66b09a">附近场地 ({{m}})</text><view class="close-btn data-v-ef66b09a" bindtap="{{o}}"><image class="close-icon data-v-ef66b09a" src="{{n}}" mode="aspectFit"/></view></view><scroll-view class="sheet-content data-v-ef66b09a" scroll-y="true"><view wx:for="{{p}}" wx:for-item="item" wx:key="k" class="position-item data-v-ef66b09a" bindtap="{{item.l}}"><view class="position-info data-v-ef66b09a"><view class="position-name data-v-ef66b09a">{{item.a}}</view><view class="position-desc data-v-ef66b09a">{{item.b}}</view><view class="position-location data-v-ef66b09a"><image class="location-icon-small data-v-ef66b09a" src="{{q}}" mode="aspectFit"/><text class="data-v-ef66b09a">{{item.c}}</text></view><view wx:if="{{item.d}}" class="position-time data-v-ef66b09a"><text class="data-v-ef66b09a">营业时间:{{item.e}}</text></view></view><view class="position-actions data-v-ef66b09a"><view wx:if="{{item.f}}" class="distance-info data-v-ef66b09a"><text class="data-v-ef66b09a">{{item.g}}km</text></view><view class="{{['status-tag', 'data-v-ef66b09a', item.i]}}"><text class="data-v-ef66b09a">{{item.h}}</text></view><view class="nav-btn data-v-ef66b09a" catchtap="{{item.j}}"><text class="data-v-ef66b09a">导航</text></view></view></view><view wx:if="{{r}}" class="empty-state data-v-ef66b09a"><image class="empty-icon data-v-ef66b09a" src="{{s}}" mode="aspectFit"/><text class="empty-text data-v-ef66b09a">暂无附近场地</text></view></scroll-view></view></view><view wx:if="{{v}}" class="loading-overlay data-v-ef66b09a"><view class="loading-content data-v-ef66b09a"><view class="loading-spinner data-v-ef66b09a"></view><text class="data-v-ef66b09a">正在获取场地信息...</text></view></view><view wx:if="{{w}}" class="phone-auth-popup data-v-ef66b09a"><view class="popup-mask data-v-ef66b09a" catchtap="{{x}}"></view><view class="popup-content data-v-ef66b09a"><view class="popup-header data-v-ef66b09a"><text class="popup-title data-v-ef66b09a">授权获取手机号</text></view><view class="popup-body data-v-ef66b09a"><view class="auth-desc data-v-ef66b09a"><text class="data-v-ef66b09a">为了提供更好的服务和紧急联系,需要授权获取您的手机号</text></view><button class="auth-btn data-v-ef66b09a" open-type="getPhoneNumber" bindgetphonenumber="{{y}}"><text class="data-v-ef66b09a">一键获取手机号</text></button><view class="auth-cancel data-v-ef66b09a" bindtap="{{z}}"><text class="data-v-ef66b09a">暂不授权</text></view></view></view></view></view>
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1 +1 @@
"use strict";const e=require("../../common/vendor.js"),a=require("../../common/assets.js"),o=require("../../util/index.js");if(!Array){e.resolveComponent("uni-icons")()}const n={__name:"index",setup(n){const t=e.ref({}),r=e.ref("0.00"),i=e.ref(""),s=e.ref(null),d=e.ref(!1);e.onMounted((()=>{l()}));const l=async()=>{try{if(!e.index.getStorageSync("token"))return void(await o.wxLogin());const a=await o.getUserInfo();console.log("User info response:",a),200==a.code&&(a.data.openId&&(i.value=a.data.openId,e.index.setStorageSync("openId",a.data.openId)),t.value={nickName:a.data.nickname,phone:a.data.phone,avatar:a.data.iconUrl,isAdmin:a.data.isAdmin},e.index.setStorageSync("userInfo",t.value),r.value=a.data.balanceAmount||"0.00")}catch(a){console.error("获取用户信息失败:",a),e.index.showToast({title:"获取用户信息失败",icon:"none"})}},c=a=>{e.index.navigateTo({url:a})},p=()=>{c("/pages/deposit/index")},u=()=>{t.value||v()},v=()=>{s.value&&(s.value.open(),d.value=!0)};return(o,n)=>{return e.e({a:t.value.avatar},t.value.avatar?{b:t.value.avatar}:{c:a._imports_0$1},{d:t.value.isAdmin},(t.value.isAdmin,{}),{e:t.value},t.value?{f:e.t(t.value.nickName),g:e.t(t.value.phone?(i=t.value.phone,i?i.replace(/(\d{3})\d{4}(\d{4})/,"$1****$2"):""):"未绑定手机号")}:{},{h:e.p({type:"right",size:"16",color:"#999"}),i:e.o(u),j:e.t(r.value),k:e.o(p),l:a._imports_1$1,m:e.p({type:"right",size:"16",color:"#999"}),n:e.o((e=>c("/pages/order/index"))),o:a._imports_2,p:e.p({type:"right",size:"16",color:"#999"}),q:e.o((e=>c("/pages/feedback/index"))),r:a._imports_3,s:e.p({type:"right",size:"16",color:"#999"}),t:e.o((e=>c("/pages/help/index")))});var i}}},t=e._export_sfc(n,[["__scopeId","data-v-6fbc3933"]]);wx.createPage(t);
"use strict";const e=require("../../common/vendor.js"),a=require("../../common/assets.js"),o=require("../../util/index.js");if(!Array){e.resolveComponent("uni-icons")()}const n={__name:"index",setup(n){const t=e.ref({}),r=e.ref("0.00"),i=e.ref(""),s=e.ref(null),d=e.ref(!1);e.onMounted((()=>{l()}));const l=async()=>{try{if(!e.index.getStorageSync("token"))return void(await o.wxLogin());const a=await o.getUserInfo();console.log("User info response:",a),200==a.code&&(a.data.openId&&(i.value=a.data.openId,e.index.setStorageSync("openId",a.data.openId)),t.value={nickName:a.data.nickname,phone:a.data.phone,avatar:a.data.iconUrl,isAdmin:a.data.isAdmin},e.index.setStorageSync("userInfo",t.value),r.value=a.data.balanceAmount||"0.00")}catch(a){console.error("获取用户信息失败:",a),e.index.showToast({title:"获取用户信息失败",icon:"none"})}},c=a=>{e.index.navigateTo({url:a})},p=()=>{c("/pages/deposit/index")},u=()=>{t.value||v()},v=()=>{s.value&&(s.value.open(),d.value=!0)};return(o,n)=>{return e.e({a:t.value.avatar},t.value.avatar?{b:t.value.avatar}:{c:a._imports_0$1},{d:t.value.isAdmin},(t.value.isAdmin,{}),{e:t.value},t.value?{f:e.t(t.value.nickName),g:e.t(t.value.phone?(i=t.value.phone,i?i.replace(/(\d{3})\d{4}(\d{4})/,"$1****$2"):""):"未绑定手机号")}:{},{h:e.p({type:"right",size:"16",color:"#999"}),i:e.o(u),j:e.t(r.value),k:e.o(p),l:a._imports_1,m:e.p({type:"right",size:"16",color:"#999"}),n:e.o((e=>c("/pages/order/index"))),o:a._imports_2,p:e.p({type:"right",size:"16",color:"#999"}),q:e.o((e=>c("/pages/feedback/index"))),r:a._imports_3,s:e.p({type:"right",size:"16",color:"#999"}),t:e.o((e=>c("/pages/help/index")))});var i}}},t=e._export_sfc(n,[["__scopeId","data-v-6fbc3933"]]);wx.createPage(t);