|
- /**
- * 点数获取(任务)配置
- *
- * 后端 /point/earnconfig 一次返回签到、邀请与看广告任务的开关、额度与今日进度,
- * entry_enabled 为 false 表示全部任务都关闭,此时所有入口都不渲染。
- *
- * 结果放在 useState 里共享,避免 header、充值页、账单页各请求一次。
- */
- export function useEarnPoints() {
- const { post } = useApi()
- const config = useState('earn-points-config', () => null)
- const loading = useState('earn-points-loading', () => false)
-
- const entryEnabled = computed(() => Boolean(config.value?.entry_enabled))
- const adTask = computed(() => config.value?.ad || { enabled: false })
- const inviteTask = computed(() => config.value?.invite || { enabled: false })
- const checkinTask = computed(() => config.value?.checkin || { enabled: false })
- const balancePoints = computed(() => Number(config.value?.balance?.points || 0))
-
- /**
- * @param {boolean} force 忽略已有缓存重新拉取(领取到账后刷新用)
- */
- async function load(force = false) {
- if (loading.value) return config.value
- if (config.value && !force) return config.value
- loading.value = true
- try {
- const res = await post('/point/earnconfig', {})
- config.value = res.data || {}
- } catch (e) {
- // 拉取失败按未开启处理,宁可不显示入口,也不给一个点进去报错的入口
- config.value = {
- entry_enabled: false,
- ad: { enabled: false },
- invite: { enabled: false },
- checkin: { enabled: false },
- }
- } finally {
- loading.value = false
- }
- return config.value
- }
-
- return { config, loading, entryEnabled, adTask, inviteTask, checkinTask, balancePoints, load }
- }
|