From 67f5a529ca5478e48fc1f764a03ad4530193b708 Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Fri, 14 Mar 2025 17:58:36 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E5=89=8D=E5=8F=B0=E5=90=84=E6=A8=A1=E5=9D=97?= =?UTF-8?q?url=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/common.php | 8 +- app/admin/controller/v1/System.php | 140 +++++++++++++++++++- app/admin/model/v1/ArticleCategoryModel.php | 6 + app/admin/model/v1/ArticleModel.php | 6 + app/admin/model/v1/ProductCategoryModel.php | 6 + app/admin/model/v1/ProductModel.php | 8 ++ app/admin/route/v1.php | 8 +- 7 files changed, 178 insertions(+), 4 deletions(-) diff --git a/app/admin/common.php b/app/admin/common.php index 878fc5c1..7134e6f6 100644 --- a/app/admin/common.php +++ b/app/admin/common.php @@ -7,10 +7,11 @@ if (!function_exists('array_to_tree')) { * @param array $data 数据 * @param int $pid 父级ID * @param string $with 转换依据字段 - * @param int $level 层级 + * @param int|bool $level 层级 + * @param bool $keep_pid 是否保留pid * @return array */ - function array_to_tree(array $data, int $pid, string $with = 'pid', int|false $level = 1) + function array_to_tree(array $data, int $pid, string $with = 'pid', int|bool $level = 1, bool $keep_pid = true) { $ret = []; foreach ($data as $item) { @@ -20,6 +21,9 @@ if (!function_exists('array_to_tree')) { $item['level'] = $level; $lv = $level + 1; } + if ($keep_pid === false) { + unset($item[$with]); + } $children = array_to_tree($data, $item['id'], $with, $lv); if ($children) { $item['children'] = $children; diff --git a/app/admin/controller/v1/System.php b/app/admin/controller/v1/System.php index eab99543..7a4555fa 100644 --- a/app/admin/controller/v1/System.php +++ b/app/admin/controller/v1/System.php @@ -3,6 +3,10 @@ declare (strict_types = 1); namespace app\admin\controller\v1; +use app\admin\model\v1\ArticleCategoryModel; +use app\admin\model\v1\ArticleModel; +use app\admin\model\v1\ProductCategoryModel; +use app\admin\model\v1\ProductModel; use think\facade\Db; class System @@ -80,4 +84,138 @@ class System return success('获取成功', $info); } -} + + // 组装系统内页面URL + public function urls() + { + $lang_id = request()->lang_id; + + if (request()->has('link_to')) { + $param = request()->get([ + 'link_to', + 'id' + ]); + + $urls = []; + switch ($param['link_to']) { + case 'article': + $articles = $this->getArticleByCategory($lang_id, $param['id']); + $urls = array_map(function($item) { + $item['url'] = (string)url('yy/zz', ['id' => $item['id']]); + return $item; + }, $articles); + break; + case 'product': + $products = $this->getProductByCategory($lang_id, $param['id']); + $urls = array_map(function($item) { + $item['url'] = (string)url('yy/zz', ['id' => $item['id']]); + return $item; + }, $products); + break; + default: + return error('请确认link_to参数'); + break; + } + return success('获取成功', $urls); + } else { + // 获取文章分类 + $article_category = $this->getArticleCategory($lang_id); + // 获取产品分类 + $product_category = $this->getProductCategory($lang_id); + + $urls = [ + [ + 'name' => '自定义', + 'link_to' => 'custom', + 'data' => [] + ], + [ + 'name' => '文章分类', + 'link_to' => 'article_category', + 'data' => array_to_tree(array_map(function($item) { + $item['url'] = (string)url('yy/zz', ['id' => $item['id']]); + return $item; + }, $article_category), 0, 'pid', false, false) + ], + [ + 'name' => '文章管理', + 'link_to' => 'article', + 'data' => array_to_tree($article_category, 0, 'pid', false, false) + ], + [ + 'name' => '产品分类', + 'link_to' => 'product_category', + 'data' => array_to_tree(array_map(function($item) { + $item['url'] = (string)url('yy/zz', ['id' => $item['id']]); + return $item; + }, $product_category), 0, 'pid', false, false) + ], + [ + 'name' => '产品', + 'link_to' => 'product', + 'data' => array_to_tree($product_category, 0, 'pid', false, false) + ] + ]; + + return success('获取成功', $urls); + } + } + // 获取文章分类数据 + private function getArticleCategory($lang_id) + { + $data = ArticleCategoryModel::field([ + 'id', + 'pid', + 'name' + ]) + ->language($lang_id) + ->isShow(true) + ->order(['sort' => 'asc', 'id' => 'desc']) + ->select(); + + return $data->toArray(); + } + // 获取产品分类数据 + private function getProductCategory($lang_id) + { + $data = ProductCategoryModel::field([ + 'id', + 'pid', + 'name' + ]) + ->language($lang_id) + ->isShow(true) + ->order(['sort' => 'asc', 'id' => 'desc']) + ->select(); + + return $data->toArray(); + } + // 根据文章分类获取文章 + private function getArticleByCategory($lang_id, $category_id) + { + $data = ArticleModel::field([ + 'id', + 'title' => 'name' + ]) + ->language($lang_id) + ->category($category_id) + ->enabled() + ->select(); + + return $data->toArray(); + } + // 根据产品分类获取产品 + private function getProductByCategory($lang_id, $category_id) + { + $data = ProductModel::field([ + 'id', + 'name' + ]) + ->language($lang_id) + ->category($category_id) + ->isShow(true) + ->select(); + + return $data->toArray(); + } +} \ No newline at end of file diff --git a/app/admin/model/v1/ArticleCategoryModel.php b/app/admin/model/v1/ArticleCategoryModel.php index 9d08f889..efc5ab3f 100644 --- a/app/admin/model/v1/ArticleCategoryModel.php +++ b/app/admin/model/v1/ArticleCategoryModel.php @@ -22,6 +22,12 @@ class ArticleCategoryModel extends ArticleCategoryBaseModel $query->where('language_id', '=', $lang_id); } + // 根据是否显示查询 + public function scopeIsShow($query, bool $is_show) + { + $query->where('is_show', '=', (int)$is_show); + } + // 搜索分类名 public function searchNameAttr($query, $value, $data) { diff --git a/app/admin/model/v1/ArticleModel.php b/app/admin/model/v1/ArticleModel.php index 7a8e25ce..e988cd9c 100644 --- a/app/admin/model/v1/ArticleModel.php +++ b/app/admin/model/v1/ArticleModel.php @@ -61,4 +61,10 @@ class ArticleModel extends ArticleBaseModel } $query->where('category_id', '=', $value); } + + // 已启用的查询 + public function scopeEnabled($query) + { + $query->where('enabled', '=', 1); + } } diff --git a/app/admin/model/v1/ProductCategoryModel.php b/app/admin/model/v1/ProductCategoryModel.php index 2c5c7b33..6b90c4bc 100644 --- a/app/admin/model/v1/ProductCategoryModel.php +++ b/app/admin/model/v1/ProductCategoryModel.php @@ -29,6 +29,12 @@ class ProductCategoryModel extends ProductCategoryBaseModel $query->where('language_id', '=', $value); } + // 根据是否显示查询 + public function scopeIsShow($query, bool $value) + { + $query->where('is_show', '=', (int)$value); + } + // 搜索分类名称 public function searchNameNullableAttr($query, $value, $data) { diff --git a/app/admin/model/v1/ProductModel.php b/app/admin/model/v1/ProductModel.php index 7eb542b6..83b9c446 100644 --- a/app/admin/model/v1/ProductModel.php +++ b/app/admin/model/v1/ProductModel.php @@ -67,6 +67,10 @@ class ProductModel extends ProductBaseModel } $query->where('category_id', '=', $value); } + public function scopeCategory($query, $value) + { + $query->where('category_id', '=', $value); + } // 上架状态查询 public function scopeIsShowNullable($query, bool|null $value) @@ -76,4 +80,8 @@ class ProductModel extends ProductBaseModel } $query->where('is_show', '=', (int)$value); } + public function scopeIsShow($query, bool $value) + { + $query->where('is_show', '=', (int)$value); + } } diff --git a/app/admin/route/v1.php b/app/admin/route/v1.php index 34abcbec..16e78cdb 100644 --- a/app/admin/route/v1.php +++ b/app/admin/route/v1.php @@ -13,7 +13,13 @@ use think\facade\Route; // v1版本路由定义 Route::group('v1', function () { // 获取系统信息 - Route::get('system/info', 'System/info'); + Route::group('system', function() { + // 获取系统信息 + Route::get('info', 'System/info'); + + // 组装系统内页面URL + Route::get('urls', 'System/urls'); + }); // 用户模块 Route::group('user', function () {