场景:

测试链接
导入多条数据后,在数据列表中对多行数据进行相同的附件上传并保存。

效果图:

实现思路:

先获取到上传附件的内容,准备接口参数,将文件发送后端获取文件对应的 ID,最后定位到具体上传附件的行就行 ID 插入并保存。

参考代码:

const { context, data,utils = {} } = configs;
//上传附件
const files = await utils.extra.getValue('upload')({ fileType: 'file', fileAccept: '.xlsx,.xls,.et' });

const adata = new FormData();
//准备参数
adata.append('files', files[0]);
adata.append('catalogId', 'e9eead4b58ee401d8bf46722a773e718');
adata.append('categoryId', '/csb_obj_file/2i0eec1f1aa04442bcc14f7b6h833d24')

// 将文件发送后端,上传文件,得到fileIds
const importRes = await utils.fetch({
    url:'/apis/common/proxy/annex/(TenantId)/v2/upload/batch',
    method: 'post',
    data:adata,
});
console.log("返回后的数据:",importRes)

if (importRes.message !== 'success') {
    utils.message.warning('导入数据出错');
}else{
    //提取出fileIds
    let fileIds = importRes.data.result.fileIds;
    const extraData = configs?.data?.extraData || {};
    const keyMap = extraData?.entity?.allColObj || {};
    // 获取当前页列表的所有行数据
    const tableList = extraData?.entity?.list?.data?.list || [];
    const selectedRows = extraData?.ref?.selectedRows || [];
    // 遍历获取当前选中行的行索引,并剔除非法选中行
    const selectedRowsIndex = [...selectedRows || []]
        .map(row => typeof row?.__index === 'number' ? row.__index - 1 : undefined)
        .filter(v => typeof v === 'number');

    // 获取「上传附件」字段列的id内容
    const updFileColKey = keyMap?.['附件组件编码']?.dataIndex;
    // 根据当前选中行索引修改当前页列表中其对应行的字段数据
    selectedRowsIndex.forEach(i => {
        if (!tableList[i]) return;
        tableList[i][updFileColKey] = fileIds[0];
    })
    console.log('tableList:', tableList)
}

参数获取示例:手动上传查看入参

作者:tz_docs  创建时间:2024-11-08 10:05
最后编辑:tz_docs  更新时间:2025-05-12 18:04