feat(admin): 补齐管理员账号与客服运营长尾页

This commit is contained in:
yml2213
2026-10-30 16:16:37 +08:00
parent a54680f59a
commit a39a504b81
10 changed files with 2482 additions and 5 deletions
+211
View File
@@ -59,6 +59,25 @@ import type {
AdminSupportGroup,
AdminSupportGroupPayload,
AdminSupportMember,
AdminStaffAccount,
AdminStaffAccountPage,
AdminStaffAccountQuery,
AdminStaffCreatePayload,
AdminStaffUpdatePayload,
AdminManualEntry,
AdminManualEntryAgentStat,
AdminManualEntryOption,
AdminManualEntryOptions,
AdminManualEntryPage,
AdminManualEntryPayload,
AdminManualEntryQuery,
AdminQuickReply,
AdminQuickReplyPayload,
AdminTrackingLink,
AdminTrackingLinkPage,
AdminTrackingLinkPayload,
AdminTrackingLinkQuery,
AdminTrackingOverview,
AdminSyncSiteAccountsPayload,
AdminSyncSiteAccountsResult,
AdminSystemConfig,
@@ -1082,6 +1101,198 @@ export async function assignAdminSupportGroupMembers(id: number, memberIds: numb
})
}
export async function fetchAdminStaffAccounts(query: AdminStaffAccountQuery = {}) {
const { data } = await adminClient.get<ApiResponse<Partial<AdminStaffAccountPage>>>(
'/admin/admin-users',
{ params: compactParams(query) }
)
return {
items: data.data.items ?? [],
total: data.data.total ?? 0,
page: data.data.page ?? query.page ?? 1,
page_size: data.data.page_size ?? query.page_size ?? 20,
}
}
export async function fetchAdminStaffAccount(id: number) {
const { data } = await adminClient.get<ApiResponse<AdminStaffAccount>>(
`/admin/admin-users/${id}`
)
return data.data
}
export async function createAdminStaffAccount(payload: AdminStaffCreatePayload) {
const { data } = await adminClient.post<ApiResponse<AdminStaffAccount>>(
'/admin/admin-users',
payload
)
return data.data
}
export async function updateAdminStaffAccount(id: number, payload: AdminStaffUpdatePayload) {
const { data } = await adminClient.put<ApiResponse<AdminStaffAccount>>(
`/admin/admin-users/${id}`,
payload
)
return data.data
}
export async function deleteAdminStaffAccount(id: number) {
await adminClient.delete(`/admin/admin-users/${id}`)
}
export async function assignAdminStaffRoles(id: number, roleIds: number[]) {
await adminClient.put(`/admin/admin-users/${id}/roles`, { role_ids: roleIds })
}
export async function resetAdminStaffPassword(id: number, newPassword: string) {
await adminClient.put(`/admin/admin-users/${id}/password`, { new_password: newPassword })
}
export async function fetchAdminManualEntries(query: AdminManualEntryQuery = {}) {
const { data } = await adminClient.get<ApiResponse<Partial<AdminManualEntryPage>>>(
'/admin/manual-entries',
{ params: compactParams(query) }
)
return {
items: data.data.items ?? [],
total: data.data.total ?? 0,
page: data.data.page ?? query.page ?? 1,
page_size: data.data.page_size ?? query.page_size ?? 20,
}
}
export async function createAdminManualEntry(payload: AdminManualEntryPayload) {
const { data } = await adminClient.post<ApiResponse<{ entry: AdminManualEntry }>>(
'/admin/manual-entries',
payload
)
return data.data.entry
}
export async function updateAdminManualEntry(id: number, payload: AdminManualEntryPayload) {
const { data } = await adminClient.put<ApiResponse<AdminManualEntry>>(
`/admin/manual-entries/${id}`,
payload
)
return data.data
}
export async function deleteAdminManualEntry(id: number) {
await adminClient.delete(`/admin/manual-entries/${id}`)
}
export async function fetchAdminManualEntryOptions() {
const { data } = await adminClient.get<ApiResponse<AdminManualEntryOptions>>(
'/admin/manual-entries/options'
)
return {
platforms: data.data?.platforms ?? [],
operators: data.data?.operators ?? [],
}
}
export async function createAdminManualEntryOption(payload: { type: string; name: string }) {
const { data } = await adminClient.post<ApiResponse<AdminManualEntryOption>>(
'/admin/manual-entries/options',
payload
)
return data.data
}
export async function updateAdminManualEntryOption(id: number, name: string) {
const { data } = await adminClient.put<ApiResponse<AdminManualEntryOption>>(
`/admin/manual-entries/options/${id}`,
{ name }
)
return data.data
}
export async function deleteAdminManualEntryOption(id: number) {
await adminClient.delete(`/admin/manual-entries/options/${id}`)
}
export async function fetchAdminManualEntryTodayStats() {
const { data } = await adminClient.get<ApiResponse<AdminManualEntryAgentStat[]>>(
'/admin/manual-entries/today-stats'
)
return data.data ?? []
}
export async function fetchAdminQuickReplies() {
const { data } = await adminClient.get<ApiResponse<AdminQuickReply[]>>(
'/admin/chats/quick-replies'
)
return data.data ?? []
}
export async function createAdminQuickReply(payload: AdminQuickReplyPayload) {
const { data } = await adminClient.post<ApiResponse<AdminQuickReply>>(
'/admin/chats/quick-replies',
payload
)
return data.data
}
export async function updateAdminQuickReply(id: number, payload: AdminQuickReplyPayload) {
const { data } = await adminClient.put<ApiResponse<AdminQuickReply>>(
`/admin/chats/quick-replies/${id}`,
payload
)
return data.data
}
export async function deleteAdminQuickReply(id: number) {
await adminClient.delete(`/admin/chats/quick-replies/${id}`)
}
export async function fetchAdminTrackingLinks(query: AdminTrackingLinkQuery = {}) {
const { data } = await adminClient.get<ApiResponse<Partial<AdminTrackingLinkPage>>>(
'/admin/tracking-links',
{ params: compactParams(query) }
)
return {
items: data.data.items ?? [],
total: data.data.total ?? 0,
page: data.data.page ?? query.page ?? 1,
page_size: data.data.page_size ?? query.page_size ?? 20,
}
}
export async function fetchAdminTrackingOverview() {
const { data } = await adminClient.get<ApiResponse<AdminTrackingOverview>>(
'/admin/tracking-links/overview'
)
return data.data
}
export async function createAdminTrackingLink(payload: AdminTrackingLinkPayload) {
const { data } = await adminClient.post<ApiResponse<AdminTrackingLink>>(
'/admin/tracking-links',
payload
)
return data.data
}
export async function updateAdminTrackingLink(id: number, payload: AdminTrackingLinkPayload) {
const { data } = await adminClient.put<ApiResponse<AdminTrackingLink>>(
`/admin/tracking-links/${id}`,
payload
)
return data.data
}
export async function updateAdminTrackingLinkStatus(id: number, status: string) {
const { data } = await adminClient.put<ApiResponse<AdminTrackingLink>>(
`/admin/tracking-links/${id}/status`,
{ status }
)
return data.data
}
export async function fetchFinanceDisbursements(query: FinanceDisbursementQuery) {
const { data } = await adminClient.get<ApiResponse<Partial<FinanceDisbursementPage>>>(
'/admin/finance/disbursements',