Pārlūkot izejas kodu

提交修改

yxb
DESKTOP-2IO5MST\huting pirms 1 gada
vecāks
revīzija
25349b44b1

+ 7
- 1
composables/order/useOrderListItem.ts Parādīt failu

import { hasLogin, msg, timesDiff } from "@/utils/utils"; import { hasLogin, msg, timesDiff } from "@/utils/utils";
import { orderList } from "@/utils/network/api"; import { orderList } from "@/utils/network/api";
import { PageData } from "@/datas/enum"; import { PageData } from "@/datas/enum";
const tools = require("../../static/etcUtil/tools.js");
export default function useOrderListItem(props) { export default function useOrderListItem(props) {
//搜索关键字 //搜索关键字
const searchKeyWords = ref(''); const searchKeyWords = ref('');
msg('请输入需要搜索的车牌号!'); msg('请输入需要搜索的车牌号!');
return; return;
} }
refreshList(true);
// #endif // #endif
// #ifdef MP-ALIPAY
tools.showLoadingAlert("加载中");
refreshList(true); refreshList(true);
tools.hideLoadingAlert();
// #endif

} }


//订单车牌号输入 //订单车牌号输入

+ 2
- 0
pages/bluetooth/bluetooth.vue Parādīt failu

* 打开蓝牙 * 打开蓝牙
*/ */
const openBluetooth = () => { const openBluetooth = () => {
tools.hideLoadingAlert();
let foundDevices = []; //扫描到的蓝牙列表 let foundDevices = []; //扫描到的蓝牙列表
uni.closeBluetoothAdapter(); //先关闭蓝牙 uni.closeBluetoothAdapter(); //先关闭蓝牙


} else { } else {
return; return;
} }

} }


/** /**

+ 18
- 23
static/etc/TDRAPI/TDRObuSDK.js Parādīt failu

if ((endTime - beginTime) >= 3000) { if ((endTime - beginTime) >= 3000) {
mIsInitCmdSend = false; mIsInitCmdSend = false;
m_isConn = false; m_isConn = false;
console.log('00000000');
callback_2(makeRes(-1, [], '蓝牙已断开')) callback_2(makeRes(-1, [], '蓝牙已断开'))
} }
} }
console.log('******解析后的指令数据为' + mReturnedRawCmdData) console.log('******解析后的指令数据为' + mReturnedRawCmdData)
if (receiveDataCallBack) { if (receiveDataCallBack) {
receiveDataCallBack(makeRes(errorcode, mReturnedRawCmdData, errorcode == 0 ? '收到数据成功' : '数据透传失败')) receiveDataCallBack(makeRes(errorcode, mReturnedRawCmdData, errorcode == 0 ? '收到数据成功' : '数据透传失败'))
receiveDataCallBack = null
} }
mUnpacketDataCache = [] mUnpacketDataCache = []
} }
let totalDataLen = etcProtoData.length; let totalDataLen = etcProtoData.length;
let blockSize = maxLenPerPacket; let blockSize = maxLenPerPacket;
let offset = 0 let offset = 0
//if (blockSize == undefined)
if(!blockSize)
{
if (blockSize == undefined) {
blockSize = 100 blockSize = 100
} }


for (; offset < (totalDataLen - blockSize); offset += blockSize) { for (; offset < (totalDataLen - blockSize); offset += blockSize) {
_pack.packNumOffset = PackNumOffset; _pack.packNumOffset = PackNumOffset;
sendBuff.push.apply(sendBuff, pSendBuf.slice(offset, offset + blockSize)) sendBuff.push.apply(sendBuff, pSendBuf.slice(offset, offset + blockSize))
let sendBuffDataLen = sendBuff.length ;
if (sendBuffDataLen == 0)
return ;
hr = makeSingleEtcProtocolPaket(sendBuff, _pack) hr = makeSingleEtcProtocolPaket(sendBuff, _pack)
if (hr != 0) { if (hr != 0) {
return hr; return hr;
return hexArr; return hexArr;
} }


// function str2Bytes(str) {
// var pos = 0;
// var len = str.length;
// if (len % 2 != 0) {
// return null;
// }
// len /= 2;
// var hexA = new Array();
// for (var i = 0; i < len; i++) {
// var s = str.substr(pos, 2);
// var v = parseInt(s, 16);
// hexA.push(v);
// pos += 2;
// }
// return hexA;
// }
function str2Bytes(str) {
var pos = 0;
var len = str.length;
if (len % 2 != 0) {
return null;
}
len /= 2;
var hexA = new Array();
for (var i = 0; i < len; i++) {
var s = str.substr(pos, 2);
var v = parseInt(s, 16);
hexA.push(v);
pos += 2;
}
return hexA;
}


function makeHandShakeStep1WithETC() { function makeHandShakeStep1WithETC() {
let cBuff = [] let cBuff = []

+ 6
- 0
static/etcUtil/index.js Parādīt failu

console.log('指令执行内容', cmdArr, type) console.log('指令执行内容', cmdArr, type)
switch (connectPrefixName) { switch (connectPrefixName) {
case "WJ": case "WJ":
console.log('WJ执行内容====', cmdArr, type)
wjApi.transCmd(cmdArr, type, function(res) { wjApi.transCmd(cmdArr, type, function(res) {
console.log('WJ执行内容====11111', res)
if (res.code == 0) { if (res.code == 0) {
func(res.data); func(res.data);
} else { } else {
}); });
break; break;
case "JL": case "JL":
console.log('JL执行内容====', cmdArr, type)
jlApi.transCmd(cmdArr, type, function(res) { jlApi.transCmd(cmdArr, type, function(res) {
console.log('JL执行内容====11111', res)
if (res.code == 0) { if (res.code == 0) {
func(res.data); func(res.data);
} else { } else {
}); });
break; break;
case "TD": case "TD":
console.log('TD执行内容====', cmdArr, type)
tdApi.transCmd(cmdArr, type, function(res) { tdApi.transCmd(cmdArr, type, function(res) {
console.log('TD执行内容====', cmdArr, type)
if (res.code == 0) { if (res.code == 0) {
func(res.data); func(res.data);
} else { } else {

+ 31
- 27
static/etcUtil/tools.js Parādīt failu

/********************** showModalAlert ************************/ /********************** showModalAlert ************************/


