看板范围默认从「只看我的」改为「团队全部」,同事移交或推进的工单不用 手动切开关就能看见。同事的卡片按 Gitea 归属(assignee 优先,无 assignee 退回创建者)判定为只读:禁止拖列、开会话、实施、合并分支、删 worktree、 删改工单,卡片右上角贴归属人头像,详情面板属性表整体消毒并显示只读徽章。 看 PR 改动、勾已查看、生成文件摘要属于本机审查动作,照常放行。 扩展侧在消息分发前统一拦截需要归属人身份的消息,兜住前端快照过期或工单 刚被重新指派的竞态;webhook 单卡上板时同步归属,避免增量卡漏进门禁。 头像由扩展侧带 token 抓回转 data URI 下发,绕开 webview CSP 对外链图片 的限制,按 URL 进程内缓存。 Claude-Session: https://claude.ai/code/session_01KSgcQwf1mWrb8qeTKFvJbV
25 lines
964 B
TypeScript
25 lines
964 B
TypeScript
/**
|
|
* 把详情面板的属性表变成只读版本:同事的工单在板上只能看。
|
|
*
|
|
* 一处消毒覆盖所有行,避免每加一行就得记得判断归属。放行的只有纯查看
|
|
* 动作——双击 PR 编号跳浏览器、双击文件名打开本地文件;会改工单状态、
|
|
* 开会话、删 worktree 的按钮一律禁用。
|
|
*/
|
|
|
|
import type { PropertyGroup } from '../components/property-grid'
|
|
|
|
export function toReadOnlySchema(schema: PropertyGroup[]): PropertyGroup[] {
|
|
return schema.map(group => ({
|
|
...group,
|
|
actions: undefined,
|
|
properties: group.properties.map(prop => ({
|
|
...prop,
|
|
readOnly: true,
|
|
// 'action' 行的双击是「在本机恢复会话」,别人的会话恢复不了也不该恢复。
|
|
onAction: prop.type === 'action' ? undefined : prop.onAction,
|
|
onReload: undefined,
|
|
secondaryActions: prop.secondaryActions?.map(a => ({ ...a, disabled: true })),
|
|
})),
|
|
}))
|
|
}
|