Files

157 lines
8.0 KiB
HTML

{% extends "assetapp/base.html" %}
{% block title %}{{ asset.asset_number }} - 资产详情{% endblock %}
{% block content %}
<div class="d-flex justify-content-between align-items-center mb-4">
<div class="d-flex align-items-center">
<a href="{% url 'asset_list' %}" class="btn btn-outline-secondary btn-sm me-3">
<i class="bi bi-arrow-left"></i> 返回
</a>
<h4 class="mb-0"><i class="bi bi-hdd me-2"></i>{{ asset.asset_number }}</h4>
<span class="badge ms-3
{% if asset.status == 'in_use' %}bg-success
{% elif asset.status == 'idle' %}bg-warning text-dark
{% elif asset.status == 'maintenance' %}bg-info
{% else %}bg-danger{% endif %}">
{{ asset.get_status_display }}
</span>
</div>
<div>
<a href="{% url 'asset_update' asset.pk %}" class="btn btn-warning btn-sm">
<i class="bi bi-pencil me-1"></i>编辑
</a>
<a href="{% url 'asset_delete' asset.pk %}" class="btn btn-danger btn-sm">
<i class="bi bi-trash me-1"></i>删除
</a>
</div>
</div>
<div class="row g-3">
<!-- 基本信息 -->
<div class="col-md-6">
<div class="card card-dark">
<div class="card-header"><i class="bi bi-info-circle me-2"></i>基本信息</div>
<div class="card-body">
<table class="table table-dark table-borderless mb-0 detail-table">
<tr><td class="text-muted" width="120">设备名称</td><td>{{ asset.name }}</td></tr>
<tr><td class="text-muted">资产编号</td><td><code>{{ asset.asset_number }}</code></td></tr>
<tr><td class="text-muted">设备分类</td><td><span class="badge bg-secondary">{{ asset.category.name }}</span></td></tr>
<tr><td class="text-muted">品牌</td><td>{{ asset.brand|default:"-" }}</td></tr>
<tr><td class="text-muted">型号</td><td>{{ asset.model|default:"-" }}</td></tr>
<tr><td class="text-muted">资产面值</td><td>{% if asset.asset_value %}¥{{ asset.asset_value }}{% else %}-{% endif %}</td></tr>
<tr><td class="text-muted">序列号</td><td><code>{{ asset.serial_number|default:"-" }}</code></td></tr>
</table>
</div>
</div>
</div>
<!-- 位置信息 -->
<div class="col-md-6">
<div class="card card-dark">
<div class="card-header"><i class="bi bi-geo-alt me-2"></i>位置与网络</div>
<div class="card-body">
<table class="table table-dark table-borderless mb-0 detail-table">
<tr><td class="text-muted" width="120">机房</td><td>{{ asset.location|default:"-" }}</td></tr>
<tr><td class="text-muted">机柜</td><td>{{ asset.cabinet|default:"-" }}</td></tr>
<tr><td class="text-muted">机柜位置</td><td>{{ asset.cabinet_position|default:"-" }}</td></tr>
<tr><td class="text-muted">BMC地址</td><td><code>{{ asset.bmc_address|default:"-" }}</code></td></tr>
<tr><td class="text-muted">IP地址</td><td><code>{{ asset.ip_address|default:"-" }}</code></td></tr>
<tr><td class="text-muted">显卡类型</td><td>{{ asset.gpu_type|default:"-" }}</td></tr>
<tr><td class="text-muted">卡数</td><td>{{ asset.gpu_count|default:"-" }}</td></tr>
<tr><td class="text-muted">负责人</td><td>{{ asset.responsible_person|default:"-" }}</td></tr>
<tr><td class="text-muted">使用部门</td><td>{{ asset.department|default:"-" }}</td></tr>
<tr><td class="text-muted">使用人</td><td>{{ asset.user|default:"-" }}</td></tr>
<tr><td class="text-muted">业务类型</td><td>{{ asset.business_type|default:"-" }}</td></tr>
<tr><td class="text-muted">状态</td>
<td><span class="badge
{% if asset.status == 'in_use' %}bg-success
{% elif asset.status == 'idle' %}bg-warning text-dark
{% elif asset.status == 'maintenance' %}bg-info
{% else %}bg-danger{% endif %}">
{{ asset.get_status_display }}
</span></td>
</tr>
</table>
</div>
</div>
</div>
<!-- 采购与质保 -->
<div class="col-md-6">
<div class="card card-dark">
<div class="card-header"><i class="bi bi-receipt me-2"></i>采购与质保</div>
<div class="card-body">
<table class="table table-dark table-borderless mb-0 detail-table">
<tr><td class="text-muted" width="120">采购日期</td><td>{{ asset.purchase_date|default:"-" }}</td></tr>
<tr>
<td class="text-muted">质保到期</td>
<td>
{{ asset.warranty_expire|default:"-" }}
{% if asset.warranty_expire %}
{% if asset.is_expired %}
<span class="badge bg-danger ms-2">已过保</span>
{% elif asset.is_expiring_soon %}
<span class="badge bg-warning text-dark ms-2">即将过保</span>
{% endif %}
{% endif %}
</td>
</tr>
<tr><td class="text-muted">供应商</td><td>{{ asset.supplier|default:"-" }}</td></tr>
</table>
</div>
</div>
</div>
<!-- 备注 -->
<div class="col-md-6">
<div class="card card-dark">
<div class="card-header"><i class="bi bi-sticky me-2"></i>备注</div>
<div class="card-body">
<p class="mb-0">{{ asset.remark|default:"暂无备注"|linebreaksbr }}</p>
<hr class="border-secondary">
<small class="text-muted">
创建人:{{ asset.created_by|default:"-" }} |
创建时间:{{ asset.created_at|date:"Y-m-d H:i" }} |
更新时间:{{ asset.updated_at|date:"Y-m-d H:i" }}
</small>
</div>
</div>
</div>
</div>
<!-- 变更记录 -->
<div class="card card-dark mt-3">
<div class="card-header"><i class="bi bi-clock-history me-2"></i>变更记录</div>
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-dark table-hover mb-0">
<thead>
<tr><th>时间</th><th>操作</th><th>字段</th><th>旧值</th><th>新值</th><th>操作人</th></tr>
</thead>
<tbody>
{% for log in change_logs %}
<tr>
<td>{{ log.created_at|date:"Y-m-d H:i" }}</td>
<td><span class="badge
{% if log.action == 'create' %}bg-success
{% elif log.action == 'update' %}bg-primary
{% elif log.action == 'delete' %}bg-danger
{% elif log.action == 'import' %}bg-info
{% else %}bg-secondary{% endif %}">
{{ log.get_action_display }}</span></td>
<td>{{ log.field_name|default:"-" }}</td>
<td><code>{{ log.old_value|default:"-" }}</code></td>
<td><code>{{ log.new_value|default:"-" }}</code></td>
<td>{{ log.operator|default:"-" }}</td>
</tr>
{% empty %}
<tr><td colspan="6" class="text-center text-light opacity-75 py-3">暂无变更记录</td></tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
{% endblock %}