iuap-design / tinper-bee

🐝 一套基于 react.js 和 iuap design 设计语言实现的前端组件库 http://bee.tinper.org
MIT License
542 stars 71 forks source link

RefMultipleTableWithInput组件自行添加复杂搜索后,不能以whereParams的形式向后端传参 #638

Closed MINGXINICE closed 4 years ago

MINGXINICE commented 4 years ago

环境及版本信息

您所在的部门或项目名称:用友金融-海通管理会计

描述这个问题: 使用开源的RefMultipleTableWithInput组件,添加复杂搜索后通过searchFilterInfo拿到了表单的值,此时将值以whereParams的方式,携带着key,value,和condition传递给后端,请求参数格式有问题,导致请求失败

1、组件相关代码

    /**
     * @msg: 表单值回调
     * @param {type}
     * @return:
     */
     searchFilterInfo = (values) => {
        let queryconfition = {
            billno: "LIKE",
            costcenter: "EQ",
            factor: "EQ",
        }
        let list = []
        values = handleEntity(values);
        for (let key in values) {
            if (values[key]) {
                let condition = queryconfition[key]
                list.push({ key, value: values[key], condition });
            }
        }

        const { currPageIndex, pageSize } = this.page;
        let params = {
            'refClientPageInfo.currPageIndex': currPageIndex,
            'refClientPageInfo.pageSize': pageSize,
            whereParams: list
        }
        this.requestTableData(params);

        alert('搜索' + JSON.stringify(value))
    }

    /**
     * @msg: 表体请求
     * @param {type}
     * @return:
     */
    requestTableData = (param) => {
        let { refPath, param: _param } = this.props;
        let refModelUrl = {
            tableBodyUrl: `${refPath}/blobRefTreeGrid`,//表体请求
            refInfo: `${refPath}/refInfo`,//表头请求
        }
        const tableBodyUrl = refModelUrl.tableBodyUrl;
        const tableRefCode = _param.refCode;
        param.refCode = tableRefCode;
        this.setState({
            showLoading: true
        });
        let result = request(tableBodyUrl, {
            method: 'get',
            param
        });
        new Promise((resolve, reject) => {
            if (result) {
                resolve(result)
            } else {
                reject()
            }
        }).then((bodyData) => {
            if (bodyData) {
                this.launchTableData(bodyData);
            }
            this.setState({
                showLoading: false
            });
        }).catch((e) => {
            this.launchTableData({});
            this.setState({
                showLoading: false
            });
            console.log(e)
        });
    }

2、报错信息

image

期望的行为:

是否因为以往whereparam的形式都是post请求,但参照的表体是get请求,所以导致参数格式出错,如果是这样,有没有其他方式,可以实现复杂搜索并且可以携带查询条件,希望提供一下示例代码

XYooo commented 4 years ago

已解决。refmultipletable的传参有使用者控制,不存在无法修改的问题