add mock location
This commit is contained in:
parent
386ab6480f
commit
9c68349983
4 changed files with 325 additions and 95 deletions
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue