luck-draw/app/controller/manager/Archives.php

306 lines
9.4 KiB
PHP

<?php
namespace app\controller\manager;
use app\model\Disease;
use app\model\DoctorRelation;
use app\model\Archives as ArchivesModel;
use app\model\ArchivesCategory as ArticleCategoryModel;
use app\model\ArchivesModelField;
use app\model\Spu;
use app\model\Config;
use app\repository\AccountRepository;
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\response\Json;
use think\response\View;
/**
* 档案管理|内容管理
*
* Class Archives
* @package app\controller\manager
*/
class Archives extends Base
{
protected $noNeedLogin = ['getDiseaseList', 'getDoctorList', 'getDiaryList', 'getCourseList'];
/**
* 删除
*
* @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);
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['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['diaryId'] = $diaryId ?? 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('sort', 'desc')
->order('id', 'desc');
});
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')
->select()
->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);
}
}