关于若依导出模板时combo下拉列怎么关联字典表实现动态设置下拉列

1.在若依的Excel注解中加上一个参数

/**
 * 根据字典类型设置下拉列
 */
public String comboDictType() default "";

主要用于注解时填写字典类型 这里没有改造combo因为系统其他地方的导出可以用到,贸然改造会影响原有功能所以就加了个新的参数

2.在ExcelUtil中找到设置combo的代码

/**
 * 创建表格样式
 */
public void setDataValidation(Excel attr, Row row, int column) {
    if (attr.name().indexOf("注:") >= 0) {
        sheet.setColumnWidth(column, 6000);
    } else {
        // 设置列宽
        sheet.setColumnWidth(column, (int) ((attr.width() + 0.72) * 256));
    }
    if (StringUtils.isNotEmpty(attr.prompt()) || attr.combo().length > 0) {

        if (attr.combo().length > 15 || StringUtils.join(attr.combo()).length() > 255) {
            // 如果下拉数大于15或字符串长度大于255,则使用一个新sheet存储,避免生成的模板下拉值获取不到
            setXSSFValidationWithHidden(sheet, attr.combo(), attr.prompt(), 1, 100, column, column);
        } else {
            // 提示信息或只能选择不能输入的列内容.

            setPromptOrValidation(sheet, attr.combo(), attr.prompt(), 1, 100, column, column);
        }
    } 
}

可以看到创建表格样式的时候设置的combo具体实现思路就是查询出来相对应字典类型的lable值去设置到excel表中  这里若依有redis缓存去存字典值所以就没有查库

3.在DictUtil中写一个方法查询缓存中对应字典类型的lable值

/**
 * 根据字典类型查询 Label集合
 *
 * @param dictType
 * @return
 */
public static List<String> getDictLabelList(String dictType) {
    return getDictCache(dictType).stream().map(SysDictData::getDictLabel).collect(Collectors.toList());
}

4.接下来就可以实现combo关联字典表实现下拉了

我们在第2步中的代码if()判断的下面在加一个判断

else if (StringUtils.isNotEmpty(attr.prompt()) || StringUtils.isNotEmpty(attr.comboDictType())) {
    //根据字典类型查询对应字典值的列表并转换成数组
    String[] combo = DictUtils.getDictLabelList(attr.comboDictType()).stream().toArray(String[]::new);

    if (combo.length > 15 || StringUtils.join(combo).length() > 255) {
        // 如果下拉数大于15或字符串长度大于255,则使用一个新sheet存储,避免生成的模板下拉值获取不到
        setXSSFValidationWithHidden(sheet, combo, attr.prompt(), 1, 100, column, column);
    } else {
        setPromptOrValidation(sheet, combo, attr.prompt(), 1, 100, column, column);
    }
}

这里把从缓存里面查出来的Lable集合转成了String数组然后就是一些校验最终实现了这么一个效果

@Excel(name = "1111",comboDictType = "position_type",height = 10)

具体使用方式就是这样

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值