|
|
@ -95,6 +95,7 @@ |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
</el-form> |
|
|
</el-form> |
|
|
<el-table |
|
|
<el-table |
|
|
|
|
|
ref="dispatchTable" |
|
|
:height="height" |
|
|
:height="height" |
|
|
:data="dataList" |
|
|
:data="dataList" |
|
|
border |
|
|
border |
|
|
@ -1005,9 +1006,6 @@ export default { |
|
|
handleDragEnd(evt) { |
|
|
handleDragEnd(evt) { |
|
|
const { oldIndex, newIndex } = evt; |
|
|
const { oldIndex, newIndex } = evt; |
|
|
|
|
|
|
|
|
console.log('=== 拖拽开始 ==='); |
|
|
|
|
|
console.log('oldIndex:', oldIndex, 'newIndex:', newIndex); |
|
|
|
|
|
|
|
|
|
|
|
// 如果位置没有变化,不处理 |
|
|
// 如果位置没有变化,不处理 |
|
|
if (oldIndex === newIndex) { |
|
|
if (oldIndex === newIndex) { |
|
|
return; |
|
|
return; |
|
|
@ -1017,27 +1015,19 @@ export default { |
|
|
const movedItem = this.dataList[oldIndex]; |
|
|
const movedItem = this.dataList[oldIndex]; |
|
|
const targetSerialNumber = this.dataList[newIndex].serialNumber; |
|
|
const targetSerialNumber = this.dataList[newIndex].serialNumber; |
|
|
|
|
|
|
|
|
console.log('被拖拽项:', movedItem.orderNo, '原序号:', movedItem.serialNumber); |
|
|
|
|
|
console.log('目标位置序号:', targetSerialNumber); |
|
|
|
|
|
|
|
|
|
|
|
// 记录被拖拽的项目(用于刷新后定位) |
|
|
// 记录被拖拽的项目(用于刷新后定位) |
|
|
this.draggedItem = { |
|
|
this.draggedItem = { |
|
|
site: movedItem.site, |
|
|
site: movedItem.site, |
|
|
orderNo: movedItem.orderNo, |
|
|
orderNo: movedItem.orderNo, |
|
|
itemNo: movedItem.itemNo, |
|
|
itemNo: movedItem.itemNo, |
|
|
seqNo: movedItem.seqNo, // 使用 seqNo(派工单号) |
|
|
|
|
|
newSerialNumber: targetSerialNumber // 记录目标位置的序号 |
|
|
|
|
|
|
|
|
seqNo: movedItem.seqNo, |
|
|
|
|
|
newSerialNumber: targetSerialNumber |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
// 移动数据(视觉上立即生效) |
|
|
// 移动数据(视觉上立即生效) |
|
|
this.dataList.splice(oldIndex, 1); |
|
|
this.dataList.splice(oldIndex, 1); |
|
|
this.dataList.splice(newIndex, 0, movedItem); |
|
|
this.dataList.splice(newIndex, 0, movedItem); |
|
|
|
|
|
|
|
|
console.log('移动后的dataList顺序:'); |
|
|
|
|
|
this.dataList.forEach((item, idx) => { |
|
|
|
|
|
console.log(` 位置${idx}: ${item.orderNo}-工序${item.itemNo} | SeqNo:${item.seqNo} | serial_number:${item.serialNumber}`); |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
// 重新分配序号并保存到后端 |
|
|
// 重新分配序号并保存到后端 |
|
|
this.reassignSerialNumbers(oldIndex, newIndex); |
|
|
this.reassignSerialNumbers(oldIndex, newIndex); |
|
|
}, |
|
|
}, |
|
|
@ -1066,12 +1056,11 @@ export default { |
|
|
|
|
|
|
|
|
// 只更新序号发生变化的记录 |
|
|
// 只更新序号发生变化的记录 |
|
|
if (item.serialNumber !== newSerialNumber) { |
|
|
if (item.serialNumber !== newSerialNumber) { |
|
|
console.log(`更新序号: ${item.orderNo}-工序${item.itemNo}-SeqNo${item.seqNo} 从 ${item.serialNumber} 改为 ${newSerialNumber}`); |
|
|
|
|
|
updateList.push({ |
|
|
updateList.push({ |
|
|
site: item.site, |
|
|
site: item.site, |
|
|
orderNo: item.orderNo, |
|
|
orderNo: item.orderNo, |
|
|
itemNo: item.itemNo, |
|
|
itemNo: item.itemNo, |
|
|
scheduleSeqNo: item.seqNo, // 使用 seqNo(派工单号),而不是 sScheduledSeqNo |
|
|
|
|
|
|
|
|
scheduleSeqNo: item.seqNo, |
|
|
resourceId: item.sResourceID, |
|
|
resourceId: item.sResourceID, |
|
|
serialNumber: newSerialNumber, |
|
|
serialNumber: newSerialNumber, |
|
|
}); |
|
|
}); |
|
|
@ -1079,40 +1068,27 @@ export default { |
|
|
}); |
|
|
}); |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
console.log('需要更新的记录数:', updateList.length); |
|
|
|
|
|
console.log('更新列表:', updateList); |
|
|
|
|
|
|
|
|
|
|
|
// 如果有需要更新的记录,调用后端接口 |
|
|
// 如果有需要更新的记录,调用后端接口 |
|
|
if (updateList.length > 0) { |
|
|
if (updateList.length > 0) { |
|
|
this.saveSortOrder(updateList); |
|
|
this.saveSortOrder(updateList); |
|
|
} else { |
|
|
|
|
|
console.log('没有需要更新的记录'); |
|
|
|
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
/*保存排序到后端*/ |
|
|
/*保存排序到后端*/ |
|
|
saveSortOrder(updateList) { |
|
|
saveSortOrder(updateList) { |
|
|
console.log('调用后端接口,更新序号...'); |
|
|
|
|
|
console.log('请求数据:', JSON.stringify(updateList, null, 2)); |
|
|
|
|
|
|
|
|
|
|
|
batchUpdateSerialNumber(updateList).then(({data}) => { |
|
|
batchUpdateSerialNumber(updateList).then(({data}) => { |
|
|
console.log('后端响应:', data); |
|
|
|
|
|
|
|
|
|
|
|
if (data.code === 0) { |
|
|
if (data.code === 0) { |
|
|
this.$message.success('排序保存成功'); |
|
|
this.$message.success('排序保存成功'); |
|
|
console.log('排序保存成功,准备刷新列表'); |
|
|
|
|
|
// 成功后刷新列表,并定位到拖拽的行 |
|
|
// 成功后刷新列表,并定位到拖拽的行 |
|
|
this.refreshAndLocate(); |
|
|
this.refreshAndLocate(); |
|
|
} else { |
|
|
} else { |
|
|
console.error('排序保存失败:', data.msg); |
|
|
|
|
|
this.$message.error(data.msg || '排序保存失败'); |
|
|
this.$message.error(data.msg || '排序保存失败'); |
|
|
// 失败时重新加载数据 |
|
|
// 失败时重新加载数据 |
|
|
this.getData(); |
|
|
this.getData(); |
|
|
this.draggedItem = null; |
|
|
this.draggedItem = null; |
|
|
} |
|
|
} |
|
|
}).catch(error => { |
|
|
}).catch(error => { |
|
|
console.error('后端接口调用异常:', error); |
|
|
|
|
|
this.$message.error('排序保存失败: ' + error.message); |
|
|
|
|
|
|
|
|
this.$message.error('排序保存失败'); |
|
|
// 失败时重新加载数据 |
|
|
// 失败时重新加载数据 |
|
|
this.getData(); |
|
|
this.getData(); |
|
|
this.draggedItem = null; |
|
|
this.draggedItem = null; |
|
|
@ -1121,17 +1097,11 @@ export default { |
|
|
|
|
|
|
|
|
/*刷新列表并定位到拖拽的行*/ |
|
|
/*刷新列表并定位到拖拽的行*/ |
|
|
refreshAndLocate() { |
|
|
refreshAndLocate() { |
|
|
console.log('开始刷新列表并定位...'); |
|
|
|
|
|
|
|
|
|
|
|
// 刷新数据,等待加载完成 |
|
|
// 刷新数据,等待加载完成 |
|
|
this.getData().then(() => { |
|
|
this.getData().then(() => { |
|
|
console.log('数据刷新完成,开始定位'); |
|
|
|
|
|
|
|
|
|
|
|
// 等待DOM更新后定位 |
|
|
// 等待DOM更新后定位 |
|
|
this.$nextTick(() => { |
|
|
this.$nextTick(() => { |
|
|
if (this.draggedItem) { |
|
|
if (this.draggedItem) { |
|
|
console.log('查找拖拽项:', this.draggedItem); |
|
|
|
|
|
|
|
|
|
|
|
// 在刷新后的数据中找到拖拽的项目 |
|
|
// 在刷新后的数据中找到拖拽的项目 |
|
|
const targetIndex = this.dataList.findIndex(item => |
|
|
const targetIndex = this.dataList.findIndex(item => |
|
|
item.site === this.draggedItem.site && |
|
|
item.site === this.draggedItem.site && |
|
|
@ -1140,11 +1110,8 @@ export default { |
|
|
item.seqNo === this.draggedItem.seqNo |
|
|
item.seqNo === this.draggedItem.seqNo |
|
|
); |
|
|
); |
|
|
|
|
|
|
|
|
console.log('找到目标行索引:', targetIndex); |
|
|
|
|
|
|
|
|
|
|
|
if (targetIndex !== -1) { |
|
|
if (targetIndex !== -1) { |
|
|
const targetItem = this.dataList[targetIndex]; |
|
|
const targetItem = this.dataList[targetIndex]; |
|
|
console.log('目标行信息:', targetItem.orderNo, '序号:', targetItem.serialNumber); |
|
|
|
|
|
|
|
|
|
|
|
// 找到目标行,设置为当前选中行 |
|
|
// 找到目标行,设置为当前选中行 |
|
|
this.scheduleRow = targetItem; |
|
|
this.scheduleRow = targetItem; |
|
|
@ -1163,12 +1130,9 @@ export default { |
|
|
|
|
|
|
|
|
// 触发行点击事件,高亮显示 |
|
|
// 触发行点击事件,高亮显示 |
|
|
rows[targetIndex].click(); |
|
|
rows[targetIndex].click(); |
|
|
console.log('已定位到目标行'); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
}); |
|
|
}); |
|
|
} else { |
|
|
|
|
|
console.log('未找到目标行'); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 清除拖拽记录 |
|
|
// 清除拖拽记录 |
|
|
@ -1176,7 +1140,6 @@ export default { |
|
|
} |
|
|
} |
|
|
}); |
|
|
}); |
|
|
}).catch(error => { |
|
|
}).catch(error => { |
|
|
console.error('刷新数据失败:', error); |
|
|
|
|
|
this.draggedItem = null; |
|
|
this.draggedItem = null; |
|
|
}); |
|
|
}); |
|
|
}, |
|
|
}, |
|
|
@ -1224,13 +1187,19 @@ export default { |
|
|
_timestamp: new Date().getTime() |
|
|
_timestamp: new Date().getTime() |
|
|
}; |
|
|
}; |
|
|
return searchProductionDispatchList(searchDataWithTimestamp).then(({data}) => { |
|
|
return searchProductionDispatchList(searchDataWithTimestamp).then(({data}) => { |
|
|
this.dataList = data.rows; |
|
|
|
|
|
console.log('数据加载完成,共', data.rows.length, '条记录'); |
|
|
|
|
|
|
|
|
// 先清空数据列表,强制表格重新渲染 |
|
|
|
|
|
this.dataList = []; |
|
|
|
|
|
|
|
|
// 打印前10条记录的序号(用于调试) |
|
|
|
|
|
console.log('前10条记录的序号:'); |
|
|
|
|
|
data.rows.slice(0, 10).forEach((item, idx) => { |
|
|
|
|
|
console.log(` ${idx}: ${item.orderNo}-工序${item.itemNo} | SeqNo:${item.seqNo} | serial_number:${item.serialNumber} | S_ScheduledSeqNo:${item.sScheduledSeqNo}`); |
|
|
|
|
|
|
|
|
// 在下一个tick中设置数据并清除排序 |
|
|
|
|
|
this.$nextTick(() => { |
|
|
|
|
|
this.dataList = data.rows; |
|
|
|
|
|
|
|
|
|
|
|
// 再等一个tick确保DOM更新完成 |
|
|
|
|
|
this.$nextTick(() => { |
|
|
|
|
|
if (this.$refs.dispatchTable) { |
|
|
|
|
|
this.$refs.dispatchTable.clearSort(); |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
return data.rows; |
|
|
return data.rows; |
|
|
|