Browse Source

2025-10-30

生产派工单列表支持拖拽
master
fengyuan_yang 11 months ago
parent
commit
f09bee24a5
  1. 65
      src/views/modules/shopOrder/productionOrderScheduling/searchProductionDispatchList.vue

65
src/views/modules/shopOrder/productionOrderScheduling/searchProductionDispatchList.vue

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

Loading…
Cancel
Save