鸿宇研学生前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

138 lines
2.8 KiB

  1. <template>
  2. <view class="page__view">
  3. <navbar title="我的优惠券" leftClick @leftClick="$utils.navigateBack" color="#191919" bgColor="#FFFFFF" />
  4. <view class="list">
  5. <uv-radio-group
  6. v-model="selectedId"
  7. placement="column"
  8. shape="circle"
  9. size="36rpx"
  10. iconSize="36rpx"
  11. activeColor="#00A9FF"
  12. @change="onRadioChange"
  13. >
  14. <view class="list-item" v-for="item in list" :key="item.id">
  15. <couponCard
  16. :data="item"
  17. @select="onSelect"
  18. ></couponCard>
  19. </view>
  20. </uv-radio-group>
  21. </view>
  22. </view>
  23. </template>
  24. <script>
  25. import { mapState } from 'vuex'
  26. import mixinsList from '@/mixins/list.js'
  27. import couponCard from './couponCard.vue'
  28. export default {
  29. mixins: [mixinsList],
  30. components: {
  31. couponCard,
  32. },
  33. data() {
  34. return {
  35. // todo: check key
  36. mixinsListApi: '',
  37. queryParams: {
  38. pageNo: 1,
  39. pageSize: 10,
  40. },
  41. selectedId: null,
  42. }
  43. },
  44. computed: {
  45. ...mapState(['couponInfo']),
  46. },
  47. onLoad(arg) {
  48. if (this.couponInfo?.id) {
  49. this.selectedId = this.couponInfo.id
  50. }
  51. this.getData()
  52. },
  53. onUnload() {
  54. if (!this.selectedId) {
  55. this.$store.commit('setCouponInfo', null)
  56. return
  57. }
  58. const target = this.list.find(item => item.id === this.selectedId)
  59. this.$store.commit('setCouponInfo', target)
  60. },
  61. methods: {
  62. // todo: delete
  63. getData() {
  64. this.list = [
  65. {
  66. id: '001',
  67. label: '专属福利】20元红包',
  68. price: 20,
  69. validTime: '2026-04-28',
  70. },
  71. {
  72. id: '002',
  73. label: '专属福利】400元红包',
  74. price: 400,
  75. validTime: '2026-04-28',
  76. },
  77. {
  78. id: '003',
  79. label: '专属福利】400元红包',
  80. price: 400,
  81. validTime: '2026-04-28',
  82. },
  83. {
  84. id: '004',
  85. label: '专属福利】400元红包',
  86. price: 400,
  87. validTime: '2026-04-28',
  88. },
  89. {
  90. id: '005',
  91. label: '专属福利】400元红包',
  92. price: 400,
  93. validTime: '2026-04-28',
  94. },
  95. ]
  96. },
  97. onSelect(id) {
  98. console.log('onSelect', id)
  99. this.selectedId = id
  100. },
  101. onRadioChange(e) {
  102. console.log('onRadioChange', e)
  103. },
  104. },
  105. }
  106. </script>
  107. <style scoped lang="scss">
  108. .page__view {
  109. width: 100vw;
  110. min-height: 100vh;
  111. background-color: $uni-bg-color;
  112. position: relative;
  113. }
  114. .list {
  115. padding: 32rpx 40rpx;
  116. &-item {
  117. & + & {
  118. margin-top: 24rpx;
  119. }
  120. }
  121. }
  122. </style>