ReportPost.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <template>
  2. <b-modal
  3. ref="modal"
  4. centered
  5. hide-header
  6. hide-footer
  7. scrollable
  8. body-class="p-md-5 user-select-none"
  9. >
  10. <div v-if="tabIndex === 0">
  11. <h2 class="text-center font-weight-bold">{{ $t('report.report') }}</h2>
  12. <p class="text-center">{{ $t('menu.confirmReportText') }}</p>
  13. <div v-if="status && status.hasOwnProperty('account')" class="card shadow-none rounded-lg border my-4">
  14. <div class="card-body">
  15. <div class="media">
  16. <img
  17. :src="status.account.avatar"
  18. class="mr-3 rounded"
  19. width="40"
  20. height="40"
  21. style="border-radius: 8px;"
  22. onerror="this.onerror=null;this.src='/storage/avatars/default.jpg?v=0';">
  23. <div class="media-body">
  24. <p class="h5 primary font-weight-bold mb-1">
  25. &commat;{{ status.account.acct }}
  26. </p>
  27. <div v-if="status.hasOwnProperty('pf_type') && status.pf_type == 'text'">
  28. <p v-if="status.content_text.length <= 140" class="mb-0">
  29. {{ status.content_text}}
  30. </p>
  31. <p v-else class="mb-0">
  32. <span v-if="showFull">
  33. {{ status.content_text}}
  34. <a class="font-weight-bold primary ml-1" href="#" @click.prevent="showFull = false">Show less</a>
  35. </span>
  36. <span v-else>
  37. {{ status.content_text.substr(0, 140) + ' ...' }}
  38. <a class="font-weight-bold primary ml-1" href="#" @click.prevent="showFull = true">Show full post</a>
  39. </span>
  40. </p>
  41. </div>
  42. <div v-else-if="status.hasOwnProperty('pf_type') && status.pf_type == 'photo'">
  43. <div class="w-100 rounded-lg d-flex justify-content-center mt-3" style="background: #000;max-height: 150px">
  44. <img :src="status.media_attachments[0].url" class="rounded-lg shadow" style="width: 100%;max-height: 150px;object-fit:contain;">
  45. </div>
  46. <p v-if="status.content_text" class="mt-3 mb-0">
  47. <span v-if="showFull">
  48. {{ status.content_text}}
  49. <a class="font-weight-bold primary ml-1" href="#" @click.prevent="showFull = false">Show less</a>
  50. </span>
  51. <span v-else>
  52. {{ status.content_text.substr(0, 80) + ' ...' }}
  53. <a class="font-weight-bold primary ml-1" href="#" @click.prevent="showFull = true">Show full post</a>
  54. </span>
  55. </p>
  56. </div>
  57. </div>
  58. </div>
  59. </div>
  60. </div>
  61. <p class="text-right mb-0 mb-md-n3">
  62. <button class="btn btn-light px-3 py-2 mr-3 font-weight-bold" @click="close">{{ $t('common.cancel')}}</button>
  63. <button class="btn btn-primary px-3 py-2 font-weight-bold" style="background-color: #3B82F6;" @click="tabIndex = 1">{{ $t('common.proceed') }}</button>
  64. </p>
  65. </div>
  66. <div v-else-if="tabIndex === 1">
  67. <h2 class="text-center font-weight-bold">{{ $t('report.report') }}</h2>
  68. <p class="text-center">
  69. {{ $t('report.selectReason') }}
  70. </p>
  71. <div class="mt-4">
  72. <!-- <button class="btn btn-light btn-block rounded-pill font-weight-bold" @click="handleReason('notinterested')">I'm not interested in it</button> -->
  73. <button class="btn btn-light btn-block rounded-pill font-weight-bold text-danger" @click="handleReason('spam')">{{ $t('menu.spam')}}</button>
  74. <button v-if="status.sensitive == false" class="btn btn-light btn-block rounded-pill font-weight-bold text-danger" @click="handleReason('sensitive')">Adult or {{ $t('menu.sensitive')}}</button>
  75. <button class="btn btn-light btn-block rounded-pill font-weight-bold text-danger" @click="handleReason('abusive')">{{ $t('menu.abusive')}}</button>
  76. <button class="btn btn-light btn-block rounded-pill font-weight-bold" @click="handleReason('underage')">{{ $t('menu.underageAccount')}}</button>
  77. <button class="btn btn-light btn-block rounded-pill font-weight-bold" @click="handleReason('copyright')">{{ $t('menu.copyrightInfringement')}}</button>
  78. <button class="btn btn-light btn-block rounded-pill font-weight-bold" @click="handleReason('impersonation')">{{ $t('menu.impersonation')}}</button>
  79. <!-- <button class="btn btn-light btn-block rounded-pill font-weight-bold" @click="handleReason('scam')">{{ $t('menu.scamOrFraud')}}</button> -->
  80. <button class="btn btn-light btn-block rounded-pill mt-md-5" @click="tabIndex = 0">Go back</button>
  81. </div>
  82. </div>
  83. <div v-else-if="tabIndex === 2">
  84. <div class="my-4 text-center">
  85. <b-spinner />
  86. <p class="small mb-0">{{ $t('report.sendingReport') }} ...</p>
  87. </div>
  88. </div>
  89. <div v-else-if="tabIndex === 3">
  90. <div class="my-4">
  91. <h2 class="text-center font-weight-bold mb-3">{{ $t('report.reported') }}</h2>
  92. <p class="text-center py-2">
  93. <span class="fa-stack fa-4x text-success">
  94. <i class="far fa-check fa-stack-1x"></i>
  95. <i class="fal fa-circle fa-stack-2x"></i>
  96. </span>
  97. </p>
  98. <p class="lead text-center">{{ $t('report.thanksMsg') }}</p>
  99. <hr>
  100. <p class="text-center">{{ $t('report.contactAdminMsg') }}, <a href="/site/contact" class="font-weight-bold primary">{{ $t('common.clickHere') }}</a>.</p>
  101. </div>
  102. <p class="text-center mb-0 mb-md-n3">
  103. <button class="btn btn-light btn-block rounded-pill px-3 py-2 mr-3 font-weight-bold" @click="close">{{ $t('common.close') }}</button>
  104. </p>
  105. </div>
  106. <div v-else-if="tabIndex === 5">
  107. <div class="my-4">
  108. <h2 class="text-center font-weight-bold mb-3">{{ $t('common.oops') }}</h2>
  109. <p class="text-center py-2">
  110. <span class="fa-stack fa-3x text-danger">
  111. <i class="far fa-times fa-stack-1x"></i>
  112. <i class="fal fa-circle fa-stack-2x"></i>
  113. </span>
  114. </p>
  115. <p class="lead text-center">{{ $t('common.errorMsg') }}</p>
  116. <hr>
  117. <p class="text-center">{{ $t('report.contactAdminMsg') }}, <a href="/site/contact" class="font-weight-bold primary">{{ $t('common.clickHere') }}</a>.</p>
  118. </div>
  119. <p class="text-center mb-0 mb-md-n3">
  120. <button class="btn btn-light btn-block rounded-pill px-3 py-2 mr-3 font-weight-bold" @click="close">{{ $t('common.close') }}</button>
  121. </p>
  122. </div>
  123. </b-modal>
  124. </template>
  125. <script type="text/javascript">
  126. export default {
  127. props: {
  128. status: {
  129. type: Object,
  130. default: {}
  131. }
  132. },
  133. data() {
  134. return {
  135. statusId: undefined,
  136. tabIndex: 0,
  137. showFull: false
  138. }
  139. },
  140. methods: {
  141. open() {
  142. this.$refs.modal.show();
  143. },
  144. close() {
  145. this.$refs.modal.hide();
  146. setTimeout(() => {
  147. this.tabIndex = 0;
  148. }, 1000);
  149. },
  150. handleReason(reason) {
  151. this.tabIndex = 2;
  152. axios.post('/i/report', {
  153. id: this.status.id,
  154. report: reason,
  155. type: 'post'
  156. }).then(res => {
  157. this.tabIndex = 3;
  158. }).catch(err => {
  159. this.tabIndex = 5;
  160. });
  161. }
  162. }
  163. }
  164. </script>