Files
new-cashier/jeepay-ui-uapp-agent/pageApply/components/readOnlyInfo.vue
2024-05-23 14:39:33 +08:00

520 lines
15 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view class="read-page">
<!-- 本页面为只读信息页面 -->
<!-- 双重for循环 -->
<view class="box" :class="{ fold: isFold }" ref="boxRef">
<view v-for="(item, index) in applyInfoList" :key="index" class="list">
<view v-for="(val, valIndex) in item" :key="valIndex">
<!-- 只有标题 -->
<view v-if="val.title" class="title">{{ val.title }}</view>
<!-- 文字回显 -->
<view v-if="val.value" class="item-text">
<text class="grey">{{ val.text }}</text>
<view style="white-space: pre-wrap; word-wrap: break-word">{{
val.value
}}</view>
</view>
<!-- 图片回显 -->
<view v-if="val.src" class="item-img">
<text class="grey">{{ val.text }}</text>
<image
:src="val.src"
mode="aspectFit"
@click="openBackImg(val.src)"
></image>
</view>
<!-- 支付通站点回显 -->
<template v-if="val.type == 'siteInfos'">
<view v-for="(siteTtem, siteIndex) in val.typevalue" :key="siteIndex">
<view class="item-img"
><text class="grey">站点类型</text>
<text> {{ siteTypeHandle(siteTtem.siteType) }}</text></view
>
<view class="item-img"
><text class="grey">站点地址</text>
<text> {{ siteTtem.siteUrl }}</text></view
>
<view class="item-img"
><text class="grey">站点名称</text>
<text> {{ siteTtem.siteName }}</text></view
>
<view class="item-img"
><text class="grey">站点账号</text>
<text> {{ siteTtem.account }}</text></view
>
<view class="item-img"
><text class="grey">站点密码</text>
<text> {{ siteTtem.password }}</text></view
>
</view>
</template>
<!-- 受益人卡片 -->
<view v-if="val == 'owner' && val[0].idcard1Img" class="title"
>受益人信息</view
>
<view v-if="Array.isArray(val) && val[0].idcard1Img">
<view v-for="(ownerItem, ownerIndex) in val" :key="ownerIndex">
<view class="item-img margin-b-20">
<text class="grey">受益人身份证人像面照</text>
<image
:src="ownerItem.idcard1Img"
mode="aspectFit"
@click="openBackImg(ownerItem.idcard1Img)"
/>
</view>
<view class="item-img margin-b-20">
<text class="grey">受益人身份证国徽面照</text>
<image
:src="ownerItem.idcard2Img"
mode="aspectFit"
@click="openBackImg(ownerItem.idcard2Img)"
/>
</view>
<view class="item-img margin-b-20">
<text class="grey">受益人身份证姓名</text>
<text>{{ ownerItem.idcardName }}</text>
</view>
<view class="item-img margin-b-20">
<text class="grey">受益人身份证号</text>
<text>{{ ownerItem.idcardNo }}</text>
</view>
<view class="item-img margin-b-20">
<text class="grey">受益人身份证起始有效期</text>
<text>{{ ownerItem.idcardEffectBegin }}</text>
</view>
<view class="item-img margin-b-20">
<text class="grey">受益人身份证结束有效期</text>
<text>{{ ownerItem.idcardEffectEnd }}</text>
</view>
<view class="item-img margin-b-20">
<text class="grey">受益人身份证居住地址</text>
<text>{{ ownerItem.idcardAddress }}</text>
</view>
</view>
</view>
<!-- 只有标题 -->
<view v-if="val == 'fee'" class="title">费率信息</view>
<!-- 费率回显 -->
<view v-if="Array.isArray(val) && val[0].wayCode">
<view
v-for="(feeItem, index) in val"
:key="index"
class="margin-30"
>
<view class="name grey">{{ feeItem.wayCode }}</view>
<view v-if="feeItem.feeType == 'SINGLE'" class="item-text">
<text class="grey">单笔费率:</text>
<text>{{ (feeItem.feeRate * 100).toFixed(2) }} %</text>
</view>
<view v-if="feeItem.feeType == 'LEVEL'">
<!-- 银联模式的阶梯费率 -->
<template v-if="feeItem.creditCardPaywayFee">
<view
>借记卡储蓄卡: [ 保底费用{{
feeItem.minFee / 100
}}
, 封顶费用{{ feeItem.maxFee / 100 }} ]</view
>
<template
v-for="(levelItem, i) in feeItem.levelList"
:key="i"
>
<view style="margin: 10rpx 0"></view>
{{ levelItem.minFee }} ~ {{ levelItem.maxFee }}
费率 {{ (levelItem.feeRate * 100).toFixed(2) }}%
</template>
<view style="margin-top: 20rpx"
>贷记卡信用卡: [ 保底费用{{
feeItem.creditCardPaywayFee.minFee / 100
}}
, 封顶费用{{
feeItem.creditCardPaywayFee.maxFee / 100
}}
]</view
>
<template
v-for="(levelItem, i) in feeItem.creditCardPaywayFee
.levelList"
:key="i"
>
<view style="margin: 10rpx 0"></view>
{{ levelItem.minFee }} 元 ~ {{ levelItem.maxFee }}元,
费率: {{ (levelItem.feeRate * 100).toFixed(2) }}%
</template>
</template>
<!-- 普通模式的阶梯费率 -->
<template v-else>
阶梯费率: [ 保底费用:{{ feeItem.minFee / 100 }} 元,
封顶费用:{{ feeItem.maxFee / 100 }} 元 ]
<template
v-for="(levelItem, i) in feeItem.levelList"
:key="i"
>
<view style="margin: 10rpx 0"></view>
{{ levelItem.minFee }} 元 ~ {{ levelItem.maxFee }}元,
费率: {{ (levelItem.feeRate * 100).toFixed(2) }}%
</template>
</template>
</view>
</view>
</view>
<!-- POS信息回显 -->
<template v-if="val.type == 'posInfo'">
<view v-for="(posItem, posIndex) in val.typevalue" :key="posIndex">
<view class="item-img margin-b-20"
><text class="grey">pos安装地址</text>
<text> {{ posItem.areaText }}</text></view
>
<view class="item-img margin-b-20"
><text class="grey">具体位置</text>
<text> {{ posItem.terminalDetailAddress }}</text></view
>
<view class="item-img margin-b-20"
><text class="grey">小票名称</text>
<text> {{ posItem.ticketName }}</text></view
>
<view class="item-img margin-b-20">
<text class="grey">终端数量</text>
<text> {{ posItem.terminalCount }}</text>
</view>
</view>
</template>
</view>
</view>
<!-- 挑高用 -->
<view v-if="!isFold" style="height: 70rpx"></view>
<!-- 上下拉 -->
<view class="btn-box">
<!-- <view v-if="isFold" class="btn-back"></view> -->
<view v-if="false" class="btn-back"></view>
<view class="btn" @click="changeHeight">
{{ isFold ? "查看全部" : "收起" }}
<image
v-if="isFold"
src="../../static/img/jt-btm.svg"
style="transform: rotate(180deg)"
mode=""
></image>
<image
v-if="!isFold"
src="../../static/img/jt-btm.svg"
mode=""
></image>
</view>
</view>
</view>
<!-- 支付宝待签约二维码 -->
<view
class="box wx-open"
v-if="channelInfo.state == 5 && channelInfo.applyName == 'alipay'"
>
<view class="down-img">
<image :src="vdata.contractImg" mode="aspectFit"></image>
<view style="margin-top: 30rpx"
>请使用支付宝扫描二维码,根据页面指引完成签约</view
>
<view class="down" @click="down(vdata.contractImg)">保存至相册</view>
</view>
</view>
<!-- 微信待签约二维码 -->
<view
class="box wx-open"
v-if="channelInfo.state == 5 && channelInfo.applyName == 'wxpay'"
>
<view class="down-img">
<image :src="channelInfo.img" mode="aspectFit"></image>
<view style="margin-top: 30rpx"
>请超级管理员使用微信扫描二维码,根据页面指引完成签约</view
>
</view>
</view>
<!-- 收付通待签约二维码 -->
<view
class="box wx-open"
v-if="channelInfo.state == 5 && channelInfo.applyName == 'sftpay'"
>
<view class="down-img">
<image :src="vdata.contractImg" mode="aspectFit"></image>
<view style="margin-top: 30rpx"
>请超级管理员使用微信扫描二维码,根据页面指引完成签约</view
>
<view class="down" @click="down(vdata.contractImg)">保存至相册</view>
</view>
</view>
<!-- 图片预览(手写非原生) -->
<enlarge
v-if="isPreview"
:imgs="imgBackUrl"
@enlargeClose="enlargeClose"
:changeIsShow="false"
/>
</view>
</template>
<script setup>
import qrcode from "@/util/qrcode.js";
import { ref, onMounted, reactive, inject } from "vue";
import {
$elecContractGenerate,
$elecContractSign,
$fuiouUpload,
} from "@/http/apiManager.js";
import { saveHeadImgFile } from "@/util/saveImg.js"; // 用于base64图片下载
import enlarge from "@/components/JeepayUpLoad/enlarge.vue"; // 图片预览
import useBackPress from "@/hooks/useBackPress.js"; // 返回阻断函数
import JeepayUpLoad from "@/components/JeepayUpLoad/JeepayUpLoad.vue"; // 图片上传
import echo from "./dataEcho/dataEcho";
const channelInfo = inject("channelInfo");
const vdata = reactive({
contractImg: "", // 签约图片
});
let applyInfoList = ref([]); // 信息列表
// 高度切换
let isFold = ref(true);
const changeHeight = () => {
isFold.value = !isFold.value;
};
let isPreview = ref(false); // 图片预览是否展示
let imgBackUrl = ref(""); // 图片预览大图
const openBackImg = (url) => {
isPreview.value = true;
imgBackUrl.value = url;
// #ifdef H5 || APP-PLUS
active();
// #endif
};
// 关闭图片预览
const enlargeClose = () => {
isPreview.value = false;
// #ifdef H5 || APP-PLUS
inactive();
// #endif
};
const { active, inactive } = useBackPress(enlargeClose); // onBackPress 阻断返回
// 在这里处理不同进件渠道的签约
onMounted(() => {
if (channelInfo.applyName == "alipay") {
vdata.contractImg = drawQRcode(channelInfo.img); // 生成支付宝签约图片
}
});
// 保存待签约图片
const down = (url) => {
// #ifdef APP-PLUS
saveHeadImgFile(url, 80)
.then((success) => {
uni.showToast({ title: "保存成功", icon: "none" });
})
.catch((err) => {
uni.showToast({ title: "保存失败,请重试", icon: "none" });
});
// #endif
//#ifdef MP-WEIXIN
var aa = wx.getFileSystemManager();
aa.writeFile({
filePath: wx.env.USER_DATA_PATH + "/ali.png",
data: url.slice(22),
encoding: "base64",
success: (res) => {
wx.saveImageToPhotosAlbum({
filePath: wx.env.USER_DATA_PATH + "/ali.png",
success: function (res) {
wx.showToast({ title: "保存成功" });
},
});
},
});
//#endif
};
// 制作图片
const drawQRcode = (url) => {
return qrcode.drawImg(url, {
typeNumber: 4, // 密度
errorCorrectLevel: "Q", // 纠错等级
size: 175, // 白色边框
});
};
// 用于甄选数据
const getApplyInof = (val) => {
// vdata.applyDetailInfo = val;
applyInfoList.value = echo[channelInfo.code](val);
};
// 转换站点类型
const siteTypeHandle = (val) => {
let text;
switch (val) {
case "01":
text = "微信";
break;
case "02":
text = "APP";
break;
case "03":
text = "服务窗";
break;
case "04":
text = "公众号";
break;
case "05":
text = "其他";
break;
case "06":
text = "支付宝小程序";
break;
}
return text;
};
defineExpose({ getApplyInof });
</script>
<style scoped lang="scss">
.page-only {
box-sizing: border-box;
}
.box {
height: auto;
transition: 0.3s;
position: relative;
border-radius: 20rpx;
background: #fff;
padding: 0rpx 40rpx;
box-sizing: border-box;
}
.list {
& > view {
margin: 30rpx 0;
}
.title {
font-weight: 600;
color: #000;
}
.item-text {
display: flex;
justify-content: space-between;
}
.item-img {
display: flex;
align-items: flex-start;
justify-content: space-between;
image {
width: 120rpx;
height: 120rpx;
}
}
}
// 微信签约
.wx-open {
margin-top: 30rpx;
padding: 40rpx;
.first-title {
font-size: 28rpx;
color: #18191d;
font-weight: bold;
}
.tips {
font-size: 25rpx;
color: #7e7e80;
margin: 20rpx 0 40rpx;
}
.state {
margin-bottom: 30rpx;
display: flex;
justify-content: space-between;
}
.second-title {
font-size: 27rpx;
color: #000;
}
.wx-img {
width: 300rpx;
height: 300rpx;
margin: 30rpx 0 20rpx;
}
}
// 灰色文字/
.grey {
white-space: nowrap;
color: #a3a3a5;
margin-right: 20rpx;
}
// 下拉按钮
.btn {
height: 100rpx;
color: #3981ff;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
background-color: #fff;
image {
width: 20rpx;
height: 20rpx;
margin-left: 20rpx;
}
}
.btn-back {
background: linear-gradient(transparent, #f5f6fc);
height: 100rpx;
}
.fold {
height: 460rpx;
overflow: hidden;
}
.btn-box {
position: absolute;
width: 100%;
bottom: 0;
left: 0;
}
// 图片预览
.preview-img {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background-color: #000;
z-index: 25;
display: flex;
justify-content: center;
align-items: center;
}
.margin-30 {
margin: 30rpx 0;
}
.margin-b-20 {
margin-bottom: 20rpx;
}
</style>