| | |
| | | <template> |
| | | <div> |
| | | <a-form-model ref="form" :model="model" :rules="validatorRules"> |
| | | <a-form-model-item required prop="username"> |
| | | <a-input v-model="model.username" size="large" placeholder="请输入帐户名 / admin"> |
| | | <a-icon slot="prefix" type="user" :style="{ color: 'rgba(0,0,0,.25)' }"/> |
| | | </a-input> |
| | | </a-form-model-item> |
| | | <a-form-model-item required prop="password"> |
| | | <a-input v-model="model.password" size="large" type="password" autocomplete="false" placeholder="请输入密码 / 123456"> |
| | | <a-icon slot="prefix" type="lock" :style="{ color: 'rgba(0,0,0,.25)' }"/> |
| | | </a-input> |
| | | </a-form-model-item> |
| | | <a-form-model ref="form" :model="model" :rules="validatorRules"> |
| | | <a-form-model-item required prop="username"> |
| | | <div class="login-input"> |
| | | <img src="../../assets/icons/account.png" height="25" style="margin-right: 10px"> |
| | | <a-input v-model="model.username" size="large" placeholder="用户名" ref="inputRef" @focus="inputFocus"/> |
| | | </div> |
| | | </a-form-model-item> |
| | | <a-form-model-item required prop="password"> |
| | | <div class="login-input"> |
| | | <img src="../../assets/icons/password.png" height="25" style="margin-right: 10px"> |
| | | <a-input v-model="model.password" size="large" type="password" autocomplete="false" |
| | | placeholder="密码"/> |
| | | </div> |
| | | </a-form-model-item> |
| | | |
| | | <a-row :gutter="0"> |
| | | <a-col :span="16"> |
| | | <a-form-model-item required prop="inputCode"> |
| | | <a-input v-model="model.inputCode" size="large" type="text" placeholder="请输入验证码"> |
| | | <a-icon slot="prefix" type="smile" :style="{ color: 'rgba(0,0,0,.25)' }"/> |
| | | </a-input> |
| | | </a-form-model-item> |
| | | </a-col> |
| | | <a-col :span="8" style="text-align: right"> |
| | | <img v-if="requestCodeSuccess" style="margin-top: 2px;" :src="randCodeImage" @click="handleChangeCheckCode"/> |
| | | <img v-else style="margin-top: 2px;" src="../../assets/checkcode.png" @click="handleChangeCheckCode"/> |
| | | </a-col> |
| | | </a-row> |
| | | </a-form-model> |
| | | </div> |
| | | <a-row :gutter="0" style="height: 40px"> |
| | | <a-col :span="16"> |
| | | <a-form-model-item required prop="inputCode"> |
| | | <div class="login-input"> |
| | | <img src="../../assets/icons/inputCode.png" height="25" style="margin-right: 10px"> |
| | | <a-input v-model="model.inputCode" size="large" type="text" placeholder="请输入验证码"/> |
| | | </div> |
| | | </a-form-model-item> |
| | | </a-col> |
| | | <a-col :span="8" style="height: 55px;display: flex;justify-content: right;align-items: center;padding-left: 15px"> |
| | | <img v-if="requestCodeSuccess" style="height: 45px;width:100%;border-radius: 15px;" :src="randCodeImage" |
| | | @click="handleChangeCheckCode"/> |
| | | <img v-else style="margin-top: 2px;" src="../../assets/checkcode.png" @click="handleChangeCheckCode"/> |
| | | </a-col> |
| | | </a-row> |
| | | </a-form-model> |
| | | </template> |
| | | |
| | | <script> |
| | |
| | | |
| | | export default { |
| | | name: 'LoginAccount', |
| | | data(){ |
| | | data() { |
| | | return { |
| | | requestCodeSuccess: false, |
| | | randCodeImage: '', |
| | | currdatetime: '', |
| | | loginType: 0, |
| | | model:{ |
| | | model: { |
| | | username: 'admin', |
| | | password: '123456', |
| | | inputCode: '' |
| | | }, |
| | | validatorRules:{ |
| | | validatorRules: { |
| | | username: [ |
| | | { required: true, message: '请输入用户名!' }, |
| | | { validator: this.handleUsernameOrEmail } |
| | |
| | | } |
| | | }, |
| | | created() { |
| | | this.handleChangeCheckCode(); |
| | | this.handleChangeCheckCode() |
| | | }, |
| | | methods:{ |
| | | methods: { |
| | | ...mapActions(['Login']), |
| | | /**刷新验证码*/ |
| | | handleChangeCheckCode(){ |
| | | this.currdatetime = new Date().getTime(); |
| | | handleChangeCheckCode() { |
| | | this.currdatetime = new Date().getTime() |
| | | this.model.inputCode = '' |
| | | getAction(`/sys/randomImage/${this.currdatetime}`).then(res=>{ |
| | | if(res.success){ |
| | | getAction(`/sys/randomImage/${this.currdatetime}`).then(res => { |
| | | if (res.success) { |
| | | this.randCodeImage = res.result |
| | | this.requestCodeSuccess=true |
| | | }else{ |
| | | this.requestCodeSuccess = true |
| | | } else { |
| | | this.$message.error(res.message) |
| | | this.requestCodeSuccess=false |
| | | this.requestCodeSuccess = false |
| | | } |
| | | }).catch(()=>{ |
| | | this.requestCodeSuccess=false |
| | | }).catch(() => { |
| | | this.requestCodeSuccess = false |
| | | }) |
| | | }, |
| | | // 判断登录类型 |
| | | handleUsernameOrEmail (rule, value, callback) { |
| | | const regex = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/; |
| | | handleUsernameOrEmail(rule, value, callback) { |
| | | const regex = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/ |
| | | if (regex.test(value)) { |
| | | this.loginType = 0 |
| | | } else { |
| | |
| | | * @param arr |
| | | * @param callback |
| | | */ |
| | | validateFields(arr, callback){ |
| | | validateFields(arr, callback) { |
| | | let promiseArray = [] |
| | | for(let item of arr){ |
| | | for (let item of arr) { |
| | | let p = new Promise((resolve, reject) => { |
| | | this.$refs['form'].validateField(item, (err)=>{ |
| | | if(!err){ |
| | | resolve(); |
| | | }else{ |
| | | reject(err); |
| | | this.$refs['form'].validateField(item, (err) => { |
| | | if (!err) { |
| | | resolve() |
| | | } else { |
| | | reject(err) |
| | | } |
| | | }) |
| | | }); |
| | | }) |
| | | promiseArray.push(p) |
| | | } |
| | | Promise.all(promiseArray).then(()=>{ |
| | | Promise.all(promiseArray).then(() => { |
| | | callback() |
| | | }).catch(err=>{ |
| | | }).catch(err => { |
| | | callback(err) |
| | | }) |
| | | }, |
| | | acceptUsername(username){ |
| | | acceptUsername(username) { |
| | | this.model['username'] = username |
| | | }, |
| | | //账号密码登录 |
| | | handleLogin(rememberMe){ |
| | | this.validateFields([ 'username', 'password', 'inputCode' ], (err)=>{ |
| | | if(!err){ |
| | | handleLogin(rememberMe) { |
| | | this.validateFields(['username', 'password', 'inputCode'], (err) => { |
| | | if (!err) { |
| | | let loginParams = { |
| | | username: this.model.username, |
| | | password: this.model.password, |
| | | captcha: this.model.inputCode, |
| | | checkKey: this.currdatetime, |
| | | remember_me: rememberMe, |
| | | remember_me: rememberMe |
| | | } |
| | | console.log("登录参数", loginParams) |
| | | console.log('登录参数', loginParams) |
| | | this.Login(loginParams).then((res) => { |
| | | this.$emit('success', res.result) |
| | | }).catch((err) => { |
| | | //update-begin-author: taoyan date:20220425 for: 登录页面,当输入验证码错误时,验证码图片要刷新一下,而不是保持旧的验证码图片不变 #41 |
| | | if(err && err.code===412){ |
| | | this.handleChangeCheckCode(); |
| | | if (err && err.code === 412) { |
| | | this.handleChangeCheckCode() |
| | | } |
| | | //update-end-author: taoyan date:20220425 for: 登录页面,当输入验证码错误时,验证码图片要刷新一下,而不是保持旧的验证码图片不变 #41 |
| | | this.$emit('fail', err) |
| | | }); |
| | | }else{ |
| | | }) |
| | | } else { |
| | | this.$emit('validateFail') |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | |
| | | inputFocus() { |
| | | console.log('触发focus', this.$refs.inputRef.$el.style) |
| | | this.$refs.inputRef.$el.style = 'background-color:#f00' |
| | | } |
| | | |
| | | } |
| | | |
| | |
| | | |
| | | <style scoped> |
| | | |
| | | |
| | | </style> |