Compare commits
2 Commits
a7cf3fd566
...
035b675506
Author | SHA1 | Date | |
---|---|---|---|
035b675506 | |||
9ea5c35d85 |
@ -31,7 +31,7 @@
|
|||||||
"nprogress": "0.2.0",
|
"nprogress": "0.2.0",
|
||||||
"pinia": "2.1.7",
|
"pinia": "2.1.7",
|
||||||
"splitpanes": "3.1.5",
|
"splitpanes": "3.1.5",
|
||||||
"vue": "3.4.31",
|
"vue": "^3.4.31",
|
||||||
"vue-cropper": "1.1.1",
|
"vue-cropper": "1.1.1",
|
||||||
"vue-router": "4.4.0",
|
"vue-router": "4.4.0",
|
||||||
"vuedraggable": "4.1.0",
|
"vuedraggable": "4.1.0",
|
||||||
|
44
src/api/produce/bodyManage/body_measure.js
Normal file
44
src/api/produce/bodyManage/body_measure.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 查询体尺测量列表
|
||||||
|
export function listBody_measure(query) {
|
||||||
|
return request({
|
||||||
|
url: '/body_measure/body_measure/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询体尺测量详细
|
||||||
|
export function getBody_measure(id) {
|
||||||
|
return request({
|
||||||
|
url: '/body_measure/body_measure/' + id,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增体尺测量
|
||||||
|
export function addBody_measure(data) {
|
||||||
|
return request({
|
||||||
|
url: '/body_measure/body_measure',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改体尺测量
|
||||||
|
export function updateBody_measure(data) {
|
||||||
|
return request({
|
||||||
|
url: '/body_measure/body_measure',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除体尺测量
|
||||||
|
export function delBody_measure(id) {
|
||||||
|
return request({
|
||||||
|
url: '/body_measure/body_measure/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
44
src/api/produce/bodyManage/body_score.js
Normal file
44
src/api/produce/bodyManage/body_score.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 查询体况评分列表
|
||||||
|
export function listBody_score(query) {
|
||||||
|
return request({
|
||||||
|
url: '/body_score/body_score/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询体况评分详细
|
||||||
|
export function getBody_score(id) {
|
||||||
|
return request({
|
||||||
|
url: '/body_score/body_score/' + id,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增体况评分
|
||||||
|
export function addBody_score(data) {
|
||||||
|
return request({
|
||||||
|
url: '/body_score/body_score',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改体况评分
|
||||||
|
export function updateBody_score(data) {
|
||||||
|
return request({
|
||||||
|
url: '/body_score/body_score',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除体况评分
|
||||||
|
export function delBody_score(id) {
|
||||||
|
return request({
|
||||||
|
url: '/body_score/body_score/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
44
src/api/produce/bodyManage/breast_rating.js
Normal file
44
src/api/produce/bodyManage/breast_rating.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 查询乳房评分列表
|
||||||
|
export function listBreast_rating(query) {
|
||||||
|
return request({
|
||||||
|
url: '/breast_rating/breast_rating/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询乳房评分详细
|
||||||
|
export function getBreast_rating(id) {
|
||||||
|
return request({
|
||||||
|
url: '/breast_rating/breast_rating/' + id,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增乳房评分
|
||||||
|
export function addBreast_rating(data) {
|
||||||
|
return request({
|
||||||
|
url: '/breast_rating/breast_rating',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改乳房评分
|
||||||
|
export function updateBreast_rating(data) {
|
||||||
|
return request({
|
||||||
|
url: '/breast_rating/breast_rating',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除乳房评分
|
||||||
|
export function delBreast_rating(id) {
|
||||||
|
return request({
|
||||||
|
url: '/breast_rating/breast_rating/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
44
src/api/produce/manage_sheep/changeComment.js
Normal file
44
src/api/produce/manage_sheep/changeComment.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 查询改备注列表
|
||||||
|
export function listChangeComment(query) {
|
||||||
|
return request({
|
||||||
|
url: '/changeComment/changeComment/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询改备注详细
|
||||||
|
export function getChangeComment(id) {
|
||||||
|
return request({
|
||||||
|
url: '/changeComment/changeComment/' + id,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增改备注
|
||||||
|
export function addChangeComment(data) {
|
||||||
|
return request({
|
||||||
|
url: '/changeComment/changeComment',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改改备注
|
||||||
|
export function updateChangeComment(data) {
|
||||||
|
return request({
|
||||||
|
url: '/changeComment/changeComment',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除改备注
|
||||||
|
export function delChangeComment(id) {
|
||||||
|
return request({
|
||||||
|
url: '/changeComment/changeComment/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
71
src/api/produce/manage_sheep/changeEar.js
Normal file
71
src/api/produce/manage_sheep/changeEar.js
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 查询修改电子耳号记录列表
|
||||||
|
export function listChangeEar(query) {
|
||||||
|
return request({
|
||||||
|
url: '/changeEar/changeEar/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询修改电子耳号记录详细
|
||||||
|
export function getChangeEar(id) {
|
||||||
|
return request({
|
||||||
|
url: '/changeEar/changeEar/' + id,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增修改电子耳号记录
|
||||||
|
export function addChangeEar(data) {
|
||||||
|
return request({
|
||||||
|
url: '/changeEar/changeEar',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改修改电子耳号记录
|
||||||
|
export function updateChangeEar(data) {
|
||||||
|
return request({
|
||||||
|
url: '/changeEar/changeEar',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除修改电子耳号记录
|
||||||
|
export function delChangeEar(id) {
|
||||||
|
return request({
|
||||||
|
url: '/changeEar/changeEar/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 根据羊只ID查询基本信息
|
||||||
|
export function getSheepById(id) {
|
||||||
|
return request({
|
||||||
|
url: '/sheep/sheep/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//根据耳号(管理耳号或电子耳号)查询羊只信息
|
||||||
|
export function getSheepByEarNumber(earNumber, earType) {
|
||||||
|
return request({
|
||||||
|
url: '/sheep/sheep/byEarNumber',
|
||||||
|
method: 'get',
|
||||||
|
params: { earNumber, earType }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//校验新管理/电子耳号
|
||||||
|
export function checkTagExists(tag, earType) {
|
||||||
|
return request({
|
||||||
|
url: '/sheep/sheep/existsByTag',
|
||||||
|
method: 'get',
|
||||||
|
params: { tag, earType }
|
||||||
|
});
|
||||||
|
}
|
52
src/api/produce/manage_sheep/changeVariety.js
Normal file
52
src/api/produce/manage_sheep/changeVariety.js
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 查询改品种记录列表
|
||||||
|
export function listChangeVariety(query) {
|
||||||
|
return request({
|
||||||
|
url: '/changeVariety/changeVariety/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询改品种记录详细
|
||||||
|
export function getChangeVariety(id) {
|
||||||
|
return request({
|
||||||
|
url: '/changeVariety/changeVariety/' + id,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增改品种记录
|
||||||
|
export function addChangeVariety(data) {
|
||||||
|
return request({
|
||||||
|
url: '/changeVariety/changeVariety',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改改品种记录
|
||||||
|
export function updateChangeVariety(data) {
|
||||||
|
return request({
|
||||||
|
url: '/changeVariety/changeVariety',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除改品种记录
|
||||||
|
export function delChangeVariety(id) {
|
||||||
|
return request({
|
||||||
|
url: '/changeVariety/changeVariety/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
//通过管理耳号获取羊只信息
|
||||||
|
export function getSheepByManageTags(manageTags) {
|
||||||
|
return request({
|
||||||
|
url: `/sheep/sheep/byManageTags/${manageTags}`,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
}
|
@ -51,3 +51,12 @@ export function listSheepfold() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//审批转群记录
|
||||||
|
export function approveScTransGroup(data) {
|
||||||
|
return request({
|
||||||
|
url: '/produce/manage_sheep/trans_group/approve',
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -9,6 +9,23 @@ export function listTransition_info(query) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 查询牧场列表(用于下拉框)
|
||||||
|
export function listRanch() {
|
||||||
|
return request({
|
||||||
|
url: '/ranch/ranch/list',
|
||||||
|
method: 'get',
|
||||||
|
params: { pageNum: 1, pageSize: 9999 }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询指定牧场下的所有羊只耳号
|
||||||
|
export function getSheepByRanchId(ranchId) {
|
||||||
|
return request({
|
||||||
|
url: `/ranch/ranch/getSheepByRanchId/${ranchId}`,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// 查询转场详细
|
// 查询转场详细
|
||||||
export function getTransition_info(id) {
|
export function getTransition_info(id) {
|
||||||
return request({
|
return request({
|
||||||
@ -17,15 +34,15 @@ export function getTransition_info(id) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 新增转场
|
// 新增转场
|
||||||
export function addTransition_info(data) {
|
export function addTransition_info(data) {
|
||||||
return request({
|
return request({
|
||||||
url: 'produce/manage_sheep/transition_info',
|
url: '/produce/manage_sheep/transition_info/batch',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: data
|
data: data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改转场
|
// 修改转场
|
||||||
export function updateTransition_info(data) {
|
export function updateTransition_info(data) {
|
||||||
return request({
|
return request({
|
||||||
@ -42,3 +59,14 @@ export function delTransition_info(id) {
|
|||||||
method: 'delete'
|
method: 'delete'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批转场记录
|
||||||
|
*/
|
||||||
|
export function approveTransitionInfo(data) {
|
||||||
|
return request({
|
||||||
|
url: '/produce/manage_sheep/transition_info/approve',
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -45,7 +45,7 @@ export function exportFixHoof(query) {
|
|||||||
url: '/produce/other/fixHoof/export',
|
url: '/produce/other/fixHoof/export',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
params: query,
|
params: query,
|
||||||
responseType: 'blob' // 导出功能需要设置响应类型为blob
|
responseType: 'blob'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ export function getVarietyOptions(query){
|
|||||||
//通过羊舍获取羊只
|
//通过羊舍获取羊只
|
||||||
export function getSheepBySheepfoldId(id) {
|
export function getSheepBySheepfoldId(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/sheepfold_management/sheepfold_management/getSheepById`, // 使用你已有的接口路径
|
url: `/sheepfold_management/sheepfold_management/getSheepById`,
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params:{ id: String(id) }
|
params:{ id: String(id) }
|
||||||
})
|
})
|
||||||
|
@ -3,7 +3,7 @@ import request from '@/utils/request'
|
|||||||
// 查询羊只品种列表
|
// 查询羊只品种列表
|
||||||
export function listVariety(query) {
|
export function listVariety(query) {
|
||||||
return request({
|
return request({
|
||||||
url: '/variety/variety/list',
|
url: '/base/variety/list',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: query
|
params: query
|
||||||
})
|
})
|
||||||
@ -12,7 +12,7 @@ export function listVariety(query) {
|
|||||||
// 查询羊只品种详细
|
// 查询羊只品种详细
|
||||||
export function getVariety(id) {
|
export function getVariety(id) {
|
||||||
return request({
|
return request({
|
||||||
url: '/variety/variety/' + id,
|
url: '/base/variety/' + id,
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -20,7 +20,7 @@ export function getVariety(id) {
|
|||||||
// 新增羊只品种
|
// 新增羊只品种
|
||||||
export function addVariety(data) {
|
export function addVariety(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/variety/variety',
|
url: '/base/variety',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: data
|
data: data
|
||||||
})
|
})
|
||||||
@ -29,7 +29,7 @@ export function addVariety(data) {
|
|||||||
// 修改羊只品种
|
// 修改羊只品种
|
||||||
export function updateVariety(data) {
|
export function updateVariety(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/variety/variety',
|
url: '/base/variety',
|
||||||
method: 'put',
|
method: 'put',
|
||||||
data: data
|
data: data
|
||||||
})
|
})
|
||||||
@ -38,7 +38,7 @@ export function updateVariety(data) {
|
|||||||
// 删除羊只品种
|
// 删除羊只品种
|
||||||
export function delVariety(id) {
|
export function delVariety(id) {
|
||||||
return request({
|
return request({
|
||||||
url: '/variety/variety/' + id,
|
url: '/base/variety/' + id,
|
||||||
method: 'delete'
|
method: 'delete'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
340
src/views/produce/bodyManage/body_measure/index.vue
Normal file
340
src/views/produce/bodyManage/body_measure/index.vue
Normal file
@ -0,0 +1,340 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
|
<!-- <el-form-item label="羊只id" prop="sheepId">
|
||||||
|
<el-input v-model="queryParams.sheepId" placeholder="请输入羊只id" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item> -->
|
||||||
|
<el-form-item label="管理耳号" prop="manageTags">
|
||||||
|
<el-input v-model="queryParams.manageTags" placeholder="请输入管理耳号" clearable @keyup.enter="handleQuery"
|
||||||
|
style="max-width: 160px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="创建时间" style="width: 308px">
|
||||||
|
<el-date-picker v-model="daterangeCreateTime" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
|
||||||
|
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd"
|
||||||
|
v-hasPermi="['body_measure:body_measure:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
|
||||||
|
v-hasPermi="['body_measure:body_measure:edit']">修改</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
||||||
|
v-hasPermi="['body_measure:body_measure:remove']">删除</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport"
|
||||||
|
v-hasPermi="['body_measure:body_measure:export']">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="body_measureList" @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="sheepId" /> -->
|
||||||
|
<el-table-column label="管理耳号" align="center" prop="manageTags" fixed min-width="100px" />
|
||||||
|
<el-table-column label="体高" align="center" prop="height" />
|
||||||
|
<el-table-column label="胸围" align="center" prop="bust" />
|
||||||
|
<el-table-column label="体斜长" align="center" prop="bodyLength" />
|
||||||
|
<el-table-column label="管围" align="center" prop="pipeLength" />
|
||||||
|
<el-table-column label="胸深" align="center" prop="chestDepth" />
|
||||||
|
<el-table-column label="臀高" align="center" prop="hipHeight" />
|
||||||
|
<el-table-column label="尻宽" align="center" prop="rumpWidth" />
|
||||||
|
<el-table-column label="尻高" align="center" prop="rumpHeignt" />
|
||||||
|
<el-table-column label="腰角宽" align="center" prop="hipWidth" />
|
||||||
|
<el-table-column label="十字部高" align="center" prop="hipCrossHeight" />
|
||||||
|
<el-table-column label="备注" align="center" prop="comment" min-width="100px" />
|
||||||
|
<el-table-column label="技术员" align="center" prop="technician" />
|
||||||
|
<el-table-column label="创建人" align="center" prop="createBy" />
|
||||||
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" min-width="130px">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
|
||||||
|
v-hasPermi="['body_measure:body_measure:edit']">修改</el-button>
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['body_measure:body_measure: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" />
|
||||||
|
|
||||||
|
<!-- 添加或修改体尺测量对话框 -->
|
||||||
|
<el-dialog :title="title" v-model="open" width="700px" append-to-body>
|
||||||
|
<el-form ref="body_measureRef" :model="form" :rules="rules" label-width="100px" size="medium"
|
||||||
|
label-position="left">
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="管理耳号" prop="manageTags">
|
||||||
|
<el-input v-model="form.manageTags" placeholder="请输入管理耳号" @blur="onManageTagsBlur" :disabled="!isAdd"
|
||||||
|
clearable />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="体高" prop="height">
|
||||||
|
<el-input v-model="form.height" placeholder="请输入体高" :disabled="!isAdd" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="胸围" prop="bust">
|
||||||
|
<el-input v-model="form.bust" placeholder="请输入胸围" :disabled="!isAdd" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="体斜长" prop="bodyLength">
|
||||||
|
<el-input v-model="form.bodyLength" placeholder="请输入体斜长" :disabled="!isAdd" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="管围" prop="pipeLength">
|
||||||
|
<el-input v-model="form.pipeLength" placeholder="请输入管围" :disabled="!isAdd" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="胸深" prop="chestDepth">
|
||||||
|
<el-input v-model="form.chestDepth" placeholder="请输入胸深" :disabled="!isAdd" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="臀高" prop="hipHeight">
|
||||||
|
<el-input v-model="form.hipHeight" placeholder="请输入臀高" :disabled="!isAdd" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="尻宽" prop="rumpWidth">
|
||||||
|
<el-input v-model="form.rumpWidth" placeholder="请输入尻宽" :disabled="!isAdd" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="尻高" prop="rumpHeignt">
|
||||||
|
<el-input v-model="form.rumpHeignt" placeholder="请输入尻高" :disabled="!isAdd" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="腰角宽" prop="hipWidth">
|
||||||
|
<el-input v-model="form.hipWidth" placeholder="请输入腰角宽" :disabled="!isAdd" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="十字部高" prop="hipCrossHeight">
|
||||||
|
<el-input v-model="form.hipCrossHeight" placeholder="请输入十字部高" :disabled="!isAdd" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="技术员" prop="technician">
|
||||||
|
<el-input v-model="form.technician" placeholder="请输入技术员" :disabled="!isAdd" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-form-item label="备注" prop="comment" v-if="!isAdd">
|
||||||
|
<el-input v-model="form.comment" placeholder="请输入备注" :disabled="!isAdd" clearable type="textarea" rows="3" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="Body_measure">
|
||||||
|
import { listBody_measure, getBody_measure, delBody_measure, addBody_measure, updateBody_measure } from "@/api/produce/bodyManage/body_measure"
|
||||||
|
import { getCurrentInstance } from 'vue'
|
||||||
|
import { getSheepByManageTags } from "@/api/produce/manage_sheep/changeVariety"
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance()
|
||||||
|
|
||||||
|
const body_measureList = 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 daterangeCreateTime = ref([])
|
||||||
|
const isAdd = ref(false)
|
||||||
|
|
||||||
|
const data = reactive({
|
||||||
|
form: { manageTags: null, technician: null },
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
sheepId: null,
|
||||||
|
manageTags: null,
|
||||||
|
createTime: null
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
manageTags: [
|
||||||
|
{ required: true, message: '请输入管理耳号', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
technician: [
|
||||||
|
{ required: true, message: '请输入技术员', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data)
|
||||||
|
|
||||||
|
/** 查询体尺测量列表 */
|
||||||
|
function getList() {
|
||||||
|
loading.value = true
|
||||||
|
queryParams.value.params = {}
|
||||||
|
if (daterangeCreateTime.value.length > 0) {
|
||||||
|
queryParams.value.params["beginCreateTime"] = daterangeCreateTime.value[0]
|
||||||
|
queryParams.value.params["endCreateTime"] = daterangeCreateTime.value[1]
|
||||||
|
}
|
||||||
|
listBody_measure(queryParams.value).then(response => {
|
||||||
|
body_measureList.value = response.rows
|
||||||
|
total.value = response.total
|
||||||
|
loading.value = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 耳号脱焦验证
|
||||||
|
function onManageTagsBlur() {
|
||||||
|
const tag = form.value.manageTags?.trim();
|
||||||
|
if (!tag) {
|
||||||
|
form.value.sheepId = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
getSheepByManageTags(tag).then(res => {
|
||||||
|
if (res.code === 200 && res.data) {
|
||||||
|
form.value.sheepId = res.data.id;
|
||||||
|
form.value.comment = res.data.comment || "";
|
||||||
|
} else {
|
||||||
|
form.value.sheepId = null;
|
||||||
|
form.value.comment = null;
|
||||||
|
proxy.$modal.msgWarning("未找到该管理耳号对应的羊只");
|
||||||
|
}
|
||||||
|
}).catch(err => {
|
||||||
|
console.error("耳号验证失败:", err);
|
||||||
|
form.value.sheepId = null;
|
||||||
|
form.value.comment = null;
|
||||||
|
proxy.$modal.msgError("查询失败,请重试");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 取消按钮
|
||||||
|
function cancel() {
|
||||||
|
open.value = false
|
||||||
|
reset()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 表单重置
|
||||||
|
function reset() {
|
||||||
|
form.value = {
|
||||||
|
id: null,
|
||||||
|
sheepId: null,
|
||||||
|
height: null,
|
||||||
|
bust: null,
|
||||||
|
bodyLength: null,
|
||||||
|
pipeLength: null,
|
||||||
|
chestDepth: null,
|
||||||
|
hipHeight: null,
|
||||||
|
rumpWidth: null,
|
||||||
|
rumpHeignt: null,
|
||||||
|
hipWidth: null,
|
||||||
|
hipCrossHeight: null,
|
||||||
|
comment: null,
|
||||||
|
technician: null,
|
||||||
|
createBy: null,
|
||||||
|
createTime: null
|
||||||
|
}
|
||||||
|
proxy.resetForm("body_measureRef")
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
function handleQuery() {
|
||||||
|
queryParams.value.pageNum = 1
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
function resetQuery() {
|
||||||
|
daterangeCreateTime.value = []
|
||||||
|
proxy.resetForm("queryRef")
|
||||||
|
handleQuery()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 多选框选中数据
|
||||||
|
function handleSelectionChange(selection) {
|
||||||
|
ids.value = selection.map(item => item.id)
|
||||||
|
single.value = selection.length != 1
|
||||||
|
multiple.value = !selection.length
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
function handleAdd() {
|
||||||
|
reset()
|
||||||
|
isAdd.value = true
|
||||||
|
open.value = true
|
||||||
|
title.value = "添加体尺测量"
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
function handleUpdate(row) {
|
||||||
|
reset()
|
||||||
|
isAdd.value = false
|
||||||
|
const _id = row.id || ids.value
|
||||||
|
getBody_measure(_id).then(response => {
|
||||||
|
form.value = response.data
|
||||||
|
open.value = true
|
||||||
|
title.value = "修改体尺测量"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
function submitForm() {
|
||||||
|
proxy.$refs["body_measureRef"].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
if (form.value.id != null) {
|
||||||
|
updateBody_measure(form.value).then(response => {
|
||||||
|
proxy.$modal.msgSuccess("修改成功")
|
||||||
|
open.value = false
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
addBody_measure(form.value).then(response => {
|
||||||
|
proxy.$modal.msgSuccess("新增成功")
|
||||||
|
open.value = false
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
function handleDelete(row) {
|
||||||
|
const _ids = row.id || ids.value
|
||||||
|
proxy.$modal.confirm('是否确认删除体尺测量编号为"' + _ids + '"的数据项?').then(function () {
|
||||||
|
return delBody_measure(_ids)
|
||||||
|
}).then(() => {
|
||||||
|
getList()
|
||||||
|
proxy.$modal.msgSuccess("删除成功")
|
||||||
|
}).catch(() => { })
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
function handleExport() {
|
||||||
|
proxy.download('body_measure/body_measure/export', {
|
||||||
|
...queryParams.value
|
||||||
|
}, `body_measure_${new Date().getTime()}.xlsx`)
|
||||||
|
}
|
||||||
|
|
||||||
|
getList()
|
||||||
|
</script>
|
355
src/views/produce/bodyManage/body_score/index.vue
Normal file
355
src/views/produce/bodyManage/body_score/index.vue
Normal file
@ -0,0 +1,355 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
|
<!-- <el-form-item label="羊只id" prop="sheepId">
|
||||||
|
<el-input v-model="queryParams.sheepId" placeholder="请输入羊只id" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item> -->
|
||||||
|
<el-form-item label="管理耳号" prop="manageTags">
|
||||||
|
<el-input v-model="queryParams.manageTags" placeholder="请输入管理耳号" clearable @keyup.enter="handleQuery"
|
||||||
|
style="max-width: 160px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="事件日期" style="width: 308px">
|
||||||
|
<el-date-picker v-model="daterangeDatetime" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
|
||||||
|
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="体况评分" prop="score">
|
||||||
|
<el-input v-model="queryParams.score" placeholder="请输入体况评分" clearable @keyup.enter="handleQuery"
|
||||||
|
style="max-width: 150px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="羊舍" prop="sheepfold">
|
||||||
|
<el-select v-model="queryParams.sheepfold" placeholder="请选择羊舍" clearable filterable @keyup.enter="handleQuery">
|
||||||
|
<el-option v-for="item in sheepfoldList" :key="item.id" :label="item.sheepfoldName" :value="item.id" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- <el-form-item label="羊舍id" prop="sheepfold">
|
||||||
|
<el-input v-model="queryParams.sheepfold" placeholder="请输入羊舍id" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item> -->
|
||||||
|
<el-form-item label="创建时间" style="width: 308px">
|
||||||
|
<el-date-picker v-model="daterangeCreateTime" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
|
||||||
|
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd"
|
||||||
|
v-hasPermi="['body_score:body_score:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
|
||||||
|
v-hasPermi="['body_score:body_score:edit']">修改</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
||||||
|
v-hasPermi="['body_score:body_score:remove']">删除</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport"
|
||||||
|
v-hasPermi="['body_score:body_score:export']">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="body_scoreList" @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="sheepId" /> -->
|
||||||
|
<el-table-column label="管理耳号" align="center" prop="manageTags" fixed />
|
||||||
|
<el-table-column label="事件日期" align="center" prop="datetime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.datetime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="体况评分" align="center" prop="score" />
|
||||||
|
<!-- <el-table-column label="羊舍id" align="center" prop="sheepfold" /> -->
|
||||||
|
<el-table-column label="羊舍" align="center" prop="sheepfoldName" />
|
||||||
|
<el-table-column label="备注" align="center" prop="comment" />
|
||||||
|
<el-table-column label="技术员" align="center" prop="technician" />
|
||||||
|
<el-table-column label="创建人" align="center" prop="createBy" />
|
||||||
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="150px">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
|
||||||
|
v-hasPermi="['body_score:body_score:edit']">修改</el-button>
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['body_score:body_score: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" />
|
||||||
|
|
||||||
|
<!-- 添加或修改体况评分对话框 -->
|
||||||
|
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
||||||
|
<el-form ref="body_scoreRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<!-- <el-form-item label="羊只id" prop="sheepId">
|
||||||
|
<el-input v-model="form.sheepId" placeholder="请输入羊只id" />
|
||||||
|
</el-form-item> -->
|
||||||
|
<el-form-item label="管理耳号" prop="manageTags">
|
||||||
|
<el-input v-model="form.manageTags" placeholder="请输入管理耳号" @blur="onManageTagsBlur" :disabled="!isAdd"
|
||||||
|
clearable />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="事件日期" prop="datetime">
|
||||||
|
<el-date-picker clearable v-model="form.datetime" type="date" value-format="YYYY-MM-DD" placeholder="请选择事件日期"
|
||||||
|
:disabled="!isAdd">
|
||||||
|
</el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="体况评分" prop="score">
|
||||||
|
<el-input v-model="form.score" placeholder="请输入体况评分" :disabled="!isAdd" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="羊舍" v-if="!isAdd">
|
||||||
|
<el-select v-model="form.sheepfold" disabled>
|
||||||
|
<el-option v-for="item in sheepfoldList" :key="item.id" :label="item.sheepfoldName" :value="item.id" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- <el-form-item label="羊舍id" prop="sheepfold">
|
||||||
|
<el-input v-model="form.sheepfold" placeholder="请输入羊舍id" :disabled="!isAdd" />
|
||||||
|
</el-form-item> -->
|
||||||
|
<el-form-item label="备注" v-if="!isAdd">
|
||||||
|
<el-input v-model="form.comment" disabled type="textarea" rows="2" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="技术员" prop="technician">
|
||||||
|
<el-input v-model="form.technician" placeholder="请输入技术员" :disabled="!isAdd" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="Body_score">
|
||||||
|
import { listBody_score, getBody_score, delBody_score, addBody_score, updateBody_score } from "@/api/produce/bodyManage/body_score"
|
||||||
|
import { listSheepfold } from "@/api/produce/manage_sheep/trans_group"
|
||||||
|
import { checkSheepByManageTags } from "@/api/produce/other/fixHoof"
|
||||||
|
import { getCurrentInstance, ref, reactive, toRefs } from 'vue'
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance()
|
||||||
|
|
||||||
|
const body_scoreList = 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 daterangeDatetime = ref([])
|
||||||
|
const daterangeCreateTime = ref([])
|
||||||
|
const sheepfoldList = ref([])
|
||||||
|
const isAdd = ref(false)
|
||||||
|
|
||||||
|
const data = reactive({
|
||||||
|
form: {
|
||||||
|
id: null,
|
||||||
|
sheepId: null,
|
||||||
|
manageTags: null,
|
||||||
|
datetime: null,
|
||||||
|
score: null,
|
||||||
|
comment: null,
|
||||||
|
technician: null
|
||||||
|
},
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
manageTags: null,
|
||||||
|
score: null,
|
||||||
|
createTime: null
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
manageTags: [
|
||||||
|
{ required: true, message: '请输入管理耳号', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
score: [
|
||||||
|
{ required: true, message: '请输入体况评分', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
technician: [
|
||||||
|
{ required: true, message: '请输入技术员', trigger: 'blur' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data)
|
||||||
|
|
||||||
|
/** 查询体况评分列表 */
|
||||||
|
function getList() {
|
||||||
|
loading.value = true
|
||||||
|
queryParams.value.params = {}
|
||||||
|
if (null != daterangeDatetime && '' != daterangeDatetime) {
|
||||||
|
queryParams.value.params["beginDatetime"] = daterangeDatetime.value[0]
|
||||||
|
queryParams.value.params["endDatetime"] = daterangeDatetime.value[1]
|
||||||
|
}
|
||||||
|
if (null != daterangeCreateTime && '' != daterangeCreateTime) {
|
||||||
|
queryParams.value.params["beginCreateTime"] = daterangeCreateTime.value[0]
|
||||||
|
queryParams.value.params["endCreateTime"] = daterangeCreateTime.value[1]
|
||||||
|
}
|
||||||
|
listBody_score(queryParams.value).then(response => {
|
||||||
|
body_scoreList.value = response.rows
|
||||||
|
total.value = response.total
|
||||||
|
loading.value = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function onManageTagsBlur() {
|
||||||
|
const tag = form.value.manageTags?.trim();
|
||||||
|
if (!tag) {
|
||||||
|
form.value.sheepId = null;
|
||||||
|
form.value.sheepfold = null;
|
||||||
|
form.value.comment = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkSheepByManageTags(tag).then(res => {
|
||||||
|
if (res.code === 200 && res.data) {
|
||||||
|
form.value.sheepId = res.data.id;
|
||||||
|
form.value.sheepfold = res.data.sheepfoldId;
|
||||||
|
form.value.comment = res.data.comment || '';
|
||||||
|
} else {
|
||||||
|
form.value.sheepId = null;
|
||||||
|
form.value.sheepfold = null;
|
||||||
|
form.value.comment = null;
|
||||||
|
proxy.$modal.msgWarning("未找到该管理耳号对应的羊只");
|
||||||
|
}
|
||||||
|
}).catch(err => {
|
||||||
|
console.error("耳号验证失败:", err);
|
||||||
|
form.value.sheepId = null;
|
||||||
|
form.value.sheepfold = null;
|
||||||
|
form.value.comment = null;
|
||||||
|
proxy.$modal.msgError("查询失败,请重试");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 加载羊舍列表
|
||||||
|
function loadSheepfoldList() {
|
||||||
|
listSheepfold().then(response => {
|
||||||
|
sheepfoldList.value = response.rows || [];
|
||||||
|
}).catch(err => {
|
||||||
|
console.error("加载羊舍列表失败:", err);
|
||||||
|
proxy.$modal.msgError("加载羊舍列表失败,请刷新页面重试");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 取消按钮
|
||||||
|
function cancel() {
|
||||||
|
open.value = false
|
||||||
|
reset()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 表单重置
|
||||||
|
function reset() {
|
||||||
|
form.value = {
|
||||||
|
id: null,
|
||||||
|
sheepId: null,
|
||||||
|
datetime: null,
|
||||||
|
score: null,
|
||||||
|
sheepfold: null,
|
||||||
|
comment: null,
|
||||||
|
technician: null,
|
||||||
|
createBy: null,
|
||||||
|
createTime: null
|
||||||
|
}
|
||||||
|
proxy.resetForm("body_scoreRef")
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
function handleQuery() {
|
||||||
|
queryParams.value.pageNum = 1
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
function resetQuery() {
|
||||||
|
daterangeDatetime.value = []
|
||||||
|
daterangeCreateTime.value = []
|
||||||
|
proxy.resetForm("queryRef")
|
||||||
|
handleQuery()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 多选框选中数据
|
||||||
|
function handleSelectionChange(selection) {
|
||||||
|
ids.value = selection.map(item => item.id)
|
||||||
|
single.value = selection.length != 1
|
||||||
|
multiple.value = !selection.length
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
function handleAdd() {
|
||||||
|
reset()
|
||||||
|
isAdd.value = true
|
||||||
|
open.value = true
|
||||||
|
title.value = "添加体况评分"
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
function handleUpdate(row) {
|
||||||
|
reset()
|
||||||
|
isAdd.value = false
|
||||||
|
const _id = row.id || ids.value
|
||||||
|
getBody_score(_id).then(response => {
|
||||||
|
form.value = response.data
|
||||||
|
open.value = true
|
||||||
|
title.value = "修改体况评分"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
function submitForm() {
|
||||||
|
proxy.$refs["body_scoreRef"].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
if (!form.value.id && !form.value.sheepId) {
|
||||||
|
proxy.$modal.msgError("请输入有效的管理耳号");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (form.value.id != null) {
|
||||||
|
updateBody_score(form.value).then(response => {
|
||||||
|
proxy.$modal.msgSuccess("修改成功")
|
||||||
|
open.value = false
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
addBody_score(form.value).then(response => {
|
||||||
|
proxy.$modal.msgSuccess("新增成功")
|
||||||
|
open.value = false
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
function handleDelete(row) {
|
||||||
|
const _ids = row.id || ids.value
|
||||||
|
proxy.$modal.confirm('是否确认删除体况评分编号为"' + _ids + '"的数据项?').then(function () {
|
||||||
|
return delBody_score(_ids)
|
||||||
|
}).then(() => {
|
||||||
|
getList()
|
||||||
|
proxy.$modal.msgSuccess("删除成功")
|
||||||
|
}).catch(() => { })
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
function handleExport() {
|
||||||
|
proxy.download('body_score/body_score/export', {
|
||||||
|
...queryParams.value
|
||||||
|
}, `body_score_${new Date().getTime()}.xlsx`)
|
||||||
|
}
|
||||||
|
|
||||||
|
getList()
|
||||||
|
loadSheepfoldList();
|
||||||
|
</script>
|
319
src/views/produce/bodyManage/breast_rating/index.vue
Normal file
319
src/views/produce/bodyManage/breast_rating/index.vue
Normal file
@ -0,0 +1,319 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
|
<!-- <el-form-item label="羊只id" prop="sheepId">
|
||||||
|
<el-input v-model="queryParams.sheepId" placeholder="请输入羊只id" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item> -->
|
||||||
|
<el-form-item label="管理耳号" prop="manageTags">
|
||||||
|
<el-input v-model="queryParams.manageTags" placeholder="请输入耳号搜索" clearable @keyup.enter="handleQuery"
|
||||||
|
style="max-width: 160px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="创建时间" style="width: 308px">
|
||||||
|
<el-date-picker v-model="daterangeCreateTime" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
|
||||||
|
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd"
|
||||||
|
v-hasPermi="['breast_rating:breast_rating:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
|
||||||
|
v-hasPermi="['breast_rating:breast_rating:edit']">修改</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
||||||
|
v-hasPermi="['breast_rating:breast_rating:remove']">删除</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport"
|
||||||
|
v-hasPermi="['breast_rating:breast_rating:export']">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="breast_ratingList" @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="sheepId" /> -->
|
||||||
|
<el-table-column label="管理耳号" align="center" prop="manageTags" />
|
||||||
|
<el-table-column label="乳房深度" align="center" prop="depth" />
|
||||||
|
<el-table-column label="乳房长度" align="center" prop="length" />
|
||||||
|
<el-table-column label="乳房位置" align="center" prop="position" />
|
||||||
|
<el-table-column label="乳房附着" align="center" prop="adbere" />
|
||||||
|
<el-table-column label="乳房间隔度" align="center" prop="spacing" />
|
||||||
|
<el-table-column label="乳房评分" align="center" prop="score" />
|
||||||
|
<el-table-column label="备注" align="center" prop="comment" />
|
||||||
|
<el-table-column label="技术员" align="center" prop="technician" />
|
||||||
|
<el-table-column label="创建人" align="center" prop="createBy" />
|
||||||
|
<el-table-column label="创建时间" align="center" prop="createTime" width="150">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="120px">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
|
||||||
|
v-hasPermi="['breast_rating:breast_rating:edit']">修改</el-button>
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['breast_rating:breast_rating: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" />
|
||||||
|
|
||||||
|
<!-- 添加或修改乳房评分对话框 -->
|
||||||
|
<el-dialog :title="title" v-model="open" width="550px" append-to-body>
|
||||||
|
<el-form ref="breast_ratingRef" :model="form" :rules="rules" label-width="115px">
|
||||||
|
<!-- <el-form-item label="羊只id" prop="sheepId">
|
||||||
|
<el-input v-model="form.sheepId" placeholder="请输入羊只id" />
|
||||||
|
</el-form-item> -->
|
||||||
|
<el-form-item label="管理耳号" prop="manageTags">
|
||||||
|
<el-input v-model="form.manageTags" placeholder="请输入管理耳号" @blur="onManageTagsBlur" clearable
|
||||||
|
:disabled="!isAdd" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="乳房深度" prop="depth">
|
||||||
|
<el-input v-model="form.depth" placeholder="请输入乳房深度" :disabled="!isAdd" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="乳房长度" prop="length">
|
||||||
|
<el-input v-model="form.length" placeholder="请输入乳房长度" :disabled="!isAdd" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="乳房位置" prop="position">
|
||||||
|
<el-input v-model="form.position" placeholder="请输入乳房位置" :disabled="!isAdd" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="乳房附着" prop="adbere">
|
||||||
|
<el-input v-model="form.adbere" placeholder="请输入乳房附着" :disabled="!isAdd" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="乳房间隔度" prop="spacing">
|
||||||
|
<el-input v-model="form.spacing" placeholder="请输入乳房间隔度" :disabled="!isAdd" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="乳房评分" prop="score">
|
||||||
|
<el-input v-model="form.score" placeholder="请输入乳房评分" :disabled="!isAdd" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="羊只备注" v-if="!isAdd">
|
||||||
|
<el-input v-model="form.comment" type="textarea" :rows="2" placeholder="羊只备注" :disabled="!isAdd" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="技术员" prop="technician">
|
||||||
|
<el-input v-model="form.technician" placeholder="请输入技术员" :disabled="!isAdd" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="Breast_rating">
|
||||||
|
import { listBreast_rating, getBreast_rating, delBreast_rating, addBreast_rating, updateBreast_rating } from "@/api/produce/bodyManage/breast_rating"
|
||||||
|
import { checkSheepByManageTags } from "@/api/produce/other/fixHoof"
|
||||||
|
import { getCurrentInstance, reactive, ref } from "vue"
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance()
|
||||||
|
|
||||||
|
const breast_ratingList = 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 daterangeCreateTime = ref([])
|
||||||
|
const isAdd = ref(false)
|
||||||
|
const data = reactive({
|
||||||
|
form: {
|
||||||
|
id: null,
|
||||||
|
manageTags: null,
|
||||||
|
depth: null,
|
||||||
|
length: null,
|
||||||
|
position: null,
|
||||||
|
adbere: null,
|
||||||
|
spacing: null,
|
||||||
|
score: null,
|
||||||
|
comment: null,
|
||||||
|
technician: null
|
||||||
|
},
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
manageTags: null
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
manageTags: [
|
||||||
|
{ required: true, message: '请输入管理耳号', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
score: [
|
||||||
|
{ required: true, message: '请输入乳房评分', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
technician: [
|
||||||
|
{ required: true, message: '请输入技术员', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data)
|
||||||
|
|
||||||
|
/** 查询乳房评分列表 */
|
||||||
|
function getList() {
|
||||||
|
loading.value = true
|
||||||
|
queryParams.value.params = {}
|
||||||
|
if (daterangeCreateTime.value.length) {
|
||||||
|
queryParams.value.params["beginCreateTime"] = daterangeCreateTime.value[0]
|
||||||
|
queryParams.value.params["endCreateTime"] = daterangeCreateTime.value[1]
|
||||||
|
}
|
||||||
|
listBreast_rating(queryParams.value).then(response => {
|
||||||
|
breast_ratingList.value = response.rows
|
||||||
|
total.value = response.total
|
||||||
|
loading.value = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据耳号查询羊只信息
|
||||||
|
function onManageTagsBlur() {
|
||||||
|
const tag = form.value.manageTags?.trim();
|
||||||
|
if (!tag) {
|
||||||
|
form.value.sheepId = null;
|
||||||
|
form.value.comment = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkSheepByManageTags(tag).then(res => {
|
||||||
|
if (res.code === 200 && res.data) {
|
||||||
|
form.value.sheepId = res.data.id;
|
||||||
|
form.value.comment = res.data.comment || '';
|
||||||
|
} else {
|
||||||
|
form.value.sheepId = null;
|
||||||
|
form.value.comment = null;
|
||||||
|
proxy.$modal.msgWarning("未找到该耳号对应的羊只");
|
||||||
|
}
|
||||||
|
}).catch(err => {
|
||||||
|
console.error("耳号查询失败:", err);
|
||||||
|
form.value.sheepId = null;
|
||||||
|
form.value.comment = null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 取消按钮
|
||||||
|
function cancel() {
|
||||||
|
open.value = false
|
||||||
|
reset()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 表单重置
|
||||||
|
function reset() {
|
||||||
|
form.value = {
|
||||||
|
id: null,
|
||||||
|
manageTags: null,
|
||||||
|
sheepId: null,
|
||||||
|
depth: null,
|
||||||
|
length: null,
|
||||||
|
position: null,
|
||||||
|
adbere: null,
|
||||||
|
spacing: null,
|
||||||
|
score: null,
|
||||||
|
comment: null,
|
||||||
|
technician: null,
|
||||||
|
createBy: null,
|
||||||
|
createTime: null
|
||||||
|
}
|
||||||
|
proxy.resetForm("breast_ratingRef")
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
function handleQuery() {
|
||||||
|
queryParams.value.pageNum = 1
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
function resetQuery() {
|
||||||
|
daterangeCreateTime.value = []
|
||||||
|
proxy.resetForm("queryRef")
|
||||||
|
handleQuery()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 多选框选中数据
|
||||||
|
function handleSelectionChange(selection) {
|
||||||
|
ids.value = selection.map(item => item.id)
|
||||||
|
single.value = selection.length != 1
|
||||||
|
multiple.value = !selection.length
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
function handleAdd() {
|
||||||
|
reset()
|
||||||
|
isAdd.value = true
|
||||||
|
open.value = true
|
||||||
|
title.value = "添加乳房评分"
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
function handleUpdate(row) {
|
||||||
|
reset()
|
||||||
|
isAdd.value = false
|
||||||
|
const _id = row.id || ids.value
|
||||||
|
getBreast_rating(_id).then(response => {
|
||||||
|
form.value = response.data
|
||||||
|
open.value = true
|
||||||
|
title.value = "修改乳房评分"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
function submitForm() {
|
||||||
|
proxy.$refs["breast_ratingRef"].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
if (!form.value.sheepId) {
|
||||||
|
proxy.$modal.msgError("请输入有效的管理耳号");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (form.value.id) {
|
||||||
|
updateBreast_rating(form.value).then(response => {
|
||||||
|
proxy.$modal.msgSuccess("修改成功")
|
||||||
|
open.value = false
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
addBreast_rating(form.value).then(response => {
|
||||||
|
proxy.$modal.msgSuccess("新增成功")
|
||||||
|
open.value = false
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
function handleDelete(row) {
|
||||||
|
const _ids = row.id || ids.value
|
||||||
|
proxy.$modal.confirm('是否确认删除乳房评分编号为"' + _ids + '"的数据项?').then(function () {
|
||||||
|
return delBreast_rating(_ids)
|
||||||
|
}).then(() => {
|
||||||
|
getList()
|
||||||
|
proxy.$modal.msgSuccess("删除成功")
|
||||||
|
}).catch(() => { })
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
function handleExport() {
|
||||||
|
proxy.download('breast_rating/breast_rating/export', {
|
||||||
|
...queryParams.value
|
||||||
|
}, `breast_rating_${new Date().getTime()}.xlsx`)
|
||||||
|
}
|
||||||
|
|
||||||
|
getList()
|
||||||
|
</script>
|
@ -6,11 +6,12 @@
|
|||||||
v-hasPermi="['produce:add_sheep:import']">导入</el-button>
|
v-hasPermi="['produce:add_sheep:import']">导入</el-button>
|
||||||
|
|
||||||
<!-- 新增/编辑表单 -->
|
<!-- 新增/编辑表单 -->
|
||||||
<el-form :model="form" ref="formRef" label-position="left" label-width="100px" style="margin-top:15px">
|
<el-form :model="form" ref="formRef" label-position="left" label-width="120px" style="margin-top:15px"
|
||||||
|
:rules="rules">
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="10">
|
<el-col :span="10">
|
||||||
<el-form-item label="耳号" prop="earNumber">
|
<el-form-item label="耳号" prop="earNumber">
|
||||||
<el-input v-model="form.earNumber" placeholder="请输入耳号" />
|
<el-input v-model="form.earNumber" placeholder="请输入耳号" @blur="handleEarNumberBlur" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="10">
|
<el-col :span="10">
|
||||||
@ -55,7 +56,6 @@
|
|||||||
<el-option label="公" :value="2" />
|
<el-option label="公" :value="2" />
|
||||||
<el-option label="母" :value="1" />
|
<el-option label="母" :value="1" />
|
||||||
<el-option label="阉羊" :value="3" />
|
<el-option label="阉羊" :value="3" />
|
||||||
<!-- <el-option label="兼性" :value="3" /> -->
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@ -127,7 +127,6 @@ import { getToken } from '@/utils/auth'
|
|||||||
|
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance()
|
const { proxy } = getCurrentInstance()
|
||||||
/* -------------------- 表单 -------------------- */
|
|
||||||
const form = ref({
|
const form = ref({
|
||||||
earNumber: '',
|
earNumber: '',
|
||||||
sheepfold: '',
|
sheepfold: '',
|
||||||
@ -145,24 +144,63 @@ const form = ref({
|
|||||||
const formRef = ref(null)
|
const formRef = ref(null)
|
||||||
|
|
||||||
const rules = {
|
const rules = {
|
||||||
earNumber: [{ required: true, message: '请输入耳号', trigger: 'blur' }],
|
earNumber: [
|
||||||
|
{ required: true, message: '请输入耳号', trigger: 'blur' },
|
||||||
|
{ validator: checkEarNumberExists, trigger: 'blur' }
|
||||||
|
],
|
||||||
sheepfold: [{ required: true, message: '请选择羊舍', trigger: 'change' }],
|
sheepfold: [{ required: true, message: '请选择羊舍', trigger: 'change' }],
|
||||||
bornWeight: [{ required: true, message: '请输入出生体重', trigger: 'blur' }],
|
bornWeight: [{ required: true, message: '请输入出生体重', trigger: 'blur' }],
|
||||||
birthday: [{ required: true, message: '请选择出生日期', trigger: 'change' }],
|
birthday: [{ required: true, message: '请选择出生日期', trigger: 'change' }],
|
||||||
gender: [{ required: true, message: '请选择性别', trigger: 'change' }],
|
gender: [{ required: true, message: '请选择性别', trigger: 'change' }],
|
||||||
varietyId: [{ required: true, message: '请选择品种', trigger: 'change' }]
|
varietyId: [{ required: true, message: '请选择品种', trigger: 'change' }],
|
||||||
|
joinDate:[{ required: true, message: '请选择入群日期', trigger: 'change' }],
|
||||||
|
technician:[{ required: true, message: '请输入技术员', trigger: 'change' }],
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------- 下拉数据 -------------------- */
|
// 校验耳号是否存在
|
||||||
|
function checkEarNumberExists(rule, value, callback) {
|
||||||
|
if (!value.trim()) {
|
||||||
|
return callback(new Error('请输入耳号'))
|
||||||
|
}
|
||||||
|
|
||||||
|
request({
|
||||||
|
url: `/sheep/sheep/existsByManageTags/${value.trim()}`,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
.then(response => {
|
||||||
|
if (response.data === true) {
|
||||||
|
callback(new Error('耳号已存在,无法新增'))
|
||||||
|
} else {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
const status = error.response?.status;
|
||||||
|
const errorMsg = error.response?.data?.msg || '';
|
||||||
|
if (status === 404) {
|
||||||
|
callback();
|
||||||
|
} else {
|
||||||
|
callback(new Error('请求异常,请稍后重试'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleEarNumberBlur() {
|
||||||
|
formRef.value.validateField('earNumber')
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const sheepfoldOptions = ref([])
|
const sheepfoldOptions = ref([])
|
||||||
const varietyOptions = ref([])
|
const varietyOptions = ref([])
|
||||||
|
|
||||||
|
//羊舍列表
|
||||||
function getSheepfoldOptions() {
|
function getSheepfoldOptions() {
|
||||||
listSheepfold({ pageNum: 1, pageSize: 9999 }).then(res => {
|
listSheepfold({ pageNum: 1, pageSize: 9999 }).then(res => {
|
||||||
sheepfoldOptions.value = res.rows || []
|
sheepfoldOptions.value = res.rows || []
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//品种列表
|
||||||
function getVarietyOptions() {
|
function getVarietyOptions() {
|
||||||
request({
|
request({
|
||||||
url: '/base/variety/list',
|
url: '/base/variety/list',
|
||||||
@ -173,21 +211,38 @@ function getVarietyOptions() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------- 功能方法 -------------------- */
|
//确保日期格式一致
|
||||||
|
function formatDate(date) {
|
||||||
|
if (!date) return null;
|
||||||
|
const d = new Date(date);
|
||||||
|
const yyyy = d.getFullYear();
|
||||||
|
const mm = String(d.getMonth() + 1).padStart(2, '0');
|
||||||
|
const dd = String(d.getDate()).padStart(2, '0');
|
||||||
|
return `${yyyy}-${mm}-${dd}`;
|
||||||
|
}
|
||||||
|
//提交表单
|
||||||
function submitForm() {
|
function submitForm() {
|
||||||
formRef.value.validate(valid => {
|
formRef.value.validate(valid => {
|
||||||
if (!valid) return
|
if (!valid) return;
|
||||||
addSheep(form.value).then(res => {
|
|
||||||
|
const formData = JSON.parse(JSON.stringify(form.value));
|
||||||
|
|
||||||
|
formData.birthday = formatDate(formData.birthday);
|
||||||
|
formData.joinDate = formatDate(formData.joinDate);
|
||||||
|
|
||||||
|
if (formData.bornWeight) {
|
||||||
|
formData.bornWeight = Number(formData.bornWeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
addSheep(formData).then(res => {
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
proxy.$modal.msgSuccess('新增成功')
|
proxy.$modal.msgSuccess('新增成功');
|
||||||
resetForm()
|
resetForm();
|
||||||
} else {
|
} else {
|
||||||
proxy.$modal.msgError(res.msg || '新增失败') // 这里显示“耳号已存在”等后端报错
|
proxy.$modal.msgError(res.msg || '新增失败');
|
||||||
}
|
}
|
||||||
}).catch(() => {
|
});
|
||||||
proxy.$modal.msgError('请求异常,请稍后重试')
|
});
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function resetForm() {
|
function resetForm() {
|
||||||
@ -206,7 +261,7 @@ function resetForm() {
|
|||||||
technician: ''
|
technician: ''
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//导出
|
||||||
function handleExportForm() {
|
function handleExportForm() {
|
||||||
exportSheepForm(form.value).then(res => {
|
exportSheepForm(form.value).then(res => {
|
||||||
const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
|
const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
|
||||||
@ -239,29 +294,27 @@ function submitUpload() {
|
|||||||
uploadRef.value?.submit()
|
uploadRef.value?.submit()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 上传成功回调
|
// 导入成功
|
||||||
function handleImportSuccess(res) {
|
function handleImportSuccess(res) {
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
proxy.$modal.msgSuccess(res.msg || '导入成功')
|
proxy.$modal.msgSuccess(res.msg || '导入成功')
|
||||||
importOpen.value = false
|
importOpen.value = false
|
||||||
uploadRef.value?.clearFiles()
|
uploadRef.value?.clearFiles()
|
||||||
} else {
|
} else {
|
||||||
// 业务失败
|
// 失败
|
||||||
proxy.$modal.msgError('导入失败:' + (res.msg || '未知原因'))
|
proxy.$modal.msgError('导入失败:' + (res.msg || '未知原因'))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 上传失败(网络/服务器异常)
|
// 导入失败(网络/服务器异常)
|
||||||
function handleImportError(err) {
|
function handleImportError(err) {
|
||||||
const msg = JSON.parse(err.message || '{}')?.msg || '网络异常'
|
const msg = JSON.parse(err.message || '{}')?.msg || '网络异常'
|
||||||
proxy.$modal.msgError('导入失败:' + msg)
|
proxy.$modal.msgError('导入失败:' + msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -------------------- 初始化 -------------------- */
|
getSheepfoldOptions()
|
||||||
|
getVarietyOptions()
|
||||||
getSheepfoldOptions()
|
|
||||||
getVarietyOptions()
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
289
src/views/produce/manage_sheep/changeComment/index.vue
Normal file
289
src/views/produce/manage_sheep/changeComment/index.vue
Normal file
@ -0,0 +1,289 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
|
<!-- <el-form-item label="羊只id" prop="sheepId">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.sheepId"
|
||||||
|
placeholder="请输入羊只id"
|
||||||
|
clearable
|
||||||
|
@keyup.enter="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item> -->
|
||||||
|
<el-form-item label="管理耳号" prop="manageTags">
|
||||||
|
<el-input v-model="queryParams.manageTags" placeholder="请输入管理耳号" clearable @keyup.enter="handleQuery"
|
||||||
|
style="max-width: 160px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="新备注" prop="newComment">
|
||||||
|
<el-input v-model="queryParams.newComment" placeholder="请输入新备注" clearable @keyup.enter="handleQuery"
|
||||||
|
style="max-width: 160px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="原备注" prop="oldComment">
|
||||||
|
<el-input v-model="queryParams.oldComment" placeholder="请输入原备注" clearable @keyup.enter="handleQuery"
|
||||||
|
style="max-width: 160px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="创建时间" style="width: 308px">
|
||||||
|
<el-date-picker v-model="daterangeCreateTime" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
|
||||||
|
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd"
|
||||||
|
v-hasPermi="['changeComment:changeComment:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
|
||||||
|
v-hasPermi="['changeComment:changeComment:edit']">修改</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
||||||
|
v-hasPermi="['changeComment:changeComment:remove']">删除</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport"
|
||||||
|
v-hasPermi="['changeComment:changeComment:export']">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="changeCommentList" @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="sheepId" /> -->
|
||||||
|
<el-table-column label="管理耳号" align="center" prop="manageTags" />
|
||||||
|
<el-table-column label="新备注" align="center" prop="newComment" />
|
||||||
|
<el-table-column label="原备注" align="center" prop="oldComment" />
|
||||||
|
<el-table-column label="创建人" align="center" prop="createBy" />
|
||||||
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</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="['changeComment:changeComment:edit']">修改</el-button>
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['changeComment:changeComment: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" />
|
||||||
|
|
||||||
|
<!-- 添加或修改改备注对话框 -->
|
||||||
|
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
||||||
|
<el-form ref="changeCommentRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<!-- <el-form-item label="羊只id" prop="sheepId">
|
||||||
|
<el-input v-model="form.sheepId" placeholder="请输入羊只id" />
|
||||||
|
</el-form-item> -->
|
||||||
|
<el-form-item label="管理耳号" prop="manageTags">
|
||||||
|
<el-input v-model="form.manageTags" placeholder="请输入管理耳号" @blur="onManageTagsBlur" :disabled="!isAddMode" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="新备注" prop="newComment">
|
||||||
|
<el-input v-model="form.newComment" placeholder="请输入新备注" :disabled="!isAddMode" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="原备注" prop="oldComment">
|
||||||
|
<el-input v-model="form.oldComment" placeholder="请输入原备注" :disabled="!isAddMode" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="ChangeComment">
|
||||||
|
import { listChangeComment, getChangeComment, delChangeComment, addChangeComment, updateChangeComment } from "@/api/produce/manage_sheep/changeComment"
|
||||||
|
import { getSheepByManageTags } from "@/api/produce/manage_sheep/changeVariety"
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance()
|
||||||
|
|
||||||
|
const changeCommentList = 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 daterangeCreateTime = ref([])
|
||||||
|
const isAddMode = ref(true);
|
||||||
|
const data = reactive({
|
||||||
|
form: { manageTags: null, },
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
sheepId: null,
|
||||||
|
manageTags: null,
|
||||||
|
newComment: null,
|
||||||
|
oldComment: null,
|
||||||
|
createTime: null
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
manageTags: [
|
||||||
|
{ required: true, message: "请输入管理耳号", trigger: "blur" }
|
||||||
|
],
|
||||||
|
newComment: [
|
||||||
|
{ required: true, message: "请输入新备注", trigger: "blur" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data)
|
||||||
|
|
||||||
|
/** 查询改备注列表 */
|
||||||
|
function getList() {
|
||||||
|
loading.value = true
|
||||||
|
queryParams.value.params = {}
|
||||||
|
if (null != daterangeCreateTime && '' != daterangeCreateTime) {
|
||||||
|
queryParams.value.params["beginCreateTime"] = daterangeCreateTime.value[0]
|
||||||
|
queryParams.value.params["endCreateTime"] = daterangeCreateTime.value[1]
|
||||||
|
}
|
||||||
|
listChangeComment(queryParams.value).then(response => {
|
||||||
|
changeCommentList.value = response.rows
|
||||||
|
total.value = response.total
|
||||||
|
loading.value = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
//校验和回显
|
||||||
|
function onManageTagsBlur() {
|
||||||
|
const tag = form.value.manageTags?.trim();
|
||||||
|
if (!tag) return;
|
||||||
|
|
||||||
|
getSheepByManageTags(tag).then(res => {
|
||||||
|
const sheep = res.data;
|
||||||
|
if (sheep) {
|
||||||
|
form.value.sheepId = sheep.id;
|
||||||
|
form.value.oldComment = sheep.comment || "";
|
||||||
|
} else {
|
||||||
|
proxy.$modal.msgWarning("未找到该管理耳号对应的羊只");
|
||||||
|
form.value.sheepId = null;
|
||||||
|
form.value.oldComment = "";
|
||||||
|
}
|
||||||
|
}).catch(err => {
|
||||||
|
console.error("查询羊只失败:", err);
|
||||||
|
proxy.$modal.msgError("查询失败,请重试");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 取消按钮
|
||||||
|
function cancel() {
|
||||||
|
open.value = false
|
||||||
|
reset()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 表单重置
|
||||||
|
function reset() {
|
||||||
|
form.value = {
|
||||||
|
id: null,
|
||||||
|
sheepId: null,
|
||||||
|
newComment: null,
|
||||||
|
oldComment: null,
|
||||||
|
createBy: null,
|
||||||
|
createTime: null
|
||||||
|
}
|
||||||
|
proxy.resetForm("changeCommentRef")
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
function handleQuery() {
|
||||||
|
queryParams.value.pageNum = 1
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
function resetQuery() {
|
||||||
|
daterangeCreateTime.value = []
|
||||||
|
proxy.resetForm("queryRef")
|
||||||
|
handleQuery()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 多选框选中数据
|
||||||
|
function handleSelectionChange(selection) {
|
||||||
|
ids.value = selection.map(item => item.id)
|
||||||
|
single.value = selection.length != 1
|
||||||
|
multiple.value = !selection.length
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
function handleAdd() {
|
||||||
|
reset()
|
||||||
|
isAddMode.value = true;
|
||||||
|
open.value = true
|
||||||
|
title.value = "添加改备注"
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
function handleUpdate(row) {
|
||||||
|
reset()
|
||||||
|
isAddMode.value = false
|
||||||
|
const _id = row.id || ids.value
|
||||||
|
getChangeComment(_id).then(response => {
|
||||||
|
form.value = response.data
|
||||||
|
open.value = true
|
||||||
|
title.value = "修改改备注"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
function submitForm() {
|
||||||
|
proxy.$refs["changeCommentRef"].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
if (!form.value.id) {
|
||||||
|
if (!form.value.sheepId) {
|
||||||
|
proxy.$modal.msgError('未找到对应的羊只,请检查耳号');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (form.value.id != null) {
|
||||||
|
updateChangeComment(form.value).then(() => {
|
||||||
|
proxy.$modal.msgSuccess("修改成功")
|
||||||
|
open.value = false
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
addChangeComment(form.value).then(() => {
|
||||||
|
proxy.$modal.msgSuccess("新增成功")
|
||||||
|
open.value = false
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
function handleDelete(row) {
|
||||||
|
const _ids = row.id || ids.value
|
||||||
|
proxy.$modal.confirm('是否确认删除改备注编号为"' + _ids + '"的数据项?').then(function () {
|
||||||
|
return delChangeComment(_ids)
|
||||||
|
}).then(() => {
|
||||||
|
getList()
|
||||||
|
proxy.$modal.msgSuccess("删除成功")
|
||||||
|
}).catch(() => { })
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
function handleExport() {
|
||||||
|
proxy.download('changeComment/changeComment/export', {
|
||||||
|
...queryParams.value
|
||||||
|
}, `changeComment_${new Date().getTime()}.xlsx`)
|
||||||
|
}
|
||||||
|
|
||||||
|
getList()
|
||||||
|
</script>
|
369
src/views/produce/manage_sheep/changeEar/index.vue
Normal file
369
src/views/produce/manage_sheep/changeEar/index.vue
Normal file
@ -0,0 +1,369 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
|
<!-- <el-form-item label="羊只id" prop="sheepId">
|
||||||
|
<el-input v-model="queryParams.sheepId" placeholder="请输入羊只id" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item> -->
|
||||||
|
<el-form-item label="耳号" prop="manageTag">
|
||||||
|
<el-input v-model="queryParams.manageTags" placeholder="请输入耳号" clearable @keyup.enter="handleQuery"
|
||||||
|
style="max-width: 160px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="新耳号" prop="newTag">
|
||||||
|
<el-input v-model="queryParams.newTag" placeholder="请输入新耳号" clearable @keyup.enter="handleQuery"
|
||||||
|
style="max-width: 160px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="旧耳号" prop="oldTag">
|
||||||
|
<el-input v-model="queryParams.oldTag" placeholder="请输入旧耳号" clearable @keyup.enter="handleQuery"
|
||||||
|
style="max-width: 160px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="创建时间" style="width: 308px">
|
||||||
|
<el-date-picker v-model="daterangeCreateTime" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
|
||||||
|
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd"
|
||||||
|
v-hasPermi="['changeEar:changeEar:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
|
||||||
|
v-hasPermi="['changeEar:changeEar:edit']">修改</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
||||||
|
v-hasPermi="['changeEar:changeEar:remove']">删除</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport"
|
||||||
|
v-hasPermi="['changeEar:changeEar:export']">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="changeEarList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<!-- <el-table-column label="id" align="center" prop="id" />
|
||||||
|
<el-table-column label="羊只id" align="center" prop="sheepId" /> -->
|
||||||
|
<el-table-column label="耳号" align="center" prop="manageTags" />
|
||||||
|
<el-table-column label="耳号类型" align="center" prop="earType">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.earType === 0 ? '电子耳号' : '管理耳号' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="新耳号" align="center" prop="newTag" />
|
||||||
|
<el-table-column label="旧耳号" align="center" prop="oldTag" />
|
||||||
|
<el-table-column label="备注" align="center" prop="comment" />
|
||||||
|
<el-table-column label="创建人" align="center" prop="createBy" />
|
||||||
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</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="['changeEar:changeEar:edit']">修改</el-button>
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['changeEar:changeEar: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" />
|
||||||
|
|
||||||
|
<!-- 添加或修改修改电子耳号记录对话框 -->
|
||||||
|
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
||||||
|
<el-form ref="changeEarRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<!-- <el-form-item label="羊只id" prop="sheepId">
|
||||||
|
<el-input v-model="form.sheepId" placeholder="请输入羊只id" />
|
||||||
|
</el-form-item> -->
|
||||||
|
<el-form-item label="耳号" prop="earNumber">
|
||||||
|
<el-input v-model="form.earNumber" placeholder="请输入管理耳号或电子耳号" @change="fetchOldTag" :disabled="!isAddMode" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="耳号类型" prop="earType">
|
||||||
|
<el-select v-model="form.earType" placeholder="请选择耳号类型" @change="fetchOldTag" :disabled="!isAddMode">
|
||||||
|
<el-option label="电子耳号" :value="0"></el-option>
|
||||||
|
<el-option label="管理耳号" :value="1"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="新耳号" prop="newTag" @blur="checkNewTagExists">
|
||||||
|
<el-input v-model="form.newTag" placeholder="请输入新耳号/电子耳号" @blur="checkNewTagExists" :disabled="!isAddMode" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="旧耳号" prop="oldTag">
|
||||||
|
<el-input v-model="form.oldTag" placeholder="请输入旧耳号/电子耳号" :disabled="!isAddMode" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注" prop="comment" v-if="!isAddMode">
|
||||||
|
<el-input v-model="form.comment" type="textarea" placeholder="请输入内容" :disabled="!isAddMode" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="ChangeEar">
|
||||||
|
import { listChangeEar, getChangeEar, delChangeEar, addChangeEar, updateChangeEar, getSheepByEarNumber,checkTagExists } from "@/api/produce/manage_sheep/changeEar"
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance()
|
||||||
|
|
||||||
|
const changeEarList = 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 daterangeCreateTime = ref([])
|
||||||
|
const isAddMode = ref(true);
|
||||||
|
|
||||||
|
const data = reactive({
|
||||||
|
form: {},
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
manageTags: null,
|
||||||
|
// sheepId: null,
|
||||||
|
earType: null,
|
||||||
|
newTag: null,
|
||||||
|
oldTag: null,
|
||||||
|
createTime: null
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
earNumber: [
|
||||||
|
{ required: true, message: "请输入管理耳号或电子耳号", trigger: "blur" }
|
||||||
|
],
|
||||||
|
earType: [
|
||||||
|
{ required: true, message: "请选择耳号类型", trigger: "change" }
|
||||||
|
],
|
||||||
|
newTag: [
|
||||||
|
{ required: true, message: "请输入新耳号", trigger: "blur" }
|
||||||
|
],
|
||||||
|
oldTag: [
|
||||||
|
{ required: true, message: "请输入旧耳号", trigger: "change" }
|
||||||
|
],
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data)
|
||||||
|
|
||||||
|
/** 查询修改电子耳号记录列表 */
|
||||||
|
async function getList() {
|
||||||
|
loading.value = true;
|
||||||
|
queryParams.value.params = {};
|
||||||
|
if (queryParams.value.manageTags) {
|
||||||
|
queryParams.value.params["manageTags"] = queryParams.value.manageTags;
|
||||||
|
}
|
||||||
|
if (daterangeCreateTime.value && daterangeCreateTime.value.length > 0) {
|
||||||
|
queryParams.value.params["beginCreateTime"] = daterangeCreateTime.value[0];
|
||||||
|
queryParams.value.params["endCreateTime"] = daterangeCreateTime.value[1];
|
||||||
|
}
|
||||||
|
const response = await listChangeEar(queryParams.value);
|
||||||
|
|
||||||
|
changeEarList.value = response.rows.map(item => {
|
||||||
|
item.earTypeName = item.earType === 0 ? '电子耳号' : '管理耳号';
|
||||||
|
return item;
|
||||||
|
});
|
||||||
|
|
||||||
|
total.value = response.total;
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 取消按钮
|
||||||
|
function cancel() {
|
||||||
|
open.value = false
|
||||||
|
reset()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 表单重置
|
||||||
|
function reset() {
|
||||||
|
form.value = {
|
||||||
|
// id: null,
|
||||||
|
// sheepId: null,
|
||||||
|
manageTags: null,
|
||||||
|
earType: null,
|
||||||
|
newTag: null,
|
||||||
|
oldTag: null,
|
||||||
|
comment: null,
|
||||||
|
createBy: null,
|
||||||
|
createTime: null
|
||||||
|
}
|
||||||
|
proxy.resetForm("changeEarRef")
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
function handleQuery() {
|
||||||
|
queryParams.value.pageNum = 1
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
function resetQuery() {
|
||||||
|
daterangeCreateTime.value = []
|
||||||
|
|
||||||
|
queryParams.value.manageTags = null
|
||||||
|
queryParams.value.newTag = null
|
||||||
|
queryParams.value.oldTag = null
|
||||||
|
queryParams.value.earType = null
|
||||||
|
|
||||||
|
proxy.resetForm("queryRef")
|
||||||
|
|
||||||
|
handleQuery()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 多选框选中数据
|
||||||
|
function handleSelectionChange(selection) {
|
||||||
|
ids.value = selection.map(item => item.id)
|
||||||
|
single.value = selection.length != 1
|
||||||
|
multiple.value = !selection.length
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增按钮操作
|
||||||
|
function handleAdd() {
|
||||||
|
reset()
|
||||||
|
isAddMode.value = true;
|
||||||
|
open.value = true
|
||||||
|
title.value = "添加耳号记录"
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改按钮操作
|
||||||
|
function handleUpdate(row) {
|
||||||
|
reset();
|
||||||
|
isAddMode.value = false;
|
||||||
|
const _id = row.id || ids.value;
|
||||||
|
getChangeEar(_id).then(response => {
|
||||||
|
response.data.earNumber = response.data.manageTags;
|
||||||
|
form.value = response.data;
|
||||||
|
open.value = true;
|
||||||
|
title.value = "修改电子耳号记录";
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 提交表单
|
||||||
|
function submitForm() {
|
||||||
|
proxy.$refs["changeEarRef"].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
if (!form.value.id) {
|
||||||
|
if (!form.value.sheepId) {
|
||||||
|
proxy.$modal.msgError('未找到对应的羊只,请检查耳号');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (form.value.id) {
|
||||||
|
updateChangeEar(form.value).then(() => {
|
||||||
|
proxy.$modal.msgSuccess("修改成功");
|
||||||
|
open.value = false;
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
addChangeEar(form.value).then(() => {
|
||||||
|
proxy.$modal.msgSuccess("新增成功");
|
||||||
|
open.value = false;
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//校验新耳号
|
||||||
|
function checkNewTagExists() {
|
||||||
|
if (!form.value.newTag || form.value.earType === null) {
|
||||||
|
console.log("新耳号或耳号类型为空");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const tagValue = form.value.newTag.trim();
|
||||||
|
if (!tagValue) {
|
||||||
|
console.log("新耳号为空");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
console.log("调用后端接口,参数:", { tag: tagValue, earType: form.value.earType });
|
||||||
|
|
||||||
|
checkTagExists(tagValue, form.value.earType).then(res => {
|
||||||
|
console.log("后端返回结果:", res);
|
||||||
|
if (res.data.exists) {
|
||||||
|
proxy.$modal.msgError('该耳号已存在,请更换');
|
||||||
|
form.value.newTag = '';
|
||||||
|
}
|
||||||
|
}).catch(error => {
|
||||||
|
console.error('校验耳号失败:', error);
|
||||||
|
proxy.$modal.msgWarning('校验耳号失败,请重试');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//查询旧耳号
|
||||||
|
function fetchOldTag() {
|
||||||
|
const earNumber = form.value.earNumber.trim();
|
||||||
|
const earType = form.value.earType;
|
||||||
|
|
||||||
|
if (!earNumber || earType === null) {
|
||||||
|
form.value.oldTag = '';
|
||||||
|
form.value.sheepId = null;
|
||||||
|
form.value.comment = '';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
getSheepByEarNumber(earNumber, earType).then(response => {
|
||||||
|
const data = response.data;
|
||||||
|
const sheep = data.sheep;
|
||||||
|
const oldTag = data.oldTag;
|
||||||
|
|
||||||
|
if (!sheep || !sheep.id) {
|
||||||
|
form.value.oldTag = '';
|
||||||
|
form.value.sheepId = null;
|
||||||
|
form.value.comment = '';
|
||||||
|
proxy.$modal.warning("未找到对应的羊只");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
form.value.oldTag = oldTag;
|
||||||
|
form.value.sheepId = sheep.id;
|
||||||
|
|
||||||
|
form.value.comment = sheep.comment || '';
|
||||||
|
}).catch(error => {
|
||||||
|
console.error("查询失败:", error);
|
||||||
|
form.value.oldTag = '';
|
||||||
|
form.value.sheepId = null;
|
||||||
|
form.value.comment = '';
|
||||||
|
proxy.$modal.error("查询耳号失败,请重试");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
function handleDelete(row) {
|
||||||
|
const _ids = row.id || ids.value
|
||||||
|
proxy.$modal.confirm('是否确认删除修改电子耳号记录编号为"' + _ids + '"的数据项?').then(function () {
|
||||||
|
return delChangeEar(_ids)
|
||||||
|
}).then(() => {
|
||||||
|
getList()
|
||||||
|
proxy.$modal.msgSuccess("删除成功")
|
||||||
|
}).catch(() => { })
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
function handleExport() {
|
||||||
|
proxy.download('changeEar/changeEar/export', {
|
||||||
|
...queryParams.value
|
||||||
|
}, `changeEar_${new Date().getTime()}.xlsx`)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
320
src/views/produce/manage_sheep/changeVariety/index.vue
Normal file
320
src/views/produce/manage_sheep/changeVariety/index.vue
Normal file
@ -0,0 +1,320 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
|
<!-- <el-form-item label="羊只id" prop="sheepId">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.sheepId"
|
||||||
|
placeholder="请输入羊只id"
|
||||||
|
clearable
|
||||||
|
@keyup.enter="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item> -->
|
||||||
|
<el-form-item label="管理耳号" prop="manageTags">
|
||||||
|
<el-input v-model="queryParams.manageTags" placeholder="请输入管理耳号" clearable @keyup.enter="handleQuery"
|
||||||
|
style="width: 150px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="原品种" prop="varietyOld">
|
||||||
|
<el-select v-model="queryParams.varietyOld" placeholder="请选择原品种" clearable filterable>
|
||||||
|
<el-option v-for="item in varietyOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="新品种" prop="varietyNew">
|
||||||
|
<el-select v-model="queryParams.varietyNew" placeholder="请选择新品种" clearable filterable>
|
||||||
|
<el-option v-for="item in varietyOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="创建日期" style="width: 308px">
|
||||||
|
<el-date-picker v-model="daterangeCreateTime" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
|
||||||
|
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd"
|
||||||
|
v-hasPermi="['changeVariety:changeVariety:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
|
||||||
|
v-hasPermi="['changeVariety:changeVariety:edit']">修改</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
||||||
|
v-hasPermi="['changeVariety:changeVariety:remove']">删除</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport"
|
||||||
|
v-hasPermi="['changeVariety:changeVariety:export']">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="changeVarietyList" @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="sheepId" /> -->
|
||||||
|
<el-table-column label="管理耳号" align="center" prop="manageTags" />
|
||||||
|
<el-table-column label="原品种" align="center" prop="varietyOld" />
|
||||||
|
<el-table-column label="新品种" align="center" prop="varietyNew" />
|
||||||
|
<el-table-column label="备注" align="center" prop="comment" />
|
||||||
|
<el-table-column label="创建人" align="center" prop="createBy" />
|
||||||
|
<el-table-column label="创建日期" align="center" prop="createTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</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="['changeVariety:changeVariety:edit']">修改</el-button>
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['changeVariety:changeVariety: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" />
|
||||||
|
|
||||||
|
<!-- 添加或修改改品种记录对话框 -->
|
||||||
|
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
||||||
|
<el-form ref="changeVarietyRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<!-- <el-form-item label="羊只id" prop="sheepId">
|
||||||
|
<el-input v-model="form.sheepId" placeholder="请输入羊只id" />
|
||||||
|
</el-form-item> -->
|
||||||
|
<el-form-item label="管理耳号" prop="manageTags">
|
||||||
|
<el-input v-model="form.manageTags" placeholder="请输入管理耳号" @blur="onManageTagsBlur" :disabled="!isAdd" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="原品种" prop="varietyOld">
|
||||||
|
<el-input v-model="form.varietyOld" placeholder="请输入原品种" :disabled="!isAdd" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="新品种" prop="varietyNew">
|
||||||
|
<el-select v-model="form.varietyNew" placeholder="请选择新品种" clearable filterable :disabled="!isAdd">
|
||||||
|
<el-option v-for="item in varietyOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注" prop="comment" v-if="!isAdd">
|
||||||
|
<el-input v-model="form.comment" placeholder="请输入备注" :disabled="!isAdd" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="ChangeVariety">
|
||||||
|
import { listChangeVariety, getChangeVariety, delChangeVariety, addChangeVariety, updateChangeVariety, getSheepByManageTags } from "@/api/produce/manage_sheep/changeVariety"
|
||||||
|
import { listVariety } from '@/api/variety/variety'
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance()
|
||||||
|
|
||||||
|
const changeVarietyList = 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 daterangeCreateTime = ref([])
|
||||||
|
const isAdd = ref(false);
|
||||||
|
|
||||||
|
const varietyOptions = ref([])
|
||||||
|
const data = reactive({
|
||||||
|
form: {
|
||||||
|
manageTags: null,
|
||||||
|
},
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
// sheepId: null,
|
||||||
|
manageTags: null,
|
||||||
|
varietyOld: null,
|
||||||
|
varietyNew: null,
|
||||||
|
createTime: null
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
manageTags: [
|
||||||
|
{ required: true, message: "请输入管理耳号", trigger: "blur" }
|
||||||
|
],
|
||||||
|
varietyOld: [
|
||||||
|
{ required: true, message: "请选择原品种", trigger: "blur" }
|
||||||
|
],
|
||||||
|
varietyNew: [
|
||||||
|
{ required: true, message: "请选择新品种", trigger: "blur" }
|
||||||
|
],
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data)
|
||||||
|
|
||||||
|
/** 查询改品种记录列表 */
|
||||||
|
function getList() {
|
||||||
|
loading.value = true
|
||||||
|
queryParams.value.params = {}
|
||||||
|
if (null != daterangeCreateTime && '' != daterangeCreateTime) {
|
||||||
|
queryParams.value.params["beginCreateTime"] = daterangeCreateTime.value[0]
|
||||||
|
queryParams.value.params["endCreateTime"] = daterangeCreateTime.value[1]
|
||||||
|
}
|
||||||
|
listChangeVariety(queryParams.value).then(response => {
|
||||||
|
changeVarietyList.value = response.rows
|
||||||
|
total.value = response.total
|
||||||
|
loading.value = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function onManageTagsBlur() {
|
||||||
|
const tag = form.value.manageTags?.trim();
|
||||||
|
if (!tag) return;
|
||||||
|
|
||||||
|
getSheepByManageTags(tag).then(res => {
|
||||||
|
const sheep = res.data;
|
||||||
|
if (sheep) {
|
||||||
|
form.value.varietyOld = sheep.varietyName || "";
|
||||||
|
form.value.sheepId = sheep.id;
|
||||||
|
form.value.comment = sheep.comment || "";
|
||||||
|
} else {
|
||||||
|
proxy.$modal.msgWarning("未找到该管理耳号对应的羊只");
|
||||||
|
form.value.varietyOld = "";
|
||||||
|
form.value.sheepId = null;
|
||||||
|
form.value.comment = "";
|
||||||
|
}
|
||||||
|
}).catch(err => {
|
||||||
|
console.error("查询羊只失败:", err);
|
||||||
|
proxy.$modal.msgError("查询失败,请重试");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadVarietyOptions() {
|
||||||
|
listVariety().then(res => {
|
||||||
|
varietyOptions.value = res.rows.map(item => ({
|
||||||
|
label: item.variety,
|
||||||
|
value: item.variety
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 取消按钮
|
||||||
|
function cancel() {
|
||||||
|
open.value = false
|
||||||
|
reset()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 表单重置
|
||||||
|
function reset() {
|
||||||
|
form.value = {
|
||||||
|
id: null,
|
||||||
|
sheepId: null,
|
||||||
|
varietyOld: null,
|
||||||
|
varietyNew: null,
|
||||||
|
comment: null,
|
||||||
|
createBy: null,
|
||||||
|
createTime: null
|
||||||
|
}
|
||||||
|
proxy.resetForm("changeVarietyRef")
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
function handleQuery() {
|
||||||
|
loadVarietyOptions()
|
||||||
|
queryParams.value.pageNum = 1
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
function resetQuery() {
|
||||||
|
daterangeCreateTime.value = []
|
||||||
|
proxy.resetForm("queryRef")
|
||||||
|
handleQuery()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 多选框选中数据
|
||||||
|
function handleSelectionChange(selection) {
|
||||||
|
ids.value = selection.map(item => item.id)
|
||||||
|
single.value = selection.length != 1
|
||||||
|
multiple.value = !selection.length
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
function handleAdd() {
|
||||||
|
reset()
|
||||||
|
isAdd.value = true
|
||||||
|
loadVarietyOptions()
|
||||||
|
open.value = true
|
||||||
|
title.value = "添加改品种记录"
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
function handleUpdate(row) {
|
||||||
|
reset()
|
||||||
|
isAdd.value = false
|
||||||
|
loadVarietyOptions()
|
||||||
|
const _id = row.id || ids.value
|
||||||
|
getChangeVariety(_id).then(response => {
|
||||||
|
form.value = response.data
|
||||||
|
open.value = true
|
||||||
|
title.value = "修改改品种记录"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
function submitForm() {
|
||||||
|
proxy.$refs["changeVarietyRef"].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
if (!form.value.id) {
|
||||||
|
if (!form.value.sheepId) {
|
||||||
|
proxy.$modal.msgError('未找到对应的羊只,请检查耳号');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (form.value.id != null) {
|
||||||
|
updateChangeVariety(form.value).then(response => {
|
||||||
|
proxy.$modal.msgSuccess("修改成功")
|
||||||
|
open.value = false
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
addChangeVariety(form.value).then(response => {
|
||||||
|
proxy.$modal.msgSuccess("新增成功")
|
||||||
|
open.value = false
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
function handleDelete(row) {
|
||||||
|
const _ids = row.id || ids.value
|
||||||
|
proxy.$modal.confirm('是否确认删除改品种记录编号为"' + _ids + '"的数据项?').then(function () {
|
||||||
|
return delChangeVariety(_ids)
|
||||||
|
}).then(() => {
|
||||||
|
getList()
|
||||||
|
proxy.$modal.msgSuccess("删除成功")
|
||||||
|
}).catch(() => { })
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
function handleExport() {
|
||||||
|
proxy.download('changeVariety/changeVariety/export', {
|
||||||
|
...queryParams.value
|
||||||
|
}, `changeVariety_${new Date().getTime()}.xlsx`)
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
loadVarietyOptions();
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
@ -1,11 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
<!-- <el-form-item label="羊只id" prop="sheepId">
|
<el-form-item label="管理耳号" prop="manageTags">
|
||||||
<el-input v-model="queryParams.sheepId" placeholder="请输入羊只id" clearable @keyup.enter="handleQuery" />
|
<el-input v-model="queryParams.manageTags" placeholder="请输入耳号" clearable @keyup.enter="handleQuery"
|
||||||
</el-form-item> -->
|
style="width: 150px;" />
|
||||||
<el-form-item label="耳号" prop="manageTags">
|
|
||||||
<el-input v-model="queryParams.manageTags" placeholder="请输入耳号" clearable @keyup.enter="handleQuery" />
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="转出羊舍" prop="foldFrom">
|
<el-form-item label="转出羊舍" prop="foldFrom">
|
||||||
<el-select v-model="queryParams.foldFrom" placeholder="请选择转出羊舍" style="min-width:150px" clearable>
|
<el-select v-model="queryParams.foldFrom" placeholder="请选择转出羊舍" style="min-width:150px" clearable>
|
||||||
@ -59,15 +57,17 @@
|
|||||||
|
|
||||||
<el-table v-loading="loading" :data="trans_groupList" @selection-change="handleSelectionChange">
|
<el-table v-loading="loading" :data="trans_groupList" @selection-change="handleSelectionChange">
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
<!-- <el-table-column label="${comment}" align="center" prop="id" /> -->
|
<el-table-column label="管理耳号" align="center" prop="manageTags" />
|
||||||
<!-- <el-table-column label="羊只id" align="center" prop="sheepId" /> -->
|
|
||||||
<el-table-column label="耳号" align="center" prop="manageTags" />
|
|
||||||
<el-table-column label="转出羊舍" align="center" prop="foldFromName" />
|
<el-table-column label="转出羊舍" align="center" prop="foldFromName" />
|
||||||
<el-table-column label="转入羊舍" align="center" prop="foldToName" />
|
<el-table-column label="转入羊舍" align="center" prop="foldToName" />
|
||||||
<el-table-column label="品种" align="center" prop="varietyName" />
|
<el-table-column label="品种" align="center" prop="varietyName" />
|
||||||
<el-table-column label="转群原因" align="center" prop="reasonText" />
|
<el-table-column label="转群原因" align="center" prop="reasonText" />
|
||||||
<el-table-column label="技术员" align="center" prop="technician" />
|
<el-table-column label="技术员" align="center" prop="technician" />
|
||||||
<el-table-column label="状态" align="center" prop="statusText" />
|
<el-table-column label="状态" align="center" prop="status">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :options="status" :value="scope.row.status" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column label="备注" align="center" prop="comment" />
|
<el-table-column label="备注" align="center" prop="comment" />
|
||||||
<el-table-column label="创建人" align="center" prop="createBy" />
|
<el-table-column label="创建人" align="center" prop="createBy" />
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime">
|
<el-table-column label="创建时间" align="center" prop="createTime">
|
||||||
@ -95,27 +95,25 @@
|
|||||||
<!-- 添加或修改转群记录对话框 -->
|
<!-- 添加或修改转群记录对话框 -->
|
||||||
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
||||||
<el-form ref="trans_groupRef" :model="form" :rules="rules" label-width="80px">
|
<el-form ref="trans_groupRef" :model="form" :rules="rules" label-width="80px">
|
||||||
<!-- <el-form-item label="羊只id" prop="sheepId">
|
<el-form-item label="管理耳号" prop="manageTags">
|
||||||
<el-input v-model="form.sheepId" placeholder="请输入羊只id" />
|
<el-select v-model="form.manageTags" placeholder="请输入或选择耳号" multiple filterable allow-create
|
||||||
</el-form-item> -->
|
style="width: 100%" @change="loadSheepInfo" :disabled="!isAdd">
|
||||||
<el-form-item label="耳号" prop="manageTags">
|
|
||||||
<el-select v-model="form.manageTags" placeholder="请输入或选择耳号" multiple filterable collapse-tags allow-create
|
|
||||||
style="width: 100%" @change="loadSheepInfo">
|
|
||||||
<el-option v-for="sheep in sheepOptions" :key="sheep.id" :label="sheep.manageTags"
|
<el-option v-for="sheep in sheepOptions" :key="sheep.id" :label="sheep.manageTags"
|
||||||
:value="sheep.manageTags" />
|
:value="sheep.manageTags" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="转出羊舍" prop="foldFrom">
|
<el-form-item label="转出羊舍" prop="foldFrom">
|
||||||
<el-select v-model="form.foldFrom" placeholder="请选择转出羊舍" clearable @change="handleSheepFilter">
|
<el-select v-model="form.foldFrom" placeholder="请选择转出羊舍" clearable @change="handleSheepFilter"
|
||||||
|
:disabled="!isAdd">
|
||||||
<el-option v-for="fold in sheepfoldOptions" :key="fold.id" :label="fold.sheepfoldName" :value="fold.id" />
|
<el-option v-for="fold in sheepfoldOptions" :key="fold.id" :label="fold.sheepfoldName" :value="fold.id" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="转入羊舍" prop="foldTo">
|
<el-form-item label="转入羊舍" prop="foldTo">
|
||||||
<el-select v-model="form.foldTo" placeholder="请选择转入羊舍" clearable>
|
<el-select v-model="form.foldTo" placeholder="请选择转入羊舍" clearable :disabled="!isAdd">
|
||||||
<el-option v-for="fold in sheepfoldOptions" :key="fold.id" :label="fold.sheepfoldName" :value="fold.id" />
|
<el-option v-for="fold in sheepfoldOptions" :key="fold.id" :label="fold.sheepfoldName" :value="fold.id" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="羊只类型" prop="sheepTypeId">
|
<el-form-item v-if="isAdd" label="羊只类型" prop="sheepTypeId">
|
||||||
<el-select v-model="form.sheepTypeId" placeholder="请选择羊只类型" clearable @change="handleSheepFilter">
|
<el-select v-model="form.sheepTypeId" placeholder="请选择羊只类型" clearable @change="handleSheepFilter">
|
||||||
<el-option v-for="type in sheepTypeOptions" :key="type.id" :label="type.name" :value="type.id" />
|
<el-option v-for="type in sheepTypeOptions" :key="type.id" :label="type.name" :value="type.id" />
|
||||||
</el-select>
|
</el-select>
|
||||||
@ -142,9 +140,6 @@
|
|||||||
<!-- 审批对话框 -->
|
<!-- 审批对话框 -->
|
||||||
<el-dialog :title="'审批转群记录'" v-model="approveDialog" width="500px" append-to-body>
|
<el-dialog :title="'审批转群记录'" v-model="approveDialog" width="500px" append-to-body>
|
||||||
<el-form ref="approveFormRef" :model="approveForm" label-width="120px">
|
<el-form ref="approveFormRef" :model="approveForm" label-width="120px">
|
||||||
<!-- <el-form-item label="羊只id">
|
|
||||||
<el-input v-model="approveForm.sheepId" disabled />
|
|
||||||
</el-form-item> -->
|
|
||||||
<el-form-item label="耳号">
|
<el-form-item label="耳号">
|
||||||
<el-input v-model="displayManageTags" disabled />
|
<el-input v-model="displayManageTags" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -180,33 +175,34 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="Trans_group">
|
<script setup name="Trans_group">
|
||||||
import { listTrans_group, getTrans_group, delTrans_group, addTrans_group, updateTrans_group } from '@/api/produce/manage_sheep/trans_group'
|
import { listTrans_group, getTrans_group, delTrans_group, addTrans_group, updateTrans_group, approveScTransGroup } from '@/api/produce/manage_sheep/trans_group'
|
||||||
import { listSheepfold_management as listSheepfold } from '@/api/fileManagement/sheepfold_management'
|
import { listSheepfold_management as listSheepfold } from '@/api/fileManagement/sheepfold_management'
|
||||||
import { checkSheepByManageTags, getSheepBySheepfoldId } from '@/api/produce/other/fixHoof/fixHoof'
|
import { checkSheepByManageTags, getSheepBySheepfoldId } from '@/api/produce/other/fixHoof'
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance()
|
const { proxy } = getCurrentInstance();
|
||||||
const { trans_group_reason, status } = proxy.useDict('trans_group_reason', 'status')
|
const { trans_group_reason, status } = proxy.useDict('trans_group_reason', 'status');
|
||||||
|
|
||||||
const trans_groupList = ref([])
|
const trans_groupList = ref([]);
|
||||||
const open = ref(false)
|
const open = ref(false);
|
||||||
const loading = ref(true)
|
const loading = ref(true);
|
||||||
const showSearch = ref(true)
|
const showSearch = ref(true);
|
||||||
const ids = ref([])
|
const ids = ref([]);
|
||||||
const single = ref(true)
|
const single = ref(true);
|
||||||
const multiple = ref(false)
|
const multiple = ref(false);
|
||||||
const total = ref(0)
|
const total = ref(0);
|
||||||
const title = ref('')
|
const title = ref('');
|
||||||
const daterangeCreateTime = ref([])
|
const daterangeCreateTime = ref([]);
|
||||||
|
|
||||||
const approveDialog = ref(false)
|
const approveDialog = ref(false);
|
||||||
const approveForm = ref({})
|
const approveForm = ref({});
|
||||||
const displayManageTags = ref('')
|
const displayManageTags = ref('');
|
||||||
const sheepOptions = ref([])
|
const sheepOptions = ref([]);
|
||||||
const sheepfoldOptions = ref([])
|
const sheepfoldOptions = ref([]);
|
||||||
const sheepfoldNameMap = ref({})
|
const sheepfoldNameMap = ref({});
|
||||||
const varietyOptions = ref([])
|
const varietyOptions = ref([]);
|
||||||
const sheepTypeOptions = ref([]);
|
const sheepTypeOptions = ref([]);
|
||||||
|
const isAdd = ref(false);
|
||||||
|
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
form: {
|
form: {
|
||||||
@ -222,35 +218,34 @@ const data = reactive({
|
|||||||
foldFrom: null,
|
foldFrom: null,
|
||||||
varietyId: null,
|
varietyId: null,
|
||||||
status: null,
|
status: null,
|
||||||
createTime: null
|
createTime: null,
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
// sheepId: [{ required: true, message: '羊只id不能为空', trigger: 'blur' }],
|
manageTags: [{ required: true, message: '请输入耳号', trigger: 'blur' }],
|
||||||
manageTags: [{ required: true, message: '耳号不能为空', trigger: 'blue' }],
|
foldTo: [{ required: true, message: '请选择转入羊舍', trigger: 'change' }],
|
||||||
// foldFrom: [{ required: true, message: '转出羊舍不能为空', trigger: 'change' }],
|
varietyId: [{ required: true, message: '请选择品种', trigger: 'change' }],
|
||||||
foldTo: [{ required: true, message: '转入羊舍不能为空', trigger: 'change' }],
|
reason: [{ required: true, message: '请选择转群原因', trigger: 'change' }],
|
||||||
varietyId: [{ required: true, message: '品种不能为空', trigger: 'change' }],
|
technician: [{ required: true, message: '请输入技术员', trigger: 'blur' }],
|
||||||
reason: [{ required: true, message: '转群原因不能为空', trigger: 'change' }],
|
},
|
||||||
technician: [{ required: true, message: '技术员不能为空', trigger: 'blur' }]
|
});
|
||||||
}
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
})
|
|
||||||
const { queryParams, form, rules } = toRefs(data)
|
|
||||||
|
|
||||||
|
|
||||||
|
/** 查询转群记录列表 */
|
||||||
function getList() {
|
function getList() {
|
||||||
loading.value = true
|
loading.value = true;
|
||||||
queryParams.value.params = {}
|
queryParams.value.params = {};
|
||||||
if (daterangeCreateTime.value?.length) {
|
if (daterangeCreateTime.value?.length) {
|
||||||
queryParams.value.params.beginCreateTime = daterangeCreateTime.value[0]
|
queryParams.value.params.beginCreateTime = daterangeCreateTime.value[0];
|
||||||
queryParams.value.params.endCreateTime = daterangeCreateTime.value[1]
|
queryParams.value.params.endCreateTime = daterangeCreateTime.value[1];
|
||||||
}
|
}
|
||||||
listTrans_group(queryParams.value).then(res => {
|
listTrans_group(queryParams.value).then((res) => {
|
||||||
trans_groupList.value = res.rows
|
trans_groupList.value = res.rows;
|
||||||
total.value = res.total
|
total.value = res.total;
|
||||||
loading.value = false
|
loading.value = false;
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//重置按钮
|
||||||
function reset() {
|
function reset() {
|
||||||
form.value = {
|
form.value = {
|
||||||
id: null,
|
id: null,
|
||||||
@ -263,129 +258,151 @@ function reset() {
|
|||||||
status: null,
|
status: null,
|
||||||
comment: null,
|
comment: null,
|
||||||
createBy: null,
|
createBy: null,
|
||||||
createTime: null
|
createTime: null,
|
||||||
}
|
manageTags: [],
|
||||||
proxy.resetForm('trans_groupRef')
|
tagDetails: {},
|
||||||
|
sheepTypeId: null,
|
||||||
|
};
|
||||||
|
proxy.resetForm('trans_groupRef');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//新增时判断筛选条件
|
||||||
async function handleSheepFilter() {
|
async function handleSheepFilter() {
|
||||||
const { foldFrom, sheepTypeId } = form.value;
|
const { foldFrom, sheepTypeId } = form.value;
|
||||||
sheepOptions.value = [];
|
let isOnlySheepfold = false;
|
||||||
let loadedSheep = [];
|
let isOnlyTypeOrCombined = false;
|
||||||
|
|
||||||
if (!foldFrom && !sheepTypeId) return;
|
if (foldFrom && !sheepTypeId) {
|
||||||
if (foldFrom && sheepTypeId) {
|
isOnlySheepfold = true;
|
||||||
loadedSheep = await loadSheepBySheepfoldAndType(foldFrom, sheepTypeId);
|
} else if (!foldFrom && sheepTypeId) {
|
||||||
if (loadedSheep.length > 0) {
|
isOnlyTypeOrCombined = true;
|
||||||
form.value.manageTags = loadedSheep.map(sheep => sheep.manageTags);
|
} else if (foldFrom && sheepTypeId) {
|
||||||
loadSheepInfo();
|
isOnlyTypeOrCombined = true;
|
||||||
}
|
} else {
|
||||||
} else if (foldFrom) {
|
|
||||||
loadedSheep = await loadSheepBySheepfoldOnly(foldFrom);
|
|
||||||
form.value.manageTags = [];
|
form.value.manageTags = [];
|
||||||
} else if (sheepTypeId) {
|
sheepOptions.value = [];
|
||||||
loadedSheep = await loadSheepByTypeOnly(sheepTypeId);
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isOnlySheepfold) {
|
||||||
|
await loadSheepBySheepfoldOnly(foldFrom);
|
||||||
|
}
|
||||||
|
else if (isOnlyTypeOrCombined) {
|
||||||
|
form.value.manageTags = [];
|
||||||
|
let loadedSheep = [];
|
||||||
|
|
||||||
|
if (foldFrom && sheepTypeId) {
|
||||||
|
loadedSheep = await loadSheepBySheepfoldAndType(foldFrom, sheepTypeId);
|
||||||
|
} else if (sheepTypeId) {
|
||||||
|
loadedSheep = await loadSheepByTypeOnly(sheepTypeId);
|
||||||
|
}
|
||||||
|
|
||||||
if (loadedSheep.length > 0) {
|
if (loadedSheep.length > 0) {
|
||||||
form.value.manageTags = loadedSheep.map(sheep => sheep.manageTags);
|
form.value.manageTags = loadedSheep.map((sheep) => sheep.manageTags);
|
||||||
loadSheepInfo();
|
await loadSheepInfo();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//转群类型列表
|
||||||
function getSheepTypeList() {
|
function getSheepTypeList() {
|
||||||
request({
|
return new Promise((resolve, reject) => {
|
||||||
url: '/base/base/list',
|
request({
|
||||||
method: 'get',
|
url: '/base/base/list',
|
||||||
params: { pageNum: 1, pageSize: 9999 }
|
method: 'get',
|
||||||
}).then(res => {
|
params: { pageNum: 1, pageSize: 9999 },
|
||||||
sheepTypeOptions.value = res.rows || [];
|
}).then((res) => {
|
||||||
}).catch(error => {
|
sheepTypeOptions.value = res.rows.map(item => ({
|
||||||
console.error('获取羊只类型失败', error);
|
id: Number(item.id),
|
||||||
proxy.$modal.msgError('加载羊只类型失败,请重试');
|
name: item.name || item.typeName
|
||||||
|
})) || [];
|
||||||
|
resolve();
|
||||||
|
}).catch((error) => {
|
||||||
|
console.error('获取羊只类型失败', error);
|
||||||
|
proxy.$modal.msgError('加载羊只类型失败,请重试');
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//只通过羊舍
|
||||||
|
async function loadSheepBySheepfoldOnly(sheepfoldId) {
|
||||||
|
try {
|
||||||
|
const res = await getSheepBySheepfoldId(String(sheepfoldId));
|
||||||
|
const newSheepList = (res.data || []).map((sheep) => ({
|
||||||
|
id: sheep.id,
|
||||||
|
manageTags: sheep.manageTags,
|
||||||
|
sheepfoldId: sheepfoldId,
|
||||||
|
}));
|
||||||
|
|
||||||
|
const existingTags = new Set(sheepOptions.value.map((item) => item.manageTags));
|
||||||
|
const mergedSheep = newSheepList.filter((item) => !existingTags.has(item.manageTags));
|
||||||
|
|
||||||
|
sheepOptions.value.push(...mergedSheep);
|
||||||
|
return mergedSheep;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('根据羊舍加载耳号失败', error);
|
||||||
|
proxy.$modal.msgError('加载羊舍耳号失败,请重试');
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//通过羊舍和羊只类型
|
||||||
async function loadSheepBySheepfoldAndType(sheepfoldId, typeId) {
|
async function loadSheepBySheepfoldAndType(sheepfoldId, typeId) {
|
||||||
try {
|
try {
|
||||||
const res = await request({
|
const res = await request({
|
||||||
url: '/sheep/sheep/listBySheepfoldAndType',
|
url: '/sheep/sheep/listBySheepfoldAndType',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: { sheepfoldId, typeId, _t: Date.now() }
|
params: { sheepfoldId, typeId, _t: Date.now() },
|
||||||
});
|
});
|
||||||
const sheepList = res.rows || [];
|
const sheepList = res.rows || [];
|
||||||
const formattedSheep = sheepList.map(sheep => ({
|
const formattedSheep = sheepList.map((sheep) => ({
|
||||||
id: sheep.id,
|
id: sheep.id,
|
||||||
manageTags: sheep.manageTags,
|
manageTags: sheep.manageTags,
|
||||||
sheepfoldId: sheepfoldId
|
sheepfoldId: sheepfoldId,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
sheepOptions.value = formattedSheep;
|
sheepOptions.value = formattedSheep;
|
||||||
if (sheepOptions.value.length === 0) {
|
|
||||||
proxy.$message.error(`该羊舍没有该类型羊只`);
|
|
||||||
}
|
|
||||||
return formattedSheep;
|
return formattedSheep;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('根据羊舍+类型加载耳号失败', error);
|
console.error('根据羊舍+类型加载耳号失败', error);
|
||||||
proxy.$modal.msgError("加载耳号失败,请重试");
|
proxy.$modal.msgError('加载耳号失败,请重试');
|
||||||
return [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
async function loadSheepBySheepfoldOnly(sheepfoldId) {
|
|
||||||
try {
|
|
||||||
const res = await getSheepBySheepfoldId(String(sheepfoldId));
|
|
||||||
const sheepList = res.data || [];
|
|
||||||
const formattedSheep = sheepList.map(sheep => ({
|
|
||||||
id: sheep.id,
|
|
||||||
manageTags: sheep.manageTags,
|
|
||||||
sheepfoldId: sheepfoldId
|
|
||||||
}));
|
|
||||||
sheepOptions.value = formattedSheep;
|
|
||||||
if (sheepOptions.value.length === 0) {
|
|
||||||
proxy.$message.error(`该羊舍下没有羊只数据`);
|
|
||||||
} else {
|
|
||||||
proxy.$message.success(`成功加载 ${sheepOptions.value.length} 个耳号`);
|
|
||||||
}
|
|
||||||
return formattedSheep;
|
|
||||||
} catch (error) {
|
|
||||||
console.error('根据羊舍加载耳号失败', error);
|
|
||||||
proxy.$modal.msgError("加载羊舍耳号失败,请重试");
|
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//只通过羊只类型
|
||||||
async function loadSheepByTypeOnly(typeId) {
|
async function loadSheepByTypeOnly(typeId) {
|
||||||
try {
|
try {
|
||||||
const res = await request({
|
const res = await request({
|
||||||
url: '/sheep/sheep/listByTypeId',
|
url: '/sheep/sheep/listByTypeId',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: { typeId }
|
params: { typeId },
|
||||||
});
|
});
|
||||||
const sheepList = res.rows || [];
|
const sheepList = res.rows || [];
|
||||||
const formattedSheep = sheepList.map(sheep => ({
|
const formattedSheep = sheepList.map((sheep) => ({
|
||||||
id: sheep.id,
|
id: sheep.id,
|
||||||
manageTags: sheep.manageTags,
|
manageTags: sheep.manageTags,
|
||||||
sheepfoldId: sheep.sheepfoldId
|
sheepfoldId: sheep.sheepfoldId,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
sheepOptions.value = formattedSheep;
|
sheepOptions.value = formattedSheep;
|
||||||
if (sheepOptions.value.length === 0) {
|
|
||||||
proxy.$message.error(`未查询到“${getSheepTypeName(typeId)}”类型的羊只`);
|
|
||||||
}
|
|
||||||
return formattedSheep;
|
return formattedSheep;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('根据类型加载耳号失败', error);
|
console.error('根据类型加载耳号失败', error);
|
||||||
proxy.$modal.msgError("加载耳号失败,请重试");
|
proxy.$modal.msgError('加载耳号失败,请重试');
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSheepTypeName(typeId) {
|
//加载羊只信息
|
||||||
if (!typeId) return '未知类型';
|
|
||||||
const type = sheepTypeOptions.value.find(item => item.id === typeId);
|
|
||||||
return type ? type.name : '未知类型';
|
|
||||||
}
|
|
||||||
|
|
||||||
async function loadSheepInfo() {
|
async function loadSheepInfo() {
|
||||||
const tags = form.value.manageTags;
|
const tags = form.value.manageTags;
|
||||||
if (!tags || tags.length === 0) return;
|
if (!tags || tags.length === 0) return;
|
||||||
|
|
||||||
const tagDetails = {};
|
const tagDetails = {};
|
||||||
const validResults = [];
|
const validResults = [];
|
||||||
|
let firstSheepfoldId = null;
|
||||||
|
|
||||||
for (const tag of tags) {
|
for (const tag of tags) {
|
||||||
try {
|
try {
|
||||||
@ -399,8 +416,11 @@ async function loadSheepInfo() {
|
|||||||
comment: sheepData.comment || '',
|
comment: sheepData.comment || '',
|
||||||
varietyId: sheepData.varietyId,
|
varietyId: sheepData.varietyId,
|
||||||
sheepId: sheepData.id,
|
sheepId: sheepData.id,
|
||||||
sheepfoldId: sheepData.sheepfoldId
|
sheepfoldId: sheepData.sheepfoldId,
|
||||||
};
|
};
|
||||||
|
if (!firstSheepfoldId) {
|
||||||
|
firstSheepfoldId = sheepData.sheepfoldId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('获取耳号信息失败:', error);
|
console.error('获取耳号信息失败:', error);
|
||||||
@ -414,62 +434,105 @@ async function loadSheepInfo() {
|
|||||||
proxy.$message.warning('部分耳号不合法,已自动过滤');
|
proxy.$message.warning('部分耳号不合法,已自动过滤');
|
||||||
}
|
}
|
||||||
form.value.tagDetails = tagDetails;
|
form.value.tagDetails = tagDetails;
|
||||||
|
|
||||||
|
if (firstSheepfoldId && isAdd.value) {
|
||||||
|
form.value.foldFrom = Number(firstSheepfoldId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//取消按钮
|
||||||
function cancel() {
|
function cancel() {
|
||||||
open.value = false
|
open.value = false;
|
||||||
reset()
|
reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//搜索按钮
|
||||||
function handleQuery() {
|
function handleQuery() {
|
||||||
queryParams.value.pageNum = 1
|
queryParams.value.pageNum = 1;
|
||||||
getList()
|
getList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//重置搜索框
|
||||||
function resetQuery() {
|
function resetQuery() {
|
||||||
daterangeCreateTime.value = []
|
daterangeCreateTime.value = [];
|
||||||
proxy.resetForm('queryRef')
|
proxy.resetForm('queryRef');
|
||||||
handleQuery()
|
handleQuery();
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleSelectionChange(selection) {
|
function handleSelectionChange(selection) {
|
||||||
ids.value = selection.map(item => item.id)
|
ids.value = selection.map((item) => item.id);
|
||||||
single.value = selection.length !== 1
|
single.value = selection.length !== 1;
|
||||||
multiple.value = !selection.length
|
multiple.value = !selection.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//新增
|
||||||
function handleAdd() {
|
function handleAdd() {
|
||||||
reset();
|
reset();
|
||||||
open.value = true;
|
open.value = true;
|
||||||
title.value = '添加转群记录';
|
title.value = '添加转群记录';
|
||||||
|
isAdd.value = true;
|
||||||
sheepOptions.value = [];
|
sheepOptions.value = [];
|
||||||
form.value.manageTags = [];
|
form.value.manageTags = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleUpdate(row) {
|
//修改
|
||||||
|
async function handleUpdate(row) {
|
||||||
reset();
|
reset();
|
||||||
const _id = row.id || ids.value;
|
const _id = row.id || ids.value;
|
||||||
|
loading.value = true;
|
||||||
|
isAdd.value = false;
|
||||||
|
const { data: d } = await getTrans_group(_id);
|
||||||
|
|
||||||
getTrans_group(_id).then(res => {
|
try {
|
||||||
const d = res.data;
|
await Promise.all([
|
||||||
d.foldFrom = Number(d.foldFrom ?? 0);
|
sheepfoldOptions.value.length === 0 ? loadSheepfold() : Promise.resolve(),
|
||||||
d.foldTo = Number(d.foldTo ?? 0);
|
sheepTypeOptions.value.length === 0 ? getSheepTypeList() : Promise.resolve()
|
||||||
d.reason = Number(d.reason ?? 0);
|
]);
|
||||||
d.status = Number(d.status ?? 0);
|
|
||||||
d.varietyId = Number(d.varietyId ?? 0);
|
|
||||||
|
|
||||||
form.value = { ...d, manageTags: d.manageTags, isEdit: true };
|
const { data: d } = await getTrans_group(_id);
|
||||||
|
|
||||||
handleSheepFilter();
|
const manageTags = Array.isArray(d.manageTags)
|
||||||
|
? d.manageTags
|
||||||
|
: d.manageTags ? [d.manageTags] : [];
|
||||||
|
|
||||||
|
const formData = {
|
||||||
|
...d,
|
||||||
|
manageTags: manageTags,
|
||||||
|
foldFrom: Number(d.foldFrom || 0),
|
||||||
|
foldTo: Number(d.foldTo || 0),
|
||||||
|
sheepTypeId: Number(d.sheepTypeId || 0),
|
||||||
|
reason: Number(d.reason || 0),
|
||||||
|
status: Number(d.status || 0),
|
||||||
|
varietyId: Number(d.varietyId || 0),
|
||||||
|
isEdit: true
|
||||||
|
};
|
||||||
|
|
||||||
|
// 5. 验证匹配情况(调试用)
|
||||||
|
// const foldFromItem = sheepfoldOptions.value.find(item => item.id === formData.foldFrom);
|
||||||
|
// const foldToItem = sheepfoldOptions.value.find(item => item.id === formData.foldTo);
|
||||||
|
// const sheepTypeItem = sheepTypeOptions.value.find(item => item.id === formData.sheepTypeId);
|
||||||
|
// console.log("转出羊舍匹配结果:", foldFromItem ? foldFromItem.sheepfoldName : "未找到");
|
||||||
|
// console.log("转入羊舍匹配结果:", foldToItem ? foldToItem.sheepfoldName : "未找到");
|
||||||
|
// console.log("羊只类型匹配结果:", sheepTypeItem ? sheepTypeItem.name : "未找到");
|
||||||
|
|
||||||
|
form.value = formData;
|
||||||
|
|
||||||
|
if (manageTags.length > 0) {
|
||||||
|
await loadSheepInfo();
|
||||||
|
}
|
||||||
open.value = true;
|
open.value = true;
|
||||||
title.value = '修改转群记录';
|
title.value = '修改转群记录';
|
||||||
});
|
} catch (error) {
|
||||||
|
console.error('修改加载失败:', error);
|
||||||
|
proxy.$modal.msgError('加载数据失败');
|
||||||
|
} finally {
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//提交
|
||||||
function submitForm() {
|
function submitForm() {
|
||||||
proxy.$refs.trans_groupRef.validate(valid => {
|
proxy.$refs.trans_groupRef.validate((valid) => {
|
||||||
if (!valid) return;
|
if (!valid) return;
|
||||||
|
|
||||||
const allTags = form.value.manageTags;
|
const allTags = form.value.manageTags;
|
||||||
@ -501,78 +564,88 @@ function submitForm() {
|
|||||||
open.value = false;
|
open.value = false;
|
||||||
getList();
|
getList();
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch((error) => {
|
||||||
proxy.$modal.msgError(`处理失败:${error.message}`);
|
proxy.$modal.msgError(`处理失败:${error.message}`);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
//删除
|
||||||
function handleDelete(row) {
|
function handleDelete(row) {
|
||||||
const _ids = row.id || ids.value
|
const _ids = row.id || ids.value;
|
||||||
proxy.$modal.confirm(`是否确认删除转群记录编号为“${_ids}”的数据项?`)
|
proxy.$modal.confirm(`是否确认删除转群记录编号为“${_ids}”的数据项?`)
|
||||||
.then(() => delTrans_group(_ids))
|
.then(() => delTrans_group(_ids))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
getList()
|
getList();
|
||||||
proxy.$modal.msgSuccess('删除成功')
|
proxy.$modal.msgSuccess('删除成功');
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
//导出
|
||||||
function handleExport() {
|
function handleExport() {
|
||||||
proxy.download(
|
proxy.download(
|
||||||
'/produce/manage_sheep/trans_group/export',
|
'/produce/manage_sheep/trans_group/export',
|
||||||
{ ...queryParams.value },
|
{ ...queryParams.value },
|
||||||
`trans_group_${Date.now()}.xlsx`
|
`trans_group_${Date.now()}.xlsx`
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
//审核
|
// 审核
|
||||||
function handleApprove(row) {
|
function handleApprove(row) {
|
||||||
approveForm.value = { ...row }
|
approveForm.value = { ...row };
|
||||||
approveDialog.value = true
|
approveDialog.value = true;
|
||||||
displayManageTags.value = row.manageTags;
|
displayManageTags.value = row.manageTags;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
// 审批同意
|
||||||
function handleApproveAgree() {
|
function handleApproveAgree() {
|
||||||
approveForm.value.status = 1
|
if (typeof approveForm.value.foldTo !== 'number') {
|
||||||
updateTrans_group(approveForm.value).then(() => {
|
approveForm.value.foldTo = Number(approveForm.value.foldTo);
|
||||||
approveDialog.value = false
|
}
|
||||||
proxy.$modal.msgSuccess('审批成功,状态已更新为同意')
|
|
||||||
getList()
|
approveForm.value.status = 1;
|
||||||
})
|
approveScTransGroup(approveForm.value).then(() => {
|
||||||
|
approveDialog.value = false;
|
||||||
|
proxy.$modal.msgSuccess('审批通过,羊只所在羊舍已更新');
|
||||||
|
getList();
|
||||||
|
}).catch(error => {
|
||||||
|
proxy.$modal.msgError(`审批失败:${error.message}`);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleApproveReject() {
|
function handleApproveReject() {
|
||||||
approveForm.value.status = 2
|
approveForm.value.status = 2;
|
||||||
updateTrans_group(approveForm.value).then(() => {
|
approveScTransGroup(approveForm.value).then(() => {
|
||||||
approveDialog.value = false
|
approveDialog.value = false;
|
||||||
proxy.$modal.msgSuccess('审批成功,状态已更新为驳回')
|
proxy.$modal.msgSuccess('审批已驳回');
|
||||||
getList()
|
getList();
|
||||||
})
|
}).catch(error => {
|
||||||
|
proxy.$modal.msgError(`审批失败:${error.message}`);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadSheepfold() {
|
function loadSheepfold() {
|
||||||
listSheepfold({ pageNum: 1, pageSize: 9999 }).then(res => {
|
listSheepfold({ pageNum: 1, pageSize: 9999 }).then((res) => {
|
||||||
sheepfoldOptions.value = res.rows
|
sheepfoldOptions.value = res.rows;
|
||||||
sheepfoldNameMap.value = res.rows.reduce((acc, item) => {
|
sheepfoldNameMap.value = res.rows.reduce((acc, item) => {
|
||||||
acc[item.id] = item.sheepfoldName
|
acc[item.id] = item.sheepfoldName;
|
||||||
return acc
|
return acc;
|
||||||
}, {})
|
}, {});
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function getVarietyOptions() {
|
function getVarietyOptions() {
|
||||||
request({
|
request({
|
||||||
url: '/base/variety/list',
|
url: '/base/variety/list',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: { pageNum: 1, pageSize: 9999 }
|
params: { pageNum: 1, pageSize: 9999 },
|
||||||
}).then(res => {
|
}).then((res) => {
|
||||||
varietyOptions.value = res.rows || [];
|
varietyOptions.value = res.rows || [];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
loadSheepfold();
|
loadSheepfold();
|
||||||
getVarietyOptions();
|
getVarietyOptions();
|
||||||
getSheepTypeList();
|
getSheepTypeList();
|
||||||
getList();
|
getList();
|
||||||
})
|
});
|
||||||
</script>
|
</script>
|
@ -1,36 +1,34 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<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="68px">
|
||||||
<el-form-item label="羊只id" prop="sheepId">
|
<el-form-item label="管理耳号" prop="manageTags">
|
||||||
<el-input v-model="queryParams.sheepId" placeholder="请输入羊只id" clearable @keyup.enter="handleQuery" />
|
<el-input v-model="queryParams.manageTags" placeholder="请输入管理耳号" clearable @keyup.enter="handleQuery" style="width: 150px;"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="品种" prop="varietyId">
|
<el-form-item label="品种" prop="varietyId">
|
||||||
<el-select v-model="queryParams.varietyId" placeholder="请选择品种" style="min-width:150px" clearable>
|
<el-select v-model="queryParams.varietyId" placeholder="请选择品种" style="min-width:150px" clearable>
|
||||||
<el-option v-for="item in varietyOptions" :key="item.id" :label="item.variety" :value="item.id" />
|
<el-option v-for="item in varietyOptions" :key="item.id" :label="item.variety" :value="item.id" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="转入牧场" prop="transTo">
|
<el-form-item label="转入牧场" prop="transTo">
|
||||||
<el-input v-model="queryParams.transTo" placeholder="请输入转入牧场" clearable @keyup.enter="handleQuery" />
|
<el-select v-model="queryParams.transTo" placeholder="请选择转入牧场" clearable style="min-width:150px">
|
||||||
|
<el-option v-for="ranch in ranchOptions" :key="ranch.id" :label="ranch.ranchName" :value="ranch.ranchName" />
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="当前牧场" prop="transFrom">
|
<el-form-item label="当前牧场" prop="transFrom">
|
||||||
<el-input v-model="queryParams.transFrom" placeholder="请输入当前牧场" clearable @keyup.enter="handleQuery" />
|
<el-select v-model="queryParams.transFrom" placeholder="请选择当前牧场" clearable style="min-width:150px">
|
||||||
|
<el-option v-for="ranch in ranchOptions" :key="ranch.id" :label="ranch.ranchName" :value="ranch.ranchName" />
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="状态" prop="status">
|
<el-form-item label="状态" prop="status">
|
||||||
<el-select v-model="queryParams.status" style="width: 150px" placeholder="请选择状态" clearable>
|
<el-select v-model="queryParams.status" style="width: 150px" placeholder="请选择状态" clearable>
|
||||||
<el-option v-for="dict in status" :key="dict.value" :label="dict.label" :value="dict.value" />
|
<el-option v-for="dict in status" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="创建时间" style="width: 308px">
|
<el-form-item label="创建时间" style="width: 308px">
|
||||||
<el-date-picker v-model="daterangeCreateTime" value-format="YYYY-MM-DD" type="daterange"
|
<el-date-picker v-model="daterangeCreateTime" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
|
||||||
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />
|
start-placeholder="开始日期" end-placeholder="结束日期" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
@ -41,19 +39,19 @@
|
|||||||
<el-row :gutter="10" class="mb8">
|
<el-row :gutter="10" class="mb8">
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="primary" plain icon="Plus" @click="handleAdd"
|
<el-button type="primary" plain icon="Plus" @click="handleAdd"
|
||||||
v-hasPermi="['transition_info:transition_info:add']">新增</el-button>
|
v-hasPermi="['transition_info:transition_info:add']">新增</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
|
||||||
v-hasPermi="['transition_info:transition_info:edit']">修改</el-button>
|
v-hasPermi="['transition_info:transition_info:edit']">修改</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
||||||
v-hasPermi="['transition_info:transition_info:remove']">删除</el-button>
|
v-hasPermi="['transition_info:transition_info:remove']">删除</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="warning" plain icon="Download" @click="handleExport"
|
<el-button type="warning" plain icon="Download" @click="handleExport"
|
||||||
v-hasPermi="['transition_info:transition_info:export']">导出</el-button>
|
v-hasPermi="['transition_info:transition_info:export']">导出</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList" />
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList" />
|
||||||
</el-row>
|
</el-row>
|
||||||
@ -61,21 +59,17 @@
|
|||||||
<!-- 列表 -->
|
<!-- 列表 -->
|
||||||
<el-table v-loading="loading" :data="transition_infoList" @selection-change="handleSelectionChange">
|
<el-table v-loading="loading" :data="transition_infoList" @selection-change="handleSelectionChange">
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
<el-table-column label="羊只id" align="center" prop="sheepId" />
|
<el-table-column label="耳号" align="center" prop="manageTags" />
|
||||||
<el-table-column label="品种" align="center" prop="varietyName" />
|
<el-table-column label="品种" align="center" prop="varietyName" />
|
||||||
<el-table-column label="转入牧场" align="center" prop="transTo" />
|
<el-table-column label="转入牧场" align="center" prop="transTo" />
|
||||||
<el-table-column label="当前牧场" align="center" prop="transFrom" />
|
<el-table-column label="当前牧场" align="center" prop="transFrom" />
|
||||||
<el-table-column label="转场类型" align="center" prop="transType">
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :options="trans_type" :value="scope.row.transType" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="技术员" align="center" prop="technician" />
|
|
||||||
<el-table-column label="状态" align="center" prop="status">
|
<el-table-column label="状态" align="center" prop="status">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :options="status" :value="scope.row.status" />
|
<dict-tag :options="status" :value="scope.row.status" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<el-table-column label="技术员" align="center" prop="technician" />
|
||||||
|
<el-table-column label="状态" align="center" prop="statusText" />
|
||||||
<el-table-column label="备注" align="center" prop="comment" />
|
<el-table-column label="备注" align="center" prop="comment" />
|
||||||
<el-table-column label="创建人" align="center" prop="createBy" />
|
<el-table-column label="创建人" align="center" prop="createBy" />
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
@ -86,52 +80,50 @@
|
|||||||
<el-table-column label="操作" align="center" min-width="180">
|
<el-table-column label="操作" align="center" min-width="180">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button link type="primary" icon="Edit" @click="handleApprove(scope.row)"
|
<el-button link type="primary" icon="Edit" @click="handleApprove(scope.row)"
|
||||||
v-hasPermi="['transition_info:transition_info:approve']">审批</el-button>
|
v-hasPermi="['transition_info:transition_info:approve']">审批</el-button>
|
||||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
|
||||||
v-hasPermi="['transition_info:transition_info:remove']">删除</el-button>
|
v-hasPermi="['transition_info:transition_info:remove']">删除</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
|
||||||
<!-- 新增/修改 -->
|
<!-- 新增/修改 -->
|
||||||
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
||||||
<el-form ref="transition_infoRef" :model="form" :rules="rules" label-width="80px">
|
<el-form ref="transition_infoRef" :model="form" :rules="rules" label-width="80px">
|
||||||
<el-form-item label="羊只id" prop="sheepId">
|
<el-form-item label="管理耳号" prop="manageTags">
|
||||||
<el-input v-model="form.sheepId" placeholder="请输入羊只id" />
|
<el-select v-model="form.manageTags" placeholder="请输入或选择耳号" filterable multiple allow-create
|
||||||
</el-form-item>
|
@change="loadSheepInfo" :disabled="!isAdd" >
|
||||||
|
<el-option v-for="sheep in sheepOptions" :key="sheep.id" :label="sheep.manageTags"
|
||||||
<el-form-item label="品种" prop="varietyId">
|
:value="sheep.manageTags" />
|
||||||
<el-select v-model="form.varietyId" placeholder="请选择品种" clearable>
|
|
||||||
<el-option v-for="item in varietyOptions" :key="item.id"
|
|
||||||
:label="item.variety" :value="Number(item.id)" />
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="转入牧场" prop="transTo">
|
<el-form-item label="转入牧场" prop="transTo">
|
||||||
<el-input v-model="form.transTo" placeholder="请输入转入牧场" />
|
<el-select v-model="form.transTo" placeholder="请选择转入牧场" clearable :disabled="!isAdd" >
|
||||||
|
<el-option v-for="ranch in ranchOptions" :key="ranch.id" :label="ranch.ranchName"
|
||||||
|
:value="ranch.ranchName" />
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="当前牧场" prop="transFrom">
|
<el-form-item label="当前牧场" prop="transFrom">
|
||||||
<el-input v-model="form.transFrom" placeholder="请输入当前牧场" />
|
<el-select v-model="form.transFrom" placeholder="请选择当前牧场" clearable @change="handleRanchChange" :disabled="!isAdd" >
|
||||||
|
<el-option v-for="ranch in ranchOptions" :key="ranch.id" :label="ranch.ranchName"
|
||||||
|
:value="ranch.ranchName" />
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="转场类型" prop="transType">
|
<el-form-item label="转场类型" prop="transType">
|
||||||
<el-select v-model="form.transType" placeholder="请选择转场类型">
|
<el-select v-model="form.transType" placeholder="请选择转场类型">
|
||||||
<el-option v-for="dict in trans_type" :key="dict.value"
|
<el-option v-for="dict in trans_type" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
|
||||||
:label="dict.label" :value="parseInt(dict.value)" />
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="技术员" prop="technician">
|
<el-form-item label="技术员" prop="technician">
|
||||||
<el-input v-model="form.technician" placeholder="请输入技术员" />
|
<el-input v-model="form.technician" placeholder="请输入技术员" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="备注" prop="comment">
|
|
||||||
<el-input v-model="form.comment" placeholder="请输入备注" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<template #footer>
|
<template #footer>
|
||||||
@ -145,15 +137,30 @@
|
|||||||
<!-- 审批对话框 -->
|
<!-- 审批对话框 -->
|
||||||
<el-dialog :title="'审批转场记录'" v-model="approveDialog" width="500px" append-to-body>
|
<el-dialog :title="'审批转场记录'" v-model="approveDialog" width="500px" append-to-body>
|
||||||
<el-form ref="approveFormRef" :model="approveForm" label-width="120px">
|
<el-form ref="approveFormRef" :model="approveForm" label-width="120px">
|
||||||
<el-form-item label="羊只id"><el-input v-model="approveForm.sheepId" disabled /></el-form-item>
|
<el-form-item label="管理耳号">
|
||||||
<el-form-item label="品种"><el-input :value="approveForm.varietyName" disabled /></el-form-item>
|
<el-input v-model="displayManageTags" disabled />
|
||||||
<el-form-item label="转入牧场"><el-input v-model="approveForm.transTo" disabled /></el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="当前牧场"><el-input v-model="approveForm.transFrom" disabled /></el-form-item>
|
<el-form-item label="品种">
|
||||||
<el-form-item label="转场类型">
|
<el-input :value="approveForm.varietyName" disabled />
|
||||||
<el-input :value="getTransTypeLabel(approveForm.transType)" disabled />
|
</el-form-item>
|
||||||
|
<el-form-item label="转入牧场">
|
||||||
|
<el-input :value="approveForm.transTo" disabled />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="当前牧场">
|
||||||
|
<el-input :value="approveForm.transFrom" disabled />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="转场类型">
|
||||||
|
<el-input :value="approveForm.transTypeText || '未知类型'" disabled />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="技术员">
|
||||||
|
<el-input v-model="approveForm.technician" disabled />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注">
|
||||||
|
<el-input v-model="approveForm.comment" disabled />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="状态">
|
||||||
|
<el-input :value="getStatusLabel(approveForm.status)" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="技术员"><el-input v-model="approveForm.technician" disabled /></el-form-item>
|
|
||||||
<el-form-item label="备注"><el-input v-model="approveForm.comment" disabled /></el-form-item>
|
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<template #footer>
|
<template #footer>
|
||||||
@ -167,36 +174,47 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="Transition_info">
|
<script setup name="Transition_info">
|
||||||
import { listTransition_info, getTransition_info, delTransition_info, addTransition_info, updateTransition_info } from "@/api/produce/manage_sheep/transition_info"
|
import { listTransition_info, getTransition_info, delTransition_info, addTransition_info, getSheepByRanchId, updateTransition_info, listRanch,approveTransitionInfo } from "@/api/produce/manage_sheep/transition_info"
|
||||||
|
import { checkSheepByManageTags, getSheepBySheepfoldId } from '@/api/produce/other/fixHoof'
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance()
|
const { proxy } = getCurrentInstance()
|
||||||
const { status, trans_type } = proxy.useDict('status', 'trans_type')
|
const { status, trans_type } = proxy.useDict('status', 'trans_type')
|
||||||
|
|
||||||
/* -------------------- 响应式数据 -------------------- */
|
|
||||||
const transition_infoList = ref([])
|
const transition_infoList = ref([])
|
||||||
const open = ref(false)
|
const open = ref(false)
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const showSearch = ref(true)
|
const showSearch = ref(true)
|
||||||
const ids = ref([])
|
const ids = ref([])
|
||||||
const single = ref(true)
|
const single = ref(true)
|
||||||
const multiple = ref(true)
|
const multiple = ref(true)
|
||||||
const total = ref(0)
|
const total = ref(0)
|
||||||
const title = ref('')
|
const title = ref('')
|
||||||
const daterangeCreateTime = ref([])
|
const daterangeCreateTime = ref([])
|
||||||
|
|
||||||
const approveDialog = ref(false)
|
const approveDialog = ref(false)
|
||||||
const approveForm = ref({})
|
const approveForm = ref({})
|
||||||
|
const displayManageTags = ref('')
|
||||||
const varietyOptions = ref([])
|
const varietyOptions = ref([])
|
||||||
|
const ranchOptions = ref([]);
|
||||||
|
const sheepOptions = ref([]);
|
||||||
|
const isAdd = ref(true);
|
||||||
|
const isEdit = ref(false);
|
||||||
|
|
||||||
/* -------------------- 查询 / 表单 -------------------- */
|
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
form: {},
|
form: {
|
||||||
|
id: null,
|
||||||
|
manageTags: [],
|
||||||
|
transTo: null,
|
||||||
|
transFrom: null,
|
||||||
|
transType: null,
|
||||||
|
technician: null,
|
||||||
|
tagDetails: {}
|
||||||
|
},
|
||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
sheepId: null,
|
manageTags: [],
|
||||||
varietyId: null,
|
varietyId: null,
|
||||||
transTo: null,
|
transTo: null,
|
||||||
transFrom: null,
|
transFrom: null,
|
||||||
@ -204,103 +222,384 @@ const data = reactive({
|
|||||||
createTime: null
|
createTime: null
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
sheepId: [
|
manageTags:[
|
||||||
{ required: true, message: "羊只id不能为空", trigger: "blur" }
|
{ required: true, message: "请输入管理耳号", trigger: "blur" }
|
||||||
],
|
|
||||||
varietyId: [
|
|
||||||
{ required: true, message: "品种不能为空", trigger: "change" }
|
|
||||||
],
|
],
|
||||||
transTo: [
|
transTo: [
|
||||||
{ required: true, message: "转入牧场不能为空", trigger: "blur" }
|
{ required: true, message: "请输入转入牧场", trigger: "blur" }
|
||||||
],
|
],
|
||||||
transFrom: [
|
transFrom: [
|
||||||
{ required: true, message: "当前牧场不能为空", trigger: "blur" }
|
{ required: false, message: "请选择当前牧场", trigger: "blur" }
|
||||||
],
|
],
|
||||||
transType: [
|
transType: [
|
||||||
{ required: true, message: "转场类型不能为空", trigger: "change" }
|
{ required: true, message: "请选择转场类型", trigger: "change" }
|
||||||
],
|
],
|
||||||
technician: [
|
technician: [
|
||||||
{ required: true, message: "技术员不能为空", trigger: "blur" }
|
{ required: true, message: "请输入技术员", trigger: "blur" }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const { queryParams, form, rules } = toRefs(data)
|
const { queryParams, form, rules } = toRefs(data)
|
||||||
|
|
||||||
/* -------------------- 基础方法 -------------------- */
|
//获取转场记录列表
|
||||||
function getList() {
|
function getList() {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
queryParams.value.params = {}
|
queryParams.value.params = {}
|
||||||
if (daterangeCreateTime.value?.length) {
|
if (daterangeCreateTime.value?.length) {
|
||||||
queryParams.value.params.beginCreateTime = daterangeCreateTime.value[0]
|
queryParams.value.params.beginCreateTime = daterangeCreateTime.value[0]
|
||||||
queryParams.value.params.endCreateTime = daterangeCreateTime.value[1]
|
queryParams.value.params.endCreateTime = daterangeCreateTime.value[1]
|
||||||
}
|
}
|
||||||
listTransition_info(queryParams.value).then(res => {
|
listTransition_info(queryParams.value).then(res => {
|
||||||
transition_infoList.value = res.rows
|
transition_infoList.value = res.rows
|
||||||
total.value = res.total
|
total.value = res.total
|
||||||
loading.value = false
|
loading.value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
//重置
|
||||||
function reset() {
|
function reset() {
|
||||||
form.value = {
|
form.value = {
|
||||||
id: null,
|
id: null,
|
||||||
sheepId: null,
|
manageTags: [],
|
||||||
varietyId: null,
|
|
||||||
transTo: null,
|
transTo: null,
|
||||||
transFrom: null,
|
transFrom: null,
|
||||||
transType: null,
|
transType: null,
|
||||||
technician: null,
|
technician: null,
|
||||||
status: null,
|
createBy:null,
|
||||||
comment: null,
|
tagDetails: {}
|
||||||
createBy: null,
|
};
|
||||||
createTime: null
|
sheepOptions.value = [];
|
||||||
}
|
proxy.resetForm("transition_infoRef");
|
||||||
proxy.resetForm("transition_infoRef")
|
isAdd.value = true;
|
||||||
|
isEdit.value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 加载牧场列表
|
||||||
|
function loadRanchOptions() {
|
||||||
|
return listRanch()
|
||||||
|
.then((res) => {
|
||||||
|
if (res.rows && Array.isArray(res.rows)) {
|
||||||
|
const mapped = res.rows.map((ranch) => ({
|
||||||
|
id: Number(ranch.id),
|
||||||
|
ranchName: ranch.ranch || '未知牧场',
|
||||||
|
}));
|
||||||
|
ranchOptions.value = mapped;
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
proxy.$modal.msgError('获取牧场数据失败');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// 加载耳号选项
|
||||||
|
function loadSheepOptions() {
|
||||||
|
getSheepBySheepfoldId().then(res => {
|
||||||
|
sheepOptions.value = res.data?.map(sheep => ({
|
||||||
|
id: sheep.id,
|
||||||
|
manageTags: sheep.manageTags
|
||||||
|
})) || [];
|
||||||
|
}).catch(error => {
|
||||||
|
console.error('加载耳号选项失败', error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 通过牧场 ID 查询牧场名称
|
||||||
|
async function getRanchNameByRanchId(ranchId) {
|
||||||
|
if (!ranchId) return '';
|
||||||
|
try {
|
||||||
|
if (ranchOptions.value.length === 0) {
|
||||||
|
await loadRanchOptions();
|
||||||
|
}
|
||||||
|
const matchedRanch = ranchOptions.value.find(
|
||||||
|
(item) => item.id === Number(ranchId)
|
||||||
|
);
|
||||||
|
return matchedRanch ? matchedRanch.ranchName : '';
|
||||||
|
} catch (error) {
|
||||||
|
console.error('通过 ranchId 查询牧场名称失败:', error);
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function handleRanchChange(ranchName) {
|
||||||
|
if (!ranchName) {
|
||||||
|
sheepOptions.value = [];
|
||||||
|
form.value.manageTags = [];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const matchedRanch = ranchOptions.value.find(
|
||||||
|
(ranch) => ranch.ranchName === ranchName
|
||||||
|
);
|
||||||
|
if (!matchedRanch) {
|
||||||
|
proxy.$modal.msgError('未找到该牧场信息,请重新选择');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ranchIdNum = matchedRanch.id;
|
||||||
|
|
||||||
|
getSheepByRanchId(ranchIdNum)
|
||||||
|
.then((res) => {
|
||||||
|
if (res.code === 200) {
|
||||||
|
if (res.data && res.data.length > 0) {
|
||||||
|
sheepOptions.value = res.data.map((sheep) => ({
|
||||||
|
id: sheep.id,
|
||||||
|
manageTags: sheep.manageTags,
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
sheepOptions.value = [];
|
||||||
|
proxy.$message.error('该牧场暂无羊只数据');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
sheepOptions.value = [];
|
||||||
|
proxy.$modal.msgError('获取羊只数据失败,请重试');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
console.error('羊只列表加载失败:', error);
|
||||||
|
sheepOptions.value = [];
|
||||||
|
proxy.$modal.msgError('获取羊只信息失败,请重试');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
async function loadSheepInfo() {
|
||||||
|
if (isEdit.value) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const tags = form.value.manageTags;
|
||||||
|
if (!tags || tags.length === 0) return;
|
||||||
|
|
||||||
|
const tagDetails = {};
|
||||||
|
const validResults = [];
|
||||||
|
|
||||||
|
for (const tag of tags) {
|
||||||
|
try {
|
||||||
|
const { data: sheepData } = await checkSheepByManageTags(tag.trim());
|
||||||
|
if (!sheepData) {
|
||||||
|
validResults.push(false);
|
||||||
|
proxy.$modal.msgError(`耳号 ${tag} 不存在`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ranchName = await getRanchNameByRanchId(sheepData.ranchId);
|
||||||
|
|
||||||
|
tagDetails[tag] = {
|
||||||
|
sheepId: sheepData.id,
|
||||||
|
varietyId: sheepData.varietyId,
|
||||||
|
varietyName: sheepData.varietyName || '',
|
||||||
|
ranchName: ranchName,
|
||||||
|
comment: sheepData.comment || ''
|
||||||
|
};
|
||||||
|
validResults.push(true);
|
||||||
|
|
||||||
|
if (!form.value.transFrom && tags.indexOf(tag) === 0) {
|
||||||
|
form.value.transFrom = ranchName;
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('获取耳号信息失败:', error);
|
||||||
|
validResults.push(false);
|
||||||
|
proxy.$modal.msgError(`耳号 ${tag} 验证失败`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (validResults.includes(false)) {
|
||||||
|
form.value.manageTags = tags.filter((_, index) => validResults[index]);
|
||||||
|
proxy.$message.warning('部分耳号不合法,已过滤');
|
||||||
|
}
|
||||||
|
|
||||||
|
form.value.tagDetails = tagDetails;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出
|
||||||
|
function handleExport() {
|
||||||
|
proxy.download(
|
||||||
|
'/produce/manage_sheep/transition_info/export',
|
||||||
|
{ ...queryParams.value },
|
||||||
|
`transition_info_${Date.now()}.xlsx`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 审批
|
||||||
|
function handleApprove(row) {
|
||||||
|
approveForm.value = { ...row };
|
||||||
|
approveDialog.value = true;
|
||||||
|
displayManageTags.value = Array.isArray(row.manageTags)
|
||||||
|
? row.manageTags.join(',')
|
||||||
|
: row.manageTags || '';
|
||||||
|
}
|
||||||
|
|
||||||
|
// 审批同意
|
||||||
|
function handleApproveAgree() {
|
||||||
|
if (!approveForm.value.transTo) {
|
||||||
|
proxy.$modal.msgError('转入牧场不能为空');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
approveForm.value.status = 1;
|
||||||
|
|
||||||
|
approveTransitionInfo(approveForm.value).then(() => {
|
||||||
|
approveDialog.value = false;
|
||||||
|
proxy.$modal.msgSuccess('审批通过,已更新羊只所在牧场');
|
||||||
|
getList();
|
||||||
|
}).catch(error => {
|
||||||
|
proxy.$modal.msgError(`审批失败:${error.message}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 驳回审批
|
||||||
|
function handleApproveReject() {
|
||||||
|
approveForm.value.status = 2;
|
||||||
|
updateTransition_info(approveForm.value).then(() => {
|
||||||
|
approveDialog.value = false;
|
||||||
|
proxy.$modal.msgSuccess('审批成功,状态已更新为驳回');
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取转场类型文本
|
||||||
|
function getTransTypeLabel(value) {
|
||||||
|
const transTypeArray = trans_type.value;
|
||||||
|
if (!Array.isArray(transTypeArray)) {
|
||||||
|
return '未知类型';
|
||||||
|
}
|
||||||
|
const item = transTypeArray.find(item => item.value === value);
|
||||||
|
return item ? item.label : '未知类型';
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取状态文本(与转群页面一致)
|
||||||
|
function getStatusLabel(value) {
|
||||||
|
const statusArray = status.value;
|
||||||
|
if (!Array.isArray(statusArray)) {
|
||||||
|
return '未知状态';
|
||||||
|
}
|
||||||
|
const item = statusArray.find(item => item.value === value);
|
||||||
|
return item ? item.label : '未知状态';
|
||||||
|
}
|
||||||
|
|
||||||
|
//取消
|
||||||
function cancel() {
|
function cancel() {
|
||||||
open.value = false
|
open.value = false
|
||||||
reset()
|
reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//搜索
|
||||||
function handleQuery() {
|
function handleQuery() {
|
||||||
queryParams.value.pageNum = 1
|
queryParams.value.pageNum = 1
|
||||||
getList()
|
getList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//重置
|
||||||
function resetQuery() {
|
function resetQuery() {
|
||||||
daterangeCreateTime.value = []
|
daterangeCreateTime.value = []
|
||||||
proxy.resetForm("queryRef")
|
proxy.resetForm("queryRef")
|
||||||
handleQuery()
|
handleQuery()
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleSelectionChange(selection) {
|
function handleSelectionChange(selection) {
|
||||||
ids.value = selection.map(item => item.id)
|
ids.value = selection.map(item => item.id)
|
||||||
single.value = selection.length !== 1
|
single.value = selection.length !== 1
|
||||||
multiple.value = !selection.length
|
multiple.value = !selection.length
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//新增
|
||||||
function handleAdd() {
|
function handleAdd() {
|
||||||
reset()
|
reset();
|
||||||
open.value = true
|
open.value = true;
|
||||||
title.value = "添加转场"
|
title.value = "添加转场";
|
||||||
|
isAdd.value = true;
|
||||||
|
isEdit.value = false;
|
||||||
|
sheepOptions.value = [];
|
||||||
|
form.value.manageTags = [];
|
||||||
}
|
}
|
||||||
function handleUpdate(row) {
|
|
||||||
reset()
|
//修改
|
||||||
const _id = row.id || ids.value
|
async function handleUpdate(row) {
|
||||||
|
reset();
|
||||||
|
const _id = row.id || ids.value;
|
||||||
getTransition_info(_id).then(response => {
|
getTransition_info(_id).then(response => {
|
||||||
form.value = response.data
|
form.value = {
|
||||||
open.value = true
|
...response.data,
|
||||||
title.value = "修改转场"
|
manageTags: [response.data.manageTags]
|
||||||
})
|
};
|
||||||
|
open.value = true;
|
||||||
|
title.value = "修改转场";
|
||||||
|
isAdd.value = false;
|
||||||
|
isEdit.value = true;
|
||||||
|
}).catch(error => {
|
||||||
|
console.error('获取转场详情失败:', error);
|
||||||
|
proxy.$modal.msgError('加载数据失败,请重试');
|
||||||
|
});
|
||||||
}
|
}
|
||||||
function submitForm() {
|
|
||||||
proxy.$refs["transition_infoRef"].validate(valid => {
|
//提交
|
||||||
if (!valid) return
|
async function submitForm() {
|
||||||
const api = form.value.id ? updateTransition_info : addTransition_info
|
proxy.$refs.transition_infoRef.validate(async (valid) => {
|
||||||
api(form.value).then(() => {
|
if (!valid) return;
|
||||||
proxy.$modal.msgSuccess(form.value.id ? "修改成功" : "新增成功")
|
|
||||||
open.value = false
|
const allTags = form.value.manageTags;
|
||||||
getList()
|
let validTags = [];
|
||||||
})
|
|
||||||
})
|
if (isAdd.value) {
|
||||||
|
if (!allTags || allTags.length === 0) {
|
||||||
|
proxy.$modal.msgError('请选择至少一个耳号');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const tagDetails = form.value.tagDetails || {};
|
||||||
|
validTags = allTags.filter(tag => tagDetails[tag]);
|
||||||
|
|
||||||
|
if (validTags.length === 0) {
|
||||||
|
proxy.$modal.msgError('所有耳号均无效,请重新输入');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
validTags = allTags;
|
||||||
|
}
|
||||||
|
|
||||||
|
let submitData = {};
|
||||||
|
if (isAdd.value) {
|
||||||
|
submitData = validTags.map(tag => ({
|
||||||
|
sheepId: form.value.tagDetails[tag].sheepId,
|
||||||
|
varietyId: form.value.tagDetails[tag].varietyId,
|
||||||
|
varietyName: form.value.tagDetails[tag].varietyName,
|
||||||
|
manageTags: tag,
|
||||||
|
transTo: form.value.transTo,
|
||||||
|
transFrom: form.value.tagDetails[tag].ranchName,
|
||||||
|
transType: form.value.transType,
|
||||||
|
technician: form.value.technician,
|
||||||
|
comment: form.value.tagDetails[tag].comment,
|
||||||
|
status: 0,
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
submitData = {
|
||||||
|
...form.value,
|
||||||
|
manageTags: validTags.join(','),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (isAdd.value) {
|
||||||
|
await addTransition_info(submitData);
|
||||||
|
} else {
|
||||||
|
await updateTransition_info(submitData);
|
||||||
|
}
|
||||||
|
proxy.$modal.msgSuccess(isAdd.value ? '提交成功' : '修改成功');
|
||||||
|
open.value = false;
|
||||||
|
getList();
|
||||||
|
} catch (error) {
|
||||||
|
proxy.$modal.msgError(isAdd.value ? '提交失败,请重试' : '修改失败,请重试');
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
//加载品种信息
|
||||||
|
function getVarietyOptions() {
|
||||||
|
request({
|
||||||
|
url: '/base/variety/list',
|
||||||
|
method: 'get',
|
||||||
|
params: { pageNum: 1, pageSize: 9999 },
|
||||||
|
}).then((res) => {
|
||||||
|
varietyOptions.value = res.rows || [];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//删除
|
||||||
function handleDelete(row) {
|
function handleDelete(row) {
|
||||||
const _ids = row.id || ids.value
|
const _ids = row.id || ids.value
|
||||||
proxy.$modal.confirm('是否确认删除转场编号为"' + _ids + '"的数据项?')
|
proxy.$modal.confirm('是否确认删除转场编号为"' + _ids + '"的数据项?')
|
||||||
@ -311,6 +610,11 @@ function handleDelete(row) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
getList()
|
|
||||||
|
|
||||||
</script>
|
onMounted(() => {
|
||||||
|
loadRanchOptions();
|
||||||
|
getVarietyOptions();
|
||||||
|
loadSheepOptions();
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
@ -2,8 +2,8 @@
|
|||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<!-- 搜索区域 -->
|
<!-- 搜索区域 -->
|
||||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
<el-form-item label="耳号" prop="manageTags">
|
<el-form-item label="管理耳号" prop="manageTags">
|
||||||
<el-input v-model="queryParams.manageTags" placeholder="请输入耳号" clearable @keyup.enter="handleQuery" />
|
<el-input v-model="queryParams.manageTags" placeholder="请输入管理耳号" clearable @keyup.enter="handleQuery" style="width: 150px;"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="羊舍" prop="sheepfold">
|
<el-form-item label="羊舍" prop="sheepfold">
|
||||||
@ -60,6 +60,7 @@
|
|||||||
<el-table-column label="品种" align="center" prop="varietyName" />
|
<el-table-column label="品种" align="center" prop="varietyName" />
|
||||||
<el-table-column label="备注" align="center" prop="comment" />
|
<el-table-column label="备注" align="center" prop="comment" />
|
||||||
<el-table-column label="技术员" align="center" prop="technician" />
|
<el-table-column label="技术员" align="center" prop="technician" />
|
||||||
|
<el-table-column label="创建人" align="center" prop="createBy" />
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||||
@ -82,9 +83,9 @@
|
|||||||
<!-- 新增/修改弹窗 -->
|
<!-- 新增/修改弹窗 -->
|
||||||
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
||||||
<el-form ref="castrateRef" :model="form" :rules="rules" label-width="80px">
|
<el-form ref="castrateRef" :model="form" :rules="rules" label-width="80px">
|
||||||
<el-form-item label="耳号" prop="manageTags">
|
<el-form-item label="管理耳号" prop="manageTags">
|
||||||
<el-select v-model="form.manageTags" placeholder="请输入或选择耳号" multiple filterable collapse-tags allow-create
|
<el-select v-model="form.manageTags" placeholder="请输入或选择耳号" multiple filterable allow-create
|
||||||
style="width: 100%" @change="loadSheepInfo">
|
style="width: 100%" @change="loadSheepInfo" @blur="loadSheepInfo">
|
||||||
<el-option v-for="sheep in sheepOptions" :key="sheep.id" :label="sheep.manageTags"
|
<el-option v-for="sheep in sheepOptions" :key="sheep.id" :label="sheep.manageTags"
|
||||||
:value="sheep.manageTags" />
|
:value="sheep.manageTags" />
|
||||||
</el-select>
|
</el-select>
|
||||||
@ -134,7 +135,7 @@ const data = reactive({
|
|||||||
manageTags: [],
|
manageTags: [],
|
||||||
sheepfold: null,
|
sheepfold: null,
|
||||||
technician: null,
|
technician: null,
|
||||||
tagDetails: {}
|
tagDetails: {}
|
||||||
},
|
},
|
||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
@ -151,18 +152,19 @@ const data = reactive({
|
|||||||
// { required: true, message: '羊只id不能为空', trigger: 'blur' }
|
// { required: true, message: '羊只id不能为空', trigger: 'blur' }
|
||||||
// ],
|
// ],
|
||||||
manageTags: [
|
manageTags: [
|
||||||
{ required: true, message: '耳号不能为空', trigger: 'blur' }
|
{ required: true, message: '请输入管理耳号', trigger: 'blur' }
|
||||||
],
|
],
|
||||||
sheepfold: [
|
sheepfold: [
|
||||||
{ required: true, message: '羊舍不能为空', trigger: 'change' }
|
{ required: true, message: '请选择羊舍', trigger: 'change' }
|
||||||
],
|
],
|
||||||
technician: [
|
technician: [
|
||||||
{ required: true, message: '技术员不能为空', trigger: 'blur' }
|
{ required: true, message: '请输入技术员', trigger: 'blur' }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const { queryParams, form, rules } = toRefs(data)
|
const { queryParams, form, rules } = toRefs(data)
|
||||||
|
//通过羊舍获取羊只
|
||||||
function loadSheepBySheepfold() {
|
function loadSheepBySheepfold() {
|
||||||
const sheepfoldId = form.value.sheepfold;
|
const sheepfoldId = form.value.sheepfold;
|
||||||
if (!sheepfoldId) {
|
if (!sheepfoldId) {
|
||||||
@ -170,23 +172,26 @@ function loadSheepBySheepfold() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 加载选择的羊舍的耳号
|
|
||||||
getSheepBySheepfoldId(sheepfoldId)
|
getSheepBySheepfoldId(sheepfoldId)
|
||||||
.then(res => {
|
.then(res => {
|
||||||
const sheepList = res.data || [];
|
let sheepList = res.data || [];
|
||||||
|
sheepList = sheepList.filter(sheep => sheep.gender === 2);
|
||||||
|
|
||||||
if (sheepList.length === 0) {
|
if (sheepList.length === 0) {
|
||||||
proxy.$modal.msgInfo('该羊舍暂无可用耳号');
|
proxy.$modal.msgInfo('该羊舍下暂无性别为公的羊只');
|
||||||
|
sheepOptions.value = [];
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sheepOptions.value = sheepList.map(sheep => ({
|
sheepOptions.value = sheepList.map(sheep => ({
|
||||||
id: sheep.id,
|
id: sheep.id,
|
||||||
manageTags: sheep.manageTags,
|
manageTags: sheep.manageTags,
|
||||||
sheepfoldId: sheepfoldId
|
gender: sheep.gender
|
||||||
}));
|
}));
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
console.error('加载羊舍耳号失败', error);
|
console.error('加载羊舍耳号失败', error);
|
||||||
proxy.$modal.msgError(`加载耳号失败: ${error.message}`);
|
proxy.$modal.msgError('加载耳号失败,请重试');
|
||||||
sheepOptions.value = [];
|
sheepOptions.value = [];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -196,44 +201,45 @@ async function loadSheepInfo() {
|
|||||||
const tags = form.value.manageTags;
|
const tags = form.value.manageTags;
|
||||||
if (!tags || tags.length === 0) return;
|
if (!tags || tags.length === 0) return;
|
||||||
|
|
||||||
const tagDetails = {}; // 存储每个耳号的信息
|
const tagDetails = {};
|
||||||
const validResults = [];
|
const validResults = [];
|
||||||
|
|
||||||
for (const tag of tags) {
|
for (const tag of tags) {
|
||||||
try {
|
try {
|
||||||
const { data: sheepData } = await checkSheepByManageTags(tag.trim());
|
const { data: sheepData } = await checkSheepByManageTags(tag.trim());
|
||||||
|
|
||||||
if (!sheepData) {
|
if (!sheepData) {
|
||||||
validResults.push(false);
|
validResults.push(false);
|
||||||
proxy.$modal.msgError(`耳号 ${tag} 不存在`);
|
proxy.$modal.msgError(`耳号 ${tag} 不存在`);
|
||||||
|
} else if (sheepData.gender !== 2) {
|
||||||
|
validResults.push(false);
|
||||||
|
proxy.$modal.msgError(`耳号 ${tag} 对应的羊只性别不是公,无法添加`);
|
||||||
} else {
|
} else {
|
||||||
validResults.push(true);
|
validResults.push(true);
|
||||||
// 存储当前耳号的备注、品种、羊舍等信息
|
|
||||||
tagDetails[tag] = {
|
tagDetails[tag] = {
|
||||||
comment: sheepData.comment || '', // 备注信息
|
sheepId: sheepData.id,
|
||||||
varietyId: sheepData.varietyId,
|
gender: sheepData.gender,
|
||||||
sheepfoldId: sheepData.sheepfoldId,
|
sheepfoldId: sheepData.sheepfoldId,
|
||||||
sheepId: sheepData.id
|
varietyId: sheepData.varietyId,
|
||||||
|
comment: sheepData.comment || ''
|
||||||
};
|
};
|
||||||
// 自动填充第一个耳号的羊舍(不影响备注,仅优化用户体验)
|
|
||||||
if (validResults.length === 1) {
|
if (validResults.length === 1) {
|
||||||
form.value.sheepfold = sheepData.sheepfoldId;
|
form.value.sheepfold = sheepData.sheepfoldId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('获取耳号信息失败:', error);
|
console.error(`耳号 ${tag} 校验失败`, error);
|
||||||
proxy.$modal.msgError(`耳号 ${tag} 验证失败`);
|
|
||||||
validResults.push(false);
|
validResults.push(false);
|
||||||
|
proxy.$modal.msgError(`耳号 ${tag} 校验异常,请重试`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 过滤不合法耳号
|
form.value.manageTags = tags.filter((_, index) => validResults[index]);
|
||||||
if (validResults.includes(false)) {
|
|
||||||
form.value.manageTags = tags.filter((_, index) => validResults[index]);
|
|
||||||
proxy.$message.warning('部分耳号不合法,已过滤');
|
|
||||||
}
|
|
||||||
|
|
||||||
// 保存所有耳号的信息(关键:用于后续提交时匹配备注)
|
|
||||||
form.value.tagDetails = tagDetails;
|
form.value.tagDetails = tagDetails;
|
||||||
|
|
||||||
|
if (validResults.includes(false)) {
|
||||||
|
proxy.$message.warning('部分耳号不符合条件(不存在或非公羊),已自动过滤');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 查询列表 */
|
/** 查询列表 */
|
||||||
@ -254,13 +260,19 @@ function getList() {
|
|||||||
total.value = res.total;
|
total.value = res.total;
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
getVarietyOptions({ pageNum: 1, pageSize: 9999 }).then(res => {
|
||||||
|
varietyOptions.value = res.rows || []
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//取消
|
||||||
function cancel() {
|
function cancel() {
|
||||||
open.value = false
|
open.value = false
|
||||||
reset()
|
reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//重置
|
||||||
function reset() {
|
function reset() {
|
||||||
form.value = {
|
form.value = {
|
||||||
id: null,
|
id: null,
|
||||||
@ -272,11 +284,13 @@ function reset() {
|
|||||||
proxy.resetForm('castrateRef');
|
proxy.resetForm('castrateRef');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//搜索
|
||||||
function handleQuery() {
|
function handleQuery() {
|
||||||
queryParams.value.pageNum = 1;
|
queryParams.value.pageNum = 1;
|
||||||
getList();
|
getList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//重置
|
||||||
function resetQuery() {
|
function resetQuery() {
|
||||||
daterangeCreateTime.value = []
|
daterangeCreateTime.value = []
|
||||||
proxy.resetForm('queryRef')
|
proxy.resetForm('queryRef')
|
||||||
@ -289,12 +303,14 @@ function handleSelectionChange(selection) {
|
|||||||
multiple.value = !selection.length
|
multiple.value = !selection.length
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//新增
|
||||||
function handleAdd() {
|
function handleAdd() {
|
||||||
reset()
|
reset()
|
||||||
open.value = true
|
open.value = true
|
||||||
title.value = '添加去势'
|
title.value = '添加去势'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//修改
|
||||||
function handleUpdate(row) {
|
function handleUpdate(row) {
|
||||||
reset();
|
reset();
|
||||||
const _id = row.id || ids.value;
|
const _id = row.id || ids.value;
|
||||||
@ -320,7 +336,7 @@ function handleUpdate(row) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新增:校验所有回显的耳号是否存在
|
// 校验所有回显的耳号是否存在
|
||||||
async function validateAllTags() {
|
async function validateAllTags() {
|
||||||
const tags = form.value.manageTags || [];
|
const tags = form.value.manageTags || [];
|
||||||
if (tags.length === 0) return;
|
if (tags.length === 0) return;
|
||||||
@ -339,47 +355,53 @@ async function validateAllTags() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//提交
|
||||||
function submitForm() {
|
function submitForm() {
|
||||||
proxy.$refs.castrateRef.validate(valid => {
|
proxy.$refs.castrateRef.validate(valid => {
|
||||||
if (!valid) return;
|
if (!valid) return;
|
||||||
|
|
||||||
const allTags = form.value.manageTags;
|
const allTags = form.value.manageTags;
|
||||||
const tagDetails = form.value.tagDetails || {};
|
const tagDetails = form.value.tagDetails || {};
|
||||||
|
|
||||||
if (!allTags || allTags.length === 0) {
|
if (!allTags || allTags.length === 0) {
|
||||||
proxy.$modal.msgError('请选择耳号');
|
proxy.$modal.msgError('请选择有效的公羊耳号');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 循环处理每个耳号,逐个提交
|
const invalidTags = allTags.filter(tag => {
|
||||||
const requests = allTags.map(async (tag) => {
|
const details = tagDetails[tag];
|
||||||
const details = tagDetails[tag] || {};
|
return !details || details.gender !== 2;
|
||||||
const formData = {
|
});
|
||||||
...form.value,
|
if (invalidTags.length > 0) {
|
||||||
manageTags: tag,
|
proxy.$modal.msgError(`耳号 ${invalidTags.join(',')} 性别不符合要求,无法提交`);
|
||||||
comment: details.comment || '', // 关键:每个耳号的备注
|
return;
|
||||||
sheepId: details.sheepId,
|
}
|
||||||
varietyId: details.varietyId,
|
|
||||||
sheepfold: details.sheepfoldId || form.value.sheepfold
|
|
||||||
};
|
|
||||||
|
|
||||||
// 提交单个去势记录(与后端接口匹配)
|
const requests = allTags.map(tag => {
|
||||||
return addCastrate(formData);
|
const details = tagDetails[tag];
|
||||||
|
return addCastrate({
|
||||||
|
manageTags: tag,
|
||||||
|
sheepId: details.sheepId,
|
||||||
|
sheepfold: details.sheepfoldId || form.value.sheepfold,
|
||||||
|
technician: form.value.technician,
|
||||||
|
varietyId: details.varietyId,
|
||||||
|
comment: details.comment
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// 并行处理所有请求
|
|
||||||
Promise.all(requests)
|
Promise.all(requests)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
proxy.$modal.msgSuccess('操作成功');
|
proxy.$modal.msgSuccess('新增成功');
|
||||||
open.value = false;
|
open.value = false;
|
||||||
getList();
|
getList();
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
proxy.$modal.msgError(`处理失败:${error.message}`);
|
proxy.$modal.msgError(`新增失败:${error.message}`);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//删除
|
||||||
function handleDelete(row) {
|
function handleDelete(row) {
|
||||||
const _ids = row.id || ids.value
|
const _ids = row.id || ids.value
|
||||||
proxy.$modal.confirm(`是否确认删除去势编号为"${_ids}"的数据项?`).then(() => {
|
proxy.$modal.confirm(`是否确认删除去势编号为"${_ids}"的数据项?`).then(() => {
|
||||||
@ -390,10 +412,12 @@ function handleDelete(row) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//导出
|
||||||
function handleExport() {
|
function handleExport() {
|
||||||
proxy.download('/produce/other/castrate/export', { ...queryParams.value }, `castrate_${new Date().getTime()}.xlsx`)
|
proxy.download('/produce/other/castrate/export', { ...queryParams.value }, `castrate_${new Date().getTime()}.xlsx`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//加载羊舍数据
|
||||||
const sheepfoldOptions = ref([])
|
const sheepfoldOptions = ref([])
|
||||||
function getSheepfoldOptions() {
|
function getSheepfoldOptions() {
|
||||||
listSheepfold({ pageNum: 1, pageSize: 9999 }).then(res => {
|
listSheepfold({ pageNum: 1, pageSize: 9999 }).then(res => {
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
<el-form-item label="管理耳号" prop="manageTags">
|
<el-form-item label="管理耳号" prop="manageTags">
|
||||||
<el-input v-model="queryParams.manageTags" placeholder="请输入管理耳号" clearable @keyup.enter="handleQuery" />
|
<el-input v-model="queryParams.manageTags" placeholder="请输入管理耳号" clearable @keyup.enter="handleQuery"
|
||||||
|
style="width: 150px;" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="羊舍" prop="sheepfold">
|
<el-form-item label="羊舍" prop="sheepfold">
|
||||||
@ -81,7 +82,7 @@
|
|||||||
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
||||||
<el-form ref="fixHoofRef" :model="form" :rules="rules" label-width="80px">
|
<el-form ref="fixHoofRef" :model="form" :rules="rules" label-width="80px">
|
||||||
<el-form-item label="耳号" prop="manageTags">
|
<el-form-item label="耳号" prop="manageTags">
|
||||||
<el-select v-model="form.manageTags" placeholder="请输入或选择耳号" multiple filterable collapse-tags allow-create
|
<el-select v-model="form.manageTags" placeholder="请输入或选择耳号" multiple filterable allow-create
|
||||||
style="width: 100%" @change="loadSheepInfo">
|
style="width: 100%" @change="loadSheepInfo">
|
||||||
<el-option v-for="sheep in sheepOptions" :key="sheep.id" :label="sheep.manageTags"
|
<el-option v-for="sheep in sheepOptions" :key="sheep.id" :label="sheep.manageTags"
|
||||||
:value="sheep.manageTags" />
|
:value="sheep.manageTags" />
|
||||||
@ -107,7 +108,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="FixHoof">
|
<script setup name="FixHoof">
|
||||||
import { listFixHoof, getFixHoof, delFixHoof, addFixHoof, updateFixHoof, checkSheepByManageTags, getVarietyOptions } from '@/api/produce/other/fixHoof'
|
import { listFixHoof, getFixHoof, delFixHoof, addFixHoof, updateFixHoof, checkSheepByManageTags, getVarietyOptions, getSheepBySheepfoldId } from '@/api/produce/other/fixHoof'
|
||||||
import { listSheepfold_management as listSheepfold } from '@/api/fileManagement/sheepfold_management'
|
import { listSheepfold_management as listSheepfold } from '@/api/fileManagement/sheepfold_management'
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance()
|
const { proxy } = getCurrentInstance()
|
||||||
@ -129,7 +130,7 @@ const data = reactive({
|
|||||||
form: {
|
form: {
|
||||||
sheepfold: null,
|
sheepfold: null,
|
||||||
manageTags: [],
|
manageTags: [],
|
||||||
tagDetails: {}
|
tagDetails: {},
|
||||||
},
|
},
|
||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
@ -142,19 +143,20 @@ const data = reactive({
|
|||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
manageTags: [
|
manageTags: [
|
||||||
{ required: true, message: '耳号不能为空', trigger: 'blur' }
|
{ required: true, message: '请输入管理耳号', trigger: 'blur' }
|
||||||
],
|
],
|
||||||
sheepfold: [
|
sheepfold: [
|
||||||
{ required: true, message: '请选择羊舍', trigger: 'change' }
|
{ required: true, message: '请选择羊舍', trigger: 'change' }
|
||||||
],
|
],
|
||||||
technician: [
|
technician: [
|
||||||
{ required: true, message: '技术员不能为空', trigger: 'blur' }
|
{ required: true, message: '请输入技术员', trigger: 'blur' }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const { queryParams, form, rules } = toRefs(data)
|
const { queryParams, form, rules } = toRefs(data)
|
||||||
|
|
||||||
|
//根据羊舍获取羊只
|
||||||
function loadSheepBySheepfold() {
|
function loadSheepBySheepfold() {
|
||||||
const currentSheepfoldId = form.value.sheepfold;
|
const currentSheepfoldId = form.value.sheepfold;
|
||||||
|
|
||||||
@ -163,7 +165,6 @@ function loadSheepBySheepfold() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 加载选择的羊舍的耳号
|
|
||||||
getSheepBySheepfoldId(currentSheepfoldId)
|
getSheepBySheepfoldId(currentSheepfoldId)
|
||||||
.then(res => {
|
.then(res => {
|
||||||
const newSheepList = res.data || [];
|
const newSheepList = res.data || [];
|
||||||
@ -184,8 +185,9 @@ async function loadSheepInfo() {
|
|||||||
const tags = form.value.manageTags;
|
const tags = form.value.manageTags;
|
||||||
if (!tags || tags.length === 0) return;
|
if (!tags || tags.length === 0) return;
|
||||||
|
|
||||||
const tagDetails = {}; // 存储每个耳号的信息
|
const tagDetails = {};
|
||||||
const validResults = [];
|
const validResults = [];
|
||||||
|
const validTags = [];
|
||||||
|
|
||||||
for (const tag of tags) {
|
for (const tag of tags) {
|
||||||
try {
|
try {
|
||||||
@ -195,9 +197,9 @@ async function loadSheepInfo() {
|
|||||||
proxy.$modal.msgError(`耳号 ${tag} 不存在`);
|
proxy.$modal.msgError(`耳号 ${tag} 不存在`);
|
||||||
} else {
|
} else {
|
||||||
validResults.push(true);
|
validResults.push(true);
|
||||||
// 存储当前耳号的备注、品种、羊舍等信息
|
validTags.push(tag);
|
||||||
tagDetails[tag] = {
|
tagDetails[tag] = {
|
||||||
comment: sheepData.comment || '', // 备注
|
comment: sheepData.comment || '',
|
||||||
varietyId: sheepData.varietyId,
|
varietyId: sheepData.varietyId,
|
||||||
sheepfoldId: sheepData.sheepfoldId,
|
sheepfoldId: sheepData.sheepfoldId,
|
||||||
sheepId: sheepData.id
|
sheepId: sheepData.id
|
||||||
@ -209,16 +211,21 @@ async function loadSheepInfo() {
|
|||||||
validResults.push(false);
|
validResults.push(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 过滤不合法耳号
|
|
||||||
if (validResults.includes(false)) {
|
if (validResults.includes(false)) {
|
||||||
form.value.manageTags = tags.filter((_, index) => validResults[index]);
|
form.value.manageTags = tags.filter((_, index) => validResults[index]);
|
||||||
proxy.$message.warning('部分耳号不合法,已过滤');
|
proxy.$message.warning('部分耳号不合法,已过滤');
|
||||||
}
|
}
|
||||||
|
|
||||||
// 保存所有耳号的信息
|
|
||||||
form.value.tagDetails = tagDetails;
|
form.value.tagDetails = tagDetails;
|
||||||
|
|
||||||
|
if (validTags.length > 0) {
|
||||||
|
const firstValidTag = validTags[0]; 耳号
|
||||||
|
const firstSheepfoldId = tagDetails[firstValidTag].sheepfoldId;
|
||||||
|
form.value.sheepfold = firstSheepfoldId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//获取修蹄列表
|
||||||
function getList() {
|
function getList() {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
const q = { ...queryParams.value }
|
const q = { ...queryParams.value }
|
||||||
@ -240,11 +247,13 @@ function getList() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//取消
|
||||||
function cancel() {
|
function cancel() {
|
||||||
open.value = false
|
open.value = false
|
||||||
reset()
|
reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//重置
|
||||||
function reset() {
|
function reset() {
|
||||||
form.value = {
|
form.value = {
|
||||||
id: null,
|
id: null,
|
||||||
@ -257,11 +266,13 @@ function reset() {
|
|||||||
proxy.resetForm('fixHoofRef')
|
proxy.resetForm('fixHoofRef')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//搜索
|
||||||
function handleQuery() {
|
function handleQuery() {
|
||||||
queryParams.value.pageNum = 1
|
queryParams.value.pageNum = 1
|
||||||
getList()
|
getList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//重置
|
||||||
function resetQuery() {
|
function resetQuery() {
|
||||||
daterangeCreateTime.value = []
|
daterangeCreateTime.value = []
|
||||||
queryParams.value.varietyId = null
|
queryParams.value.varietyId = null
|
||||||
@ -275,12 +286,14 @@ function handleSelectionChange(selection) {
|
|||||||
multiple.value = !selection.length
|
multiple.value = !selection.length
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//新增
|
||||||
function handleAdd() {
|
function handleAdd() {
|
||||||
reset()
|
reset()
|
||||||
open.value = true
|
open.value = true
|
||||||
title.value = '添加修蹄'
|
title.value = '添加修蹄'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//修改
|
||||||
function handleUpdate(row) {
|
function handleUpdate(row) {
|
||||||
reset()
|
reset()
|
||||||
const _id = row.id || ids.value
|
const _id = row.id || ids.value
|
||||||
@ -293,6 +306,7 @@ function handleUpdate(row) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//提交
|
||||||
function submitForm() {
|
function submitForm() {
|
||||||
proxy.$refs.fixHoofRef.validate(valid => {
|
proxy.$refs.fixHoofRef.validate(valid => {
|
||||||
if (!valid) return;
|
if (!valid) return;
|
||||||
@ -304,7 +318,6 @@ function submitForm() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 构建ScFixHoof对象列表
|
|
||||||
const fixHoofList = allTags.map(tag => {
|
const fixHoofList = allTags.map(tag => {
|
||||||
const details = tagDetails[tag] || {};
|
const details = tagDetails[tag] || {};
|
||||||
return {
|
return {
|
||||||
@ -317,7 +330,6 @@ function submitForm() {
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
// 一次性提交所有修蹄记录
|
|
||||||
addFixHoof(fixHoofList)
|
addFixHoof(fixHoofList)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
proxy.$modal.msgSuccess('操作成功');
|
proxy.$modal.msgSuccess('操作成功');
|
||||||
@ -330,6 +342,7 @@ function submitForm() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//删除
|
||||||
function handleDelete(row) {
|
function handleDelete(row) {
|
||||||
const _ids = row.id || ids.value
|
const _ids = row.id || ids.value
|
||||||
proxy.$modal.confirm(`是否确认删除修蹄编号为"${_ids}"的数据项?`).then(() => {
|
proxy.$modal.confirm(`是否确认删除修蹄编号为"${_ids}"的数据项?`).then(() => {
|
||||||
@ -340,10 +353,12 @@ function handleDelete(row) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//导出
|
||||||
function handleExport() {
|
function handleExport() {
|
||||||
proxy.download('/produce/other/fixHoof/export', { ...queryParams.value }, `fixHoof_${new Date().getTime()}.xlsx`)
|
proxy.download('/produce/other/fixHoof/export', { ...queryParams.value }, `fixHoof_${new Date().getTime()}.xlsx`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//加载羊舍数据
|
||||||
const sheepfoldOptions = ref([])
|
const sheepfoldOptions = ref([])
|
||||||
function getSheepfoldOptions() {
|
function getSheepfoldOptions() {
|
||||||
listSheepfold({ pageNum: 1, pageSize: 9999 }).then(res => {
|
listSheepfold({ pageNum: 1, pageSize: 9999 }).then(res => {
|
||||||
@ -351,34 +366,9 @@ function getSheepfoldOptions() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
//校验羊只是否存在 失焦时校验
|
onMounted(() => {
|
||||||
async function validateSheep() {
|
|
||||||
if (!form.value.manageTags) return;
|
|
||||||
try {
|
|
||||||
const { data } = await checkSheepByManageTags(form.value.manageTags.trim())
|
|
||||||
if (!data) {
|
|
||||||
proxy.$modal.msgError('该管理耳号不存在');
|
|
||||||
// 清空
|
|
||||||
form.value.manageTags = null;
|
|
||||||
form.value.sheepId = null;
|
|
||||||
form.value.sheepfold = null;
|
|
||||||
form.value.varietyId = null;
|
|
||||||
} else {
|
|
||||||
// 隐藏字段:真正保存用
|
|
||||||
form.value.sheepId = data.id;
|
|
||||||
// 自动带出下拉框
|
|
||||||
form.value.sheepfold = data.sheepfoldId;
|
|
||||||
form.value.varietyId = data.varietyId;
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
proxy.$modal.msgError('校验失败');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 只保留一个 onMounted */
|
|
||||||
|
|
||||||
getList()
|
|
||||||
getSheepfoldOptions()
|
getSheepfoldOptions()
|
||||||
getVarietyOptions()
|
getVarietyOptions()
|
||||||
|
getList()
|
||||||
|
})
|
||||||
</script>
|
</script>
|
Loading…
x
Reference in New Issue
Block a user