activate-steps-form.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <template>
  2. <uv-form ref="form" :model="model" :rules="rules">
  3. <template v-if="step==0">
  4. <card-pwd-fields/>
  5. </template>
  6. <template v-else-if="step==1">
  7. <province-field/>
  8. <gaokao-year-field/>
  9. <type-major-fields/>
  10. <school-info-fields/>
  11. </template>
  12. <template v-else>
  13. <view class="fx-1 fx-col items-center">
  14. <uv-icon name="checkmark-circle" color="success" size="110" class="my-40"/>
  15. <view class="text-primary mb-100">绑卡成功!</view>
  16. </view>
  17. </template>
  18. </uv-form>
  19. </template>
  20. <script setup>
  21. import {ref} from 'vue'
  22. import {useUserStore} from "@/hooks/useUserStore";
  23. import {useTransfer} from "@/hooks/useTransfer";
  24. import {bindCard} from "@/api/login";
  25. import {getFrontLocationsList} from "@/api/webApi/resources";
  26. import {createActivateCardModelRules} from "@/pages/login/components/hooks/defineFormModels";
  27. import {useInjectActivateSteps} from "@/pages/login/components/hooks/useActivateStepsInjection";
  28. import {useProvideFormRef} from "@/pages/login/components/hooks/useFormRefInjection";
  29. import {useProvideFormData} from "@/pages/login/components/hooks/useFormDataInjection";
  30. import CardPwdFields from "@/pages/login/components/register-fields/card-pwd-fields.vue";
  31. import {useProvideProvince} from "@/pages/login/components/hooks/useProvinceInjection";
  32. import ProvinceField from "@/pages/login/components/register-fields/province-field.vue";
  33. import GaokaoYearField from "@/pages/login/components/register-fields/gaokao-year-field.vue";
  34. import TypeMajorFields from "@/pages/login/components/register-fields/type-major-fields.vue";
  35. import SchoolInfoFields from "@/pages/login/components/register-fields/school-info-fields.vue";
  36. const form = ref(null)
  37. const provinceOptions = ref([])
  38. const {relaunch} = useTransfer()
  39. const {GetInfo} = useUserStore()
  40. const {step, loading} = useInjectActivateSteps()
  41. const [m, r, modelToValidate, modelToBindCard] = createActivateCardModelRules()
  42. const [model, rules] = useProvideFormData(m, r)
  43. useProvideFormRef(form)
  44. useProvideProvince(provinceOptions)
  45. // methods
  46. const next = async () => {
  47. await form.value.validate()
  48. if (loading.value) return
  49. loading.value = true
  50. try {
  51. switch (step.value) {
  52. case 0:
  53. await handleValidateCard()
  54. break
  55. case 1:
  56. await handleBindCard()
  57. break
  58. case 2:
  59. relaunch()
  60. break
  61. default:
  62. console.warn('Unexpected step of ' + step.value)
  63. }
  64. } finally {
  65. loading.value = false
  66. }
  67. }
  68. const handleValidateCard = async () => {
  69. const commit = modelToValidate()
  70. const resLoc = await getFrontLocationsList({level: 1, ...commit})
  71. provinceOptions.value = resLoc.data.map(p => p.sname)
  72. // card valid, go next step.
  73. step.value = 1
  74. }
  75. const handleBindCard = async () => {
  76. const commit = modelToBindCard()
  77. await bindCard(commit)
  78. await GetInfo()
  79. // card bind success, go next step
  80. step.value = 2
  81. }
  82. // expose
  83. defineExpose({next})
  84. </script>
  85. <style scoped>
  86. </style>