This commit is contained in:
zyh 2025-08-19 17:09:13 +08:00
commit 9a1eff0fc6
12 changed files with 1244 additions and 426 deletions

View File

@ -57,4 +57,29 @@ export function getBreedPlanByEweTags(manageTags) {
url: '/Breeding_records/Breeding_records/getBreedPlan/' + manageTags,
method: 'get'
})
}
// 根据母羊耳号获取最新配种计划信息(优先从配种计划生成表获取)
export function getLatestBreedPlanByEweTags(manageTags) {
return request({
url: '/Breeding_records/Breeding_records/getLatestBreedPlan/' + manageTags,
method: 'get'
})
}
// 同步孕检结果到配种记录
export function syncPregnancyResult(data) {
return request({
url: '/Breeding_records/Breeding_records/syncPregnancyResult',
method: 'post',
data: data
})
}
// 根据羊只ID和时间范围查询配种记录
export function getBreedRecordsByTimeRange(sheepId, startDate, endDate) {
return request({
url: `/Breeding_records/Breeding_records/getByTimeRange/${sheepId}/${startDate}/${endDate}`,
method: 'get'
})
}

View File

@ -60,11 +60,20 @@ export function updateBreedPlanGenerate(data) {
})
}
// 审批配种计划
export function approveBreedPlan(id) {
// 获取审批配种计划详情
export function getApproveBreedPlan(id) {
return request({
url: '/mating_plan/generate/approve/' + id,
method: 'put'
method: 'get'
})
}
// 确认审批配种计划
export function confirmApproveBreedPlan(data) {
return request({
url: '/mating_plan/generate/approve/confirm',
method: 'put',
data: data
})
}
@ -76,6 +85,24 @@ export function viewBreedPlan(id) {
})
}
// 导出配种计划详情
export function exportBreedPlanDetails(id) {
return request({
url: '/mating_plan/generate/export/' + id,
method: 'get',
responseType: 'blob'
})
}
// 修改配种计划详情
export function updateBreedPlan(data) {
return request({
url: '/mating_plan/generate/update',
method: 'put',
data: data
})
}
// 删除配种计划生成
export function delBreedPlanGenerate(id) {
return request({

View File

@ -41,4 +41,4 @@ export function delMating_plan(id) {
url: '/mating_plan/mating_plan/' + id,
method: 'delete'
})
}
}

View File

