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

98 lines
3.8 KiB
HTML

{{define "config_preview"}}
{{template "device_nav" .}}
<div class="card">
<div class="section-title">
<div>
<h2>配置预览</h2>
<div class="muted small">基于模板、Profile 和 Overlay 生成完整配置预览;此页面不会下发到设备。</div>
</div>
<a class="btn ghost" href="/ui/devices/{{.Device.DeviceID}}">返回节点详情</a>
</div>
</div>
<div class="card">
<h2>生成配置预览</h2>
{{if .ConfigSources.Root}}<div class="muted small">Media 仓库:<span class="mono">{{.ConfigSources.Root}}</span></div>{{end}}
<form method="post" action="/ui/devices/{{.Device.DeviceID}}/config-preview" style="margin-top:12px">
<div class="row">
<div>
<div class="muted small">模板</div>
<select name="template">
{{range .ConfigSources.Templates}}
<option value="{{.Name}}" {{if eq .Name "workshop_face_shoe_alarm"}}selected{{end}}>{{.Name}}</option>
{{end}}
</select>
</div>
<div>
<div class="muted small">Profile</div>
<select name="profile">
{{range .ConfigSources.Profiles}}
<option value="{{.Name}}" {{if eq .Name "local_3588_test"}}selected{{end}}>{{.Name}}</option>
{{end}}
</select>
</div>
<div>
<div class="muted small">config_id</div>
<input name="config_id" value="preview_{{.Device.DeviceID}}" />
</div>
<div>
<div class="muted small">config_version</div>
<input name="config_version" placeholder="留空自动生成" />
</div>
</div>
<div style="margin-top:12px">
<div class="muted small">Overlay</div>
<div class="actions" style="margin-top:6px">
{{range .ConfigSources.Overlays}}
<label class="btn ghost">
<input type="checkbox" name="overlay" value="{{.Name}}" {{if eq .Name "face_debug"}}checked{{end}} />
{{.Name}}
</label>
{{end}}
</div>
</div>
<div class="actions" style="margin-top:12px">
<button type="submit">生成预览</button>
<button type="button" disabled>上传为候选配置</button>
<button type="button" disabled>应用候选配置</button>
<a class="btn ghost" href="/ui/devices/{{.Device.DeviceID}}">查看当前运行配置</a>
</div>
</form>
</div>
{{if .ConfigPreview}}
<div class="card">
<h2>预览摘要</h2>
<div class="row" style="margin-top:10px">
<div><div class="muted small">配置 ID</div><div class="mono">{{index .ConfigPreview.Metadata "config_id"}}</div></div>
<div><div class="muted small">版本</div><div class="mono">{{index .ConfigPreview.Metadata "config_version"}}</div></div>
<div><div class="muted small">模板</div><div class="mono">{{index .ConfigPreview.Metadata "template"}}</div></div>
<div><div class="muted small">Profile</div><div class="mono">{{index .ConfigPreview.Metadata "profile"}}</div></div>
<div><div class="muted small">大小</div><div class="mono">{{.ConfigPreview.Size}} bytes</div></div>
</div>
<div style="margin-top:10px">
<div class="muted small">SHA256</div>
<div class="mono small">{{.ConfigPreview.Sha256}}</div>
</div>
</div>
<div class="card">
<h2>完整 JSON</h2>
<form method="post" action="/ui/devices/{{.Device.DeviceID}}/config-candidate" class="actions" style="margin-bottom:10px">
<input type="hidden" name="json" value="{{.ConfigPreview.JSON}}" />
<button type="submit">上传为候选配置</button>
<button type="submit" formaction="/ui/devices/{{.Device.DeviceID}}/config-candidate/apply">应用候选配置</button>
<a class="btn ghost" href="/ui/devices/{{.Device.DeviceID}}">查看当前运行配置</a>
</form>
<pre>{{.ConfigPreview.JSON}}</pre>
</div>
{{end}}
{{if .RawText}}
<div class="card">
<h2>上传结果</h2>
<pre>{{.RawText}}</pre>
</div>
{{end}}
{{end}}