IndexController.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Models\Mailbox;
  4. use App\Http\Models\Permission;
  5. use App\Http\Models\ProjectFlowMemo;
  6. use App\Http\Models\ProjectFlowMemoRelation;
  7. use App\Http\Models\Role;
  8. use App\Http\Models\Site;
  9. use App\Http\Models\WeekTaskInfo;
  10. use App\Http\Requests\Index\ProfilerRequest;
  11. use App\Http\Requests\Request;
  12. use Illuminate\Support\Facades\Auth;
  13. use App\Http\Controllers\Controller;
  14. use Illuminate\Support\Facades\DB;
  15. /** 后台首页
  16. * Class IndexController
  17. * @package App\Http\Controllers\Admin
  18. */
  19. class IndexController extends Controller
  20. {
  21. protected function indexPage($role, $menusArr)
  22. {
  23. switch ($role->id ?? null) {
  24. case Role::TYPE_TYPE_CUSTOMER_STAFF:
  25. $url = '/admin/meter/single';
  26. return ['title' => '控制台', 'src' => $url];
  27. case Role::TYPE_BID:
  28. return ['title' => '竞价仪表', 'src' => '/admin/bid/dashboard'];
  29. case Role::TYPE_CUSTOMER:
  30. $menuIds = array_column($menusArr, 'id');
  31. $url = '/admin/meter/single';
  32. if (!in_array(32, $menuIds)) {
  33. $url = '/admin/rank/keyword';
  34. }
  35. return ['title' => '控制台', 'src' => $url];
  36. default:
  37. return ['title' => '首页', 'src' => '/admin/flow/home'];
  38. }
  39. }
  40. //后台首页
  41. public function main()
  42. {
  43. $user = auth()->user();
  44. $menusArr = $this->menus($user);
  45. $menus = list_to_tree($menusArr, 'id', 'parent_id');
  46. $role = $user->role ?? null;
  47. $roleName = $role->name ?? '';
  48. if (!empty($user->is_super)) {
  49. $roleName = '超级管理员';
  50. }
  51. $addition = [];
  52. if (in_array(($role->id ?? null), [Role::TYPE_CUSTOMER, Role::TYPE_TYPE_CUSTOMER_STAFF])) {
  53. $userSite = $user->sites->first();
  54. $addition['site'] = $userSite;
  55. $addition['masterUrl'] = sprintf('http://%s/admincp', ($userSite->domain ?? ''));
  56. }
  57. if (in_array($role->id, [Role::TYPE_LINK_PART, Role::TYPE_LINK_PART_CHONGQING])) {
  58. return redirect('/admin/link/hall');
  59. }
  60. if ($role->id == Role::TYPE_ARTICLE_PART) {
  61. return redirect('/admin/articles-hall');
  62. }
  63. $statusMap = Site::query()->selectRaw('COUNT(id) as num,status')->whereIn('status', [1, 2, 3, 7])
  64. ->groupBy('status')->get()->keyBy('status')->toArray();
  65. $buildSiteNum = $statusMap[1]['num'] ?? 0;
  66. $srvSiteNum = $statusMap[3]['num'] ?? 0;
  67. $impSiteNum = $statusMap[2]['num'] ?? 0;
  68. $doneSiteNum = $statusMap[7]['num'] ?? 0;
  69. $totalSite = Site::query()->count();
  70. $numInfo = DB::table('num')
  71. ->selectRaw('SUM(traffic) AS traffic,SUM(inquire) AS inquire,SUM(top10) AS top10,ymd')
  72. ->where('ymd', date('Ymd', strtotime('-1 day')))
  73. ->groupBy('ymd')->first();
  74. $roles = auth()->user();
  75. if ($roles->is_super == 1) {
  76. $taskNum = ProjectFlowMemo::query()->where('status', '=', '0')->count() ?? 0;
  77. $mailboxNum = Mailbox::query()->where('is_read', 0)->count() ?? 0;
  78. } else {
  79. $memoIdList = ProjectFlowMemoRelation::query()->where('user_id', $roles->id)->pluck('memo_id');
  80. $taskNum = ProjectFlowMemo::query()->where('status', '=', '0')->whereIn('id', $memoIdList)->count() ?? 0;
  81. $mailboxNum = Mailbox::query()->where('user_id', $roles->id)->count() ?? 0;
  82. }
  83. //续费客户
  84. $renewalCount = Site::query()->where('status', 3)->whereNotNull('renewal_at')->count() ?? 0;
  85. $taskCount = WeekTaskInfo::query()->count() ?? 0;
  86. return view('admin/index/main', [
  87. 'mailboxNum' => $mailboxNum,
  88. 'renewalCount' => $renewalCount,
  89. 'taskNum' => $taskNum,
  90. 'buildSiteNum' => $buildSiteNum,
  91. 'srvSiteNum' => $srvSiteNum,
  92. 'customerNum' => $totalSite - $doneSiteNum,
  93. 'impSiteNum' => $impSiteNum,
  94. 'menus' => $menus,
  95. 'user' => $user,
  96. 'roleName' => $roleName,
  97. 'indexPage' => $this->indexPage($role, $menusArr),
  98. 'top10' => $numInfo->top10 ?? 0,
  99. 'inquire' => $numInfo->inquire ?? 0,
  100. 'taskCount' => $taskCount
  101. ] + $addition);
  102. }
  103. //获取菜单
  104. protected function menus($user)
  105. {
  106. /** @var \App\Http\Models\User $user */
  107. if (!empty($user->is_super))
  108. return Permission::query()->where(['type' => 1])->orderByDesc('sort')
  109. ->get()->toArray();
  110. if (in_array($user->role_id, [Role::TYPE_CUSTOMER, Role::TYPE_TYPE_CUSTOMER_STAFF])) { //客户人员菜单独自配置
  111. return $user->permissions()->orderByDesc('sort')->get()->toArray();
  112. }
  113. return ($role = $user->role ?? null)
  114. ? $menus = $role->permissions()->where('type', 1)->orderByDesc('sort')->get()->toArray()
  115. : [];
  116. }
  117. //个人信息
  118. public function profile(ProfilerRequest $request)
  119. {
  120. if (!$request->ajax()) {
  121. return view('admin/index/profile', [
  122. 'data' => Auth::user()
  123. ]);
  124. }
  125. $user = Auth::user();
  126. /** @var \App\Http\Models\User $user * */
  127. $validated = $request->validated();
  128. if (!empty($validated['password'])) {
  129. $validated['password'] = bcrypt($validated['password']);
  130. } else {
  131. unset($validated['password']);
  132. }
  133. if (empty($validated['profile_img'])) {
  134. $validated['profile_img'] = asset('img/social_round_github_64px_1196568_easyicon.net.png');
  135. }
  136. $user->update($validated);
  137. return response()->json(['message' => '操作成功']);
  138. }
  139. }