honor-dialog.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <script setup lang="ts">
  2. import { close } from '../../../../core/libs/svgs'
  3. import { HonorDialogOptions, HonorDialogSymbol } from '.'
  4. import earnBadgeTitle from '@designer-hub/assets/src/libs/assets/earnBadgeTitle'
  5. import radiation from '@designer-hub/assets/src/libs/assets/radiation'
  6. import { NetImages } from '@/core/libs/net-images'
  7. import { ConfigProviderThemeVars } from 'wot-design-uni'
  8. import { useRouter } from '@/core/utils/router'
  9. const dialogOption = inject(HonorDialogSymbol, ref<HonorDialogOptions>({}))
  10. const { push } = useRouter()
  11. const lazyRender = ref<boolean>(true)
  12. const modelValue = defineModel({ default: false, type: Boolean })
  13. const themeVars: ConfigProviderThemeVars = {
  14. overlayBg: 'rgba(0,0,0,0.85)',
  15. }
  16. const title = ref('东方研习营')
  17. const content = ref('获得东方研习营游学徽章')
  18. const path = ref('')
  19. const src = ref(
  20. 'https://image.zhuchaohui.com/zhucaohui/e104215c64d39e4a0f8676c48b8e7221c891eade1c8d7f02b2a7f0be862e3f76.png',
  21. )
  22. const reset = (option) => {
  23. if (option) {
  24. modelValue.value = option.show
  25. lazyRender.value = option.lazyRender
  26. title.value = option.title || '东方研习营'
  27. content.value = option.content || '获得东方研习营游学徽章'
  28. path.value = option.path || ''
  29. src.value = option.image || src.value
  30. }
  31. }
  32. const jumpTo = () => {
  33. if (dialogOption.value?.type && dialogOption.value?.type === 'certificate') {
  34. push('/pages/mine/honors/index?active=certificate')
  35. }
  36. if (dialogOption.value?.type && dialogOption.value?.type === 'badge') {
  37. push('/pages/mine/honors/index?active=badge')
  38. }
  39. }
  40. const handleLoad = () => {
  41. console.log(1111)
  42. if (dialogOption.value?.onLoad && typeof dialogOption.value?.onLoad === 'function') {
  43. dialogOption.value.onLoad()
  44. }
  45. }
  46. watch(
  47. () => dialogOption.value,
  48. (newVal) => {
  49. reset(newVal)
  50. },
  51. )
  52. // provide(HonorDialogSymbol, { show })
  53. </script>
  54. <template>
  55. <wd-config-provider :themeVars="themeVars">
  56. <wd-popup
  57. v-model="modelValue"
  58. :lazy-render="lazyRender"
  59. custom-class="bg-transparent! bg-[#f6f6f6]!"
  60. >
  61. <div class="flex flex-col items-center relative">
  62. <wd-img width="60vw" mode="widthFix" :src="earnBadgeTitle"></wd-img>
  63. <div class="w-[100vw] h-[68vw] pt-2 flex">
  64. <div class="w-100vw h-100vw absolute left-0 right-0 top--8">
  65. <wd-img
  66. custom-class="absolute! top-50% left-50% translate-[-50%,-50%] vertical-bottom"
  67. width="68%"
  68. height="68%"
  69. @load="handleLoad"
  70. :src="radiation"
  71. ></wd-img>
  72. <wd-img
  73. custom-class="absolute! left-16 top-4 vertical-bottom"
  74. width="58vw"
  75. mode="widthFix"
  76. :src="NetImages.Stars"
  77. ></wd-img>
  78. <wd-img
  79. custom-class="absolute! ma-a top-50% left-50% translate-[-50%,-50%] vertical-bottom blur-60"
  80. width="40vw"
  81. mode="widthFix"
  82. :src="src"
  83. ></wd-img>
  84. <wd-img
  85. custom-class="absolute! ma-a top-50% left-50% translate-[-50%,-50%] vertical-bottom"
  86. width="40vw"
  87. mode="widthFix"
  88. :src="src"
  89. ></wd-img>
  90. </div>
  91. </div>
  92. <div class="text-center">
  93. <div class="text-white text-2xl font-normal font-['PingFang_SC'] uppercase">
  94. {{ title }}
  95. </div>
  96. <div class="mt-2 text-[#9f9b94] text-base font-normal font-['PingFang_SC'] uppercase">
  97. {{ content }}
  98. </div>
  99. </div>
  100. <div
  101. class="my-10 w-[155px] px-5 py-2.5 rounded-full border border-solid border-[#c8beab] justify-center items-center gap-1 inline-flex"
  102. >
  103. <div
  104. class="text-center text-[#c7bdab] text-base font-normal font-['PingFang_SC'] leading-normal"
  105. @click.stop="jumpTo"
  106. >
  107. 查看奖励
  108. </div>
  109. </div>
  110. <wd-img width="24" height="24" :src="close" @click="modelValue = false"></wd-img>
  111. </div>
  112. </wd-popup>
  113. </wd-config-provider>
  114. </template>