实现功能
This commit is contained in:
@@ -142,6 +142,8 @@
|
||||
v-if="showPigTypeDialog"
|
||||
:initialData="currentPigType"
|
||||
:breedId="currentBreedIdForPigType"
|
||||
:isEditing="isEditingPigType"
|
||||
:existingAgeStageIds="getExistingAgeStageIds(currentBreedIdForPigType)"
|
||||
@save="handlePigTypeSave"
|
||||
@cancel="handlePigTypeCancel"
|
||||
></PigTypeEditor>
|
||||
@@ -320,11 +322,17 @@ export default {
|
||||
showNutrientDialog.value = false;
|
||||
};
|
||||
|
||||
// 获取当前品种已有的年龄阶段ID列表
|
||||
const getExistingAgeStageIds = (breedId) => {
|
||||
const breed = tableData.value.find(item => item.id === breedId);
|
||||
return breed && breed.pig_types ? breed.pig_types.map(pt => pt.age_stage_id) : [];
|
||||
};
|
||||
|
||||
// 处理添加年龄阶段
|
||||
const handleAddPigType = (breedId) => {
|
||||
isEditingPigType.value = false;
|
||||
currentPigType.value = { // 初始化新年龄阶段的数据
|
||||
age_stage_name: '',
|
||||
age_stage_id: null, // age_stage_id 默认为 null,由下拉框选择
|
||||
description: '',
|
||||
min_days: 0,
|
||||
max_days: 0,
|
||||
@@ -360,7 +368,7 @@ export default {
|
||||
await FeedApi.deletePigType(pigType.id);
|
||||
ElMessage.success('年龄阶段删除成功');
|
||||
// 刷新当前展开行的 pig_types 数据
|
||||
const expandedRow = tableData.value.find(item => expandRowKeys.value.includes(item.breed_id));
|
||||
const expandedRow = tableData.value.find(item => expandRowKeys.value.includes(pigType.breed_id));
|
||||
if (expandedRow) {
|
||||
await handleExpandChange(expandedRow, [expandedRow]);
|
||||
}
|
||||
@@ -420,6 +428,7 @@ export default {
|
||||
handleAddPigType,
|
||||
handleEditPigType,
|
||||
handleDeletePigType,
|
||||
getExistingAgeStageIds, // 暴露给模板
|
||||
handleNutrientRequirementsRefresh, // 暴露给模板
|
||||
handlePigTypeSave,
|
||||
handlePigTypeCancel,
|
||||
|
||||
@@ -1,8 +1,16 @@
|
||||
<template>
|
||||
<div class="pig-type-editor">
|
||||
<el-form :model="formData" ref="formRef" label-width="120px">
|
||||
<el-form-item label="年龄阶段名称" prop="age_stage_name" :rules="[{ required: true, message: '请输入年龄阶段名称', trigger: 'blur' }]">
|
||||
<el-input v-model="formData.age_stage_name"></el-input>
|
||||
<el-form-item label="年龄阶段" prop="age_stage_id" :rules="[{ required: true, message: '请选择年龄阶段', trigger: 'change' }]">
|
||||
<el-select v-model="formData.age_stage_id" placeholder="请选择年龄阶段" filterable style="width: 100%;">
|
||||
<el-option
|
||||
v-for="item in ageStages"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:disabled="!isEditing && existingAgeStageIds.includes(item.id)"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="描述" prop="description">
|
||||
<el-input type="textarea" v-model="formData.description"></el-input>
|
||||
@@ -35,35 +43,61 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ref, watch } from 'vue';
|
||||
import { ref, watch, onMounted } from 'vue';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import { FeedApi } from '../../api/feed'; // Assuming FeedApi has createPigType and updatePigType
|
||||
import { FeedApi } from '../../api/feed';
|
||||
|
||||
export default {
|
||||
name: 'PigTypeEditor',
|
||||
props: {
|
||||
initialData: {
|
||||
type: Object,
|
||||
default: () => ({}),
|
||||
default: () => ({
|
||||
age_stage_id: null, // 确保默认值是 null
|
||||
}),
|
||||
},
|
||||
breedId: {
|
||||
type: Number,
|
||||
required: true,
|
||||
},
|
||||
// 新增一个 prop 来接收当前品种已有的 age_stage_id 列表
|
||||
// 用于在添加模式下禁用已选择的年龄阶段
|
||||
existingAgeStageIds: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
// 新增一个 prop 来指示是否是编辑模式
|
||||
isEditing: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
emits: ['save', 'cancel'],
|
||||
setup(props, { emit }) {
|
||||
const formRef = ref(null);
|
||||
const formData = ref({});
|
||||
const ageStages = ref([]); // 用于存储所有年龄阶段列表
|
||||
|
||||
watch(() => props.initialData, (newData) => {
|
||||
// 复制一份数据,避免直接修改props
|
||||
formData.value = { ...newData };
|
||||
// 如果是添加模式,age_stage_id 应该为 null
|
||||
if (!props.isEditing) {
|
||||
formData.value.age_stage_id = null;
|
||||
}
|
||||
|
||||
// 将克转换为公斤显示
|
||||
if (formData.value.min_weight) formData.value.min_weight /= 1000;
|
||||
if (formData.value.max_weight) formData.value.max_weight /= 1000;
|
||||
if (formData.value.daily_gain_weight) formData.value.daily_gain_weight /= 1000;
|
||||
if (formData.value.daily_feed_intake) formData.value.daily_feed_intake /= 1000;
|
||||
if (formData.value.min_weight !== undefined && formData.value.min_weight !== null) formData.value.min_weight /= 1000;
|
||||
if (formData.value.max_weight !== undefined && formData.value.max_weight !== null) formData.value.max_weight /= 1000;
|
||||
if (formData.value.daily_gain_weight !== undefined && formData.value.daily_gain_weight !== null) formData.value.daily_gain_weight /= 1000;
|
||||
if (formData.value.daily_feed_intake !== undefined && formData.value.daily_feed_intake !== null) formData.value.daily_feed_intake /= 1000;
|
||||
|
||||
// 确保所有重量字段都有默认值,避免 NaN
|
||||
formData.value.min_weight = formData.value.min_weight || 0;
|
||||
formData.value.max_weight = formData.value.max_weight || 0;
|
||||
formData.value.daily_gain_weight = formData.value.daily_gain_weight || 0;
|
||||
formData.value.daily_feed_intake = formData.value.daily_feed_intake || 0;
|
||||
|
||||
}, { immediate: true, deep: true });
|
||||
|
||||
const handleSave = () => {
|
||||
@@ -72,7 +106,7 @@ export default {
|
||||
try {
|
||||
const dataToSave = {
|
||||
breed_id: props.breedId,
|
||||
age_stage_name: formData.value.age_stage_name,
|
||||
age_stage_id: formData.value.age_stage_id,
|
||||
description: formData.value.description,
|
||||
min_days: formData.value.min_days,
|
||||
max_days: formData.value.max_days,
|
||||
@@ -103,9 +137,26 @@ export default {
|
||||
emit('cancel');
|
||||
};
|
||||
|
||||
// 获取所有年龄阶段列表
|
||||
const fetchAgeStages = async () => {
|
||||
try {
|
||||
const response = await FeedApi.getPigAgeStages({ page: 1, page_size: 999 }); // 明确传递 page: 1
|
||||
if (response.data && response.data.list) {
|
||||
ageStages.value = response.data.list;
|
||||
}
|
||||
} catch (error) {
|
||||
ElMessage.error('获取年龄阶段列表失败');
|
||||
}
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
fetchAgeStages();
|
||||
});
|
||||
|
||||
return {
|
||||
formRef,
|
||||
formData,
|
||||
ageStages,
|
||||
handleSave,
|
||||
handleCancel,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user