浏览代码

feat:修改分类树显示

igb 5 月之前
父节点
当前提交
4ff6c746ba

+ 48 - 3
app/Distributor/Controllers/AuthController.php

@@ -2,18 +2,63 @@
 
 namespace App\Distributor\Controllers;
 
+use App\Models\DistAdminDistributor;
+
 use Dcat\Admin\Http\Controllers\AuthController as BaseAuthController;
 use Dcat\Admin\Admin;
 use Dcat\Admin\Form;
 use Dcat\Admin\Http\Repositories\Administrator;
 use Dcat\Admin\Layout\Content;
 use Illuminate\Http\Request;
-
-
+use Illuminate\Support\Facades\Validator;
+use Illuminate\Support\Facades\Session;
 class AuthController extends BaseAuthController
 {
     protected $view = 'distributor.pages.login';
 
+    /**
+     * Login interface.重写登录接口
+     * @param Request $request
+     * @return
+     */
+    public function postLogin(Request $request)
+    {
+
+        $credentials = $request->only([$this->username(), 'password']);
+        $remember = (bool) $request->input('remember', false);
+
+        /** @var \Illuminate\Validation\Validator $validator */
+        $validator = Validator::make($credentials, [
+            $this->username()   => 'required',
+            'password'          => 'required',
+        ]);
+
+        if ($validator->fails()) {
+            return $this->validationErrorsResponse($validator);
+        }
+
+        if ($this->guard()->attempt($credentials, $remember)) {
+            //登录成功后从dist_admin_distributor表中取出当前登录用户的公司信息
+            $distributor = DistAdminDistributor::where('id', Admin::user()->dist_id)->first();
+            if (!$distributor) {
+                $this->guard()->logout();
+
+                return $this->validationErrorsResponse([
+                    $this->username() => $this->getFailedLoginMessage(),
+                ]);
+            }
+            //将当前登录用户的公司信息存入session
+            Session::put('distributor', $distributor);
+            // 登录成功后返回登录响应
+            return $this->sendLoginResponse($request);
+        }
+
+        return $this->validationErrorsResponse([
+            $this->username() => $this->getFailedLoginMessage(),
+        ]);
+    }
+
+
     public function getSetting(Content $content)
     {
         $form = $this->settingForm();
@@ -38,7 +83,7 @@ class AuthController extends BaseAuthController
     protected function settingForm()
     {
 
-        return new Form(new Administrator(), function (Form $form) {
+        return new Form(new Admincistrator(), function (Form $form) {
             $form->action(admin_url('auth/setting'));
             $form->disableCreatingCheck();
             $form->disableEditingCheck();

+ 14 - 2
app/Distributor/Controllers/DistProductCategoryController.php

@@ -3,21 +3,25 @@
 namespace App\Distributor\Controllers;
 
 use App\Distributor\Repositories\DistProductCategory;
-use App\Distributor\Repositories\DistProductCategoryB;
+
 use Dcat\Admin\Form;
 use Dcat\Admin\Grid;
 use Dcat\Admin\Show;
 use Dcat\Admin\Http\Controllers\AdminController;
 use Dcat\Admin\Layout\Content;
 use Dcat\Admin\Admin;
+use Illuminate\Support\Facades\Session;
 
 class DistProductCategoryController extends AdminController
 {
+
+
     /**
      * page index
      */
     public function index(Content $content)
     {
+
         return $content
             ->header(admin_trans('admin.proudct_category'))
             ->description('')
@@ -64,11 +68,19 @@ class DistProductCategoryController extends AdminController
      */
     protected function grid()
     {
+      //  var_dump(Session::get('distributor'));
+
         return Grid::make(new DistProductCategory(), function (Grid $grid) {
+
+            //$grid->model()->where('dist_user_id', 1);
+
             $grid->column('id','ID')->bold();//->sortable();
             $grid->column('name')->display(function ($name) {
-                return html_entity_decode($name); // 或者直接返回 $name,如果你确定不需要转义
+                $level = $this->level; // 获取当前行的 level 字段值
+                $prefix = str_repeat('&nbsp; ', $level * 2). ' <i class="fa fa-angle-right"></i>&nbsp; '; // 生成 level * 3 个加号
+                return $prefix . ' ' . html_entity_decode($name); // 拼接加号和名称
             });
+           // $grid->column('level');
             $grid->column('parent_id');
             //$grid->column('distProductParameter.name',admin_trans_label('parameter_name'));
             $grid->column('order');//->orderable();

+ 8 - 51
app/Distributor/Repositories/DistProductCategory.php

@@ -68,34 +68,21 @@ class DistProductCategory extends EloquentRepository
      */
     public function get(Grid\Model|\Dcat\Admin\Grid\Model $model)
     {
-        $obj = new Model();
 
-        // 将树结构转换为数组
-        $tree = $obj->toTree();
-        $data=[];
+        $obj = $this->model();
+
 
-        foreach ($tree as $key => $value)
-        {
-            $node = $value->toArray();
 
+        $obj->where('dist_user_id',0);
 
-            if(isset($node['children']))
-            {
-                $clone_node= $node;
-                unset($clone_node['children']);
-                $data[] = $clone_node;
+        // 将树结构转换为数组
+        $tree = $obj->get();
 
-                $sub_data=$this->flattenTree($node['children']); // 递归扁平化子节点
+      // var_dump($tree->toArray());
 
-                //var_dump($sub_data);
-                $data = array_merge($data, $sub_data);
-            }
-            else
-            {
-                $data[] = $node;
+        $data=buildTree($tree->toArray());
 
-           }
-        }
+        $data=flattenTree($data);
 
         return $model->makePaginator(
             1, // 传入总记录数
@@ -103,35 +90,5 @@ class DistProductCategory extends EloquentRepository
         );
     }
 
-    /**
-     * @param array $nodes
-     * @param $level 默认层级
-     * @return array
-     */
-    function flattenTree(array $nodes, $level = 1)
-    {
-        $flat = [];
 
-        foreach ($nodes as $node) {
-            // 创建一个副本并转换为数组
-            $node = $node->toArray();
-            $nodeCopy = $node;
-            unset($nodeCopy['children']);
-
-            // 根据层级在 name 字段前添加空格
-            $nodeCopy['name'] = str_repeat('&nbsp; ', $level * 2). ' <i class="fa fa-angle-right"></i>&nbsp; ' . $nodeCopy['name'];
-
-            // 将去除 'children' 属性的节点添加到平坦数组中
-            $flat[] = $nodeCopy;
-
-            // 如果存在子节点,则递归处理子节点
-            if (isset($node['children']) && is_array($node['children']))
-            {
-                $flat = array_merge($flat, $this->flattenTree($node['children'], $level + 1));
-            }
-
-        }
-
-        return $flat;
-    }
 }

+ 41 - 0
app/helpers.php

@@ -33,3 +33,44 @@ if (! function_exists('user_admin_config')) {
         return Arr::get($config, $key, $value);
     }
 }
+
+
+//通过parent_id构建树形结构
+if (!function_exists('buildTree')) {
+    function buildTree(array $elements, $parentId = 0)
+    {
+        $branch = [];
+
+        foreach ($elements as $element) {
+            if ($element['parent_id'] == $parentId) {
+                $children = buildTree($elements, $element['id']);
+                if ($children) {
+                    $element['children'] = $children;
+                }
+                $branch[] = $element;
+            }
+        }
+
+        return $branch;
+    }
+}
+
+// 展平树形结构
+if (!function_exists('flattenTree')) {
+    function flattenTree(array $tree, array &$result = [], $level = 0)
+    {
+        foreach ($tree as $node) {
+            // 复制节点数据,但不包括子节点,并添加 level 字段
+            $flattenedNode = array_diff_key($node, ['children' => null]);
+            $flattenedNode['level'] = $level;
+            $result[] = $flattenedNode;
+
+            // 如果有子节点,递归处理子节点,并将 level 增加 1
+            if (isset($node['children']) && is_array($node['children'])) {
+                flattenTree($node['children'], $result, $level + 1);
+            }
+        }
+
+        return $result;
+    }
+}