Skip to content

框架本地改动(非生成物,官方升级会覆盖) ​

Why: 这些改动直接修改框架源码文件(非 Partial/extension 安全区),升级框架版本时会丢失;重新套用需知道改了什么、为什么。

How to apply: 升级前端依赖或替换 web.vite 框架文件后,按下面清单逐项重做并用采购入库页验证。

2026-10-31 VolTable.vue 表头筛选增强(可搜索多选面板) ​

  • 需求:element-plus 原生 filters 面板无搜索框,供应商多时没法用
  • 改动点(3 处模板 + 5 个方法,均在 web.vite/src/components/basic/VolTable.vue):
    1. el-table-column::filtered-value 受控绑定 + #filter-icon 空插槽(藏原生图标)
    2. #header 插槽末尾:el-popover(trigger="manual" + v-model:visible + :teleported="false",含 el-input 搜索 + el-checkbox-group + el-scrollbar + 确定/清空)
    3. 方法:toggleColFilter(打开时重置 __fkw='')/getFilteredOptions/applyColFilter/clearColFilter/commitColFilter
  • 踩坑(勿重复):
    • el-popover 在 el-table header 插槽里 trigger="click" 不生效(OnlyChild 事件注入链失效)→ 必须 manual 受控
    • element-plus 的 :filtered-value 只同步列状态不触发过滤,真正过滤要 table.value.store.commit('filterChange', {column, values})(store/watcher.mjs 的 execFilter 只认 store.filters)
    • script setup 组件里取 el-table 实例用内部 const table = ref(proxy.$refs 是空的)
  • 状态约定:column 上挂 __fshow/__fkw/__ftmp/__fv
  • 验证脚本:d:\VOL源码\.playwright-cli\test-filter.js、test-multi2.js、test-clear.js(playwright-cli run-code --filename)

2026-11-02 VolTable.vue Excel 式录入三件套(粘贴/复制行/批量填充) ​

  • 需求:明细录入 Excel 化——从 Excel 粘贴多行多列、复制行(多行)、列批量填充(替代下拉填充)
  • 改动点(VolTable.vue):
    1. 模板根 div 加 @paste="onTablePaste"
    2. delRow 后新增方法块:onTablePaste/translatePasteCell/copyRows/fillColumn/refreshSummaryCols
    3. defineExpose 暴露 copyRows、fillColumn
  • 行为约定:
    • 粘贴守卫 = 存在编辑列(column.edit),不能用 !props.url 判断——ViewGrid 明细表也传 :url(ViewGrid.vue:374,明细数据从后端 load),用 url 判断会拦死
    • 粘贴 TSV 按"可见数据列"从第一列对齐;readonly 列占位不赋值;首格匹配列 title 视为表头丢弃;字典列(bind.data)按显示文本反查 key;数字列千分位剥离转 float;日期 / 转 -
    • copyRows(rows, fields):fields 默认 ['id','Id'] 清主键按新增提交;新行的 elementIndex 由 row-class-name 的 initIndex 渲染时自动补(delRow 安全)
    • fillColumn(field, {mode:'fixed'|'inc', value, step}):rows 默认选中行,未勾选=全部行
  • 演示页 ERP_PurchaseIn.vue:detailOptions.buttons 加"复制行"(清 Id/PurchaseOrderDetailId/PurchaseOrderNo)+"批量填充"(el-dialog 对话框,字典列下拉/数字递增)
  • 踩坑(勿重复):本地后端 localhost:9100 自签 token 时 aud 必须=配置的 vol.core(appsettings.json Audience),抄 DB 旧 token 的 vol.com 会 401;生成脚本 .playwright-cli/make-token.js
  • 验证脚本:paste-step2.js(粘贴2行+表头丢弃)、paste-step3.js(三件套)、paste-step4.js(全选递增 100/110/120)