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