Merge branch 'main' of http://e19510c831.iok.la/admin/zhyc-sheep-ui
This commit is contained in:
commit
9a1eff0fc6
@ -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'
|
||||
})
|
||||
}
|
@ -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({
|
||||
|
@ -41,4 +41,4 @@ export function delMating_plan(id) {
|
||||
url: '/mating_plan/mating_plan/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
}
|
@ -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>
|
@ -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>
|
||||
|
@ -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">
|
||||
|
@ -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">
|
||||
|
@ -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>
|
||||
|
@ -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 {
|
||||
// 根据选择的formulaId筛选batchId
|
||||
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
|
||||
// 如果羊舍ID是名称,则转换为ID
|
||||
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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
@ -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>
|
Loading…
x
Reference in New Issue
Block a user