login.uvue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <template>
  2. <cl-page>
  3. <Back />
  4. <img src="/static/home/1.jpg" alt="" class="w-full h-full object-cover">
  5. <view class="title">
  6. 少儿物理启蒙
  7. </view>
  8. <view class="group">
  9. <cl-image src="/static/home/8.png" width="150px" height="150px" mode="heightFix" />
  10. <view class="w-[40vw]">
  11. <cl-tabs v-model="val" :list="list" :form="formData" @change="tabsChange"></cl-tabs>
  12. <cl-form v-model="formData" :pt="{ className: 'mt-1' }">
  13. <view v-if="val === 'quickly_login'">
  14. <phone :form="formData" />
  15. </view>
  16. <view v-else>
  17. <password :form="formData" />
  18. </view>
  19. <cl-button :pt="{ className: '!h-[45px] !rounded-full w-[200px] mx-auto' }" :loading="loading" @tap="toLogin">
  20. 登录
  21. </cl-button>
  22. </cl-form>
  23. </view>
  24. </view>
  25. </cl-page>
  26. </template>
  27. <script lang="ts" setup>
  28. import Back from '@/components/back.uvue'
  29. import type { LoginForm } from "./components/types";
  30. import phone from './components/phone.uvue';
  31. import password from './components/password.uvue';
  32. import { ref } from 'vue'
  33. import type { ClTabsItem } from "@/uni_modules/cool-ui";
  34. import { encryptPassword, user, router } from '@/.cool';
  35. import { loginApi } from "@/services/user";
  36. const val = ref('quickly_login')
  37. const list: ClTabsItem[] = [
  38. {
  39. label: '验证码登录',
  40. value: 'quickly_login'
  41. },
  42. {
  43. label: '密码登录',
  44. value: 'password'
  45. },
  46. ]
  47. const formData = ref<LoginForm>({
  48. username: 'xiongchao',
  49. password: '123456',
  50. randomStr: 0,
  51. grant_type: 'quickly_login',
  52. scope: 'server',
  53. loginType: 99,
  54. code: ''
  55. })
  56. const loading = ref(false)
  57. function tabsChange() {
  58. if (val.value === 'quickly_login') {
  59. formData.value.code = ''
  60. formData.value.loginType = 99
  61. formData.value.grant_type = 'quickly_login'
  62. formData.value.password = ''
  63. } else {
  64. formData.value.grant_type = 'password'
  65. formData.value.password = ''
  66. formData.value.loginType = 1
  67. formData.value.code = ''
  68. }
  69. }
  70. function toLogin() {
  71. // loading.value = true
  72. console.log(formData.value);
  73. loginApi({
  74. ...formData.value,
  75. password: formData.value.password && encryptPassword(formData.value.password),
  76. }).then(res => {
  77. user.setToken(res)
  78. uni.showToast({
  79. title: '登录成功',
  80. icon: 'success'
  81. })
  82. router.nextLogin();
  83. })
  84. }
  85. </script>
  86. <style lang="scss" scoped>
  87. .title {
  88. position: absolute;
  89. top: 6%;
  90. left: 50%;
  91. transform: translateX(-50%);
  92. //设置字间距
  93. letter-spacing: 0.1em;
  94. @apply text-white text-5xl font-bold;
  95. }
  96. .group {
  97. @apply absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 bg-white px-4 py-2 rounded-xl;
  98. display: flex;
  99. align-items: center;
  100. flex-direction: row;
  101. height: 60vh;
  102. }
  103. </style>