诊断新增前端代码

This commit is contained in:
piaobo 2025-07-22 15:23:06 +08:00
parent d6ae5f3654
commit 303f890550
5 changed files with 422 additions and 12 deletions

View File

@ -0,0 +1,400 @@
<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="6">
<div class="info-item">
<strong>耳号</strong>{{ sheepInfo.sheepNo || '' }}
</div>
</el-col>
<el-col :span="6">
<div class="info-item">
<strong>性别</strong>{{ sheepInfo.gender }}
</div>
</el-col>
<el-col :span="6">
<div class="info-item">
<strong>品种</strong>{{ sheepInfo.variety || '' }}
</div>
</el-col>
<el-col :span="6">
<div class="info-item">
<strong>羊只类别</strong>{{ sheepInfo.sheepType || '' }}
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<div class="info-item">
<strong>月龄</strong>{{ sheepInfo.monthAge ?? '' }} &nbsp;
</div>
</el-col>
<el-col :span="6">
<div class="info-item">
<strong>胎次</strong>{{ sheepInfo.parity ?? '' }}
</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="datetime">
<el-date-picker v-model="form.datetime" type="date" placeholder="选择日期"
style="width: 100%;" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="发病日期" prop="begindate">
<el-date-picker v-model="form.begindate" type="date" placeholder="选择日期"
style="width: 100%;" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="疾病类型" prop="diseasePName">
<span>{{ form.diseasePName }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="疾病子类型" prop="diseaseName">
<span>{{ form.diseaseName }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="治疗结束日期" prop="enddate">
<el-date-picker v-model="form.enddate" type="date" placeholder="选择日期"
style="width: 100%" :disabled-date="disabledDate" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="治疗天数">
<span>{{ treatDay || 0}} </span>
<!-- <el-input :value="treatDay" readonly style="width: 100%;" /> -->
</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="form.result" placeholder="请选择治疗结果" style="width: 100%;">
<el-option v-for="item in diag_status" :key="item.value" :label="item.label"
:value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="转入羊舍" prop="sheepfoldId">
<el-select v-model="form.sheepfoldId" placeholder="请选择转入羊舍"
style="width: 100%;">
<el-option v-for="item in sheepfolds" :key="item.id" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="备注" prop="comments">
<el-input type="textarea" :rows="3" v-model="form.comments" 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, computed, getCurrentInstance } from 'vue'
import { ElMessage } from 'element-plus'
import { useRoute, useRouter } from 'vue-router'
import useTagsViewStore from "@/store/modules/tagsView.js"
import request from '@/utils/request'
import { listDisease } from '@/api/biosafety/disease'
import { getTreatment } from '@/api/biosafety/treatment'
import { listSheepfold_management } from "@/api/fileManagement/sheepfold_management"
import { addDiagnosis } from "@/api/biosafety/diagnosis"
const { proxy } = getCurrentInstance()
const { diag_status } = proxy.useDict( "diag_status")
const route = useRoute()
const router = useRouter()
const { tId, sId } = route.query
const sheepInfo = ref({
sheepNo: null,
gender: '',
variety: '',
sheepType: '',
monthAge: null,
parity: null,
breed: '',
lactDay: null,
gestDay: null
})
const sheepfolds = ref([])
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,
sheepType: data.name,
monthAge: data.monthAge,
parity: data.parity,
breed: data.breed,
}
})
}
function getTreatmentInfo() {
if (!tId) return
getTreatment(tId).then(response => {
const data = response.data
form.treatId = tId
form.datetime = new Date()
form.begindate = new Date(data.datetime)
form.diseasePName = data.diseasePName
form.diseaseId = data.diseaseId
form.diseasePid = data.diseasePid
form.diseaseName = data.diseaseName
})
}
const parentDiseaseOptions = ref([])
const childDiseaseOptions = ref([])
function getDiseases() {
listDisease().then(response => {
const diseases = proxy.handleTree(response.data, "id", "pid")
parentDiseaseOptions.value = diseases.filter(item => item.pid === 0)
})
}
function handleDiseaseTypeChange(parentId) {
if (!parentId) {
childDiseaseOptions.value = []
form.diseaseName = null
return
}
listDisease({ pid: parentId }).then(response => {
childDiseaseOptions.value = response.data
form.diseaseName = null
})
}
const form = reactive({
datetime: new Date(),
begindate: null,
eventType: '',
diseasePName: null,
diseaseName: null,
result: '',
enddate: null,
comments: '',
sheepId: sId
})
const rules = {
datetime: { required: true, message: '事件日期不能为空', trigger: 'change' },
enddate: { required: true, message: '治疗日期不能为空', trigger: 'change' },
sheepfoldId: { required: true, message: '转入羊舍不能为空', trigger: 'change' },
result: { required: true, message: '治疗结果不能为空', trigger: 'change' }
}
const treatDay = computed(() => {
if (!form.begindate || !form.enddate) return ''
const onset = new Date(form.begindate)
const end = new Date(form.enddate)
const diffTime = end.getTime() - onset.getTime()
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24))
return diffDays
})
function submitForm() {
proxy.$refs.treatmentRef.validate((valid) => {
if (valid) {
const submitData = {
...form,
datetime: form.datetime ? new Date(form.datetime).getTime() : null,
begindate: form.begindate ? new Date(form.begindate).getTime() : null,
endDate: form.endDate ? new Date(form.endDate).getTime() : null,
treatDay: treatDay.value
}
addDiagnosis(submitData).then(response => {
proxy.$modal.msgSuccess("诊断成功")
open.value = false
goBack()
})
} else {
ElMessage.error("请完整填写表单信息!")
return false
}
})
}
//
const disabledDate = (time) => {
return time.getTime() < Date.now() - 8.64e7 // 8.64e7 = 24*60*60*1000
}
const useTagsStore = useTagsViewStore()
const currentTag = router.currentRoute.value
const goBack = () => {
router.go(-1)
useTagsStore.delVisitedView(currentTag)
}
onMounted(() => {
getDiseases()
getTreatmentInfo()
getSheepInfo()
listSheepfold_management().then(res => {
sheepfolds.value = res.rows.map(item => ({ id: item.id, name: item.sheepfoldName }))
})
})
</script>
<style scoped>
.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 {
background-color: #f5f7fa;
padding: 20px;
border-radius: 8px;
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;
}
@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

