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