feat: 订单售后

This commit is contained in:
2026-07-30 18:31:54 +08:00
parent dcc32b3d8f
commit 898e239463
36 changed files with 3842 additions and 398 deletions
@@ -2,6 +2,8 @@ import type { Context } from '../utils/handler.js'
import { guardMethod } from '../utils/method.js'
import { withErrorBoundary } from '../utils/handler.js'
import { basicService } from '../services/basic.service.js'
import { minioUploadService, type PreviewInput, type UploadInput } from '../services/minio-upload.service.js'
import { readJson } from '../utils/request.js'
import { toHttpResponse } from './controller-response.js'
export const loginController = withErrorBoundary(async (request: Request, _context: Context) => {
@@ -22,7 +24,14 @@ export const uploadController = withErrorBoundary(async (request: Request, _cont
const methodResponse = guardMethod(request, ['POST'])
if (methodResponse) return methodResponse
return toHttpResponse(basicService.upload())
return toHttpResponse(await minioUploadService.upload(await readJson<UploadInput>(request)))
})
export const uploadPreviewController = withErrorBoundary(async (request: Request, _context: Context) => {
const methodResponse = guardMethod(request, ['POST'])
if (methodResponse) return methodResponse
return toHttpResponse(minioUploadService.preview(await readJson<PreviewInput>(request)))
})
export const userInfoController = withErrorBoundary(async (request: Request, _context: Context) => {
@@ -0,0 +1,69 @@
import type { Context } from '../utils/handler.js'
import { guardMethod } from '../utils/method.js'
import { readJson } from '../utils/request.js'
import { withErrorBoundary } from '../utils/handler.js'
import {
merchantService,
type MerchantAfterSaleListInput,
type MerchantOrderListInput,
type MerchantShipInput
} from '../services/merchant.service.js'
import type { AfterSaleAuditInput, AfterSaleLogisticsInput } from '../services/after-sale.service.js'
import { toHttpResponse } from './controller-response.js'
type MerchantAfterSaleActionInput = AfterSaleLogisticsInput & {
logisticsNo?: string
logisticsCompany?: string
}
export const merchantOrderListController = withErrorBoundary(async (request: Request, _context: Context) => {
const methodResponse = guardMethod(request, ['POST'])
if (methodResponse) return methodResponse
return toHttpResponse(await merchantService.listOrders(await readJson<MerchantOrderListInput>(request)))
})
export const merchantOrderShipController = withErrorBoundary(async (request: Request, _context: Context) => {
const methodResponse = guardMethod(request, ['POST'])
if (methodResponse) return methodResponse
return toHttpResponse(await merchantService.shipOrder(await readJson<MerchantShipInput>(request)))
})
export const merchantAfterSaleListController = withErrorBoundary(async (request: Request, _context: Context) => {
const methodResponse = guardMethod(request, ['POST'])
if (methodResponse) return methodResponse
return toHttpResponse(await merchantService.listAfterSales(await readJson<MerchantAfterSaleListInput>(request)))
})
export const merchantAfterSaleAuditController = withErrorBoundary(async (request: Request, _context: Context) => {
const methodResponse = guardMethod(request, ['POST'])
if (methodResponse) return methodResponse
return toHttpResponse(await merchantService.auditAfterSale(await readJson<AfterSaleAuditInput>(request)))
})
export const merchantAfterSaleReceiveController = withErrorBoundary(async (request: Request, _context: Context) => {
const methodResponse = guardMethod(request, ['POST'])
if (methodResponse) return methodResponse
const body = await readJson<MerchantAfterSaleActionInput>(request)
return toHttpResponse(await merchantService.receiveAfterSale(
String(body.serviceOrderId || '').trim(),
String(body.supplierId || '').trim()
))
})
export const merchantAfterSaleShipController = withErrorBoundary(async (request: Request, _context: Context) => {
const methodResponse = guardMethod(request, ['POST'])
if (methodResponse) return methodResponse
const body = await readJson<MerchantAfterSaleActionInput>(request)
return toHttpResponse(await merchantService.shipExchange(
String(body.serviceOrderId || '').trim(),
String(body.supplierId || '').trim(),
String(body.logisticsNo || body.merchantLogisticsNo || '').trim(),
String(body.logisticsCompany || body.merchantLogisticsCompany || '').trim()
))
})
@@ -6,6 +6,7 @@ import {
afterSaleService,
type AfterSaleApplyInput,
type AfterSaleAuditInput,
type AfterSaleDetailInput,
type AfterSaleListInput,
type AfterSaleLogisticsInput
} from '../services/after-sale.service.js'
@@ -99,6 +100,13 @@ export const afterSaleListController = withErrorBoundary(async (request: Request
return toHttpResponse(await afterSaleService.list(await readJson<AfterSaleListInput>(request)))
})
export const afterSaleDetailController = withErrorBoundary(async (request: Request, _context: Context) => {
const methodResponse = guardMethod(request, ['POST'])
if (methodResponse) return methodResponse
return toHttpResponse(await afterSaleService.detail(await readJson<AfterSaleDetailInput>(request)))
})
export const afterSaleAuditController = withErrorBoundary(async (request: Request, _context: Context) => {
const methodResponse = guardMethod(request, ['POST'])
if (methodResponse) return methodResponse