排除好友防呆设计

This commit is contained in:
xuncha
2026-02-19 18:05:37 +08:00
parent 96ff783bbd
commit c4dc266f93
4 changed files with 44 additions and 4 deletions

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "weflow", "name": "weflow",
"version": "2.0.1", "version": "2.1.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "weflow", "name": "weflow",
"version": "2.0.1", "version": "2.1.0",
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
"better-sqlite3": "^12.5.0", "better-sqlite3": "^12.5.0",

View File

@@ -1,6 +1,6 @@
{ {
"name": "weflow", "name": "weflow",
"version": "2.0.1", "version": "2.1.0",
"description": "WeFlow", "description": "WeFlow",
"main": "dist-electron/main.js", "main": "dist-electron/main.js",
"author": "cc", "author": "cc",

View File

@@ -45,6 +45,12 @@
font-weight: 600; font-weight: 600;
color: var(--primary); color: var(--primary);
} }
.error-actions {
display: flex;
align-items: center;
gap: 8px;
}
} }
.page-header { .page-header {

View File

@@ -108,6 +108,7 @@ function AnalyticsPage() {
}, [loadExcludedUsernames]) }, [loadExcludedUsernames])
const handleRefresh = () => loadData(true) const handleRefresh = () => loadData(true)
const isNoSessionError = error?.includes('未找到消息会话') ?? false
const loadExcludeCandidates = useCallback(async () => { const loadExcludeCandidates = useCallback(async () => {
setExcludeLoading(true) setExcludeLoading(true)
@@ -175,6 +176,23 @@ function AnalyticsPage() {
} }
} }
const handleResetExcluded = async () => {
try {
const result = await window.electronAPI.analytics.setExcludedUsernames([])
if (!result.success) {
setError(result.error || '重置排除好友失败')
return
}
setExcludedUsernames(new Set())
setDraftExcluded(new Set())
clearCache()
await window.electronAPI.cache.clearAnalytics()
await loadData(true)
} catch (e) {
setError(`重置排除好友失败: ${String(e)}`)
}
}
const visibleExcludeCandidates = excludeCandidates const visibleExcludeCandidates = excludeCandidates
.filter((candidate) => { .filter((candidate) => {
const query = excludeQuery.trim().toLowerCase() const query = excludeQuery.trim().toLowerCase()
@@ -355,6 +373,22 @@ function AnalyticsPage() {
) )
} }
if (error && !isLoaded && isNoSessionError && excludedUsernames.size > 0) {
return (
<div className="error-container">
<p>{error}</p>
<div className="error-actions">
<button className="btn btn-secondary" onClick={handleResetExcluded}>
</button>
<button className="btn btn-primary" onClick={() => loadData(true)}>
</button>
</div>
</div>
)
}
if (error && !isLoaded) { if (error && !isLoaded) {
return (<div className="error-container"><p>{error}</p><button className="btn btn-primary" onClick={() => loadData(true)}></button></div>) return (<div className="error-container"><p>{error}</p><button className="btn btn-primary" onClick={() => loadData(true)}></button></div>)
} }