add mock location

This commit is contained in:
Warunee Tamkoo 2026-03-06 23:19:31 +07:00
parent 386ab6480f
commit 9c68349983
4 changed files with 325 additions and 95 deletions

View file

@ -5,6 +5,7 @@ import axios from 'axios'
import { useCounterMixin } from '@/stores/mixin'
import { useQuasar } from 'quasar'
import { usePrivacyStore } from '@/stores/privacy'
import { useLocationValidation } from '@/composables/useLocationValidation'
const mixin = useCounterMixin()
const { messageError } = mixin
@ -12,9 +13,11 @@ const privacyStore = usePrivacyStore()
// import type { LocationObject } from '@/interface/index/Main'
const mapElement = ref<HTMLElement | null>(null)
const emit = defineEmits(['update:location'])
const emit = defineEmits(['update:location', 'locationStatus', 'mockDetected'])
const $q = useQuasar()
const { validateLocation, showMockWarning } = useLocationValidation()
function updateLocation(latitude: number, longitude: number, namePOI: string) {
// event parent component props
emit('update:location', latitude, longitude, namePOI)
@ -199,7 +202,7 @@ async function initializeMap() {
}
}
const locationGranted = ref(false)
const locationGranted = ref<boolean>(false)
// Function to request location permission
const requestLocationPermission = () => {
// privacy
@ -223,8 +226,30 @@ const requestLocationPermission = () => {
navigator.geolocation.getCurrentPosition(
async (position) => {
// Permission granted
locationGranted.value = true
// Validate location first
const validationResult = validateLocation(position)
// Always emit mockDetected event (regardless of result)
if (validationResult.isMockDetected) {
showMockWarning(validationResult)
emit('mockDetected', validationResult)
}
// Check for critical errors (invalid coordinates) that prevent showing location
const hasCriticalErrors = validationResult.errors.some(error =>
error.includes('พิกัดตำแหน่งไม่ถูกต้อง')
)
if (hasCriticalErrors) {
locationGranted.value = false
emit('locationStatus', false)
messageError($q, '', validationResult.errors[0])
return
}
// Permission granted based on mock detection
locationGranted.value = !validationResult.isMockDetected
emit('locationStatus', !validationResult.isMockDetected)
const { latitude, longitude } = position.coords
// console.log('Current position:', latitude, longitude)
@ -242,6 +267,7 @@ const requestLocationPermission = () => {
(error) => {
// Permission denied
locationGranted.value = false
emit('locationStatus', false)
switch (error.code) {
case error.PERMISSION_DENIED:
@ -272,6 +298,7 @@ const requestLocationPermission = () => {
defineExpose({
requestLocationPermission,
locationGranted,
})
</script>