feat(notify): 站内通知补齐完成、到期逾期与知识事件
CI / backend (push) Waiting to run

This commit is contained in:
Steven
2026-11-10 13:47:56 +08:00
parent 4b7627d70e
commit f54df70811
15 changed files with 791 additions and 32 deletions
@@ -36,6 +36,7 @@ import com.dadao.task.ui.TicketsScreen
import com.dadao.task.ui.UpdateDialog
import com.dadao.task.ui.WorkspaceScaffold
import com.dadao.task.ui.WorkspaceTab
import kotlinx.coroutines.delay
class MainActivity : ComponentActivity() {
@@ -114,10 +115,14 @@ private fun AppRoot(joinUri: String?) {
.onFailure { pendingJoin = null }
}
// 未读数:进工作区、切页面、或通知页标了已读(unreadRefresh)时刷新
// 未读数:进工作区、切页面、或通知页标了已读(unreadRefresh)时刷新;
// 停留不动时每 30 秒再拉一次,这样"任务被指派/快到期/已逾期"不用切页面也能看到角标。
LaunchedEffect(current?.id, tab, unreadRefresh) {
val ws = current ?: return@LaunchedEffect
unread = api.unreadCount(ws.id)
while (true) {
unread = api.unreadCount(ws.id)
delay(30_000)
}
}
// 版本检查:登录成功后查一次就够,查不到(网络、没发布过包)就当没有新版
@@ -234,11 +239,15 @@ private fun AppRoot(joinUri: String?) {
WorkspaceTab.Notifications -> NotificationsScreen(
api = api,
workspaceId = ws.id,
onOpenItem = { itemId, isTicket ->
// 通知点开后跳到对应列表并展开那一条;通知本身不带数据,页面自己回源
onOpenItem = { itemId, itemKind ->
// 通知点开后跳到对应页签并展开那一条;通知本身不带数据,页面自己回源
reopenItem = itemId
reopenKnowledge = false
tab = if (isTicket) WorkspaceTab.Tickets else WorkspaceTab.Tasks
reopenKnowledge = itemKind == "knowledge"
tab = when (itemKind) {
"knowledge" -> WorkspaceTab.Knowledge
"ticket" -> WorkspaceTab.Tickets
else -> WorkspaceTab.Tasks
}
},
onUnreadChanged = { unreadRefresh += 1 },
)