495 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			495 lines
		
	
	
		
			14 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\logic;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								use app\common\basics\Logic;
							 | 
						|||
| 
								 | 
							
								use app\common\enum\FileEnum;
							 | 
						|||
| 
								 | 
							
								use app\common\model\File;
							 | 
						|||
| 
								 | 
							
								use app\common\model\FileCate;
							 | 
						|||
| 
								 | 
							
								use Exception;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								class FileLogic extends Logic
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * NOTE: 获取文件列表
							 | 
						|||
| 
								 | 
							
								     * @author: 张无忌
							 | 
						|||
| 
								 | 
							
								     * @param $get
							 | 
						|||
| 
								 | 
							
								     * @return array|\think\Paginator
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public static function getFile($get)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        try {
							 | 
						|||
| 
								 | 
							
								            $where = [
							 | 
						|||
| 
								 | 
							
								                ['del', '=', 0],
							 | 
						|||
| 
								 | 
							
								                ['type', '=', $get['type'] ?? FileEnum::IMAGE_TYPE],
							 | 
						|||
| 
								 | 
							
								                ['shop_id', '=', 0],
							 | 
						|||
| 
								 | 
							
								                ['user_id', '=', 0]
							 | 
						|||
| 
								 | 
							
								            ];
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (!empty($get['cid']) and $get['cid'] > 0) {
							 | 
						|||
| 
								 | 
							
								                $lists = FileCate::where(['del'=>0 ])->select();
							 | 
						|||
| 
								 | 
							
								                $lists = !empty($lists) ? $lists->toArray() : [];
							 | 
						|||
| 
								 | 
							
								                $childs = self::getChildCid($lists, $get['cid'], true);
							 | 
						|||
| 
								 | 
							
								                array_push($childs, $get['cid']);
							 | 
						|||
| 
								 | 
							
								                $where[] = ['cid', 'in', $childs];
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            $model = new File();
							 | 
						|||
| 
								 | 
							
								            return $model->field(true)
							 | 
						|||
| 
								 | 
							
								                ->where($where)
							 | 
						|||
| 
								 | 
							
								                ->order('id', 'desc')
							 | 
						|||
| 
								 | 
							
								                ->paginate([
							 | 
						|||
| 
								 | 
							
								                    'page'      => $get['page'] ?? 1,
							 | 
						|||
| 
								 | 
							
								                    'list_rows' => $get['limit'] ?? 20,
							 | 
						|||
| 
								 | 
							
								                    'var_page' => 'page'
							 | 
						|||
| 
								 | 
							
								                ])->toArray();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        } catch (Exception $e) {
							 | 
						|||
| 
								 | 
							
								            return [];
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * NOTE: 获取后代分类
							 | 
						|||
| 
								 | 
							
								     * @author: 张无忌
							 | 
						|||
| 
								 | 
							
								     * @param $cid
							 | 
						|||
| 
								 | 
							
								     * @param array $ids
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public static function getChildCid($lists, $cid, $clear)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        static $temp = [];
							 | 
						|||
| 
								 | 
							
								        if($clear) {
							 | 
						|||
| 
								 | 
							
								            $temp = [];
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        foreach($lists as $item) {
							 | 
						|||
| 
								 | 
							
								            if($item['pid'] == $cid) {
							 | 
						|||
| 
								 | 
							
								                $temp[] = $item['id'];
							 | 
						|||
| 
								 | 
							
								                self::getChildCid($lists, $item['id'], false);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        return $temp;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * NOTE: 移动文件
							 | 
						|||
| 
								 | 
							
								     * @param $post
							 | 
						|||
| 
								 | 
							
								     * @return bool
							 | 
						|||
| 
								 | 
							
								     * @author: 张无忌
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public static function move($post)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        try {
							 | 
						|||
| 
								 | 
							
								            $model = new File();
							 | 
						|||
| 
								 | 
							
								//            $file = $model->field(true)->findOrEmpty($post['file_ids'][0])->toArray();
							 | 
						|||
| 
								 | 
							
								//            if ($file['cid'] == $post['cid'] and $post['cid'] != 0) {
							 | 
						|||
| 
								 | 
							
								//                static::$error = '文件已在当前目录,无需移动';
							 | 
						|||
| 
								 | 
							
								//                return false;
							 | 
						|||
| 
								 | 
							
								//            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            $model->whereIn('id', $post['file_ids'])
							 | 
						|||
| 
								 | 
							
								                ->update(['cid' => $post['cid']]);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return true;
							 | 
						|||
| 
								 | 
							
								        } catch (Exception $e) {
							 | 
						|||
| 
								 | 
							
								            static::$error = $e->getMessage();
							 | 
						|||
| 
								 | 
							
								            return false;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * NOTE: 删除文件
							 | 
						|||
| 
								 | 
							
								     * @param $post
							 | 
						|||
| 
								 | 
							
								     * @return bool
							 | 
						|||
| 
								 | 
							
								     * @author: 张无忌
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public static function del($post)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        try {
							 | 
						|||
| 
								 | 
							
								            $model = new File();
							 | 
						|||
| 
								 | 
							
								            $model->whereIn('id', $post['file_ids'])
							 | 
						|||
| 
								 | 
							
								                ->update(['del' => 1]);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return true;
							 | 
						|||
| 
								 | 
							
								        } catch (Exception $e) {
							 | 
						|||
| 
								 | 
							
								            static::$error = $e->getMessage();
							 | 
						|||
| 
								 | 
							
								            return false;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /** ======================== 华丽的分割线, 下面是文件分类相关 ========================**/
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * NOTE: 获取分类列表
							 | 
						|||
| 
								 | 
							
								     * @param $type (类型: 10=图片, 20=视频, 30=文件)
							 | 
						|||
| 
								 | 
							
								     * @return array
							 | 
						|||
| 
								 | 
							
								     * @author: 张无忌
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public static function getCate($get)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        try {
							 | 
						|||
| 
								 | 
							
								            $lists = FileCate::where([
							 | 
						|||
| 
								 | 
							
								                ['del', '=', 0],
							 | 
						|||
| 
								 | 
							
								                ['type', '=', $get['type']],
							 | 
						|||
| 
								 | 
							
								                ['shop_id', '=', $get['shop_id']],
							 | 
						|||
| 
								 | 
							
								            ])->order('id', 'asc')->order('sort', 'desc')->select();
							 | 
						|||
| 
								 | 
							
								            $tree = self::cateListToTree($lists, 0);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            $all = [
							 | 
						|||
| 
								 | 
							
								                'id'       => 0,
							 | 
						|||
| 
								 | 
							
								                'field'    => 'all',
							 | 
						|||
| 
								 | 
							
								                'title'    => '全部',
							 | 
						|||
| 
								 | 
							
								                'children' => [],
							 | 
						|||
| 
								 | 
							
								            ];
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            array_unshift($tree, $all);
							 | 
						|||
| 
								 | 
							
								            return $tree;
							 | 
						|||
| 
								 | 
							
								        } catch (Exception $e) {
							 | 
						|||
| 
								 | 
							
								            return [];
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * NOTE: 分类列表转树形结构
							 | 
						|||
| 
								 | 
							
								     * @author: 张无忌
							 | 
						|||
| 
								 | 
							
								     * @param $lists
							 | 
						|||
| 
								 | 
							
								     * @param int $pid
							 | 
						|||
| 
								 | 
							
								     * @return array
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public static function cateListToTree($lists, $pid = 0)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $tree = [];
							 | 
						|||
| 
								 | 
							
								        foreach ($lists as $k => $v) {
							 | 
						|||
| 
								 | 
							
								            if ($v['pid'] == $pid) {
							 | 
						|||
| 
								 | 
							
								                $temp['id'] = $v['id'];
							 | 
						|||
| 
								 | 
							
								                $temp['field'] = 'id';
							 | 
						|||
| 
								 | 
							
								                $temp['title'] = $v['name'];
							 | 
						|||
| 
								 | 
							
								                $temp['children'] = self::cateListToTree($lists, $v['id']);
							 | 
						|||
| 
								 | 
							
								                $temp['spread'] = true;
							 | 
						|||
| 
								 | 
							
								                $tree[] = $temp;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        return $tree;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * NOTE: 分类详细
							 | 
						|||
| 
								 | 
							
								     * @author: 张无忌
							 | 
						|||
| 
								 | 
							
								     * @param $id
							 | 
						|||
| 
								 | 
							
								     * @return array
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public static function getCateById($id)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $model = new FileCate();
							 | 
						|||
| 
								 | 
							
								        return $model->field(true)
							 | 
						|||
| 
								 | 
							
								            ->findOrEmpty($id)->toArray();
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * NOTE: 新增分类
							 | 
						|||
| 
								 | 
							
								     * @author: 张无忌
							 | 
						|||
| 
								 | 
							
								     * @param $post
							 | 
						|||
| 
								 | 
							
								     * @return bool
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public static function addCate($post)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        try {
							 | 
						|||
| 
								 | 
							
								            if($post['pid'] == 0) {
							 | 
						|||
| 
								 | 
							
								                $level = 1;
							 | 
						|||
| 
								 | 
							
								            }else{
							 | 
						|||
| 
								 | 
							
								                $parent = FileCate::find($post['pid']);
							 | 
						|||
| 
								 | 
							
								                $level = $parent['level'] + 1;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            FileCate::create([
							 | 
						|||
| 
								 | 
							
								                'name' => $post['name'],
							 | 
						|||
| 
								 | 
							
								                'pid'  => $post['pid'],
							 | 
						|||
| 
								 | 
							
								                'sort' => $post['sort'],
							 | 
						|||
| 
								 | 
							
								                'level' => $level,
							 | 
						|||
| 
								 | 
							
								                'shop_id' => 0
							 | 
						|||
| 
								 | 
							
								            ]);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return true;
							 | 
						|||
| 
								 | 
							
								        } catch (Exception $e) {
							 | 
						|||
| 
								 | 
							
								            static::$error = $e->getMessage();
							 | 
						|||
| 
								 | 
							
								            return false;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * NOTE: 编辑分类
							 | 
						|||
| 
								 | 
							
								     * @author: 张无忌
							 | 
						|||
| 
								 | 
							
								     * @param $post
							 | 
						|||
| 
								 | 
							
								     * @return bool
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public static function editCate($post)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        try {
							 | 
						|||
| 
								 | 
							
								            self::checkEdit($post);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            FileCate::update([
							 | 
						|||
| 
								 | 
							
								                'name' => $post['name'],
							 | 
						|||
| 
								 | 
							
								                'pid'  => $post['cid'],
							 | 
						|||
| 
								 | 
							
								                'sort' => $post['sort'],
							 | 
						|||
| 
								 | 
							
								                'update_time' => time()
							 | 
						|||
| 
								 | 
							
								            ], ['id'=>$post['id']]);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            self::updateLevel($post['id']);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return true;
							 | 
						|||
| 
								 | 
							
								        } catch (Exception $e) {
							 | 
						|||
| 
								 | 
							
								            static::$error = $e->getMessage();
							 | 
						|||
| 
								 | 
							
								            return false;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * NOTE: 删除分类
							 | 
						|||
| 
								 | 
							
								     * @author: 张无忌
							 | 
						|||
| 
								 | 
							
								     * @param $id
							 | 
						|||
| 
								 | 
							
								     * @return bool
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public static function delCate($id)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        try {
							 | 
						|||
| 
								 | 
							
								            self::checkDel($id);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            FileCate::update([
							 | 
						|||
| 
								 | 
							
								                'del' => 1,
							 | 
						|||
| 
								 | 
							
								                'update_time' => time()
							 | 
						|||
| 
								 | 
							
								            ], ['id'=>$id]);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return true;
							 | 
						|||
| 
								 | 
							
								        } catch (Exception $e) {
							 | 
						|||
| 
								 | 
							
								            static::$error = $e->getMessage();
							 | 
						|||
| 
								 | 
							
								            return false;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * NOTE: 下拉框树状结构
							 | 
						|||
| 
								 | 
							
								     * @param $type
							 | 
						|||
| 
								 | 
							
								     * @return array
							 | 
						|||
| 
								 | 
							
								     * @author: 张无忌
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public static function categoryToSelect($get)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        try {
							 | 
						|||
| 
								 | 
							
								            $model = new FileCate();
							 | 
						|||
| 
								 | 
							
								            $lists = $model->field(true)
							 | 
						|||
| 
								 | 
							
								                ->where('del', '=', 0)
							 | 
						|||
| 
								 | 
							
								                ->where('type', '=', $get['type'])
							 | 
						|||
| 
								 | 
							
								                ->where('shop_id', '=', $get['shop_id'])
							 | 
						|||
| 
								 | 
							
								                ->order('id', 'asc')
							 | 
						|||
| 
								 | 
							
								                ->select();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            $tree = [];
							 | 
						|||
| 
								 | 
							
								            foreach ($lists as $val) {
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if ($val['pid'] != 0) {
							 | 
						|||
| 
								 | 
							
								                    continue;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                $tree[$val['id']] = "|----" . $val['name'];
							 | 
						|||
| 
								 | 
							
								                foreach ($lists as $val2) {
							 | 
						|||
| 
								 | 
							
								                    if ($val2['pid'] == $val['id']) {
							 | 
						|||
| 
								 | 
							
								                        $tree[$val2['id']] = "|--------" . $val2['name'];
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return $tree;
							 | 
						|||
| 
								 | 
							
								        } catch (Exception $e) {
							 | 
						|||
| 
								 | 
							
								            return [];
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public static function categoryToSelectThree($get)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        try {
							 | 
						|||
| 
								 | 
							
								            $model = new FileCate();
							 | 
						|||
| 
								 | 
							
								            $lists = $model->field(true)
							 | 
						|||
| 
								 | 
							
								                ->where('del', '=', 0)
							 | 
						|||
| 
								 | 
							
								                ->where('type', '=', $get['type'])
							 | 
						|||
| 
								 | 
							
								                ->where('shop_id', '=', $get['shop_id'])
							 | 
						|||
| 
								 | 
							
								                ->order('id', 'asc')
							 | 
						|||
| 
								 | 
							
								                ->select();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            $tree = [];
							 | 
						|||
| 
								 | 
							
								            foreach ($lists as $val) {
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if ($val['pid'] != 0) {
							 | 
						|||
| 
								 | 
							
								                    continue;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                $tree[$val['id']] = "|----" . $val['name'];
							 | 
						|||
| 
								 | 
							
								                foreach ($lists as $val2) {
							 | 
						|||
| 
								 | 
							
								                    if ($val2['pid'] == $val['id']) {
							 | 
						|||
| 
								 | 
							
								                        $tree[$val2['id']] = "|--------" . $val2['name'];
							 | 
						|||
| 
								 | 
							
								                        foreach($lists as $val3) {
							 | 
						|||
| 
								 | 
							
								                            if($val3['pid'] == $val2['id']) {
							 | 
						|||
| 
								 | 
							
								                                $tree[$val3['id']] = "|------------" . $val3['name'];
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return $tree;
							 | 
						|||
| 
								 | 
							
								        } catch (Exception $e) {
							 | 
						|||
| 
								 | 
							
								            return [];
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 编辑验证
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public static function checkEdit($post)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        if(empty(trim($post['name']))) {
							 | 
						|||
| 
								 | 
							
								            throw new \think\Exception('分类名称不能为空');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        if($post['id'] == $post['cid']) {
							 | 
						|||
| 
								 | 
							
								            throw new \think\Exception('上级不能是自己');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        // 获取后代分类
							 | 
						|||
| 
								 | 
							
								        $lists = FileCate::where(['del'=>0 ])->select();
							 | 
						|||
| 
								 | 
							
								        $lists = !empty($lists) ? $lists->toArray() : [];
							 | 
						|||
| 
								 | 
							
								        $childs = self::getChildCid($lists, $post['id'], true);
							 | 
						|||
| 
								 | 
							
								        if(in_array($post['cid'], $childs)) {
							 | 
						|||
| 
								 | 
							
								            throw new \think\Exception('上级不能自己的后代分类');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //层次结构不能超过三层
							 | 
						|||
| 
								 | 
							
								        $level = self::calcLevel($post['id']);
							 | 
						|||
| 
								 | 
							
								        $parent = FileCate::find($post['cid']);
							 | 
						|||
| 
								 | 
							
								        if($level + $parent['level'] > 3) {
							 | 
						|||
| 
								 | 
							
								            throw new \think\Exception('分类不允许超过三级');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 计算当前分类下共有多少层分类
							 | 
						|||
| 
								 | 
							
								     * @param $lists
							 | 
						|||
| 
								 | 
							
								     * @param $pid
							 | 
						|||
| 
								 | 
							
								     * @return int
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public static function calcLevel($id)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $level = 1;
							 | 
						|||
| 
								 | 
							
								        $two_ids = FileCate::where(['pid' => $id, 'del' => 0])->column('id');
							 | 
						|||
| 
								 | 
							
								        if ($two_ids) {
							 | 
						|||
| 
								 | 
							
								            $level = 2;
							 | 
						|||
| 
								 | 
							
								            $three_ids = FileCate::where([
							 | 
						|||
| 
								 | 
							
								                ['del', '=', 0],
							 | 
						|||
| 
								 | 
							
								                ['pid', 'in', $two_ids]
							 | 
						|||
| 
								 | 
							
								            ])->column('id');
							 | 
						|||
| 
								 | 
							
								            if ($three_ids) $level = 3;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        return $level;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 更新自己及后代分类的level
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public static function updateLevel($id)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $me = FileCate::find($id);
							 | 
						|||
| 
								 | 
							
								        if($me['pid'] == 0) { // 上级为顶级分类
							 | 
						|||
| 
								 | 
							
								            FileCate::update([
							 | 
						|||
| 
								 | 
							
								                'id' => $id,
							 | 
						|||
| 
								 | 
							
								                'level' => 1,
							 | 
						|||
| 
								 | 
							
								                'update_time' => time()
							 | 
						|||
| 
								 | 
							
								            ]);
							 | 
						|||
| 
								 | 
							
								            $two_ids = FileCate::where([
							 | 
						|||
| 
								 | 
							
								                'pid' => $id,
							 | 
						|||
| 
								 | 
							
								                'del' => 0
							 | 
						|||
| 
								 | 
							
								            ])->column('id');
							 | 
						|||
| 
								 | 
							
								            if($two_ids) {
							 | 
						|||
| 
								 | 
							
								                FileCate::where(['id', 'in', $two_ids])->update([
							 | 
						|||
| 
								 | 
							
								                    'level' => 2,
							 | 
						|||
| 
								 | 
							
								                    'update_time' => time()
							 | 
						|||
| 
								 | 
							
								                ]);
							 | 
						|||
| 
								 | 
							
								                $three_ids = FileCate::where([
							 | 
						|||
| 
								 | 
							
								                    ['pid', 'in', $two_ids],
							 | 
						|||
| 
								 | 
							
								                    ['del', '=', 0]
							 | 
						|||
| 
								 | 
							
								                ])->column('id');
							 | 
						|||
| 
								 | 
							
								                if($three_ids) {
							 | 
						|||
| 
								 | 
							
								                    FileCate::where(['id', 'in', $three_ids])->update([
							 | 
						|||
| 
								 | 
							
								                        'level' => 3,
							 | 
						|||
| 
								 | 
							
								                        'update_time' => time()
							 | 
						|||
| 
								 | 
							
								                    ]);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }else{
							 | 
						|||
| 
								 | 
							
								            $parent = FileCate::find($me['pid']);
							 | 
						|||
| 
								 | 
							
								            if($parent['level'] == 1) {
							 | 
						|||
| 
								 | 
							
								                FileCate::update([
							 | 
						|||
| 
								 | 
							
								                    'id' => $id,
							 | 
						|||
| 
								 | 
							
								                    'level' => 2,
							 | 
						|||
| 
								 | 
							
								                    'update_time' => time()
							 | 
						|||
| 
								 | 
							
								                ]);
							 | 
						|||
| 
								 | 
							
								                $three_ids = FileCate::where([
							 | 
						|||
| 
								 | 
							
								                    'pid' => $id,
							 | 
						|||
| 
								 | 
							
								                    'del' => 0
							 | 
						|||
| 
								 | 
							
								                ])->column('id');
							 | 
						|||
| 
								 | 
							
								                if($three_ids) {
							 | 
						|||
| 
								 | 
							
								                    FileCate::where(['id', 'in', $three_ids])->update([
							 | 
						|||
| 
								 | 
							
								                        'level' => 3,
							 | 
						|||
| 
								 | 
							
								                        'update_time' => time()
							 | 
						|||
| 
								 | 
							
								                    ]);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }else if($parent['level'] == 2){
							 | 
						|||
| 
								 | 
							
								                FileCate::update([
							 | 
						|||
| 
								 | 
							
								                    'id' => $id,
							 | 
						|||
| 
								 | 
							
								                    'level' => 3,
							 | 
						|||
| 
								 | 
							
								                    'update_time' => time()
							 | 
						|||
| 
								 | 
							
								                ]);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 删除验证
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public static function checkDel($id)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $file = File::where([
							 | 
						|||
| 
								 | 
							
								            'cid' => $id,
							 | 
						|||
| 
								 | 
							
								            'del' => 0
							 | 
						|||
| 
								 | 
							
								        ])->findOrEmpty();
							 | 
						|||
| 
								 | 
							
								        if(!$file->isEmpty()) {
							 | 
						|||
| 
								 | 
							
								            throw new \think\Exception('有文件正在使用当前分类,不允许删除');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        $son = FileCate::where([
							 | 
						|||
| 
								 | 
							
								            'del' => 0,
							 | 
						|||
| 
								 | 
							
								            'pid' => $id
							 | 
						|||
| 
								 | 
							
								        ])->findOrEmpty();
							 | 
						|||
| 
								 | 
							
								        if(!$son->isEmpty()){
							 | 
						|||
| 
								 | 
							
								            throw new \think\Exception('分类下还有子分类,不允许删除');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |