提交 babaf030 编写于 作者: “grape”'s avatar “grape”

验证码解密

上级 af13cd67
......@@ -13,7 +13,13 @@
<div @click="onClickDetails()">
<van-row>
<van-col span="16">
<van-col span="12" class="lable"><span>合同编号:</span></van-col>
<van-col span="24" class="priductName">{{ item.productname }}</van-col>
<van-col style=" width: 100%; margin-left: 8%; line-height: 2;">
<van-row gutter="20">
<van-col span="12" class="lable"><span>申请金额:万元</span></van-col>
......
......@@ -9,15 +9,16 @@
import { MethodType } from "@/constants/enum/general/method-type.enum";
import { HeaderType } from "@/constants/enum/general/header-type.enum";
const prefix = "http://10.2.3.118:9165/online-financial-service/api/v1/cust-info/permit_endpoint"
const prefix = "http://10.0.0.118:9130/ms-system/api/v1/sysCustInfo/permit_endpoint"
const loginApi = {
updatePicCode: {
url: prefix + "/kaptcha",
url: prefix + "/getVerifyCode",
method: MethodType.POST.code,
header: HeaderType.AUTH.code,
},
loginSystem: {
url: prefix + "/login",
url: prefix + "/onlineLogin",
method: MethodType.POST.code,
header: HeaderType.AUTH.code,
},
......
......@@ -11,6 +11,7 @@ export default {
* @return {Object} jsonstr 返回加密后的json数据
*/
encryptData(jsonstr: any) {
debugger
let encryData = {};
try {
// SM2 加密秘钥
......@@ -56,10 +57,11 @@ export default {
jsonData = JSON.parse(jsonData);
}
try {
debugger
let sm2 = require('sm-crypto').sm2,
sm3 = require('sm-crypto').sm3,
sm4 = require('sm-crypto').sm4,
privateKey = '7666A8CA12A27CF6C440A1CFECB4B1BB7055F2FB3435E957EB35142FAB881EFB', //SM2公钥
privateKey = '0494FEF4897CF4E9C9CB994B66B29E9B3EAF2C5C59EBEDB703B0F980199CEA7BDBF177AB3E65A17F3E96227977C55423929975CE535B715AC21E0AB23B9858AB4F', //SM2公钥
sm4Key = '',
orSm4Key = jsonData.sm4key;
orSm4Key = orSm4Key.substr(2, orSm4Key.length - 2);
......
......@@ -18,6 +18,13 @@ const workbenchRoutes = [
props: propsConvert,
meta: { keepAlive: false, requiresAuth: true, name: "主页" },
},
{
path: `/AccommodMain`,
name: 'AccommodMain',
component: () => import(/* webpackChunkName: "customer-mgt" */ "@/views/workbench/AccommodMain.vue"),
props: propsConvert,
meta: { keepAlive: false, requiresAuth: true, name: "贷款主页" },
},
{
path: `/Accommodation`,
name: 'Accommodation',
......
......@@ -172,12 +172,10 @@ class ApiService {
}
post(path: string, params: any, query: Query | undefined, requestConfig: AxiosRequestConfig): any {
path = query != null ? this.urlQueryConvert(path, query) : path;
console.log("服务调用--" + path);
return Vue.axios.post(`${path}`, params, requestConfig).then(res=>{
//TODO
return res.data
});
return Vue.axios.post(`${path}`, params, requestConfig).then(this.createBusCodeHandler(query)).catch(this.createErrorHandler())
}
/**
* POST请求 文件上传
......@@ -268,27 +266,31 @@ class ApiService {
* 服务返回统一解密处理
*/
createBusCodeHandler(params?: any) {
return function(response: any) {
if (response.status === 200) {
let data = response.data;
console.log("返回统一解密处理",params)
if (params.tc === 'MCEP') {
let encryData = data.data || {};
console.log('返回原数据:', data);
//移动后台
if (typeof encryData != 'object') {
encryData = JSON.parse(encryData);
}
//三方数据
encryData.sm4key ? (data.data = SMUtil.decodeData(encryData)) : data;
if (data.data && typeof data.data != 'object') {
if (data.data.indexOf('{') > -1) {
data.data = JSON.parse(data.data);
}
// //三方数据
// encryData.sm4key ? (data.data = SMUtil.decodeData(encryData)) : data;
// if (data.data && typeof data.data != 'object') {
// if (data.data.indexOf('{') > -1) {
// data.data = JSON.parse(data.data);
// }
// }
if (['local', 'production'].indexOf(process.env.NODE_ENV) == -1) {
}
// if (['local', 'production'].indexOf(process.env.NODE_ENV) == -1) {
console.log('返回数据:', data);
// }
if (data.code == '40902') {
//token 失效,退出登录
NativeUI.confirm('', "登录超时,请退出重新登录").then(() => {
......@@ -316,6 +318,7 @@ class ApiService {
console.log(data);
//成功
// data = data.data;
debugger
if (typeof data != 'object') data = JSON.parse(data);
data = data.sm4key ? SMUtil.decodeData(data) : data;
if (typeof data != 'object') {
......
......@@ -61,7 +61,7 @@ export default class MyPage extends Vue {
productname: "我的贷款",
//图片信息
img: "#icon-a-wodedaikuan16x16px",
flag: "Accommodation"
flag: "AccommodMain"
},
{
productname: "兑换记录",
......@@ -84,9 +84,9 @@ export default class MyPage extends Vue {
name: "PersonLod"
//参数
})
} else if (item.flag === "Accommodation") {
} else if (item.flag === "AccommodMain") {
this.$router.push({
name: "Accommodation"
name: "AccommodMain"
//参数
})
} else if ( item.flag === "ExchangeRecord") {
......
......@@ -84,6 +84,7 @@ import { Code } from "@/constants/enum/general/code.enum";
import { RestfulResponse } from "@/model/domain/RestfulResponse";
import commonApi from "@/constants/api/login/common.api";
import { sys } from "typescript";
import { log } from "mathjs";
@Component({
......@@ -104,7 +105,9 @@ export default class LoginView extends Vue {
//获取图形验证码
_updatePicCode() {
//请求图形验证码
debugger
apiService.general(loginApi.updatePicCode, undefined, undefined, undefined).then((response: RestfulResponse) => {
//console.log(response);
if (response.code == Code.SUCCESS.code) {
this.imageSrc = 'data:image/png;base64,' + response.data.imageVerifyCodeStr.replace(/[\r\n]/g, "");
......@@ -147,16 +150,14 @@ export default class LoginView extends Vue {
//this._updatePicCode();
let param = {
phone: this.phone,
//图形Key
imageVerifyKey: this.imageVerifyKey,
//图形验证码
imgVerifyCode: this.imageSrcValue,
imageVerifyKey: this.imageSrcValue,
//渠道
loginType: "3",
//手机验证码
phoneVerifyCode: this.sms,
messCode: this.sms,
//密码
credential: this.password
passWord: this.password
}
apiService.general(loginApi.loginSystem, undefined, param, undefined).then((response: RestfulResponse) => {
console.log(response);
......
......@@ -25,6 +25,9 @@
<span class="sopan">手机号码</span>
<van-field v-model="phone" label="+86 |" :border="true" placeholder="请输入手机号" />
<van-divider />
<span class="sopan">身份证号</span>
<van-field v-model="idCard" :border="true" placeholder="请输入身份证号" />
<van-divider />
</div>
<span class="sopan">短信验证码</span>
<div>
......
<!--
* @ Author: zhaowei
* @ Create Time: 2022-08-11 11:02:17
* @ Modified by: zhaowei
* @ Modified time: 2022-08-11 16:04:39
* @ Description:
-->
<template>
<div class="body">
<div class="rarle">
<tatle-bar :tatle="tatleName"></tatle-bar>
</div>
<div>
<div class="card" v-for="(item, index) in productParam" :key="index">
<div @click="onClickDetails()">
<van-row>
<van-col span="16">
<van-col span="24" class="contractNo"><span>合同编号:</span>{{ item.contractNo }}</van-col>
<van-col style=" width: 100%; margin-left: 8%; line-height: 2;">
<van-row gutter="20">
<van-col span="12" class="lable"><span>合同类型:</span></van-col>
<van-col span="12" class="contractType" >{{ item.contractType }}</van-col>
</van-row>
<van-row gutter="20">
<van-col span="12" class="lable"><span>合同金额:</span></van-col>
<van-col span="12" class="contractAmount" style="color:rgb(255, 204, 0);">{{ item.contractAmount }}</van-col>
</van-row>
<van-row gutter="20">
<van-col span="12" class="lable"><span>合同利率:</span></van-col>
<van-col span="12" class="contractRate">{{ item.contractRate }}</van-col>
</van-row>
<van-row gutter="20">
<van-col span="12" class="lable"><span>还款方式:</span></van-col>
<van-col span="12" class="paymentMethod">{{ item.paymentMethod }}</van-col>
</van-row>
</van-col>
</van-col>
<van-col span="8">
<svg class="icon" aria-hidden="true" v-if="item.status === 1">
<use xlink:href="#icon-a-yifafang60x60px"></use>
</svg>
<svg class="icon" aria-hidden="true" v-if="item.status === 2">
<use xlink:href="#icon-a-yifafang60x60px"></use>
</svg>
<svg class="icon" aria-hidden="true" v-if="item.status === 3">
<use xlink:href="#icon-a-yijieqing60x60px"></use>
</svg>
</van-col>
</van-row>
</div>
<van-row v-if="item.status === 2" type="flex" class="bottom" @click="onClickPicket()">
<van-col span="24" class="lablel"><span>查看借据</span>
<svg class="iconl" aria-hidden="true">
<use xlink:href="#icon-a-xiayiye24x24px"></use>
</svg>
</van-col>
</van-row>
</div>
</div>
</div>
</template>
<script lang="ts">
import { Component, Vue, Prop, Watch, Emit } from "vue-property-decorator";
/*
* title
*/
@Component({
name: "AccommodMain"
})
export default class AccommodMain extends Vue {
tatleName = "我的贷款"
//未结清贷款计划
productParam = [{
contractNo: "117647289092",
contractType: "一般借款合同",
contractAmount: "30,000.00",
contractRate: "4.13%",
paymentMethod:"等额本金",
status: 2
},
{
contractNo: "117647289092",
contractType: "一般借款合同",
contractAmount: "30,000.00",
contractRate: "1.13%",
paymentMethod:"等额本金",
status: 3
}]
//已结清
productParamlist = [{
productname: "'llll'流动之星贷款",
money: "30",
guarantee: "担保",
status: 3,
month: "12",
time: "2022-02-18"
}]
//点击还款计划事件
onClickDetails() {
this.$router.push({
name: "Accommodation"
})
}
//点击body事件
onClickPicket() {
this.$router.push({
name: "Accommodation"
})
}
}
</script>
<style scoped lang="scss">
.body {
height: 100%;
width: 100%;
background-color: rgba(241, 241, 241, 1);
}
.acced {
width: 100%;
height: 20%;
}
.icon {
width: 80px;
height: 80px;
margin-top: 10%;
}
.card {
border-radius: 2%;
height: 28vh;
margin: 3% 3% 3% 3%;
background: #ffffff;
}
.contractNo {
margin: 5% 7%;
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
font-weight: 700;
font-style: normal;
font-size: 16px;
color: #333333;
}
.lable {
text-align: left;
color: #7F7F7F;
font-size: 14px;
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
font-weight: 400;
font-style: normal;
}
.iconl {
width: 20px;
height: 20px;
}
.bottom[data-v-d306f034] {
background-color: #3672f1;
border: none;
border-radius: 5px;
border-top-left-radius: 0px;
border-top-right-radius: 0px;
text-align: center;
margin-top: 15px;
}
.lablel {
text-align: center;
font-size: 12px;
color: #FFFFFF;
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
font-weight: 400;
font-style: normal;
}
</style>
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册