function showModalAlert(content, successFunc = null, failFunc = null, title = '温馨提示', showCancel = false) { function showModalAlert(content, successFunc = null, failFunc = null, title = '温馨提示', showCancel = false) {
uni.showModal({
title: title,
content: content,
showCancel: showCancel,
//是否显示取消按钮
cancelText: '取消',
//默认是“取消”
cancelColor: theme.cancelModalColor,
//取消文字的颜色
confirmText: '确定',
//默认是“确定”
confirmColor: theme.modalColor,
//确定文字的颜色
success: function(res) {
//接口调用成功的回调函数
if (successFunc != null) {
successFunc(res);
}
},
fail: function(res) {
//接口调用失败的回调函数
if (failFunc != null) {
failFunc(res);
}
},
complete: function(res) {} //接口调用结束的回调函数(调用成功、失败都会执行)
});
console.log("温馨提示", title, content != "")
if (content != "") {
uni.showModal({
title: title,
content: content,
showCancel: showCancel,
//是否显示取消按钮
cancelText: '取消',
//默认是“取消”
cancelColor: theme.cancelModalColor,
//取消文字的颜色
confirmText: '确定',
//默认是“确定”
confirmColor: theme.modalColor,
//确定文字的颜色
success: function(res) {
//接口调用成功的回调函数
if (successFunc != null) {
successFunc(res);
}
},
fail: function(res) {
//接口调用失败的回调函数
if (failFunc != null) {
failFunc(res);
}
},
complete: function(res) {} //接口调用结束的回调函数(调用成功、失败都会执行)
});
}

} }
/*******************showToastAlert********************/ /*******************showToastAlert********************/



+ 1
- 0
subpackage/after-sale/ETC-product-status-list-query/ETC-product-status-list-query.vue Parādīt failu

left: 0; left: 0;
background: white; background: white;
box-sizing: border-box; box-sizing: border-box;
width: 100%;
} }


