修改猪栏卡片和猪舍时列表不折叠

This commit is contained in:
2025-10-23 10:22:11 +08:00
parent 0f9429be45
commit edfc641f93
3 changed files with 70 additions and 25 deletions

View File

@@ -49,7 +49,7 @@ export default {
}, },
penData: { penData: {
type: Object, type: Object,
default: () => ({}) // 改为非必需,并提供默认值 required: true
}, },
isEdit: { isEdit: {
type: Boolean, type: Boolean,
@@ -90,6 +90,9 @@ export default {
const handleClose = () => { const handleClose = () => {
emit('update:visible', false); emit('update:visible', false);
emit('cancel'); emit('cancel');
nextTick(() => {
formRef.value?.resetFields();
});
}; };
const handleSubmit = async () => { const handleSubmit = async () => {
@@ -98,14 +101,15 @@ export default {
if (valid) { if (valid) {
loading.value = true; loading.value = true;
try { try {
let response;
if (props.isEdit) { if (props.isEdit) {
const { id, ...updateData } = formData; const { id, ...updateData } = formData;
await updatePen(id, updateData); response = await updatePen(id, updateData);
} else { } else {
const { id, status, ...createData } = formData; const { id, status, ...createData } = formData;
await createPen(createData); response = await createPen(createData);
} }
emit('success'); emit('success', response.data);
handleClose(); handleClose();
} catch (error) { } catch (error) {
ElMessage.error((props.isEdit ? '更新' : '创建') + '猪栏失败: ' + (error.message || '未知错误')); ElMessage.error((props.isEdit ? '更新' : '创建') + '猪栏失败: ' + (error.message || '未知错误'));
@@ -118,23 +122,15 @@ export default {
watch(() => props.visible, (newVal) => { watch(() => props.visible, (newVal) => {
if (newVal) { if (newVal) {
// 重置表单以适应新数据
Object.assign(formData, initialFormData()); Object.assign(formData, initialFormData());
if (props.isEdit && props.penData) { if (props.isEdit && props.penData) {
// 编辑模式:填充数据
Object.assign(formData, props.penData); Object.assign(formData, props.penData);
} else if (props.penData) { } else if (props.penData) {
// 添加模式:只设置 house_id
formData.house_id = props.penData.house_id; formData.house_id = props.penData.house_id;
} }
nextTick(() => { nextTick(() => {
formRef.value?.clearValidate(); formRef.value?.clearValidate();
}); });
} else {
// 对话框关闭时重置表单
nextTick(() => {
formRef.value?.resetFields();
});
} }
}); });

View File

@@ -88,12 +88,13 @@ export default {
loading.value = true; loading.value = true;
try { try {
const submitData = { name: formData.name, description: formData.description }; const submitData = { name: formData.name, description: formData.description };
let response;
if (props.isEdit) { if (props.isEdit) {
await updatePigHouse(formData.id, submitData); response = await updatePigHouse(formData.id, submitData);
} else { } else {
await createPigHouse(submitData); response = await createPigHouse(submitData);
} }
emit('success'); emit('success', response.data);
handleClose(); handleClose();
} catch (error) { } catch (error) {
ElMessage.error((props.isEdit ? '更新' : '创建') + '猪舍失败: ' + (error.message || '未知错误')); ElMessage.error((props.isEdit ? '更新' : '创建') + '猪舍失败: ' + (error.message || '未知错误'));

View File

@@ -97,6 +97,8 @@ export default {
penDialogVisible: false, penDialogVisible: false,
isEditPen: false, isEditPen: false,
currentPen: {}, currentPen: {},
// 批次映射,用于本地组装猪栏的批次名称
batchMap: new Map(),
}; };
}, },
async mounted() { async mounted() {
@@ -117,6 +119,9 @@ export default {
const pens = Array.isArray(pensResponse.data) ? pensResponse.data : []; const pens = Array.isArray(pensResponse.data) ? pensResponse.data : [];
const batches = Array.isArray(batchesResponse.data) ? batchesResponse.data : []; const batches = Array.isArray(batchesResponse.data) ? batchesResponse.data : [];
// 更新 batchMap
this.batchMap = new Map(batches.map(batch => [batch.id, batch.batch_number]));
this.pigHousesData = this.assembleData(houses, pens, batches); this.pigHousesData = this.assembleData(houses, pens, batches);
} catch (err) { } catch (err) {
this.error = err.message || '无法获取数据'; this.error = err.message || '无法获取数据';
@@ -125,15 +130,20 @@ export default {
this.loading = false; this.loading = false;
} }
}, },
assembleData(houses, pens, batches) { assembleData(houses, pens) {
const batchMap = new Map(batches.map(batch => [batch.id, batch.batch_number])); // 此时 houses 和 pens 已确保是数组batches 已经更新到 this.batchMap
const houseMap = new Map(houses.map(house => [house.id, { ...house, pens: [], isExpanded: false }])); const houseMap = new Map();
houses.forEach(house => {
// 确保保留 isExpanded 状态
const existingHouse = this.pigHousesData.find(h => h.id === house.id);
houseMap.set(house.id, { ...house, pens: [], isExpanded: existingHouse ? existingHouse.isExpanded : false });
});
for (const pen of pens) { for (const pen of pens) {
if (houseMap.has(pen.house_id)) { if (houseMap.has(pen.house_id)) {
const penWithBatch = { const penWithBatch = {
...pen, ...pen,
batch_number: batchMap.get(pen.pig_batch_id) || null batch_number: this.batchMap.get(pen.pig_batch_id) || null
}; };
houseMap.get(pen.house_id).pens.push(penWithBatch); houseMap.get(pen.house_id).pens.push(penWithBatch);
} }
@@ -160,7 +170,8 @@ export default {
}); });
await deletePigHouse(house.id); await deletePigHouse(house.id);
this.$message.success('删除成功'); this.$message.success('删除成功');
await this.loadData(); // 本地更新数据,不重新加载全部
this.pigHousesData = this.pigHousesData.filter(h => h.id !== house.id);
} catch (err) { } catch (err) {
if (err !== 'cancel') { if (err !== 'cancel') {
this.$message.error('删除失败: ' + (err.message || '未知错误')); this.$message.error('删除失败: ' + (err.message || '未知错误'));
@@ -168,9 +179,22 @@ export default {
} }
} }
}, },
async handleHouseSuccess() { handleHouseSuccess(newHouseData) {
this.houseDialogVisible = false; this.houseDialogVisible = false;
await this.loadData(); if (this.isEditHouse) {
// 更新现有猪舍
const index = this.pigHousesData.findIndex(h => h.id === newHouseData.id);
if (index !== -1) {
// 保留 pens 和 isExpanded 状态
const existingHouse = this.pigHousesData[index];
this.pigHousesData[index] = { ...newHouseData, pens: existingHouse.pens, isExpanded: existingHouse.isExpanded };
}
this.$message.success('猪舍更新成功');
} else {
// 添加新猪舍
this.pigHousesData.push({ ...newHouseData, pens: [], isExpanded: false });
this.$message.success('猪舍添加成功');
}
}, },
// --- 猪栏操作 --- // --- 猪栏操作 ---
handleAddPen(house) { handleAddPen(house) {
@@ -192,7 +216,11 @@ export default {
}); });
await deletePen(pen.id); await deletePen(pen.id);
this.$message.success('删除成功'); this.$message.success('删除成功');
await this.loadData(); // 本地更新数据,不重新加载全部
const house = this.pigHousesData.find(h => h.id === pen.house_id);
if (house) {
house.pens = house.pens.filter(p => p.id !== pen.id);
}
} catch (err) { } catch (err) {
if (err !== 'cancel') { if (err !== 'cancel') {
this.$message.error('删除失败: ' + (err.message || '未知错误')); this.$message.error('删除失败: ' + (err.message || '未知错误'));
@@ -200,9 +228,29 @@ export default {
} }
} }
}, },
async handlePenSuccess() { handlePenSuccess(newPenData) {
this.penDialogVisible = false; this.penDialogVisible = false;
await this.loadData(); // 为新猪栏数据添加 batch_number
const penWithBatch = {
...newPenData,
batch_number: this.batchMap.get(newPenData.pig_batch_id) || null
};
const house = this.pigHousesData.find(h => h.id === penWithBatch.house_id);
if (house) {
if (this.isEditPen) {
// 更新现有猪栏
const index = house.pens.findIndex(p => p.id === penWithBatch.id);
if (index !== -1) {
house.pens[index] = penWithBatch;
}
this.$message.success('猪栏更新成功');
} else {
// 添加新猪栏
house.pens.push(penWithBatch);
this.$message.success('猪栏添加成功');
}
}
} }
} }
} }