v0.1.3
两个真机实测暴露的 bug,加一整套错误处理收口。全部改动都先在真实浏览器里复现、修复后再验证。
修复:Sheet 里的 combobox 点不中(影响所有抽屉表单的下拉选择)
编辑用户时无法选角色、编辑 book 时无法选作者——下拉打开、选项可见,鼠标点了没反应(键盘反而可用)。根源是 Radix modal(Sheet)打开时把 body 设为 pointer-events: none 且只恢复自己的内容,而 Base UI 的 combobox 弹层 portal 在 dialog 之外,整条链没有一层恢复。主题层一条规则修复:
[data-slot="combobox-content"] { pointer-events: auto; }这类缺陷 jsdom 表达不出来(合成事件直达元素),组件测试全绿——只有真浏览器能抓到。
修复:/forbidden 在生成的应用里是 404
requirePermission 无权限时跳 /forbidden,但这个页面此前只存在于参照应用,从未随 app-shell 分发——权限守卫的跳转目标是个 404。现已分发;403/404 页同时加上注销链接:困在无权限页面的用户通常需要换账号,只给「返回首页」是死路。
新增:控制台首页 /home——控制台入口不再 403
「进入控制台」此前硬编码指向 /identity/users,没有 Identity 权限的用户一进门就 403;侧栏「Home」还会跳出控制台回落地页。现在:
- 新增
_layout/_authed/home.tsx:登录即可见、零权限要求——欢迎语(带用户名)、标语、特性卡,词条全部就位,按提示改成你自己的首页即可 - 「进入控制台」、侧栏「Home」、forbidden 的「返回首页」全部指向
/home - 营销落地页继续独占
/
新增:错误边界成体系
- 路由级默认边界:
createRouter带上defaultErrorComponent/defaultNotFoundComponent——你新增的业务页出错时,错误渲染在页面自己的位置、侧栏保持在位,不必每页手动挂errorComponent(某页要定制时显式声明依然优先) SectionBoundary(新组件):包住页面里的一个区块,渲染抛错只替换该区块,兄弟区块照常;默认 fallback 词条化 + 重试,可自定义- 静态兜底:错误页自身再抛错时(唯一出场时机),白屏降级为零依赖的静态提示,而不是整树卸载
改进:表格工具条
刷新 / 导出 / 密度 / 列 / 排序 / 筛选六颗图标钮都有了 tooltip。刷新的语义顺带说明:带条件刷新(对当前查询含筛选重新请求),重置在筛选面板的 Reset 上。
升级
bun add @jcoder-stack/abp-react@0.1.3
bun add -D @jcoder-stack/cli@0.1.3 @jcoder-stack/registry@0.1.3已初始化的项目按需取块的新版本(会覆盖你对块文件的本地改动,注意先提交):
npx shadcn@4.13 add node_modules/@jcoder-stack/registry/public/r/app-shell.json --overwrite
npx shadcn@4.13 add node_modules/@jcoder-stack/registry/public/r/data-table.json --overwritecombobox 修复在主题 css 里——已有项目在 src/styles.css 追加上面那条 [data-slot="combobox-content"] 规则即可,或整体替换为新版 app-theme.css。router 的默认边界两行参照 README 的 router 说明手动加上(init 只在初始化时接线)。