Tstore/resources/views/admin/packages/show.blade.php

180 lines
12 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@extends('admin.layout', [
'title' => 'Tstore Admin · ' . $package->name,
'pageTitle' => $package->name,
'pageSubtitle' => ($package->type === 'plugin' ? '插件' : ($package->type === 'theme' ? '主题' : $package->type)) . ' · ' . $package->slug,
])
@php
$entityLabel = $package->type === 'plugin' ? '插件' : ($package->type === 'theme' ? '主题' : '扩展');
@endphp
@section('content')
<div class="grid">
<div class="split">
<div class="panel">
<div class="section-title">
<div>
<h2>{{ $entityLabel }}信息</h2>
<p>编辑基础元数据、分类、图标与发布状态。</p>
</div>
</div>
<form method="post" action="{{ route('webadmin.packages.update', [$package->type, $package->slug]) }}" class="grid">
@csrf @method('PUT')
<div class="form-grid">
<div class="field"><label>类型</label><input class="input" name="type" value="{{ $package->type }}" readonly></div>
<div class="field"><label>Slug</label><input class="input" name="slug" value="{{ $package->slug }}" readonly></div>
<div class="field"><label>名称</label><input class="input" name="name" value="{{ $package->name }}" required></div>
<div class="field"><label>状态</label>
<select class="select" name="status">
@foreach (['draft','published','hidden','deprecated'] as $status)
<option value="{{ $status }}" @selected($package->status === $status)>{{ $status }}</option>
@endforeach
</select>
</div>
<div class="field"><label>作者</label><input class="input" name="author" value="{{ $package->author }}"></div>
<div class="field"><label>License</label><input class="input" name="license" value="{{ $package->license }}"></div>
<div class="field"><label>主页</label><input class="input" name="homepage" value="{{ $package->homepage }}"></div>
<div class="field"><label>图标 URL</label><input class="input" name="icon_url" value="{{ $package->icon_url }}"></div>
</div>
<div class="field"><label>摘要</label><input class="input" name="summary" value="{{ $package->summary }}"></div>
<div class="field"><label>描述</label><textarea name="description">{{ $package->description }}</textarea></div>
<div class="field"><label>分类 slug多个用逗号或空格分隔</label><input class="input" name="categories_text" value="{{ $package->categories->pluck('slug')->implode(', ') }}"></div>
<div class="form-actions">
<button class="btn" type="submit">保存{{ $entityLabel }}信息</button>
<a class="btn secondary" href="{{ route('webadmin.packages', ['type' => $package->type]) }}">返回{{ $entityLabel }}列表</a>
</div>
</form>
</div>
<div class="panel">
<div class="section-title">
<div>
<h2>当前状态</h2>
<p>快速查看分类、版本、下载与截图信息。</p>
</div>
</div>
<div class="list">
<div class="mini-card"><h3>状态</h3><div class="tags"><span class="chip {{ $package->status === 'published' ? 'ok' : 'warn' }}">{{ $package->status }}</span><span class="chip">下载 {{ $package->download_count }}</span><span class="chip {{ $package->is_featured ? 'ok' : 'muted' }}">{{ $package->is_featured ? '推荐' : '普通' }}</span></div></div>
<div class="mini-card"><h3>分类</h3><div class="tags">@forelse($package->categories as $category)<span class="chip">{{ $category->name }}</span>@empty<span class="muted">尚未关联分类</span>@endforelse</div></div>
<div class="mini-card"><h3>截图</h3><div class="muted">{{ $package->screenshots->count() }} </div></div>
<div class="mini-card"><h3>最新版本</h3><div class="muted">{{ $package->latest_version ?: '尚未发布' }}</div></div>
</div>
</div>
</div>
<div class="split">
<div class="panel">
<div class="section-title">
<div>
<h2>版本记录</h2>
<p>查看版本状态,也可以直接删除历史版本。</p>
</div>
</div>
<div class="table-wrap">
<table class="table">
<thead>
<tr>
<th>版本</th>
<th>稳定版</th>
<th>最新</th>
<th>兼容性</th>
<th>发布时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
@forelse ($package->versions as $version)
<tr>
<td>
<strong>{{ $version->version }}</strong>
<div class="muted">{{ $version->package_url ?: '未设置 package_url' }}</div>
</td>
<td><span class="chip {{ $version->is_stable ? 'ok' : 'warn' }}">{{ $version->is_stable ? '是' : '否' }}</span></td>
<td><span class="chip {{ $version->is_latest ? 'ok' : 'muted' }}">{{ $version->is_latest ? '最新' : '历史' }}</span></td>
<td>
<div class="muted">Typecho {{ $version->typecho_min ?: '-' }} ~ {{ $version->typecho_max ?: '-' }}</div>
<div class="muted">PHP {{ $version->php_min ?: '-' }} ~ {{ $version->php_max ?: '-' }}</div>
</td>
<td>{{ optional($version->published_at)->format('Y-m-d H:i') }}</td>
<td>
<form method="post" action="{{ route('webadmin.packages.versions.destroy', [$package->type, $package->slug, $version->id]) }}" onsubmit="return confirm('确认删除这个版本吗?');">
@csrf @method('DELETE')
<button class="btn danger small" type="submit">删除</button>
</form>
</td>
</tr>
@empty
<tr><td colspan="6"><div class="empty">当前还没有版本记录。</div></td></tr>
@endforelse
</tbody>
</table>
</div>
</div>
<div class="panel">
<div class="section-title">
<div>
<h2>zip 上传发布</h2>
<p>优先读取 zip 根目录的 manifest.json如果没有 manifest.json则使用下方手动填写的版本和兼容性字段。</p>
</div>
</div>
<form method="post" action="{{ route('webadmin.packages.publish', [$package->type, $package->slug]) }}" class="grid" enctype="multipart/form-data">
@csrf
<div class="field"><label>zip 文件</label><input class="input" type="file" name="package_file" accept=".zip" required></div>
<div class="field"><label>版本号(无 manifest 时必填)</label><input class="input" name="version" value="{{ old('version') }}" placeholder="1.0.0"></div>
<div class="field"><label>发布说明(可选)</label><textarea name="changelog" placeholder="补充这次发布说明">{{ old('changelog') }}</textarea></div>
<div class="form-grid">
<div class="field"><label>Typecho Min</label><input class="input" name="typecho_min" value="{{ old('typecho_min', '1.2.0') }}" placeholder="1.2.0"></div>
<div class="field"><label>Typecho Max</label><input class="input" name="typecho_max" value="{{ old('typecho_max') }}" placeholder="1.3.*"></div>
<div class="field"><label>PHP Min</label><input class="input" name="php_min" value="{{ old('php_min', '7.4') }}" placeholder="7.4"></div>
<div class="field"><label>PHP Max</label><input class="input" name="php_max" value="{{ old('php_max') }}" placeholder="8.3"></div>
<div class="field"><label>PHP Extensions</label><input class="input" name="php_extensions" value="{{ is_array(old('php_extensions')) ? implode(',', old('php_extensions')) : old('php_extensions') }}" placeholder="curl,json"></div>
<div class="field"><label>发布时间(可选)</label><input class="input" type="datetime-local" name="published_at" value="{{ old('published_at') }}"></div>
</div>
<div class="form-grid">
<div class="field"><label>发布选项</label>
<div class="tags">
<label><input type="checkbox" name="is_stable" value="1" @checked(old('is_stable', 1))> 设为稳定版</label>
<label><input type="checkbox" name="mark_as_latest" value="1" @checked(old('mark_as_latest', 1))> 设为最新</label>
</div>
</div>
</div>
<div class="form-actions"><button class="btn" type="submit">上传并发布</button></div>
</form>
</div>
</div>
<div class="panel">
<div class="section-title">
<div>
<h2>手动添加版本</h2>
<p>调试阶段可以快速手动录入版本元数据。</p>
</div>
</div>
<form method="post" action="{{ route('webadmin.packages.versions.store', [$package->type, $package->slug]) }}" class="grid">
@csrf
<div class="form-grid">
<div class="field"><label>版本号</label><input class="input" name="version" placeholder="1.0.0" required></div>
<div class="field"><label>发布时间</label><input class="input" type="datetime-local" name="published_at"></div>
<div class="field"><label>Typecho Min</label><input class="input" name="typecho_min" placeholder="1.2.0"></div>
<div class="field"><label>Typecho Max</label><input class="input" name="typecho_max" placeholder="1.3.*"></div>
<div class="field"><label>PHP Min</label><input class="input" name="php_min" placeholder="7.4"></div>
<div class="field"><label>PHP Max</label><input class="input" name="php_max" placeholder="8.3"></div>
<div class="field"><label>Package URL</label><input class="input" name="package_url" placeholder="https://..."></div>
<div class="field"><label>Size</label><input class="input" name="package_size" type="number" placeholder="238000"></div>
<div class="field"><label>SHA256</label><input class="input" name="sha256" placeholder="可选,默认会补 64 位 0"></div>
<div class="field"><label>PHP Extensions</label><input class="input" name="php_extensions" placeholder="curl,json"></div>
</div>
<div class="field"><label>发布说明</label><textarea name="changelog" placeholder="输入更新内容"></textarea></div>
<div class="form-grid">
<label><input type="checkbox" name="is_stable" value="1"> 设为稳定版</label>
<label><input type="checkbox" name="is_latest" value="1"> 设为最新版本</label>
</div>
<div class="form-actions">
<button class="btn" type="submit">添加版本</button>
</div>
</form>
</div>
</div>
@endsection