ComentItem.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <template>
  2. <view
  3. class="coment_item"
  4. @longpress.stop="longpressHandler"
  5. @click.stop="$emit('startComent')"
  6. >
  7. <text @click.stop="toUser">{{ comment.nickname }}</text>
  8. <text v-if="comment.replyUserID">回复</text>
  9. <text v-if="comment.replyUserID">{{ comment.replyNickname }}</text>
  10. <text style="word-break: break-all;">{{ `:${comment.content}` }}</text>
  11. <u-overlay
  12. :show="moreMenuVisible"
  13. @click="moreMenuVisible = false"
  14. opacity="0"
  15. >
  16. <view
  17. :style="{ top: popMenuTop }"
  18. class="more_menu"
  19. @click="$emit('deleteComent', comment.commentID)"
  20. >
  21. <text>删除</text>
  22. </view>
  23. </u-overlay>
  24. </view>
  25. </template>
  26. <script>
  27. import MyAvatar from "../../../../components/MyAvatar/index.vue";
  28. import MediaItem from "./MediaItem.vue";
  29. export default {
  30. components: {
  31. MyAvatar,
  32. MediaItem,
  33. },
  34. props: {
  35. comment: Object,
  36. momentsUserID: String,
  37. },
  38. data() {
  39. return {
  40. moreMenuVisible: false,
  41. popMenuTop: "",
  42. };
  43. },
  44. mounted() {
  45. // console.log(this.comment);
  46. },
  47. methods: {
  48. async longpressHandler() {
  49. if (
  50. this.comment.userID === this.$store.getters.storeCurrentUserID ||
  51. this.momentsUserID === this.$store.getters.storeCurrentUserID
  52. ) {
  53. const { top } = await this.getEl(".coment_item");
  54. this.popMenuTop = `${top - 12}px`;
  55. this.moreMenuVisible = true;
  56. }
  57. },
  58. getEl(el) {
  59. return new Promise((resolve) => {
  60. const query = uni.createSelectorQuery().in(this);
  61. query
  62. .select(el)
  63. .boundingClientRect((data) => {
  64. resolve(data);
  65. })
  66. .exec();
  67. });
  68. },
  69. toUser() {
  70. console.log("sssss");
  71. },
  72. },
  73. };
  74. </script>
  75. <style lang="scss" scoped>
  76. .coment_item {
  77. padding: 10rpx 16rpx;
  78. border-radius: 8rpx;
  79. background-color: #f6f6f6;
  80. text:nth-child(odd) {
  81. color: #6085b1;
  82. }
  83. text:nth-child(2) {
  84. padding: 0 8rpx;
  85. }
  86. .more_menu {
  87. position: absolute;
  88. z-index: 999;
  89. width: max-content;
  90. border-radius: 6rpx;
  91. background-color: #5d5e61;
  92. box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.3);
  93. padding: 8rpx 32rpx;
  94. right: 50%;
  95. transform: translate(50%, -100%);
  96. text {
  97. color: #fff;
  98. }
  99. }
  100. &:active {
  101. background-color: #ededed;
  102. }
  103. }
  104. </style>