feat: 设置页新增分区目录导航并支持 URL 锚点,统计面板图表点击跳转可关闭

设置页由单一长列表改为「目录 + 分区」结构:桌面左侧吸附目录、小屏/平板顶部横向条目条,点击可平滑定位并同步 URL 锚点(支持 /settings#<slug> 深链与浏览器前进后退);同时为统计面板图表补充用户级「点击跳转明细」开关(默认开启),面板与设置页两处入口实时联动。

变更内容:
- 设置页目录导航:Settings.vue 分区 slug 化,点击 push / 滚动 replace 同步 URL,显式跳转期间暂停滚动联动并用 ResizeObserver 持续对齐、用户主动滚动后解除;修复悬停样式覆盖高亮、并让选中项自动滚入视野;Layout.vue 在 route.hash 非空时跳过滚动位置恢复;router 对同路径纯 hash 变更提前放行;messages.ts 新增目录三语文案。
- 统计面板图表点击开关:后端新增用户级偏好 `chartClickNavigation`(DTO/Controller/Service,未配置默认开启);前端共享 composable `useChartClickNavigation`;Dashboard.vue 增加关闭守卫、提示显隐与光标联动及面板快捷开关;DisplayConfigPanel.vue 新增开关;messages.ts 新增三语文案。
- 说明:复用通用键值表 t_user_preference,不改动建表脚本与实体/Mapper;未配置默认开启,老用户无感知。
This commit is contained in:
2026-10-13 17:42:08 +08:00
parent 4aeeaac94f
commit bfd314a38e
12 changed files with 627 additions and 18 deletions
+5
View File
@@ -125,6 +125,11 @@ const router = createRouter({
// 全局前置守卫:优先校验数据库配置,再校验登录状态
router.beforeEach(async (to, _from, next) => {
// 仅 hash/query 变化(路径不变)时无需重复执行数据库与登录校验,直接放行
if (to.path === _from.path) {
next()
return
}
const databaseStore = useDatabaseStore()
// 首次进入时从后端加载数据库配置状态
if (!databaseStore.loaded) {