Browse Source

订单统计

develop
lemon 4 years ago
parent
commit
e359d81c53
  1. 14
      app/AdminAgent/Controllers/HomeController.php
  2. 13
      app/AdminAgent/Metrics/Examples/Dashboard.php
  3. 160
      app/AdminAgent/Metrics/Examples/OrderExamples.php
  4. 2
      config/database.php
  5. 43
      resources/views/admin/pages/agent-home.blade.php

14
app/AdminAgent/Controllers/HomeController.php

@ -4,7 +4,7 @@ namespace App\AdminAgent\Controllers;
use App\AdminAgent\Metrics\Examples; use App\AdminAgent\Metrics\Examples;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Dcat\Admin\Http\Controllers\Dashboard;
use Dcat\Admin\Admin;
use Dcat\Admin\Layout\Column; use Dcat\Admin\Layout\Column;
use Dcat\Admin\Layout\Content; use Dcat\Admin\Layout\Content;
use Dcat\Admin\Layout\Row; use Dcat\Admin\Layout\Row;
@ -13,13 +13,19 @@ class HomeController extends Controller
{ {
public function index(Content $content) public function index(Content $content)
{ {
Admin::style(
<<<CSS
.col-sm-10.d-flex{
display: inline-block !important;
}
CSS );
return $content return $content
->header('仪表盘')
->header('代理商后台')
->description('数据详情') ->description('数据详情')
->body(function (Row $row) { ->body(function (Row $row) {
$row->column(6, function (Column $column) { $row->column(6, function (Column $column) {
$column->row(Dashboard::title());
$column->row(new Examples\Tickets());
$column->row(Examples\Dashboard::title());
$column->row(new Examples\OrderExamples());
}); });
$row->column(6, function (Column $column) { $row->column(6, function (Column $column) {

13
app/AdminAgent/Metrics/Examples/Dashboard.php

@ -0,0 +1,13 @@
<?php
namespace App\AdminAgent\Metrics\Examples;
use Dcat\Admin\Admin;
class Dashboard
{
public static function title()
{
return view('admin::pages.agent-home', ['admin' => Admin::user()]);
}
}

160
app/AdminAgent/Metrics/Examples/OrderExamples.php

@ -0,0 +1,160 @@
<?php
namespace App\AdminAgent\Metrics\Examples;
use App\Models\Order;
use Carbon\Carbon;
use Dcat\Admin\Admin;
use Dcat\Admin\Widgets\Metrics\RadialBar;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
class OrderExamples extends RadialBar
{
/**
* 初始化卡片内容
*/
protected function init()
{
parent::init();
$this->title('订单统计');
$this->height(400);
$this->chartHeight(300);
}
/**
* 处理请求
*
* @param Request $request
*
* @return mixed|void
*/
public function handle(Request $request)
{
//总订单数
$count = Order::query()->where('agent_id',Admin::user()->id)->count();
// 卡片内容
$this->withContent($count);
// 卡片底部
//今日订单
$countToday = Order::query()->where('agent_id',Admin::user()->id)->whereDate('created_at',Carbon::today())->count();
$countYesterday = Order::query()->where('agent_id',Admin::user()->id)->whereDate('created_at',Carbon::yesterday())->count();
$price = Order::query()->where('agent_id',Admin::user()->id)->whereDate('created_at',Carbon::today())->sum('price');
$this->withFooter($countToday, $countYesterday, $price);
$order = Order::query()
->select('*')
->addSelect(DB::raw("COUNT(id) as count_id,CONCAT(YEAR(created_at),'-',MONTH(created_at),'-',DAY(created_at)) AS statistics_time"))
->where('agent_id',Admin::user()->id)
->limit(30)
->orderBy('created_at', 'asc')
->groupBy('statistics_time')
->get()
->toArray();
$categories = Arr::pluck($order,'statistics_time');
// 图表数据
$data = Arr::pluck($order,'count_id');
$this->withChart($data,$categories);
}
/**
* 设置图表数据.
*
* @param int $data
*
* @return $this
*/
public function withChart(array $data,array $categories)
{
return $this->chart([
'series' => [
[
'name' => '订单量',
'data' => $data
]
],
'chart' => [
'type' => 'line',
'zoom' => [
'enabled' => false
],
'toolbar' => [
'show' => false
],
],
'colors' => [
Admin::color()->green(),
],
'dataLabels' => [
'enabled' => false
],
'stroke' => [
'curve' => 'smooth'
],
'legend' => [
'position' =>'top',
//'horizontalAlign' => 'right'
],
'fill' => [
'opacity' => 1,
'type' => 'solid',
],
'xaxis' => [
'categories' => $categories,
]
]);
}
/**
* 卡片内容
*
* @param string $content
*
* @return $this
*/
public function withContent($content)
{
return $this->content(
<<<HTML
<div class="d-flex flex-column flex-wrap text-left p-1">
<h1 class="font-lg-2 mt-2 mb-0">{$content}</h1>
<small>总订单数</small>
</div>
HTML
);
}
/**
* 卡片底部内容.
*
* @param string $new
* @param string $open
* @param string $response
*
* @return $this
*/
public function withFooter($new, $open, $response)
{
return $this->footer(
<<<HTML
<div class="d-flex justify-content-between p-1" style="padding-top: 0!important;">
<div class="text-center">
<p>今日订单</p>
<span class="font-lg-1">{$new}</span>
</div>
<div class="text-center">
<p>昨日订单</p>
<span class="font-lg-1">{$open}</span>
</div>
<div class="text-center">
<p>今日成交()</p>
<span class="font-lg-1">{$response}</span>
</div>
</div>
HTML
);
}
}

2
config/database.php

@ -56,7 +56,7 @@ return [
'collation' => 'utf8mb4_unicode_ci', 'collation' => 'utf8mb4_unicode_ci',
'prefix' => '', 'prefix' => '',
'prefix_indexes' => true, 'prefix_indexes' => true,
'strict' => true,
'strict' => false,
'engine' => null, 'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([ 'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),

43
resources/views/admin/pages/agent-home.blade.php

@ -0,0 +1,43 @@
<style>
.dashboard-title .links {
text-align: center;
margin-bottom: 2.5rem;
}
.dashboard-title .links > a {
padding: 0 25px;
font-size: 12px;
font-weight: 600;
letter-spacing: .1rem;
text-decoration: none;
text-transform: uppercase;
color: #fff;
}
.dashboard-title h1 {
font-weight: 200;
font-size: 2.5rem;
}
.dashboard-title .avatar {
background: #fff;
border: 2px solid #fff;
width: 70px;
height: 70px;
}
</style>
<div class="dashboard-title card bg-primary">
<div class="card-body">
<div class="text-center ">
<img class="avatar img-circle shadow mt-1" src="{{config('filesystems.disks.oss.cdnDomain').'/'.$admin->avatar}}">
<div class="text-center mb-1">
<h1 class="mb-3 mt-2 text-white">{{$admin->name}}</h1>
<div class="links">
<a href="{{ admin_url('/auth/users') }}">用户管理</a>
<a href="{{ admin_url('/order/list') }}" id="doc-link">订单管理</a>
<a href="{{ admin_url('/advertising/list') }}" id="demo-link">广告管理</a>
<a href="{{ admin_url('/product/list') }}" id="demo-link">产品管理</a>
</div>
</div>
</div>
</div>
</div>
Loading…
Cancel
Save