register.uvue 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <template>
  2. <view class=" w-[80vw]">
  3. <cl-form-item prop="username" required :pt="{
  4. className: '!mb-4'
  5. }" :rules="[
  6. {
  7. required: true,
  8. message: '手机号不能为空'
  9. }
  10. ] as ClFormRule[]
  11. ">
  12. <cl-input clearable class="" :pt="{ className: '!h-[40px] !rounded-xxl !px-4 !w-[80vw]' }" v-model="form.username"
  13. placeholder="请输入手机号(必填)"></cl-input>
  14. </cl-form-item>
  15. <cl-form-item prop="password" required :pt="{
  16. className: '!mb-4'
  17. }" :rules="[
  18. {
  19. required: true,
  20. message: '密码不能为空'
  21. }, {
  22. min: 6,
  23. max: 12,
  24. message: '密码长度必须在6到16位之间'
  25. }
  26. ] as ClFormRule[]
  27. ">
  28. <cl-input :pt="{ className: '!h-[40px] !rounded-xxl !px-4 !w-[80vw]' }" clearable v-model="form.password" password
  29. placeholder="请输入密码(必填)">
  30. </cl-input>
  31. </cl-form-item>
  32. <cl-form-item prop="confirmPassword" required :pt="{
  33. className: '!mb-4'
  34. }" :rules="[
  35. {
  36. required: true,
  37. message: '确认密码不能为空'
  38. }, {
  39. validator: (val: string) => val === form.password,
  40. message: '两次密码输入不一致'
  41. }
  42. ] as ClFormRule[]
  43. ">
  44. <cl-input :pt="{ className: '!h-[40px] !rounded-xxl !px-4 !w-[80vw]' }" clearable v-model="form.confirmPassword"
  45. password placeholder="请确认密码(必填)">
  46. </cl-input>
  47. </cl-form-item>
  48. <cl-form-item prop="code" required :pt="{
  49. className: '!mb-4'
  50. }" :rules="[
  51. {
  52. required: true,
  53. message: '验证码不能为空'
  54. }
  55. ] as ClFormRule[]
  56. ">
  57. <cl-input :pt="{ className: '!h-[40px] !rounded-xxl !px-4 !w-[80vw]' }" v-model="form.code" :clearable="false"
  58. type="number" placeholder="请输入验证码(必填)">
  59. </cl-input>
  60. <view class="absolute right-0">
  61. <sms-btn :ref="refs.set('smsBtn')" :phone="form.username"></sms-btn>
  62. </view>
  63. </cl-form-item>
  64. <cl-form-item :pt="{
  65. className: '!mb-4'
  66. }" prop="nickName">
  67. <cl-input clearable :pt="{ className: '!h-[40px] !rounded-xxl !px-4 !w-[80vw]' }" v-model="form.nickName"
  68. placeholder="请输入昵称(可选)"></cl-input>
  69. </cl-form-item>
  70. </view>
  71. </template>
  72. <script setup lang="ts">
  73. import { type PropType } from "vue";
  74. import type { LoginForm } from "./types";
  75. import { useRefs, } from "@/.cool";
  76. import SmsBtn from "./sms-btn.uvue";
  77. const props = defineProps({
  78. form: {
  79. type: Object as PropType<LoginForm>,
  80. default: () => ({})
  81. }
  82. });
  83. const emit = defineEmits(["success"]);
  84. const refs = useRefs();
  85. </script>