277 lines
7.5 KiB
PHP
277 lines
7.5 KiB
PHP
<?php
|
||
|
||
namespace app\controller\manager;
|
||
|
||
use app\model\Log;
|
||
use app\repository\CmsRepository;
|
||
use app\repository\OperationRepository;
|
||
use app\validate\Slide as VSlide;
|
||
use Exception;
|
||
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 Slide extends Base
|
||
{
|
||
/**
|
||
* 编辑
|
||
*
|
||
* @return Json|View
|
||
* @throws DbException
|
||
* @throws ModelNotFoundException
|
||
*/
|
||
public function edit()
|
||
{
|
||
$id = $this->request->param('id/d', 0);
|
||
|
||
if (!$slide = OperationRepository::getInstance()->findSlideById($id)) {
|
||
return $this->json(4001, '数据不存在');
|
||
}
|
||
|
||
if ($this->request->isPost()) {
|
||
$item = input('post.item/a');
|
||
$validate = new VSlide();
|
||
if (!$validate->scene('slide')->check($item)) {
|
||
return $this->json(4002, $validate->getError());
|
||
}
|
||
|
||
unset($item['id']);
|
||
OperationRepository::getInstance()->updateSlide($item, $id);
|
||
return $this->json();
|
||
}
|
||
|
||
$this->data['item'] = $slide;
|
||
$this->data['positionsJson'] = $this->xmSelectPositionsJson([$slide['position']]);
|
||
$this->data['id'] = $id;
|
||
|
||
return $this->view();
|
||
}
|
||
|
||
/**
|
||
* 添加
|
||
*
|
||
* @return View|Json
|
||
*/
|
||
public function add()
|
||
{
|
||
$repo = OperationRepository::getInstance();
|
||
|
||
if ($this->request->isPost()) {
|
||
$item = input('post.item/a');
|
||
$validate = new VSlide();
|
||
if (!$validate->scene('slide')->check($item)) {
|
||
return $this->json(4002, $validate->getError());
|
||
}
|
||
|
||
$item['type'] = $item['type'] ?? 'img';
|
||
$repo->createSlide($item);
|
||
return $this->json();
|
||
}
|
||
|
||
$this->data['positionsJson'] = $this->xmSelectPositionsJson();
|
||
return $this->view();
|
||
}
|
||
|
||
/**
|
||
* 轮播图列表
|
||
*
|
||
* @return Json|View
|
||
* @throws Exception
|
||
*/
|
||
public function index()
|
||
{
|
||
$repo = OperationRepository::getInstance();
|
||
if ($this->request->isPost()) {
|
||
$position = $this->request->param('position/s', '');
|
||
$page = $this->request->param('page/d', 1);
|
||
$size = $this->request->param('size/d', 30);
|
||
|
||
$whereMap = [];
|
||
$orders = ['sort'=>'asc'];
|
||
if (!empty($position)) {
|
||
$whereMap[] = ['position', '=', $position];
|
||
}
|
||
|
||
$list = $repo->slideList($whereMap, [], $page, $size, null, $orders);
|
||
|
||
return $this->json(0, 'success', $list);
|
||
}
|
||
|
||
$this->data['positions'] = $repo->slidePositions();
|
||
return $this->view();
|
||
}
|
||
|
||
/**
|
||
* 排序
|
||
* @return Json
|
||
*/
|
||
public function sort()
|
||
{
|
||
if (!$this->request->isPost()) {
|
||
return $this->json(4000, '非法请求');
|
||
}
|
||
try {
|
||
$id = $this->request->param('id/d', 0);
|
||
$sort = $this->request->param('sort/d', 0);
|
||
OperationRepository::getInstance()->updateSlide(['sort'=>$sort], $id);
|
||
} catch (Exception $e) {
|
||
return $this->json(4001, '排序失败');
|
||
}
|
||
return $this->json();
|
||
}
|
||
|
||
/**
|
||
* 删除
|
||
* @return Json
|
||
*/
|
||
public function del()
|
||
{
|
||
if (!$this->request->isPost()) {
|
||
return $this->json(4000, '非法请求');
|
||
}
|
||
|
||
$ids = $this->request->param('ids/a', []);
|
||
if (empty($ids)) {
|
||
$ids[] = $this->request->param('id/d', 0);
|
||
$ids = array_filter($ids);
|
||
}
|
||
|
||
if (count($ids)) {
|
||
OperationRepository::getInstance()->deleteSlides($ids);
|
||
Log::write(get_class(), 'del', '删除了轮播图,涉及到的ID为:'.implode(',', $ids));
|
||
}
|
||
return $this->json();
|
||
}
|
||
|
||
/**
|
||
* 显示位置下拉选项数据
|
||
*
|
||
* @param array $selected
|
||
* @param array $disabled
|
||
* @return false|string
|
||
*/
|
||
private function xmSelectPositionsJson(array $selected = [], array $disabled = [])
|
||
{
|
||
$positionList = OperationRepository::getInstance()->slidePositions();
|
||
foreach ($positionList as $k => $item) {
|
||
$positionList[$k]['selected'] = in_array($item['key'], $selected);
|
||
$positionList[$k]['disabled'] = in_array($item['key'], $disabled);
|
||
}
|
||
$positionList = CmsRepository::getInstance()->handleSelectedList($positionList);
|
||
return json_encode($positionList, JSON_UNESCAPED_UNICODE);
|
||
}
|
||
|
||
/**
|
||
* 轮播图显示位置管理
|
||
*
|
||
*/
|
||
public function position()
|
||
{
|
||
$repo = OperationRepository::getInstance();
|
||
|
||
if ($this->request->isPost()) {
|
||
$list = $repo->slidePositionList([], [], 1, 0);
|
||
|
||
return $this->json(0, 'success', $list);
|
||
}
|
||
return $this->view();
|
||
}
|
||
|
||
/**
|
||
* 添加显示位置信息
|
||
*
|
||
* @return Json|View
|
||
*/
|
||
public function addPosition()
|
||
{
|
||
$repo = OperationRepository::getInstance();
|
||
|
||
if ($this->request->isPost()) {
|
||
$item = input('post.item/a');
|
||
try {
|
||
$this->validate($item, [
|
||
'title|标题' => 'max:250',
|
||
'key|位置标识' => 'require|max:100|alphaDash'
|
||
]);
|
||
} catch (ValidateException $e) {
|
||
return $this->json(4002, $e->getError());
|
||
}
|
||
|
||
if ($repo->slidePositionExists($item['key'])) {
|
||
return $this->json(4003, '当前位置标识已存在!');
|
||
}
|
||
|
||
$repo->createSlidePosition($item);
|
||
return $this->json();
|
||
}
|
||
|
||
return $this->view();
|
||
}
|
||
|
||
/**
|
||
* 编辑显示位置信息
|
||
*
|
||
* @return Json|View
|
||
* @throws DbException
|
||
* @throws ModelNotFoundException
|
||
* @throws DataNotFoundException
|
||
*/
|
||
public function editPosition()
|
||
{
|
||
$id = $this->request->param('id/d', 0);
|
||
|
||
if (!$position = OperationRepository::getInstance()->findSlidePositionById($id)) {
|
||
return $this->json(4001, '数据不存在');
|
||
}
|
||
|
||
if ($this->request->isPost()) {
|
||
$item = input('post.item/a');
|
||
try {
|
||
$this->validate($item, [
|
||
'title|标题' => 'max:250'
|
||
]);
|
||
} catch (ValidateException $e) {
|
||
return $this->json(4002, $e->getError());
|
||
}
|
||
|
||
unset($item['id']);
|
||
unset($item['key']);
|
||
OperationRepository::getInstance()->updateSlidePosition($item, $id);
|
||
return $this->json();
|
||
}
|
||
|
||
$this->data['item'] = $position;
|
||
$this->data['id'] = $id;
|
||
|
||
return $this->view();
|
||
}
|
||
|
||
/**
|
||
* 删除显示位置信息
|
||
* @return Json
|
||
*/
|
||
public function delPosition()
|
||
{
|
||
if (!$this->request->isPost()) {
|
||
return $this->json(4000, '非法请求');
|
||
}
|
||
|
||
$ids = $this->request->param('ids/a', []);
|
||
if (empty($ids)) {
|
||
$ids[] = $this->request->param('id/d', 0);
|
||
$ids = array_filter($ids);
|
||
}
|
||
|
||
if (count($ids)) {
|
||
OperationRepository::getInstance()->deleteSlidePositions($ids);
|
||
Log::write(get_class(), 'delPosition', '删除了轮播显示位置,涉及到的ID为:'.implode(',', $ids));
|
||
}
|
||
|
||
return $this->json();
|
||
}
|
||
|
||
|
||
} |