149 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | ||
| // +----------------------------------------------------------------------
 | ||
| // | likeshop开源商城系统
 | ||
| // +----------------------------------------------------------------------
 | ||
| // | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
 | ||
| // | gitee下载:https://gitee.com/likeshop_gitee
 | ||
| // | github下载:https://github.com/likeshop-github
 | ||
| // | 访问官网:https://www.likeshop.cn
 | ||
| // | 访问社区:https://home.likeshop.cn
 | ||
| // | 访问手册:http://doc.likeshop.cn
 | ||
| // | 微信公众号:likeshop技术社区
 | ||
| // | likeshop系列产品在gitee、github等公开渠道开源版本可免费商用,未经许可不能去除前后端官方版权标识
 | ||
| // |  likeshop系列产品收费版本务必购买商业授权,购买去版权授权后,方可去除前后端官方版权标识
 | ||
| // | 禁止对系统程序代码以任何目的,任何形式的再发布
 | ||
| // | likeshop团队版权所有并拥有最终解释权
 | ||
| // +----------------------------------------------------------------------
 | ||
| // | author: likeshop.cn.team
 | ||
| // +----------------------------------------------------------------------
 | ||
| 
 | ||
| namespace app\admin\validate\goods;
 | ||
| 
 | ||
| use think\Validate;
 | ||
| use app\common\model\goods\GoodsCategory as GoodsCategoryModel;
 | ||
| use app\common\model\goods\Goods as GoodsModel;
 | ||
| use app\admin\logic\goods\CategoryLogic;
 | ||
| 
 | ||
| class CategoryValidate extends Validate
 | ||
| {
 | ||
|   protected $rule = [
 | ||
|     'id'    => 'require|checkCategory',
 | ||
|     'name'  => 'require|max: 30|checkName',
 | ||
|     'pid'   => 'require|integer|addPid|editPid',
 | ||
|   ];
 | ||
| 
 | ||
|   protected $message = [
 | ||
|     'id.require'  => 'id不能为空',
 | ||
|     'name.require'  => '分类名称不能为空',
 | ||
|     'name.max'  => '分类名称不能超过30个字符',
 | ||
|     'pid.require'   => '请选择上级分类',
 | ||
|     'pid.integer'   => '上级id必须为整型',
 | ||
|   ];
 | ||
|   
 | ||
|   /**
 | ||
|    * 添加场景
 | ||
|    */
 | ||
|   public function sceneAdd()
 | ||
|   {
 | ||
|     return $this->remove('id', ['require', 'checkCategory'])
 | ||
|       ->remove('pid','editPid');
 | ||
|   }
 | ||
| 
 | ||
|   /**
 | ||
|    * 删除场景
 | ||
|    */
 | ||
|   public function sceneDel()
 | ||
|   {
 | ||
|     return $this->only(['id']);
 | ||
|   }
 | ||
| 
 | ||
|   /**
 | ||
|    * 编辑场景
 | ||
|    */
 | ||
|   public function sceneEdit()
 | ||
|   {
 | ||
|     return $this->remove('id', 'checkCategory')
 | ||
|       ->remove('pid', 'addPid');
 | ||
|   }
 | ||
| 
 | ||
|   /*
 | ||
|   * 校验分类名称(同一个上级分类下不允许出现相同分类名称)
 | ||
|   */
 | ||
|   protected function checkName($value,$rule,$data){
 | ||
|     $where[] = ['del','=',0];
 | ||
|     // 如果有id代表是编辑校验分类名称
 | ||
|     if(isset($data['id'])){
 | ||
|         $where[] = ['id','<>',$data['id']];
 | ||
|     }
 | ||
|     $where[] = ['name','=',$data['name']];
 | ||
|     $where[] = ['pid','=',$data['pid']];
 | ||
| 
 | ||
|     $name = GoodsCategoryModel::where($where)->value('name');
 | ||
|     if($name){
 | ||
|         return '分类名称已存在';
 | ||
|     }
 | ||
|     return true;
 | ||
|   }
 | ||
| 
 | ||
|   /*
 | ||
|   * 添加时,校验上级
 | ||
|   */
 | ||
|   protected function addPid($value, $rule, $data){
 | ||
|     // 顶级分类直接通过
 | ||
|     if($value == 0) return true;
 | ||
| 
 | ||
|     $goods_category = GoodsCategoryModel::where([
 | ||
|       'id' => $value,
 | ||
|       'del' => 0
 | ||
|     ])->find();
 | ||
| 
 | ||
|     if($goods_category)  return true;
 | ||
| 
 | ||
|     return '上级分类不存在,请重新选择';
 | ||
|   }
 | ||
| 
 | ||
|   /*
 | ||
|   * 验证分类
 | ||
|   */
 | ||
|   protected function checkCategory($value, $rule, $data){
 | ||
|     $children = GoodsCategoryModel::where([
 | ||
|       'del' => 0,
 | ||
|       'pid' => $value
 | ||
|     ])->find();
 | ||
|     if($children) {
 | ||
|       return '该分类下还有子分类不允许删除';
 | ||
|     }
 | ||
|     // 已经有商品绑定了该分类,不能删除
 | ||
|     $goods = GoodsModel::where([
 | ||
|       'del' => 0,
 | ||
|       'third_cate_id' => $value
 | ||
|     ])->find();
 | ||
|     if($goods) {
 | ||
|       return '已有商品绑定此分类不允许删除';
 | ||
|     }
 | ||
| 
 | ||
|     return true;
 | ||
|   }
 | ||
| 
 | ||
|   /*
 | ||
|   * 编辑时,验证上级分类
 | ||
|   */
 | ||
|   protected function editPid($value, $rule, $data){
 | ||
|     // 目标上级分类为顶部分类时,直接通过
 | ||
|     if($value == 0 ) return true;
 | ||
|     // 当前分类
 | ||
|     $category = GoodsCategoryModel::where(['id'=>$data['id'],'del'=>0])->find();
 | ||
|     // 目标上级分类
 | ||
|     $partner = GoodsCategoryModel::where(['id'=>$value,'del'=>0])->find();
 | ||
|     // 当前分类下的子分类
 | ||
|     $level = CategoryLogic::getCategoryLevel($category);
 | ||
| 
 | ||
|     if($category['id'] == $partner['id']) return '上级分类不能是自己';
 | ||
|     // 限制分类不超过3级
 | ||
|     if($level == 3 && $partner) return '该分类下有完整的子分类,不可修改上级分类';
 | ||
|     if($partner['level'] == 2 && $level != 1) return '该分类下有子分类,请先调整该分类下的子分类';
 | ||
|     if($partner['level'] == 3) return '父级分类不能是第三级';
 | ||
| 
 | ||
|     return true;
 | ||
|   }
 | ||
| } |