结构
This commit is contained in:
@@ -336,7 +336,7 @@ body { background: #ffffff !important; }
|
|||||||
|
|
||||||
.tool-card {
|
.tool-card {
|
||||||
border: 1px solid #e5e7eb;
|
border: 1px solid #e5e7eb;
|
||||||
border-radius: 10px;
|
border-radius: 4px;
|
||||||
background: #ffffff;
|
background: #ffffff;
|
||||||
box-shadow: 0 1px 3px rgba(0,0,0,0.08);
|
box-shadow: 0 1px 3px rgba(0,0,0,0.08);
|
||||||
padding: .7rem .75rem;
|
padding: .7rem .75rem;
|
||||||
@@ -350,9 +350,7 @@ body { background: #ffffff !important; }
|
|||||||
}
|
}
|
||||||
|
|
||||||
.tool-card:hover {
|
.tool-card:hover {
|
||||||
transform: translateY(-3px);
|
border-color: #306AF1;
|
||||||
box-shadow: 0 8px 20px rgba(0,0,0,0.12);
|
|
||||||
border-color: #d1d5db;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.tool-card-icon {
|
.tool-card-icon {
|
||||||
|
|||||||
@@ -1,29 +1,34 @@
|
|||||||
@props([
|
@props([
|
||||||
'tools' => [],
|
'tools' => [],
|
||||||
'cardClass' => 'tool-card',
|
'cardClass' => 'tool-card',
|
||||||
'nameClass' => 'tool-card-name',
|
'nameClass' => 'tool-card-name',
|
||||||
'metaClass' => 'tool-card-meta',
|
'metaClass' => 'tool-card-meta',
|
||||||
'tagClass' => 'tool-card-tag',
|
'tagClass' => 'tool-card-tag',
|
||||||
|
'showMeta' => 'true',
|
||||||
|
'showFooter' => 'true',
|
||||||
])
|
])
|
||||||
|
|
||||||
<div class="tool-grid">
|
<div class="tool-grid">
|
||||||
@foreach($tools as $tool)
|
@foreach($tools as $tool)
|
||||||
<a class="{{ $cardClass }}" href="{{ route('tools.show', $tool->slug) }}">
|
<a class="{{ $cardClass }}" href="{{ route('tools.show', $tool->slug) }}">
|
||||||
@if($tool->logo_url)
|
@if($tool->logo_url)
|
||||||
<div class="tool-card-icon">
|
<div class="tool-card-icon">
|
||||||
<img src="{{ $tool->logo_url }}" alt="{{ $tool->name }}" loading="lazy">
|
<img src="{{ $tool->logo_url }}" alt="{{ $tool->name }}" loading="lazy">
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
<div class="{{ $nameClass }}">{{ $tool->name }}</div>
|
<div class="{{ $nameClass }}">{{ $tool->name }}</div>
|
||||||
<div class="{{ $metaClass }}">{{ $tool->category?->name ?? '未分类' }} · {{ $tool->pricing_type }}</div>
|
@if($showMeta)
|
||||||
@if($tool->summary)
|
<div class="{{ $metaClass }}">{{ $tool->category?->name ?? '未分类' }} · {{ $tool->pricing_type }}</div>
|
||||||
<p class="tool-card-desc">{{ $tool->summary }}</p>
|
@endif
|
||||||
@endif
|
@if($tool->summary)
|
||||||
<div class="tool-card-footer">
|
<p class="tool-card-desc">{{ $tool->summary }}</p>
|
||||||
<span class="{{ $tagClass }}">{{ $tool->has_api ? '支持 API' : '无 API' }}</span>
|
@endif
|
||||||
<span class="tool-card-date">{{ $tool->published_at?->format('Y-m-d') }}</span>
|
@if($showFooter)
|
||||||
</div>
|
<div class="tool-card-footer">
|
||||||
</a>
|
<span class="{{ $tagClass }}">{{ $tool->has_api ? '支持 API' : '无 API' }}</span>
|
||||||
|
<span class="tool-card-date">{{ $tool->published_at?->format('Y-m-d') }}</span>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
</a>
|
||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -90,51 +90,7 @@ $bannerItems = collect(data_get($bannerModule, 'items', []))->take((int) data_ge
|
|||||||
</nav>
|
</nav>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@if(data_get($channelModule, 'enabled', true) === true)
|
|
||||||
<section id="section-channel" class="tool-section" aria-label="频道卡片">
|
|
||||||
<header class="tool-section-head">
|
|
||||||
<h2><i class="bi bi-grid text-primary"></i> {{ data_get($channelModule, 'title', '频道卡片') }}</h2>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="tool-channel">
|
|
||||||
<div class="tool-channel-mini">
|
|
||||||
<a href="{{ route('home') }}"><i class="bi bi-house"></i><br>首页</a>
|
|
||||||
<a href="{{ route('tools.list') }}"><i class="bi bi-tools"></i><br>工具</a>
|
|
||||||
<a href="{{ route('models.index') }}"><i class="bi bi-cpu"></i><br>模型</a>
|
|
||||||
<a href="{{ route('news.index') }}"><i class="bi bi-newspaper"></i><br>资讯</a>
|
|
||||||
<a href="{{ route('guides.index') }}"><i class="bi bi-journal-code"></i><br>教程</a>
|
|
||||||
</div>
|
|
||||||
@forelse($channelItems as $channel)
|
|
||||||
<a class="tool-channel-card" href="{{ $channel['url'] ?: 'javascript:void(0)' }}" @if(!empty($channel['image_path'])) style="background-image:url('{{ $channel['image_path'] }}');" @endif>
|
|
||||||
<span>{{ $channel['title'] ?: '频道入口' }}</span>
|
|
||||||
</a>
|
|
||||||
@empty
|
|
||||||
<div class="tool-channel-card"><span>频道入口</span></div>
|
|
||||||
@endforelse
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
@endif
|
|
||||||
|
|
||||||
@foreach($moduleOrder as $moduleKey)
|
@foreach($moduleOrder as $moduleKey)
|
||||||
@if($moduleKey === 'promo_banners' && data_get($bannerModule, 'enabled', true) === true)
|
|
||||||
<section id="section-banner" class="tool-section" aria-label="横幅推荐">
|
|
||||||
<header class="tool-section-head">
|
|
||||||
<h2><i class="bi bi-megaphone text-primary"></i> {{ data_get($bannerModule, 'title', '横幅推荐') }}</h2>
|
|
||||||
<a href="{{ route('tools.list') }}">查看更多</a>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="tool-banner-row">
|
|
||||||
@forelse($bannerItems as $banner)
|
|
||||||
<a class="tool-banner @if($loop->index % 2 === 1) alt @endif" href="{{ $banner['url'] ?: 'javascript:void(0)' }}" @if(!empty($banner['image_path'])) style="background-image:url('{{ $banner['image_path'] }}'); background-size:cover;" @endif>
|
|
||||||
<b>{{ $banner['title'] ?: '精选推荐' }}</b>
|
|
||||||
<small>{{ $banner['subtitle'] ?: '查看详情' }}</small>
|
|
||||||
</a>
|
|
||||||
@empty
|
|
||||||
<article class="tool-banner"><b>暂无横幅推荐</b><small>请在后台配置</small></article>
|
|
||||||
@endforelse
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
@endif
|
|
||||||
|
|
||||||
@if($moduleKey === 'hot_tools' && data_get($hotModule, 'enabled', true) === true)
|
@if($moduleKey === 'hot_tools' && data_get($hotModule, 'enabled', true) === true)
|
||||||
<section id="section-hot" class="tool-section" aria-label="热门工具">
|
<section id="section-hot" class="tool-section" aria-label="热门工具">
|
||||||
@@ -143,7 +99,7 @@ $bannerItems = collect(data_get($bannerModule, 'items', []))->take((int) data_ge
|
|||||||
@php($hotMore = data_get($hotModule, 'more_url') ?: route('tools.list', ['tab' => 'recommended']))
|
@php($hotMore = data_get($hotModule, 'more_url') ?: route('tools.list', ['tab' => 'recommended']))
|
||||||
<a href="{{ $hotMore }}">查看更多</a>
|
<a href="{{ $hotMore }}">查看更多</a>
|
||||||
</header>
|
</header>
|
||||||
<x-portal.tool-grid :tools="$hotTools" />
|
<x-portal.tool-grid :tools="$hotTools" :show-meta="false" :show-footer="false" />
|
||||||
</section>
|
</section>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
@@ -154,7 +110,7 @@ $bannerItems = collect(data_get($bannerModule, 'items', []))->take((int) data_ge
|
|||||||
@php($latestMore = data_get($latestModule, 'more_url') ?: route('tools.list', ['tab' => 'latest']))
|
@php($latestMore = data_get($latestModule, 'more_url') ?: route('tools.list', ['tab' => 'latest']))
|
||||||
<a href="{{ $latestMore }}">查看更多</a>
|
<a href="{{ $latestMore }}">查看更多</a>
|
||||||
</header>
|
</header>
|
||||||
<x-portal.tool-grid :tools="$latestTools" />
|
<x-portal.tool-grid :tools="$latestTools" :show-meta="false" :show-footer="false" />
|
||||||
</section>
|
</section>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
@@ -167,7 +123,7 @@ $bannerItems = collect(data_get($bannerModule, 'items', []))->take((int) data_ge
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
@if($section['tools']->isNotEmpty())
|
@if($section['tools']->isNotEmpty())
|
||||||
<x-portal.tool-grid :tools="$section['tools']" />
|
<x-portal.tool-grid :tools="$section['tools']" :show-meta="false" :show-footer="false" />
|
||||||
@else
|
@else
|
||||||
<p class="text-muted-soft mb-0">该分类暂未收录工具</p>
|
<p class="text-muted-soft mb-0">该分类暂未收录工具</p>
|
||||||
@endif
|
@endif
|
||||||
|
|||||||
Reference in New Issue
Block a user