导出按钮
时间:2020-05-12
本文章向大家介绍导出按钮,主要包括导出按钮使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
场景:导出列表查询项
/**
* 导出接口日志
*
* @param
* @return com.vteam.vtarm.api.RespEntity
* @author 程序员girl
* @date 2020/4/26 下午 3:36
*/
@PostMapping(value = "/doExportApiLog")
@RequiredAuthorize(permissions = {PermissionConstants.Operation.STATISTICS_LOG_INTERFACE_EXPORT})
public RespEntity doExportApiLog(@RequestBody ReqEntity reqEntity) {
FlogApiMVo flogApiMVo = JSON.parseObject(reqEntity.getData(), FlogApiMVo.class);
SmeAssert.notNull(flogApiMVo.getResponseTimeStart(), "请输入响应开始日期");
flogApiMVo.setResponseTimeStart(flogApiMVo.getResponseTimeStart().with(LocalTime.MIN));
SmeAssert.notNull(flogApiMVo.getResponseTimeEnd(), "请输入响应结束日期");
flogApiMVo.setResponseTimeEnd(flogApiMVo.getResponseTimeEnd().with(LocalTime.MAX));
long endDay = flogApiMVo.getResponseTimeEnd().getYear();
long createDay = flogApiMVo.getResponseTimeStart().getYear();
long days = endDay - createDay;
boolean bl = days <= 366;
SmeAssert.isTrue(bl, "响应日期相差不能大于一年");
List<FlogApiMVo> flogApiMVoList = flogApiMService.listApiLogByCondition(flogApiMVo);
SmeAssert.notEmpty(flogApiMVoList, "暂无数据,不可导出");
final String userid = RequestStore.getLoginUser().getUserid();
exportTaskExecutor.execute(() -> {
if (CollectionUtils.isNotEmpty(flogApiMVoList)) {
// 处理导出的数据
this.doExportData(flogApiMVoList);
}
// 接口日志列表
String fileName = sxssfExportExecutor.executeForLocal(flogApiMVoList, FlogApiMVo.class, "FlogApiMVo_ExportTemplate.xlsx");
// 发送消息
Set<SipaBurMVo> receiverSet = new HashSet<>();
SipaBurMVo receiver = sipaBurMService.getUserInfoByUserid(userid);
receiverSet.add(receiver);
Map<String, Object> model = new HashMap<>(2);
model.put("actionName", "接口日志");
model.put("filePath", fileName);
MessageModel messageModel = MessageModel.build().createMessageModel(null, receiverSet,
MessageTemplateConstants.EXPORT_FILE.getTemplateName(), FieldContants.FbtxNot.PUSH_TYPE_SYSTEM, model,
new MessageModel.Channel[]{MessageModel.Channel.WS});
messageProducer.send(messageModel);
// 移除任务标记
stringValueContainer.delete(ExportFileAspect.BASE_CACHE_KEY + userid);
});
return RespEntity.ok();
}
/**
* 处理导出的数据
*
* @author 程序员girl
* @date 2020/4/30 下午 6:49
*/
private void doExportData(List<FlogApiMVo> flogApiMVoList) {
final String SUCCESS = "成功";
final String FAILD = "失败";
final String IN = "I";
final String OUT = "O";
final String CLIENT = "用户端";
final String SERVICE = "服务端";
if (CollectionUtils.isNotEmpty(flogApiMVoList)) {
for (int i = 0; i < flogApiMVoList.size(); i++) {
FlogApiMVo flogApiMVo = flogApiMVoList.get(i);
// 序号
flogApiMVo.setIndex(i + 1);
flogApiMVo.setApiName(flogApiMVo.getApiName());
flogApiMVo.setRequestDate(flogApiMVo.getRequestTime().format(DateUtils.FMT_DATE));
flogApiMVo.setResponseDate(flogApiMVo.getResponseTime().format(DateUtils.FMT_DATE));
// 接口类型
if (IN.equals(flogApiMVo.getApiType())) {
flogApiMVo.setInterfaceType(CLIENT);
} else if (OUT.equals(flogApiMVo.getApiType())) {
flogApiMVo.setInterfaceType(SERVICE);
}
// 响应状态
if (FieldContants.FlogApiM.RESULT_CODE_SUCCESS.equals(flogApiMVo.getResultCode())) {
flogApiMVo.setStatus(SUCCESS);
} else {
flogApiMVo.setStatus(FAILD);
}
}
}
}
2.接口日志表扩展视图类
vue页面导出页面:
export default {
data() {
const getCurrentDate = _ => {
let currentDate = moment().format('YYYY-MM-DD')
return currentDate
}
const get12MonthBefore = _ => { ---------------这里主要是日期能显示当前的日期
let before12month = moment().subtract(1, 'years').format('YYYY-MM-DD')
return before12month
}
return {
loading: false,
dateList: [get12MonthBefore(), getCurrentDate()],
params: {
apiName: '',
responseTimeStart: '',
responseTimeEnd: '',
resultCode: '',
apiType: ''
},
// 返回结果
self: {
aplList: [],
total: 0
},
// 分页信息
page: {
pageNum: 1,
pageSize: this.$store.getters.pageSizeArr[0]
},
apiTypeList: [{ key: '', value: '全部' },
{ key: 'O', value: '客户端' }, { key: 'I', value: '服务端' }],
resultCodeList: [{ key: '', value: '全部' }, { key: '200', value: '成功' },
{ key: '-1', value: '失败' }]
}
},
beforeMount() {
this.getPageData()
},
methods: {
getPageData() {
this.loading = true
if (this.dateList && this.dateList.length) {
this.params.responseTimeStart = this.dateList[0]
this.params.responseTimeEnd = this.dateList[1]
} else {
this.params.responseTimeStart = ''
this.params.responseTimeEnd = ''
}
let data = {
data: this.params,
pageNum: this.page.pageNum,
pageSize: this.page.pageSize
}
api.findApiLogPage(data).then(
res => {
this.loading = false
this.self.apiList = res.data.apiList
this.self.total = res.totalCount
},
err => {
this.loading = false
}
)
},
queryApiInfo(refcode) {
this.$router.push({
name: 'statistics-api-detail',
params: {
refcode: refcode
}
})
},
getApiType(type) {
if (type != '') {
if (type == 'O') {
return '客户端'
} else {
return '服务端'
}
}
},
getResult(code) {
if (code) {
if (code == '200') {
return '成功'
} else {
return '失败'
}
}
},
// 导出Excel
exportData() {
this.loading = true
if (this.dateList && this.dateList.length) {
this.params.responseTimeStart = this.dateList[0]
this.params.responseTimeEnd = this.dateList[1]
} else {
this.params.responseTimeStart = ''
this.params.responseTimeEnd = ''
}
// 组装查询条件
let data = {
data: this.params,
pageNum: this.page.pageNum,
pageSize: this.page.pageSize
}
api.doExportApiLog(data).then(
res => {
this.loading = false
this.$notify.info({
title: '消息',
message: '文件正在生成中,休息一会再来下载吧!'
})
},
err => {
this.loading = false
}
)
},
// 按文件名下载
getFileByFileName(fileName) {
apiFile.getFileByFileName(fileName, '接口日志')
},
/**
* 每页笔数改变事件
*/
handleSizeChange(val) {
this.page.pageSize = val
this.getPageData()
},
/**
* 当前页数改变事件
*/
handleCurrentChange(val) {
this.page.pageNum = val
this.getPageData()
}
}
}
</script>
原文地址:https://www.cnblogs.com/fshow/p/12877490.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 算法集锦(21) | 自动驾驶 |汽车转向角控制算法
- Java压缩/解压缩字符串
- 凉经算法题反思 | 单调栈与DP二分法
- 终于有人把Docker讲清楚了!
- 飞天茅台超卖事故:Redis分布式锁请慎用!
- 算法集锦(24) | 自动驾驶 |高速公路行驶路径规划算法
- 【自动驾驶专题】|小白都会玩的自动驾驶算法
- 算法基础(6)| 语音识别DTW算法小讲
- Selenium设置浏览器为手机模式自定义大小
- 如何在Jetson nano上同时编译TensorRT与Paddle Lite框架
- 一文概览无监督聚类算法有多少 | 算法基础(10)
- 算法集锦(28)| 智能医疗 | 血液细胞分类算法
- 基于飞桨复现 CVPR2018 Relation Net的全程解析
- 如何将DB2数据库转换成Oracle数据库,这一篇告诉你
- MySQL 8.0 安装部署3个注意事项