title('MINI扩展')
->description('官方推荐的扩展,不开放第三方(安装或卸载时,若出现红色的错误,重新刷新一下浏览器就行)')
->body($this->grid());
}
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return new Grid(new WxExtension(), function (Grid $grid) {
$grid->number();
$grid->column('name')->displayUsing(WxName::class);
$grid->column('description')->displayUsing(Extensions\Description::class)->width('50%');
$grid->column('authors')->display(function ($v) {
if (! $v) {
return;
}
foreach ($v as &$item) {
$item = "{$item['name']} <{$item['email']}
>";
}
return implode('
', $v);
});
$grid->disablePagination();
$grid->disableCreateButton();
$grid->disableDeleteButton();
$grid->disableBatchDelete();
$grid->disableFilterButton();
$grid->disableFilter();
$grid->disableQuickEditButton();
$grid->disableEditButton();
$grid->disableDeleteButton();
$grid->disableViewButton();
$grid->disableActions();
$grid->tools([
' 应用市场',
new InstallFromLocal(),
]);
if(env('APP_ENV') == 'local'){
$grid->quickCreate(function (Grid\Tools\QuickCreate $create) {
$create->text('name')
->attribute('style', 'width:240px')
->placeholder('Input Name. Eg: dcat-admin/demo')
->required();
$create->text('namespace')
->attribute('style', 'width:240px')
->placeholder('Input Namespace. Eg: DcatAdmin\\Demo');
$create->select('type')
->options([1 => trans('admin.application'), 2 => trans('admin.theme')])
->attribute('style', 'width:140px!important')
->default(1)
->required();
});
}
});
}
public function form()
{
$form = new Form(new WxExtension());
$form->hidden('name')->rules(function () {
return [
'required',
function ($attribute, $value, $fail) {
if (! Helper::validateExtensionName($value)) {
return $fail(
"[$value] is not a valid package name, please type a name like \"vendor/name\""
);
}
},
];
});
$form->hidden('namespace');
$form->hidden('type');
$self = $this;
$form->saving(function (Form $form) use ($self) {
$package = $form->name;
$namespace = $form->namespace;
$type = $form->type;
if ($package) {
$results = $self->createExtension($package, $namespace, $type);
return $form
->response()
->refresh()
->timeout(10)
->success($results);
}
});
return $form;
}
public function createExtension($package, $namespace, $type)
{
$namespace = trim($namespace, '\\');
$output = new StringOutput();
Artisan::call('admin:ext-make', [
'name' => $package,
'--namespace' => $namespace ?: 'default',
'--theme' => $type == 2,
], $output);
return sprintf('%s
', (string) $output->getContent());
}
}