支持864登录二维码切换与退出重登
This commit is contained in:
@@ -476,6 +476,61 @@ def api_login_qr_status():
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
|
||||
@robot_bp.route('/api/login_qr_mode', methods=['POST'])
|
||||
@login_required
|
||||
def api_switch_login_qr_mode():
|
||||
"""切换 864 登录二维码模式,并重启登录流程。"""
|
||||
try:
|
||||
server = current_app.dashboard_server
|
||||
robot = getattr(server, "robot", None)
|
||||
if robot is None:
|
||||
return jsonify({"success": False, "error": "机器人实例不可用"}), 500
|
||||
|
||||
payload = request.get_json(silent=True) or {}
|
||||
login_qr_api = str(payload.get("login_qr_api", "") or "").strip()
|
||||
login_way = str(payload.get("login_way", "") or "").strip()
|
||||
result = robot.switch_server_864_login_entry(
|
||||
login_qr_api=login_qr_api,
|
||||
login_way=login_way or None,
|
||||
do_logout=True,
|
||||
)
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"message": "864 登录二维码模式已切换,新的登录线程正在启动",
|
||||
"data": {
|
||||
**result,
|
||||
"login_qr_state": _serialize_login_qr_state(server),
|
||||
},
|
||||
})
|
||||
except Exception as e:
|
||||
LOG.error(f"切换 864 登录二维码模式失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
|
||||
@robot_bp.route('/api/logout_864', methods=['POST'])
|
||||
@login_required
|
||||
def api_logout_864():
|
||||
"""退出当前 864 登录态,并重新进入二维码登录引导。"""
|
||||
try:
|
||||
server = current_app.dashboard_server
|
||||
robot = getattr(server, "robot", None)
|
||||
if robot is None:
|
||||
return jsonify({"success": False, "error": "机器人实例不可用"}), 500
|
||||
|
||||
result = robot.logout_server_864_and_restart_login()
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"message": "864 已退出当前登录态,新的二维码登录流程正在启动",
|
||||
"data": {
|
||||
**result,
|
||||
"login_qr_state": _serialize_login_qr_state(server),
|
||||
},
|
||||
})
|
||||
except Exception as e:
|
||||
LOG.error(f"退出 864 登录态失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
|
||||
# API路由
|
||||
@robot_bp.route('/api/groups')
|
||||
@login_required
|
||||
|
||||
@@ -187,6 +187,28 @@
|
||||
</div>
|
||||
<div class="login-qr-dialog__actions">
|
||||
<el-button size="mini" @click="loadLoginQrStatus(true)">立即刷新状态</el-button>
|
||||
<el-button
|
||||
v-if="isServer864Login"
|
||||
size="mini"
|
||||
:loading="loginQrActionLoading === 'harmony_api'"
|
||||
@click="switch864LoginMode('harmony_api', 'harmony')">
|
||||
鸿蒙二维码
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="isServer864Login"
|
||||
size="mini"
|
||||
:loading="loginQrActionLoading === 'new'"
|
||||
@click="switch864LoginMode('new')">
|
||||
标准New二维码
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="isServer864Login"
|
||||
size="mini"
|
||||
type="danger"
|
||||
:loading="loginQrActionLoading === 'logout_864'"
|
||||
@click="logout864Login">
|
||||
退出864登录
|
||||
</el-button>
|
||||
<el-button v-if="loginQrCurrent.scan_url" type="text" @click="copyLoginQrScanUrl">
|
||||
复制扫码链接
|
||||
</el-button>
|
||||
@@ -586,6 +608,7 @@
|
||||
server_now: 0
|
||||
},
|
||||
loginQrCountdownSeconds: 0,
|
||||
loginQrActionLoading: '',
|
||||
groups: [],
|
||||
selectedGroupForHourlyTrend: '',
|
||||
hourlyTrendDays: 1,
|
||||
@@ -622,6 +645,10 @@
|
||||
loginQrCurrent() {
|
||||
return this.loginQrDialog.current || {};
|
||||
},
|
||||
isServer864Login() {
|
||||
const providerName = String(this.loginQrDialog.provider_name || '').trim().toLowerCase();
|
||||
return providerName === 'server_864' || providerName === '864';
|
||||
},
|
||||
showLoginQrBanner() {
|
||||
return !this.loginQrDialog.logged_in;
|
||||
},
|
||||
@@ -971,6 +998,63 @@
|
||||
this.loginQrDialog.loading = false;
|
||||
});
|
||||
},
|
||||
switch864LoginMode(loginQrApi, loginWay = '') {
|
||||
if (!this.isServer864Login) {
|
||||
this.$message.warning('当前不是 864 登录模式,暂不支持切换二维码入口');
|
||||
return;
|
||||
}
|
||||
this.loginQrActionLoading = loginQrApi;
|
||||
axios.post('/robot/api/login_qr_mode', {
|
||||
login_qr_api: loginQrApi,
|
||||
login_way: loginWay
|
||||
})
|
||||
.then(response => {
|
||||
if (response.data.success) {
|
||||
const state = (((response.data || {}).data || {}).login_qr_state) || {};
|
||||
if (state && Object.keys(state).length > 0) {
|
||||
this.applyLoginQrState(state);
|
||||
}
|
||||
this.$message.success(response.data.message || '864 登录二维码入口已切换');
|
||||
setTimeout(() => this.loadLoginQrStatus(true), 1200);
|
||||
return;
|
||||
}
|
||||
this.$message.error(response.data.error || '切换 864 登录二维码入口失败');
|
||||
})
|
||||
.catch(error => {
|
||||
const errorMessage = (((error || {}).response || {}).data || {}).error || '切换 864 登录二维码入口失败';
|
||||
this.$message.error(errorMessage);
|
||||
})
|
||||
.finally(() => {
|
||||
this.loginQrActionLoading = '';
|
||||
});
|
||||
},
|
||||
logout864Login() {
|
||||
if (!this.isServer864Login) {
|
||||
this.$message.warning('当前不是 864 登录模式,暂不支持此操作');
|
||||
return;
|
||||
}
|
||||
this.loginQrActionLoading = 'logout_864';
|
||||
axios.post('/robot/api/logout_864')
|
||||
.then(response => {
|
||||
if (response.data.success) {
|
||||
const state = (((response.data || {}).data || {}).login_qr_state) || {};
|
||||
if (state && Object.keys(state).length > 0) {
|
||||
this.applyLoginQrState(state);
|
||||
}
|
||||
this.$message.success(response.data.message || '864 已退出当前登录态');
|
||||
setTimeout(() => this.loadLoginQrStatus(true), 1200);
|
||||
return;
|
||||
}
|
||||
this.$message.error(response.data.error || '退出 864 登录态失败');
|
||||
})
|
||||
.catch(error => {
|
||||
const errorMessage = (((error || {}).response || {}).data || {}).error || '退出 864 登录态失败';
|
||||
this.$message.error(errorMessage);
|
||||
})
|
||||
.finally(() => {
|
||||
this.loginQrActionLoading = '';
|
||||
});
|
||||
},
|
||||
tickLoginQrCountdown() {
|
||||
if (this.loginQrDialog.logged_in) {
|
||||
this.loginQrCountdownSeconds = 0;
|
||||
|
||||
Reference in New Issue
Block a user