@ -1,6 +1,6 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="母羊耳号" prop="eweManageTags">
<el-input
v-model="queryParams.eweManageTags"
@ -33,6 +33,12 @@
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="配种方式" prop="breedType">
<el-select v-model="queryParams.breedType" placeholder="请选择配种方式" clearable>
<el-option label="同期发情" value="1"></el-option>
<el-option label="本交" value="2"></el-option>
</el-select>
</el-form-item>
<el-form-item label="技术员" prop="technician">
<el-input
v-model="queryParams.technician"
@ -41,6 +47,19 @@
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="孕检结果" prop="pregnancyResult">
<el-select v-model="queryParams.pregnancyResult" placeholder="请选择孕检结果" clearable>
<el-option label="怀孕" value="怀孕"></el-option>
<el-option label="空怀" value="空怀"></el-option>
<el-option label="疑似怀孕" value="疑似怀孕"></el-option>
</el-select>
</el-form-item>
<el-form-item label="是否孕检" prop="isPregnancyChecked">
<el-select v-model="queryParams.isPregnancyChecked" placeholder="请选择是否已孕检" clearable>
<el-option label="已孕检" value="1"></el-option>
<el-option label="未孕检" value="0"></el-option>
</el-select>
</el-form-item>
<el-form-item label="创建人" prop="createBy">
<el-input
v-model="queryParams.createBy"
@ -107,11 +126,11 @@
<el-table v-loading="loading" :data="Breeding_recordsList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="耳号" align="center" prop="eweManageTags" width="120" />
<el-table-column label="耳号" align="center" prop="eweManageTags" width="120" fixed="left" />
<el-table-column label="品种" align="center" prop="eweVariety" width="100" />
<el-table-column label="事件类型" align="center" width="100">
<template #default="scope">
<span>配种</span>
<el-tag type="success">配种</el-tag>
</template>
</el-table-column>
<el-table-column label="配种公羊" align="center" prop="ramManageTags" width="120" />
@ -138,6 +157,45 @@
</template>
</el-table-column>
<el-table-column label="耗精量" align="center" prop="breedDrugs" width="100" />
<!-- 孕检相关字段 -->
<el-table-column label="孕检状态" align="center" width="100">
<template #default="scope">
<el-tag :type="scope.row.isPregnancyChecked === 1 ? 'success' : 'warning'">
{{ scope.row.isPregnancyChecked === 1 ? '已孕检' : '未孕检' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="孕检日期" align="center" prop="pregnancyCheckDate" width="120">
<template #default="scope">
<span>{{ scope.row.pregnancyCheckDate ? parseTime(scope.row.pregnancyCheckDate, '{y}-{m}-{d}') : '-' }}</span>
</template>
</el-table-column>
<el-table-column label="孕检结果" align="center" prop="pregnancyResult" width="100">
<template #default="scope">
<el-tag v-if="scope.row.pregnancyResult"
:type="getPregnancyResultType(scope.row.pregnancyResult)">
{{ scope.row.pregnancyResult }}
</el-tag>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column label="胎数" align="center" prop="fetusCount" width="80">
<template #default="scope">
<span>{{ scope.row.fetusCount || '-' }}</span>
</template>
</el-table-column>
<el-table-column label="孕检方式" align="center" prop="pregnancyWay" width="100">
<template #default="scope">
<span>{{ scope.row.pregnancyWay || '-' }}</span>
</template>
</el-table-column>
<el-table-column label="配种到孕检间隔(天)" align="center" prop="daysToPregnancyCheck" width="140">
<template #default="scope">
<span>{{ scope.row.daysToPregnancyCheck || '-' }}</span>
</template>
</el-table-column>
<el-table-column label="创建人" align="center" prop="createBy" width="100" />
<el-table-column label="创建日期" align="center" prop="createTime" width="180">
<template #default="scope">
@ -162,12 +220,12 @@
/>
<!-- 添加或修改配种记录对话框 -->
<el-dialog :title="title" v-model="open" width="600px" append-to-body>
<el-form ref="Breeding_recordsRef" :model="form" :rules="rules" label-width="100px">
<el-dialog :title="title" v-model="open" width="800px" append-to-body>
<el-form ref="Breeding_recordsRef" :model="form" :rules="rules" label-width="120px">
<el-row>
<el-col :span="12">
<el-form-item label="母羊耳号" prop="eweManageTags">
<el-input v-model="form.eweManageTags" placeholder="请输入母羊耳号" @blur="getEweInfoByTags" />
<el-input v-model="form.eweManageTags" placeholder="请输入母羊耳号" @blur="getEweInfoAndPlan" />
</el-form-item>
</el-col>
<el-col :span="12">
@ -177,11 +235,21 @@
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="配种方式" prop="breedType">
<el-select v-model="form.breedType" placeholder="请选择配种方式">
<el-option label="同期发情" :value="1"></el-option>
<el-option label="本交" :value="2"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="技术员" prop="technician">
<el-input v-model="form.technician" placeholder="请输入技术员" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="耗精量" prop="breedDrugs">
<el-input v-model="form.breedDrugs" placeholder="请输入耗精量" />
@ -195,6 +263,97 @@
</el-form-item>
</el-col>
</el-row>
<!-- 显示母羊信息区域 -->
<el-row v-if="eweInfo">
<el-col :span="24">
<el-divider content-position="left">母羊信息</el-divider>
</el-col>
<el-col :span="8">
<el-form-item label="品种">
<el-input v-model="eweInfo.variety" readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="月龄">
<el-input v-model="eweInfo.month_age" readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="胎次">
<el-input v-model="eweInfo.parity" readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="繁育状态">
<el-input v-model="eweInfo.breed_status" readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="当前羊舍">
<el-input v-model="eweInfo.sheepfold_name" readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="是否性控">
<el-input :value="eweInfo.controlled === 1 ? '是' : '否'" readonly />
</el-form-item>
</el-col>
</el-row>
<!-- 显示配种计划信息区域 -->
<el-row v-if="breedPlan">
<el-col :span="24">
<el-divider content-position="left">配种计划信息</el-divider>
</el-col>
<el-col :span="12">
<el-form-item label="计划公羊">
<el-input v-model="breedPlan.ram_manage_tags" readonly />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="计划配种方式">
<el-input v-model="breedPlan.breed_type_name" readonly />
</el-form-item>
</el-col>
</el-row>
<!-- 显示孕检信息区域如果已有孕检记录 -->
<el-row v-if="form.pregnancyResult">
<el-col :span="24">
<el-divider content-position="left">孕检信息</el-divider>
</el-col>
<el-col :span="8">
<el-form-item label="孕检日期">
<el-input :value="form.pregnancyCheckDate ? parseTime(form.pregnancyCheckDate, '{y}-{m}-{d}') : ''" readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="孕检结果">
<el-input v-model="form.pregnancyResult" readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="胎数">
<el-input v-model="form.fetusCount" readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="孕检方式">
<el-input v-model="form.pregnancyWay" readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="孕检技术员">
<el-input v-model="form.pregnancyTechnician" readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="配种到孕检间隔">
<el-input :value="form.daysToPregnancyCheck + '天'" readonly />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
@ -207,7 +366,7 @@
</template>
<script setup name="Breeding_records">
import { listBreeding_records, getBreeding_records, delBreeding_records, addBreeding_records, updateBreeding_records, getSheepInfoByTags } from "@/api/Breeding_records/Breeding_records"
import { listBreeding_records, getBreeding_records, delBreeding_records, addBreeding_records, updateBreeding_records, getSheepInfoByTags, getLatestBreedPlanByEweTags } from "@/api/Breeding_records/Breeding_records"
const { proxy } = getCurrentInstance()
@ -221,6 +380,10 @@ const multiple = ref(true)
const total = ref(0)
const title = ref("")
//
const eweInfo = ref(null)
const breedPlan = ref(null)
const data = reactive({
form: {},
queryParams: {
@ -230,9 +393,12 @@ const data = reactive({
ramManageTags: null,
eweVariety: null,
ramVariety: null,
breedType: null,
technician: null,
createBy: null,
createTime: null
createTime: null,
pregnancyResult: null,
isPregnancyChecked: null
},
rules: {
eweManageTags: [
@ -243,6 +409,9 @@ const data = reactive({
],
technician: [
{ required: true, message: "技术员不能为空", trigger: "blur" }
],
breedType: [
{ required: true, message: "配种方式不能为空", trigger: "change" }
]
}
})
@ -276,10 +445,20 @@ function reset() {
ramManageTags: null,
technician: null,
breedDrugs: null,
breedType: null,
comment: null,
createBy: null,
createTime: null
createTime: null,
pregnancyCheckDate: null,
pregnancyResult: null,
pregnancyWay: null,
fetusCount: null,
pregnancyTechnician: null,
pregnancyRemark: null,
daysToPregnancyCheck: null
}
eweInfo.value = null
breedPlan.value = null
proxy.resetForm("Breeding_recordsRef")
}
@ -317,20 +496,51 @@ function handleUpdate(row) {
form.value = response.data
open.value = true
title.value = "修改配种记录"
//
if (form.value.eweManageTags) {
getEweInfoAndPlan()
}
})
}
/** 根据母羊耳号获取羊只信息 */
function getEweInfoByTags() {
/** 根据母羊耳号获取羊只信息和配种计划信息 */
function getEweInfoAndPlan() {
if (form.value.eweManageTags) {
//
getSheepInfoByTags(form.value.eweManageTags).then(response => {
if (response.data) {
eweInfo.value = response.data
form.value.eweId = response.data.id
} else {
proxy.$modal.msgError("未找到该母羊耳号对应的羊只信息")
eweInfo.value = null
}
}).catch(() => {
proxy.$modal.msgError("查询母羊信息失败")
eweInfo.value = null
})
// 使
getLatestBreedPlanByEweTags(form.value.eweManageTags).then(response => {
if (response.data) {
breedPlan.value = response.data
//
if (!form.value.ramManageTags) {
form.value.ramManageTags = response.data.ram_manage_tags
}
if (!form.value.breedType) {
form.value.breedType = response.data.breed_type
}
proxy.$modal.msgSuccess("已自动匹配配种计划信息,可手动调整")
} else {
breedPlan.value = null
proxy.$modal.msgWarning("未找到该母羊的配种计划,请手动输入配种信息")
}
}).catch(() => {
proxy.$modal.msgWarning("查询配种计划失败,请手动输入配种信息")
breedPlan.value = null
})
}
}
@ -389,6 +599,19 @@ function handleExport() {
}, `配种记录_${new Date().getTime()}.xlsx`)
}
/** 获取孕检结果类型 */
function getPregnancyResultType(result) {
if (result === '怀孕') {
return 'success'
} else if (result === '空怀') {
return 'danger'
} else if (result === '疑似怀孕') {
return 'warning'
} else {
return 'info'
}
}
getList()
</script>
@ -399,4 +622,10 @@ getList()
.el-table .cell {
white-space: nowrap;
}
.el-divider {
margin: 16px 0;
}
.el-divider--horizontal {
margin: 16px 0;
}
</style>

View File

@ -68,7 +68,7 @@
<el-table v-loading="loading" :data="diagnosisList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="耳号" align="center" prop="sheepNo" />
<el-table-column label="时间日期" align="center" prop="datetime" width="180">
<el-table-column label="时间日期" align="center" prop="datetime" width="150">
<template #default="scope">
<span>{{ parseTime(scope.row.datetime, '{y}-{m}-{d}') }}</span>
</template>
@ -83,19 +83,19 @@
<el-table-column label="诊疗结果" align="center" prop="result">
<template #default="scope"><dict-tag :options="diag_result" :value="scope.row.result" /></template>
</el-table-column>
<el-table-column label="开始时间" align="center" prop="begindate">
<el-table-column label="开始时间" align="center" prop="begindate" width="150">
<template #default="scope">
<span>{{ parseTime(scope.row.begindate, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="结束时间" align="center" prop="enddate">
<el-table-column label="结束时间" align="center" prop="enddate" width="150">
<template #default="scope">
<span>{{ parseTime(scope.row.enddate, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="治疗天数" align="center" prop="treatDay" />
<el-table-column label="羊舍" align="center" prop="sheepfold" width="100px" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100px">
<el-table-column label="羊舍" align="center" prop="sheepfold" width="150px" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="140px">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
v-hasPermi="['diagnosis:diagnosis:edit']">修改</el-button>

View File

@ -34,7 +34,7 @@
<!-- 列表 -->
<el-table v-loading="loading" :data="disinfectList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="羊舍" align="center" prop="sheepfoldName"/>
<el-table-column label="羊舍" align="center" prop="sheepfoldName" />
<el-table-column label="消毒日期" align="center" prop="datetime" width="180">
<template #default="scope">{{ parseTime(scope.row.datetime, '{y}-{m}-{d}') }}</template>
</el-table-column>
@ -164,7 +164,7 @@
<el-form ref="editFormRef" :model="editForm" :rules="rules" label-width="100px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="羊舍" >
<el-form-item label="羊舍">
<span>{{ editForm.sheepfoldName }}</span>
</el-form-item>
</el-col>
@ -208,7 +208,7 @@
</el-table-column>
<el-table-column label="用量" width="160">
<template #default="scope">
<el-input-number v-model="scope.row.dosage" :min="0" :precision="1" />
<el-input-number v-model="scope.row.dosage" :min="0" :precision="1" style="width: 120px;" />
</template>
</el-table-column>
<el-table-column label="单位" width="120">

View File

@ -122,7 +122,7 @@
</el-table-column>
<el-table-column label="用量" width="160">
<template #default="scope">
<el-input-number v-model="scope.row.dosage" :min="0" :precision="1" />
<el-input-number v-model="scope.row.dosage" :min="0" :precision="1" style="width: 120px;"/>
</template>
</el-table-column>
<el-table-column label="单位" width="120">

View File

@ -41,7 +41,6 @@
<el-table v-loading="loading" :data="medicineList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="" align="center" prop="id" />
<el-table-column label="药品编号" align="center" prop="medica" />
<el-table-column label="药品名称" align="center" prop="name" />
<el-table-column label="药品类型" align="center" prop="medicType" :formatter="formatType"></el-table-column>

View File

@ -2,36 +2,10 @@
<div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="配方编码" prop="formulaId">
<el-input
v-model="queryParams.formulaId"
placeholder="请输入配方编码"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.formulaId" placeholder="请输入配方编码" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="羊舍" prop="sheepHouseId">
<el-input
v-model="queryParams.sheepHouseId"
placeholder="请输入羊舍"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="饲草班人员" prop="zookeeper">
<el-input
v-model="queryParams.zookeeper"
placeholder="请输入饲草班人员"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="饲喂计划日期" prop="planDate">
<el-date-picker clearable
v-model="queryParams.planDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择饲喂计划日期">
</el-date-picker>
<el-input v-model="queryParams.sheepHouseId" placeholder="请输入羊舍" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@ -41,42 +15,19 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
v-hasPermi="['feed:FeedPlan:add']"
>新增</el-button>
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['feed:FeedPlan:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="Edit"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['feed:FeedPlan:edit']"
>修改</el-button>
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
v-hasPermi="['feed:FeedPlan:edit']">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['feed:FeedPlan:remove']"
>删除</el-button>
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
v-hasPermi="['feed:FeedPlan:remove']">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="Download"
@click="handleExport"
v-hasPermi="['feed:FeedPlan:export']"
>导出</el-button>
<el-button type="warning" plain icon="Download" @click="handleExport"
v-hasPermi="['feed:FeedPlan:export']">导出</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
@ -85,25 +36,48 @@
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="创建日期" align="center" prop="createDate" />
<el-table-column label="配方编码" align="center" prop="formulaId" />
<el-table-column label="批号" align="center" prop="batchId" />
<el-table-column label="羊舍" align="center" prop="sheepHouseId">
<template #default="scope">
<dict-tag :options="sheep_house_list" :value="scope.row.sheepHouseId"/>
{{ getSheepHouseName(scope.row.sheepHouseId) }}
</template>
</el-table-column>
<el-table-column label="羊只数量" align="center" prop="sheepCount" />
<el-table-column label="日均计划量" align="center" prop="planDailySize" />
<el-table-column label="计划量(早)" align="center" prop="planMorningSize" />
<el-table-column label="计划总量(早)" align="center" prop="planMorningTotal" />
<el-table-column label="饲喂比例(早)" align="center" prop="ratioMorning" />
<el-table-column label="实际量(早)" align="center" prop="actualMorningSize" />
<el-table-column label="计划量(中)" align="center" prop="planNoonSize" />
<el-table-column label="计划总量(中)" align="center" prop="planNoonTotal" />
<el-table-column label="实际量(中)" align="center" prop="actualNoonSize" />
<el-table-column label="饲喂比例(中)" align="center" prop="ratioNoon" />
<el-table-column label="计划量(下)" align="center" prop="planAfternoonSize" />
<el-table-column label="计划总量(下)" align="center" prop="planAfternoonTotal" />
<el-table-column label="实际量(下)" align="center" prop="actualAfternoonSize" />
<el-table-column label="饲喂比例(下)" align="center" prop="ratioAfternoon" />
<el-table-column label="上午" prop="materialId" align="center">
<el-table-column label="计划量" align="center" prop="planMorningSize">
<template #default="{ row }">
{{ row.planMorningSize ? row.planMorningSize.toFixed(2) : '0.00' }}
</template>
</el-table-column>
<!-- <el-table-column label="计划总量" align="center" prop="planMorningTotal" /> -->
<el-table-column label="实际量" align="center" prop="actualMorningSize" />
</el-table-column>
<el-table-column label="中午" prop="materialId" align="center">
<el-table-column label="计划量" align="center" prop="planNoonSize">
<template #default="{ row }">
{{ row.planNoonSize ? row.planNoonSize.toFixed(2) : '0.00' }}
</template>
</el-table-column>
<!-- <el-table-column label="计划总量" align="center" prop="planNoonTotal" /> -->
<el-table-column label="实际量" align="center" prop="actualNoonSize" />
</el-table-column>
<el-table-column label="下午" prop="materialId" align="center">
<el-table-column label="计划量" align="center" prop="planAfternoonSize">
<template #default="{ row }">
{{ row.planAfternoonSize ? row.planAfternoonSize.toFixed(2) : '0.00' }}
</template>
</el-table-column>
<!-- <el-table-column label="计划总量" align="center" prop="planAfternoonTotal" /> -->
<el-table-column label="实际量" align="center" prop="actualAfternoonSize" />
</el-table-column>
<el-table-column label="饲喂比例(%)" align="center" prop="ratioTotal">
<el-table-column label="上午" align="center" prop="ratioMorning" />
<el-table-column label="中午" align="center" prop="ratioNoon" />
<el-table-column label="下午" align="center" prop="ratioAfternoon" />
</el-table-column>
<el-table-column label="计划饲喂总量" align="center" prop="planFeedTotal" />
<el-table-column label="饲草班人员" align="center" prop="zookeeper" />
<el-table-column label="饲喂计划日期" align="center" prop="planDate" width="180">
@ -114,64 +88,67 @@
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['feed:FeedPlan:edit']">修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['feed:FeedPlan:remove']">删除</el-button>
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
v-hasPermi="['feed:FeedPlan:edit']">修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
v-hasPermi="['feed:FeedPlan:remove']">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" />
<!-- 添加或修改饲喂计划对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="FeedPlanRef" :model="form" :rules="rules" label-width="80px">
<el-form ref="FeedPlanRef" :model="form" :rules="rules" label-width="100px">
<el-form-item label="配方编码" prop="formulaId">
<el-input v-model="form.formulaId" placeholder="请输入配方编码" />
<!-- <el-input v-model="form.formulaId" placeholder="请输入配方编码" /> -->
<el-select v-model="form.formulaId" filterable placeholder="请选择配方编码" style="width: 100%"
@change="handleFormulaIdChange(form, $event)">
<el-option v-for="item in formulaIdDict" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="批号" prop="batchId">
<!-- <el-input v-model="form.batchId" placeholder="请输入批号" /> -->
<el-select v-model="form.batchId" filterable placeholder="请选择配方批号" style="width: 100%">
<el-option v-for="item in formulaBatchDict" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="羊舍" prop="sheepHouseId">
<el-input v-model="form.sheepHouseId" placeholder="请输入羊舍" />
<!-- <el-input v-model="form.sheepHouseId" placeholder="请输入羊舍" /> -->
<el-select v-model="form.sheepHouseId" filterable placeholder="请选择羊舍" style="width: 100%">
<el-option v-for="item in sheepFolderDict" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="日均计划量" prop="planDailySize">
<el-input v-model="form.planDailySize" placeholder="请输入日均计划量" />
</el-form-item>
<el-form-item label="饲喂比例(早)" prop="ratioMorning">
<el-input v-model="form.ratioMorning" placeholder="请输入饲喂比例(早)" />
<el-form-item label="比例 (%)">
<div style="display: flex; gap: 10px;">
<el-input v-model="form.ratioMorning" placeholder="早上比例" style="width: 100px;" />
<el-input v-model="form.ratioNoon" placeholder="中午比例" style="width: 100px;" />
<el-input v-model="form.ratioAfternoon" placeholder="下午比例" style="width: 100px;" />
</div>
</el-form-item>
<el-form-item label="实际量(早)" prop="actualMorningSize">
<el-input v-model="form.actualMorningSize" placeholder="请输入实际量(早)" />
</el-form-item>
<el-form-item label="实际量(中)" prop="actualNoonSize">
<el-input v-model="form.actualNoonSize" placeholder="请输入实际量(中)" />
</el-form-item>
<el-form-item label="饲喂比例(中)" prop="ratioNoon">
<el-input v-model="form.ratioNoon" placeholder="请输入饲喂比例(中)" />
</el-form-item>
<el-form-item label="实际量(下)" prop="actualAfternoonSize">
<el-input v-model="form.actualAfternoonSize" placeholder="请输入实际量(下)" />
</el-form-item>
<el-form-item label="饲喂比例(下)" prop="ratioAfternoon">
<el-input v-model="form.ratioAfternoon" placeholder="请输入饲喂比例(下)" />
</el-form-item>
<el-form-item label="饲草班人员" prop="zookeeper">
<el-form-item label="饲草班人员" prop="Zookeeper">
<el-input v-model="form.zookeeper" placeholder="请输入饲草班人员" />
</el-form-item>
<el-form-item label="饲喂计划日期" prop="planDate">
<el-date-picker clearable
v-model="form.planDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择饲喂计划日期">
<el-form-item label="计划日期" prop="planDate">
<el-date-picker clearable v-model="form.planDate" type="date" value-format="YYYY-MM-DD"
placeholder="请选择计划饲喂时间">
</el-date-picker>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
<div v-if="title === '修改饲喂计划'">
<el-divider content-position="left">配方详情</el-divider>
<el-form-item label="实际饲喂量">
<div style="display: flex; gap: 10px;">
<el-input v-model="form.actualMorningSize" placeholder="早上" style="width: 100px;" />
<el-input v-model="form.actualNoonSize" placeholder="中午" style="width: 100px;" />
<el-input v-model="form.actualAfternoonSize" placeholder="下午" style="width: 100px;" />
</div>
</el-form-item>
</div>
</el-form>
<template #footer>
<div class="dialog-footer">
@ -184,164 +161,258 @@
</template>
<script setup name="FeedPlan">
import { listFeedPlan, getFeedPlan, delFeedPlan, addFeedPlan, updateFeedPlan } from "@/api/feed/FeedPlan"
import { listFeedPlan, getFeedPlan, delFeedPlan, addFeedPlan, updateFeedPlan } from "@/api/feed/FeedPlan"
import { listFormulaManagement } from "@/api/feed/FormulaManagement";
import { listSheepfold } from "@/api/produce/manage_sheep/trans_group.js";
import { get } from "@vueuse/core";
const { proxy } = getCurrentInstance()
const { proxy } = getCurrentInstance()
const FeedPlanList = ref([])
const open = ref(false)
const loading = ref(true)
const showSearch = ref(true)
const ids = ref([])
const single = ref(true)
const multiple = ref(true)
const total = ref(0)
const title = ref("")
const FeedPlanList = ref([])
const open = ref(false)
const loading = ref(true)
const showSearch = ref(true)
const ids = ref([])
const single = ref(true)
const multiple = ref(true)
const total = ref(0)
const title = ref("")
const data = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
formulaId: null,
sheepHouseId: null,
zookeeper: null,
planDate: null,
},
rules: {
formulaId: [
{ required: true, message: "配方编码不能为空", trigger: "blur" }
],
sheepHouseId: [
{ required: true, message: "羊舍不能为空", trigger: "blur" }
],
planDailySize: [
{ required: true, message: "日均计划量不能为空", trigger: "blur" }
],
}
})
const { queryParams, form, rules } = toRefs(data)
/** 查询饲喂计划列表 */
function getList() {
loading.value = true
listFeedPlan(queryParams.value).then(response => {
FeedPlanList.value = response.rows
total.value = response.total
loading.value = false
})
}
//
function cancel() {
open.value = false
reset()
}
//
function reset() {
form.value = {
createDate: null,
formulaId: null,
sheepHouseId: null,
sheepCount: null,
planDailySize: null,
planMorningSize: null,
planMorningTotal: null,
ratioMorning: null,
actualMorningSize: null,
planNoonSize: null,
planNoonTotal: null,
actualNoonSize: null,
ratioNoon: null,
planAfternoonSize: null,
planAfternoonTotal: null,
actualAfternoonSize: null,
ratioAfternoon: null,
planFeedTotal: null,
zookeeper: null,
planDate: null,
remark: null
}
proxy.resetForm("FeedPlanRef")
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1
getList()
}
/** 重置按钮操作 */
function resetQuery() {
proxy.resetForm("queryRef")
handleQuery()
}
//
function handleSelectionChange(selection) {
ids.value = selection.map(item => item.createDate)
single.value = selection.length != 1
multiple.value = !selection.length
}
/** 新增按钮操作 */
function handleAdd() {
reset()
open.value = true
title.value = "添加饲喂计划"
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset()
const _createDate = row.createDate || ids.value
getFeedPlan(_createDate).then(response => {
form.value = response.data
open.value = true
title.value = "修改饲喂计划"
})
}
/** 提交按钮 */
function submitForm() {
proxy.$refs["FeedPlanRef"].validate(valid => {
if (valid) {
if (form.value.createDate != null) {
updateFeedPlan(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功")
open.value = false
getList()
})
} else {
addFeedPlan(form.value).then(response => {
proxy.$modal.msgSuccess("新增成功")
open.value = false
getList()
})
}
const data = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
formulaId: null,
sheepHouseId: null,
},
rules: {
formulaId: [
{ required: true, message: "配方编码不能为空", trigger: "blur" }
],
batchId: [
{ required: true, message: "批号不能为空", trigger: "blur" }
],
sheepHouseId: [
{ required: true, message: "羊舍不能为空", trigger: "blur" }
],
planDailySize: [
{ required: true, message: "日均计划量不能为空", trigger: "blur" }
],
}
})
const { queryParams, form, rules } = toRefs(data)
const formulaIdDict = ref([]) //
//
const formulaBatchMap = ref([])
const formulaBatchDict = ref([]) // ()
const sheepFolderDict = ref([]) //
//
const sheepNameDict = ref({})
// &
function getFormulaDict() {
listFormulaManagement().then(response => {
formulaIdDict.value = response.rows.map(item => ({
label: item.formulaId,
value: item.formulaId
}))
//
formulaBatchMap.value = []
//
response.rows.forEach(item => {
if (item.subFormulaList) {
item.subFormulaList.forEach(subItem => {
formulaBatchMap.value.push({
label: subItem.batchId,
value: subItem.batchId,
formulaId: item.formulaId // ID
})
})
}
})
})
}
//
function handleFormulaIdChange(row, value) {
//
if (!value) {
formulaBatchDict.value = []
} else {
// formulaIdbatchId
formulaBatchDict.value = formulaBatchMap.value;
formulaBatchDict.value = formulaBatchDict.value.filter(item => item.formulaId === value)
}
//
if (formulaBatchDict.value.length > 0) {
row.batchId = formulaBatchDict.value[0].value;
}
}
function getSheepfoldDict() {
listSheepfold().then(response => {
sheepFolderDict.value = response.rows.map(item => ({
label: item.sheepfoldName,
value: item.id
}))
sheepNameDict.value = response.rows.map(item => ({
label: item.id,
value: item.sheepfoldName
}))
})
}
// id
function getSheepHouseName(id) {
const dictItem = sheepFolderDict.value.find(item => item.value === id)
return dictItem ? dictItem.label : id
}
// ID ID
function getSheepHouseId(inputValue, sheepNameDict) {
if (!inputValue) return '';
//
if (/^\d+$/.test(inputValue)) {
return inputValue;
}
// id
const match = sheepNameDict.find(item => item.value === inputValue);
return match ? match.label : '';
}
/** 删除按钮操作 */
function handleDelete(row) {
const _createDates = row.createDate || ids.value
proxy.$modal.confirm('是否确认删除饲喂计划编号为"' + _createDates + '"的数据项?').then(function() {
return delFeedPlan(_createDates)
}).then(() => {
/** 查询饲喂计划列表 */
function getList() {
loading.value = true
listFeedPlan(queryParams.value).then(response => {
FeedPlanList.value = response.rows
total.value = response.total
loading.value = false
})
}
//
function cancel() {
open.value = false
reset()
}
//
function reset() {
form.value = {
createDate: null,
formulaId: null,
batchId: null,
sheepHouseId: null,
sheepCount: null,
planDailySize: null,
ratioMorning: null,
ratioNoon: null,
ratioAfternoon: null,
planMorningSize: null,
planMorningTotal: null,
actualMorningSize: null,
planNoonSize: null,
planNoonTotal: null,
actualNoonSize: null,
planAfternoonSize: null,
planAfternoonTotal: null,
actualAfternoonSize: null,
planFeedTotal: null,
zookeeper: null,
planDate: null,
remark: null
}
proxy.resetForm("FeedPlanRef")
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1
// IDID
queryParams.value.sheepHouseId = getSheepHouseId(queryParams.value.sheepHouseId, sheepNameDict.value);
getList()
proxy.$modal.msgSuccess("删除成功")
}).catch(() => {})
}
}
/** 导出按钮操作 */
function handleExport() {
proxy.download('feed/FeedPlan/export', {
...queryParams.value
}, `FeedPlan_${new Date().getTime()}.xlsx`)
}
/** 重置按钮操作 */
function resetQuery() {
proxy.resetForm("queryRef")
handleQuery()
}
getList()
//
function handleSelectionChange(selection) {
ids.value = selection.map(item => item.createDate)
single.value = selection.length != 1
multiple.value = !selection.length
}
/** 新增按钮操作 */
function handleAdd() {
reset()
open.value = true
title.value = "添加饲喂计划"
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset()
const _createDate = row.createDate || ids.value
getFeedPlan(_createDate).then(response => {
form.value = response.data
open.value = true
title.value = "修改饲喂计划"
})
}
/** 提交按钮 */
function submitForm() {
proxy.$refs["FeedPlanRef"].validate(valid => {
if (valid) {
if (form.value.createDate != null) {
updateFeedPlan(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功")
open.value = false
getList()
})
} else {
addFeedPlan(form.value).then(response => {
proxy.$modal.msgSuccess("新增成功")
open.value = false
getList()
})
}
}
})
}
/** 删除按钮操作 */
function handleDelete(row) {
const _createDates = row.createDate || ids.value
proxy.$modal.confirm('是否确认删除饲喂计划编号为"' + _createDates + '"的数据项?').then(function () {
return delFeedPlan(_createDates)
}).then(() => {
getList()
proxy.$modal.msgSuccess("删除成功")
}).catch(() => { })
}
/** 导出按钮操作 */
function handleExport() {
proxy.download('feed/FeedPlan/export', {
...queryParams.value
}, `FeedPlan_${new Date().getTime()}.xlsx`)
}
getList()
//
getFormulaDict()
//
getSheepfoldDict()
</script>

View File

@ -35,7 +35,7 @@
<el-table v-loading="loading" :data="FormulaManagementList">
<!-- 表中表展示子配方 -->
<el-table-column type="expand" @expand-change="handleExpandChange">
<el-table-column type="expand" @expand-change="handleExpandChange">
<template #default="props">
<el-table :data="props.row.subFormulaList" style="width: 100%">
<el-table-column label="批号" align="center" prop="batchId" />
@ -148,11 +148,18 @@
<el-table :data="showFormulaManagementList.sgFormulaList" stripe border style="width: 100%" max-height="300">
<el-table-column label="序号" type="index" width="60" align="center" />
<el-table-column label="原料编号" prop="materialId" align="center" />
<el-table-column label="原料名称" prop="materialName" />
<el-table-column label="原料" align="center">
<el-table-column label="名称" prop="materialName" align="center"/>
<el-table-column label="类型" align="center" prop="isGranular">
<template #default="scope">
<dict-tag :options="material_type" :value="scope.row.isGranular" />
</template>
</el-table-column>
</el-table-column>
<el-table-column label="比例" align="center" prop="ratio" />
<el-table-column label="类型" prop="isGranular" align="center">
<el-table-column label="类型" prop="isSupplement" align="center">
<template #default="scope">
<dict-tag :options="materialType" :value="scope.row.isGranular" />
<dict-tag :options="materialType" :value="scope.row.isSupplement" />
</template>
</el-table-column>
</el-table>
@ -165,7 +172,7 @@
<el-col :span="12" v-if="!isView">
<el-form-item label="配方编号" prop="formulaId">
<el-input v-model="showFormulaManagementList.formulaId" placeholder="请输入配方编号"
:disabled="!FormulaIdEditable"/>
:disabled="!FormulaIdEditable" />
</el-form-item>
</el-col>
<el-col :span="12">
@ -220,24 +227,33 @@
:row-class-name="rowSgFormulaListDetailIndex" @selection-change="handleSgFormulaListDetailSelectionChange"
ref="swPresDetail" border stripe>
<el-table-column label="序号" align="center" prop="index" width="60" />
<el-table-column label="原料" prop="materialId">
<template #default="scope">
<el-select v-model="scope.row.materialId" filterable placeholder="请选择原料" style="width: 100%"
@change="handleMaterialChange(scope.row, $event)">
<el-option v-for="item in materials" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</template>
<el-table-column label="原料" prop="materialId" align="center">
<el-table-column label="名称" align="center">
<template #default="scope">
<el-select v-model="scope.row.materialId" filterable placeholder="请选择原料" style="width: 100%"
@change="handleMaterialChange(scope.row, $event)">
<el-option-group v-for="group in groupedMaterials" :key="group.label" :label="group.label">
<el-option v-for="item in group.options" :key="item.value" :label="item.label"
:value="item.value" />
</el-option-group>
</el-select>
</template>
</el-table-column>
<el-table-column label="类型" align="center" prop="isGranular">
<template #default="scope">
<dict-tag :options="material_type" :value="scope.row.isGranular" />
</template>
</el-table-column>
</el-table-column>
<el-table-column label="比例" prop="dosage">
<el-table-column label="比例" prop="dosage" align="center">
<template #default="scope">
<el-input-number v-model="scope.row.ratio" placeholder="请输入比例" :min="0" :precision="1"
controls-position="right" />
</template>
</el-table-column>
<el-table-column label="类型" prop="isGranular">
<el-table-column label="类型" prop="isSupplement" align="center">
<template #default="scope">
<el-select v-model="scope.row.isGranular" placeholder="请选择类型">
<el-select v-model="scope.row.isSupplement" placeholder="请选择类型">
<el-option v-for="item in materialType" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</template>
@ -297,9 +313,12 @@ const FormulaIdEditable = ref(false)
const materials = ref([])
//
const materialType = [
{ value: '1', label: '颗粒料' },
{ value: '0', label: '其他' }
{ value: '1', label: '补饲原料' },
{ value: '0', label: '原料' }
]
//
const { material_type } = proxy.useDict('material_type')
console.log("material_type: ", material_type);
const useStaus = [
{ value: '1', label: '启用' },
{ value: '0', label: '停用' }
@ -581,6 +600,8 @@ function handleMaterialChange(row, selectedValue) {
if (selectedItem) {
// materialName row
row.materialName = selectedItem.label;
row.isGranular = selectedItem.isGranular; // isGranular
row.isSupplement = selectedItem.isSupplement; // isSupplement
}
}
@ -633,7 +654,7 @@ function handleFormulaDetailUpdate(row) {
showFormulaManagementList.value = {}
}
formulaListOpen.value = true
title.value = "修改方"
title.value = "修改方"
isView.value = false
})
}
@ -680,12 +701,42 @@ function getMaterials() {
console.log("获取原料列表:", response)
materials.value = response.rows.map(item => ({
value: item.materialId,
label: item.materialName
label: item.materialName,
isGranular: item.isGranular,
isSupplement: "0" // 0
}))
console.log("原料列表:", materials.value)
})
}
/** ================== 分组下拉列表部分 ======================== */
const groupedMaterials = ref([]) //
// isGranular
function getGroupMaterials() {
listMaterial(materialQueryParams).then(response => {
console.log("获取原料列表:", response)
// material_type
const groups = material_type.value.map(type => ({
label: type.label,
options: []
}))
// isGranular
response.rows.forEach(item => {
const group = groups.find(group => group.label === material_type.value.find(type => type.value === item.isGranular).label)
group.options.push({
value: item.materialId,
label: item.materialName
})
})
// groupedMaterials
groupedMaterials.value = groups
console.log("分组后的原料列表:", groupedMaterials.value)
})
}
/**
* 子表多选回调
@ -714,4 +765,6 @@ function handleExport() {
getList()
//
getMaterials()
//
getGroupMaterials()
</script>

View File

@ -9,6 +9,24 @@
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="计划类型" prop="planType">
<el-select v-model="queryParams.planType" placeholder="请选择计划类型" clearable>
<el-option label="同期发情配种计划" value="1"></el-option>
<el-option label="本交配种计划" value="2"></el-option>
</el-select>
</el-form-item>
<el-form-item label="计划日期" prop="planDate">
<el-date-picker
v-model="dateRange"
style="width: 240px"
value-format="YYYY-MM-DD"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
@change="handleDateRangeChange"
></el-date-picker>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
<el-option label="待审批" value="0"></el-option>
@ -48,6 +66,13 @@
<el-table v-loading="loading" :data="breedPlanGenerateList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="计划名称" align="center" prop="planName" />
<el-table-column label="计划类型" align="center" prop="planType">
<template #default="scope">
<el-tag v-if="scope.row.planType === 1" type="primary">同期发情配种计划</el-tag>
<el-tag v-else-if="scope.row.planType === 2" type="success">本交配种计划</el-tag>
<el-tag v-else type="info">未知类型</el-tag>
</template>
</el-table-column>
<el-table-column label="计划日期" align="center" prop="planDate" width="180">
<template #default="scope">
<span>{{ scope.row.planDate }}</span>
@ -82,6 +107,7 @@
v-hasPermi="['mating_plan:generate:approve']"
v-if="scope.row.status == 0"
>审批</el-button>
<el-button
link
type="primary"
@ -93,14 +119,6 @@
</el-table-column>
</el-table>
<!-- 添加调试信息显示 -->
<div v-if="breedPlanGenerateList.length === 0 && !loading" style="text-align: center; padding: 20px;">
<p>暂无数据</p>
<p>数据数组长度: {{ breedPlanGenerateList.length }}</p>
<p>总数: {{ total }}</p>
<p>加载状态: {{ loading }}</p>
</div>
<pagination
v-show="total>0"
:total="total"
@ -111,6 +129,22 @@
<!-- 生成配种计划对话框 -->
<el-dialog title="生成配种计划" v-model="generateOpen" width="1200px" append-to-body>
<el-form ref="generateFormRef" :model="generateForm" :rules="generateRules" label-width="120px">
<el-row>
<el-col :span="24">
<el-form-item label="计划类型" prop="planType">
<el-radio-group v-model="generateForm.planType">
<el-radio :label="1">同期发情配种计划</el-radio>
<el-radio :label="2">本交配种计划</el-radio>
</el-radio-group>
<div style="margin-top: 10px; color: #666; font-size: 12px;">
计划名称将自动生成为{{ getCurrentDate() }}{{ getPlanTypeName(generateForm.planType) }}
</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-tabs v-model="activeTab" @tab-click="handleTabClick">
<el-tab-pane label="符合条件的母羊" name="ewe">
<el-row :gutter="10" class="mb8">
@ -130,6 +164,7 @@
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="管理耳号" align="center" prop="bs_manage_tags" />
<el-table-column label="品种" align="center" prop="variety" />
<el-table-column label="家系" align="center" prop="family" />
<el-table-column label="羊只类型" align="center" prop="sheep_type" />
<el-table-column label="月龄" align="center" prop="month_age" />
<el-table-column label="当前体重(kg)" align="center" prop="current_weight" />
@ -156,6 +191,7 @@
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="管理耳号" align="center" prop="bs_manage_tags" />
<el-table-column label="品种" align="center" prop="variety" />
<el-table-column label="家系" align="center" prop="family" />
<el-table-column label="羊只类型" align="center" prop="sheep_type" />
<el-table-column label="月龄" align="center" prop="month_age" />
<el-table-column label="当前体重(kg)" align="center" prop="current_weight" />
@ -174,10 +210,106 @@
</template>
</el-dialog>
<!-- 审批配种计划对话框 -->
<el-dialog title="审批配种计划" v-model="approveOpen" width="1400px" append-to-body>
<el-descriptions :column="3" border class="mb8">
<el-descriptions-item label="计划名称">{{ approveData.planInfo.planName }}</el-descriptions-item>
<el-descriptions-item label="计划类型">
<el-tag v-if="approveData.planInfo.planType === 1" type="primary">同期发情配种计划</el-tag>
<el-tag v-else-if="approveData.planInfo.planType === 2" type="success">本交配种计划</el-tag>
</el-descriptions-item>
<el-descriptions-item label="计划日期">{{ approveData.planInfo.planDate }}</el-descriptions-item>
<el-descriptions-item label="母羊数量">{{ approveData.planInfo.totalEweCount }}</el-descriptions-item>
<el-descriptions-item label="公羊数量">{{ approveData.planInfo.totalRamCount }}</el-descriptions-item>
<el-descriptions-item label="配种比例">{{ approveData.planInfo.breedRatio }}</el-descriptions-item>
</el-descriptions>
<el-divider content-position="left">配种计划详情可编辑</el-divider>
<el-table
:data="approveData.planDetails"
style="width: 100%"
max-height="500"
border
>
<el-table-column label="序号" type="index" width="60" align="center" />
<el-table-column label="母羊耳号" align="center" prop="ewe_manage_tags" width="120" />
<el-table-column label="母羊品种" align="center" prop="ewe_variety" width="100" />
<el-table-column label="核心羊群" align="center" width="100">
<template #default="scope">
<el-tag v-if="scope.row.ewe_is_core" type="success"></el-tag>
<el-tag v-else type="info"></el-tag>
</template>
</el-table-column>
<el-table-column label="是否种用" align="center" width="100">
<template #default="scope">
<el-tag v-if="scope.row.ewe_is_breeding" type="success"></el-tag>
<el-tag v-else type="info"></el-tag>
</template>
</el-table-column>
<el-table-column label="详情" align="center" width="80">
<template #default="scope">
<el-button link type="primary" icon="View" @click="showEweDetail(scope.row)">查看</el-button>
</template>
</el-table-column>
<el-table-column label="配种公羊" align="center" width="200">
<template #default="scope">
<el-select
v-model="scope.row.ram_id"
placeholder="选择公羊(可为空)"
@change="handleRamChange(scope.$index, scope.row)"
filterable
clearable
>
<el-option label="不参与配种" :value="null" />
<el-option
v-for="ram in availableRamList"
:key="ram.id"
:label="ram.bs_manage_tags"
:value="ram.id"
/>
</el-select>
<!-- 如果当前选中的公羊不在可选列表中显示当前公羊耳号 -->
<div v-if="scope.row.ram_id && !availableRamList.find(r => r.id == scope.row.ram_id)"
style="font-size: 12px; color: #666; margin-top: 4px;">
当前: {{ scope.row.ram_manage_tags || scope.row.ram_id }}
</div>
</template>
</el-table-column>
<el-table-column label="公羊品种" align="center" prop="ram_variety" width="100" />
<el-table-column label="详情" align="center" width="80">
<template #default="scope">
<el-button
link
type="primary"
icon="View"
@click="showRamDetail(scope.row)"
:disabled="!scope.row.ram_id"
>查看</el-button>
</template>
</el-table-column>
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button type="success" @click="confirmApprove">确认审批</el-button>
<el-button type="danger" @click="rejectApprove">拒绝审批</el-button>
<el-button @click="approveOpen = false"> </el-button>
</div>
</template>
</el-dialog>
<!-- 查看配种计划详情对话框 -->
<el-dialog title="配种计划详情" v-model="viewOpen" width="1000px" append-to-body>
<el-dialog title="配种计划详情" v-model="viewOpen" width="1200px" append-to-body>
<el-descriptions :column="3" border>
<el-descriptions-item label="计划名称">{{ planInfo.planName }}</el-descriptions-item>
<el-descriptions-item label="计划类型">
<el-tag v-if="planInfo.planType === 1" type="primary">同期发情配种计划</el-tag>
<el-tag v-else-if="planInfo.planType === 2" type="success">本交配种计划</el-tag>
</el-descriptions-item>
<el-descriptions-item label="计划日期">{{ planInfo.planDate }}</el-descriptions-item>
<el-descriptions-item label="状态">
<el-tag v-if="planInfo.status === 0" type="warning">待审批</el-tag>
@ -193,29 +325,90 @@
<el-descriptions-item label="审批人">{{ planInfo.approver }}</el-descriptions-item>
</el-descriptions>
<!-- 只有已审批状态才显示导出按钮 -->
<el-row :gutter="10" class="mb8" style="margin-top: 16px;" v-if="planInfo.status === 1">
<el-col :span="1.5">
<el-button type="success" icon="Download" @click="exportBreedPlanDetails">导出配种计划详情</el-button>
</el-col>
</el-row>
<el-divider content-position="left">配种计划详情</el-divider>
<el-table :data="planDetails" max-height="400">
<el-table-column label="公羊耳号" align="center" prop="ram_manage_tags" />
<el-table-column label="公羊品种" align="center" prop="ram_variety" />
<el-table-column label="母羊耳号" align="center" prop="ewe_manage_tags" />
<el-table-column label="母羊品种" align="center" prop="ewe_variety" />
<el-table-column label="母羊体重" align="center" prop="ewe_weight" />
<el-table-column label="配种类型" align="center" prop="breed_type">
<el-table :data="planDetails" max-height="600" border stripe>
<el-table-column label="序号" type="index" width="60" align="center" />
<el-table-column label="母羊耳号" align="center" prop="ewe_manage_tags" width="120" />
<el-table-column label="母羊品种" align="center" prop="ewe_variety" width="100" />
<el-table-column label="核心羊群" align="center" width="100">
<template #default="scope">
<el-tag v-if="scope.row.breed_type === 1" type="primary">自然交配</el-tag>
<el-tag v-else-if="scope.row.breed_type === 2" type="success">人工授精</el-tag>
<el-tag v-else-if="scope.row.breed_type === 3" type="info">胚胎移植</el-tag>
<el-tag v-if="scope.row.ewe_is_core" type="success"></el-tag>
<el-tag v-else type="info"></el-tag>
</template>
</el-table-column>
<el-table-column label="是否种用" align="center" width="100">
<template #default="scope">
<el-tag v-if="scope.row.ewe_is_breeding" type="success"></el-tag>
<el-tag v-else type="info"></el-tag>
</template>
</el-table-column>
<el-table-column label="母羊详情" align="center" width="100">
<template #default="scope">
<el-button link type="primary" icon="View" @click="showEweDetail(scope.row)">查看</el-button>
</template>
</el-table-column>
<el-table-column label="公羊耳号" align="center" prop="ram_manage_tags" width="120" />
<el-table-column label="公羊品种" align="center" prop="ram_variety" width="100" />
<el-table-column label="公羊详情" align="center" width="100">
<template #default="scope">
<el-button
link
type="primary"
icon="View"
@click="showRamDetail(scope.row)"
:disabled="!scope.row.ram_id"
>查看</el-button>
</template>
</el-table-column>
<el-table-column label="配种类型" align="center" prop="breed_type" width="120">
<template #default="scope">
<el-tag v-if="scope.row.breed_type === 1" type="primary">同期发情</el-tag>
<el-tag v-else-if="scope.row.breed_type === 2" type="success">本交</el-tag>
<el-tag v-else type="warning">未知类型</el-tag>
</template>
</el-table-column>
</el-table>
</el-dialog>
<!-- 羊只详情对话框 -->
<el-dialog :title="sheepDetailTitle" v-model="sheepDetailOpen" width="800px" append-to-body>
<el-descriptions :column="2" border>
<el-descriptions-item label="耳号">{{ sheepDetail.manage_tags }}</el-descriptions-item>
<el-descriptions-item label="品种">{{ sheepDetail.variety }}</el-descriptions-item>
<el-descriptions-item label="家系">{{ sheepDetail.family }}</el-descriptions-item>
<el-descriptions-item label="羊只类别">{{ sheepDetail.sheep_type }}</el-descriptions-item>
<el-descriptions-item label="繁育状态" v-if="sheepDetail.breed_status">{{ sheepDetail.breed_status }}</el-descriptions-item>
<el-descriptions-item label="生日" v-if="sheepDetail.birthday">{{ sheepDetail.birthday }}</el-descriptions-item>
<el-descriptions-item label="月龄">{{ sheepDetail.month_age }}</el-descriptions-item>
<el-descriptions-item label="当前体重">{{ sheepDetail.current_weight }}kg</el-descriptions-item>
<el-descriptions-item label="胎次" v-if="sheepDetail.parity">{{ sheepDetail.parity }}</el-descriptions-item>
<el-descriptions-item label="是否核心羊群" v-if="sheepDetail.is_core !== undefined">
<el-tag v-if="sheepDetail.is_core" type="success"></el-tag>
<el-tag v-else type="info"></el-tag>
</el-descriptions-item>
<el-descriptions-item label="是否种用" v-if="sheepDetail.is_breeding !== undefined">
<el-tag v-if="sheepDetail.is_breeding" type="success"></el-tag>
<el-tag v-else type="info"></el-tag>
</el-descriptions-item>
<el-descriptions-item label="羊舍" v-if="sheepDetail.sheepfold_name">{{ sheepDetail.sheepfold_name }}</el-descriptions-item>
<el-descriptions-item label="备注" v-if="sheepDetail.comment">{{ sheepDetail.comment }}</el-descriptions-item>
<el-descriptions-item label="繁殖情况" v-if="sheepDetail.reproduction_info">{{ sheepDetail.reproduction_info }}</el-descriptions-item>
</el-descriptions>
</el-dialog>
</div>
</template>
<script setup name="BreedPlanGenerate">
import {ref, reactive, toRefs, onMounted} from 'vue'
import {getCurrentInstance} from 'vue'
import {ref, reactive, toRefs, onMounted, getCurrentInstance} from 'vue'
import {
listBreedPlanGenerate,
getBreedPlanGenerate,
@ -223,28 +416,31 @@ import {
selectEligibleEwe as apiSelectEligibleEwe,
selectEligibleRam as apiSelectEligibleRam,
autoGenerateBreedPlan,
approveBreedPlan,
getApproveBreedPlan,
confirmApproveBreedPlan,
viewBreedPlan
} from "@/api/mating_plan/generate"
const {proxy} = getCurrentInstance()
// - 使 proxy.useDict
const dict = proxy.useDict ? proxy.useDict('breed_plan_status', 'breed_type') : {
type: {
breed_plan_status: [],
breed_type: []
}
}
const breedPlanGenerateList = ref([])
const eligibleEweList = ref([])
const eligibleRamList = ref([])
const availableRamList = ref([])
const selectedEwe = ref([])
const selectedRam = ref([])
const planInfo = ref({})
const planDetails = ref([])
const approveData = ref({
planInfo: {},
planDetails: []
})
const sheepDetail = ref({})
const sheepDetailTitle = ref('')
const generateOpen = ref(false)
const viewOpen = ref(false)
const approveOpen = ref(false)
const sheepDetailOpen = ref(false)
const loading = ref(true)
const eweLoading = ref(false)
const ramLoading = ref(false)
@ -253,36 +449,36 @@ const ids = ref([])
const multiple = ref(true)
const total = ref(0)
const activeTab = ref('ewe')
const dateRange = ref([])
const data = reactive({
queryParams: {
pageNum: 1,
pageSize: 10,
planName: null,
status: null
planType: null,
status: null,
params: {}
},
generateForm: {
planType: 1
},
generateRules: {
planType: [
{ required: true, message: '请选择计划类型', trigger: 'change' }
]
}
})
const {queryParams} = toRefs(data)
const {queryParams, generateForm, generateRules} = toRefs(data)
/** 查询配种计划生成列表 */
function getList() {
loading.value = true
console.log('开始获取配种计划列表...')
console.log('查询参数:', queryParams.value)
listBreedPlanGenerate(queryParams.value).then(response => {
console.log('API完整响应:', response)
// API
breedPlanGenerateList.value = response.rows || []
total.value = response.total || 0
loading.value = false
console.log('处理后的数据列表:', breedPlanGenerateList.value)
console.log('数据列表长度:', breedPlanGenerateList.value.length)
console.log('总数:', total.value)
}).catch(error => {
console.error('获取列表失败:', error)
loading.value = false
@ -299,10 +495,36 @@ function handleQuery() {
/** 重置按钮操作 */
function resetQuery() {
dateRange.value = []
queryParams.value.params = {}
proxy.resetForm("queryRef")
handleQuery()
}
/** 日期范围变化处理 */
function handleDateRangeChange(dates) {
if (dates && dates.length === 2) {
queryParams.value.params.beginTime = dates[0]
queryParams.value.params.endTime = dates[1]
} else {
queryParams.value.params = {}
}
}
/** 获取当前日期 */
function getCurrentDate() {
const today = new Date()
const year = today.getFullYear()
const month = String(today.getMonth() + 1).padStart(2, '0')
const day = String(today.getDate()).padStart(2, '0')
return `${year}-${month}-${day}`
}
/** 获取计划类型名称 */
function getPlanTypeName(planType) {
return planType === 1 ? '同期发情配种计划' : '本交配种计划'
}
//
function handleSelectionChange(selection) {
ids.value = selection.map(item => item.id)
@ -327,6 +549,7 @@ function handleTabClick(tab) {
/** 生成配种计划按钮操作 */
function handleGenerate() {
generateOpen.value = true
generateForm.value.planType = 1
selectedEwe.value = []
selectedRam.value = []
eligibleEweList.value = []
@ -353,36 +576,43 @@ function selectEligibleRam() {
/** 生成配种计划 */
function generateBreedPlan() {
if (selectedEwe.value.length === 0) {
proxy.$modal.msgError("请选择母羊")
return
}
if (selectedRam.value.length === 0) {
proxy.$modal.msgError("请选择公羊")
return
}
proxy.$refs.generateFormRef.validate((valid) => {
if (!valid) return
const params = {
eweIds: selectedEwe.value,
ramIds: selectedRam.value
}
if (selectedEwe.value.length === 0) {
proxy.$modal.msgError("请选择母羊")
return
}
if (selectedRam.value.length === 0) {
proxy.$modal.msgError("请选择公羊")
return
}
autoGenerateBreedPlan(params).then(response => {
proxy.$modal.msgSuccess("配种计划生成成功")
generateOpen.value = false
//
getList()
//
selectedEwe.value = []
selectedRam.value = []
eligibleEweList.value = []
eligibleRamList.value = []
}).catch(error => {
console.error('生成配种计划失败:', error)
proxy.$modal.msgError("生成配种计划失败")
const params = {
planType: generateForm.value.planType,
eweIds: selectedEwe.value,
ramIds: selectedRam.value
}
autoGenerateBreedPlan(params).then(response => {
proxy.$modal.msgSuccess("配种计划生成成功")
generateOpen.value = false
getList()
//
generateForm.value = { planType: 1 }
selectedEwe.value = []
selectedRam.value = []
eligibleEweList.value = []
eligibleRamList.value = []
}).catch(error => {
console.error('生成配种计划失败:', error)
proxy.$modal.msgError("生成配种计划失败")
})
})
}
/** 查看配种计划详情 */
function handleView(row) {
viewBreedPlan(row.id).then(response => {
@ -394,14 +624,143 @@ function handleView(row) {
/** 审批配种计划 */
function handleApprove(row) {
proxy.$modal.confirm('是否确认审批通过配种计划"' + row.planName + '"').then(function () {
return approveBreedPlan(row.id)
getApproveBreedPlan(row.id).then(response => {
approveData.value = response.data
availableRamList.value = response.data.availableRams || []
// ID
if (approveData.value.planDetails) {
approveData.value.planDetails.forEach(detail => {
// ram_id
if (detail.ram_id && typeof detail.ram_id === 'string') {
detail.ram_id = parseInt(detail.ram_id, 10)
}
//
if (detail.ram_id && detail.ram_manage_tags &&
!availableRamList.value.find(ram => ram.id === detail.ram_id)) {
availableRamList.value.push({
id: detail.ram_id,
bs_manage_tags: detail.ram_manage_tags
})
}
})
}
approveOpen.value = true
})
}
/** 公羊选择变化处理 */
function handleRamChange(index, row) {
if (row.ram_id === null) {
//
row.ram_manage_tags = ''
row.ram_variety = ''
row.ram_family = ''
row.ram_sheep_type = ''
row.ram_birthday = ''
row.ram_month_age = ''
row.ram_current_weight = ''
row.breed_type = null
} else {
// ram_id
const ramId = typeof row.ram_id === 'string' ? parseInt(row.ram_id, 10) : row.ram_id
const selectedRam = availableRamList.value.find(ram => ram.id === ramId)
if (selectedRam) {
row.ram_manage_tags = selectedRam.bs_manage_tags
row.ram_variety = selectedRam.variety
row.ram_family = selectedRam.family
row.ram_sheep_type = selectedRam.sheep_type
row.ram_birthday = selectedRam.birthday
row.ram_month_age = selectedRam.month_age
row.ram_current_weight = selectedRam.current_weight
//
if (!row.breed_type) {
row.breed_type = 1 //
}
}
}
}
/** 显示母羊详情 */
function showEweDetail(row) {
sheepDetail.value = {
manage_tags: row.ewe_manage_tags,
variety: row.ewe_variety,
family: row.ewe_family,
sheep_type: row.ewe_sheep_type,
breed_status: row.ewe_breed_status,
parity: row.ewe_parity,
month_age: row.ewe_month_age,
current_weight: row.ewe_current_weight,
is_core: row.ewe_is_core,
is_breeding: row.ewe_is_breeding,
sheepfold_name: row.ewe_sheepfold_name,
comment: row.ewe_comment,
reproduction_info: row.ewe_reproduction_info
}
sheepDetailTitle.value = '母羊详情'
sheepDetailOpen.value = true
}
/** 显示公羊详情 */
function showRamDetail(row) {
if (!row.ram_id) {
proxy.$modal.msgWarning("该母羊未分配公羊")
return
}
sheepDetail.value = {
manage_tags: row.ram_manage_tags,
variety: row.ram_variety,
family: row.ram_family,
sheep_type: row.ram_sheep_type,
birthday: row.ram_birthday,
month_age: row.ram_month_age,
current_weight: row.ram_current_weight
}
sheepDetailTitle.value = '公羊详情'
sheepDetailOpen.value = true
}
/** 确认审批 */
function confirmApprove() {
proxy.$modal.confirm('确认审批通过此配种计划?').then(function () {
const params = {
planId: approveData.value.planInfo.id,
planDetails: approveData.value.planDetails,
status: 1,
approveRemark: '审批通过'
}
return confirmApproveBreedPlan(params)
}).then(() => {
proxy.$modal.msgSuccess("审批成功")
//
approveOpen.value = false
getList()
}).catch(() => {
})
}).catch(() => {})
}
/** 拒绝审批 */
function rejectApprove() {
proxy.$modal.prompt('请输入拒绝原因', '拒绝审批', {
confirmButtonText: '确定',
cancelButtonText: '取消',
inputPattern: /.+/,
inputErrorMessage: '拒绝原因不能为空'
}).then(({ value }) => {
const params = {
planId: approveData.value.planInfo.id,
status: 2,
approveRemark: value
}
return confirmApproveBreedPlan(params)
}).then(() => {
proxy.$modal.msgSuccess("已拒绝审批")
approveOpen.value = false
getList()
}).catch(() => {})
}
/** 删除按钮操作 */
@ -411,18 +770,35 @@ function handleDelete(row) {
return delBreedPlanGenerate(_ids)
}).then(() => {
proxy.$modal.msgSuccess("删除成功")
//
getList()
}).catch(() => {
})
}).catch(() => {})
}
/** 导出配种计划详情 */
function exportBreedPlanDetails() {
if (!planInfo.value || !planDetails.value || planDetails.value.length === 0) {
proxy.$modal.msgError("暂无数据可导出")
return
}
//
if (planInfo.value.status !== 1) {
proxy.$modal.msgError("只有已审批的配种计划才能导出")
return
}
// 使proxy.download
proxy.download(`/mating_plan/generate/export/${planInfo.value.id}`, {}, `${planInfo.value.planName}_配种计划详情_${new Date().getTime()}.xlsx`)
}
//
onMounted(() => {
console.log('配种计划生成页面已挂载')
getList()
})
</script>
//
getList()
</script>
<style scoped>
.mb8 {
margin-bottom: 8px;
}
</style>

View File

@ -3,18 +3,18 @@
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="公羊id" prop="ramId">
<el-input
v-model="queryParams.ramId"
placeholder="请输入公羊id"
clearable
@keyup.enter="handleQuery"
v-model="queryParams.ramId"
placeholder="请输入公羊id"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="母羊id" prop="eweId">
<el-input
v-model="queryParams.eweId"
placeholder="请输入母羊id"
clearable
@keyup.enter="handleQuery"
v-model="queryParams.eweId"
placeholder="请输入母羊id"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
@ -26,40 +26,40 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
v-hasPermi="['mating_plan:mating_plan:add']"
type="primary"
plain
icon="Plus"
@click="handleAdd"
v-hasPermi="['mating_plan:mating_plan:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="Edit"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['mating_plan:mating_plan:edit']"
type="success"
plain
icon="Edit"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['mating_plan:mating_plan:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['mating_plan:mating_plan:remove']"
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['mating_plan:mating_plan:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="Download"
@click="handleExport"
v-hasPermi="['mating_plan:mating_plan:export']"
type="warning"
plain
icon="Download"
@click="handleExport"
v-hasPermi="['mating_plan:mating_plan:export']"
>导出</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
@ -67,10 +67,17 @@
<el-table v-loading="loading" :data="mating_planList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="${comment}" align="center" prop="id" />
<el-table-column label="配种计划ID" align="center" prop="id" />
<el-table-column label="公羊id" align="center" prop="ramId" />
<el-table-column label="母羊id" align="center" prop="eweId" />
<el-table-column label="配种类型" align="center" prop="breedType" />
<el-table-column label="配种类型" align="center" prop="breedType">
<template #default="scope">
<el-tag v-if="scope.row.breedType === 1" type="primary">自然交配</el-tag>
<el-tag v-else-if="scope.row.breedType === 2" type="success">人工授精</el-tag>
<el-tag v-else-if="scope.row.breedType === 3" type="info">胚胎移植</el-tag>
<el-tag v-else type="warning">未知类型</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['mating_plan:mating_plan:edit']">修改</el-button>
@ -80,11 +87,11 @@
</el-table>
<pagination
v-show="total>0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
v-show="total>0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改配种计划对话框 -->
@ -96,6 +103,13 @@
<el-form-item label="母羊id" prop="eweId">
<el-input v-model="form.eweId" placeholder="请输入母羊id" />
</el-form-item>
<el-form-item label="配种类型" prop="breedType">
<el-select v-model="form.breedType" placeholder="请选择配种类型">
<el-option label="自然交配" :value="1"></el-option>
<el-option label="人工授精" :value="2"></el-option>
<el-option label="胚胎移植" :value="3"></el-option>
</el-select>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
@ -108,6 +122,7 @@
</template>
<script setup name="Mating_plan">
import { ref, reactive, toRefs, onMounted, getCurrentInstance } from 'vue'
import { listMating_plan, getMating_plan, delMating_plan, addMating_plan, updateMating_plan } from "@/api/mating_plan/mating_plan"
const { proxy } = getCurrentInstance()
@ -132,6 +147,15 @@ const data = reactive({
breedType: null
},
rules: {
ramId: [
{ required: true, message: "公羊id不能为空", trigger: "blur" }
],
eweId: [
{ required: true, message: "母羊id不能为空", trigger: "blur" }
],
breedType: [
{ required: true, message: "配种类型不能为空", trigger: "change" }
]
}
})
@ -141,9 +165,14 @@ const { queryParams, form, rules } = toRefs(data)
function getList() {
loading.value = true
listMating_plan(queryParams.value).then(response => {
mating_planList.value = response.rows
total.value = response.total
mating_planList.value = response.rows || []
total.value = response.total || 0
loading.value = false
}).catch(error => {
console.error('获取列表失败:', error)
loading.value = false
mating_planList.value = []
total.value = 0
})
}
@ -240,5 +269,14 @@ function handleExport() {
}, `mating_plan_${new Date().getTime()}.xlsx`)
}
getList()
//
onMounted(() => {
getList()
})
</script>
<style scoped>
.mb8 {
margin-bottom: 8px;
}
</style>