index.vue 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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>
  10. </common-dialog>
  11. </template>
  12. <script>
  13. import commonDialog from '@/components/common-dialog.vue'
  14. export default {
  15. components: {
  16. commonDialog
  17. },
  18. data() {
  19. return {
  20. ruleData: {}
  21. }
  22. },
  23. methods: {
  24. open() {
  25. this.fetchRuleData();
  26. this.$refs.dialog.openPopup();
  27. },
  28. fetchRuleData() {
  29. this.$u.api.getActivityReduceRuleAjax().then(res => {
  30. if (res.code === 200) {
  31. // 处理日期格式,只取年月日
  32. let data = res.data || {};
  33. if (data.startTime) {
  34. data.startTime = this.formatDate(data.startTime);
  35. }
  36. if (data.endTime) {
  37. data.endTime = this.formatDate(data.endTime);
  38. }
  39. this.ruleData = data;
  40. }
  41. })
  42. },
  43. formatDate(dateStr) {
  44. // 将类似 2025-03-25T00:00:00 转换为 2025年3月25日
  45. if (!dateStr) return '';
  46. let date = new Date(dateStr);
  47. if (isNaN(date.getTime())) {
  48. // 处理可能带有空格的格式 2025-03-25 00:00:00
  49. date = new Date(dateStr.replace(/-/g, '/'));
  50. }
  51. if (isNaN(date.getTime())) return dateStr;
  52. return `${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}日`;
  53. },
  54. onConfirm() {
  55. // 点击确定,弹窗自动关闭
  56. this.$emit('confirm');
  57. }
  58. }
  59. }
  60. </script>
  61. <style lang="scss" scoped>
  62. .rule-content {
  63. text-align: left;
  64. font-size: 26rpx;
  65. color: #333333;
  66. line-height: 44rpx;
  67. max-height: 60vh;
  68. overflow-y: auto;
  69. padding-bottom: 20rpx;
  70. .rule-item {
  71. margin-bottom: 20rpx;
  72. text-align: justify;
  73. }
  74. }
  75. </style>