转群功能完善

This commit is contained in:
zyh 2025-08-04 15:01:06 +08:00
parent acb021d78d
commit 53b3efb432
2 changed files with 118 additions and 34 deletions

View File

@ -60,3 +60,12 @@ export function approveScTransGroup(data) {
data
})
}
// 获取所有牧场列表
export function listRanch() {
return request({
url: '/ranch/ranch/list',
method: 'get',
params: { pageNum: 1, pageSize: 9999 }
});
}

View File

@ -102,15 +102,27 @@
:value="sheep.manageTags" />
</el-select>
</el-form-item>
<el-form-item label="转出羊舍" prop="foldFrom">
<el-select v-model="form.foldFrom" placeholder="请选择转出羊舍" clearable @change="handleSheepFilter"
:disabled="!isAdd">
<el-option v-for="fold in sheepfoldOptions" :key="fold.id" :label="fold.sheepfoldName" :value="fold.id" />
<!-- 在el-form中新增牧场选择项 -->
<el-form-item label="牧场" prop="ranchId">
<el-select v-model="form.ranchId" placeholder="请选择牧场" clearable @change="handleRanchChange">
<el-option v-for="ranch in ranchOptions" :key="ranch.id" :label="ranch.ranchName" :value="ranch.id" />
</el-select>
</el-form-item>
<!-- 调整转出羊舍的options为当前牧场的羊舍 -->
<el-form-item label="转出羊舍" prop="foldFrom">
<el-select v-model="form.foldFrom" placeholder="请选择转出羊舍" clearable :disabled="!form.ranchId"
@change="handleSheepFilter">
<el-option v-for="fold in currentRanchSheepfolds" :key="fold.id" :label="fold.sheepfoldName"
:value="fold.id" />
</el-select>
</el-form-item>
<!-- 调整转入羊舍的options为当前牧场的羊舍 -->
<el-form-item label="转入羊舍" prop="foldTo">
<el-select v-model="form.foldTo" placeholder="请选择转入羊舍" clearable :disabled="!isAdd">
<el-option v-for="fold in sheepfoldOptions" :key="fold.id" :label="fold.sheepfoldName" :value="fold.id" />
<el-select v-model="form.foldTo" placeholder="请选择转入羊舍" clearable :disabled="!form.ranchId">
<el-option v-for="fold in currentRanchSheepfolds" :key="fold.id" :label="fold.sheepfoldName"
:value="fold.id" />
</el-select>
</el-form-item>
<el-form-item v-if="isAdd" label="羊只类型" prop="sheepTypeId">
@ -175,7 +187,7 @@
</template>
<script setup name="Trans_group">
import { listTrans_group, getTrans_group, delTrans_group, addTrans_group, updateTrans_group, approveScTransGroup } from '@/api/produce/manage_sheep/trans_group'
import { listTrans_group, getTrans_group, delTrans_group, addTrans_group, updateTrans_group, approveScTransGroup, listRanch } from '@/api/produce/manage_sheep/trans_group'
import { listSheepfold_management as listSheepfold } from '@/api/fileManagement/sheepfold_management'
import { checkSheepByManageTags, getSheepBySheepfoldId } from '@/api/produce/other/fixHoof'
import request from '@/utils/request'
@ -203,6 +215,8 @@ const sheepfoldNameMap = ref({});
const varietyOptions = ref([]);
const sheepTypeOptions = ref([]);
const isAdd = ref(false);
const ranchOptions = ref([]);
const currentRanchSheepfolds = ref([]);
const data = reactive({
form: {
@ -214,6 +228,7 @@ const data = reactive({
pageSize: 10,
sheepId: null,
manageTags: null,
ranchId: null,
foldTo: null,
foldFrom: null,
varietyId: null,
@ -222,6 +237,7 @@ const data = reactive({
},
rules: {
manageTags: [{ required: true, message: '请输入耳号', trigger: 'blur' }],
ranchId: [{ required: true, message: '请选择牧场', trigger: 'change' }],
foldTo: [{ required: true, message: '请选择转入羊舍', trigger: 'change' }],
varietyId: [{ required: true, message: '请选择品种', trigger: 'change' }],
reason: [{ required: true, message: '请选择转群原因', trigger: 'change' }],
@ -250,6 +266,7 @@ function reset() {
form.value = {
id: null,
sheepId: null,
ranchId: null,
foldFrom: null,
foldTo: null,
varietyId: null,
@ -268,10 +285,17 @@ function reset() {
//
async function handleSheepFilter() {
const { foldFrom, sheepTypeId } = form.value;
const { foldFrom, sheepTypeId, ranchId } = form.value;
let isOnlySheepfold = false;
let isOnlyTypeOrCombined = false;
if (!ranchId) {
form.value.manageTags = [];
sheepOptions.value = [];
proxy.$message.warning("请先选择牧场");
return;
}
if (foldFrom && !sheepTypeId) {
isOnlySheepfold = true;
} else if (!foldFrom && sheepTypeId) {
@ -285,21 +309,22 @@ async function handleSheepFilter() {
}
if (isOnlySheepfold) {
await loadSheepBySheepfoldOnly(foldFrom);
}
else if (isOnlyTypeOrCombined) {
await loadSheepBySheepfoldOnly(foldFrom, ranchId);
} else if (isOnlyTypeOrCombined) {
form.value.manageTags = [];
let loadedSheep = [];
if (foldFrom && sheepTypeId) {
loadedSheep = await loadSheepBySheepfoldAndType(foldFrom, sheepTypeId);
loadedSheep = await loadSheepBySheepfoldAndType(foldFrom, sheepTypeId, ranchId);
} else if (sheepTypeId) {
loadedSheep = await loadSheepByTypeOnly(sheepTypeId);
loadedSheep = await loadSheepByTypeOnly(sheepTypeId, ranchId);
}
if (loadedSheep.length > 0) {
form.value.manageTags = loadedSheep.map((sheep) => sheep.manageTags);
await loadSheepInfo();
} else {
proxy.$message.info("未查询到符合条件的耳号");
}
}
}
@ -325,24 +350,77 @@ function getSheepTypeList() {
});
}
//
function loadRanchList() {
listRanch().then(res => {
ranchOptions.value = res.rows.map(ranch => ({
id: ranch.id,
ranchName: ranch.ranch
}));
}).catch(error => {
console.error('加载牧场列表失败', error);
proxy.$modal.msgError('获取牧场数据失败');
});
}
//
function handleRanchChange(ranchId) {
form.value.foldFrom = null;
form.value.foldTo = null;
if (!ranchId) {
currentRanchSheepfolds.value = [];
return;
}
request({
url: '/sheepfold_management/sheepfold_management/list',
method: 'get',
params: { ranchId, pageNum: 1, pageSize: 9999 }
}).then(res => {
currentRanchSheepfolds.value = res.rows || [];
if (currentRanchSheepfolds.value.length === 0) {
proxy.$modal.msgWarning(`所选牧场ID:${ranchId})暂无羊舍数据`);
}
}).catch(error => {
console.error('加载牧场羊舍失败', error);
proxy.$modal.msgError('获取羊舍数据失败');
currentRanchSheepfolds.value = [];
});
}
//
async function loadSheepBySheepfoldOnly(sheepfoldId) {
async function loadSheepBySheepfoldOnly(sheepfoldId, ranchId) {
if (!sheepfoldId || isNaN(Number(sheepfoldId))) {
proxy.$message.error('请选择有效的羊舍');
sheepOptions.value = [];
return [];
}
if (!ranchId) {
proxy.$message.error('牧场信息异常,请重新选择');
sheepOptions.value = [];
return [];
}
try {
const res = await getSheepBySheepfoldId(String(sheepfoldId));
const res = await getSheepBySheepfoldId(Number(sheepfoldId));
const newSheepList = (res.data || []).map((sheep) => ({
id: sheep.id,
manageTags: sheep.manageTags,
sheepfoldId: sheepfoldId,
}));
manageTags: sheep.manageTags || '未知耳号',
sheepfoldId: Number(sheepfoldId),
})).filter(item => item.manageTags);
const existingTags = new Set(sheepOptions.value.map((item) => item.manageTags));
const mergedSheep = newSheepList.filter((item) => !existingTags.has(item.manageTags));
sheepOptions.value.push(...mergedSheep);
return mergedSheep;
if (newSheepList.length === 0) {
proxy.$message.info('当前羊舍下暂无羊只数据');
sheepOptions.value = [];
return [];
}
sheepOptions.value = newSheepList;
return newSheepList;
} catch (error) {
console.error('根据羊舍加载耳号失败', error);
proxy.$modal.msgError('加载羊舍耳号失败,请重试');
console.error('根据羊舍加载耳号失败:', error);
const errorMsg = error.response?.data?.msg || '加载羊舍耳号失败,请重试';
proxy.$modal.msgError(errorMsg);
sheepOptions.value = [];
return [];
}
}
@ -507,16 +585,10 @@ async function handleUpdate(row) {
isEdit: true
};
// 5.
// const foldFromItem = sheepfoldOptions.value.find(item => item.id === formData.foldFrom);
// const foldToItem = sheepfoldOptions.value.find(item => item.id === formData.foldTo);
// const sheepTypeItem = sheepTypeOptions.value.find(item => item.id === formData.sheepTypeId);
// console.log(":", foldFromItem ? foldFromItem.sheepfoldName : "");
// console.log(":", foldToItem ? foldToItem.sheepfoldName : "");
// console.log(":", sheepTypeItem ? sheepTypeItem.name : "");
form.value = formData;
form.value.ranchId = row.ranchId;
handleRanchChange(row.ranchId);
isAdd.value = false;
if (manageTags.length > 0) {
await loadSheepInfo();
}
@ -622,6 +694,7 @@ function handleApproveReject() {
});
}
//
function loadSheepfold() {
listSheepfold({ pageNum: 1, pageSize: 9999 }).then((res) => {
sheepfoldOptions.value = res.rows;
@ -632,6 +705,7 @@ function loadSheepfold() {
});
}
//
function getVarietyOptions() {
request({
url: '/base/variety/list',
@ -644,6 +718,7 @@ function getVarietyOptions() {
onMounted(() => {
loadSheepfold();
loadRanchList();
getVarietyOptions();
getSheepTypeList();
getList();