From aed7cf155f23b77dc1c5bd6258f78f5237ded47e Mon Sep 17 00:00:00 2001
From: panliang <1163816051@qq.com>
Date: Fri, 16 Sep 2022 10:21:36 +0800
Subject: [PATCH] update banner
---
packages/banner/README.md | 55 +++++++++++-
packages/banner/src/BannerAdFilter.php | 28 -------
packages/banner/src/BannerFilter.php | 23 -----
packages/banner/src/BannerServiceProvider.php | 14 ++--
.../BannerAdController.php | 11 ++-
.../BannerController.php | 83 ++++++-------------
.../banner/src/Http/Api/BannerController.php | 41 +++++++++
.../src/Http/Resources/BannerResource.php | 6 --
packages/banner/src/Http/routes.php | 9 +-
packages/banner/src/Http/web.php | 4 +-
packages/banner/src/Models/Banner.php | 11 ++-
packages/banner/src/Models/BannerAd.php | 9 +-
packages/banner/src/Setting.php | 14 ----
.../banner/updates/BannerPermissionSeeder.php | 71 ----------------
packages/banner/updates/CreateBannerTable.php | 2 +-
packages/banner/version.php | 1 -
16 files changed, 149 insertions(+), 233 deletions(-)
delete mode 100644 packages/banner/src/BannerAdFilter.php
delete mode 100644 packages/banner/src/BannerFilter.php
rename packages/banner/src/Http/{Controllers => Admin}/BannerAdController.php (93%)
rename packages/banner/src/Http/{Controllers => Admin}/BannerController.php (62%)
create mode 100644 packages/banner/src/Http/Api/BannerController.php
delete mode 100644 packages/banner/src/Setting.php
delete mode 100644 packages/banner/updates/BannerPermissionSeeder.php
diff --git a/packages/banner/README.md b/packages/banner/README.md
index 838df4c..f3f32c2 100644
--- a/packages/banner/README.md
+++ b/packages/banner/README.md
@@ -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 | - | 更新时间 |
diff --git a/packages/banner/src/BannerAdFilter.php b/packages/banner/src/BannerAdFilter.php
deleted file mode 100644
index 9a504ab..0000000
--- a/packages/banner/src/BannerAdFilter.php
+++ /dev/null
@@ -1,28 +0,0 @@
- [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);
- }
-}
diff --git a/packages/banner/src/BannerFilter.php b/packages/banner/src/BannerFilter.php
deleted file mode 100644
index 3f0cbbd..0000000
--- a/packages/banner/src/BannerFilter.php
+++ /dev/null
@@ -1,23 +0,0 @@
- [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.'%');
- });
- }
-}
diff --git a/packages/banner/src/BannerServiceProvider.php b/packages/banner/src/BannerServiceProvider.php
index 56a874b..35df930 100644
--- a/packages/banner/src/BannerServiceProvider.php
+++ b/packages/banner/src/BannerServiceProvider.php
@@ -3,21 +3,17 @@
namespace Peidikeji\Banner;
use Dcat\Admin\Extend\ServiceProvider;
-use Dcat\Admin\Admin;
class BannerServiceProvider extends ServiceProvider
{
-
- public function register()
- {
- //
- }
+ protected $menu = [
+ ['parent' => '', 'title' => '广告管理', 'icon' => 'feather icon-image', 'uri' => ''],
+ ['parent' => '广告管理', 'title' => '广告位置', 'icon' => '', 'uri' => 'banner-ads'],
+ ['parent' => '广告管理', 'title' => '广告内容', 'icon' => '', 'uri' => 'banners'],
+ ];
public function init()
{
parent::init();
-
- //
-
}
}
diff --git a/packages/banner/src/Http/Controllers/BannerAdController.php b/packages/banner/src/Http/Admin/BannerAdController.php
similarity index 93%
rename from packages/banner/src/Http/Controllers/BannerAdController.php
rename to packages/banner/src/Http/Admin/BannerAdController.php
index 38c5b64..50993cd 100644
--- a/packages/banner/src/Http/Controllers/BannerAdController.php
+++ b/packages/banner/src/Http/Admin/BannerAdController.php
@@ -1,6 +1,6 @@
text('key')->required()->rules([Rule::unique((new BannerAd())->getTable())]);
$form->number('width')->min(0);
$form->number('height')->min(0);
- $form->switch('is_enable');
+ $form->switch('is_enable')->default(1);
$form->text('remarks');
});
}
- public function destroy($id){
+ public function destroy($id)
+ {
//如果该广告位下还有内容,则一起删除
- Banner::where([
- 'ad_id' => $id
- ])->delete();
+ Banner::where(['ad_id' => $id])->delete();
return parent::destroy($id);
}
diff --git a/packages/banner/src/Http/Controllers/BannerController.php b/packages/banner/src/Http/Admin/BannerController.php
similarity index 62%
rename from packages/banner/src/Http/Controllers/BannerController.php
rename to packages/banner/src/Http/Admin/BannerController.php
index e236cfe..770992a 100644
--- a/packages/banner/src/Http/Controllers/BannerController.php
+++ b/packages/banner/src/Http/Admin/BannerController.php
@@ -1,62 +1,31 @@
'']
-
- 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 $extDefaults = [];
protected function grid()
{
- return Grid::make(new Banner(), function ($grid) {
+ return Grid::make(new Banner(), function (Grid $grid) {
+ $grid->model()->sort();
+
$grid->disableRowSelector();
- $grid->column('path')->image(100);
+ $grid->column('path')->image('', 50);
$grid->column('name');
$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');
})->then(function (GridColumn $column) {
$column->switch();
@@ -64,16 +33,16 @@ class BannerController extends AdminController
$column->bool();
});
$grid->column('ext')
- ->if(function(){
- return $this->ext;
- })->then(function (GridColumn $column) {
- $column->display('展开')->expand(function () {
- // 返回显示的详情
- $card = new Card(null, sprintf('
%s
', json_encode($this->ext, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)));
+ ->if(function () {
+ return $this->ext;
+ })->then(function (GridColumn $column) {
+ $column->display('展开')->expand(function () {
+ // 返回显示的详情
+ $card = new Card(null, sprintf('%s
', json_encode($this->ext, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)));
- return "$card
";
+ return "$card
";
+ });
});
- });
$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) {
$form->select('ad_id')
- ->options('api/banner-ads')
- ->required();
+ ->options('api/banner-ads')
+ ->required();
$form->text('name');
$form->image('path')
->uniqueName()
@@ -108,11 +78,11 @@ class BannerController extends AdminController
->saveFullUrl()
->autoSave(false)
->autoUpload()
- ->removable(false)//禁止用户从页面点击删除服务器上的文件,可以实现图片覆盖上传效果
+ ->removable(false) //禁止用户从页面点击删除服务器上的文件,可以实现图片覆盖上传效果
->retainable()
->required()->help('建议尺寸:');
- Admin::script(
- <<number('sort')
- ->min(0)
- ->help('数值越大, 越靠前');
+ ->min(0)
+ ->help('数值越小, 越靠前');
$form->keyValue('ext')->default($this->extDefaults)->setKeyLabel('键名')->setValueLabel('键值');
- $form->switch('is_enable');
+ $form->switch('is_enable')->default(1);
$form->text('remarks');
});
}
diff --git a/packages/banner/src/Http/Api/BannerController.php b/packages/banner/src/Http/Api/BannerController.php
new file mode 100644
index 0000000..5c35b59
--- /dev/null
+++ b/packages/banner/src/Http/Api/BannerController.php
@@ -0,0 +1,41 @@
+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);
+ }
+
+}
diff --git a/packages/banner/src/Http/Resources/BannerResource.php b/packages/banner/src/Http/Resources/BannerResource.php
index 4adb6d7..cfbb007 100644
--- a/packages/banner/src/Http/Resources/BannerResource.php
+++ b/packages/banner/src/Http/Resources/BannerResource.php
@@ -6,12 +6,6 @@ use Illuminate\Http\Resources\Json\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)
{
return [
diff --git a/packages/banner/src/Http/routes.php b/packages/banner/src/Http/routes.php
index ab3ef77..6ec9e7a 100644
--- a/packages/banner/src/Http/routes.php
+++ b/packages/banner/src/Http/routes.php
@@ -1,15 +1,16 @@
name('api.banner_ads');
+ Route::get('api/banner-ads', [BannerAdController::class, 'list'])->name('api.banner_ads');
}
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')){
- Route::resource('banners', Controllers\BannerController::class);
+ Route::resource('banners', BannerController::class);
}
diff --git a/packages/banner/src/Http/web.php b/packages/banner/src/Http/web.php
index a7e14ea..baec154 100644
--- a/packages/banner/src/Http/web.php
+++ b/packages/banner/src/Http/web.php
@@ -1,9 +1,9 @@
'api', 'prefix' => 'api'], function () {
- Route::get('banners', [BannerController::class, 'json']);
+ Route::get('banner', [BannerController::class, 'index']);
});
diff --git a/packages/banner/src/Models/Banner.php b/packages/banner/src/Models/Banner.php
index 752bd7f..78befcf 100644
--- a/packages/banner/src/Models/Banner.php
+++ b/packages/banner/src/Models/Banner.php
@@ -2,14 +2,13 @@
namespace Peidikeji\Banner\Models;
-use EloquentFilter\Filterable;
use Illuminate\Database\Eloquent\Model;
use Dcat\Admin\Traits\HasDateTimeFormatter;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Banner extends Model
{
- use HasFactory, HasDateTimeFormatter, Filterable;
+ use HasFactory, HasDateTimeFormatter;
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');
}
- public function scopeEnable($query){
+ public function scopeEnable($query)
+ {
return $query->where('is_enable', 1);
}
+
+ public function scopeSort($q)
+ {
+ return $q->orderBy('sort');
+ }
}
diff --git a/packages/banner/src/Models/BannerAd.php b/packages/banner/src/Models/BannerAd.php
index e2a1e48..0f43c17 100644
--- a/packages/banner/src/Models/BannerAd.php
+++ b/packages/banner/src/Models/BannerAd.php
@@ -2,23 +2,16 @@
namespace Peidikeji\Banner\Models;
-use EloquentFilter\Filterable;
-use Peidikeji\Banner\BannerAdFilter;
use Illuminate\Database\Eloquent\Model;
use Dcat\Admin\Traits\HasDateTimeFormatter;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class BannerAd extends Model
{
- use HasFactory, HasDateTimeFormatter, Filterable;
+ use HasFactory, HasDateTimeFormatter;
protected $fillable = ['name', 'key', 'width', 'height', 'is_enable', 'remarks'];
- public function modelFilter()
- {
- return BannerAdFilter::class;
- }
-
public function banners()
{
return $this->hasMany(Banner::class, 'ad_id');
diff --git a/packages/banner/src/Setting.php b/packages/banner/src/Setting.php
deleted file mode 100644
index 88820ad..0000000
--- a/packages/banner/src/Setting.php
+++ /dev/null
@@ -1,14 +0,0 @@
-text('key1')->required();
- $this->text('key2')->required();
- }
-}
diff --git a/packages/banner/updates/BannerPermissionSeeder.php b/packages/banner/updates/BannerPermissionSeeder.php
deleted file mode 100644
index 785bd62..0000000
--- a/packages/banner/updates/BannerPermissionSeeder.php
+++ /dev/null
@@ -1,71 +0,0 @@
- ['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);
- }
- }
- }
- }
-}
diff --git a/packages/banner/updates/CreateBannerTable.php b/packages/banner/updates/CreateBannerTable.php
index 48f7342..33adb9a 100644
--- a/packages/banner/updates/CreateBannerTable.php
+++ b/packages/banner/updates/CreateBannerTable.php
@@ -33,7 +33,7 @@ class CreateBannerTable extends Migration
$table->unsignedBigInteger('ad_id')->comment('位置ID');
$table->string('path')->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->text('ext')->nullable()->comment('扩展字段,可用于跳转配置等');
$table->string('remarks')->nullable()->comment('备注');
diff --git a/packages/banner/version.php b/packages/banner/version.php
index 92bf9e9..6c09ca3 100644
--- a/packages/banner/version.php
+++ b/packages/banner/version.php
@@ -2,7 +2,6 @@
return [
'1.0.0' => [
- '初始化广告管理插件',
'CreateBannerTable.php',
],
];