Pre Merge pull request !642 from Toired/点击导出按钮可选导出列
This commit is contained in:
commit
d167267adb
@ -74,6 +74,26 @@ public class ExcelUtil {
|
||||
return listener.getExcelResult();
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出excel
|
||||
*
|
||||
* @param list 导出数据集合
|
||||
* @param sheetName 工作表的名称
|
||||
* @param clazz 实体类
|
||||
* @param response 响应体
|
||||
* @param params 导出参数
|
||||
*/
|
||||
public static <T> void exportExcel(List<T> list, String sheetName, Class<T> clazz, HttpServletResponse response, Map<String, Object> params) {
|
||||
try {
|
||||
resetResponse(sheetName, response);
|
||||
ServletOutputStream os = response.getOutputStream();
|
||||
List<String> columnNameList = StringUtils.splitList((String) params.get("columnNames"), ",");
|
||||
exportExcel(list, sheetName, clazz, false, os, null, columnNameList);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("导出Excel异常");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出excel
|
||||
*
|
||||
@ -203,6 +223,36 @@ public class ExcelUtil {
|
||||
builder.doWrite(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出excel
|
||||
*
|
||||
* @param list 导出数据集合
|
||||
* @param sheetName 工作表的名称
|
||||
* @param clazz 实体类
|
||||
* @param merge 是否合并单元格
|
||||
* @param os 输出流
|
||||
* @param columnNames 列名集合,为空时根据类注解导出所有字段
|
||||
*/
|
||||
public static <T> void exportExcel(List<T> list, String sheetName, Class<T> clazz, boolean merge,
|
||||
OutputStream os, List<DropDownOptions> options, Collection<String> columnNames) {
|
||||
ExcelWriterSheetBuilder builder = EasyExcel.write(os, clazz)
|
||||
.includeColumnFieldNames(columnNames)
|
||||
.autoCloseStream(false)
|
||||
// 自动适配
|
||||
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
|
||||
// 大数值自动转换 防止失真
|
||||
.registerConverter(new ExcelBigNumberConvert())
|
||||
.registerWriteHandler(new DataWriteHandler(clazz))
|
||||
.sheet(sheetName);
|
||||
if (merge) {
|
||||
// 合并处理器
|
||||
builder.registerWriteHandler(new CellMergeStrategy(list, true));
|
||||
}
|
||||
// 添加下拉框操作
|
||||
builder.registerWriteHandler(new ExcelDownHandler(options));
|
||||
builder.doWrite(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 单表多数据模板导出 模板格式为 {.属性}
|
||||
*
|
||||
|
@ -92,7 +92,7 @@ public class TestDemoController extends BaseController {
|
||||
// for (TestDemoVo vo : list) {
|
||||
// vo.setId(1234567891234567893L);
|
||||
// }
|
||||
ExcelUtil.exportExcel(list, "测试单表", TestDemoVo.class, response);
|
||||
ExcelUtil.exportExcel(list, "测试单表", TestDemoVo.class, response, bo.getParams());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -63,7 +63,7 @@ public class ${ClassName}Controller extends BaseController {
|
||||
@PostMapping("/export")
|
||||
public void export(${ClassName}Bo bo, HttpServletResponse response) {
|
||||
List<${ClassName}Vo> list = ${className}Service.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "${functionName}", ${ClassName}Vo.class, response);
|
||||
ExcelUtil.exportExcel(list, "${functionName}", ${ClassName}Vo.class, response, bo.getParams());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -245,6 +245,8 @@
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<!-- 动态列导出选择弹窗 -->
|
||||
<ExportSelector ref="exportSelector" @submitCallback="exportCallback" :className="'${packageName}.domain.vo.${ClassName}Vo'"></ExportSelector>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -258,6 +260,7 @@ const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { ${dictsNoSymbol} } = toRefs<any>(proxy?.useDict(${dicts}));
|
||||
#end
|
||||
|
||||
const exportSelector = ref<ExportSelector>(null);
|
||||
const ${businessName}List = ref<${BusinessName}VO[]>([]);
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(true);
|
||||
@ -448,11 +451,15 @@ const handleDelete = async (row?: ${BusinessName}VO) => {
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = () => {
|
||||
proxy?.download('${moduleName}/${businessName}/export', {
|
||||
...queryParams.value
|
||||
}, `${businessName}_#[[${new Date().getTime()}]]#.xlsx`)
|
||||
exportSelector.value.init();
|
||||
}
|
||||
|
||||
/** 导出动态列回调 */
|
||||
const exportCallback = (columnNames: string[]) => {
|
||||
const params = proxy?.addExportClassNameAndColumnNames(queryParams.value, columnNames);
|
||||
proxy?.download('${moduleName}/${businessName}/export', params, `${businessName}_#[[${new Date().getTime()}]]#.xlsx`)
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
});
|
||||
|
@ -50,7 +50,7 @@ public class SysLogininforController extends BaseController {
|
||||
@PostMapping("/export")
|
||||
public void export(SysLogininforBo logininfor, HttpServletResponse response) {
|
||||
List<SysLogininforVo> list = logininforService.selectLogininforList(logininfor);
|
||||
ExcelUtil.exportExcel(list, "登录日志", SysLogininforVo.class, response);
|
||||
ExcelUtil.exportExcel(list, "登录日志", SysLogininforVo.class, response, logininfor.getParams());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -48,7 +48,7 @@ public class SysOperlogController extends BaseController {
|
||||
@PostMapping("/export")
|
||||
public void export(SysOperLogBo operLog, HttpServletResponse response) {
|
||||
List<SysOperLogVo> list = operLogService.selectOperLogList(operLog);
|
||||
ExcelUtil.exportExcel(list, "操作日志", SysOperLogVo.class, response);
|
||||
ExcelUtil.exportExcel(list, "操作日志", SysOperLogVo.class, response, operLog.getParams());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -53,7 +53,7 @@ public class SysClientController extends BaseController {
|
||||
@PostMapping("/export")
|
||||
public void export(SysClientBo bo, HttpServletResponse response) {
|
||||
List<SysClientVo> list = sysClientService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "客户端管理", SysClientVo.class, response);
|
||||
ExcelUtil.exportExcel(list, "客户端管理", SysClientVo.class, response, bo.getParams());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -48,7 +48,7 @@ public class SysConfigController extends BaseController {
|
||||
@PostMapping("/export")
|
||||
public void export(SysConfigBo config, HttpServletResponse response) {
|
||||
List<SysConfigVo> list = configService.selectConfigList(config);
|
||||
ExcelUtil.exportExcel(list, "参数数据", SysConfigVo.class, response);
|
||||
ExcelUtil.exportExcel(list, "参数数据", SysConfigVo.class, response, config.getParams());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -52,7 +52,7 @@ public class SysDictDataController extends BaseController {
|
||||
@PostMapping("/export")
|
||||
public void export(SysDictDataBo dictData, HttpServletResponse response) {
|
||||
List<SysDictDataVo> list = dictDataService.selectDictDataList(dictData);
|
||||
ExcelUtil.exportExcel(list, "字典数据", SysDictDataVo.class, response);
|
||||
ExcelUtil.exportExcel(list, "字典数据", SysDictDataVo.class, response, dictData.getParams());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -48,7 +48,7 @@ public class SysDictTypeController extends BaseController {
|
||||
@PostMapping("/export")
|
||||
public void export(SysDictTypeBo dictType, HttpServletResponse response) {
|
||||
List<SysDictTypeVo> list = dictTypeService.selectDictTypeList(dictType);
|
||||
ExcelUtil.exportExcel(list, "字典类型", SysDictTypeVo.class, response);
|
||||
ExcelUtil.exportExcel(list, "字典类型", SysDictTypeVo.class, response, dictType.getParams());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,35 @@
|
||||
package org.dromara.system.controller.system;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.system.domain.vo.SysExportColumnVo;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 导入导出
|
||||
*
|
||||
* @author Toired
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/system/importExport")
|
||||
public class SysImportExportController extends BaseController {
|
||||
|
||||
/**
|
||||
* 查询导出列
|
||||
* @param className 全限定类名
|
||||
*/
|
||||
@GetMapping("/columns")
|
||||
public R<List<SysExportColumnVo>> columns(@NotBlank(message = "全限定类名不能为空") String className) {
|
||||
return R.ok(SysExportColumnVo.parseExcelColumns(className));
|
||||
}
|
||||
|
||||
}
|
@ -51,7 +51,7 @@ public class SysPostController extends BaseController {
|
||||
@PostMapping("/export")
|
||||
public void export(SysPostBo post, HttpServletResponse response) {
|
||||
List<SysPostVo> list = postService.selectPostList(post);
|
||||
ExcelUtil.exportExcel(list, "岗位数据", SysPostVo.class, response);
|
||||
ExcelUtil.exportExcel(list, "岗位数据", SysPostVo.class, response, post.getParams());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -57,7 +57,7 @@ public class SysRoleController extends BaseController {
|
||||
@PostMapping("/export")
|
||||
public void export(SysRoleBo role, HttpServletResponse response) {
|
||||
List<SysRoleVo> list = roleService.selectRoleList(role);
|
||||
ExcelUtil.exportExcel(list, "角色数据", SysRoleVo.class, response);
|
||||
ExcelUtil.exportExcel(list, "角色数据", SysRoleVo.class, response, role.getParams());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -63,7 +63,7 @@ public class SysTenantController extends BaseController {
|
||||
@PostMapping("/export")
|
||||
public void export(SysTenantBo bo, HttpServletResponse response) {
|
||||
List<SysTenantVo> list = tenantService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "租户", SysTenantVo.class, response);
|
||||
ExcelUtil.exportExcel(list, "租户", SysTenantVo.class, response, bo.getParams());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -69,7 +69,7 @@ public class SysTenantPackageController extends BaseController {
|
||||
@PostMapping("/export")
|
||||
public void export(SysTenantPackageBo bo, HttpServletResponse response) {
|
||||
List<SysTenantPackageVo> list = tenantPackageService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "租户套餐", SysTenantPackageVo.class, response);
|
||||
ExcelUtil.exportExcel(list, "租户套餐", SysTenantPackageVo.class, response, bo.getParams());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -72,7 +72,7 @@ public class SysUserController extends BaseController {
|
||||
@PostMapping("/export")
|
||||
public void export(SysUserBo user, HttpServletResponse response) {
|
||||
List<SysUserExportVo> list = userService.selectUserExportList(user);
|
||||
ExcelUtil.exportExcel(list, "用户数据", SysUserExportVo.class, response);
|
||||
ExcelUtil.exportExcel(list, "用户数据", SysUserExportVo.class, response, user.getParams());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,57 @@
|
||||
package org.dromara.system.domain.vo;
|
||||
|
||||
import cn.hutool.core.util.ReflectUtil;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 表列信息
|
||||
*
|
||||
* @author Toired
|
||||
* */
|
||||
@Slf4j
|
||||
@Data
|
||||
public class SysExportColumnVo {
|
||||
|
||||
private String label;
|
||||
|
||||
private String value;
|
||||
|
||||
/**
|
||||
* 根据类的全限定名获取Excel列信息
|
||||
*
|
||||
* @param className 类的全限定名
|
||||
* @return List<SysExportColumnVo> Excel列信息列表
|
||||
*/
|
||||
public static List<SysExportColumnVo> parseExcelColumns(String className) {
|
||||
List<SysExportColumnVo> columns = new ArrayList<>();
|
||||
try {
|
||||
// 获取类对象
|
||||
Class<?> clazz = Class.forName(className);
|
||||
// 获取所有字段,包括私有字段
|
||||
Field[] fields = ReflectUtil.getFields(clazz);
|
||||
|
||||
for (Field field : fields) {
|
||||
// 获取ExcelProperty注解
|
||||
ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class);
|
||||
if (excelProperty != null) {
|
||||
SysExportColumnVo column = new SysExportColumnVo();
|
||||
// 设置label为ExcelProperty注解的value值
|
||||
column.setLabel(excelProperty.value()[0]);
|
||||
// 设置value为字段名
|
||||
column.setValue(field.getName());
|
||||
columns.add(column);
|
||||
}
|
||||
}
|
||||
} catch (ClassNotFoundException e) {
|
||||
log.error("类不存在: {}" + className, e);
|
||||
}
|
||||
return columns;
|
||||
}
|
||||
|
||||
}
|
@ -56,7 +56,7 @@ public class TestLeaveController extends BaseController {
|
||||
@PostMapping("/export")
|
||||
public void export(TestLeaveBo bo, HttpServletResponse response) {
|
||||
List<TestLeaveVo> list = testLeaveService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "请假", TestLeaveVo.class, response);
|
||||
ExcelUtil.exportExcel(list, "请假", TestLeaveVo.class, response, bo.getParams());
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user