Browse Source

feat(warehouse): 添加IFS接口错误日志批量重试功能

- 在API中新增batchRetryIfsCall方法支持批量重试
- 添加一键重试按钮,显示选中数量并控制按钮状态
- 实现表格多选功能,仅允许选择PENDING状态的记录
- 新增handleSelectionChange和checkSelectable方法处理选择逻辑
- 添加批量重试相关状态变量:selectedRows、batchRetrying等
- 实现handleBatchRetry方法,包含确认弹窗和结果展示
- 在单个重试方法中增加对批量重试状态的检查
- 优化重试按钮的禁用状态和提示信息显示
master
常熟吴彦祖 14 hours ago
parent
commit
3e6e6c6ed9
  1. 3
      src/api/warehouse/ifsCallErrorLog.js
  2. 108
      src/views/modules/warehouse/ifsCallErrorLog.vue

3
src/api/warehouse/ifsCallErrorLog.js

@ -15,3 +15,6 @@ export const getUserAuthorizedSites = data => createAPI('api/ifsCallErrorLog/get
// 手工重试IFS接口调用 - rqrq // 手工重试IFS接口调用 - rqrq
export const retryIfsCall = data => createAPI('api/ifsCallErrorLog/retry', 'POST', data) export const retryIfsCall = data => createAPI('api/ifsCallErrorLog/retry', 'POST', data)
export const closeIfsCall = data => createAPI('api/ifsCallErrorLog/closeRetry', 'POST', data) export const closeIfsCall = data => createAPI('api/ifsCallErrorLog/closeRetry', 'POST', data)
// 批量重试IFS接口调用 - rqrq
export const batchRetryIfsCall = data => createAPI('api/ifsCallErrorLog/batchRetry', 'POST', data)

108
src/views/modules/warehouse/ifsCallErrorLog.vue

@ -66,6 +66,14 @@
<el-form-item label=" "> <el-form-item label=" ">
<el-button type="primary" @click="getDataList()">查询</el-button> <el-button type="primary" @click="getDataList()">查询</el-button>
<el-button @click="resetQuery()">重置</el-button> <el-button @click="resetQuery()">重置</el-button>
<!-- rqrq - 一键重试按钮后端批量处理 -->
<el-button
type="warning"
:loading="batchRetrying"
:disabled="batchRetrying || selectedRows.length === 0"
@click="handleBatchRetry()">
{{ batchRetrying ? '批量重试中...' : `一键重试(${selectedRows.length})` }}
</el-button>
<!-- 导出按钮 - rqrq --> <!-- 导出按钮 - rqrq -->
<download-excel <download-excel
:fields="fields()" :fields="fields()"
@ -86,12 +94,20 @@
<!-- 数据表格 --> <!-- 数据表格 -->
<el-table <el-table
ref="dataTable"
:data="dataList" :data="dataList"
:height="height" :height="height"
border border
highlight-current-row highlight-current-row
v-loading="dataListLoading" v-loading="dataListLoading"
@selection-change="handleSelectionChange"
style="width: 100%;"> style="width: 100%;">
<!-- rqrq - 多选列只允许选择PENDING状态的记录 -->
<el-table-column
type="selection"
width="50"
:selectable="checkSelectable">
</el-table-column>
<el-table-column <el-table-column
v-for="(item,index) in columnList" :key="index" v-for="(item,index) in columnList" :key="index"
:sortable="item.columnSortable" :sortable="item.columnSortable"
@ -321,7 +337,9 @@ import {
markErrorAsProcessed, markErrorAsProcessed,
markErrorAsIgnored, markErrorAsIgnored,
getUserAuthorizedSites, getUserAuthorizedSites,
retryIfsCall,closeIfsCall
retryIfsCall,
closeIfsCall,
batchRetryIfsCall
} from '@/api/warehouse/ifsCallErrorLog.js' } from '@/api/warehouse/ifsCallErrorLog.js'
export default { export default {
@ -509,6 +527,11 @@ export default {
markProcessedLoading: false, markProcessedLoading: false,
markIgnoredLoading: false, markIgnoredLoading: false,
retryingRowId: null, // ID - rqrq retryingRowId: null, // ID - rqrq
// - rqrq
selectedRows: [], //
batchRetrying: false, //
batchRetryProgress: 0, //
batchRetryTotal: 0, //
// - rqrq // - rqrq
exportData: [], exportData: [],
exportName: 'IFS错误日志' + this.dayjs().format('YYYYMMDDHHmmss'), exportName: 'IFS错误日志' + this.dayjs().format('YYYYMMDDHHmmss'),
@ -704,7 +727,90 @@ export default {
}, },
// IFS - rqrq // IFS - rqrq
// - rqrq
handleSelectionChange(selection) {
// PENDING - rqrq
this.selectedRows = selection.filter(row => row.processStatus === 'PENDING')
},
// PENDING- rqrq
checkSelectable(row) {
return row.processStatus === 'PENDING'
},
// - rqrq
sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms))
},
// - rqrq
handleBatchRetry() {
if (this.selectedRows.length === 0) {
this.$message.warning('请先选择要重试的记录')
return
}
// - rqrq
if (this.retryingRowId !== null) {
this.$message.warning('请等待当前重试完成后再操作')
return
}
this.$confirm(`确定要重试选中的 ${this.selectedRows.length} 条记录吗?将按时间顺序从最早开始逐个重试。`, '批量重试确认', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// ID - rqrq
const ids = this.selectedRows.map(row => row.id)
// - rqrq
this.batchRetrying = true
this.batchRetryTotal = ids.length
this.batchRetryProgress = 0
// - rqrq
batchRetryIfsCall({ ids }).then(({data}) => {
if (data && data.code === 0) {
const successCount = data.successCount || 0
const failCount = data.failCount || 0
// - rqrq
this.$alert(
`批量重试完成!<br/>成功:<span style="color: #67C23A; font-weight: bold;">${successCount}</span> 条<br/>失败:<span style="color: #F56C6C; font-weight: bold;">${failCount}</span> 条`,
'重试结果',
{
dangerouslyUseHTMLString: true,
confirmButtonText: '确定'
}
)
} else {
this.$alert(data.msg || '批量重试失败', '错误', { confirmButtonText: '确定' })
}
}).catch(error => {
console.error('批量重试失败:', error)
this.$alert('批量重试失败,请稍后再试', '错误', { confirmButtonText: '确定' })
}).finally(() => {
// - rqrq
this.batchRetrying = false
this.batchRetryProgress = 0
this.batchRetryTotal = 0
this.selectedRows = []
// - rqrq
this.getDataList()
})
}).catch(() => {
//
})
},
handleRetry(row) { handleRetry(row) {
// - rqrq
if (this.batchRetrying) {
this.$message.warning('批量重试进行中,请等待完成')
return
}
// - rqrq // - rqrq
if (this.retryingRowId !== null) { if (this.retryingRowId !== null) {
this.$message.warning('请等待当前重试完成后再操作') this.$message.warning('请等待当前重试完成后再操作')

Loading…
Cancel
Save