diff --git a/MySQL_change.sql b/MySQL_change.sql
index 24f35ce..ab1d0bb 100644
--- a/MySQL_change.sql
+++ b/MySQL_change.sql
@@ -135,5 +135,16 @@ ALTER TABLE `slides`
COMMENT='广告图、轮播图等';
RENAME TABLE `slides` TO `advertisings`;
+# 23:05 2021/08/24
+ALTER TABLE `advertisings`
+ CHANGE COLUMN `agent_id` `agent_id` INT(11) NOT NULL COMMENT '发布者ID' AFTER `id`,
+ ADD COLUMN `display` TINYINT NOT NULL DEFAULT 0 COMMENT '显示位置,0:轮播图;1:首页横屏广告;2:瀑布流内嵌广告;' AFTER `url`;
+# 23:56 2021/08/24
+ALTER TABLE `agent_products`
+ ADD INDEX `sale` (`sale`),
+ ADD INDEX `category_id` (`category_id`);
+# 0:24 2021/08/25
+ALTER TABLE `specials`
+ DROP COLUMN `picture_ad`;
diff --git a/app/AdminAgent/Controllers/AdvertisingController.php b/app/AdminAgent/Controllers/AdvertisingController.php
index 3563779..4286d12 100644
--- a/app/AdminAgent/Controllers/AdvertisingController.php
+++ b/app/AdminAgent/Controllers/AdvertisingController.php
@@ -22,9 +22,10 @@ class AdvertisingController extends AdminController
$grid->model()->where('agent_id', Admin::user()->id)->orderBy('sort')->orderBy('id', 'DESC');
$grid->column('id')->sortable();
+ $grid->column('display')->using(admin_trans('advertising.options.display'));
$grid->column('title');
$grid->column('picture')->image('', 60, 60);
- $grid->column('type')->using(['链接内部页面', '链接网址']);
+ $grid->column('type')->using(admin_trans('advertising.options.type'));
$grid->column('url');
$grid->column('status')->switch();
$grid->column('sort')->editable()->sortable()->width(120);
@@ -33,6 +34,7 @@ class AdvertisingController extends AdminController
$filter->panel();
$filter->equal('id')->width(2);
+ $filter->equal('display')->select(admin_trans('advertising.options.display'))->width(2);
$filter->like('title')->width(3);
});
});
@@ -54,9 +56,10 @@ class AdvertisingController extends AdminController
}
$show->field('id');
+ $show->field('display')->using(admin_trans('advertising.options.display'));
$show->field('title');
$show->field('picture')->image('', 80, 80);
- $show->field('type')->using(['链接内部页面', '链接网址']);
+ $show->field('type')->using(admin_trans('advertising.options.type'));
$show->field('url');
$show->field('status')->using(['禁用', '启用']);
$show->field('sort');
@@ -79,15 +82,22 @@ class AdvertisingController extends AdminController
}
$form->display('id');
+ $form->select('display')
+ ->options(admin_trans('advertising.options.display'))
+ ->default(0)
+ ->required();
$form->text('title')
->help('主要用于后台显示,方便管理')
->required();
$form->image('picture')
->required()->removable(false)->uniqueName()
- ->help('图片大小:750*360');
- $form->select('status')->options(['禁用', '启用'])->default(1)->required();
- $form->radio('type', '链接类型')
- ->options(['链接到内部页面', '链接到网址'])
+ ->help('轮播图大小:750*360;横屏广告大小:750*230;产品列表内嵌广告建议跟产品图片大小一致');
+ $form->select('status')
+ ->options(['禁用', '启用'])
+ ->default(1)
+ ->required();
+ $form->radio('type', '链接类型')
+ ->options(admin_trans('advertising.options.type'))
->value(0)->default(0)
->when(0, function (Form $form) {
$form->text('url-0', '内部页面地址')
@@ -100,7 +110,8 @@ class AdvertisingController extends AdminController
$form->url('url-1', '链接到网址')
->placeholder('如:https://www.baidu.com/')
->customFormat(fn() => $this->type == 1 ? $this->url : '');
- });
+ })
+ ->required();
$form->text('sort')->default(255)->required();
})->saving(function (Form $form) {
//不允许修改非自己的数据
diff --git a/app/AdminAgent/Controllers/SpecialController.php b/app/AdminAgent/Controllers/SpecialController.php
index 8781c25..68978ec 100644
--- a/app/AdminAgent/Controllers/SpecialController.php
+++ b/app/AdminAgent/Controllers/SpecialController.php
@@ -28,7 +28,6 @@ class SpecialController extends AdminController
$grid->model()->where('agent_id', Admin::user()->id);
$grid->column('id')->sortable();
- $grid->column('picture_ad')->image('', 60, 60);
$grid->column('agent_product_id', '专题产品')
->display('查看')
->modal(function ($modal) use ($grid) {
@@ -48,7 +47,6 @@ class SpecialController extends AdminController
}
return Table::make(['产品ID', '标题', '图片', '销量', '库存'], $result);
});
- $grid->column('sort');
$grid->column('created_at');
$grid->column('updated_at')->sortable();
@@ -76,7 +74,6 @@ class SpecialController extends AdminController
}
$show->field('id');
- $show->field('picture_ad')->image('', 80, 80);
$show->field('picture')->image('', 80, 80);
$show->field('agent_product_id', '产品')
->unescape()
@@ -86,7 +83,6 @@ class SpecialController extends AdminController
->orderBy('id')->get(['id', 'product_id']);
return join("
", $data->map(fn($v) => $v->product->title)->toArray());
});
- $show->field('sort');
$show->field('created_at');
$show->field('updated_at');
});
@@ -106,9 +102,6 @@ class SpecialController extends AdminController
}
$form->display('id');
- $form->image('picture_ad')
- ->required()->removable(false)->uniqueName()
- ->help('图片大小:750*230');
$form->multipleImage('picture')
->required()->removable(false)->uniqueName()
->help('图片大小:750*490');
@@ -130,7 +123,6 @@ class SpecialController extends AdminController
})
->pluck('product.title')
->value(join(',', $form->model()->agent_product_id ?? []));
- $form->text('sort')->default(255);
})->saving(function (Form $form) {
//不允许修改非自己的数据
if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) {
diff --git a/app/AdminAgent/Controllers/WaterfallAdController.php b/app/AdminAgent/Controllers/WaterfallAdController.php
deleted file mode 100644
index fffd0cb..0000000
--- a/app/AdminAgent/Controllers/WaterfallAdController.php
+++ /dev/null
@@ -1,130 +0,0 @@
-model()->where('agent_id', Admin::user()->id)->orderBy('sort')->orderBy('id', 'DESC');
-
- $grid->column('id')->sortable();
- $grid->column('title');
- $grid->column('picture')->image('', 60, 60);
- $grid->column('type')->using(['链接内部页面', '链接网址']);
- $grid->column('url');
- $grid->column('status')->switch();
- $grid->column('sort')->editable()->sortable()->width(120);
-
- $grid->filter(function (Grid\Filter $filter) {
- $filter->panel();
-
- $filter->equal('id')->width(2);
- $filter->like('title')->width(3);
- });
- });
- }
-
- /**
- * Make a show builder.
- *
- * @param mixed $id
- *
- * @return Show
- */
- protected function detail($id)
- {
- return Show::make($id, new WaterfallAd('agentProduct.product:id,title'), function (Show $show) {
- //不允许查看非自己的数据
- if ($show->model()->agent_id != Admin::user()->id) {
- Admin::exit('数据不存在');
- }
-
- $show->field('id');
- $show->field('title');
- $show->field('picture')->image('', 80, 80);
- $show->field('type')->using(['链接内部页面', '链接网址']);
- $show->field('url');
- $show->field('status')->using(['禁用', '启用']);
- $show->field('sort');
- $show->field('created_at');
- $show->field('updated_at');
- });
- }
-
- /**
- * Make a form builder.
- *
- * @return Form
- */
- protected function form()
- {
- return Form::make(new WaterfallAd(), function (Form $form) {
- //不允许查看非自己的数据
- if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) {
- return $form->response()->error('数据不存在');
- }
-
- $form->display('id');
- $form->text('title')->required();
- $form->image('picture')
- ->required()->removable(false)->uniqueName();
- $form->radio('type', '链接类型')
- ->options(['链接到内部页面', '链接到网址'])
- ->value(0)->default(0)
- ->when(0, function (Form $form) {
- $form->text('url-0', '内部页面地址')
- ->customFormat(fn() => $this->type == 0 ? $this->url : '')
- ->help('格式如下:
产品详情页:/pages/goodsDetail/index?goods_id=产品ID
-
文章详情页:/pages/notice/article?article_id=文章ID
-
公告详情页:/pages/notice/notice?notice_id=公告ID');
- })
- ->when(1, function (Form $form) {
- $form->url('url-1', '链接到网址')
- ->placeholder('如:https://www.baidu.com/')
- ->customFormat(fn() => $this->type == 1 ? $this->url : '');
- });
- $form->text('sort')->default(255)->required();
- })->saving(function (Form $form) {
- //不允许修改非自己的数据
- if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) {
- return $form->response()->error('数据不存在');
- }
-
- //将null字段设置为空值,防止插入数据库出错
- foreach ($form->input() as $k => $v) {
- if (is_null($v)) {
- $form->$k = '';
- }
- }
-
- //处理特殊字段
- $form->hidden(['agent_id', 'url']);
- $form->agent_id = Admin::user()->id;
- $form->status = $form->status ? 1 : 0;
- $form->url = $form->{'url-' . $form->type};
- $form->deleteInput(['url-0', 'url-1']);
-
- //不允许编辑的字段
- $form->ignore(['id', 'created_at', 'updated_at']);
- })->deleting(function (Form $form) {
- //不允许删除非自己的数据
- if (array_filter($form->model()->toArray(), fn($v) => $v['agent_id'] != Admin::user()->id)) {
- return $form->response()->error('数据不存在');
- }
- });
- }
-}
diff --git a/app/AdminAgent/Repositories/WaterfallAd.php b/app/AdminAgent/Repositories/WaterfallAd.php
deleted file mode 100644
index 20e0745..0000000
--- a/app/AdminAgent/Repositories/WaterfallAd.php
+++ /dev/null
@@ -1,16 +0,0 @@
-index();
+ $list = AgentProduct::list()->where('agent_id', $this->agent_id)->simplePaginate();
+ $list = $this->paginatePicAddHost($list);
+ $list = $list->toArray();
+ if (!empty($list['data']) && is_array($list['data'])) {
+ shuffle($list['data']); //随机乱序
+ }
+ $list = $this->insertAd($list);
+
+ return $this->success($list);
}
//【我的】页面下方推荐
@@ -81,11 +88,14 @@ class AgentProductController extends Controller
return $this->index();
}
- //人气爆款列表
+ //人气爆款列表,销量排序
public function hotList()
{
- //TODO 具体排序规则,后期再做修改
- return $this->index();
+ $list = AgentProduct::list()->where('agent_id', $this->agent_id)->simplePaginate();
+ $list = $this->paginatePicAddHost($list);
+ $list = $this->insertAd($list);
+
+ return $this->success($list);
}
//分页列表产品图片加域名
@@ -106,27 +116,27 @@ class AgentProductController extends Controller
private function insertAd($list)
{
//插入瀑布流广告,分别在第8个和第16个插入,同时需要考虑到分页。当所有瀑布流广告插入完之后,再次循环插入
- $list = $list->toArray();
- if ($list['data']) {
- $ad_total = WaterfallAd::where(['agent_id' => $this->agent_id, 'status' => 1])->count();
+ if (is_object($list) && method_exists($list, 'toArray')) {
+ $list = $list->toArray();
+ }
+ $ad_total = Advertising::where(['agent_id' => $this->agent_id, 'status' => 1, 'display' => 2])->count();
+ if ($list['data'] && $ad_total > 0) {
$page = (int)request()->input('page');
$start = ($page ? $page - 1 : 0) * 2 % $ad_total;
- $ad = WaterfallAd::where(['agent_id' => $this->agent_id, 'status' => 1])
+ $ad = Advertising::where(['agent_id' => $this->agent_id, 'status' => 1, 'display' => 2])
->orderBy('sort')->orderBy('id', 'DESC')
->offset($start)->limit(2)->get(['title', 'picture', 'type', 'url'])->toArray();
$prefix = Storage::disk('public')->url('');
- //每隔8个插入广告
- $gap = 4;
foreach ($ad as $k => &$v) {
$v['is_ad'] = true;
$v['picture'] = $prefix . $v['picture'];
- //插入广告
- $temp = $gap * ($k+1);
+ //每隔8个插入广告
+ $temp = 8 * ($k+1);
if (!empty($list['data'][$temp - 1]) && !empty($ad[$k])) {
array_splice($list['data'], $temp + $k, 0, [$ad[$k]]);
}
diff --git a/app/Http/Controllers/Api/IndexController.php b/app/Http/Controllers/Api/IndexController.php
index 9f6aef1..f7e5212 100644
--- a/app/Http/Controllers/Api/IndexController.php
+++ b/app/Http/Controllers/Api/IndexController.php
@@ -6,7 +6,6 @@ use App\Models\Channel;
use App\Models\Notice;
use App\Models\AgentProduct;
use App\Models\Advertising;
-use App\Models\Special;
use App\Models\UserChannel;
use Illuminate\Support\Facades\Storage;
@@ -23,11 +22,13 @@ class IndexController extends Controller
$img_prefix = Storage::disk('public')->url('');
# 轮播图
- $slide = Advertising::where(['agent_id' => $this->agent_id, 'status' => 1])
+ $slide = Advertising::where(['agent_id' => $this->agent_id, 'status' => 1, 'display' => 0])
->orderBy('sort')->orderBy('id', 'DESC')->limit(10)
->get(['title', 'picture', 'type', 'url']);
- foreach ($slide as &$v) {
- $v->picture = $img_prefix . $v->picture;
+ if (!$slide->isEmpty()) {
+ foreach ($slide as &$v) {
+ $v->picture = $img_prefix . $v->picture;
+ }
}
# 公告
@@ -71,13 +72,12 @@ class IndexController extends Controller
}
# 专题列表
- $special = Special::query()
- ->where('agent_id', $this->agent_id)
- ->orderBy('sort')->orderBy('id')
- ->limit(6)->get(['id', 'picture_ad']);
+ $special = Advertising::where('agent_id', $this->agent_id)
+ ->orderBy('sort')->orderBy('id', 'desc')->limit(6)
+ ->get(['title', 'picture', 'type', 'url']);
if (!$special->isEmpty()) {
foreach ($special as $k=>&$v) {
- $v->picture_ad = $img_prefix . $v->picture_ad;
+ $v->picture = $img_prefix . $v->picture;
}
}
diff --git a/app/Http/Controllers/Api/SpecialController.php b/app/Http/Controllers/Api/SpecialController.php
index 681f4b2..73e0def 100644
--- a/app/Http/Controllers/Api/SpecialController.php
+++ b/app/Http/Controllers/Api/SpecialController.php
@@ -12,7 +12,7 @@ class SpecialController extends Controller
{
$id = (int)request()->input('id');
$detail = Special::query()
- ->select(['id', 'picture', 'picture_ad', 'updated_at', 'agent_product_id'])
+ ->select(['id', 'picture', 'updated_at', 'agent_product_id'])
->find($id);
$detail->product = AgentProduct::list()
diff --git a/app/Models/WaterfallAd.php b/app/Models/WaterfallAd.php
deleted file mode 100644
index 7299f03..0000000
--- a/app/Models/WaterfallAd.php
+++ /dev/null
@@ -1,18 +0,0 @@
-belongsTo(AgentProduct::class);
- }
-}
diff --git a/resources/lang/zh_CN/advertising.php b/resources/lang/zh_CN/advertising.php
new file mode 100644
index 0000000..9508def
--- /dev/null
+++ b/resources/lang/zh_CN/advertising.php
@@ -0,0 +1,28 @@
+ [
+ 'Advertising' => '广告图',
+ 'advertising' => '广告图',
+ ],
+ 'fields' => [
+ 'title' => '标题',
+ 'picture' => '图片地址',
+ 'status' => '状态',
+ 'agent_id' => '代理商ID',
+ 'sort' => '排序',
+ 'type' => '链接类型',
+ 'url' => '链接到',
+ 'display' => '显示位置',
+ ],
+ 'options' => [
+ 'type' => [
+ 0 => '内部页面',
+ 1 => '网址',
+ ],
+ 'display' => [
+ 0 => '轮播图',
+ 1 => '首页横屏广告',
+ 2 => '产品列表内嵌广告',
+ ],
+ ],
+];
diff --git a/resources/lang/zh_CN/slide.php b/resources/lang/zh_CN/slide.php
deleted file mode 100644
index 46d7ed2..0000000
--- a/resources/lang/zh_CN/slide.php
+++ /dev/null
@@ -1,18 +0,0 @@
- [
- 'Slide' => '轮播图',
- 'slide' => '轮播图',
- ],
- 'fields' => [
- 'title' => '图片说明',
- 'picture' => '图片地址',
- 'status' => '状态',
- 'agent_id' => '代理商ID',
- 'sort' => '排序',
- 'type' => '链接类型',
- 'url' => '链接到',
- ],
- 'options' => [
- ],
-];