17 changed files with 84 additions and 402 deletions
			
			
		- 
					23app/Admin/Extensions/Grid/AuditAgent.php
 - 
					12app/AdminAgent/Controllers/AgentProductController.php
 - 
					127app/AdminAgent/Controllers/ChannelController.php
 - 
					16app/AdminAgent/Repositories/Channel.php
 - 
					1app/AdminAgent/routes.php
 - 
					22app/AdminGuide/Controllers/MyDemandProductController.php
 - 
					25app/Http/Controllers/Api/CategoryController.php
 - 
					66app/Http/Controllers/Api/ChannelController.php
 - 
					22app/Http/Controllers/Api/IndexController.php
 - 
					36app/Http/Controllers/Api/UserCategoryController.php
 - 
					35app/Http/Controllers/Api/UserChannelController.php
 - 
					5app/Models/AgentProduct.php
 - 
					34app/Models/Channel.php
 - 
					13app/Models/UserCategory.php
 - 
					26app/Models/UserChannel.php
 - 
					16resources/lang/zh_CN/channel.php
 - 
					7routes/api.php
 
@ -1,127 +0,0 @@ | 
				
			|||
<?php | 
				
			|||
 | 
				
			|||
namespace App\AdminAgent\Controllers; | 
				
			|||
 | 
				
			|||
use App\AdminAgent\Repositories\Channel; | 
				
			|||
use App\Models\Channel as ChannelModel; | 
				
			|||
use Dcat\Admin\Admin; | 
				
			|||
use Dcat\Admin\Form; | 
				
			|||
use Dcat\Admin\Grid; | 
				
			|||
use Dcat\Admin\Layout\Content; | 
				
			|||
use Dcat\Admin\Layout\Row; | 
				
			|||
use Dcat\Admin\Show; | 
				
			|||
use Dcat\Admin\Http\Controllers\AdminController; | 
				
			|||
use Dcat\Admin\Tree; | 
				
			|||
use Illuminate\Support\Facades\Storage; | 
				
			|||
 | 
				
			|||
class ChannelController extends AdminController | 
				
			|||
{ | 
				
			|||
	public function index(Content $content) | 
				
			|||
	{ | 
				
			|||
		return $content->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 = '<img data-action="preview-img" src="'.$src.'" style="max-width:30px;max-height:30px;cursor:pointer;margin-left:20px;" class="img">'; | 
				
			|||
 | 
				
			|||
					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('数据不存在'); | 
				
			|||
			} | 
				
			|||
		}); | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
@ -1,16 +0,0 @@ | 
				
			|||
<?php | 
				
			|||
 | 
				
			|||
namespace App\AdminAgent\Repositories; | 
				
			|||
 | 
				
			|||
use App\Models\Channel as Model; | 
				
			|||
use Dcat\Admin\Repositories\EloquentRepository; | 
				
			|||
 | 
				
			|||
class Channel extends EloquentRepository | 
				
			|||
{ | 
				
			|||
    /** | 
				
			|||
     * Model. | 
				
			|||
     * | 
				
			|||
     * @var string | 
				
			|||
     */ | 
				
			|||
    protected $eloquentClass = Model::class; | 
				
			|||
} | 
				
			|||
@ -1,66 +0,0 @@ | 
				
			|||
<?php | 
				
			|||
 | 
				
			|||
namespace App\Http\Controllers\Api; | 
				
			|||
use App\Http\Controllers\Controller; | 
				
			|||
use App\Models\AgentProduct; | 
				
			|||
use App\Models\Channel; | 
				
			|||
use App\Models\UserChannel; | 
				
			|||
use Illuminate\Support\Facades\Storage; | 
				
			|||
 | 
				
			|||
/** | 
				
			|||
 * 频道列表 | 
				
			|||
 * Class Channel | 
				
			|||
 * @package App\Http\Controllers\Api | 
				
			|||
 */ | 
				
			|||
class ChannelController extends Controller | 
				
			|||
{ | 
				
			|||
    // 所有频道列表
 | 
				
			|||
    public function index() | 
				
			|||
    { | 
				
			|||
        $list = Channel::query() | 
				
			|||
			->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; | 
				
			|||
	} | 
				
			|||
} | 
				
			|||
@ -0,0 +1,36 @@ | 
				
			|||
<?php | 
				
			|||
 | 
				
			|||
namespace App\Http\Controllers\Api; | 
				
			|||
 | 
				
			|||
use App\Http\Controllers\Controller; | 
				
			|||
use App\Models\UserCategory; | 
				
			|||
use Illuminate\Http\JsonResponse; | 
				
			|||
use Illuminate\Http\Request; | 
				
			|||
 | 
				
			|||
