@@ -620,6 +621,16 @@
showLoginQrBanner() {
return !this.loginQrDialog.logged_in;
},
+ shouldShowLoginQrDialog() {
+ // 首页登录弹窗的展示规则尽量简单且稳定:
+ // 1. 只要当前还没登录成功,就必须强制显示二维码弹窗,避免前端局部状态抖动把弹窗意外关掉;
+ // 2. 登录成功后再退回到本地 visible 控制,兼容后续如果需要保留“手动再次查看”的空间;
+ // 3. 这样能直接满足“没有可用账号,就一直要求扫码登录”的目标,不再依赖多处代码同步开关。
+ if (!this.loginQrDialog.logged_in) {
+ return true;
+ }
+ return !!this.loginQrDialog.visible;
+ },
loginQrStatusTone() {
if (this.loginQrDialog.provider_stage === 'connection_pending') {
return 'soft';
@@ -882,6 +893,17 @@
openLoginQrDialog() {
this.loginQrDialog.visible = true;
},
+ handleLoginQrDialogVisibleChange(nextVisible) {
+ // 未登录时弹窗不允许被真正关闭:
+ // 1. Element UI 仍可能在内部触发 `update:visible` 事件;
+ // 2. 如果这里直接接受 false,就会再次出现“业务要求必须常驻,但组件自己收起”的问题;
+ // 3. 因此只有在已登录成功后,才允许同步关闭状态。
+ if (!this.loginQrDialog.logged_in) {
+ this.loginQrDialog.visible = true;
+ return;
+ }
+ this.loginQrDialog.visible = !!nextVisible;
+ },
applyLoginQrState(state) {
const nextState = state || {};
const current = nextState.current || {};