CaiWuXiTong/app/Http/Livewire/Menu/Favorites.php
15061959991 1adf627c0d feat: 财务系统二次开发 - 营销账户账单功能
- 基础环境:Docker 部署配置,源码挂载实时同步
- 修复:super_admin 权限补全、登录重定向循环
- 开发:店铺营销账户账单 - 抖音账户(15字段汇总账单)
- 开发:店铺营销账户账单 - 淘系支付宝账户(8字段流水账单)
- 开发:店铺营销账户账单 - 拼多多账户(7字段流水账单)
- 业务页面导航集成:config/business_navigation.php + Business\Pages 控制器
- 各平台独立表结构和视图,互不影响
2026-07-21 18:43:52 +08:00

102 lines
2.3 KiB
PHP

<?php
namespace App\Http\Livewire\Menu;
use Livewire\Component;
use Illuminate\Contracts\View\View;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Str;
class Favorites extends Component
{
public $favorites = [];
protected $listeners = [
'addedFavorite' => 'render',
'removedFavorite' => 'render',
];
public function render(): View
{
$this->favorites = collect();
$favorites = setting('favorites.menu.' . user()->id, []);
if (!empty($favorites)) {
$favorites = json_decode($favorites, true);
foreach ($favorites as $favorite) {
$favorite['active'] = false;
try {
$favorite['url'] = $this->getUrl($favorite);
} catch (\Exception $e) {
continue;
}
$favorite['id'] = $this->getFavoriteId($favorite);
if ($this->isActive($favorite['url'])) {
$favorite['active'] = true;
}
$this->favorites->push($favorite);
}
}
return view('livewire.menu.favorites');
}
/**
* Get url.
*
* @return string
*/
public function getUrl($favorite)
{
if (! empty($favorite['route'])) {
$route = $favorite['route'];
if (is_array($route)) {
$url = route($route[0], $route[1]);
} else {
$url = route($route);
}
return str_replace(url('/') . '/', '', $url);
}
if (empty($favorite['url'])) {
return '/#';
}
return str_replace(url('/') . '/', '', url($favorite['url']));
}
/**
* Get active state for current item.
*
* @return mixed
*/
public function isActive($url)
{
if (empty($url) || in_array($url, ['/'])) {
return Request::is($url);
} else {
return Request::is($url, $url . '/*');
}
}
public function getFavoriteId($favorite)
{
$id = Str::of($favorite['url'])
->replace(url('/'), '-')
->replace(company_id(), '')
->replace(['/', '?', '='], '-')
->trim('-')
->squish();
return 'menu-favorites-' . $id;
}
}