title('订单情况'); $this->chartLabels($this->labels); $this->dropdown([ '7' => '7天内', '30' => '30天内', '365' => '今年', // '365' => 'Last Year', ]); } /** * 处理请求 * * @param Request $request * * @return mixed|void */ public function handle(Request $request) { switch ($request->get('option')) { case '365': $start_time = Carbon::now()->startOfYear(); $end_time = Carbon::now()->endOfDay(); case '30': $start_time = Carbon::now()->subDays(29)->startOfDay(); $end_time = Carbon::now()->endOfDay(); case '7': $start_time = Carbon::now()->subDays(6)->startOfDay(); $end_time = Carbon::now()->endOfDay(); default: $start_time = Carbon::now()->subDays(6)->startOfDay(); $end_time = Carbon::now()->endOfDay(); } $finished_count = $this->finishedOrderCount($start_time, $end_time); $payed_count = $this->payedOrderCount($start_time, $end_time); $canceled_count = $this->canceledOrderCount($start_time, $end_time); // 卡片内容 $this->withContent($finished_count, $payed_count, $canceled_count); $all_count = $this->orderCount($start_time, $end_time); $finished_rate = number_format(($all_count==0 ? 0:($finished_count/$all_count*100)), 2); $payed_rate = number_format(($all_count==0 ? 0:($payed_count/$all_count*100)), 2); $canceled_rate = number_format(($all_count==0 ? 0:($canceled_count/$all_count*100)), 2); // 图表数据 $this->withChart([$finished_rate, $payed_rate, $canceled_rate]); // 总数 $this->chartTotal('总数', $all_count); } /** * 设置图表数据. * * @param array $data * * @return $this */ public function withChart(array $data) { return $this->chart([ 'series' => $data, ]); } public function orderCount($start_time, $end_time){ return Order::whereBetween('created_at', [$start_time, $end_time])->count(); } public function finishedOrderCount($start_time, $end_time){ return Order::where([ 'order_status'=>1, 'pay_status'=>1, 'shipping_status'=>1 ])->whereBetween('created_at', [$start_time, $end_time])->count(); } public function payedOrderCount($start_time, $end_time){ return Order::where([ 'order_status'=>1, 'pay_status'=>1, ])->whereBetween('created_at', [$start_time, $end_time])->count(); } public function canceledOrderCount($start_time, $end_time){ return Order::where([ 'order_status'=>-1, ])->whereBetween('created_at', [$start_time, $end_time])->count(); } /** * 卡片内容. * * @param int $finished * @param int $pending * @param int $rejected * * @return $this */ public function withContent($finished, $pending, $rejected) { return $this->content( <<