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]>
- /roles — role table with create dialog and a permission-matrix sheet:
collapsible per-module sections (selected/total counts, role's own
modules start expanded) and a key/description filter that force-
expands matches; super-admin role is read-only
- /admin-users — user search (Enter to run) with role assignment
dialog; editing your own roles is blocked
Both nav items gate on auth:role:* keys, which only super-admin holds.
Co-Authored-By: Claude Fable 5 <[email protected]>
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]>
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]>
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]>
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.
- searchable CategoryPicker (Popover+Command) reusable across studio pages,
plus useCategoryOptions hook (shared tree query + id→name resolver)
- filter bar with category + status filters and a reset action
- new columns: account (avatar + display_name + uid), category name; persona
demoted to a secondary column; display_name/category surfaced in detail sheet