123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823 |
- <template>
- <view class="app-layout">
- <app-layout>
- <view class="detail-bg">
- <view class="fxhb-bg" :style="{'background-image': `url(${appImg.bg})`}">
- <view class="fxhb-right">
- <view @click="rules">活动规则</view>
- <view @click="homes">返回首页</view>
- </view>
- </view>
- <view class="fxhb-box">
- <!-- 正在进行 -->
- <view v-if="status === 0 && is_join == 1" class="detail-info">
- <view class="user-list dir-left-wrap main-center">
- <view v-for="(v,k) in list" :key="k" class="user-item">
- <image :src="v.avatar" load-lazy></image>
- </view>
- <view v-for="(v,k) in user_num_list" :key="k" class="user-item none">
- <image :src="appImg.fxhb_none" load-lazy></image>
- </view>
- </view>
- <view class="detail-info-text">还差{{user_num}}人即可瓜分{{coupon_total_money}}元红包,快邀好友来拆</view>
- <view class="detail-time-text">{{time_str}}后结束</view>
- <view class="main-center">
- <app-jump-button open_type="share">
- <app-button color="#FFFFFF" height="88" width="560"
- background="#ff4544" round>邀请好友一起拆
- </app-button>
- </app-jump-button>
- </view>
- </view>
- <!-- 过期 -->
- <view v-if="status === 2" class="detail-info">
- <view class="detail-info-text cross-center dir-top-nowrap">
- <view>超过规定时间,该红包不能拆了</view>
- <icon class="icon-detail-time"></icon>
- </view>
- <view class="main-center">
- <app-button @click="openNew" height="88" width="560" background="#ff4544" color="#FFFFFF"
- font-size="32" round>拆一个新红包
- </app-button>
- </view>
- </view>
- <!-- 未中奖 -->
- <view v-if="status === 1 && is_join == 0" class="detail-info">
- <view class="user-list dir-left-wrap main-center">
- <block v-for="(v,k) in list" :key="k">
- <view class="user-item">
- <image :src="v.avatar" load-lazy></image>
- </view>
- </block>
- </view>
- <view class="detail-info-text">很遗憾,该红包已被瓜分完了</view>
- <view class="main-center detail-error">
- <app-button height="88" width="560" color="#FFFFFF" background="#ff4544" @click="openNew"
- round>
- 拆一个新红包
- </app-button>
- </view>
- </view>
- <!-- 已中奖 -->
- <view v-if="status === 1 && is_join == 1" class="detail-info">
- <view class="detail-info-text">恭喜您,已成功瓜分红包</view>
- <view class="dir-left-nowrap cross-center coupon">
- <view class="box-grow-1">
- <view class="coupon-title">满减券</view>
- <view class="coupon-desc">满{{min_price}}可用</view>
- </view>
- <view class="box-grow-0 dir-left-nowrap cross-bottom">
- <view class="coupon-unit cross-bottom">¥</view>
- <view class="coupon-money">{{user_price}}</view>
- </view>
- </view>
- <view class="main-center">
- <app-button @click="openNew" font-size="32" background="#ff4544" height="88" width="560"
- color="#FFFFFF" round>拆一个新红包
- </app-button>
- </view>
- <view class="main-center coupon-set">
- <app-button @click="goods" font-size="32" background="#ffb82f" height="88" width="560"
- color="#FFFFFF" round>立即使用
- <icon class="icon-right"></icon>
- </app-button>
- </view>
- </view>
- <!-- 中奖列表 -->
- <view v-if="status === 1" class="detail-info award-list">
- <view class="dir-left dir-left-nowrap main-center cross-center">
- <view class="box-grow-0 list-line"></view>
- <view class="box-grow-0 list-text">看看大家手气</view>
- <view class="box-grow-0 list-line"></view>
- </view>
- <view class="dir-left-nowrap cross-center list" v-for="(v,k) in list" :key="k">
- <view class="box-grow-0">
- <image class="user-avatar" :src="v.avatar" load-lazy></image>
- </view>
- <view class="box-grow-1">{{v.nickname}}</view>
- <view class="box-grow-0 dir-top-nowrap main-right">
- <view class="main-right">{{v.get_price}}元</view>
- <view class="dir-left main-center best" v-if="v.is_best">
- <icon class="user-pond"></icon>
- <view class="t-extra-small">手气最佳</view>
- </view>
- </view>
- </view>
- </view>
- <!-- 推荐商品 -->
- <view class="more-goods" v-if="goods_list && goods_list.length">
- <view class="tt-goods dir-left-nowrap cross-center main-center">
- <view class="line"></view>
- <view class="dir-left-nowrap cross-center">
- <icon class="icon-love"></icon>
- <view>商品推荐</view>
- </view>
- <view class="line"></view>
- </view>
- <u-ordinary-list :isShowAttr="true" :list="goods_list" :theme="getTheme" :list-style="2"></u-ordinary-list>
- </view>
- <!-- 模态框 -->
- <view v-if="show_share_model && user_num" class="act-modal">
- <view class="act-modal-bg"></view>
- <view class="act-modal-pic cross-center main-center">
- <view class="modal-box" :style="{'background-image': `url(${appImg.share_modal_bg})`}">
- <view class="modal-close" @click="closeShareModal">
- <icon class="icon-close"></icon>
- </view>
- <view class="modal-text dir-left-nowrap main-center cross-bottom">
- <view>还差</view>
- <view class="bold-num">{{user_num}}</view>
- <view>个人即可拆红包</view>
- </view>
- <view class="dir-left-nowrap main-center cross-bottom">
- <view>一起瓜分</view>
- <view class="bold-money">{{coupon_total_money}}</view>
- <view>元!</view>
- </view>
- <view class="main-center btn">
- <app-jump-button open_type="share">
- <app-button height="80" width="440" color="#FFFFFF" font-size="28"
- background="#ff4544" round>邀请好友一起拆
- </app-button>
- </app-jump-button>
- </view>
- </view>
- </view>
- </view>
- <view v-if="is_new" class="hongbao dir-left main-center">
- <view class="hongbao-content" :style="{'background-image': `url(${appImg.hongbao_bg})`}">
- <view class="hongbao-desc">
- <view>{{config.count_price}}元红包已包好</view>
- <view>快拆开和小伙伴分红包</view>
- </view>
- <view @click="open">
- <icon class="hongbao-btn"></icon>
- </view>
- </view>
- </view>
- </view>
- </view>
- </app-layout>
- </view>
- </template>
- <script>
- import { mapGetters, mapState } from 'vuex';
- import uOrdinaryList from '../../../components/page-component/u-goods-list/u-ordinary-list.vue';
- export default {
- name: "detail",
- components: {
- uOrdinaryList
- },
- computed: {
- ...mapState({
- appImg: state => state.mallConfig.plugin.fxhb.app_image
- }),
- ...mapGetters('mallConfig', {
- getTheme: 'getTheme'
- })
- },
-
- data() {
- let interval_time;
- return {
- interval_time,
- user_activity_id: 0,
- config: null,
- goods_list: [],
- show_share_model: false,
- time_str: "00:00:00",
- is_new: false,
- coupon_total_money: 0,
- is_join: 0,
- is_my_hongbao: false,
- list: null,
- min_price: 0,
- reset_time: null,
- status: -1,
- totalUser: 0,
- user_num: 0,
- user_num_list: [],
- user_price: 0,
- again_open: true,
- page_url: '',
- template_message: []
- }
- },
-
- onLoad: function (options) {
- this.user_activity_id = options.user_activity_id ? options.user_activity_id : '';
- this.loadConfig();
- },
- onShareAppMessage() {
- return this.$shareAppMessage({
- title: this.config.share_title,
- path: '/plugins/fxhb/detail/detail',
- params: {
- user_activity_id: this.user_activity_id,
- },
- imageUrl: this.config.share_pic_url
- });
- },
- onUnload: function () {
- clearInterval(this.intervalTime);
- },
- methods: {
- loadConfig() {
- const self = this;
- uni.showLoading({
- title: '加载中',
- });
- self.$request({
- url: self.$api.fxhb.index,
- data: {
- user_activity_id: self.user_activity_id
- }
- }).then(info => {
- uni.hideLoading();
- if (info.code === 0) {
- self.config = info.data.config;
- self.template_message = info.data.template_message;
- if (info.data.user_activity_id) {
- self.user_activity_id = info.data.user_activity_id;
- self.loadData()
- } else {
- if (self.user_activity_id) {
- self.subscribe();
- } else {
- self.openNew();
- }
- }
- } else {
- uni.showToast({icon: 'none', title: info.msg});
- setTimeout(() => {
- uni.redirectTo({url: '/pages/index/index'})
- }, 2000)
- }
- }).catch(() => {
- uni.hideLoading();
- })
- },
- openNew() {
- [this.status, this.is_new, this.goods_list] = [-1, true, []];
- },
- open() {
- if (this.again_open) {
- this.user_activity_id = 0;
- this.subscribe();
- this.again_open = false;
- }
- },
- rules() {
- uni.navigateTo({
- url: `/pages/rules/index?url=${encodeURIComponent(this.$api.fxhb.index)}&keys=${JSON.stringify(['config', 'remark'])}`,
- });
- },
- homes() {
- uni.navigateTo({url: `/pages/index/index`})
- },
- goods() {
- uni.redirectTo({url: this.page_url});
- },
- subscribe(){
- this.detailSubmit();
- // return;
- // self.$subscribe(self.template_message).then(res => {
- // let tpl_id = self.template_message[0];
- // if (res[tpl_id] == 'accept') {
- // uni.showModal({
- // title: '提示',
- // content: '订阅成功',
- // showCancel: false,
- // success(res) {
- // self.detailSubmit();
- // }
- // })
- // } else {
- // uni.showModal({
- // title: '提示',
- // content: '取消订阅',
- // showCancel: false,
- // success(res) {
- // self.detailSubmit();
- // }
- // })
- // }
- // }).catch(res => {
- // self.detailSubmit();
- // });
- },
- detailSubmit() {
- uni.showLoading({
- title: '抢红包中',
- mask: true,
- });
- this.$request({
- url: this.$api.fxhb.join,
- method: 'post',
- data: {
- user_activity_id: this.user_activity_id
- }
- }).then(info => {
- uni.hideLoading();
- if (info.code === 0) {
- this.result(info.data.queueId, info.data.token);
- } else {
- this.openNew();
- uni.showToast({icon: 'none', title: info.msg});
- }
- }).catch(() => {
- uni.hideLoading();
- })
- },
- async loadData() {
- uni.showLoading({
- title: '加载中',
- mask: true,
- });
- const info = await this.$request({
- url: this.$api.fxhb.detail,
- data: {
- user_activity_id: this.user_activity_id
- }
- });
- uni.hideLoading();
- if (info.code === 0) {
- let {
- coupon_total_money,
- is_join, is_my_hongbao,
- list, min_price, page_url,
- reset_time, status, totalUser,
- user_num, user_price
- } = info.data;
- this.coupon_total_money = coupon_total_money;
- this.is_join = is_join;
- this.is_my_hongbao = is_my_hongbao;
- this.list = list;
- this.min_price = min_price;
- this.page_url = page_url;
- this.reset_time = reset_time;
- this.totalUser = totalUser;
- this.status = status;
- this.user_num = user_num;
- this.user_price = user_price;
- this.user_num_list = [];
- for (let i = 0; i < this.user_num; i++) {
- this.user_num_list.push(i);
- }
- this.setTimeStart();
- this.getRecommend();
- this.again_open = true;
- } else {
- uni.showToast({
- icon: 'none',
- title: info.msg,
- duration: 2000,
- success: function() {
- uni.redirectTo({
- url: '/pages/index/index'
- });
- }
- });
- }
- },
- setTimeStart() {
- const self = this;
- clearInterval(this.interval_time);
- let times = function () {
- let hour = 0,
- minute = 0,
- second = 0; //时间默认值
- let times = self.reset_time;
- times--;
- if (times > 0) {
- hour = Math.floor(times / (60 * 60));
- minute = Math.floor(times / 60) - (hour * 60);
- second = Math.floor(times) - (hour * 60 * 60) - (minute * 60);
- }
- [self.reset_time, self.time_list] = [times, {hour, minute, second}];
- self.time_str = (hour < 10 ? ('0' + hour) : hour) + ':' + (minute < 10 ? ('0' + minute) : minute) + ':' + (second < 10 ? ('0' + second) : second);
- if (times <= 0) {
- clearInterval(self.intervalTime);
- }
- };
- times();
- this.interval_time = setInterval(() => {
- times();
- }, 1000);
- },
- result(queueId, token) {
- uni.showLoading({
- title: '加载中',
- mask: true,
- });
- this.$request({
- url: this.$api.fxhb.join_result,
- data: {
- queueId: queueId,
- token: token
- }
- }).then(info => {
- if (info.code === 0) {
- if (info.data.retry && info.data.retry == 1) {
- setTimeout(() => {
- this.result(queueId, token)
- }, 1000);
- } else {
- this.user_activity_id = info.data.user_activity_id;
- this.loadData();
- uni.hideLoading();
- this.showShareModal();
- }
- } else {
- uni.hideLoading();
- this.status = 2;
- uni.showToast({
- icon: 'none',
- title: info.msg,
- duration: 2000,
- success: function() {
- uni.redirectTo({
- url: '/pages/index/index'
- });
- }
- });
- }
- })
- },
- //打开分享提示框
- showShareModal: function () {
- [this.is_new, this.show_share_model] = [false, true];
- },
- //关闭分享提示框
- closeShareModal: function () {
- [this.show_share_model] = [false];
- },
- async getRecommend () {
- uni.showLoading({
- title: '加载中',
- mask: true,
- });
- const info = await this.$request({
- url: this.$api.fxhb.recommend,
- });
- uni.hideLoading();
- if (info.code === 0) {
- this.goods_list = info.data.list;
- }
- }
- }
- }
- </script>
- <style scoped lang="scss">
- .app-layout .detail-bg {
- background: #fe6b2e;
- min-height: calc(100vh - var(--window-top));
- }
- .app-layout /deep/ .app-layout {
- background: #fe6b2e;
- min-height: calc(100vh - var(--window-top));
- }
- .fxhb-bg {
- background-size: 100% auto;
- background-repeat: no-repeat;
- height: #{464rpx};
- position: relative;
- z-index: 50;
- }
- .fxhb-right {
- font-size: #{24rpx};
- color: #FFFFFF;
- float: right;
- view {
- background: rgba(0, 0, 0, .5);
- border-radius: #{28rpx} 0 0 #{28rpx};
- line-height: #{56rpx};
- text-align: center;
- width: #{136rpx};
- margin-top: #{24rpx};
- }
- }
- .fxhb-start {
- position: fixed;
- width: 100%;
- left: 0;
- top: #{380rpx};
- height: 100%;
- z-index: 10;
- }
- .hongbao {
- position: relative;
- width: 100%;
- left: 0;
- height: 100%;
- z-index: 51;
- .hongbao-content {
- font-size: #{36rpx};
- padding: #{350rpx} #{25rpx} 0 #{25rpx};
- background-size: 100% auto;
- background-repeat: no-repeat;
- width: #{602rpx};
- height: #{712rpx};
- text-align: center;
- .hongbao-desc {
- margin-bottom: #{100rpx};
- line-height: 1.5;
- color: #ffe15d;
- font-size: 13pt;
- }
- }
- .hongbao-btn {
- background-image: url("./../image/open_hongbao_btn.png");
- line-height: #{96rpx};
- height: #{96rpx};
- width: #{416rpx};
- background-repeat: no-repeat;
- background-size: 100% 100%;
- text-align: center;
- }
- }
- .fxhb-box {
- margin-top: #{-68rpx};
- background: #fe6b2e;
- .detail-info {
- background: rgba(255, 255, 255, 0.9);
- border-radius: #{16rpx};
- margin: 0 #{24rpx};
- padding: #{50rpx};
- z-index: 100;
- position: relative;
- }
- .user-list {
- overflow: hidden;
- margin-bottom: #{16rpx};
- .user-item {
- border: #{2rpx} solid #ff5c5c;
- width: #{104rpx};
- height: #{104rpx};
- margin-left: #{23rpx};
- margin-right: #{23rpx};
- margin-bottom: #{40rpx};
- display: inline-block;
- overflow: hidden;
- border-radius: #{999rpx};
- background-color: #fff;
- float: left;
- }
- .none {
- border-style: none;
- }
- image {
- width: 100%;
- height: 100%;
- }
- }
- .detail-info-text {
- text-align: center;
- color: #666666;
- font-size: #{28rpx};
- }
- .detail-time-text {
- color: #999999;
- text-align: center;
- margin-top: #{24rpx};
- margin-bottom: #{40rpx};
- font-size: #{28rpx};
- }
- .icon-detail-time {
- background-size: 100% 100%;
- background-image: url("./../image/cry.png");
- width: #{190rpx};
- height: #{168rpx};
- margin-top: #{48rpx};
- margin-bottom: #{32rpx};
- }
- }
- .more-goods {
- padding-bottom: #{32rpx};
- color: #FFFFFF;
- font-size: #{24rpx};
- margin-top: #{48rpx};
- .tt-goods {
- margin-bottom: #{12rpx};
- }
- .line {
- height: #{1px};
- width: #{40rpx};
- background: #FFFFFF;
- margin: 0 #{24rpx};
- }
- .icon-love {
- width: #{24rpx};
- height: #{24rpx};
- background-size: 100% 100%;
- background-repeat: no-repeat;
- margin-right: #{12rpx};
- background-image: url("./../image/love.png");
- }
- }
- .detail-error {
- margin-top: #{40rpx};
- }
- .award-list {
- margin-top: #{32rpx} !important;
- padding-top: #{48rpx} !important;
- color: #353535;
- padding-bottom: #{56rpx} !important;
- .list {
- margin-top: #{40rpx};
- }
- .list-line {
- width: #{176rpx};
- height: #{2rpx};
- background: #dbdbdb;
- }
- .list-text {
- font-size: #{32rpx};
- padding: 0 #{50rpx};
- }
- .user-avatar {
- width: #{80rpx};
- height: #{80rpx};
- border-radius: 50%;
- margin-right: #{20rpx};
- }
- .best {
- color: #ffb82f;
- font-size: #{28rpx};
- margin-top: #{10rpx};
- .user-pond {
- width: #{40rpx};
- height: #{30rpx};
- margin-right: #{10rpx};
- background-image: url("./../image/best_icon.png");
- background-repeat: no-repeat;
- background-size: 100% auto;
- }
- }
- }
- .coupon-set {
- margin-top: #{24rpx};
- .icon-right {
- width: #{12rpx};
- height: #{22rpx};
- margin-left: #{10rpx};
- background-image: url("../../../static/image/icon/arrow-right-white.png");
- background-repeat: no-repeat;
- background-size: 100% auto;
- }
- }
- .coupon {
- margin-top: #{32rpx};
- background-size: 100% 100%;
- height: #{190rpx};
- background-repeat: no-repeat;
- background-image: url("./../image/coupon.png");
- margin-bottom: #{24rpx};
- .coupon-title {
- font-size: #{48rpx};
- padding-left: #{56rpx};
- color: #8f4c1a;
- margin-bottom: #{16rpx};
- }
- .coupon-desc {
- font-size: #{28rpx};
- padding-left: #{56rpx};
- color: #8f4c1a;
- }
- .coupon-unit {
- font-size: #{50rpx};
- line-height: 1.35;
- color: #ff5c5c;
- padding-bottom: #{2rpx};
- }
- .coupon-money {
- font-size: #{80rpx};
- line-height: 1;
- font-weight: bold;
- padding-right: #{56rpx};
- color: #ff5c5c;
- }
- }
- .act-modal {
- position: fixed;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- z-index: 2001;
- transition: 200ms;
- .show {
- visibility: visible;
- opacity: 1;
- }
- .act-modal-bg {
- background: rgba(0, 0, 0, 0.5);
- position: fixed;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- z-index: 1;
- }
- .act-modal-pic {
- background: rgba(0, 0, 0, 0.25);
- position: fixed;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- z-index: 1;
- }
- }
- .modal-box {
- background-size: 100% 100%;
- background-repeat: no-repeat;
- height: #{816rpx};
- width: #{606rpx};
- text-align: center;
- font-size: #{40rpx};
- color: #666666;
- .modal-close {
- float: right;
- margin-top: #{32rpx};
- margin-right: #{32rpx};
- .icon-close {
- background-image: url("../../../static/image/icon/close.png");
- background-repeat: no-repeat;
- background-size: 100% auto;
- height: #{30rpx};
- width: #{30rpx};
- }
- }
- .modal-text {
- margin-top: #{448rpx};
- margin-bottom: #{28rpx};
- }
- .bold-num {
- font-size: #{54rpx};
- color: #ffc73f;
- line-height:1em;
- font-weight: bold;
- }
- .bold-money {
- font-size: #{68rpx};
- color: #ffc73f;
- line-height:1em;
- font-weight: bold;
- }
- .btn {
- margin-top: #{64rpx};
- }
- }
- </style>
|