@@ -267,6 +270,7 @@ import {
} from '@ant-design/icons-vue';
import {goHomeRoute, cleanPageTabs} from '@/utils/page-tab-util';
import {login, loginBySms, getCaptcha} from '@/api/passport/login';
+import QrLogin from '@/components/QrLogin/index.vue';
import {User} from '@/api/system/user/model';
import {TEMPLATE_ID, THEME_STORE_NAME} from '@/config/setting';
@@ -521,6 +525,20 @@ const onScan = () => {
}
}
+/* 二维码登录成功处理 */
+const onQrLoginSuccess = (token: string) => {
+ // 设置token到localStorage或其他存储
+ localStorage.setItem('access_token', token);
+ message.success('扫码登录成功');
+ cleanPageTabs();
+ goHome();
+};
+
+/* 二维码登录错误处理 */
+const onQrLoginError = (error: string) => {
+ message.error(error || '扫码登录失败');
+};
+
// const goBack = () => {
// openUrl(getDomain());
// return;
diff --git a/src/views/passport/qrConfirm/index.vue b/src/views/passport/qrConfirm/index.vue
new file mode 100644
index 0000000..9ce819f
--- /dev/null
+++ b/src/views/passport/qrConfirm/index.vue
@@ -0,0 +1,371 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ userInfo.nickname || userInfo.username }}
+
{{ userInfo.phone || userInfo.mobile }}
+
+
+
+
+
+
+ 登录设备:
+ {{ deviceInfo.browser }} {{ deviceInfo.version }}
+
+
+ 操作系统:
+ {{ deviceInfo.os }}
+
+
+ IP地址:
+ {{ deviceInfo.ip }}
+
+
+ 登录时间:
+ {{ formatTime(new Date()) }}
+
+
+
+
+
+
+
+
+
+ 请确认是您本人操作,如非本人操作请点击"取消登录"
+
+
+
+
+
+
+
+
diff --git a/src/views/test/qrLoginTest.vue b/src/views/test/qrLoginTest.vue
new file mode 100644
index 0000000..fc0e80a
--- /dev/null
+++ b/src/views/test/qrLoginTest.vue
@@ -0,0 +1,323 @@
+
+
+
+
+
+
+
+
+ 生成二维码
+
+
+
+ {{ qrCodeData.token }}
+ {{ qrCodeData.qrCode }}
+ {{ qrCodeData.expiresIn }}秒
+
+
+
+
+
+
+
+
+
+
+
+ 检查状态
+
+
+
+
+
+
+
+ {{ getStatusText(statusData.status) }}
+
+
+
+ {{ statusData.expiresIn }}秒
+
+
+ {{ statusData.accessToken.substring(0, 50) }}...
+
+
+
+
+
+
+
+
+ 模拟扫码
+
+
+
+
+
+
+
+
+ 确认登录
+
+
+
+
+
+
+
+
+ {{ log.time }}
+ {{ log.message }}
+
+
+
+
+
+
+
+
+
+
+
+