<template>
|
<iframe
|
id="mapPage"
|
width="500px"
|
height="400px"
|
frameborder="0"
|
:src="`https://apis.map.qq.com/tools/locpicker?search=1&type=1&policy=1&mapdraggable=1&key=${VITE_WEMAP_KEY}&${
|
modelValue.latitude ? 'coord=' + modelValue.latitude + ',' + modelValue.longitude : ''
|
}&referer=myJobAddress`"
|
>
|
</iframe>
|
</template>
|
|
<script setup lang="ts">
|
import { useAllAreaList } from '@/hooks';
|
import { Message } from '@bole-core/core';
|
import { loadEnv } from '@build/index';
|
import { useFormItem } from 'element-plus';
|
|
defineOptions({
|
name: 'WeMap',
|
});
|
|
const { VITE_WEMAP_KEY } = loadEnv();
|
|
type Props = {
|
modelValue: WeMapModel;
|
validateEvent?: boolean;
|
};
|
|
const props = withDefaults(defineProps<Props>(), {
|
modelValue: () => ({} as WeMapModel),
|
validateEvent: true,
|
});
|
|
const emit = defineEmits<{
|
(e: 'update:modelValue', value: WeMapModel): void;
|
}>();
|
|
const { findAreaCodeFromName } = useAllAreaList();
|
|
onMounted(() => {
|
window.addEventListener('message', locationPicker, false);
|
// 检查地理位置权限
|
// navigator.permissions.query({ name: 'geolocation' }).then(function (result) {
|
// if (result.state === 'granted') {
|
// // 用户允许地理位置访问
|
// window.addEventListener('message', locationPicker, false);
|
// } else {
|
// // 用户尚未做出选择,可以请求授权
|
// Message.warnMessage('需要获取浏览器定位权限');
|
// return;
|
// }
|
// });
|
});
|
|
const { formItem } = useFormItem();
|
|
function locationPicker(event) {
|
var loc = event.data;
|
if (loc && loc.module === 'locationPicker') {
|
let provinceName = '';
|
let cityName = '';
|
let countyName = '';
|
let nameList = loc.poiaddress.match(
|
/.+?(省|行政区|市|自治区|自治州|行政单位|盟|市辖区|旗|海域|岛|县|区)/g
|
);
|
if (nameList) {
|
if (nameList?.length === 2) {
|
provinceName = nameList[0];
|
cityName = nameList[0];
|
countyName = nameList[1];
|
} else {
|
provinceName = nameList[0];
|
cityName = nameList[1];
|
countyName = nameList[2];
|
}
|
}
|
//防止其他应用也会向该页面post信息,需判断module是否为'locationPicker'
|
emit('update:modelValue', {
|
latitude: loc.latlng.lat,
|
longitude: loc.latlng.lng,
|
provinceName,
|
cityName,
|
countyName,
|
provinceCode: findAreaCodeFromName(provinceName),
|
cityCode: findAreaCodeFromName(cityName),
|
countyCode: findAreaCodeFromName(countyName),
|
address: loc.poiaddress,
|
});
|
if (props.validateEvent) {
|
formItem?.validate?.('change');
|
}
|
}
|
}
|
|
onUnmounted(() => {
|
window.removeEventListener('message', locationPicker);
|
});
|
</script>
|