3588AdminBackend/internal/web/ui/templates/assets.html

144 lines
5.2 KiB
HTML

{{define "asset_tabs"}}
<div class="card-tabs asset-tab-wrap">
<ul class="nav nav-tabs asset-tabs" role="tablist" aria-label="配置管理页面">
<li class="nav-item" role="presentation">
<a href="/ui/assets" class="nav-link{{if eq .AssetTab "overview"}} active{{end}}" role="tab" {{if eq .AssetTab "overview"}}aria-selected="true"{{else}}aria-selected="false"{{end}}>总览</a>
</li>
<li class="nav-item" role="presentation">
<a href="/ui/assets/templates" class="nav-link{{if eq .AssetTab "templates"}} active{{end}}" role="tab" {{if eq .AssetTab "templates"}}aria-selected="true"{{else}}aria-selected="false"{{end}}>模板</a>
</li>
<li class="nav-item" role="presentation">
<a href="/ui/assets/profiles" class="nav-link{{if eq .AssetTab "profiles"}} active{{end}}" role="tab" {{if eq .AssetTab "profiles"}}aria-selected="true"{{else}}aria-selected="false"{{end}}>业务配置</a>
</li>
<li class="nav-item" role="presentation">
<a href="/ui/assets/overlays" class="nav-link{{if eq .AssetTab "overlays"}} active{{end}}" role="tab" {{if eq .AssetTab "overlays"}}aria-selected="true"{{else}}aria-selected="false"{{end}}>叠加项</a>
</li>
</ul>
<div class="tab-content">
<div class="card tab-pane active show asset-tab-card">
<div class="card-body asset-panel-body">
{{end}}
{{define "asset_tabs_end"}}
</div>
</div>
</div>
{{end}}
{{define "assets"}}
{{template "asset_tabs" .}}
<div class="stats">
<div class="stat accent-teal">
<div class="k metric-label">{{icon "template"}}<span>模板</span></div>
<div class="v">{{len .AssetTemplates}}</div>
<div class="hint">{{if .ConfigSources.Root}}{{.ConfigSources.Root}}{{else}}未定位到配置仓库{{end}}</div>
</div>
<div class="stat accent-green">
<div class="k metric-label">{{icon "profile"}}<span>业务配置</span></div>
<div class="v">{{len .AssetProfiles}}</div>
<div class="hint">业务场景与通道参数</div>
</div>
<div class="stat accent-slate">
<div class="k metric-label">{{icon "overlay"}}<span>叠加项</span></div>
<div class="v">{{len .AssetOverlays}}</div>
<div class="hint">调试与敏感度变化</div>
</div>
<div class="stat accent-amber">
<div class="k metric-label">{{icon "release"}}<span>视频通道</span></div>
<div class="v">{{.AssetInstanceCount}}</div>
<div class="hint">业务配置中定义的通道数</div>
</div>
</div>
<div class="card">
<div class="section-title">
<div>
<h2 class="title-with-icon">{{icon "assets"}}<span>资产操作</span></h2>
</div>
<form method="post" action="/ui/assets/import">
<button type="submit" class="btn secondary">{{icon "apply"}}<span>导入现有 JSON</span></button>
</form>
</div>
</div>
<div class="quad-grid">
<div class="card">
<div class="section-title">
<div>
<h2 class="title-with-icon">{{icon "template"}}<span>模板</span></h2>
</div>
</div>
<div class="asset-list">
{{range .AssetTemplates}}
<a class="asset-row asset-link" href="/ui/assets/templates/{{.Name}}">
<span class="mono">{{.Name}}</span>
<span class="muted small">{{.NodeCount}}节点 / {{.EdgeCount}}连线</span>
</a>
{{else}}
<div class="empty-state compact">
<div class="empty-title">还没有模板</div>
</div>
{{end}}
</div>
</div>
<div class="card">
<div class="section-title">
<div>
<h2 class="title-with-icon">{{icon "profile"}}<span>业务配置</span></h2>
</div>
</div>
<div class="asset-list">
{{range .AssetProfiles}}
<a class="asset-row asset-link" href="/ui/assets/profiles/{{.Name}}">
<span>{{.Name}}</span>
<span class="muted small">{{len .Instances}} 路通道</span>
</a>
{{else}}
<div class="empty-state compact">
<div class="empty-title">还没有业务配置</div>
</div>
{{end}}
</div>
</div>
<div class="card">
<div class="section-title">
<div>
<h2 class="title-with-icon">{{icon "overlay"}}<span>叠加项</span></h2>
</div>
</div>
<div class="asset-list">
{{range .AssetOverlays}}
<a class="asset-row asset-link" href="/ui/assets/overlays/{{.Name}}">
<span>{{.Name}}</span>
<span class="muted small">{{.OverrideTargetNum}} 个目标</span>
</a>
{{else}}
<div class="empty-state compact">
<div class="empty-title">还没有叠加项</div>
</div>
{{end}}
</div>
</div>
<div class="card">
<div class="section-title">
<div>
<h2 class="title-with-icon">{{icon "config"}}<span>资产说明</span></h2>
</div>
</div>
<div class="info-list compact-list">
<div><span>模板</span><strong>定义处理链与共享服务接入</strong></div>
<div><span>业务配置</span><strong>定义站点、视频源、输出流与通道参数</strong></div>
<div><span>叠加项</span><strong>定义调试、敏感度和运行模式差异</strong></div>
<div><span>原则</span><strong>不回到手工维护多份完整 JSON</strong></div>
</div>
</div>
</div>
{{if .Error}}<div class="error">{{.Error}}</div>{{end}}
{{template "asset_tabs_end" .}}
{{end}}