.content { .content {

+ 221
- 257
subpackage/after-sale/account-change/cancellation-contract.vue Parādīt failu

<template> <template>
<view class="oderPage">
<view class="head">
您的ETC卡类型是记账卡,需要先解约,才可继续办理更换业务,请确认您的签约信息
</view>
<view class="content">
<view class="row">
<text>签约银行</text>
<text>工商银行</text>
</view>
<view class="row">
<text>签约时间</text>
<text>2022-10-11 12:11:12</text>
</view>
<view class="row">
<text>卡号</text>
<text>12312313213123</text>
</view>
<view class="row">
<text>车牌号</text>
<text>贵A123321</text>
</view>
</view>
<button class="submit" @click="toPage()">下一步</button>
</view>
<view class="oderPage">
<view class="head">
您的ETC卡类型是记账卡,需要先解约,才可继续办理更换业务,请确认您的签约信息
</view>
<view class="content">
<view class="row">
<text>签约银行</text>
<text>工商银行</text>
</view>
<view class="row">
<text>签约时间</text>
<text>2022-10-11 12:11:12</text>
</view>
<view class="row">
<text>卡号</text>
<text>12312313213123</text>
</view>
<view class="row">
<text>车牌号</text>
<text>贵A123321</text>
</view>
</view>
<button class="submit" @click="toPage()">下一步</button>
</view>
</template> </template>


<script setup lang="ts"> <script setup lang="ts">
import navBar from "./components/nav-bar.vue";
import { checkStr } from "@/utils/utils";
import { ref, reactive } from "vue";
import { navTo } from "@/utils/utils";
import { onReady } from "@dcloudio/uni-app";

// 表单数据
const form = reactive({
bank: "工商银行",
time: "2022-10-11 10:12:30",
code: "12321123312313",
carID: "贵A123321",
});
// 验证规则
const rules = {
receiving1: [
{
required: true,
message: "请选择",
trigger: ["change", "blur"],
},
],
receiving2: [
{
required: true,
message: "请选择",
trigger: ["change", "blur"],
},
],
code: [
{
required: true,
message: "请输入",
trigger: ["change", "blur"],
},
],
phone: [
{
required: true,
message: "请输入手机号",
trigger: ["change", "blur"],
},
{
// 自定义验证函数,见上说明
validator: (rule, value, callback) => {
// 上面有说,返回true表示校验通过,返回false表示不通过
console.log(checkStr(value, "mobile"), "0011");
return checkStr(value, "mobile");
},
message: "手机号码不正确",
trigger: ["change", "blur"],
},
],
// status: [{
// required: true,
// message: '请选择状态',
//
// trigger: ['change', 'blur'],
};
// 验证提示类型(toast要版本为1.3.5才支持)
const errorType = ["message", "border-bottom", "toast"];

// 设置验证规则
const myForm = ref(null);
onReady(() => {
myForm.value.setRules(rules);
});

// 单选数据列表
const radiolist1 = reactive([
{
name: "营业点自提",
disabled: false,
},
{
name: "邮寄",
disabled: false,
},
]);

// 单选
const radioChange = (n) => {
console.log("radioChange", n);
// if (n == '卡退费') {
// flag.value = true
// console.log(flag.value);
// } else {
// flag.value = false
// console.log(flag.value);
// }
};

// // 提交
// const submit = () => {
// myForm.value.validate((valid) => {
// console.log(valid);
// if (valid) {
// console.log('验证通过', form);
// } else {
// console.log('验证未通过');
// }
// })
// }
const toPage = () => {
navTo("/subpackage/after-sale/account-change/release-products");
// uni.showModal({
// title: '模拟两种情况',
// confirmText: '有卡有签',
// cancelText: '无卡无签',
// success: function(res) {
// if (res.confirm) {
// console.log('用户点击确定');
// navTo('/pages/bluetooth/bluetooth')
// } else if (res.cancel) {
// console.log('用户点击取消');
// navTo('/subpackage/after-sale/ETC-log-off/upload-card')
// }
// }
// });
};
import navBar from "./components/nav-bar.vue";
import { checkStr } from "@/utils/utils";
import { ref, reactive } from "vue";
import { navTo } from "@/utils/utils";
import { onReady } from "@dcloudio/uni-app";

// 表单数据
const form = reactive({
bank: "工商银行",
time: "2022-10-11 10:12:30",
code: "12321123312313",
carID: "贵A123321",
});
// 验证规则
const rules = {
receiving1: [
{
required: true,
message: "请选择",
trigger: ["change", "blur"],
},
],
receiving2: [
{
required: true,
message: "请选择",
trigger: ["change", "blur"],
},
],
code: [
{
required: true,
message: "请输入",
trigger: ["change", "blur"],
},
],
phone: [
{
required: true,
message: "请输入手机号",
trigger: ["change", "blur"],
},
{
// 自定义验证函数,见上说明
validator: (rule, value, callback) => {
// 上面有说,返回true表示校验通过,返回false表示不通过
console.log(checkStr(value, "mobile"), "0011");
return checkStr(value, "mobile");
},
message: "手机号码不正确",
trigger: ["change", "blur"],
},
],
};
// 验证提示类型(toast要版本为1.3.5才支持)
const errorType = ["message", "border-bottom", "toast"];

// 设置验证规则
const myForm = ref(null);
onReady(() => {
myForm.value.setRules(rules);
});

// 单选数据列表
const radiolist1 = reactive([
{
name: "营业点自提",
disabled: false,
},
{
name: "邮寄",
disabled: false,
},
]);

// 单选
const radioChange = (n) => {
console.log("radioChange", n);
};


const toPage = () => {
navTo("/subpackage/after-sale/account-change/release-products");
};
</script> </script>


<style> <style>
page {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
background: #eef7f7;
}
page {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
background: #eef7f7;
}
</style> </style>
<style lang="scss" scoped> <style lang="scss" scoped>
.oderPage {
flex: 1;
width: 100%;
.head {
padding: 30rpx;
font-size: 28rpx;
color: #303133;
padding-bottom: 0;
}
.content {
background-color: #fff;
background-color: #fff;
margin-top: 30rpx;
padding: 0 30rpx;
.row {
display: flex;
justify-content: space-between;
padding: 30rpx 0;
border-bottom: 1rpx solid #dcdcdc;
}
}
.from {
background-color: #fff;
margin-top: 30rpx;
padding: 0 30rpx;
::v-deep .u-form-item {
padding: 0;
line-height: normal;
.u-form-item__message {
margin-bottom: 12rpx;
}
}
.from_item {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
height: 80rpx;
border-bottom: 1rpx solid #dcdcdc;
.btn {
font-size: 24rpx;
font-family: Microsoft YaHei;
font-weight: 400;
color: #ffffff;
background: #00b38b;
border-radius: 10rpx;
padding: 10rpx 15rpx;
}
::v-deep .input {
text-align: right;
flex: 1;
input {
text-align: right;
}
}
}
.from_item1 {
display: flex;
flex-wrap: nowrap;
flex-direction: column;
justify-content: space-between;
padding: 30rpx;
border-bottom: #dcdcdc 1px solid;
input {
text-align: right;
}
.textarea {
background-color: #f1f1f1;
width: 100%;
border-radius: 20rpx;
margin-top: 10rpx;
text-indent: 1rem;
height: 180rpx;
padding: 20rpx;
box-sizing: border-box;
}
}
}
}
.submit {
background: linear-gradient(to left, #43a1e0 0%, #13e7c1 100%);
width: 670rpx;
height: 80rpx;
color: #fff;
border-radius: 100rpx;
position: fixed;
left: 50%;
transform: translate(-50%);
bottom: 60rpx;
font-size: 32rpx;
}
</style>
.oderPage {
flex: 1;
width: 100%;

.head {
padding: 30rpx;
font-size: 28rpx;
color: #303133;
padding-bottom: 0;
}

.content {
background-color: #fff;
background-color: #fff;
margin-top: 30rpx;
padding: 0 30rpx;

.row {
display: flex;
justify-content: space-between;
padding: 30rpx 0;
border-bottom: 1rpx solid #dcdcdc;
}
}
.from {
background-color: #fff;
margin-top: 30rpx;
padding: 0 30rpx;
::v-deep .u-form-item {
padding: 0;
line-height: normal;
.u-form-item__message {
margin-bottom: 12rpx;
}
}
.from_item {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
height: 80rpx;
border-bottom: 1rpx solid #dcdcdc;
.btn {
font-size: 24rpx;
font-family: Microsoft YaHei;
font-weight: 400;
color: #ffffff;
background: #00b38b;
border-radius: 10rpx;
padding: 10rpx 15rpx;
}
::v-deep .input {
text-align: right;
flex: 1;
input {
text-align: right;
}
}
}
.from_item1 {
display: flex;
flex-wrap: nowrap;
flex-direction: column;
justify-content: space-between;
padding: 30rpx;
border-bottom: #dcdcdc 1px solid;
input {
text-align: right;
}
.textarea {
background-color: #f1f1f1;
width: 100%;
border-radius: 20rpx;
margin-top: 10rpx;
text-indent: 1rem;
height: 180rpx;
padding: 20rpx;
box-sizing: border-box;
}
}
}
}
.submit {
background: linear-gradient(to left, #43a1e0 0%, #13e7c1 100%);
width: 670rpx;
height: 80rpx;
color: #fff;
border-radius: 100rpx;
position: fixed;
left: 50%;
transform: translate(-50%);
bottom: 60rpx;
font-size: 32rpx;
}
</style>

+ 2
- 2
subpackage/after-sale/card-Renewal/renewal-confirm.vue Parādīt failu

<view> 3.xxxxxxxx </view> <view> 3.xxxxxxxx </view>
<view> 4.xxxxxxxx </view> <view> 4.xxxxxxxx </view>
</view> --> </view> -->
<button class="submit" @click="toPage" v-show="!state.flag">卡签续期</button>
<button class="submit" @click="toBack" v-show="state.flag">返回服务中心</button>
<button class="submit" @click="toPage" v-if="!state.flag">卡签续期</button>
<button class="submit" @click="toBack" v-else="state.flag">返回服务中心</button>
<view class="mask" v-show="state.showPopup"> <view class="mask" v-show="state.showPopup">
<view class="main"> <view class="main">
<view class="top"> <view class="top">

+ 2
- 2
subpackage/after-sale/card-deactivation-activation/deactivation-activation-confirm.vue Parādīt failu

<view> 3.xxxxxxxx </view> <view> 3.xxxxxxxx </view>
<view> 4.xxxxxxxx </view> <view> 4.xxxxxxxx </view>
</view> --> </view> -->
<button class="submit" @click="toPage" v-show="!state.flag">{{orderInfos.cardStatus ==1?'卡签停用':'卡签启用'}}</button>
<button class="submit" @click="toBack" v-show="state.flag">返回服务中心</button>
<button class="submit" @click="toPage" v-if="!state.flag">{{orderInfos.cardStatus ==1?'卡签停用':'卡签启用'}}</button>
<button class="submit" @click="toBack" v-else>返回服务中心</button>
<view class="mask" v-show="state.showPopup"> <view class="mask" v-show="state.showPopup">
<view class="main"> <view class="main">
<view class="top"> <view class="top">

+ 2
- 3
subpackage/after-sale/equipment-upgrade/upgrade-confirm.vue Parādīt failu

</view> </view>
</view> </view>
</view> </view>
<button class="submit" @click="toPage" v-show="!state.flag" :disabled="state.disabled">设备升级</button>
<button class="submit" @click="toBack" v-show="state.flag">返回服务中心</button>
<button class="submit" @click="toPage" v-if="!state.flag" :disabled="state.disabled">设备升级</button>
<button class="submit" @click="toBack" v-else>返回服务中心</button>


<view class="mask" v-show="state.showPopup"> <view class="mask" v-show="state.showPopup">
<view class="main"> <view class="main">


//返回列表 //返回列表
const toBack = () => { const toBack = () => {
// navTo("/pages/service/service")
uni.navigateBack({ uni.navigateBack({
delta: 2 delta: 2
}) })

+ 7
- 7
subpackage/after-sale/pin-code-deblocking/pin-code-confirm.vue Parādīt failu

</view> </view>
</view> </view>
</view> </view>
<button class="submit" @click="toPage" v-show="!state.flag" :disabled="state.disabled">卡PIN码解锁</button>
<button class="submit" @click="toBack" v-show="state.flag">返回服务中心</button>
<button class="submit" @click="toPage" v-if="!state.flag" :disabled="state.disabled">卡PIN码解锁</button>
<button class="submit" @click="toBack" v-else>返回服务中心</button>


<view class="mask" v-show="state.showPopup"> <view class="mask" v-show="state.showPopup">
<view class="main"> <view class="main">
} else if (cosResponse == "9303") { } else if (cosResponse == "9303") {
tools.showModalAlert("此卡pin已永久锁定!请联系客服进行换卡处理!", function successFunc() {}); tools.showModalAlert("此卡pin已永久锁定!请联系客服进行换卡处理!", function successFunc() {});
} else { } else {
console.log("卡执行指令结果",res)
console.log("卡执行指令结果", res)
let cosResponse = "" let cosResponse = ""
for(let i = 0; i < res.length; i++){
if(i < res.length - 1 ){
for (let i = 0; i < res.length; i++) {
if (i < res.length - 1) {
cosResponse += res[i] + "," cosResponse += res[i] + ","
}else{
} else {
cosResponse += res[i] cosResponse += res[i]
} }
} }
color: #333; color: #333;
} }
} }
</style>
</style>

+ 128
- 122
subpackage/after-sale/refundPage.vue Parādīt failu

<view class="content"> <view class="content">
<text class="title">卡上余额(元)</text> <text class="title">卡上余额(元)</text>
<view class=""> <view class="">
<text style="font-size: 30rpx;">¥</text>{{state.hasData.cardBalance? state.hasData.cardBalance / 100:state.hasData.cardBalance}}
<text
style="font-size: 30rpx;">¥</text>{{state.hasData.cardBalance? state.hasData.cardBalance / 100:state.hasData.cardBalance}}
</view> </view>
</view> </view>
<view class="from"> <view class="from">
</u-radio-group> </u-radio-group>
</view> </view>
<view v-if="flag"> <view v-if="flag">
<view class="from_item" >
<view class="from_item">
<text>联系人姓名:</text> <text>联系人姓名:</text>
<input type="text" name="" id="" placeholder="请输入联系人姓名" v-model="state.hasData.customerName"> <input type="text" name="" id="" placeholder="请输入联系人姓名" v-model="state.hasData.customerName">
</view> </view>
</view> </view>
<view class="from_item" v-if="state.isShow"> <view class="from_item" v-if="state.isShow">
<text>开户行支行:</text> <text>开户行支行:</text>
<input type="number" placeholder="开户行支行" v-model="state.branchName">
<input placeholder="开户行支行" v-model="state.branchName">
</view> </view>
<view class="from_item" v-if="state.isShow"> <view class="from_item" v-if="state.isShow">
<text>退费银行卡号:</text> <text>退费银行卡号:</text>
<input type="number" placeholder="请输入银行卡号" v-model="state.bankCardId">
<input type="number" placeholder="请输入银行卡号" v-model="state.bankCardId">
</view> </view>
<view class="from_item" v-if="state.isShow"> <view class="from_item" v-if="state.isShow">
<text>开户行地址:</text> <text>开户行地址:</text>
<picker mode="region" @change="choiceAddress" >
<picker mode="region" @change="choiceAddress">
<view>{{state.addressShow}}</view> <view>{{state.addressShow}}</view>
</picker> </picker>
</view> </view>
<u-form-item label="手机号" class="phoneBox" >
<u-form-item label="手机号" class="phoneBox">
<u-input placeholder='请输入手机号' type="number" v-model="state.tel" /> <u-input placeholder='请输入手机号' type="number" v-model="state.tel" />
<u-button type="success" size="mini" @click="getCode" v-if="waitTime==0">获取验证码</u-button> <u-button type="success" size="mini" @click="getCode" v-if="waitTime==0">获取验证码</u-button>
<text class="agreen" v-else>{{waitTime}}后重试</text> <text class="agreen" v-else>{{waitTime}}后重试</text>
</u-form-item> </u-form-item>
<u-form-item label="验证码" >
<u-form-item label="验证码">
<u-input placeholder='请输入验证码' type="number" v-model="state.newMobileCode" class="code" /> <u-input placeholder='请输入验证码' type="number" v-model="state.newMobileCode" class="code" />
</u-form-item> </u-form-item>
<view class="from_item"> <view class="from_item">
</u-radio-group> </u-radio-group>
</view> </view>
</view> </view>
</view> </view>
<button class="submit" @click="sure()">确认退费</button> <button class="submit" @click="sure()">确认退费</button>
</view> </view>
</template> </template>


<script setup lang="ts"> <script setup lang="ts">
import {ref,reactive} from "vue";
import { checkStr, msg } from "@/utils/utils";
import {navTo} from "@/utils/utils";
import {queryRefund,queryCardFreeExit,queryRefundApply,sendCode} from "@/utils/network/api.js";
import {onLoad} from "@dcloudio/uni-app";
import {request} from "@/utils/network/request.js";
import {stringToJson} from "@/utils/network/encryption";
import { ref, reactive } from "vue";
import { checkStr, msg } from "@/utils/utils";
import { navTo } from "@/utils/utils";
import { queryRefund, queryCardFreeExit, queryRefundApply, sendCode } from "@/utils/network/api.js";
import { onLoad } from "@dcloudio/uni-app";
import { request } from "@/utils/network/request.js";
import { stringToJson } from "@/utils/network/encryption";
// 单选数据列表 // 单选数据列表
const radiolist1 = reactive([{ const radiolist1 = reactive([{
name: '卡退费',
disabled: false
},
{
name: '余额补领',
disabled: false
},
], )
name: '卡退费',
disabled: false
},
{
name: '余额补领',
disabled: false
},
])
const radiolist2 = reactive([{ const radiolist2 = reactive([{
name: '银行卡',
disabled: false
},
{
name: '现金',
disabled: false
},
], )
name: '银行卡',
disabled: false
},
{
name: '现金',
disabled: false
},
])
const radiolist3 = reactive([{ const radiolist3 = reactive([{
name: '个人',
disabled: false
},
{
name: '单位',
disabled: false
},
], )
name: '个人',
disabled: false
},
{
name: '单位',
disabled: false
},
])
const state = reactive({ const state = reactive({
name:'',
phone:"",
bank:"",
vehicleId:"", //车牌号
hasData:{}, //通过车牌查出来的数据
address:"", //地址
addressShow:"请选择开户行地址", //展示的地址
tel:"",
newMobileCode:"",
bankType:"", //开户行
branchName:"", //开户行支行
refoundMethod:1, //退款方式 1:银行卡 2现金
array: ['贵阳银行股份有限公司', '中国工商银行股份有限公司', '中国建设银行股份有限公司', '中国银行股份有限公司','中国农业银行股份有限公司','中国交通银行股份有限公司',
'兴业银行股份有限公司','平安银行股份有限公司','中国邮政储蓄银行股份有限公司','中国光大银行股份有限公司','贵州银行股份有限公司','中国民生银行股份有限公司',
'招商银行股份有限公司','.农村信用社联合社','农村商业银行'],
name: '',
phone: "",
bank: "",
vehicleId: "", //车牌号
hasData: {}, //通过车牌查出来的数据
address: "", //地址
addressShow: "请选择开户行地址", //展示的地址
tel: "",
newMobileCode: "",
bankType: "", //开户行
branchName: "", //开户行支行
refoundMethod: 1, //退款方式 1:银行卡 2现金
array: ['贵阳银行股份有限公司', '中国工商银行股份有限公司', '中国建设银行股份有限公司', '中国银行股份有限公司', '中国农业银行股份有限公司', '中国交通银行股份有限公司',
'兴业银行股份有限公司', '平安银行股份有限公司', '中国邮政储蓄银行股份有限公司', '中国光大银行股份有限公司', '贵州银行股份有限公司', '中国民生银行股份有限公司',
'招商银行股份有限公司', '.农村信用社联合社', '农村商业银行'],
index: -1, index: -1,
cusType:1, //用户类型 1-个人 2-单位
bankCardId:"", //银行卡号
isShow:true, //是否展示银行卡那些
cusType: 1, //用户类型 1-个人 2-单位
bankCardId: "", //银行卡号
isShow: true, //是否展示银行卡那些
}); });
// 单选默认数据 // 单选默认数据
const radiovalue1 = ref('卡退费') const radiovalue1 = ref('卡退费')
console.log('radioChange', n); console.log('radioChange', n);
if (n == '银行卡') { if (n == '银行卡') {
refundType.value = true refundType.value = true
state.refoundMethod=1
state.isShow=true;
state.refoundMethod = 1
state.isShow = true;
console.log(refundType.value); console.log(refundType.value);
} else { } else {
refundType.value = false refundType.value = false
state.refoundMethod=2
state.isShow=false;
state.bankType="";
state.branchName="";
state.bankCardId="";
state.address="";
state.refoundMethod = 2
state.isShow = false;
state.bankType = "";
state.branchName = "";
state.bankCardId = "";
state.address = "";
console.log(refundType.value); console.log(refundType.value);
} }
} }
console.log('radioChange', n); console.log('radioChange', n);
if (n == '个人') { if (n == '个人') {
refundType3.value = true refundType3.value = true
state.cusType=1
state.cusType = 1
console.log(refundType.value); console.log(refundType.value);
} else { } else {
refundType3.value = false refundType3.value = false
state.cusType=2
state.cusType = 2
console.log(refundType.value); console.log(refundType.value);
} }
} }
/*视图进入后操作*/ /*视图进入后操作*/
onLoad((option) => { onLoad((option) => {
state.vehicleId = option.vehicleId state.vehicleId = option.vehicleId
queryRefundAction();
queryRefundAction();
}); });
const sure=()=>{
const sure = () => {
// 卡退费 // 卡退费
if(flag.value){
if (flag.value) {
// 银行卡才需要做这些判断 // 银行卡才需要做这些判断
if(refundType.value){
if(state.array[state.index]=='请选择'){
if (refundType.value) {
if (state.array[state.index] == '请选择') {
msg("请输入开户行!"); msg("请输入开户行!");
return; return;
} }
if(!state.branchName){
if (!state.branchName) {
msg("请输入开户行支行!"); msg("请输入开户行支行!");
return; return;
} }
if(state.addressShow=="请选择开户行地址"){
if (state.addressShow == "请选择开户行地址") {
msg("请选择开户行地址!"); msg("请选择开户行地址!");
return; return;
} }
if(!state.bankCardId){
if (!state.bankCardId) {
msg("请输入银行卡号!"); msg("请输入银行卡号!");
return; return;
} }
} }
if (!checkStr(state.tel, "mobile")) { if (!checkStr(state.tel, "mobile")) {
msg("请输入正确的手机号!");
return;
msg("请输入正确的手机号!");
return;
} }
if(!state.newMobileCode){
if (!state.newMobileCode) {
msg("请输入验证码!"); msg("请输入验证码!");
return; return;
} }
cardFree(); cardFree();
}else{
} else {
// 余额退费 // 余额退费
balanceReclaiming(); balanceReclaiming();
} }
method: "POST", method: "POST",
showLoading: true, showLoading: true,
}; };
request(queryRefund, options).then((res) => { request(queryRefund, options).then((res) => {
const data = stringToJson(res.bizContent);
console.log("data",data)
// 有无数据卡数据
if(data.hasData){
state.hasData=data.data[0]
}
const data = stringToJson(res.bizContent);
console.log("data", data)
// 有无数据卡数据
if (data.hasData) {
state.hasData = data.data[0]
}
}); });
} }
// 卡退费 // 卡退费
const cardFree=()=>{
const cardFree = () => {
var data = { var data = {
orderId: state.hasData.orderId, //退费信息编号 orderId: state.hasData.orderId, //退费信息编号
bankType: state.bankType, //开户行 bankType: state.bankType, //开户行
method: "POST", method: "POST",
showLoading: true, showLoading: true,
}; };
console.log("options",options)
console.log("options", options)
request(queryCardFreeExit, options).then((res) => { request(queryCardFreeExit, options).then((res) => {
const data = stringToJson(res.bizContent);
console.log("data",data)
navTo(`/subpackage/after-sale/refundPage-result`)
const data = stringToJson(res.bizContent);
console.log("data", data)
navTo(`/subpackage/after-sale/refundPage-result`)
}); });
} }
// 余额补领 // 余额补领
const balanceReclaiming=()=>{
const balanceReclaiming = () => {
var data = { var data = {
orderId: state.hasData.orderId, //退费信息编号 orderId: state.hasData.orderId, //退费信息编号
// orderId: "2a0cc6aca04548a7ac42ee1606eac4f8", //退费信息编号
}; };
const options = { const options = {
type: 2, type: 2,
method: "POST", method: "POST",
showLoading: true, showLoading: true,
}; };
request(queryRefundApply, options).then((res) => { request(queryRefundApply, options).then((res) => {
const data = stringToJson(res.bizContent);
console.log("data",data)
navTo(`/subpackage/after-sale/refundPage-result`)
const data = stringToJson(res.bizContent);
console.log("data", data)
navTo(`/subpackage/after-sale/refundPage-result`)
}); });
} }
function choiceAddress(e){
console.log("e",e.detail.value)
state.address=e.detail.value;
state.addressShow=state.address[0]+"-"+state.address[1]+"-"+state.address[2]
function choiceAddress(e) {
console.log("e", e.detail.value)
state.address = e.detail.value;
state.addressShow = state.address[0] + "-" + state.address[1] + "-" + state.address[2]
} }
const getCode = () => { const getCode = () => {
console.log(123); console.log(123);
icon: 'none' icon: 'none'
}); });
} }
} }
// 发送验证码 // 发送验证码
const sendCodeApi = (type) => { const sendCodeApi = (type) => {
method: "POST", //提交方式(默认POST) method: "POST", //提交方式(默认POST)
showLoading: true, //是否显示加载中(默认显示) showLoading: true, //是否显示加载中(默认显示)
}; };
//调用方式 //调用方式
request(sendCode, options) request(sendCode, options)
.then((res) => { .then((res) => {
waitTime.value -= 1 waitTime.value -= 1
}, 1000) }, 1000)
} }
function bindPickerChange(e){
function bindPickerChange(e) {
state.index = e.detail.value state.index = e.detail.value
} }
</script> </script>
} }
</style> </style>
<style lang="scss" scoped> <style lang="scss" scoped>
::v-deep .u-icon__icon{
::v-deep .u-icon__icon {
top: -4px !important; top: -4px !important;
} }

