message.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <template>
  2. <div class="mobile-center">
  3. <div class="com-mobile-header mobile-center-header">
  4. <a @click="goLastPage"><i class="iconfont icon-fanhui"></i></a>
  5. <p>消息</p>
  6. <p class="en-name"><img :src="`/images/mobile/center/${user.data.enterprise.uu ? 'en' : 'self'}.png`" alt="">{{currentEnName}}</p>
  7. </div>
  8. <div class="mobile-content">
  9. <div v-if="messageList.content && messageList.content.length" class="message-list" v-bind:key="item.id" v-for="item in messageList.content">
  10. <div class="content">
  11. <div class="new-dot">
  12. <b v-if="item.isRead === 0"></b>
  13. <img src="/images/mobile/center/user/message.png" alt="">
  14. </div>
  15. <div class="message">
  16. <p>{{item.createTime | time}}</p>
  17. <a :href="item.type === 'MALL跳转卖家待报价页面' ? '/mobile/center/user/seek?seekType=done' : item.type === 'MALL公共询价' ? '/mobile/center/vendor/seek?seekType=wait' : item.type === '商城公共询价采纳结果' ? '/mobile/center/vendor/seek?seekType=done' : ''"
  18. v-if="item.type"
  19. :title="item.content" class="info" target="_blank">{{item.content}}</a>
  20. <a v-else :title="item.content" class="noLink info">{{item.content}}</a>
  21. </div>
  22. </div>
  23. </div>
  24. <empty-status v-if="!messageList.content.length" :showLink="true" :text="'抱歉,暂无消息'"></empty-status>
  25. </div>
  26. <pull-up :searchMore="fetching" :allPage="allPage" :page="page" @pullUpAction="onPullUpAction"></pull-up>
  27. </div>
  28. </template>
  29. <script>
  30. import { RemindBox, PullUp, EmptyStatus } from '~components/mobile/common'
  31. export default {
  32. middleware: 'authenticated',
  33. layout: 'mobileNoHeader',
  34. data () {
  35. return {
  36. count: 10,
  37. page: 1,
  38. isChange: false,
  39. msgList: []
  40. }
  41. },
  42. fetch ({ store }) {
  43. let user = store.state.option.user.data
  44. return Promise.all([
  45. // 获取消息列表
  46. store.dispatch('messageShow/getAllMessage', { receiverUu: user.userUU, receiverEnuu: user.enterprise.uu, consumerApp: 'MALL', count: 10, page: 1, sorting: {'createTime': 'DESC'} })
  47. ])
  48. },
  49. computed: {
  50. user () {
  51. return this.$store.state.option.user
  52. },
  53. messageList () {
  54. return this.$store.state.messageShow.messageList.list.data
  55. },
  56. fetching () {
  57. return this.messageList.fetching
  58. },
  59. allPage () {
  60. return Math.floor(this.messageList.totalElements / this.messageList.size) + Math.floor(this.messageList.totalElements % this.messageList.size > 0 ? 1 : 0)
  61. }
  62. },
  63. components: {
  64. RemindBox,
  65. PullUp,
  66. EmptyStatus
  67. },
  68. watch: {
  69. 'messageList': {
  70. handler: function (val) {
  71. if (this.isChange) {
  72. this.msgList = val.content
  73. this.isChange = false
  74. } else {
  75. this.msgList = [...this.msgList, ...val.content]
  76. }
  77. },
  78. immediate: true
  79. }
  80. },
  81. methods: {
  82. reloadList: function () {
  83. this.$store.dispatch('messageShow/getAllMessage', { receiverUu: this.user.data.userUU, receiverEnuu: this.user.data.enterprise.uu, consumerApp: 'MALL', page: this.page, count: this.count, sorting: {'createTime': 'DESC'} })
  84. },
  85. onPullUpAction: function () {
  86. this.page++
  87. this.reloadList()
  88. }
  89. }
  90. }
  91. </script>
  92. <style lang="scss" scoped>
  93. .mobile-content {
  94. margin-top: .6rem !important;
  95. padding: .2rem;
  96. background: #f1f3f6;
  97. .com-none-state {
  98. padding-bottom: 100%;
  99. }
  100. .message-list {
  101. background: #fff;
  102. padding: 0 .15rem 0 .2rem;
  103. .content {
  104. padding: .14rem 0;
  105. overflow: hidden;
  106. border-bottom: 1px solid #d3d3d3;
  107. .new-dot {
  108. position: relative;
  109. b{
  110. position: absolute;
  111. left: .2rem;
  112. top: .25rem;
  113. width: .16rem;
  114. height: .16rem;
  115. border-radius: 50%;
  116. background: #fc0405;
  117. }
  118. }
  119. img{
  120. margin: .3rem 0 0 .12rem;
  121. float: left;
  122. width: .8rem;
  123. height: .8rem;
  124. }
  125. .message{
  126. margin-left: .24rem;
  127. float: left;
  128. width: 5.4rem;
  129. p{
  130. display: inherit;
  131. margin-bottom: .1rem;
  132. text-align: right;
  133. font-size: .24rem;
  134. color: #666;
  135. }
  136. a.info{
  137. font-size: .28rem;
  138. color: #333;
  139. }
  140. }
  141. }
  142. }
  143. }
  144. .message-list:last-child .content{
  145. border-bottom: none;
  146. }
  147. </style>