message.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <template>
  2. <view class="msg-container">
  3. <u-navbar title="消息" :autoBack="true" :placeholder="true"></u-navbar>
  4. <view class="msg-list">
  5. <view class="msg-item" v-for="(item, idx) in msgList" :key="idx" @click="toNotification(item)">
  6. <view class="msg-header-row">
  7. <view class="msg-icon-container">
  8. <image :src="`/static/message/${categoryIcons[item.category] || 'system'}.png`" class="icon-img"></image>
  9. </view>
  10. <view class="title-with-dot">
  11. <text class="msg-title">{{ item.categoryName }}</text>
  12. <view v-if="item.status === '0'" class="msg-dot"></view>
  13. </view>
  14. <text class="msg-time">{{ item.createTimeDisplay }}</text>
  15. </view>
  16. <view class="msg-divider"></view>
  17. <text class="msg-desc">{{ item.content }}</text>
  18. </view>
  19. </view>
  20. <u-empty text="暂无消息" mode="list" v-if="!msgList.length"></u-empty>
  21. </view>
  22. </template>
  23. <script>
  24. export default {
  25. data() {
  26. return {
  27. msgList: [],
  28. categoryIcons: {
  29. '1': 'market',
  30. '2': 'order',
  31. '3': 'system'
  32. }
  33. }
  34. },
  35. async onShow() {
  36. this.getMsgList();
  37. },
  38. methods: {
  39. // 获取消息
  40. async getMsgList() {
  41. this.$http.get("/localUserNotice/localUserNotice/getListNew", {
  42. params: {
  43. userType: 1
  44. }
  45. }).then(res => {
  46. this.msgList = res.data.result || [];
  47. })
  48. },
  49. // 跳转到通知二级页
  50. toNotification(item) {
  51. let str = this.$u.queryParams(item);
  52. uni.navigateTo({
  53. url: `/pages/message/details?${str}`
  54. })
  55. }
  56. }
  57. }
  58. </script>
  59. <style lang="scss" scoped>
  60. .msg-list {
  61. padding: 25rpx;
  62. .msg-item {
  63. background: #fff;
  64. border-radius: 17rpx;
  65. padding: 20rpx 20rpx 16rpx 20rpx;
  66. margin-bottom: 25rpx;
  67. box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.03);
  68. .msg-header-row {
  69. display: flex;
  70. align-items: center;
  71. margin-bottom: 16rpx;
  72. .msg-icon-container {
  73. margin-right: 16rpx;
  74. display: flex;
  75. align-items: center;
  76. justify-content: center;
  77. .icon-img {
  78. width: 36rpx;
  79. height: 42rpx;
  80. }
  81. }
  82. .title-with-dot {
  83. flex: 1;
  84. display: flex;
  85. align-items: center;
  86. .msg-title {
  87. font-size: 28rpx;
  88. font-weight: 500;
  89. color: #333;
  90. }
  91. .msg-dot {
  92. width: 13rpx;
  93. height: 13rpx;
  94. background: #ff004e;
  95. border-radius: 50%;
  96. margin-left: 10rpx;
  97. }
  98. }
  99. .msg-time {
  100. font-size: 25rpx;
  101. color: #666666;
  102. margin-left: 16rpx;
  103. }
  104. }
  105. .msg-divider {
  106. width: 100%;
  107. height: 1rpx;
  108. background: #eeeeee;
  109. margin-bottom: 16rpx;
  110. }
  111. .msg-desc {
  112. font-size: 24rpx;
  113. color: #666;
  114. line-height: 1.5;
  115. }
  116. }
  117. }
  118. </style>