feat(ECR-009): Ops-D order filters, plan display prices, refund status

LOOP-RUN-002 sample: admin order multi-filter, membership display
price catalog, read-only refund_status. No real payment or RBAC.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
jackyu66git
2026-08-07 02:45:32 +08:00
co-authored by Cursor
parent 7ab9add5dd
commit ca3b13554c
37 changed files with 2169 additions and 25 deletions
+29 -3
View File
@@ -112,8 +112,25 @@ export const adminApi = {
request<{ ok: boolean; ask_paid_quota_left: number }>('POST', `/users/${id}/ask-quota/grant`, {
delta,
}),
orders: () =>
request<{
orders: (params?: {
status?: string
kind?: string
from?: string
to?: string
user_id?: string
limit?: number
offset?: number
}) => {
const q = new URLSearchParams()
if (params?.status) q.set('status', params.status)
if (params?.kind) q.set('kind', params.kind)
if (params?.from) q.set('from', params.from)
if (params?.to) q.set('to', params.to)
if (params?.user_id) q.set('user_id', params.user_id)
if (params?.limit != null) q.set('limit', String(params.limit))
if (params?.offset != null) q.set('offset', String(params.offset))
const qs = q.toString()
return request<{
items: Array<{
id: string
user_id: string
@@ -121,9 +138,18 @@ export const adminApi = {
plan?: string
amount_cents: number
status: string
refund_status: string
created_at: string
}>
}>('GET', '/orders'),
}>('GET', `/orders${qs ? `?${qs}` : ''}`)
},
planPrices: () =>
request<{ items: Array<{ plan: string; display_cents: number; updated_at: string }> }>(
'GET',
'/membership/plan-prices',
),
savePlanPrices: (items: Array<{ plan: string; display_cents: number }>) =>
request<{ ok: boolean }>('PUT', '/membership/plan-prices', { items }),
audit: () =>
request<{
items: Array<{