You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
367 lines
9.9 KiB
Vue
367 lines
9.9 KiB
Vue
<template>
|
|
<div v-loading="loading">
|
|
<el-form label-width="180px" style="border: 1px solid #e9e9e9; border-radius: 5px;">
|
|
<el-row style="padding: 20px;margin:10px ;">
|
|
<el-col :span="16">
|
|
协同扫码
|
|
</el-col>
|
|
</el-row>
|
|
<el-row style="padding: 20px;margin:10px ;">
|
|
<el-col :span="16" v-if="userinfo.length==1">
|
|
<el-form-item v-if="userinfo[0].xtsign_userid != '' && userinfo[0].xtsign_userid !=null "
|
|
label="已绑定的协同签名用户">
|
|
<el-icon color="#409EFC">
|
|
<Iphone />
|
|
</el-icon> <span style="font-weight: 700;color: #333;"> {{userinfo[0].xtsign_username}}</span>
|
|
|
|
</el-form-item>
|
|
<el-button style="margin-left: 40px;" :icon="Iphone" type="primary" @click="Scan()"><span
|
|
v-if="userinfo[0].xtsign_userid == '' || userinfo[0].xtsign_userid ==null">手机协同签名绑定</span><span
|
|
v-else>更换协同签名绑定</span></el-button>
|
|
</el-col>
|
|
</el-row>
|
|
</el-form>
|
|
<el-form label-width="120px" style="border: 1px solid #e9e9e9; border-radius: 5px;margin-top: 8px;">
|
|
<el-row style="padding: 20px;margin:10px ;">
|
|
<el-col :span="16">
|
|
Ukey绑定
|
|
</el-col>
|
|
</el-row>
|
|
<el-row style="padding: 20px;margin:10px ;">
|
|
<el-col :span="16" v-if="userinfo.length==1">
|
|
<el-form-item v-if="userinfo[0].ukey_sfuid != '' && userinfo[0].ukey_sfuid !=null " label="Ukey状态">
|
|
<el-icon color="#409EFC">
|
|
<Iphone />
|
|
</el-icon> <span style="font-weight: 700;color: #333;">已绑定Ukey</span>
|
|
</el-form-item>
|
|
<el-button style="margin-left: 40px;" :icon="Iphone" type="primary" @click="Ukeybind()"><span
|
|
v-if="userinfo[0].ukey_sfuid == '' || userinfo[0].ukey_sfuid ==null">Ukey绑定</span><span
|
|
v-else>更换Ukey</span></el-button>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row v-if="ukey_show">
|
|
<el-form-item label="选择证书">
|
|
<el-select v-model="selectedZhengShuId" placeholder="请选择证书">
|
|
<el-option v-for="(item,index) in ZhengShuList" :key="index" :label="item.name"
|
|
:value="item.value" />
|
|
</el-select>
|
|
<el-button type="primary" size="large" @click="Ukeybind_submit">绑定</el-button>
|
|
</el-form-item>
|
|
|
|
</el-row>
|
|
</el-form>
|
|
<el-form label-width="120px" style="border: 1px solid #e9e9e9; border-radius: 5px;margin-top: 8px;">
|
|
<el-row style="padding: 20px;margin:10px ;">
|
|
<el-col :span="16">
|
|
修改密码
|
|
</el-col>
|
|
</el-row>
|
|
<el-row style="padding: 20px;margin:10px ;">
|
|
<el-col :span="16">
|
|
<el-form-item label="旧密码">
|
|
<el-input size="large" v-model="oldpwd" type="password" placeholder="新密码"
|
|
style=" margin: auto 20px;" />
|
|
</el-form-item>
|
|
<el-form-item label="新密码">
|
|
<el-input size="large" v-model="newpwd" type="password" placeholder="新密码"
|
|
style=" margin: auto 20px;" />
|
|
</el-form-item>
|
|
<el-form-item label="再次输入">
|
|
<el-input size="large" v-model="renewpwd" type="password" placeholder="再次输入"
|
|
style=" margin: auto 20px;" />
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="8" style="display:flex;align-items:center;"><el-button type="primary" size="large"
|
|
@click="SetPwd">修 改</el-button></el-col>
|
|
</el-row>
|
|
|
|
</el-form>
|
|
<el-dialog v-model="dialogVisible" title="绑定协同签名" width="40%">
|
|
<el-form status-icon class="demo-ruleForm erweima">
|
|
<el-form-item>
|
|
<span style="font-size: 22px;">请使用app扫描二维码绑定</span>
|
|
</el-form-item>
|
|
<div class="erweima_tu" v-loading="erweima_loading">
|
|
<canvas v-if="seconds>0" id="canvas" width="300" height="300"
|
|
style="min-height: 300px;min-width: 300px;"></canvas>
|
|
<div v-else class="timeout" @click="refresh()">{{erweimaErrMsg}}
|
|
<div>
|
|
<RefreshRight style="height: 60px;width: 60px;"></RefreshRight>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div style="height: 160px;"></div>
|
|
</el-form>
|
|
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
import QRCode from 'qrcode'
|
|
import {
|
|
ref,
|
|
onMounted
|
|
} from 'vue';
|
|
import {
|
|
ElMessage,
|
|
ElMessageBox
|
|
} from 'element-plus'
|
|
import {
|
|
Iphone
|
|
} from '@element-plus/icons-vue'
|
|
import {
|
|
adminChangePwd,
|
|
addSignJob,
|
|
XTSignCheckNotify,
|
|
XTSignBindUser,
|
|
GetBaseAdminUserInfo,
|
|
UkeyBindUser
|
|
} from '@/api/api.js'
|
|
let loading = ref(false)
|
|
//获取当前登录用户基本信息
|
|
let userinfo = ref([]);
|
|
const getUserBaseInfo = () => {
|
|
GetBaseAdminUserInfo().then(res => {
|
|
if (res.status == 'ok') {
|
|
userinfo.value = res.info
|
|
} else {
|
|
ElMessage.error(res.msg)
|
|
}
|
|
})
|
|
}
|
|
getUserBaseInfo() //获取当前登录用户基本信息
|
|
let oldpwd = ref('')
|
|
let newpwd = ref('')
|
|
let renewpwd = ref('')
|
|
const SetPwd = () => {
|
|
if (newpwd.value == renewpwd.value && renewpwd.value != '') {
|
|
adminChangePwd({
|
|
oldpwd: oldpwd.value,
|
|
newpwd: newpwd.value
|
|
}).then(res => {
|
|
if (res.status == 'ok') {
|
|
|
|
ElMessageBox.alert('密码修改成功,请重新登录', '提示', {
|
|
// if you want to disable its autofocus
|
|
// autofocus: false,
|
|
confirmButtonText: 'OK',
|
|
callback: () => {
|
|
window.location.href = "./#/login"
|
|
},
|
|
})
|
|
} else {
|
|
ElMessage.error(res.msg)
|
|
}
|
|
})
|
|
} else {
|
|
ElMessage.error("两次密码不一致,请重新输入!")
|
|
}
|
|
}
|
|
let dialogVisible = ref(false)
|
|
const Scan = () => {
|
|
dialogVisible.value = true
|
|
usePhone()
|
|
}
|
|
|
|
const erweima_loading = ref(false)
|
|
const UseErweima = ref(false) //是否使用二维码
|
|
const refresh = () => {
|
|
usePhone()
|
|
}
|
|
let erweimaErrMsg = ref('扫描超时,点击刷新');
|
|
let signJobId = ref(''); ////签名任务id
|
|
let qrcode = ref('');
|
|
//扫码二维码
|
|
const usePhone = () => {
|
|
clearInterval(timer);
|
|
signJobId.value = ''
|
|
qrcode.value = ''
|
|
seconds.value = timelength
|
|
|
|
erweima_loading.value = true
|
|
UseErweima.value = true
|
|
addSignJob({}).then(res => {
|
|
|
|
if (res.status) {
|
|
qrcode.value = JSON.stringify(JSON.parse(res.data.qrCode));
|
|
signJobId.value = res.data.signDataId;
|
|
console.log(qrcode.value)
|
|
var canvas = document.getElementById("canvas");
|
|
// 调用函数去生成二维码,参数依次为:二维码的容器、要生成的内容、回调函数
|
|
QRCode.toCanvas(canvas, qrcode.value, function(error) {
|
|
if (error) {
|
|
console.error(error);
|
|
} else {
|
|
erweima_loading.value = false
|
|
start_time()
|
|
console.log("success!");
|
|
}
|
|
})
|
|
|
|
} else {
|
|
ElMessage.error(res.msg)
|
|
|
|
}
|
|
})
|
|
}
|
|
//定时60秒倒计时
|
|
let timelength = 60
|
|
let seconds = ref(0);
|
|
seconds.value = timelength
|
|
let pinlv = 2 //频率/秒
|
|
let timer
|
|
const start_time = () => {
|
|
timer = setInterval(CheckNotify, pinlv * 1000);
|
|
}
|
|
//const saoma_status=ref(false) //扫码状态
|
|
//检查扫码回调结果
|
|
const CheckNotify = () => {
|
|
if (seconds.value <= 0) {
|
|
console.log("倒计时结束!");
|
|
clearInterval(timer);
|
|
} else {
|
|
console.log(seconds.value + "秒");
|
|
XTSignCheckNotify({
|
|
signJobId: signJobId.value,
|
|
notifyType: 'bind'
|
|
}).then(res => {
|
|
if (res.msg != '暂未回调') {
|
|
//如果查到了,则结束定时器
|
|
clearInterval(timer);
|
|
if (res.status) {
|
|
dialogVisible.value = false
|
|
ElMessageBox.prompt('扫码成功,请输入登录密码,验证绑定', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
inputType: 'password'
|
|
})
|
|
.then(({
|
|
value
|
|
}) => {
|
|
console.log(value)
|
|
XTbind(value)
|
|
})
|
|
.catch(() => {
|
|
|
|
})
|
|
|
|
} else {
|
|
ElMessage.error(res.msg)
|
|
erweimaErrMsg.value = res.msg
|
|
seconds.value = 0
|
|
}
|
|
}
|
|
|
|
})
|
|
seconds.value = seconds.value - pinlv;
|
|
}
|
|
|
|
}
|
|
//用户绑定协同userid
|
|
const XTbind = (pwd) => {
|
|
XTSignBindUser({
|
|
signJobId: signJobId.value,
|
|
pwd: pwd
|
|
}).then(res => {
|
|
if (res.status) {
|
|
ElMessageBox.alert('绑定成功', '提示', {
|
|
// if you want to disable its autofocus
|
|
// autofocus: false,
|
|
confirmButtonText: 'OK',
|
|
callback: () => {
|
|
getUserBaseInfo()
|
|
},
|
|
})
|
|
} else {
|
|
ElMessage.error(res.msg)
|
|
}
|
|
})
|
|
}
|
|
|
|
//Ukey绑定---------------------------------------------------------------------------------------------
|
|
let ukey_show=ref(false);
|
|
let ZhengShuList = ref('');
|
|
let selectedZhengShuId = ref(''); //选中的id
|
|
let ZhengShuSfid = ref('');
|
|
const Ukeybind = () => {
|
|
ukey_show.value=true
|
|
console.log('获取证书版本号 SOF_GetVersion', xtxsync.SOF_GetVersion()) //获取证书版本号
|
|
let list = xtxsync.SOF_GetUserList()
|
|
console.log('证书列表 SOF_GetVersion', list) //获取证书列表
|
|
const arr = list.split('&&&').slice(0, -1);
|
|
|
|
ZhengShuList.value = arr.map(item => {
|
|
const [name, value] = item.split('||');
|
|
return {
|
|
name,
|
|
value
|
|
};
|
|
});
|
|
}
|
|
const Ukeybind_submit = () => {
|
|
console.log(selectedZhengShuId.value);
|
|
//导出证书
|
|
var zhengshu = xtxsync.GetSignCert(selectedZhengShuId.value);
|
|
//获取证书唯一实体标识
|
|
ZhengShuSfid.value = xtxsync.GetCertEntity(zhengshu)
|
|
if (ZhengShuSfid.value.length > 1) {
|
|
ElMessageBox.prompt('请输入登录密码,验证绑定', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
inputType: 'password'
|
|
})
|
|
.then(({
|
|
value
|
|
}) => {
|
|
console.log(value)
|
|
UkeyBindUser({
|
|
sfid: ZhengShuSfid.value,
|
|
pwd: value
|
|
}).then(res => {
|
|
if (res.status) {
|
|
ElMessageBox.alert('绑定成功', '提示', {
|
|
confirmButtonText: 'OK',
|
|
callback: () => {
|
|
ukey_show.value=false
|
|
getUserBaseInfo()
|
|
},
|
|
})
|
|
} else {
|
|
ElMessage.error(res.msg)
|
|
}
|
|
})
|
|
})
|
|
.catch(() => {
|
|
|
|
})
|
|
}
|
|
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
.erweima_tu {
|
|
|
|
height: 310px;
|
|
|
|
margin-left: auto;
|
|
margin-right: auto;
|
|
margin-bottom: 20px;
|
|
text-align: center;
|
|
color: coral;
|
|
}
|
|
|
|
.timeout {
|
|
margin-top: 20%;
|
|
text-align: center;
|
|
color: coral;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.saoma_tishi {
|
|
color: #7cba74;
|
|
padding-top: 20%;
|
|
font-size: 20px;
|
|
}
|
|
</style> |