链街Dcat后台
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.

120 lines
3.4 KiB

  1. <?php
  2. namespace App\Admin\Metrics\Examples\Order;
  3. use App\Models\ImsCjdcOrder;
  4. use App\Models\ImsCjdcOrderMain;
  5. use Dcat\Admin\Widgets\Metrics\Card;
  6. use Illuminate\Http\Request;
  7. class OrderData extends Card
  8. {
  9. protected $title;
  10. protected $data_type;
  11. public function __construct($data_type=null,$title = null, $icon = null)
  12. {
  13. $this->title = $title;
  14. $this->data_type = $data_type;
  15. parent::__construct($title, $icon);
  16. }
  17. public function init()
  18. {
  19. parent::init(); // TODO: Change the autogenerated stub
  20. $this->dropdown([
  21. '1'=>'今日',
  22. '-1'=>'昨日',
  23. '7'=>'过去一周',
  24. '30'=>'本月',
  25. '-30'=>'上月'
  26. ]);
  27. }
  28. public function handle(Request $request)
  29. {
  30. $type = $request->get('option');//数据选项
  31. $data_type = $request->get('data_type');//数据类型
  32. $this->content($this->orderNum($data_type,$type));
  33. }
  34. public function orderDataBuild($marketId=null,$type=null)
  35. {
  36. $where = [];
  37. $where['type'] = 1;
  38. if ($marketId){
  39. $where['market_id'] = $marketId;
  40. }
  41. switch ($type){
  42. case '1':
  43. $beginTime=mktime(0,0,0,date('m'),date('d'),date('Y'));
  44. $endTime=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;
  45. break;
  46. case '-1':
  47. $beginTime=mktime(0,0,0,date('m'),date('d')-1,date('Y'));
  48. $endTime=mktime(0,0,0,date('m'),date('d'),date('Y'))-1;
  49. break;
  50. case '7':
  51. $beginTime=mktime(0,0,0,date('m'),date('d')-7,date('Y'));
  52. $endTime=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;
  53. break;
  54. case '30':
  55. $beginTime=mktime(0,0,0,date('m'),1,date('Y'));
  56. $endTime=mktime(23,59,59,date('m'),date('t'),date('Y'));
  57. break;
  58. case '-30':
  59. $beginTime=mktime(0,0,0,date('m')-1,1,date('Y'));
  60. $endTime=strtotime(date("Y-m-d H:i:s",mktime(23,59,59,date("m") ,0,date("Y"))));
  61. break;
  62. default:
  63. $beginTime=mktime(0,0,0,date('m'),date('d'),date('Y'));
  64. $endTime=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;
  65. break;
  66. }
  67. $build = ImsCjdcOrderMain
  68. ::whereBetween('created_at',[$beginTime,$endTime])
  69. ->whereIn('state',[3,4,5,10])
  70. ->where($where);
  71. return $build;
  72. }
  73. public function orderNum($data_type,$type)
  74. {
  75. $build = $this->orderDataBuild($marketId=null,$type);
  76. if ($data_type=='number'){
  77. $result = $build->count();
  78. }elseif ($data_type=='amount'){
  79. $result = $build->sum('money');
  80. }else{
  81. $result = 0;
  82. }
  83. return $result;
  84. }
  85. // 传递自定义参数到 handle 方法
  86. public function parameters() : array
  87. {
  88. return [
  89. 'data_type'=>$this->data_type
  90. ];
  91. }
  92. /**
  93. * 渲染卡片内容
  94. * @return string
  95. */
  96. public function renderContent()
  97. {
  98. $content = parent::renderContent();
  99. return <<<HTML
  100. <div class="d-flex justify-content-between align-items-center mt-1" style="margin-bottom: 2px">
  101. <h2 class="ml-1 font-large-1">{$content}</h2>
  102. </div>
  103. HTML;
  104. }
  105. }