173 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			173 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| 
 | |
| namespace app\controller\manager;
 | |
| 
 | |
| use app\repository\BusinessRepository;
 | |
| use app\repository\CmsRepository;
 | |
| use app\model\Log;
 | |
| use app\model\Category as CategoryModel;
 | |
| 
 | |
| use Exception;
 | |
| use think\facade\Db;
 | |
| use think\db\exception\DataNotFoundException;
 | |
| use think\db\exception\DbException;
 | |
| use think\db\exception\ModelNotFoundException;
 | |
| use think\exception\ValidateException;
 | |
| use think\response\Json;
 | |
| use think\response\View;
 | |
| 
 | |
| /**
 | |
|  * 分类管理
 | |
|  *
 | |
|  * Class Category
 | |
|  * @package app\controller\manager
 | |
|  */
 | |
| class Category extends Base
 | |
| {
 | |
|     /**
 | |
|      * 编辑
 | |
|      *
 | |
|      * @return Json|View
 | |
|      * @throws DataNotFoundException
 | |
|      * @throws DbException
 | |
|      * @throws ModelNotFoundException
 | |
|      * @throws Exception
 | |
|      */
 | |
|     public function edit()
 | |
|     {
 | |
|         $id = input('id/d', 0);
 | |
| 
 | |
|         if (!$info = CategoryModel::findById($id)) {
 | |
|             return $this->json(4001, '记录不存在');
 | |
|         }
 | |
| 
 | |
|         if ($this->request->isPost()) {
 | |
|             $item     = input('post.');
 | |
|             $validate = $this->validateByApi($item, [
 | |
|                 'pid|父级分类' => 'require|number',
 | |
|                 'name|标题'  => 'require|max:100|unique:disease,name,'.$id,
 | |
|             ]);
 | |
| 
 | |
|             if ($validate !== true) {
 | |
|                 return $validate;
 | |
|             }
 | |
| 
 | |
|             Db::startTrans();
 | |
|             try {
 | |
|                 $info->save($item);
 | |
|                 Db::commit();
 | |
|                 return $this->json();
 | |
|             } catch (ValidateException $e) {
 | |
|                 Db::rollback();
 | |
|                 return $this->json(4001, $e->getError());
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         $disabled                = CategoryModel::getAllChildrenIds($id);
 | |
|         $disabled[]              = $id;
 | |
|         $this->data['jsonList']  = $this->categoryJson([$info['pid']], $disabled);
 | |
|         $this->data['item']      = $info;
 | |
| 
 | |
|         return $this->view();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 添加
 | |
|      *
 | |
|      * @return Json|View
 | |
|      * @throws Exception
 | |
|      */
 | |
|     public function add()
 | |
|     {
 | |
|         if ($this->request->isPost()) {
 | |
|             $item     = input('post.');
 | |
|             $validate = $this->validateByApi($item, [
 | |
|                 'pid|父级分类'  => 'require|number',
 | |
|                 'name|标题' => 'require|max:100',
 | |
|             ]);
 | |
| 
 | |
|             if ($validate !== true) {
 | |
|                 return $validate;
 | |
|             }
 | |
|             try {
 | |
|                 CategoryModel::create($item);
 | |
|                 return $this->json();
 | |
|             } catch (ValidateException $e) {
 | |
|                 return $this->json(4001, $e->getError());
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         $this->data['jsonList']  = $this->categoryJson();
 | |
| 
 | |
|         return $this->view();
 | |
|     }
 | |
| 
 | |
| 
 | |
|     /**
 | |
|      * 删除
 | |
|      * @return Json
 | |
|      */
 | |
|     public function del()
 | |
|     {
 | |
|         if (!$this->request->isPost()) {
 | |
|             return $this->json(4000, '非法请求');
 | |
|         }
 | |
| 
 | |
|         $ids = $this->request->param('ids/a', []);
 | |
|         if(!empty(CategoryModel::findOne([["pid","in",$ids]]))){
 | |
|             return $this->json(4001,"该栏目还有下级,不能删除");
 | |
|         }
 | |
|         $business = BusinessRepository::getInstance()->findOneByWhere([["type","in",$ids]]);
 | |
|         if(!empty($business)){
 | |
|             return $this->json(4001,"该栏目还有商家存在,不能删除");
 | |
|         }
 | |
| 
 | |
|         CategoryModel::destroy($ids);
 | |
|         return $this->json();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 列表
 | |
|      *
 | |
|      * @return Json|View
 | |
|      * @throws DataNotFoundException
 | |
|      * @throws DbException
 | |
|      * @throws ModelNotFoundException
 | |
|      */
 | |
|     public function index()
 | |
|     {
 | |
|         if ($this->request->isPost()) {
 | |
|             $menus = CategoryModel::getList();
 | |
|             $res   = [
 | |
|                 'code'  => 0,
 | |
|                 'msg'   => 'success',
 | |
|                 'count' => $menus->count(),
 | |
|                 'data'  => $menus->toArray(),
 | |
|             ];
 | |
|             return json($res);
 | |
|         }
 | |
|         return $this->view();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param  array  $selected
 | |
|      * @param  array  $disabled
 | |
|      * @return false|string
 | |
|      * @throws DataNotFoundException
 | |
|      * @throws DbException
 | |
|      * @throws ModelNotFoundException
 | |
|      */
 | |
|     private function categoryJson(array $selected = [], array $disabled = [])
 | |
|     {
 | |
|         $categoryList[] = ['name' => '顶级分类', 'id' => 0, 'disabled' => false, 'selected' => in_array(0, $selected)];
 | |
|         $list           = CategoryModel::getListByPid();
 | |
|         $list           = $list->toArray();
 | |
|         foreach ($list as $k => $m) {
 | |
|             $list[$k]['selected'] = in_array($m['id'], $selected);
 | |
|             $list[$k]['disabled'] = in_array($m['id'], $disabled);
 | |
|         }
 | |
|         $list         = CmsRepository::getInstance()->buildMenuChild(0, $list);
 | |
|         $categoryList = array_merge($categoryList, CmsRepository::getInstance()->handleSelectedList($list));
 | |
|         return json_encode($categoryList, JSON_UNESCAPED_UNICODE);
 | |
|     }
 | |
| } |