├── php-api/ # 改造后的PHP接口层 ├── java-ad-service/ # 若依框架微服务(广告+VIP+分账) ├── uniapp-reader/ # UniApp前端项目 │ ├── pages/ # 各端页面 │ └──
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

vipStore.js 2.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { defineStore } from 'pinia'
  2. import { ref } from 'vue'
  3. import { vipApi } from '@/api/vip'
  4. export const useVipStore = defineStore('vip', () => {
  5. // VIP状态
  6. const isVIP = ref(false)
  7. const vipType = ref(null) // 0-非会员 1-初级 2-中级 3-高级 4-超级
  8. const expireTime = ref('')
  9. const privileges = ref([]) // 会员特权列表
  10. // 从Java后端加载会员状态
  11. const loadVipStatus = async (userId) => {
  12. try {
  13. const res = await vipApi.getStatus(userId)
  14. isVIP.value = res.data.isEffective
  15. vipType.value = res.data.type
  16. expireTime.value = res.data.expireTime
  17. privileges.value = res.data.privileges || [
  18. '免广告',
  19. '专属内容',
  20. '双倍阅读金币'
  21. ]
  22. return true
  23. } catch (err) {
  24. console.error('VIP状态加载失败', err)
  25. uni.showToast({ title: '会员信息获取失败', icon: 'none' })
  26. return false
  27. }
  28. }
  29. // 购买VIP(对接Java支付接口)
  30. const purchaseVip = async (plan) => {
  31. try {
  32. uni.showLoading({ title: '支付中...', mask: true })
  33. // 调用Java支付接口
  34. const payRes = await vipApi.purchase({
  35. userId: uni.getStorageSync('userId'),
  36. planId: plan.id,
  37. amount: plan.price
  38. })
  39. // 处理支付结果
  40. if (payRes.data.success) {
  41. await loadVipStatus() // 刷新状态
  42. uni.showToast({ title: '开通成功!', icon: 'success' })
  43. return true
  44. } else {
  45. throw new Error(payRes.data.message || '支付失败')
  46. }
  47. } catch (err) {
  48. uni.showToast({ title: err.message, icon: 'none' })
  49. return false
  50. } finally {
  51. uni.hideLoading()
  52. }
  53. }
  54. // 会员特权检测(例如广告跳过)
  55. const hasPrivilege = (privilegeKey) => {
  56. return isVIP.value && privileges.value.includes(privilegeKey)
  57. }
  58. return {
  59. isVIP,
  60. vipType,
  61. expireTime,
  62. privileges,
  63. loadVipStatus,
  64. purchaseVip,
  65. hasPrivilege
  66. }
  67. })