PhoneVerifyForDD.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <script lang="ts" setup>
  2. import { DOMAIN } from "@/constants/constants";
  3. import { httpApp } from "@/plugins/axiosApp";
  4. import { store } from "@/store/store";
  5. import { onMounted, onUnmounted } from "vue";
  6. import { showLogout } from "@/utils/utils";
  7. let phoneModal = $ref(false);
  8. let code = $ref("");
  9. let interval = $ref(-1);
  10. let remainTime = $ref(0);
  11. let btnText = "发送验证码";
  12. onMounted(() => {
  13. if (
  14. ["cugr.ecs.qmth.com.cn", "test.cugr.qmth.com.cn"].includes(DOMAIN) &&
  15. !localStorage.getItem("phoneVerified")
  16. ) {
  17. phoneModal = true;
  18. }
  19. });
  20. onUnmounted(() => clearInterval(interval));
  21. async function getCode() {
  22. logger({
  23. cnl: ["local", "server"],
  24. pgn: "PhoneVerifyForDD",
  25. act: "发送验证码按钮",
  26. });
  27. try {
  28. await httpApp.post("/api/ecs_oe_student/sms/sendSmsCodeToStudent");
  29. } catch (error) {
  30. $message.error("发送验证码失败,请重试!", {
  31. duration: 15,
  32. closable: true,
  33. });
  34. return;
  35. }
  36. remainTime = 90;
  37. interval = window.setInterval(() => {
  38. if (remainTime > 0) {
  39. remainTime--;
  40. } else {
  41. clearInterval(interval);
  42. }
  43. }, 1000);
  44. }
  45. async function verify() {
  46. if (code.length < 4) {
  47. $message.warning("请输入正确的验证码");
  48. return;
  49. }
  50. logger({
  51. cnl: ["local", "server"],
  52. pgn: "PhoneVerifyForDD",
  53. act: "点击验证按钮",
  54. });
  55. const { phoneNumber } = store.user;
  56. try {
  57. await httpApp.post(
  58. `/api/ecs_oe_student/sms/checkSmsCode?phoneNumber=${phoneNumber}&code=${code}`,
  59. null,
  60. { setGlobalMask: true }
  61. );
  62. phoneModal = false;
  63. localStorage.setItem("phoneVerified", "true");
  64. } catch (error) {
  65. $message.error("验证手机号接口失败,请重试!", {
  66. duration: 15,
  67. closable: true,
  68. });
  69. logger({
  70. cnl: ["local", "server"],
  71. pgn: "PhoneVerifyForDD",
  72. dtl: "验证手机号接口失败,请重试!",
  73. });
  74. }
  75. }
  76. </script>
  77. <template>
  78. <!-- 手机号验证。For 地质大学 -->
  79. <n-modal
  80. :show="phoneModal"
  81. preset="dialog"
  82. title="验证手机号"
  83. type="info"
  84. :closable="false"
  85. negativeText="退出系统"
  86. positiveText="确认"
  87. :zIndex="2000"
  88. @positiveClick="verify"
  89. @negativeClick="() => showLogout('未确认手机号')"
  90. >
  91. <div class="tw-flex">
  92. <span class="tw-min-w-max tw-mr-2">预留手机号:</span>
  93. <span>{{ store.user.phoneNumber }}</span>
  94. </div>
  95. <div class="tw-flex tw-items-center tw-mt-2">
  96. <div class="tw-min-w-max tw-mr-2">输入验证码:</div>
  97. <n-input
  98. v-model:value="code"
  99. maxlength="4"
  100. placeholder="验证码"
  101. type="text"
  102. class="tw-mr-2"
  103. />
  104. <n-button type="success" :disabled="remainTime > 0" @click="getCode">
  105. {{ btnText }}{{ remainTime > 0 ? "(" + remainTime + "秒)" : "" }}
  106. </n-button>
  107. </div>
  108. </n-modal>
  109. </template>