海南旅游SAAS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

117 lines
2.4 KiB

<?php
namespace App\AdminSupplier\Metrics\Examples;
use App\Common\DataTime;
use App\Models\OrderProductItem;
use App\Models\User;
use Carbon\Carbon;
use Dcat\Admin\Admin;
use Dcat\Admin\Widgets\Metrics\Line;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
class NewUsers extends Line
{
/**
* 初始化卡片内容
*
* @return void
*/
protected function init()
{
parent::init();
$this->title('现金流水');
$this->dropdown([
//'day' => '本日',
'week' => '本周',
'month' => '本月',
//'year' => '今年',
]);
}
/**
* 处理请求
*
* @param Request $request
*
* @return mixed|void
*/
public function handle(Request $request)
{
$order = OrderProductItem::query()
->where('supplier_id',Admin::user()->id);
switch ($request->get('option')) {
case 'day':
$order->whereDate('created_at', Carbon::today());
break;
case 'week':
$time = DataTime::beginAndEnd('week');
$order->whereBetween('created_at', $time);
break;
case 'month':
$order->whereMonth('created_at', Carbon::now()->month);
break;
case 'year':
$order->whereYear('created_at', Carbon::now()->year);
break;
default:
$time = DataTime::beginAndEnd('week');
$order->whereBetween('created_at', $time);
}
$countOrder = clone $order;
$count = $order->sum('price');
$this->withContent($count);
$countOrder = $countOrder->select('*')
->addSelect(DB::raw("sum(price) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at),'-',DAY(created_at)) AS statistics_time"))
->limit(30)
->groupBy('statistics_time')
->get()
->toArray();
// 图表数据
$this->chartLabels(Arr::pluck($countOrder, 'statistics_time'));
$this->withChart(Arr::pluck($countOrder, 'sum_price'));
}
/**
* 设置图表数据.
*
* @param array $data
*
* @return \App\AdminSupplier\Metrics\Examples\NewUsers
*/
public function withChart(array $data)
{
return $this->chart([
'series' => [
[
'name' => $this->title,
'data' => $data,
],
],
]);
}
/**
* 设置卡片内容.
*
* @param string $content
*
* @return $this
*/
public function withContent($content)
{
return $this->content(
<<<HTML
<div class="d-flex justify-content-between align-items-center mt-1" style="margin-bottom: 2px">
<h2 class="ml-1 font-lg-1">{$content}</h2>
<span class="mb-0 mr-1 text-80">{$this->title}</span>
</div>
HTML
);
}
}