Forráskód Böngészése

feat: 实时保存用户经纬度前端页面

zhangying 11 hónapja
szülő
commit
097e21bafc

+ 12 - 0
h5app/src/api/position/index.ts

@@ -0,0 +1,12 @@
+import {request} from '@/utils/request';
+
+export function saveLongitudeLatitude(data:any) {
+    return request(
+        {
+            url: 'longitudeLatitude/save',
+            method: 'post',
+            data: data,
+        },
+        { isNew: true },
+    );
+}

+ 17 - 1
h5app/src/store/modules/user.ts

@@ -6,6 +6,7 @@ import {ACCESS_TOKEN_KEY, USER_INFO_KEY} from '@/enums/cacheEnum';
 import { Storage } from '@/utils/Storage';
 import { logout, getInfo, permmenu } from '@/api/account';
 import {oauthLogin} from "@/api/oauth";
+import {alertController} from "@ionic/vue";
 
 interface UserState {
   token: string;
@@ -15,6 +16,7 @@ interface UserState {
   perms: string[];
   menus: API.Menu[];
   userInfo: Partial<API.AdminUserInfo>;
+  timer: any
 }
 
 export const useUserStore = defineStore({
@@ -25,7 +27,8 @@ export const useUserStore = defineStore({
     avatar: '',
     perms: [],
     menus: [],
-    userInfo: Storage.get(USER_INFO_KEY, null)
+    userInfo: Storage.get(USER_INFO_KEY, null),
+    timer: null
   }),
   getters: {
     getToken(): string {
@@ -119,8 +122,21 @@ export const useUserStore = defineStore({
       //const wsStore = useWsStore();
       //wsStore.closeSocket();
       this.resetToken();
+      this.clearTimer();
       //resetRouter();
     },
+    /**
+     * 设置获取经纬度定时器
+     */
+    setTimer(timer: any) {
+      this.timer = timer
+    },
+    /**
+     * 清除经纬度定时器
+     */
+    clearTimer(){
+      clearInterval(this.timer);
+    }
   },
 });
 

+ 51 - 0
h5app/src/views/login.vue

@@ -47,6 +47,9 @@ import {useUserStore} from '@/store/modules/user';
 import router from '../router';
 import {useVuelidate} from '@vuelidate/core'
 import {required, minLength} from '@vuelidate/validators'
+import {present} from "@ionic/core/dist/types/utils/overlays";
+import dayjs from "dayjs";
+import {saveLongitudeLatitude} from "@/api/position";
 
 const {appContext: {config: {globalProperties}}} = getCurrentInstance();
 
@@ -73,6 +76,7 @@ const rules = computed(() => {
 const userStore = useUserStore();
 const user = ref(userStore.getUserInfo);
 const isDev = ref(false);
+const lonLat = ref(userStore.getLonLat);
 
 const v$ = useVuelidate(rules, state.formInline);
 
@@ -109,6 +113,11 @@ const handleSubmit = async () => {
   const userReq = userStore.login(state.formInline);
   userReq.then((data: any) => {
     state.loading = false;
+    // 获取经纬度并保存
+    sendPosition()
+    // 设置定时器实时记录经纬度
+    const time = setInterval(sendPosition, 1000 * 60 * 10);
+    userStore.setTimer(time);
     router.push('/tabs/tabMain');
   }, (err) => {
     state.loading = false;
@@ -117,6 +126,48 @@ const handleSubmit = async () => {
   });
 };
 
+// 发送经纬度到后端
+const sendPosition = function (){
+  getPosition().then((data: any) => {
+    console.log("当前经度:" + data.longitude + "\n 当前纬度:" + data.latitude)
+    if (userStore.getUserInfo.userID && data.longitude && data.latitude){
+      const sendData = {
+        userId: userStore.getUserInfo.userID,
+        time: Date.now(),
+        longitude: data.longitude,
+        latitude: data.latitude,
+      }
+      // 发送请求
+      saveLongitudeLatitude(sendData);
+    }
+  })
+}
+
+// 获取经纬度
+function getPosition () {
+  return new Promise((resolve, reject) => {
+    if (navigator.geolocation) {
+      navigator.geolocation.getCurrentPosition(function (position) {
+        const latitude = position.coords.latitude.toFixed(5)
+        const longitude = position.coords.longitude.toFixed(5)
+        const data = {
+          latitude: latitude,
+          longitude: longitude
+        }
+        resolve(data)
+      }, function () {
+        // eslint-disable-next-line prefer-rest-params
+        reject(arguments)
+      }, {
+        enableHighAccuracy: true,
+        timeout: 5000
+      })
+    } else {
+      reject('你的浏览器不支持当前地理位置信息获取')
+    }
+  })
+}
+
 onIonViewDidEnter(() => {
   state.formInline.password = '';
 });