This commit is contained in:
bicey 2024-06-10 02:22:56 +08:00
parent f3e9ba083b
commit 3a1fac9100
18 changed files with 783 additions and 605 deletions

134
README.md
View File

@ -2,22 +2,22 @@
本次建设的动物信息分为以下功能: 本次建设的动物信息分为以下功能:
1. 数据录入与管理(前端基本完成,接入后端) 1. 数据录入与管理(前端基本完成,接入后端)
系统应提供数据录入功能,允许用户输入动物的基本信息,如种类、年龄、性别、体重、健康状况等。同时,系统应具备数据管理功能,包括数据的查询、修改、删除等操作,以便用户能够方便地管理和维护动物信息。 系统应提供数据录入功能,允许用户输入动物的基本信息,如种类、年龄、性别、体重、健康状况等。同时,系统应具备数据管理功能,包括数据的查询、修改、删除等操作,以便用户能够方便地管理和维护动物信息。
2. 动物档案管理(前端基本完成,接入后端) 2. 动物档案管理(前端基本完成,接入后端)
系统应建立动物档案,记录动物的整个生命周期,包括出生日期、疫苗接种记录、疾病治疗记录、饲养记录等。这有助于跟踪动物的健康状况和饲养情况,为动物提供更好的管理和照顾。 系统应建立动物档案,记录动物的整个生命周期,包括出生日期、疫苗接种记录、疾病治疗记录、饲养记录等。这有助于跟踪动物的健康状况和饲养情况,为动物提供更好的管理和照顾。
3. 饲养管理(前端基本完成,接入后端) 3. 饲养管理(前端基本完成,接入后端)
系统应提供饲养管理功能,包括饲养计划的制定、饲养任务的分配、饲养记录的管理等。这有助于确保动物获得适当的饲料和营养,保持健康生长。 系统应提供饲养管理功能,包括饲养计划的制定、饲养任务的分配、饲养记录的管理等。这有助于确保动物获得适当的饲料和营养,保持健康生长。
4. 健康监测与预警(前端基本完成,接入后端) 4. 健康监测与预警(前端基本完成,接入后端)
系统应具备健康监测功能,定期收集和分析动物的健康数据,如体温、心率、呼吸频率等。同时,系统应提供预警功能,当动物的健康数据出现异常时,及时提醒管理人员采取相应措施。 系统应具备健康监测功能,定期收集和分析动物的健康数据,如体温、心率、呼吸频率等。同时,系统应提供预警功能,当动物的健康数据出现异常时,及时提醒管理人员采取相应措施。
5. 统计分析(前端基本完成,无需后端) 5. 统计分析(前端基本完成,无需后端)
系统应提供统计分析功能,对动物信息、饲养记录、健康数据等进行统计分析,生成各类报表和图表。这有助于管理人员了解动物的整体状况和饲养效果,为决策提供支持。 系统应提供统计分析功能,对动物信息、饲养记录、健康数据等进行统计分析,生成各类报表和图表。这有助于管理人员了解动物的整体状况和饲养效果,为决策提供支持。
6. 用户权限管理(前端基本完成,接入后端) 6. 用户权限管理(前端基本完成,接入后端)
系统应建立用户权限管理机制,对不同用户设置不同的权限,如管理员、饲养员、兽医等。这有助于确保系统的安全性和数据的保密性。 系统应建立用户权限管理机制,对不同用户设置不同的权限,如管理员、饲养员、兽医等。这有助于确保系统的安全性和数据的保密性。
使用的技术/资源: 使用的技术/资源:
@ -26,6 +26,10 @@
- ElementUI - ElementUI
- axios - axios
# 说明
首页统计面板没有对接后端,无法操作,只做观赏作用
其余界面均实现基本的增删改查,健康监测等复杂的功能没有实现
# 需要后端提供的数据 # 需要后端提供的数据
一切以最终实现的接口为准,你需要前端提供什么数据就什么数据 一切以最终实现的接口为准,你需要前端提供什么数据就什么数据
@ -224,123 +228,3 @@ health: {
## 统计分析 ## 统计分析
--- ---
无需后端 无需后端
## 需求分析
一、引言
动物园信息管理系统旨在为动物园内部人员(如系统管理员、饲养员、兽医等)提供一个便捷、高效的管理工具,以记录动物数据、提高管理效率、保障动物健康和福利。通过该系统,可以实时监控动物的各项体征数据,判断动物是否健康,并根据数据优化动物的生活环境,确保动物处于相对健康的状态。
二、系统用户
1. 系统管理员
- 用户与权限管理:负责创建、修改和删除用户账户,分配不同角色的权限,确保系统数据的安全性和完整性。(用户管理,重要)
- 系统设置与维护:进行系统参数配置,如数据备份策略、系统日志管理等,确保系统的稳定运行。(不重要)
- 数据监控与报告:实时监控动物数据异常情况,生成各类统计报告,为动物园管理层提供决策支持。(统计分析,一般)
3. 饲养员
- 动物日常饲养记录:录入动物的饮食、行为、活动等日常饲养信息,确保数据的准确性和完整性。(饲养管理,重要)
- 饲养计划制定与执行:根据动物种类、年龄、健康状况等因素,制定合理的饲养计划,并监控计划的执行情况。(饲养管理,一般)
- 食物库存管理:预估食物库存情况,及时补充库存,避免食物短缺或浪费。(不重要)
- 报警系统响应:接收系统发出的异常报警,及时处理异常情况,保障动物健康与安全。(不重要)
5. 兽医
- 动物体检数据录入与分析:录入动物的体重、体温、心跳等体征数据,进行健康评估,并生成诊断报告。(动物档案、健康检测,重要)
- 疾病治疗与记录:制定治疗方案,记录治疗过程及效果,为动物健康提供有力保障。(动物档案,重要)
- 报警系统响应:根据系统发出的异常报警,及时对患病动物进行诊断和治疗。(不重要)
三、功能需求
1. 数据管理(重要)
- 信息录入:动物基本信息的录入和管理,包括种类、年龄、性别、体重、健康状况等。(重要)
- 动物日常记录:饲养员可以记录动物的饮食、行为、活动等情况。
- 动物体检数据录入:兽医可以实时更新动物的体重、体温、心跳、呼吸等体征数据,并上传相关诊断报告。
- 动物档案管理:系统应该能够完整记录动物的生命周期信息,如出生日期、疫苗接种记录、疾病治疗记录、饲养记录等,确保数据的完整性和准确性。
3. 数据查询与统计(重要)
- 提供多种查询方式,如按动物种类、年龄、性别等条件查询动物信息。
- 统计动物数量、饲养成本、疾病发生率等数据,为动物园管理提供决策支持。
5. 健康与福利管理(一般)
- 实时监控动物体征数据,设置异常数据阈值,当数据超过阈值时自动报警。
- 提供动物健康评估功能,根据体征数据判断动物健康状态,并给出相应建议。
- 记录动物福利措施实施情况,如改善动物生活环境、增加娱乐设施等。
7. 权限管理(重要)
- 为不同用户角色分配不同的权限,只有授权的用户能够访问系统的特定功能和数据确保系统数据的安全性和完整性。
- 实现用户登录、注销功能,记录用户操作日志,便于追踪和审计。
9. 系统维护与优化(不重要)
- 提供数据备份与恢复功能,确保系统数据的安全可靠。定期备份系统数据,以防止数据丢失或系统故障。
- 支持系统升级和扩展,以适应动物园管理需求的变化。
四、报警系统分级(不一定来得及开发)
报警系统应采用分级制度,根据紧急程度逐级递增决定响应策略。例如,可以设置以下报警级别:
1. 一级报警:涉及动物生命安全或重大疾病的紧急情况,需立即处理。系统可根据预留手机号拨打电话提醒相关人员。
2. 二级报警:动物体征数据异常但未造成严重危害或饲养计划执行不到位等情况,需尽快处理。系统可发送邮件或短信提醒相关人员。
3. 三级报警:日常饲养记录缺失或数据录入错误等较小问题,可安排定期处理。
报警系统闭环管理的流程:
1.**报警触发:**报警系统根据预设的规则和条件,监测动物的健康状况、饲养记录等信息,当发现异常情况符合报警规则时,自动触发相应级别的报警。
2.**通知相关人员:**报警系统根据报警级别选择适的通知方式,通知相关责任人员,如饲养管理员、兽医等。通知方式可以包括电话呼叫、短信、邮件等。
3.**接收报警信息:**相关责任人员接收到报警信息后,需要及时查看并了解报警的具体内容和情况。系统应提供清晰明了的报警信息,包括动物种类、具体问题、位置等。
4.**处理报警:**相关责任人员根据报警信息采取相应的处理措施,针对不同级别的报警,制定相应的应对策略。一级报警需要立即处理,二级报警需要尽快处理,三级报警可以安排定期处理。
5.**解决问题:**相关责任人员在处理报警过程中,需要确保问题得到有效解决。对于一级报警和二级报警,需及时采取措施保障动物的健康和安全;对于三级报警,需要及时查明原因并采取相应措施,避免问题的再次发生。
6.**反馈和记录:**处理报警后,相关责任人员需要向系统反馈处理结果,并在系统中记录处理过程和结果。系统应提供相应的反馈和记录功能,方便责任人员进行操作。
7.**系统优化:**管理人员定期对报警系统的性能进行评估和分析,根据实际情况和反馈信息,对系统进行优化和改进。可以针对报警规则、通知方式、处理流程等方面进行调整,提高报警系统的准确性和效率。
五、饲养计划闭环系统(不一定来得及开发)
饲养计划的闭环是指在动物园信息管理系统中,通过制定、执行、监控和反馈的过程,实现对动物饲养的全面管理和持续优化。以下是饲养计划的闭环流程:
1. **计划制定:**饲养管理员根据动物的种类、年龄、健康状况等因素,制定饲养计划。计划包括每日、每周或每月的饲养任务安排,确定每种动物的饲料类型、数量和喂养时间等。
如果动物患有疾病或健康问题,兽医可以在饲养计划中考虑到这些特殊情况,对饲养计划和管理流程进行调整和优化
2. **任务分配:**系统根据制定的饲养计划,自动将任务分配给相应的饲养员。任务分配考虑到饲养员的工作时间、技能水平和工作负荷等因素,确保任务合理分配。
3. **执行监控:**饲养员执行任务时,实时记录饲养过程中的关键信息,如喂养时间、饲料用量、动物反应等。同时,系统监控饲养过程中的异常情况,如动物健康状况异常、饲料不足等。
4. **数据采集与分析:**系统定期采集和分析动物的健康数据和饲养记录,包括体重变化、食欲情况、疾病发生率等。通过数据分析,及时发现饲养过程中存在的问题和改进空间。
5. **问题反馈与调整:**根据数据分析结果,系统生成饲养效果报告和健康预警信息。管理人员和饲养员根据报告和预警信息,及时调整饲养计划和执行策略,解决存在的问题,并优化饲养过程。
六、饲料库存自动化管理系统(不一定来得及开发)
针对动物园饲料库存管理,建立自动化管理系统同样能够提高效率、降低成本并确保饲料供应的及时性。以下是动物园饲料库存自动化管理的主要内容和流程:
1. **自动化库存登记:**建立自动化系统,对动物园所有饲料进行自动化登记和识别,包括名称、规格、数量、购买日期、供应商信息等,实现饲料信息的自动采集和录入。
2. **库存监控:**实时监测饲料库存的数量、质量和保质期等信息。如有即将过期的饲料,系统会自动发送通知提醒相关人员。通过自动化系统,管理人员可以随时查看库存情况,并及时采取补货或调拨等措施。
3. **智能化补货策略:**根据库存监控数据和需求预测模型,制定智能化的补货策略。系统可以自动分析库存变化趋势和消耗情况,智能生成补货计划,并自动向供应商下订单,实现自动化补货流程。
4. **库存记录和报告:**系统可以自动生成库存记录和报告,包括库存量、成本、动物饲养需求等数据。管理人员可以通过系统查看和分析库存数据,优化饲料库存结构和管理策略。
七、非功能需求(略)
1. 易用性:系统界面简洁明了,操作流程简单易懂,方便用户快速上手。
2. 稳定性:系统应具有高可靠性,能够长时间稳定运行,减少故障率。
3. 安全性:系统应采取必要的安全措施,保护用户数据和系统免受攻击和破坏。
4. 可扩展性:系统应具备良好的可扩展性,以便在未来添加新的功能模块或集成其他系统。
八、总结(略)
动物园信息管理系统旨在提高动物园内部人员的管理效率,保障动物健康和福利。通过实现动物数据管理、数据查询与统计、健康与福利管理等功能,可以优化动物园管理流程,提升动物生活质量。同时,系统还应满足易用性、稳定性、安全性和可扩展性等非功能需求,确保系统的稳定运行和持续发展。

View File

@ -36,6 +36,10 @@ export default {
// //
if (this.data) { if (this.data) {
this.form = copy(this.data) this.form = copy(this.data)
} else {
const newDate = new Date();
this.form.date = newDate.getFullYear() + '-' + (newDate.getMonth()+1).toString().padStart(2, '0') + '-' + newDate.getDate().toString().padStart(2, '0')
this.form.time = newDate.getHours().toString().padStart(2, '0') + ':' + newDate.getMinutes().toString().padStart(2, '0') + ':' + newDate.getSeconds().toString().padStart(2, '0')
} }
}, },
beforeUnmount() { beforeUnmount() {

View File

@ -9,6 +9,11 @@ export default {
order:0 order:0
} }
}, },
watch:{
order(){
this.timeSort()
}
},
props: { props: {
data: { data: {
type: Object, type: Object,
@ -16,20 +21,24 @@ export default {
}, },
}, },
methods: { methods: {
sort(){ //
// timeSort() {
if (this.order===0){ //0
this.order++ if (this.order === 0) {
sortByDateTime(this.archives) this.archives = sortByDateTime(copy(this.archives))
return return
} }
// //1
if (this.order===1){ if (this.order === 1) {
this.order-- this.archives = sortByDateTime(copy(this.archives)).reverse()
sortByDateTime(this.archives) return;
this.archives.reverse()
} }
}, },
changeOrder(){
if (this.order===0)
this.order++
else this.order--
},
nodeType(type) { nodeType(type) {
if (type === '日常饲养') { if (type === '日常饲养') {
return 'success' return 'success'
@ -50,13 +59,19 @@ export default {
} }
} }
}, },
mounted() { mounted() {
// //
if (this.data) { if (this.data) {
this.archives = copy(this.data) this.archives = copy(this.data)
// //
this.sort() this.timeSort()
}
},
updated() {
if (this.data) {
this.archives = copy(this.data)
//
this.timeSort()
} }
}, },
beforeUnmount() { beforeUnmount() {
@ -67,7 +82,7 @@ export default {
<template> <template>
<div class="relative" style="height: 40px"> <div class="relative" style="height: 40px">
<el-button type="primary" class="right" @click="sort()">按时间升 / 降序</el-button> <el-button type="primary" class="right" @click="changeOrder()">按时间升 / 降序</el-button>
</div> </div>
<el-scrollbar height="500px"> <el-scrollbar height="500px">
<el-timeline style="max-width: 600px"> <el-timeline style="max-width: 600px">

View File

@ -19,7 +19,7 @@ export default {
} }
}, },
mounted() { mounted() {
// console.log('auth', this.loginUser)
} }
} }

