permission.tsx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import { Popup } from 'vant'
  2. import { defineComponent, reactive, watch } from 'vue'
  3. import styles from './index.module.less'
  4. import Member from './member'
  5. import Demand from './demand'
  6. import MemberAndDemand from './memberAndDemand'
  7. import { usePageVisibility } from "@vant/use"
  8. import { studentQueryUserInfo } from "/src/page-instrument/api";
  9. import { getMusicSheetDetail } from "/src/utils/baseApi"
  10. import state from "/src/state";
  11. export type IActive = 'member' | 'demand' | 'memberAndDemand'
  12. export const permissionPopup = reactive({
  13. active: '' as IActive,
  14. show: false,
  15. musicId: '' as string | number,
  16. musicPrice: 0
  17. })
  18. const pageVisibility = usePageVisibility()
  19. watch(pageVisibility, async (value) => {
  20. if (value === "visible") {
  21. const res = await studentQueryUserInfo()
  22. state.vipType = res.data.vipType
  23. if (permissionPopup.active === 'member' && (state.vipType === 'VIP' || state.vipType.includes('SVIP'))) {
  24. permissionPopup.show = false
  25. }
  26. if (permissionPopup.show && (permissionPopup.active === 'demand' || permissionPopup.active === 'memberAndDemand')) {
  27. getMusicSheetDetail(state.examSongId).then(res => {
  28. if (res?.code === 200) {
  29. state.musicBuyInfo.buyed = res?.data?.buyed
  30. // 已经购买
  31. if(state.musicBuyInfo.buyed){
  32. permissionPopup.show = false
  33. }
  34. }
  35. })
  36. }
  37. }
  38. })
  39. export default defineComponent({
  40. name: 'ColexiuPermission',
  41. setup(props, { expose }) {
  42. const toggle = () => {
  43. permissionPopup.show = !permissionPopup.show
  44. }
  45. expose({
  46. toggle,
  47. })
  48. return () => (
  49. <Popup
  50. class={styles.popup}
  51. v-model:show={permissionPopup.show}
  52. teleport="body"
  53. onClosed={() => {
  54. // 重置 目前 VIP使用的参数
  55. permissionPopup.musicId = ''
  56. permissionPopup.musicPrice = 0
  57. }}
  58. >
  59. {permissionPopup.active === 'member' ? (
  60. <Member />
  61. ) : permissionPopup.active === 'demand' ? (
  62. <Demand />
  63. ) : permissionPopup.active === 'memberAndDemand' ? (
  64. <MemberAndDemand />
  65. ) : null}
  66. </Popup>
  67. )
  68. },
  69. })