// 自定义扩展业务代码
import gridBody from "./extend/OrderStockTake.vue";
// 引入杂收杂发平账弹窗组件
import gridHeader from "./extend/TakeStockSelect.vue";
import { ElMessageBox, ElLoading, ElMessage } from "element-plus";
let extension = {
components: {
// 查询界面扩展组件
gridHeader: gridHeader,
gridBody: gridBody, // 原有盘点弹窗组件
gridFooter: '',
modelHeader: '',
modelBody: '',
modelFooter: ''
},
tableAction: '', // 无需指定表名
buttons: { view: [], box: [], detail: [] }, // 扩展按钮
methods: {
onInit() {
// 原有盘点按钮逻辑保留
let OrderStockTakeBtn = this.buttons.find(x => x.value === 'OrderStockTake');
if (OrderStockTakeBtn) {
OrderStockTakeBtn.onClick = function () {
let rows = this.$refs.table.getSelected();
if (rows.length === 0) return this.$error("请选择一条盘点单据数据!");
if (rows.length > 1) return this.$error("只能选择一条盘点单据数据!");
const selectedReceiptNo = rows[0].orderNo;
if (!selectedReceiptNo) return this.$error("选中的单据缺少有效的单据号!");
this.$refs.gridBody.open(selectedReceiptNo);
};
}
// 监听原有弹窗事件(保留)
this.$nextTick(() => {
const stockTakeComp = this.$refs.gridBody;
if (stockTakeComp) {
stockTakeComp.$on('refresh', () => {
this.$refs.table.reload();
});
stockTakeComp.$on('box-returned', (boxNo) => {
this.$success(`料箱【${boxNo}】回库成功,表格将刷新!`);
this.$refs.table.reload();
});
}
});
// ========== 新增操作列:人工平账 + 杂收杂发平账 ==========
this.columns.push({
field: 'operation',
title: '操作',
width: 200,
fixed: 'right',
align: 'center',
formatter: (row) => {
return `
人工平账
杂收杂发平账
`;
},
click: (row, column, event) => {
const target = event.target;
// 区分点击的是人工平账还是杂收杂发平账
if (target.closest('.manual-reconciliation')) {
this.handleManualReconciliation(row); // 人工平账逻辑
} else if (target.closest('.misc-reconciliation')) {
this.handleMiscReconciliation(row); // 杂收杂发平账逻辑
}
}
});
},
// ========== 人工平账核心逻辑 ==========
handleManualReconciliation(row) {
// 弹出确认框
ElMessageBox.confirm(
'确认要执行人工平账操作吗?',
'操作确认',
{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning'
}
).then(async () => {
// 添加遮罩层防止重复点击
const loading = ElLoading.service({
lock: true,
text: '处理中,请稍候...',
background: 'rgba(0, 0, 0, 0.7)'
});
try {
// 调用人工平账接口
const response = await this.http.get(`/api/TakeStockOrder/ManualReconciliation?id=${row.id}`);
if (response.status) {
ElMessage.success('人工平账操作成功!');
this.$refs.table.reload(); // 刷新表格
} else {
ElMessage.error(`操作失败:${response.message || '未知错误'}`);
}
} catch (error) {
} finally {
// 关闭遮罩层
loading.close();
}
}).catch(() => {
ElMessage.info('已取消人工平账操作');
});
},
// ========== 杂收杂发平账核心逻辑(修改后) ==========
handleMiscReconciliation(row) {
// 选中当前行
const table = this.$refs.table.$refs.table;
if (table) {
table.clearSelection();
table.toggleRowSelection(row, true);
}
// 调用接口获取杂收杂发平账数据
const fetchMiscData = async () => {
const loading = ElLoading.service({
lock: true,
text: '加载数据中...',
background: 'rgba(0, 0, 0, 0.7)'
});
try {
// 调用接口,传递row中的remark和id参数
const response = await this.http.get(`/api/TakeStockOrder/SelectOrder?remark=${row.remark || ''}&id=${row.id}`);
loading.close();
if (response.status) {
if (!Array.isArray(response.data) || response.data.length === 0) {
ElMessage.warning("未查询到相关数据");
// 打开空数据的弹窗
this.$refs.gridHeader.open(row, []);
return;
}
// 提取需要展示的字段
const displayData = response.data.map(item => ({
orderId: item.orderId || '',
materielCode: item.materielCode || '',
materielName: item.materielName || '',
batchNo: item.batchNo || '',
orderQuantity: item.orderQuantity || 0,
unit: item.unit || '',
supplyCode: item.supplyCode || '',
warehouseCode: item.warehouseCode || ''
}));
// 打开弹窗并传递处理后的数据
this.$refs.gridHeader.open(row, displayData);
} else {
ElMessage.error(`查询失败:${response.message || '未知错误'}`);
}
} catch (error) {
loading.close();
ElMessage.error(`网络异常:${error.message || '接口调用失败'}`);
}
};
// 执行数据查询并打开弹窗
fetchMiscData();
},
onInited() {
// 框架初始化完成后执行
},
searchBefore(param) {
// 查询前拦截
return true;
},
searchAfter(result) {
// 查询后数据处理
return true;
},
addBefore(formData) {
return true;
},
updateBefore(formData) {
return true;
},
rowClick({ row, column, event }) {
// 单击行选中当前行
this.$refs.table.$refs.table.toggleRowSelection(row);
},
modelOpenAfter(row) {
// 新建/编辑弹窗打开后处理
}
}
};
export default extension;