This commit is contained in:
zyh 2025-07-18 11:35:49 +08:00
commit 08b625b0ae
11 changed files with 1115 additions and 200 deletions

View File

@ -38,7 +38,7 @@ export function updateDisease(data) {
// 删除疾病
export function delDisease(id) {
return request({
url: '/disease/disease/' + id,
url: '/biosafety/disease/' + id,
method: 'delete'
})
}

View File

@ -42,3 +42,11 @@ export function delGroup_management(groupId) {
method: 'delete'
})
}
// 查询所有叶子分组
export function listLeafGroup() {
return request({
url: '/group_management/group_management/leaf',
method: 'get'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询羊只分组关联列表
export function listSheep_grouping(query) {
return request({
url: '/sheep_grouping/sheep_grouping/list',
method: 'get',
params: query
})
}
// 查询羊只分组关联详细
export function getSheep_grouping(id) {
return request({
url: '/sheep_grouping/sheep_grouping/' + id,
method: 'get'
})
}
// 新增羊只分组关联
export function addSheep_grouping(data) {
return request({
url: '/sheep_grouping/sheep_grouping',
method: 'post',
data: data
})
}
// 修改羊只分组关联
export function updateSheep_grouping(data) {
return request({
url: '/sheep_grouping/sheep_grouping',
method: 'put',
data: data
})
}
// 删除羊只分组关联
export function delSheep_grouping(id) {
return request({
url: '/sheep_grouping/sheep_grouping/' + id,
method: 'delete'
})
}

View File

@ -1,151 +0,0 @@
<!-- QuarantineFormDialog.vue -->
<template>
<el-dialog :title="title" v-model="visible" width="500px" append-to-body @close="reset">
<el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
<el-form-item label="羊只耳号" prop="sheepNo">
<el-input v-model="form.sheepNo" placeholder="请输入耳号" @blur="fetchSheepInfo" />
</el-form-item>
<el-form-item label="羊只性别">
<el-input v-model="form.gender" readonly />
</el-form-item>
<el-form-item label="羊只类别">
<el-input v-model="form.sheepType" readonly />
</el-form-item>
<el-form-item label="月龄">
<el-input v-model="form.monthAge" readonly />
</el-form-item>
<el-form-item label="繁育状态">
<el-input v-model="form.breed" readonly />
</el-form-item>
<el-form-item label="检疫日期" prop="datetime">
<el-date-picker v-model="form.datetime" type="date" value-format="YYYY-MM-DD" placeholder="请选择日期" />
</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-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-form-item>
</el-form>
<template #footer>
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</template>
</el-dialog>
</template>
<script setup name="QuarantineFormDialog">
import { ref, reactive, nextTick } from 'vue'
import { getQuarantine, addQuarantine, updateQuarantine } from '@/api/biosafety/quarantine'
const { proxy } = getCurrentInstance()
const { pres_status, pres_type } = proxy.useDict('pres_status', 'pres_type')
const emit = defineEmits(['success'])
const visible = ref(false)
const title = ref('')
const formRef = ref()
const form = reactive({
id: null,
sheepId: null,
sheepNo: '',
gender: '',
sheepType: '',
monthAge: '',
breed: '',
datetime: '',
result: null,
status: null
})
const rules = {
sheepNo: [{ required: true, message: '请输入耳号', trigger: 'blur' }],
datetime: [{ required: true, message: '请选择日期', trigger: 'change' }],
result: [{ required: true, message: '请选择结果', trigger: 'change' }],
status: [{ required: true, message: '请选择状态', trigger: 'change' }]
}
function open(row = null) {
reset()
if (row && row.id) {
title.value = '修改检疫记录'
getQuarantine(row.id).then(res => {
Object.assign(form, res.data)
visible.value = true
})
} else {
title.value = '新增检疫记录'
visible.value = true
}
}
function fetchSheepInfo() {
if (!form.sheepNo) return
getSheepByEarNo(form.sheepNo).then(res => {
if (res.data) {
Object.assign(form, {
sheepId: res.data.id,
gender: res.data.gender,
sheepType: res.data.sheepType,
monthAge: res.data.monthAge,
breed: res.data.breed
})
} else {
proxy.$modal.msgError('未找到该耳号对应的羊只')
}
})
}
function submit() {
formRef.value.validate(valid => {
if (!valid) return
const api = form.id ? updateQuarantine : addQuarantine
api(form).then(() => {
proxy.$modal.msgSuccess(form.id ? '修改成功' : '新增成功')
visible.value = false
emit('success')
})
})
}
function reset() {
Object.assign(form, {
id: null,
sheepId: null,
sheepNo: '',
gender: '',
sheepType: '',
monthAge: '',
breed: '',
datetime: '',
result: null,
status: null
})
nextTick(() => formRef.value?.clearValidate())
}
function cancel() {
visible.value = false
}
defineExpose({ open })
</script>

View File

@ -1,13 +1,12 @@
<!-- QuarantineList.vue -->
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="羊只" prop="sheepId">
<el-input v-model="queryParams.sheepId" placeholder="请输入耳号" clearable @keyup.enter="handleQuery" />
<el-input v-model="queryParams.sheepId" placeholder="请输入羊只" clearable @keyup.enter="handleQuery" />
</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="结束日期" />
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@ -17,8 +16,22 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="openDialog()">新增</el-button>
<el-button type="primary" plain icon="Plus" @click="handleAdd"
v-hasPermi="['bisosafety:quarantine:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
v-hasPermi="['bisosafety:quarantine:edit']">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
v-hasPermi="['bisosafety:quarantine:remove']">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport"
v-hasPermi="['bisosafety:quarantine:export']">导出</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="quarantineList" @selection-change="handleSelectionChange">
@ -30,6 +43,7 @@
</template>
</el-table-column>
<el-table-column label="羊只性别" align="center" prop="gender" />
<el-table-column label="羊只类别" align="center" prop="sheepType" />
<el-table-column label="月龄" align="center" prop="monthAge" />
<el-table-column label="繁育状态" align="center" prop="breed" />
@ -47,69 +61,226 @@
<dict-tag :options="quar_status" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="200">
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200px">
<template #default="scope">
<el-button link type="primary" @click="openDialog(scope.row)">检疫</el-button>
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
v-hasPermi="['bisosafety:quarantine:edit']">检疫</el-button>
<el-button link type="success" @click="gotoTreatment(scope.row)" v-if="scope.row.result == 1">治疗</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
v-hasPermi="['bisosafety:quarantine:remove']">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" />
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
@pagination="getList" />
<!-- 弹窗组件 -->
<add ref="dialogRef" @success="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-form-item>
<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-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-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-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="QuarantineList">
import { listQuarantine } from '@/api/biosafety/quarantine'
import add from './add.vue'
<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()
const { proxy } = getCurrentInstance()
const { quar_result, quar_status } = proxy.useDict('quar_result', 'quar_status')
const dialogRef = ref()
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 queryParams = reactive({
pageNum: 1,
pageSize: 10,
sheepId: null,
params: {}
const data = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
sheepId: null,
datetime: null,
quarItem: null,
sampleType: null,
sampler: null,
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)
/** 查询检疫记录列表 */
function getList() {
loading.value = true
queryParams.params = {}
if (daterangeDatetime.value && daterangeDatetime.value.length === 2) {
queryParams.params.beginDatetime = daterangeDatetime.value[0]
queryParams.params.endDatetime = daterangeDatetime.value[1]
queryParams.value.params = {}
if (null != daterangeDatetime && '' != daterangeDatetime) {
queryParams.value.params["beginDatetime"] = daterangeDatetime.value[0]
queryParams.value.params["endDatetime"] = daterangeDatetime.value[1]
}
listQuarantine(queryParams).then(res => {
quarantineList.value = res.rows
total.value = res.total
listQuarantine(queryParams.value).then(response => {
quarantineList.value = response.rows
total.value = response.total
loading.value = false
})
}
function openDialog(row = null) {
dialogRef.value.open(row)
//
function cancel() {
open.value = false
reset()
}
//
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")
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.pageNum = 1
queryParams.value.pageNum = 1
getList()
}
/** 重置按钮操作 */
function resetQuery() {
proxy.resetForm('queryRef')
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
}
/** 新增按钮操作 */
function handleAdd() {
reset()
open.value = true
title.value = "添加检疫记录"
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset()
const _id = row.id || ids.value
getQuarantine(_id).then(response => {
form.value = response.data
open.value = true
title.value = "修改检疫记录"
})
}
/** 提交按钮 */
function submitForm() {
proxy.$refs["quarantineRef"].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()
})
}
}
})
}
/** 删除按钮操作 */
function handleDelete(row) {
const _ids = row.id || ids.value
proxy.$modal.confirm('是否确认删除检疫记录编号为"' + _ids + '"的数据项?').then(function () {
return delQuarantine(_ids)
}).then(() => {
getList()
proxy.$modal.msgSuccess("删除成功")
}).catch(() => { })
}
/** 导出按钮操作 */
function handleExport() {
proxy.download('bisosafety/quarantine/export', {
...queryParams.value
}, `quarantine_${new Date().getTime()}.xlsx`)
}
function gotoTreatment(row) {
router.push({ path: '/biosafety/treatment/add', query: { qId: row.id,sId:row.sheepId } })
}
getList()
</script>

View File

@ -0,0 +1,567 @@
<template>
<div class="add-treatment">
<el-container style="height:100vh;display:flex;flex-direction:column;">
<el-main style="padding:0;flex:1;display:flex;flex-direction:column;">
<div class="content-wrapper">
<h2 class="page-title">添加治疗记录</h2>
<div class="treatment-container">
<!-- 羊只信息只读展示 -->
<div class="sheep-info-section">
<el-row :gutter="20">
<el-col :span="8">
<div class="info-item">
<strong>耳号</strong>{{ sheepInfo.sheepNo || '' }}
</div>
</el-col>
<el-col :span="8">
<div class="info-item">
<strong>性别</strong>{{ sheepInfo.gender || '' }}
</div>
</el-col>
<el-col :span="8">
<div class="info-item">
<strong>品种</strong>{{ sheepInfo.variety || '' }}
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<div class="info-item">
<strong>羊只类别</strong>{{ sheepInfo.name || '' }}
</div>
</el-col>
<el-col :span="8">
<div class="info-item">
<strong>月龄</strong>{{ sheepInfo.monthAge ?? '' }} &nbsp;
</div>
</el-col>
<el-col :span="8">
<div class="info-item">
<strong>胎次</strong>{{ sheepInfo.parity ?? '' }}
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<div class="info-item">
<strong>繁殖状态</strong>{{ sheepInfo.breed || '' }}
</div>
</el-col>
<el-col :span="8">
<div class="info-item">
<strong>怀孕天数</strong>{{ sheepInfo.gestationDay ?? '' }} &nbsp;
</div>
</el-col>
<el-col :span="8">
<div class="info-item">
<strong>泌乳天数</strong>{{ sheepInfo.lactationDay ?? '' }} &nbsp;
</div>
</el-col>
</el-row>
</div>
<el-form ref="treatmentRef" :model="form" :rules="rules" label-width="140px" status-icon size="large"
class="treatment-form">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="事件日期" prop="eventDate">
<el-date-picker v-model="form.eventDate" type="date" placeholder="选择日期" style="width:100%" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="处方" prop="prescription">
<el-select v-model="selectedPresId" placeholder="请选择处方" style="width:100%" filterable clearable
@change="handleSelectPrescription">
<el-option v-for="item in presOptions" :key="item.id" :label="item.label" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="疾病大类" prop="diseasePid">
<el-select v-model="form.diseasePid" placeholder="请选择疾病大类" style="width:100%"
@change="handleDiseaseTypeChange">
<el-option v-for="item in parentDiseaseOptions" :key="item.id" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="疾病子类型" prop="diseaseId">
<el-select :disabled="!form.diseasePid" v-model="form.diseaseId" placeholder="请选择疾病子类型"
style="width:100%">
<el-option v-for="item in childDiseaseOptions" :key="item.id" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-divider content-position="left">治疗记录</el-divider>
<div class="medication-actions mb20">
<el-button type="primary" icon="Plus" @click="handleAddSwPresDetail">
添加药品
</el-button>
</div>
<div style="margin-bottom:30px;">
<el-table :data="swPresDetailList" border stripe style="width:100%;">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column label="药品" prop="mediId">
<template #default="scope">
<el-select v-model="scope.row.mediId" filterable placeholder="请选择药品" style="width:100%">
<el-option v-for="item in medicines" :key="item.value" :label="item.label"
:value="item.value" />
</el-select>
</template>
</el-table-column>
<el-table-column label="用量" prop="dosage">
<template #default="scope">
<el-input-number v-model="scope.row.dosage" :min="0" :precision="1" placeholder="请输入用量"
controls-position="right" style="width:100%" />
</template>
</el-table-column>
<el-table-column label="单位" prop="unit">
<template #default="scope">
<el-select v-model="scope.row.unitId" placeholder="请选择单位">
<el-option v-for="item in units" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</template>
</el-table-column>
<el-table-column label="使用方法" prop="usageId">
<template #default="scope">
<el-select v-model="scope.row.usageId" placeholder="请选择使用方法" style="width:100%">
<el-option v-for="item in usages" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</template>
</el-table-column>
<el-table-column label="生产厂家" prop="manufacturer">
<template #default="scope">
<el-input v-model="scope.row.manufacturer" placeholder="请输入生产厂家" style="width:100%" />
</template>
</el-table-column>
<el-table-column label="生产批号" prop="batchNumber">
<template #default="scope">
<el-input v-model="scope.row.batchNumber" placeholder="生产批号" style="width:100%" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="100">
<template #default="scope">
<el-button link type="danger" icon="Delete" @click="deletePresDetail(scope.row)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="兽医">
<el-input v-model="form.veterinarian" placeholder="请输入兽医姓名" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="备注">
<el-input type="textarea" :rows="3" v-model="form.comment" placeholder="请输入备注" />
</el-form-item>
<div class="form-footer">
<el-button @click="goBack">取消</el-button>
<el-button type="primary" @click="submitForm">
确定
</el-button>
</div>
</el-form>
</div>
</div>
</el-main>
</el-container>
</div>
</template>
<script setup>
import { ref, reactive, onMounted } from 'vue'
import useTagsViewStore from "@/store/modules/tagsView.js"
import request from '@/utils/request';
import { listDisease } from "@/api/biosafety/disease"
import { listPrescription, getPrescription } from "@/api/biosafety/prescription"
import { listUnit } from "@/api/biosafety/unit"
import { listUsage } from "@/api/biosafety/usage"
import { listMedicine } from "@/api/biosafety/medicine"
import { addTreatment } from '@/api/biosafety/treatment' // API
import { ElMessage } from 'element-plus'
import { useRoute, useRouter } from 'vue-router'
const { proxy } = getCurrentInstance()
const route = useRoute()
const router = useRouter()
const { qId, sId } = route.query;
const sheepInfo = ref({
sheepNo: null,
gender: '',
variety: '',
name: '',
monthAge: null,
parity: null,
breed: '',
lactationDay: null,
gestationDay: null
})
const units = ref([]) //
const usages = ref([]) // 使
const medicines = ref([]) //
function getMedicines() {
listMedicine().then(response => {
medicines.value = response.rows.map(item => ({
value: item.id,
label: item.name
}))
})
}
function getUnit() {
listUnit().then(response => {
units.value = response.rows.map(item => ({
value: item.id,
label: item.name
}))
})
}
function getUsageOptions() {
listUsage().then(response => {
usages.value = response.rows.map(item => ({
value: item.id,
label: item.name
}))
})
}
function getSheepInfo() {
if (!sId) return
request.get(`/sheep_file/sheep_file/${sId}`).then(response => {
const data = response.data
sheepInfo.value = {
sheepNo: data.bsManageTags,
gender: data.gender,
variety: data.variety,
name: data.name,
monthAge: data.monthAge,
parity: data.parity,
breed: data.breed,
lactationDay: data.lactationDay,
gestationDay: data.gestationDay,
}
})
}
const selectedPresId = ref(null)
const presOptions = ref([])
function getPrescriptions() {
const queryParams = {
status: 1, //
persType: 4 //
}
listPrescription(queryParams).then(response => {
presOptions.value = response.rows.map(item => ({
id: item.id,
label: item.name
}))
})
}
function handleSelectPrescription(id) {
if (!id) return
getPrescription(id).then(response => {
const data = response.data
swPresDetailList.value = data.swPresDetailList.map(item => ({
mediId: item.mediId,
dosage: item.dosage,
unitId: item.unitId,
usageId: item.usageId,
}))
})
}
/* 疾病相关 */
const parentDiseaseOptions = ref([]) //
const childDiseaseOptions = ref([]) //
function getDiseases() {
listDisease().then(response => {
const diseases = proxy.handleTree(response.data, "id", "pid")
// pid0
parentDiseaseOptions.value = diseases.filter(item => item.pid === 0)
})
}
function handleDiseaseTypeChange(parentId) {
if (!parentId) {
childDiseaseOptions.value = []
form.diseaseSubtype = null
return
}
//
listDisease({ pid: parentId }).then(response => {
childDiseaseOptions.value = response.data
form.diseaseSubtype = null
})
}
const form = reactive({
eventType: '诊疗',
eventDate: new Date(), //
diseaseParentId: null, //
diseaseSubtype: null, //
veterinarian: '',
comment: '',
sheepId: sId // ID
})
const rules = {
diseasePid: { required: true, message: '疾病大类不能为空', trigger: 'change' },
diseaseId: { required: true, message: '疾病子类型不能为空', trigger: 'change' }
}
const swPresDetailList = ref([
{ mediId: null, dosage: 0, unitId: null, usageId: null, manufacturer: '', batchNumber: '' }
])
const handleAddSwPresDetail = () => {
swPresDetailList.value.push({ mediId: null, dosage: 0, unitId: null, usageId: null, manufacturer: '', batchNumber: '' })
}
const deletePresDetail = (row) => {
const index = swPresDetailList.value.indexOf(row)
if (index !== -1) swPresDetailList.value.splice(index, 1)
}
function submitForm() {
//
if (!form.diseasePid || !form.diseaseId) {
ElMessage.error("请完整填写疾病信息!");
return;
}
if (swPresDetailList.value.length === 0 || swPresDetailList.value.some(item => !item.mediId)) {
ElMessage.error("请至少添加一个药品!");
return;
}
//
const submitData = {
...sheepInfo.value,
...form,
eventDate: form.eventDate ? new Date(form.eventDate).getTime() : null,
usageDetails: swPresDetailList.value.map(item => ({
mediId: item.mediId,
dosage: item.dosage,
unit: item.unitId,
usageId: item.usageId,
manufacturer: item.manufacturer,
batchNumber: item.batchNumber
}))
};
//
addTreatment(submitData).then(response => {
if (response.code === 200) {
ElMessage.success(response.message || "治疗记录添加成功!");
goBack();
} else {
ElMessage.error(response.message || "添加治疗记录失败!");
}
}).catch(error => {
ElMessage.error("请求失败:" + (error.message || "未知错误"));
console.error("提交表单时出错:", error);
});
}
//
const useTagsStore = useTagsViewStore()
const currentTag = router.currentRoute.value;
const goBack = () => {
router.go(-1);
useTagsStore.delVisitedView(currentTag);
};
//
getUnit() //
getUsageOptions() // 使
getMedicines() //
getSheepInfo() //
getPrescriptions() //
getDiseases() //
</script>
<style scoped>
/* ===== 全屏极简样式 ===== */
html,
body,
#app {
height: 100%;
margin: 0;
padding: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
}
.add-treatment {
height: 100vh;
display: flex;
flex-direction: column;
overflow: hidden;
}
.el-container {
height: 100%;
display: flex;
flex-direction: column;
}
.content-wrapper {
flex: 1;
overflow-y: auto;
padding: 20px;
display: flex;
flex-direction: column;
}
.page-title {
margin: 0 0 24px;
font-size: 24px;
font-weight: 600;
color: #303133;
text-align: center;
}
/* 羊只信息部分 */
.treatment-container {
max-width: 1200px;
margin: 0 auto;
width: 100%;
padding: 20px;
box-sizing: border-box;
}
.sheep-info-section {
margin-bottom: 32px;
}
.info-item {
display: flex;
align-items: center;
margin-bottom: 8px;
}
.info-item strong {
color: #606266;
font-weight: 500;
margin-right: 8px;
width: 100px;
}
.info-item span {
color: #303133;
flex: 1;
}
/* 表单样式 */
.treatment-form {
margin: 0 auto;
padding: 0 20px;
flex: 1;
display: flex;
flex-direction: column;
}
.el-form-item {
margin-bottom: 24px;
}
.el-input,
.el-textarea,
.el-select {
width: 100%;
}
/* 按钮样式 */
.form-footer {
margin-top: 40px;
text-align: center;
}
.form-footer .el-button {
padding: 12px 40px;
font-size: 16px;
border-radius: 6px;
}
/* 表格样式 */
.el-table {
border-radius: 8px;
overflow: hidden;
margin-top: 16px;
}
/* 分隔线样式 */
.el-divider {
margin: 32px 0 24px;
}
.el-divider__text {
background: transparent;
color: #606266;
font-size: 16px;
font-weight: 500;
}
/* 药品添加按钮 */
.medication-actions {
display: flex;
justify-content: flex-start;
margin-bottom: 16px;
}
/* 响应式设计 */
@media (max-width: 768px) {
.el-col {
margin-bottom: 16px;
}
.el-row {
margin-bottom: 16px;
}
.info-item {
flex-direction: column;
align-items: flex-start;
margin-bottom: 12px;
}
.info-item strong {
margin-bottom: 6px;
}
}
</style>

