瀏覽代碼

9901

master
yangteng 9 月之前
父節點
當前提交
358f5cca4c

+ 4
- 3
datas/9901Jump.js 查看文件

@@ -10,9 +10,10 @@ export function jump(type,item){
// plateNum 车牌号码和颜色编号 例:浙A0P73H_0
// orderNo 订单编号
// afterType 售后办理类型 1.挂失/解挂 3.更换 4.续期 5.补办 6.注销 7.换货 8.退货 9.补货
// afterType 售后办理类型 1.挂失/解挂 3.更换 4.续期 5.补办(增补设备) 6.注销 7.换货 8.退货 9.补货(申请补货)
// orderType 订单类型 1.新办 2.售后

// 需要小程序跳转的:
// 1.新办理的订单在设备在已发货未二发前可进行退货、换货、补货的业务。
// 2. 已激活设备可发起挂失、解挂、更换、补办、注销、续期售后业务。针对更换、补办产生的订单在已发货未二发前可以进行退货、换货、补货业务。
@@ -60,7 +61,7 @@ export function jump(type,item){
// 补卡 补签(没有补卡签)
redirectUrl="/pages/order/order"
handleType="aftersale"
afterType=9
afterType=5
}else{
// 正常支付
redirectUrl="/pages/order/order"
@@ -76,7 +77,7 @@ export function jump(type,item){
redirectUrl="/pages/order/order"
}else if(data['orderType']=='FILL_OBU'|| data['orderType']=='FILL_CARD'){
// 补卡 补签(没有补卡签)
afterType=9
afterType=5
orderType=2
handleType="aftersale"
redirectUrl="/pages/order/order"

+ 7
- 1
pages.json 查看文件

@@ -965,6 +965,12 @@
"navigationBarTitleText": "支付宝代扣"
}
},
{
"path": "sign-up-ali-yd",
"style": {
"navigationBarTitleText": "支付宝代扣"
}
},
{
"path": "deductionAccountAssociation",
"style": {
@@ -1845,7 +1851,7 @@
"root": "subpackage/carPark",
"plugins": {
"issuer-plugin": {
"version": "dev-96c993265938f3d82316b4a8d8941a4b",
"version": "dev-91c0171ac789922cabbe091d3e64301c",
// "version": "1.0.2",
"provider": "wxa2d9acdd1054e69b"
}

+ 5
- 5
pages/order/components/order-list-item-new.vue 查看文件

@@ -84,10 +84,10 @@

<!-- 待收货 -->
<view class="btns" v-else-if="item.orderStep == OrderStatus.待收货">
<view class="btn btn-normal" @click.stop="gotoCheckLogistics(item)">查看物流
</view>
<view class="btn btn-normal" @click.stop="gotoReturnOrder(item)">申请退货
</view>
<view class="btn btn-normal" @click.stop="gotoCheckLogistics(item)">查看物流</view>
<!-- 待收货异地 发货之后确认收货之前可以补货 -->
<view class="btn btn-normal" @click.stop="gotoReplenishmentOrder(item)" v-if="item.deviceType == deviceType">申请补货</view>
<view class="btn btn-normal" @click.stop="gotoReturnOrder(item)" v-else>申请退货</view>
<view class="btn btn-primary" @click.stop="gotoConfirmReceipt(item)">确认收货</view>
<view class="btn btn-primary" @click.stop="closeOrder(item)" v-if="item.finishOrder">结束订单</view>
</view>
@@ -95,7 +95,7 @@
<!-- 待激活 -->
<view class="btns" v-else-if="item.orderStep == OrderStatus.待激活">
<view class="btn btn-normal" @click.stop="gotoReturnOrder(item)" v-if="item.applyReturn">申请退货</view>
<view class="btn btn-normal" @click.stop="gotoReturnOrder(item)" v-if="item.applyReturn || item.deviceType == deviceType">申请退货</view>
<view class="btn btn-normal" @click.stop="gotoExchangeOrder(item)">申请换货</view>
<view class="btn btn-normal" @click.stop="gotoReplenishmentOrder(item)" v-if="item.deviceType == deviceType">申请补货</view>
<view class="btn btn-primary" @click.stop="gotoActiveOrder(item)">去激活</view>

+ 4
- 2
subpackage/orders/order-details-new.vue 查看文件

@@ -434,15 +434,17 @@
<!-- 待收货 -->
<view v-if="state.orderInfo.orderStep == OrderStatus.待收货" class="btn-status">
<view class="btn space" @click="gotoCheckLogistics(state.orderInfo)">查看物流</view>
<view class="btn space" @click="gotoReturnOrder(state.orderInfo)">申请退货</view>
<view class="btn space" @click.stop="gotoReplenishmentOrder(state.orderInfo)" v-if="state.orderInfo.deviceType == deviceType">申请补货</view>
<view class="btn space" @click="gotoReturnOrder(state.orderInfo)" v-else>申请退货</view>
<view class="btn-green space" @click="gotoConfirmReceipt(state.orderInfo)">确认收货</view>
<view class="btn-green" @click.stop="closeOrder(state.orderInfo)"
v-if="state.orderInfo.finishOrder">结束订单</view>
</view>
<!-- 待激活 -->
<!-- 确认收货之后可以退换补 异地 -->
<view v-if="state.orderInfo.orderStep == OrderStatus.待激活" class="btn-status">
<view class="btn space" @click="gotoReturnOrder(state.orderInfo)"
v-if="state.orderInfo.applyReturn">申请退货</view>
v-if="state.orderInfo.applyReturn || state.orderInfo.deviceType == deviceType">申请退货</view>
<view class="btn space" @click="gotoExchangeOrder(state.orderInfo)">申请换货</view>
<view class="btn space" @click.stop="gotoReplenishmentOrder(state.orderInfo)" v-if="state.orderInfo.deviceType == deviceType">申请补货</view>
<view class="btn-green space" @click="gotoActiveOrder(state.orderInfo)">去激活</view>

+ 274
- 0
subpackage/orders/sign-up-ali-yd.vue 查看文件

@@ -0,0 +1,274 @@
<template>
<image style="
margin-top: 20rpx;
width: 100%;
height: 240rpx;
background-color: #eeeeee;
" :src="`${$imgUrl}applyCard/car-service.png`"></image>
<view class="title"> 支付宝签约代扣 </view>
<view class="value">
<view class="content_1">
支付宝签约代扣是支付宝支付为车主用户提供的安全便捷的智慧服务
</view>
<view class="content_2">
本次将为贵州黔通智联科技股份有限公司开启免密支付服务,后续相关的费用将通过支付宝签约代扣从你的支付宝账户扣除
</view>
<view class="content_3">
注:签约成功后请返回本页面,再次点击开通服务
</view>
</view>
<view class="as-layout-horizontal agreement">
<checkbox-group @change="checkboxChange">
<checkbox :checked="state.checked" style="transform: scale(0.8)" />我已阅读并同意
</checkbox-group>
<text style="color:#007AFF;text-decoration: underline;" @click="downAuthD()">《代扣协议》</text>
</view>
<view class="action">
<button type="default" class="button" @click="savaHandle()">
开通服务
</button>
</view>
</template>

<script setup lang="ts">
import { onLoad, onShow } from "@dcloudio/uni-app";
import { reactive } from "vue";
import { request } from "@/utils/network/request.js";

import { stringToJson } from "@/utils/network/encryption";
import { fileURL } from "@/datas/fileURL.js";
import { msg, confirm } from "@/utils/utils";
import {
aliPayConfigIdTwo,
obtainUserId,
infoQuery,
envs, etcQYAction
} from "@/utils/network/api";
const imgURL = `${fileURL}image/`;

const state = reactive({
openid: "",
orderId: "",
id: "",
clientFee: "",
code: "",
checked: false,
agreeURL: "",
});
onLoad((option : any) => {
state.orderId = option.orderId;
getInfo();
});
const checkboxChange = (e) => {
state.checked = !state.checked;
console.log(state.checked);
};
const downAuthD = () => {
uni.downloadFile({
url: state.agreeURL,
filePath: uni.env.USER_DATA_PATH + '/' + '代扣协议.docx',
success(res) {
const filePath = res.filePath
uni.openDocument({
filePath: filePath,
fileType: 'docx',
showMenu: true, //关键点
success: function (res) {
},
fail: function (err) {
msg("打开文档失败");
}
});
},
fail: function (err) {
msg("下载文档失败");
console.log("err", err)
},
complete(res) {

}
})
}
const getInfo = () => {
//参数说明
let options = {
type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
data: {
businessType: 'WITHHOLD_AGREEMENT' //代扣协议
}, //请求参数
method: "POST", //提交方式(默认POST)
showLoading: true, //是否显示加载中(默认显示)
};

//调用方式
request(infoQuery, options)
.then((res) => {
let data = stringToJson(res.bizContent)
if (data.textType = "URL") {
state.agreeURL = envs[process.env.NODE_ENV].baseUrl + data.text
}
console.log("代扣协议", state.agreeURL);
})
.catch((err) => {
console.log(err);
});
}
const savaHandle = () => {
if (!state.checked) {
msg("请勾选协议!")
return;
}
my.getAuthCode({
scopes: 'auth_user',
success: res => {
// 获取需要的用户信息
state.code = res.authCode
//如果获取openId成功
if (state.code) {
console.log("code*******", state.code);
const optionsUser = {
type: 2,
data: {
payConfigId: aliPayConfigIdTwo,
code: res.authCode
},
method: "POST",
showLoading: true,
};
console.log('支付宝用户编号请求:', optionsUser)

request(obtainUserId, optionsUser).then((res) => {
console.log('支付宝用户编号返回:', res)
const bizContent = stringToJson(res.bizContent);
var data = {
orderId: state.orderId,
subOpenId: bizContent.openId,
};
const options = {
type: 2,
data: data,
method: "POST",
showLoading: true,
};
request(etcQYAction, options).then((res) => {
console.log("res*******", res);
const data = stringToJson(res.bizContent);
console.log("data*******", data);
if (data.signStatus === "WAIT_SIGN") {
//待签约
my.ap.navigateToAlipayPage({
path: "https://render.alipay.com/p/yuyan/180020010001250649/sign.html?orderId=" + data.alipayOrderId
});
} else if (data.signStatus === "SIGNED") {
//已签约
// msg("已签约");
confirm("您已完成签约,等待业务员审核发货", () => {
uni.switchTab({
url: "/pages/order/order"
})
}, "已完成签约", false);
} else if (data.signStatus === "UNSIGN") {
//已解约
// msg("已解约");
confirm(
"您已解约!",
() => {
uni.switchTab({
url: "/pages/order/order"
})
},
"您已解约",
false
);
}
});

})


} else {
//如果获取openId失败
uni.showToast({
title: "网络异常,请重试!",
icon: "none",
duration: 1000,
});
return;
}
},
fail: err => {
console.log('my.getAuthCode 调用失败', err)
}
});

}
</script>

<style lang="scss" scoped>
.action {
margin-top: 40rpx;
padding-left: 20rpx;
padding-right: 20rpx;
padding-bottom: 30rpx;

.button {
height: 80rpx;
background: linear-gradient(-90deg, #43a1e0 0%, #13e7c1 100%);
border-radius: 40rpx;
font-size: 32rpx;
font-weight: 400;
color: #ffffff;
line-height: 80rpx;
}
}

.title {
text-align: center;
margin-top: 15rpx;
font-size: 36rpx;
font-family: Microsoft YaHei;
font-weight: 400;
color: #333333;
line-height: 36rpx;
}

.value {
padding: 0rpx 60rpx;
}

.content_1 {
margin-top: 60rpx;
font-size: 30rpx;
font-family: Microsoft YaHei;
font-weight: 400;
color: #666666;
line-height: 58rpx;
}

.content_2 {
margin-top: 50rpx;
font-size: 30rpx;
font-family: Microsoft YaHei;
font-weight: 400;
color: #666666;
line-height: 58rpx;
}

.content_3 {
margin-top: 50rpx;
font-size: 30rpx;
font-family: Microsoft YaHei;
font-weight: 400;
color: #ff0000;
line-height: 58rpx;
}

.agreement {
font-size: 30rpx;
display: flex;
flex-wrap: wrap;
margin-top: 20rpx;
align-items: center;
justify-content: center;
}
</style>

+ 117
- 0
utils/util/encoder.js 查看文件

@@ -0,0 +1,117 @@
'use strict';
(function(r) {
function x() {}

function y() {}
var z = String.fromCharCode,
v = {}.toString,
A = v.call(r.SharedArrayBuffer),
B = v(),
q = r.Uint8Array,
t = q || Array,
w = q ? ArrayBuffer : t,
C = w.isView || function(g) {
return g && "length" in g
},
D = v.call(w.prototype);
w = y.prototype;
var E = r.TextEncoder,
a = new(q ? Uint16Array : t)(32);
x.prototype.decode = function(g) {
if (!C(g)) {
var l = v.call(g);
if (l !== D && l !== A && l !== B) throw TypeError(
"Failed to execute 'decode' on 'TextDecoder': The provided value is not of type '(ArrayBuffer or ArrayBufferView)'"
);
g = q ? new t(g) : g || []
}
for (var f = l = "", b = 0, c = g.length | 0, u = c - 32 | 0, e, d, h = 0, p = 0, m, k = 0, n = -1; b <
c;) {
for (e = b <= u ? 32 : c - b | 0; k < e; b = b + 1 | 0, k = k + 1 | 0) {
d = g[b] & 255;
switch (d >> 4) {
case 15:
m = g[b = b + 1 | 0] & 255;
if (2 !== m >> 6 || 247 < d) {
b = b - 1 | 0;
break
}
h = (d & 7) << 6 | m & 63;
p = 5;
d = 256;
case 14:
m = g[b = b + 1 | 0] & 255, h <<= 6, h |= (d & 15) << 6 | m & 63, p = 2 === m >> 6 ? p +
4 | 0 : 24, d = d + 256 & 768;
case 13:
case 12:
m = g[b = b + 1 | 0] & 255, h <<= 6, h |= (d & 31) << 6 | m & 63, p = p + 7 | 0, b <
c && 2 === m >> 6 && h >> p && 1114112 > h ? (d = h, h = h - 65536 | 0, 0 <= h && (
n = (h >> 10) + 55296 | 0, d = (h & 1023) + 56320 | 0, 31 > k ? (a[k] = n,
k = k + 1 | 0, n = -1) :
(m = n, n = d, d = m))) : (d >>= 8, b = b - d - 1 | 0, d = 65533), h = p = 0,
e = b <= u ? 32 : c - b | 0;
default:
a[k] = d;
continue;
case 11:
case 10:
case 9:
case 8:
}
a[k] = 65533
}
f += z(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[
14], a[15], a[16], a[17], a[18], a[19], a[20], a[21], a[22], a[23], a[24], a[25], a[26], a[
27], a[28], a[29], a[30], a[31]);
32 > k && (f = f.slice(0, k - 32 | 0));
if (b < c) {
if (a[0] = n, k = ~n >>> 31, n = -1, f.length < l.length) continue
} else - 1 !== n && (f += z(n));
l += f;
f = ""
}
return l
};
w.encode = function(g) {
g = void 0 === g ? "" : "" + g;
var l = g.length |
0,
f = new t((l << 1) + 8 | 0),
b, c = 0,
u = !q;
for (b = 0; b < l; b = b + 1 | 0, c = c + 1 | 0) {
var e = g.charCodeAt(b) | 0;
if (127 >= e) f[c] = e;
else {
if (2047 >= e) f[c] = 192 | e >> 6;
else {
a: {
if (55296 <= e)
if (56319 >= e) {
var d = g.charCodeAt(b = b + 1 | 0) | 0;
if (56320 <= d && 57343 >= d) {
e = (e << 10) + d - 56613888 | 0;
if (65535 < e) {
f[c] = 240 | e >> 18;
f[c = c + 1 | 0] = 128 | e >> 12 & 63;
f[c = c + 1 | 0] = 128 | e >> 6 & 63;
f[c = c + 1 | 0] = 128 | e & 63;
continue
}
break a
}
e = 65533
} else 57343 >= e && (e = 65533);!u && b << 1 < c && b << 1 < (c - 7 | 0) && (u = !
0, d = new t(3 * l), d.set(f), f = d)
}
f[c] = 224 | e >> 12;f[c = c + 1 | 0] = 128 | e >> 6 & 63
}
f[c = c + 1 | 0] = 128 | e & 63
}
}
return q ?
f.subarray(0, c) : f.slice(0, c)
};
E || (r.TextDecoder = x, r.TextEncoder = y)
})("" + void 0 == typeof $global ? "" + void 0 == typeof self ? this : self : $global); //AnonyCo
//# sourceMappingURL=https://cdn.jsdelivr.net/gh/AnonyCo/FastestSmallestTextEncoderDecoder/EncoderDecoderTogether.min.js.map

+ 9
- 6
utils/util/fileData.js 查看文件

@@ -1,7 +1,8 @@
import {
TextEncoder,
TextDecoder
} from "../node-model/text-decoding";
// import {
// TextEncoder,
// TextDecoder
// } from "../node-model/text-decoding";
import "./encoder.js"

export function IntegerToHexString(num, nLen) {
if (num == null) {
@@ -27,7 +28,8 @@ export function HighAddZero(str, nLen) {
}
export function AsciToHexString(strAsci, nLen) {
let s = String(strAsci);
let encoder = new TextEncoder("UTF-8");
let encoder = new $global.TextEncoder("UTF-8");
// let encoder = new TextEncoder("UTF-8");
// let encoder = new TextEncoder("gbk");
// let bytes = encode(str, 'gbk');
let bytes = encoder.encode(s);
@@ -75,7 +77,8 @@ export function HexToStrig(data, charType = 1) {
}
const asd = hexStringToByteArray(data);
try {
str = new TextDecoder("GBK").decode(asd);
let str = new $global.TextDecoder("GBK").decode(asd)
// str = new TextDecoder("GBK").decode(asd);

} catch (e) {
console.error(e);

Loading…
取消
儲存