| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace app\controller\manager; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-14 18:21:18 +08:00
										 |  |  | use app\repository\BusinessRepository; | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  | 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]]))){ | 
					
						
							| 
									
										
										
										
											2022-01-14 18:21:18 +08:00
										 |  |  |             return $this->json(4001,"该栏目还有下级,不能删除"); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $business = BusinessRepository::getInstance()->findOneByWhere([["type","in",$ids]]); | 
					
						
							|  |  |  |         if(!empty($business)){ | 
					
						
							|  |  |  |             return $this->json(4001,"该栏目还有商家存在,不能删除"); | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-01-14 18:21:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  |         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); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |