2026-02-11 17:28:36 +08:00
|
|
|
|
@extends('layouts.admin')
|
|
|
|
|
|
|
|
|
|
|
|
@section('title', $item->exists ? '编辑模型' : '新建模型')
|
|
|
|
|
|
|
2026-02-12 17:10:36 +08:00
|
|
|
|
@section('head')
|
|
|
|
|
|
@include('admin.partials.modern-form-head')
|
|
|
|
|
|
@endsection
|
|
|
|
|
|
|
2026-02-11 17:28:36 +08:00
|
|
|
|
@section('content')
|
2026-02-12 17:10:36 +08:00
|
|
|
|
<div class="card modern-form-card">
|
2026-02-11 17:28:36 +08:00
|
|
|
|
<div class="card-header d-flex justify-content-between align-items-center">
|
|
|
|
|
|
<h3 class="card-title mb-0">{{ $item->exists ? '编辑模型' : '新建模型' }}</h3>
|
|
|
|
|
|
@if($item->exists)
|
|
|
|
|
|
<div class="d-flex gap-2">
|
2026-02-12 17:10:36 +08:00
|
|
|
|
<form method="post" action="{{ route('admin.models.publish', $item) }}">
|
|
|
|
|
|
@csrf
|
|
|
|
|
|
<button class="btn btn-sm btn-success" type="submit">发布</button>
|
|
|
|
|
|
</form>
|
|
|
|
|
|
<form method="post" action="{{ route('admin.models.mark-stale', $item) }}">
|
|
|
|
|
|
@csrf
|
|
|
|
|
|
<button class="btn btn-sm btn-warning" type="submit">标记失效</button>
|
|
|
|
|
|
</form>
|
2026-02-11 17:28:36 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
@endif
|
|
|
|
|
|
</div>
|
2026-02-12 17:10:36 +08:00
|
|
|
|
|
2026-02-11 17:28:36 +08:00
|
|
|
|
<div class="card-body">
|
2026-02-12 17:10:36 +08:00
|
|
|
|
<p class="required-tip"><span class="required-star">*</span> 为必填项</p>
|
|
|
|
|
|
|
2026-02-11 17:28:36 +08:00
|
|
|
|
<form method="post" action="{{ $submitRoute }}" class="row g-3">
|
|
|
|
|
|
@csrf
|
|
|
|
|
|
@if($method !== 'POST') @method($method) @endif
|
|
|
|
|
|
|
2026-02-12 17:10:36 +08:00
|
|
|
|
<div class="col-12">
|
|
|
|
|
|
<section class="form-section">
|
|
|
|
|
|
<h4 class="form-section-title">基础信息</h4>
|
|
|
|
|
|
<p class="form-section-subtitle">维护模型的核心参数与展示信息,用于榜单、详情和筛选。</p>
|
2026-02-11 17:28:36 +08:00
|
|
|
|
|
2026-02-12 17:10:36 +08:00
|
|
|
|
<div class="row g-3">
|
|
|
|
|
|
<div class="col-md-6 field-required">
|
|
|
|
|
|
<label class="form-label">模型名称<span class="required-star">*</span></label>
|
|
|
|
|
|
<input class="form-control" name="name" value="{{ old('name', $item->name) }}" required>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="col-md-6 field-required">
|
|
|
|
|
|
<label class="form-label">Slug<span class="required-star">*</span></label>
|
|
|
|
|
|
<input class="form-control" name="slug" value="{{ old('slug', $item->slug) }}" required>
|
|
|
|
|
|
<div class="form-hint">默认自动生成,可按品牌规范调整。</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="col-md-4">
|
|
|
|
|
|
<label class="form-label">供应商</label>
|
|
|
|
|
|
<input class="form-control" name="provider" value="{{ old('provider', $item->provider) }}" placeholder="OpenAI / Anthropic">
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="col-md-4 field-required">
|
|
|
|
|
|
<label class="form-label">模态<span class="required-star">*</span></label>
|
|
|
|
|
|
<input class="form-control" name="modality" value="{{ old('modality', $item->modality ?: 'text') }}" required placeholder="text / multimodal">
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="col-md-4 field-required">
|
|
|
|
|
|
<label class="form-label">部署方式<span class="required-star">*</span></label>
|
|
|
|
|
|
<input class="form-control" name="deployment_mode" value="{{ old('deployment_mode', $item->deployment_mode ?: 'api') }}" required placeholder="api / local / cloud">
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="col-md-3">
|
|
|
|
|
|
<label class="form-label">上下文长度</label>
|
|
|
|
|
|
<input class="form-control" name="context_window" value="{{ old('context_window', $item->context_window) }}" type="number" min="1" placeholder="如 128000">
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="col-md-3">
|
|
|
|
|
|
<label class="form-label">输入价格</label>
|
|
|
|
|
|
<input class="form-control" name="price_input" value="{{ old('price_input', $item->price_input) }}" type="number" step="0.000001" min="0">
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="col-md-3">
|
|
|
|
|
|
<label class="form-label">输出价格</label>
|
|
|
|
|
|
<input class="form-control" name="price_output" value="{{ old('price_output', $item->price_output) }}" type="number" step="0.000001" min="0">
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="col-md-3 field-required">
|
|
|
|
|
|
<label class="form-label">状态<span class="required-star">*</span></label>
|
|
|
|
|
|
<select class="form-select" name="status" required>
|
|
|
|
|
|
@foreach($statusOptions as $status)
|
|
|
|
|
|
<option value="{{ $status->value }}" @selected(old('status', $item->status?->value) === $status->value)>{{ $status->value }}</option>
|
|
|
|
|
|
@endforeach
|
|
|
|
|
|
</select>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="col-md-4">
|
|
|
|
|
|
<label class="form-label">分类</label>
|
|
|
|
|
|
<select class="form-select" name="category_id">
|
|
|
|
|
|
<option value="">未分类</option>
|
|
|
|
|
|
@foreach($categories as $category)
|
|
|
|
|
|
<option value="{{ $category->id }}" @selected((string) old('category_id', $item->category_id) === (string) $category->id)>{{ $category->name }}</option>
|
|
|
|
|
|
@endforeach
|
|
|
|
|
|
</select>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="col-md-4">
|
|
|
|
|
|
<label class="form-label">来源</label>
|
|
|
|
|
|
<select class="form-select" name="source_id">
|
|
|
|
|
|
<option value="">无</option>
|
|
|
|
|
|
@foreach($sources as $source)
|
|
|
|
|
|
<option value="{{ $source->id }}" @selected((string) old('source_id', $item->source_id) === (string) $source->id)>{{ $source->name }}</option>
|
|
|
|
|
|
@endforeach
|
|
|
|
|
|
</select>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="col-md-4 field-required">
|
|
|
|
|
|
<label class="form-label">来源等级<span class="required-star">*</span></label>
|
|
|
|
|
|
<select class="form-select" name="source_level" required>
|
|
|
|
|
|
@foreach(['official' => '官方', 'trusted_media' => '可信媒体', 'community' => '社区', 'unknown' => '未知'] as $value => $label)
|
|
|
|
|
|
<option value="{{ $value }}" @selected(old('source_level', $item->source_level?->value ?? 'unknown') === $value)>{{ $label }}</option>
|
|
|
|
|
|
@endforeach
|
|
|
|
|
|
</select>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="col-md-4 field-required">
|
|
|
|
|
|
<label class="form-label">能力分<span class="required-star">*</span></label>
|
|
|
|
|
|
<input class="form-control" name="effectiveness_score" value="{{ old('effectiveness_score', $item->effectiveness_score ?: 60) }}" required type="number" min="0" max="100">
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="col-md-4 field-required">
|
|
|
|
|
|
<label class="form-label">价格分<span class="required-star">*</span></label>
|
|
|
|
|
|
<input class="form-control" name="price_score" value="{{ old('price_score', $item->price_score ?: 60) }}" required type="number" min="0" max="100">
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="col-md-4 field-required">
|
|
|
|
|
|
<label class="form-label">速度分<span class="required-star">*</span></label>
|
|
|
|
|
|
<input class="form-control" name="speed_score" value="{{ old('speed_score', $item->speed_score ?: 60) }}" required type="number" min="0" max="100">
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="col-md-6">
|
|
|
|
|
|
<label class="form-label">发布时间</label>
|
|
|
|
|
|
<input class="form-control" type="datetime-local" name="published_at" value="{{ old('published_at', optional($item->published_at)->format('Y-m-d\TH:i')) }}">
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="col-md-6">
|
|
|
|
|
|
<label class="form-label">最后校验时间</label>
|
|
|
|
|
|
<input class="form-control" type="datetime-local" name="last_verified_at" value="{{ old('last_verified_at', optional($item->last_verified_at)->format('Y-m-d\TH:i')) }}">
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="col-md-8 field-required">
|
|
|
|
|
|
<label class="form-label">摘要<span class="required-star">*</span></label>
|
|
|
|
|
|
<textarea class="form-control" name="summary" rows="2" required>{{ old('summary', $item->summary) }}</textarea>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="col-md-4 d-flex align-items-end">
|
|
|
|
|
|
<label class="form-check">
|
|
|
|
|
|
<input class="form-check-input" type="checkbox" name="is_stale" value="1" @checked(old('is_stale', $item->is_stale))>
|
|
|
|
|
|
<span class="form-check-label">标记失效</span>
|
|
|
|
|
|
</label>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</section>
|
2026-02-11 17:28:36 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
|
2026-02-12 17:10:36 +08:00
|
|
|
|
<div class="col-12">
|
|
|
|
|
|
<section class="form-section">
|
|
|
|
|
|
<h4 class="form-section-title">内容编辑</h4>
|
|
|
|
|
|
<p class="form-section-subtitle">可补充模型能力、限制与使用建议,支持 Markdown 实时预览。</p>
|
|
|
|
|
|
|
|
|
|
|
|
@include('admin.partials.markdown-editor', [
|
|
|
|
|
|
'field' => 'description',
|
|
|
|
|
|
'value' => $item->description,
|
|
|
|
|
|
'label' => '模型详情(Markdown)',
|
|
|
|
|
|
'required' => false,
|
|
|
|
|
|
'rows' => 16,
|
|
|
|
|
|
'previewId' => 'model-description-preview',
|
|
|
|
|
|
'hint' => '建议包含适用场景、输入输出限制、定价说明。',
|
|
|
|
|
|
])
|
|
|
|
|
|
</section>
|
2026-02-11 17:28:36 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
|
2026-02-12 17:10:36 +08:00
|
|
|
|
<div class="col-12">
|
|
|
|
|
|
<details class="advanced-panel">
|
|
|
|
|
|
<summary>高级设置(SEO 与补充字段)</summary>
|
2026-02-11 17:28:36 +08:00
|
|
|
|
|
2026-02-12 17:10:36 +08:00
|
|
|
|
<div class="row g-3 mt-2">
|
|
|
|
|
|
<div class="col-md-6">
|
|
|
|
|
|
<label class="form-label">失效说明</label>
|
|
|
|
|
|
<textarea class="form-control" name="stale_note" rows="2">{{ old('stale_note', $item->stale_note) }}</textarea>
|
|
|
|
|
|
</div>
|
2026-02-11 17:28:36 +08:00
|
|
|
|
|
2026-02-12 17:10:36 +08:00
|
|
|
|
<div class="col-md-6">
|
|
|
|
|
|
<label class="form-label">SEO 标题</label>
|
|
|
|
|
|
<input class="form-control" name="seo_title" value="{{ old('seo_title', $item->seo_title) }}">
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="col-md-6">
|
|
|
|
|
|
<label class="form-label">SEO 描述</label>
|
|
|
|
|
|
<input class="form-control" name="seo_description" value="{{ old('seo_description', $item->seo_description) }}">
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="col-md-6">
|
|
|
|
|
|
<label class="form-label">H1</label>
|
|
|
|
|
|
<input class="form-control" name="h1" value="{{ old('h1', $item->h1) }}">
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="col-md-6">
|
|
|
|
|
|
<label class="form-label">Canonical URL</label>
|
|
|
|
|
|
<input class="form-control" name="canonical_url" value="{{ old('canonical_url', $item->canonical_url) }}" placeholder="https://example.com/models/slug">
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</details>
|
|
|
|
|
|
</div>
|
2026-02-11 17:28:36 +08:00
|
|
|
|
|
2026-02-12 17:10:36 +08:00
|
|
|
|
<div class="col-12">
|
|
|
|
|
|
<div class="editor-sticky-actions">
|
|
|
|
|
|
<small class="text-muted">评分字段会参与排序,修改后请核对展示结果。</small>
|
|
|
|
|
|
<button class="btn btn-primary" type="submit">保存模型</button>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2026-02-11 17:28:36 +08:00
|
|
|
|
</form>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
@endsection
|
2026-02-12 17:10:36 +08:00
|
|
|
|
|
|
|
|
|
|
@section('scripts')
|
|
|
|
|
|
@include('admin.partials.modern-form-scripts')
|
|
|
|
|
|
@endsection
|
|
|
|
|
|
|