<template> 
 | 
  <div class="login-container"> 
 | 
    <div class="project-name">WIDESEA_WMS</div> 
 | 
    <div class="login-form"> 
 | 
      <div class="form-user" @keypress="loginPress"> 
 | 
        <div class="login-text"> 
 | 
          <div> 
 | 
            <div>欢迎登录...</div> 
 | 
            <div class="login-line"></div> 
 | 
          </div> 
 | 
          <div style="flex:1;"></div> 
 | 
        </div> 
 | 
        <div class="login-text-small">WELCOME TO LOGIN</div> 
 | 
        <div class="item"> 
 | 
          <div class="input-icon el-icon-user"></div> 
 | 
          <input type="text" v-focus v-model="userInfo.userName" placeholder="请输入账号" /> 
 | 
        </div> 
 | 
        <div class="item"> 
 | 
          <div class="input-icon el-icon-lock"></div> 
 | 
          <input type="password" v-focus v-model="userInfo.password" placeholder="请输入密码" /> 
 | 
        </div> 
 | 
        <div class="item"> 
 | 
          <div class="input-icon el-icon-mobile"></div> 
 | 
  
 | 
          <input v-focus type="text" v-model="userInfo.verificationCode" placeholder="输入验证码" /> 
 | 
          <div class="code" @click="getVierificationCode"> 
 | 
            <img v-show="codeImgSrc != ''" :src="codeImgSrc" /> 
 | 
          </div> 
 | 
        </div> 
 | 
      </div> 
 | 
      <div class="loging-btn"> 
 | 
        <el-button size="large" :loading="loading" color="#3a6cd1" :dark="true" @click="login" long> 
 | 
          <span v-if="!loading">登录</span> 
 | 
          <span v-else>正在登录...</span> 
 | 
        </el-button> 
 | 
      </div> 
 | 
  
 | 
      <!-- 账号信息 --> 
 | 
      <!-- <div class="account-info"> 
 | 
        <p>演示账号:admin666    密码:123456</p> 
 | 
        <p>本地账号:admin          密码:123456</p> 
 | 
        <p><a href="https://jq.qq.com/?_wv=1027&k=Sqstuy0M" style="text-decoration: none" 
 | 
            target="_blank">QQ3群:743852316</a> 
 | 
                 
 | 
          <a href="http://v2.volcore.xyz/document/guide" style="text-decoration: none" target="_blank">框架文档</a> 
 | 
        </p> 
 | 
      </div> --> 
 | 
      <!-- 链接位置 --> 
 | 
      <!-- <div class="app-link" > 
 | 
        <a href="#" style="text-decoration: none">移动端扫码</a> 
 | 
        <a> 
 | 
          <i class="el-icon-chat-dot-round"></i> 小程序 
 | 
          <img src="https://app-1256993465.cos.ap-nanjing.myqcloud.com/wechat.jpg" /></a> 
 | 
        <a> 
 | 
          <i class="el-icon-apple"></i> 
 | 
          Android 
 | 
          <img src="https://app-1256993465.cos.ap-nanjing.myqcloud.com/Android.png" /></a> 
 | 
        <a> 
 | 
          <i class="el-icon-document"></i> 
 | 
          H5 
 | 
          <img src="https://app-1256993465.cos.ap-nanjing.myqcloud.com/H5.png" /></a> 
 | 
      </div> --> 
 | 
    </div> 
 | 
  
 | 
    <!-- 页面底部 --> 
 | 
    <!-- <div class="login-footer"> 
 | 
      <a style="text-decoration: none" href="https://beian.miit.gov.cn/" target="_blank">京ICP备19056538号-1</a> 
 | 
  
 | 
  
 | 
      <a href="https://dotnet9.com/" style="text-decoration: none" target="blank">Dotnet9</a> 
 | 
      <a href="https://space.bilibili.com/525836469" style="text-decoration: none" target="blank">NET视频教程(微软MVP-ACE录制)</a> 
 | 
      <a href="https://www.cctalk.com/m/group/90268531" style="text-decoration: none" target="blank">VOL框架视频</a> 
 | 
      <a href="http://120.48.115.252:9990" style="text-decoration: none" target="blank">视频演示地址</a> 
 | 
    </div> --> 
 | 
  
 | 
    <img class="login-bg" src="/static/login_bg.png" /> 
 | 
  </div> 
 | 
</template> 
 | 
  
 | 
  
 | 
<script > 
 | 
import { 
 | 
  defineComponent, 
 | 
  ref, 
 | 
  reactive, 
 | 
  toRefs, 
 | 
  getCurrentInstance 
 | 
} from 'vue'; 
 | 
import { useRouter, useRoute } from 'vue-router'; 
 | 
import store from '../store/index'; 
 | 
import http from '@/../src/api/http.js'; 
 | 