@ -109,8 +109,7 @@
<el-table v-loading="loading" :data="diagnosisList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="治疗记录id" align="center" prop="treatId" />
<el-table-column label="羊只id" align="center" prop="sheepId" />
<el-table-column label="耳号" align="center" prop="sheepNo" />
<el-table-column label="时间日期" align="center" prop="datetime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.datetime, '{y}-{m}-{d}') }}</span>
@ -137,6 +136,7 @@
<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="['diagnosis:diagnosis:edit']">修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['diagnosis:diagnosis:remove']">删除</el-button>
</template>
</el-table-column>
@ -213,7 +213,7 @@
</template>
<script setup name="Diagnosis">
import { listDiagnosis, getDiagnosis, delDiagnosis, addDiagnosis, updateDiagnosis } from "@/api/diagnosis/diagnosis"
import { listDiagnosis, getDiagnosis, delDiagnosis, addDiagnosis, updateDiagnosis } from "@/api/biosafety/diagnosis"
const { proxy } = getCurrentInstance()

View File

@ -51,7 +51,7 @@
<template #default="scope"><dict-tag :options="quar_status" :value="scope.row.status" /></template>
</el-table-column>
<el-table-column label="备注" align="center" prop="comment" />
<el-table-column label="操作" align="center" width="200">
<el-table-column label="操作" align="center" width="200" fixed="right">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
v-hasPermi="['bisosafety:quarantine:edit']">检疫</el-button>

View File

@ -57,9 +57,10 @@
<el-table-column label="疾病类型" align="center" prop="diseaseName" />
<el-table-column label="兽医" align="center" prop="veterinary" />
<el-table-column label="备注" align="center" prop="comment" />
<el-table-column label="操作" align="center" width="180">
<el-table-column label="操作" align="center" width="200" fixed="right">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)">修改</el-button>
<el-button link type="primary" @click="gotDiag(scope.row)">诊断</el-button>
<el-button link type="danger" icon="Delete" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
@ -215,12 +216,12 @@
<el-form-item label="品种:">
<el-text>{{ editForm.variety }}</el-text>
</el-form-item>
</el-col>
</el-col>
<el-col :span="6">
<el-form-item label="羊只类别:">
<el-text>{{ editForm.sheepType }}</el-text>
</el-form-item>
</el-col>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
@ -233,12 +234,12 @@
<el-text>{{ editForm.parity }}</el-text>
</el-form-item>
</el-col>
<el-col :span="6">
<el-col :span="6">
<el-form-item label="繁殖状态">
<el-text>{{ editForm.breed }}</el-text>
</el-form-item>
</el-col>
<el-col :span="6">
<el-col :span="6">
<el-form-item label="泌乳天数">
<el-text>{{ editForm.lactDay }}</el-text>
</el-form-item>
@ -249,7 +250,7 @@
<el-form-item label="怀孕天数">
<el-text>{{ editForm.gestDay }}</el-text>
</el-form-item>
</el-col>
</el-col>
</el-row>
<!-- 可编辑内容 -->
@ -304,9 +305,9 @@
</el-select>
</template>
</el-table-column>
<el-table-column label="用量">
<el-table-column label="用量" width="160">
<template #default="scope">
<el-input-number v-model="scope.row.dosage" :min="0" :precision="1" />
<el-input-number v-model="scope.row.dosage" :min="0" :precision="1" style="width: 120px;" />
</template>
</el-table-column>
<el-table-column label="单位">
@ -373,6 +374,9 @@ import { listUnit } from '@/api/biosafety/unit'
import { listUsage } from '@/api/biosafety/usage'
import { listMedicine } from '@/api/biosafety/medicine'
import request from '@/utils/request'
import { useRouter } from 'vue-router'
const router = useRouter()
const { proxy } = getCurrentInstance()
const { sheep_gender } = proxy.useDict("sheep_gender")
@ -640,6 +644,12 @@ function handleSelectionChange(selection) {
multiple.value = !selection.length
}
/* 跳转诊疗 */
function gotDiag(row) {
router.push({ path: '/biosafety/diagnosis/add', query: { tId: row.id, sId: row.sheepId } })
}
/* ---------- 初始化 ---------- */
onMounted(() => {
getList()