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