Files
YwxAppThink/app/member/controller/Article.php
T

232 lines
6.5 KiB
PHP

<?php
// +----------------------------------------------------------------------
// | YwxApp [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: ywxapp<admin@ywxapp.cn>
// +----------------------------------------------------------------------
declare (strict_types = 1);
namespace app\member\controller;
use think\facade\Db;
use think\Request;
use ywxapp\controller\MemberBase;
use addon\articles\model\Article as ArticleModel;
use addon\articles\model\ArticleCategory as CategoryModel;
/**
* Article 类
*
* @author ywxapp <admin@ywxapp.cn>
*/
class Article extends MemberBase
{
/**
* Summary of needLogin
* @var array
*/
protected $noNeedLogin = [];
/**
* Summary of needRight
* @var array
*/
protected $noNeedVerify = ['*'];
/**
* 控制器初始化 initialize
* @return void
*/
protected function initialize()
{
$this->model = new ArticleModel();
}
/**
* 显示资源列表
*
* @return \think\Response
*/
public function index($page = 1, $limit = 15)
{
$param = $this->request->param();
$user = $this->user();
//$this->result->success($user,$user->uid);
$query = ArticleModel::with(['category'])
->where('uid', $user->uid)
->order('create_at', 'desc');
if (! empty($param['title'])) {
$query->whereLike('title', "%{$param['title']}%");
}
if (! empty($param['cid'])) {
$query->where('cid', $param['cid']);
}
if (isset($param['status'])) {
$query->where('status', $param['status']);
}
$list = $query->page((int) $page, (int) $limit)->select()->toArray();
$count = $query->count();
return json([
'code' => 0,
'msg' => 'success',
'count' => $count,
'data' => $list,
]);
}
/**
* 显示创建资源表单页.
*
* @return \think\Response
*/
public function create()
{
try {
$user = app()->auth->info;
$data = ArticleModel::create([
'title' => '未命名草稿',
'uid' => $user->uid,
'content' => '',
'status' => 0, // 草稿状态
'create_at' => time(),
'update_at' => time(),
]);
$cates = CategoryModel::select();
$this->result->success([
'category' => $cates,
'info' => $data,
], '草稿创建成功');
} catch (\Exception $e) {
// 记录日志,但不要因为入库失败而中断上传流程(或者根据需求决定)
\think\facade\Log::error($e->getMessage());
}
}
/**
* 保存新建的资源
*
* @param \think\Request $request
* @return \think\Response
*/
public function save(Request $request)
{
if ($this->request->isAjax() && $this->request->isPut()) {
$param = $this->request->param();
Db::startTrans();
try {
$info = $this->model->findOrEmpty($param['id']);
if ($info->isEmpty()) {
$this->result->error("数据获取错误!");
}
$info->save($param);
Db::commit();
$this->result->success($info, '数据修改成功!');
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
$this->result->error('数据修改失败: ' . $e->getMessage());
}
}
}
/**
* 显示指定的资源
*
* @param int $id
* @return \think\Response
*/
public function read($id)
{
//
}
/**
* 显示编辑资源表单页.
*
* @param int $id
* @return \think\Response
*/
public function edit($id = null)
{
if ($this->request->isAjax()) {
$info = $this->model->findOrEmpty($id);
if ($info->isEmpty()) {
$this->result->error("数据获取错误!");
}
$cates = CategoryModel::select();
$this->result->success([
'category' => $cates,
'info' => $info,
], '数据创建成功');
# code...
}
}
/**
* 保存更新的资源
*
* @param int $id
* @return \think\Response
*/
public function update()
{
if ($this->request->isAjax() && $this->request->isPut()) {
$param = $this->request->param();
Db::startTrans();
try {
$info = $this->model->findOrEmpty($param['id']);
if ($info->isEmpty()) {
$this->result->error("数据获取错误!");
}
$info->save($param);
Db::commit();
$this->result->success($info, '数据修改成功!');
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
$this->result->error('数据修改失败: ' . $e->getMessage());
}
}
}
/**
* 删除数据
*
* @param \think\Request $request
* @return \think\Response
*/
public function delete()
{
if ($this->request->isAjax() && $this->request->isDelete()) {
$ids = $this->request->param('ids', '');
$force = $this->request->param('force', false);
if (empty($ids)) {
$this->result->error('请选择要删除的数据');
}
try {
Db::transaction(function () use ($ids, $force) {
if ($force) {
ArticleModel::onlyTrashed()->whereIn('id', $ids)->select()->each(function ($item) {
$item->force()->delete();
});
} else {
ArticleModel::destroy($ids);
}
});
$this->result->success();
} catch (\think\exception\HttpResponseException $e) {
throw $e;
} catch (\Throwable $th) {
$this->result->error('删除失败: ' . $th->getMessage());
}
}
}
}