feat: 短信持久化会按当前 SIM 的 ICCID 隔离

This commit is contained in:
2026-06-27 09:27:16 +08:00
parent 384f1be75b
commit d688dffef2
8 changed files with 325 additions and 28 deletions
+1 -1
View File
@@ -166,7 +166,7 @@
<div class="inbox-panel">
<div class="inbox-meta">
<span id="messageCount">最近 0 条</span>
<span class="inbox-meta__hint">新短信会自动出现在这里</span>
<span class="inbox-meta__hint" id="messageScope">新短信会自动出现在这里</span>
</div>
<div class="message-list" id="messageList" aria-live="polite">
<p class="empty-state empty-state--light">暂无收到的短信。</p>
+20
View File
@@ -759,6 +759,26 @@ h3 {
letter-spacing: -0.2px;
}
.message-meta {
display: flex;
align-items: center;
gap: 8px;
flex-wrap: wrap;
margin-top: 8px;
}
.message-sim {
border: 1px solid var(--hairline);
border-radius: var(--r-pill);
background: var(--surface-soft);
color: var(--muted);
padding: 3px 9px;
font-family: var(--font-mono);
font-size: 11px;
line-height: 1.5;
overflow-wrap: anywhere;
}
.message-item__header time {
color: var(--muted);
font-family: var(--font-sans);
+20 -4
View File
@@ -51,6 +51,7 @@ const elements = {
smsStatus: document.querySelector('#smsStatus'),
messagesButton: document.querySelector('#messagesButton'),
messageCount: document.querySelector('#messageCount'),
messageScope: document.querySelector('#messageScope'),
messageList: document.querySelector('#messageList'),
atForm: document.querySelector('#atForm'),
atOutput: document.querySelector('#atOutput'),
@@ -311,9 +312,16 @@ function formatDateTime(value) {
});
}
function renderMessages(messages) {
function renderMessages(messages, meta = {}) {
elements.messageList.replaceChildren();
setText(elements.messageCount, `最近 ${messages.length} 条`);
const currentSimLabel = meta.currentSim?.simLabel || '当前SIM未知';
const countLabel = meta.partitionBySim ? `${currentSimLabel} 最近 ${messages.length} 条` : `全部SIM 最近 ${messages.length} 条`;
const scopeLabel = meta.partitionBySim
? (meta.currentSimKnown ? '仅显示当前SIM收到的短信' : '未识别当前SIM,收件箱已隐藏')
: 'SIM隔离未启用';
setText(elements.messageCount, countLabel);
setText(elements.messageScope, scopeLabel);
if (!messages.length) {
const empty = document.createElement('p');
@@ -345,8 +353,16 @@ function renderMessages(messages) {
text.className = 'message-text';
text.textContent = message.text || '';
const metaRow = document.createElement('div');
metaRow.className = 'message-meta';
const sim = document.createElement('span');
sim.className = 'message-sim';
sim.textContent = message.simLabel || '未知SIM';
metaRow.append(sim);
header.append(sender, status, time);
item.append(header, text);
item.append(header, metaRow, text);
fragment.append(item);
});
@@ -664,7 +680,7 @@ async function refreshLogs() {
async function refreshMessages() {
const messages = await requestJSON('/api/sms/received?limit=50');
renderMessages(messages.data || []);
renderMessages(messages.data || [], messages.meta || {});
}
async function toggleMobileData() {