diff --git a/app/Admin/Extensions/Grid/AuditAgent.php b/app/Admin/Extensions/Grid/AuditAgent.php index 6e0d5e4..f4ce765 100644 --- a/app/Admin/Extensions/Grid/AuditAgent.php +++ b/app/Admin/Extensions/Grid/AuditAgent.php @@ -5,9 +5,7 @@ use App\Common\AgentType; use App\Common\UserStatus; use App\Models\Agent; use App\Models\Category; -use App\Models\Channel; use App\Models\Advertising; -use Dcat\Admin\Admin; use Dcat\Admin\Grid\RowAction; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; @@ -74,27 +72,6 @@ class AuditAgent extends RowAction ])->increment('pid', $id_interval); } - //代理商频道列表 - if (!Channel::withTrashed()->where('agent_id', $id)->first()) { - $default_channel = Channel::where('agent_id', 0)->orderBy('id')->get()->toArray(); - - $default_channel = array_map(function ($v) use ($id, $host) { - unset($v['id']); - $v['agent_id'] = $id; - //insert和update,increment等批量更新时,不支持修改器,需要手动处理 - $v['icon'] = str_replace($host, '', $v['icon']); - return $v; - }, $default_channel); - Channel::insert($default_channel); - - //获取ID间隔,更新pid - $id_interval = Channel::max('id') - count($default_channel); - Channel::where([ - ['agent_id', '=', $id], - ['pid', '<>', 0], - ])->increment('pid', $id_interval); - } - //首页轮播图 if (!Advertising::where('agent_id', $id)->first()) { $default_slide = Advertising::where('agent_id', 0)->orderBy('id')->get()->toArray(); diff --git a/app/AdminAgent/Controllers/AgentProductController.php b/app/AdminAgent/Controllers/AgentProductController.php index e83708e..ce06a11 100644 --- a/app/AdminAgent/Controllers/AgentProductController.php +++ b/app/AdminAgent/Controllers/AgentProductController.php @@ -11,7 +11,6 @@ use App\Common\ProductStatus; use App\Models\AgentProductItem; use App\Models\AgentProductSpec; use App\Models\Category; -use App\Models\Channel; use App\Models\DiyForm; use App\Models\Guide; use App\Models\Product; @@ -74,13 +73,6 @@ class AgentProductController extends AdminController $grid->column('sale'); $grid->column('stock'); - $channels = Channel::where('agent_id', $agent_id)->pluck('name', 'id')->toArray(); - $grid->column('channel_id', '频道') - ->display(function ($modal) use ($channels) { - $data = array_flip(explode(',', $this->channel_id)); - return join(',',array_intersect_key($channels, $data)); - }) - ->limit(10); $grid->column('category.name', '分类'); /*$grid->column('product_ids', '产品详情') ->display('查看') @@ -172,7 +164,6 @@ class AgentProductController extends AdminController $show->field('content')->unescape(); if (Admin::user()->type != AgentType::OPERATOR) { $show->field('is_rec')->using(['未推荐', '已推荐']); - $show->field('channel_id')->as(fn($v) => join(',', Channel::whereIn('id', explode(',', $v))->pluck('name')->toArray())); $show->field('earnest'); $show->field('earnest_timeout'); $show->field('deposit'); @@ -314,9 +305,6 @@ class AgentProductController extends AdminController } else { $form->switch('is_rec')->help('推荐后将在小程序“我的”页面下方显示'); - $options = Channel::selectOptions(fn($query) => $query->where('agent_id', $agent_id)); - $form->multipleSelect('channel_id')->options(array_slice($options, 1, null, true)); - $form->decimal('earnest')->rules('required|numeric|min:0',[ '*' => '金额为必填字段且必须大于0', ])->default(0); diff --git a/app/AdminAgent/Controllers/ChannelController.php b/app/AdminAgent/Controllers/ChannelController.php deleted file mode 100644 index a7de462..0000000 --- a/app/AdminAgent/Controllers/ChannelController.php +++ /dev/null @@ -1,127 +0,0 @@ -header('产品频道') - ->body(function (Row $row) { - $tree = new Tree(new ChannelModel()); - $tree->query(function ($model) { - //agent_id为0是系统分类,其它是代理商分类 - return $model->where('agent_id', Admin::user()->id)->orderBy('sort')->orderBy('id'); - }); - - /*$prefix = Storage::disk('public')->url(''); - $tree->branch(function ($branch) use ($prefix) { - $src = $prefix . $branch['icon'] ; - $logo = ''; - - return "{$branch['id']} - {$branch['name']} $logo"; - });*/ - $row->column(12, $tree); - }); - } - - /** - * Make a grid builder. - * - * @return Grid - */ - protected function grid() - { - return Grid::make(new Channel(['parent']), function (Grid $grid) { - $grid->model()->where('agent_id', Admin::user()->id) - ->orderBy('sort')->orderBy('id', 'desc'); - - $grid->column('id')->sortable(); - $grid->column('icon')->image('', 60, 60); - $grid->column('name'); - $grid->column('parent.name'); - $grid->column('sort')->editable()->width(120); - - $grid->filter(function (Grid\Filter $filter) { - $filter->panel(); - - $filter->equal('id')->width(2); - $filter->like('name')->width(3); - }); - }); - } - - /** - * Make a show builder. - * - * @param mixed $id - * - * @return Show - */ - protected function detail($id) - { - return Show::make($id, new Channel(['parent']), function (Show $show) { - //不允许查看非自己的数据 - if ($show->model()->agent_id != Admin::user()->id) { - Admin::exit('数据不存在'); - } - - $show->field('id'); - $show->field('icon')->image('', 80, 80); - $show->field('name'); - $show->field('parent.name'); - $show->field('sort'); - }); - } - - /** - * Make a form builder. - * - * @return Form - */ - protected function form() - { - return Form::make(new Channel(), function (Form $form) { - //不允许修改非自己的数据 - if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) { - return $form->response()->error('数据不存在'); - } - - $form->display('id'); - $form->image('icon')->uniqueName()->removable(false); - $form->text('name')->required(); - $form->select('pid')->options(\App\Models\Channel::selectOptions())->default(0)->required(); - $form->text('sort')->default(255); - })->saving(function (Form $form) { - //不允许修改非自己的数据 - if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) { - return $form->response()->error('数据不存在'); - } - - //处理特殊字段 - $form->hidden(['agent_id']); - $form->agent_id = Admin::user()->id; - $form->sort = $form->sort ?? 255; - - //不允许编辑的字段 - $form->ignore(['id', 'deleted_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/Channel.php b/app/AdminAgent/Repositories/Channel.php deleted file mode 100644 index 31b7601..0000000 --- a/app/AdminAgent/Repositories/Channel.php +++ /dev/null @@ -1,16 +0,0 @@ -resource('supplier/list', 'SupplierController'); $router->resource('article/list', 'ArticleController'); $router->resource('setting', 'SettingController'); - $router->resource('channel/list', 'ChannelController'); $router->resource('group_order/list', 'GroupOrderController'); $router->resource('finance_statistics', 'FinanceStatisticsController'); $router->resource('order_statistics', 'OrderStatisticsController'); diff --git a/app/AdminGuide/Controllers/MyDemandProductController.php b/app/AdminGuide/Controllers/MyDemandProductController.php index 134a75d..1da70e2 100755 --- a/app/AdminGuide/Controllers/MyDemandProductController.php +++ b/app/AdminGuide/Controllers/MyDemandProductController.php @@ -2,25 +2,12 @@ namespace App\AdminGuide\Controllers; -use App\Common\ProductStatus; -use App\Models\AgentProduct; -use App\Models\Channel; -use App\Models\Product; use App\Traits\ResponseHelper; use App\AdminGuide\Repositories\Demand; -use App\Models\DemandBidding; use Dcat\Admin\Admin; -use Dcat\Admin\Form; use Dcat\Admin\Grid; -use Dcat\Admin\Show; use Dcat\Admin\Http\Controllers\AdminController; use App\Traits\DemandTraits; -use Illuminate\Database\Eloquent\Model; -use Illuminate\Http\Request; -use Illuminate\Support\Arr; -use Illuminate\Support\Facades\DB; -use Illuminate\Support\Facades\Log; -use Illuminate\Support\Facades\URL; class MyDemandProductController extends AdminController { @@ -52,15 +39,6 @@ class MyDemandProductController extends AdminController $grid->column('agentProduct.sale','产品销量'); $grid->column('agentProduct.stock','产品库存'); - $grid->column('channel_id', '频道') - ->display(function ($modal) { - - $channels = Channel::where('agent_id', $this->publisher_id)->pluck('name', 'id')->toArray(); - - $data = array_flip(explode(',', $this->channel_id)); - return join(',',array_intersect_key($channels, $data)); - }) - ->limit(10); $grid->column('agentProduct.category.name', '分类'); $grid->disableDeleteButton(); $grid->disableEditButton(); diff --git a/app/Http/Controllers/Api/CategoryController.php b/app/Http/Controllers/Api/CategoryController.php index c881ca1..2fbb04b 100644 --- a/app/Http/Controllers/Api/CategoryController.php +++ b/app/Http/Controllers/Api/CategoryController.php @@ -5,10 +5,12 @@ use App\Common\ProductStatus; use App\Http\Controllers\Controller; use App\Models\AgentProduct; use App\Models\Category; +use Illuminate\Http\JsonResponse; class CategoryController extends Controller { - public function index() + # 推荐页分类列表 + public function index(): JsonResponse { $list = Category::query() ->where('agent_id', $this->agent_id) @@ -21,4 +23,25 @@ class CategoryController extends Controller } return $this->success($list); } + + # 首页频道获取的分类列表(无论分类有几级都只显示两级) + public function index_channel(): JsonResponse + { + $list = Category::query() + ->where('agent_id', $this->agent_id) + ->orderBy('sort') + ->get(['id', 'name', 'pid'])->toArray(); + + $list = array_column($list, null, 'id'); + foreach ($list as &$v) { + if ($v['pid'] == 0) continue; + + $parent_pid = $list[$v['pid']]['pid']; + while ($parent_pid != 0) { + $v['pid'] = $parent_pid; + $parent_pid = $list[$parent_pid]['pid']; + } + } + return $this->success($list); + } } diff --git a/app/Http/Controllers/Api/ChannelController.php b/app/Http/Controllers/Api/ChannelController.php deleted file mode 100644 index 7ada875..0000000 --- a/app/Http/Controllers/Api/ChannelController.php +++ /dev/null @@ -1,66 +0,0 @@ -where('agent_id', $this->agent_id) - ->orderBy('sort') - ->orderBy('id') - ->get(['id', 'pid', 'name', 'icon']); - $prefix = Storage::disk('public')->url(''); - foreach ($list as $k => &$v) { - $v->icon = $prefix . $v->icon; - } - return $this->success($list); - } - - // 我的频道 - public function my() - { - $channel_ids = UserChannel::where('user_id', $this->user_id)->value('channels'); - $list = Channel::whereIn('id', $channel_ids)->get(['id', 'pid', 'name', 'icon']); - return $this->success($list); - } - - //根据频道ID获取产品 - public function product() - { - $channel_id = (int)request()->input('channel_id'); - - $list = AgentProduct::list($this->agent_id) - ->whereRaw("FIND_IN_SET($channel_id, `channel_id`)") - ->orderBy('id', 'DESC') - ->simplePaginate(); - $list = $this->paginatePicAddHost($list); - return $this->success($list); - } - - //分页列表产品图片加域名 - private function paginatePicAddHost($list) - { - if (!$list->isEmpty()) { - $prefix = Storage::disk('public')->url(''); - foreach ($list->items() as $k=>&$v) { - $v->pictures = array_map(function($item) use ($prefix) { - return strpos($item, $prefix) === false ? $prefix . $item : $item; - }, $v->pictures); - } - } - return $list; - } -} diff --git a/app/Http/Controllers/Api/IndexController.php b/app/Http/Controllers/Api/IndexController.php index 57c2c31..50b31b3 100644 --- a/app/Http/Controllers/Api/IndexController.php +++ b/app/Http/Controllers/Api/IndexController.php @@ -2,11 +2,11 @@ namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; -use App\Models\Channel; +use App\Models\Category; use App\Models\Notice; use App\Models\AgentProduct; use App\Models\Advertising; -use App\Models\UserChannel; +use App\Models\UserCategory; use Illuminate\Support\Facades\Storage; /** @@ -36,18 +36,12 @@ class IndexController extends Controller ->orderBy('sort')->orderBy('id', 'desc')->get(['id', 'title']); # 我的频道 - $my_channels = []; + $my_cats = []; if ($this->user_id) { - $channel_ids = UserChannel::where('user_id', $this->user_id)->value('channels') ?? []; - $my_channels = Channel::where('agent_id', $this->agent_id) - ->whereIn('id', $channel_ids) - ->get(['id', 'name', 'icon']); - } - - if ($my_channels && !$my_channels->isEmpty()) { - foreach ($my_channels as &$v) { - $v->icon = $img_prefix . $v->icon; - } + $cate_ids = UserCategory::where('user_id', $this->user_id)->value('categories') ?? []; + $my_cats = Category::where('agent_id', $this->agent_id) + ->whereIn('id', $cate_ids) + ->get(['id', 'name']); } # 专题列表 @@ -77,7 +71,7 @@ class IndexController extends Controller return $this->success([ 'slide' => $slide, 'notice' => $notice, - 'my_channels' => $my_channels, + 'my_channels' => $my_cats, 'special' => $special, 'hots' => $hots, ]); diff --git a/app/Http/Controllers/Api/UserCategoryController.php b/app/Http/Controllers/Api/UserCategoryController.php new file mode 100644 index 0000000..b7704be --- /dev/null +++ b/app/Http/Controllers/Api/UserCategoryController.php @@ -0,0 +1,36 @@ +success(UserCategory::where('user_id', $this->user_id)->value('categories') ?? []); + } + + # 我的频道编辑 + public function update(Request $request): JsonResponse + { + $formData = $request->only(['channels']); + $request->validate([ + 'channels' => 'nullable|array', + ], [ + 'channels.array' => 'channels必须是数组', + ]); + + $cats = array_unique(array_filter($formData['channels'] ?? [])); + UserCategory::updateOrCreate(['user_id' => $this->user_id], [ + 'user_id' => $this->user_id, + 'categories' => $cats, + ]); + + return $this->success(); + } +} diff --git a/app/Http/Controllers/Api/UserChannelController.php b/app/Http/Controllers/Api/UserChannelController.php deleted file mode 100644 index 1421255..0000000 --- a/app/Http/Controllers/Api/UserChannelController.php +++ /dev/null @@ -1,35 +0,0 @@ -user_id)->value('channels'); - return $this->success($channels); - } - - // 我的频道编辑 - public function update(Request $request) - { - $formData = $request->only(['channels']); - $request->validate([ - 'channels' => 'nullable|array', - ], [ - 'channels.array' => 'channels必须是数组', - ]); - - $channels = array_unique(array_filter($formData['channels'])); - - $UserChannel = UserChannel::where('user_id', $this->user_id)->first(); - $UserChannel->channels = $channels; - $UserChannel->save(); - - return $this->success(); - } -} diff --git a/app/Models/AgentProduct.php b/app/Models/AgentProduct.php index b19004f..76faf0b 100644 --- a/app/Models/AgentProduct.php +++ b/app/Models/AgentProduct.php @@ -53,11 +53,6 @@ class AgentProduct extends BaseModel return $this->belongsTo(self::class, 'agent_cloud_pid', 'id'); } - public function setChannelIdAttribute($value) - { - $this->attributes['channel_id'] = is_array($value) ? join(',', array_filter($value)) : $value; - } - public function setPicturesAttribute($value) { $this->attributes['pictures'] = is_array($value) ? (json_encode(array_filter($value)) ?? '[]') : '[]'; diff --git a/app/Models/Channel.php b/app/Models/Channel.php deleted file mode 100644 index 83e58a7..0000000 --- a/app/Models/Channel.php +++ /dev/null @@ -1,34 +0,0 @@ -timestamps = false; - } - - public function parent() - { - return $this->hasOne(self::class, 'id', 'pid'); - } -} diff --git a/app/Models/UserCategory.php b/app/Models/UserCategory.php new file mode 100644 index 0000000..d292294 --- /dev/null +++ b/app/Models/UserCategory.php @@ -0,0 +1,13 @@ + 'json']; +} diff --git a/app/Models/UserChannel.php b/app/Models/UserChannel.php deleted file mode 100644 index 764021c..0000000 --- a/app/Models/UserChannel.php +++ /dev/null @@ -1,26 +0,0 @@ -timestamps = false; - } - - // 获取时需要转换,写入时框架可自动将数组转换后保存 - public function getChannelsAttribute($value) - { - return json_decode($value, true); - } -} diff --git a/resources/lang/zh_CN/channel.php b/resources/lang/zh_CN/channel.php deleted file mode 100644 index 57a5036..0000000 --- a/resources/lang/zh_CN/channel.php +++ /dev/null @@ -1,16 +0,0 @@ - [ - 'Channel' => '频道', - 'channel' => '频道', - ], - 'fields' => [ - 'agent_id' => '代理商ID', - 'icon' => '频道图标', - 'name' => '频道名称', - 'pid' => '父级ID', - 'sort' => '排序', - ], - 'options' => [ - ], -]; diff --git a/routes/api.php b/routes/api.php index 1350621..c40839f 100644 --- a/routes/api.php +++ b/routes/api.php @@ -51,8 +51,7 @@ Route::namespace('App\Http\Controllers\Api') # 频道 Route::prefix('channel')->group(function () { - Route::post('list', 'ChannelController@index'); //频道列表 - Route::post('product', 'ChannelController@product'); //频道产品列表 + Route::post('list', 'CategoryController@index_channel'); //频道列表 }); # 产品 @@ -99,8 +98,8 @@ Route::namespace('App\Http\Controllers\Api') ->group(function () { # 我的频道 Route::prefix('user_channel')->group(function () { - Route::post('list', 'UserChannelController@index'); //我的频道列表 - Route::post('update', 'UserChannelController@update'); //编辑我的频道 + Route::post('list', 'UserCategoryController@index'); //我的频道列表 + Route::post('update', 'UserCategoryController@update'); //编辑我的频道 }); # 订单