mobileclient/packkey/combining.html

783 lines
39 KiB
HTML
Raw Normal View History

2024-03-05 14:30:16 +08:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>组合立减金</title>
2024-04-09 18:27:00 +08:00
<link rel="stylesheet" href="../combining.css?v=234">
2024-04-05 15:26:58 +08:00
<link rel="stylesheet" href="https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/css/homepage2_0.css" />
2024-03-05 14:30:16 +08:00
<script src="https://lsxdemall.oss-cn-beijing.aliyuncs.com/common/vue.min.js?v=20210302151401"
type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" src="https://lsxdemall.oss-cn-beijing.aliyuncs.com/common/axios.js?v=1367936144322">
</script>
2024-04-11 03:05:05 +08:00
<script src="https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/js/api2_0.js?v=1000">
2024-04-08 09:34:15 +08:00
</script>
2024-03-22 10:01:00 +08:00
<script src="https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/js/libs.js"></script>
2024-07-23 14:57:45 +08:00
<script src="../YT_Client_api.js"></script>
2024-04-06 17:08:52 +08:00
<style>
body,
html {
width: 100%;
height: 100%;
overflow: hidden;
}
</style>
2024-03-05 14:30:16 +08:00
</head>
<body>
2024-04-05 15:26:58 +08:00
<div id="app">
<div v-if="goods">
2024-03-05 14:30:16 +08:00
2024-04-05 15:26:58 +08:00
<img @click="backGoodsFn" v-if="backAble" class="backIcon"
src="https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/backprepageBtn.png" alt="">
2024-03-05 14:30:16 +08:00
2024-04-05 15:26:58 +08:00
<div class="prompt" :class="promptShow?'proactive':''">
{{prompt_text}}
2024-03-05 14:30:16 +08:00
</div>
2024-04-05 15:26:58 +08:00
<div class="mask" @touchmove.prevent @mousewheel.prevent v-show="message">
<div class="model">
<p class="m-title">温馨提示</p>
<p class="m-msg">{{message}}</p>
<button class="m-but" @click="copyFn" v-if="copyLink">复制</button>
<button class="m-but" @click="message = ''" v-else>知道了</button>
</div>
2024-03-25 16:48:56 +08:00
</div>
2024-04-05 15:26:58 +08:00
<div class="content" :style="{background: dynamicStyle.bg}">
<img class="banner" :src="dynamicStyle.banner" alt="">
<div class="countdown" v-if="this.outTime.length>0">
<p :style="{color:dynamicStyle.times_color}">{{this.outTime[0]}}</p>
<p :style="{color:dynamicStyle.times_color}">{{this.outTime[1]}}</p>
<p :style="{color:dynamicStyle.times_color}">{{this.outTime[2]}}</p>
</div>
<div class="box">
<div class="box-cotent">
<div class="goods-box"
:style="{backgroundImage:`url(${dynamicStyle.goods_bg})`,paddingTop:goods.group_info.channel==1?'0.28rem':goods.group_info.channel==2?'0.16rem':'0.2rem'}">
<p class="title" :style="{color:dynamicStyle.title_color}">{{goods.title}}</p>
<ul class="g-b-u"
:style="{marginLeft:goods.group_info.channel==1?'0.12rem':'0.14rem',marginTop:goods.group_info.channel==2?'0.12rem':'0.28rem'}">
<li :style="{backgroundImage:`url(${item.voucher.status === 5 ? dynamicStyle.goods_a: item.voucher.status === 3 ? dynamicStyle.goods_c: dynamicStyle.goods_b})`}"
v-for="item in goods.product">
<p class="g-b-u-t">{{ item.voucher.status === 3 ? '领取成功' : '立减金'}}</p>
<p class="money">
<span></span>
{{item.voucher.reduce_amount}}
</p>
<p class="reduce">满{{item.voucher.denomination}}可用</p>
<p class="g-b-but" v-if="item.voucher.status === 1">
待领取({{item.voucher.num}}/{{item.voucher.send_num}})</p>
<p class="g-b-but" v-if="item.voucher.status === 2">
发放中({{item.voucher.num}}/{{item.voucher.send_num}})</p>
<p class="g-b-but" style="background-color: #FFE2A5;"
v-if="item.voucher.status === 3">
待使用({{item.voucher.num}}/{{item.voucher.send_num}})</p>
2024-04-09 20:17:17 +08:00
<p class="g-b-but" v-if="item.voucher.status === 4">
已使用({{item.voucher.num}}/{{item.voucher.send_num}})</p>
2024-04-05 15:26:58 +08:00
<p class="g-b-but" v-if="item.voucher.status === 5" style="font-size: 0.1rem;">
领取失败({{item.voucher.num}}/{{item.voucher.send_num}})</p>
</li>
</ul>
<p class="notis" :style="{color:dynamicStyle.notis_color}" v-show="goods.product.length>3">
滑动查看更多
</p>
</div>
<p class="g_b_title"
v-if="goods.send_status !== 2 && (goods.group_info.channel==3||goods.group_info.channel==1&&goods.group_info.receive_mode==2)">
<img src="https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/ysf_title_icon.png"
alt="">
{{goods.group_info.channel==1?'支付宝账号':'云闪付账号'}}
<img src="https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/ysf_title_icon.png"
alt="">
2024-03-15 19:49:58 +08:00
</p>
2024-04-05 15:26:58 +08:00
<template
v-if="goods.send_status !== 2 && (goods.group_info.channel==3||goods.group_info.channel==1&&goods.group_info.receive_mode==2)">
<input type="text" maxlength="50"
:placeholder="goods.group_info.channel==3?'请输入手机号':'请输入账号'" v-model="form.confirm">
<input type="text" maxlength="50"
:placeholder="goods.group_info.channel==3?'请再次输入手机号':'请再次输入账号'"
v-model="form.receive_account">
</template>
2024-03-15 19:49:58 +08:00
2024-04-09 16:53:42 +08:00
<button type="button" class="but"
2024-04-05 15:26:58 +08:00
:style="{marginTop:goods.group_info.channel==2||goods.group_info.channel==1&&goods.group_info.receive_mode==1&&'0.12rem'}"
2024-04-09 16:53:42 +08:00
alt="" @click="submit" :disabled="loading"
v-show="goods.send_status === 5 || goods.send_status === 3 || goods.send_status === 4"></button>
2024-03-15 19:49:58 +08:00
2024-04-05 15:26:58 +08:00
<!-- 发放中。。。 -->
<div class="ff-btn" v-show="goods.send_status === 1">
<div class="ff-text">发放中,请等待<span class="ani_dot">...</span></div>
</div>
2024-03-25 16:48:56 +08:00
2024-04-05 15:26:58 +08:00
<p class="time" v-if="goods.group_info.time_limit.timer_show!=2"
:style="{marginTop: 0,color:dynamicStyle.time_color}">
生效时间:{{goods.group_info.time_limit.effect_time.start_time}}
~
{{goods.group_info.time_limit.effect_time.end_time}}</p>
<p class="time" :style="{marginTop: '0.05rem',color:dynamicStyle.time_color}"
v-if="goods.group_info.time_limit.receive_time.start_time">
领取时间:{{goods.group_info.time_limit.receive_time.start_time}} ~
{{goods.group_info.time_limit.receive_time.end_time}}</p>
</div>
2024-03-05 14:30:16 +08:00
2024-04-05 15:26:58 +08:00
<div class="box-footer">
<img class="b-f-img" :src="dynamicStyle.footer_top" alt="">
<div class="b-f-b" :style="{backgroundImage:`url(${dynamicStyle.footer_middle})`}">
<div class="b-f-i" v-html="goods.group_info.instruction"
:style="{color:dynamicStyle.footer_color}" v-if="goods.group_info.instructionType==1">
</div>
<img v-else :src="goods.group_info.group_image" alt="" class="group_image">
2024-03-15 19:49:58 +08:00
</div>
2024-04-05 15:26:58 +08:00
<img class="b-f-img" :style="{filter:goods.receive_status==1?'grayscale(0)':'grayscale(0.6)'}"
:src="dynamicStyle.footer_bottom" alt="">
2024-03-05 14:30:16 +08:00
</div>
</div>
</div>
2024-04-05 11:14:40 +08:00
2024-04-05 15:26:58 +08:00
<!-- 弹窗 -->
2024-04-06 14:37:07 +08:00
<div class="tip-pop mask" v-show="popMsg">
2024-04-06 21:58:10 +08:00
<div class="tip-main">
2024-04-05 15:26:58 +08:00
<div class="tip-pop-head">
<img src="https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/zh-dd.png"
class="tip-pop-dd" />
</div>
<p class="tip-title">温馨提示</p>
2024-04-05 11:14:40 +08:00
2024-04-05 15:26:58 +08:00
<p class="tip-card-status" v-show="goods.send_status === 2">全部领取成功</p>
<p class="tip-card-status" v-show="goods.send_status === 3" style="color: #FD2323;">全部领取失败</p>
2024-04-05 20:29:59 +08:00
<p class="tip-card-status" v-show="goods.send_status === 4">领取成功{{ isOKLength }}条,<span
style="color: #FD2323;font-size: 0.16rem;">失败{{ isErrLength }}条</span></p>
2024-03-15 19:49:58 +08:00
2024-04-05 15:26:58 +08:00
<p class="tip-card-text" v-show="goods.send_status === 2">
请前往支付宝APP-我的卡包查询使用
2024-03-05 14:30:16 +08:00
</p>
2024-03-15 19:49:58 +08:00
2024-04-05 15:26:58 +08:00
<p class="tip-card-text" style="padding: 0 0.2rem;" v-show="goods.send_status === 3">
{{ goods.err_msg[0] }}
</p>
2024-03-05 14:30:16 +08:00
2024-04-05 15:26:58 +08:00
<p class="tip-card-text" v-show="goods.send_status === 4">
请根据界面错误原因进行调整后再重试
</p>
2024-04-05 11:14:40 +08:00
2024-04-06 14:20:23 +08:00
<div v-if="errListShow"
2024-04-06 21:58:10 +08:00
style="padding: 0 0.2rem;text-align: left;max-height: 2rem;overflow-y: scroll;">
2024-04-06 14:20:23 +08:00
<p class="err-list-p" v-for="(item,index) in goods.err_msg">错误{{Number(index) + 1}}: {{ item }}
</p>
2024-03-05 14:30:16 +08:00
</div>
2024-04-05 15:26:58 +08:00
<button class="tip-btn" v-show="goods.send_status === 2 || goods.send_status === 3"
@click="() => popMsg = false">我知道了</button>
2024-04-05 11:14:40 +08:00
2024-04-05 15:26:58 +08:00
<button class="tip-btn" v-show="goods.send_status === 4" @click="() => {
errListShow = !errListShow
2024-04-06 21:58:10 +08:00
2024-04-05 15:26:58 +08:00
if(errListShow === false){
2024-04-06 21:58:10 +08:00
popMsg = false;
2024-04-05 15:26:58 +08:00
}
}">{{
errListShow ? '我知道了' : '查看失败原因' }}</button>
2024-03-05 14:30:16 +08:00
</div>
</div>
</div>
2024-04-05 11:14:40 +08:00
2024-04-05 15:26:58 +08:00
<!-- 弹出提示 -->
<div class="popboxshow" v-if="popboxshow" :class="popboxshow?'active':''">
<div class="tip">
<p>{{tiptext}}</p>
<span @click="knowFn">知道了</span>
</div>
2024-04-05 11:14:40 +08:00
</div>
2024-03-05 14:30:16 +08:00
</div>
</body>
<script>
2024-03-05 15:07:54 +08:00
const bm_obj_data = sessionStorage.getItem("bm_auth") ? JSON.parse(sessionStorage.getItem("bm_auth")) : null;
2024-03-05 14:30:16 +08:00
const phoneReg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/;
const emailReg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
new Vue({
el: "#app",
2024-04-10 23:11:41 +08:00
data() {
2024-03-05 14:30:16 +08:00
return {
goods: '',
backAble: (~~sessionStorage.getItem('goodsCount')) > 1,
token: localStorage.getItem('token'),
key: localStorage.getItem('key'),
promptShow: false,
popShow: false,
is: false,
cls: null,
prompt_text: '',
receive_time: '',
message: '',
loading: false,
2024-03-12 11:44:12 +08:00
openId: localStorage.getItem('openid'),
2024-03-05 14:30:16 +08:00
copyLink: '',
2024-03-25 19:29:41 +08:00
outTime: [],
2024-03-05 14:30:16 +08:00
form: {
confirm: null,
receive_account: null
2024-04-05 11:14:40 +08:00
},
errListShow: false,
popMsg: false,
2024-04-05 15:26:58 +08:00
popboxshow: false,
maskshow: false,
2024-04-05 16:27:08 +08:00
tiptext: "",
cont: 0,
2024-04-05 20:29:59 +08:00
timeGet: null,
isOKLength: 0,
2024-04-09 14:51:38 +08:00
isErrLength: 0,
isTimeOut: 5000
2024-03-05 14:30:16 +08:00
};
},
2024-04-10 23:11:41 +08:00
mounted() {
2024-03-05 14:30:16 +08:00
document.title = localStorage.getItem('title');
this.code_batch_id = JSON.parse(sessionStorage.getItem('goodsInfo')).entity.code_batch_id;
this.getProductDetail();
2024-03-25 19:29:41 +08:00
/* 倒计时 */
const key_expiration_time = sessionStorage.getItem('key_expiration_time');
if (key_expiration_time != 0) {
2024-03-25 19:36:15 +08:00
const cls = setInterval(() => {
const time = pageOutTime(key_expiration_time);
if (time) {
this.outTime = time;
} else {
this.outTime = ['00', '00', '00'];
clearInterval(cls);
}
2024-03-25 19:29:41 +08:00
}, 1000);
} else {
2024-03-25 19:55:37 +08:00
this.outTime = [];
2024-03-25 19:29:41 +08:00
}
2024-03-05 14:30:16 +08:00
},
computed: {
2024-04-10 23:11:41 +08:00
dynamicStyle() {
2024-03-05 14:30:16 +08:00
switch (Number(this.goods.group_info.channel)) {
case 1:
2024-03-15 19:49:58 +08:00
return {
bg: '#4989f5',
title_color: '#fff',
banner: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/zfb_common_img_banner.png',
goods_bg: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/zfb_redenvelope_img.png',
footer_top: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/zfb_common_img_top.png',
footer_middle: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/zfb_common_img_middle.png',
footer_bottom: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/zfb_common_img_d.png',
footer_color: '#4989F5',
notis_color: '#FF486D',
2024-03-25 19:50:26 +08:00
times_color: '#1b7bff',
2024-03-15 19:49:58 +08:00
goods_a: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/zfb_redenvelope_tobeused.png',
goods_b: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/zfb_redenvelope_overdue.png',
2024-04-05 15:26:58 +08:00
goods_c: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/zh-box.png',
2024-03-15 19:49:58 +08:00
};
2024-03-05 14:30:16 +08:00
case 2:
2024-03-15 19:49:58 +08:00
return {
bg: '#cee5be',
title_color: '#239700',
banner: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/wx_common_img_banner.png',
goods_bg: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/wx_redenvelope_img.png',
footer_top: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/wx_common_img_top.png',
footer_middle: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/wx_common_img_middle.png',
footer_bottom: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/wx_common_img_d.png',
footer_color: '#5eb145',
time_color: '#5eb145',
2024-03-25 19:50:26 +08:00
times_color: '#5eb145',
2024-03-15 19:49:58 +08:00
notis_color: '#239700',
goods_a: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/zfb_redenvelope_tobeused.png',
goods_b: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/zfb_redenvelope_overdue.png',
2024-04-05 15:26:58 +08:00
goods_c: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/zh-box.png',
2024-03-15 19:49:58 +08:00
};
2024-03-05 14:30:16 +08:00
case 3:
2024-03-15 19:49:58 +08:00
return {
bg: '#ff4830',
title_color: '#FF3024',
banner: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/ysf_common_img_banner.png',
goods_bg: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/ysf_redenvelope_img.png',
footer_top: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/ysf_common_img_top.png',
footer_middle: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/ysf_common_img_middle.png',
footer_bottom: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/ysf_common_img_d.png',
footer_color: '#FF4901',
2024-03-25 19:47:06 +08:00
times_color: '#ed703f',
2024-03-15 19:49:58 +08:00
notis_color: '#FFD3D8',
goods_a: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/ysf_redenvelope_tobeused.png',
goods_b: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/ysf_redenvelope_overdue.png',
2024-04-05 15:26:58 +08:00
goods_c: 'https://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/img/combining/zh-box.png',
2024-03-15 19:49:58 +08:00
};
2024-03-05 14:30:16 +08:00
default:
return {};
}
},
},
methods: {
2024-04-05 15:26:58 +08:00
// 错误弹出框关闭
2024-04-10 23:11:41 +08:00
knowFn() {
2024-04-05 15:26:58 +08:00
this.popboxshow = false;
this.maskshow = false;
},
// 错误弹窗
2024-04-10 23:11:41 +08:00
openErrorDialog(tip) {
2024-04-05 15:26:58 +08:00
this.maskshow = true;
this.tiptext = tip;
this.popboxshow = true;
2024-04-05 19:55:37 +08:00
},
// 转状态
2024-04-10 23:11:41 +08:00
formatStatus(status) {
2024-04-05 19:55:37 +08:00
// status 2发放中3待使用4已使用5领取失败
// 6发放中 1待使用 2已使用 9领取失败
switch (status) {
case 6:
2024-04-08 09:34:15 +08:00
return 2;
2024-04-05 19:55:37 +08:00
case 1:
2024-04-08 09:34:15 +08:00
return 3;
2024-04-05 19:55:37 +08:00
case 2:
2024-04-08 09:34:15 +08:00
return 4;
2024-04-05 19:55:37 +08:00
case 9:
2024-04-08 09:34:15 +08:00
return 5;
2024-04-05 19:55:37 +08:00
default:
2024-04-06 15:50:15 +08:00
return 0;
2024-04-05 19:55:37 +08:00
}
},
2024-04-06 15:50:15 +08:00
// 状态优先级排序
2024-04-10 23:11:41 +08:00
statusSort(statusArr) {
2024-04-06 15:50:15 +08:00
let self = this;
2024-04-09 20:17:17 +08:00
// status 2发放中3待使用4已使用5领取失败
// 统计:发放中 2
let hasStatus2 = statusArr.some(item => self.formatStatus(item.status) === 2);
if (hasStatus2) {
2024-04-10 22:36:42 +08:00
let hasStatus2Length = statusArr.filter(item => self.formatStatus(item.status) === 2).length;
2024-04-09 20:17:17 +08:00
return [2, hasStatus2Length];
}
// 统计领取失败5
let hasStatus5 = statusArr.some(item => self.formatStatus(item.status) === 5);
if (hasStatus5) {
2024-04-10 22:36:42 +08:00
let hasStatus5Length = statusArr.filter(item => self.formatStatus(item.status) === 5).length;
2024-04-09 20:17:17 +08:00
return [5, hasStatus5Length];
}
// 统计:待使用 3
let hasStatus3 = statusArr.some(item => self.formatStatus(item.status) === 3);
if (hasStatus3) {
2024-04-10 22:36:42 +08:00
let hasStatus3Length = statusArr.filter(item => self.formatStatus(item.status) === 3).length;
2024-04-09 20:17:17 +08:00
return [3, hasStatus3Length];
}
// 统计:已使用 4
2024-04-10 22:36:42 +08:00
let hasStatus4 = statusArr.some(item => self.formatStatus(item.status) === 4);
2024-04-09 20:17:17 +08:00
if (hasStatus4) {
2024-04-10 22:36:42 +08:00
return [4, statusArr.length];
2024-04-09 20:17:17 +08:00
}
2024-04-06 15:50:15 +08:00
},
2024-04-05 16:27:08 +08:00
// 轮循
2024-04-10 23:11:41 +08:00
groupProductVoucherDetail() {
2024-04-05 19:55:37 +08:00
let self = this;
2024-04-06 21:58:10 +08:00
req.axiosPost('/key/group/groupProductVoucherDetail', {
2024-04-05 16:27:08 +08:00
token: this.token,
code_batch_id: this.code_batch_id
}).then(res => {
if (res.code === 200) {
2024-04-05 19:55:37 +08:00
// send_status 1发放中2全部成功 3全部失败4部分失败 5未领取
// status 1待领取2发放中3待使用4已使用5领取失败
2024-04-06 15:50:15 +08:00
// 第一步:格式化数据,使其数据和详情接口一致
2024-04-05 20:29:59 +08:00
let all_err = [];
2024-04-05 19:55:37 +08:00
let product_all = [];
2024-04-06 15:50:15 +08:00
self.goods.product.forEach(item => {
let el = res.data.product.find(items => items.id === item.id);
2024-04-05 19:55:37 +08:00
if (el) {
2024-04-06 15:50:15 +08:00
el.order_voucher.forEach(row => {
2024-04-06 14:20:23 +08:00
if (row.receive_error !== "") {
2024-04-06 15:50:15 +08:00
all_err.push(row.receive_error);
2024-04-06 14:20:23 +08:00
}
2024-04-08 09:34:15 +08:00
});
2024-04-06 14:20:23 +08:00
2024-04-06 15:50:15 +08:00
let obj = {
id: item.id,
type: item.type,
voucher: {
denomination: item.voucher.denomination,
reduce_amount: item.voucher.reduce_amount,
2024-04-09 20:17:17 +08:00
status: self.statusSort(el.order_voucher)[0],
num: self.statusSort(el.order_voucher)[1],
send_num: el.order_voucher.length
2024-04-05 19:55:37 +08:00
}
2024-04-08 09:34:15 +08:00
};
product_all.push(obj);
2024-04-05 16:27:08 +08:00
}
2024-04-08 09:34:15 +08:00
});
2024-04-05 19:55:37 +08:00
// 第二步:更新商品数据
2024-04-05 20:29:59 +08:00
self.goods.product = product_all;
2024-04-05 19:55:37 +08:00
// 第三步:需要确认 最终状态即 send_status 状态
// status 1待领取2发放中3待使用4已使用5领取失败
// send_status 1发放中2全部成功 3全部失败4部分失败 5未领取
2024-04-06 15:50:15 +08:00
// 发放中
// 备注:只要有一个 发放中 -> send_status 1 发放中
let ffLength = product_all.filter(item => item.voucher.status === 2);
2024-04-05 19:55:37 +08:00
if (ffLength.length > 0) {
2024-04-05 20:29:59 +08:00
self.goods.send_status = 1;
2024-04-06 17:55:40 +08:00
setTimeout(() => {
if (self.cont > 10) {
2024-04-09 12:06:53 +08:00
// 超过50s增加请求间隔 为 30s
self.isTimeOut = 30000;
// 设置最大请求数 60分钟
if (self.cont > 60) {
2024-04-10 22:36:42 +08:00
self.openErrorDialog("请刷新页面重试!");
2024-04-09 12:06:53 +08:00
// 放弃
2024-04-10 22:36:42 +08:00
return;
2024-04-09 12:06:53 +08:00
}
2024-04-06 17:55:40 +08:00
}
self.groupProductVoucherDetail();
self.cont++;
2024-04-09 14:51:38 +08:00
}, self.isTimeOut);
2024-04-05 20:29:59 +08:00
return;
2024-04-05 19:55:37 +08:00
}
2024-04-06 15:50:15 +08:00
// 全部失败
// 备注:领取失败失败数,大于等于全部数量 -> send_status 3 全部失败
let errLength = product_all.filter(item => item.voucher.status === 5);
2024-04-05 19:55:37 +08:00
if (errLength.length > 0 && product_all.length === errLength.length) {
2024-04-05 20:29:59 +08:00
self.goods.send_status = 3;
// 错误去重
self.goods.err_msg = [...new Set(all_err)];
2024-04-06 21:58:10 +08:00
self.popMsg = true;
2024-04-08 09:34:15 +08:00
return;
2024-04-05 19:55:37 +08:00
} else if (errLength.length > 0 && product_all.length > errLength.length) {
2024-04-05 20:29:59 +08:00
// 领取失败数,小于全部数量 -> send_status 4 部分失败
// 错误去重
self.goods.err_msg = [...new Set(all_err)];
self.isOKLength = product_all.length - errLength.length;
self.isErrLength = errLength.length;
self.goods.send_status = 4;
2024-04-06 21:58:10 +08:00
self.popMsg = true;
2024-04-08 09:34:15 +08:00
return;
2024-04-05 19:55:37 +08:00
}
// 3待使用4已使用 数量等于或者大于 最终长度 全部成功
2024-04-05 20:29:59 +08:00
let allOkLength = product_all.filter(item => item.voucher.status === 4 || item.voucher.status === 3);
2024-04-05 19:55:37 +08:00
if (allOkLength.length > 0 && allOkLength.length === product_all.length) {
2024-04-05 20:29:59 +08:00
self.goods.send_status = 2;
2024-04-06 21:58:10 +08:00
self.popMsg = true;
2024-04-08 09:34:15 +08:00
return;
2024-04-05 16:27:08 +08:00
}
}
2024-04-08 09:34:15 +08:00
});
2024-04-05 16:27:08 +08:00
},
2024-03-05 14:30:16 +08:00
//获取商品详情
2024-04-10 23:11:41 +08:00
getProductDetail() {
2024-04-05 19:55:37 +08:00
let self = this;
2024-03-05 14:30:16 +08:00
req.axiosGet('/key/group/groupProductDetail', {
token: this.token,
code_batch_id: this.code_batch_id
}).then(res => {
if (res.code == 200) {
this.goods = res.data;
2024-04-06 15:50:15 +08:00
// 支付宝组合商品
2024-04-09 22:01:37 +08:00
// send_status 1发放中2全部成功 3全部失败4部分失败 5未领取
this.popMsg = res.data.send_status === 2 || res.data.send_status === 3 || res.data.send_status === 4 ? true : false;
// 部分失败
if (res.data.send_status === 4) {
let all_product_length = res.data.product.length;
let is_err_length = res.data.product.filter(item => item.voucher.status === 5).length;
self.isOKLength = all_product_length - is_err_length;
self.isErrLength = is_err_length;
2024-04-05 16:27:08 +08:00
}
2024-04-09 22:01:37 +08:00
// 发放中 轮循
if (res.data.send_status === 1) {
setTimeout(() => {
self.groupProductVoucherDetail();
2024-04-10 22:36:42 +08:00
}, 5000);
2024-04-09 22:01:37 +08:00
}
2024-03-05 19:08:26 +08:00
// 代码暂时这样
if (res.data.group_info.channel == 1 && res.data.group_info.receive_mode == 1) {
} else if (res.data.group_info.channel == 2) {
} else {
// 领取成功结算 5
if (bm_obj_data && !bm_obj_data.settlement_data.is_settlement && bm_obj_data.settlement_data.settlement_type === 5) {
settlementFun(bm_obj_data.token, bm_obj_data.settlement_data.settlement_type);
}
}
2024-04-05 15:26:58 +08:00
} else {
2024-04-08 09:34:15 +08:00
this.openErrorDialog(res.message);
2024-03-05 14:30:16 +08:00
}
}).catch();
},
/* ******************************************** 官方领取 ******************************************** */
/* 直接领取 */
2024-04-10 23:11:41 +08:00
directSubmit() {
2024-04-09 16:22:46 +08:00
const self = this;
self.loading = true;
setTimeout(() => {
self.loading = false;
2024-04-10 22:36:42 +08:00
}, 5000);
2024-04-09 20:17:17 +08:00
2024-03-12 11:44:12 +08:00
/* 公众号打开 */
if (this.goods.group_info.channel == 2 && this.goods.group_info.is_webview == 1 && !this.openId) {
const linkId = localStorage.getItem('linkId');
location.href = `https://openapi.1688sup.com/wechat/oauth?jump=${location.origin}/${linkId}/${this.key}`;
return;
}
2024-03-05 14:30:16 +08:00
const data = {
key: this.key,
token: this.token,
code_batch_id: this.code_batch_id,
receive_mode: 1
};
req.axiosPost("/key/couponGroupUsage", data)
.then((res) => {
if (res.code == 200) {
2024-03-05 15:20:00 +08:00
// 领取结算 4
if (bm_obj_data && !bm_obj_data.settlement_data.is_settlement && bm_obj_data.settlement_data.settlement_type === 4) {
settlementFun(bm_obj_data.token, bm_obj_data.settlement_data.settlement_type);
}
2024-03-12 11:44:12 +08:00
if (this.goods.group_info.channel == 1 && this.goods.group_info.receive_mode == 1) {
/* 支付宝官方领取 */
this.toLinkAlipay();
} else if (this.goods.group_info.channel == 2) {
if (this.goods.group_info.is_webview == 1) {
/* 公众号 */
this.publicCollection();
} else {
/* 小程序 */
2024-07-24 11:57:29 +08:00
let ua = navigator.userAgent; //判断用户打开链接环境
if (ua.indexOf("CreditCardAppNew") > -1) { // 正式z 用 CreditCardAppNew UnionPay/1.0
Fw.device.api.openWXMiniProgram({
programID: "gh_07fecf7a6d31",
2024-07-23 14:57:45 +08:00
path: "pages/index/index",
2024-07-24 11:57:29 +08:00
miniType: 2, // 1 开发版 2 体验版 // 正式z 删除
extJson: JSON.stringify({
...res.data
})
2024-07-23 14:57:45 +08:00
})
} else {
window.location.replace(res.data.redirect_url);
}
2024-03-07 22:07:20 +08:00
}
2024-03-12 11:44:12 +08:00
}
} else {
this.axiosErrorFun(res.code, res.message);
}
})
.catch((err) => { this.loading = false; });
},
2024-03-07 22:07:20 +08:00
2024-03-12 11:44:12 +08:00
/* 公众号领取 */
2024-04-10 23:11:41 +08:00
publicCollection() {
2024-03-12 11:44:12 +08:00
let params = {
token: this.token,
code_batch_id: this.code_batch_id,
channel_user_id: this.openId,
is_webview: 1
};
req.axiosPost("/voucher/groupVoucherGrant", params)
.then((res) => {
if (res.code == 200) {
2024-03-15 14:17:45 +08:00
// 领取成功结算 5
if (bm_obj_data && !bm_obj_data.settlement_data.is_settlement && bm_obj_data.settlement_data.settlement_type === 5) {
settlementFun(bm_obj_data.token, bm_obj_data.settlement_data.settlement_type);
}
// 使用结算 6
if (bm_obj_data && !bm_obj_data.settlement_data.is_settlement && bm_obj_data.settlement_data.settlement_type === 6) {
settlementFun(bm_obj_data.token, bm_obj_data.settlement_data.settlement_type);
}
2024-03-12 11:44:12 +08:00
this.getProductDetail();
2024-03-07 22:07:20 +08:00
2024-03-05 14:30:16 +08:00
} else {
this.axiosErrorFun(res.code, res.message);
}
})
.catch((err) => { this.loading = false; });
},
/* 支付宝官方领取H5跳转 */
2024-04-10 23:11:41 +08:00
toLinkAlipay() {
2024-03-15 14:17:45 +08:00
// 领取成功结算 5
if (bm_obj_data && !bm_obj_data.settlement_data.is_settlement && bm_obj_data.settlement_data.settlement_type === 5) {
settlementFun(bm_obj_data.token, bm_obj_data.settlement_data.settlement_type);
}
// 使用结算 6
if (bm_obj_data && !bm_obj_data.settlement_data.is_settlement && bm_obj_data.settlement_data.settlement_type === 6) {
settlementFun(bm_obj_data.token, bm_obj_data.settlement_data.settlement_type);
}
2024-03-05 14:30:16 +08:00
let self = this;
let banklink = encodeURIComponent(
window.location.origin +
2024-03-08 03:54:15 +08:00
`/packkey/combiningAlipay.html?codeBatchId=${this.code_batch_id}&token=${this.token}`
2024-03-05 14:30:16 +08:00
);
2024-04-18 09:26:36 +08:00
let link = "https://openapi.1688sup.com/alipay/oauth?jump=" + banklink;
2024-03-05 14:30:16 +08:00
let ua = navigator.userAgent.toLowerCase(); //判断用户打开链接环境
if (isWx() ||
(ua.indexOf("android") > -1 &&
ua.indexOf("baiduboxapp") > -1) ||
ua.indexOf("windows") > -1) {
//复制链接地址,提醒去浏览器打开
this.message = '请点击下方[复制]按钮,复制链接到浏览器打开!';
this.copyLink = link;
} else {
//唤起支付宝
window.location.replace(link);
}
},
/* ******************************************** 账号领取 ******************************************** */
/* 立即领取 */
2024-04-10 23:11:41 +08:00
submit() {
2024-03-05 14:30:16 +08:00
if (this.goods.group_info.channel == 3 || this.goods.group_info.channel == 1 && this.goods.group_info.receive_mode == 2) {
const { confirm, receive_account } = this.form;
if (this.loading) return;
if (confirm !== receive_account) return this.tips('两次输入账号不一致');
/* 云闪付校验手机号 支付宝校验手机号/邮箱号 */
if ((phoneReg.test(receive_account) && this.goods.group_info.channel == 3 || this.goods.group_info.channel == 1 && (emailReg.test(receive_account) || phoneReg.test(receive_account)))) {
this.finalSubmit();
} else {
this.tips('请输入正确的账号');
}
} else {
this.directSubmit();
}
},
2024-04-06 14:20:23 +08:00
// 提交函数
2024-04-10 23:11:41 +08:00
submitOne(data) {
2024-03-05 14:30:16 +08:00
/* 领取立减金 */
req.axiosPost("/key/couponGroupUsage", data)
.then(({ code, message }) => {
if (code == 200) {
2024-04-06 14:37:07 +08:00
this.getProductDetail();
2024-03-05 15:07:54 +08:00
// 使用结算 6
if (bm_obj_data && !bm_obj_data.settlement_data.is_settlement && bm_obj_data.settlement_data.settlement_type === 6) {
settlementFun(bm_obj_data.token, bm_obj_data.settlement_data.settlement_type);
}
2024-04-06 14:37:07 +08:00
} else {
this.axiosErrorFun(code, message);
2024-04-06 14:20:23 +08:00
}
2024-04-06 14:37:07 +08:00
})
.catch((err) => { this.loading = false; });
2024-04-06 14:20:23 +08:00
},
2024-03-05 15:07:54 +08:00
2024-04-06 14:20:23 +08:00
// 重试函数
2024-04-10 23:11:41 +08:00
resetSubmit(data) {
2024-04-06 14:20:23 +08:00
/* 领取立减金 */
req.axiosPost("/voucher/groupVoucherRetry", data)
.then(({ code, message }) => {
if (code == 200) {
2024-04-05 20:29:59 +08:00
this.getProductDetail();
2024-03-05 14:30:16 +08:00
} else {
this.axiosErrorFun(code, message);
}
})
.catch((err) => { this.loading = false; });
},
2024-04-06 14:20:23 +08:00
/* 验证后 最终提交 */
2024-04-10 23:11:41 +08:00
finalSubmit() {
2024-04-06 14:20:23 +08:00
const self = this;
2024-04-09 16:22:46 +08:00
self.loading = true;
2024-04-06 14:20:23 +08:00
setTimeout(() => {
2024-04-09 16:22:46 +08:00
self.loading = false;
2024-04-10 22:36:42 +08:00
}, 5000);
2024-04-06 14:20:23 +08:00
if (this.goods.send_status === 3 || this.goods.send_status === 4) {
let params = {
token: localStorage.getItem("token"),
code_batch_id: this.code_batch_id,
channel_user_id: this.form.receive_account
2024-04-08 09:34:15 +08:00
};
2024-04-06 14:20:23 +08:00
this.resetSubmit(params); // 重试
} else {
let params = {
key: this.key,
code_batch_id: this.code_batch_id,
token: localStorage.getItem("token"),
account: this.form.receive_account,
receive_mode: 2
};
this.submitOne(params); // 普通提交
}
},
2024-03-05 14:30:16 +08:00
/* 返回 */
2024-04-10 23:11:41 +08:00
backGoodsFn() {
2024-03-05 14:30:16 +08:00
if (this.backAble) {
window.location.replace('./homepage.html');
} else {
history.go(-2);
}
},
/* 接口异常处理 */
2024-04-10 23:11:41 +08:00
axiosErrorFun(code, message) {
2024-03-05 14:30:16 +08:00
this.loading = false;
if (code == 403) {
if (this.backAble) {
this.message = message;
setTimeout(() => {
window.location.href = localStorage.getItem('entryLink');
}, 3000);
} else {
this.message = message;
}
} else {
this.message = message;
}
},
//复制文本
2024-04-10 23:11:41 +08:00
copyFn() {
2024-03-05 14:30:16 +08:00
var textArea = document.createElement("textarea");
textArea.value = this.copyLink;
document.body.appendChild(textArea);
textArea.select();
document.execCommand("copy");
this.tips("复制成功,请到浏览器打开");
document.body.removeChild(textArea);
this.copyshow = false;
this.maskshow = false;
this.copyLink = null;
this.message = '';
},
/* 触发提示 */
2024-04-10 23:11:41 +08:00
tips(text) {
2024-03-05 14:30:16 +08:00
this.cls && clearTimeout(this.cls);
this.prompt_text = text;
this.promptShow = true;
this.cls = setTimeout(() => {
this.promptShow = false;
}, 3000);
},
}
})
</script>
</html>