Browse Source

2025-11-05

接口日志管理
master
fengyuan_yang 2 months ago
parent
commit
4aed2a6ece
  1. 5
      src/api/sys/interface-log.js
  2. 29
      src/views/modules/qc/FQCResultEntry.vue
  3. 29
      src/views/modules/qc/IQCResultEntry.vue
  4. 30
      src/views/modules/qc/OQCResultEntry.vue
  5. 112
      src/views/modules/sys/interface/interfaceLog.vue
  6. 73
      src/views/modules/warehouse/countingReport.vue

5
src/api/sys/interface-log.js

@ -10,7 +10,10 @@ export const getApiLogParams = data => createAPI(`/sys/interfaceLog/getParams`,'
// 删除接口日志
export const deleteApiLogs = data => createAPI(`/sys/interfaceLog/delete`,'post',data)
// 重试接口
// 批量重试接口
export const retryApiLogs = data => createAPI(`/sys/interfaceLog/retry`,'post',data)
// 手动重试单个接口
export const retryInterface = data => createAPI(`/sys/interfaceLog/retryInterface`,'post',data)

29
src/views/modules/qc/FQCResultEntry.vue

@ -122,7 +122,7 @@
</el-col>
<el-col :span="6">
<el-form-item label="状态">
<el-select v-model="searchData.states" multiple collapse-tags placeholder="请选择状态">
<el-select v-model="searchData.states" multiple collapse-tags placeholder="请选择状态" class="status-select">
<el-option label="未开始" value="未开始"></el-option>
<el-option label="待检验" value="待检验"></el-option>
<el-option label="待审核" value="待审核"></el-option>
@ -4248,6 +4248,33 @@
width: 100%;
}
/* 状态下拉框优化 - 解决不同分辨率下显示问题 */
.search-form /deep/ .status-select {
width: 100%;
}
.search-form /deep/ .status-select .el-input__inner {
min-height: 36px;
line-height: 36px;
padding-right: 30px;
}
.search-form /deep/ .status-select .el-select__tags {
max-width: calc(100% - 30px);
overflow: hidden;
}
.search-form /deep/ .status-select .el-tag {
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.search-form /deep/ .status-select .el-tag__close {
flex-shrink: 0;
}
/* 操作按钮区域 */
.search-actions {
display: flex;

29
src/views/modules/qc/IQCResultEntry.vue

@ -112,7 +112,7 @@
</el-col>
<el-col :span="6">
<el-form-item label="状态">
<el-select v-model="searchData.states" multiple collapse-tags placeholder="请选择状态">
<el-select v-model="searchData.states" multiple collapse-tags placeholder="请选择状态" class="status-select">
<el-option label="未开始" value="未开始"></el-option>
<el-option label="待检验" value="待检验"></el-option>
<el-option label="待审核" value="待审核"></el-option>
@ -3297,6 +3297,33 @@
width: 100%;
}
/* 状态下拉框优化 - 解决不同分辨率下显示问题 */
.search-form /deep/ .status-select {
width: 100%;
}
.search-form /deep/ .status-select .el-input__inner {
min-height: 36px;
line-height: 36px;
padding-right: 30px;
}
.search-form /deep/ .status-select .el-select__tags {
max-width: calc(100% - 30px);
overflow: hidden;
}
.search-form /deep/ .status-select .el-tag {
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.search-form /deep/ .status-select .el-tag__close {
flex-shrink: 0;
}
/* 操作按钮区域 */
.search-actions {
display: flex;

30
src/views/modules/qc/OQCResultEntry.vue

@ -139,7 +139,8 @@
v-model="searchData.states"
multiple
collapse-tags
placeholder="请选择状态">
placeholder="请选择状态"
class="status-select">
<el-option label="未开始" value="未开始"></el-option>
<el-option label="待检验" value="待检验"></el-option>
<el-option label="待审核" value="待审核"></el-option>
@ -3254,6 +3255,33 @@
width: 100%;
}
/* 状态下拉框优化 - 解决不同分辨率下显示问题 */
.search-form /deep/ .status-select {
width: 100%;
}
.search-form /deep/ .status-select .el-input__inner {
min-height: 36px;
line-height: 36px;
padding-right: 30px;
}
.search-form /deep/ .status-select .el-select__tags {
max-width: calc(100% - 30px);
overflow: hidden;
}
.search-form /deep/ .status-select .el-tag {
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.search-form /deep/ .status-select .el-tag__close {
flex-shrink: 0;
}
/* 操作按钮区域 */
.search-actions {
display: flex;

112
src/views/modules/sys/interface/interfaceLog.vue

@ -139,7 +139,6 @@
<!-- 表格操作按钮 -->
<div class="table-actions">
<el-button
v-if="dataListSelections.length > 0"
type="danger"
@click="deleteHandle()"
icon="el-icon-delete"
@ -147,12 +146,11 @@
批量删除
</el-button>
<el-button
v-if="dataListSelections.length > 0"
type="success"
@click="retryHandle()"
icon="el-icon-refresh"
type="warning"
@click="batchRetryInterfaceHandle()"
icon="el-icon-refresh-right"
size="small">
批量重试
手动重试
</el-button>
</div>
@ -297,7 +295,7 @@
</template>
<script>
import { searchApiLogs, getApiLogParams, deleteApiLogs, retryApiLogs } from '@/api/sys/interface-log'
import { searchApiLogs, getApiLogParams, deleteApiLogs, retryApiLogs, retryInterface } from '@/api/sys/interface-log'
export default {
data() {
@ -457,22 +455,108 @@ export default {
})
},
//
retryHandle() {
const ids = this.dataListSelections.map(item => item.id)
this.$confirm('确定要重试选中的接口吗?', '提示', {
//
batchRetryInterfaceHandle() {
if (this.dataListSelections.length === 0) {
this.$message.warning('请选择要重试的记录!')
return
}
const count = this.dataListSelections.length
this.$confirm(`确定要手动重试选中的 ${count} 个接口吗?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
retryApiLogs({ ids }).then(({ data }) => {
const loading = this.$loading({
lock: true,
text: `正在重试 ${count} 个接口,请稍候...`,
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
//
const retryList = this.dataListSelections.map(item => ({
site: item.site,
buNo: item.buNo,
requestId: item.requestId,
requestGroupId: item.requestGroupId,
interfaceName: item.interfaceName
}))
//
retryInterface({ retryList }).then(({ data }) => {
loading.close()
if (data && data.code === 0) {
this.$message.success('重试成功')
const result = data.result
const successCount = result.successCount || 0
const failureCount = result.failureCount || 0
const errorCount = result.errorCount || 0
//
let message = `重试完成!成功:${successCount},失败:${failureCount},异常:${errorCount}`
if (successCount === count) {
this.$message.success(message)
} else if (successCount > 0) {
this.$message.warning(message)
} else {
this.$message.error(message)
}
//
if (result.details && result.details.length > 0) {
this.showRetryResultDialog(result.details)
}
this.getDataList()
} else {
this.$message.error(data.msg || '重试失败')
this.$message.error(data.msg || '批量重试失败')
}
}).catch(err => {
loading.close()
this.$message.error('批量重试异常:' + (err.message || '请求失败'))
})
})
},
//
showRetryResultDialog(details) {
const successList = details.filter(d => d.status === 'success')
const failureList = details.filter(d => d.status === 'failure')
const errorList = details.filter(d => d.status === 'error')
let messageHtml = '<div style="max-height: 400px; overflow-y: auto;">'
if (successList.length > 0) {
messageHtml += '<div style="margin-bottom: 15px;"><strong style="color: #67C23A;">成功 (' + successList.length + '):</strong><ul style="margin: 5px 0; padding-left: 20px;">'
successList.forEach(item => {
messageHtml += '<li>' + item.interfaceName + (item.u8CCode ? ' - U8单号:' + item.u8CCode : '') + '</li>'
})
messageHtml += '</ul></div>'
}
if (failureList.length > 0) {
messageHtml += '<div style="margin-bottom: 15px;"><strong style="color: #E6A23C;">失败 (' + failureList.length + '):</strong><ul style="margin: 5px 0; padding-left: 20px;">'
failureList.forEach(item => {
messageHtml += '<li>' + item.interfaceName + ':' + (item.message || '未知错误') + '</li>'
})
messageHtml += '</ul></div>'
}
if (errorList.length > 0) {
messageHtml += '<div><strong style="color: #F56C6C;">异常 (' + errorList.length + '):</strong><ul style="margin: 5px 0; padding-left: 20px;">'
errorList.forEach(item => {
messageHtml += '<li>' + item.interfaceName + ':' + (item.message || '未知异常') + '</li>'
})
messageHtml += '</ul></div>'
}
messageHtml += '</div>'
this.$alert(messageHtml, '批量重试结果详情', {
confirmButtonText: '确定',
dangerouslyUseHTMLString: true
})
}
}

73
src/views/modules/warehouse/countingReport.vue

@ -132,7 +132,7 @@
</el-form-item>
</el-form>
<el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px">
<el-form-item>
<el-form-item prop="locationId">
<span style="cursor: pointer" slot="label" @click="getBaseList(22)"><a href="#">盘点货位</a></span>
<el-input v-model="modalData.locationId" @change="locationBlur(22)" style="width: 135px"></el-input>
<el-input v-model="modalData.locationName" disabled style="width: 320px"></el-input>
@ -282,13 +282,23 @@ export default {
message: ' ',
trigger: ['blur','change']
}],
warehouseId: [{
planDate: [{
required: true,
message: ' ',
trigger: ['blur','change']
}],
warehouseId: [{
required: false,
message: ' ',
trigger: ['blur','change']
}],
locationId: [{
required: false,
message: ' ',
trigger: ['blur','change']
}],
partNo: [{
required: true,
required: false,
message: ' ',
trigger: ['blur','change']
}]
@ -392,6 +402,12 @@ export default {
partDesc: '',
remark: ''
}
//
this.rules.warehouseId[0].required = false
this.rules.locationId[0].required = false
this.rules.partNo[0].required = false
this.$nextTick(() => {
if (this.$refs.modalForm) {
this.$refs.modalForm.clearValidate()
@ -420,6 +436,22 @@ export default {
partDesc: row.partDesc,
remark: row.remark
}
//
if (row.checkDimension === '按仓库') {
this.rules.warehouseId[0].required = true
this.rules.locationId[0].required = false
this.rules.partNo[0].required = false
} else if (row.checkDimension === '按货位') {
this.rules.warehouseId[0].required = false
this.rules.locationId[0].required = true
this.rules.partNo[0].required = false
} else if (row.checkDimension === '按物料') {
this.rules.warehouseId[0].required = false
this.rules.locationId[0].required = false
this.rules.partNo[0].required = true
}
this.$nextTick(() => {
if (this.$refs.modalForm) {
this.$refs.modalForm.clearValidate()
@ -429,10 +461,37 @@ export default {
//
dimensionChange() {
//
if (this.modalData.checkDimension === '按物料') {
this.modalData.locationId = ''
this.modalData.locationName = ''
//
this.modalData.warehouseId = ''
this.modalData.warehouseName = ''
this.modalData.locationId = ''
this.modalData.locationName = ''
this.modalData.partNo = ''
this.modalData.partDesc = ''
//
this.$nextTick(() => {
if (this.$refs.modalForm) {
this.$refs.modalForm.clearValidate()
}
})
//
if (this.modalData.checkDimension === '按仓库') {
//
this.rules.warehouseId[0].required = true
this.rules.locationId[0].required = false
this.rules.partNo[0].required = false
} else if (this.modalData.checkDimension === '按货位') {
//
this.rules.warehouseId[0].required = false
this.rules.locationId[0].required = true
this.rules.partNo[0].required = false
} else if (this.modalData.checkDimension === '按物料') {
//
this.rules.warehouseId[0].required = false
this.rules.locationId[0].required = false
this.rules.partNo[0].required = true
}
},

Loading…
Cancel
Save