From 16c98154ca67d48665ed3a83874d43fdc626ac60 Mon Sep 17 00:00:00 2001 From: Liuyi <candymxq888@outlook.com> Date: 星期三, 09 十月 2024 17:42:24 +0800 Subject: [PATCH] 添加获取用户位置 --- unpackage/dist/dev/mp-weixin/pages/index/index.js | 2 /dev/null | 111 ------------------ unpackage/dist/dev/mp-weixin/api/index.js | 4 manifest.json | 8 + pages.json | 2 pages/facilityList/index.vue | 143 +++++++++++++++++++++++ unpackage/dist/dev/mp-weixin/app.js | 3 api/index.js | 6 unpackage/dist/dev/mp-weixin/app.json | 10 + App.vue | 2 pages/index/index.vue | 2 unpackage/dist/cache/.vite/deps/_metadata.json | 8 12 files changed, 179 insertions(+), 122 deletions(-) diff --git a/App.vue b/App.vue index 23ef92a..e636cbd 100644 --- a/App.vue +++ b/App.vue @@ -2,9 +2,11 @@ import { onLaunch, onShow, onHide } from "@dcloudio/uni-app"; import { wxLoginApi } from './api/index.js' onLaunch(() => { + uni.removeStorageSync('openId'); if(!uni.getStorageSync('openId')){ wx.login({ success:async (res1)=>{ + //存储微信登录的code uni.setStorageSync('code',res1.code) await wxLoginApi({code:res1.code}).then((res2) =>{ uni.setStorageSync('openId',res2.data.userId) diff --git a/api/index.js b/api/index.js index 0a07eac..4d94d89 100644 --- a/api/index.js +++ b/api/index.js @@ -34,8 +34,12 @@ export function deleteAddressApi(id){ return request(`/userAddress/remove?id=${id}`,{},'GET') } -//设置默认值 +//设置地址默认值 export function setAddressDefaultApi(id){ return request(`/userAddress/editDefault?id=${id}`,{},'GET') } +//获取设备站点列表 +export function searchFacilityApi(data){ + return request('/waterFacility/search',data,'POST') +} diff --git a/manifest.json b/manifest.json index ecba768..21af97b 100644 --- a/manifest.json +++ b/manifest.json @@ -54,7 +54,13 @@ "setting" : { "urlCheck" : false }, - "usingComponents" : true + "usingComponents" : true, + "permission" : { + "scope.userLocation" : { + "desc" : "你的位置信息将用于计算直饮水设备与您的距离" + } + }, + "requiredPrivateInfos": ["getLocation"] }, "mp-alipay" : { "usingComponents" : true diff --git a/pages.json b/pages.json index 804818d..b2b7d06 100644 --- a/pages.json +++ b/pages.json @@ -73,7 +73,7 @@ } }, { - "path" : "pages/deviceList/index", + "path" : "pages/facilityList/index", "style": { "navigationStyle":"custom" } diff --git a/pages/deviceList/index.vue b/pages/deviceList/index.vue deleted file mode 100644 index 6719751..0000000 --- a/pages/deviceList/index.vue +++ /dev/null @@ -1,111 +0,0 @@ -<template> - <view class="container"> - <navbar title = '设备列表'></navbar> - <view class="content"> - <view class="list"> - <block v-for="(item,index) in deviceList" :key="index"> - <view class="item"> - <view class="item-img"> - <image src="../../static/logo.png" alt=''></image> - </view> - <view class="item-info"> - <view class="info-name">{{item.name}}</view> - <view class="info-addr"> - <text class="addr-text">地址:{{item.address}}</text> - <view> - <image src="../../static/images/index/icon22.png" alt=''></image> - <text>{{item.distance}}km</text> - </view> - </view> - </view> - </view> - </block> - </view> - </view> - </view> -</template> - -<script setup> - import { ref } from 'vue' - const deviceList = ref([ - {name:'清源直饮水',address:'重庆市北碚区蔡家岗街道',distance:'30.12'}, - {name:'清源直饮水',address:'重庆市北碚区蔡家岗街道',distance:'30.12'}, - {name:'清源直饮水',address:'重庆市北碚区蔡家岗街道',distance:'30.12'}, - {name:'清源直饮水',address:'重庆市北碚区蔡家岗街道',distance:'30.12'}, - {name:'清源直饮水',address:'重庆市北碚区蔡家岗街道',distance:'30.12'}, - {name:'清源直饮水',address:'重庆市北碚区蔡家岗街道工业互联网产业园',distance:'30.12'}, - {name:'清源直饮水',address:'重庆市北碚区蔡家岗街道',distance:'30.12'}, - {name:'清源直饮水',address:'重庆市北碚区蔡家岗街道',distance:'30.12'}, - {name:'清源直饮水',address:'重庆市北碚区蔡家岗街道',distance:'30.12'}, - ]) -</script> - -<style lang="scss"> - .container{ - width: 100%; - height: 100vh; - .content{ - width: 100%; - height:calc(100vh - 176rpx); - background:linear-gradient(to top,#FFFFFF,#E8EFFF); - padding:32rpx 32rpx 100rpx; - box-sizing: border-box; - .list{ - width:100%; - height:100%; - overflow: scroll; - // background-color: #f1ffef; - .item{ - height:200rpx; - width:100%; - background-color: #FFFFFF; - border-radius: 24rpx; - padding:0 20rpx; - margin-bottom:20rpx; - box-sizing: border-box; - display: flex; - align-items:center; - .item-img{ - image{ - width:130rpx; - height: 130rpx; - } - } - .item-info{ - display: flex; - flex-direction: column; - margin-left:20rpx; - justify-content: space-between; - .info-name{ - color:#222c35; - } - .info-addr{ - display: flex; - justify-content: space-between; - align-items:center; - .addr-text{ - width:340rpx; - height:80rpx; - color: #6a6e75; - font-size:26rpx; - } - view{ - display: flex; - justify-content: space-between; - align-items:center; - image{ - width:50rpx; - height:50rpx; - } - text{ - color: #6a6e75; - font-size:26rpx; - } - } - } - } - } - } - } - } -</style> diff --git a/pages/facilityList/index.vue b/pages/facilityList/index.vue new file mode 100644 index 0000000..7f39c05 --- /dev/null +++ b/pages/facilityList/index.vue @@ -0,0 +1,143 @@ +<template> + <view class="container"> + <navbar title = '设备列表'></navbar> + <view class="content"> + <view class="list"> + <block v-for="(item,index) in deviceList" :key="index"> + <view class="item"> + <view class="item-img"> + <image src="../../static/logo.png" alt=''></image> + </view> + <view class="item-info"> + <view class="info-name">{{item.facilityName}}</view> + <view class="info-addr"> + <text class="addr-text">地址:{{item.address}}</text> + <view> + <image src="../../static/images/index/icon22.png" alt=''></image> + <text>{{item.distance}}km</text> + </view> + </view> + </view> + </view> + </block> + </view> + </view> + </view> +</template> + +<script setup> + import { onMounted, ref } from 'vue' + import { searchFacilityApi } from '../../api/index.js' + const deviceList = ref([ + {facilityName:'清源直饮水',address:'重庆市北碚区蔡家岗街道工业互联网产业园',distance:'30.12'}, + {facilityName:'清源直饮水',address:'重庆市北碚区蔡家岗街道',distance:'30.12'}, + {facilityName:'清源直饮水',address:'重庆市北碚区蔡家岗街道',distance:'30.12'}, + ]) + const latitudeUser = ref() + const longitudeUser = ref() + // 根据经纬度计算距离,根据经纬度计算距离,参数分别为第一点的纬度,经度;第二点的纬度,经度 + function getDistances(lat1, lng1, lat2, lng2) { + let EARTH_RADIUS = 6378.137;// 地球半径 + let radLat1 = lat1 * Math.PI / 180.0; //lat1 * Math.PI / 180.0=>弧度计算 + let radLat2 = lat2 * Math.PI / 180.0; + let a = radLat1 - radLat2; + let b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0; + let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2))); + s = s * EARTH_RADIUS; + s = Math.round(s * 10000) / 10000;// 输出为公里 + return { m: s * 1000, km: Number(s.toFixed(2)) } + } + onMounted(async() =>{ + uni.getLocation({type: 'gcj02'}).then(async(res) =>{ + console.log('位置',res) + latitudeUser.value = res.latitude + longitudeUser.value = res.longitude + + await searchFacilityApi({limit:20,page:1}).then((res) =>{ + if(res.code == 200){ + // deviceList.value = [] + res.data.list.forEach((item) =>{ + + let preDistance = getDistances(latitudeUser.value,106.4003121,item.latitude,item.longitude) + deviceList.value.push({ + facilityName:item.facilityName, + address:item.address, + distance:preDistance.km + }) + }) + console.log('deviceList.value',deviceList.value) + } + }) + }) + }) +</script> + +<style lang="scss"> + .container{ + width: 100%; + height: 100vh; + .content{ + width: 100%; + height:calc(100vh - 176rpx); + background:linear-gradient(to top,#FFFFFF,#E8EFFF); + padding:32rpx 32rpx 100rpx; + box-sizing: border-box; + .list{ + width:100%; + height:100%; + overflow: scroll; + // background-color: #f1ffef; + .item{ + height:200rpx; + width:100%; + background-color: #FFFFFF; + border-radius: 24rpx; + padding:0 20rpx; + margin-bottom:20rpx; + box-sizing: border-box; + display: flex; + align-items:center; + .item-img{ + image{ + width:130rpx; + height: 130rpx; + } + } + .item-info{ + display: flex; + flex-direction: column; + margin-left:20rpx; + justify-content: space-between; + .info-name{ + color:#222c35; + } + .info-addr{ + display: flex; + justify-content: space-between; + align-items:center; + .addr-text{ + width:340rpx; + height:80rpx; + color: #6a6e75; + font-size:26rpx; + } + view{ + display: flex; + justify-content: space-between; + align-items:center; + image{ + width:50rpx; + height:50rpx; + } + text{ + color: #6a6e75; + font-size:26rpx; + } + } + } + } + } + } + } + } +</style> diff --git a/pages/index/index.vue b/pages/index/index.vue index a9c4502..56bf6c4 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -149,7 +149,7 @@ <image src="../../static/images/index/home21.png" alt=""></image> <view>送水到家</view> </view> - <view @click="navTo('/pages/deviceList/index')" class="box1-bg box1-two"> + <view @click="navTo('/pages/facilityList/index')" class="box1-bg box1-two"> <image src="../../static/images/index/icon22.png" alt=""></image> <view>附近设备</view> <!-- <view>账户余额(元)</view> diff --git a/unpackage/dist/cache/.vite/deps/_metadata.json b/unpackage/dist/cache/.vite/deps/_metadata.json index 440a3ae..f17be66 100644 --- a/unpackage/dist/cache/.vite/deps/_metadata.json +++ b/unpackage/dist/cache/.vite/deps/_metadata.json @@ -1,8 +1,8 @@ { - "hash": "bb2e2c43", - "configHash": "539dec94", - "lockfileHash": "f3d35e11", - "browserHash": "ee67bce4", + "hash": "01069312", + "configHash": "14deb472", + "lockfileHash": "8eeba737", + "browserHash": "7ec93261", "optimized": {}, "chunks": {} } \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/api/index.js b/unpackage/dist/dev/mp-weixin/api/index.js index 6277491..46c501f 100644 --- a/unpackage/dist/dev/mp-weixin/api/index.js +++ b/unpackage/dist/dev/mp-weixin/api/index.js @@ -30,6 +30,9 @@ function setAddressDefaultApi(id) { return util_request.request(`/userAddress/editDefault?id=${id}`, {}, "GET"); } +function searchFacilityApi(data) { + return util_request.request("/waterFacility/search", data, "POST"); +} exports.creatUserArchive = creatUserArchive; exports.deleteAddressApi = deleteAddressApi; exports.editAddressApi = editAddressApi; @@ -38,5 +41,6 @@ exports.getUserInfo = getUserInfo; exports.getVipInfoApi = getVipInfoApi; exports.searchAddress = searchAddress; +exports.searchFacilityApi = searchFacilityApi; exports.setAddressDefaultApi = setAddressDefaultApi; exports.wxLoginApi = wxLoginApi; diff --git a/unpackage/dist/dev/mp-weixin/app.js b/unpackage/dist/dev/mp-weixin/app.js index 052e2d1..65c2a1e 100644 --- a/unpackage/dist/dev/mp-weixin/app.js +++ b/unpackage/dist/dev/mp-weixin/app.js @@ -15,12 +15,13 @@ "./pages/addressAdd/index.js"; "./pages/addressLocate/index.js"; "./pages/success/index.js"; - "./pages/deviceList/index.js"; + "./pages/facilityList/index.js"; } const _sfc_main = { __name: "App", setup(__props) { common_vendor.onLaunch(() => { + common_vendor.index.removeStorageSync("openId"); if (!common_vendor.index.getStorageSync("openId")) { common_vendor.wx$1.login({ success: async (res1) => { diff --git a/unpackage/dist/dev/mp-weixin/app.json b/unpackage/dist/dev/mp-weixin/app.json index b5d034f..6c42930 100644 --- a/unpackage/dist/dev/mp-weixin/app.json +++ b/unpackage/dist/dev/mp-weixin/app.json @@ -12,11 +12,19 @@ "pages/addressAdd/index", "pages/addressLocate/index", "pages/success/index", - "pages/deviceList/index" + "pages/facilityList/index" ], "window": { "navigationStyle": "custom" }, + "permission": { + "scope.userLocation": { + "desc": "你的位置信息将用于计算直饮水设备与您的距离" + } + }, + "requiredPrivateInfos": [ + "getLocation" + ], "usingComponents": { "navbar": "/components/navbar/navbar", "da-tree": "/components/da-tree/index" diff --git a/unpackage/dist/dev/mp-weixin/pages/index/index.js b/unpackage/dist/dev/mp-weixin/pages/index/index.js index 0cbe4a4..5539ffc 100644 --- a/unpackage/dist/dev/mp-weixin/pages/index/index.js +++ b/unpackage/dist/dev/mp-weixin/pages/index/index.js @@ -92,7 +92,7 @@ m: common_assets._imports_4, n: common_vendor.o(($event) => navTo("/pages/sendWater/index")), o: common_assets._imports_1$1, - p: common_vendor.o(($event) => navTo("/pages/deviceList/index")), + p: common_vendor.o(($event) => navTo("/pages/facilityList/index")), q: common_assets._imports_6, r: common_vendor.o(($event) => toScan()), s: common_vendor.f(functionList.value, (item, index, i0) => { -- Gitblit v1.9.3