refactor: useOnlineCount 重构为 useOnlineUsers,DictMessage 重命名为 DictChangeMessage
This commit is contained in:
@@ -1,65 +0,0 @@
|
|||||||
import { ref, onMounted, getCurrentInstance } from "vue";
|
|
||||||
import { useSse } from "./useSse";
|
|
||||||
|
|
||||||
let globalInstance: ReturnType<typeof createOnlineCountComposable> | null = null;
|
|
||||||
|
|
||||||
function createOnlineCountComposable() {
|
|
||||||
const onlineUserCount = ref(0);
|
|
||||||
const lastUpdateTime = ref(0);
|
|
||||||
|
|
||||||
const sse = useSse();
|
|
||||||
|
|
||||||
let unsubscribe: (() => void) | null = null;
|
|
||||||
|
|
||||||
// 处理在线人数变更消息
|
|
||||||
const handleOnlineCountMessage = (count: number) => {
|
|
||||||
if (!Number.isFinite(count) || count < 0) return;
|
|
||||||
onlineUserCount.value = count;
|
|
||||||
lastUpdateTime.value = Date.now();
|
|
||||||
};
|
|
||||||
|
|
||||||
const initialize = () => {
|
|
||||||
sse.connect();
|
|
||||||
unsubscribe = sse.on("online-count", handleOnlineCountMessage);
|
|
||||||
};
|
|
||||||
|
|
||||||
const cleanup = () => {
|
|
||||||
if (unsubscribe) {
|
|
||||||
unsubscribe();
|
|
||||||
unsubscribe = null;
|
|
||||||
}
|
|
||||||
onlineUserCount.value = 0;
|
|
||||||
lastUpdateTime.value = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
onlineUserCount: readonly(onlineUserCount),
|
|
||||||
lastUpdateTime: readonly(lastUpdateTime),
|
|
||||||
isConnected: sse.isConnected,
|
|
||||||
connectionState: sse.connectionState,
|
|
||||||
initialize,
|
|
||||||
cleanup,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 在线用户计数组合式函数(单例模式)
|
|
||||||
*/
|
|
||||||
export function useOnlineCount(options: { autoInit?: boolean } = {}) {
|
|
||||||
const { autoInit = true } = options;
|
|
||||||
|
|
||||||
if (!globalInstance) {
|
|
||||||
globalInstance = createOnlineCountComposable();
|
|
||||||
}
|
|
||||||
|
|
||||||
const instance = getCurrentInstance();
|
|
||||||
if (autoInit && instance) {
|
|
||||||
onMounted(() => {
|
|
||||||
if (!globalInstance!.isConnected.value) {
|
|
||||||
globalInstance!.initialize();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return globalInstance;
|
|
||||||
}
|
|
||||||
@@ -261,11 +261,11 @@ import {
|
|||||||
Document,
|
Document,
|
||||||
VideoPlay,
|
VideoPlay,
|
||||||
} from "@element-plus/icons-vue";
|
} from "@element-plus/icons-vue";
|
||||||
import { useOnlineCount } from "@/composables";
|
import { useOnlineUsers } from "@/composables";
|
||||||
|
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
const settingsStore = useSettingsStore();
|
const settingsStore = useSettingsStore();
|
||||||
const { onlineUserCount, isConnected } = useOnlineCount();
|
const { onlineUserCount, isConnected } = useOnlineUsers();
|
||||||
|
|
||||||
const hours = new Date().getHours();
|
const hours = new Date().getHours();
|
||||||
const greetings = computed(() => {
|
const greetings = computed(() => {
|
||||||
|
|||||||
@@ -144,7 +144,8 @@ import { useDictStoreHook } from "@/stores/dict";
|
|||||||
import { useDateFormat } from "@vueuse/core";
|
import { useDateFormat } from "@vueuse/core";
|
||||||
import DictAPI from "@/api/system/dict";
|
import DictAPI from "@/api/system/dict";
|
||||||
import type { DictItemForm } from "@/api/system/dict";
|
import type { DictItemForm } from "@/api/system/dict";
|
||||||
import { useDictSync, DictMessage } from "@/composables";
|
import { useDictSync } from "@/composables";
|
||||||
|
import type { DictChangeMessage } from "@/composables";
|
||||||
|
|
||||||
// 性别字典编码
|
// 性别字典编码
|
||||||
const DICT_CODE = "gender";
|
const DICT_CODE = "gender";
|
||||||
@@ -186,7 +187,7 @@ const setupSse = () => {
|
|||||||
dictSse.initialize();
|
dictSse.initialize();
|
||||||
|
|
||||||
// 注册字典消息回调
|
// 注册字典消息回调
|
||||||
unregisterCallback = dictSse.onDictChange((message: DictMessage) => {
|
unregisterCallback = dictSse.onDictChange((message: DictChangeMessage) => {
|
||||||
// 只有当消息是关于性别字典的更新时才处理
|
// 只有当消息是关于性别字典的更新时才处理
|
||||||
if (message.dictCode === DICT_CODE) {
|
if (message.dictCode === DICT_CODE) {
|
||||||
// 更新最后更新时间
|
// 更新最后更新时间
|
||||||
|
|||||||
Reference in New Issue
Block a user