caipan_shop_admin/app/controller/manager/Archives.php

353 lines
11 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace app\controller\manager;
use app\model\Log;
use app\model\Archives as ArchivesModel;
use app\model\ArchivesCategory as ArticleCategoryModel;
use app\model\ArchivesModelField;
use app\model\Config;
use app\repository\CmsRepository;
use Exception;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use think\exception\ValidateException;
use think\facade\Db;
use think\response\Json;
use think\response\View;
/**
* 档案管理|内容管理
*
* Class Archives
* @package app\controller\manager
*/
class Archives extends Base
{
protected $noNeedLogin = [];
/**
* 删除
*
* @return Json
*/
public function del(): Json
{
if ($this->request->isPost()) {
$ids = input('post.ids/a', []);
if (empty($ids)) {
$ids[] = input('post.id/d');
}
ArchivesModel::deleteByIds($ids);
// Log::write(get_class().'Del', 'del', '涉及到的ID为'.implode(',', $ids));
return $this->json();
}
return $this->json(4001, '非法请求!');
}
/**
* 编辑
*
* @return Json|View
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
* @throws Exception
*/
public function edit()
{
$id = input('id/d', 0);
if (!$info = ArchivesModel::findById($id)) {
return $this->json(4001, '记录不存在');
}
if ($this->request->isPost()) {
$item = input('post.');
if (isset($item['video_src'])) {
$item['video'] = $item['video_src'];
unset($item['video_src']);
}
$validate = $this->validateByApi($item, [
'category_id|栏目' => 'require|gt:0',
'title|标题' => 'require|max:255',
'summary|摘要' => 'max:255',
'content|内容' => 'require',
], ['category_id.gt' => '请选择栏目']);
if ($validate !== true) {
return $validate;
}
try {
$now = date('Y-m-d H:i:s');
$item['updated_at'] = $now;
$item['updated_by'] = $this->auth['user_id'];
$info->save($item);
return $this->json();
} catch (ValidateException $e) {
return $this->json(4001, $e->getError());
}
}
$showFieldList = ArchivesModelField::showFieldList();//所有栏目 可展示字段列表
$currentShowFields = $showFieldList[$info['category_id']] ?? [];//当前选中栏目 可展示字段列表
$this->data['item'] = $info;
$this->data['jsonList'] = $this->xmSelectJson([$info['category_id']]);
$this->data['showList'] = json_encode($showFieldList, JSON_UNESCAPED_UNICODE);
$this->data['currentList'] = $currentShowFields;
return $this->view();
}
/**
* 单个字段编辑
*
* @return Json
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
* @throws Exception
*/
public function modify(): Json
{
if ($this->request->isPost()) {
$item = input('post.');
$validate = $this->validateByApi($item, [
'field' => 'require',
'value' => 'require',
]);
if ($validate !== true) {
return $validate;
}
if (!$info = ArchivesModel::findById($item['id'])) {
return $this->json(4001, '记录不存在');
}
$update = [$item['field'] => $item['value']];
try {
$info->save($update);
return $this->json();
} catch (ValidateException $e) {
return $this->json(4001, $e->getError());
}
}
return $this->json(4000, '非法请求');
}
/**
* 添加
*
* @return Json|View
* @throws Exception
*/
public function add()
{
$categoryId = input('category_id/d', 0);
if ($this->request->isPost()) {
$item = input('post.');
if (isset($item['video_src'])) {
$item['video'] = $item['video_src'];
unset($item['video_src']);
}
$validate = $this->validateByApi($item, [
'category_id|栏目' => 'require|gt:0',
'title|标题' => 'require|max:255',
'summary|摘要' => 'max:255',
'content|内容' => 'require',
], ['category_id.gt' => '请选择栏目']);
if ($validate !== true) {
return $validate;
}
try {
$now = date('Y-m-d H:i:s');
$item['created_at'] = $now;
$item['published_at'] = $now;
$item['created_by'] = $this->auth['user_id'];
ArchivesModel::create($item);
return $this->json();
} catch (ValidateException $e) {
return $this->json(4001, $e->getError());
}
}
$showFieldList = ArchivesModelField::showFieldList();//所有栏目 可展示字段列表
//有指定栏目获取指定栏目 否则获取第一个 可展示字段列表
$currentShowFields = $categoryId > 0 ? ($showFieldList[$categoryId] ?? []) : array_values($showFieldList)[0];
$this->data['categoryId'] = $categoryId ?? 0;
$this->data['jsonList'] = $this->xmSelectJson([$categoryId]);
$this->data['showList'] = json_encode($showFieldList, JSON_UNESCAPED_UNICODE);
$this->data['currentList'] = $currentShowFields;
return $this->view();
}
/**
* 列表
*
* @return View|Json
* @throws Exception
*/
public function index()
{
$categoryId = input('category_id/d', 0);
if ($this->request->isPost()) {
$page = input('page/d', 1);
$limit = input('size/d', 20);
$searchParams = input('searchParams');
$where = [];
if ($categoryId > 0) {
$where[] = ['category_id', '=', $categoryId];
}
if ($searchParams) {
foreach ($searchParams as $key => $param) {
if (!empty($param)) {
if (is_string($param)) {
$where[] = [$key, 'like', '%'.$param.'%'];
} elseif (is_array($param)) {
//数组空元素去除
foreach ($param as $k => $val) {
if (empty($val)) {
unset($param[$k]);
}
}
if (!empty($param)) {
$where[] = [$key, 'in', $param];
}
}
}
}
}
$items = ArchivesModel::findList($where, [], $page, $limit, function ($q) {
return $q->with(['member', 'category'])
->order('top', 'desc')
->order('recommend', 'desc')
->order('hot', 'desc')
->order('sort', 'desc')
->order('id', 'desc');
});
$diseaseCategoryIds = ArticleCategoryModel::diseaseCategoryIds();
$items['list'] = $items['list']->each(function ($item) use ($diseaseCategoryIds) {
$item->mpPath = in_array($item['category_id'], $diseaseCategoryIds) ? Config::MINI_PATH_PROBLEM : Config::MINI_PATH_ARCHIVES;
});
return $this->json(0, '操作成功', $items);
}
$selected = $categoryId > 0 ? [$categoryId] : [];
$this->data['categoryId'] = $categoryId;
$this->data['categoryJson'] = $this->categoryJson($selected);
$this->data['archivesPath'] = '/'.Config::MINI_PATH_ARCHIVES;
return $this->view();
}
/**
* 构造分类 json数据[zTree用]
*
* @param array $selected
* @return false|string
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
private function categoryJson(array $selected = [])
{
$category = ArticleCategoryModel::order('sort', 'desc')
->field('id,pid,title')
->select()
->toArray();
foreach ($category as $k => $m) {
$category[$k]['checked'] = in_array($m['id'], $selected);
$category[$k]['spread'] = true;
}
$category = CmsRepository::getInstance()->buildMenuChild(0, $category);
return json_encode($category, JSON_UNESCAPED_UNICODE);
}
/**
* 内容分类 构造xmSelect json数据[xmSelect用]
*
* @param array $selected
* @param array $disabled
* @return false|string
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
private function xmSelectJson(array $selected = [], array $disabled = [])
{
$category = ArticleCategoryModel::order('sort', 'desc')
->field('id,pid,title,model_id')
->select();
$modelList = \app\model\ArchivesModel::column('title', 'id');
$category->each(function ($item) use ($modelList) {
$item->title = sprintf("%s-[所属模型:%s]", $item->title, $modelList[$item->model_id]);
});
$category = $category->toArray();
foreach ($category as $k => $m) {
$category[$k]['selected'] = in_array($m['id'], $selected);
$category[$k]['disabled'] = in_array($m['id'], $disabled);
}
$category = CmsRepository::getInstance()->buildMenuChild(0, $category);
$category = CmsRepository::getInstance()->handleSelectedList($category);
return json_encode($category, JSON_UNESCAPED_UNICODE);
}
/**
* 批量审核
*
* @return View|Json
* @throws Exception
*/
public function check()
{
$id = input('id/s', '');
if ($this->request->isPost()) {
$ids = input('ids/s');
$check = input('is_check/d');
if (!in_array($check, [ArchivesModel::COMMON_ON, ArchivesModel::COMMON_OFF])) {
return $this->json(4001, '请选择是否展示');
}
$ids = explode(',', $ids);
Db::startTrans();
try {
(new ArchivesModel())->whereIn('id', $ids)->save(['is_check' => $check]);
Db::commit();
return $this->json(0, '操作成功');
} catch (Exception $e) {
Db::rollback();
Log::error('批量审核操作失败'.$e->getMessage());
return $this->json(5001, '批量审核操作失败');
}
}
$this->data['id'] = $id;
return $this->view();
}
}