.oderPage { .oderPage {
flex: 1; flex: 1;
width: 100%; width: 100%;


.content { .content {
display: flex;
flex-direction: column;
/* justify-content: center; */
align-items: center;
width: 750rpx;
// height: 266rpx;
background-color: #fff;
margin-bottom: 30rpx;
padding: 75rpx 0;
display: flex;
flex-direction: column;
/* justify-content: center; */
align-items: center;
width: 750rpx;
// height: 266rpx;
background-color: #fff;
margin-bottom: 30rpx;
padding: 75rpx 0;


.title { .title {
font-size: 28rpx; font-size: 28rpx;
// transform: translate(-50%); // transform: translate(-50%);
margin: 30rpx auto; margin: 30rpx auto;
} }

::v-deep .u-form-item--right__content__slot { ::v-deep .u-form-item--right__content__slot {
display: flex; display: flex;
justify-content: space-between;
justify-content: space-between;

.btn { .btn {
flex: 1; flex: 1;
background: transparent; background: transparent;
font-size: 30rpx; font-size: 30rpx;
color: #15E5C1; color: #15E5C1;
z-index: 999; z-index: 999;
} }
} }
.agreen{

.agreen {
color: rgb(25, 190, 197); color: rgb(25, 190, 197);
} }
::v-deep .code>view{

::v-deep .code>view {
text-align: right !important; text-align: right !important;
} }
::v-deep .code{

::v-deep .code {
width: 100% !important; width: 100% !important;
} }
</style>
</style>

+ 1
- 1
utils/network/request.js Parādīt failu

} else { } else {


let content = s4.decryptData_CBC(res, sm4Key) let content = s4.decryptData_CBC(res, sm4Key)
console.log('请求成功返回参数:', code, content)
console.log('请求成功返回参数:', code, content, res)
resolve(content.data) resolve(content.data)
} }
} }

