Files
crmeb-mp/pages/goods/order_pay_status/index.vue
karlcarlo a5c5d753b6 feat: 添加静态资源文件及基础组件
- 新增大量图片资源,包括图标、背景图、海报等,用于页面展示
- 添加字体文件及样式配置,支持自定义字体
- 引入 uni-ui 组件库,包括图标、弹窗、日期选择器等常用组件
- 添加网络状态监听、加密工具等基础工具函数
- 配置 Vuex 状态管理,包括购物车数量、热门搜索词等
- 增加页面组件,如用户协议、分销信息、提现状态等
- 配置项目构建和忽略文件,优化开发体验
2026-02-26 17:59:51 +08:00

539 lines
16 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 :style="colorStyle">
<view class="w-full relative z-99 bg-gradient" :style="{ 'padding-top': sysHeight + 'px' }">
<view class="w-full px-20 pl-20 h-80 flex-between-center" @tap="goIndex()">
<text class="iconfont icon-ic_leftarrow fs-40 text--w111-fff"></text>
<text class="fs-34 fw-500 text--w111-fff">订单支付</text>
<text></text>
</view>
<view class="flex-col flex-center mt-50">
<view class="flex-y-center">
<text class="iconfont icon-ic-complete1 fs-52 text--w111-fff" v-if="order_pay_info.paid || order_pay_info.pay_type == 'offline'"></text>
<view v-else class="iconfont icon-ic_close1 fs-52 text--w111-fff"></view>
<text class="fs-40 fw-500 text--w111-fff pl-16" v-if="order_pay_info.pay_type == 'offline' && !order_pay_info.paid">订单创建成功</text>
<text class="fs-40 fw-500 text--w111-fff pl-16" v-else>{{ order_pay_info.paid ? '订单支付成功' : '等待支付...' }}</text>
</view>
<view class="flex-center mt-30">
<view class="w-192 h-64 rd-40rpx flex-center fs-24 text--w111-fff white-border" @tap="goIndex">返回首页</view>
<view v-if="!order_pay_info.is_send_gift || !order_pay_info.paid" class="w-192 h-64 rd-40rpx flex-center fs-24 text--w111-fff white-border ml-48" @tap="goOrderDetails">
查看订单
</view>
<view v-else-if="order_pay_info.paid" @click="giftModalShow = true" class="w-192 h-64 rd-40rpx flex-center fs-24 text--w111-fff white-border ml-48">送给好友</view>
</view>
</view>
<view class="h-216"></view>
</view>
<view class="relative content bg--w111-fff w-full pt-32 pl-20 pr-20 z-100">
<view
class="card bg--w111-fff rd-24rpx h-484 pt-32 pl-20 pr-20"
v-if="order_pay_info.paid && order_pay_info.pay_type != 'offline' && prize.length && loading && lotteryLoading"
>
<gridsLottery
:prizeData="prize"
@get_winingIndex="getWiningIndex"
@luck_draw_finish="luck_draw_finish"
:lotteryNum="lottery_num"
:lotteryType="1"
:datatime="datatime"
></gridsLottery>
</view>
<view class="card bg--w111-fff rd-24rpx px-32" v-if="showGift">
<view class="cell flex-between-center py-32" v-for="(item, index) in couponList" :key="index + 'n'" @click="goPage(1, '/pages/users/user_coupon/index')">
<view class="flex-y-center">
<image :src="imgHost + '/statics/images/order/prize_coupon_icon.png'" class="w-76 h-76 rd-40rpx"></image>
<view class="ml-24">
<view class="fs-28 text--w111-333 lh-38rpx">下单得{{ item.coupon_price }}元优惠券</view>
<view class="fs-22 text--w111-999 lh-30rpx mt-8" v-if="parseInt(item.use_min_price > 0)">满{{ item.use_min_price }}元可用</view>
<view class="fs-22 text--w111-999 lh-30rpx mt-8" v-else>无门槛优惠券</view>
</view>
</view>
<view class="card_btn flex-center font-color fs-22">去使用</view>
</view>
<view class="cell flex-between-center py-32" v-for="(item, index) in giftList" :key="index + 'o'">
<view class="flex-y-center">
<image :src="imgHost + '/statics/images/order/prize_gift_icon.png'" class="w-76 h-76 rd-40rpx"></image>
<view class="ml-24">
<view class="fs-28 text--w111-333 line2 w-400">{{ item.store_name }}</view>
</view>
</view>
<view class="card_btn flex-center font-color fs-22" @tap="goOrderDetails">去使用</view>
</view>
<view class="cell flex-between-center py-32" v-if="prize_integral > 0" @click="goPage(1, '/pages/users/user_integral/index')">
<view class="flex-y-center">
<image :src="imgHost + '/statics/images/order/prize_integral_icon.png'" class="w-76 h-76 rd-40rpx"></image>
<view class="ml-24">
<view class="fs-28 text--w111-333 line2 w-400">获得{{ prize_integral }}积分</view>
<view class="fs-22 text--w111-999 lh-30rpx mt-8">下单即可抵扣</view>
</view>
</view>
<view class="card_btn flex-center font-color fs-22" @tap="goOrderDetails">去使用</view>
</view>
<view class="cell flex-between-center py-32" v-if="prize_exp > 0">
<view class="flex-y-center">
<image :src="imgHost + '/statics/images/order/prize_exp_icon.png'" class="w-76 h-76 rd-40rpx"></image>
<view class="ml-24">
<view class="fs-28 text--w111-333 line2 w-400">获得{{ prize_exp }}经验</view>
<view class="fs-22 text--w111-999 lh-30rpx mt-8">下单即可抵扣</view>
</view>
</view>
<view class="card_btn flex-center font-color fs-22" @tap="goOrderDetails">去使用</view>
</view>
</view>
<recommend :hostProduct="hostProduct" :title="recommendTitle"></recommend>
</view>
<lotteryAleart :aleartStatus="aleartStatus" :alData="alData" theme :aleartType="aleartType" @close="closeLottery"></lotteryAleart>
<view class="mask z-8000" v-if="aleartStatus || addressModel" @touchmove.stop.prevent="moveHandle"></view>
<giftModal :aleartStatus="giftModalShow" :giftData="giftData" @shareH5="shareH5" @close="giftModalShow = false"></giftModal>
<view class="mask z-101" v-if="giftModalShow"></view>
<canvas class="canvas" canvas-id="posterCanvas"></canvas>
<activityModal :pageIndex="5"></activityModal>
<home></home>
</view>
</template>
<script>
let sysHeight = uni.getWindowInfo().statusBarHeight;
// import lotteryModel from './payLottery.vue'
import gridsLottery from '../components/lottery/payLottery.vue';
import lotteryAleart from '../components/lotteryAleart/index.vue';
import recommend from '@/components/recommend';
import { getOrderDetail, orderCoupon, getOrderPrizeApi } from '@/api/order.js';
import { openOrderSubscribe } from '@/utils/SubscribeMessage.js';
import giftModal from '../components/sendGiftPoster/index.vue';
import activityModal from "@/components/activityModal/index.vue";
import { getLotteryData, startLottery, receiveLottery } from '@/api/lottery.js';
import { getProductHot, postCartAdd } from '@/api/store.js';
import { toLogin } from '@/libs/login.js';
import { mapGetters } from 'vuex';
import colors from '@/mixins/color';
import { HTTP_REQUEST_URL } from '@/config/app';
import Cache from '@/utils/cache';
import { userShare } from '@/api/user.js';
export default {
components: {
gridsLottery,
lotteryAleart,
recommend,
giftModal,
activityModal
},
mixins: [colors],
data() {
return {
imgHost: HTTP_REQUEST_URL,
sysHeight: sysHeight,
loading: false,
lotteryLoading: false,
orderLottery: false,
orderId: '',
order_pay_info: {
paid: 1,
_status: {}
},
isAuto: false, //没有授权的不会自动授权
isShowAuth: false, //是否隐藏授权
status: 0,
msg: '',
couponsHidden: true,
couponList: [],
giftList: [],
options: {},
prize: [],
datatime: 0,
totalPrice: 0,
type: '',
lottery_draw_param: {
startIndex: 3, //开始抽奖位置,从0开始
totalCount: 3, //一共要转的圈数
winingIndex: 1, //中奖的位置,从0开始
speed: 100 //抽奖动画的速度 [数字越大越慢,默认100]
},
aleartType: 0,
aleartStatus: false,
addressModel: false,
lottery_num: 0,
alData: {},
hostProduct: [],
hotScroll: false,
hotPage: 1,
hotLimit: 10,
prize_integral: 0,
prize_exp: 0,
giftModalShow: false,
giftData: {
image: '',
title: '',
message: '',
id: 0,
avatar: '',
nickname: '',
code: ''
},
userInfo: Cache.get('USER_INFO') || {},
mpGiftImg: HTTP_REQUEST_URL + '/statics/images/gift_share.jpg',
recommendTitle: ""
};
},
computed: {
...mapGetters(['isLogin', 'cartNum']),
showGift() {
if (!this.couponList.length && !this.giftList.length && this.prize_integral == 0 && this.prize_exp == 0) {
return false;
} else {
return true;
}
}
},
watch: {
isLogin: {
handler: function (newV, oldV) {
if (newV) {
//#ifndef MP
this.getOrderPayInfo();
//#endif
}
},
deep: true
}
},
onLoad: function (options) {
this.options = options;
if (!options.order_id)
return this.$util.Tips(
{
title: '缺少参数无法查看订单支付状态'
},
{
tab: 3,
url: 1
}
);
this.orderId = options.order_id;
this.status = options.status || 0;
this.msg = options.msg || '';
this.type = this.options.type;
this.totalPrice = this.options.totalPrice;
this.getLotteryData(this.type);
this.getHostProduct();
},
onShow() {
uni.setStorageSync('form_type_cart', 1);
if (this.isLogin) {
this.getOrderPayInfo();
} else {
toLogin();
}
},
/**
* 用户点击右上角分享
*/
// #ifdef MP
onShareAppMessage: function () {
let that = this;
userShare();
return {
title: that.giftData.message || '',
imageUrl: that.mpGiftImg || '',
path: '/pages/goods/receive_gift/index?id=' + this.giftData.id + '&spid=' + this.$store.state.app.uid
};
},
onShareTimeline() {
let that = this;
userShare();
return {
title: that.giftData.message,
query: {
id: that.id,
spid: that.uid || 0
},
imageUrl: that.mpGiftImg
};
},
// #endif
methods: {
// #ifdef H5
setOpenShare() {
let that = this;
if (that.$wechat.isWeixin()) {
let configAppMessage = {
desc: this.giftData.message,
title: this.giftData.title,
link: window.location.protocol + '//' + window.location.host + '/pages/goods/receive_gift/index?id=' + this.giftData.id + '&spid=' + that.$store.state.app.uid,
imgUrl: that.mpGiftImg
};
that.$wechat
.wechatEvevt(['updateAppMessageShareData', 'updateTimelineShareData', 'onMenuShareAppMessage', 'onMenuShareTimeline'], configAppMessage)
.then((res) => {})
.catch((res) => {
if (res.is_ready) {
res.wx.updateAppMessageShareData(configAppMessage);
res.wx.updateTimelineShareData(configAppMessage);
res.wx.onMenuShareAppMessage(configAppMessage);
res.wx.onMenuShareTimeline(configAppMessage);
}
});
}
},
// #endif
moveHandle() {
return false;
},
// 授权关闭
authColse: function (e) {
this.isShowAuth = e;
},
openTap() {
this.$set(this, 'couponsHidden', !this.couponsHidden);
},
onLoadFun: function () {
this.getOrderPayInfo();
this.isShowAuth = false;
},
/**
*
* 支付完成查询支付状态
*
*/
getOrderPayInfo: function () {
let that = this;
uni.showLoading({
title: '正在加载中'
});
getOrderDetail(that.orderId)
.then((res) => {
uni.hideLoading();
that.$set(that, 'order_pay_info', res.data);
uni.setNavigationBarTitle({
title: res.data.paid ? '支付成功' : '未支付'
});
uni.$emit('newCartNum', res.data.cartInfo);
if (parseInt(uni.getStorageSync('news')) === 0) {
let colNum = this.cartNum - res.data.total_num;
this.$store.commit('indexData/setCartNum', colNum + '');
uni.removeStorageSync('news');
}
this.giftData = {
image: res.data.cartInfo[0].productInfo.image,
title: res.data.cartInfo[0].productInfo.store_name,
message: res.data.send_gift_mark,
id: res.data.id,
avatar: res.data.avatar,
nickname: res.data.nickname,
code: res.data.send_gift_code
};
// #ifdef H5
if (this.order_pay_info.is_send_gift) this.setOpenShare();
// #endif
if(!this.order_pay_info.is_send_gift){
uni.hideShareMenu()
}
this.loading = true;
setTimeout(function () {
that.getOrderPrize();
}, 1000);
})
.catch((err) => {
this.loading = true;
uni.hideLoading();
});
},
getOrderPrize() {
getOrderPrizeApi(this.orderId).then((res) => {
this.couponList = res.data.coupons;
this.giftList = res.data.gift;
this.prize_integral = res.data.integral;
this.prize_exp = res.data.exp;
});
},
/**
* 去首页关闭当前所有页面
*/
goIndex: function (e) {
let identity = this.$store.state.app.identity;
let styleType = this.$store.state.app.system_channel_style;
if(identity == 1){
uni.redirectTo({
url: this.styleType == 1 ? "/pages/merchant/index/index" : "/pages/merchant/index/goods"
})
}else{
uni.switchTab({
url: '/pages/index/index'
});
}
},
/**
*
* 去订单详情页面
*/
goOrderDetails: function (e) {
let that = this;
// #ifdef MP
uni.showLoading({
title: '正在加载'
});
openOrderSubscribe()
.then((res) => {
uni.hideLoading();
uni.navigateTo({
url: '/pages/goods/order_details/index?order_id=' + that.orderId
});
})
.catch(() => {
uni.hideLoading();
});
// #endif
// #ifndef MP
uni.navigateTo({
url: '/pages/goods/order_details/index?order_id=' + that.orderId
});
// #endif
},
getLotteryData(type) {
getLotteryData(type)
.then((res) => {
this.factor_num = res.data.lottery.factor_num;
this.id = res.data.lottery.id;
this.prize = res.data.lottery.prize;
if (this.prize.length) {
this.prize.push({ name: 1 });
}
this.lottery_num = res.data.lottery_num;
this.lotteryLoading = true;
this.datatime = parseInt(res.data.cache_time);
if (res.data.lottery.type == 6) {
uni.navigateTo({
url: '/pages/goods/lottery/grids/record'
});
}
})
.catch((err) => {
this.lotteryLoading = false;
});
},
getWiningIndex(callback) {
this.aleartType = 0;
startLottery({
id: this.id
})
.then((res) => {
this.prize.forEach((item, index) => {
if (res.data.id === item.id) {
this.alData = res.data;
this.lottery_draw_param.winingIndex = index;
callback(this.lottery_draw_param);
}
});
})
.catch((err) => {
this.$util.Tips({
title: err
});
});
},
// 抽奖完成
luck_draw_finish(param) {
this.aleartType = 2;
this.aleartStatus = true;
},
closeLottery(status) {
this.aleartStatus = false;
if (this.alData.type === 6) {
postCartAdd({
cartNum: 1,
new: 1,
is_new: 1,
productId: this.alData.product_id,
uniqueId: this.alData.unique,
luckRecordId: this.alData.lottery_record_id
})
.then((res) => {
uni.navigateTo({
url: `/pages/goods/order_confirm/index?new=1&luckRecordId=${this.alData.lottery_record_id}&cartId=${res.data.cartId}`
});
})
.catch((err) => {
this.$util.Tips({
title: `${err},请联系客服`
});
});
}
this.getLotteryData(this.type);
},
getHostProduct: function () {
let that = this;
if (that.hotScroll) return;
getProductHot({
page:that.hotPage,
limit:that.hotLimit,
type:2
}).then((res) => {
that.hotPage++;
that.hotScroll = res.data.list.length < that.hotLimit;
that.hostProduct = that.hostProduct.concat(res.data.list);
that.recommendTitle = res.data.title ? res.data.title : '猜你喜欢';
});
},
goPage(type, url) {
if (type == 1) {
uni.navigateTo({
url
});
} else if (type == 2) {
uni.switchTab({
url
});
} else if (type == 3) {
uni.navigateBack();
}
}
},
onPageScroll(e) {
uni.$emit('scroll');
},
onReachBottom() {
this.getHostProduct();
}
};
</script>
<style scoped>
.white-border {
border: 1rpx solid #fff;
}
.h-484 {
height: 484rpx;
}
.content {
background: #f5f5f5;
border-radius: 40rpx 40rpx 0 0;
left: 0;
top: -164rpx;
min-height: 500rpx;
}
.card ~ .card {
margin-top: 20rpx;
}
.cell ~ .cell {
border-top: 1px solid #eee;
}
.card_btn {
width: 114rpx;
height: 52rpx;
border-radius: 26rpx;
border: 1px solid #e93323;
}
.z-8000 {
z-index: 8000;
}
.z-1000 {
z-index: 1000;
}
.canvas {
width: 750rpx;
height: 1108rpx;
z-index: 9999;
position: absolute;
bottom: 40000rpx;
right: 30000rpx;
}
</style>