export default defineComponent({ 
 | 
  setup(props, context) { 
 | 
    store.commit('clearUserInfo', ''); 
 | 
    const loading = ref(false); 
 | 
    const codeImgSrc = ref(''); 
 | 
    const userInfo = reactive({ 
 | 
      userName: '', 
 | 
      password: '', 
 | 
      verificationCode: '', 
 | 
      UUID: undefined 
 | 
    }); 
 | 
  
 | 
    const getVierificationCode = () => { 
 | 
      http.get('/api/User/getVierificationCode').then((x) => { 
 | 
        codeImgSrc.value = 'data:image/png;base64,' + x.img; 
 | 
        userInfo.UUID = x.uuid; 
 | 
      }); 
 | 
    }; 
 | 
    getVierificationCode(); 
 | 
  
 | 
    let appContext = getCurrentInstance().appContext; 
 | 
    let $message = appContext.config.globalProperties.$message; 
 | 
    let router = useRouter(); 
 | 
  
 | 
    const login = () => { 
 | 
      if (!userInfo.userName) return $message.error('请输入用户名'); 
 | 
      if (!userInfo.password) return $message.error('请输入密码'); 
 | 
      if (!userInfo.verificationCode) { 
 | 
        return $message.error('请输入验证码'); 
 | 
      } 
 | 
      loading.value = true; 
 | 
      http.post('/api/User/login', userInfo, '正在登录....').then((result) => { 
 | 
        if (!result.status) { 
 | 
          loading.value = false; 
 | 
          getVierificationCode(); 
 | 
          return $message.error(result.message); 
 | 
        } 
 | 
        $message.success('登录成功,正在跳转!'); 
 | 
        store.commit('setUserInfo', result.data); 
 | 
        router.push({ path: '/' }); 
 | 
      }); 
 | 
    }; 
 | 
    const loginPress = (e) => { 
 | 
      if (e.keyCode == 13) { 
 | 
        login(); 
 | 
      } 
 | 
    }; 
 | 
    const openUrl = (url) => { 
 | 
      window.open(url, '_blank'); 
 | 
    }; 
 | 
    return { 
 | 
      loading, 
 | 
      codeImgSrc, 
 | 
      getVierificationCode, 
 | 
      login, 
 | 
      userInfo, 
 | 
      loginPress, 
 | 
      openUrl 
 | 
    }; 
 | 
  }, 
 | 
  directives: { 
 | 
    focus: { 
 | 
      inserted: function (el) { 
 | 
        el.focus(); 
 | 
      } 
 | 
    } 
 | 
  } 
 | 
}); 
 | 
</script> 
 | 
<style lang="less" scoped> 
 | 
.login-container { 
 | 
  display: flex; 
 | 
  width: 100%; 
 | 
  height: 100%; 
 | 
  background: rgb(246, 247, 252); 
 | 
  justify-content: flex-end; 
 | 
  align-items: center; 
 | 
} 
 | 
  
 | 
.login-form { 
 | 
  align-items: center; 
 | 
  width: 50%; 
 | 
  display: flex; 
 | 
  flex-direction: column; 
 | 
  // margin-right: 150px; 
 | 
  z-index: 999; 
 | 
  
 | 
  .form-user { 
 | 
    // margin: 25px 0; 
 | 
  
 | 
    .item { 
 | 
      border-radius: 5px; 
 | 
      border: 1px solid #ececec; 
 | 
      display: flex; 
 | 
      margin-bottom: 30px; 
 | 
      background: #ffff; 
 | 
      height: 45px; 
 | 
      padding-left: 20px; 
 | 
      display: flex; 
 | 
  
 | 
      .code { 
 | 
        position: relative; 
 | 
        cursor: pointer; 
 | 
        width: 74px; 
 | 
        padding: 5px 10px 0 0; 
 | 
      } 
 | 
  
 | 
      .input-icon { 
 | 
        line-height: 45px; 
 | 
        color: #7a7a7a; 
 | 
        padding-right: 20px; 
 | 
      } 
 | 
    } 
 | 
  } 
 | 
  
 | 
  input:-webkit-autofill { 
 | 
    box-shadow: 0 0 0px 1000px white inset; 
 | 
    -webkit-box-shadow: 0 0 0px 1000px white inset !important; 
 | 
  } 
 | 
  
 | 
  input { 
 | 
    background: white; 
 | 
    display: block; 
 | 
    box-sizing: border-box; 
 | 
    width: 100%; 
 | 
    min-width: 0; 
 | 
    margin: 0; 
 | 
    padding: 0; 
 | 
    color: #323233; 
 | 
    line-height: inherit; 
 | 
    text-align: left; 
 | 
    border: 0; 
 | 
    outline: none; 
 | 
    font-size: 16px; 
 | 
    line-height: 20px; 
 | 
  } 
 | 
} 
 | 
  
 | 
