From 7d619fb503e71fcc8af87ad418e3c32b4bdc7b70 Mon Sep 17 00:00:00 2001 From: toom1996 Date: Fri, 18 Jul 2025 15:23:34 +0800 Subject: [PATCH] update --- app/Controller/admin/NewsController.php | 10 ++ app/Controller/admin/api/NewsController.php | 52 ++++++ app/Controller/api/v1/ArticlesController.php | 11 -- app/Model/AppNews.php | 7 +- app/Rpc/v1/NewsService.php | 23 ++- storage/view/news/import.blade.php | 173 +++++++++++++++++++ storage/view/news/index.blade.php | 22 ++- 7 files changed, 276 insertions(+), 22 deletions(-) create mode 100644 storage/view/news/import.blade.php diff --git a/app/Controller/admin/NewsController.php b/app/Controller/admin/NewsController.php index 8b2796a..81998ad 100755 --- a/app/Controller/admin/NewsController.php +++ b/app/Controller/admin/NewsController.php @@ -39,4 +39,14 @@ class NewsController extends AbstractController { return $render->render('news/insert'); } + + /** + * 导入新闻 + * @url /admin/news/insert + */ + #[RequestMapping(path: 'import', methods: 'get')] + public function import(RenderInterface $render): \Psr\Http\Message\ResponseInterface + { + return $render->render('news/import'); + } } \ No newline at end of file diff --git a/app/Controller/admin/api/NewsController.php b/app/Controller/admin/api/NewsController.php index 0a4f834..2cdfad6 100755 --- a/app/Controller/admin/api/NewsController.php +++ b/app/Controller/admin/api/NewsController.php @@ -12,6 +12,7 @@ use App\Model\AppBrand; use App\Model\AppNews; use Hyperf\HttpServer\Annotation\Controller; use Hyperf\HttpServer\Annotation\RequestMapping; +use function Hyperf\Support\env; #[Controller(prefix: 'admin/api/news')] class NewsController extends AbstractController @@ -92,6 +93,57 @@ class NewsController extends AbstractController return $this->response->json(['code' => 0, 'msg' => 'ok']); } + /** + * 导入 + * [{title:'',desc:'',keywords:'',content:''}] + * @url /admin/api/news/insert + */ + #[RequestMapping(path:'import', methods: 'post')] + public function import() + { + $content = $this->request->post('content', null); + $platform = $this->request->post('platform', 0); + $column = $this->request->post('column', 0); + // 随机图片 + $directory = env('COVER_ROOT'); // 文件夹路径 + $images = glob($directory . '/*.{jpg,jpeg,png,gif,bmp}', GLOB_BRACE); // 获取图片文件 + + $imagesArr = []; + if (count($images) > 0) { + foreach ($images as $image) { + $imagesArr[] = basename($image); + } + } + + if (!$imagesArr) { + return $this->response->json(['code' => 400, 'msg' => 'not content.']); + } + + if (!$content) { + return $this->response->json(['code' => 400, 'msg' => 'not content.']); + } + + $content = json_decode($content, true); + foreach ($content as $item) { + $randIndex = mt_rand(1,count($imagesArr)); + $cover = $imagesArr[$randIndex]; + $model = new AppNews(); + $model->title = is_array($item['title']) ? current($item['title']) : $item['title']; + $model->description = $item['desc']; + $model->keywords = $item['keywords']; + $model->platform = $platform; + $model->cover = env('APP_DOMAIN') . '/uploads/cover/' . $cover; + $model->content = strtr($item['content'], [ + '' => <<

