feat(ui): 重构注册审核平台原型界面

This commit is contained in:
2026-06-03 08:41:48 +08:00
parent 77166b5cd3
commit b2c1da3f02
24 changed files with 2563 additions and 536 deletions

View File

@@ -1,54 +1,108 @@
{% extends "base.html" %}
{% block title %}文中心{% endblock %}
{% block title %}文中心{% endblock %}
{% block content %}
<header class="page-header">
<span class="eyebrow">知识库资料</span>
<h1 class="page-title">中心</h1>
<p class="page-lead">上传题目材料后,可以在这里管理文件状态,并手动触发入库</p>
<p style="margin-top: 14px;"><a class="button button-primary" href="{% url 'documents:upload' %}">上传新文件</a></p>
</header>
<section class="page-header">
<span class="eyebrow">Documents</span>
<h1 class="page-title">中心</h1>
<p class="page-lead">上传资料、查看状态、执行入库。页面只保留最常用操作</p>
<div class="button-row">
<a class="button button-primary" href="{% url 'documents:upload' %}">上传文件</a>
</div>
</section>
<article class="panel">
<table class="kv-table">
<thead>
<tr>
<th>文件名</th>
<th>场景</th>
<th>类型</th>
<th>大小</th>
<th>状态</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for document in documents %}
<section class="metric-grid">
<article class="metric-card">
<div class="metric-label">文件总数</div>
<div class="metric-value">{{ status_counts.total }}</div>
</article>
<article class="metric-card">
<div class="metric-label">已完成入库</div>
<div class="metric-value">{{ status_counts.indexed }}</div>
</article>
<article class="metric-card">
<div class="metric-label">待入库</div>
<div class="metric-value">{{ status_counts.uploaded }}</div>
</article>
<article class="metric-card">
<div class="metric-label">失败</div>
<div class="metric-value">{{ status_counts.failed }}</div>
</article>
</section>
<section class="panel">
<div class="section-heading">
<div>
<h2 class="section-title">异常提示</h2>
<p class="section-copy">只保留需要处理的异常。</p>
</div>
</div>
<ul class="risk-list">
{% for item in exception_items %}
<li class="risk-item">
<strong>{{ item.title }}</strong>
<div class="muted">{{ item.detail }}</div>
</li>
{% endfor %}
</ul>
</section>
<section class="panel">
<div class="section-heading">
<div>
<h2 class="section-title">资料目录总览</h2>
<p class="section-copy">页面下方保留真实文件记录与手动入库动作,保证演示原型仍基于当前系统能力运行。</p>
</div>
</div>
<div class="table-wrap">
<table class="data-table">
<thead>
<tr>
<td>{{ document.original_name }}</td>
<td>{{ document.scenario_id }}</td>
<td>{{ document.file_type }}</td>
<td>{{ document.size }}</td>
<td>{{ document.get_status_display_text }}</td>
<td>
{% if document.status != "indexed" %}
<form action="{% url 'documents:index' document.id %}" method="post">
{% csrf_token %}
<button type="submit">执行入库</button>
</form>
{% else %}
<span class="status status-success">已可用于检索</span>
{% endif %}
{% if document.error_message %}
<pre class="code-block" style="margin-top: 10px;">{{ document.error_message }}</pre>
{% endif %}
<p class="muted" style="margin-top: 10px;">上传时间:{{ document.created_at|date:"Y-m-d H:i" }}</p>
</td>
<th>文件名</th>
<th>场景</th>
<th>类型</th>
<th>大小</th>
<th>状态</th>
<th>操作与备注</th>
</tr>
{% empty %}
<tr><td colspan="6">暂无文件,请先上传题目材料。</td></tr>
{% endfor %}
</tbody>
</table>
</article>
</thead>
<tbody>
{% for document in documents %}
<tr>
<td>{{ document.original_name }}</td>
<td>{{ document.scenario_id }}</td>
<td>{{ document.file_type }}</td>
<td>{{ document.size }}</td>
<td>
<span class="pill {% if document.status == 'indexed' %}pill-success{% elif document.status == 'failed' %}pill-danger{% else %}pill-signal{% endif %}">
{{ document.get_status_display_text }}
</span>
</td>
<td>
<div class="stack">
{% if document.status != "indexed" %}
<form action="{% url 'documents:index' document.id %}" method="post">
{% csrf_token %}
<button type="submit">执行入库</button>
</form>
{% else %}
<span class="status status-success">已可参与检索与审核</span>
{% endif %}
{% if document.error_message %}
<pre class="code-block">{{ document.error_message }}</pre>
{% endif %}
<span class="muted">上传时间:{{ document.created_at|date:"Y-m-d H:i" }}</span>
</div>
</td>
</tr>
{% empty %}
<tr>
<td colspan="6">暂无文件,请先导入申报资料或法规原文。</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</section>
{% endblock %}

