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

163 lines
6.0 KiB

  1. <?php
  2. namespace App\Admin\Controllers\v3;
  3. use App\Admin\Actions\Grid\v3\DataReportOption;
  4. use App\Admin\Actions\Tools\ReportCommunityExport;
  5. use App\Admin\Common\Auth;
  6. use App\Admin\Repositories\v3\ReportCommunity;
  7. use Dcat\Admin\Grid;
  8. use Dcat\Admin\Controllers\AdminController;
  9. use Dcat\Admin\Grid\Filter;
  10. use Illuminate\Http\Request;
  11. use Maatwebsite\Excel\Facades\Excel;
  12. use App\Models\v3\Market as MarketModel;
  13. use App\Models\ImsCjdcUser as UserModel;
  14. use App\Models\v3\LanzuEmployees as EmployeesModel;
  15. use Dcat\Admin\Layout\Content;
  16. use Dcat\Admin\Layout\Row;
  17. use Dcat\Admin\Widgets\Alert;
  18. class ReportCommunityController extends AdminController
  19. {
  20. /**
  21. * 社区代理点统计
  22. */
  23. protected $GoodsActivityReport = null;
  24. public $marketId = 0;
  25. public $newParams = ['status' => 1];
  26. public $marketList = [];
  27. protected $reportDate = '';
  28. protected $tools = [];
  29. /**
  30. * Make a grid builder.
  31. *
  32. * @return Grid
  33. */
  34. protected function grid()
  35. {
  36. $this->marketId = Auth::getMarket();
  37. if($this->marketId){
  38. $this->newParams['market_id'] = $this->marketId;
  39. $builder = new ReportCommunity($this->newParams);
  40. $this->marketList = MarketModel::getMarketArray([['id','=',$this->marketId]]);
  41. }else{
  42. $builder = new ReportCommunity($this->newParams);
  43. $this->marketList = MarketModel::getMarketArray();
  44. }
  45. return Grid::make($builder, function (Grid $grid) {
  46. $marketList = $this->marketList;
  47. $grid->column('market_id','市场')->display(function($market_id) use($marketList){
  48. return $marketList[$market_id] ?? '';
  49. });
  50. $grid->column('user_id','懒ID');
  51. $grid->column('avatar','微信头像')->display(function(){
  52. $userId = $this->user_id ?? 0;
  53. $item = UserModel::select('avatar')->find($userId);
  54. return $item['avatar'] ?? '';
  55. })->image('',50);
  56. $grid->column('name','姓名');
  57. $grid->column('new_cs_count','新拓展代理点数');
  58. $grid->column('new_bind_user_count','新增绑定用户数');
  59. $grid->column('plat_new_user_count','平台新增用户数');
  60. $grid->column('bound_order_online_count','绑定用户线上订单总数');
  61. $grid->column('plat_new_user_order_online_count','平台新增用户线上订单数');
  62. $grid->filter(function (Filter $filter) use($marketList) {
  63. $positionList = config('role.select_show');
  64. // 更改为 panel 布局
  65. $filter->panel();
  66. $filter->where('start_time',function(){
  67. $this->newParams['start_time'] = $this->input['start_time'];
  68. },'开始时间',)->date()->width(2);
  69. $filter->equal('end_time','结束时间')->date()->width(2);
  70. $filter->equal('user_id','懒ID')->placeholder('多个懒ID使用英文逗号隔开')->width(2);
  71. if(!$this->marketId){
  72. $filter->equal('market_id','市场')->select($marketList)->width(2);
  73. }
  74. $filter->equal('name','姓名')->width(2);
  75. $filter->in('position','职位')->select($positionList)->default(9)->width(2);
  76. $filter->equal('status','状态')->select(EmployeesModel::$_STATUS)->width(2);
  77. });
  78. $grid->tools($this->tools);
  79. // 每页1条
  80. $grid->paginate(10);
  81. $grid->disableCreateButton();
  82. $grid->disableBatchActions();
  83. $grid->disableBatchDelete();
  84. $grid->toolsWithOutline();
  85. $grid->disableDeleteButton();
  86. $grid->disableEditButton();
  87. $grid->disableQuickEditButton();
  88. $grid->disableViewButton();
  89. $grid->disableActions();
  90. $grid->disableRowSelector();
  91. });
  92. }
  93. /**
  94. * 页面
  95. */
  96. public function index(Content $content)
  97. {
  98. $this->tools = [
  99. new DataReportOption('today','report_community','今日', $this->newParams),
  100. new DataReportOption('yesterday','report_community','昨日', $this->newParams),
  101. new DataReportOption('this_week','report_community','本周', $this->newParams),
  102. new DataReportOption('last_week','report_community','上周', $this->newParams),
  103. new DataReportOption('this_month','report_community','本月', $this->newParams),
  104. new DataReportOption('last_month','report_community','上月', $this->newParams)
  105. ];
  106. $startTime = request()->get('start_time');
  107. $endTime = request()->get('end_time');
  108. if(empty($startTime) && empty($endTime)){
  109. $content->row(Alert::make('请先选择时间查询!','')->removable());
  110. }else{
  111. $this->tools[] = new ReportCommunityExport();
  112. }
  113. return $content->title('社区代理点统计报表')
  114. ->body(function(Row $row){
  115. $row->column(12,$this->grid());
  116. });
  117. }
  118. /**
  119. * 数据导出
  120. * @return \Symfony\Component\HttpFoundation\BinaryFileResponse
  121. */
  122. public function export(Request $request)
  123. {
  124. $this->marketId = Auth::getMarket();
  125. $params = [
  126. 'status' => $request->input('status',null),
  127. 'name' => $request->input('name',false),
  128. 'market_id' => $this->marketId ? $this->marketId : $request->input('market_id',null),
  129. 'user_id' => $request->input('user_id',null),
  130. 'start_time' => $request->input('start_time',null),
  131. 'end_time' => $request->input('end_time',null),
  132. 'position' => $request->input('position',null),
  133. ];
  134. $name = date('Y-m-d-His',time());
  135. $data = new \App\Admin\Actions\Exporter\ReportCommunity($params);
  136. return Excel::download($data, $name.'.xlsx');
  137. }
  138. }