index1.vue 3.7 KB

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