链街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.

136 lines
4.9 KiB

  1. <?php
  2. namespace App\Admin\Controllers\v3;
  3. use App\Admin\Actions\Grid\v3\DataReportOption;
  4. use App\Admin\Actions\Tools\GoodsReportExport;
  5. use App\Admin\Common\Auth;
  6. use App\Admin\Repositories\v3\GoodsReport;
  7. use Dcat\Admin\Grid;
  8. use Dcat\Admin\Controllers\AdminController;
  9. use App\Models\v3\Market as MarketModel;
  10. use App\Models\v3\Store as StoreModel;
  11. use Dcat\Admin\Grid\Filter;
  12. use Illuminate\Http\Request;
  13. use Maatwebsite\Excel\Facades\Excel;
  14. class GoodsReportController extends AdminController
  15. {
  16. protected $GoodsActivityReport = null;
  17. public $marketId = 0;
  18. public $newParams = [];
  19. public $marketList = [];
  20. public $storeList = [];
  21. public function __construct()
  22. {
  23. }
  24. /**
  25. * Make a grid builder.
  26. *
  27. * @return Grid
  28. */
  29. protected function grid()
  30. {
  31. $this->marketId = Auth::getMarket();
  32. if($this->marketId){
  33. $this->newParams = ['market_id'=>$this->marketId];
  34. $builder = new GoodsReport($this->newParams);
  35. $this->marketList = MarketModel::getMarketArray([['id','=',$this->marketId]]);
  36. $this->storeList = StoreModel::getStoreArray([['market_id','=',$this->marketId]]);
  37. }else{
  38. $builder = new GoodsReport();
  39. $this->marketList = MarketModel::getMarketArray();
  40. $this->storeList = StoreModel::getStoreArray();
  41. }
  42. return Grid::make($builder, function (Grid $grid) {
  43. $marketList = $this->marketList;
  44. $storeList = $this->storeList;
  45. $grid->column('goods_id')->sortable();
  46. $grid->column('cover_img')->image('',50);
  47. $grid->column('name','商品名称');
  48. $grid->column('market_id')->display(function($marketId){
  49. $item = MarketModel::getMarketInfo($marketId,'name');
  50. return $item->name ?? '';
  51. });
  52. $grid->column('store_id')->display(function($storeId){
  53. $item = StoreModel::getStoreInfo($storeId,'name');
  54. return $item->name ?? '';
  55. })->width('12%');
  56. $grid->column('price');
  57. $grid->column('original_price');
  58. $grid->column('number');
  59. $grid->column('created_at')->display(function($createdAt){
  60. return date('Y-m-d H:I:s',$createdAt) ?? '';
  61. });
  62. $grid->column('global_order_id')->help('统计订单状态为已完成的商品');
  63. $grid->filter(function (Filter $filter) use($marketList,$storeList) {
  64. // 更改为 panel 布局
  65. $filter->panel();
  66. $filter->equal('start_time','开始时间')->date()->width(2);
  67. $filter->equal('end_time','结束时间')->date()->width(2);
  68. $filter->equal('goods_id','商品ID')->width(2);
  69. $filter->equal('name','商品名称')->width(2);
  70. if(!$this->marketId){
  71. $filter->equal('market_id','市场')->select($marketList)->width(2);
  72. }
  73. $filter->equal('store_id','店铺')->select($storeList)->width(2);
  74. });
  75. $grid->tools([
  76. new DataReportOption('today','goods_report','今日'),
  77. new DataReportOption('yesterday','goods_report','昨日'),
  78. new DataReportOption('this_week','goods_report','本周'),
  79. new DataReportOption('last_week','goods_report','上周'),
  80. new DataReportOption('this_month','goods_report','本月'),
  81. new DataReportOption('last_month','goods_report','上月'),
  82. new GoodsReportExport()
  83. ]);
  84. // 每页1条
  85. $grid->paginate(10);
  86. $grid->disableCreateButton();
  87. $grid->disableBatchActions();
  88. $grid->disableBatchDelete();
  89. $grid->toolsWithOutline();
  90. $grid->disableDeleteButton();
  91. $grid->disableEditButton();
  92. $grid->disableQuickEditButton();
  93. $grid->disableViewButton();
  94. $grid->disableActions();
  95. $grid->disableRowSelector();
  96. });
  97. }
  98. /**
  99. * 数据导出
  100. * @return \Symfony\Component\HttpFoundation\BinaryFileResponse
  101. */
  102. public function export(Request $request)
  103. {
  104. $this->marketId = Auth::getMarket();
  105. $params = [
  106. 'name' => request()->input('name', ''),
  107. 'market_id' => $this->marketId ? $this->marketId : request()->input('market_id',0),
  108. 'store_id' => request()->input('store_id',0),
  109. 'start_time' => request()->input('start_time',''),
  110. 'end_time' => request()->input('end_time',''),
  111. ];
  112. $name = date('Y-m-d-His',time());
  113. $data = new \App\Admin\Actions\Exporter\GoodsSales($params);
  114. if(empty($data)){
  115. return $this->error('没有数据!');
  116. }
  117. return Excel::download($data, $name.'.xlsx');
  118. }
  119. }