🐛 fix(vscode): issue opened 广播按看板 scope 门禁,mine 不再凭空上别人的卡

This commit is contained in:
2026-08-19 20:41:11 +08:00
parent ea4c4e4658
commit fea7b2e604
5 changed files with 136 additions and 5 deletions
+30
View File
@@ -0,0 +1,30 @@
import type { KanbanScope } from '../panel/kanbanScope'
/**
* issue opened 事件的看板 append 门禁:webhook 广播到所有开着看板的
* 机器,而 'mine' 范围的批量加载只拉"我创建/指派给我"的工单。若无条件
* append,别人建的单会在 'mine' 看板上凭空多出一张卡(刷新后又消失)。
* append 必须与批量加载遵循同一套可见性规则。
*/
export function decideIssueAppend(opts: {
/** 看板当前范围('mine' 只看我的 / 'all' 团队全部)。 */
scope: KanbanScope
/** 本机面板发起的创建(nonce 匹配到 pending),用户正等这张卡上屏。 */
pendingCreatedLocally: boolean
/** 工单创建者的 login;payload 缺失时为 undefined。 */
poster: string | undefined
/** 工单 assignee 的 login 列表,空数组表示未指派。 */
assignees: string[]
/** 本机 token 对应的 Gitea login;身份解析失败时为 undefined。 */
me: string | undefined
}): boolean {
// ① 本机发起的创建 → 恒显,范围和身份都不作数。
if (opts.pendingCreatedLocally)
return true
// ② 'all' 范围本来就展示团队全部 → 恒显。
if (opts.scope === 'all')
return true
// ③ 'mine' 范围:与批量加载(created_by=我 / assigned_by=我)同规则;
// 身份未知时宁可少显示,下次刷新会兜底。
return opts.me !== undefined && (opts.poster === opts.me || opts.assignees.includes(opts.me))
}