111
jhzh
2025-02-11 9f96348fb4f2d0442303aafefb5e9ca39ea85663
src/page/login/login.vue
@@ -1,33 +1,21 @@
<template>
  <div class="login_page">
    <headers :mess="loginWay" />
    <!-- <div class="img_mess">
      <div class="logo_content animated fadeInRight">
        <img :src="Logo" alt />
      </div>
    </div> -->
    <headers />
    <div class="login_title animated slideInDown">
      <span>{{ $t("登錄賬號") }}</span>
    </div>
    <div class="logins_content">
      <div class="login_title animated slideInDown">
        <span>{{ $t("hj8") }}</span>
      </div>
      <div class="login_forms">
        <div class="top_forms">
          <!-- <div class="user_name">
            <input type="text" :placeholder="placeholder" v-model="userName" />
          </div>
          <div class="password">
            <input type="password"  placeholder="登录密码" v-model="userPassword" @input="handleInput()" />
          </div> -->
          <el-input
            :placeholder="$t('hj9')"
            :size="medium"
            maxlength="11"
            v-model="userName"
            clearable
          >
          </el-input>
          <el-input
            style="margin-top: 0.46rem;"
            style="margin-top: 0.46rem"
            show-password
            :placeholder="$t('hj10')"
            :size="medium"
@@ -36,114 +24,84 @@
          >
          </el-input>
        </div>
        <div class="bottom_btns" :class="btnClass ? 'on' : 'off'">
          <button
            class="top_btn "
            v-on:touchstart="loginIN"
            :class="dengl ? 'animated pulse' : ''"
        <div class="bottom_btns">
          <van-button
            type="info"
            :disabled="!btnClass"
            class="butn"
            @click="loginIN"
            >{{ $t("立即登录") }}</van-button
          >
            <span>{{ $t("hj11") }}</span>
          </button>
          <div style="display:flex;align-items:center;justify-content: space-between;">
            <div class="myzh">
              <span class="mes" style="margin: right 0.2rem;">{{ $t("hj14") }}?</span
              ><span
                @click="$router.push('/register')"
                class="mes"
                style="color: rgb(54,124,248);"
                >{{ $t("hj15") }}</span
              >
          <div class="password-operate" data-v-8cc76a7b="">
            <div class="forget" data-v-8cc76a7b="" @click="getApp()">
              {{ $t("hj12") }}
            </div>
            <div class="mes" @click="getApp()">
              <span>{{ $t("hj12") }}</span>
            <div class="remember" data-v-8cc76a7b="">
              <van-checkbox @change="checkboxChange" v-model="checked">{{
                $t("記住帳戶密碼")
              }}</van-checkbox>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div class="login_bom" v-if="hideshow">
      <!-- <div class="line">
        <div class="left_line"></div>
        <div class="center_line">
          <span>{{ $t('hj13') }}</span>
        </div>
        <div class="right_line"></div>
      <div class="register" data-v-8cc76a7b="">
        {{ $t("還沒賬號?")
        }}<span
          @click="$router.push('/register')"
          data-v-8cc76a7b=""
          style="color: rgb(5, 106, 239)"
          >{{ $t("免費註冊") }}</span
        >
      </div>
      <div class="imgDemo">
        <div class="appImg" @click="getApp()"><img src="@/assets/img/apple.png" /></div>
        <div class="appImg" @click="getApp()"><img src="@/assets/img/google.png" /></div>
        <div class="appImg" @click="getApp()"><img src="@/assets/img/facebook.png" /></div>
      </div> -->
    </div>
    <el-alert
      v-show="alertShow"
      :closable="closable"
      :title="texts"
      :type="eltype"
      center
    ></el-alert>
  </div>
