bind.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <template>
  2. <CommonRoot>
  3. <FlexCol :gap="20" :padding="30">
  4. <DynamicForm
  5. ref="registerFormRef"
  6. :model="registerFormModel"
  7. :options="registerFormDefine"
  8. />
  9. <Height :height="20" />
  10. <Button type="primary" @click="registerSubmit" text="立即绑定" :loading="registerFormLoading" />
  11. <Button @click="cancel" text="稍后再说" :loading="registerFormLoading" />
  12. </FlexCol>
  13. </CommonRoot>
  14. </template>
  15. <script setup lang="ts">
  16. import { ref } from 'vue';
  17. import { useAuthStore } from '@/store/auth';
  18. import { useAppInit } from '@/common/composeabe/AppInit';
  19. import { toast } from '@/components/dialog/CommonRoot';
  20. import { showError } from '@/common/composeabe/ErrorDisplay';
  21. import { navTo } from '@/components/utils/PageAction';
  22. import type { IDynamicFormOptions, IDynamicFormRef } from '@/components/dynamic';
  23. import type { FieldProps } from '@/components/form/Field.vue';
  24. import type { FormProps } from '@/components/form/Form.vue';
  25. import { UserApi } from '@/api/auth/UserApi';
  26. import Button from '@/components/basic/Button.vue';
  27. import FlexCol from '@/components/layout/FlexCol.vue';
  28. import Height from '@/components/layout/space/Height.vue';
  29. import CommonRoot from '@/components/dialog/CommonRoot.vue';
  30. import DynamicForm from '@/components/dynamic/DynamicForm.vue';
  31. import VillageApi from '@/api/inhert/VillageApi';
  32. /**
  33. * 微信绑定志愿者账号页面
  34. */
  35. const authStore = useAuthStore();
  36. const { init } = useAppInit();
  37. const registerFormLoading = ref(false);
  38. const registerFormRef = ref<IDynamicFormRef>();
  39. const registerFormModel = ref({
  40. username: '',
  41. password: '',
  42. });
  43. const registerFormDefine : IDynamicFormOptions = {
  44. formItems: [
  45. {
  46. label: '登录账号', name: 'username', type: 'text',
  47. additionalProps: {
  48. placeholder: '请输入用户名',
  49. },
  50. rules: [{ required: true, message: '请输入用户名' }],
  51. },
  52. {
  53. label: '密码',
  54. name: 'password',
  55. type: 'text',
  56. additionalProps: {
  57. placeholder: '请输入密码',
  58. type: 'password',
  59. } as FieldProps,
  60. rules: [{ required: true, message: '请输入密码' }],
  61. },
  62. ],
  63. formAdditionaProps: {
  64. labelWidth: '160rpx',
  65. labelAlign: 'right',
  66. innerStyle: {
  67. radius: '10rpx',
  68. },
  69. } as Omit<FormProps, 'model'>,
  70. }
  71. async function registerSubmit() {
  72. if (!registerFormRef.value || !registerFormModel.value)
  73. return;
  74. try {
  75. await registerFormRef.value.validate();
  76. } catch (e) {
  77. toast({ content: '有必填项未填写,请检查' });
  78. return;
  79. }
  80. try {
  81. registerFormLoading.value = true;
  82. const loginRes = await VillageApi.bindVolunteer({
  83. account: registerFormModel.value.username,
  84. password: registerFormModel.value.password,
  85. });
  86. await authStore.loginResultHandle(loginRes, UserApi.LOGIN_TYPE_USER);
  87. toast({ content: '注册成功' });
  88. setTimeout(() => navTo('/pages/index'), 800);
  89. } catch (e) {
  90. showError(e);
  91. } finally {
  92. registerFormLoading.value = false;
  93. }
  94. await init();
  95. }
  96. function cancel() {
  97. navTo('/pages/index');
  98. }
  99. </script>