gdoo/app/Gdoo/Index/Controllers/DashboardController.php

326 lines
11 KiB
PHP

<?php namespace Gdoo\Index\Controllers;
use Request;
use DB;
use Gdoo\System\Models\Menu;
use Gdoo\System\Models\Widget;
use Gdoo\User\Models\UserWidget;
class DashboardController extends DefaultController
{
public $permission = ['index', 'config', 'quickMenu', 'settingWidget', 'settingInfo'];
public function indexAction()
{
$auth = auth()->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,
]);
}
}