Messages.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /*
  2. * @Author: fish119
  3. * @Date: 2017-05-20 13:20:45
  4. * @Last Modified by: fish119
  5. * @Last Modified time: 2017-05-22 16:30:29
  6. */
  7. <template>
  8. <div class="content">
  9. <mu-tabs class="tabs box-shadow" :value="activeTab" @change="handleTabChange">
  10. <mu-tab value="unread" title="未读消息" />
  11. <mu-tab value="readed" title="已读消息" />
  12. </mu-tabs>
  13. <div class="tab-content" style=" position: relative;">
  14. <!-- 未读消息列表 -->
  15. <ul v-if="accesstoken" class="lists" v-show="activeTab === 'unread'">
  16. <router-link :to="{path:'/content',query:{id:item.topic.id}}" tag="li" class="list" v-for="item in unread_messages" :key="item.id">
  17. <div class="user">
  18. <img :src="item.author.avatar_url" alt="user">
  19. <span>{{item.author.loginname}}</span>
  20. </div>
  21. <div class="message_content">
  22. <h2 v-html="markdownChange(item.reply.content)"></h2>
  23. <p>来自:《{{item.topic.title}}》</p>
  24. </div>
  25. <div class="msg_timer">
  26. <span>{{item.reply.create_at | time_ago}}</span>
  27. </div>
  28. </router-link>
  29. <li v-if="!unread_messages.length">暂无消息</li>
  30. </ul>
  31. <!-- 已读消息列表 -->
  32. <ul v-if="accesstoken" class="lists" v-show="activeTab === 'readed'">
  33. <router-link :to="{path:'/content',query:{id:item.topic.id}}" tag="li" class="list" v-for="item in readed_messages" :key="item.id">
  34. <div class="user">
  35. <img :src="item.author.avatar_url" alt="user">
  36. <span>{{item.author.loginname}}</span>
  37. </div>
  38. <div class="message_content">
  39. <h2 v-if="item.reply.content" v-html="markdownChange(item.reply.content)"></h2>
  40. <h2 v-if="!item.reply.content">此内容已被作者删除</h2>
  41. <p>来自:《{{item.topic.title}}》</p>
  42. </div>
  43. <div v-if="item.reply.content" class="timer">
  44. <span>{{item.reply.create_at | time_ago}}</span>
  45. </div>
  46. </router-link>
  47. <li v-if="!readed_messages.length">暂无消息</li>
  48. </ul>
  49. </div>
  50. </div>
  51. </template>
  52. <script>
  53. import marked from 'marked'
  54. export default {
  55. data() {
  56. return {
  57. activeTab: 'unread',
  58. accesstoken: '',
  59. count: null,
  60. unread_messages: [],
  61. readed_messages: []
  62. }
  63. },
  64. methods: {
  65. handleTabChange(val) {
  66. this.activeTab = val;
  67. },
  68. getMessages() {
  69. let self = this;
  70. let url = this.$store.state.svrUrl + 'messages?accesstoken=' + this.accesstoken;
  71. this.axios.get(url).then(function (response) {
  72. self.unread_messages = response.data.data.hasnot_read_messages;
  73. self.readed_messages = response.data.data.has_read_messages;
  74. }).catch(function (err) {
  75. console.log(err)
  76. });
  77. },
  78. markdownChange(val) {
  79. return marked(val);
  80. }
  81. },
  82. created() {
  83. this.$store.dispatch('changeTabValue', '消息');
  84. this.accesstoken = localStorage.getItem("accesstoken");
  85. if (this.accesstoken) {
  86. this.getMessages();
  87. }
  88. }
  89. }
  90. </script>
  91. <style>
  92. .tab-content {
  93. padding-top: 48px;
  94. }
  95. .title {
  96. text-align: center;
  97. height: 5rem;
  98. }
  99. .count {
  100. position: absolute;
  101. left: 10%;
  102. top:20%;
  103. background-color: #ff5252;
  104. width: 2rem;
  105. height: 2rem;
  106. line-height: 2rem;
  107. text-align: center;
  108. border-radius: 50%;
  109. }
  110. .lists {
  111. padding: 1rem;
  112. overflow-y: auto;
  113. }
  114. .list {
  115. justify-content: space-between;
  116. background-color: #f8f8f8;
  117. padding: 1rem;
  118. margin-bottom: 1rem;
  119. }
  120. .user {
  121. display: flex;
  122. flex-direction: column;
  123. align-items: center;
  124. width: 6rem;
  125. }
  126. .user>img {
  127. height: 4rem;
  128. width: 4rem;
  129. border-radius: 50%;
  130. }
  131. .user>span {
  132. text-align: center;
  133. max-width: 100%;
  134. word-wrap: break-word;
  135. word-break: normal;
  136. }
  137. .message_content {
  138. flex: 1;
  139. display: flex;
  140. flex-direction: column;
  141. justify-content: space-around;
  142. }
  143. .message_content>h2 {
  144. font-weight: 700;
  145. font-size: 16px;
  146. }
  147. .message_content>p {
  148. color: #999;
  149. font-size: 12px;
  150. }
  151. .msg_timer {
  152. margin-left: 1rem;
  153. width: 5rem;
  154. display: flex;
  155. align-items: center;
  156. justify-content: flex-end;
  157. }
  158. .tips {
  159. padding: 1rem;
  160. }
  161. </style>