Pre Merge pull request !642 from Toired/点击导出按钮可选导出列
This commit is contained in:
commit
d167267adb
@ -74,6 +74,26 @@ public class ExcelUtil {
|
|||||||
return listener.getExcelResult();
|
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
|
* 导出excel
|
||||||
*
|
*
|
||||||
@ -203,6 +223,36 @@ public class ExcelUtil {
|
|||||||
builder.doWrite(list);
|
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) {
|
// for (TestDemoVo vo : list) {
|
||||||
// vo.setId(1234567891234567893L);
|
// 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")
|
@PostMapping("/export")
|
||||||
public void export(${ClassName}Bo bo, HttpServletResponse response) {
|
public void export(${ClassName}Bo bo, HttpServletResponse response) {
|
||||||
List<${ClassName}Vo> list = ${className}Service.queryList(bo);
|
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>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
<!-- 动态列导出选择弹窗 -->
|
||||||
|
<ExportSelector ref="exportSelector" @submitCallback="exportCallback" :className="'${packageName}.domain.vo.${ClassName}Vo'"></ExportSelector>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -258,6 +260,7 @@ const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|||||||
const { ${dictsNoSymbol} } = toRefs<any>(proxy?.useDict(${dicts}));
|
const { ${dictsNoSymbol} } = toRefs<any>(proxy?.useDict(${dicts}));
|
||||||
#end
|
#end
|
||||||
|
|
||||||
|
const exportSelector = ref<ExportSelector>(null);
|
||||||
const ${businessName}List = ref<${BusinessName}VO[]>([]);
|
const ${businessName}List = ref<${BusinessName}VO[]>([]);
|
||||||
const buttonLoading = ref(false);
|
const buttonLoading = ref(false);
|
||||||
const loading = ref(true);
|
const loading = ref(true);
|
||||||
@ -448,11 +451,15 @@ const handleDelete = async (row?: ${BusinessName}VO) => {
|
|||||||
|
|
||||||
/** 导出按钮操作 */
|
/** 导出按钮操作 */
|
||||||
const handleExport = () => {
|
const handleExport = () => {
|
||||||
proxy?.download('${moduleName}/${businessName}/export', {
|
exportSelector.value.init();
|
||||||
...queryParams.value
|
|
||||||
}, `${businessName}_#[[${new Date().getTime()}]]#.xlsx`)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 导出动态列回调 */
|
||||||
|
const exportCallback = (columnNames: string[]) => {
|
||||||
|
const params = proxy?.addExportClassNameAndColumnNames(queryParams.value, columnNames);
|
||||||
|
proxy?.download('${moduleName}/${businessName}/export', params, `${businessName}_#[[${new Date().getTime()}]]#.xlsx`)
|
||||||
|
};
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getList();
|
getList();
|
||||||
});
|
});
|
||||||
|
@ -50,7 +50,7 @@ public class SysLogininforController extends BaseController {
|
|||||||
@PostMapping("/export")
|
@PostMapping("/export")
|
||||||
public void export(SysLogininforBo logininfor, HttpServletResponse response) {
|
public void export(SysLogininforBo logininfor, HttpServletResponse response) {
|
||||||
List<SysLogininforVo> list = logininforService.selectLogininforList(logininfor);
|
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")
|
@PostMapping("/export")
|
||||||
public void export(SysOperLogBo operLog, HttpServletResponse response) {
|
public void export(SysOperLogBo operLog, HttpServletResponse response) {
|
||||||
List<SysOperLogVo> list = operLogService.selectOperLogList(operLog);
|
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")
|
@PostMapping("/export")
|
||||||
public void export(SysClientBo bo, HttpServletResponse response) {
|
public void export(SysClientBo bo, HttpServletResponse response) {
|
||||||
List<SysClientVo> list = sysClientService.queryList(bo);
|
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")
|
@PostMapping("/export")
|
||||||
public void export(SysConfigBo config, HttpServletResponse response) {
|
public void export(SysConfigBo config, HttpServletResponse response) {
|
||||||
List<SysConfigVo> list = configService.selectConfigList(config);
|
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")
|
@PostMapping("/export")
|
||||||
public void export(SysDictDataBo dictData, HttpServletResponse response) {
|
public void export(SysDictDataBo dictData, HttpServletResponse response) {
|
||||||
List<SysDictDataVo> list = dictDataService.selectDictDataList(dictData);
|
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")
|
@PostMapping("/export")
|
||||||
public void export(SysDictTypeBo dictType, HttpServletResponse response) {
|
public void export(SysDictTypeBo dictType, HttpServletResponse response) {
|
||||||
List<SysDictTypeVo> list = dictTypeService.selectDictTypeList(dictType);
|
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")
|
@PostMapping("/export")
|
||||||
public void export(SysPostBo post, HttpServletResponse response) {
|
public void export(SysPostBo post, HttpServletResponse response) {
|
||||||
List<SysPostVo> list = postService.selectPostList(post);
|
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")
|
@PostMapping("/export")
|
||||||
public void export(SysRoleBo role, HttpServletResponse response) {
|
public void export(SysRoleBo role, HttpServletResponse response) {
|
||||||
List<SysRoleVo> list = roleService.selectRoleList(role);
|
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")
|
@PostMapping("/export")
|
||||||
public void export(SysTenantBo bo, HttpServletResponse response) {
|
public void export(SysTenantBo bo, HttpServletResponse response) {
|
||||||
List<SysTenantVo> list = tenantService.queryList(bo);
|
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")
|
@PostMapping("/export")
|
||||||
public void export(SysTenantPackageBo bo, HttpServletResponse response) {
|
public void export(SysTenantPackageBo bo, HttpServletResponse response) {
|
||||||
List<SysTenantPackageVo> list = tenantPackageService.queryList(bo);
|
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")
|
@PostMapping("/export")
|
||||||
public void export(SysUserBo user, HttpServletResponse response) {
|
public void export(SysUserBo user, HttpServletResponse response) {
|
||||||
List<SysUserExportVo> list = userService.selectUserExportList(user);
|
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")
|
@PostMapping("/export")
|
||||||
public void export(TestLeaveBo bo, HttpServletResponse response) {
|
public void export(TestLeaveBo bo, HttpServletResponse response) {
|
||||||
List<TestLeaveVo> list = testLeaveService.queryList(bo);
|
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