baidu / amis

前端低代码框架,通过 JSON 配置就能生成各种页面。
https://baidu.github.io/amis/
Apache License 2.0
17.33k stars 2.52k forks source link

crud 使用 syncLocation 时,filter 中存在 Switch 组件会存在不同步的问题 #6464

Closed fedono closed 1 year ago

fedono commented 1 year ago

描述问题:

qs.stringify 会将 location.query 的数据都转换为字符串,qs有讨论这个问题 Parse booleans & numbers #91

qs 作者在 文档 中建议使用 query-typesquery-types 这个包是在 Node 中使用的,可以把里面的代码复制出来,或者你们可以单独发个包

amis-core/utils/helper.ts

export function qsparse(
  data: string,
  options: any = {
    arrayFormat: 'indices',
    encodeValuesOnly: true,
    depth: 1000, // 默认是 5, 所以condition-builder只要来个条件组就会导致报错
    arrayLimit: 1000 /** array元素数量超出限制,会被自动转化为object格式,默认值1000 */
  }
) {
  // imp 可以在这里 parse 之后,使用 query-types 做一次值的转换
  return qs.parse(data, options);
}

截图或视频:

如何复现(请务必完整填写下面内容):

  1. amis 版本是什么?请先在最新 beta 版本测试问题是否存在

amis@2.8.0

  1. 粘贴有问题的完整 amis schema 代码:

    {
    "type": "crud",
    "syncLocation": true,
    "filter": {
        "body": [
            {
                "type": "switch",
                "label": "switch",
                "name": "switch"
            }
        ]
    },
    "columns": [
        {
            "name": "name",
            "label": "name"
        }
    ]
    }
  2. 操作步骤

2betop commented 1 year ago

因为 switch 默认的 trueValue 为 true falseValue 为 false ,经过同步地址栏后,变成 字符串 "true" 或者 "false",所以这里需要手动去配置 trueValue 为 "1" 和 falseValue "0"