137 lines
7.0 KiB
PHP
137 lines
7.0 KiB
PHP
@extends('layouts.admin')
|
||
|
||
@section('title', $item->exists ? '编辑教程' : '新建教程')
|
||
|
||
@section('head')
|
||
@include('admin.partials.modern-form-head')
|
||
@endsection
|
||
|
||
@section('content')
|
||
<div class="card modern-form-card">
|
||
<div class="card-header d-flex justify-content-between align-items-center">
|
||
<h3 class="card-title mb-0">{{ $item->exists ? '编辑教程' : '新建教程' }}</h3>
|
||
@if($item->exists)
|
||
<form method="post" action="{{ route('admin.guides.publish', $item) }}">
|
||
@csrf
|
||
<button class="btn btn-sm btn-success" type="submit">发布</button>
|
||
</form>
|
||
@endif
|
||
</div>
|
||
|
||
<div class="card-body">
|
||
<p class="required-tip"><span class="required-star">*</span> 为必填项</p>
|
||
|
||
<form method="post" action="{{ $submitRoute }}" class="row g-3">
|
||
@csrf
|
||
@if($method !== 'POST') @method($method) @endif
|
||
|
||
<div class="col-12">
|
||
<section class="form-section">
|
||
<h4 class="form-section-title">基础信息</h4>
|
||
<p class="form-section-subtitle">先设定教程标题、难度与摘要,便于读者判断是否适合。</p>
|
||
|
||
<div class="row g-3">
|
||
<div class="col-md-8 field-required">
|
||
<label class="form-label">标题<span class="required-star">*</span></label>
|
||
<input class="form-control" name="title" value="{{ old('title', $item->title) }}" required>
|
||
</div>
|
||
<div class="col-md-4 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>
|
||
|
||
<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 field-required">
|
||
<label class="form-label">难度<span class="required-star">*</span></label>
|
||
<input class="form-control" name="difficulty" value="{{ old('difficulty', $item->difficulty ?: 'beginner') }}" required placeholder="beginner / intermediate / advanced">
|
||
</div>
|
||
<div class="col-md-4 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-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-12 field-required">
|
||
<label class="form-label">摘要<span class="required-star">*</span></label>
|
||
<textarea class="form-control" name="excerpt" rows="2" required>{{ old('excerpt', $item->excerpt) }}</textarea>
|
||
<div class="form-hint">建议概括适用人群、完成收益和学习前提。</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
|
||
<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' => 'body',
|
||
'value' => $item->body,
|
||
'label' => '正文内容(Markdown)',
|
||
'required' => true,
|
||
'rows' => 18,
|
||
'minlength' => 100,
|
||
'previewId' => 'guide-body-preview',
|
||
'hint' => '后端要求正文不少于 100 字符,建议用二级标题组织步骤。',
|
||
])
|
||
</section>
|
||
</div>
|
||
|
||
<div class="col-12">
|
||
<details class="advanced-panel">
|
||
<summary>高级设置(SEO 字段)</summary>
|
||
|
||
<div class="row g-3 mt-2">
|
||
<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/guides/slug">
|
||
</div>
|
||
</div>
|
||
</details>
|
||
</div>
|
||
|
||
<div class="col-12">
|
||
<div class="editor-sticky-actions">
|
||
<small class="text-muted">建议保存前先检查预览中的标题层级与代码块格式。</small>
|
||
<button class="btn btn-primary" type="submit">保存教程</button>
|
||
</div>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
@endsection
|
||
|
||
@section('scripts')
|
||
@include('admin.partials.modern-form-scripts')
|
||
@endsection
|
||
|