Commit Graph
19 Commits
Author SHA1 Message Date
kongkx c987d9c0b1 feat(locale): complete admin locale management 2026-09-11 22:49:01 +08:00
kongkx d8f8071bc2 chore(api): regenerate admin contract types 2026-09-10 20:17:03 +08:00
kongkx ecdbf4d768 feat(studio): manage article plans 2026-09-10 14:17:30 +08:00
kongkx 6d34238e34 feat(studio): manage content subtopics 2026-09-10 13:49:04 +08:00
kongkx c84fc90c3d feat(filex): add admin event monitoring 2026-09-09 22:36:22 +08:00
kongkx 96baec165c feat(exc): complete monitoring details 2026-09-09 10:34:48 +08:00
kongkx 0a3378afae fix(categories): align taxonomy moderation 2026-09-08 20:32:27 +08:00
kongkx c2dec1e711 fix(sid): harden admin assignment flow 2026-09-08 13:01:41 +08:00
kongkxandClaude Opus 5 78c28ed1bd feat(resume): admin bulk resume import
Adds the dashboard surface for the backend's /api/admin/v1/resume/import-batches
endpoints, and the multipart support it needed.

Client:
- rawRequest passes a FormData body through untouched and skips Content-Type,
  so the browser sets multipart/form-data *with the boundary*. Setting it by
  hand stripped the boundary and the server saw an empty upload — verified
  against the backend: 202 with the fix, 422 VALIDATION_ERROR without it.
  This was the first admin endpoint in the codebase to accept a file.
- New api.upload(). fetch reports no upload progress, so upload UI stays
  indeterminate rather than faking a percentage.

UI (/resume/import-batches, gated on admin:resume:read; writes on :manage):
- Upload dialog with countryCode and dry-run checked by default — seeing the
  collision report before creating accounts is almost always what you want.
- Detail sheet polls every 2s and stops once the batch is terminal. Clickable
  count tiles filter the per-resume report; step statuses surface `命中缓存` /
  `复用结果` so the dedup is visible.
- Confirm a dry run, retry failed rows, and resolve a missing contact.
  IMPORT_IDENTITY_TAKEN is shown inline — a collision is expected input, not
  an error toast.
- progress.total is 0 until unpacking finishes, so both views render 准备中…
  rather than "0 / 0", which would read as an empty batch.

types.gen.ts regenerated from the backend's admin spec.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-08-24 23:21:15 +08:00
kongkx 1a5489a361 feat(users): integrate user info and services APIs into 3-tab detail panel with proper padding 2026-08-12 00:35:59 +08:00
kongkx 04c12ad340 feat(users): add user admin section and delegate login authorization to API 2026-08-10 23:04:41 +08:00
kongkxandClaude Fable 5 46056ae4b0 feat(auth): wire permission gating through menu, routes and actions
The store's can()/useCan() helpers existed but were unused. Now:
- src/auth/permissions.ts PERM catalog mirrors backend keys
- every nav item carries a permission; sidebar filter reuses can()
- requirePermission() beforeLoad guard on all child routes (direct URLs
  redirect home when the session lacks the key)
- useCan() hides/disables mutation buttons: moderation actions,
  retranslate, robot-author edit/pause, category + locale CRUD, and the
  reserved-SID assign path (admin:sid:override hint)
- 403 responses toast 无权限执行此操作; can() unit tests added

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-12 06:42:31 +08:00
kongkxandClaude Fable 5 ddf07bbf58 feat(exc): 专长交易 read-only monitoring pages
New nav group with four pages against the Exc admin API:
- /exc/demands — status/mode filters, detail sheet with related
  services, quotes and dispatch rounds
- /exc/dispatches — status/round filters
- /exc/orders — status/payment filters, detail sheet with items and
  状态流转 audit trail
- /exc/providers — status/verified filters, detail sheet with dispatch
  settings and status logs

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-11 14:54:58 +08:00
kongkxandClaude Fable 5 f5a7249969 feat(moderation): resource-centric reported comments/events pages
Rework 内容审核 pages around reported resources instead of individual
reports, matching the new backend endpoints: rows group all reports on
one comment/event, with a slide-over listing report details and
per-row actions 通过并屏蔽 (approve) / 驳回举报 (reject) / 撤销屏蔽
(revert). Filters: 待处理 / 已屏蔽 / 全部.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-11 14:20:37 +08:00
kongkxandClaude Fable 5 999d5353fd feat(moderation): comment/event report and dimzou translation pages
New 内容审核 nav group covering the remaining admin API groups:
- /comment-reports — status filter; hide/delete comment or dismiss
- /event-reports — status filter; hide/delete/resolve/dismiss
- /dimzou-translations — language/status filters, draft block progress,
  requeue machine translation

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-11 13:28:28 +08:00
kongkx ebe7665620 feat(studio): reflect account-voice / series-scope field split
Robot-author edit form and detail drop positioning/target_readers (now
series-level); persona + styles stay (routed to the account profile via the
admin API). Series detail shows positioning/target_readers. Types updated;
admin API types regenerated.
2026-07-11 08:42:39 +08:00
kongkx 9c308c28da feat(studio/articles): show drafting_model (LLM used for draft)
Adds drafting_model to the article type and surfaces it in the detail sheet
(provider / model line + raw JSON block). Regenerates admin API types.
2026-07-08 22:33:22 +08:00
kongkx 61cb549e72 feat(studio): authors/series/articles/subtopics/briefs/style-presets + agent tokens (show-once) 2026-07-07 22:30:27 +08:00
kongkx 95a3dee29f feat: admin OpenAPI type generation (gen:api) + envelope/entity types 2026-07-07 22:07:05 +08:00