fix: improve WhatsApp settings and isolate IM host authentication
Some checks are pending
CI / Test, build, and verify package (push) Waiting to run

This commit is contained in:
oliver 2026-10-11 17:03:38 +08:00
parent bcbe85fdb1
commit bf73b0c0af
28 changed files with 848 additions and 116 deletions

View file

@ -2,7 +2,7 @@ import * as React from 'react';
import { WhatsappLogoGlyph } from '../../channel-logos.js';
import { QrActionIcon } from '../../credential-binding.js';
import { h } from '../../i18n.js';
import { h, isEnglish } from '../../i18n.js';
import { WorkspaceEditor } from '../../workspace-editor.js';
import { ContextEnhancementEditor } from '../../context-enhancement.js';
import {
@ -52,7 +52,7 @@ const Button = React.forwardRef(function Button(
function checkedTime(value) {
if (!value) return '尚未检查';
try {
return new Intl.DateTimeFormat('zh-CN', {
return new Intl.DateTimeFormat(isEnglish() ? 'en-US' : 'zh-CN', {
hour: '2-digit', minute: '2-digit', second: '2-digit',
}).format(new Date(value));
} catch {
@ -197,9 +197,11 @@ export function WhatsappAccountCard({
onConfirmRemove,
onCancelRemove,
}) {
const state = busy === 'reconnect' ? 'connecting' : account.state;
const tone = account.connected ? 'success' : state === 'error' ? 'error' : 'warning';
const stateLabel = account.connected ? '运行正常' : state === 'connecting' ? '正在连接' : '连接未就绪';
const settingsId = React.useId();
const checking = busy === 'reconnect';
const state = checking ? 'connecting' : account.state;
const tone = checking ? 'warning' : account.connected ? 'success' : state === 'error' ? 'error' : 'warning';
const stateLabel = checking ? '正在检查连接' : account.connected ? '运行正常' : state === 'connecting' ? '正在连接' : '连接未就绪';
const summary = account.error?.message ?? (account.connected ? null : account.health.summary);
return h('article', { className: 'ddt-card dim-botCard', 'data-bot-id': account.botId },
h('div', { className: 'ddt-cardBody dim-botCardBody' },
@ -229,6 +231,11 @@ export function WhatsappAccountCard({
accessGrant: account.accessGrant,
groupSessionScope: account.groupSessionScope,
}))),
h('section', { className: 'dwa-sessionSettings', 'aria-labelledby': settingsId },
h('div', { className: 'dwa-settingsHeading' },
h('h4', { id: settingsId }, '会话默认设置'),
h('span', null, '修改后自动保存')),
h('div', { className: 'dwa-settingsGrid' },
h(WorkspaceEditor, {
workspace: account.workspace,
disabled: Boolean(busy),
@ -243,7 +250,11 @@ export function WhatsappAccountCard({
defaultModel: account.defaultModel,
disabled: Boolean(busy),
onSave: onDefaultModelSave,
}),
})),
h('p', { className: 'dwa-settingsHint' },
'预设和模型只影响新会话。已有聊天请先发送 ',
h('code', null, '/new'),
',再发送普通消息。')),
h(ContextEnhancementEditor, {
config: account.contextEnhancement,
disabled: Boolean(busy),

View file

@ -1,9 +1,21 @@
export const WHATSAPP_STYLE_ID = 'xmanrui-dsh-im-whatsapp-settings';
const CSS = String.raw`
.dwa-page { --ddt-accent: #25d366; --ddt-accent-deep: #128c7e; --ddt-accent-wash: #eafbf0; }
.dwa-page { --ddt-accent: #128c7e; --ddt-accent-deep: #075e54; --ddt-accent-wash: color-mix(in srgb, #128c7e 10%, var(--dsw-alias-bg-layer-1, #fff)); }
.dwa-avatar { color: #fff; background: #25d366; }
.dwa-avatar svg { display: block; }
.dwa-sessionSettings { min-width: 0; display: grid; gap: 10px; margin-top: 16px; }
.dwa-settingsHeading { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 6px 12px; }
.dwa-settingsHeading h4 { font-size: 13px; line-height: 20px; font-weight: 650; }
.dwa-settingsHeading > span, .dwa-settingsHint { color: var(--dsw-alias-label-tertiary, #8f959e); font-size: 11px; line-height: 18px; }
.dwa-settingsGrid { min-width: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.dim-panel .dwa-settingsGrid > .dim-workspace { grid-column: 1 / -1; }
.dim-panel .dwa-settingsGrid > .dim-workspace, .dim-panel .dwa-settingsGrid > .dim-preset { margin-top: 0; padding: 10px 12px; }
.dwa-settingsHint { margin: 0; }
.dwa-settingsHint code { color: var(--dsw-alias-label-secondary, #646a73); }
@container (max-width: 520px) {
.dwa-settingsGrid { grid-template-columns: minmax(0, 1fr); }
}
`;
export function installWhatsappStyles() {