| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- <?php
- namespace SixShop\News\Controller\Admin;
- use think\Request;
- use think\facade\Validate;
- use SixShop\News\Service\NewsServiceAdapter;
- class NewsController
- {
- protected $service;
- public function __construct()
- {
- $this->service = new NewsServiceAdapter();
- }
- /**
- * 文章列表
- */
- public function index(Request $request)
- {
- $where = [];
- if ($request->get('category_id')) {
- $where['category_id'] = $request->get('category_id');
- }
- if ($request->get('status') !== null) {
- $where['status'] = $request->get('status');
- }
- $limit = (int)$request->get('limit', 20);
- $data = $this->service->getList($where, ['is_top' => 'desc','id' => 'desc'], $limit);
- // 从数据库获取分类数据
- $categoryMap = [];
- try {
- // 使用ThinkPHP的Db类查询数据库
- $categories = \think\facade\Db::table('cy_news_category')
- ->where('status', 1)
- ->whereNull('delete_time')
- ->field('id,name')
- ->select()
- ->toArray();
- // 构建分类映射
- foreach ($categories as $category) {
- $categoryMap[$category['id']] = $category['name'];
- }
- } catch (\Exception $e) {
- // 如果查询失败,使用默认映射
- error_log('获取分类数据失败: ' . $e->getMessage());
- $categoryMap = [
- 1 => '默认分类',
- 2 => '新闻分类',
- 3 => '公告分类'
- ];
- }
- // 字段映射:数据库cover_image -> 前端cover,添加分类名称
- if (is_array($data) && isset($data['data'])) {
- foreach ($data['data'] as &$item) {
- if (isset($item['cover_image'])) {
- $item['cover'] = $item['cover_image'];
- }
- if (isset($item['category_id']) && isset($categoryMap[$item['category_id']])) {
- $item['category_name'] = $categoryMap[$item['category_id']];
- }
- }
- } elseif (is_array($data) && isset($data['list'])) {
- foreach ($data['list'] as &$item) {
- if (isset($item['cover_image'])) {
- $item['cover'] = $item['cover_image'];
- }
- if (isset($item['category_id']) && isset($categoryMap[$item['category_id']])) {
- $item['category_name'] = $categoryMap[$item['category_id']];
- }
- }
- } elseif (is_array($data)) {
- foreach ($data as &$item) {
- if (isset($item['cover_image'])) {
- $item['cover'] = $item['cover_image'];
- }
- if (isset($item['category_id']) && isset($categoryMap[$item['category_id']])) {
- $item['category_name'] = $categoryMap[$item['category_id']];
- }
- }
- }
- return json(['code' => 200, 'msg' => 'success', 'data' => $data]);
- }
- /**
- * 文章详情
- */
- public function read($id)
- {
- $info = $this->service->getById($id);
- if (!$info) {
- return json(['code' => 404, 'msg' => '文章不存在']);
- }
- // 字段映射:数据库cover_image -> 前端cover
- if (isset($info['cover_image'])) {
- $info['cover'] = $info['cover_image'];
- }
- return json(['code' => 200, 'msg' => 'success', 'data' => $info]);
- }
- /**
- * 新增文章
- */
- public function create(Request $request)
- {
- $data = $request->only(['category_id','title','cover','summary','content','author','is_top','status']);
- $validate = Validate::rule([
- 'category_id' => 'require|number',
- 'title' => 'require|max:128',
- 'cover' => 'max:255',
- 'summary' => 'max:255',
- 'content' => 'require',
- 'author' => 'max:64',
- 'is_top' => 'in:0,1',
- 'status' => 'in:0,1,2',
- ]);
- if (!$validate->check($data)) {
- return json(['code' => 422, 'msg' => $validate->getError()]);
- }
- // 字段映射:前端cover -> 数据库cover_image
- if (isset($data['cover'])) {
- $data['cover_image'] = $data['cover'];
- unset($data['cover']);
- }
- // 不传递时间字段,让 Go 服务自动设置
- // Go 服务会在创建时自动设置 create_time 和 update_time
- $res = $this->service->create($data);
- return json(['code' => 200, 'msg' => '创建成功', 'data' => $res]);
- }
- /**
- * 编辑文章
- */
- public function update($id, Request $request)
- {
- $data = $request->only(['category_id','title','cover','summary','content','author','is_top','status']);
- $validate = Validate::rule([
- 'category_id' => 'number',
- 'title' => 'max:128',
- 'cover' => 'max:255',
- 'summary' => 'max:255',
- 'author' => 'max:64',
- 'is_top' => 'in:0,1',
- 'status' => 'in:0,1,2',
- ]);
- if (!$validate->check($data)) {
- return json(['code' => 422, 'msg' => $validate->getError()]);
- }
- // 字段映射:前端cover -> 数据库cover_image
- if (isset($data['cover'])) {
- $data['cover_image'] = $data['cover'];
- unset($data['cover']);
- }
- // 不传递时间字段,让 Go 服务自动设置
- // Go 服务会在更新时自动设置 update_time
- $res = $this->service->update($id, $data);
- if (!$res) {
- return json(['code' => 404, 'msg' => '文章不存在']);
- }
- return json(['code' => 200, 'msg' => '更新成功', 'data' => $res]);
- }
- /**
- * 删除文章
- */
- public function delete($id)
- {
- $res = $this->service->delete($id);
- if (!$res) {
- return json(['code' => 404, 'msg' => '文章不存在']);
- }
- return json(['code' => 200, 'msg' => '删除成功']);
- }
- }
|