update banner
parent
fe5a665c08
commit
aed7cf155f
|
|
@ -1,3 +1,56 @@
|
||||||
# Dcat Admin Extension
|
# Dact-Admin Extension Banner
|
||||||
|
|
||||||
|
广告管理
|
||||||
|
|
||||||
|
## 权限
|
||||||
|
|
||||||
|
```php
|
||||||
|
$permissions = [
|
||||||
|
'image' => ['name' => '广告管理', 'curd' => false, 'children' => [
|
||||||
|
'banner_ads' => ['name' => '广告位置', 'curd' => true],
|
||||||
|
'banners' => ['name' => '广告内容', 'curd' => true],
|
||||||
|
]],
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
## 菜单
|
||||||
|
|
||||||
|
```php
|
||||||
|
$menus = [
|
||||||
|
['title' => '广告管理', 'icon' => 'feather icon-image', 'uri' => '', 'permission' => ['banner_ads', 'banners'], 'children' => [
|
||||||
|
['title' => '广告位置', 'icon' => '', 'uri' => '/banner-ads', 'permission' => 'banner_ads'],
|
||||||
|
['title' => '广告内容', 'icon' => '', 'uri' => '/banners', 'permission' => 'banners'],
|
||||||
|
]]
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
## 数据表
|
||||||
|
|
||||||
|
### 广告位: banner_ads
|
||||||
|
|
||||||
|
| column | type | nullable | default | comment |
|
||||||
|
| - | - | - | - | - |
|
||||||
|
| id | bigint | not null | - | 主键 |
|
||||||
|
| name | varchar(100) | not null | - | 名称 |
|
||||||
|
| key | varchar(100) | not null | - | 关键字(unique) |
|
||||||
|
| width | integer | null | - | 建议尺寸 |
|
||||||
|
| height | integer | null | - | 建议尺寸 |
|
||||||
|
| is_enable | integer | not null | 1 | 是否可用 |
|
||||||
|
| remarks | varchar(100) | null | - | 备注 |
|
||||||
|
| created_at | timestamp | null | - | 创建时间 |
|
||||||
|
| updated_at | timestamp | null | - | 更新时间 |
|
||||||
|
|
||||||
|
### 广告图: banner
|
||||||
|
|
||||||
|
| column | type | nullable | default | comment |
|
||||||
|
| - | - | - | - | - |
|
||||||
|
| id | bigint | not null | - | 主键 |
|
||||||
|
| ad_id | bigint | not null | - | 位置 id |
|
||||||
|
| path | varchar(191) | not null | - | 图片地址 |
|
||||||
|
| name | varchar(191) | null | - | 名称 |
|
||||||
|
| sort | integer | not null | 1 | 排序(asc) |
|
||||||
|
| is_enable | integer | not null | 1 | 是否可用 |
|
||||||
|
| ext | json | null | - | 其他配置 |
|
||||||
|
| remarks | varchar(191) | null | - | 备注 |
|
||||||
|
| created_at | timestamp | null | - | 创建时间 |
|
||||||
|
| updated_at | timestamp | null | - | 更新时间 |
|
||||||
|
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace Peidikeji\Banner;
|
|
||||||
|
|
||||||
use EloquentFilter\ModelFilter;
|
|
||||||
|
|
||||||
class BannerAdFilter extends ModelFilter
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Related Models that have ModelFilters as well as the method on the ModelFilter
|
|
||||||
* As [relationMethod => [input_key1, input_key2]].
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
public $relations = [];
|
|
||||||
|
|
||||||
public function q($v)
|
|
||||||
{
|
|
||||||
$this->where(function ($q) use ($v) {
|
|
||||||
$q->where('key', 'like', '%'.$v.'%')->orWhere('name', 'like', '%'.$v.'%');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public function key($v)
|
|
||||||
{
|
|
||||||
$this->where('key', $v);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace Peidikeji\Banner;
|
|
||||||
|
|
||||||
use EloquentFilter\ModelFilter;
|
|
||||||
|
|
||||||
class BannerFilter extends ModelFilter
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Related Models that have ModelFilters as well as the method on the ModelFilter
|
|
||||||
* As [relationMethod => [input_key1, input_key2]].
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
public $relations = [];
|
|
||||||
|
|
||||||
public function q($v)
|
|
||||||
{
|
|
||||||
$this->where(function ($q) use ($v) {
|
|
||||||
$q->where('key', 'like', '%'.$v.'%')->orWhere('name', 'like', '%'.$v.'%');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -3,21 +3,17 @@
|
||||||
namespace Peidikeji\Banner;
|
namespace Peidikeji\Banner;
|
||||||
|
|
||||||
use Dcat\Admin\Extend\ServiceProvider;
|
use Dcat\Admin\Extend\ServiceProvider;
|
||||||
use Dcat\Admin\Admin;
|
|
||||||
|
|
||||||
class BannerServiceProvider extends ServiceProvider
|
class BannerServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
|
protected $menu = [
|
||||||
public function register()
|
['parent' => '', 'title' => '广告管理', 'icon' => 'feather icon-image', 'uri' => ''],
|
||||||
{
|
['parent' => '广告管理', 'title' => '广告位置', 'icon' => '', 'uri' => 'banner-ads'],
|
||||||
//
|
['parent' => '广告管理', 'title' => '广告内容', 'icon' => '', 'uri' => 'banners'],
|
||||||
}
|
];
|
||||||
|
|
||||||
public function init()
|
public function init()
|
||||||
{
|
{
|
||||||
parent::init();
|
parent::init();
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Peidikeji\Banner\Http\Controllers;
|
namespace Peidikeji\Banner\Http\Admin;
|
||||||
|
|
||||||
use Dcat\Admin\Form;
|
use Dcat\Admin\Form;
|
||||||
use Dcat\Admin\Grid;
|
use Dcat\Admin\Grid;
|
||||||
|
|
@ -73,16 +73,15 @@ class BannerAdController extends AdminController
|
||||||
$form->text('key')->required()->rules([Rule::unique((new BannerAd())->getTable())]);
|
$form->text('key')->required()->rules([Rule::unique((new BannerAd())->getTable())]);
|
||||||
$form->number('width')->min(0);
|
$form->number('width')->min(0);
|
||||||
$form->number('height')->min(0);
|
$form->number('height')->min(0);
|
||||||
$form->switch('is_enable');
|
$form->switch('is_enable')->default(1);
|
||||||
$form->text('remarks');
|
$form->text('remarks');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public function destroy($id){
|
public function destroy($id)
|
||||||
|
{
|
||||||
//如果该广告位下还有内容,则一起删除
|
//如果该广告位下还有内容,则一起删除
|
||||||
Banner::where([
|
Banner::where(['ad_id' => $id])->delete();
|
||||||
'ad_id' => $id
|
|
||||||
])->delete();
|
|
||||||
|
|
||||||
return parent::destroy($id);
|
return parent::destroy($id);
|
||||||
}
|
}
|
||||||
|
|
@ -1,62 +1,31 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Peidikeji\Banner\Http\Controllers;
|
namespace Peidikeji\Banner\Http\Admin;
|
||||||
|
|
||||||
use Dcat\Admin\Form;
|
use Dcat\Admin\Form;
|
||||||
use Dcat\Admin\Grid;
|
use Dcat\Admin\Grid;
|
||||||
use Dcat\Admin\Admin;
|
use Dcat\Admin\Admin;
|
||||||
use Dcat\Admin\Widgets\Card;
|
use Dcat\Admin\Widgets\Card;
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Peidikeji\Banner\Models\Banner;
|
use Peidikeji\Banner\Models\Banner;
|
||||||
use Peidikeji\Banner\Models\BannerAd;
|
|
||||||
use Dcat\Admin\Grid\Column as GridColumn;
|
use Dcat\Admin\Grid\Column as GridColumn;
|
||||||
use Dcat\Admin\Http\Controllers\AdminController;
|
use Dcat\Admin\Http\Controllers\AdminController;
|
||||||
use Peidikeji\Banner\Http\Resources\BannerResource;
|
|
||||||
|
|
||||||
class BannerController extends AdminController
|
class BannerController extends AdminController
|
||||||
{
|
{
|
||||||
protected $translation = 'peidikeji.banner::banner';
|
protected $translation = 'peidikeji.banner::banner';
|
||||||
|
|
||||||
protected $extDefaults = [];//例如:['key1'=>'']
|
protected $extDefaults = [];
|
||||||
|
|
||||||
public function json(Request $request)
|
|
||||||
{
|
|
||||||
$keys = (array) $request->input('keys');
|
|
||||||
|
|
||||||
if (empty($keys)) {
|
|
||||||
return response()->json([]);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$ads = BannerAd::with([
|
|
||||||
'banners' => function ($query) {
|
|
||||||
$query->enable()->latest('sort');
|
|
||||||
},
|
|
||||||
])->enable()->whereIn('key', $keys)->get();
|
|
||||||
|
|
||||||
$mapAds = $ads->mapWithKeys(function ($item) use ($request) {
|
|
||||||
return [
|
|
||||||
$item->key => BannerResource::collection($item->banners)->resolve($request),
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
foreach ($keys as $key) {
|
|
||||||
if (! $mapAds->has($key)) {
|
|
||||||
$mapAds->put($key, []);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return response()->json($mapAds);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function grid()
|
protected function grid()
|
||||||
{
|
{
|
||||||
return Grid::make(new Banner(), function ($grid) {
|
return Grid::make(new Banner(), function (Grid $grid) {
|
||||||
|
$grid->model()->sort();
|
||||||
|
|
||||||
$grid->disableRowSelector();
|
$grid->disableRowSelector();
|
||||||
$grid->column('path')->image(100);
|
$grid->column('path')->image('', 50);
|
||||||
$grid->column('name');
|
$grid->column('name');
|
||||||
$grid->column('sort');
|
$grid->column('sort');
|
||||||
$grid->column('is_enable')->if(function(){
|
$grid->column('is_enable')->if(function () {
|
||||||
return !config('admin.permission.enable') || Admin::user()->can('dcat.admin.banners.edit');
|
return !config('admin.permission.enable') || Admin::user()->can('dcat.admin.banners.edit');
|
||||||
})->then(function (GridColumn $column) {
|
})->then(function (GridColumn $column) {
|
||||||
$column->switch();
|
$column->switch();
|
||||||
|
|
@ -64,16 +33,16 @@ class BannerController extends AdminController
|
||||||
$column->bool();
|
$column->bool();
|
||||||
});
|
});
|
||||||
$grid->column('ext')
|
$grid->column('ext')
|
||||||
->if(function(){
|
->if(function () {
|
||||||
return $this->ext;
|
return $this->ext;
|
||||||
})->then(function (GridColumn $column) {
|
})->then(function (GridColumn $column) {
|
||||||
$column->display('展开')->expand(function () {
|
$column->display('展开')->expand(function () {
|
||||||
// 返回显示的详情
|
// 返回显示的详情
|
||||||
$card = new Card(null, sprintf('<pre class="dump">%s</pre>', json_encode($this->ext, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)));
|
$card = new Card(null, sprintf('<pre class="dump">%s</pre>', json_encode($this->ext, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)));
|
||||||
|
|
||||||
return "<div style='padding:10px 10px 0'>$card</div>";
|
return "<div style='padding:10px 10px 0'>$card</div>";
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
|
||||||
$grid->column('remarks');
|
$grid->column('remarks');
|
||||||
|
|
||||||
|
|
@ -96,11 +65,12 @@ class BannerController extends AdminController
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function form(){
|
protected function form()
|
||||||
|
{
|
||||||
return Form::make(new Banner(), function (Form $form) {
|
return Form::make(new Banner(), function (Form $form) {
|
||||||
$form->select('ad_id')
|
$form->select('ad_id')
|
||||||
->options('api/banner-ads')
|
->options('api/banner-ads')
|
||||||
->required();
|
->required();
|
||||||
$form->text('name');
|
$form->text('name');
|
||||||
$form->image('path')
|
$form->image('path')
|
||||||
->uniqueName()
|
->uniqueName()
|
||||||
|
|
@ -108,11 +78,11 @@ class BannerController extends AdminController
|
||||||
->saveFullUrl()
|
->saveFullUrl()
|
||||||
->autoSave(false)
|
->autoSave(false)
|
||||||
->autoUpload()
|
->autoUpload()
|
||||||
->removable(false)//禁止用户从页面点击删除服务器上的文件,可以实现图片覆盖上传效果
|
->removable(false) //禁止用户从页面点击删除服务器上的文件,可以实现图片覆盖上传效果
|
||||||
->retainable()
|
->retainable()
|
||||||
->required()->help('建议尺寸:');
|
->required()->help('建议尺寸:');
|
||||||
Admin::script(
|
Admin::script(
|
||||||
<<<JS
|
<<<JS
|
||||||
$('body').on('select2:select', 'select.field_ad_id', function(e){
|
$('body').on('select2:select', 'select.field_ad_id', function(e){
|
||||||
let url_path = '/admin/api/banner-ads?id=' + e.params.data.id
|
let url_path = '/admin/api/banner-ads?id=' + e.params.data.id
|
||||||
$.ajax({
|
$.ajax({
|
||||||
|
|
@ -131,12 +101,13 @@ class BannerController extends AdminController
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
JS);
|
JS
|
||||||
|
);
|
||||||
$form->number('sort')
|
$form->number('sort')
|
||||||
->min(0)
|
->min(0)
|
||||||
->help('数值越大, 越靠前');
|
->help('数值越小, 越靠前');
|
||||||
$form->keyValue('ext')->default($this->extDefaults)->setKeyLabel('键名')->setValueLabel('键值');
|
$form->keyValue('ext')->default($this->extDefaults)->setKeyLabel('键名')->setValueLabel('键值');
|
||||||
$form->switch('is_enable');
|
$form->switch('is_enable')->default(1);
|
||||||
$form->text('remarks');
|
$form->text('remarks');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Peidikeji\Banner\Http\Api;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Peidikeji\Banner\Models\BannerAd;
|
||||||
|
use Peidikeji\Banner\Http\Resources\BannerResource;
|
||||||
|
|
||||||
|
class BannerController extends Controller
|
||||||
|
{
|
||||||
|
public function index(Request $request)
|
||||||
|
{
|
||||||
|
$request->validate([
|
||||||
|
'key' => 'required'
|
||||||
|
]);
|
||||||
|
$keys = $request->input('key');
|
||||||
|
$keys = is_array($keys) ? $keys : explode(',', $keys);
|
||||||
|
|
||||||
|
$ads = BannerAd::with([
|
||||||
|
'banners' => function ($query) {
|
||||||
|
$query->enable()->sort();
|
||||||
|
},
|
||||||
|
])->enable()->whereIn('key', $keys)->get();
|
||||||
|
|
||||||
|
$mapAds = $ads->mapWithKeys(function ($item) use ($request) {
|
||||||
|
return [
|
||||||
|
$item->key => BannerResource::collection($item->banners)->resolve($request),
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
|
foreach ($keys as $key) {
|
||||||
|
if (! $mapAds->has($key)) {
|
||||||
|
$mapAds->put($key, []);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->json($mapAds);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -6,12 +6,6 @@ use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
class BannerResource extends JsonResource
|
class BannerResource extends JsonResource
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Transform the resource into an array.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
|
|
||||||
*/
|
|
||||||
public function toArray($request)
|
public function toArray($request)
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,16 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Peidikeji\Banner\Http\Controllers;
|
namespace Peidikeji\Banner\Http\Admin;
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
if(! Route::has('dcat.admin.api.banner_ads')){
|
if(! Route::has('dcat.admin.api.banner_ads')){
|
||||||
Route::get('api/banner-ads', [Controllers\BannerAdController::class, 'list'])->name('api.banner_ads');
|
Route::get('api/banner-ads', [BannerAdController::class, 'list'])->name('api.banner_ads');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(! Route::has('dcat.admin.banner_ads.index')){
|
if(! Route::has('dcat.admin.banner_ads.index')){
|
||||||
Route::resource('banner-ads', Controllers\BannerAdController::class)->names('banner_ads');
|
Route::resource('banner-ads', BannerAdController::class)->names('banner_ads');
|
||||||
}
|
}
|
||||||
if(! Route::has('dcat.admin.banners.index')){
|
if(! Route::has('dcat.admin.banners.index')){
|
||||||
Route::resource('banners', Controllers\BannerController::class);
|
Route::resource('banners', BannerController::class);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Peidikeji\Banner\Http\Controllers;
|
namespace Peidikeji\Banner\Http\Api;
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
Route::group(['middleware' => 'api', 'prefix' => 'api'], function () {
|
Route::group(['middleware' => 'api', 'prefix' => 'api'], function () {
|
||||||
Route::get('banners', [BannerController::class, 'json']);
|
Route::get('banner', [BannerController::class, 'index']);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,13 @@
|
||||||
|
|
||||||
namespace Peidikeji\Banner\Models;
|
namespace Peidikeji\Banner\Models;
|
||||||
|
|
||||||
use EloquentFilter\Filterable;
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Dcat\Admin\Traits\HasDateTimeFormatter;
|
use Dcat\Admin\Traits\HasDateTimeFormatter;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
|
||||||
class Banner extends Model
|
class Banner extends Model
|
||||||
{
|
{
|
||||||
use HasFactory, HasDateTimeFormatter, Filterable;
|
use HasFactory, HasDateTimeFormatter;
|
||||||
|
|
||||||
protected $fillable = ['ad_id', 'path', 'name', 'sort', 'is_enable', 'ext', 'remarks'];
|
protected $fillable = ['ad_id', 'path', 'name', 'sort', 'is_enable', 'ext', 'remarks'];
|
||||||
|
|
||||||
|
|
@ -22,7 +21,13 @@ class Banner extends Model
|
||||||
return $this->belongsTo(BannerAd::class, 'ad_id');
|
return $this->belongsTo(BannerAd::class, 'ad_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function scopeEnable($query){
|
public function scopeEnable($query)
|
||||||
|
{
|
||||||
return $query->where('is_enable', 1);
|
return $query->where('is_enable', 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function scopeSort($q)
|
||||||
|
{
|
||||||
|
return $q->orderBy('sort');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,23 +2,16 @@
|
||||||
|
|
||||||
namespace Peidikeji\Banner\Models;
|
namespace Peidikeji\Banner\Models;
|
||||||
|
|
||||||
use EloquentFilter\Filterable;
|
|
||||||
use Peidikeji\Banner\BannerAdFilter;
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Dcat\Admin\Traits\HasDateTimeFormatter;
|
use Dcat\Admin\Traits\HasDateTimeFormatter;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
|
||||||
class BannerAd extends Model
|
class BannerAd extends Model
|
||||||
{
|
{
|
||||||
use HasFactory, HasDateTimeFormatter, Filterable;
|
use HasFactory, HasDateTimeFormatter;
|
||||||
|
|
||||||
protected $fillable = ['name', 'key', 'width', 'height', 'is_enable', 'remarks'];
|
protected $fillable = ['name', 'key', 'width', 'height', 'is_enable', 'remarks'];
|
||||||
|
|
||||||
public function modelFilter()
|
|
||||||
{
|
|
||||||
return BannerAdFilter::class;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function banners()
|
public function banners()
|
||||||
{
|
{
|
||||||
return $this->hasMany(Banner::class, 'ad_id');
|
return $this->hasMany(Banner::class, 'ad_id');
|
||||||
|
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace Peidikeji\Banner;
|
|
||||||
|
|
||||||
use Dcat\Admin\Extend\Setting as Form;
|
|
||||||
|
|
||||||
class Setting extends Form
|
|
||||||
{
|
|
||||||
public function form()
|
|
||||||
{
|
|
||||||
$this->text('key1')->required();
|
|
||||||
$this->text('key2')->required();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,71 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace Database\Seeders;
|
|
||||||
|
|
||||||
use Dcat\Admin\Models\Permission;
|
|
||||||
use Illuminate\Database\Seeder;
|
|
||||||
use Illuminate\Support\Facades\DB;
|
|
||||||
|
|
||||||
class BannerPermissionSeeder extends Seeder
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Run the database seeds.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function run()
|
|
||||||
{
|
|
||||||
$permissions = [
|
|
||||||
'banner_ads' => ['name' => '广告位管理', 'curd' => true],
|
|
||||||
'banners' => ['name' => '广告图管理', 'curd' => true],
|
|
||||||
];
|
|
||||||
$this->createPermissionData($permissions);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 插入权限
|
|
||||||
*
|
|
||||||
* @param array $permissions
|
|
||||||
* @param string $key
|
|
||||||
* @param integer $pId
|
|
||||||
*/
|
|
||||||
public function createPermissionData(array $permissions, string $key = '', int $pId = 0)
|
|
||||||
{
|
|
||||||
$curdArr = [
|
|
||||||
'index' => '列表',
|
|
||||||
'create' => '新增',
|
|
||||||
'edit' => '修改',
|
|
||||||
'destroy' => '删除',
|
|
||||||
'show' => '详情',
|
|
||||||
];
|
|
||||||
foreach ($permissions as $slug => $permission) {
|
|
||||||
//是否已存在该权限
|
|
||||||
$slugKey = 'dcat.admin.' . ($key ? $key . '.' . $slug : $slug);
|
|
||||||
|
|
||||||
|
|
||||||
$pper = Permission::updateOrCreate(['slug' => $slugKey], ['name' => is_string($permission) ? $permission : $permission['name'], 'parent_id' => $pId]);
|
|
||||||
|
|
||||||
if (!is_string($permission)) {
|
|
||||||
if (!isset($permission['children'])) {
|
|
||||||
$permission['children'] = [];
|
|
||||||
}
|
|
||||||
//判断是否默认插入curd权限
|
|
||||||
if (isset($permission['curd']) && $permission['curd']) {
|
|
||||||
if (is_array($permission['curd'])) {
|
|
||||||
$permission['curd'] = array_reverse($permission['curd']);
|
|
||||||
foreach ($permission['curd'] as $value) {
|
|
||||||
$permission['children'] = array_merge([$value => $curdArr[$value]], $permission['children']);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$permission['children'] = array_merge($curdArr, $permission['children']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (count($permission['children']) > 0) {
|
|
||||||
$_key = $permission['curd'] !== false ? ($key ? $key . '.' . $slug : $slug) : $key;
|
|
||||||
$this->createPermissionData($permission['children'], $_key ?? $slug, $pper->id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -33,7 +33,7 @@ class CreateBannerTable extends Migration
|
||||||
$table->unsignedBigInteger('ad_id')->comment('位置ID');
|
$table->unsignedBigInteger('ad_id')->comment('位置ID');
|
||||||
$table->string('path')->comment('地址');
|
$table->string('path')->comment('地址');
|
||||||
$table->string('name')->nullable()->comment('名称');
|
$table->string('name')->nullable()->comment('名称');
|
||||||
$table->unsignedInteger('sort')->comment('排序');
|
$table->unsignedInteger('sort')->default(1)->comment('排序(asc)');
|
||||||
$table->unsignedTinyInteger('is_enable')->default(1)->comment('可用状态');
|
$table->unsignedTinyInteger('is_enable')->default(1)->comment('可用状态');
|
||||||
$table->text('ext')->nullable()->comment('扩展字段,可用于跳转配置等');
|
$table->text('ext')->nullable()->comment('扩展字段,可用于跳转配置等');
|
||||||
$table->string('remarks')->nullable()->comment('备注');
|
$table->string('remarks')->nullable()->comment('备注');
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'1.0.0' => [
|
'1.0.0' => [
|
||||||
'初始化广告管理插件',
|
|
||||||
'CreateBannerTable.php',
|
'CreateBannerTable.php',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue