index.vue 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <template>
  2. <common-dialog ref="dialog" title="活动规则" confirmText="确定" :showCancel="false" @confirm="onConfirm" width="640rpx">
  3. <view class="rule-content">
  4. <view class="rule-item">1.活动时间:{{ ruleData.startTime || '暂无' }}至{{ ruleData.endTime || '暂无' }}。</view>
  5. <view class="rule-item">2.助力降价机制:用户成功分享并邀请 1 位好友完成助力,即可享受对应图书的降价优惠,最高可0元购书!</view>
  6. <view class="rule-item">3.助力有效期:用户发起助力后,需在{{ ruleData.inviteExpireHour || 24 }}小时内完成好友助力,超时未完成则本次助力失效,可重新发起邀请,有效期以助力成功时间为准。</view>
  7. <view class="rule-item">4.助力上限说明:单用户单订单单本图书仅可降价 {{ ruleData.reduceTimesPerIsbn || 1 }} 次,达到次数上限后无法继续通过助力获得优惠;每个用户 ID 每日最多可参与助力 {{ ruleData.assistTimesEveryDay || 1 }} 次,同一好友仅可为同一用户的同一订单助力 1 次,重复助力无效。</view>
  8. <view class="rule-item">5.若用户存在恶意刷助力、虚假账号、作弊等违规行为,平台有权直接取消其活动资格、收回已获得的降价优惠,并限制其后续参与平台活动的权限。</view>
  9. <view class="rule-item">6.助力成功之后需在24小时内提交订单,否则降价失效。</view>
  10. </view>
  11. </common-dialog>
  12. </template>
  13. <script>
  14. import commonDialog from '@/components/common-dialog.vue'
  15. export default {
  16. components: {
  17. commonDialog
  18. },
  19. data() {
  20. return {
  21. ruleData: {}
  22. }
  23. },
  24. methods: {
  25. open() {
  26. this.fetchRuleData();
  27. this.$refs.dialog.openPopup();
  28. },
  29. fetchRuleData() {
  30. this.$u.api.getActivityReduceRuleAjax().then(res => {
  31. if (res.code === 200) {
  32. // 处理日期格式,只取年月日
  33. let data = res.data || {};
  34. if (data.startTime) {
  35. data.startTime = this.formatDate(data.startTime);
  36. }
  37. if (data.endTime) {
  38. data.endTime = this.formatDate(data.endTime);
  39. }
  40. this.ruleData = data;
  41. }
  42. })
  43. },
  44. formatDate(dateStr) {
  45. // 将类似 2025-03-25T00:00:00 转换为 2025年3月25日
  46. if (!dateStr) return '';
  47. let date = new Date(dateStr);
  48. if (isNaN(date.getTime())) {
  49. // 处理可能带有空格的格式 2025-03-25 00:00:00
  50. date = new Date(dateStr.replace(/-/g, '/'));
  51. }
  52. if (isNaN(date.getTime())) return dateStr;
  53. return `${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}日`;
  54. },
  55. onConfirm() {
  56. // 点击确定,弹窗自动关闭
  57. this.$emit('confirm');
  58. }
  59. }
  60. }
  61. </script>
  62. <style lang="scss" scoped>
  63. .rule-content {
  64. text-align: left;
  65. font-size: 26rpx;
  66. color: #333333;
  67. line-height: 44rpx;
  68. max-height: 60vh;
  69. overflow-y: auto;
  70. padding-bottom: 20rpx;
  71. .rule-item {
  72. margin-bottom: 20rpx;
  73. text-align: justify;
  74. }
  75. }
  76. </style>