class UserCategoryController extends Controller | 
				
			|||
{ | 
				
			|||
	# 我的频道列表
 | 
				
			|||
    public function index(): JsonResponse | 
				
			|||
	{ | 
				
			|||
		return $this->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(); | 
				
			|||
	} | 
				
			|||
} | 
				
			|||
@ -1,35 +0,0 @@ | 
				
			|||
<?php | 
				
			|||
 | 
				
			|||
namespace App\Http\Controllers\Api; | 
				
			|||
use App\Http\Controllers\Controller; | 
				
			|||
use App\Models\UserChannel; | 
				
			|||
use Illuminate\Http\Request; | 
				
			|||
 | 
				
			|||
class UserChannelController extends Controller | 
				
			|||
{ | 
				
			|||
	//我的频道列表
 | 
				
			|||
	public function index() | 
				
			|||
	{ | 
				
			|||
		$channels = UserChannel::where('user_id', $this->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(); | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
@ -1,34 +0,0 @@ | 
				
			|||
<?php | 
				
			|||
 | 
				
			|||
namespace App\Models; | 
				
			|||
 | 
				
			|||
use Dcat\Admin\Traits\ModelTree; | 
				
			|||
use Illuminate\Database\Eloquent\Factories\HasFactory; | 
				
			|||
use Illuminate\Database\Eloquent\SoftDeletes; | 
				
			|||
 | 
				
			|||
/** | 
				
			|||
 * 频道列表 | 
				
			|||
 * Class Channel | 
				
			|||
 * @package App\Models | 
				
			|||
 */ | 
				
			|||
class Channel extends BaseModel | 
				
			|||
{ | 
				
			|||
    use HasFactory, SoftDeletes; | 
				
			|||
	use ModelTree; | 
				
			|||
 | 
				
			|||
	// 模型树需要的三个属性
 | 
				
			|||
	protected $parentColumn = 'pid'; | 
				
			|||
	protected $orderColumn = 'sort'; | 
				
			|||
	protected $titleColumn = 'name'; | 
				
			|||
 | 
				
			|||
    public function __construct(array $attributes = []) | 
				
			|||
	{ | 
				
			|||
		parent::__construct($attributes); | 
				
			|||
		$this->timestamps = false; | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	public function parent() | 
				
			|||
	{ | 
				
			|||
		return $this->hasOne(self::class, 'id', 'pid'); | 
				
			|||
	} | 
				
			|||
} | 
				
			|||
@ -0,0 +1,13 @@ | 
				
			|||
<?php | 
				
			|||
 | 
				
			|||
namespace App\Models; | 
				
			|||
 | 
				
			|||
use Illuminate\Database\Eloquent\Model; | 
				
			|||
 | 
				
			|||
class UserCategory extends Model | 
				
			|||
{ | 
				
			|||
	protected $primaryKey = 'user_id'; | 
				
			|||
	public $timestamps = false; | 
				
			|||
	protected $guarded = []; | 
				
			|||
	protected $casts = ['categories' => 'json']; | 
				
			|||
} | 
				
			|||
@ -1,26 +0,0 @@ | 
				
			|||
<?php | 
				
			|||
 | 
				
			|||
namespace App\Models; | 
				
			|||
use Illuminate\Database\Eloquent\Factories\HasFactory; | 
				
			|||
 | 
				
			|||
/** | 
				
			|||
 * 我的频道 | 
				
			|||
 * Class UserChannel | 
				
			|||
 * @package App\Models | 
				
			|||
 */ | 
				
			|||
class UserChannel extends BaseModel | 
				
			|||
{ | 
				
			|||
    use HasFactory; | 
				
			|||
 | 
				
			|||
	public function __construct(array $attributes = []) | 
				
			|||
	{ | 
				
			|||
		parent::__construct($attributes); | 
				
			|||
		$this->timestamps = false; | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	// 获取时需要转换,写入时框架可自动将数组转换后保存
 | 
				
			|||
    public function getChannelsAttribute($value) | 
				
			|||
    { | 
				
			|||
        return json_decode($value, true); | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
@ -1,16 +0,0 @@ | 
				
			|||
<?php  | 
				
			|||
return [ | 
				
			|||
    'labels' => [ | 
				
			|||
        'Channel' => '频道', | 
				
			|||
        'channel' => '频道', | 
				
			|||
    ], | 
				
			|||
    'fields' => [ | 
				
			|||
        'agent_id' => '代理商ID', | 
				
			|||
        'icon' => '频道图标', | 
				
			|||
        'name' => '频道名称', | 
				
			|||
        'pid' => '父级ID', | 
				
			|||
        'sort' => '排序', | 
				
			|||
    ], | 
				
			|||
    'options' => [ | 
				
			|||
    ], | 
				
			|||
]; | 
				
			|||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue