This commit is contained in:
2020-09-17 09:00:08 +08:00
commit 6366331f55
714 changed files with 167687 additions and 0 deletions

View File

@@ -0,0 +1,81 @@
<?php
namespace App\Admin\Controllers\Advert;
use App\Models\Advert;
use App\Models\Category;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
class IndexController extends AdminController
{
protected $title = '广告位管理';
protected function grid()
{
$grid = new Grid(new Advert);
$grid->actions(function ($actions) {
$actions->disableView();
});
$grid->filter(function ($filter) {
$filter->column(1 / 2, function ($filter) {
$filter->like('title', '广告名称');
$filter->like('category.id', '分类名称')->select(Category::selectOptions(function ($model) {
return $model->where('status', 1)->where('type', Category::TYPE_ADVERT);
}, '所有分类'));
});
$filter->disableIdFilter();
});
$grid->column('id');
$grid->column('cover', '图片')->image('', 60, 60);
$grid->column('category.title', '分类名称');
$grid->column('title', '广告名称');
$grid->column('url', '地址');
$grid->column('sort', '排序');
return $grid;
}
/**
* Make a form builder.
* @return Form
*/
protected function form()
{
$form = new Form(new Advert);
$form->text('title', '广告名称')->required();
$form->select('category_id', '所属分类')
->options(Category::selectOptions(function ($model) {
return $model->where('status', 1)->where('type', Category::TYPE_ADVERT);
}, '选择分类'))
->rules('required|min:1', [
'required' => '必须选择所属分类',
'min' => '必须选择所属分类',
]);
$form->image('cover', '封面图片')
->rules(function ($form) {
if ($form->model()->cover != []) {
return 'nullable|image';
} else {
return 'required';
}
})
->move('images/' . date('Y/m/d'))
->removable()
->uniqueName();
$form->text('url', '链接地址');
$form->number('sort', '排序')
->default(1)
->required()
->help('数字越大越靠前');
return $form;
}
}

View File

