|
@@ -0,0 +1,284 @@
|
|
|
+<template>
|
|
|
+ <view class="zx-page-linear login-page">
|
|
|
+ <view class="title-wrap">
|
|
|
+ <view class="title">{{ $t('欢迎来到智寻出行') }}</view>
|
|
|
+ <view class="sub-title">{{ $t('邮箱密码登录') }}</view>
|
|
|
+ </view>
|
|
|
+ <view class="main">
|
|
|
+ <ZxInput
|
|
|
+ v-model="form.email"
|
|
|
+ :hightlight="checkShakeObj.email"
|
|
|
+ :placeholder="$t('请输入邮箱账号')"
|
|
|
+ @focus="handleFocusOrBlur('email')"
|
|
|
+ @blur="handleFocusOrBlur('email', false)"
|
|
|
+ />
|
|
|
+ <ZxInput
|
|
|
+ v-model="form.passwd"
|
|
|
+ :type="passwordType"
|
|
|
+ :placeholder="$t('请输入密码')"
|
|
|
+ :showEyeIcon="true"
|
|
|
+ @focus="handleFocusOrBlur('password')"
|
|
|
+ @blur="handleFocusOrBlur('password', false)"
|
|
|
+ @update:type="passwordType = $event"
|
|
|
+ />
|
|
|
+ <view
|
|
|
+ :class="['agreement-row', checkShakeObj.agreemen && 'shake']"
|
|
|
+ @tap="isCheckAgreement = !isCheckAgreement"
|
|
|
+ >
|
|
|
+ <view :class="['checkbox', isCheckAgreement && 'is-checked']"/>
|
|
|
+ {{ $t('已阅读并同意') }}
|
|
|
+ <text class="text" @tap.stop="handleAgreementLink('270')">《{{$t('用户协议')}}》</text>
|
|
|
+ {{ $t('和') }}<text class="text" @tap.stop="handleAgreementLink('102')">《{{$t('隐私政策')}}》</text>
|
|
|
+ </view>
|
|
|
+ <view
|
|
|
+ :class="['zx-form-btn', isSubmt && 'is-submit']"
|
|
|
+ @tap="loginHandle"
|
|
|
+ >
|
|
|
+ {{ $t('登录') }}
|
|
|
+ </view>
|
|
|
+ <view class="register-row">
|
|
|
+ <view class="forget" @tap="routerLink('/pages/loginRegister/forgetPassword')">
|
|
|
+ {{ $t('忘记密码') }}
|
|
|
+ </view>
|
|
|
+ <view class="split-line"/>
|
|
|
+ <view class="register" @tap="routerLink('/pages/loginRegister/register')">
|
|
|
+ {{ $t('没有账号 立即注册') }}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="other-type-login">
|
|
|
+ <view class="title">{{ $t('其他方式登录') }}</view>
|
|
|
+ <view class="types">
|
|
|
+ <image :src="QINIU_URL + 'Fg14B6UDuR6pLD1uR10mBE_y2vbf'" class="icon" />
|
|
|
+ <image :src="QINIU_URL + 'FlZRWQZ301H8rP2_LwUdjnSUTQop'" class="icon" />
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <script>
|
|
|
+ import { QINIU_URL, emailRegex } from '@/common/constant'
|
|
|
+ import ZxInput from './components/ZxInput.vue'
|
|
|
+ const config = require('@/common/config.js');
|
|
|
+ const http = require('@/common/http.js');
|
|
|
+ const common = require('@/common/common.js');
|
|
|
+ const storage = require('@/common/storage.js');
|
|
|
+ export default {
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ QINIU_URL,
|
|
|
+ passwordType: 'password',
|
|
|
+ emailFocus: false,
|
|
|
+ passwordFocus: false,
|
|
|
+ isCheckAgreement: false,
|
|
|
+ checkShakeObj: {
|
|
|
+ email: false,
|
|
|
+ password: false,
|
|
|
+ agreemen: false
|
|
|
+ },
|
|
|
+ form: {
|
|
|
+ email: '',
|
|
|
+ passwd: ''
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ components: {
|
|
|
+ ZxInput
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ isSubmt({ form }) {
|
|
|
+ return form.email && form.passwd
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ handleFocusOrBlur(val, flag = true) {
|
|
|
+ this[`${val}Focus`] = flag
|
|
|
+ },
|
|
|
+ clearInput(val) {
|
|
|
+ this.$set(this.form, val, '')
|
|
|
+ },
|
|
|
+ eyeTypeChange() {
|
|
|
+ this.passwordType = this.passwordType === 'text' ? 'password' : 'text';
|
|
|
+ },
|
|
|
+ routerLink(url) {
|
|
|
+ uni.navigateTo({ url })
|
|
|
+ },
|
|
|
+ handleAgreementLink(id) {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: `/pages/contract/contract?contract_id=${id}`
|
|
|
+ })
|
|
|
+ },
|
|
|
+ _applyCheck(field, message) {
|
|
|
+ this.checkShakeObj[field] = true;
|
|
|
+ setTimeout(() => {
|
|
|
+ this.checkShakeObj[field] = false;
|
|
|
+ }, 500)
|
|
|
+ uni.showToast({ title: message, icon: 'none' })
|
|
|
+ },
|
|
|
+ loginHandle() {
|
|
|
+ if (!this.isCheckAgreement) {
|
|
|
+ this._applyCheck('agreemen', this.$t('请勾选用户协议和隐私政策'))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (!emailRegex.test(this.form.email)) {
|
|
|
+ this._applyCheck('email', this.$t('请输入有效的邮箱地址'))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ http.postApi(config.API_LOGIN, this.form, res => {
|
|
|
+ if (res.succeed) {
|
|
|
+ //
|
|
|
+ const { baseInfo } = res.body.data
|
|
|
+ storage.setUserInfoData(baseInfo)
|
|
|
+ storage.setUserToken(baseInfo.token)
|
|
|
+ common.simpleToast('登录成功')
|
|
|
+ uni.reLaunch({
|
|
|
+ url: '/pages/index/index',
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ </script>
|
|
|
+
|
|
|
+ <style lang="scss" scoped>
|
|
|
+ @import "@/libs/css/layout.scss";
|
|
|
+ .login-page {
|
|
|
+ padding: 94rpx 40rpx 64rpx;
|
|
|
+ box-sizing: border-box;
|
|
|
+
|
|
|
+ .title-wrap {
|
|
|
+ .title {
|
|
|
+ font-family: PingFangSC, PingFang SC;
|
|
|
+ font-weight: 600;
|
|
|
+ font-size: 56rpx;
|
|
|
+ color: #060809;
|
|
|
+ line-height: 56rpx;
|
|
|
+ text-align: left;
|
|
|
+ font-style: normal;
|
|
|
+ margin-bottom: 24rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .sub-title {
|
|
|
+ font-family: PingFangSC, PingFang SC;
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #060809;
|
|
|
+ line-height: 28rpx;
|
|
|
+ text-align: left;
|
|
|
+ font-style: normal;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .main {
|
|
|
+ margin: 64rpx 0 0 0;
|
|
|
+ .agreement-row {
|
|
|
+ margin: 2rpx 0 64rpx;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ font-family: PingFangSC, PingFang SC;
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #060809;
|
|
|
+ &.shake {
|
|
|
+ animation: shake 0.2s ease-in-out 0s 6;
|
|
|
+ }
|
|
|
+
|
|
|
+ .checkbox {
|
|
|
+ width: 32rpx;
|
|
|
+ height: 32rpx;
|
|
|
+ margin-right: 16rpx;
|
|
|
+ background: url('https://qiniu.bms16.com/Fh5aqDCxGKxEEVfxIQD9u6Ym9OLk');
|
|
|
+ background-size: 100%;
|
|
|
+ &.is-checked {
|
|
|
+ background: url('https://qiniu.bms16.com/FhAi08ilxiBqUhFezVF9H9ff2VMm');
|
|
|
+ background-size: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .text {
|
|
|
+ font-family: PingFangSC, PingFang SC;
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #0A59F7;
|
|
|
+ &:active {
|
|
|
+ opacity: .6;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .register-row {
|
|
|
+ margin: 32rpx 80rpx 0;
|
|
|
+ font-family: PingFangSC, PingFang SC;
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #0A59F7;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+
|
|
|
+ .split-line {
|
|
|
+ width: 2rpx;
|
|
|
+ height: 28rpx;
|
|
|
+ background: #CED3DE;
|
|
|
+ margin: 0 30rpx 0 32rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .forget {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+
|
|
|
+ &::after {
|
|
|
+ content: "";
|
|
|
+ width: 28rpx;
|
|
|
+ height: 28rpx;
|
|
|
+ background: url('https://qiniu.bms16.com/FrQ-eKUnkECvMImnNgd4w3p5-NLd');
|
|
|
+ background-size: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .register {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+
|
|
|
+ &::after {
|
|
|
+ content: "";
|
|
|
+ width: 28rpx;
|
|
|
+ height: 28rpx;
|
|
|
+ background: url('https://qiniu.bms16.com/FtGhNkwKlhR7hOZsaj0gmRl9KjPx');
|
|
|
+ background-size: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .other-type-login {
|
|
|
+ position: absolute;
|
|
|
+ bottom: 64rpx;
|
|
|
+ left: 0;
|
|
|
+ right: 0;
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ flex-direction: column;
|
|
|
+ .title {
|
|
|
+ font-family: PingFangSC, PingFang SC;
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #060809;
|
|
|
+ margin-bottom: 40rpx;
|
|
|
+ }
|
|
|
+ .types {
|
|
|
+ display: flex;
|
|
|
+ .icon {
|
|
|
+ width: 96rpx;
|
|
|
+ height: 96rpx;
|
|
|
+ &:nth-child(1) {
|
|
|
+ margin-right: 146rpx;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ </style>
|
|
|
+
|