feat: 重构资料包模型与会话绑定主链路

This commit is contained in:
2026-06-04 00:43:13 +08:00
parent ddf5e7d15c
commit d0841e533f
18 changed files with 1000 additions and 263 deletions

View File

@@ -1,36 +1,114 @@
{% extends "base.html" %}
{% block title %}文件中心{% endblock %}
{% block title %}资料包{% endblock %}
{% block content %}
<section class="page-header">
<span class="eyebrow">Documents</span>
<h1 class="page-title">文件中心</h1>
<p class="page-lead">上传资料、查看状态、执行入库。页面只保留最常用操作</p>
<span class="eyebrow">Submission Batches</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>
<a class="button button-primary" href="{% url 'documents:upload' %}">导入资料包</a>
</div>
</section>
<section class="metric-grid">
<article class="metric-card">
<div class="metric-label">文件总数</div>
<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>
<div class="metric-label">已完成</div>
<div class="metric-value">{{ status_counts.completed }}</div>
</article>
<article class="metric-card">
<div class="metric-label">入库</div>
<div class="metric-value">{{ status_counts.uploaded }}</div>
<div class="metric-label">复核</div>
<div class="metric-value">{{ status_counts.review_required }}</div>
</article>
<article class="metric-card">
<div class="metric-label">失败</div>
<div class="metric-value">{{ status_counts.failed }}</div>
<div class="metric-label">待导入</div>
<div class="metric-value">{{ status_counts.pending }}</div>
</article>
</section>
<section class="panel">
<div class="section-heading">
<div>
<h2 class="section-title">按产品名称搜索</h2>
<p class="section-copy">支持按产品名称定位资料包,并跳转到关联会话。</p>
</div>
</div>
<form method="get" class="grid-2">
<div>
<label for="id_keyword">产品名称</label>
<input id="id_keyword" type="text" name="keyword" value="{{ keyword }}" placeholder="请输入产品名称关键词">
</div>
<div class="button-row" style="align-items: end;">
<button type="submit">搜索资料包</button>
<a class="button" href="{% url 'documents:list' %}">清空</a>
</div>
</form>
</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>
<th>批次号</th>
<th>产品名称</th>
<th>会话</th>
<th>文件数</th>
<th>页数</th>
<th>状态</th>
<th>章节点概览</th>
</tr>
</thead>
<tbody>
{% for batch in batches %}
<tr>
<td class="nowrap">{{ batch.batch_id }}</td>
<td>{{ batch.product_name|default:"未识别产品名称" }}</td>
<td class="cell-min-220">
{% if batch.conversation_id %}
<a class="button" href="{% url 'chat:detail' batch.conversation_id %}">查看对话 {{ batch.conversation_id }}</a>
{% else %}
<span class="muted">尚未绑定</span>
{% endif %}
</td>
<td>{{ batch.file_count }}</td>
<td>{{ batch.page_count }}</td>
<td>
<span class="pill {% if batch.import_status == 'completed' %}pill-success{% elif batch.import_status == 'review_required' %}pill-signal{% else %}pill-danger{% endif %}">
{{ batch.get_import_status_display_text }}
</span>
</td>
<td class="cell-min-280">
{% if batch.chapter_summary %}
{% for chapter in batch.chapter_summary %}
<div>{{ chapter.chapter_code }} / {{ chapter.document_count }} 份</div>
{% endfor %}
{% else %}
<span class="muted">暂无目录汇总</span>
{% endif %}
</td>
</tr>
{% empty %}
<tr>
<td colspan="7">暂无资料包,请先导入申报资料。</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</section>
<section class="panel">
<div class="section-heading">
<div>
@@ -52,7 +130,7 @@
<div class="section-heading">
<div>
<h2 class="section-title">资料目录总览</h2>
<p class="section-copy">页面下方保留真实文件记录与手动入库动作,保证演示原型仍基于当前系统能力运行</p>
<p class="section-copy">保留文件明细,便于说明目录识别、页数统计和异常定位</p>
</div>
</div>
<div class="table-wrap">
@@ -60,7 +138,9 @@
<thead>
<tr>
<th>文件名</th>
<th>批次</th>
<th>场景</th>
<th>章节点</th>
<th>类型</th>
<th>大小</th>
<th>状态</th>
@@ -71,7 +151,9 @@
{% for document in documents %}
<tr>
<td>{{ document.original_name }}</td>
<td>{{ document.batch.batch_id|default:"-" }}</td>
<td>{{ document.scenario_id }}</td>
<td>{{ document.chapter_code|default:"待识别" }}</td>
<td>{{ document.file_type }}</td>
<td>{{ document.size }}</td>
<td>
@@ -98,7 +180,7 @@
</tr>
{% empty %}
<tr>
<td colspan="6">暂无文件,请先导入申报资料或法规原文。</td>
<td colspan="8">暂无文件,请先导入申报资料或法规原文。</td>
</tr>
{% endfor %}
</tbody>