| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- /**
- * 字段别名兼容层(联调期临时方案)
- *
- * 背景: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 }
|