chore: message page list support sharedworker.js
This commit is contained in:
@@ -105,6 +105,7 @@ const (
|
|||||||
// 其他事件类型
|
// 其他事件类型
|
||||||
EventSystemNotice = "system_notice"
|
EventSystemNotice = "system_notice"
|
||||||
EventNotifySent = "notify_sent"
|
EventNotifySent = "notify_sent"
|
||||||
|
EventAppLogAdded = "app_log_added"
|
||||||
|
|
||||||
// WebSocket 消息类型
|
// WebSocket 消息类型
|
||||||
WSTypeHeartbeat = "heartbeat"
|
WSTypeHeartbeat = "heartbeat"
|
||||||
|
|||||||
@@ -32,7 +32,14 @@ func (s *AppLogService) Add(log *models.AppLog) error {
|
|||||||
if log.ID == "" {
|
if log.ID == "" {
|
||||||
log.ID = utils.GenerateID()
|
log.ID = utils.GenerateID()
|
||||||
}
|
}
|
||||||
return database.DB.Create(log).Error
|
err := database.DB.Create(log).Error
|
||||||
|
if err == nil {
|
||||||
|
eventbus.DefaultBus.Publish(eventbus.Event{
|
||||||
|
Type: constant.EventAppLogAdded,
|
||||||
|
Payload: log,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *AppLogService) List(category string, status string, level string, page, pageSize int, keyword string) ([]models.AppLog, int64, error) {
|
func (s *AppLogService) List(category string, status string, level string, page, pageSize int, keyword string) ([]models.AppLog, int64, error) {
|
||||||
|
|||||||
@@ -33,7 +33,14 @@ func (s *LoginLogService) Create(username, ip, userAgent, status, message string
|
|||||||
RefID: ip,
|
RefID: ip,
|
||||||
ErrorMsg: models.BigText(message),
|
ErrorMsg: models.BigText(message),
|
||||||
}
|
}
|
||||||
return database.DB.Create(log).Error
|
err := database.DB.Create(log).Error
|
||||||
|
if err == nil {
|
||||||
|
eventbus.DefaultBus.Publish(eventbus.Event{
|
||||||
|
Type: constant.EventAppLogAdded,
|
||||||
|
Payload: log,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// SubscribeEvents 注册订阅事件
|
// SubscribeEvents 注册订阅事件
|
||||||
|
|||||||
@@ -72,3 +72,8 @@ export const TASK_EVENTS = {
|
|||||||
RUNNING: 'task_running',
|
RUNNING: 'task_running',
|
||||||
QUEUED: 'task_queued',
|
QUEUED: 'task_queued',
|
||||||
} as const
|
} as const
|
||||||
|
|
||||||
|
// 日志事件类型
|
||||||
|
export const LOG_EVENTS = {
|
||||||
|
ADDED: 'app_log_added',
|
||||||
|
} as const
|
||||||
|
|||||||
@@ -3,9 +3,11 @@ import { ref, onMounted } from 'vue'
|
|||||||
import Pagination from '@/components/Pagination.vue'
|
import Pagination from '@/components/Pagination.vue'
|
||||||
import { Loader2 } from 'lucide-vue-next'
|
import { Loader2 } from 'lucide-vue-next'
|
||||||
import TextOverflow from '@/components/TextOverflow.vue'
|
import TextOverflow from '@/components/TextOverflow.vue'
|
||||||
import { api } from '@/api'
|
import { api, LOG_CATEGORY } from '@/api'
|
||||||
import { toast } from 'vue-sonner'
|
import { toast } from 'vue-sonner'
|
||||||
import { useSiteSettings } from '@/composables/useSiteSettings'
|
import { useSiteSettings } from '@/composables/useSiteSettings'
|
||||||
|
import { useEventBus } from '@/composables/useEventBus'
|
||||||
|
import { LOG_EVENTS } from '@/constants'
|
||||||
import BaihuDialog from '@/components/ui/BaihuDialog.vue'
|
import BaihuDialog from '@/components/ui/BaihuDialog.vue'
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
@@ -91,6 +93,15 @@ function handlePageChange(page: number) {
|
|||||||
|
|
||||||
onMounted(loadLogs)
|
onMounted(loadLogs)
|
||||||
|
|
||||||
|
// 实时更新:当有新登录产生且用户在第一页时刷新
|
||||||
|
useEventBus([LOG_EVENTS.ADDED], (payload) => {
|
||||||
|
if (payload && payload.category === LOG_CATEGORY.LOGIN_LOG) {
|
||||||
|
if (currentPage.value === 1) {
|
||||||
|
loadLogs()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
loadLogs
|
loadLogs
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ import BaihuDialog from '@/components/ui/BaihuDialog.vue'
|
|||||||
import { toast } from 'vue-sonner'
|
import { toast } from 'vue-sonner'
|
||||||
import { format } from 'date-fns'
|
import { format } from 'date-fns'
|
||||||
import { useSiteSettings } from '@/composables/useSiteSettings'
|
import { useSiteSettings } from '@/composables/useSiteSettings'
|
||||||
|
import { useEventBus } from '@/composables/useEventBus'
|
||||||
|
import { LOG_EVENTS } from '@/constants'
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
filters: {
|
filters: {
|
||||||
@@ -85,6 +87,15 @@ onMounted(() => {
|
|||||||
fetchLogs()
|
fetchLogs()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 实时更新:当有新系统事件产生且用户在第一页时刷新
|
||||||
|
useEventBus([LOG_EVENTS.ADDED], (payload) => {
|
||||||
|
if (payload && payload.category === LOG_CATEGORY.SYSTEM_NOTICE) {
|
||||||
|
if (currentPage.value === 1) {
|
||||||
|
fetchLogs()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
const selectedLog = computed(() => logs.value.find((l: AppLog) => l.id === selectedLogId.value))
|
const selectedLog = computed(() => logs.value.find((l: AppLog) => l.id === selectedLogId.value))
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ import {
|
|||||||
AlertDialogTitle,
|
AlertDialogTitle,
|
||||||
} from '@/components/ui/alert-dialog'
|
} from '@/components/ui/alert-dialog'
|
||||||
import { useSiteSettings } from '@/composables/useSiteSettings'
|
import { useSiteSettings } from '@/composables/useSiteSettings'
|
||||||
|
import { useEventBus } from '@/composables/useEventBus'
|
||||||
|
import { LOG_EVENTS } from '@/constants'
|
||||||
import BaihuDialog from '@/components/ui/BaihuDialog.vue'
|
import BaihuDialog from '@/components/ui/BaihuDialog.vue'
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
@@ -94,6 +96,15 @@ onMounted(() => {
|
|||||||
fetchLogs()
|
fetchLogs()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 实时更新:当有新推送产生且用户在第一页时刷新
|
||||||
|
useEventBus([LOG_EVENTS.ADDED], (payload) => {
|
||||||
|
if (payload && payload.category === LOG_CATEGORY.PUSH_LOG) {
|
||||||
|
if (currentPage.value === 1) {
|
||||||
|
fetchLogs()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
const selectedLog = computed(() => logs.value.find((l: AppLog) => l.id === selectedLogId.value))
|
const selectedLog = computed(() => logs.value.find((l: AppLog) => l.id === selectedLogId.value))
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
|
|||||||
Reference in New Issue
Block a user