diff --git a/MySQL_change.sql b/MySQL_change.sql index aa2bee5..bbf0c8d 100644 --- a/MySQL_change.sql +++ b/MySQL_change.sql @@ -92,3 +92,9 @@ ALTER TABLE `orders` ALTER TABLE `orders` ADD COLUMN verify_code CHAR(13) NOT NULL DEFAULT '' COMMENT '核销码' AFTER `guide_id`; + +# 10:35 ‎2021/‎08/‎22 +ALTER TABLE `slides` + CHANGE COLUMN `url` `picture` VARCHAR(255) NOT NULL COMMENT '轮播图地址' COLLATE 'utf8_general_ci' AFTER `title`, + ADD COLUMN `type` TINYINT NOT NULL DEFAULT '0' COMMENT '链接类型,0:链接产品详情;1:链接到webview url' AFTER `sort`, + ADD COLUMN `url` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '链接地址' AFTER `type`; diff --git a/app/AdminAgent/Controllers/SlideController.php b/app/AdminAgent/Controllers/SlideController.php index 7632f10..09bcb8a 100644 --- a/app/AdminAgent/Controllers/SlideController.php +++ b/app/AdminAgent/Controllers/SlideController.php @@ -2,7 +2,11 @@ namespace App\AdminAgent\Controllers; +use App\AdminAgent\Renderable\SelectAgentProduct; +use App\AdminAgent\Renderable\SelectProduct; use App\AdminAgent\Repositories\Slide; +use App\Models\AgentProduct; +use App\Models\Product; use Dcat\Admin\Admin; use Dcat\Admin\Form; use Dcat\Admin\Grid; @@ -18,12 +22,17 @@ class SlideController extends AdminController */ protected function grid() { - return Grid::make(new Slide(), function (Grid $grid) { + return Grid::make(new Slide(['agentProduct.product:id,title,pictures']), function (Grid $grid) { $grid->model()->where('agent_id', Admin::user()->id)->orderBy('sort'); $grid->column('id')->sortable(); $grid->column('title'); - $grid->column('url')->image('', 60, 60); + $grid->column('picture')->image('', 60, 60); + $grid->column('type')->using(['链接产品', '链接网址']); + $grid->column('url') + ->if(fn($column) => $this->type == 0) + ->then(fn($column) => $column->display($this->agentProduct->product->title ?? '')) + ->else(fn($column) => $column->display($this->url ?? '')); $grid->column('status')->switch(); $grid->column('sort')->editable()->sortable()->width(120); @@ -43,10 +52,18 @@ class SlideController extends AdminController */ protected function detail($id) { - return Show::make($id, new Slide(), function (Show $show) { + return Show::make($id, new Slide(['agentProduct.product:id,title,pictures']), function (Show $show) { $show->field('id'); $show->field('title'); - $show->field('url')->image('', 80, 80); + $show->field('picture')->image('', 80, 80); + $show->field('type')->using(['链接到产品详情', '链接到网址']); + $show->field('url') + ->as(function ($v) { + if($this->type == 0) { + return $this->agentProduct->product->title; + } + return $v; + }); $show->field('status')->using(['禁用', '启用']); $show->field('sort'); $show->field('created_at'); @@ -63,15 +80,53 @@ class SlideController extends AdminController { return Form::make(new Slide(), function (Form $form) { $form->display('id'); - $form->text('title'); - $form->image('url')->required()->removable(false); - $form->switch('status')->required(); - $form->text('sort')->required(); + $form->text('title') + ->help('主要用于后台显示,方便管理'); + $form->image('picture') + ->required()->removable(false)->uniqueName() + ->help('图片大小:750*360'); + $form->select('status')->options(['禁用', '启用'])->default(1)->required(); + $form->radio('type', '链接类型') + ->options(['链接到产品详情', '链接到网址']) + ->value(0)->default(0) + ->when(0, function (Form $form) { + $form->selectTable('url-0', '链接到产品') + ->help('请选择要链接到的产品') + ->title('选择在售产品') + ->dialogWidth('80%;min-width:825px;') + ->from(SelectAgentProduct::make(['id' => $form->url])) + ->options(function ($v) { + if (!$v) return []; + $agent_product = AgentProduct::with('product:id,title') + ->select(['id', 'product_id']) + ->firstWhere(['id' => $v]); + return [$agent_product->id => $agent_product->product->title]; + }) + ->pluck('product.title') + ->value($form->model()->url); + }) + ->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) { + //不允许编辑的字段 + $form->ignore(['id']); + + foreach ($form->input() as $k => $v) { + if (is_null($v)) { + $form->$k = ''; + } + } + //处理特殊字段 - $form->hidden(['agent_id']); + $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']); }); } } diff --git a/app/Http/Controllers/Api/IndexController.php b/app/Http/Controllers/Api/IndexController.php index 59586b3..19727d6 100644 --- a/app/Http/Controllers/Api/IndexController.php +++ b/app/Http/Controllers/Api/IndexController.php @@ -20,8 +20,9 @@ class IndexController extends Controller public function index() { # 轮播图 - $slide = Slide::where('agent_id', $this->agent_id)->where('status', 1) - ->orderBy('sort')->orderBy('id', 'DESC')->limit(10)->get(['title','url']); + $slide = Slide::where(['agent_id' => $this->agent_id, 'status' => 1]) + ->orderBy('sort')->orderBy('id', 'DESC')->limit(10) + ->get(['title', 'picture', 'type', 'url']); # 公告 $notice = Notice::where('agent_id', $this->agent_id)->limit(10)->get(['id', 'title', 'updated_at']); diff --git a/app/Models/Slide.php b/app/Models/Slide.php index 666bc42..22c2c4e 100644 --- a/app/Models/Slide.php +++ b/app/Models/Slide.php @@ -12,4 +12,9 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; class Slide extends BaseModel { use HasFactory; + + public function agentProduct() + { + return $this->belongsTo(AgentProduct::class, 'url', 'id'); + } } diff --git a/resources/lang/zh_CN/slide.php b/resources/lang/zh_CN/slide.php index 9c00674..46d7ed2 100644 --- a/resources/lang/zh_CN/slide.php +++ b/resources/lang/zh_CN/slide.php @@ -1,4 +1,4 @@ - [ 'Slide' => '轮播图', @@ -6,10 +6,12 @@ return [ ], 'fields' => [ 'title' => '图片说明', - 'url' => '图片地址', + 'picture' => '图片地址', 'status' => '状态', 'agent_id' => '代理商ID', 'sort' => '排序', + 'type' => '链接类型', + 'url' => '链接到', ], 'options' => [ ],