From 732c30b33f782c2d2ebb62eacda2fb7a453a7ecd Mon Sep 17 00:00:00 2001
From: admin <344137771@qq.com>
Date: Sat, 31 Jan 2026 11:01:45 +0800
Subject: [PATCH] 1

---
 src/page/login/login.vue |  418 +++++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 274 insertions(+), 144 deletions(-)

diff --git a/src/page/login/login.vue b/src/page/login/login.vue
index c5f74ac..9043283 100644
--- a/src/page/login/login.vue
+++ b/src/page/login/login.vue
@@ -1,193 +1,301 @@
 <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 /> -->
+    <tab-head :leftShow="false" :rightShow="false">
+      <van-popover
+        v-model="languageShow"
+        trigger="click"
+        :actions="actions"
+        @select="onSelect"
+        placement="bottom-end"
+      >
+        <template #reference>
+          <div class="multilingual">
+            <img src="../../assets/img/language.svg" alt="" />
+          </div>
+        </template>
+      </van-popover>
+    </tab-head>
+
+    <img src="../../assets/img/logo.png" alt="" class="logo" />
+
+    <div class="login_title animated slideInDown">
+      <span>{{ $t("dlan") }}</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>
+          <div class="forms_title">{{ $t("hj27") }}</div>
+          <el-input
+            :placeholder="$t('hj9')"
+            :size="medium"
+            v-model="userName"
+            clearable
+          >
           </el-input>
-          <el-input style="margin-top: 0.46rem;" show-password :placeholder="$t('hj10')" :size="medium"
-            v-model="userPassword" @input="handleInput()">
+          <div class="forms_title">{{ $t("Password") }}</div>
+          <el-input
+            show-password
+            :placeholder="$t('hj10')"
+            :size="medium"
+            v-model="userPassword"
+            @input="handleInput()"
+          >
           </el-input>
         </div>
-        <div class="bottom_btns" :class="btnClass ? 'on' : 'off'">
-          <div class="top_btn " @click="loginIN" :class="dengl ? 'animated pulse' : ''">
-            <span>{{ $t('hj11') }}</span>
-          </div>
-          <div class="mes" @click="getApp()">
-            <span>{{ $t('hj12') }}</span>
+        <div class="bottom_btns">
+          <van-button
+            type="info"
+            :disabled="!btnClass"
+            class="butn"
+            @click="loginIN"
+          >
+            {{ $t("立即登录") }}
+          </van-button>
+          <van-button
+            type="info"
+            plain
+            class="butn_2"
+            @click="$router.push('/register')"
+          >
+            {{ $t("免費註冊") }}
+          </van-button>
+          <div class="password-operate">
+            <div class="forget" @click="getApp()">
+              {{ $t("hj12") }}
+            </div>
+            <div class="remember">
+              <van-checkbox @change="checkboxChange" v-model="checked">{{
+                $t("記住帳戶密碼")
+              }}</van-checkbox>
+            </div>
           </div>
         </div>
       </div>
-    </div>
-    <div class="login_bom">
 
-      <div class="line">
-        <div class="left_line"></div>
-        <div class="center_line">
-          <span>{{ $t('hj13') }}</span>
-        </div>
-        <div class="right_line"></div>
-      </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 class="myzh"><span class="mes">{{ $t('hj14') }}?</span><span @click="$router.push('/register')" class="mes"
-          style="color: rgb(54,124,248);">{{ $t('hj15') }}</span> </div>
+      <!-- <div class="register" data-v-8cc76a7b="">
+        {{ $t("還沒賬號?") }}
+        <span @click="$router.push('/register')" data-v-8cc76a7b="" style="color:#c4d600">{{ $t("免費註冊") }}</span>
+      </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 headers from "./components/header.vue";
+import tabHead from "../../components/tabHead.vue";
+import * as api from "@/axios/api";
+import { Notify } from "vant";
+import { mapActions, mapMutations } from "vuex";
+import { languageOptions } from "@/config/languageOptions";
 
 export default {
   name: "newLogin",
   data() {
     return {
-      loginWay: this.$t('hj8'),
+      checked: false,
+      loginWay: this.$t("hj8"),
       currentLoginMode: "email",
-      placeholder: this.$t('hj16'),
-      Logo,
+      placeholder: this.$t("hj16"),
       userPassword: "",
       userName: "",
       btnClass: false,
       medium: "medium",
-      alertShow: false,
-      closable: false,
-      eltype: 'warning',
-      texts: "",
-      dengl: false,
-      loginBtn: false,
+      languageShow: false, // 语言选择
+      // 多语言配置
+      actions: languageOptions
     };
   },
   components: {
-    headers
+    // headers,
+    tabHead
   },
+  mounted() {
+    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(checked) {
+      window.localStorage.setItem("login_checked", checked.toString());
+    },
     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 !== '') {
+      if (this.userPassword !== "" && this.userName !== "") {
         this.btnClass = true;
       } else {
         this.btnClass = false;
       }
     },
     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
-      }
-      let data = await api.login(opts)
+      };
+      let data = await api.login(opts);
+
       if (data.status === 0) {
-        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
-        setTimeout(() => {
-          this.alertShow = false
-          this.eltype = 'warning'
-          this.$router.push('/home')
-        }, 1000)
-        this.loginBtn = false;
-        window.localStorage.clear()
+        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.undataToken(data.data.token);
         window.localStorage.setItem("USERTOKEN", data.data.token);
+        // Notify({ type: "success", message: this.$t("hj36") });
 
-
-      } else {
-        this.texts = data.msg
-        this.alertShow = true
-        this.loginBtn = false;
         setTimeout(() => {
-          this.alertShow = false
-        }, 2000)
-        //Toast(data.msg)
+          // this.$router.push("/home");
+          this.$router.push("/home_index");
+        }, 1000);
+      } else {
+        Notify({ type: "warning", message: data.msg });
       }
       if (navigator.vibrate) {
         // 支持
         navigator.vibrate([55]);
       }
     },
