hookehuyr

feat(Activities): 动态获取地图URL并添加用户openid参数

重构活动页面WebView组件,新增动态获取地图URL功能
添加用户openid参数到URL中
增加错误处理和备用URL机制
/*
* @Date: 2025-09-04 17:23:17
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-09-04 17:23:43
* @FilePath: /lls_program/src/api/map.js
* @Description: 文件描述
*/
import { fn, fetch } from './fn';
const Api = {
GET_MAP_URL: '/srv/?a=map&t=get_map_url',
}
/**
* @description: 获取地图URL
* @param {Object} params - 请求参数
* @returns {number} response.code - 响应状态码
* @returns {string} response.msg - 响应消息
* @returns {Object} response.data - 响应数据
* @returns {string} response.data.url - 地图URL
*/
export const getMapUrlAPI = (params) => fn(fetch.get(Api.GET_MAP_URL, params));
......@@ -32,6 +32,9 @@
import { ref, onMounted } from 'vue'
import Taro from '@tarojs/taro'
import BottomNav from '../../components/BottomNav.vue'
// 获取接口信息
import { getUserProfileAPI } from '@/api/user'
import { getMapUrlAPI } from '@/api/map'
/**
* 活动页面WebView组件
......@@ -42,7 +45,7 @@ import BottomNav from '../../components/BottomNav.vue'
const webUrl = ref('') // 动态设置URL
const loading = ref(true)
const error = ref(false)
const baseUrl = 'https://oa.onwall.cn/f/map/#/checkin/?id=2400107' // 基础URL
const baseUrl = ref('') // 动态获取的基础URL
/**
* 处理WebView加载完成
......@@ -92,28 +95,61 @@ const handleRetry = () => {
/**
* 构建包含位置参数的URL
*/
const buildUrlWithLocation = (lng, lat) => {
if (lng && lat) {
const separator = baseUrl.includes('?') ? '&' : '?'
return `${baseUrl}${separator}current_lng=${lng}&current_lat=${lat}`
const buildUrlWithLocation = (lng, lat, openid) => {
if (lng && lat && baseUrl.value) {
const separator = baseUrl.value.includes('?') ? '&' : '?'
return `${baseUrl.value}${separator}current_lng=${lng}&current_lat=${lat}&openid=${openid}`
}
return baseUrl.value || ''
}
/**
* 初始化页面数据
*/
const initPageData = async () => {
try {
// 获取地图URL
const mapUrlResponse = await getMapUrlAPI()
if (mapUrlResponse.code && mapUrlResponse.data?.url) {
baseUrl.value = mapUrlResponse.data.url
console.log('获取到的地图URL:', baseUrl.value)
} else {
console.error('获取地图URL失败:', mapUrlResponse.msg)
// 使用默认URL作为备用
baseUrl.value = 'https://oa.onwall.cn/f/map/#/checkin/?id=2400107'
}
// 获取用户信息
const { code, data } = await getUserProfileAPI()
if (code) {
// 获取路由参数中的经纬度信息
const instance = Taro.getCurrentInstance()
const { current_lng, current_lat } = instance.router?.params || {}
console.log('接收到的位置参数:', { current_lng, current_lat })
// 处理用户信息
const openid = data?.user.openid || ''
// 构建完整的URL
webUrl.value = buildUrlWithLocation(current_lng, current_lat, openid)
console.log('最终WebView URL:', webUrl.value)
}
} catch (error) {
console.error('初始化页面数据失败:', error)
// 使用默认URL作为备用
baseUrl.value = 'https://oa.onwall.cn/f/map/#/checkin/?id=2400107'
Taro.showToast({
title: '获取地图信息失败',
icon: 'none'
})
}
return baseUrl
}
// 页面挂载时初始化
onMounted(() => {
onMounted(async () => {
console.log('活动页面WebView初始化')
// 获取路由参数中的经纬度信息
const instance = Taro.getCurrentInstance()
const { current_lng, current_lat } = instance.router?.params || {}
console.log('接收到的位置参数:', { current_lng, current_lat })
// 构建完整的URL
webUrl.value = buildUrlWithLocation(current_lng, current_lat)
console.log('最终WebView URL:', webUrl.value)
await initPageData()
})
</script>
......