index.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <template>
  2. <v-cover v-if="state.page == '封面页'"></v-cover>
  3. <v-invite v-if="state.page == '邀请页'"></v-invite>
  4. <v-result v-if="state.page == '开奖页'"></v-result>
  5. <open-box v-show="state.open_box.show"></open-box>
  6. </template>
  7. <script setup>
  8. import { reactive, provide, onMounted } from 'vue'
  9. import VCover from '@/view/iframe/treasure-hunt/cover.vue'
  10. import VInvite from '@/view/iframe/treasure-hunt/invite.vue'
  11. import VResult from '@/view/iframe/treasure-hunt/result.vue'
  12. import { inviteDetail, treasureDetail, treasureOpen } from '@/http/treasure.js'
  13. import { reSetBindTwtterId } from '@/http/help.js'
  14. import { getQueryString } from '@/uilts/help'
  15. import OpenBox from '@/view/iframe/treasure-hunt/components/open-box.vue'
  16. let state = reactive({
  17. page: '',
  18. detail: {},
  19. open_box: {
  20. show: false,
  21. data: {}
  22. },
  23. open_btn: {
  24. txt: '',
  25. disabled: false
  26. },
  27. dialog: {
  28. show: false,
  29. },
  30. start_task: {}
  31. })
  32. provide('state', state)
  33. let params = {}
  34. onMounted(() => {
  35. params = JSON.parse(getQueryString('params') || '{}')
  36. state.postId = params.post_Id || ''
  37. state.tweetId = params.tweet_Id || ''
  38. state.invite_code = params.invite_code || ''
  39. state.init()
  40. })
  41. state.init = (callback) => {
  42. if (params.page_type == '邀请链接') {
  43. // 邀请链接
  44. inviteDetail({
  45. params: {
  46. inviteCode: params.invite_code
  47. }
  48. }).then((res) => {
  49. if (res.code == 0) {
  50. handleCommon(res, callback)
  51. }
  52. })
  53. } else if (params.page_type == '原始链接') {
  54. // 原始链接
  55. treasureDetail({
  56. params: {
  57. postId: params.post_Id
  58. }
  59. }).then((res) => {
  60. if (res.code == 0) {
  61. handleCommon(res, callback)
  62. }
  63. })
  64. }
  65. }
  66. const handleCommon = (res, callback) => {
  67. state.detail = res.data
  68. state.postId = state.detail.postId
  69. try {
  70. state.tasks = JSON.parse(state.detail.startCondition)
  71. let follows = state.tasks.filter((item) => { return item.type == 1 })
  72. if (follows.length) {
  73. state.follows = follows[0].relatedUsers
  74. }
  75. }
  76. catch (error) {
  77. console.error('catch', error)
  78. }
  79. handleStatus()
  80. if (!res.data.srcContentId) {
  81. reSetBindTwtterId({
  82. postId: state.postId || '',
  83. tweetId: state.tweetId || ''
  84. })
  85. }
  86. callback && callback()
  87. }
  88. state.treasureOpen = () => {
  89. treasureOpen({
  90. params: {
  91. postId: state.postId,
  92. treasureId: state.treasureId,
  93. }
  94. }).then((res) => {
  95. if (res.code == 0) {
  96. state.open_box.show = true
  97. state.open_box.data = res.data
  98. state.init(() => {
  99. state.inviteInit()
  100. })
  101. } else {
  102. switch (String(res.code)) {
  103. case '2037':
  104. state.dialog.show = true
  105. break;
  106. default:
  107. state.init(() => {
  108. state.inviteInit()
  109. })
  110. break
  111. }
  112. }
  113. })
  114. }
  115. const handleStatus = () => {
  116. // 如果 夺宝状态 = 未开始
  117. // 显示未开始页面
  118. // 如果 夺宝状态 = 进行中
  119. // 如果 夺宝参与状态 = 未参与夺宝
  120. // 显示封面页
  121. // 如果 夺宝参与状态 = 已参与夺宝
  122. // 显示邀请页
  123. // 如果 夺宝状态 = 已结束
  124. // 显示结束页面
  125. let { status, joinStatus } = state.detail || {}
  126. state.open_btn.txt = 'Start'
  127. // 如果 夺宝状态 = 未开始
  128. if (status == 0) {
  129. state.page = '封面页'
  130. }
  131. // 如果 夺宝状态 = 进行中
  132. else if (status == 1) {
  133. // 如果 夺宝参与状态 = 未参与夺宝
  134. if (joinStatus == 0) {
  135. // 显示封面页
  136. state.page = '封面页'
  137. state.cover_status = '有邀请人'
  138. state.open_btn.txt = 'Start'
  139. // state.cover_status = '无邀请人'
  140. // state.cover_status = '奖励已被领光'
  141. }
  142. // 如果 夺宝参与状态 = 已参与夺宝
  143. else if (joinStatus == 1) {
  144. state.page = '邀请页'
  145. }
  146. }
  147. // 如果 夺宝状态 = 已结束
  148. else {
  149. state.page = '封面页'
  150. state.cover_status = '奖励已被领光'
  151. state.open_btn.txt = 'Look for more treasures'
  152. }
  153. }
  154. </script>
  155. <style lang="scss" >
  156. html,
  157. body {
  158. margin: 0;
  159. padding: 0;
  160. }
  161. </style>