|
@@ -17,6 +17,7 @@
|
|
|
border: 1px dashed #ccc; border-radius: 8px; display: none; margin-bottom: 8px; }
|
|
border: 1px dashed #ccc; border-radius: 8px; display: none; margin-bottom: 8px; }
|
|
|
hr { border: none; border-top: 1px solid #eee; margin: 14px 0; }
|
|
hr { border: none; border-top: 1px solid #eee; margin: 14px 0; }
|
|
|
#status { margin-top: 10px; font-size: 12px; color: #999; }
|
|
#status { margin-top: 10px; font-size: 12px; color: #999; }
|
|
|
|
|
+ #wechat-qr { display: none; width: 180px; height: 180px; margin: 8px auto 0; }
|
|
|
</style>
|
|
</style>
|
|
|
</head>
|
|
</head>
|
|
|
<body>
|
|
<body>
|
|
@@ -39,7 +40,8 @@
|
|
|
|
|
|
|
|
<label>微信登录</label>
|
|
<label>微信登录</label>
|
|
|
<button id="wechat-login">微信扫码登录</button>
|
|
<button id="wechat-login">微信扫码登录</button>
|
|
|
- <div class="hint">用微信扫码,自动与小程序账号同步登录(无需手动填令牌)</div>
|
|
|
|
|
|
|
+ <div class="hint">点击后出现小程序码,用微信扫码并在小程序内确认,即可自动与小程序账号同步登录(无需手动填令牌)</div>
|
|
|
|
|
+ <img id="wechat-qr" alt="小程序码" />
|
|
|
|
|
|
|
|
<div id="status"></div>
|
|
<div id="status"></div>
|
|
|
<script>
|
|
<script>
|
|
@@ -130,12 +132,28 @@
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
document.getElementById('wechat-login').addEventListener('click', function () {
|
|
document.getElementById('wechat-login').addEventListener('click', function () {
|
|
|
- setStatus('正在打开微信登录…');
|
|
|
|
|
|
|
+ setStatus('正在获取小程序码…');
|
|
|
invoke('start_wechat_login').then(function () {
|
|
invoke('start_wechat_login').then(function () {
|
|
|
- setStatus('请用微信扫码,完成后自动登录');
|
|
|
|
|
|
|
+ setStatus('请用微信扫码并在小程序内确认');
|
|
|
}).catch(function (e) { setStatus('发起登录失败:' + e); });
|
|
}).catch(function (e) { setStatus('发起登录失败:' + e); });
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+ // Rust 获取到小程序码后由 emit 推送
|
|
|
|
|
+ try {
|
|
|
|
|
+ window.__TAURI__.event.listen('pet://wechat-qr', function (ev) {
|
|
|
|
|
+ var p = (ev && ev.payload) || {};
|
|
|
|
|
+ var img = document.getElementById('wechat-qr');
|
|
|
|
|
+ if (p.qrImage) {
|
|
|
|
|
+ img.src = p.qrImage;
|
|
|
|
|
+ img.style.display = 'block';
|
|
|
|
|
+ setStatus('请用微信扫码并在小程序内确认');
|
|
|
|
|
+ } else {
|
|
|
|
|
+ img.style.display = 'none';
|
|
|
|
|
+ setStatus('(测试模式)已生成登录状态:请在已登录的小程序内访问扫码登录接口确认');
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ } catch (e) { /* event API 不可用时忽略 */ }
|
|
|
|
|
+
|
|
|
// 后台轮询任务完成后由 Rust 侧 emit
|
|
// 后台轮询任务完成后由 Rust 侧 emit
|
|
|
try {
|
|
try {
|
|
|
window.__TAURI__.event.listen('pet://wechat-login', function (ev) {
|
|
window.__TAURI__.event.listen('pet://wechat-login', function (ev) {
|
|
@@ -143,14 +161,17 @@
|
|
|
if (p.status === 'success') {
|
|
if (p.status === 'success') {
|
|
|
setStatus('登录成功' + (p.nickname ? ':' + p.nickname : ''));
|
|
setStatus('登录成功' + (p.nickname ? ':' + p.nickname : ''));
|
|
|
tokenEl.value = '';
|
|
tokenEl.value = '';
|
|
|
|
|
+ document.getElementById('wechat-qr').style.display = 'none';
|
|
|
} else if (p.status === 'pending') {
|
|
} else if (p.status === 'pending') {
|
|
|
setStatus('等待扫码…');
|
|
setStatus('等待扫码…');
|
|
|
} else if (p.status === 'timeout') {
|
|
} else if (p.status === 'timeout') {
|
|
|
setStatus('登录超时,请重试');
|
|
setStatus('登录超时,请重试');
|
|
|
|
|
+ document.getElementById('wechat-qr').style.display = 'none';
|
|
|
} else if (p.status === 'notfound') {
|
|
} else if (p.status === 'notfound') {
|
|
|
setStatus('该微信未绑定小程序账号');
|
|
setStatus('该微信未绑定小程序账号');
|
|
|
} else if (p.status === 'expired') {
|
|
} else if (p.status === 'expired') {
|
|
|
setStatus('二维码已过期,请重试');
|
|
setStatus('二维码已过期,请重试');
|
|
|
|
|
+ document.getElementById('wechat-qr').style.display = 'none';
|
|
|
} else {
|
|
} else {
|
|
|
setStatus('登录失败:' + (p.message || p.status));
|
|
setStatus('登录失败:' + (p.message || p.status));
|
|
|
}
|
|
}
|