You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

46 rivejä
1.7 KiB

  1. /**
  2. * 点数获取(任务)配置
  3. *
  4. * 后端 /point/earnconfig 一次返回签到、邀请与看广告任务的开关、额度与今日进度,
  5. * entry_enabled 为 false 表示全部任务都关闭,此时所有入口都不渲染。
  6. *
  7. * 结果放在 useState 里共享,避免 header、充值页、账单页各请求一次。
  8. */
  9. export function useEarnPoints() {
  10. const { post } = useApi()
  11. const config = useState('earn-points-config', () => null)
  12. const loading = useState('earn-points-loading', () => false)
  13. const entryEnabled = computed(() => Boolean(config.value?.entry_enabled))
  14. const adTask = computed(() => config.value?.ad || { enabled: false })
  15. const inviteTask = computed(() => config.value?.invite || { enabled: false })
  16. const checkinTask = computed(() => config.value?.checkin || { enabled: false })
  17. const balancePoints = computed(() => Number(config.value?.balance?.points || 0))
  18. /**
  19. * @param {boolean} force 忽略已有缓存重新拉取(领取到账后刷新用)
  20. */
  21. async function load(force = false) {
  22. if (loading.value) return config.value
  23. if (config.value && !force) return config.value
  24. loading.value = true
  25. try {
  26. const res = await post('/point/earnconfig', {})
  27. config.value = res.data || {}
  28. } catch (e) {
  29. // 拉取失败按未开启处理,宁可不显示入口,也不给一个点进去报错的入口
  30. config.value = {
  31. entry_enabled: false,
  32. ad: { enabled: false },
  33. invite: { enabled: false },
  34. checkin: { enabled: false },
  35. }
  36. } finally {
  37. loading.value = false
  38. }
  39. return config.value
  40. }
  41. return { config, loading, entryEnabled, adTask, inviteTask, checkinTask, balancePoints, load }
  42. }