瀏覽代碼

智能设备分类管理

gorden 1 年之前
父節點
當前提交
f8948ca28c

+ 157 - 0
app/admin/controller/smart_devices/CategoryController.php

@@ -0,0 +1,157 @@
+<?php
+
+namespace app\admin\controller\smart_devices;
+
+use app\admin\validate\smart_devices\CategoryValidate;
+use app\common\Tree;
+use app\controller\Curd;
+use app\model\SmartDevicesCategory;
+use support\Db;
+use support\exception\BusinessException;
+use support\Request;
+use support\Response;
+
+class CategoryController extends Curd
+{
+    public function __construct()
+    {
+        $this->model = new SmartDevicesCategory();
+        $this->validate = true;
+        $this->validateClass = new CategoryValidate();
+    }
+
+    /**
+     * @Desc 列表
+     * @Author Gorden
+     * @Date 2024/3/8 10:07
+     *
+     * @param Request $request
+     * @return Response
+     * @throws BusinessException
+     */
+    public function select(Request $request): Response
+    {
+        [$where, $format, $limit, $field, $order] = $this->selectInput($request);
+        $format = 'tree';
+        $order = $request->get('order', 'desc');
+        $field = $field ?? 'category_add_time';
+        $where['category_is_del'] = 0;
+        $query = $this->doSelect($where, $field, $order);
+        return $this->doFormat($query, $format, $limit);
+    }
+
+    /**
+     * @Desc 执行写入
+     * @Author Gorden
+     * @Date 2024/3/8 9:09
+     *
+     * @param array $data
+     * @return mixed|null
+     */
+    protected function doInsert(array $data)
+    {
+        Db::beginTransaction();
+        try {
+            $path = '/0/';
+            if ($data['category_pid'] != 0) {
+                $parent = $this->model->getParent($data['category_pid']);
+                $path = $parent['category_path'];
+            }
+            $primary_key = $this->model->getKeyName();
+            $model_class = get_class($this->model);
+            $model = new $model_class;
+            foreach ($data as $key => $val) {
+                $model->{$key} = $val;
+            }
+            $model->save();
+            $model->category_path = $path . $model->$primary_key . '/';
+            $model->save();
+            Db::commit();
+            return $primary_key ? $model->$primary_key : null;
+        } catch (\Exception $e) {
+            Db::rollBack();
+            throw new BusinessException('数据写入失败');
+        }
+    }
+
+    /**
+     * @Desc 执行更新
+     * @Author Gorden
+     * @Date 2024/3/8 10:00
+     *
+     * @param $id
+     * @param $data
+     * @return void
+     * @throws BusinessException
+     */
+    protected function doUpdate($id, $data)
+    {
+        Db::beginTransaction();
+        try {
+            $model = $this->model->find($id);
+            if ($model->category_pid != $data['category_pid']) {
+                $oldPath = $model->category_path;
+                $parent = $this->model->getParent($data['category_pid']);
+                $model->category_path = $parent['category_path'] . $model->category_id . '/';
+                // 直系下级,改path
+                $subs = $this->model->getDirectSub($id);
+                foreach ($subs as $sub) {
+                    $this->model->updatePath($sub['category_id'], str_replace($oldPath, $model->category_path, $sub['category_path']));
+                }
+            }
+            foreach ($data as $key => $val) {
+                $model->{$key} = $val;
+            }
+            $model->save();
+
+            Db::commit();
+        } catch (\Exception $e) {
+            Db::rollBack();
+            throw new BusinessException('数据更新失败~');
+        }
+    }
+
+    /**
+     * @Desc 删除
+     * @Author Gorden
+     * @Date 2024/3/8 10:11
+     *
+     * @param Request $request
+     * @return Response
+     * @throws BusinessException
+     */
+    public function delete(Request $request): Response
+    {
+        $ids = $this->deleteInput($request);
+        $this->doSoftDelete($ids, ['category_is_del' => 1]);
+
+        return json_success('success');
+    }
+
+    /**
+     * @Desc 树形数据
+     * @Author Gorden
+     * @Date 2024/3/8 10:08
+     *
+     * @param $items
+     * @return Response
+     */
+    protected function formatTree($items): Response
+    {
+        $format_items = [];
+        foreach ($items as $item) {
+            $format_items[] = [
+                'name' => $item->category_name,
+                'value' => (string)$item->category_id,
+                'id' => $item->category_id,
+                'pid' => $item->category_pid,
+                'category_name' => $item->category_name,
+                'category_level' => $item->category_level,
+                'category_add_time' => $item->category_add_time,
+                'category_update_time' => $item->category_update_time
+            ];
+        }
+        $tree = new Tree($format_items);
+        return json_success('success', $tree->getTree());
+    }
+}

+ 22 - 0
app/admin/validate/smart_devices/CategoryValidate.php

@@ -0,0 +1,22 @@
+<?php
+
+namespace app\admin\validate\smart_devices;
+
+use think\Validate;
+
+class CategoryValidate extends Validate
+{
+    protected $rule = [
+        'category_id' => 'require|integer',
+        'category_pid' => 'require|integer',
+        'category_name' => 'require|max:150',
+        'category_level' => 'integer|max:1'
+    ];
+
+    protected $message = [];
+
+    protected $scene = [
+        'add' => ['category_pid', 'category_name', 'category_level'],
+        'update' => ['category_id', 'category_pid', 'category_name', 'category_level']
+    ];
+}

+ 59 - 0
app/model/SmartDevicesCategory.php