@@ -0,0 +1,70 @@
<?php
namespace App\Admin\Controllers\Article;
use App\Models\Article;
use App\Models\Category;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
class IndexController extends AdminController
{
protected $title = '内容管理';
public function grid()
{
$grid = new Grid(new Article);
$grid->model()->orderBy('id', 'desc');
$grid->filter(function ($filter) {
$filter->column(1 / 2, function ($filter) {
$filter->like('title', '文章标题');
$filter->equal('category.id', '所属分类')->select(Category::selectOptions(function ($model) {
return $model->where('status', 1)->whereIn('type', [Category::TYPE_ARTICLE, Category::TYPE_SHOW]);
}, '所有分类'));
});
$filter->disableIdFilter();
});
$grid->column('id', '#ID#');
$grid->column('cover', '封面图片')->image('', 100);
$grid->column('category.title', '所属分类');
$grid->column('title', '文章标题');
$grid->column('sort', '序号');
$states = [
'on' => ['value' => 1, 'text' => '打开', 'color' => 'primary'],
'off' => ['value' => 2, 'text' => '关闭', 'color' => 'default'],
];
$grid->column('status', '状态')->switch($states);
$grid->column('created_at', '创建时间');
return $grid;
}
public function form()
{
$form = new Form(new Article);
$form->text('title', '文章标题')->rules('min:2');
$form->select('category_id', '所属分类')
->options(Category::selectOptions(function ($model) {
return $model->where('status', 1)->whereIn('type', [Category::TYPE_ARTICLE, Category::TYPE_SHOW]);
}, '选择分类'))
->rules('required|min:1', [
'required' => '必须选择所属分类',
'min' => '必须选择所属分类',
]);
$form->textarea('description', '内容简介')->rules('max:350');
$form->image('cover', '封面')
->move('images/' . date('Y/m/d'))
->removable()
->uniqueName();
$form->ueditor('content', '文章内容')->rules('required', ['required' => '详情不能为空']);
$form->number('sort', '序号')->default(0)->rules('required', ['required' => '序号必须填写'])->help('倒序优先');
return $form;
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Admin\Controllers;
use Encore\Admin\Controllers\AuthController as BaseAuthController;
class AuthController extends BaseAuthController
{
}

View File

@@ -0,0 +1,144 @@
<?php
namespace App\Admin\Controllers\Category;
use App\Models\Article;
use App\Models\Category;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Layout\Column;
use Encore\Admin\Layout\Row;
use Encore\Admin\Tree;
use Encore\Admin\Widgets\Box;
use Encore\Admin\Widgets\Form as WidgetsForm;
class IndexController extends AdminController
{
protected $title = '分类管理';
/**
* Index interface.
* @return \Closure
*/
public function grid()
{
return function (Row $row) {
$row->column(6, $this->treeView());
$row->column(6, function (Column $column) {
$form = new WidgetsForm();
$form->select('parent_id', '上级分类')->options(Category::selectOptions(function ($model) {
return $model->where('status', 1);
}, '一级分类'));
$form->text('title', '分类名称')->rules('required');
$form->select('type', '分类类型')
->options(Category::TYPES)
->when('show', function (WidgetsForm $form) {
$form->select('article_id', '关联文章')
->options(function ($option, $info) {
return Article::whereHas('category', function ($q) {
$q->where('type', 'show');
})->pluck('title', 'id');
})->help('当分类类型是文章详情的时候需要选择关联文章');
})
->required();
$form->textarea('description', '分类简介')
->rules('nullable');
$form->image('cover', 'Logo')
->move('images/' . date('Y/m/d'))
->removable()
->uniqueName();
$form->number('order', '排序')->default(0);
$form->switch('top_show', '顶部导航显示')->states()->default(0);
$form->switch('status', '显示')->states()->default(1);
$form->action(admin_url('categories'));
$column->append((new Box('新增分类', $form))->style('success'));
});
};
}
/**
* @return Tree
*/
protected function treeView()
{
return Category::tree(function (Tree $tree) {
$tree->disableCreate();
$tree->branch(function ($branch) {
if ($branch['status'] == 1) {
$payload = "<i class='fa fa-eye text-primary'></i> ";
} else {
$payload = "<i class='fa fa-eye text-gray'></i> ";
}
$payload .= " [ID:{$branch['id']}] - ";
$payload .= " <strong>{$branch['title']}</strong> ";
$payload .= " <small>{$branch['type']}</small> ";
$payload .= " <small style='color:#999'>{$branch['description']}</small>";
return $payload;
});
});
}
/**
* Make a form builder.
* @return Form
*/
protected function form()
{
$form = new Form(new Category);
$form->select('parent_id', '上级分类')->options(Category::selectOptions(function ($model) {
return $model->where('status', 1);
}, '一级分类'));
$form->text('title', '分类名称')->rules('required');
$form->select('type', '分类类型')
->options(Category::TYPES)
->when('show', function (Form $form) {
$form->select('article_id', '关联文章')
->options(function ($option, $info) {
return Article::whereHas('category', function ($q) {
$q->where('type', 'show');
})->pluck('title', 'id');
})->help('当分类类型是文章详情的时候需要选择关联文章');
})
->required()
->rules('required');
$form->textarea('description', '分类简介')->rows(4)->rules('nullable');
$form->image('cover', 'Logo')
->move('images/' . date('Y/m/d'))
->removable()
->uniqueName();
$form->number('order', '排序')->default(0)->help('正序优先');
$form->switch('status', '显示')->states()->default(1);
$form->switch('top_show', '顶部导航显示')->states()->default(0);
$form->saving(function (Form $form) {
if (request()->has('title')) {
if (request()->type == Category::TYPE_SHOW && empty(request()->article_id)) {
// $error = new MessageBag([
// 'title' => '错误',
// 'message' => '文章类型是文章详情的时候需要选择关联文章',
// ]);
//
// return back()->withInput()->with(compact('error'));
}
}
});
return $form;
}
public function destroy($id)
{
return $this->form()->destroy($id);
}
}

View File

@@ -0,0 +1,67 @@
<?php
namespace App\Admin\Controllers;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Show;
class ExampleController extends AdminController
{
/**
* Title for current resource.
*
* @var string
*/
protected $title = 'Example controller';
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
$grid = new Grid(new ExampleModel);
$grid->column('id', __('ID'))->sortable();
$grid->column('created_at', __('Created at'));
$grid->column('updated_at', __('Updated at'));
return $grid;
}
/**
* Make a show builder.
*
* @param mixed $id
* @return Show
*/
protected function detail($id)
{
$show = new Show(ExampleModel::findOrFail($id));
$show->field('id', __('ID'));
$show->field('created_at', __('Created at'));
$show->field('updated_at', __('Updated at'));
return $show;
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
$form = new Form(new ExampleModel);
$form->display('id', __('ID'));
$form->display('created_at', __('Created At'));
$form->display('updated_at', __('Updated At'));
return $form;
}
}

View File

@@ -0,0 +1,34 @@
<?php
namespace App\Admin\Controllers;
use App\Http\Controllers\Controller;
use Encore\Admin\Controllers\Dashboard;
use Encore\Admin\Layout\Column;
use Encore\Admin\Layout\Content;
use Encore\Admin\Layout\Row;
class HomeController extends Controller
{
public function index(Content $content)
{
return $content
->title('Dashboard')
->description('Description...')
->row(Dashboard::title())
->row(function (Row $row) {
$row->column(4, function (Column $column) {
$column->append(Dashboard::environment());
});
$row->column(4, function (Column $column) {
$column->append(Dashboard::extensions());
});
$row->column(4, function (Column $column) {
$column->append(Dashboard::dependencies());
});
});
}
}

View File

@@ -0,0 +1,37 @@
<?php
namespace App\Admin\Controllers\Link;
use App\Models\Link;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
class IndexController extends AdminController
{
protected $title = '友情链接';
public function grid()
{
$grid = new Grid(new Link);
$grid->column('id', '#ID#');
$grid->column('title', '标题');
$grid->column('url', '地址');
$grid->column('created_at', '创建时间');
return $grid;
}
public function form()
{
$form = new Form(new Link);
$form->text('title', '标题')->required();
$form->text('url', '地址')->required();
return $form;
}
}

View File

@@ -0,0 +1,12 @@
<?php
use Illuminate\Routing\Router;
Route::group([
'prefix' => config('admin.route.prefix'),
'namespace' => config('admin.route.namespace') . '\\Advert',
'middleware' => config('admin.route.middleware'),
], function (Router $router) {
$router->resource('adverts', 'IndexController');
});

View File

@@ -0,0 +1,12 @@
<?php
use Illuminate\Routing\Router;
Route::group([
'prefix' => config('admin.route.prefix'),
'namespace' => config('admin.route.namespace') . '\\Article',
'middleware' => config('admin.route.middleware'),
], function (Router $router) {
$router->resource('articles', 'IndexController');
});

View File

@@ -0,0 +1,12 @@
<?php
use Illuminate\Routing\Router;
Route::group([
'prefix' => config('admin.route.prefix'),
'namespace' => config('admin.route.namespace') . '\\Category',
'middleware' => config('admin.route.middleware'),
], function (Router $router) {
$router->resource('categories', 'IndexController');
});

12
app/Admin/Routes/link.php Normal file
View File

@@ -0,0 +1,12 @@
<?php
use Illuminate\Routing\Router;
Route::group([
'prefix' => config('admin.route.prefix'),
'namespace' => config('admin.route.namespace') . '\\Link',
'middleware' => config('admin.route.middleware'),
], function (Router $router) {
$router->resource('links', 'IndexController');
});

29
app/Admin/bootstrap.php Normal file
View File

@@ -0,0 +1,29 @@
<?php
use Encore\Admin\Form;
use Encore\Admin\Grid;
Form::forget(['map', 'editor']);
Form::init(function (Form $form) {
$form->disableEditingCheck();
$form->disableCreatingCheck();
$form->disableViewCheck();
$form->tools(function (Form\Tools $tools) {
$tools->disableDelete();
$tools->disableView();
$tools->disableList();
});
});
Grid::init(function (Grid $grid) {
$grid->disableExport();
$grid->actions(function (Grid\Displayers\Actions $actions) {
$actions->disableView();
});
$grid->disableBatchActions();
$grid->filter(function ($filter) {
$filter->disableIdFilter();
});
// $grid->expandFilter();
});

21
app/Admin/routes.php Normal file
View File

@@ -0,0 +1,21 @@
<?php
use Illuminate\Routing\Router;
Admin::routes();
Route::group([
'prefix' => config('admin.route.prefix'),
'namespace' => config('admin.route.namespace'),
'middleware' => config('admin.route.middleware'),
'as' => config('admin.route.prefix') . '.',
], function (Router $router) {
$router->get('/', 'HomeController@index')->name('home');
});
require __DIR__ . '/Routes/article.php';
require __DIR__ . '/Routes/category.php';
require __DIR__ . '/Routes/link.php';
require __DIR__ . '/Routes/advert.php';