通过微信开发者工具 商城模板 创建新小程序
This commit is contained in:
		
							
								
								
									
										57
									
								
								mini-program/pages/promotion-detail/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								mini-program/pages/promotion-detail/index.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
import Toast from 'tdesign-miniprogram/toast/index';
 | 
			
		||||
import { fetchPromotion } from '../../services/promotion/detail';
 | 
			
		||||
 | 
			
		||||
Page({
 | 
			
		||||
  data: {
 | 
			
		||||
    list: [],
 | 
			
		||||
    banner: '',
 | 
			
		||||
    time: 0,
 | 
			
		||||
    showBannerDesc: false,
 | 
			
		||||
    statusTag: '',
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onLoad(query) {
 | 
			
		||||
    const promotionID = parseInt(query.promotion_id);
 | 
			
		||||
    this.getGoodsList(promotionID);
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  getGoodsList(promotionID) {
 | 
			
		||||
    fetchPromotion(promotionID).then(
 | 
			
		||||
      ({ list, banner, time, showBannerDesc, statusTag }) => {
 | 
			
		||||
        const goods = list.map((item) => ({
 | 
			
		||||
          ...item,
 | 
			
		||||
          tags: item.tags.map((v) => v.title),
 | 
			
		||||
        }));
 | 
			
		||||
        this.setData({
 | 
			
		||||
          list: goods,
 | 
			
		||||
          banner,
 | 
			
		||||
          time,
 | 
			
		||||
          showBannerDesc,
 | 
			
		||||
          statusTag,
 | 
			
		||||
        });
 | 
			
		||||
      },
 | 
			
		||||
    );
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  goodClickHandle(e) {
 | 
			
		||||
    const { index } = e.detail;
 | 
			
		||||
    const { spuId } = this.data.list[index];
 | 
			
		||||
    wx.navigateTo({ url: `/pages/goods/details/index?spuId=${spuId}` });
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  cardClickHandle() {
 | 
			
		||||
    Toast({
 | 
			
		||||
      context: this,
 | 
			
		||||
      selector: '#t-toast',
 | 
			
		||||
      message: '点击加购',
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  bannerClickHandle() {
 | 
			
		||||
    Toast({
 | 
			
		||||
      context: this,
 | 
			
		||||
      selector: '#t-toast',
 | 
			
		||||
      message: '点击规则详情',
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										10
									
								
								mini-program/pages/promotion-detail/index.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								mini-program/pages/promotion-detail/index.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
{
 | 
			
		||||
  "navigationBarTitleText": "营销详情",
 | 
			
		||||
  "usingComponents": {
 | 
			
		||||
    "t-toast": "tdesign-miniprogram/toast/toast",
 | 
			
		||||
    "t-image": "/components/webp-image/index",
 | 
			
		||||
    "t-icon": "tdesign-miniprogram/icon/icon",
 | 
			
		||||
    "count-down": "tdesign-miniprogram/count-down/count-down",
 | 
			
		||||
    "goods-list": "/components/goods-list/index"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										76
									
								
								mini-program/pages/promotion-detail/index.wxml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								mini-program/pages/promotion-detail/index.wxml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
<view id="js-page-wrap" class="promotion-detail-container">
 | 
			
		||||
	<view wx:if="{{banner}}" class="wrap" id="{{independentID}}">
 | 
			
		||||
		<view class="banner-wrap">
 | 
			
		||||
			<t-image
 | 
			
		||||
			  src="{{banner}}"
 | 
			
		||||
			  mode="aspectFill"
 | 
			
		||||
			  webp="{{true}}"
 | 
			
		||||
			  t-class="t-class-promotion-head"
 | 
			
		||||
			/>
 | 
			
		||||
			<view wx:if="{{!showBannerDesc && (time >= 0 || statusTag === 'finish')}}" class="count-down-wrap in-banner-count-down-wrap">
 | 
			
		||||
				<block wx:if="{{statusTag === 'finish'}}">
 | 
			
		||||
					<view class="status-tag {{statusTag}}">已结束</view>
 | 
			
		||||
					<text class="count-down-label">活动已结束</text>
 | 
			
		||||
				</block>
 | 
			
		||||
				<block wx:else>
 | 
			
		||||
					<view wx:if="{{statusTag === 'before'}}" class="status-tag {{statusTag}}">
 | 
			
		||||
						未开始
 | 
			
		||||
					</view>
 | 
			
		||||
					<text class="count-down-label">距结束仅剩</text>
 | 
			
		||||
					<count-down
 | 
			
		||||
					  wx:if="{{time > 0}}"
 | 
			
		||||
					  t-class="wr-cd-class"
 | 
			
		||||
					  time="{{time}}"
 | 
			
		||||
					  format="DD天 HH:mm:ss"
 | 
			
		||||
					  bind:finish="countDownFinishHandle"
 | 
			
		||||
					/>
 | 
			
		||||
				</block>
 | 
			
		||||
				<view class="detail-entry" bind:tap="bannerClickHandle">
 | 
			
		||||
					<text class="detail-entry-label">规则详情</text>
 | 
			
		||||
					<t-icon name="chevron-right" size="34rpx" style="color: #999" />
 | 
			
		||||
				</view>
 | 
			
		||||
			</view>
 | 
			
		||||
			<view wx:if="{{showBannerDesc && (useBannerDescSlot || time >= 0 || statusTag === 'finish')}}" class="banner-desc-wrap">
 | 
			
		||||
				<block wx:if="{{useBannerDescSlot}}">
 | 
			
		||||
					<slot name="banner-desc" />
 | 
			
		||||
				</block>
 | 
			
		||||
				<block wx:else>
 | 
			
		||||
					<view class="count-down-wrap after-banner-count-down-wrap">
 | 
			
		||||
						<block wx:if="{{statusTag === 'finish'}}">
 | 
			
		||||
							<view class="status-tag {{statusTag}}">已结束</view>
 | 
			
		||||
							<text class="count-down-label">活动已结束</text>
 | 
			
		||||
						</block>
 | 
			
		||||
						<block wx:else>
 | 
			
		||||
							<view wx:if="{{statusTag === 'before'}}" class="status-tag {{statusTag}}">
 | 
			
		||||
								未开始
 | 
			
		||||
							</view>
 | 
			
		||||
							<text class="count-down-label">距结束仅剩</text>
 | 
			
		||||
							<count-down
 | 
			
		||||
							  class="{{cdClass}}"
 | 
			
		||||
							  wr-class="wr-cd-class"
 | 
			
		||||
							  wx:if="{{time > 0}}"
 | 
			
		||||
							  time="{{time}}"
 | 
			
		||||
							  format="DD天 HH:mm:ss"
 | 
			
		||||
							  bind:finish="countDownFinishHandle"
 | 
			
		||||
							/>
 | 
			
		||||
						</block>
 | 
			
		||||
						<view class="detail-entry" bind:tap="bannerClickHandle">
 | 
			
		||||
							<text class="detail-entry-label">规则详情</text>
 | 
			
		||||
							<t-icon name="chevron-right" size="34rpx" style="color: #999" />
 | 
			
		||||
						</view>
 | 
			
		||||
					</view>
 | 
			
		||||
				</block>
 | 
			
		||||
			</view>
 | 
			
		||||
		</view>
 | 
			
		||||
	</view>
 | 
			
		||||
	<view wx:if="{{list && list.length>0}}" class="promotion-goods-list">
 | 
			
		||||
		<goods-list
 | 
			
		||||
		  wr-class="goods-list-container"
 | 
			
		||||
		  goodsList="{{list}}"
 | 
			
		||||
		  bind:click="goodClickHandle"
 | 
			
		||||
		  bind:addcart="cardClickHandle"
 | 
			
		||||
		/>
 | 
			
		||||
	</view>
 | 
			
		||||
	<t-toast id="t-toast" />
 | 
			
		||||
</view>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										111
									
								
								mini-program/pages/promotion-detail/index.wxss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								mini-program/pages/promotion-detail/index.wxss
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,111 @@
 | 
			
		||||
.promotion-detail-container .wrap {
 | 
			
		||||
  display: block;
 | 
			
		||||
  padding: 0 24rpx;
 | 
			
		||||
  background: linear-gradient(#fff, #f5f5f5);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.promotion-detail-container .t-class-promotion-head {
 | 
			
		||||
  width: 702rpx;
 | 
			
		||||
  height: 160rpx;
 | 
			
		||||
  border-radius: 8rpx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.promotion-detail-container .wrap .count-down-wrap {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  flex-direction: row;
 | 
			
		||||
  justify-content: flex-start;
 | 
			
		||||
  align-items: baseline;
 | 
			
		||||
  line-height: 34rpx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.promotion-detail-container .wrap .count-down-wrap.in-banner-count-down-wrap {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  bottom: 32rpx;
 | 
			
		||||
  left: 32rpx;
 | 
			
		||||
  right: 32rpx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.promotion-detail-container .wrap .count-down-wrap .status-tag {
 | 
			
		||||
  height: 32rpx;
 | 
			
		||||
  line-height: 32rpx;
 | 
			
		||||
  font-size: 20rpx;
 | 
			
		||||
  margin-right: 12rpx;
 | 
			
		||||
  border-radius: 16rpx;
 | 
			
		||||
  padding: 0 12rpx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.promotion-detail-container .wrap .count-down-wrap .status-tag.before {
 | 
			
		||||
  color: #fff;
 | 
			
		||||
  background-color: #ff9853;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.promotion-detail-container .wrap .count-down-wrap .status-tag.finish {
 | 
			
		||||
  color: #fff;
 | 
			
		||||
  background-color: #ccc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.promotion-detail-container .wrap .count-down-wrap .count-down-label {
 | 
			
		||||
  color: #666;
 | 
			
		||||
  font-size: 24rpx;
 | 
			
		||||
  margin-right: 0.5em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.promotion-detail-container .wrap .count-down-wrap .detail-entry {
 | 
			
		||||
  margin-left: auto;
 | 
			
		||||
  height: 40rpx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.promotion-detail-container .wrap .count-down-wrap .detail-entry-label {
 | 
			
		||||
  color: #fff;
 | 
			
		||||
  font-size: 24rpx;
 | 
			
		||||
  margin-right: 12rpx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.promotion-detail-container
 | 
			
		||||
  .wrap
 | 
			
		||||
  .count-down-wrap.after-banner-count-down-wrap {
 | 
			
		||||
  padding: 10rpx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.promotion-detail-container
 | 
			
		||||
  .wrap
 | 
			
		||||
  .count-down-wrap.after-banner-count-down-wrap
 | 
			
		||||
  .detail-entry {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.promotion-detail-container
 | 
			
		||||
  .wrap
 | 
			
		||||
  .count-down-wrap.after-banner-count-down-wrap
 | 
			
		||||
  .detail-entry-label {
 | 
			
		||||
  color: #999;
 | 
			
		||||
  margin-right: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.promotion-detail-container .wrap .gl-empty-wrap {
 | 
			
		||||
  margin-top: 180rpx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.promotion-detail-container .wrap .gl-empty-img {
 | 
			
		||||
  width: 240rpx;
 | 
			
		||||
  height: 240rpx;
 | 
			
		||||
  display: block;
 | 
			
		||||
  margin: 0 auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.promotion-detail-container .wrap .gl-empty-label {
 | 
			
		||||
  font-size: 28rpx;
 | 
			
		||||
  color: #999;
 | 
			
		||||
  margin-top: 40rpx;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.promotion-detail-container .goods-list-container {
 | 
			
		||||
  background: #f5f5f5 !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.promotion-detail-container .promotion-goods-list {
 | 
			
		||||
  padding: 20rpx 24rpx;
 | 
			
		||||
  background-color: #f5f5f5;
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user