index.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <template>
  2. <n-drawer
  3. v-model:show="show"
  4. :width="340"
  5. placement="right"
  6. :trap-focus="false"
  7. :block-scroll="false"
  8. :show-mask="false"
  9. :mask-closable="false"
  10. to="#drawer-target"
  11. style="--n-body-padding: 0px"
  12. >
  13. <n-drawer-content title="留言列表">
  14. <n-list
  15. hoverable
  16. clickable
  17. style="--n-color-modal: none"
  18. :show-divider="false"
  19. v-if="messageList.length > 0"
  20. >
  21. <n-list-item
  22. v-for="(ms, index) in messageList"
  23. :key="index"
  24. style=""
  25. @click="handleMessageClick(ms)"
  26. >
  27. <n-flex justify="space-between">
  28. <div class="truncate inline-block" style="width: 260px">
  29. {{ ms && ms.content.content }}
  30. </div>
  31. <n-dropdown
  32. trigger="hover"
  33. :options="ms.status === 0 ? fullOptions : delOptions"
  34. @select="(key) => handleSelect(key, ms)"
  35. >
  36. <n-icon :size="20">
  37. <svg
  38. xmlns="http://www.w3.org/2000/svg"
  39. xmlns:xlink="http://www.w3.org/1999/xlink"
  40. viewBox="0 0 32 32"
  41. >
  42. <circle cx="8" cy="16" r="2" fill="currentColor"></circle>
  43. <circle cx="16" cy="16" r="2" fill="currentColor"></circle>
  44. <circle cx="24" cy="16" r="2" fill="currentColor"></circle>
  45. </svg>
  46. </n-icon>
  47. </n-dropdown>
  48. </n-flex>
  49. </n-list-item>
  50. </n-list>
  51. <div v-else class="mt-16">
  52. <n-empty description="暂没数据"></n-empty>
  53. </div>
  54. </n-drawer-content>
  55. </n-drawer>
  56. </template>
  57. <script setup lang="ts">
  58. import { computed, onBeforeMount, onMounted, ref } from 'vue'
  59. import { useMainStore } from '@/store'
  60. import {
  61. NList,
  62. NListItem,
  63. NDropdown,
  64. NEmpty,
  65. useDialog,
  66. useMessage
  67. } from 'naive-ui'
  68. import {
  69. fetchMessageList,
  70. auditMessage,
  71. delMessage
  72. } from '@/api/module/message'
  73. import type { MessageItem } from './type'
  74. import { sdk, sdk_mounted } from '@/sdk'
  75. const show = ref(true)
  76. defineProps<{ msg: string }>()
  77. const messageList = ref<MessageItem[]>([])
  78. const dialog = useDialog()
  79. const message = useMessage()
  80. const main = useMainStore()
  81. onBeforeMount(() => {
  82. main.setWidthSceneRef(340)
  83. })
  84. onMounted(() => {
  85. show.value = true
  86. refresh()
  87. // sdk.then((sdk) => {
  88. //
  89. // })
  90. })
  91. const refresh = async () => {
  92. const res = await fetchMessageList(main.sceneCode)
  93. console.log('res', res)
  94. messageList.value = (res as never as MessageItem[]) || []
  95. }
  96. const handleMessageClick = async (ms: MessageItem) => {
  97. const sid = ms.content.sid
  98. console.log('sid', sid)
  99. sdk_mounted((sdk) => {
  100. sdk.TagManager.openTag(sid) // 打开热点
  101. })
  102. }
  103. const fullOptions = ref([
  104. {
  105. label: '审核并屏示',
  106. key: '1'
  107. },
  108. {
  109. label: '删除',
  110. key: '2'
  111. }
  112. ])
  113. const delOptions = ref([
  114. {
  115. label: '删除',
  116. key: '2'
  117. }
  118. ])
  119. const handleSelect = async (key: string, ms: MessageItem) => {
  120. console.log('handleSelect', key, ms.id)
  121. switch (key) {
  122. case '1':
  123. await auditMessage({
  124. id: Number(ms.id),
  125. num: main.sceneCode
  126. })
  127. message.success('审核成功!')
  128. await refresh()
  129. break
  130. case '2':
  131. dialog.warning({
  132. title: '删除',
  133. content: '是否确定删除?',
  134. negativeText: '取消',
  135. positiveText: '确认',
  136. onPositiveClick: async () => {
  137. await delMessage({
  138. id: Number(ms.id),
  139. num: main.sceneCode
  140. })
  141. sdk_mounted((sdk) => {
  142. sdk.TagManager.removeTag(ms.content.sid) // 打开热点
  143. })
  144. message.success('删除成功!')
  145. await refresh()
  146. }
  147. })
  148. break
  149. }
  150. }
  151. // __sdk.TagManager.openTag('1730448544227') // 打开热点
  152. // __sdk.TagManager.removeTag('1730448544227') // 移除热点
  153. </script>
  154. <style lang="sass" scoped>
  155. a
  156. color: #42b983
  157. label
  158. margin: 0 0.5em
  159. font-weight: bold
  160. code
  161. background-color: #eee
  162. padding: 2px 4px
  163. border-radius: 4px
  164. color: #304455
  165. </style>