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