From 938051fe2926bc822e4720751dd66b26e0ce6633 Mon Sep 17 00:00:00 2001 From: yueli Date: Thu, 17 Sep 2026 11:26:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(material):=20=E9=87=87=E8=B4=AD=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=E5=89=8D=E7=AB=AF=EF=BC=88=E8=A1=A8=E5=8D=95=20+=20?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=88=97=EF=BC=89=EF=BC=8C=E5=B9=B6=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=20Odoo=20=E9=A1=B5=E4=BF=9D=E5=AD=98=E5=90=8E?= =?UTF-8?q?=E4=B8=A2=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 一、采购链接 UI(list.vue 基础信息 / buyOdoo.vue 基础信息(Odoo)) 各补齐 6 处:columns、permissionMap、列设置复选框、表格列、表单字段、compareFields。 · 表格列带双重守卫(columns.X.visible && hasColPermission),无权限者整列不渲染 · 表单字段套 hasFieldPermission('purchaseLink'),无权限者整项不显示 · ★ compareFields 必须加:编辑走的是「差异比对后只提交变更字段」, 漏了这一项则改了链接也不会被提交(静默失败,排查成本极高) 二、采购链接的 href 白名单 新增 safeHref():只放行 http/https。 ★ 该字段由用户自由填写,直接绑到 href 上时 `javascript:` 伪协议会被浏览器 当成可执行链接 —— 点一下就执行脚本。非法值的行显示「格式无效」而非链接。 三、修复 Odoo 页「保存后列表变空、必须重新搜索才恢复」 根因:fetchOdooSummary() **无条件清空 groupCache**,却只在关键词变化时重置 activeCategories。保存编辑后关键词未变 → 分组仍显示为「已展开」、缓存却空了, 而 loadGroupItems 只由展开事件触发、不会重跑 —— 面板保持展开却无数据。 修法:关键词未变时,清缓存后把**仍展开的分组重新拉一遍**(与文件内批量操作 处既有的 delete + loadGroupItems 模式一致);关键词变了才折叠全部分组。 基础信息页(list.vue)不受影响:它的 getList 会完整带上 queryParams。 --- inventory-web/src/views/material/buyOdoo.vue | 56 ++++++++++++++++++-- inventory-web/src/views/material/list.vue | 45 +++++++++++++++- 2 files changed, 95 insertions(+), 6 deletions(-) diff --git a/inventory-web/src/views/material/buyOdoo.vue b/inventory-web/src/views/material/buyOdoo.vue index ebdff1f..ca3625b 100644 --- a/inventory-web/src/views/material/buyOdoo.vue +++ b/inventory-web/src/views/material/buyOdoo.vue @@ -201,6 +201,7 @@ + @@ -355,6 +356,20 @@ - + + + +