View File

@@ -1,38 +1,63 @@
{% extends "base.html" %}
{% block title %}上传文件{% endblock %}
{% block title %}导入资料{% endblock %}
{% block content %}
<header class="page-header">
<span class="eyebrow">文件上传</span>
<h1 class="page-title">上传题目材料或知识库文档</h1>
<p class="page-lead">支持 `.txt`、`.md`、`.pdf` 和 `.docx`。上传后可以在文档中心手动执行入库</p>
</header>
<section class="page-header">
<span class="eyebrow">Batch Intake</span>
<h1 class="page-title">导入申报资料与法规依据文件</h1>
<p class="page-lead">上传页采用“引导式导入”思路,强调业务资料与法规依据资料的边界、目录类文件的优先级,以及上传后进入解析和切片流程的下一步动作</p>
</section>
<article class="panel" style="max-width: 760px;">
<form method="post" enctype="multipart/form-data" class="stack">
{% csrf_token %}
<div>
{{ form.scenario_id.label_tag }}
{{ form.scenario_id }}
{% if form.scenario_id.errors %}
<p class="notice notice-error">{{ form.scenario_id.errors|join:" " }}</p>
<section class="layout-two-columns">
<article class="panel">
<div class="section-heading">
<div>
<h2 class="section-title">资料导入向导</h2>
<p class="section-copy">当前支持 `.txt`、`.md`、`.pdf` 和 `.docx`。上传成功后即可回到文件中心执行解析与入库。</p>
</div>
</div>
<form method="post" enctype="multipart/form-data" class="stack">
{% csrf_token %}
<div>
{{ form.scenario_id.label_tag }}
{{ form.scenario_id }}
{% if form.scenario_id.errors %}
<p class="notice notice-error">{{ form.scenario_id.errors|join:" " }}</p>
{% endif %}
</div>
<div>
{{ form.file.label_tag }}
{{ form.file }}
{% if form.file.errors %}
<p class="notice notice-error">{{ form.file.errors|join:" " }}</p>
{% endif %}
</div>
{% if form.errors %}
<div class="notice notice-error">{{ form.errors }}</div>
{% endif %}
<div class="button-row">
<button type="submit">确认导入</button>
<a class="button" href="{% url 'documents:list' %}">返回文件中心</a>
</div>
</form>
</article>
<article class="panel">
<div class="section-heading">
<div>
<h2 class="section-title">上传前检查清单</h2>
<p class="section-copy">用业务语言告诉演示对象,平台并不是“随便上传,随便搜”。</p>
</div>
</div>
<div>
{{ form.file.label_tag }}
{{ form.file }}
{% if form.file.errors %}
<p class="notice notice-error">{{ form.file.errors|join:" " }}</p>
{% endif %}
<ul class="detail-list">
{% for item in upload_checks %}
<li class="detail-item">{{ item }}</li>
{% endfor %}
</ul>
<div class="notice" style="margin-top: 16px;">
建议先导入监管信息目录、申请表、说明书、产品列表和公告附件包,再进入完整性检查场景。
</div>
{% if form.errors %}
<div class="notice notice-error">{{ form.errors }}</div>
{% endif %}
<div style="display: flex; gap: 10px; flex-wrap: wrap;">
<button type="submit">上传文件</button>
<a class="button" href="{% url 'documents:list' %}">返回文件列表</a>
</div>
</form>
</article>
</article>
</section>
{% endblock %}