+    // 选择语言
+    onSelect(e) {
+      window.localStorage.setItem("language", e.lang);
+      this.$i18n.locale = e.lang;
+    }
   },
-  beforeDestroy() { },
-  created() { }
+  beforeDestroy() {},
+  created() {}
 };
 </script>
 
 <style scoped lang="less">
-.login_page {
-  position: relative;
-  background-color: #fff !important;
+@green: #c4d600;
+
+.password-operate {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-top: 0.53333rem;
+  padding: 0 0.1rem;
+
+  .forget {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 0.37333rem;
+    line-height: 0.53333rem;
+    color: #8c9fad;
+    cursor: pointer;
+  }
+
+  .remember {
+    display: flex;
+    align-items: center;
+  }
+}
+
+/deep/ .van-checkbox__icon--checked .van-icon {
+  background: @green;
+  border-color: @green;
+}
+
+.register {
+  font-style: normal;
+  font-weight: 500;
+  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: 700;
+  font-size: 0.7rem;
+  line-height: 0.66667rem;
+  color: #14181f;
+  text-align: center;
+}
+
+/deep/ .van-checkbox__label {
+  font-style: normal;
+  font-weight: 500;
+  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;
+
+  .multilingual {
+    width: 0.8em;
+    height: 0.8em;
+    margin-left: 0.25em;
+
+    img {
+      width: 100%;
+      height: 100%;
+    }
+  }
+}
+
+.logo {
+  width: 50vw;
+  margin: 10vw auto 15vw;
 }
 
 .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%;
@@ -196,15 +304,21 @@
       align-items: center;
       flex-wrap: wrap;
 
+      .forms_title {
+        font-size: 0.4rem;
+        margin-top: 0.5rem;
+        margin-bottom: 0.2rem;
+      }
+
       .user_name,
       .password {
         width: 100%;
-        height: 35%;
-        background: rgb(246, 246, 247);
+        height: 50px;
+        background: #fff;
         // background: #1e1e1e;
         border-radius: 0.3564rem;
 
-        >input {
+        > input {
           width: 100%;
           height: 100%;
           padding-left: 0.3564rem;
@@ -215,23 +329,44 @@
 
     /deep/.el-input__inner {
       width: 100%;
-      height: 1.45rem !important;
-      background-color: rgb(246, 246, 247) !important;
+      height: 70px;
+      background-color: #fff !important;
       // background: #1e1e1e;
-      border-radius: 0.3564rem;
+      border-radius: 8px;
       font-size: 0.45rem !important;
+      border: #ddd solid 1px;
     }
 
     .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;
+        background: @green;
+        border: none;
+      }
+
+      .butn_2 {
+        width: 100%;
+        margin-top: 40px;
+        height: 60px;
+        border-radius: 8px;
+        color: @green;
+        border-color: @green;
+        margin-top: 0.4rem;
+      }
 
       .top_btn {
+        border: none;
         width: 100%;
         height: 1.25rem;
-        border-radius: 0.3564rem;
-        background: rgb(154, 197, 250);
+        border-radius: 8px;
+        background: @green;
         color: #fff;
         display: flex;
         align-items: center;
@@ -239,15 +374,13 @@
         font-size: 0.5128rem;
         margin-top: 0.75rem;
 
-        >span {
+        > span {
           font-weight: 530 !important;
         }
       }
 
-
-
       .mes {
-        width: 100%;
+        // width: 100%;
         height: 20%;
         margin-top: 0.4rem;
         display: flex;
@@ -290,11 +423,10 @@
     align-items: center;
     justify-content: center;
 
-    >span {
+    > span {
       font-size: 0.3046rem;
       color: #000;
       background-color: #fff;
-
     }
   }
 
@@ -303,17 +435,18 @@
     height: 0.01rem;
     background: #e5e5e5;
   }
-
 }
 
 .myzh {
-  width: calc(100% - 4rem);
-  position: absolute;
+  // width: calc(100% - 4rem);
+  // position: absolute;
   bottom: 0.01rem;
   text-align: center;
+  display: flex;
+  align-items: center;
 
   .mes {
-    width: 100%;
+    // width: 100%;
     height: 40%;
 
     font-size: 0.3846rem;
@@ -353,7 +486,7 @@
     width: 3rem;
     height: 3.5769rem;
 
-    >img {
+    > img {
       width: 100%;
       height: 100%;
     }
@@ -368,11 +501,9 @@
 }
 
 /deep/.el-input__suffix-inner {
-
   display: flex;
   justify-content: center;
   align-items: center;
-
 }
 
 /deep/.el-input__icon {
@@ -383,12 +514,11 @@
 }
 
 .on .top_btn {
-  background: #2d8cf0 !important;
+  background: @green !important;
 }
 
 /deep/.el-icon-circle-close::before {
   font-size: 0.5rem !important;
-
 }
 
 /deep/.el-input__clear {

--
Gitblit v1.9.3