| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 | <?phpnamespace App\Http\Controllers\Admin;use App\Http\Models\Mailbox;use App\Http\Models\Permission;use App\Http\Models\ProjectFlowMemo;use App\Http\Models\ProjectFlowMemoRelation;use App\Http\Models\Role;use App\Http\Models\Site;use App\Http\Models\WeekTaskInfo;use App\Http\Requests\Index\ProfilerRequest;use App\Http\Requests\Request;use Illuminate\Support\Facades\Auth;use App\Http\Controllers\Controller;use Illuminate\Support\Facades\DB;/** 后台首页 * Class IndexController * @package App\Http\Controllers\Admin */class IndexController extends Controller{    protected function indexPage($role, $menusArr)    {        switch ($role->id ?? null) {            case Role::TYPE_TYPE_CUSTOMER_STAFF:                $url = '/admin/meter/single';                return ['title' => '控制台', 'src' => $url];            case Role::TYPE_BID:                return ['title' => '竞价仪表', 'src' => '/admin/bid/dashboard'];            case Role::TYPE_CUSTOMER:                $menuIds = array_column($menusArr, 'id');                $url = '/admin/meter/single';                if (!in_array(32, $menuIds)) {                    $url = '/admin/rank/keyword';                }                return ['title' => '控制台', 'src' => $url];            default:                return ['title' => '首页', 'src' => '/admin/flow/home'];        }    }    //后台首页    public function main()    {        $user = auth()->user();        $menusArr = $this->menus($user);        $menus = list_to_tree($menusArr, 'id', 'parent_id');        $role = $user->role ?? null;        $roleName = $role->name ?? '';        if (!empty($user->is_super)) {            $roleName = '超级管理员';        }        $addition = [];        if (in_array(($role->id ?? null), [Role::TYPE_CUSTOMER, Role::TYPE_TYPE_CUSTOMER_STAFF])) {            $userSite = $user->sites->first();            $addition['site'] = $userSite;            $addition['masterUrl'] = sprintf('http://%s/admincp', ($userSite->domain ?? ''));        }        if (in_array($role->id, [Role::TYPE_LINK_PART, Role::TYPE_LINK_PART_CHONGQING])) {            return redirect('/admin/link/hall');        }        if ($role->id == Role::TYPE_ARTICLE_PART) {            return redirect('/admin/articles-hall');        }        $statusMap = Site::query()->selectRaw('COUNT(id) as num,status')->whereIn('status', [1, 2, 3, 7])            ->groupBy('status')->get()->keyBy('status')->toArray();        $buildSiteNum = $statusMap[1]['num'] ?? 0;        $srvSiteNum = $statusMap[3]['num'] ?? 0;        $impSiteNum = $statusMap[2]['num'] ?? 0;        $doneSiteNum = $statusMap[7]['num'] ?? 0;        $totalSite = Site::query()->count();        $numInfo = DB::table('num')            ->selectRaw('SUM(traffic) AS traffic,SUM(inquire) AS inquire,SUM(top10) AS top10,ymd')            ->where('ymd', date('Ymd', strtotime('-1 day')))            ->groupBy('ymd')->first();        $roles = auth()->user();        if ($roles->is_super == 1) {            $taskNum = ProjectFlowMemo::query()->where('status', '=', '0')->count() ?? 0;            $mailboxNum = Mailbox::query()->where('is_read', 0)->count() ?? 0;        } else {            $memoIdList = ProjectFlowMemoRelation::query()->where('user_id', $roles->id)->pluck('memo_id');            $taskNum = ProjectFlowMemo::query()->where('status', '=', '0')->whereIn('id', $memoIdList)->count() ?? 0;            $mailboxNum = Mailbox::query()->where('user_id', $roles->id)->count() ?? 0;        }        //续费客户        $renewalCount = Site::query()->where('status', 3)->whereNotNull('renewal_at')->count() ?? 0;        $taskCount = WeekTaskInfo::query()->count() ?? 0;        return view('admin/index/main', [                'mailboxNum' => $mailboxNum,                'renewalCount' => $renewalCount,                'taskNum' => $taskNum,                'buildSiteNum' => $buildSiteNum,                'srvSiteNum' => $srvSiteNum,                'customerNum' => $totalSite - $doneSiteNum,                'impSiteNum' => $impSiteNum,                'menus' => $menus,                'user' => $user,                'roleName' => $roleName,                'indexPage' => $this->indexPage($role, $menusArr),                'top10' => $numInfo->top10 ?? 0,                'inquire' => $numInfo->inquire ?? 0,                'taskCount' => $taskCount            ] + $addition);    }    //获取菜单    protected function menus($user)    {        /** @var \App\Http\Models\User $user */        if (!empty($user->is_super))            return Permission::query()->where(['type' => 1])->orderByDesc('sort')                ->get()->toArray();        if (in_array($user->role_id, [Role::TYPE_CUSTOMER, Role::TYPE_TYPE_CUSTOMER_STAFF])) { //客户人员菜单独自配置            return $user->permissions()->orderByDesc('sort')->get()->toArray();        }        return ($role = $user->role ?? null)            ? $menus = $role->permissions()->where('type', 1)->orderByDesc('sort')->get()->toArray()            : [];    }    //个人信息    public function profile(ProfilerRequest $request)    {        if (!$request->ajax()) {            return view('admin/index/profile', [                'data' => Auth::user()            ]);        }        $user = Auth::user();        /** @var \App\Http\Models\User $user * */        $validated = $request->validated();        if (!empty($validated['password'])) {            $validated['password'] = bcrypt($validated['password']);        } else {            unset($validated['password']);        }        if (empty($validated['profile_img'])) {            $validated['profile_img'] = asset('img/social_round_github_64px_1196568_easyicon.net.png');        }        $user->update($validated);        return response()->json(['message' => '操作成功']);    }}
 |