阶段更新

This commit is contained in:
2023-01-12 14:47:38 +08:00
parent 088dd64b2f
commit 5b8901281c
626 changed files with 39326 additions and 12 deletions

View File

@@ -0,0 +1,136 @@
<?php
namespace Modules\Cms\Http\Controllers\Admin;
use App\Admin\Traits\WithUploads;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Illuminate\Support\Arr;
use Modules\Cms\Models\Article;
use Modules\Cms\Models\Category;
use Modules\Cms\Models\Tag;
class ArticleController extends AdminController
{
use WithUploads;
protected $title = '文章管理';
public function grid(): Grid
{
$grid = new Grid(new Article());
$grid->model()->with('categories')->withCount('versions');
$grid->filter(function (Grid\Filter $filter) {
$filter->scope('trashed', '回收站')->onlyTrashed();
$filter->column(1 / 3, function (Grid\Filter $filter) {
$filter->like('title', '文章标题');
$filter->like('slug', 'SLUG');
});
$filter->column(1 / 3, function (Grid\Filter $filter) {
$filter->like('categories.title', '所属分类');
$filter->like('tags.name', '标签');
});
$filter->column(1 / 3, function (Grid\Filter $filter) {
$filter->equal('status', '状态')->select(Article::getStatusMap());
});
});
$grid->column('id', '#ID#');
$grid->column('categories', '所属分类')->display(function ($categories) {
return Arr::pluck($categories, 'title');
})->label();
// $grid->column('tags')->pluck('name')->label('warning');
$grid->column('title', '文章标题');
// $grid->column('slug', 'SLUG');
$grid->column('status', '状态')->bool();
$grid->column('clicks', '浏览量');
$grid->column('versions_count', '历史版本')->link(function () {
return route('admin.cms.versions', [
'model' => get_class($this),
'key' => $this->id,
]);
}, '_self');
$grid->column('created_at', '创建时间');
return $grid;
}
/**
* Notes : 内容表单
* @Date : 2021/3/15 5:21 下午
* @Author : < Jason.C >
* @return \Encore\Admin\Form
*/
public function form(): Form
{
$form = new Form(new Article());
$form->text('title', '文章标题')
->rules([
'required',
'max:255',
], [
'max' => '标题最大长度不能超过 :max 个字符',
])
->required();
// $form->text('sub_title', '副标题')
// ->rules([
// 'nullable',
// 'max:255',
// ], [
// 'max' => '标题最大长度不能超过 :max 个字符',
// ]);
// $form->text('slug', '英文别名')
// ->rules([
// 'nullable',
// 'alpha_dash',
// ], [
// 'alpha_dash' => '别名中包含非法字符',
// ])
// ->help('字母、数字、下划线组成用来展示简短的URL');
$form->multipleSelect('categories', '所属分类')
->options(Category::selectOptions(function ($model) {
return $model->where('status', 1);
}, '请选择文章分类'))
->required();
// $form->multipleSelect('tags', '内容标签')
// ->options(function () {
// return Tag::pluck('name', 'id');
// });
$this->cover($form);
// $this->pictures($form);
$form->textarea('description', '文章简介')
->rules([
'nullable',
'max:255',
], [
'max' => '标题最大长度不能超过 :max 个字符',
]);
$form->ueditor('content', '文章内容')
->rules([
'required',
], [
'required' => '文章内容不能为空',
])
->required();
$this->attachments($form);
$form->switch('status', '状态')
->default(1);
return $form;
}
}

View File

@@ -0,0 +1,98 @@
<?php
namespace Modules\Cms\Http\Controllers\Admin;
use App\Admin\Traits\WithUploads;
use Closure;
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;
use Modules\Cms\Models\Category;
class CategoryController extends AdminController
{
use WithUploads;
protected $title = '分类管理';
public function grid(): Closure
{
return function (Row $row) {
$row->column(6, $this->treeView());
$row->column(6, function (Column $column) {
$form = new WidgetsForm();
$this->formData($form, true);
$form->action(route('admin.cms.categories.store'));
$column->append((new Box('新增分类', $form))->style('success'));
});
};
}
protected function treeView(): Tree
{
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> ";
return $payload;
});
});
}
protected function form(): Form
{
$form = new Form(new Category);
$this->formData($form);
return $form;
}
private function formData($form, $hideContent = false)
{
$form->select('parent_id', '上级分类')
->options(Category::selectOptions(function ($model) {
return $model->where('status', 1);
}, '一级分类'))
->required();
$form->text('title', '分类名称')
->rules('required');
$form->text('slug', '英文别名')
->rules([
'nullable',
'alpha_dash',
], [
'alpha_dash' => '别名中包含非法字符',
])
->help('字母、数字、下划线组成用来展示简短的URL');
$form->textarea('description', '分类简介')
->rules('nullable');
$this->cover($form);
$this->pictures($form);
$form->number('order', '排序')->default(0);
if (!$hideContent) {
$form->ueditor('content', '分类内容');
}
$form->switch('status', '状态')->default(1);
}
}

View File