View File

@ -6,7 +6,7 @@ export default {
data() { data() {
return { return {
form: { form: {
id: '',//int id id: null,//int id
name: '',// name: '',//
species: '',// species: '',//
sex: '雄性',// sex: '雄性',//

View File

@ -37,6 +37,10 @@ export default {
// //
if (this.data) { if (this.data) {
this.form = copy(this.data) this.form = copy(this.data)
}else {
const newDate = new Date();
this.form.date = newDate.getFullYear() + '-' + (newDate.getMonth()+1).toString().padStart(2, '0') + '-' + newDate.getDate().toString().padStart(2, '0')
this.form.time = newDate.getHours().toString().padStart(2, '0') + ':' + newDate.getMinutes().toString().padStart(2, '0') + ':' + newDate.getSeconds().toString().padStart(2, '0')
} }
}, },
beforeUnmount() { beforeUnmount() {

View File

@ -9,6 +9,11 @@ export default {
order: 0 order: 0
} }
}, },
watch:{
order(){
this.timeSort()
}
},
props: { props: {
data: { data: {
type: Object, type: Object,
@ -16,20 +21,24 @@ export default {
}, },
}, },
methods: { methods: {
sort() { //
// timeSort() {
//0
if (this.order === 0) { if (this.order === 0) {
this.order++ this.healths = sortByDateTime(copy(this.healths))
sortByDateTime(this.healths)
return return
} }
// //1
if (this.order === 1) { if (this.order === 1) {
this.order-- this.healths = sortByDateTime(copy(this.healths)).reverse()
sortByDateTime(this.healths) return;
this.healths.reverse()
} }
}, },
changeOrder(){
if (this.order===0)
this.order++
else this.order--
},
nodeType(type) { nodeType(type) {
if (type === 0) { if (type === 0) {
return 'success' return 'success'
@ -45,7 +54,15 @@ export default {
if (this.data) { if (this.data) {
this.healths = copy(this.data) this.healths = copy(this.data)
// //
this.sort() this.timeSort()
}
},
updated() {
//
if (this.data) {
this.healths = copy(this.data)
//
this.timeSort()
} }
}, },
beforeUnmount() { beforeUnmount() {
@ -56,7 +73,7 @@ export default {
<template> <template>
<div class="relative" style="height: 40px"> <div class="relative" style="height: 40px">
<el-button type="primary" class="right" @click="sort()">按时间升 / 降序</el-button> <el-button type="primary" class="right" @click="changeOrder()">按时间升 / 降序</el-button>
</div> </div>
<el-scrollbar height="500px"> <el-scrollbar height="500px">
<el-timeline style="max-width: 600px"> <el-timeline style="max-width: 600px">

View File

@ -4,7 +4,7 @@ import {Delete, Document, DocumentAdd, Edit, Search, Tickets} from "@element-plu
import ZooAnimalFormDialog from "@/components/ZooAnimalFormDialog.vue"; import ZooAnimalFormDialog from "@/components/ZooAnimalFormDialog.vue";
import {mapMutations, mapState} from "vuex"; import {mapMutations, mapState} from "vuex";
import ZooArchiveTimeline from "@/components/ZooArchiveTimeline.vue"; import ZooArchiveTimeline from "@/components/ZooArchiveTimeline.vue";
import request, {frontendAnimal, frontendAnimals} from "@/utils/request.js"; import request, {frontendAnimal, frontendAnimals, frontendArchives} from "@/utils/request.js";
export default { export default {
name: "ZooAnimal", name: "ZooAnimal",
@ -118,23 +118,35 @@ export default {
} }
// //
request.updateAnimalRequest(data).then(response => { //
if (response.data.code===1){ request.queryAnimalRequest(data.id).then(response => {
// if (response.data.data===null){
// this.refresh();
this.refresh() this.dialog.editDialogVisible = false;
this.dialog.editDialogVisible = false//
return ElMessage({ return ElMessage({
message: '编辑成功', message: '该动物不存在,请刷新',
type: 'success',
})
}else {
return ElMessage({
message: '编辑失败',
type: 'warning', type: 'warning',
}) })
} else {
request.updateAnimalRequest(data).then(response => {
if (response.data.code===1){
//
//
this.refresh()
this.dialog.editDialogVisible = false//
return ElMessage({
message: '编辑成功',
type: 'success',
})
}else {
return ElMessage({
message: '编辑失败',
type: 'warning',
})
}
})
} }
}) })
}, },
@ -198,7 +210,7 @@ export default {
request.addAnimalRequest(data).then(response => { request.addAnimalRequest(data).then(response => {
if (response.data.code===1){ if (response.data.code===1){
// //
// //
this.refresh() this.refresh()
@ -221,21 +233,26 @@ export default {
showTimeline(data) { showTimeline(data) {
console.log('显示时间线记录', data) console.log('显示时间线记录', data)
// this.dialog.dialogData = data
//
this.dialog.dialogData = this.animals.find(e => e.id === data.id)
this.dialog.timelineData = []
// //
// request.queryAnimalRequest(data.id).then(response => {
this.archives.forEach(e => { if (response.data.data===null){
if (e.animalId === data.id) { this.refresh();
this.dialog.timelineData.push(copy(e)) return ElMessage({
message: '该动物不存在,请刷新',
type: 'warning',
})
} else {
request.queryArchiveRequest(null,data.id).then(response => {
if (response.data.code===1){
this.dialog.timelineData = frontendArchives(response.data.data)
//
this.dialog.timelineDialogVisible = true
}
})
} }
}) })
//
this.dialog.timelineDialogVisible = true
}, },
// //
@ -401,7 +418,8 @@ export default {
</div> </div>
<!-- 添加动物对话框--> <!-- 添加动物对话框-->
<el-dialog v-model="dialog.addDialogVisible" title="添加动物" width="500" align-center draggable overflow destroy-on-close> <el-dialog v-model="dialog.addDialogVisible" title="添加动物" width="500" align-center draggable overflow
destroy-on-close>
<ZooAnimalFormDialog> <ZooAnimalFormDialog>
<template #default="scope"> <template #default="scope">
<el-button @click="dialog.addDialogVisible = false"> <el-button @click="dialog.addDialogVisible = false">
@ -442,9 +460,8 @@ export default {
</el-dialog> </el-dialog>
<!--查看动物所有记录--> <!--查看动物所有记录-->
<el-dialog v-model="dialog.timelineDialogVisible" :title="'动物档案:'+dialog.dialogData.id" width="600" align-center <el-dialog v-model="dialog.timelineDialogVisible" :title="'生命周期档案:'+dialog.dialogData.id" width="600" align-center
draggable overflow draggable overflow destroy-on-close>
destroy-on-close>
<ZooArchiveTimeline :data="dialog.timelineData"> <ZooArchiveTimeline :data="dialog.timelineData">
<!-- <template #operate="scope">--> <!-- <template #operate="scope">-->
<!-- <el-button type="primary" link @click="showEdit(scope.archive)">编辑</el-button>--> <!-- <el-button type="primary" link @click="showEdit(scope.archive)">编辑</el-button>-->

View File

@ -4,6 +4,7 @@ import {Delete, DocumentAdd, Document, Edit, Search, Tickets, Timer} from "@elem
import {mapState, mapActions, mapMutations} from "vuex"; import {mapState, mapActions, mapMutations} from "vuex";
import {copy, splitKeyWords, fuzzyMatching, sortByDateTime} from "@/utils/common.js"; import {copy, splitKeyWords, fuzzyMatching, sortByDateTime} from "@/utils/common.js";
import ZooArchiveTimeline from "@/components/ZooArchiveTimeline.vue"; import ZooArchiveTimeline from "@/components/ZooArchiveTimeline.vue";
import request, {frontendArchive, frontendArchives} from "@/utils/request.js";
export default { export default {
name: "ZooArchive", name: "ZooArchive",
@ -74,19 +75,26 @@ export default {
} }
}, },
methods: { methods: {
...mapActions(["getArchives"]), ...mapMutations(['updateArchives','updateArchivesTableData']),
...mapMutations(['updateArchivesTableData']),
// //
showDetail(data) { showDetail(data) {
console.log('显示详情', data) console.log('显示详情', data)
// //
// request.queryArchiveRequest(data.id,null).then(response => {
this.dialog.dialogData = this.archives.find(e => e.id === data.id) if (response.data.data === null) {
this.refresh()
// return ElMessage({
this.dialog.detailDialogVisible = true message: '该档案记录不存在,请刷新',
type: 'warning',
})
}else {
this.dialog.dialogData = frontendArchive(response.data.data)
//
this.dialog.detailDialogVisible = true
}
})
}, },
// //
@ -94,45 +102,66 @@ export default {
console.log('显示编辑', data) console.log('显示编辑', data)
// //
// request.queryArchiveRequest(data.id,null).then(response => {
this.dialog.dialogData = this.archives.find(e => e.id === data.id) if (response.data.data === null) {
this.refresh()
// return ElMessage({
this.dialog.editDialogVisible = true message: '该记录不存在,请刷新',
type: 'warning',
})
}else {
this.dialog.dialogData = frontendArchive(response.data.data)
//
this.dialog.editDialogVisible = true
}
})
}, },
edit(data) { edit(data) {
console.log('编辑', data) console.log('编辑', data)
// //
return this.isEmpty(data); if (this.isEmpty(data)) {
return;
}
// //
// //
if (false) { request.queryArchiveRequest(data.id,null).then(response => {
return ElMessage({ if (response.data.data === null) {
message: '编辑失败', this.refresh()
type: 'warning', this.dialog.editDialogVisible = false;
}) return ElMessage({
} message: '该档案记录不存在,请刷新',
type: 'warning',
})
}else {
request.updateArchiveRequest(data).then(response => {
if (response.data.code===1){
//
//
this.refresh()
request.queryArchiveRequest(null,this.dialog.dialogData.animalId).then(response => {
if (response.data.code===1){
this.dialog.timelineData = frontendArchives(response.data.data)
}
})
// this.dialog.editDialogVisible = false//
if (false) {
return ElMessage({
message: '编辑成功',
type: 'success',
})
}
// // return ElMessage({
// this.getArchives() message: '编辑成功',
// this.search() type: 'success',
})
// }else {
this.refresh() return ElMessage({
message: '编辑失败',
// type: 'warning',
this.dialog.editDialogVisible = false })
}
})
}
})
}, },
delete_(data) { delete_(data) {
@ -147,19 +176,38 @@ export default {
type: 'warning', type: 'warning',
} }
).then(() => { ).then(() => {
// //
request.queryArchiveRequest(data.id,null).then(response => {
if (response.data.data === null) {
this.refresh()
return ElMessage({
message: '该档案记录不存在,请刷新',
type: 'warning',
})
}else {
//
request.deleteArchiveRequest(data.id).then(response => {
if (response.data.code===1){
//
this.refresh()
request.queryArchiveRequest(null,this.dialog.dialogData.animalId).then(response => {
if (response.data.code===1){
this.dialog.timelineData = frontendArchives(response.data.data)
}
})
// // return ElMessage({
// this.getArchives() message: '删除成功',
// this.search() type: 'success',
})
// }else {
this.refresh() return ElMessage({
message: '删除失败',
// type: 'warning',
ElMessage({ })
type: 'success', }
message: '删除成功', })
}
}) })
}).catch(() => { }).catch(() => {
ElMessage({ ElMessage({
@ -173,61 +221,53 @@ export default {
console.log('添加', data) console.log('添加', data)
// //
return this.isEmpty(data); if (this.isEmpty(data)) {
return;
//
//
if (false) {
return ElMessage({
message: '该记录已存在',
type: 'warning',
})
} }
//
if (false) {
return ElMessage({
message: '添加成功',
type: 'success',
})
}
// //
// this.getArchives()
// this.search()
// request.addArchiveRequest(data).then(response => {
this.refresh() if (response.data.code===1){
//
//
this.refresh()
this.dialog.addDialogVisible = false// this.dialog.addDialogVisible = false//
return ElMessage({
message: '添加成功',
type: 'success',
})
}else {
return ElMessage({
message: '添加失败',
type: 'warning',
})
}
})
}, },
//线 //线
showTimeline(data) { showTimeline(data) {
console.log('显示时间线记录', data) console.log('显示时间线记录', data)
// this.dialog.dialogData = data
//
this.dialog.dialogData = this.archives.find(e => e.id === data.id)
this.dialog.timelineData = [] //
// request.queryArchiveRequest(null,data.animalId).then(response => {
// if (response.data.code===1){
this.archives.forEach(e => { this.dialog.timelineData = frontendArchives(response.data.data)
if (e.animalId === data.animalId) { //
this.dialog.timelineData.push(copy(e)) this.dialog.timelineDialogVisible = true
} }
}) })
//
this.dialog.timelineDialogVisible = true
}, },
// //
isEmpty(form) { isEmpty(form) {
if (!form.animalId) { if (!form.animalId||!form.animalName) {
// //
return ElMessage({ return ElMessage({
message: '记录的动物ID不能为空', message: '动物ID或动物名称不能为空',
type: 'warning', type: 'warning',
}) })
} }
@ -310,16 +350,19 @@ export default {
console.log('刷新数据') console.log('刷新数据')
// //
this.getArchives() request.queryArchiveRequest().then(response=>{
if (response.data.code === 1){
this.updateArchives(frontendArchives(response.data.data))
}
//
this.search()
// //
this.search() this.timeSort(this.order)
// //
this.timeSort(this.order) this.getPagesData()
})
//
this.getPagesData()
} }
}, },
mounted() { mounted() {
@ -404,7 +447,8 @@ export default {
</div> </div>
<!-- 添加记录对话框--> <!-- 添加记录对话框-->
<el-dialog v-model="dialog.addDialogVisible" title="添加记录" width="500" align-center draggable overflow> <el-dialog v-model="dialog.addDialogVisible" title="添加记录" width="500" align-center draggable overflow
destroy-on-close>
<ZooArchiveFormDialog> <ZooArchiveFormDialog>
<template #default="scope"> <template #default="scope">
<el-button @click="dialog.addDialogVisible = false"> <el-button @click="dialog.addDialogVisible = false">
@ -446,8 +490,7 @@ export default {
<!--查看动物所有记录--> <!--查看动物所有记录-->
<el-dialog v-model="dialog.timelineDialogVisible" :title="'生命周期档案:'+dialog.dialogData.animalId" width="600" <el-dialog v-model="dialog.timelineDialogVisible" :title="'生命周期档案:'+dialog.dialogData.animalId" width="600"
align-center draggable overflow align-center draggable overflow destroy-on-close>
destroy-on-close>
<ZooArchiveTimeline :data="dialog.timelineData"> <ZooArchiveTimeline :data="dialog.timelineData">
<template #operate="scope"> <template #operate="scope">
<el-button type="primary" link @click="showEdit(scope.archive)">编辑</el-button> <el-button type="primary" link @click="showEdit(scope.archive)">编辑</el-button>

View File

@ -1,8 +1,9 @@
<script> <script>
import ZooBreedingPlanFormDialog from "@/components/ZooBreedingPlanFormDialog.vue"; import ZooBreedingPlanFormDialog from "@/components/ZooBreedingPlanFormDialog.vue";
import {mapState, mapActions, mapMutations} from "vuex"; import {mapState, mapActions, mapMutations} from "vuex";
import {Delete, DocumentAdd, Document,Edit, Search} from "@element-plus/icons-vue"; import {Delete, DocumentAdd, Document, Edit, Search} from "@element-plus/icons-vue";
import {copy, splitKeyWords,fuzzyMatching} from "@/utils/common.js"; import {copy, splitKeyWords, fuzzyMatching} from "@/utils/common.js";
import request, {frontendBreeding, frontendBreedingPlans} from "@/utils/request.js";
export default { export default {
name: "ZooBreeding", name: "ZooBreeding",
@ -25,7 +26,7 @@ export default {
dialogData: {}, dialogData: {},
addDialogVisible: false,// addDialogVisible: false,//
editDialogVisible: false,// editDialogVisible: false,//
detailDialogVisible:false// detailDialogVisible: false//
} }
} }
}, },
@ -48,32 +49,38 @@ export default {
return Document return Document
}, },
//endregion //endregion
...mapState(["breedingPlans",'breedingPlansTableData']) ...mapState(["breedingPlans", 'breedingPlansTableData'])
}, },
watch: { watch: {
// () // ()
searchInput: { searchInput: {
deep: true, deep: true,
handler(val) { handler(val) {
// this.search()
this.refresh(); this.refresh();
} }
} }
}, },
methods: { methods: {
...mapActions(["getBreedingPlans"]), ...mapMutations(['updateBreedingPlans','updateBreedingPlansTableData']),
...mapMutations(['updateBreedingPlansTableData']),
// //
showDetail(data) { showDetail(data) {
console.log('显示详情', data) console.log('显示详情', data)
// //
// request.queryBreedingPlanRequest(data.id).then(response => {
this.dialog.dialogData = this.breedingPlans.find(e => e.id === data.id) if (response.data.data === null) {
this.refresh();
// return ElMessage({
this.dialog.detailDialogVisible = true message: '该计划不存在,请刷新',
type: 'warning',
})
} else {
this.dialog.dialogData = frontendBreeding(response.data.data)
//
this.dialog.detailDialogVisible = true
}
})
}, },
// //
@ -81,45 +88,61 @@ export default {
console.log('显示编辑', data) console.log('显示编辑', data)
// //
// request.queryBreedingPlanRequest(data.id).then(response => {
this.dialog.dialogData = this.breedingPlans.find(e => e.id === data.id) if (response.data.data === null) {
this.refresh();
// return ElMessage({
this.dialog.editDialogVisible = true message: '该计划不存在,请刷新',
type: 'warning',
})
} else {
this.dialog.dialogData = frontendBreeding(response.data.data)
//
this.dialog.editDialogVisible = true
}
})
}, },
edit(data) { edit(data) {
console.log('编辑', data) console.log('编辑', data)
// //
return this.isEmpty(data); if (this.isEmpty(data)) {
return;
}
// //
// //
if (false) { request.queryBreedingPlanRequest(data.id).then(response => {
return ElMessage({ if (response.data.data === null) {
message: '编辑失败', this.refresh();
type: 'warning', this.dialog.editDialogVisible = false;
}) return ElMessage({
} message: '该计划不存在,请刷新',
type: 'warning',
})
} else {
request.updateBreedingPlanRequest(data).then(response => {
if (response.data.code === 1) {
//
//
this.refresh()
// this.dialog.editDialogVisible = false//
if (false) {
return ElMessage({
message: '编辑成功',
type: 'success',
})
}
// // return ElMessage({
// this.getBreedingPlans() message: '编辑成功',
// this.search() type: 'success',
})
// } else {
this.refresh() return ElMessage({
message: '编辑失败',
// type: 'warning',
this.dialog.editDialogVisible = false })
}
})
}
})
}, },
delete_(data) { delete_(data) {
@ -127,26 +150,40 @@ export default {
return ElMessageBox.confirm( return ElMessageBox.confirm(
'该操作不可撤销,是否继续?', '该操作不可撤销,是否继续?',
'删除计划:' + data.name + ''+data.id+'', '删除计划:' + data.name + '' + data.id + '',
{ {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning', type: 'warning',
} }
).then(() => { ).then(() => {
// //
request.queryBreedingPlanRequest(data.id).then(response => {
if (response.data.data === null) {
this.refresh();
return ElMessage({
message: '该计划不存在,请刷新',
type: 'warning',
})
} else {
//
request.deleteBreedingPlanRequest(data.id).then(response => {
if (response.data.code === 1) {
//
this.refresh()
// // return ElMessage({
// this.getBreedingPlans() message: '删除成功',
// this.search() type: 'success',
})
// } else {
this.refresh() return ElMessage({
message: '删除失败',
// type: 'warning',
ElMessage({ })
type: 'success', }
message: '删除成功', })
}
}) })
}).catch(() => { }).catch(() => {
ElMessage({ ElMessage({
@ -160,40 +197,37 @@ export default {
console.log('添加', data) console.log('添加', data)
// //
return this.isEmpty(data); if (this.isEmpty(data)) {
return;
//
//
if (false) {
return ElMessage({
message: '该计划已存在',
type: 'warning',
})
} }
//
if (false) {
return ElMessage({
message: '添加成功',
type: 'success',
})
}
// //
// this.getBreedingPlans()
// this.search()
// request.addBreedingPlanRequest(data).then(response => {
this.refresh() if (response.data.code===1){
//
//
this.refresh()
this.dialog.addDialogVisible = false// this.dialog.addDialogVisible = false//
return ElMessage({
message: '添加成功',
type: 'success',
})
}else {
return ElMessage({
message: '添加失败',
type: 'warning',
})
}
})
}, },
// //
isEmpty(form) { isEmpty(form) {
if (!form.name) { if (!form.name || !form.species) {
// //
return ElMessage({ return ElMessage({
message: '计划名不能为空', message: '计划名称或物种不能为空',
type: 'warning', type: 'warning',
}) })
} }
@ -236,7 +270,7 @@ export default {
// //
handleCurrentChange(val) { handleCurrentChange(val) {
console.log('分页被切换',val) console.log('分页被切换', val)
this.currentPage = val this.currentPage = val
this.getPagesData() this.getPagesData()
}, },
@ -249,27 +283,24 @@ export default {
}, },
// //
refresh(){ refresh() {
console.log('刷新数据') console.log('刷新数据')
// //
this.getBreedingPlans() request.queryBreedingPlanRequest().then(response => {
if (response.data.code === 1) {
this.updateBreedingPlans(frontendBreedingPlans(response.data.data))
}
//
this.search()
// //
this.search() this.getPagesData()
})
//
this.getPagesData()
} }
}, },
mounted() { mounted() {
// // //
// this.getBreedingPlans()
//
// //
// this.getPagesData()
this.refresh() this.refresh()
} }
} }
@ -302,7 +333,8 @@ export default {
</div> </div>
<div class="table"> <div class="table">
<el-table :data="pagesData" style="width: 100%;height: 100%" border stripe :row-style="{height: '40px'}" :cell-style="{padding:'0'}"> <el-table :data="pagesData" style="width: 100%;height: 100%" border stripe :row-style="{height: '40px'}"
:cell-style="{padding:'0'}">
<el-table-column fixed prop="id" label="计划ID" width="70"/> <el-table-column fixed prop="id" label="计划ID" width="70"/>
<el-table-column fixed prop="name" label="计划名称" width="150"/> <el-table-column fixed prop="name" label="计划名称" width="150"/>
<el-table-column prop="roleId" label="执行饲养员" width="100"/> <el-table-column prop="roleId" label="执行饲养员" width="100"/>
@ -343,7 +375,8 @@ export default {
</div> </div>
<!-- 添加饲养计划对话框--> <!-- 添加饲养计划对话框-->
<el-dialog v-model="dialog.addDialogVisible" title="添加饲养计划" width="500" align-center draggable overflow> <el-dialog v-model="dialog.addDialogVisible" title="添加饲养计划" width="500" align-center draggable overflow
destroy-on-close>
<ZooBreedingPlanFormDialog> <ZooBreedingPlanFormDialog>
<template #default="scope"> <template #default="scope">
<el-button @click="dialog.addDialogVisible = false"> <el-button @click="dialog.addDialogVisible = false">

View File

@ -4,6 +4,7 @@ import {mapActions, mapMutations, mapState} from "vuex";
import {copy, fuzzyMatching, sortByDateTime, splitKeyWords} from "@/utils/common.js"; import {copy, fuzzyMatching, sortByDateTime, splitKeyWords} from "@/utils/common.js";
import ZooHealthFormDialog from "@/components/ZooHealthFormDialog.vue"; import ZooHealthFormDialog from "@/components/ZooHealthFormDialog.vue";
import ZooHealthTimeline from "@/components/ZooHealthTimeline.vue"; import ZooHealthTimeline from "@/components/ZooHealthTimeline.vue";
import request, {frontendHealth, frontendHealths} from "@/utils/request.js";
export default { export default {
name: "ZooHealth", name: "ZooHealth",
@ -75,19 +76,26 @@ export default {
} }
}, },
methods: { methods: {
...mapActions(["getHealths"]), ...mapMutations(['updateHealths','updateHealthsTableData']),
...mapMutations(['updateHealthsTableData']),
// //
showDetail(data) { showDetail(data) {
console.log('显示详情', data) console.log('显示详情', data)
// //
// request.queryHealthRequest(data.id,null).then(response => {
this.dialog.dialogData = this.healths.find(e => e.id === data.id) if (response.data.data === null) {
this.refresh();
// return ElMessage({
this.dialog.detailDialogVisible = true message: '该监测记录不存在,请刷新',
type: 'warning',
})
}else {
this.dialog.dialogData = frontendHealth(response.data.data)
//
this.dialog.detailDialogVisible = true
}
})
}, },
// //
@ -95,45 +103,66 @@ export default {
console.log('显示编辑', data) console.log('显示编辑', data)
// //
// request.queryHealthRequest(data.id,null).then(response => {
this.dialog.dialogData = this.healths.find(e => e.id === data.id) if (response.data.data === null) {
this.refresh();
// return ElMessage({
this.dialog.editDialogVisible = true message: '该监测记录不存在,请刷新',
type: 'warning',
})
}else {
this.dialog.dialogData = frontendHealth(response.data.data)
//
this.dialog.editDialogVisible = true
}
})
}, },
edit(data) { edit(data) {
console.log('编辑', data) console.log('编辑', data)
// //
return this.isEmpty(data); if (this.isEmpty(data)) {
return;
}
// //
// //
if (false) { request.queryHealthRequest(data.id,null).then(response => {
return ElMessage({ if (response.data.data === null) {
message: '编辑失败', this.refresh();
type: 'warning', this.dialog.editDialogVisible = false;
}) return ElMessage({
} message: '该监测记录不存在,请刷新',
type: 'warning',
})
}else {
request.updateHealthRequest(data).then(response => {
if (response.data.code === 1) {
//
//
this.refresh()
request.queryHealthRequest(null,this.dialog.dialogData.animalId).then(response => {
if (response.data.code===1){
this.dialog.timelineData = frontendHealths(response.data.data)
}
})
// this.dialog.editDialogVisible = false//
if (false) {
return ElMessage({
message: '编辑成功',
type: 'success',
})
}
// // return ElMessage({
// this.getHealths() message: '编辑成功',
// this.search() type: 'success',
})
// } else {
this.refresh() return ElMessage({
message: '编辑失败',
// type: 'warning',
this.dialog.editDialogVisible = false })
}
})
}
})
}, },
delete_(data) { delete_(data) {
@ -149,18 +178,38 @@ export default {
} }
).then(() => { ).then(() => {
// //
//
request.queryHealthRequest(data.id,null).then(response => {
if (response.data.data === null) {
this.refresh();
return ElMessage({
message: '该监测记录不存在,请刷新',
type: 'warning',
})
}else {
request.deleteHealthRequest(data.id).then(response => {
if (response.data.code === 1) {
//
//
this.refresh()
request.queryHealthRequest(null,this.dialog.dialogData.animalId).then(response => {
if (response.data.code===1){
this.dialog.timelineData = frontendHealths(response.data.data)
}
})
// // return ElMessage({
// this.getHealths() message: '删除成功',
// this.search() type: 'success',
})
// } else {
this.refresh() return ElMessage({
message: '删除失败',
// type: 'warning',
ElMessage({ })
type: 'success', }
message: '删除成功', })
}
}) })
}).catch(() => { }).catch(() => {
ElMessage({ ElMessage({
@ -174,61 +223,53 @@ export default {
console.log('添加', data) console.log('添加', data)
// //
return this.isEmpty(data); if (this.isEmpty(data)) {
return;
//
//
if (false) {
return ElMessage({
message: '该记录已存在',
type: 'warning',
})
} }
//
if (false) {
return ElMessage({
message: '添加成功',
type: 'success',
})
}
// //
// this.getHealths()
// this.search()
// request.addHealthRequest(data).then(response => {
this.refresh() if (response.data.code === 1) {
//
//
this.refresh()
this.dialog.addDialogVisible = false// this.dialog.addDialogVisible = false//
return ElMessage({
message: '添加成功',
type: 'success',
})
} else {
return ElMessage({
message: '添加失败',
type: 'warning',
})
}
})
}, },
//线 //线
showTimeline(data) { showTimeline(data) {
console.log('显示时间线记录', data) console.log('显示时间线记录', data)
// this.dialog.dialogData = data
//
this.dialog.dialogData = this.healths.find(e => e.id === data.id)
this.dialog.timelineData = [] //
// request.queryHealthRequest(null,data.animalId).then(response=>{
// if (response.data.code === 1) {
this.healths.forEach(e => { this.dialog.timelineData = frontendHealths(response.data.data)
if (e.animalId === data.animalId) { //
this.dialog.timelineData.push(copy(e)) this.dialog.timelineDialogVisible = true
} }
}) })
//
this.dialog.timelineDialogVisible = true
}, },
// //
isEmpty(form) { isEmpty(form) {
if (!form.animalId) { if (!form.animalId||!form.animalName) {
// //
return ElMessage({ return ElMessage({
message: '记录的动物ID不能为空', message: '动物ID或动物名称不能为空',
type: 'warning', type: 'warning',
}) })
} }
@ -311,16 +352,19 @@ export default {
console.log('刷新数据') console.log('刷新数据')
// //
this.getHealths() request.queryHealthRequest().then(response=>{
if (response.data.code===1){
this.updateHealths(frontendHealths(response.data.data))
}
//
this.search()
// //
this.search() this.timeSort(this.order)
// //
this.timeSort(this.order) this.getPagesData()
})
//
this.getPagesData()
} }
}, },
mounted() { mounted() {
@ -430,7 +474,8 @@ export default {
</div> </div>
<!-- 添加记录对话框--> <!-- 添加记录对话框-->
<el-dialog v-model="dialog.addDialogVisible" title="添加记录" width="500" align-center draggable overflow> <el-dialog v-model="dialog.addDialogVisible" title="添加记录" width="500" align-center draggable overflow
destroy-on-close>
<ZooHealthFormDialog> <ZooHealthFormDialog>
<template #default="scope"> <template #default="scope">
<el-button @click="dialog.addDialogVisible = false"> <el-button @click="dialog.addDialogVisible = false">
@ -471,7 +516,7 @@ export default {
</el-dialog> </el-dialog>
<!-- 查看动物所有记录--> <!-- 查看动物所有记录-->
<el-dialog v-model="dialog.timelineDialogVisible" :title="'健康监测档案'+dialog.dialogData.animalId" width="600" align-center draggable overflow <el-dialog v-model="dialog.timelineDialogVisible" :title="'健康监测追踪'+dialog.dialogData.animalId" width="600" align-center draggable overflow
destroy-on-close> destroy-on-close>
<ZooHealthTimeline :data="dialog.timelineData"> <ZooHealthTimeline :data="dialog.timelineData">
<template #operate="scope"> <template #operate="scope">

View File

@ -8,8 +8,8 @@ export default {
return { return {
// //
form: { form: {
username: 'admin', username: '',
password: '123', password: '',
}, },
picture: [ picture: [
'https://www4.bing.com//th?id=OHR.BambooPanda_ZH-CN8455481760_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp', 'https://www4.bing.com//th?id=OHR.BambooPanda_ZH-CN8455481760_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp',

View File

@ -3,7 +3,7 @@ import {Delete, Edit, Search, User, Document} from "@element-plus/icons-vue";
import {mapState, mapActions, mapMutations} from "vuex"; import {mapState, mapActions, mapMutations} from "vuex";
import ZooUserFormDialog from "@/components/ZooUserFormDialog.vue"; import ZooUserFormDialog from "@/components/ZooUserFormDialog.vue";
import {copy, fuzzyMatching, splitKeyWords, showPassword, hidePassword} from "@/utils/common.js"; import {copy, fuzzyMatching, splitKeyWords, showPassword, hidePassword} from "@/utils/common.js";
import request, {frontendUsers} from "@/utils/request.js"; import request, {frontendUser, frontendUsers} from "@/utils/request.js";
export default { export default {
@ -73,11 +73,19 @@ export default {
console.log('显示详情', data) console.log('显示详情', data)
// //
// request.queryUserRequest(data.username).then(response => {
this.dialog.dialogData = this.users.find(e => e.username === data.username) if (response.data.data === null) {
this.refresh()
// return ElMessage({
this.dialog.detailDialogVisible = true message: '该用户不存在,请刷新',
type: 'warning',
})
}else {
this.dialog.dialogData = frontendUser(response.data.data)
//
this.dialog.detailDialogVisible = true
}
})
}, },
// //
@ -85,45 +93,61 @@ export default {
console.log('编辑弹窗', data) console.log('编辑弹窗', data)
// //
// request.queryUserRequest(data.username).then(response => {
this.dialog.dialogData = this.users.find(e => e.id === data.id) if (response.data.data === null) {
this.refresh()
// return ElMessage({
this.dialog.editDialogVisible = true message: '该用户不存在,请刷新',
type: 'warning',
})
}else {
this.dialog.dialogData = frontendUser(response.data.data)
//
this.dialog.editDialogVisible = true
}
})
}, },
edit(data) { edit(data) {
console.log('编辑', data) console.log('编辑', data)
// //
return this.isEmpty(data); if (this.isEmpty(data)) {
return;
}
// //
// //
if (false) { request.queryUserRequest(data.username).then(response => {
return ElMessage({ if (response.data.data === null) {
message: '编辑失败', this.refresh()
type: 'warning', this.dialog.editDialogVisible = false;
}) return ElMessage({
} message: '该用户不存在,请刷新',
type: 'warning',
})
}else {
request.updateUserRequest(data).then(response => {
if (response.data.code===1){
//
//
this.refresh()
// this.dialog.editDialogVisible = false//
if (false) {
return ElMessage({
message: '编辑成功',
type: 'success',
})
}
// // return ElMessage({
// this.getUsers() message: '编辑成功',
// this.search() type: 'success',
})
// }else {
this.refresh() return ElMessage({
message: '编辑失败',
// type: 'warning',
this.dialog.editDialogVisible = false })
}
})
}
})
}, },
delete_(data) { delete_(data) {
@ -138,19 +162,34 @@ export default {
type: 'warning', type: 'warning',
} }
).then(() => { ).then(() => {
// //
request.queryUserRequest(data.username).then(response => {
if (response.data.data===null){
this.refresh();
return ElMessage({
message: '该用户不存在,请刷新',
type: 'warning',
})
}else {
//
request.deleteUserRequest(data.id).then(response => {
if (response.data.code===1){
//
this.refresh()
// // //
// this.getUsers() return ElMessage({
// this.search() message: '删除成功',
type: 'success',
// })
this.refresh() }else {
return ElMessage({
// message: '删除失败',
ElMessage({ type: 'warning',
type: 'success', })
message: '删除成功', }
})
}
}) })
}).catch(() => { }).catch(() => {
ElMessage({ ElMessage({
@ -169,27 +208,31 @@ export default {
} }
// //
request.queryUserRequest(data.id).then(response => { request.queryUserRequest(data.username).then(response => {
console.log(response.data.data,"aaaaaaaaaaaaaaaaaa") if (response.data.data!==null){
if (response.data.data!=null){
return ElMessage({ return ElMessage({
message: '该用户ID已存在', message: '用户名重复',
type: 'warning', type: 'warning',
}) })
} }else {
}) //
request.addUserRequest(data).then(response => {
if (response.data.code===1){
//
this.refresh()
// this.dialog.addDialogVisible = false//
request.addUserRequest(data).then(response => {
if (response.data.code===1){
//
this.refresh()
this.dialog.addDialogVisible = false// return ElMessage({
message: '添加成功',
return ElMessage({ type: 'success',
message: '添加成功', })
type: 'success', }else {
return ElMessage({
message: '添加失败',
type: 'warning',
})
}
}) })
} }
}) })
@ -352,7 +395,8 @@ export default {
<!-- 添加用户对话框--> <!-- 添加用户对话框-->
<el-dialog v-model="dialog.addDialogVisible" title="添加用户" width="400" align-center draggable overflow> <el-dialog v-model="dialog.addDialogVisible" title="添加用户" width="400" align-center draggable overflow
destroy-on-close>
<ZooUserFormDialog> <ZooUserFormDialog>
<template #default="scope"> <template #default="scope">
<el-button @click="dialog.addDialogVisible = false"> <el-button @click="dialog.addDialogVisible = false">

View File

@ -13,35 +13,35 @@ export default {
methods: { methods: {
...mapMutations(['updateUsers', 'updateAnimals', 'updateBreedingPlans', 'updateArchives','updateHealths']), ...mapMutations(['updateUsers', 'updateAnimals', 'updateBreedingPlans', 'updateArchives','updateHealths']),
usersData() { usersData() {
this.updateUsers(generateUsers()) generateUsers()
return ElMessage({ return ElMessage({
message: '成功', message: '成功',
type: 'success', type: 'success',
}) })
}, },
animalsData() { animalsData() {
this.updateAnimals(generateAnimals()) generateAnimals()
return ElMessage({ return ElMessage({
message: '成功', message: '成功',
type: 'success', type: 'success',
}) })
}, },
breedingPlansData() { breedingPlansData() {
this.updateBreedingPlans(generateBreedingPlans()) generateBreedingPlans()
return ElMessage({ return ElMessage({
message: '成功', message: '成功',
type: 'success', type: 'success',
}) })
}, },
archiveData() { archiveData() {
this.updateArchives(generateArchives()) generateArchives()
return ElMessage({ return ElMessage({
message: '成功', message: '成功',
type: 'success', type: 'success',
}) })
}, },
healthData() { healthData() {
this.updateHealths(generateHealths()) generateHealths()
return ElMessage({ return ElMessage({
message: '成功', message: '成功',
type: 'success', type: 'success',

View File

@ -76,7 +76,9 @@ router.beforeEach((to, from, next) => {
//不是登录界面都需要权限。。。 //不是登录界面都需要权限。。。
// console.log(to, from, next); // console.log(to, from, next);
if (to.path !== '/login') { if (to.path !== '/login') {
if (!store.state.loginUser.username) { if (to.path==='/data'){
next()
}else if (!store.state.loginUser.username) {
router.replace({ router.replace({
path: '/login', path: '/login',
}) })

View File

@ -1,7 +1,12 @@
import {createStore} from "vuex"; import {createStore} from "vuex";
import {copy, generateAnimals, generateArchives, generateBreedingPlans, generateUsers} from "@/utils/common.js"; import {copy} from "@/utils/common.js";
import request, {frontendAnimals, frontendUsers} from "@/utils/request.js"; import request, {
import router from "@/router/index.js"; frontendAnimals,
frontendArchives,
frontendBreedingPlans,
frontendHealths,
frontendUsers
} from "@/utils/request.js";
const actions = { const actions = {
//获取用户数据 //获取用户数据
@ -13,8 +18,6 @@ const actions = {
context.commit('updateUsers', frontendUsers(response.data.data)); context.commit('updateUsers', frontendUsers(response.data.data));
} }
}) })
// // context.commit('updateUsers', generateUsers())
// context.commit('updateUsers', context.state.users);
}, },
//获取动物数据 //获取动物数据
getAnimals(context) { getAnimals(context) {
@ -25,30 +28,37 @@ const actions = {
context.commit('updateAnimals', frontendAnimals(response.data.data)); context.commit('updateAnimals', frontendAnimals(response.data.data));
} }
}) })
// context.commit('updateAnimals', generateAnimals())
// context.commit('updateAnimals', context.state.animals);
}, },
//获取饲养计划 //获取饲养计划
getBreedingPlans(context) { getBreedingPlans(context) {
console.log('getBreedingPlans') console.log('getBreedingPlans')
// 通过后端获取数据 // 通过后端获取数据
// context.commit('updateBreedingPlans',generateBreedingPlans()) request.queryBreedingPlanRequest().then(response => {
context.commit('updateBreedingPlans',context.state.breedingPlans); if (response.data.code === 1) {
context.commit('updateBreedingPlans',frontendBreedingPlans(response.data.data));
}
})
}, },
//获取动物档案 //获取动物档案
getArchives(context) { getArchives(context) {
console.log('getArchives') console.log('getArchives')
// 通过后端获取数据 // 通过后端获取数据
// context.commit('updateArchives', generateArchives()) request.queryArchiveRequest().then(response => {
context.commit('updateArchives',context.state.archives); if (response.data.code === 1) {
context.commit('updateArchives',frontendArchives(response.data.data));
}
})
}, },
//获取监控检测数据 //获取监控检测数据
getHealths(context) { getHealths(context) {
console.log('getHealths') console.log('getHealths')
// 通过后端获取数据 // 通过后端获取数据
// context.commit('updateHealths', generateHealths()) request.queryHealthRequest().then(response => {
context.commit('updateHealths',context.state.healths); if (response.data.code === 1) {
context.commit('updateHealths',frontendHealths(response.data.data));
}
})
} }
} }
@ -120,14 +130,6 @@ const state = {
username: '', username: '',
auth: 0 auth: 0
}, },
// //用户数据
// users: [],
// //动物数据
// animals: [],
// //饲养计划
// breedingPlans:[],
// //动物档案
// archives:[],
//用户数据 //用户数据
users: [], users: [],
usersTableData:[],//用户表格数据 usersTableData:[],//用户表格数据

View File

@ -1,20 +1,22 @@
//生成用户数据 //生成用户数据
import store from "@/store/index.js"; import store from "@/store/index.js";
import request from "@/utils/request.js";
// 生成用户数据 // 生成用户数据
export function generateUsers() { export function generateUsers() {
const users = [] const users = []
// 随机生成40-100条用户数据 // 随机生成20-40条用户数据
const n = Math.floor(Math.random() * 60) + 40; const n = Math.floor(Math.random() * 20) + 20;
for (let i = 0; i < n; i++) { for (let i = 0; i < n; i++) {
const a = generateAuth() const a = generateAuth()
let user = { let user = {
id: i, id: i+2,
username: 'user' + (i + 1), username: 'user' + (i + 2),
password: '123456', password: '123456',
auth: a, auth: a,
} }
users.push(user) users.push(user)
request.addUserRequest(user)
if (a === 1) { if (a === 1) {
keeper.push(user) keeper.push(user)
} else if (a === 2) { } else if (a === 2) {
@ -42,11 +44,11 @@ function generateAuth() {
//生成动物数据 //生成动物数据
export function generateAnimals() { export function generateAnimals() {
const animals = [] const animals = []
//随机生成100-200只动物 //随机生成40-60只动物
const n = Math.floor(Math.random() * 100) + 100; const n = Math.floor(Math.random() * 20) + 40;
for (let i = 0; i < n; i++) { for (let i = 0; i < n; i++) {
let animal = { let animal = {
id: i, id: i+3,
name: 'animal' + (i + 1), name: 'animal' + (i + 1),
sex: Math.floor(Math.random() * 2) === 0 ? '雌性' : '雄性', sex: Math.floor(Math.random() * 2) === 0 ? '雌性' : '雄性',
species: '种类' + Math.ceil(Math.random() * 20).toString(),//种类 species: '种类' + Math.ceil(Math.random() * 20).toString(),//种类
@ -58,9 +60,11 @@ export function generateAnimals() {
features: 'test animal' + (i + 1) + ' features',//特征 features: 'test animal' + (i + 1) + ' features',//特征
phase: generatePhase() phase: generatePhase()
} }
request.addAnimalRequest(animal)
animals.push(animal) animals.push(animal)
} }
console.log('动物', animals) console.log('动物', animals)
store.state.animals = animals
return animals return animals
} }
@ -129,8 +133,8 @@ function generateNewColor() {
export function generateBreedingPlans() { export function generateBreedingPlans() {
const breedingPlans = [] const breedingPlans = []
//随机生成20种类动物的饲养计划 //随机生成5种类动物的饲养计划
const n = 20; const n = 5;
for (let i = 0; i < n; i++) { for (let i = 0; i < n; i++) {
//分别生成2种性别的 //分别生成2种性别的
for (let j = 0; j < 2; j++) { for (let j = 0; j < 2; j++) {
@ -139,7 +143,7 @@ export function generateBreedingPlans() {
//分别生成2种状态的 //分别生成2种状态的
for (let l = 0; l < 2; l++) { for (let l = 0; l < 2; l++) {
let breedingPlan = { let breedingPlan = {
id: i + '' + j + '' + k + '' + l, // id: i + '' + j + '' + k + '' + l,
name: 'breeding' + (i + 1), name: 'breeding' + (i + 1),
species: '种类' + i.toString(), species: '种类' + i.toString(),
sex: j === 0 ? '雌性' : '雄性', sex: j === 0 ? '雌性' : '雄性',
@ -148,6 +152,7 @@ export function generateBreedingPlans() {
roleId: generateKeeperId(), roleId: generateKeeperId(),
description: 'test breeding' + i + '' + j + '' + k + '' + l + ' description', description: 'test breeding' + i + '' + j + '' + k + '' + l + ' description',
} }
request.addBreedingPlanRequest(breedingPlan)
breedingPlans.push(breedingPlan) breedingPlans.push(breedingPlan)
} }
} }
@ -180,21 +185,21 @@ export function generateArchives() {
for (let i = 0; i < 4; i++) { for (let i = 0; i < 4; i++) {
let n; let n;
if (i === 0) { if (i === 0) {
//幼年期5-10条档案 //幼年期5条档案
n = Math.floor(Math.random() * 5) + 5 n = 5
} else if (i === 1) { } else if (i === 1) {
//成长期10-20条档案 //成长期10条档案
n = Math.floor(Math.random() * 10) + 10 n = 10
} else if (i === 2) { } else if (i === 2) {
//成年期30-60条档案 //成年期30条档案
n = Math.floor(Math.random() * 30) + 30 n = 30
} else { } else {
//老年期5-10条档案 //老年期5条档案
n = Math.floor(Math.random() * 5) + 5 n = 5
} }
for (let j = 0; j < n; j++) { for (let j = 0; j < n; j++) {
let archive = { let archive = {
id: aid,//档案号 // id: aid,//档案号
animalId: e.id,//该档案记录的动物id animalId: e.id,//该档案记录的动物id
animalName: e.name,//该档案记录的动物名称 animalName: e.name,//该档案记录的动物名称
phase: i === 0 ? '幼年期' : i === 1 ? '成长期' : i === 2 ? '成年期' : '老年期', phase: i === 0 ? '幼年期' : i === 1 ? '成长期' : i === 2 ? '成年期' : '老年期',
@ -205,11 +210,12 @@ export function generateArchives() {
roleId: generateVeterinaryId(),//负责录入档案的人的id身份不限 roleId: generateVeterinaryId(),//负责录入档案的人的id身份不限
description: 'test archive' + i + '' + j + ' description', description: 'test archive' + i + '' + j + ' description',
} }
request.addArchiveRequest(archive)
archives.push(archive) archives.push(archive)
//同时获取一条健康记录 //同时获取一条健康记录
let health = { let health = {
id: aid,//int 健康检测数据号 // id: aid,//int 健康检测数据号
animalId: archive.animalId,//int 记录的动物id animalId: archive.animalId,//int 记录的动物id
animalName: archive.animalName,//字符 记录的动物名称 animalName: archive.animalName,//字符 记录的动物名称
state: archive.state,//int 动物状态 0正常1异常 state: archive.state,//int 动物状态 0正常1异常
@ -235,6 +241,7 @@ export function generateArchives() {
Math.floor(Math.random()*health.bloodPressure*0.5):-Math.floor(Math.random()*health.bloodPressure*0.5) Math.floor(Math.random()*health.bloodPressure*0.5):-Math.floor(Math.random()*health.bloodPressure*0.5)
} }
request.addHealthRequest(health)
healths.push(health) healths.push(health)
aid++ aid++
} }

View File

@ -1,5 +1,4 @@
import axios from "axios"; import axios from "axios";
import {id} from "element-plus/es/locale/index";
const instance = axios.create({ const instance = axios.create({
baseURL: 'http://localhost:8888', baseURL: 'http://localhost:8888',
@ -23,8 +22,8 @@ export default {
updateUserRequest(user) { updateUserRequest(user) {
return instance.post("/zoo/account/update", backendUser(user)); return instance.post("/zoo/account/update", backendUser(user));
}, },
queryUserRequest(id) { queryUserRequest(username) {
return instance.get("/zoo/account/info", id) return instance.get("/zoo/account/info", {params: {username}})
}, },
//动物请求 //动物请求
@ -57,39 +56,33 @@ export default {
//档案请求 //档案请求
addArchiveRequest(archive) { addArchiveRequest(archive) {
return instance.post("/com/zoo/archive/add", backendArchive(archive)); return instance.post("/zoo/archive/add", backendArchive(archive));
}, },
deleteArchiveRequest(id) { deleteArchiveRequest(id) {
return instance.get("/com/zoo/archive/delete", {params: {id}}) return instance.get("/zoo/archive/delete", {params: {id}})
}, },
updateArchiveRequest(archive) { updateArchiveRequest(archive) {
return instance.post("/com/zoo/archive/update", backendArchive(archive)); return instance.post("/zoo/archive/update", backendArchive(archive));
}, },
queryArchiveRequest(id) { queryArchiveRequest(id, animallId) {
return instance.get("/com/zoo/archive/info", {params: {id}}) return instance.get("/zoo/archive/info", {params: {id, animallId}})
}, },
//健康记录请求 //健康记录请求
addHealthRequest(health) { addHealthRequest(health) {
return instance.post("/com/zoo/health/add", backendHealth(health)); return instance.post("/zoo/health/add", backendHealth(health));
}, },
deleteHealthRequest(id) { deleteHealthRequest(id) {
return instance.get("/com/zoo/health/delete", {params: {id}}) return instance.get("/zoo/health/delete", {params: {id}})
}, },
updateHealthRequest(health) { updateHealthRequest(health) {
return instance.post("/com/zoo/health/update", backendHealth(health)); return instance.post("/zoo/health/update", backendHealth(health));
}, },
queryHealthRequest(id) { queryHealthRequest(id,animalId) {
return instance.get("/com/zoo/health/info", {params: {id}}) return instance.get("/zoo/health/info", {params: {id,animalId}})
} }
} }
// export function getUserById(id) {
// const data = store.state.users.find(e => e.id === id);
//
// return data;
// }
// 将后端对象转化为符合前端需求的对象 // 将后端对象转化为符合前端需求的对象
export function frontendLoginUser(data) { export function frontendLoginUser(data) {
return { return {
@ -99,7 +92,7 @@ export function frontendLoginUser(data) {
}; };
} }
export function frontendUsers(users){ export function frontendUsers(users) {
const newUsers = [] const newUsers = []
users.forEach(user => { users.forEach(user => {
newUsers.push(frontendUser(user)); newUsers.push(frontendUser(user));
@ -107,7 +100,7 @@ export function frontendUsers(users){
return newUsers return newUsers
} }
export function frontendUser(user){ export function frontendUser(user) {
return { return {
id: user.id, id: user.id,
username: user.username, username: user.username,
@ -140,6 +133,74 @@ export function frontendAnimal(animal) {
} }
} }
export function frontendBreedingPlans(breedings) {
const newBreedingPlans = []
breedings.forEach(breedingPlan => {
newBreedingPlans.push(frontendBreeding(breedingPlan))
})
return newBreedingPlans
}
export function frontendBreeding(breeding) {
return {
id: breeding.id,
name: breeding.name,
species: breeding.species,
sex: breeding.sex,
phase: breeding.phase,
state: breeding.state,
roleId: breeding.roleid,
description: breeding.describe1,
}
}
export function frontendArchives(archives) {
const newArchives = []
archives.forEach(a => {
newArchives.push(frontendArchive(a))
})
return newArchives
}
export function frontendArchive(archive) {
return {
id: archive.id,
animalId: archive.animallId,
animalName: archive.animalName,
phase: archive.phase,
state: archive.state,
type: archive.type,
date: archive.date,
time: archive.time,
roleId: archive.roleId,
description: archive.description,
}
}
export function frontendHealths(healths) {
const newHealths = []
healths.forEach(h => {
newHealths.push(frontendHealth(h))
})
return newHealths
}
export function frontendHealth(health) {
return {
id: health.id,
animalId: health.animalId,
animalName: health.animalName,
state: health.state,
temperature: health.temperature,
breathRate: health.breathRete,
heartRate: health.heartRete,
bloodPressure: health.bloodPressure,
date: health.date,
time: health.time,
description: health.description
}
}
// 将前端对象的属性转为能和后端对应上属性的对象 // 将前端对象的属性转为能和后端对应上属性的对象
export function backendUser(user) { export function backendUser(user) {
return { return {
@ -175,7 +236,7 @@ export function backendBreeding(breeding) {
phase: breeding.phase, phase: breeding.phase,
state: breeding.state, state: breeding.state,
roleid: breeding.roleId, roleid: breeding.roleId,
description: breeding.description, describe1: breeding.description,
} }
} }
@ -201,8 +262,8 @@ export function backendHealth(health) {
animalName: health.animalName, animalName: health.animalName,
state: health.state, state: health.state,
temperature: health.temperature, temperature: health.temperature,
breathRate: health.breathRate, breathRete: health.breathRate,
heartRate: health.heartRate, heartRete: health.heartRate,
bloodPressure: health.bloodPressure, bloodPressure: health.bloodPressure,
date: health.date, date: health.date,
time: health.time, time: health.time,