feat: 增加获取位置的方法
This commit is contained in:
@@ -29,10 +29,12 @@ import CardSwiper from "./components/CardSwiper/index.vue";
|
||||
import QuickQuestions from "./components/QuickQuestions/index.vue";
|
||||
import discoveryCover from "@/components/ImageSwiper/images/2025-07-12_180248.jpg";
|
||||
|
||||
import { homeTabsData, homeTabContentData, homeQuickQuestionData } from "../../request/api/MainPageDataApi";
|
||||
import { useAppStore } from "@/store";
|
||||
import { homeTabsData, getNearbyTags, homeTabContentData, homeQuickQuestionData } from "../../request/api/MainPageDataApi";
|
||||
import { useAppStore, useLocationStore } from "@/store";
|
||||
import { JumpType } from "../../model/ChatModel";
|
||||
|
||||
const appStore = useAppStore();
|
||||
const locationStore = useLocationStore();
|
||||
/// 从个渠道获取如二维码
|
||||
const sceneId = appStore.sceneId || "";
|
||||
|
||||
@@ -58,15 +60,20 @@ const queryTabsList = async () => {
|
||||
}));
|
||||
/// 设置tab数据
|
||||
discoveryTabs.value = tabList;
|
||||
|
||||
/// 查询是否有sceneId参数
|
||||
const activeTabIndex = discoveryTabs.value.findIndex((tab) => tab.id === sceneId);
|
||||
|
||||
/// 如果有则优先展示对应tab数据,没有则展示第一个tab数据
|
||||
if (activeTabIndex > -1) {
|
||||
activeIndex.value = activeTabIndex;
|
||||
queryDiscoveryData(sceneId);
|
||||
} else {
|
||||
/// 根据sceneId查询对应tab数据
|
||||
findTabByIdWithActiveTabIndex(sceneId);
|
||||
}
|
||||
}
|
||||
/// 根据id查询tab并设置activeIndex
|
||||
const findTabByIdWithActiveTabIndex = (tabsId) => {
|
||||
/// 查询是否有id参数
|
||||
const activeTabIndex = discoveryTabs.value.findIndex((tab) => tab.id === tabsId);
|
||||
/// 如果有则优先展示对应tab数据,没有则展示第一个tab数据
|
||||
if (activeTabIndex > -1) {
|
||||
activeIndex.value = activeTabIndex;
|
||||
queryDiscoveryData(tabsId);
|
||||
} else {
|
||||
if (discoveryTabs.value.length > 0) {
|
||||
activeIndex.value = 0;
|
||||
queryDiscoveryData(discoveryTabs.value[0].id);
|
||||
}
|
||||
@@ -145,10 +152,37 @@ const handleClick = async (item) => {
|
||||
}
|
||||
}
|
||||
|
||||
/// 获取位置信息
|
||||
const getLocation = () => {
|
||||
/// 已经有sceneId了,说明之前已经获取过位置信息了,就不需要再获取一次了
|
||||
if (sceneId) return;
|
||||
uni.getLocation({
|
||||
type: 'wgs84',
|
||||
success: function (res) {
|
||||
// 将位置信息存储到 Pinia 中
|
||||
locationStore.setLocationData({
|
||||
latitude: res.latitude,
|
||||
longitude: res.longitude,
|
||||
});
|
||||
console.log('当前位置:' + JSON.stringify(res));
|
||||
getNearbyTagsData();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// 获取附近标签数据
|
||||
const getNearbyTagsData = async () => {
|
||||
const res = await getNearbyTags();
|
||||
if (res.code === 0) {
|
||||
const nearbyTagId = res.data;
|
||||
findTabByIdWithActiveTabIndex(nearbyTagId);
|
||||
}
|
||||
}
|
||||
|
||||
/// 组件挂载后请求数据
|
||||
onMounted(() => {
|
||||
queryTabsList();
|
||||
getLocation();
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
<script setup>
|
||||
import { onLoad } from "@dcloudio/uni-app";
|
||||
import { ref, onUnmounted } from "vue";
|
||||
import { ref, onUnmounted, onMounted } from "vue";
|
||||
import { getUrlParams } from "@/utils/UrlParams";
|
||||
import { useAppStore } from "@/store";
|
||||
import { checkToken } from "@/hooks/useGoLogin";
|
||||
@@ -31,7 +31,7 @@ import DrawerSection from "../DrawerSection/index.vue";
|
||||
import Calender from "@/components/Calender/index.vue";
|
||||
|
||||
const appStore = useAppStore();
|
||||
|
||||
const locationStore = useLocationStore();
|
||||
const calendarVisible = ref(false);
|
||||
const selectedDate = ref("");
|
||||
|
||||
@@ -52,14 +52,6 @@ uni.$on("openCalendar", () => {
|
||||
calendarVisible.value = true;
|
||||
});
|
||||
|
||||
const getWeixinMiniProgramParams = (e) => {
|
||||
console.log("Params:", e);
|
||||
if (e.q && e.q != "undefined") {
|
||||
const qrUrl = decodeURIComponent(e.q); // 获取到二维码原始链接内容
|
||||
const params = getUrlParams(qrUrl);
|
||||
appStore.setSceneId(params.sceneId || params.tagId);
|
||||
}
|
||||
};
|
||||
|
||||
// 打开窗口
|
||||
const drawerRef = ref(null);
|
||||
@@ -68,19 +60,32 @@ const showDrawer = async (e) => {
|
||||
|
||||
drawerRef.value.open();
|
||||
};
|
||||
|
||||
uni.$on("SHOW_DRAWER", showDrawer);
|
||||
|
||||
// 关闭窗口
|
||||
const closeDrawer = (e) => drawerRef.value.close();
|
||||
|
||||
///获取到二维码原始链接内容
|
||||
const getWeixinMiniProgramParams = (e) => {
|
||||
console.log("Params:", e);
|
||||
if (e.q && e.q != "undefined") {
|
||||
const qrUrl = decodeURIComponent(e.q);
|
||||
const params = getUrlParams(qrUrl);
|
||||
appStore.setSceneId(params.sceneId || params.tagId);
|
||||
}
|
||||
};
|
||||
|
||||
onLoad((e) => {
|
||||
getWeixinMiniProgramParams(e);
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
|
||||
});
|
||||
|
||||
onUnmounted(() => {
|
||||
// uni.$off('openCalendar')
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
@@ -10,6 +10,11 @@ function homeTabContentData(args) {
|
||||
return request.post("/hotelBiz/mainScene/queryContentListWithCache", args);
|
||||
}
|
||||
|
||||
/// 获取距离用户最近的标签
|
||||
function getNearbyTags(args) {
|
||||
return request.get("/hotelBiz/mainScene/nearestTag", args);
|
||||
}
|
||||
|
||||
/// 获取本地天气
|
||||
function getLocalWeather(args) {
|
||||
return request.get("/hotelBiz/mainScene/getLocalWeather", args);
|
||||
@@ -44,6 +49,7 @@ function discoveryCradComponent() {
|
||||
export {
|
||||
homeTabsData,
|
||||
homeTabContentData,
|
||||
getNearbyTags,
|
||||
getLocalWeather,
|
||||
getTimeNoticeList,
|
||||
homeQuickQuestionData,
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
import { getCurrentConfig } from "@/constant/base";
|
||||
import { useAppStore } from "@/store";
|
||||
import { useAppStore, useLocationStore } from "@/store";
|
||||
import { NOTICE_EVENT_LOGOUT } from "@/constant/constant";
|
||||
import { getAccessToken } from "@/constant/token";
|
||||
import { getAccessToken, removeAccessToken } from "@/constant/token";
|
||||
import { goLogin } from "../../hooks/useGoLogin";
|
||||
|
||||
const clientId = getCurrentConfig().clientId;
|
||||
const defaultConfig = {
|
||||
header: {
|
||||
Authorization: "", // 可在此动态设置 token
|
||||
"Content-Type": "application/json",
|
||||
Authorization: "", // 可在此动态设置 token
|
||||
clientId: clientId,
|
||||
},
|
||||
};
|
||||
@@ -19,6 +19,17 @@ function request(url, args = {}, method = "POST", customConfig = {}) {
|
||||
if (!/^http/.test(url)) {
|
||||
url = appStore.serverConfig?.baseUrl + url;
|
||||
}
|
||||
|
||||
// 获取位置信息并添加到请求头
|
||||
const locationStore = useLocationStore();
|
||||
if (locationStore.latitude && locationStore.longitude) {
|
||||
customConfig.header = {
|
||||
...customConfig.header,
|
||||
"X-Latitude": locationStore.latitude,
|
||||
"X-Longitude": locationStore.longitude
|
||||
};
|
||||
}
|
||||
|
||||
// 动态获取 token
|
||||
const token = getAccessToken();
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { useAppStore } from "./app";
|
||||
import { useSelectedDateStore } from "./selectedDate";
|
||||
import { usePictureStore } from "./picture";
|
||||
import { useLocationStore } from "./location";
|
||||
|
||||
export { useAppStore, useSelectedDateStore, usePictureStore };
|
||||
export { useAppStore, useSelectedDateStore, usePictureStore, useLocationStore };
|
||||
19
src/store/modules/location.js
Normal file
19
src/store/modules/location.js
Normal file
@@ -0,0 +1,19 @@
|
||||
import { defineStore } from "pinia";
|
||||
|
||||
export const useLocationStore = defineStore("location", {
|
||||
state() {
|
||||
return {
|
||||
latitude: 0, // 纬度
|
||||
longitude: 0, // 经度
|
||||
};
|
||||
},
|
||||
|
||||
actions: {
|
||||
setLocationData(data) {
|
||||
this.latitude = data.latitude;
|
||||
this.longitude = data.longitude;
|
||||
},
|
||||
},
|
||||
|
||||
unistorage: true,
|
||||
});
|
||||
Reference in New Issue
Block a user