hookehuyr

feat(checkin): 支持活动打卡接口动态切换

根据 URL 参数 activityId 动态选择打卡接口:
- 有 activityId 参数时使用新接口(需要 activity_id)
- 无 activityId 参数时使用老接口(保持向后兼容)
- 影响接口:isCheckedActivityAPI 和 checkinActivityAPI

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
/*
* @Date: 2025-09-04 16:44:18
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2026-02-09 16:33:11
* @LastEditTime: 2026-02-10 10:38:23
* @FilePath: /map-demo/src/api/checkin.js
* @Description: 文件描述
*/
import { fn, fetch } from '@/api/fn';
const Api = {
IS_CHECKED: '/srv/?f=walk&a=map_activity&t=is_checked',
CHECKIN: '/srv/?f=walk&a=map_activity&t=checkin',
IS_CHECKED: '/srv/?f=walk&a=map&t=is_checked',
CHECKIN: '/srv/?f=walk&a=map&t=checkin',
IS_CHECKED_ACTIVITY: '/srv/?f=walk&a=map_activity&t=is_checked',
CHECKIN_ACTIVITY: '/srv/?f=walk&a=map_activity&t=checkin',
};
/**
......@@ -34,3 +36,28 @@ export const isCheckedAPI = (params) => fn(fetch.get(Api.IS_CHECKED, params));
* @returns {Object} response.data - 响应数据
*/
export const checkinAPI = (params) => fn(fetch.post(Api.CHECKIN, params));
/**
* @description: 检查是否签到
* @param {*} params
* @param {String} params.activity_id - 活动ID
* @param {String} params.detail_id - 打卡点ID
* @param {String} params.openid - openid
* @returns {string} response.code - 响应状态码
* @returns {string} response.msg - 响应消息
* @returns {Object} response.data - 响应数据
* @returns {number} response.data.is_checked - 是否签到
*/
export const isCheckedActivityAPI = (params) => fn(fetch.get(Api.IS_CHECKED_ACTIVITY, params));
/**
* @description: 签到
* @param {*} params
* @param {String} params.activity_id - 活动ID
* @param {String} params.detail_id - 打卡点ID
* @param {String} params.openid - openid
* @returns {string} response.code - 响应状态码
* @returns {string} response.msg - 响应消息
* @returns {Object} response.data - 响应数据
*/
export const checkinActivityAPI = (params) => fn(fetch.post(Api.CHECKIN_ACTIVITY, params));
......
......@@ -95,7 +95,7 @@ import $ from 'jquery';
import AMapLoader from '@amap/amap-jsapi-loader'
import { mapAPI, mapAudioAPI } from '@/api/map.js'
import { isCheckedAPI, checkinAPI } from '@/api/checkin.js'
import { isCheckedAPI, checkinAPI, isCheckedActivityAPI, checkinActivityAPI } from '@/api/checkin.js'
import { getAdaptiveFontSize, getAdaptivePadding, getDeviceInfo } from '@/utils/tools.js'
// 导入标签页配置和工具函数
import { TAB_CONFIGS, setTabTitles, updateTabConfigsFromAPI, updateDefaultTitleFromURL } from './tab-config.js'
......@@ -488,9 +488,19 @@ const checkInitialCheckinStatus = async () => {
try {
const detail_id = page_details.value.id;
const openid = page_details.value.openid;
const activityId = $route.query.activityId; // 从 URL 获取 activityId
if (detail_id && openid) {
const res = await isCheckedAPI({ detail_id, openid });
let res;
// 根据 URL 是否有 activityId 参数决定调用哪个接口
if (activityId) {
// 有 activityId,调用新接口
res = await isCheckedActivityAPI({ activity_id: activityId, detail_id, openid });
} else {
// 没有 activityId,调用老接口
res = await isCheckedAPI({ detail_id, openid });
}
if (res.code) {
check_in_status.value = res.data.is_checked;
}
......@@ -608,6 +618,7 @@ const checkIn = async () => { // 打卡
const detail_id = page_details.value.id;
const openid = page_details.value.openid;
const activityId = $route.query.activityId; // 从 URL 获取 activityId
// 判断用户时候在范围内
if (!checkInRange(page_details.value.current_lng, page_details.value.current_lat, page_details.value?.position)) {
......@@ -619,7 +630,16 @@ const checkIn = async () => { // 打卡
if (page_details.value?.position.length) {
// emit("checkIn", {name: '打卡', point: [+page_details.value?.position[0], +page_details.value?.position[1]]});
// 执行打卡操作
let res = await checkinAPI({ detail_id, openid });
let res;
// 根据 URL 是否有 activityId 参数决定调用哪个接口
if (activityId) {
// 有 activityId,调用新接口
res = await checkinActivityAPI({ activity_id: activityId, detail_id, openid });
} else {
// 没有 activityId,调用老接口
res = await checkinAPI({ detail_id, openid });
}
if (res.code) {
// 提示打卡成功
showDialog({
......