feat: 重构资料包模型与会话绑定主链路
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user