feat/vtk-3d-view #7

Merged
gaozheng merged 301 commits from feat/vtk-3d-view into main 2026-06-27 18:43:52 +08:00
3 changed files with 18 additions and 3 deletions
Showing only changes of commit 289b83cd35 - Show all commits

View File

@ -240,7 +240,20 @@ void LoginWindow::refreshCaptcha()
if (l != captchaLoad_) return; // 身份比对:仅处理最新请求 if (l != captchaLoad_) return; // 身份比对:仅处理最新请求
captchaLoad_.clear(); captchaLoad_.clear();
codeId_ = cap.codeId; codeId_ = cap.codeId;
captchaLabel_->setPixmap(renderCaptchaPixmap(cap.code)); // 后端 getImageCode 返回的是 base64 PNG 图data.image直接显示
// 兼容旧明文 code若后端仍回传则用客户端绘制兜底
QPixmap pix;
if (!cap.image.isEmpty()) {
const int comma = cap.image.indexOf(QLatin1Char(',')); // 去 "data:image/png;base64," 前缀
const QByteArray b64 =
(comma >= 0 ? cap.image.mid(comma + 1) : cap.image).toLatin1();
pix.loadFromData(QByteArray::fromBase64(b64));
}
if (pix.isNull() && !cap.code.isEmpty()) pix = renderCaptchaPixmap(cap.code);
captchaLabel_->setPixmap(
pix.isNull() ? pix
: pix.scaled(captchaLabel_->size(), Qt::KeepAspectRatio,
Qt::SmoothTransformation));
refreshBtn_->setEnabled(true); refreshBtn_->setEnabled(true);
}); });
connect(l, &geopro::net::CaptchaLoad::failed, this, [this, l](const QString& msg) { connect(l, &geopro::net::CaptchaLoad::failed, this, [this, l](const QString& msg) {

View File

@ -29,6 +29,7 @@ CaptchaLoad::CaptchaLoad(IApiCall* call, QObject* parent) : QObject(parent), cal
AuthService::Captcha cap; AuthService::Captcha cap;
cap.codeId = resp.data.value(QStringLiteral("id")).toString(); cap.codeId = resp.data.value(QStringLiteral("id")).toString();
cap.code = resp.data.value(QStringLiteral("code")).toString(); cap.code = resp.data.value(QStringLiteral("code")).toString();
cap.image = resp.data.value(QStringLiteral("image")).toString(); // 实际验证码图base64 data URL
aborted_ = true; // 终态置位:到达 done 终态后 abort() 早退 aborted_ = true; // 终态置位:到达 done 终态后 abort() 早退
emit done(cap); emit done(cap);
deleteLater(); deleteLater();

View File

@ -17,10 +17,11 @@ class AuthService {
public: public:
AuthService(ApiClient& api, std::string rsaPublicKeyPem); AuthService(ApiClient& api, std::string rsaPublicKeyPem);
// 验证码:服务端把答案明文回传data.code答案 + data.id 用于下一步校验 // 验证码:服务端返回 data.id + data.imagebase64 PNG 图用户照图输入data.code 已不返回
struct Captcha { struct Captcha {
QString codeId; QString codeId;
QString code; QString code; // 旧字段(后端已不返回明文,保留兼容)
QString image; // data URL base64 PNG后端 getImageCode 实际返回的验证码图)
}; };
// 异步拉验证码GET getImageCode返回句柄连 CaptchaLoad::done(Captcha)/failed(QString)。 // 异步拉验证码GET getImageCode返回句柄连 CaptchaLoad::done(Captcha)/failed(QString)。