金久信后台管理系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

197 lines
5.9 KiB

<template>
<view class="page">
<!-- 页面内容开始 -->
<vk-data-page-header
title="证书转换"
subTitle="快速将证书内容变成1行字符串"
></vk-data-page-header>
<view class="page-body" style="width: 100%">
<view style="color: red;font-size: 12px;">全程无网络请求打开此页面后无网状态也能执行直接在前端解析证书没有证书泄露风险</view>
<el-table :data="certList" style="width: 100%">
<el-table-column prop="tips" label="说明" minWidth="300"> </el-table-column>
<el-table-column prop="name" label="选择证书" minWidth="300">
<template slot-scope="scope">
<text style="margin-right: 20px;">{{ scope.row.name }}</text>
<el-button type="success" @click="upload(scope.row)" size="mini" plain> {{ scope.row.content ? '已' : ''}}选择 {{ scope.row.file }} </el-button>
<text style="margin-left: 20px;color: #c2e7b0;" v-if="scope.row.content && scope.row.file === scope.row.name"> √ </text>
<text style="margin-left: 20px;color: red;" v-if="scope.row.content && scope.row.file !== scope.row.name"> × </text>
</template>
</el-table-column>
<el-table-column prop="key4" label="选择后可复制" minWidth="200" >
<template slot-scope="scope">
<!-- <el-button type="success" @click="copy(scope.row.name)" size="mini" plain v-if="scope.row.content && scope.row.file === scope.row.name"> 复制 </el-button> -->
<el-button type="success" size="mini" plain v-if="scope.row.content && scope.row.file === scope.row.name"> 请复制下方证书内容 </el-button>
</template>
</el-table-column>
</el-table>
<view class="tips mt15">
<view class="mt15 json-view" v-if="form1">
<view style="font-size: 14px;">证书内容</view>
<pre>
{{ form1 }}
</pre>
</view>
</view>
</view>
<!-- 页面内容结束 -->
</view>
</template>
<script>
var that; // 当前页面对象
var vk = uni.vk; // vk实例
export default {
data() {
// 页面数据变量
return {
certList: [
{
name: 'apiclient_cert.p12',
tips: '微信支付v2需要用到的证书(wxpay.pfx)的值',
file: '',
content: '',
key: 'wxpay.pfx'
},
{
name: 'apiclient_cert.pem',
tips: '微信支付v3需要用到的证书(wxpay.appCertContent)的值',
file: '',
content: '',
key: 'wxpay.appCertContent'
},
{
name: 'apiclient_key.pem',
tips: '微信支付v3需要用到的证书(wxpay.appPrivateKeyContent)的值',
file: '',
content: '',
key: 'wxpay.appPrivateKeyContent'
},
{
name: 'alipayCertPublicKey_RSA2.crt',
tips: '支付宝支付 - 支付宝公钥证书(alipay.alipayPublicCertContent)的值',
file: '',
content: '',
key: 'alipay.alipayPublicCertContent'
},
{
name: 'alipayRootCert.crt',
tips: '支付宝支付 - 支付宝根证书(alipay.alipayRootCertContent)的值',
file: '',
content: '',
key: 'alipay.alipayRootCertContent'
},
{
name: 'appCertPublicKey.crt',
tips: '支付宝支付 - 应用公钥证书(alipay.appCertContent)的值',
file: '',
content: '',
key: 'alipay.appCertContent'
}
],
// 表单相关开始-----------------------------------------------------------
form1: {
wxpay: {
pfx: "",
appCertContent: "",
appPrivateKeyContent: "",
},
alipay: {
alipayPublicCertContent: "",
alipayRootCertContent: "",
appCertContent: ""
}
},
// 表单相关结束-----------------------------------------------------------
}
},
// 监听 - 页面每次【加载时】执行(如:前进)
onLoad(options = {}) {
that = this;
vk = that.vk;
that.options = options;
that.init(options);
},
// 监听 - 页面【首次渲染完成时】执行。注意如果渲染速度快,会在页面进入动画完成前触发
onReady(){
},
// 监听 - 页面每次【显示时】执行(如:前进和返回) (页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面)
onShow() {
},
// 监听 - 页面每次【隐藏时】执行(如:返回)
onHide() {
},
// 函数
methods: {
// 页面数据初始化函数
init(options){
},
upload(item={}){
let { name, key } = item;
let index = this.certList.findIndex((certItem) => {
return name === certItem.name;
});
let suffix = name.substring(name.lastIndexOf(".") + 1);
uni.chooseFile({
count: 1, //默认100
extension: [suffix],
success: (res) => {
let tempFile = res.tempFiles[0];
if (name === "apiclient_cert.p12") {
vk.pubfn.fileToBase64({
file: tempFile,
success: (base64) => {
let base64Index = base64.indexOf("base64,");
base64 = base64.substring(base64Index+"base64,".length);
this.form1.wxpay.pfx = base64;
this.certList[index].content = base64;
this.certList[index].file = tempFile.name;
}
});
} else {
const reader = new FileReader();
reader.onload = () => {
let result = reader.result;
result = result.replace(/\r\n/g, "\n");
vk.pubfn.setData(this.form1, key, result);
this.certList[index].content = result;
};
reader.readAsText(res.tempFiles[0]);
if (tempFile.name.indexOf("appCertPublicKey_") == 0) {
tempFile.name = "appCertPublicKey.crt";
}
this.certList[index].file = tempFile.name;
}
}
});
},
copy(name){
let contentItem = this.certList.find((item) => {
return name === item.name;
});
let content = contentItem.content;
uni.setClipboardData({
data: content,
success: () => {
vk.toast("复制成功");
}
});
}
},
// 计算属性
computed:{
}
}
</script>
<style lang="scss" scoped>
</style>