user(); $widgets = DB::table('widget') ->where('type', 1) ->where('status', 1) ->where('default', 1) ->permission('receive_id') ->orderBy('sort', 'asc') ->get(); $user_widgets = UserWidget::where('user_id', $auth['id']) ->where('type', 1) ->orderBy('sort', 'asc') ->get()->keyBy('node_id'); $widgets->transform(function ($row) use($user_widgets) { $user_widget = $user_widgets[$row['id']]; if (not_empty($user_widget)) { $row['id'] = $user_widget['id']; $row['status'] = $user_widget['status']; $row['grid'] = $user_widget['grid']; $row['sort'] = $user_widget['sort']; if ($user_widget['name']) { $row['name'] = $user_widget['name']; } if ($user_widget['color']) { $row['color'] = $user_widget['color']; } if ($user_widget['icon']) { $row['icon'] = $user_widget['icon']; } $row['params'] = json_decode($user_widget['params'], true); return $row; } }); $widgets = $widgets->sortBy('sort'); $infos = DB::table('widget') ->where('type', 2) ->where('status', 1) ->where('default', 1) ->permission('receive_id') ->orderBy('sort', 'asc') ->get(); $user_infos = UserWidget::where('user_id', $auth['id']) ->where('type', 2) ->orderBy('sort', 'asc') ->get()->keyBy('node_id'); $infos->transform(function ($row) use($user_infos) { $user_info = $user_infos[$row['id']]; if (not_empty($user_info)) { $row['id'] = $user_info['id']; $row['status'] = $user_info['status']; $row['sort'] = $user_info['sort']; if ($user_info['name']) { $row['name'] = $user_info['name']; } if ($user_info['color']) { $row['color'] = $user_info['color']; } if ($user_info['icon']) { $row['icon'] = $user_info['icon']; } $row['params'] = json_decode($user_info['params'], true); return $row; } }); $infos = $infos->sortBy('sort'); $quicks = Menu::leftJoin('user_widget', 'user_widget.node_id', '=', 'menu.id') ->where('user_widget.user_id', $auth['id']) ->where('user_widget.type', 3) ->orderBy('user_widget.sort', 'asc') ->get(['menu.*','user_widget.name','user_widget.color','user_widget.icon']); $quicks->transform(function ($row) { $count = substr_count($row['url'], '/'); if ($count == 0) { $row['url'] = $row['url'].'/index/index'; } else if($count == 1) { $row['url'] = $row['url'].'/index'; } $row['key'] = str_replace(['/', '?', '='], ['_', '_', '_'], $row['url']); return $row; }); $grids = ['8', '4']; return $this->display([ 'widgets' => $widgets, 'infos' => $infos, 'grids' => $grids, 'quicks' => $quicks, ]); } // 仪表板设置 public function configAction() { $auth = auth()->user(); if (Request::method() == 'POST') { $gets = Request::all(); $widgets = $gets['widget']; $sort = 1; foreach($widgets as $widget) { $widget['sort'] = $sort; $sort ++; $model = UserWidget::firstOrNew(['type' => 1, 'node_id' => $widget['id'], 'user_id' => $auth['id']]); $model->fill($widget); $model->save(); } $infos = $gets['info']; $sort = 1; foreach($infos as $info) { $info['sort'] = $sort; if ($info['permission'] && $info['date']) { $info['params'] = json_encode(['permission' => $info['permission'], 'date' => $info['date']], JSON_UNESCAPED_UNICODE); } $sort ++; $model = UserWidget::firstOrNew(['type' => 2, 'node_id' => $info['id'], 'user_id' => $auth['id']]); $model->fill($info); $model->save(); } $menus = $gets['menu']; $sort = 1; $nodeIds = UserWidget::where('type', 3)->where('user_id', $auth['id'])->pluck('id', 'node_id')->toArray(); foreach($menus as $menu) { unset($nodeIds[$menu['node_id']]); $menu['sort'] = $sort; $sort ++; $model = UserWidget::firstOrNew(['type' => 3, 'node_id' => $menu['node_id'], 'user_id' => $auth['id']]); $model->fill($menu); $model->save(); } // 删除旧菜单 UserWidget::whereIn('id', array_values($nodeIds))->delete(); return $this->json('仪表盘设置成功', true); } $widgets = DB::table('widget') ->where('type', 1) ->where('status', 1) ->where('default', 1) ->permission('receive_id') ->orderBy('sort', 'asc') ->get(['id', 'name', 'color', 'icon', 'grid', 'status']); $user_widgets = UserWidget::where('user_id', $auth['id']) ->where('type', 1) ->orderBy('sort', 'asc') ->get(['id', 'name', 'color', 'icon', 'grid', 'node_id', 'status'])->keyBy('node_id'); $widgets->transform(function ($row) use($user_widgets) { $user_widget = $user_widgets[$row['id']]; if (not_empty($user_widget)) { $row['sort'] = $user_widget['sort']; $row['status'] = $user_widget['status']; $row['node_id'] = $user_widget['node_id']; $row['widget_id'] = $user_widget['id']; $row['grid'] = $user_widget['grid']; if ($user_widget['name']) { $row['name'] = $user_widget['name']; } if ($user_widget['color']) { $row['color'] = $user_widget['color']; } if ($user_widget['icon']) { $row['icon'] = $user_widget['icon']; } } return $row; }); $widgets = $widgets->sortBy('sort'); $infos = DB::table('widget') ->where('type', 2) ->where('status', 1) ->where('default', 1) ->permission('receive_id') ->orderBy('sort', 'asc') ->get(['id', 'name', 'color', 'icon', 'grid', 'status']); $user_infos = UserWidget::where('user_id', $auth['id']) ->where('type', 2) ->orderBy('sort', 'asc') ->get(['id', 'name', 'color', 'icon', 'grid', 'node_id', 'status', 'params'])->keyBy('node_id'); $infos->transform(function ($row) use($user_infos) { $user_info = $user_infos[$row['id']]; if (not_empty($user_info)) { $row['sort'] = $user_info['sort']; $row['status'] = $user_info['status']; $row['node_id'] = $user_info['node_id']; $row['info_id'] = $user_info['id']; if ($user_info['name']) { $row['name'] = $user_info['name']; } if ($user_info['color']) { $row['color'] = $user_info['color']; } if ($user_info['icon']) { $row['icon'] = $user_info['icon']; } $row['params'] = json_decode($user_info['params'], true); } return $row; }); $infos = $infos->sortBy('sort'); $menus = UserWidget::where('user_id', $auth['id']) ->where('type', 3) ->orderBy('sort', 'asc') ->get(); $grids = ['8', '4']; $json = [ 'widgets' => $widgets, 'infos' => $infos, 'menus' => $menus, ]; $json = json_encode($json, JSON_UNESCAPED_UNICODE); return $this->render([ 'json' => $json, 'widgets' => $widgets, 'infos' => $infos, 'grids' => $grids, 'menus' => $menus, ]); } // 添加快捷菜单 public function quickMenuAction() { $menus = DB::table('menu')->orderBy('lft', 'asc')->get(); $menus = array_nest($menus); return $this->render([ 'menus' => $menus, ]); } // 设置单个组件 public function settingInfoAction() { // 定义权限 $permissions = [ 'me' => "本人", 'me2' => "本人和下属", 'department' => "本部门", 'department2' => "本部门和下属部门", 'team' => "本销售组", 'team2' => "本销售组和下属销售组", 'all' => "所有人", ]; $dates = [ 'day' => '今天', 'day2' => '昨天', 'week' => '本周', 'week2' => '上周', 'month' => '本月', 'month2' => '上月', 'season' => '本季度', 'season2' => '上季度', 'year' => '本年', 'year2' => '去年', ]; $info_id = Request::input('info_id'); $row = UserWidget::where('id', $info_id)->first(); $widget = Widget::where('id', $row['node_id'])->first(); if (empty($row['date'])) { $row['date'] = 'month'; } if (empty($row['permission'])) { $row['permission'] = 'department'; } $row['widget_name'] = $widget['name']; return $this->render([ 'permissions' => $permissions, 'dates' => $dates, 'row' => $row, ]); } // 设置单个组件 public function settingWidgetAction() { $widget_id = Request::input('widget_id'); $row = UserWidget::where('id', $widget_id)->first(); $widget = Widget::where('id', $row['node_id'])->first(); if (empty($row['date'])) { $row['date'] = 'month'; } if (empty($row['permission'])) { $row['permission'] = 'department'; } $row['widget_name'] = $widget['name']; return $this->render([ 'row' => $row, ]); } }