|
@@ -5,56 +5,70 @@
|
|
|
<img src="../assets/logo.png" width="269" height="65"/>
|
|
|
</h3>
|
|
|
<el-card class="box-card">
|
|
|
- <el-form
|
|
|
- class="card-box"
|
|
|
- autocomplete="on"
|
|
|
- :model="loginForm"
|
|
|
- :rules="loginRules"
|
|
|
- ref="loginForm"
|
|
|
- label-position="left"
|
|
|
- >
|
|
|
- <el-form-item prop="userName">
|
|
|
- <i class="el-icon-user-solid"></i>
|
|
|
- <el-input
|
|
|
- name="userName"
|
|
|
- type="text"
|
|
|
- v-model="loginForm.userName"
|
|
|
+ <el-tabs v-model="activeName" @tab-click="handleTabClick">
|
|
|
+ <el-tab-pane label="用户名登录" name="first">
|
|
|
+ <el-form
|
|
|
+ class="card-box"
|
|
|
autocomplete="on"
|
|
|
- placeholder="请输入用户名"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item prop="password">
|
|
|
- <i class="el-icon-lock"></i>
|
|
|
- <el-input
|
|
|
- name="password"
|
|
|
- :type="pwdType"
|
|
|
- @keyup.enter.native="handleLogin"
|
|
|
- v-model="loginForm.password"
|
|
|
- autocomplete="on"
|
|
|
- placeholder="请输入密码"
|
|
|
- />
|
|
|
- <i class="el-icon-view" @click="showPwd"></i>
|
|
|
- </el-form-item>
|
|
|
- <el-button
|
|
|
- type="primary"
|
|
|
- style="width:100%;margin-bottom:30px;"
|
|
|
- :loading="loading"
|
|
|
- @click.native.prevent="handleLogin"
|
|
|
- class="blue-btn"
|
|
|
- >登录</el-button>
|
|
|
- </el-form>
|
|
|
+ :model="loginForm"
|
|
|
+ :rules="loginRules"
|
|
|
+ ref="loginForm"
|
|
|
+ label-position="left"
|
|
|
+ >
|
|
|
+ <el-form-item prop="userName">
|
|
|
+ <i class="el-icon-user-solid"></i>
|
|
|
+ <el-input
|
|
|
+ name="userName"
|
|
|
+ type="text"
|
|
|
+ v-model="loginForm.userName"
|
|
|
+ autocomplete="on"
|
|
|
+ placeholder="请输入用户名"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="password">
|
|
|
+ <i class="el-icon-lock"></i>
|
|
|
+ <el-input
|
|
|
+ name="password"
|
|
|
+ :type="pwdType"
|
|
|
+ @keyup.enter.native="handleLogin"
|
|
|
+ v-model="loginForm.password"
|
|
|
+ autocomplete="on"
|
|
|
+ placeholder="请输入密码"
|
|
|
+ />
|
|
|
+ <i class="el-icon-view" @click="showPwd"></i>
|
|
|
+ </el-form-item>
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ style="width:100%;margin-bottom:30px;"
|
|
|
+ :loading="loading"
|
|
|
+ @click.native.prevent="handleLogin"
|
|
|
+ class="blue-btn"
|
|
|
+ >登录</el-button>
|
|
|
+ </el-form>
|
|
|
+ </el-tab-pane>
|
|
|
+ <el-tab-pane label="微信扫码登录" name="second">
|
|
|
+ <div style="text-align:center;" v-loading="loading">
|
|
|
+ <img :src="qrcodeUrl" style="width:300px;fit-object:cover;"/>
|
|
|
+ <div>扫码后,页面将自动跳转......</div>
|
|
|
+ </div>
|
|
|
+ </el-tab-pane>
|
|
|
+ </el-tabs>
|
|
|
</el-card>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
<script>
|
|
|
+import userApi from "@/api/sys/user";
|
|
|
import Constant from "@/constant";
|
|
|
import { Message } from "element-ui";
|
|
|
+import { setToken} from '@/utils/auth'
|
|
|
|
|
|
export default {
|
|
|
name: "login",
|
|
|
data() {
|
|
|
return {
|
|
|
+ activeName: "first",
|
|
|
+ rnd : Math.ceil(Math.random()*1000000),
|
|
|
loginForm: {
|
|
|
userName: "",
|
|
|
password: ""
|
|
@@ -75,7 +89,9 @@ export default {
|
|
|
},
|
|
|
pwdType: "password",
|
|
|
loading: false,
|
|
|
- redirect: undefined
|
|
|
+ redirect: undefined,
|
|
|
+ qrcodeUrl: "",
|
|
|
+ queryScanResultHandler: 0
|
|
|
};
|
|
|
},
|
|
|
watch: {
|
|
@@ -128,7 +144,52 @@ export default {
|
|
|
}
|
|
|
});
|
|
|
},
|
|
|
- afterQRScan() {}
|
|
|
+ showQrcode() {
|
|
|
+ this.loading = true;
|
|
|
+
|
|
|
+ userApi.scanLogin(this.rnd).then(response=>{
|
|
|
+ var jsonData = response.data;
|
|
|
+ this.loading = false;
|
|
|
+
|
|
|
+ if(jsonData.result){
|
|
|
+ this.qrcodeUrl = jsonData.data;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ this.$message.warning(jsonData.message);
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ this.queryScanResult();
|
|
|
+ },
|
|
|
+ queryScanResult() {
|
|
|
+ userApi.queryScanResult(this.rnd).then(response=>{
|
|
|
+ var jsonData = response.data;
|
|
|
+
|
|
|
+ if(jsonData.result){
|
|
|
+ var token = jsonData.data;
|
|
|
+
|
|
|
+ //写vuex状态
|
|
|
+ this.$store.commit("user/SET_TOKEN", token);
|
|
|
+
|
|
|
+ //写cookie
|
|
|
+ setToken(token);
|
|
|
+
|
|
|
+ this.$router.push({ path: "/home" });
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ if(this.activeName=="second"){
|
|
|
+ setTimeout(() => {
|
|
|
+ this.queryScanResult();
|
|
|
+ }, 3000);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ handleTabClick(tab, event) {
|
|
|
+ if(this.activeName=='second'){
|
|
|
+ this.showQrcode();
|
|
|
+ }
|
|
|
+ }
|
|
|
},
|
|
|
created() {
|
|
|
// window.addEventListener('hashchange', this.afterQRScan)
|