message-operate.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <template>
  2. <view class="dialog-container">
  3. <view class="item-box" v-if="message.flow === 'out' && message.status==='success'" @click="handleMseeage('revoke')">
  4. <image class="item-icon" src="../../../../assets/icon/revoked.svg"></image>
  5. <view>撤回</view>
  6. </view>
  7. <view class="item-box" v-if="message.status==='success'" @click="handleMseeage('delete')">
  8. <image class="item-icon" src="../../../../assets/icon/delete.svg"/>
  9. <view>删除</view>
  10. </view>
  11. <!-- <view class="item-box" v-if="message.status==='success'" @click="handleMseeage('forward')">
  12. <img class="item-icon" src="/pages/TUIKit/assets/icon/forword.svg">
  13. <view>转发</view>
  14. </view> -->
  15. <view class="item-box" v-if="message.flow === 'out' && message.status==='fail'" @click="handleMseeage('resend')">
  16. <image class="item-icon" src="../../../../assets/icon/forword.svg"/>
  17. <view>重发</view>
  18. </view>
  19. <!-- <view v-if="message.type === types.MSG_FILE || item.type === types.MSG_VIDEO || item.type === types.MSG_IMAGE"
  20. @click="openMessage(item)">打开</view> -->
  21. </view>
  22. </template>
  23. <script lang="ts">
  24. import { defineComponent, watchEffect, reactive, toRefs } from 'vue';
  25. const MessageOperate = defineComponent({
  26. props: {
  27. data: {
  28. type: Object,
  29. default: () => {
  30. return {};
  31. }
  32. },
  33. },
  34. setup(props:any, ctx:any) {
  35. const TUIServer: any = uni.$TUIKit.TUIChatServer;
  36. const data = reactive({
  37. message: {},
  38. });
  39. watchEffect(()=>{
  40. data.message = props.data;
  41. });
  42. // 处理消息
  43. const handleMseeage = async (type: string) => {
  44. switch (type) {
  45. case 'revoke':
  46. await TUIServer.revokeMessage(data.message).catch((error) => {
  47. if (error.code = 20016)
  48. uni.showToast({
  49. title: '消息超过了 2 分钟',
  50. icon: 'error'
  51. })
  52. })
  53. data.dialogID = '';
  54. break;
  55. case 'delete':
  56. await TUIServer.deleteMessage([data.message]);
  57. data.dialogID = '';
  58. break;
  59. case 'resend':
  60. await TUIServer.resendMessage(data.message);
  61. data.dialogID = '';
  62. break;
  63. }
  64. };
  65. return {
  66. ...toRefs(data),
  67. handleMseeage,
  68. };
  69. }
  70. });
  71. export default MessageOperate;
  72. </script>
  73. <style lang="scss" scoped>
  74. .dialog-container {
  75. display: flex;
  76. justify-content: space-around;
  77. padding: 10px;
  78. }
  79. .item-box {
  80. display: inline-flex;
  81. font-size: 12px;
  82. flex-direction: column;
  83. line-height: 16px;
  84. width: 40px;
  85. height: 28px;
  86. font-family: PingFangSC-Regular;
  87. font-weight: 400;
  88. color: #4F4F4F;
  89. letter-spacing: 0;
  90. }
  91. .item-icon {
  92. flex-shrink: 0;
  93. display: inline-block;
  94. width: 22px;
  95. height: 22px;
  96. margin-bottom: 5px;
  97. }
  98. </style>