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

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

View File

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

View File

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