diff --git a/app/src/renderer/src/stores/mqtt.js b/app/src/renderer/src/stores/mqtt.js index 59bfd2e..1fe391c 100644 --- a/app/src/renderer/src/stores/mqtt.js +++ b/app/src/renderer/src/stores/mqtt.js @@ -108,6 +108,17 @@ const loading = ref(false); */ let cleanupFns = []; +/** + * 对指定服务器的主题列表按主题名称升序排序 + * @param {MqttServer} server - 服务器对象 + * @returns {void} + */ +function sortTopics(server) { + if (server && server.topics) { + server.topics.sort((a, b) => a.topic.localeCompare(b.topic)); + } +} + /** * 设置主进程事件监听器 * 包括状态变化、消息接收、订阅变化等事件 @@ -172,6 +183,7 @@ function setupListeners() { t.subscribed = data.subscribed; if (data.topic && data.topic !== t.topic) { t.topic = data.topic; + sortTopics(srv); } } @@ -252,6 +264,7 @@ export function useMqttStore() { servers.value = data; sortServers(); + servers.value.forEach((srv) => sortTopics(srv)); setupListeners(); } catch (e) { @@ -355,6 +368,7 @@ export function useMqttStore() { let data = await window.api.importServers(serverList); servers.value = data; sortServers(); + servers.value.forEach((srv) => sortTopics(srv)); if (servers.value.length > 0 && !activeServerId.value) { activeServerId.value = servers.value[0].id; } @@ -396,6 +410,7 @@ export function useMqttStore() { let srv = servers.value.find((s) => s.id === serverId); if (srv) { srv.topics.push(result); + sortTopics(srv); } } @@ -417,6 +432,7 @@ export function useMqttStore() { if (srv) { srv.topics = srv.topics.filter((t) => t.topic !== topic); + sortTopics(srv); } }