fix(widget): 优化访客在线续接与历史地区回填
This commit is contained in:
@@ -39,7 +39,7 @@ export const endReasons = [
|
||||
{ value: 'other', label: '其他' },
|
||||
]
|
||||
|
||||
/** 列表项展示:紧急 / 等待中 / 进行中 */
|
||||
/** 列表项展示:紧急 / 等待中 / 访客离线 / 进行中 */
|
||||
export function listStatusMeta(session: Session) {
|
||||
if (session.priority === 'urgent') {
|
||||
return { label: '紧急', bar: '#dc2626', avatarBg: '#fef2f2', avatarColor: '#dc2626', dot: '#dc2626' }
|
||||
@@ -47,6 +47,9 @@ export function listStatusMeta(session: Session) {
|
||||
if (session.status === 'waiting') {
|
||||
return { label: '等待中', bar: '#d97706', avatarBg: '#fffbeb', avatarColor: '#d97706', dot: '#d97706' }
|
||||
}
|
||||
if (!isVisitorOnline(session)) {
|
||||
return { label: '访客离线', bar: '#94a3b8', avatarBg: '#f8fafc', avatarColor: '#64748b', dot: '#94a3b8' }
|
||||
}
|
||||
return { label: '进行中', bar: '#2563eb', avatarBg: '#eff6ff', avatarColor: '#2563eb', dot: '#2563eb' }
|
||||
}
|
||||
|
||||
|
||||
@@ -537,7 +537,7 @@ const VisitorChat = ({
|
||||
void reportPageView(url, title)
|
||||
}, [embedded, sessionId, visitorToken, sessionEnded, reportPageView])
|
||||
|
||||
// 心跳:独立于聊天窗口展开状态,随宿主页可见性上报。
|
||||
// 心跳:独立于聊天窗口展开状态;页面跳转期间不立即离线,交给 45 秒超时判定。
|
||||
useEffect(() => {
|
||||
if (!sessionId || !visitorToken || sessionEnded) return
|
||||
const sendPresence = (state: 'visible' | 'hidden' | 'leave', keepalive = false) => {
|
||||
@@ -556,15 +556,12 @@ const VisitorChat = ({
|
||||
keepalive,
|
||||
}).catch(() => {})
|
||||
}
|
||||
sendPresence(hostVisible ? 'visible' : 'hidden')
|
||||
if (hostVisible) sendPresence('visible')
|
||||
const t = hostVisible ? window.setInterval(() => sendPresence('visible'), 15000) : null
|
||||
const onPageHide = () => sendPresence('leave', true)
|
||||
const onPageShow = () => { if (hostVisible) sendPresence('visible') }
|
||||
window.addEventListener('pagehide', onPageHide)
|
||||
window.addEventListener('pageshow', onPageShow)
|
||||
return () => {
|
||||
if (t != null) window.clearInterval(t)
|
||||
window.removeEventListener('pagehide', onPageHide)
|
||||
window.removeEventListener('pageshow', onPageShow)
|
||||
}
|
||||
}, [sessionId, visitorToken, sessionEnded, hostVisible, presencePulse])
|
||||
|
||||
Reference in New Issue
Block a user