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;
							 | 
						|||
| 
								 | 
							
								  }
							 | 
						|||
| 
								 | 
							
								}
							 |