| | |
| | | <template> |
| | | <div class="login-container"> |
| | | <!-- <el-form |
| | | ref="loginForm" |
| | | :model="loginForm" |
| | | :rules="loginRules" |
| | | class="login-form" |
| | | auto-complete="on" |
| | | label-position="left" |
| | | > |
| | | <div class="title-container"> |
| | | <h3 class="title">Login Form</h3> |
| | | </div> |
| | | |
| | | <el-form-item prop="username"> |
| | | <span class="svg-container"> |
| | | <svg-icon icon-class="user" /> |
| | | </span> |
| | | <el-input |
| | | ref="username" |
| | | v-model="loginForm.username" |
| | | placeholder="Username" |
| | | name="username" |
| | | type="text" |
| | | tabindex="1" |
| | | auto-complete="on" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item prop="password"> |
| | | <span class="svg-container"> |
| | | <svg-icon icon-class="password" /> |
| | | </span> |
| | | <el-input |
| | | :key="passwordType" |
| | | ref="password" |
| | | v-model="loginForm.password" |
| | | :type="passwordType" |
| | | placeholder="Password" |
| | | name="password" |
| | | tabindex="2" |
| | | auto-complete="on" |
| | | @keyup.enter.native="handleLogin" |
| | | /> |
| | | <span class="show-pwd" @click="showPwd"> |
| | | <svg-icon |
| | | :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" |
| | | /> |
| | | </span> |
| | | </el-form-item> |
| | | |
| | | <el-button |
| | | :loading="loading" |
| | | type="primary" |
| | | style="width: 100%; margin-bottom: 30px" |
| | | @click.native.prevent="handleLogin" |
| | | >Login</el-button |
| | | > |
| | | |
| | | <div class="tips"> |
| | | <span style="margin-right: 20px">username: admin</span> |
| | | <span> password: any</span> |
| | | </div> |
| | | </el-form> --> |
| | | <div class="wxLogin"> |
| | | <el-card class="main_wx"> |
| | | <wxlogin |
| | | :appid="appid" |
| | | :redirect_uri="redirect_uri" |
| | | scope="snsapi_login" |
| | | :href="href" |
| | | :state="state" |
| | | ></wxlogin> |
| | | <!-- <el-button @click="handleLogin">开发环境专用偷渡按钮</el-button> --> |
| | | </el-card> |
| | | <div class="login-container"> |
| | | <div class="wxLogin"> |
| | | <el-card class="main_wx"> |
| | | <wxlogin |
| | | :appid="appid" |
| | | :redirect_uri="redirect_uri" |
| | | scope="snsapi_login" |
| | | :href="href" |
| | | :state="state" |
| | | ></wxlogin> |
| | | </el-card> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { validUsername } from "@/utils/validate"; |
| | | import wxlogin from "vue-wxlogin"; |
| | | export default { |
| | | name: "Login", |
| | | components: { wxlogin }, |
| | | data() { |
| | | const validateUsername = (rule, value, callback) => { |
| | | if (!validUsername(value)) { |
| | | callback(new Error("Please enter the correct user name")); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | const validatePassword = (rule, value, callback) => { |
| | | if (value.length < 6) { |
| | | callback(new Error("The password can not be less than 6 digits")); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | return { |
| | | appid: "wx7103925df6236723", |
| | | redirect_uri: encodeURIComponent("https://dingdang.9village.cn/#/student"), |
| | | state: "1", |
| | | href: "data:text/css;base64,LmltcG93ZXJCb3ggLnFyY29kZSB7CiAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgICB3aWR0aDogMTQwcHg7CiAgICAgICAgICBoZWlnaHQ6IDE0MHB4OwogICAgICAgIH0=", // 自定义样式链接 |
| | | loginForm: { |
| | | username: "admin", |
| | | password: "111111", |
| | | }, |
| | | loginRules: { |
| | | username: [ |
| | | { required: true, trigger: "blur", validator: validateUsername }, |
| | | ], |
| | | password: [ |
| | | { required: true, trigger: "blur", validator: validatePassword }, |
| | | ], |
| | | }, |
| | | loading: false, |
| | | passwordType: "password", |
| | | redirect: undefined, |
| | | }; |
| | | }, |
| | | watch: { |
| | | $route: { |
| | | handler: function (route) { |
| | | this.redirect = route.query && route.query.redirect; |
| | | }, |
| | | immediate: true, |
| | | name: "Login", |
| | | components: { wxlogin }, |
| | | data() { |
| | | const validateUsername = (rule, value, callback) => { |
| | | if (!validUsername(value)) { |
| | | callback(new Error("Please enter the correct user name")); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | const validatePassword = (rule, value, callback) => { |
| | | if (value.length < 6) { |
| | | callback(new Error("The password can not be less than 6 digits")); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | return { |
| | | appid: "wx7103925df6236723", |
| | | redirect_uri: encodeURIComponent("https://dingdang.9village.cn/#/student"), |
| | | state: "1", |
| | | href: "data:text/css;base64,LmltcG93ZXJCb3ggLnFyY29kZSB7CiAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgICB3aWR0aDogMTQwcHg7CiAgICAgICAgICBoZWlnaHQ6IDE0MHB4OwogICAgICAgIH0=", // 自定义样式链接 |
| | | loginForm: { |
| | | username: "admin", |
| | | password: "111111", |
| | | }, |
| | | loginRules: { |
| | | username: [ |
| | | { required: true, trigger: "blur", validator: validateUsername }, |
| | | ], |
| | | password: [ |
| | | { required: true, trigger: "blur", validator: validatePassword }, |
| | | ], |
| | | }, |
| | | loading: false, |
| | | passwordType: "password", |
| | | redirect: undefined, |
| | | }; |
| | | }, |
| | | }, |
| | | mounted() { |
| | | this.getWeChatUrl(); |
| | | }, |
| | | methods: { |
| | | getWeChatUrl() { |
| | | // api.wachatQrUrl().then(res => { |
| | | // if (res && res.code === '0000') { |
| | | // const data = res.data |
| | | // this.appid = data.appId |
| | | // this.redirect_uri = data.wxCallbackUrl + 'weChatLogin' |
| | | // } |
| | | // }) |
| | | watch: { |
| | | $route: { |
| | | handler: function (route) { |
| | | this.redirect = route.query && route.query.redirect; |
| | | }, |
| | | immediate: true, |
| | | }, |
| | | }, |
| | | showPwd() { |
| | | if (this.passwordType === "password") { |
| | | this.passwordType = ""; |
| | | } else { |
| | | this.passwordType = "password"; |
| | | } |
| | | this.$nextTick(() => { |
| | | this.$refs.password.focus(); |
| | | }); |
| | | mounted() { |
| | | this.getWeChatUrl(); |
| | | }, |
| | | handleLogin() { |
| | | this.$router.push({ path: "/educational/student" }); |
| | | // this.$refs.loginForm.validate((valid) => { |
| | | // if (valid) { |
| | | // this.loading = true; |
| | | // this.$store |
| | | // .dispatch("user/login", this.loginForm) |
| | | // .then(() => { |
| | | // this.$router.push({ path: this.redirect || "/" }); |
| | | // this.loading = false; |
| | | // }) |
| | | // .catch(() => { |
| | | // this.loading = false; |
| | | // }); |
| | | // } else { |
| | | // console.log("error submit!!"); |
| | | // return false; |
| | | // } |
| | | // }); |
| | | methods: { |
| | | getWeChatUrl() { |
| | | // api.wachatQrUrl().then(res => { |
| | | // if (res && res.code === '0000') { |
| | | // const data = res.data |
| | | // this.appid = data.appId |
| | | // this.redirect_uri = data.wxCallbackUrl + 'weChatLogin' |
| | | // } |
| | | // }) |
| | | }, |
| | | showPwd() { |
| | | if (this.passwordType === "password") { |
| | | this.passwordType = ""; |
| | | } else { |
| | | this.passwordType = "password"; |
| | | } |
| | | this.$nextTick(() => { |
| | | this.$refs.password.focus(); |
| | | }); |
| | | }, |
| | | handleLogin() { |
| | | this.$router.push({ path: "/educational/student" }); |
| | | // this.$refs.loginForm.validate((valid) => { |
| | | // if (valid) { |
| | | // this.loading = true; |
| | | // this.$store |
| | | // .dispatch("user/login", this.loginForm) |
| | | // .then(() => { |
| | | // this.$router.push({ path: this.redirect || "/" }); |
| | | // this.loading = false; |
| | | // }) |
| | | // .catch(() => { |
| | | // this.loading = false; |
| | | // }); |
| | | // } else { |
| | | // console.log("error submit!!"); |
| | | // return false; |
| | | // } |
| | | // }); |
| | | }, |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | |
| | | $cursor: #fff; |
| | | |
| | | @supports (-webkit-mask: none) and (not (cater-color: $cursor)) { |
| | | .login-container .el-input input { |
| | | color: $cursor; |
| | | } |
| | | .login-container .el-input input { |
| | | color: $cursor; |
| | | } |
| | | } |
| | | |
| | | /* reset element-ui css */ |
| | | .login-container { |
| | | // background-image: url('https://s1.locimg.com/2024/09/12/891ab39f72938.png'); |
| | | // background-size: contain; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | .el-input { |
| | | display: inline-block; |
| | | height: 47px; |
| | | width: 85%; |
| | | background-image: url('../../assets/login_backgroup.png'); |
| | | // background-size: contain; |
| | | background-size: auto 100%; |
| | | background-position: center center; |
| | | /* 背景图不平铺 */ |
| | | background-repeat: no-repeat; |
| | | /* 当内容高度大于图片高度时,背景图像的位置相对于viewport固定 */ |
| | | background-attachment: fixed; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | .el-input { |
| | | display: inline-block; |
| | | height: 47px; |
| | | width: 85%; |
| | | |
| | | input { |
| | | background: transparent; |
| | | border: 0px; |
| | | -webkit-appearance: none; |
| | | border-radius: 0px; |
| | | padding: 12px 5px 12px 15px; |
| | | color: $light_gray; |
| | | height: 47px; |
| | | caret-color: $cursor; |
| | | input { |
| | | background: transparent; |
| | | border: 0px; |
| | | -webkit-appearance: none; |
| | | border-radius: 0px; |
| | | padding: 12px 5px 12px 15px; |
| | | color: $light_gray; |
| | | height: 47px; |
| | | caret-color: $cursor; |
| | | |
| | | &:-webkit-autofill { |
| | | box-shadow: 0 0 0px 1000px $bg inset !important; |
| | | -webkit-text-fill-color: $cursor !important; |
| | | } |
| | | &:-webkit-autofill { |
| | | box-shadow: 0 0 0px 1000px $bg inset !important; |
| | | -webkit-text-fill-color: $cursor !important; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .el-form-item { |
| | | border: 1px solid rgba(255, 255, 255, 0.1); |
| | | background: rgba(0, 0, 0, 0.1); |
| | | border-radius: 5px; |
| | | color: #454545; |
| | | } |
| | | .el-form-item { |
| | | border: 1px solid rgba(255, 255, 255, 0.1); |
| | | background: rgba(0, 0, 0, 0.1); |
| | | border-radius: 5px; |
| | | color: #454545; |
| | | } |
| | | } |
| | | #weixin{ |
| | | #weixin { |
| | | /* background-color: #fcf; */ |
| | | display: flex; |
| | | justify-content: center; |
| | |
| | | $light_gray: #eee; |
| | | |
| | | .login-container { |
| | | min-height: 100%; |
| | | width: 100%; |
| | | background-color: $bg; |
| | | overflow: hidden; |
| | | |
| | | .login-form { |
| | | position: relative; |
| | | width: 520px; |
| | | max-width: 100%; |
| | | padding: 160px 35px 0; |
| | | margin: 0 auto; |
| | | min-height: 100%; |
| | | width: 100%; |
| | | background-color: $bg; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .tips { |
| | | font-size: 14px; |
| | | color: #fff; |
| | | margin-bottom: 10px; |
| | | |
| | | span { |
| | | &:first-of-type { |
| | | margin-right: 16px; |
| | | } |
| | | .login-form { |
| | | position: relative; |
| | | width: 520px; |
| | | max-width: 100%; |
| | | padding: 160px 35px 0; |
| | | margin: 0 auto; |
| | | overflow: hidden; |
| | | } |
| | | } |
| | | |
| | | .svg-container { |
| | | padding: 6px 5px 6px 15px; |
| | | color: $dark_gray; |
| | | vertical-align: middle; |
| | | width: 30px; |
| | | display: inline-block; |
| | | } |
| | | .tips { |
| | | font-size: 14px; |
| | | color: #fff; |
| | | margin-bottom: 10px; |
| | | |
| | | .title-container { |
| | | position: relative; |
| | | |
| | | .title { |
| | | font-size: 26px; |
| | | color: $light_gray; |
| | | margin: 0px auto 40px auto; |
| | | text-align: center; |
| | | font-weight: bold; |
| | | span { |
| | | &:first-of-type { |
| | | margin-right: 16px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .show-pwd { |
| | | position: absolute; |
| | | right: 10px; |
| | | top: 7px; |
| | | font-size: 16px; |
| | | color: $dark_gray; |
| | | cursor: pointer; |
| | | user-select: none; |
| | | } |
| | | .svg-container { |
| | | padding: 6px 5px 6px 15px; |
| | | color: $dark_gray; |
| | | vertical-align: middle; |
| | | width: 30px; |
| | | display: inline-block; |
| | | } |
| | | |
| | | .title-container { |
| | | position: relative; |
| | | |
| | | .title { |
| | | font-size: 26px; |
| | | color: $light_gray; |
| | | margin: 0px auto 40px auto; |
| | | text-align: center; |
| | | font-weight: bold; |
| | | } |
| | | } |
| | | |
| | | .show-pwd { |
| | | position: absolute; |
| | | right: 10px; |
| | | top: 7px; |
| | | font-size: 16px; |
| | | color: $dark_gray; |
| | | cursor: pointer; |
| | | user-select: none; |
| | | } |
| | | } |
| | | </style> |