otherConfig.vue 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <template>
  2. <div class="form-item">
  3. <label>{{ $t('recharge.remainingCoins') }}</label>
  4. <div class="select-wrapper">
  5. <el-input
  6. type="text"
  7. readonly="readonly"
  8. v-model="useUserInfoStore.userInfo.coin_amount"
  9. class="w-full px-3 py-2 border rounded-md"
  10. >
  11. <template #append> <el-button class="recharge-btn" @click="openDialog()" v-log="{ describe: { action: '点击充值' } }">{{ $t('recharge.recharge') }}</el-button></template>
  12. </el-input>
  13. </div>
  14. <div class="fs-12 c-666">{{ $t('recharge.coinTip') }}</div>
  15. </div>
  16. <el-dialog v-model="showRechargeDialog"
  17. :title="$t('recharge.rechargeTitle')"
  18. width="700px"
  19. :height="630 + 'px'"
  20. @close="onClose"
  21. :destroy-on-close="true">
  22. <div v-if="loading" class="loading-text flex" style="width: 660px; height: 610px;" >{{ $t('recharge.loading') }}</div>
  23. <iframe v-show="!loading" :src="rechargeUrl" width="660" height="610" frameborder="0" @load="onIframeLoad"></iframe>
  24. </el-dialog>
  25. </template>
  26. <script setup lang="ts">
  27. import { configs } from '@/utils/appconfig';
  28. import { ref, onMounted, onUnmounted } from "vue";
  29. import useUserInfo from "@/stores/modules/user";
  30. const useUserInfoStore = useUserInfo();
  31. import tokenInfo from '@/stores/modules/token';
  32. const tokenInfoStore = tokenInfo();
  33. import { getWebUrlrUrl } from '@/utils/appfun'
  34. const showRechargeDialog = ref(false);
  35. const rechargeUrl = ref(getWebUrlrUrl({
  36. url:'/other/recharge_gold_coin'
  37. }));
  38. const loading = ref(true);
  39. const onIframeLoad = () => {
  40. loading.value = false;
  41. };
  42. const handleWindowMessage = async (event) => {
  43. const message = event.data;
  44. if (message.type === 'close') {
  45. showRechargeDialog.value = false;
  46. await useUserInfoStore.getInfo();
  47. loading.value = false;
  48. }
  49. };
  50. const onClose = async () => {
  51. await useUserInfoStore.getInfo();
  52. loading.value = false;
  53. };
  54. const openDialog = () => {
  55. showRechargeDialog.value = true;
  56. loading.value = false;
  57. };
  58. onMounted(() => {
  59. window.addEventListener('message', handleWindowMessage);
  60. });
  61. onUnmounted(() => {
  62. window.removeEventListener('message', handleWindowMessage);
  63. });
  64. </script>
  65. <style scoped lang="scss">
  66. .recharge-btn {
  67. background: linear-gradient( 180deg, #FFAF51 0%, #FF7272 100%);
  68. border-radius: 6px;
  69. color: #fff !important;
  70. }
  71. .select-wrapper {
  72. ::v-deep {
  73. .el-input-group__append{
  74. }
  75. }
  76. }
  77. </style>