205 lines
7.0 KiB
HTML
205 lines
7.0 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/video-sources" class="nav-link{{if eq .AssetTab "video-sources"}} active{{end}}" role="tab" {{if eq .AssetTab "video-sources"}}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/integrations" class="nav-link{{if eq .AssetTab "integrations"}} active{{end}}" role="tab" {{if eq .AssetTab "integrations"}}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" .}}
|
|
|
|
{{if eq .AssetTab "integrations"}}
|
|
<div class="card">
|
|
<div class="section-title">
|
|
<div>
|
|
<h2 class="title-with-icon">{{icon "service"}}<span>第三方服务列表</span></h2>
|
|
</div>
|
|
</div>
|
|
<div class="table-wrap">
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>服务名称</th>
|
|
<th>服务类型</th>
|
|
<th>描述</th>
|
|
<th>地址摘要</th>
|
|
<th>状态</th>
|
|
<th>引用数量</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{{range .AssetIntegrations}}
|
|
<tr>
|
|
<td class="mono">{{.Name}}</td>
|
|
<td>{{.TypeLabel}}</td>
|
|
<td>{{if .Description}}{{.Description}}{{else}}-{{end}}</td>
|
|
<td class="mono">{{if .AddressSummary}}{{.AddressSummary}}{{else}}-{{end}}</td>
|
|
<td>{{if .Enabled}}启用{{else}}停用{{end}}</td>
|
|
<td>{{.RefCount}}</td>
|
|
</tr>
|
|
{{else}}
|
|
<tr><td colspan="6"><div class="empty-state compact"><div class="empty-title">还没有第三方服务</div></div></td></tr>
|
|
{{end}}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
{{else if eq .AssetTab "video-sources"}}
|
|
<div class="card">
|
|
<div class="section-title">
|
|
<div>
|
|
<h2 class="title-with-icon">{{icon "device"}}<span>视频源</span></h2>
|
|
</div>
|
|
</div>
|
|
<div class="asset-list">
|
|
{{range .AssetProfiles}}
|
|
{{range .Instances}}
|
|
<div class="asset-row">
|
|
<span class="mono">{{if .DisplayName}}{{.DisplayName}}{{else}}{{.Name}}{{end}}</span>
|
|
<span class="muted small">{{if .RTSPURL}}{{.RTSPURL}}{{else}}未配置 RTSP{{end}}</span>
|
|
</div>
|
|
{{end}}
|
|
{{else}}
|
|
<div class="empty-state compact">
|
|
<div class="empty-title">还没有视频源</div>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
{{else}}
|
|
<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 "device"}}<span>视频源</span></div>
|
|
<div class="v">{{.AssetInstanceCount}}</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 "service"}}<span>第三方服务</span></div>
|
|
<div class="v">{{len .AssetIntegrations}}</div>
|
|
<div class="hint">告警、对象存储和认证服务</div>
|
|
</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 "device"}}<span>视频源</span></h2>
|
|
</div>
|
|
</div>
|
|
<div class="asset-list">
|
|
{{range .AssetProfiles}}
|
|
{{range .Instances}}
|
|
<div class="asset-row">
|
|
<span class="mono">{{if .DisplayName}}{{.DisplayName}}{{else}}{{.Name}}{{end}}</span>
|
|
<span class="muted small">{{if .RTSPURL}}{{.RTSPURL}}{{else}}未配置 RTSP{{end}}</span>
|
|
</div>
|
|
{{end}}
|
|
{{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 "service"}}<span>第三方服务</span></h2>
|
|
</div>
|
|
</div>
|
|
<div class="asset-list">
|
|
{{range .AssetIntegrations}}
|
|
<a class="asset-row asset-link" href="/ui/assets/integrations">
|
|
<span>{{.Name}}</span>
|
|
<span class="muted small">{{if .AddressSummary}}{{.AddressSummary}}{{else}}{{.TypeLabel}}{{end}}</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>
|
|
{{end}}
|
|
|
|
{{if .Error}}<div class="error">{{.Error}}</div>{{end}}
|
|
{{template "asset_tabs_end" .}}
|
|
{{end}}
|