tp/app/admin/controller/Cms/OnePage/OnePageController.php

276 lines
8.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
declare(strict_types=1);
namespace app\admin\controller\Cms\OnePage;
use app\admin\BaseController;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\Session;
use think\response\Json;
use think\db\exception\DbException;
use app\model\Cms\OnePage;
class OnePageController extends BaseController
{
/**
* 获取所有单页信息
* @return Json
*/
public function getAllOnePages()
{
try {
$onePages = OnePage::where('delete_time', null)
->where('tid', $this->getTenantId())
->order('sort', 'asc')
->field('id, title, content, path, sort, status, create_time, update_time')
->select()
->toArray();
return json([
'code' => 200,
'msg' => '获取成功',
'data' => $onePages
]);
} catch (DbException $e) {
return json([
'code' => 500,
'msg' => '获取失败:' . $e->getMessage(),
'data' => []
]);
}
}
/**
* 创建单页
* @return Json
*/
public function createOnePage()
{
try {
// 获取请求参数
$data = $this->request->param();
// 验证参数
$this->validate($data, [
'title|标题' => 'require|max:255',
'content|内容' => 'require',
'path|路由' => 'require|max:200',
'sort|排序号' => 'integer',
'status|状态' => 'integer|in:0,1',
]);
// 验证路由格式(必须以 / 开头)
if (!preg_match('/^\/[a-zA-Z0-9\/_-]*$/', $data['path'])) {
return json([
'code' => 400,
'msg' => '路由必须以 / 开头,只能包含字母、数字、下划线、横线和斜线'
]);
}
// 检查路由是否已存在
$exists = OnePage::where('path', $data['path'])
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
if ($exists) {
return json([
'code' => 400,
'msg' => '路由已存在,请使用其他路由'
]);
}
// 准备单页数据
$onePageData = [
'title' => $data['title'],
'content' => $data['content'],
'path' => $data['path'],
'sort' => $data['sort'] ?? 0,
'status' => $data['status'] ?? 1,
'tid' => $this->getTenantId(),
'create_time' => date('Y-m-d H:i:s'),
];
// 创建单页
$result = OnePage::insertGetId($onePageData);
if ($result === false) {
return json([
'code' => 500,
'msg' => '创建失败'
]);
}
// 记录操作日志
$this->logSuccess('单页管理', '创建单页', ['id' => $result]);
return json([
'code' => 200,
'msg' => '创建成功',
'data' => ['id' => $result]
]);
} catch (ValidateException $e) {
// 记录失败日志
$this->logFail('单页管理', '创建单页', $e->getMessage());
return json([
'code' => 400,
'msg' => $e->getError()
]);
} catch (DbException $e) {
// 记录失败日志
$this->logFail('单页管理', '创建单页', $e->getMessage());
return json([
'code' => 500,
'msg' => '创建失败:' . $e->getMessage()
]);
}
}
/**
* 编辑单页
* @param int $id 单页ID
* @return Json
*/
public function editOnePage(int $id)
{
try {
// 获取请求参数
$data = $this->request->param();
// 验证参数
$this->validate($data, [
'title|标题' => 'require|max:255',
'content|内容' => 'require',
'path|路由' => 'require|max:200',
'sort|排序号' => 'integer',
'status|状态' => 'integer|in:0,1',
]);
// 验证路由格式(必须以 / 开头)
if (!preg_match('/^\/[a-zA-Z0-9\/_-]*$/', $data['path'])) {
return json([
'code' => 400,
'msg' => '路由必须以 / 开头,只能包含字母、数字、下划线、横线和斜线'
]);
}
// 检查单页是否存在验证tid
$onePage = OnePage::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
if (!$onePage) {
return json([
'code' => 404,
'msg' => '单页不存在'
]);
}
// 检查路由是否被其他单页使用
$exists = OnePage::where('path', $data['path'])
->where('id', '<>', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
if ($exists) {
return json([
'code' => 400,
'msg' => '路由已被其他单页使用,请使用其他路由'
]);
}
// 准备更新数据
$updateData = [
'title' => $data['title'],
'content' => $data['content'],
'path' => $data['path'],
'sort' => $data['sort'] ?? 0,
'status' => $data['status'] ?? 1,
'update_time' => date('Y-m-d H:i:s'),
];
// 执行更新
OnePage::where('id', $id)->update($updateData);
// 获取更新后的单页信息
$updatedOnePage = OnePage::where('id', $id)->find();
// 记录操作日志
$this->logSuccess('单页管理', '更新单页', ['id' => $id]);
return json([
'code' => 200,
'msg' => '更新成功',
'data' => $updatedOnePage ? $updatedOnePage->toArray() : []
]);
} catch (ValidateException $e) {
// 记录失败日志
$this->logFail('单页管理', '更新单页', $e->getMessage());
return json([
'code' => 400,
'msg' => $e->getError()
]);
} catch (DbException $e) {
// 记录失败日志
$this->logFail('单页管理', '更新单页', $e->getMessage());
return json([
'code' => 500,
'msg' => '更新失败:' . $e->getMessage()
]);
}
}
/**
* 删除单页
* @param int $id 单页ID
* @return Json
*/
public function deleteOnePage(int $id)
{
try {
// 检查单页是否存在验证tid
$onePage = OnePage::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
if (!$onePage) {
return json([
'code' => 404,
'msg' => '单页不存在'
]);
}
// 逻辑删除单页
$result = OnePage::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->update([
'delete_time' => date('Y-m-d H:i:s'),
'update_time' => date('Y-m-d H:i:s')
]);
if ($result === false) {
return json([
'code' => 500,
'msg' => '删除失败'
]);
}
// 记录操作日志
$this->logSuccess('单页管理', '删除单页', ['id' => $id]);
return json([
'code' => 200,
'msg' => '删除成功'
]);
} catch (DbException $e) {
// 记录失败日志
$this->logFail('单页管理', '删除单页', $e->getMessage());
return json([
'code' => 500,
'msg' => '删除失败:' . $e->getMessage()
]);
}
}
}