4
0
Fork 0
dcat-admin/packages/article/src/Http/Controllers/ArticleController.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);
});
}
}