@@ -0,0 +1,59 @@
+<?php
+
+namespace app\model;
+
+use support\Model;
+
+class SmartDevicesCategory extends Model
+{
+    protected $table = 'smart_devices_category';
+
+    protected $primaryKey = 'category_id';
+
+    protected $dateFormat = 'U';
+
+    const CREATED_AT = 'category_add_time';
+
+    const UPDATED_AT = 'category_update_time';
+
+    /**
+     * @Desc 获取父级
+     * @Author Gorden
+     * @Date 2024/3/8 9:12
+     *
+     * @param $pid
+     * @return array
+     */
+    public function getParent($pid)
+    {
+        $parent = self::where('category_id', $pid)->first();
+        return $parent ? $parent->toArray() : [];
+    }
+
+    /**
+     * @Desc 获取所有子集
+     * @Author Gorden
+     * @Date 2024/3/8 9:39
+     *
+     * @param $id
+     * @return array
+     */
+    public function getDirectSub($id)
+    {
+        return self::where('category_pid', $id)->get()->toArray();
+    }
+
+    /**
+     * @Desc 更新path
+     * @Author Gorden
+     * @Date 2024/3/8 9:46
+     *
+     * @param $id
+     * @param $path
+     * @return int
+     */
+    public function updatePath($id, $path)
+    {
+        return self::where('category_id', $id)->update(['category_path' => $path]);
+    }
+}

+ 22 - 8
route/admin.php

@@ -10,7 +10,6 @@ Route::group('/admin', function () {
     })->middleware([
         \app\middleware\AdminAuthCheck::class
     ]);
-
     /* 鉴权 */
     Route::group('/auth', function () {
         Route::post('/login', [\app\admin\controller\auth\AuthController::class, 'login']);
@@ -19,7 +18,6 @@ Route::group('/admin', function () {
     })->middleware([
         \app\middleware\AdminAuthCheck::class
     ]);
-
     /* 系统管理中心 */
     Route::group('/sys', function () {
         /* 角色管理 */
@@ -33,20 +31,17 @@ Route::group('/admin', function () {
         })->middleware([
             \app\middleware\AdminAuthCheck::class
         ]);
-
         /* 部门管理 */
         Route::group('/dept', function () {
             Route::get('/list', [\app\admin\controller\sys_manage\DeptController::class, 'deptList']);
             Route::get('/info/{id:\d+}', [\app\admin\controller\sys_manage\DeptController::class, 'deptInfo']);
             Route::post('/add', [\app\admin\controller\sys_manage\DeptController::class, 'addDept']);
-            Route::post('/addPremises', [\app\admin\controller\sys_manage\DeptController::class, 'addPremises']);
             Route::post('/update/{id:\d+}', [\app\admin\controller\sys_manage\DeptController::class, 'updateDept']);
             Route::post('/updateStatus/{id:\d+}', [\app\admin\controller\sys_manage\DeptController::class, 'updateStatus']);
             Route::delete('/delete/{id:\d+}', [\app\admin\controller\sys_manage\DeptController::class, 'delDept']);
         })->middleware([
             \app\middleware\AdminAuthCheck::class
         ]);
-
         /* 用户管理 */
         Route::group('/user', function () {
             Route::get('/list', [\app\admin\controller\sys_manage\UserController::class, 'userList']);
@@ -58,7 +53,6 @@ Route::group('/admin', function () {
         })->middleware([
             \app\middleware\AdminAuthCheck::class
         ]);
-
         /* 分类管理 */
         Route::group('/category', function () {
             Route::get('/list', [\app\admin\controller\sys_manage\CategoryController::class, 'categoryList']);
@@ -70,7 +64,6 @@ Route::group('/admin', function () {
         })->middleware([
             \app\middleware\AdminAuthCheck::class
         ]);
-
         /* 字段管理 */
         Route::group('/field', function () {
             Route::get('/list', [\app\admin\controller\sys_manage\FieldController::class, 'fieldList']);
@@ -328,7 +321,7 @@ Route::group('/admin', function () {
     });
     /* 营销管理 */
     Route::group('/marketing', function () {
-        /* 营业场所管理 */
+        /* 营业场所管理(独立表) */
         Route::group('/premises', function () {
             Route::get('/list', [\app\admin\controller\marketing\PremisesController::class, 'select']);
             Route::post('/add', [\app\admin\controller\marketing\PremisesController::class, 'insert']);
@@ -347,4 +340,25 @@ Route::group('/admin', function () {
             \app\middleware\AdminAuthCheck::class
         ]);
     });
+    /* 智能设备管理 */
+    Route::group('/smartDevices', function () {
+        /* 智能设备分类管理 */
+        Route::group('/category', function () {
+            Route::get('/list', [\app\admin\controller\smart_devices\CategoryController::class, 'select']);
+            Route::post('/add', [\app\admin\controller\smart_devices\CategoryController::class, 'insert']);
+            Route::post('/update', [\app\admin\controller\smart_devices\CategoryController::class, 'update']);
+            Route::delete('/delete', [\app\admin\controller\smart_devices\CategoryController::class, 'delete']);
+        })->middleware([
+            \app\middleware\AdminAuthCheck::class
+        ]);
+        /* 智能设备管理 */
+//        Route::group('/deptPremises', function () {
+//            Route::get('/list', [\app\admin\controller\marketing\DeptPremisesController::class, 'select']);
+//            Route::post('/add', [\app\admin\controller\marketing\DeptPremisesController::class, 'insert']);
+//            Route::post('/update', [\app\admin\controller\marketing\DeptPremisesController::class, 'update']);
+//            Route::delete('/delete', [\app\admin\controller\marketing\DeptPremisesController::class, 'delete']);
+//        })->middleware([
+//            \app\middleware\AdminAuthCheck::class
+//        ]);
+    });
 });