feat: 增强知识库治理台前台入口与维护导航
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
from django.urls import reverse
|
||||
|
||||
from agent_core.governance import load_governance_config
|
||||
|
||||
|
||||
@@ -404,3 +406,92 @@ def get_platform_demo_context():
|
||||
"owners": owners,
|
||||
"operation_logs": operation_logs,
|
||||
}
|
||||
|
||||
|
||||
def build_knowledge_base_context(selected_view: str) -> dict:
|
||||
"""
|
||||
组装知识库治理台上下文。
|
||||
|
||||
页面层只负责展示,治理对象导航、当前对象说明和 CRUD 入口统一由服务层提供。
|
||||
"""
|
||||
context = get_platform_demo_context()
|
||||
governance_objects = _build_governance_objects()
|
||||
active_object = next(
|
||||
(item for item in governance_objects if item["key"] == selected_view),
|
||||
governance_objects[0],
|
||||
)
|
||||
context.update(
|
||||
{
|
||||
"governance_objects": governance_objects,
|
||||
"active_governance_object": active_object,
|
||||
}
|
||||
)
|
||||
return context
|
||||
|
||||
|
||||
def _build_governance_objects() -> list[dict]:
|
||||
return [
|
||||
{
|
||||
"key": "rule_packages",
|
||||
"title": "法规规则包",
|
||||
"summary": "按章-条-要求项-模板字段维护规则包版本和启停状态。",
|
||||
"detail_title": "法规规则包详情",
|
||||
"detail_copy": "支持新增、编辑、复制新版本、启停和查看章节要求详情。",
|
||||
"actions": ["新增规则包", "编辑规则包", "复制新版本", "启用 / 停用", "查看章节要求详情"],
|
||||
"admin_url": reverse("admin:index"),
|
||||
},
|
||||
{
|
||||
"key": "knowledge_sources",
|
||||
"title": "RAG 文档源",
|
||||
"summary": "维护法规资料、模板资料和业务资料的入库版本。",
|
||||
"detail_title": "RAG 文档源详情",
|
||||
"detail_copy": "支持上传新文档源、替换版本、编辑元数据、停用和重新入库。",
|
||||
"actions": ["上传新文档源", "替换版本", "编辑元数据", "停用文档源", "重新入库"],
|
||||
"admin_url": reverse("admin:index"),
|
||||
},
|
||||
{
|
||||
"key": "rag_chunks",
|
||||
"title": "RAG 切片",
|
||||
"summary": "查看切片摘要、章节、召回状态和证据命中历史。",
|
||||
"detail_title": "RAG 切片详情",
|
||||
"detail_copy": "支持手工切片、摘要编辑、合并拆分、删除和重建向量。",
|
||||
"actions": ["新增手工切片", "编辑切片摘要", "合并切片", "拆分切片", "重建向量"],
|
||||
"admin_url": reverse("admin:index"),
|
||||
},
|
||||
{
|
||||
"key": "field_schemas",
|
||||
"title": "字段 Schema",
|
||||
"summary": "维护回填字段、强一致字段和来源优先级。",
|
||||
"detail_title": "字段 Schema 详情",
|
||||
"detail_copy": "支持新增字段、编辑字段、版本复制和启停管理。",
|
||||
"actions": ["新增字段", "编辑字段", "启停字段", "复制 schema 版本", "查看来源优先级"],
|
||||
"admin_url": reverse("admin:index"),
|
||||
},
|
||||
{
|
||||
"key": "template_mappings",
|
||||
"title": "Word 模板与字段映射",
|
||||
"summary": "管理输出模板版本、占位符映射和阻断条件影响范围。",
|
||||
"detail_title": "Word 模板与字段映射详情",
|
||||
"detail_copy": "支持上传模板、编辑占位符映射、启停版本和模板预览。",
|
||||
"actions": ["上传模板", "编辑模板元数据", "编辑占位符映射", "启用 / 停用版本", "预览模板"],
|
||||
"admin_url": reverse("admin:platform_ui_wordtemplatemapping_changelist"),
|
||||
},
|
||||
{
|
||||
"key": "owner_mappings",
|
||||
"title": "责任人映射",
|
||||
"summary": "按章节和风险类型维护责任角色、责任人和飞书标识。",
|
||||
"detail_title": "责任人映射详情",
|
||||
"detail_copy": "支持新增、编辑、启停、删除以及批量导入责任人映射。",
|
||||
"actions": ["新增映射", "编辑映射", "启停映射", "删除映射", "批量导入映射"],
|
||||
"admin_url": reverse("admin:platform_ui_ownermapping_changelist"),
|
||||
},
|
||||
{
|
||||
"key": "feishu_configs",
|
||||
"title": "飞书通知配置",
|
||||
"summary": "固定支持 task_completed / task_failed 两类通知并维护消息模板。",
|
||||
"detail_title": "飞书通知配置详情",
|
||||
"detail_copy": "支持新增配置、编辑消息模板、启停配置和发送测试消息。",
|
||||
"actions": ["新增配置", "编辑配置", "切换消息模板", "启用 / 停用", "发送测试消息"],
|
||||
"admin_url": reverse("admin:platform_ui_feishunotifyconfig_changelist"),
|
||||
},
|
||||
]
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
from .services import get_platform_demo_context
|
||||
from .services import build_knowledge_base_context, get_platform_demo_context
|
||||
|
||||
|
||||
def knowledge_base(request):
|
||||
context = get_platform_demo_context()
|
||||
context = build_knowledge_base_context(request.GET.get("view", ""))
|
||||
return render(request, "platform_ui/knowledge_base.html", context)
|
||||
|
||||
|
||||
|
||||
@@ -18,6 +18,51 @@
|
||||
{% endfor %}
|
||||
</section>
|
||||
|
||||
<section class="workspace-grid" style="grid-template-columns: 280px minmax(0, 1fr);">
|
||||
<article class="panel">
|
||||
<h2 class="section-title">治理对象导航</h2>
|
||||
<p class="section-copy">按治理对象切换当前列表和维护入口,保持法规、RAG、字段、模板和通知口径统一。</p>
|
||||
<ul class="detail-list">
|
||||
{% for item in governance_objects %}
|
||||
<li class="detail-item">
|
||||
<strong>
|
||||
<a href="?view={{ item.key }}">{{ item.title }}</a>
|
||||
</strong>
|
||||
<div class="muted">{{ item.summary }}</div>
|
||||
{% if active_governance_object.key == item.key %}
|
||||
<div class="badge-row" style="margin-top: 8px;">
|
||||
<span class="pill pill-accent">当前对象:{{ item.title }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</article>
|
||||
|
||||
<article class="panel">
|
||||
<div class="section-heading">
|
||||
<div>
|
||||
<h2 class="section-title">{{ active_governance_object.detail_title }}</h2>
|
||||
<p class="section-copy">{{ active_governance_object.detail_copy }}</p>
|
||||
</div>
|
||||
<div class="button-row">
|
||||
<a class="button" href="{{ active_governance_object.admin_url }}">进入后台维护</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="badge-row" style="margin-bottom: 14px;">
|
||||
<span class="pill pill-accent">当前对象:{{ active_governance_object.title }}</span>
|
||||
</div>
|
||||
<div class="grid-3">
|
||||
{% for action in active_governance_object.actions %}
|
||||
<article class="panel" style="padding: 14px;">
|
||||
<h3 class="section-title" style="font-size: 0.98rem;">{{ action }}</h3>
|
||||
<p class="section-copy">该操作在 V1 通过后台维护与治理台入口统一承接。</p>
|
||||
</article>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</article>
|
||||
</section>
|
||||
|
||||
<section class="grid-3">
|
||||
{% for section in governance_sections %}
|
||||
<article class="panel">
|
||||
|
||||
@@ -146,3 +146,28 @@ def test_governance_models_are_registered_in_admin():
|
||||
assert OwnerMapping in admin.site._registry
|
||||
assert FeishuNotifyConfig in admin.site._registry
|
||||
assert WordTemplateMapping in admin.site._registry
|
||||
|
||||
|
||||
def test_knowledge_base_page_shows_governance_object_navigation_and_active_panel(client):
|
||||
response = client.get(reverse("platform_ui:knowledge-base"), {"view": "owner_mappings"})
|
||||
|
||||
content = response.content.decode("utf-8")
|
||||
assert response.status_code == 200
|
||||
assert "治理对象导航" in content
|
||||
assert "法规规则包" in content
|
||||
assert "RAG 文档源" in content
|
||||
assert "Word 模板与字段映射" in content
|
||||
assert "责任人映射详情" in content
|
||||
assert "当前对象:责任人映射" in content
|
||||
assert "批量导入映射" in content
|
||||
|
||||
|
||||
def test_knowledge_base_page_exposes_governance_crud_entry_links(client):
|
||||
response = client.get(reverse("platform_ui:knowledge-base"), {"view": "template_mappings"})
|
||||
|
||||
content = response.content.decode("utf-8")
|
||||
assert response.status_code == 200
|
||||
assert "上传模板" in content
|
||||
assert "编辑占位符映射" in content
|
||||
assert "预览模板" in content
|
||||
assert reverse("admin:platform_ui_wordtemplatemapping_changelist") in content
|
||||
|
||||
Reference in New Issue
Block a user