point.vue 4.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <template>
  2. <div class="w-full min-h-[70vh] bg-page pt-6">
  3. <div class="main-container flex justify-between" >
  4. <sidebar></sidebar>
  5. <div class="ml-[20px] px-[20px] py-[30px] flex-1 bg-[#fff]" v-loading="pointTableData.loading">
  6. <div class="text-[18px] text-[#333] mb-[30px]">{{t('myPoint')}}</div>
  7. <div class="flex justify-center mb-[40px]">
  8. <div class="mr-[160px] text-center">
  9. <div class="text-[32px] text-primary font-600 mb-[10px]">{{ pointInfo.point||0 }}</div>
  10. <div class="text-[#999] text-[14px]">当前积分</div>
  11. </div>
  12. <div class="mr-[160px] text-center">
  13. <div class="text-[32px] text-[#333] font-600 mb-[10px]">{{ pointInfo.point_get||0 }}</div>
  14. <div class="text-[#999] text-[14px]">累计积分</div>
  15. </div>
  16. <div class="mr-[160px] text-center">
  17. <div class="text-[32px] text-[#333] font-600 mb-[10px]">{{ pointInfo.use||0 }}</div>
  18. <div class="text-[#999] text-[14px]">累计消费</div>
  19. </div>
  20. <div class="text-center">
  21. <div class="text-[32px] text-[#333] font-600 mb-[10px]">{{ pointInfo.point||0 }}</div>
  22. <div class="text-[#999] text-[14px]">可用积分</div>
  23. </div>
  24. </div>
  25. <div v-if="pointTableData.data.length && !pointTableData.loading">
  26. <div class="pt-[20px] px-[20px] rounded-[12px] min-h-[70%] mt-[30px] bg-[#fafafa]">
  27. <div>
  28. <template v-for="(item,index) in pointTableData.data" :key="index">
  29. <div class="flex items-center justify-between mb-[20px] border-b-[1px] border-dashed border-[#eee]" v-for="(subItem,subIndex) in item.month_data" :key="subIndex">
  30. <div>
  31. <div class="font-[16px] mb-[14px] text-[#333]">{{ subItem.from_type_name }}</div>
  32. <div class="text-[14px] text-[#999] mb-[20px]">{{ subItem.create_time }}</div>
  33. </div>
  34. <div class="mb-[14px] text-[18px] price-font" :class="{'text-[#EF000C]' : subItem.account_data > 0 > 0, 'text-[#03B521]':subItem.account_data <= 0}">{{ subItem.account_data > 0 ? '+' + subItem.account_data : subItem.account_data }}</div>
  35. </div>
  36. </template>
  37. </div>
  38. </div>
  39. <div class="mt-[16px] flex justify-end">
  40. <el-pagination v-model:current-page="pointTableData.page" v-model:page-size="pointTableData.limit" layout="prev, pager, next" background hide-on-single-page :total="pointTableData.total" @size-change="loadPointList()" @current-change="loadPointList" />
  41. </div>
  42. </div>
  43. <div v-if="!pointTableData.data.length && !pointTableData.loading">
  44. <el-empty description="暂无数据" :image-size="200" :image="img('static/resource/images/system/empty.png')"/>
  45. </div>
  46. </div>
  47. </div>
  48. </div>
  49. </template>
  50. <script lang="ts" setup>
  51. import { reactive, ref } from 'vue'
  52. import { getPointList, getMemberAccountPointcount } from '@/app/api/member'
  53. //个人积分信息
  54. const pointInfo = ref({});
  55. const getMemberAccountPointcountFn = () =>{
  56. getMemberAccountPointcount().then(res =>{
  57. pointInfo.value = res.data
  58. })
  59. }
  60. getMemberAccountPointcountFn()
  61. // 获取会员列表
  62. const pointTableData = reactive({
  63. page: 1,
  64. limit: 10,
  65. total: 0,
  66. loading: true,
  67. data: []
  68. })
  69. const loadPointList = (page: number = 1) => {
  70. pointTableData.loading = true
  71. pointTableData.page = page
  72. getPointList({
  73. page: pointTableData.page,
  74. limit: pointTableData.limit,
  75. }).then(res => {
  76. pointTableData.loading = false
  77. pointTableData.data = res.data.data
  78. pointTableData.total = res.data.total
  79. }).catch(() => {
  80. pointTableData.loading = false
  81. })
  82. }
  83. loadPointList()
  84. </script>
  85. <style lang="scss" scoped>
  86. .box-card{
  87. border: none !important;
  88. }
  89. .text-color{
  90. color: var(--jjext-color-brand);
  91. }
  92. </style>