@@ -0,0 +1,124 @@
<?php
namespace Modules\Cms\Http\Controllers\Admin;
use App\Admin\Traits\WithUploads;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Modules\Cms\Models\Page;
use Modules\Cms\Models\Tag;
class PageController extends AdminController
{
use WithUploads;
protected $title = '单页管理';
public function grid(): Grid
{
$grid = new Grid(new Page());
$grid->model()->withCount('versions');
$grid->filter(function (Grid\Filter $filter) {
$filter->scope('trashed', '回收站')->onlyTrashed();
$filter->column(1 / 3, function (Grid\Filter $filter) {
$filter->like('title', '页面标题');
$filter->like('tags.name', '标签');
});
$filter->column(1 / 3, function (Grid\Filter $filter) {
$filter->like('slug', 'SLUG');
});
$filter->column(1 / 3, function (Grid\Filter $filter) {
$filter->equal('status', '状态')->select(Page::getStatusMap());
});
});
$grid->column('id', '#ID#');
$grid->column('title', '页面标题');
$grid->column('tags')->pluck('name')->label('warning');
$grid->column('slug', '英文别名');
$grid->column('status', '状态')->bool();
$grid->column('clicks', '浏览量');
$grid->column('versions_count', '历史版本')->link(function () {
return route('admin.cms.versions', [
'model' => get_class($this),
'key' => $this->id,
]);
}, '_self');
$grid->column('created_at', '创建时间');
return $grid;
}
/**
* Notes : 内容表单
* @Date : 2021/3/15 5:21 下午
* @Author : < Jason.C >
* @return \Encore\Admin\Form
*/
public function form(): Form
{
$form = new Form(new Page());
$form->text('title', '页面标题')
->rules([
'required',
'max:255',
], [
'max' => '标题最大长度不能超过 :max 个字符',
])
->required();
$form->text('sub_title', '副标题')
->rules([
'nullable',
'max:255',
], [
'max' => '标题最大长度不能超过 :max 个字符',
]);
$form->text('slug', '英文别名')
->rules([
'nullable',
'alpha_dash',
], [
'alpha_dash' => '别名中包含非法字符',
])
->help('字母、数字、下划线组成用来展示简短的URL');
$form->multipleSelect('tags', '页面标签')
->options(function () {
return Tag::pluck('name', 'id');
});
$this->cover($form);
$this->pictures($form);
$form->textarea('description', '页面简介')
->rules([
'nullable',
'max:255',
], [
'max' => '标题最大长度不能超过 :max 个字符',
]);
$form->ueditor('content', '页面内容')
->rules([
'required',
], [
'required' => '页面内容不能为空',
])
->required();
$this->attachments($form);
$form->switch('status', '状态')
->default(1);
return $form;
}
}

View File

@@ -0,0 +1,49 @@
<?php
namespace Modules\Cms\Http\Controllers\Admin;
use App\Admin\Traits\WithUploads;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Modules\Cms\Models\Storage;
class StorageController extends AdminController
{
use WithUploads;
protected $title = '素材管理';
public function grid(): Grid
{
$grid = new Grid(new Storage());
$grid->column('id', '#ID#');
$grid->column('name', '素材标题');
$grid->column('地址')->display(function () {
return $this->cover_text;
});
return $grid;
}
public function form(): Form
{
$form = new Form(new Storage());
$form->text('name', '素材标题')
->rules([
'required',
'max:255',
], [
'max' => '标题最大长度不能超过 :max 个字符',
])
->required();
$this->cover($form);
$form->url('url', '素材地址');
return $form;
}
}

View File

@@ -0,0 +1,48 @@
<?php
namespace Modules\Cms\Http\Controllers\Admin;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Modules\Cms\Models\Tag;
class TagController extends AdminController
{
protected $title = '标签管理';
public function grid(): Grid
{
$grid = new Grid(new Tag());
$grid->model()
->withCount(['articles', 'pages'])
->orderByDesc('id');
$grid->filter(function (Grid\Filter $filter) {
$filter->scope('trashed', '回收站')->onlyTrashed();
$filter->column(1 / 2, function (Grid\Filter $filter) {
$filter->like('name', '标签名称');
});
});
$grid->column('name', '标签名称');
$grid->column('articles_count');
$grid->column('pages_count');
$grid->column('created_at', '创建时间');
return $grid;
}
public function form(): Form
{
$form = new Form(new Tag());
$form->text('name', '标签名称');
return $form;
}
}

View File

@@ -0,0 +1,68 @@
<?php
namespace Modules\Cms\Http\Controllers\Admin;
use Encore\Admin\Auth\Database\Administrator;
use Encore\Admin\Grid;
use Encore\Admin\Layout\Content;
use Encore\Admin\Widgets\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Routing\Controller;
use Overtrue\LaravelVersionable\Version;
class VersionController extends Controller
{
public function index(Content $content, $model, $key): Content
{
return $content
->header($model . ' => ' . $key)
->description('数据操作日志')
->body($this->grid($model, $key));
}
public function grid($model, $key): Grid
{
$grid = new Grid(new Version());
$grid->disableCreateButton();
$grid->disableActions();
$grid->disableTools();
$grid->model()->whereHasMorph(
'versionable',
$model,
function (Builder $query) use ($key) {
$query->where('id', $key);
}
)->orderByDesc('id');
$grid->column('操作用户')->display(function () {
if ($this->user_id < config('mall.administrator_max_id')) {
config(['versionable.user_model' => Administrator::class]);
return '[Admin] ' . ($this->user->name ?? '--SYSTEM--');
} else {
return '[USER] ' . ($this->user->username ?? '--USER--');
}
});
$grid->column('versionable_type', '数据变动')->expand(function () {
$data = [];
foreach ($this->contents as $key => $item) {
$data[] = [
$key,
is_array($item) ? json_encode($item, JSON_UNESCAPED_UNICODE) : $item,
];
}
return new Table(['字段名称', '变更值'], $data);
});
$grid->column('操作时间')->display(function () {
return $this->created_at->toDateTimeString();
});
return $grid;
}
}