Polish settings anti-revoke and model directory UI

This commit is contained in:
Jason committed 2026-05-04 21:19:44 +08:00
1 parent 6eb304ef94
commit 404b06ff16
2 files changed
+149 -169

No files matched your search

+30 -40
View File
@@ -2189,23 +2189,32 @@ function SettingsPage({ onClose }: SettingsPageProps = {}) {
/>
</div>
<div className="anti-revoke-toolbar-actions">
<div className="anti-revoke-btn-group">
<button className="btn btn-secondary btn-sm" onClick={() => void handleRefreshAntiRevokeStatus()} disabled={busy}>
<RefreshCw size={14} /> {isAntiRevokeRefreshing ? '刷新中...' : '刷新状态'}
</button>
</div>
<div className="anti-revoke-btn-group">
<button className="btn btn-secondary btn-sm" onClick={selectAllFiltered} disabled={busy || filteredSessionIds.length === 0 || allFilteredSelected}>
全选
</button>
<button className="btn btn-secondary btn-sm" onClick={clearSelection} disabled={busy || selectedCount === 0}>
清空选择
</button>
</div>
<button className="btn btn-secondary btn-sm" onClick={() => void handleRefreshAntiRevokeStatus()} disabled={busy}>
<RefreshCw size={14} /> {isAntiRevokeRefreshing ? '刷新中...' : '刷新状态'}
</button>
</div>
</div>
<div className="anti-revoke-selection-strip">
<div className="anti-revoke-selected-count">
<span>已选 <strong>{selectedCount}</strong> 个会话</span>
<span>筛选命中 <strong>{selectedInFilteredCount}</strong> / {filteredSessionIds.length}</span>
</div>
<div className="anti-revoke-selection-actions">
<button className="btn btn-secondary btn-sm" onClick={selectAllFiltered} disabled={busy || filteredSessionIds.length === 0 || allFilteredSelected}>
全选
</button>
<button className="btn btn-secondary btn-sm" onClick={clearSelection} disabled={busy || selectedCount === 0}>
清空选择
</button>
</div>
</div>
<div className="anti-revoke-batch-actions">
<div className="anti-revoke-batch-copy">
<span className="anti-revoke-section-label">批量部署</span>
<span>对已选会话执行防撤回安装或卸载</span>
</div>
<div className="anti-revoke-btn-group anti-revoke-batch-btns">
<button className="btn btn-primary btn-sm" onClick={() => void handleInstallAntiRevokeTriggers()} disabled={busy || selectedCount === 0}>
{isAntiRevokeInstalling ? '安装中...' : '批量安装'}
@@ -2214,10 +2223,6 @@ function SettingsPage({ onClose }: SettingsPageProps = {}) {
{isAntiRevokeUninstalling ? '卸载中...' : '批量卸载'}
</button>
</div>
<div className="anti-revoke-selected-count">
<span>已选 <strong>{selectedCount}</strong> 个会话</span>
<span>筛选命中 <strong>{selectedInFilteredCount}</strong> / {filteredSessionIds.length}</span>
</div>
</div>
</div>
@@ -2516,11 +2521,6 @@ function SettingsPage({ onClose }: SettingsPageProps = {}) {
const renderModelsTab = () => (
<div className="tab-content">
<div className="form-group">
<label>模型管理</label>
<span className="form-hint">管理语音识别模型</span>
</div>
<div className="form-group">
<label>语音识别模型 (Whisper)</label>
<span className="form-hint">用于语音消息转文字功能</span>
@@ -2538,12 +2538,6 @@ function SettingsPage({ onClose }: SettingsPageProps = {}) {
) : (
<span className="status-indicator warning">未安装</span>
)}
{resolvedWhisperModelPath && (
<div className="model-path-block">
<span className="path-label">模型目录</span>
<div className="path-text" title={resolvedWhisperModelPath}>{resolvedWhisperModelPath}</div>
</div>
)}
</div>
</div>
{(!whisperModelStatus?.exists || isWhisperDownloading) && (
@@ -2574,25 +2568,21 @@ function SettingsPage({ onClose }: SettingsPageProps = {}) {
)}
</div>
)}
</div>
<div className="sub-setting">
<div className="sub-label">自定义模型目录</div>
<div className="path-selector">
<div className="model-directory-control">
<input
type="text"
value={whisperModelDir}
value={resolvedWhisperModelPath}
readOnly
placeholder="默认目录"
title={resolvedWhisperModelPath || '默认目录'}
/>
<button className="btn-icon" onClick={handleSelectWhisperModelDir} title="选择目录">
<FolderOpen size={18} />
<button className="btn btn-secondary btn-sm" onClick={handleSelectWhisperModelDir} title="选择自定义目录">
<FolderOpen size={14} /> 选择自定义目录
</button>
<button className="btn btn-secondary btn-sm" onClick={handleResetWhisperModelDir} disabled={!whisperModelDir} title="恢复默认">
<RotateCcw size={14} /> 恢复默认
</button>
{whisperModelDir && (
<button className="btn-icon danger" onClick={handleResetWhisperModelDir} title="重置为默认">
<RotateCcw size={18} />
</button>
)}
</div>
</div>
</div>