+ 61
- 60
utils/util/fileData.js Parādīt failu

} }
export function AsciToHexString(strAsci, nLen) { export function AsciToHexString(strAsci, nLen) {
let s = String(strAsci); let s = String(strAsci);
let encoder = new TextEncoder("UTF-8");
// let encoder = new TextEncoder("UTF-8");
let encoder = new TextEncoder("GBK");
let bytes = encoder.encode(s); let bytes = encoder.encode(s);
let strResult = HexToString(bytes); let strResult = HexToString(bytes);
let strLen = strResult.length; let strLen = strResult.length;
} }


const DIGITS_UPPER = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', const DIGITS_UPPER = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
'E', 'F'
'E', 'F'
]; ];
export function HexToString(inHex) { export function HexToString(inHex) {
let i; let i;
* @param {string} data * @param {string} data
* @returns {string} * @returns {string}
*/ */
export function HexToStrig(data,charType=1) {
let str = data.substring(data.length - 2);
while (str === "00") {
data = data.substring(0, data.length - 2);
if (data.length === 0) {
return "";
}
str = data.substring(data.length - 2);
}
const asd = hexStringToByteArray(data);
try {
if(charType ==1){
str = new TextDecoder("GBK").decode(asd);
}else{
str = new TextDecoder("UTF-8").decode(asd);
}
} catch (e) {
console.error(e);
}
return str;
export function HexToStrig(data, charType = 1) {
let str = data.substring(data.length - 2);
while (str === "00") {
data = data.substring(0, data.length - 2);
if (data.length === 0) {
return "";
}
str = data.substring(data.length - 2);
}
const asd = hexStringToByteArray(data);
try {
str = new TextDecoder("GBK").decode(asd);
// if(charType ==1){
// }else{
// str = new TextDecoder("UTF-8").decode(asd);
// }
} catch (e) {
console.error(e);
}
return str;
} }


/** /**
* @returns {Uint8Array} * @returns {Uint8Array}
*/ */
export function hexStringToByteArray(str) { export function hexStringToByteArray(str) {
if (!str) {
return new Uint8Array();
}
const result = new Uint8Array(str.length / 2);
for (let i = 0; i < str.length; i += 2) {
result[i / 2] = parseInt(str.substr(i, 2), 16);
}
return result;
if (!str) {
return new Uint8Array();
}
const result = new Uint8Array(str.length / 2);
for (let i = 0; i < str.length; i += 2) {
result[i / 2] = parseInt(str.substr(i, 2), 16);
}
return result;
} }


/** /**
* @returns {string} * @returns {string}
*/ */
export function HexToInt(data) { export function HexToInt(data) {
let num = -1;
try {
num = parseInt(data, 16);
} catch (e) {
console.error(e);
}
return num.toString();
let num = -1;
try {
num = parseInt(data, 16);
} catch (e) {
console.error(e);
}
return num.toString();
} }




function guessEncoding(bytes) { function guessEncoding(bytes) {
// 检查字节序列是否以 BOM(字节顺序标记)开头
if (bytes[0] === 0xEF && bytes[1] === 0xBB && bytes[2] === 0xBF) {
return 'UTF-8';
} else if (bytes[0] === 0xFE && bytes[1] === 0xFF) {
return 'UTF-16BE';
} else if (bytes[0] === 0xFF && bytes[1] === 0xFE) {
return 'UTF-16LE';
} else {
// 统计每个字节的频率
let freq = {};
for (let i = 0; i < bytes.length; i++) {
let b = bytes[i];
freq[b] = freq[b] ? freq[b] + 1 : 1;
}
// 检查字节序列是否以 BOM(字节顺序标记)开头
if (bytes[0] === 0xEF && bytes[1] === 0xBB && bytes[2] === 0xBF) {
return 'UTF-8';
} else if (bytes[0] === 0xFE && bytes[1] === 0xFF) {
return 'UTF-16BE';
} else if (bytes[0] === 0xFF && bytes[1] === 0xFE) {
return 'UTF-16LE';
} else {
// 统计每个字节的频率
let freq = {};
for (let i = 0; i < bytes.length; i++) {
let b = bytes[i];
freq[b] = freq[b] ? freq[b] + 1 : 1;
}


// 检查是否存在 GBK 的特定字节序列
if (freq[0x81] && freq[0x81] > 0 && freq[0x40] && freq[0x40] > 0) {
return 'GBK';
}
// 检查是否存在 GBK 的特定字节序列
if (freq[0x81] && freq[0x81] > 0 && freq[0x40] && freq[0x40] > 0) {
return 'GBK';
}


// 如果没有特定的 GBK 字节序列,则假设为 UTF-8
return 'UTF-8';
}
// 如果没有特定的 GBK 字节序列,则假设为 UTF-8
return 'UTF-8';
}
} }

Notiek ielāde…
Atcelt
Saglabāt