| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- <template></template>
- <script>
- import { getAddressCode } from "@/api/address";
- import config from '@/config/config'
- export default {
- data() {
- return {
- config
- };
- },
- mounted() {
- this.init();
- },
- methods: {
- // 初始化地图并且调用
- initMap() {
- let that = this;
- uni.chooseLocation({
- success: function (res) {
- /**获取地址详情地址 */
- that.posToCity(res.latitude, res.longitude).then((val) => {
- /**获取地址code */
- getAddressCode(
- val.regeocode.addressComponent.citycode,
- val.regeocode.addressComponent.township
- ).then((code) => {
- that.$emit("callback", { ...val, ...res, ...code });
- that.$emit("close");
- });
- });
- },
- fail() {
- that.$emit("close");
- },
- });
- },
- // 根据当前客户端判断展示不同类型数据
- init() {
- // #ifdef MP-WEIXIN
- this.wechatMap();
- // #endif
- // #ifndef MP-WEIXIN
- this.initMap();
- // #endif
- },
- // 如果是微信小程序单独走微信小程序授权模式
- wechatMap() {
- let that = this;
- uni.authorize({
- scope: "scope.userLocation",
- success() {
- // 允许授权
- that.initMap();
- },
- fail() {
- //拒绝授权
- uni.showModal({
- content: "检测到您没打开获取地址功能权限,是否去设置打开?",
- confirmText: "确认",
- cancelText: "取消",
- success: (res) => {
- if (res.confirm) {
- // 打开设置好后重新刷新地图
- uni.openSetting({
- success: (res) => {
- that.initMap();
- },
- });
- } else {
- // 取消后关闭
- that.$emit("close");
- return false;
- }
- },
- });
- return false;
- },
- });
- },
- // 获取城市的数据
- posToCity(latitude, longitude) {
- return new Promise((resolve, reject) => {
- uni.request({
- url: `https://restapi.amap.com/v3/geocode/regeo`,
- method: "GET",
- data: {
- key: config.aMapKey, //web服务的key
- location: `${longitude},${latitude}`,
- },
- success: ({ data }) => {
- const { status, info } = data;
- if (status === "1") {
- resolve(data);
- } else {
- reject(info);
- }
- },
- fail: (err) => {
- reject(err);
- },
- });
- });
- },
- },
- };
- </script>
- <style lang="scss" scoped>
- </style>
|