作者 lyh

变更数据

@@ -23,6 +23,7 @@ use App\Models\RouteMap\RouteMap; @@ -23,6 +23,7 @@ use App\Models\RouteMap\RouteMap;
23 use App\Models\WebSetting\SettingNum; 23 use App\Models\WebSetting\SettingNum;
24 use App\Models\WebSetting\Translate; 24 use App\Models\WebSetting\Translate;
25 use App\Models\WebSetting\TranslateKey; 25 use App\Models\WebSetting\TranslateKey;
  26 +use Illuminate\Support\Facades\Cache;
26 27
27 class TranslateController extends BaseController 28 class TranslateController extends BaseController
28 { 29 {
@@ -351,7 +352,13 @@ class TranslateController extends BaseController @@ -351,7 +352,13 @@ class TranslateController extends BaseController
351 if($v['route'] == 'products'){ 352 if($v['route'] == 'products'){
352 $count = $productModel->formatQuery(['status'=>1])->count(); 353 $count = $productModel->formatQuery(['status'=>1])->count();
353 }else{ 354 }else{
354 - $count = $productModel->formatQuery(['category_id'=>['like','%,'.$v['source_id'].',%'],'status'=>1])->count(); 355 + $catelists = Cache::get('product_category_trans');
  356 + if(!$catelists){
  357 + $catelists = $productModel->list(['status'=>1],'id',['id','pid']);
  358 + Cache::put('product_category_trans',$catelists,3600 * 24);
  359 + }
  360 + $count = $this->getCategoryWithChildrenCountIterative($catelists,$v['source_id']);
  361 +// $count = $productModel->formatQuery(['category_id'=>['like','%,'.$v['source_id'].',%'],'status'=>1])->count();
355 } 362 }
356 $this->pageSixList($data,$count,$v,1,15); 363 $this->pageSixList($data,$count,$v,1,15);
357 break; 364 break;
@@ -474,4 +481,31 @@ class TranslateController extends BaseController @@ -474,4 +481,31 @@ class TranslateController extends BaseController
474 } 481 }
475 return true; 482 return true;
476 } 483 }
  484 +
  485 + /**
  486 + * 迭代方式获取分类及所有子分类的总数
  487 + * @param array $categories 所有分类数据
  488 + * @param int $categoryId 分类ID
  489 + * @return int 分类总数
  490 + */
  491 + function getCategoryWithChildrenCountIterative($categories, $categoryId) {
  492 + $count = 0;
  493 + $queue = [$categoryId]; // 待处理的ID队列
  494 + while (!empty($queue)) {
  495 + $currentId = array_shift($queue);
  496 + // 如果是第一个ID,计数自身
  497 + if ($currentId == $categoryId) {
  498 + $count++;
  499 + }
  500 + // 查找并计数所有子分类
  501 + foreach ($categories as $category) {
  502 + if (isset($category['pid']) && $category['pid'] == $currentId) {
  503 + $count++;
  504 + $queue[] = $category['id']; // 将子分类ID加入队列
  505 + }
  506 + }
  507 + }
  508 +
  509 + return $count;
  510 + }
477 } 511 }