1107
This commit is contained in:
@@ -0,0 +1,197 @@
|
||||
<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>
|
||||
Reference in New Issue
Block a user