mateclaw/mateclaw-ui/src
matevip b4aef56c89 fix(channels): close QR loading dead-window for feishu and dingtalk register flows
Reported issue: click 'scan to create' -> button momentarily flickers
loading -> button re-enables but no QR shows up -> blank for 1-2 seconds
-> QR suddenly appears. Looks broken even though it works.

Root cause: loading.value flipped back to false the moment the begin HTTP
call returned (sessionId in hand), but the actual QR image only arrives on
the first status poll, which the existing code waited a full 2 seconds
for. Between begin completing and the first poll firing the UI was a
disabled button + nothing.

Three coordinated changes:
- useFeishuAppRegister and useDingTalkAppRegister: keep loading.value true
  through begin AND across the polls, only flip false when the QR image
  is actually populated (or a terminal failure status arrives). Also run
  an immediate first poll right after begin instead of waiting for the
  setInterval tick — usually the first poll already has the rendered QR
  for dingtalk, and pushes the feishu user roughly 2 seconds closer.
- ChannelEditModal: same-sized loading placeholder (min-height 240px,
  matching the QR card) that renders when loading is true and no QR is
  in hand. CSS spinner ring tinted with the channel brand color (feishu
  indigo, dingtalk blue) and a new
  channels.{feishu,dingtalk}Register.qrcodeLoading hint. The placeholder
  swaps to the real image with no layout shift.
- i18n: new qrcodeLoading key in zh-CN and en-US for both flows.

Net effect: click to spinner-visible is ~50ms; the user is never staring
at a frozen button-without-content again.
2026-04-28 11:14:14 +08:00
..
api feat(dingtalk): one-click bot creation via OAuth device flow 2026-04-28 11:12:22 +08:00
assets fix(ui): code-block light-mode theme + cap header height at 38px 2026-04-26 19:09:10 +08:00
components fix(channels): close QR loading dead-window for feishu and dingtalk register flows 2026-04-28 11:14:14 +08:00
composables fix(channels): close QR loading dead-window for feishu and dingtalk register flows 2026-04-28 11:14:14 +08:00
i18n fix(channels): close QR loading dead-window for feishu and dingtalk register flows 2026-04-28 11:14:14 +08:00
router perf(channels): split Channels.vue, lazy-load modal, async locales, keep-alive route 2026-04-28 11:08:36 +08:00
stores feat(wiki): PR-8 frontend protection badges + delete-button gating 2026-04-25 19:02:32 +08:00
types feat(feishu): default connection to WebSocket and hide webhook UI when unused 2026-04-28 11:09:17 +08:00
utils perf(channels): split Channels.vue, lazy-load modal, async locales, keep-alive route 2026-04-28 11:08:36 +08:00
views perf(channels): split Channels.vue, lazy-load modal, async locales, keep-alive route 2026-04-28 11:08:36 +08:00
App.vue fix(i18n): dynamically set window title from language pack instead of hardcoding 2026-04-05 16:34:15 +08:00
main.ts fix(security): login rate limiting, SQL injection fix, error boundary 2026-04-11 18:31:51 +08:00
vite-env.d.ts Initial commit: MateClaw — Java + Vue 3 AI Assistant System 2026-04-04 19:03:49 +08:00