/** * 字段别名兼容层(联调期临时方案) * * 背景:Java 后端自 2026-10-17 起统一输出驼峰字段(goodsName / goodsPriceMin), * 而本项目页面代码是按 PHP 版接口写的,引用的是下划线字段(goods_name / goods_price_min)。 * * 做法:接口返回后,为每个驼峰字段追加一份下划线别名(原字段保留), * 两种写法都能取到值,页面无需逐个改动。 * * 注意:这是过渡手段。后续把页面字段整体转成驼峰后,把 config.js 的 * enableFieldAlias 设为 false(或删除本文件引用)即可下线。 */ /** goodsName -> goods_name;已是下划线或单词的保持不变 */ export function toSnakeCase(key) { return key.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase() } /** * 递归为对象/数组中的驼峰字段添加下划线别名(原地修改,返回值便于链式使用) */ export function addSnakeAliases(target) { if (Array.isArray(target)) { target.forEach(item => addSnakeAliases(item)) return target } if (!target || typeof target !== 'object') { return target } // Object.keys 先取快照,循环内新增别名不影响遍历 Object.keys(target).forEach(key => { const value = target[key] addSnakeAliases(value) if (/[A-Z]/.test(key)) { const snakeKey = toSnakeCase(key) // 后端本身就可能同时给出两种写法,已存在时不覆盖 if (!(snakeKey in target)) { target[snakeKey] = value } } }) return target } export default { toSnakeCase, addSnakeAliases }