coupon-admin/app/controller/manager/Category.php

173 lines
4.7 KiB
PHP

<?php
namespace app\controller\manager;
use app\repository\BusinessRepository;
use app\repository\CmsRepository;
use app\model\Log;
use app\model\Category as CategoryModel;
use Exception;
use think\facade\Db;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use think\exception\ValidateException;
use think\response\Json;
use think\response\View;
/**
* 分类管理
*
* Class Category
* @package app\controller\manager
*/
class Category extends Base
{
/**
* 编辑
*
* @return Json|View
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
* @throws Exception
*/
public function edit()
{
$id = input('id/d', 0);
if (!$info = CategoryModel::findById($id)) {
return $this->json(4001, '记录不存在');
}
if ($this->request->isPost()) {
$item = input('post.');
$validate = $this->validateByApi($item, [
'pid|父级分类' => 'require|number',
'name|标题' => 'require|max:100',
]);
if ($validate !== true) {
return $validate;
}
Db::startTrans();
try {
$info->save($item);
Db::commit();
return $this->json();
} catch (ValidateException $e) {
Db::rollback();
return $this->json(4001, $e->getError());
}
}
$disabled = CategoryModel::getAllChildrenIds($id);
$disabled[] = $id;
$this->data['jsonList'] = $this->categoryJson([$info['pid']], $disabled);
$this->data['item'] = $info;
return $this->view();
}
/**
* 添加
*
* @return Json|View
* @throws Exception
*/
public function add()
{
if ($this->request->isPost()) {
$item = input('post.');
$validate = $this->validateByApi($item, [
'pid|父级分类' => 'require|number',
'name|标题' => 'require|max:100',
]);
if ($validate !== true) {
return $validate;
}
try {
CategoryModel::create($item);
return $this->json();
} catch (ValidateException $e) {
return $this->json(4001, $e->getError());
}
}
$this->data['jsonList'] = $this->categoryJson();
return $this->view();
}
/**
* 删除
* @return Json
*/
public function del()
{
if (!$this->request->isPost()) {
return $this->json(4000, '非法请求');
}
$ids = $this->request->param('ids/a', []);
if(!empty(CategoryModel::findOne([["pid","in",$ids]]))){
return $this->json(4001,"该栏目还有下级,不能删除");
}
$business = BusinessRepository::getInstance()->findOneByWhere([["type","in",$ids]]);
if(!empty($business)){
return $this->json(4001,"该栏目还有商家存在,不能删除");
}
CategoryModel::destroy($ids);
return $this->json();
}
/**
* 列表
*
* @return Json|View
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
public function index()
{
if ($this->request->isPost()) {
$menus = CategoryModel::getList();
$res = [
'code' => 0,
'msg' => 'success',
'count' => $menus->count(),
'data' => $menus->toArray(),
];
return json($res);
}
return $this->view();
}
/**
* @param array $selected
* @param array $disabled
* @return false|string
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
private function categoryJson(array $selected = [], array $disabled = [])
{
$categoryList[] = ['name' => '顶级分类', 'id' => 0, 'disabled' => false, 'selected' => in_array(0, $selected)];
$list = CategoryModel::getListByPid();
$list = $list->toArray();
foreach ($list as $k => $m) {
$list[$k]['selected'] = in_array($m['id'], $selected);
$list[$k]['disabled'] = in_array($m['id'], $disabled);
}
$list = CmsRepository::getInstance()->buildMenuChild(0, $list);
$categoryList = array_merge($categoryList, CmsRepository::getInstance()->handleSelectedList($list));
return json_encode($categoryList, JSON_UNESCAPED_UNICODE);
}
}