@ -72,36 +72,135 @@
< / el-table-column >
< / el-table >
< pagination v-show = "total > 0" :total="total" v-model:page="queryParams.pageNum" v -model :limit = "queryParams.pageSize "
@ pagination = "getList" / >
< pagination v-show = "total > 0" :total="total" v -model :page = "queryParams.pageNum "
v - model : limit = "queryParams.pageSize" @ pagination = "getList" / >
<!-- 添加或修改检疫记录对话框 -- >
< el-dialog :title = "title" v-model = "open" width="500px" append -to -body >
< el-form ref = "quarantineRef" :model = "form" :rules = "rules" label -width = " 80px " >
< el-form-item label = "羊只" prop = "sheepId" >
< el-input v-model = "form.sheepId" placeholder="请输入羊只" / >
<!-- 新增检疫记录对话框 -- >
< el-dialog :title = "'新增检疫记录'" v-model = "addOpen" width="700px" append -to -body >
< el-form ref = "addQuarantineRef" :model = "addForm" :rules = "addRules" label -width = " 100px " >
< el-row :gutter = "20" >
< el-col :span = "24" >
< el-form-item label = "羊只耳号" prop = "sheepIds" required >
< div >
< el-input v-model = "addForm.sheepIdInput" placeholder="请输入羊只耳号,按回车验证" @keyup.enter ="validateSheepId"
: disabled = "isInputDisabled" / >
< div v-if = "invalidSheepId" style="color: red; margin-top: 5px;" >
该羊只耳号不存在
< / div >
< div v-if = "validSheepId" style="color: green; margin-top: 5px;" >
该羊只耳号已存在
< / div >
< div style = "margin-top: 10px;" >
< el-tag v-for = "(id, index) in addForm.sheepIds" :key="index" closable @close ="removeSheepId(index)"
style = "margin-right: 10px; margin-bottom: 10px;" >
{ { id } }
< / el-tag >
< / div >
< / div >
< / el-form-item >
< / el-col >
< / el-row >
< el-row :gutter = "20" >
< el-col :span = "12" >
< el-form-item label = "检疫日期" prop = "datetime" >
< el-date-picker clearable v-model = "form.datetime" type="date" value-format="YYYY-MM-DD" placeholder="请选择检疫日期" >
< / el-date-picker >
< el-date-picker clearable v-model = " addForm.datetime" type="date" value -format = " YYYY -MM -DD "
placeholder = "请选择检疫日期" : default - value = "new Date()" > < / el-date-picker >
< / el-form-item >
< el-form-item label = "检疫结果" prop = "result" >
< el-select v-model = "form.result" placeholder="请选择检疫结果" >
< el-option v-for = "dict in quar_result" :key="dict.value" :label = "dict.label"
: value = "parseInt(dict.value)" > < / el-option >
< / el-col >
< / el-row >
< el-row :gutter = "20" >
< el-col :span = "12" >
< el-form-item label = "检疫项目" prop = "quarantineItems" >
< el-select v-model = "addForm.quarItems" placeholder="请选择检疫项目" >
< el-option v-for = "item in quarantineItems" :key="item.value" :label = "item.label"
: value = "item.value" > < / el-option >
< / el-select >
< / el-form-item >
< el-form-item label = "状态" prop = "status" >
< el-radio-group v-model = "form.status" >
< el-radio v-for = "dict in quar_status" :key = "dict.value"
: label = "parseInt(dict.value)" > { { dict . label } } < / el-radio >
< / el-radio-group >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "样品类型" prop = "sampleType" >
< el-select v-model = "addForm.sampleType" placeholder="请选择样品类型" >
< el-option v-for = "item in sampleTypes" :key="item.value" :label = "item.label"
: value = "item.value" > < / el-option >
< / el-select >
< / el-form-item >
< / el-col >
< / el-row >
< el-row :gutter = "20" >
< el-col :span = "12" >
< el-form-item label = "采样员" prop = "sampler" >
< el-input v-model = "addForm.sampler" placeholder="请输入采样员姓名" > < / el -input >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "检疫员" prop = "quarantineOfficer" >
< el-input v-model = "addForm.quarantineOfficer" placeholder="请输入检疫员姓名" > < / el -input >
< / el-form-item >
< / el-col >
< / el-row >
< el-row :gutter = "20" >
< el-col :span = "12" >
< el-form-item label = "检疫结果" prop = "result" >
< el-select v-model = "editForm.result" placeholder="请选择检疫结果" style="width: 200px;" >
< el-option v-for = "items in quar_result" :key="items.id" :label = "items.label"
: value = "items.value" > < / el-option >
< / el-select >
< / el-form-item >
< / el-col >
< / el-row >
< el-row :gutter = "20" >
< el-col :span = "24" >
< el-form-item label = "选择羊舍" prop = "barnIds" >
< el-select v-model = "addForm.barnIds" multiple filterable placeholder="请选择羊舍" @change="handleBarnChange" >
< el-option v-for = "barn in barns" :key="barn.id" :label="barn.label" :value="barn.value" > < / el -option >
< / el-select >
< / el-form-item >
< / el-col >
< / el-row >
< / el-form >
< template # footer >
< div class = "dialog-footer" >
< el-button type = "primary" @click ="submitAddForm" > 确 定 < / el -button >
< el-button @click ="cancelAdd" > 取 消 < / el -button >
< / div >
< / template >
< / el-dialog >
<!-- 修改检疫记录对话框 -- >
< el-dialog :title = "'修改检疫记录'" v-model = "editOpen" width="500px" append -to -body >
< el-form ref = "editQuarantineRef" :model = "editForm" :rules = "editRules" label -width = " 100px " >
< el-form-item label = "检疫状态" prop = "status" >
< el-select v-model = "editForm.status" placeholder="请选择检疫状态" >
< el-option label = "未检疫" value = "未检疫" > < / el-option >
< el-option label = "检疫中" value = "检疫中" > < / el-option >
< el-option label = "检疫完成" value = "检疫完成" > < / el-option >
< / el-select >
< / el-form-item >
< el-form-item label = "检疫类型" prop = "quarantineType" >
< el-select v-model = "editForm.quarantineType" placeholder="请选择检疫类型" >
< el-option label = "常规检疫" value = "常规检疫" > < / el-option >
< el-option label = "疫病检疫" value = "疫病检疫" > < / el-option >
< el-option label = "进出口检疫" value = "进出口检疫" > < / el-option >
< / el-select >
< / el-form-item >
< el-form-item label = "检疫结果" prop = "result" >
< el-select v-model = "editForm.result" placeholder="请选择检疫结果" >
< el-option label = "阴性" value = "阴性" > < / el-option >
< el-option label = "阳性" value = "阳性" > < / el-option >
< el-option label = "待定" value = "待定" > < / el-option >
< / el-select >
< / el-form-item >
< el-form-item label = "备注" prop = "remark" >
< el-input v-model = "editForm.remark" type="textarea" placeholder="请输入备注" > < / el -input >
< / 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 >
< el-button type = "primary" @click ="submit Edit Form"> 确 定 < / el -button >
< el-button @click ="cancel Edit "> 取 消 < / el -button >
< / div >
< / template >
< / el-dialog >
@ -109,29 +208,110 @@
< / template >
< script setup name = "Quarantine" >
import { listQuarantine , getQuarantine , delQuarantine , addQuarantine , updateQuarantine } from "@/api/biosafety/quarantine"
import { listItems } from "@/api/biosafety/items"
import { listSample } from "@/api/biosafety/sample"
import { useRoute , useRouter } from "vue-router"
const route = useRoute ( )
const router = useRouter ( )
import { listQuarantine , getQuarantine , delQuarantine , addQuarantine , updateQuarantine } from "@/api/biosafety/quarantine" ;
import { listItems } from "@/api/biosafety/items" ;
import { listSample } from "@/api/biosafety/sample" ;
import request from '@/utils/request'
const { proxy } = getCurrentInstance ( )
const { quar _result , quar _status } = proxy . useDict ( 'quar_result' , 'quar_status' )
import { useRoute , useRouter } from "vue-router" ;
const route = useRoute ( ) ;
const router = useRouter ( ) ;
const quarantineList = 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 { proxy } = getCurrentInstance ( ) ;
const { quar _result , quar _status } = proxy . useDict ( 'quar_result' , 'quar_status' ) ;
const quarantineList = 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 quarantineItems = ref ( [ ] ) ;
function getItems ( ) {
listItems ( ) . then ( response => {
console . log ( "检疫项目列表获取成功" , quarantineItems . value ) ;
quarantineItems . value = response . rows . map ( item => ( {
label : item . name ,
value : item . id
} ) ) ;
} ) ;
}
/ / 样 品 类 型
const sampleTypes = ref ( [ ] ) ;
function getSample ( ) {
listSample ( ) . then ( response => {
sampleTypes . value = response . rows . map ( item => ( {
label : item . name ,
value : item . id
} ) ) ;
} ) ;
}
/ / 羊 舍 列 表
const barns = ref ( [ ] ) ;
/** 获取羊舍列表 */
function getBarns ( ) {
request . get ( "/sheepfold_management/sheepfold_management/list" ) . then ( response => {
barns . value = response . rows . map ( item => ( {
label : item . sheepfoldName ,
value : item . id
} ) ) ;
} ) ;
}
/ / 新 增 相 关
const addOpen = ref ( false ) ;
const addForm = ref ( {
sheepIds : [ ] , / / 存 储 已 验 证 的 羊 只 耳 号 列 表
sheepIdInput : '' , / / 单 行 输 入 框 绑 定 的 值
datetime : new Date ( ) . toISOString ( ) . slice ( 0 , 10 ) , / / 设 置 默 认 日 期 为 今 天
quarantineType : '' ,
quarItems : "" ,
sampleType : '' ,
sampler : '' ,
quarantineOfficer : '' ,
barnIds : ""
} ) ;
const addRules = {
sheepIds : [ { required : true , message : "请至少添加一个有效的羊只耳号" , trigger : "blur" } ] ,
datetime : [ { required : true , message : "请选择检疫日期" , trigger : "change" } ] ,
quarItem : [ { required : true , message : "请选择检疫类型" , trigger : "change" } ] ,
sampleType : [ { required : true , message : "请选择样品类型" , trigger : "change" } ]
} ;
const addQuarantineRef = ref ( null ) ;
const invalidSheepId = ref ( false ) ; / / 当 前 输 入 的 耳 号 是 否 无 效
const validSheepId = ref ( false ) ; / / 当 前 输 入 的 耳 号 是 否 已 存 在
const isInputDisabled = ref ( false ) ; / / 输 入 框 是 否 禁 用
/ / 修 改 相 关
const editOpen = ref ( false ) ;
const editForm = ref ( {
id : null ,
status : '' ,
quarantineType : '' ,
result : '' ,
remark : ''
} ) ;
const editRules = {
status : [ { required : true , message : "请选择检疫状态" , trigger : "change" } ] ,
quarantineType : [ { required : true , message : "请选择检疫类型" , trigger : "change" } ]
} ;
const editQuarantineRef = ref ( null ) ;
/ / 查 询 相 关
const data = reactive ( {
form : { } ,
queryParams : {
pageNum : 1 ,
pageSize : 10 ,
@ -143,144 +323,246 @@ const data = reactive({
quarOfficer : null ,
result : null ,
status : null ,
} ,
rules : {
sheepId : [
{ required : true , message : "羊只不能为空" , trigger : "blur" }
] ,
quarItem : [
{ required : true , message : "检疫项目不能为空" , trigger : "change" }
] ,
sampleType : [
{ required : true , message : "样品类型不能为空" , trigger : "change" }
] ,
}
} )
} ) ;
const { queryParams , form , rules } = toRefs ( data )
const { queryParams } = 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 ]
loading . value = true ;
queryParams . value . params = { } ;
if ( null != daterangeDatetime . value && daterangeDatetime . value . length === 2 ) {
queryParams . value . params [ "beginDatetime" ] = daterangeDatetime . value [ 0 ] ;
queryParams . value . params [ "endDatetime" ] = daterangeDatetime . value [ 1 ] ;
}
listQuarantine ( queryParams . value ) . then ( response => {
quarantineList . value = response . rows
total . value = response . total
loading . value = false
} )
quarantineList . value = response . rows ;
total . value = response . total ;
loading . value = false ;
} ) ;
}
/ / 取 消 按 钮
function cancel ( ) {
open . value = false
reset ( )
open . value = false ;
}
/ / 表 单 重 置
function reset ( ) {
form . value = {
id : null ,
sheepId : null ,
datetime : null ,
quarItem : null ,
sampleType : null ,
sampler : null ,
quarOfficer : null ,
result : null ,
status : null ,
updateBy : null ,
updateTime : null ,
createBy : null ,
createTime : null
}
proxy . resetForm ( "quarantineRef" )
addForm . value = {
sheepIds : [ ] ,
sheepIdInput : '' ,
datetime : new Date ( ) . toISOString ( ) . slice ( 0 , 10 ) , / / 重 置 时 也 设 置 默 认 日 期
quarantineType : '' ,
quarItems : "" ,
sampleType : '' ,
sampler : '' ,
quarantineOfficer : '' ,
barnIds : [ ]
} ;
invalidSheepId . value = false ;
validSheepId . value = false ;
proxy . resetForm ( "addQuarantineRef" ) ;
}
/** 搜索 按钮操作 */
/** 搜索 功能 */
function handleQuery ( ) {
queryParams . value . pageNum = 1
getList ( )
queryParams . value . pageNum = 1 ;
getList ( ) ;
}
/** 重置按钮操作 */
function resetQuery ( ) {
daterangeDatetime . value = [ ]
proxy . resetForm ( "queryRef" )
handleQuery ( )
daterangeDatetime . value = [ ] ;
proxy . resetForm ( "queryRef" ) ;
handleQuery ( ) ;
}
/ / 多 选 框 选 中 数 据
function handleSelectionChange ( selection ) {
ids . value = selection . map ( item => item . id )
single . value = selection . length != 1
multiple . value = ! selection . length
ids . value = selection . map ( item => item . id ) ;
single . value = selection . length != 1 ;
multiple . value = ! selection . length ;
}
/** 新增按钮操作 */
function handleAdd ( ) {
reset ( )
open . value = true
title . value = "添加检疫记录"
reset ( ) ;
addOpen . value = true ;
}
/ / 校 验 单 个 羊 只 耳 号
function validateSheepId ( ) {
if ( ! addForm . value . sheepIdInput . trim ( ) ) return ;
invalidSheepId . value = false ;
validSheepId . value = false ;
/ / 禁 用 输 入 框 , 防 止 重 复 提 交
isInputDisabled . value = true ;
request . get ( ` /sheep/sheep/ ${ addForm . value . sheepIdInput . trim ( ) } ` ) . then ( response => {
if ( response . exists ) {
/ / 耳 号 存 在 , 添 加 到 列 表
if ( ! addForm . value . sheepIds . includes ( addForm . value . sheepIdInput . trim ( ) ) ) {
addForm . value . sheepIds . push ( addForm . value . sheepIdInput . trim ( ) ) ;
validSheepId . value = true ;
} else {
proxy . $modal . msgWarning ( "该羊只耳号已添加" ) ;
}
} else {
/ / 耳 号 不 存 在
invalidSheepId . value = true ;
}
} ) . finally ( ( ) => {
/ / 清 空 输 入 框 并 启 用
addForm . value . sheepIdInput = '' ;
isInputDisabled . value = false ;
} ) ;
}
/ / 移 除 羊 只 耳 号
function removeSheepId ( index ) {
addForm . value . sheepIds . splice ( index , 1 ) ;
}
/ / 处 理 羊 舍 变 更
function handleBarnChange ( barnIds ) {
if ( ! barnIds || barnIds . length === 0 ) return ;
/ / 这 里 需 要 调 用 接 口 获 取 选 中 羊 舍 中 的 所 有 羊 只 耳 号
/ / 并 将 它 们 添 加 到 输 入 框 中
/ / 示 例 代 码 , 实 际 接 口 可 能 不 同
let allSheepIds = addForm . value . sheepIds ;
barnIds . forEach ( barnId => {
/ / 模 拟 从 羊 舍 获 取 耳 号 , 实 际 应 替 换 为 真 实 接 口
const barnSheepIds = getSheepIdsFromBarn ( barnId ) ;
barnSheepIds . forEach ( sheepId => {
if ( ! allSheepIds . includes ( sheepId ) ) {
/ / 验 证 耳 号 有 效 性
request . get ( ` /sheep/sheep/ ${ sheepId } ` ) . then ( response => {
if ( response . exists && ! allSheepIds . includes ( sheepId ) ) {
allSheepIds . push ( sheepId ) ;
addForm . value . sheepIds = [ ... allSheepIds ] ;
}
} ) ;
}
} ) ;
} ) ;
}
/** 模拟从羊舍获取耳号(实际应替换为接口调用) */
function getSheepIdsFromBarn ( barnId ) {
/ / 模 拟 数 据 , 实 际 应 从 接 口 获 取
const barnSheepMap = {
1 : [ 'E001' , 'E002' , 'E003' ] ,
2 : [ 'E004' , 'E005' ] ,
3 : [ 'E006' ]
} ;
return barnSheepMap [ barnId ] || [ ] ;
}
/** 提交新增表单 */
function submitAddForm ( ) {
addQuarantineRef . value . validate ( valid => {
if ( valid ) {
if ( addForm . value . sheepIds . length === 0 ) {
proxy . $modal . msgError ( "请至少添加一个有效的羊只耳号" ) ;
return ;
}
const data = {
... addForm . value ,
sheepIds : addForm . value . sheepIds ,
quarItems : addForm . value . quarItems . join ( ',' ) ,
} ;
addQuarantine ( data ) . then ( response => {
proxy . $modal . msgSuccess ( "新增成功" ) ;
addOpen . value = false ;
getList ( ) ;
} ) ;
}
} ) ;
}
/** 取消新增 */
function cancelAdd ( ) {
addOpen . value = false ;
}
/** 修改按钮操作 */
function handleUpdate ( row ) {
reset ( )
const _id = row . id || ids . value
reset EditForm ( ) ;
const _id = row . id || ids . value ;
getQuarantine ( _id ) . then ( response => {
form . value = response . data
open . value = true
title . value = "修改检疫记录"
} )
editForm . value = {
... response . data ,
status : response . data . status ,
quarantineType : response . data . quarantineType ,
result : response . data . result ,
remark : response . data . remark
} ;
editOpen . value = true ;
} ) ;
}
/** 提交按钮 */
function submitForm ( ) {
proxy . $refs [ "quarantineRef" ] . validate ( valid => {
/** 重置修改表单 */
function resetEditForm ( ) {
editForm . value = {
id : null ,
status : '' ,
quarantineType : '' ,
result : '' ,
remark : ''
} ;
proxy . resetForm ( "editQuarantineRef" ) ;
}
/** 提交修改表单 */
function submitEditForm ( ) {
editQuarantineRef . value . validate ( valid => {
if ( valid ) {
if ( form . value . id != null ) {
updateQuarantine ( form . value ) . then ( response => {
proxy . $modal . msgSuccess ( "修改成功" )
open . value = false
getList ( )
} )
} else {
addQuarantine ( form . value ) . then ( response => {
proxy . $modal . msgSuccess ( "新增成功" )
open . value = false
getList ( )
} )
updateQuarantine ( editForm . value ) . then ( response => {
proxy . $modal . msgSuccess ( "修改成功" ) ;
editOpen . value = false ;
getList ( ) ;
} ) ;
}
}
} )
} ) ;
}
/** 取消修改 */
function cancelEdit ( ) {
editOpen . value = false ;
}
/** 删除按钮操作 */
function handleDelete ( row ) {
const _ids = row . id || ids . value
const _ids = row . id || ids . value ;
proxy . $modal . confirm ( '是否确认删除检疫记录编号为"' + _ids + '"的数据项?' ) . then ( function ( ) {
return delQuarantine ( _ids )
return delQuarantine ( _ids ) ;
} ) . then ( ( ) => {
getList ( )
proxy . $modal . msgSuccess ( "删除成功" )
} ) . catch ( ( ) => { } )
getList ( ) ;
proxy . $modal . msgSuccess ( "删除成功" ) ;
} ) . catch ( ( ) => { } ) ;
}
/** 导出按钮操作 */
function handleExport ( ) {
proxy . download ( 'bisosafety/quarantine/export' , {
... queryParams . value
} , ` quarantine_ ${ new Date ( ) . getTime ( ) } .xlsx ` )
} , ` quarantine_ ${ new Date ( ) . getTime ( ) } .xlsx ` ) ;
}
function gotoTreatment ( row ) {
router . push ( { path : '/biosafety/treatment/add' , query : { qId : row . id , sId : row . sheepId } } )
router . push ( { path : '/biosafety/treatment/add' , query : { qId : row . id , sId : row . sheepId } } ) ;
}
getList ( )
getList ( ) ;
getItems ( ) ; / / 获 取 检 疫 项 目 列 表
getSample ( ) ; / / 获 取 样 品 类 型 列 表
getBarns ( ) ; / / 获 取 羊 舍 列 表
< / script >