shinnosuke
2026-09-21 7844f5af457ff3b7d3f8eeac8799e8d281e635a1
talent-card-admin/src/api/admin.ts
@@ -66,6 +66,11 @@
  data.append('file', file)
  return http.post<ImageUploadResult, ImageUploadResult>('/api/admin/uploads/images', data)
}
export function uploadAdminPdf(file: File) {
  const data = new FormData()
  data.append('file', file)
  return http.post<ImageUploadResult, ImageUploadResult>('/api/admin/uploads/pdfs', data)
}
export function uploadAdminVideo(file: File) {
  const data = new FormData()
  data.append('file', file)
@@ -105,9 +110,17 @@
  startDate?: string
  endDate?: string
}
export function getMerchantSettlement(kind: 'onboardings' | 'bank-cards' | 'withdrawals', params: MerchantSettlementQuery = {}) { return http.get<PageResult<any>, PageResult<any>>(`/api/admin/management/merchant-settlement/${kind}`, { params }) }
export function getMerchantSettlement(kind: 'onboardings' | 'bank-cards', params: MerchantSettlementQuery = {}) { return http.get<PageResult<any>, PageResult<any>>(`/api/admin/management/merchant-settlement/${kind}`, { params }) }
/** 商家类型筛选项:取自后端目录,避免前端另抄一份而与库里的取值失配。拉不到就先留空,不打扰用户。 */
export function getMerchantSettlementMerchantTypes() { return http.get<string[], string[]>('/api/admin/management/merchant-settlement/merchant-types', { silent: true }) }
/** 结算记录直接来自斗拱:按结算日期区间返回真实结算流水,用于监控每天自动结算了多少到银行卡。 */
export function getMerchantSettlements(params: { beginDate?: string; endDate?: string; size?: number; merchantName?: string; contactMobile?: string; merchantType?: string; status?: string } = {}) {
  return http.get<{ records: Record<string, any>[]; total: number; failures: string[] }, { records: Record<string, any>[]; total: number; failures: string[] }>('/api/admin/management/merchant-settlement/settlements', { params })
}
export function getMerchantOnboardingDetail(id: number | string) { return http.get<Record<string, any>, Record<string, any>>(`/api/admin/management/merchant-settlement/onboardings/${id}`) }
export function reviewMerchantSettlement(kind: 'onboardings' | 'bank-cards' | 'withdrawals', id: number | string, status: string, reason = '', providerValue = '') { const body: Record<string, string> = { status, reason }; if (kind === 'onboardings') body.huifuId = providerValue; if (kind === 'bank-cards') body.tokenNo = providerValue; return http.patch<any, any>(`/api/admin/management/merchant-settlement/${kind}/${id}`, body) }
export function refreshMerchantOnboarding(id: number | string, retry = false) { return http.post<Record<string, any>, Record<string, any>>(`/api/admin/management/merchant-settlement/onboardings/${id}/progress/refresh`, null, { params: { retry } }) }
// 微信实名认证:平台运营代为发起。未决申请不会重复提交,retry 只对通道已明确驳回时有意义。
export function submitMerchantRealname(id: number | string, retry = false) { return http.post<Record<string, any>, Record<string, any>>(`/api/admin/management/merchant-settlement/onboardings/${id}/realname`, null, { params: { retry } }) }
export function getAdminNews(params: NewsArticleQuery = {}) {
  return http.get<PageResult<NewsArticle>, PageResult<NewsArticle>>('/api/admin/business/news', { params })
@@ -212,8 +225,10 @@
  return http.get<Merchant, Merchant>(`/api/admin/business/merchants/${id}`)
}
export function checkMerchantLoginAccount(account: string) {
  return http.get<{ available: boolean }, { available: boolean }>('/api/admin/business/merchants/login-account-available', { params: { account } })
export function checkMerchantLoginAccount(account: string, merchantId?: number | string) {
  return http.get<{ available: boolean }, { available: boolean }>('/api/admin/business/merchants/login-account-available', {
    params: { account, merchantId },
  })
}
export function createMerchant(payload: MerchantPayload) {
@@ -242,6 +257,11 @@
export function getAdminProducts(params: ProductQuery = {}) {
  return http.get<PageResult<Product>, PageResult<Product>>('/api/admin/business/products', { params })
}
// 商家编辑页面的团单列表按商品维度返回(一条团单一行),修改团单不会多出一行待审核记录。
export function getAdminMerchantProducts(merchantId: number | string, params: ProductQuery = {}) {
  return http.get<PageResult<Product>, PageResult<Product>>(`/api/admin/business/merchants/${merchantId}/products`, { params })
}
export function getAdminProductDetail(id: number | string) {
@@ -323,13 +343,48 @@
  return http.get<PageResult<RefundRecord>, PageResult<RefundRecord>>('/api/orders/refunds', { params })
}
// 刷新一笔退款的状态:退款通知和支付通知一样可能到不了,线上排查时不必干等定时任务或手写 SQL。
export function refreshRefundStatus(refundNo: string) {
  return http.post<RefundRecord, RefundRecord>(`/api/orders/refunds/${refundNo}/query`)
}
// 查询通道状态:重新读一次斗拱侧的收款能力快照。进件通过后新增的结算卡也靠这条路径收敛为已批准。
export function refreshMerchantPaymentCapability(id: number | string) {
  return http.post<Record<string, any>, Record<string, any>>(
    `/api/admin/management/merchant-settlement/onboardings/${id}/payment-capability/refresh`,
  )
}
// 立即对账:人工触发一次**真实**的对账(待支付流水向通道确认 + 在途退款收敛)。
// 给收不到回调的环境用:它走的是与定时任务完全相同的逻辑,不是「跳过真实通道」的捷径。
export function runPaymentReconciliation(pendingAfterMinutes = 5) {
  return http.post<Record<string, any>, Record<string, any>>('/api/admin/management/payment-reconciliation/run', null, {
    params: { pendingAfterMinutes },
  })
}
export function getVerificationRecords(params: VerificationQuery = {}) {
  return http.get<PageResult<VerificationRecord>, PageResult<VerificationRecord>>('/api/orders/verifications', { params })
}
function serviceApplicationParams(params: ServiceApplicationQuery = {}) {
  const requestParams: Record<string, unknown> = { ...params }
  if (params.talentKeyword && !requestParams.keyword) {
    requestParams.keyword = params.talentKeyword
  }
  if (!requestParams.serviceKeyword) {
    requestParams.serviceKeyword = params.merchantName || params.hospitalName || params.parkingLot
  }
  delete requestParams.talentKeyword
  delete requestParams.merchantName
  delete requestParams.hospitalName
  delete requestParams.parkingLot
  return requestParams
}
export function getServiceApplications(params: ServiceApplicationQuery = {}) {
  return http.get<PageResult<ServiceApplication>, PageResult<ServiceApplication>>('/api/admin/service-appointment-applications', {
    params,
    params: serviceApplicationParams(params),
  })
}
@@ -337,10 +392,25 @@
  return http.get<ServiceApplication, ServiceApplication>(`/api/admin/service-appointment-applications/${id}`)
}
export function updateServiceApplicationStatus(id: number | string, status: string, handlerName = '管理员') {
export function updateServiceApplicationStatus(
  id: number | string,
  status: string,
  handlerName = '管理员',
  remark = '',
  rejectReason = '',
) {
  return http.patch<ServiceApplication, ServiceApplication>(`/api/admin/service-appointment-applications/${id}/status`, {
    status,
    handlerName,
    remark,
    rejectReason,
  })
}
export function exportServiceApplications(params: ServiceApplicationQuery = {}) {
  return http.get<Blob, Blob>('/api/admin/service-appointment-applications/export', {
    params: serviceApplicationParams(params),
    responseType: 'blob',
  })
}
@@ -527,6 +597,10 @@
  return http.get<PageResult<AnyRecord>, PageResult<AnyRecord>>('/api/admin/display-services', { params })
}
export function getDisplayServiceDetail(serviceId: number | string) {
  return http.get<AnyRecord, AnyRecord>(`/api/admin/display-services/${serviceId}`)
}
export function getDisplayServiceCategories() {
  return http.get<AnyRecord[], AnyRecord[]>('/api/admin/display-services/categories')
}
@@ -555,6 +629,11 @@
  return http.get<AnyRecord, AnyRecord>(`/api/admin/ticket-packages/${packageId}`)
}
// 票包表单的「适用商家」下拉:走票包自己的只读接口,避免要求「商家查询」权限。
export function getTicketPackageMerchantOptions(params: AnyRecord = {}) {
  return http.get<AnyRecord[], AnyRecord[]>('/api/admin/ticket-packages/merchant-options', { params })
}
export function createTicketPackage(payload: AnyRecord) {
  return http.post<AnyRecord, AnyRecord>('/api/admin/ticket-packages', payload)
}