points-mall.wxml 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <view class="points-mall-page">
  2. <!-- 头部导航 -->
  3. <view class="header">
  4. <view class="nav-bar">
  5. <button class="back-btn" bindtap="goBack">
  6. ← 返回
  7. </button>
  8. <view class="page-title">积分商城</view>
  9. <view class="placeholder"></view>
  10. </view>
  11. </view>
  12. <!-- 积分信息卡片 -->
  13. <view class="points-info-card">
  14. <view class="points-header">
  15. <view class="points-title">我的积分</view>
  16. <button class="history-btn" bindtap="viewPointsHistory">明细</button>
  17. </view>
  18. <view class="points-value">{{memberInfo.points}}</view>
  19. <view class="points-desc">积分一年有效,消费1元得1积分</view>
  20. </view>
  21. <!-- 我的优惠券 -->
  22. <view class="my-coupons-section">
  23. <view class="section-header">
  24. <view class="section-title">我的优惠券</view>
  25. <button class="view-all-btn" bindtap="viewMyCoupons">查看全部</button>
  26. </view>
  27. <scroll-view scroll-x="true" class="coupons-scroll">
  28. <view class="coupons-container">
  29. <block wx:for="{{coupons}}" wx:key="id">
  30. <view class="coupon-item">
  31. <view class="coupon-value">¥{{item.value}}</view>
  32. <view class="coupon-name">{{item.name}}</view>
  33. <view class="coupon-expire">{{item.expireDate.split('T')[0]}}到期</view>
  34. </view>
  35. </block>
  36. <view wx:if="{{coupons.length === 0}}" class="no-coupons">
  37. <view class="no-coupons-text">暂无可用优惠券</view>
  38. </view>
  39. </view>
  40. </scroll-view>
  41. </view>
  42. <!-- 积分商城 -->
  43. <view class="points-mall-section">
  44. <view class="section-header">
  45. <view class="section-title">积分商城</view>
  46. </view>
  47. <view class="products-grid">
  48. <block wx:for="{{pointsProducts}}" wx:key="id">
  49. <view class="product-card" bindtap="selectProduct" data-id="{{item.id}}">
  50. <view class="product-icon">{{item.icon}}</view>
  51. <view class="product-info">
  52. <view class="product-name">{{item.name}}</view>
  53. <view class="product-desc">{{item.description}}</view>
  54. <view class="product-points">
  55. <text class="points-number">{{item.points}}</text>
  56. <text class="points-unit">积分</text>
  57. </view>
  58. </view>
  59. <view class="exchange-btn {{memberInfo.points >= item.points ? 'can-exchange' : 'cannot-exchange'}}">
  60. {{memberInfo.points >= item.points ? '立即兑换' : '积分不足'}}
  61. </view>
  62. </view>
  63. </block>
  64. </view>
  65. </view>
  66. </view>
  67. <!-- 兑换确认弹窗 -->
  68. <view wx:if="{{showExchangeModal}}" class="modal-overlay" bindtap="closeExchangeModal">
  69. <view class="modal-content" catchtap="">
  70. <view class="modal-header">
  71. <view class="modal-title">确认兑换</view>
  72. <button class="modal-close" bindtap="closeExchangeModal">×</button>
  73. </view>
  74. <view class="modal-body">
  75. <view class="exchange-product">
  76. <view class="product-icon-large">{{selectedProduct.icon}}</view>
  77. <view class="product-details">
  78. <view class="product-name">{{selectedProduct.name}}</view>
  79. <view class="product-value">价值¥{{selectedProduct.value}}</view>
  80. <view class="product-points">需要{{selectedProduct.points}}积分</view>
  81. <view class="product-validity">有效期{{selectedProduct.validDays}}天</view>
  82. </view>
  83. </view>
  84. <view class="points-status">
  85. <view class="current-points">当前积分:{{memberInfo.points}}</view>
  86. <view class="after-exchange">兑换后剩余:{{memberInfo.points - selectedProduct.points}}</view>
  87. </view>
  88. </view>
  89. <view class="modal-footer">
  90. <button class="cancel-btn" bindtap="closeExchangeModal">取消</button>
  91. <button class="confirm-btn" bindtap="confirmExchange"
  92. disabled="{{memberInfo.points < selectedProduct.points}}">
  93. 确认兑换
  94. </button>
  95. </view>
  96. </view>
  97. </view>