2026-02-11 17:28:36 +08:00
|
|
|
@extends('layouts.site')
|
|
|
|
|
|
|
|
|
|
@section('page_class', 'page-models')
|
|
|
|
|
@section('title', 'AI 模型推荐 - AIWeb')
|
|
|
|
|
@section('meta_description', '按模态、部署方式与评分维度筛选 AI 模型,快速完成选型。')
|
|
|
|
|
@section('canonical', route('models.index'))
|
|
|
|
|
|
|
|
|
|
@section('content')
|
2026-02-12 10:31:53 +08:00
|
|
|
@php
|
|
|
|
|
$icons = ['bi-chat-square-text', 'bi-collection', 'bi-image', 'bi-mic'];
|
|
|
|
|
$resetModalityFilters = array_filter([
|
|
|
|
|
'q' => $filters['q'] ?? null,
|
|
|
|
|
'deployment' => $filters['deployment'] ?? null,
|
|
|
|
|
], fn ($value) => $value !== null && $value !== '');
|
|
|
|
|
@endphp
|
2026-02-11 17:28:36 +08:00
|
|
|
|
2026-02-12 10:31:53 +08:00
|
|
|
<div class="channel-layout">
|
|
|
|
|
<aside class="channel-sidebar" aria-label="模型分类">
|
|
|
|
|
<div class="channel-brand"><span class="channel-brand-mark">AI</span>AI模型库</div>
|
|
|
|
|
<nav class="channel-links">
|
|
|
|
|
<a class="channel-link @if(empty($filters['modality'])) active @endif" href="{{ route('models.index', $resetModalityFilters) }}">
|
|
|
|
|
<i class="bi bi-stars"></i>
|
|
|
|
|
<span>全部模型</span>
|
|
|
|
|
<small>{{ $modelStats['total'] ?? 0 }}</small>
|
|
|
|
|
</a>
|
|
|
|
|
@foreach($modalityOptions as $index => $option)
|
|
|
|
|
<a class="channel-link @if(($filters['modality'] ?? '') === $option['value']) active @endif" href="{{ route('models.by-use-case', $option['value']) }}">
|
|
|
|
|
<i class="bi {{ $icons[$index % count($icons)] }}"></i>
|
|
|
|
|
<span>{{ $option['label'] }}</span>
|
|
|
|
|
<small>{{ $option['count'] }}</small>
|
|
|
|
|
</a>
|
|
|
|
|
@endforeach
|
|
|
|
|
</nav>
|
2026-02-11 17:28:36 +08:00
|
|
|
</aside>
|
2026-02-12 10:31:53 +08:00
|
|
|
|
|
|
|
|
<section class="channel-main">
|
2026-02-12 13:06:12 +08:00
|
|
|
<x-portal.top-nav active="models" status-label="收录模型" :status-value="$modelStats['total'] ?? 0" />
|
2026-02-12 10:31:53 +08:00
|
|
|
|
|
|
|
|
<nav class="channel-mobile-nav" aria-label="移动分类导航">
|
|
|
|
|
<a class="channel-link @if(empty($filters['modality'])) active @endif" href="{{ route('models.index', $resetModalityFilters) }}">
|
|
|
|
|
<i class="bi bi-stars"></i>
|
|
|
|
|
<span>全部模型</span>
|
|
|
|
|
<small>{{ $modelStats['total'] ?? 0 }}</small>
|
|
|
|
|
</a>
|
|
|
|
|
@foreach($modalityOptions as $index => $option)
|
|
|
|
|
<a class="channel-link @if(($filters['modality'] ?? '') === $option['value']) active @endif" href="{{ route('models.by-use-case', $option['value']) }}">
|
|
|
|
|
<i class="bi {{ $icons[$index % count($icons)] }}"></i>
|
|
|
|
|
<span>{{ $option['label'] }}</span>
|
|
|
|
|
<small>{{ $option['count'] }}</small>
|
|
|
|
|
</a>
|
|
|
|
|
@endforeach
|
|
|
|
|
</nav>
|
|
|
|
|
|
|
|
|
|
<section class="channel-hero">
|
|
|
|
|
<span class="channel-chip">AIWEB.CN</span>
|
|
|
|
|
<h1 class="channel-title">AI模型推荐</h1>
|
|
|
|
|
<p class="channel-subtitle">按效果、成本与速度三维比较,快速筛选适配业务场景的模型方案。</p>
|
|
|
|
|
|
|
|
|
|
<form class="channel-search" method="get" action="{{ route('models.index') }}" role="search" aria-label="搜索 AI 模型">
|
|
|
|
|
<input type="search" name="q" value="{{ $filters['q'] ?? '' }}" placeholder="搜索模型名称或能力,如 多模态 / 长上下文" autocomplete="off" spellcheck="false">
|
|
|
|
|
<select name="modality" aria-label="按模态筛选">
|
|
|
|
|
<option value="">全部分类</option>
|
|
|
|
|
@foreach($modalityOptions as $option)
|
|
|
|
|
<option value="{{ $option['value'] }}" @selected(($filters['modality'] ?? '') === $option['value'])>{{ $option['label'] }}</option>
|
|
|
|
|
@endforeach
|
|
|
|
|
</select>
|
|
|
|
|
<select name="deployment" aria-label="按部署筛选">
|
|
|
|
|
<option value="">部署方式</option>
|
|
|
|
|
<option value="api" @selected(($filters['deployment'] ?? '') === 'api')>API</option>
|
|
|
|
|
<option value="self_hosted" @selected(($filters['deployment'] ?? '') === 'self_hosted')>私有部署</option>
|
|
|
|
|
<option value="hybrid" @selected(($filters['deployment'] ?? '') === 'hybrid')>混合部署</option>
|
|
|
|
|
</select>
|
|
|
|
|
<a class="btn btn-outline-secondary" href="{{ route('models.index') }}">重置</a>
|
|
|
|
|
<button class="btn btn-primary" type="submit"><i class="bi bi-search"></i> 搜索</button>
|
|
|
|
|
</form>
|
|
|
|
|
|
2026-02-12 13:06:12 +08:00
|
|
|
<x-portal.stat-grid
|
|
|
|
|
:stats="[
|
|
|
|
|
['label' => '收录模型', 'value' => $modelStats['total'] ?? 0],
|
|
|
|
|
['label' => '多模态', 'value' => $modelStats['multimodal'] ?? 0],
|
|
|
|
|
['label' => 'API部署', 'value' => $modelStats['api'] ?? 0],
|
|
|
|
|
['label' => '7天更新', 'value' => $modelStats['updated_7d'] ?? 0],
|
|
|
|
|
]"
|
|
|
|
|
/>
|
2026-02-12 10:31:53 +08:00
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
<section class="channel-body">
|
|
|
|
|
<section class="channel-panel">
|
|
|
|
|
<header class="channel-panel-head">
|
|
|
|
|
<h2 class="channel-panel-title">模型列表</h2>
|
|
|
|
|
</header>
|
|
|
|
|
|
|
|
|
|
@if($items->isNotEmpty())
|
|
|
|
|
<div class="entity-grid">
|
|
|
|
|
@foreach($items as $model)
|
|
|
|
|
<article class="entity-card">
|
|
|
|
|
<a class="entity-title" href="{{ route('models.show', $model->slug) }}">{{ $model->name }}</a>
|
|
|
|
|
<div class="entity-meta">{{ $model->provider ?: '未知供应商' }} · {{ $model->deployment_mode ?: '未标注部署' }}</div>
|
|
|
|
|
<p class="entity-desc line-clamp-2">{{ $model->summary }}</p>
|
|
|
|
|
<div class="d-flex align-items-center justify-content-between gap-2">
|
|
|
|
|
<span class="chip">总分 {{ $model->total_score }}</span>
|
|
|
|
|
<a class="btn btn-sm btn-outline-primary" href="{{ route('models.show', $model->slug) }}">详情</a>
|
|
|
|
|
</div>
|
|
|
|
|
</article>
|
|
|
|
|
@endforeach
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="mt-3">{{ $items->links() }}</div>
|
|
|
|
|
@else
|
|
|
|
|
<p class="text-muted-soft mb-0">暂无符合条件的模型数据</p>
|
|
|
|
|
@endif
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
<aside class="channel-list">
|
2026-02-12 13:06:12 +08:00
|
|
|
<x-portal.side-list-section
|
|
|
|
|
title="相关工具"
|
|
|
|
|
:more-url="route('tools.index')"
|
|
|
|
|
:items="$sidebarTools"
|
|
|
|
|
:item-url="fn ($tool) => route('tools.show', $tool->slug)"
|
|
|
|
|
:item-title="fn ($tool) => $tool->name"
|
|
|
|
|
:item-meta="fn ($tool) => $tool->pricing_type.' · '.($tool->has_api ? '支持 API' : '无 API')"
|
|
|
|
|
empty-text="暂无工具"
|
|
|
|
|
/>
|
2026-02-12 10:31:53 +08:00
|
|
|
|
2026-02-12 13:06:12 +08:00
|
|
|
<x-portal.side-list-section
|
|
|
|
|
title="最新资讯"
|
|
|
|
|
:more-url="route('news.index')"
|
|
|
|
|
:items="$sidebarNews"
|
|
|
|
|
:item-url="fn ($news) => route('news.show', $news->slug)"
|
|
|
|
|
:item-title="fn ($news) => $news->title"
|
|
|
|
|
:item-meta="fn ($news) => (string) $news->published_at?->format('m-d H:i')"
|
|
|
|
|
empty-text="暂无资讯"
|
|
|
|
|
/>
|
2026-02-12 10:31:53 +08:00
|
|
|
</aside>
|
|
|
|
|
</section>
|
|
|
|
|
</section>
|
2026-02-11 17:28:36 +08:00
|
|
|
</div>
|
|
|
|
|
@endsection
|