/** * 点数获取(任务)配置 * * 后端 /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 } }