Browse Source

注册、找回密码功能

dudm 3 năm trước cách đây
mục cha
commit
a5d387bafe

+ 27 - 0
front-vue/src/api/login.js

@@ -74,3 +74,30 @@ export function chooseCompanyLogin(companyId) {
     data: {companyId : companyId}
   })
 }
+
+// 注册
+export function registerUser(query) {
+  return request({
+    url: '/system/user/registerUser',
+    method: 'get',
+    params: query
+  })
+}
+
+// 忘记密码验证
+export function forgetUser(query) {
+  return request({
+    url: '/system/user/forgetUser',
+    method: 'get',
+    params: query
+  })
+}
+
+// 忘记密码修改
+export function updateUser(query) {
+  return request({
+    url: '/system/user/updateUser',
+    method: 'get',
+    params: query
+  })
+}

+ 1 - 1
front-vue/src/permission.js

@@ -7,7 +7,7 @@ import { getToken, removeToken } from '@/utils/auth'
 
 NProgress.configure({ showSpinner: false })
 
-const whiteList = ['/login', '/register', '/wxLogin', '/userLogin', '/authorizeLogin', '/auth-redirect', '/bind', '/auth']
+const whiteList = ['/login', '/registerUser', '/forgetUser', '/register', '/wxLogin', '/userLogin', '/authorizeLogin', '/auth-redirect', '/bind', '/auth']
 
 
 router.beforeEach((to, from, next) => {

+ 10 - 0
front-vue/src/router/index.js

@@ -44,6 +44,16 @@ export const constantRoutes = [
     hidden: true
   },
   {
+    path: '/registerUser',
+    component: (resolve) => require(['@/views/registerUser'], resolve),
+    hidden: true
+  },
+  {
+    path: '/forgetUser',
+    component: (resolve) => require(['@/views/forgetUser'], resolve),
+    hidden: true
+  },
+  {
     path: '/register',
     component: (resolve) => require(['@/views/register'], resolve),
     hidden: true

+ 584 - 0
front-vue/src/views/forgetUser.vue

@@ -0,0 +1,584 @@
+<template>
+    <div class="backdrop zap-login">
+        <el-container>
+            <!-- logo -->
+            <img class="zap-logo" src="../assets/images/login_logo.png" alt="">
+             <el-main>
+                <!-- 中间部分 -->
+                <div class="login">
+                    <div class="login-left">
+                        <img class="login-name" src="../assets/images/logo_name.png" alt="">
+                        <img class="login-illustration" src="../assets/images/login_img.png" alt="">
+                    </div>
+                    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
+                        <template v-if="!scanningLogin">
+                            <div class="zap-2dcode">
+                                <!-- <img class="zap-2dcode__text" src="../assets/images/code1_1.png" alt=""> -->
+                                <!-- <img class="zap-2dcode__img" src="../assets/images/code1_2.gif" alt="" @click="scanningLogin=true"> -->
+                            </div>
+                            <el-tabs v-model="activeName" class="zap-tabs" @tab-click="changeLoginType">
+                                <el-tab-pane label="找回密码" name="login_shortMessage">
+                                    <el-form-item prop="phone" v-if="!passwordUpdate">
+                                        <el-input v-model="loginForm.phone" type="text" auto-complete="off" placeholder="手机号" maxlength="11">
+                                            <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
+                                        </el-input>
+                                    </el-form-item>
+                                    <el-form-item prop="shortMessageCode" v-if="!passwordUpdate">
+                                        <el-input v-model="loginForm.shortMessageCode" type="text"  maxlength="" auto-complete="off" placeholder="请输入验证码" id="" onkeydown="enterHandler(event)">
+                                            <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
+                                            <el-button class="zap-code-button" slot="suffix" @click="sendMessage" :disabled="sendShortMessageBtn">{{codeBtnWord}}</el-button>
+                                        </el-input>
+                                    </el-form-item>
+                                    <el-form-item style="width:100%;" v-if="!passwordUpdate">
+                                        <el-button :loading="loading"  class="zap-button" size="medium" type="primary" @click.native.prevent="handleLogin">
+                                            <span v-if="!loading">下 一 步</span>
+                                            <span v-else>请 稍 后...</span>
+                                        </el-button>
+                                    </el-form-item>
+                                    <el-form-item prop="password" v-if="passwordUpdate">
+                                        <el-input v-model="loginForm.password" type="text" auto-complete="off" placeholder="密码" maxlength="20">
+                                            <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
+                                        </el-input>
+                                    </el-form-item>
+                                    <el-form-item prop="again" v-if="passwordUpdate">
+                                        <el-input v-model="loginForm.again" type="text" auto-complete="off" placeholder="确认密码" maxlength="20">
+                                            <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
+                                        </el-input>
+                                    </el-form-item>
+                                    <el-form-item style="width:100%;" v-if="passwordUpdate">
+                                        <el-button :loading="loading"  class="zap-button" size="medium" type="primary" @click.native.prevent="handleUpdate">
+                                            <span v-if="!loading">下 一 步</span>
+                                            <span v-else>请 稍 后...</span>
+                                        </el-button>
+                                    </el-form-item>
+                                </el-tab-pane>
+                            </el-tabs>
+                        </template>
+                    </el-form>
+                    <!--  底部  -->
+                </div>
+            </el-main>
+        </el-container>
+        <el-footer></el-footer>
+
+        <!-- 密码登录验证码 -->
+        <el-dialog
+            title="验证码"
+            :close-on-click-modal="false"
+            :visible.sync="codeDialogVisible"
+            width="30%">
+            <div style="display:flex;">
+                <el-input v-model="loginForm.code" auto-complete="off" placeholder="验证码" style="width: 53%;" @keyup.enter.native="handleLogin">
+                    <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
+                </el-input>
+                <div class="login-code">
+                    <img :src="codeUrl" @click="getCode" class="login-code-img" />
+                </div>
+            </div>
+            <span slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="handleImgCodeSubmit">确 定</el-button>
+            </span>
+        </el-dialog>
+    </div>
+</template>
+<script>
+import { getCodeImg, sendShortMessage, chooseCompanyLogin, forgetUser, updateUser} from "@/api/login";
+import { wxImg } from "@/api/system/weChat";
+import Cookies from "js-cookie";
+import { encrypt, decrypt } from "@/utils/jsencrypt";
+import wxlogin from 'vue-wxlogin'
+export default {
+  components: {
+    wxlogin : wxlogin
+  },
+    name: "Login",
+    data() {
+        return {
+            //默认背景图
+            activeName: "login_shortMessage",
+            baseImg: require('../assets/images/login_img.png'),
+            BackgroundImg : require('../assets/images/login_img.png'),
+            scanningLogin: false, // 是否扫码登陆
+            logo: '',
+            // baseLogo: require('../assets/images/lgo.png'),
+            codeUrl: "",
+            cookiePassword: "",
+            loginForm: {
+                shortMessageCode: '',
+                username: "",
+                password: "",
+                rememberMe: false,
+                code: "",
+                uuid: "",
+                unionId : "",
+                type : "2"
+            },
+            codeBtnWord: '获取验证码', // 获取验证码按钮文字
+            waitTime:2, // 获取验证码按钮失效时间
+            loginRules: {
+                company: [
+                    {
+                        required: true,
+                        trigger: "blur",
+                        message: "企业名称不能为空",
+                    },
+                ],
+                username: [
+                    {
+                        required: true,
+                        trigger: "blur",
+                        message: "联系人不能为空",
+                    },
+                ],
+                phone: [
+                    {
+                        required: true,
+                        trigger: "blur",
+                        message: "手机号不能为空",
+                    },
+                ],
+                shortMessageCode: [
+                    {
+                        required: true,
+                        trigger: "blur",
+                        message: "验证码不能为空",
+                    },
+                ],
+                password: [
+                    {
+                        required: true,
+                        trigger: "blur",
+                        message: "密码不能为空",
+                    },
+                ],
+                again: [
+                    {
+                        required: true,
+                        trigger: "blur",
+                        message: "确认密码不能为空",
+                    },
+                ],
+            },
+            loading: false,
+            redirect: undefined,
+            wxSrc: require("../assets/images/wx1.png"),
+            sendShortMessageBtn : false,
+            dialogVisible : false,
+            companyList : [],
+            chooseCompanyId : '',
+            codeDialogVisible: false,
+            passwordUpdate: false
+        };
+    },
+    watch: {
+        $route: {
+            handler: function (route) {
+                this.redirect = route.query && route.query.redirect;
+            },
+            immediate: true,
+        },
+    },
+    created() {
+        this.getCode();
+        // this.getlistDomain();
+    },
+    methods: {
+      changeImg(){
+          this.wxSrc = require("../assets/images/wx.png")
+      },
+      returnImg(){
+          this.wxSrc = require("../assets/images/wx1.png")
+      },
+      getCode() {
+          getCodeImg().then((res) => {
+              this.codeUrl = "data:image/gif;base64," + res.img;
+              this.loginForm.uuid = res.uuid;
+          });
+      },
+      handleImgCodeSubmit () {
+          if (this.activeName === 'login_password') {
+              this.handleLogin()
+          } else {
+              this.sendMessage()
+          }
+      },
+      handleLogin() {
+          this.$refs.loginForm.validate((valid) => {
+              if (valid) {
+                  this.loading = true;
+                  // 验证码不能为空
+                  if (this.loginForm.shortMessageCode == null || this.loginForm.shortMessageCode == "") {
+                    this.msgError("请输入短信验证码!");
+                    this.loading = false;
+                    return;
+                  }
+                  forgetUser(this.loginForm).then((res) => {
+                    this.loading = false;
+                    this.passwordUpdate = true
+                    if (res.data.code == "0") {
+                        console.log("未认证!")
+                        this.$router.push({ path: "/login" });
+                    }
+                  }).catch(() => {
+                    this.loading = false;
+                  });
+              }
+          });
+      },
+      handleUpdate() {
+          this.$refs.loginForm.validate((valid) => {
+              if (valid) {
+                  this.loading = true;
+                  // 验证码不能为空
+                  if (this.loginForm.shortMessageCode == null || this.loginForm.shortMessageCode == "") {
+                    this.msgError("请输入短信验证码!");
+                    this.loading = false;
+                    return;
+                  }
+                  updateUser(this.loginForm).then((res) => {
+                    this.loading = false;
+                    this.msgSuccess("重置密码成功!");
+                    this.$router.push({ path: "/login" });
+                  }).catch(() => {
+                    this.loading = false;
+                  });
+              }
+          });
+      },
+      getUrlKey(name) {
+          return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [, ""])[1].replace(/\+/g, '%20')) || null
+      },
+      changeLoginType(e){
+
+          if (this.activeName === 'login_password') {
+              this.loginRules.code = [
+                    {
+                        required: true,
+                        trigger: "change",
+                        message: "验证码不能为空",
+                    },
+                ]
+          } else {
+              delete this.loginRules.code
+          }
+        this.getCode();
+      },
+      sendMessage(){
+                  // 验证码不能为空
+                  if (this.loginForm.phone == null || this.loginForm.phone == "") {
+                    this.msgError("请输入手机号!");
+                    this.loading = false;
+                    return;
+                  }
+                  if (this.codeDialogVisible) {
+                    if (!this.loginForm.code) {
+                        this.loading = false
+                        return this.msgError("请输入验证码!");
+                    } else {
+                        this.codeDialogVisible = false
+                    }
+                  } else {
+                      return this.codeDialogVisible = true
+                  }
+                  // 调用获取短信验证码接口
+                  sendShortMessage(this.loginForm.phone, this.loginForm.code, this.loginForm.uuid).then(response => {
+                    this.sendShortMessageBtn = true;
+                    this.msgSuccess("发送成功!");
+
+                    // 因为下面用到了定时器,需要保存this指向
+                    let that = this
+                    that.waitTime = 60;
+                    this.codeBtnWord = `${this.waitTime}s 后重新获取`
+                    let timer = setInterval(function(){
+                        if(that.waitTime>1){
+                            that.waitTime--
+                            that.codeBtnWord = `${that.waitTime}s 后重新获取`
+                        }else{
+                            clearInterval(timer)
+                            that.codeBtnWord = '获取验证码'
+                            that.waitTime = 60
+                            that.getCode();
+                            that.sendShortMessageBtn = false;
+                        }
+                    },1000)
+
+                  }).catch((response)=>{
+                    this.getCode();
+                  });
+
+      },
+      chooseLogin(){
+        chooseCompanyLogin(this.chooseCompanyId).then(response => {
+          if (response.code == "200") {
+            // 认证通过
+            if (response.data.sysUser.companyStatus == "00") {
+                if(this.redirect == '/home'){
+                    this.$router.push({ path: "/homePage"+this.redirect || "/" });
+                }else{
+                    this.$router.push({ path: this.redirect || "/" });
+                }
+            //   this.$router.push({ path: this.redirect || "/" });
+            // 认证未通过
+            } else {
+              console.log("未认证通过!")
+              this.$router.push({ path: "/certification" });
+            }
+          }
+        }).catch((response)=>{
+
+        });
+      }
+    }
+};
+</script>
+<style rel="stylesheet/scss" lang="scss">
+// 大背景图
+.backdrop {
+    padding-top: 100px;
+    background-color: #ebf3ff;
+    width: 100%;
+    min-height: 100%;
+    text-align: center;
+}
+.zap-login{
+    .login {
+        display: flex;
+        justify-content: center;
+        height: 100%;
+        background-size: cover;
+    }
+    // 中间背景图
+    .login-form {
+        margin-left: 75px;
+        border-radius: 6px;
+        background-size: 935px 434px;
+        background-repeat: no-repeat;
+        margin-top: 40px;
+    }
+    // 输入框大小
+    .el-input {
+        height: 55px;
+        width: 100%;
+        background-image: linear-gradient(
+            #fdfdfd,
+            #fdfdfd),
+        linear-gradient(
+            #e7f0ff,
+            #e7f0ff);
+        background-blend-mode: normal,
+            normal;
+        input {
+            height: 55px;
+            width: 100%;
+            font-size: 18px;
+        }
+    }
+    .input-icon {
+        height: 53px;
+        width: 22px;
+        margin-left: 14px;
+        margin-right: 14px
+    }
+    .el-input--prefix .el-input__inner{
+        padding-left: 50px;
+    }
+    .login-tip {
+        font-size: 13px;
+        text-align: center;
+    }
+    .el-form-item--medium .el-form-item__content{
+        display: flex;
+        align-items: center;
+    }
+    // 验证码
+    .login-code {
+        height: 55px;
+        img {
+            cursor: pointer;
+            vertical-align: middle;
+        }
+    }
+    .login-code-img {
+        flex: 1;
+        height: 55px;
+        margin-left: 8px;
+    }
+
+    .rightulliimg{
+        width: 860px;
+
+    }
+    .divider_left{
+        margin-left: -40px;
+    }
+
+    // 内部供应链
+    .zap-tabs{
+        width: 410px;
+        min-height: 480px;
+        padding: 10px 48px 46px;
+        box-sizing: border-box;
+        background-image: linear-gradient(
+            #ffffff,
+            #ffffff),
+        linear-gradient(
+            #f3f3f3,
+            #f3f3f3);
+        .el-tabs__nav-wrap{
+            padding: 0 12px;
+        }
+        .el-tabs__nav-wrap::after{
+            height: 0;
+        }
+        .el-tabs__nav{
+            width: 100%;
+        }
+        .el-tabs__item{
+            height: 56px;
+            line-height: 56px;
+            font-size: 24px;
+            color: #333333;
+            &:nth-of-type(3){
+                padding-left: 30px;
+            }
+        }
+        .el-tabs__item.is-active{
+            color: #0056eb;
+        }
+        .el-tabs__active-bar{
+            background-color: #0056eb;
+        }
+    }
+    .login-left{
+        width: 704px;
+        margin-top: 40px;
+        text-align: left;
+        .login-name{
+            width: 515px;
+        }
+        .login-illustration{
+            width: 704px;
+        }
+    }
+    .zap-logo{
+        position: absolute;
+        top: 25px;
+        left: 45px;
+        width: 210px;
+        height: 60px;
+    }
+    .zap-2dcode{
+        display: flex;
+        justify-content: flex-end;
+        align-items: center;
+        width: 410px;;
+        padding-top: 10px;
+        padding-right: 10px;
+        font-size: 0;
+        background-color: #ffffff;
+        box-sizing: border-box;
+    }
+    .zap-2dcode__text{
+        width: 113px;
+        height: 28px;
+    }
+    .zap-2dcode__img{
+        width: 60px;
+        height: 61px;
+        cursor: pointer;
+    }
+    .zap-button{
+        margin-top: 25px;
+        width: 100%;
+        height: 55px;
+        font-size: 18px;
+        border-radius: 0;
+        background-image: linear-gradient(
+            #0056eb,
+            #0056eb),
+        linear-gradient(
+            #e7f0ff,
+            #e7f0ff);
+        background-blend-mode: normal,
+            normal;
+    }
+    .zap-agreement{
+        display: flex;
+        align-items: top;
+        margin-top: 8px;
+        line-height: 18px;
+        font-size: 12px;
+    }
+    .zap-agreement__text{
+        color: #666666;
+    }
+    .zap-agreement__link{
+        display: flex;
+        flex-direction: column;
+        align-items: flex-start;
+        color: #389cf4;
+        cursor: pointer;
+    }
+    .zap-code-button{
+        padding: 0 16px;
+        line-height: 55px;
+        font-size: 18px;
+        color: #23b24b;
+        border: none;
+        background-color: transparent;
+    }
+    .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus{
+        background-color: transparent;
+    }
+    // 扫码登录
+    .zap-scanning{
+        width: 410px;
+        height: 550px;
+        background-image: linear-gradient(
+            #ffffff,
+            #ffffff),
+        linear-gradient(
+            #f3f3f3,
+            #f3f3f3);
+        background-blend-mode: normal,
+            normal;
+        box-sizing: border-box;
+    }
+    .zap-scanning__title{
+        padding: 0 60px;
+        font-size: 24px;
+        color: #333333;
+    }
+    .zap-scanning__img{
+        display: block;
+        width: 220px;
+        height: 220px;
+        margin: 40px auto 0;
+        object-fit: cover;
+    }
+    .zap-scanning__bottom{
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        margin-top: 18px;
+        font-size: 14px;
+    }
+    .zap-scanning__icon{
+        width: 22px;
+        height: 22px;
+        margin-right: 10px;
+    }
+    .zap-scanning__text{
+        color: #333333;
+    }
+    .zap-scanning__color{
+        color: #23b24b;
+    }
+    .el-tabs__header{
+        margin-bottom: 38px;
+    }
+    .el-dialog:not(.is-fullscreen){
+        margin-top: 25vh !important;
+    }
+}
+</style>

+ 1 - 0
front-vue/src/views/login.vue

@@ -82,6 +82,7 @@
                                             </div>
                                         </div>
                                     </el-form-item>
+                                    <el-link style="margin-right:50px" href="/registerUser">注册</el-link><el-link href="/forgetUser">忘记密码?</el-link>
                                     <!-- <el-divider class="divider_left"><span style="font-size:10px;word-break: keep-all;">第三方快捷登录</span></el-divider>
                                     <el-form-item style="width:100%;">
                                         <img :src="wxSrc" @mouseover="changeImg" @mouseleave="returnImg" @click="getWeChatImg" style="width:30px;margin-left: 77px;">

+ 599 - 0
front-vue/src/views/registerUser.vue

@@ -0,0 +1,599 @@
+<template>
+    <div class="backdrop zap-login">
+        <el-container>
+            <!-- logo -->
+            <img class="zap-logo" src="../assets/images/login_logo.png" alt="">
+             <el-main>
+                <!-- 中间部分 -->
+                <div class="login">
+                    <div class="login-left">
+                        <img class="login-name" src="../assets/images/logo_name.png" alt="">
+                        <img class="login-illustration" src="../assets/images/login_img.png" alt="">
+                    </div>
+                    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
+                        <template v-if="!scanningLogin">
+                            <div class="zap-2dcode">
+                                <!-- <img class="zap-2dcode__text" src="../assets/images/code1_1.png" alt=""> -->
+                                <!-- <img class="zap-2dcode__img" src="../assets/images/code1_2.gif" alt="" @click="scanningLogin=true"> -->
+                            </div>
+                            <el-tabs v-model="activeName" class="zap-tabs" @tab-click="changeLoginType">
+                                <el-tab-pane label="注册" name="login_shortMessage">
+                                    <el-form-item prop="company">
+                                        <el-input v-model="loginForm.company" type="text" auto-complete="off" placeholder="企业名称" maxlength="15">
+                                            <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
+                                        </el-input>
+                                    </el-form-item>
+                                    <el-form-item prop="username">
+                                        <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="联系人" maxlength="15">
+                                            <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
+                                        </el-input>
+                                    </el-form-item>
+                                    <el-form-item prop="phone">
+                                        <el-input v-model="loginForm.phone" type="text" auto-complete="off" placeholder="手机号" maxlength="11">
+                                            <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
+                                        </el-input>
+                                    </el-form-item>
+                                    <el-form-item prop="shortMessageCode">
+                                        <el-input v-model="loginForm.shortMessageCode" type="text"  maxlength="" auto-complete="off" placeholder="请输入验证码" id="" onkeydown="enterHandler(event)">
+                                            <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
+                                            <el-button class="zap-code-button" slot="suffix" @click="sendMessage" :disabled="sendShortMessageBtn">{{codeBtnWord}}</el-button>
+                                        </el-input>
+                                    </el-form-item>
+                                    <el-form-item prop="password">
+                                        <el-input v-model="loginForm.password" type="text" auto-complete="off" placeholder="密码" maxlength="20">
+                                            <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
+                                        </el-input>
+                                    </el-form-item>
+                                    <el-form-item prop="again">
+                                        <el-input v-model="loginForm.again" type="text" auto-complete="off" placeholder="确认密码" maxlength="20">
+                                            <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
+                                        </el-input>
+                                    </el-form-item>
+                                    <el-form-item>
+                                        <el-checkbox v-model="loginForm.checked">
+                                            <div class="zap-agreement">
+                                                <span class="zap-agreement__text">我已阅读</span>
+                                                <div class="zap-agreement__link">
+                                                    <span>《招采云链服务平台会员注册协议》</span>
+                                                    <span>《招采云链服务平台隐私政策》</span>
+                                                </div>
+                                            </div>
+                                        </el-checkbox>
+                                    </el-form-item>
+                                    <el-form-item style="width:100%;">
+                                        <el-button :loading="loading"  class="zap-button" size="medium" type="primary" @click.native.prevent="handleLogin">
+                                            <span v-if="!loading">注 册</span>
+                                            <span v-else>请 稍 后...</span>
+                                        </el-button>
+                                    </el-form-item>
+                                </el-tab-pane>
+                            </el-tabs>
+                        </template>
+                    </el-form>
+                    <!--  底部  -->
+                </div>
+            </el-main>
+            <el-dialog
+              title="选择企业"
+              :visible.sync="dialogVisible"
+              width="30%">
+              <el-select v-model="chooseCompanyId" placeholder="请选择">
+                <el-option
+                  v-for="item in companyList"
+                  :key="item.scyId"
+                  :label="item.scyName"
+                  :value="item.scyId">
+                </el-option>
+              </el-select>
+              <span slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="chooseLogin()">确 定</el-button>
+              </span>
+            </el-dialog>
+        </el-container>
+        <el-footer></el-footer>
+
+        <!-- 密码登录验证码 -->
+        <el-dialog
+            title="验证码"
+            :close-on-click-modal="false"
+            :visible.sync="codeDialogVisible"
+            width="30%">
+            <div style="display:flex;">
+                <el-input v-model="loginForm.code" auto-complete="off" placeholder="验证码" style="width: 53%;" @keyup.enter.native="handleLogin">
+                    <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
+                </el-input>
+                <div class="login-code">
+                    <img :src="codeUrl" @click="getCode" class="login-code-img" />
+                </div>
+            </div>
+            <span slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="handleImgCodeSubmit">确 定</el-button>
+            </span>
+        </el-dialog>
+    </div>
+</template>
+<script>
+import { getCodeImg, sendShortMessage, chooseCompanyLogin, registerUser} from "@/api/login";
+import { wxImg } from "@/api/system/weChat";
+import Cookies from "js-cookie";
+import { encrypt, decrypt } from "@/utils/jsencrypt";
+import wxlogin from 'vue-wxlogin'
+export default {
+  components: {
+    wxlogin : wxlogin
+  },
+    name: "Login",
+    data() {
+        return {
+            //默认背景图
+            activeName: "login_shortMessage",
+            baseImg: require('../assets/images/login_img.png'),
+            BackgroundImg : require('../assets/images/login_img.png'),
+            scanningLogin: false, // 是否扫码登陆
+            logo: '',
+            // baseLogo: require('../assets/images/lgo.png'),
+            codeUrl: "",
+            cookiePassword: "",
+            loginForm: {
+                shortMessageCode: '',
+                username: "",
+                password: "",
+                rememberMe: false,
+                code: "",
+                uuid: "",
+                unionId : "",
+                type : "2"
+            },
+            codeBtnWord: '获取验证码', // 获取验证码按钮文字
+            waitTime:2, // 获取验证码按钮失效时间
+            loginRules: {
+                company: [
+                    {
+                        required: true,
+                        trigger: "blur",
+                        message: "企业名称不能为空",
+                    },
+                ],
+                username: [
+                    {
+                        required: true,
+                        trigger: "blur",
+                        message: "联系人不能为空",
+                    },
+                ],
+                phone: [
+                    {
+                        required: true,
+                        trigger: "blur",
+                        message: "手机号不能为空",
+                    },
+                ],
+                shortMessageCode: [
+                    {
+                        required: true,
+                        trigger: "blur",
+                        message: "验证码不能为空",
+                    },
+                ],
+                password: [
+                    {
+                        required: true,
+                        trigger: "blur",
+                        message: "密码不能为空",
+                    },
+                ],
+                again: [
+                    {
+                        required: true,
+                        trigger: "blur",
+                        message: "确认密码不能为空",
+                    },
+                ],
+            },
+            loading: false,
+            redirect: undefined,
+            wxSrc: require("../assets/images/wx1.png"),
+            sendShortMessageBtn : false,
+            dialogVisible : false,
+            companyList : [],
+            chooseCompanyId : '',
+            codeDialogVisible: false
+        };
+    },
+    watch: {
+        $route: {
+            handler: function (route) {
+                this.redirect = route.query && route.query.redirect;
+            },
+            immediate: true,
+        },
+    },
+    created() {
+        this.getCode();
+        // this.getlistDomain();
+    },
+    methods: {
+      changeImg(){
+          this.wxSrc = require("../assets/images/wx.png")
+      },
+      returnImg(){
+          this.wxSrc = require("../assets/images/wx1.png")
+      },
+      getCode() {
+          getCodeImg().then((res) => {
+              this.codeUrl = "data:image/gif;base64," + res.img;
+              this.loginForm.uuid = res.uuid;
+          });
+      },
+      handleImgCodeSubmit () {
+          if (this.activeName === 'login_password') {
+              this.handleLogin()
+          } else {
+              this.sendMessage()
+          }
+      },
+      handleLogin() {
+          this.$refs.loginForm.validate((valid) => {
+              if (valid) {
+                  this.loading = true;
+                  // 验证码不能为空
+                  if (this.loginForm.shortMessageCode == null || this.loginForm.shortMessageCode == "") {
+                    this.msgError("请输入短信验证码!");
+                    this.loading = false;
+                    return;
+                  }
+                  if (!this.loginForm.checked) {
+                    this.msgError("请阅读平台协议并确认");
+                    this.loading = false;
+                    return;
+                  }
+                  this.loginForm.type = "2";
+                  registerUser(this.loginForm).then((res) => {
+                    this.loading = false;
+                    if (res.data.code == "0") {
+                        console.log("未认证!")
+                        this.$router.push({ path: "/login" });
+                    }
+                  }).catch(() => {
+                    this.loading = false;
+                  });
+              }
+          });
+      },
+      getUrlKey(name) {
+          return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [, ""])[1].replace(/\+/g, '%20')) || null
+      },
+      changeLoginType(e){
+
+          if (this.activeName === 'login_password') {
+              this.loginRules.code = [
+                    {
+                        required: true,
+                        trigger: "change",
+                        message: "验证码不能为空",
+                    },
+                ]
+          } else {
+              delete this.loginRules.code
+          }
+        this.getCode();
+      },
+      sendMessage(){
+                  // 验证码不能为空
+                  if (this.loginForm.phone == null || this.loginForm.phone == "") {
+                    this.msgError("请输入手机号!");
+                    this.loading = false;
+                    return;
+                  }
+                  if (this.codeDialogVisible) {
+                    if (!this.loginForm.code) {
+                        this.loading = false
+                        return this.msgError("请输入验证码!");
+                    } else {
+                        this.codeDialogVisible = false
+                    }
+                  } else {
+                      return this.codeDialogVisible = true
+                  }
+                  // 调用获取短信验证码接口
+                  sendShortMessage(this.loginForm.phone, this.loginForm.code, this.loginForm.uuid).then(response => {
+                    this.sendShortMessageBtn = true;
+                    this.msgSuccess("发送成功!");
+
+                    // 因为下面用到了定时器,需要保存this指向
+                    let that = this
+                    that.waitTime = 60;
+                    this.codeBtnWord = `${this.waitTime}s 后重新获取`
+                    let timer = setInterval(function(){
+                        if(that.waitTime>1){
+                            that.waitTime--
+                            that.codeBtnWord = `${that.waitTime}s 后重新获取`
+                        }else{
+                            clearInterval(timer)
+                            that.codeBtnWord = '获取验证码'
+                            that.waitTime = 60
+                            that.getCode();
+                            that.sendShortMessageBtn = false;
+                        }
+                    },1000)
+
+                  }).catch((response)=>{
+                    this.getCode();
+                  });
+
+      },
+      chooseLogin(){
+        chooseCompanyLogin(this.chooseCompanyId).then(response => {
+          if (response.code == "200") {
+            // 认证通过
+            if (response.data.sysUser.companyStatus == "00") {
+                if(this.redirect == '/home'){
+                    this.$router.push({ path: "/homePage"+this.redirect || "/" });
+                }else{
+                    this.$router.push({ path: this.redirect || "/" });
+                }
+            //   this.$router.push({ path: this.redirect || "/" });
+            // 认证未通过
+            } else {
+              console.log("未认证通过!")
+              this.$router.push({ path: "/certification" });
+            }
+          }
+        }).catch((response)=>{
+
+        });
+      }
+    }
+};
+</script>
+<style rel="stylesheet/scss" lang="scss">
+// 大背景图
+.backdrop {
+    padding-top: 100px;
+    background-color: #ebf3ff;
+    width: 100%;
+    min-height: 100%;
+    text-align: center;
+}
+.zap-login{
+    .login {
+        display: flex;
+        justify-content: center;
+        height: 100%;
+        background-size: cover;
+    }
+    // 中间背景图
+    .login-form {
+        margin-left: 75px;
+        border-radius: 6px;
+        background-size: 935px 434px;
+        background-repeat: no-repeat;
+        margin-top: 40px;
+    }
+    // 输入框大小
+    .el-input {
+        height: 55px;
+        width: 100%;
+        background-image: linear-gradient(
+            #fdfdfd,
+            #fdfdfd),
+        linear-gradient(
+            #e7f0ff,
+            #e7f0ff);
+        background-blend-mode: normal,
+            normal;
+        input {
+            height: 55px;
+            width: 100%;
+            font-size: 18px;
+        }
+    }
+    .input-icon {
+        height: 53px;
+        width: 22px;
+        margin-left: 14px;
+        margin-right: 14px
+    }
+    .el-input--prefix .el-input__inner{
+        padding-left: 50px;
+    }
+    .login-tip {
+        font-size: 13px;
+        text-align: center;
+    }
+    .el-form-item--medium .el-form-item__content{
+        display: flex;
+        align-items: center;
+    }
+    // 验证码
+    .login-code {
+        height: 55px;
+        img {
+            cursor: pointer;
+            vertical-align: middle;
+        }
+    }
+    .login-code-img {
+        flex: 1;
+        height: 55px;
+        margin-left: 8px;
+    }
+
+    .rightulliimg{
+        width: 860px;
+
+    }
+    .divider_left{
+        margin-left: -40px;
+    }
+
+    // 内部供应链
+    .zap-tabs{
+        width: 410px;
+        min-height: 480px;
+        padding: 10px 48px 46px;
+        box-sizing: border-box;
+        background-image: linear-gradient(
+            #ffffff,
+            #ffffff),
+        linear-gradient(
+            #f3f3f3,
+            #f3f3f3);
+        .el-tabs__nav-wrap{
+            padding: 0 12px;
+        }
+        .el-tabs__nav-wrap::after{
+            height: 0;
+        }
+        .el-tabs__nav{
+            width: 100%;
+        }
+        .el-tabs__item{
+            height: 56px;
+            line-height: 56px;
+            font-size: 24px;
+            color: #333333;
+            &:nth-of-type(3){
+                padding-left: 30px;
+            }
+        }
+        .el-tabs__item.is-active{
+            color: #0056eb;
+        }
+        .el-tabs__active-bar{
+            background-color: #0056eb;
+        }
+    }
+    .login-left{
+        width: 704px;
+        margin-top: 40px;
+        text-align: left;
+        .login-name{
+            width: 515px;
+        }
+        .login-illustration{
+            width: 704px;
+        }
+    }
+    .zap-logo{
+        position: absolute;
+        top: 25px;
+        left: 45px;
+        width: 210px;
+        height: 60px;
+    }
+    .zap-2dcode{
+        display: flex;
+        justify-content: flex-end;
+        align-items: center;
+        width: 410px;;
+        padding-top: 10px;
+        padding-right: 10px;
+        font-size: 0;
+        background-color: #ffffff;
+        box-sizing: border-box;
+    }
+    .zap-2dcode__text{
+        width: 113px;
+        height: 28px;
+    }
+    .zap-2dcode__img{
+        width: 60px;
+        height: 61px;
+        cursor: pointer;
+    }
+    .zap-button{
+        margin-top: 25px;
+        width: 100%;
+        height: 55px;
+        font-size: 18px;
+        border-radius: 0;
+        background-image: linear-gradient(
+            #0056eb,
+            #0056eb),
+        linear-gradient(
+            #e7f0ff,
+            #e7f0ff);
+        background-blend-mode: normal,
+            normal;
+    }
+    .zap-agreement{
+        display: flex;
+        align-items: top;
+        margin-top: 8px;
+        line-height: 18px;
+        font-size: 12px;
+    }
+    .zap-agreement__text{
+        color: #666666;
+    }
+    .zap-agreement__link{
+        display: flex;
+        flex-direction: column;
+        align-items: flex-start;
+        color: #389cf4;
+        cursor: pointer;
+    }
+    .zap-code-button{
+        padding: 0 16px;
+        line-height: 55px;
+        font-size: 18px;
+        color: #23b24b;
+        border: none;
+        background-color: transparent;
+    }
+    .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus{
+        background-color: transparent;
+    }
+    // 扫码登录
+    .zap-scanning{
+        width: 410px;
+        height: 550px;
+        background-image: linear-gradient(
+            #ffffff,
+            #ffffff),
+        linear-gradient(
+            #f3f3f3,
+            #f3f3f3);
+        background-blend-mode: normal,
+            normal;
+        box-sizing: border-box;
+    }
+    .zap-scanning__title{
+        padding: 0 60px;
+        font-size: 24px;
+        color: #333333;
+    }
+    .zap-scanning__img{
+        display: block;
+        width: 220px;
+        height: 220px;
+        margin: 40px auto 0;
+        object-fit: cover;
+    }
+    .zap-scanning__bottom{
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        margin-top: 18px;
+        font-size: 14px;
+    }
+    .zap-scanning__icon{
+        width: 22px;
+        height: 22px;
+        margin-right: 10px;
+    }
+    .zap-scanning__text{
+        color: #333333;
+    }
+    .zap-scanning__color{
+        color: #23b24b;
+    }
+    .el-tabs__header{
+        margin-bottom: 38px;
+    }
+    .el-dialog:not(.is-fullscreen){
+        margin-top: 25vh !important;
+    }
+}
+</style>