View File

@ -1,15 +0,0 @@
<template>
<div>
hanld
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>

View File

@ -170,7 +170,7 @@
</template>
<script setup name="Treatment">
import { listTreatment, getTreatment, delTreatment, addTreatment, updateTreatment } from "@/api/treatment/treatment"
import { listTreatment, getTreatment, delTreatment, addTreatment, updateTreatment } from "@/api/biosafety/treatment"
const { proxy } = getCurrentInstance()

View File

@ -222,8 +222,11 @@
width="120"
sortable
>
<template #header>
<!-- <template #header>
<span style="font-weight: bold; color: #333;">性别</span>
</template> -->
<template #default="scope">
<dict-tag :options="sheep_gender" :value="scope.row.gender"/>
</template>
</el-table-column>
<el-table-column
@ -979,8 +982,11 @@
<script setup name="Sheep_file">
import { listSheep_file, getSheep_file } from "@/api/fileManagement/sheep_file"
const { proxy } = getCurrentInstance()
const { proxy } = getCurrentInstance()
const { sheep_gender } = proxy.useDict('sheep_gender')
const sheep_fileList = ref([])
const open = ref(false)
const loading = ref(true)

View File

@ -0,0 +1,285 @@
<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="groupId">
<el-select
v-model="queryParams.groupId"
placeholder="请选择分组"
clearable
style="width: 200px"
>
<el-option
v-for="g in leafGroupOptions"
:key="g.groupId"
:label="g.groupName"
:value="g.groupId"
/>
</el-select>
</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="['sheep_grouping:sheep_grouping:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="Edit"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['sheep_grouping:sheep_grouping:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['sheep_grouping:sheep_grouping:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="Download"
@click="handleExport"
v-hasPermi="['sheep_grouping:sheep_grouping:export']"
>导出</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="sheep_groupingList" @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="分组ID" align="center" prop="groupId" />
<el-table-column label="分组名称" align="center" prop="groupName">
<template #default="scope">
{{ getGroupName(scope.row.groupId) }}
</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="['sheep_grouping:sheep_grouping:edit']">修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['sheep_grouping:sheep_grouping: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="sheep_groupingRef" :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="groupId">
<el-select v-model="form.groupId" placeholder="请选择分组" clearable>
<el-option
v-for="g in leafGroupOptions"
:key="g.groupId"
:label="g.groupName"
:value="g.groupId"
/>
</el-select>
</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="Sheep_grouping">
import { listSheep_grouping, getSheep_grouping, delSheep_grouping, addSheep_grouping, updateSheep_grouping } from "@/api/fileManagement/sheep_grouping"
import {listLeafGroup} from "@/api/fileManagement/group_management"
const { proxy } = getCurrentInstance()
const sheep_groupingList = 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 leafGroupOptions = ref([])
const data = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
sheepId: null,
groupId: null
},
leafGroupOptions: [],
rules: {
sheepId: [
{ required: true, message: "羊只ID不能为空", trigger: "blur" }
],
groupId: [
{ required: true, message: "分组ID不能为空", trigger: "change" }
]
}
})
const { queryParams, form, rules } = toRefs(data)
/** 查询羊只分组关联列表 */
function getList() {
loading.value = true
listSheep_grouping(queryParams.value).then(response => {
sheep_groupingList.value = response.rows
total.value = response.total
loading.value = false
})
}
//
function cancel() {
open.value = false
reset()
}
//
function reset() {
form.value = {
id: null,
sheepId: null,
groupId: null
}
proxy.resetForm("sheep_groupingRef")
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1
getList()
}
/** 重置按钮操作 */
function resetQuery() {
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()
open.value = true
title.value = "添加羊只分组关联"
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset()
const _id = row.id || ids.value
getSheep_grouping(_id).then(response => {
form.value = response.data
open.value = true
title.value = "修改羊只分组关联"
})
}
/** 提交按钮 */
function submitForm() {
proxy.$refs["sheep_groupingRef"].validate(valid => {
if (valid) {
if (form.value.id != null) {
updateSheep_grouping(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功")
open.value = false
getList()
})
} else {
addSheep_grouping(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 delSheep_grouping(_ids)
}).then(() => {
getList()
proxy.$modal.msgSuccess("删除成功")
}).catch(() => {})
}
/** 导出按钮操作 */
function handleExport() {
proxy.download('sheep_grouping/sheep_grouping/export', {
...queryParams.value
}, `sheep_grouping_${new Date().getTime()}.xlsx`)
}
loadLeafGroups()
getList()
//
function loadLeafGroups() {
listLeafGroup().then(res => {
leafGroupOptions.value = res.data
})
}
// groupId
function getGroupName(id) {
const group = leafGroupOptions.value.find(g => g.groupId === id)
return group ? group.groupName : ''
}
</script>