Payment.vue 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <script setup lang="ts">
  2. import { ref } from "vue";
  3. import type { PaymentData } from "@/interfaces";
  4. import { useMainStore } from "@/stores/main";
  5. const mainStore = useMainStore();
  6. let isLoading = ref(false);
  7. const credit = ref(1);
  8. function increment() {
  9. credit.value++;
  10. }
  11. function decrement() {
  12. if (credit.value > 1) {
  13. credit.value--;
  14. }
  15. }
  16. const epayment = ref("ecpay");
  17. async function ecpay() {
  18. isLoading.value = true;
  19. const data: PaymentData = {
  20. item: `Credit 60 X${credit.value}`,
  21. amount: 500 * credit.value,
  22. };
  23. if (data.amount <= 0) {
  24. return;
  25. }
  26. const originalHTML = await mainStore.Payment(data, "zh");
  27. let formHTML = originalHTML?.replace(
  28. '<script type="text/javascript">document.getElementById("data_set").submit();</scr',
  29. ""
  30. );
  31. formHTML = formHTML?.replace("ipt>", "");
  32. const payFormElement = document.getElementById("pay-form");
  33. payFormElement!.innerHTML = formHTML!;
  34. const ecpayForm: HTMLFormElement = <HTMLFormElement>(
  35. document.getElementById("data_set")
  36. );
  37. ecpayForm.submit();
  38. setTimeout(() => {
  39. isLoading.value = false;
  40. }, 3000);
  41. }
  42. </script>
  43. <template>
  44. <div class="payment-item me-6">
  45. <span>分鐘數:</span>
  46. <v-btn
  47. density="compact"
  48. icon="remove"
  49. color="grey"
  50. class="mx-2"
  51. @click="decrement"
  52. ></v-btn>
  53. <span class="px-2">{{ credit }}</span>
  54. <v-btn
  55. density="compact"
  56. icon="add"
  57. color="grey"
  58. class="mx-2"
  59. @click="increment"
  60. ></v-btn>
  61. <span class="ms-2">NT${{ 500 * credit }}</span>
  62. </div>
  63. <v-btn
  64. @click="ecpay"
  65. variant="flat"
  66. color="primary"
  67. class="px-4"
  68. prepend-icon="add"
  69. :loading="isLoading"
  70. >我要加值</v-btn
  71. >
  72. <div id="pay-form"></div>
  73. </template>
  74. <style lang="scss" scoped>
  75. .payment-item {
  76. .v-btn {
  77. border: 1px solid #a6a6a6;
  78. }
  79. }
  80. </style>