1,添加数据源

2,JS代码


/**
 * 获取所有数据并设置数据源
 * @param {string} formUuid 数据源表单id
 * @param {string} dataSourceFieldId 数据源中取值的组件id
 * @param {string} fieldId 当前页面要设置数据源的组件id
 * @param {Object} [searchField] 搜索条件
 * @param {number} [pageSize=100] 单次查询数据量,默认100,最大100
 * @param {Object} [dynamicOrder] 排序条件
 * @param {string} [dataSourceName='searchFormDatas'] 页面中数据源名称
 * @returns {Promise<void>}
 */
export async function getDataAndSetDataSource({
                                                  formUuid,
                                                  dataSourceFieldId,
                                                  fieldId,
                                                  searchField = {},
                                                  pageSize = 100,
                                                  dataSourceName = 'searchFormDatas',
                                              }) {
    class TokenBucket {
        constructor(capacity, fillRate) {
            this.capacity = capacity;
            this.fillRate = fillRate;
            this.tokens = capacity;
            this.lastFill = Date.now();
        }

        take() {
            return new Promise(resolve => {
                const tryTake = () => {
                    this.fill();
                    if (this.tokens < 1) {
                        setTimeout(tryTake, 1000 / this.fillRate);
                    } else {
                        this.tokens -= 1;
                        resolve();
                    }
                };
                tryTake();
            });
        }

        fill() {
            const now = Date.now();
            const deltaTime = now - this.lastFill;
            const filledTokens = deltaTime * this.fillRate / 1000;
            this.tokens = Math.min(this.capacity, this.tokens + filledTokens);
            this.lastFill = now;
        }
    }

    let values = []
    const bucket = new TokenBucket(15, 10);
    const getData = (currentPage) => {
        return new Promise(async (resolve, reject) => {
            try {
                await bucket.take()
                const response = await this.dataSourceMap[dataSourceName].load({
                    formUuid, searchFieldJson: JSON.stringify(searchField), currentPage, pageSize
                })
                resolve(response)
            } catch (e) {
                reject(e)
            }
        })
    }
    const res = await getData(1)
    values.push(res)
    if (res.totalCount > pageSize) {
        const tasks = []
        for (let i = 2; i <= Math.ceil(res.totalCount / pageSize); i++) {
            tasks.push(getData(i))
        }
        values.push(...await Promise.all(tasks))
    }
    values = values.map(i => i.data).flat() // 结果降维
    values = values.map(i => i.formData[dataSourceFieldId]) // 取目标字段
    console.log('原始数据', values)
    // const sorter = new Intl.Collator('zh-Hans-CN', {sensitivity: 'accent'})
    const sorter = new Intl.Collator('zh-Hans-CN', {sensitivity: 'accent', numeric: true})
    values.sort(sorter.compare)
    console.log('排序数据', values)
    this.$(fieldId).set('dataSource', values.map(i => new Object({text: i, value: i})))
}
3,didMount调用



 this.getDataAndSetDataSource({
    formUuid: 'FORM-D2FEFDEC742C4EF5A2EC19FE0578EA99Z75D',
    fieldId: 'selectField_lr4aisg9',
    dataSourceFieldId: 'textField_lqlvvy6u'
  }) 




点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部