修改猪栏卡片和猪舍时列表不折叠
This commit is contained in:
@@ -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();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -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 || '未知错误'));
|
||||
|
||||
@@ -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('猪栏添加成功');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user