login.vue 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <template>
  2. <view class="h-screen w-screen bg-register-bright bg-no-repeat bg-cover fx-col justify-center">
  3. <view class="pl-80">
  4. <uv-text size="28" text="您好,欢迎使用"/>
  5. <text class="font-[FZBangSKJW] text-[32px] text-primary-deep">单招一卡通</text>
  6. </view>
  7. <view class="mx-40 mt-60 px-40 py-50 shadow rounded-xl">
  8. <uv-form ref="form" :model="model" :rules="rules" label-position="top" error-type="toast">
  9. <mx-login-form-item v-model="model.username" prop="username" icon="account" label="账号"
  10. placeholder="请输入手机号/卡号"/>
  11. <mx-login-form-item v-model="model.password" :type="isPwdMode?'password':''" prop="password" icon="lock"
  12. label="密码">
  13. <template #suffix>
  14. <uv-icon :size="isPwdMode?16:18" :name="isPwdMode?'eye':'eye-off'"
  15. @click="isPwdMode=!isPwdMode"/>
  16. </template>
  17. </mx-login-form-item>
  18. </uv-form>
  19. <view class="mt-30 fx-row fx-bet-cen">
  20. <text class="text-primary text-lg" @click="goRegister">账号注册</text>
  21. <text class="text-primary text-lg" @click="goForgetPwd">忘记密码?</text>
  22. </view>
  23. </view>
  24. <view class="mt-80 px-80">
  25. <uv-button :loading="loading" color="var(--primary-deep-color)" type="primary" size="large" shape="circle"
  26. text="登陆" @click="handleLogin"/>
  27. </view>
  28. <agreement-view v-model="isAgree" class="mt-80"/>
  29. </view>
  30. </template>
  31. <script setup>
  32. import {ref} from 'vue'
  33. import {useUserStore} from "@/hooks/useUserStore";
  34. import {useTransfer} from "@/hooks/useTransfer";
  35. import {toast} from "@/uni_modules/uv-ui-tools/libs/function";
  36. import mxConst from "@/common/mxConst";
  37. import AgreementView from "@/pages/login/components/agreement-view.vue";
  38. import {createLoginModelRules} from "@/pages/login/components/hooks/defineFormModels";
  39. import {useProvideFormData} from "@/pages/login/components/hooks/useFormDataInjection";
  40. // data
  41. const {Login} = useUserStore()
  42. const {transferTo, relaunch} = useTransfer()
  43. const isAgree = ref(false)
  44. const isPwdMode = ref(true)
  45. const loading = ref(false)
  46. // form related.
  47. const [m, r, modelToCommit] = createLoginModelRules()
  48. const [model, rules] = useProvideFormData(m, r)
  49. const form = ref(null)
  50. // methods
  51. const handleLogin = async () => {
  52. await form.value.validate()
  53. if (!isAgree.value) return toast('请先勾选同意条款')
  54. if (loading.value) return
  55. loading.value = true
  56. const commit = modelToCommit()
  57. Login(commit)
  58. .then(res => relaunch())
  59. .finally(() => loading.value = false)
  60. }
  61. const goForgetPwd = () => {
  62. transferTo(mxConst.routes.forgetPwd)
  63. }
  64. const goRegister = () => {
  65. transferTo(mxConst.routes.register)
  66. }
  67. </script>
  68. <style lang="scss" scoped>
  69. ::v-deep .uv-button__loading-text,
  70. ::v-deep .uv-button__text {
  71. font-size: 22px !important;
  72. letter-spacing: 8px;
  73. }
  74. </style>