yueli 938051fe29 feat(material): 采购链接前端(表单 + 列表列),并修复 Odoo 页保存后丢搜索
一、采购链接 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。
2026-09-17 11:26:42 +08:00
2026-04-28 16:07:11 +08:00
2026-04-28 16:07:11 +08:00
2026-04-28 16:07:11 +08:00
Description
No description provided
88 MiB
Languages
Python 70.2%
CSS 14.9%
Vue 7.6%
HTML 4.2%
TypeScript 3.1%