You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
3.1 KiB
59 lines
3.1 KiB
{% extends "base.html" %}
|
|
|
|
{% block title %}HappyWedding{% endblock %}
|
|
|
|
{% block content %}
|
|
<section class="mb-5 flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between">
|
|
<div class="flex items-center gap-2">
|
|
<h2 class="page-title">审计详情</h2>
|
|
<span class="status-badge status-badge-muted">{{ log.action_type }}</span>
|
|
</div>
|
|
<a href="{{ url_for('admin.audit_logs') }}" class="btn btn-secondary shrink-0">返回日志列表</a>
|
|
</section>
|
|
|
|
<section class="card mb-5 shadow-soft">
|
|
<div class="card-body">
|
|
<dl class="grid grid-cols-1 gap-3 text-sm sm:grid-cols-2 lg:grid-cols-3">
|
|
<div>
|
|
<dt class="text-xs font-medium uppercase tracking-wide text-neutral-500 dark:text-neutral-400">时间</dt>
|
|
<dd class="mt-1 text-neutral-800 dark:text-neutral-100">{{ log.created_at.strftime('%Y-%m-%d %H:%M:%S') if log.created_at else '-' }}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-xs font-medium uppercase tracking-wide text-neutral-500 dark:text-neutral-400">操作人</dt>
|
|
<dd class="mt-1 text-neutral-800 dark:text-neutral-100">{{ log.actor_display_name or log.actor_username }}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-xs font-medium uppercase tracking-wide text-neutral-500 dark:text-neutral-400">动作</dt>
|
|
<dd class="mt-1 text-neutral-800 dark:text-neutral-100">{{ log.action_type }}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-xs font-medium uppercase tracking-wide text-neutral-500 dark:text-neutral-400">对象</dt>
|
|
<dd class="mt-1 text-neutral-800 dark:text-neutral-100">{{ log.target_type }}{% if log.target_id %}#{{ log.target_id }}{% endif %}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-xs font-medium uppercase tracking-wide text-neutral-500 dark:text-neutral-400">请求</dt>
|
|
<dd class="mt-1 text-neutral-800 dark:text-neutral-100">{{ log.request_method or '-' }} {{ log.request_path or '' }}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-xs font-medium uppercase tracking-wide text-neutral-500 dark:text-neutral-400">IP 地址</dt>
|
|
<dd class="mt-1 text-neutral-800 dark:text-neutral-100">{{ log.ip_address or '-' }}</dd>
|
|
</div>
|
|
</dl>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="grid gap-4 lg:grid-cols-2">
|
|
<div class="card shadow-soft">
|
|
<div class="card-body">
|
|
<h3 class="mb-3 text-sm font-medium text-neutral-700 dark:text-neutral-200">Before 快照</h3>
|
|
<pre class="overflow-x-auto rounded-lg bg-neutral-50 p-3 text-xs text-neutral-700 dark:bg-neutral-900 dark:text-neutral-300">{{ log.before_data_json | tojson(indent=2) if log.before_data_json is not none else 'null' }}</pre>
|
|
</div>
|
|
</div>
|
|
<div class="card shadow-soft">
|
|
<div class="card-body">
|
|
<h3 class="mb-3 text-sm font-medium text-neutral-700 dark:text-neutral-200">After 快照</h3>
|
|
<pre class="overflow-x-auto rounded-lg bg-neutral-50 p-3 text-xs text-neutral-700 dark:bg-neutral-900 dark:text-neutral-300">{{ log.after_data_json | tojson(indent=2) if log.after_data_json is not none else 'null' }}</pre>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
{% endblock %}
|
|
|