174 lines
4.7 KiB
JavaScript
174 lines
4.7 KiB
JavaScript
/**
|
|
* 配置状态管理模块
|
|
* 小程序启动时一次性加载所有配置
|
|
*/
|
|
|
|
import { defineStore } from 'pinia'
|
|
import {
|
|
getLastPopupDate, setLastPopupDate,
|
|
getMemberAdClosedDate, setMemberAdClosedDate,
|
|
getMemberAdClosedForever, setMemberAdClosedForever,
|
|
getDefaultAvatar, setDefaultAvatar
|
|
} from '../utils/storage.js'
|
|
import { getAppConfig } from '../api/config.js'
|
|
|
|
/**
|
|
* 获取今天的日期字符串 (YYYY-MM-DD)
|
|
* @returns {string}
|
|
*/
|
|
export function getTodayDateString() {
|
|
const now = new Date()
|
|
return `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}`
|
|
}
|
|
|
|
export const useConfigStore = defineStore('config', {
|
|
state: () => ({
|
|
// 是否已加载配置
|
|
isLoaded: false,
|
|
|
|
// 首页配置
|
|
banners: [],
|
|
kingKongs: [],
|
|
|
|
// 系统配置
|
|
defaultAvatar: getDefaultAvatar() || '/static/logo.png',
|
|
searchBanner: '',
|
|
|
|
// 弹窗配置
|
|
dailyPopup: null,
|
|
memberAdConfig: null,
|
|
lastPopupDate: getLastPopupDate() || '',
|
|
memberAdClosedDate: getMemberAdClosedDate() || '',
|
|
memberAdClosedForever: getMemberAdClosedForever() || false,
|
|
|
|
// 弹窗显示状态
|
|
showGenderPopup: false,
|
|
showDailyPopup: false,
|
|
showMemberAd: false
|
|
}),
|
|
|
|
getters: {
|
|
hasBanners: (state) => state.banners.length > 0,
|
|
hasKingKongs: (state) => state.kingKongs.length > 0,
|
|
hasDailyPopup: (state) => state.dailyPopup !== null,
|
|
hasMemberAdConfig: (state) => state.memberAdConfig !== null && state.memberAdConfig.status === 1,
|
|
getDefaultAvatar: (state) => state.defaultAvatar || '/static/logo.png'
|
|
},
|
|
|
|
actions: {
|
|
/**
|
|
* 加载所有配置(小程序启动时调用一次)
|
|
*/
|
|
async loadAppConfig() {
|
|
if (this.isLoaded) return
|
|
|
|
try {
|
|
const res = await getAppConfig()
|
|
if (res && res.data) {
|
|
const config = res.data
|
|
|
|
// 首页配置
|
|
this.banners = config.banners || []
|
|
this.kingKongs = config.kingKongs || []
|
|
|
|
// 系统配置
|
|
if (config.defaultAvatar) {
|
|
this.defaultAvatar = config.defaultAvatar
|
|
setDefaultAvatar(config.defaultAvatar)
|
|
}
|
|
this.searchBanner = config.searchBanner || ''
|
|
|
|
// 弹窗配置
|
|
this.dailyPopup = config.dailyPopup || null
|
|
this.memberAdConfig = config.memberAdPopup || null
|
|
|
|
this.isLoaded = true
|
|
}
|
|
} catch (error) {
|
|
console.error('加载配置失败:', error)
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 检查并决定显示哪个弹窗
|
|
* @param {Object} userState - 用户状态
|
|
*/
|
|
checkPopupDisplay(userState) {
|
|
const today = getTodayDateString()
|
|
const { genderPreference, isProfileCompleted, isMember } = userState
|
|
|
|
// 重置所有弹窗状态
|
|
this.showGenderPopup = false
|
|
this.showDailyPopup = false
|
|
this.showMemberAd = false
|
|
|
|
// 性别选择弹窗优先级最高
|
|
if (genderPreference === 0 && !isProfileCompleted) {
|
|
this.showGenderPopup = true
|
|
return
|
|
}
|
|
|
|
// 每日弹窗
|
|
if (this.lastPopupDate !== today && this.dailyPopup) {
|
|
this.showDailyPopup = true
|
|
return
|
|
}
|
|
|
|
// 会员广告
|
|
if (!isMember && this.memberAdConfig && this.memberAdConfig.status === 1) {
|
|
const displayMode = this.memberAdConfig.displayMode || 2
|
|
|
|
if (displayMode === 1) {
|
|
this.showMemberAd = true
|
|
} else if (displayMode === 2) {
|
|
if (this.memberAdClosedDate !== today) {
|
|
this.showMemberAd = true
|
|
}
|
|
} else if (displayMode === 3) {
|
|
if (!this.memberAdClosedForever) {
|
|
this.showMemberAd = true
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
closeGenderPopup() {
|
|
this.showGenderPopup = false
|
|
},
|
|
|
|
closeDailyPopup() {
|
|
const today = getTodayDateString()
|
|
this.showDailyPopup = false
|
|
this.lastPopupDate = today
|
|
setLastPopupDate(today)
|
|
},
|
|
|
|
closeMemberAd() {
|
|
const today = getTodayDateString()
|
|
this.showMemberAd = false
|
|
|
|
const displayMode = this.memberAdConfig?.displayMode || 2
|
|
|
|
if (displayMode === 2) {
|
|
this.memberAdClosedDate = today
|
|
setMemberAdClosedDate(today)
|
|
} else if (displayMode === 3) {
|
|
this.memberAdClosedForever = true
|
|
setMemberAdClosedForever(true)
|
|
}
|
|
},
|
|
|
|
reset() {
|
|
this.isLoaded = false
|
|
this.banners = []
|
|
this.kingKongs = []
|
|
this.searchBanner = ''
|
|
this.dailyPopup = null
|
|
this.memberAdConfig = null
|
|
this.showGenderPopup = false
|
|
this.showDailyPopup = false
|
|
this.showMemberAd = false
|
|
}
|
|
}
|
|
})
|