| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- <?php
- /**
- * Created by PhpStorm.
- * Name: 芸众商城系统
- * Author: 广州市芸众信息科技有限公司
- * Profile: 广州市芸众信息科技有限公司位于国际商贸中心的广州,专注于移动电子商务生态系统打造,拥有芸众社交电商系统、区块链数字资产管理系统、供应链管理系统、电子合同等产品/服务。官网 :www.yunzmall.com www.yunzshop.com
- * Date: 2021/9/14
- * Time: 15:02
- */
- namespace app\backend\modules\goods\widget\manage;
- use app\backend\modules\goods\models\Goods;
- use app\backend\modules\goods\widget\BaseGoodsWidget;
- use Illuminate\Http\Request;
- use app\common\helpers\Url;
- class GoodsWidgetManager
- {
- public $request;
- public function __construct($attributes = [])
- {
- }
- public function handle($request = null)
- {
- $this->setRequest($request);
- $goods_widget = $this->getSetting();
- $route = $this->currentRoute($this->getRequest()->input('route'));
- $goodsModel = $this->getGoodsModel($this->getRequest()->input('id'));
- $widgetClassCollect = collect([]);
- foreach ($goods_widget as $configItem) {
- if (class_exists($configItem['class'])) {
- /**
- * @var BaseGoodsWidget $widgetClass
- */
- $widgetClass = new $configItem['class']($goodsModel);
- if ($widgetClass->code == 'goods' && request()->goods_type == 1) {
- $widgetClass->code = 'code';
- }
- //通过验证返回
- if ($widgetClass->insideAuthorization($route)) {
- $widgetClass->setTitle($configItem['title']);
- $widgetClass->setRequest($this->parameter());
- if (!$this->externalFilter($widgetClass)) {
- $widgetClassCollect->push($widgetClass);
- }
- }
- }
- }
- $widgetColumns = $widgetClassCollect->groupBy(function (BaseGoodsWidget $widget) {
- return $widget->getGroup();
- })->toArray();
- $result = [];
- foreach ($this->getGroup() as $key => $name) {
- if ($widgetColumns[$key]) {
- $result[] = [
- 'group' => $key,
- 'title' => $name,
- 'column' => $widgetColumns[$key],
- ];
- }
- }
- return $result;
- }
- /**
- * 外部禁用某个挂件
- * @param $widgetClass
- * @return bool true 禁用 false 启用
- */
- public function externalFilter($widgetClass)
- {
- return false;
- }
- public function getSetting()
- {
- return \app\common\modules\widget\Widget::current()->getItem('vue-goods');
- }
- public function parameter()
- {
- return request();
- }
- /**
- * 通过路由解析区分商品编辑是那个插件
- * @param $requestRoute
- * @return string 当前页面所属者
- */
- public function currentRoute($requestRoute)
- {
- $routesParams = explode('.', $requestRoute);
- $routeFirst = array_first($routesParams);
- if ($routeFirst === 'plugin') {
- $currentRoute = $routesParams[1];
- } else {
- $currentRoute = 'shop';
- }
- return $currentRoute;
- }
- public function getGoodsModel($goods_id)
- {
- return Goods::withoutGlobalScopes()->find($goods_id);
- }
- protected function getPath($path)
- {
- return Url::shopUrl($path);
- }
- protected function getGroup()
- {
- $group = [
- 'base' => '商品信息', 'tool' => '商品工具', 'marketing' => '营销设置',
- 'profit' => '分润设置', 'industry' => '行业设置'
- ];
- return $group;
- }
- public function setRequest($request)
- {
- if (is_null($request)) {
- $this->request = request();
- }
- $this->request = $request;
- }
- /**
- * 获取request对象
- * @return Request
- */
- protected function getRequest($key = null)
- {
- if (!isset($this->request)) {
- $this->request = request();
- }
- if ($key) {
- return $this->request->input($key, null);
- }
- return $this->request;
- }
- }
|