messageItem.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <template>
  2. <uni-swipe-action>
  3. <uni-swipe-action-item>
  4. <view class="message-item" @click="handleToDetail">
  5. <wk-avatar
  6. :name="itemData.realname"
  7. :avatar="itemData.img"
  8. :size="14"
  9. class="avatar" />
  10. <view class="wrapper">
  11. <view class="cell">
  12. <view class="left info">
  13. {{ itemData.realname || '' }}{{ infoTxt }}
  14. </view>
  15. <view v-if="itemData.isRead === 0" class="right dot" />
  16. </view>
  17. <view class="cell">
  18. <view class="left centent">
  19. {{ itemData.title }}
  20. </view>
  21. </view>
  22. <view class="cell">
  23. <view class="left info">
  24. {{ itemData.createTime }}
  25. </view>
  26. </view>
  27. </view>
  28. </view>
  29. <view
  30. slot="right"
  31. class="control-box"
  32. @click="handleDelete">
  33. 删除
  34. </view>
  35. </uni-swipe-action-item>
  36. </uni-swipe-action>
  37. </template>
  38. <script>
  39. import { ReadMessage } from 'API/admin'
  40. export default {
  41. name: 'MessageItem',
  42. props: {
  43. itemData: {
  44. type: Object,
  45. required: true
  46. }
  47. },
  48. data() {
  49. return {}
  50. },
  51. computed: {
  52. infoTxt() {
  53. return {
  54. 1: '将任务分配给您',
  55. 2: '邀请您参与任务',
  56. 3: '将任务标记结束',
  57. 4: '回复了您的日志',
  58. 5: '将日志发送给您',
  59. 6: '拒绝您的审批',
  60. 7: '已经审核通过您的审批',
  61. 8: '您有一个新公告',
  62. 9: '邀请您参与日程',
  63. 10: '拒绝您的合同审批',
  64. 11: '已经审核通过您的合同',
  65. 12: '拒绝您的回款审批',
  66. 13: '已经审核通过您的回款',
  67. 14: '导入客户数据',
  68. 15: '取消导入客户数据',
  69. 16: '导入联系人数据',
  70. 17: '取消导入联系人数据',
  71. 18: '导入线索数据',
  72. 19: '取消导入线索数据',
  73. 20: '导入产品数据',
  74. 21: '取消导入产品数据',
  75. 22: '将您添加为商机的成员',
  76. 23: '将您添加为客户的成员',
  77. 24: '将您添加为合同的成员',
  78. 25: '提交了审批',
  79. 26: '提交了合同审批',
  80. 27: '提交了回款审批',
  81. 28: '退出了您商机的团队',
  82. 29: '退出了您客户的团队',
  83. 30: '退出了您合同的团队',
  84. 31: '将您移出了商机的团队',
  85. 32: '将您移出了客户的团队',
  86. 33: '将您移出了合同的团队',
  87. 34: '回复了您评论的日志',
  88. 35: '拒绝了您的审批',
  89. 36: '已经审核通过您的发票',
  90. 37: '提交了发票审批',
  91. 41: '将文档分享给您',
  92. 77: '点赞了你的日志'
  93. }[this.itemData.type] || ''
  94. }
  95. },
  96. methods: {
  97. async handleToDetail() {
  98. console.log(this.itemData)
  99. try {
  100. await this.readMessage()
  101. this.$emit('read')
  102. } catch {
  103. return
  104. }
  105. const type = this.itemData.type
  106. const id = this.itemData.typeId
  107. let url = ''
  108. let query = { id: id }
  109. if ([1, 2, 3].includes(type)) {
  110. url = '/pages_task/detail'
  111. } else if ([4, 5, 34, 77].includes(type)) {
  112. url = '/pages_log/detail'
  113. } else if ([6, 7, 25, 35].includes(type)) {
  114. url = '/pages_examine/detail'
  115. } else if ([8].includes(type)) {
  116. url = '/pages_oa/notice/detail'
  117. } else if ([10, 11, 26].includes(type)) {
  118. url = '/pages_crm/contract/detail'
  119. } else if ([12, 13, 27].includes(type)) {
  120. url = '/pages_crm/receivables/detail'
  121. } else if ([22, 28, 31].includes(type)) {
  122. url = '/pages_crm/business/detail'
  123. } else if ([23, 29, 32].includes(type)) {
  124. url = '/pages_crm/customer/detail'
  125. } else if ([24, 30, 33].includes(type)) {
  126. url = '/pages_crm/contract/detail'
  127. }
  128. if (url) {
  129. this.$Router.navigateTo({
  130. url,
  131. query
  132. })
  133. }
  134. },
  135. readMessage() {
  136. return new Promise((resolve, reject) => {
  137. ReadMessage({
  138. messageId: this.itemData.messageId
  139. }).then(() => {
  140. resolve(true)
  141. }).catch(() => {
  142. reject(false)
  143. })
  144. })
  145. },
  146. handleDelete(evt) {
  147. this.$emit('delete', evt)
  148. }
  149. }
  150. }
  151. </script>
  152. <style scoped lang="scss">
  153. .message-item {
  154. width: 100%;
  155. padding: 15rpx 32rpx;
  156. background-color: white;
  157. border-bottom: 1rpx solid $border-color;
  158. @include left;
  159. .avatar {
  160. width: 80rpx;
  161. height: 80rpx;
  162. margin-right: 20rpx;
  163. }
  164. .wrapper {
  165. flex: 1;
  166. overflow: hidden;
  167. .cell {
  168. width: 100%;
  169. font-size: $wk-font-sm;
  170. @include left;
  171. .left {
  172. flex: 1;
  173. @include ellipsis;
  174. }
  175. .info {
  176. color: $light;
  177. }
  178. .dot {
  179. width: 15rpx;
  180. height: 15rpx;
  181. background-color: red;
  182. border-radius: 50%;
  183. margin-left: 15rpx;
  184. }
  185. .centent {
  186. width: 100%;
  187. font-size: $wk-font-base;
  188. color: $dark;
  189. margin: 5px 0;
  190. @include ellipsis;
  191. }
  192. }
  193. }
  194. }
  195. .control-box {
  196. width: 150rpx;
  197. color: white;
  198. font-size: $wk-font-base;
  199. background-color: #E60000;
  200. @include center;
  201. }
  202. </style>