+EOF + ]); + $model->column_tag = $column; + $model->save(); + } + return $this->response->json(['code' => 0, 'msg' => 'ok']); + } + /** * 删除新新闻接口 * @url /admin/api/news/delete diff --git a/app/Controller/api/v1/ArticlesController.php b/app/Controller/api/v1/ArticlesController.php index 2653c85..5f22010 100755 --- a/app/Controller/api/v1/ArticlesController.php +++ b/app/Controller/api/v1/ArticlesController.php @@ -56,15 +56,4 @@ class ArticlesController extends AbstractController 'message' => 'ok' ]; } - - #[RequestMapping(path:'brand-search', methods: 'get')] - public function brandSearch(): array - { - $input = $this->request->input('brand'); - $query = Model::query()->select(['name', 'cn_name', 'id'])->where('name', 'like', "%$input%") - ->orWhere('cn_name', 'like', "%$input%") - ->get()->toArray(); - - return ['code' => 0, 'msg' => 'ok', 'data' => $query]; - } } \ No newline at end of file diff --git a/app/Model/AppNews.php b/app/Model/AppNews.php index 1cfed59..2089a9a 100644 --- a/app/Model/AppNews.php +++ b/app/Model/AppNews.php @@ -23,6 +23,7 @@ namespace App\Model; * @property int $is_delete * @property string $source_url * @property string $source_platform + * @property int $column_tag * @property-read mixed $created_at */ class AppNews extends Model @@ -40,12 +41,14 @@ class AppNews extends Model /** * The attributes that should be cast to native types. */ - protected array $casts = ['id' => 'integer', 'created_at' => 'datetime', 'created_by' => 'integer', 'updated_at' => 'datetime', 'updated_by' => 'integer', 'deleted_at' => 'integer', 'deleted_by' => 'integer', 'platform' => 'integer', 'is_record' => 'integer', 'is_delete' => 'integer']; + protected array $casts = ['id' => 'integer', 'created_at' => 'datetime', 'created_by' => 'integer', 'updated_at' => 'datetime', 'updated_by' => 'integer', 'deleted_at' => 'integer', 'deleted_by' => 'integer', 'platform' => 'integer', 'is_record' => 'integer', 'is_delete' => 'integer', 'column_tag' => 'integer']; protected ?string $dateFormat = 'U'; public function getCreatedAtAttribute($value) { - return date('Y-m-d', intval($value)); + return $this->format('created_at', function (bool $isFormat) use ($value) { + return $isFormat ? date('Y-m-d', intval($value)) : $value; + }); } } diff --git a/app/Rpc/v1/NewsService.php b/app/Rpc/v1/NewsService.php index 68c6a6f..cd84046 100755 --- a/app/Rpc/v1/NewsService.php +++ b/app/Rpc/v1/NewsService.php @@ -3,6 +3,7 @@ namespace App\Rpc\v1; use App\Model\AppNews; +use App\Model\AppNewsColumn; use App\Rpc\BaseService; use Hyperf\RpcServer\Annotation\RpcService; @@ -28,6 +29,12 @@ class NewsService extends BaseService if (!$query) { return $this->getResponse()->setCode(404)->send(); } + + $query['created_at'] = date('Y-m-d', $query['created_at']); + $columnTag = AppNewsColumn::find($query['column_tag']); + $query['column_tag'] = $columnTag->name ?? ''; + $query['column_tag_url'] = $columnTag->url ?? ''; + // 相关文章 $query['about'] = AppNews::formatQuery(['created_at']) ->where('platform', $isRelation ? current(self::RELATION[$app_id]) : $app_id) @@ -55,7 +62,7 @@ class NewsService extends BaseService */ public function index(int $id, int $limit = 30, int $page = 1): array { - $query = AppNews::formatQuery(['created_at']) + $query = AppNews::formatQuery(['created_at', 'column_tag']) ->where('is_delete', 0); if (isset(self::RELATION[$id])) { @@ -74,14 +81,22 @@ class NewsService extends BaseService $value = AppNews::query()->whereIn('id', $ids)->orderBy('id', 'desc')->get()->toArray(); - $about = AppNews::formatQuery(['created_at']) + foreach ($value as &$item) { + $item['created_at'] = date('Y-m-d', $item['created_at']); + $columnTag = AppNewsColumn::find($item['column_tag']); + $item['column_tag'] = $columnTag->name ?? ''; + $item['column_tag_url'] = $columnTag->url ?? ''; + } + + $hot = AppNews::formatQuery(['created_at']) ->where('platform', $id) ->where('is_delete', 0) ->select(['title', 'id', 'cover']) - ->limit(10) + ->limit(5) ->orderBy('id', 'desc') ->get() ->toArray(); - return $this->getResponse()->setExtra('about', $about)->setExtra('total', ceil($total / $limit))->setData($value)->setCode(0)->send(); + + return $this->getResponse()->setExtra('hot', $hot)->setExtra('total', ceil($total / $limit))->setData($value)->setCode(0)->send(); } } \ No newline at end of file diff --git a/storage/view/news/import.blade.php b/storage/view/news/import.blade.php new file mode 100644 index 0000000..90dd5d9 --- /dev/null +++ b/storage/view/news/import.blade.php @@ -0,0 +1,173 @@ +where('is_delete', 0)->get()->toArray(); +}); + +$columnTag = call_user_func(function () { + return \App\Model\AppNewsColumn::query()->get()->toArray(); +}); +?> + + + + + 导入 + + + + + +
+
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+
+
+ +
+
+
+
+
+ + + + + + + diff --git a/storage/view/news/index.blade.php b/storage/view/news/index.blade.php index d8bc225..e34a498 100755 --- a/storage/view/news/index.blade.php +++ b/storage/view/news/index.blade.php @@ -63,9 +63,9 @@ - {{-- --}} + @@ -97,6 +97,7 @@ const VIEW_API = "/admin/news/view"; const INSERT_API = "/admin/api/news/insert"; const INSERT_URL = "/admin/news/insert"; + const IMPORT_URL = "/admin/news/import"; const DELETE_API = "/admin/api/news/delete"; // 字段 创建时间 created_at @@ -191,8 +192,8 @@ add(); } else if (obj.event === "refresh") { refreshTable(); - } else if (obj.event === "batchRemove") { - batchRemove(obj); + } else if (obj.event === "import") { + importNews(obj); } }); @@ -237,6 +238,17 @@ }); } + // 导入数据 + let importNews = function () { + layer.open({ + type: 2, + title: "导入", + shade: 0.1, + area: [common.isModile() ? "100%" : "98%", common.isModile() ? "100%" : "95%"], + content: IMPORT_URL + }); + } + // 表格编辑数据 let edit = function (obj) { let value = obj.data['id'];