From 59f2d564f02e327ac141a3ac12fd22f5682b3f6b Mon Sep 17 00:00:00 2001 From: jhy <184825448@qq.com> Date: Fri, 16 Oct 2026 23:29:22 +0800 Subject: [PATCH] feat: complete source management lifecycle --- README.md | 2 +- docs/ARCHITECTURE.md | 2 +- frontend/src/api.ts | 5 ++++- frontend/src/router.ts | 1 + frontend/src/views/AdminView.vue | 2 +- frontend/src/views/SourceManagementView.vue | 19 +++++++++++++++++++ 6 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 frontend/src/views/SourceManagementView.vue diff --git a/README.md b/README.md index 08c85f5..806460c 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ Vite 通常使用 http://localhost:5173。 } ``` -响应新增 `version/updated_at/is_deleted` 及关联、采集、审核字段;完整类型以 `/openapi.json` 和 `/docs` 为准。前端已接入登录/注册、Cookie 会话恢复、个人中心、账户设置、角色路由守卫、角色菜单、知识录入和来源登记/查询;文档管理已接入创建、编辑、软删除、分页搜索及历史快照的真实接口。知识审核、来源的完整编辑/历史页面及浏览器端 PostgreSQL 联调仍需按接口验收。 +响应新增 `version/updated_at/is_deleted` 及关联、采集、审核字段;完整类型以 `/openapi.json` 和 `/docs` 为准。前端已接入登录/注册、Cookie 会话恢复、个人中心、账户设置、角色路由守卫、角色菜单、知识录入和来源登记/查询;来源和文档管理均已接入创建、编辑、软删除、分页搜索及历史快照的真实接口。知识审核与浏览器端 PostgreSQL 联调仍需按接口验收。 ### 关键词检索基线 diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 7d2f5bf..3e138ec 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -14,7 +14,7 @@ FastAPI + Pydantic |-- 来源获取 -> 人工核验 -> 文本切分 -> 生成向量 -> 发布版本 ``` -当前后端实现健康/数据库就绪检查、来源与文档管理、知识增删改查、分页筛选、人工审核、历史快照、认证会话/角色权限、文本/向量快照及独立关键词/向量/RRF 检索;问答仍为占位接口。数据库由 Alembic 显式迁移并启用 pgvector,DeepSeek RAG 待明确恢复后实现。前端已接入登录/注册、个人中心、账户设置、会话恢复、路由守卫和角色菜单,以及文档的创建、编辑、软删除、分页搜索与历史快照;实验页不伪造数据,知识审核、来源的完整维护、浏览器 Cookie 与 PostgreSQL 联调仍需验收。 +当前后端实现健康/数据库就绪检查、来源与文档管理、知识增删改查、分页筛选、人工审核、历史快照、认证会话/角色权限、文本/向量快照及独立关键词/向量/RRF 检索;问答仍为占位接口。数据库由 Alembic 显式迁移并启用 pgvector,DeepSeek RAG 待明确恢复后实现。前端已接入登录/注册、个人中心、账户设置、会话恢复、路由守卫和角色菜单,以及来源、文档的创建、编辑、软删除、分页搜索与历史快照;实验页不伪造数据,知识审核与浏览器 Cookie/PostgreSQL 联调仍需验收。 ## 阶段 2 数据边界 diff --git a/frontend/src/api.ts b/frontend/src/api.ts index bd19cd7..ad97bcb 100644 --- a/frontend/src/api.ts +++ b/frontend/src/api.ts @@ -9,8 +9,11 @@ export const createKnowledge = (payload:{title:string;category:string;content:st export type VerificationStatus='pending'|'verified'|'rejected' export type SourceItem={id:number;version:number;name:string;source_url:string|null;notes:string;created_at:string} -export function getSources(q=''){return apiRequest<{items:SourceItem[];total:number}>(`/api/sources?q=${encodeURIComponent(q)}`)} +export function getSources(q='',page=1,pageSize=20){return apiRequest<{items:SourceItem[];total:number;page:number;page_size:number}>(`/api/sources?q=${encodeURIComponent(q)}&page=${page}&page_size=${pageSize}`)} export function createSource(payload:{name:string;source_url?:string;notes:string}){return apiRequest('/api/sources',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload)},true)} +export function updateSource(id:number,payload:{expected_version:number;name?:string;source_url?:string|null;notes?:string}){return apiRequest(`/api/sources/${id}`,{method:'PATCH',body:JSON.stringify(payload)},true)} +export function deleteSource(id:number,expectedVersion:number){return apiRequest(`/api/sources/${id}?expected_version=${expectedVersion}`,{method:'DELETE'},true)} +export function getSourceHistory(id:number,page=1,pageSize=20){return apiRequest<{items:AuditItem[];total:number;page:number;page_size:number}>(`/api/sources/${id}/history?page=${page}&page_size=${pageSize}`)} export function reviewKnowledge(id:number,payload:{expected_version:number;verification_status:VerificationStatus;reviewer:string;verification_notes:string}){return apiRequest(`/api/knowledge/${id}/review`,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload)},true)} export type DocumentItem={id:number;version:number;source_id:number;title:string;category:string;content:string;collected_at:string;notes:string;created_at:string;updated_at:string;is_deleted:boolean} export function getDocuments(q='',page=1,pageSize=20){return apiRequest<{items:DocumentItem[];total:number;page:number;page_size:number}>(`/api/documents?q=${encodeURIComponent(q)}&page=${page}&page_size=${pageSize}`)} diff --git a/frontend/src/router.ts b/frontend/src/router.ts index 4252036..50624ee 100644 --- a/frontend/src/router.ts +++ b/frontend/src/router.ts @@ -13,6 +13,7 @@ const router=createRouter({history:createWebHistory(),routes:[ {path:'/indexes',component:()=>import('./views/IndexManagementView.vue'),meta:{role:'admin'}}, {path:'/reviews',component:()=>import('./views/KnowledgeReviewView.vue'),meta:{role:'admin'}}, {path:'/documents',component:()=>import('./views/DocumentManagementView.vue'),meta:{role:'admin'}}, + {path:'/sources',component:()=>import('./views/SourceManagementView.vue'),meta:{role:'admin'}}, {path:'/retrieval-exports',component:()=>import('./views/RetrievalExportView.vue'),meta:{role:'admin'}}, {path:'/admin',component:()=>import('./views/AdminView.vue'),meta:{role:'admin'}}, ]}) diff --git a/frontend/src/views/AdminView.vue b/frontend/src/views/AdminView.vue index cff9882..39ed9ce 100644 --- a/frontend/src/views/AdminView.vue +++ b/frontend/src/views/AdminView.vue @@ -29,7 +29,7 @@ onMounted(() => load(0))

管理员用户管理

用户数据由受服务端管理员权限保护的接口实时提供。

-

进入知识审核工作台 进入文档管理 进入索引管理 导出检索历史

+

进入知识审核工作台 进入来源管理 进入文档管理 进入索引管理 导出检索历史

{{ error }}

正在读取用户列表…