register.uvue 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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="phone" required :pt="{
  49. className: '!mb-4'
  50. }">
  51. <cl-input clearable class="" :pt="{ className: '!h-[40px] !rounded-xxl !px-4 !w-[80vw]' }" v-model="form.phone"
  52. placeholder="请输入验证码手机号"></cl-input>
  53. </cl-form-item>
  54. <cl-form-item prop="code" required :pt="{
  55. className: '!mb-4'
  56. }" :rules="[
  57. {
  58. required: true,
  59. message: '验证码不能为空'
  60. }
  61. ] as ClFormRule[]
  62. ">
  63. <cl-input :pt="{ className: '!h-[40px] !rounded-xxl !px-4 !w-[80vw]' }" v-model="form.code" :clearable="false"
  64. type="number" placeholder="请输入验证码(必填)">
  65. </cl-input>
  66. <view class="absolute right-0">
  67. <sms-btn :ref="refs.set('smsBtn')" :phone="form.phone"></sms-btn>
  68. </view>
  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>