hookehuyr

feat(AdOverlay): 替换mock数据为真实接口获取广告配置

添加获取广告配置的API接口,移除原有的mock数据配置
在组件挂载时异步获取广告配置数据
更新相关存储和跳转逻辑使用响应式数据
/*
* @Date: 2023-12-22 10:29:37
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2024-06-06 09:31:34
* @FilePath: /meihuaApp/src/api/index.js
* @LastEditTime: 2025-09-16 11:37:51
* @FilePath: /lls_program/src/api/index.js
* @Description: 文件描述
*/
import { fn, fetch } from './fn';
const Api = {
BIND_PHONE: '/srv/?a=room_order&t=bind_phone',
SEND_SMS_CODE: '/srv/?a=room_order&t=send_sms_code',
SHOW_SESSION: '/srv/?a=room_order&t=show_session',
SAVE_CUSTOMER_INFO: '/srv/?a=room_order&t=save_customer_info',
SYS_PARAM: '/srv/?a=room_order&t=sys_param',
GET_LIST: '/srv/?a=room_data&t=get_list',
GET_ROOM: '/srv/?a=room_data&t=get_room',
ADD_ORDER: '/srv/?a=room_data&t=add_order',
MY_ORDER: '/srv/?a=room_data&t=my_order',
ORDER_CANCEL: '/srv/?a=room_data&t=order_cancel',
PAY: '/srv/?a=pay',
PAY_CHECK: '/srv/?a=pay_check',
ORDER_SUCCESS: '/srv/?a=room_data&t=order_success',
TMP_SYS_PARAM: '/srv/?a=get_item',
BOOT_PAGE: '/srv/?a=common&t=boot_page',
}
/**
* @description: 绑定手机号(手机号登录)
* @param phone 手机号
* @param sms_code 验证码
* @returns
* @description: 获取引导页数据
* @returns {number} response.code - 响应状态码
* @returns {string} response.msg - 响应消息
* @returns {Object} response.data - 响应数据
* @returns {string} response.data.adImageUrl - 广告图片URL
* @returns {string} response.data.targetPage - 点击跳转的页面路径
* @returns {string} response.data.storageKey - 存储键名(用于区分不同的广告)
*/
export const bindPhoneAPI = (params) => fn(fetch.post(Api.BIND_PHONE, params));
/**
* @description: 发送验证码
* @param phone 手机号
* @returns
*/
export const sendSmsCodeAPI = (params) => fn(fetch.post(Api.SEND_SMS_CODE, params));
/**
* @description: 获取我的信息
* @returns
*/
export const showMyInfoAPI = (params) => fn(fetch.get(Api.SHOW_SESSION, params));
/**
* @description: 保存我的信息
* @param params
* @returns
*/
export const saveCustomerInfoAPI = (params) => fn(fetch.post(Api.SAVE_CUSTOMER_INFO, params));
/**
* @description: 获取系统参数
* @returns
*/
export const sysParamAPI = (params) => fn(fetch.get(Api.SYS_PARAM, params));
/**
* @description: 获取房间列表
* @param start_date 入住时间
* @param end_date 离店时间
* @param offset 偏移量
* @param limit 条数
* @returns
*/
export const getListAPI = (params) => fn(fetch.get(Api.GET_LIST, params));
/**
* @description: 获取房间详情
* @param start_date 入住时间
* @param end_date 离店时间
* @param room_type floor/room
* @returns
*/
export const getRoomAPI = (params) => fn(fetch.get(Api.GET_ROOM, params));
/**
* @description: 预定房间
* @param id ID
* @param num 预定房间数量
* @param plan_in 入住时间
* @param plan_out 离店时间
* @param contact_name 联系人
* @param contact_phone 联系电话
* @param order_remark 备注
* @param room_type floor/room
* @returns
*/
export const addOrderAPI = (params) => fn(fetch.post(Api.ADD_ORDER, params));
/**
* @description: 支付
* @param order_id 订单ID
* @returns
*/
export const payAPI = (params) => fn(fetch.post(Api.PAY, params));
/**
* @description: 检查是否支付成功
* @param order_id 订单ID
* @returns
*/
export const payCheckAPI = (params) => fn(fetch.post(Api.PAY_CHECK, params));
/**
* @description: 获取我的订单列表
* @param pay_type
* @param page
* @param limit
* @returns
*/
export const myOrderAPI = (params) => fn(fetch.get(Api.MY_ORDER, params));
/**
* @description: 取消订单
* @param id
* @returns
*/
export const orderCancelAPI = (params) => fn(fetch.post(Api.ORDER_CANCEL, params));
/**
* @description: 订单成功
* @param id
* @returns
*/
export const orderSuccessAPI = (params) => fn(fetch.post(Api.ORDER_SUCCESS, params));
/**
* @description:
* @param id
* @returns
*/
export const tmpSysParamAPI = (params) => fn(fetch.get(Api.TMP_SYS_PARAM, params));
export const getBootPageAPI = (params) => fn(fetch.get(Api.BOOT_PAGE, params));
......
......@@ -30,16 +30,18 @@
import { ref, onMounted } from 'vue'
import Taro from '@tarojs/taro'
import { Close } from '@nutui/icons-vue-taro'
// 导入接口
import { getBootPageAPI } from '@/api'
// TODO: Mock数据配置, 等待正式接口
const adConfig = {
// 广告配置数据
const adConfig = ref({
// 广告图片URL
adImageUrl: 'https://cdn.ipadbiz.cn/lls_prog/images/%E5%8D%97%E4%BA%AC%E8%B7%AF%E5%95%86%E5%9C%88.jpeg',
adImageUrl: '',
// 点击跳转的页面路径
targetPage: '/pages/Dashboard/index',
targetPage: '',
// 存储键名(用于区分不同的广告)
storageKey: 'dashboard_ad_overlay'
}
storageKey: ''
})
// Emits
const emit = defineEmits(['close', 'click'])
......@@ -60,12 +62,37 @@ const getTodayDateString = () => {
}
/**
* 获取广告配置数据
*/
const fetchAdConfig = async () => {
try {
const response = await getBootPageAPI()
if (response.code && response.data) {
// 使用接口返回的数据更新配置
adConfig.value = {
adImageUrl: response.data.adImageUrl,
targetPage: response.data.targetPage,
storageKey: response.data.storageKey
}
// 延迟一点显示,避免页面加载时的闪烁
setTimeout(() => {
show()
}, 500)
}
} catch (error) {
console.error('获取广告配置失败:', error)
// 使用默认配置,不影响功能
}
}
/**
* 检查今天是否已经显示过广告
* @returns {boolean} 是否已显示
*/
const hasShownToday = () => {
try {
const lastShownDate = Taro.getStorageSync(adConfig.storageKey)
const lastShownDate = Taro.getStorageSync(adConfig.value.storageKey)
const today = getTodayDateString()
return lastShownDate === today
} catch (error) {
......@@ -80,7 +107,7 @@ const hasShownToday = () => {
const markAsShownToday = () => {
try {
const today = getTodayDateString()
Taro.setStorageSync(adConfig.storageKey, today)
Taro.setStorageSync(adConfig.value.storageKey, today)
} catch (error) {
console.error('保存存储数据失败:', error)
}
......@@ -114,7 +141,7 @@ const handleAdClick = () => {
// 跳转到目标页面
// Taro.navigateTo({
// url: adConfig.targetPage
// url: adConfig.value.targetPage
// }).catch(error => {
// console.error('页面跳转失败:', error)
// Taro.showToast({
......@@ -124,7 +151,7 @@ const handleAdClick = () => {
// })
// 触发点击事件
emit('click', adConfig.targetPage)
emit('click', adConfig.value.targetPage)
}
/**
......@@ -148,12 +175,10 @@ defineExpose({
hasShownToday
})
// 组件挂载时检查是否需要显示
onMounted(() => {
// 延迟一点显示,避免页面加载时的闪烁
setTimeout(() => {
show()
}, 500)
// 组件挂载时获取配置并检查是否需要显示
onMounted(async () => {
// 先获取广告配置
await fetchAdConfig()
})
</script>
......