index.vue 4.0 KB

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