fix(analytics): 完善群成员分析失败时的错误边界处理与UI展示

This commit is contained in:
Leoluis0705
2026-03-25 19:15:12 +08:00
parent 3c0683b9f8
commit a46b52e603
2 changed files with 9 additions and 2 deletions

View File

@@ -1531,7 +1531,9 @@ class GroupAnalyticsService {
try { try {
while (true) { while (true) {
const batch = await wcdbService.fetchMessageBatch(cursor) const batch = await wcdbService.fetchMessageBatch(cursor)
if (!batch.success) break if (!batch.success) {
return { success: false, error: batch.error || '获取分析数据失败' }
}
const rows = Array.isArray(batch.rows) ? batch.rows as Record<string, any>[] : [] const rows = Array.isArray(batch.rows) ? batch.rows as Record<string, any>[] : []
if (rows.length === 0) break if (rows.length === 0) break

View File

@@ -168,6 +168,7 @@ function GroupAnalyticsPage() {
const [isExportingMemberMessages, setIsExportingMemberMessages] = useState(false) const [isExportingMemberMessages, setIsExportingMemberMessages] = useState(false)
const [memberMessages, setMemberMessages] = useState<Message[]>([]) const [memberMessages, setMemberMessages] = useState<Message[]>([])
const [memberAnalyticsData, setMemberAnalyticsData] = useState<any | null>(null) const [memberAnalyticsData, setMemberAnalyticsData] = useState<any | null>(null)
const [analyticsError, setAnalyticsError] = useState<string | null>(null)
const [memberMessagesHasMore, setMemberMessagesHasMore] = useState(false) const [memberMessagesHasMore, setMemberMessagesHasMore] = useState(false)
const [memberMessagesCursor, setMemberMessagesCursor] = useState(0) const [memberMessagesCursor, setMemberMessagesCursor] = useState(0)
const [memberMessagesLoadingMore, setMemberMessagesLoadingMore] = useState(false) const [memberMessagesLoadingMore, setMemberMessagesLoadingMore] = useState(false)
@@ -570,6 +571,7 @@ function GroupAnalyticsPage() {
} }
case 'memberAnalytics': { case 'memberAnalytics': {
setMemberAnalyticsData(null) setMemberAnalyticsData(null)
setAnalyticsError(null)
updateBackgroundTask(taskId, { updateBackgroundTask(taskId, {
detail: '正在读取成员列表与消息分析', detail: '正在读取成员列表与消息分析',
progressText: '成员分析' progressText: '成员分析'
@@ -611,6 +613,7 @@ function GroupAnalyticsPage() {
progressText: '已完成' progressText: '已完成'
}) })
} else { } else {
setAnalyticsError(analyticsResult.error || '分析失败')
finishBackgroundTask(taskId, 'failed', { detail: analyticsResult.error || '分析失败' }) finishBackgroundTask(taskId, 'failed', { detail: analyticsResult.error || '分析失败' })
} }
break break
@@ -1434,7 +1437,9 @@ function GroupAnalyticsPage() {
)} )}
</div> </div>
</div> </div>
{memberAnalyticsData ? ( {analyticsError ? (
<div className="member-message-empty">{analyticsError}</div>
) : memberAnalyticsData ? (
<div className="analytics-content-scrollable" style={{ padding: '0', display: 'flex', flexDirection: 'column', flex: 1, minHeight: 0, overflowY: 'auto' }}> <div className="analytics-content-scrollable" style={{ padding: '0', display: 'flex', flexDirection: 'column', flex: 1, minHeight: 0, overflowY: 'auto' }}>
<div className="stats-overview"> <div className="stats-overview">
<div className="stat-card"> <div className="stat-card">