.form-user, 
 | 
.loging-btn { 
 | 
  width: 400px; 
 | 
} 
 | 
  
 | 
.loging-btn { 
 | 
  box-shadow: 2px 4px 11px #a4c2ff; 
 | 
  margin-top: 10px; 
 | 
  
 | 
  button { 
 | 
    padding: 21px; 
 | 
    font-size: 14px !important; 
 | 
    width: 100%; 
 | 
  } 
 | 
} 
 | 
  
 | 
.login-text { 
 | 
  font-weight: bolder; 
 | 
  font-size: 20px; 
 | 
  letter-spacing: 2px; 
 | 
  
 | 
  position: relative; 
 | 
  display: flex; 
 | 
  
 | 
  .login-line { 
 | 
    z-index: -1; 
 | 
    padding: 5px; 
 | 
    position: relative; 
 | 
    top: -8px; 
 | 
    width: 100%; 
 | 
    background-image: linear-gradient(to right, #6598ff, white); 
 | 
  } 
 | 
} 
 | 
  
 | 
.login-text-small { 
 | 
  margin-bottom: 20px; 
 | 
  font-size: 13px; 
 | 
  color: #7d7c7c; 
 | 
} 
 | 
  
 | 
.login-bg { 
 | 
  left: 0; 
 | 
  position: absolute; 
 | 
  height: 100%; 
 | 
  width: 50%; 
 | 
  z-index: 0; 
 | 
} 
 | 
  
 | 
.project-name { 
 | 
  position: absolute; 
 | 
  top: 40px; 
 | 
  left: 40px; 
 | 
  z-index: 9999; 
 | 
  font-weight: bolder; 
 | 
  background-image: linear-gradient(to right, #1850c1, #9c009c); 
 | 
  -webkit-background-clip: text; 
 | 
  color: transparent; 
 | 
  font-size: 25px; 
 | 
} 
 | 
</style> 
 | 
<style lang="less" scoped> 
 | 
.app-link { 
 | 
  // font-weight: bolder; 
 | 
  text-align: center; 
 | 
  padding-top: 5px; 
 | 
  font-size: 12px; 
 | 
  width: 400px; 
 | 
  padding-left: 40px; 
 | 
  display: flex; 
 | 
  
 | 
  a { 
 | 
    flex: 1; 
 | 
    position: relative; 
 | 
    cursor: pointer; 
 | 
    width: 70px; 
 | 
    color: #666666; 
 | 
    margin: 2px 10px 0 0; 
 | 
  } 
 | 
  
 | 
  img { 
 | 
    display: none; 
 | 
  } 
 | 
  
 | 
  a:hover { 
 | 
    color: #0545f6 !important; 
 | 
  
 | 
    img { 
 | 
      display: block; 
 | 
      position: absolute; 
 | 
      z-index: 999999999; 
 | 
      top: -130px; 
 | 
      width: 120px; 
 | 
      left: -22px; 
 | 
  
 | 
      border: 1px solid #b1b1b1; 
 | 
    } 
 | 
  } 
 | 
} 
 | 
  
 | 
.login-footer { 
 | 
  position: absolute; 
 | 
  width: 50%; 
 | 
  bottom: 0.5rem; 
 | 
  font-size: 12px; 
 | 
  text-align: center; 
 | 
  padding-bottom: 10px; 
 | 
  color: #4f4f4f; 
 | 
  
 | 
  a { 
 | 
    margin-right: 10px; 
 | 
    font-size: 12px; 
 | 
    color: #4f4f4f; 
 | 
  } 
 | 
  
 | 
  div { 
 | 
    margin-bottom: 5px; 
 | 
  } 
 | 
  
 | 
  a:hover { 
 | 
    cursor: pointer; 
 | 
    color: #0540e3 !important; 
 | 
  } 
 | 
} 
 | 
  
 | 
.account-info { 
 | 
  font-size: 12px; 
 | 
  color: #636363; 
 | 
  margin-top: 15px; 
 | 
} 
 | 
</style> 
 | 
  
 | 
<style lang="less" scoped> 
 | 
@media screen and (max-width: 700px) { 
 | 
  
 | 
  .login-bg, 
 | 
  .account-info, 
 | 
  .app-link, 
 | 
  .login-footer, 
 | 
  .project-name { 
 | 
    display: none; 
 | 
  } 
 | 
  
 | 
  .login-container { 
 | 
    padding: 2rem; 
 | 
    justify-content: center; 
 | 
  } 
 | 
  
 | 
  .login-form { 
 | 
    width: 100%; 
 | 
  } 
 | 
  
 | 
  .form-user, 
 | 
  .loging-btn { 
 | 
    width: 100%; 
 | 
  } 
 | 
} 
 | 
</style> 
 |