137 lines
5.5 KiB
PHP
137 lines
5.5 KiB
PHP
<?php
|
|
|
|
namespace Peidikeji\Article\Http\Controllers;
|
|
|
|
use Carbon\Carbon;
|
|
use Dcat\Admin\Form;
|
|
use Dcat\Admin\Grid;
|
|
use Dcat\Admin\Admin;
|
|
use Peidikeji\Article\Models\Article;
|
|
use Dcat\Admin\Grid\Column as GridColumn;
|
|
use Peidikeji\Article\Models\ArticleCategory;
|
|
use Dcat\Admin\Http\Controllers\AdminController;
|
|
|
|
class ArticleController extends AdminController
|
|
{
|
|
protected $translation = 'peidikeji.article::article';
|
|
|
|
protected $extDefaults = [];//例如:['key1'=>'']
|
|
|
|
public function grid(){
|
|
return Grid::make(Article::with(['category', 'adminUser']), function ($grid) {
|
|
$grid->disableRowSelector();
|
|
$grid->column('category.name')->label();
|
|
$grid->column('title')->display(function ($v) {
|
|
if (mb_strlen($v) > 20) {
|
|
return mb_substr($v, 0, 17) . '...';
|
|
} else {
|
|
return $v;
|
|
}
|
|
});
|
|
$grid->column('cover')->image(100, 100);
|
|
$grid->column('author_name')->display(function (){
|
|
return $this->author_name;
|
|
});
|
|
$grid->column('like_nums');
|
|
$grid->column('read_nums');
|
|
$grid->column('sort')->editable(['mask' => '{alias:\'numeric\',min:0,max:999}']);
|
|
$grid->column('published_at');
|
|
$grid->column('is_enable')->if(function(){
|
|
return !config('admin.permission.enable') || Admin::user()->can('dcat.admin.articles.edit');
|
|
})->then(function (GridColumn $column) {
|
|
$column->switch();
|
|
})->else(function (GridColumn $column) {
|
|
$column->bool();
|
|
});
|
|
$grid->column('is_recommend')->if(function(){
|
|
return !config('admin.permission.enable') || Admin::user()->can('dcat.admin.articles.edit');
|
|
})->then(function (GridColumn $column) {
|
|
$column->switch();
|
|
})->else(function (GridColumn $column) {
|
|
$column->bool();
|
|
});
|
|
|
|
// $grid->column('remarks');
|
|
|
|
$grid->model()->orderBy('sort', 'desc');
|
|
$grid->model()->orderBy('created_at', 'desc');
|
|
|
|
|
|
$grid->setDialogFormDimensions('50%', '70%');
|
|
$grid->disableCreateButton(!(!config('admin.permission.enable') || Admin::user()->can('dcat.admin.articles.create')));
|
|
$grid->enableDialogCreate();
|
|
|
|
$grid->actions(function (Grid\Displayers\Actions $actions) {
|
|
$actions->disableView();
|
|
$actions->disableEdit();
|
|
$actions->quickEdit(!config('admin.permission.enable') || Admin::user()->can('dcat.admin.articles.edit'));
|
|
$actions->delete(!config('admin.permission.enable') || Admin::user()->can('dcat.admin.articles.destroy'));
|
|
});
|
|
|
|
$grid->filter(function (Grid\Filter $filter) {
|
|
$filter->panel();
|
|
$filter->expand();
|
|
$filter->equal('category_id', '分类')->select(ArticleCategory::selectOptions())->width(3);
|
|
$filter->like('title')->width(3);
|
|
$filter->between('published_at')->datetime()->width(7);
|
|
});
|
|
});
|
|
}
|
|
|
|
public function form()
|
|
{
|
|
return Form::make(new Article(), function($form){
|
|
$form->select('category_id')->options(ArticleCategory::selectOptions(false));
|
|
$form->text('title')->required();
|
|
$form->text('sub_title');
|
|
$form->image('cover')
|
|
->uniqueName()
|
|
->move('articles/'.Carbon::now()->toDateString())
|
|
->saveFullUrl()
|
|
->autoSave(false)
|
|
->autoUpload()
|
|
->removable(false)//禁止用户从页面点击删除服务器上的文件,可以实现图片覆盖上传效果
|
|
->retainable();
|
|
$form->text('author');
|
|
$form->file('media_path')->chunked()
|
|
->accept('mp4,mp3', 'mp4/*,mp3/*')
|
|
->move('articles-media/'.Carbon::now()->toDateString())
|
|
->maxSize(204800)//默认最大200M
|
|
->saveFullUrl()
|
|
->removable(false)
|
|
->autoUpload()->autoSave(false);
|
|
|
|
$form->datetime('published_at');
|
|
$form->switch('is_enable')->default(0);
|
|
$form->switch('is_recommend')->default(0);
|
|
$form->number('sort')->min(0)->default(0);
|
|
$form->text('remarks');
|
|
|
|
$form->keyValue('ext', '扩展字段')->default($this->extDefaults)->setKeyLabel('键名')->setValueLabel('键值')
|
|
->saving(function($v){
|
|
return json_encode($v ?? []);
|
|
});
|
|
|
|
$form->editor('content')->options([
|
|
'plugins' => [
|
|
'image',
|
|
'lists',
|
|
'preview',
|
|
'fullscreen',
|
|
'table',
|
|
],
|
|
'toolbar' => [
|
|
'undo redo | preview fullscreen | styleselect | fontsizeselect bold italic underline strikethrough forecolor backcolor | image blockquote removeformat codesample',
|
|
'alignleft aligncenter alignright alignjustify| indent outdent bullist numlist table subscript superscript | code',
|
|
]
|
|
])->height('800');
|
|
Admin::style(<<<css
|
|
.tox.tox-silver-sink.tox-tinymce-aux{
|
|
z-index:99999999;
|
|
}
|
|
css);
|
|
|
|
});
|
|
}
|
|
}
|