</template>
<script>
import { Toast } from "mint-ui";
import headers from "./components/header.vue";
import Logo from "@/assets/img/LOGO2.png";
import * as api from "@/axios/api";
import { Notify } from "vant";
import { mapActions, mapMutations } from "vuex";
export default {
  name: "newLogin",
  data() {
    return {
      checked: false,
      loginWay: this.$t("hj8"),
      currentLoginMode: "email",
      placeholder: this.$t("hj16"),
      Logo,
      userPassword: "",
      userName: "",
      btnClass: false,
      medium: "medium",
      alertShow: false,
      closable: false,
      eltype: "warning",
      texts: "",
      dengl: false,
      loginBtn: false,
      docmHeight: document.documentElement.clientHeight, //默认屏幕高度
      showHeight: document.documentElement.clientHeight, //实时屏幕高度
      hideshow: true //显示或者隐藏footer
    };
  },
  components: {
    headers
    headers,
  },
  mounted() {
    window.onresize = () => {
      return (() => {
        this.showHeight = document.body.clientHeight;
      })();
    };
  },
  watch: {
    showHeight: function() {
      if (this.docmHeight > this.showHeight) {
        this.hideshow = false;
      } else {
        this.hideshow = true;
      }
    const ret = window.localStorage.getItem("login_admin");
    this.checked = window.localStorage.getItem("login_checked") === "true";
    if (ret && this.checked) {
      this.userPassword = JSON.parse(ret).userPassword;
      this.userName = JSON.parse(ret).phone;
      this.btnClass = true;
    }
  },
  methods: {
    ...mapActions(["setUseInfo"]),
    ...mapMutations(["undataToken"]),
    checkboxChange(e) {
      window.localStorage.setItem("login_checked", e);
    },
    getApp() {
      // Toast('您所在的地区暂未开通此服务')
      //Toast 弹窗大小
      this.texts = this.$t("hj17");
      this.alertShow = true;
      setTimeout(() => {
        this.alertShow = false;
      }, 2000);
      Notify({ type: "warning", message: this.$t("hj17") });
    },
    handleInput() {
      console.log(this.userPassword !== "" && this.userName !== "");
      if (this.userPassword !== "" && this.userName !== "") {
        this.btnClass = true;
      } else {
@@ -151,92 +109,121 @@
      }
    },
    async loginIN() {
      this.dengl = true;
      setTimeout(() => {
        this.dengl = false;
      }, 1000);
      if (this.loginBtn) {
        return;
      }
      this.loginBtn = true;
      let opts = {
        phone: this.userName,
        userPwd: this.userPassword
        userPwd: this.userPassword,
      };
      let data = await api.login(opts);
      console.log("data.status",data.status);
      if (data.status === 0) {
        this.setUseInfo();
        if (this.checked) {
          window.localStorage.setItem(
            "login_admin",
            JSON.stringify({
              phone: this.userName,
              userPassword: this.userPassword,
            })
          );
        } else {
          window.localStorage.setItem("login_admin", "");
        }
        this.$store.state.userInfo.phone = this.userName;
        this.$store.state.userInfo.token = data.data.token;
        this.texts = this.$t("hj36");
        this.eltype = "success";
        this.alertShow = true;
        this.undataToken(data.data.token);
        window.localStorage.setItem("USERTOKEN", data.data.token);
        Notify({ type: "success", message: this.$t("hj36") });
        setTimeout(() => {
          this.alertShow = false;
          this.eltype = "warning";
          this.$router.push("/home");
        }, 1000);
        this.loginBtn = false;
        // window.localStorage.clear()
        window.localStorage.setItem("USERTOKEN", data.data.token);
      } else {
        this.texts = data.msg;
        this.alertShow = true;
        this.loginBtn = false;
        setTimeout(() => {
          this.alertShow = false;
        }, 2000);
        //Toast(data.msg)
        Notify({ type: "warning", message: data.msg });
      }
      if (navigator.vibrate) {
        // 支持
        navigator.vibrate([55]);
      }
    }
    },
  },
  beforeDestroy() {},
  created() {}
  created() {},
};
</script>
<style scoped lang="less">
.login_page {
  position: relative;
  background-color: #fff !important;
.password-operate {
  display: flex;
  justify-content: space-between;
  margin-top: 0.53333rem;
  .forget {
    font-style: normal;
    font-weight: 400;
    font-size: 0.37333rem;
    line-height: 0.53333rem;
    color: #8c9fad;
  }
}
.register {
  font-style: normal;
  font-weight: 400;
  font-size: 0.37333rem;
  color: #8c9fad;
  margin: 0.4rem auto;
  padding: 0.34667rem 0.4rem;
  width: 100%;
  height: 100%;
  overflow: hidden;
  overflow-y: auto;
  height: 6rem;
  text-align: center;
  span {
    color: rgb(5, 106, 239);
  }
}
.login_title {
  font-family: "DINPro", serif;
  font-style: normal;
  font-weight: 500;
  font-size: 0.48rem;
  line-height: 0.66667rem;
  color: #14181f;
  margin-left: 0.53333rem;
}
/deep/ .van-checkbox__label {
  font-style: normal;
  font-weight: 400;
  font-size: 0.37333rem;
  line-height: 0.53333rem;
  color: #8c9fad;
}
/deep/ .van-button__text {
  font-size: 24px;
  font-family: "DINPro";
}
.login_page {
  display: flex;
  flex-direction: column;
  height: 100vh;
}
.logins_content {
  display: flex;
  flex-direction: column;
  flex: 1;
  width: 100%;
  height: 9.7436rem;
  margin-top: 0.4359rem;
  padding: 0 0.4564rem;
  .login_title {
    width: 100%;
    height: 2.0513rem;
    display: flex;
    align-items: center;
    font-size: 0.7023rem;
    color: #000;
    font-weight: 600 !important;
    > span {
      font-weight: 600 !important;
    }
  }
  background: #fff;
  // padding: 0 0.4564rem;
  .login_forms {
    width: 100%;
    height: auto;
    margin-top: 0.35rem;
    border-top-left-radius: 0.26667rem;
    border-top-right-radius: 0.26667rem;
    padding: 0.34667rem 0.4rem;
    flex: 1;
    display: flex;
    flex-direction: column;
    .top_forms {
      width: 100%;
@@ -248,7 +235,7 @@
      .user_name,
      .password {
        width: 100%;
        height: 35%;
        height: 50px;
        background: rgb(246, 246, 247);
        // background: #1e1e1e;
        border-radius: 0.3564rem;
@@ -264,24 +251,30 @@
    /deep/.el-input__inner {
      width: 100%;
      height: 1.45rem !important;
      height: 70px;
      background-color: rgb(246, 246, 247) !important;
      // background: #1e1e1e;
      border-radius: 0.3564rem;
      border-radius: 8px;
      font-size: 0.45rem !important;
      border: none;
    }
    .bottom_btns {
      width: 100%;
      height: 3.3333rem;
      margin-top: 0.8528rem;
      // margin-top: 0.8528rem;
      .butn {
        width: 100%;
        margin-top: 40px;
        height: 60px;
        border-radius: 8px;
      }
      .top_btn {
      border: none;
        border: none;
        width: 100%;
        height: 1.25rem;
        border-radius: 0.3564rem;
        background: rgb(154, 197, 250);
        border-radius: 8px;
        background: #0066ed;
        color: #fff;
        display: flex;
        align-items: center;