fix: 第二轮PubMed搜索合规审计 — 8项修复 + 6项新测试
F1: search_engine.py `_pubmed_conditions` 顶层 [MH:noexp] 丢失 _noexp 标志
按 _noexp 分组 mesh_terms,分别调用 _expand_mesh_tag_ids(noexp=True/False)
F2: search_engine.py 组内 NOT 违反 De Morgan 律
全组 is_not=True 时单 NOT 包裹组合条件而非 per-term not_()
F3: pubmed_query_parser.py `_parse_not_expr` 不支持重复 NOT
改为递归调用,NOT NOT toggle is_not(三重 NOT 正确)
F4: SearchView.vue Custom Range datePreset 不发送日期参数
增加 datePreset === 'custom' 分支发送 year_from/year_to
F5: HomeView.vue restoreFromUrl 恢复不全
补全 sort/field/retracted/negative_result
F6: AdvancedSearchPanel.vue precision_mode 死控件移除(UI+emit+reset)
types/index.ts precision_mode 死类型字段移除
F7: types/index.ts is_oa 标记为 unused, reserved
F8: search_engine.py `_expand_mesh_tag_ids` N+1 → 2 批量查询
所有 entry_terms 和 name_en 分别合并为 OR 查询
测试: 新增 NOT NOT/triple NOT/NOT group/DM:noexp 顶层 共 7 项
This commit is contained in:
@@ -296,8 +296,13 @@ const { page, total, goToPage } = usePagination({
|
||||
// 年份 / 日期(datePreset 与 year_* 互斥)
|
||||
const yf = Number(yearFromStr.value)
|
||||
const yt = Number(yearToStr.value)
|
||||
if (!datePreset.value && yearFromStr.value && !isNaN(yf) && yf >= 1900 && yf <= 2100) body.year_from = yf
|
||||
if (!datePreset.value && yearToStr.value && !isNaN(yt) && yt >= 1900 && yt <= 2100) body.year_to = yt
|
||||
if (datePreset.value === 'custom') {
|
||||
if (yearFromStr.value && !isNaN(yf) && yf >= 1900 && yf <= 2100) body.year_from = yf
|
||||
if (yearToStr.value && !isNaN(yt) && yt >= 1900 && yt <= 2100) body.year_to = yt
|
||||
} else {
|
||||
if (!datePreset.value && yearFromStr.value && !isNaN(yf) && yf >= 1900 && yf <= 2100) body.year_from = yf
|
||||
if (!datePreset.value && yearToStr.value && !isNaN(yt) && yt >= 1900 && yt <= 2100) body.year_to = yt
|
||||
}
|
||||
if (datePreset.value && datePreset.value !== 'custom') {
|
||||
const now = new Date()
|
||||
body.date_to = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate())).toISOString().slice(0, 10)
|
||||
|
||||
Reference in New Issue
Block a user