login.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <template>
  2. <view class="login">
  3. <view class="login-box">
  4. <view class="login-box-title">
  5. <view>智慧停车</view>
  6. <view>运营数据系统</view>
  7. </view>
  8. <view class="login-box-form">
  9. <view class="login-box-form-box">
  10. <u--form :model="form" :rules="rules" ref="uForm">
  11. <u-form-item label prop="phoneNumber">
  12. <u--input
  13. v-model="form.phoneNumber"
  14. :prefixIcon="require('@/static/icons/job-number-icon.svg')"
  15. placeholder="请输入手机号"
  16. :maxlength="11"
  17. type="number"
  18. border="none"
  19. class="custom-input"
  20. :prefixIconStyle="{ marginRight: '10px' }"
  21. fontSize="14px"
  22. color="#ffffff"
  23. placeholderStyle="color: #fff"
  24. />
  25. </u-form-item>
  26. <u-form-item label prop="password">
  27. <u--input
  28. v-model="form.password"
  29. :prefixIcon="require('@/static/icons/password-icon.svg')"
  30. placeholder="请输入密码"
  31. :password="true"
  32. border="none"
  33. class="custom-input"
  34. :prefixIconStyle="{ marginRight: '10px' }"
  35. fontSize="14px"
  36. color="#ffffff"
  37. placeholderStyle="color: #fff"
  38. />
  39. </u-form-item>
  40. </u--form>
  41. </view>
  42. <view class="login-box-form-btn">
  43. <u-button
  44. class="login-btn"
  45. type="primary"
  46. text="登录"
  47. :loading="loading"
  48. @click="submitLogin"
  49. ></u-button>
  50. </view>
  51. </view>
  52. </view>
  53. <u-toast ref="uToast"></u-toast>
  54. </view>
  55. </template>
  56. <script>
  57. export default {
  58. data() {
  59. return {
  60. form: {
  61. phoneNumber: '',
  62. password: ''
  63. },
  64. loading: false,
  65. rules: {
  66. phoneNumber: {
  67. required: true,
  68. message: '请输入手机号',
  69. trigger: ['change', 'blur']
  70. },
  71. password: {
  72. required: true,
  73. message: '请输入密码',
  74. trigger: ['change', 'blur']
  75. }
  76. }
  77. };
  78. },
  79. methods: {
  80. /**
  81. * 登录提交
  82. */
  83. submitLogin() {
  84. this.$refs.uForm
  85. .validate()
  86. .then((res) => {
  87. this.loading = true;
  88. const form = {
  89. ...this.form
  90. };
  91. uni.$u.api
  92. .loginApi({
  93. telephone: form.phoneNumber,
  94. loginPwd: form.password
  95. })
  96. .then((res) => {
  97. if (res.code === 200) {
  98. uni.$u.vuex('vuex_token', res.data.token);
  99. this.$u.vuex('vuex_user', res.data);
  100. this.$u.vuex('vuex_isLogin', true);
  101. this.$refs.uToast.show({
  102. loading: true,
  103. message: '登录成功!',
  104. type: 'success',
  105. complete() {
  106. uni.$u.route({
  107. url: 'pages/index/index',
  108. type: 'redirect'
  109. });
  110. }
  111. });
  112. } else {
  113. this.$refs.uToast.show({
  114. loading: true,
  115. message: res.msg || '登录失败',
  116. type: 'error'
  117. });
  118. }
  119. })
  120. .catch((err) => {
  121. this.loading = false;
  122. });
  123. })
  124. .catch((errors) => {
  125. uni.$u.toast(errors[0].message || '必填项不能为空!');
  126. });
  127. }
  128. }
  129. };
  130. </script>
  131. <style lang="scss">
  132. page {
  133. height: 100vh;
  134. background: linear-gradient(183deg, #2d82fb 0%, #1558f8 100%);
  135. }
  136. </style>
  137. <style lang="scss" scoped>
  138. @import './login.scss';
  139. </style>