new Vue({
el: '#app',
data() {
return {
rname:'',
par:'',
AES:'',
dig:'',
filelist: [],
digList:[],
verify:{},
verifyList:[],
formData: {},
dialogFormVisible:false,
dialogFormVisible2:false,
dialogFormVisible4Edit: false,
dialogImageUrl:'',
dialogVisible:false,
disabled:false,
// 默认显示第几页
currentPage:1,
// 总条数,根据接口获取数据长度(注意:这里不能为空)
totalCount:1,
// 个数选择器(可修改)
pageSizes:[3,5,10],
// 默认每页显示的条数(可修改)
PageSize:3,
rules: {
picture_name: [{ required: true, message: '请输入图片名称', trigger: 'blur' }],
AES: [{ required: true, message: '请输入AES密钥', trigger: 'blur' }],
dig: [{ required: true, message: '请上传签名文件', trigger: 'blur' }],
picture:[{ required: true, message: '请上传图片', trigger: 'blur' }]
},
}
},
methods: {
// 每页显示的条数
handleSizeChange(val) {
// 改变每页显示的条数
this.PageSize=val
// 注意:在改变每页显示的条数时,要将页码显示到第一页
this.currentPage=1
},
// 显示第几页
handleCurrentChange(val) {
// 改变默认的页数
this.currentPage=val
},
handleOpen(key, keyPath) {
console.log(key, keyPath);
},
handleClose(key, keyPath) {
console.log(key, keyPath);
},
handlePicturePreview(file) {
console.log(file)
console.log(6)
this.par=file.raw;
const isLt2M = file.size / 1024 / 1024 < 10;
if (!isLt2M) {
this.$message.error('上传头像图片大小不能超过 10MB!');
this.clearFiles();
return isLt2M;
}
},
handlePreview(file) {
console.log(file);
},
handlePictureCardPreview(file) {
this.dialogImageUrl = file.url;
this.dialogVisible = true;
},
handlePictureCardPreviewTable(file) {
this.dialogImageUrl =window.document.location.href+'./img/'+file.picture_realname+'.'+file.picture_type;
console.log(this.dialogImageUrl)
this.dialogVisible = true;
},
handleDownload(file) {
let f =file.picture_realname+"."+file.picture_type
axios.post("/file/download",f,).then((result)=>{
var url = (window.document.location.href+"img/"+result.config.data)
var that = this
var fileName = file.picture_name
this.convertUrlToBase64(url).then(function (base64) {
var blob = that.convertBase64UrlToBlob(base64); // 转为blob对象
// 下载
if (that.myBrowser() == "IE") {
window.navigator.msSaveBlob(blob, fileName + ".png");
} else if (that.myBrowser() == "FF") {
window.location.href = url;
} else {
var a = document.createElement("a");
a.download = fileName;
a.href = URL.createObjectURL(blob);
document.body.appendChild(a)
a.click();
URL.revokeObjectURL(a.href) // 释放URL 对象
document.body.removeChild(a)
}
});
})
axios.post("/file/downloadMsg",f,).then((res)=>{
console.log(res)
this.downloadFile(res.data,file.picture_name)
})
},
downloadFile(data,fileName){
// data为blob格式
var blob = new Blob([data]);
var downloadElement = document.createElement('a');
var href = window.URL.createObjectURL(blob);
downloadElement.href = href;
downloadElement.download = fileName;
document.body.appendChild(downloadElement);
downloadElement.click();
document.body.removeChild(downloadElement);
window.URL.revokeObjectURL(href);
},
// 转换为base64
convertUrlToBase64(url) {
return new Promise(function (resolve, reject) {
var img = new Image();
//设置图片跨越,没有跨越cavas会被污染无法画出
img.crossOrigin = "Anonymous";
img.src = url;
img.onload = function () {
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, img.width, img.height);
var ext = img.src
.substring(img.src.lastIndexOf(".") + 1)
.toLowerCase();
//转换为base64
var dataURL = canvas.toDataURL("image/" + ext);
var base64 = {
dataURL: dataURL,
type: "image/" + ext,
ext: ext
};
resolve(base64);
};
});
},
// base64转换为blob流
convertBase64UrlToBlob(base64) {
var parts = base64.dataURL.split(";base64,");
var contentType = parts[0].split(":")[1];
var raw = window.atob(parts[1]);
var rawLength = raw.length;
var uInt8Array = new Uint8Array(rawLength);
for (var i = 0; i < rawLength; i++) {
uInt8Array[i] = raw.charCodeAt(i);
}
return new Blob([uInt8Array], {
type: contentType
});
},
// 判断浏览器
myBrowser() {
var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
if (userAgent.indexOf("OPR") > -1) {
return "Opera";
} //判断是否Opera浏览器 OPR/43.0.2442.991
if (userAgent.indexOf("Firefox") > -1) {
return "FF";
} //判断是否Firefox浏览器 Firefox/51.0
if (userAgent.indexOf("Trident") > -1) {
return "IE";
} //判断是否IE浏览器 Trident/7.0; rv:11.0
if (userAgent.indexOf("Edge") > -1) {
return "Edge";
} //判断是否Edge浏览器 Edge/14.14393
if (userAgent.indexOf("Chrome") > -1) {
return "Chrome";
} // Chrome/56.0.2924.87
if (userAgent.indexOf("Safari") > -1) {
return "Safari";
} //判断是否Safari浏览器 AppleWebKit/534.57.2 Version/5.1.7 Safari/534.57.2
},
init(){
const that = this
axios.get("/file/findAll", this.formData, ).then((result) => {
that.filelist = result.data
that.totalCount=result.data.length
});
let nav =document.querySelector(".nav")
console.log(Cookies.get('email')==undefined)
if(Cookies.get('email')!=undefined){
nav.innerHTML =`欢迎您,${Cookies.get('email')}
退出 `
}else{
nav.innerHTML = `登录
/
注册`
}
},
quit(){
Cookies.remove('email');
this.init()
},
//重置表单
resetForm() {
this.formData = {};
//this.$refs['myDig'].clearValidate();
this.$nextTick(() => {
this.$refs.mYupload.clearFiles()
})
},
//重置解密
resetDig() {
this.digList = {};
this.$nextTick(() => {
this.$refs.myDig.clearFiles()
})
},
//重置验证
resetDig() {
this.verifyList = {};
this.$nextTick(() => {
this.$refs.myVerify.clearFiles()
})
},
//弹出添加窗口
handleCreate() {
this.resetForm();
this.dialogFormVisible = true;
},
uploadDig(file){
this.dig=file.raw;
},
handleDig(file) {
this.rname=file.picture_realname;
this.resetDig();
this.dialogFormVisible2 = true;
},
handleVerify() {
this.resetForm();
this.dialogFormVisible4Edit = true;
},
openFile(file,name) {
let this_vue=this
//验证的文件
console.log(name.picture_name)
var reader = new FileReader();
reader.onload = function () {
if (reader.result) {
//打印文件内容
console.log(reader.result);
var p= name.picture_id+';'+ reader.result
axios.post("/file/verify", p,{headers: { 'Content-Type': 'application/json','data': 'JSON.stringify(Data)'}}).then((res) => {
if(res.data!=0){
this_vue.$alert('AES密钥(请复制):'+res.data,'验证成功', {
confirmButtonText: '确定',
});
}else{
this_vue.$alert("请重新确认",'验证错误', {
confirmButtonText: '确定',
});
}
})
}
};
reader.readAsText(file.raw);
this.resetDig()
},
handleEncryptionDig(){
let file=this.dig
let this_vue=this
let aes = this.formData.AES+";"+this.rname;
let reader = new FileReader();
reader.onload = function () {
if (reader.result) {
//打印文件内容
let str = reader.result+aes;
axios.post("/file/encrypt",str,{headers: { 'Content-Type': 'application/json','data': 'JSON.stringify(Data)'}}).then((res) => {
if(res.data=="success"){
this_vue.$alert('文件签名正确!','验证成功', {
confirmButtonText: '确定',
});
}else if(res.data=="failed"){
this_vue.$alert('文件与签名不符,请重新检查!','验证出错', {
confirmButtonText: '确定',
});
}else {
this_vue.$alert('服务器可能出错,或密钥格式错误,请稍后重试!','验证出错', {
confirmButtonText: '确定',
});
}
});
}
};
reader.readAsText(file);
this.dialogFormVisible2 = false;
this.rname=null;
this.resetDig();
},
handleEdit() {
let that = this
if(this.ifLogin()) {
const _file = this.par;
// 通过 FormData 对象上传文件
var formData = new FormData();
formData.append("file", _file);
this.formData.picture_user= this.ifLogin();
console.log(this.formData)
axios.post("/file/upload", formData).then((res) => {
this.formData.picture_realname = res.data.split(".")[0]
this.formData.picture_type = res.data.split(".")[1]
axios.post("/file/save", this.formData).then((result) => {
this.resetForm();
this.dialogFormVisible = false;
this.clearFiles()
}).then(function () {
that.init()
});
})
}else {
this_vue.$alert('还未登录','警告', {
confirmButtonText: '确定',
});
}
},
ifLogin(){
if(Cookies.get('email')==undefined){
return false
}else {
return Cookies.get('email')
}
}
},
mounted() {
this.init();
window.quit=this.quit
}
})