Skip to content

[v0.1.268] 版本标签与 Update Now 点击后跳转首页 #1949

Description

@smartcmd

问题描述

TokenRouter v0.1.268 的管理端顶部版本入口存在交互回归:

  • 点击版本标签(例如 v0.1.268)会跳转到 /home,升级弹窗无法正常打开。
  • 通过控制台临时打开升级弹窗后,点击 Update Now 仍会跳转到 /home

受影响版本:v0.1.268
已修复版本:v0.1.269

复现步骤

  1. 以管理员身份进入管理端。
  2. 点击顶部品牌名称下方的版本标签。
  3. 页面跳转到首页,而不是仅打开版本升级弹窗。
  4. 即使临时打开弹窗,点击 Update Now 也会触发相同跳转。

原因

v0.1.268AppHeader.vue 使用指向 /homerouter-link 包裹了整个品牌区域,其中还包含 VersionBadge 及其内部按钮。

版本标签和 Update Now 的点击事件会继续冒泡到外层 router-link,因此 Vue Router 接管点击并跳转首页。该结构同时形成了链接内嵌交互按钮的问题。

修复

v0.1.269 已将品牌图标、品牌名称链接与 VersionBadge 拆分,版本组件不再位于首页链接内部。

相关修复提交:633ad349f

v0.1.268 临时解决方案

先在浏览器控制台执行以下代码打开升级弹窗:

(() => {
  const button = [...document.querySelectorAll('header button, button')].find((el) =>
    /^v?\d+(?:\.\d+){2}\b/.test((el.textContent || '').replace(/\s+/g, ' ').trim())
  )

  if (!button) {
    console.warn('未找到版本按钮:请确认当前账号是管理员,并等待页面加载完成。')
    return
  }

  const root = button.closest('.relative')
  const isOpen = () => Boolean(root?.querySelector('div.absolute'))

  if (!isOpen()) {
    // 先让 Vue 打开弹窗,再阻止旧版首页链接继续跳转。
    button.addEventListener(
      'click',
      (event) => {
        event.preventDefault()
        event.stopPropagation()
      },
      { once: true }
    )
    button.click()
  }

  setTimeout(() => {
    if (!isOpen()) {
      // 兜底调用 Vue 组件方法。
      const vm = button.__vueParentComponent?.ctx
      if (typeof vm?.toggleDropdown === 'function') vm.toggleDropdown()
    }

    console.info(isOpen() ? '升级弹窗已打开' : '弹窗仍未打开')
  }, 0)
})()

弹窗出现后,再执行以下代码:

(() => {
  const button = [...document.querySelectorAll('button')].find((el) => {
    const text = (el.textContent || '').replace(/\s+/g, ' ').trim().toLowerCase()
    return /^(update now|||)/.test(text) &&
      el.getClientRects().length > 0
  })

  if (!button) {
    console.warn('未找到 Update Now 按钮,请先打开版本升级弹窗。')
    return
  }

  // 让 Vue 的升级逻辑先执行,再阻止旧版首页链接接管点击。
  button.addEventListener(
    'click',
    (event) => {
      event.preventDefault()
      event.stopPropagation()
    },
    { once: true }
  )

  console.info('已修复本次点击,现在点击 Update Now 即可升级。')
})()

最后手动点击一次 Update Now。升级过程中不要重复点击。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions