Orders.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. namespace App\Admin\Metrics\Charts;
  3. use Dcat\Admin\Admin;
  4. use Dcat\Admin\Widgets\ApexCharts\Chart;
  5. use Dcat\Admin\Widgets\Metrics\Bar;
  6. use Dcat\Admin\Widgets\Metrics\Line;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Support\Arr;
  9. use Illuminate\Support\Facades\DB;
  10. class Orders extends Chart
  11. {
  12. public function __construct($containerSelector = null, $options = [])
  13. {
  14. parent::__construct($containerSelector, $options);
  15. $this->setUpOptions();
  16. }
  17. /**
  18. * 初始化图表配置
  19. */
  20. protected function setUpOptions()
  21. {
  22. $color = Admin::color();
  23. $colors = [$color->primary(), $color->primaryDarker()];
  24. $this->options([
  25. 'colors' => $colors,
  26. 'chart' => [
  27. 'type' => 'area',
  28. 'height' => 430
  29. ],
  30. 'plotOptions' => [
  31. 'bar' => [
  32. 'horizontal' => true,
  33. 'dataLabels' => [
  34. 'position' => 'top',
  35. ],
  36. ]
  37. ],
  38. 'dataLabels' => [
  39. 'enabled' => true,
  40. 'offsetX' => -6,
  41. 'style' => [
  42. 'fontSize' => '12px',
  43. 'colors' => ['#ddd']
  44. ]
  45. ],
  46. 'stroke' => [
  47. 'show' => true,
  48. 'width' => 1,
  49. 'colors' => ['#fff']
  50. ],
  51. 'xaxis' => [
  52. 'categories' => [],
  53. ],
  54. ]);
  55. $this->dropdown([
  56. '7' => 'Last 7 Days',
  57. '28' => 'Last 28 Days',
  58. '30' => 'Last Month',
  59. '365' => 'Last Year',
  60. ]);
  61. }
  62. /**
  63. * 处理图表数据
  64. */
  65. protected function buildData()
  66. {
  67. $count = DB::table('orders')->whereBetween('created_at', [date('Y-m-d', strtotime("-30 day")), date('Y-m-d')])
  68. ->selectRaw('DATE(created_at) as date,COUNT(*) as value')
  69. ->groupBy('date')->get()->toArray();
  70. $data = [
  71. [
  72. 'data' => Arr::pluck($count, 'value')
  73. ]
  74. ];
  75. $categories = Arr::pluck($count, 'date');
  76. $this->withData($data);
  77. $this->withCategories($categories);
  78. }
  79. /**
  80. * 设置图表数据
  81. *
  82. * @param array $data
  83. *
  84. * @return $this
  85. */
  86. public function withData(array $data)
  87. {
  88. return $this->option('series', $data);
  89. }
  90. /**
  91. * 设置图表类别.
  92. *
  93. * @param array $data
  94. *
  95. * @return $this
  96. */
  97. public function withCategories(array $data)
  98. {
  99. return $this->option('xaxis.categories', $data);
  100. }
  101. /**
  102. * 渲染图表
  103. *
  104. * @return string
  105. */
  106. public function render()
  107. {
  108. $this->buildData();
  109. return parent::render();
  110. }
  111. }