| | |
| | | <!-- </a-tab-pane>--> |
| | | <!-- </a-tabs>--> |
| | | <div style="margin-bottom: 20px"> |
| | | <a-checkbox :checked="isAuto" style="color:#fff;">自动登录</a-checkbox> |
| | | <a-checkbox :checked="saveAccount" style="color:#fff;" @change="isSave">记住密码</a-checkbox> |
| | | <!-- <a style="float: right">忘记密码</a>--> |
| | | </div> |
| | | <a-form-item style="text-align: center"> |
| | | <div style="margin-bottom: 20px;height: auto;width: 100%;background-color: white;border-radius: 5px"> |
| | | <div style="margin-left: 10px;display: flex;align-items: center;justify-content: space-between;padding: 0px 12px;"> |
| | | <div v-if="keyMsg"> |
| | | <a-icon style="color: lightcoral" type="exclamation-circle"/> |
| | | <span style="margin-left: 5px;line-height: 45px;font-size: 16px;color: lightcoral">{{keyMsg}}</span> |
| | | </div> |
| | | <div v-else> |
| | | <a-icon style="color: #52c41a" type="check-circle"/> |
| | | <span style="margin-left: 5px;line-height: 45px;font-size: 16px;color: #52c41a">加密证书检测成功</span> |
| | | </div> |
| | | <a-button |
| | | type="primary" |
| | | html-type="submit" |
| | | style="width: 20%;" |
| | | size="small" |
| | | @click="checkKey" |
| | | > |
| | | 重新检测 |
| | | </a-button> |
| | | </div> |
| | | </div> |
| | | <div style="margin-bottom: 20px;float: right;" > |
| | | <span style="color: #1890ff;cursor: pointer" @click="downLoadLKey">驱动下载</span> |
| | | </div> |
| | | |
| | | <div style="text-align: center"> |
| | | <a-button |
| | | type="primary" |
| | | html-type="submit" |
| | |
| | | size="large" |
| | | @click="handleSubmit" |
| | | :loading="isLoading" |
| | | v-preventReClick="1500" |
| | | > |
| | | 登录 |
| | | </a-button> |
| | | </a-form-item> |
| | | <center><p>技术支持:中国科学院</p></center> |
| | | </div> |
| | | <center><p>技术支持:技术保障部</p></center> |
| | | </a-form-model> |
| | | </div> |
| | | </div> |
| | |
| | | |
| | | import { login, getMenuAdmin } from "@/api/login"; |
| | | import Cookies from 'js-cookie'; |
| | | import {Base64} from "js-base64"; |
| | | import SoftKey3W from './Syunew3W.js' |
| | | |
| | | export default { |
| | | name: "login", |
| | | data() { |
| | | return { |
| | | isLoading: false, |
| | | isAuto: false, |
| | | saveAccount: false, |
| | | // hasErrors, |
| | | // form: this.$form.createForm(this), |
| | | form: { |
| | | name: '', |
| | | pwd: '' |
| | | pwd: '', |
| | | keyId:'',//锁id |
| | | keyUserName:'',//锁中的用户身份 |
| | | returnEncData:'',//签名数据 |
| | | rnd:"123"//随机字符 |
| | | }, |
| | | rules: { |
| | | name: [{ required: true, message: '请输入用户名', trigger: 'blur' }], |
| | | pwd: [{ required: true, message: '请输入用户密码', trigger: 'blur' }] |
| | | }, |
| | | menu: [] |
| | | menu: [], |
| | | keyMsg: '未检测到加密证书,请确保已连接', |
| | | }; |
| | | }, |
| | | created() { |
| | | // this.$nextTick(() => { |
| | | // this.form.validateFields(); |
| | | // }); |
| | | this.hasUserCodeOrPassword() |
| | | //检测key |
| | | this.checkKey() |
| | | }, |
| | | methods: { |
| | | handleSubmit() { |
| | | downLoadLKey () { |
| | | console.log('222') |
| | | const { href } = this.$router.resolve({ |
| | | path: '/downKey' |
| | | }) |
| | | window.open(href,'_blank') |
| | | |
| | | }, |
| | | hasUserCodeOrPassword(){ |
| | | if (localStorage.getItem('userName') && localStorage.getItem('userPassword')) { |
| | | this.form.name = localStorage.getItem('userName') |
| | | this.form.pwd = Base64.decode(localStorage.getItem('userPassword'))//解密 |
| | | this.saveAccount = true |
| | | } |
| | | }, |
| | | async checkKey() { |
| | | let mSoftKey3A = new SoftKey3W();//注意,由于USB的操作是异步的,所以所有函数的调用前必须加await !!!!!!!!! |
| | | let DevicePath = await mSoftKey3A.FindPort(1);//'查找是否存在多把加密锁 |
| | | if (mSoftKey3A.GetLastError() == 0) { |
| | | this.keyMsg = "系统发现有2把及以上的加密证书" |
| | | return false |
| | | } |
| | | DevicePath = await mSoftKey3A.FindPort(0);//'查找是否存在加密锁 |
| | | if (mSoftKey3A.GetLastError() != 0) { |
| | | this.keyMsg = "未检测到加密证书,请确保已连接" |
| | | return false |
| | | } |
| | | this.keyMsg = "" |
| | | }, |
| | | |
| | | isSave(e){ |
| | | const t = this |
| | | t.saveAccount = !t.saveAccount |
| | | }, |
| | | async checkUsbkeyData(){ |
| | | let mSoftKey3A = new SoftKey3W();//注意,由于USB的操作是异步的,所以所有函数的调用前必须加await !!!!!!!!! |
| | | let DevicePath = await mSoftKey3A.FindPort(1);//'查找是否存在多把加密锁 |
| | | console.log(mSoftKey3A,'mSoftKey3A') |
| | | if (mSoftKey3A.GetLastError() == 0) { |
| | | this.keyMsg = "系统发现有2把及以上的加密证书" |
| | | this.$message.warning( "系统发现有2把及以上的加密证书"); |
| | | return false |
| | | } |
| | | DevicePath = await mSoftKey3A.FindPort(0);//'查找是否存在加密锁 |
| | | if (mSoftKey3A.GetLastError() != 0) { |
| | | this.keyMsg = "未检测到加密证书,请确保已连接" |
| | | this.$message.warning( "未检测到加密证书,请确保已连接"); |
| | | return false |
| | | } |
| | | console.log(DevicePath,'devpathhh') |
| | | //'读取锁的唯一ID |
| | | this.form.keyId=await mSoftKey3A.GetChipID(DevicePath); |
| | | |
| | | if( mSoftKey3A.GetLastError()!= 0 ) |
| | | { |
| | | this.$message.warning("返回芯片唯一ID时出现错误,错误码为:"+mSoftKey3A.GetLastError().toString()) |
| | | return false |
| | | } |
| | | console.log(this.form.keyId,'this.form.keyId') |
| | | //从锁中取出用户身份,与签名后的数据一并送到服务端进行验证。以验证用户身份 |
| | | this.form.keyUserName=await mSoftKey3A.GetSm2UserName(DevicePath); |
| | | |
| | | if( mSoftKey3A.GetLastError()!= 0 ) |
| | | { |
| | | this.$message.warning( "返回用户身份时出现错误,错误码为:"+mSoftKey3A.GetLastError().toString()); |
| | | return false |
| | | } |
| | | console.log(this.form.keyUserName,'this.form.keyUserName') |
| | | //使用默认的PIN码 |
| | | var Pin="123" |
| | | //这里使用锁中的私钥对身份-用户名及消息-随机数的进行数字签名,使用默认的PIN码,返回签名后的数据 |
| | | this.form.rnd=String(parseInt(Math.random()*(65536+1),10)); |
| | | this.form.returnEncData=await mSoftKey3A.YtSign(this.form.rnd,Pin,DevicePath); |
| | | if( mSoftKey3A.GetLastError()!= 0 ) |
| | | { |
| | | this.$message.warning( "进行签名时出现错误,错误码为:"+mSoftKey3A.GetLastError().toString()); |
| | | return false |
| | | } |
| | | if(this.form.name!=this.form.keyUserName){ |
| | | this.$message.warning( "用户身份不一致,无法登陆"); |
| | | return false |
| | | } |
| | | console.log(this.form.returnEncData,'this.form.returnEncData') |
| | | console.log(this.form,'this.form') |
| | | return true |
| | | }, |
| | | |
| | | async handleSubmit() { |
| | | this.$refs.ruleForm.validate(async (valid) => { |
| | | if (valid) { |
| | | let checkUsb=await this.checkUsbkeyData() |
| | | if(!checkUsb){ |
| | | return |
| | | } |
| | | this.isLoading = true |
| | | const res = await login(this.form) |
| | | if (res.data.code === 100) { |
| | | Cookies.set('resTk', res.data.data.tk); |
| | | Cookies.set('resUid', res.data.data.uid); |
| | | Cookies.set('userInfo',JSON.stringify(res.data.data),{expires: 7}) |
| | | if (this.saveAccount) { |
| | | localStorage.setItem('userName', this.form.name) |
| | | localStorage.setItem('userPassword', Base64.encode(this.form.pwd)) |
| | | } else { |
| | | localStorage.removeItem('userName') |
| | | localStorage.removeItem('userPassword') |
| | | } |
| | | this.$router.push('/home') |
| | | } else { |
| | | this.$message.warning(res.data.msg); |
| | |
| | | return false; |
| | | } |
| | | }); |
| | | } |
| | | }, |
| | | |
| | | }, |
| | | }; |
| | | </script> |
| | |
| | | h1{font-size: 48px;color:#fff;} |
| | | } |
| | | .login { |
| | | |
| | | |
| | | .login-form { |
| | | width: 400px; |
| | | margin: 60px auto 0px; |
| | | |
| | | margin: 60px auto 0px; |
| | | |
| | | } |
| | | } |
| | | .ant-tabs{ |