Windows inventory: add osInfo fallback from sysinfo; portal detail spacing + subcategory

This commit is contained in:
Esdras Renan 2025-10-14 23:15:11 -03:00
parent 2a4bc486cf
commit 328415d9e9
2 changed files with 17 additions and 2 deletions

View file

@ -294,7 +294,21 @@ fn build_inventory_metadata(system: &System) -> serde_json::Value {
#[cfg(target_os = "windows")] #[cfg(target_os = "windows")]
{ {
let extended = collect_windows_extended(); let mut extended = collect_windows_extended();
// Fallback: se osInfo vier vazio, preenche com dados do sysinfo
if let Some(win) = extended.get_mut("windows").and_then(|v| v.as_object_mut()) {
let needs_os_info = match win.get("osInfo") {
Some(v) => v.as_object().map(|m| m.is_empty()).unwrap_or(true),
None => true,
};
if needs_os_info {
let mut osmap = serde_json::Map::new();
if let Some(name) = System::name() { osmap.insert("ProductName".into(), json!(name)); }
if let Some(ver) = System::os_version() { osmap.insert("Version".into(), json!(ver)); }
if let Some(build) = System::kernel_version() { osmap.insert("BuildNumber".into(), json!(build)); }
win.insert("osInfo".into(), serde_json::Value::Object(osmap));
}
}
if let Some(obj) = inventory.as_object_mut() { if let Some(obj) = inventory.as_object_mut() {
obj.insert("extended".into(), extended); obj.insert("extended".into(), extended);
} }

View file

@ -169,7 +169,7 @@ export function PortalTicketDetail({ ticketId }: PortalTicketDetailProps) {
</CardHeader> </CardHeader>
<CardContent className="grid gap-4 border-t border-slate-100 px-5 py-5 text-sm text-neutral-700 sm:grid-cols-2"> <CardContent className="grid gap-4 border-t border-slate-100 px-5 py-5 text-sm text-neutral-700 sm:grid-cols-2">
{isCustomer ? null : <DetailItem label="Fila" value={ticket.queue ?? "Sem fila"} />} {isCustomer ? null : <DetailItem label="Fila" value={ticket.queue ?? "Sem fila"} />}
<DetailItem label="Categoria" value={ticket.category?.name ?? "Não classificada"} /> <DetailItem label="Categoria" value={ticket.category?.name ?? "Não classificada"} />`n <DetailItem label="Subcategoria" value={ticket.subcategory?.name ?? "—"} />
<DetailItem label="Solicitante" value={ticket.requester.name} subtitle={ticket.requester.email} /> <DetailItem label="Solicitante" value={ticket.requester.name} subtitle={ticket.requester.email} />
{ticket.assignee ? ( {ticket.assignee ? (
<DetailItem label="Responsável" value={ticket.assignee.name} /> <DetailItem label="Responsável" value={ticket.assignee.name} />
@ -314,3 +314,4 @@ function DetailItem({ label, value, subtitle }: DetailItemProps) {