小程序接口

This commit is contained in:
liu
2026-08-14 18:02:32 +08:00
parent 969eabcd11
commit 9a0999742f
7 changed files with 434 additions and 188 deletions
+65 -8
View File
@@ -128,24 +128,81 @@ class OrderController extends BaseMiniController
], '下单成功');
}
/** 历史订单:当前门店强制过滤,?status=&page=&pageSize= */
/**
* 历史订单:当前门店强制过滤
* ?status= 状态筛选;?start_date=&end_date= 订货日期区间(配合 /order/summary 周期下钻);
* ?page=&pageSize= 分页(pageSize 上限 50
* 行数据附带 status_name / can_cancel / 商品预览(前 3 条明细)/ item_count,完整明细走详情接口
*/
#[GetRoute('/order', authorize: true)]
public function index(Request $request): JsonResponse
{
$params = $request->validate([
'status' => 'nullable|integer|in:0,1,2,3,4,9',
'start_date' => 'nullable|date_format:Y-m-d',
'end_date' => 'nullable|date_format:Y-m-d|after_or_equal:start_date',
'page' => 'nullable|integer|min:1',
'pageSize' => 'nullable|integer|min:1|max:50',
], [
'status.in' => '订单状态不正确',
'start_date.date_format' => '开始日期格式为 Y-m-d',
'end_date.date_format' => '结束日期格式为 Y-m-d',
'end_date.after_or_equal' => '结束日期不能早于开始日期',
'pageSize.max' => '每页数量最大 50',
]);
$user = $this->currentUser($request);
$store = $this->ensureStoreBound($user);
$query = StoreOrderModel::query()->where('store_id', $store->id);
if ($request->filled('status')) {
$query->where('status', (int) $request->input('status'));
$query = StoreOrderModel::query()
->where('store_id', $store->id)
->select([
'id', 'order_no', 'order_date', 'total_quantity', 'total_weight',
'total_amount', 'status', 'remark', 'purchase_id', 'bill_id', 'created_at',
])
->with(['items' => static fn ($itemsQuery) => $itemsQuery
->select(['id', 'order_id', 'product_name', 'quantity', 'unit'])
->orderBy('id')]);
if (isset($params['status'])) {
$query->where('status', (int) $params['status']);
}
if (! empty($params['start_date'])) {
$query->whereDate('order_date', '>=', $params['start_date']);
}
if (! empty($params['end_date'])) {
$query->whereDate('order_date', '<=', $params['end_date']);
}
$data = $query->orderBy('order_date', 'desc')
$paginator = $query->orderBy('order_date', 'desc')
->orderBy('id', 'desc')
->paginate((int) $request->input('pageSize', 10))
->toArray();
->paginate((int) ($params['pageSize'] ?? 10));
return $this->success($data);
$paginator->getCollection()->transform(
static fn (StoreOrderModel $order): array => [
'id' => $order->id,
'order_no' => $order->order_no,
'order_date' => $order->order_date->toDateString(),
'status' => $order->status,
'status_name' => StoreOrderModel::STATUS_NAMES[$order->status] ?? '',
'can_cancel' => $order->status === StoreOrderModel::STATUS_PENDING,
'total_quantity' => $order->total_quantity,
'total_weight' => $order->total_weight,
'total_amount' => $order->total_amount,
'remark' => $order->remark,
'purchase_id' => $order->purchase_id,
'bill_id' => $order->bill_id,
'created_at' => $order->created_at?->toDateTimeString(),
'item_count' => $order->items->count(),
'items' => $order->items->take(3)
->map(static fn (StoreOrderItemModel $item): array => [
'product_name' => $item->product_name,
'quantity' => $item->quantity,
'unit' => $item->unit,
])->values()->all(),
]
);
return $this->success($paginator->toArray());
}
/**