添加查看详情功能

This commit is contained in:
bicey 2024-05-20 18:25:49 +08:00
parent cfb6e87767
commit 3b8c824f43
9 changed files with 162 additions and 60 deletions

View File

@ -145,12 +145,14 @@ breedingPlan: {
后端添加该对象并返回操作结果 后端添加该对象并返回操作结果
## 档案管理 ## 档案管理
---
## 健康检测 ## 健康检测
---
## 统计分析 ## 统计分析
---
# 开发进度 # 开发进度
@ -168,7 +170,7 @@ breedingPlan: {
- [x] 基本界面 - [x] 基本界面
- [x] 基本方法 - [x] 基本方法
- [ ] 优化界面样式 - [x] 优化界面样式
### aside ### aside
@ -179,7 +181,7 @@ breedingPlan: {
### footer ### footer
- [x] 基本界面 - [x] 基本界面
- [ ] 优化界面样式 - [x] 优化界面样式
### main ### main
@ -199,8 +201,8 @@ breedingPlan: {
### 饲养员 ### 饲养员
- [x] 数据展示 - [x] 数据展示
- [ ] 基本功能 - [x] 基本功能
- [ ] 基本方法 - [x] 基本方法
- [ ] 接入后端 - [ ] 接入后端
### 兽医 ### 兽医

View File

@ -24,6 +24,10 @@ export default {
props: { props: {
animal: { animal: {
type: Object, type: Object,
},
detail:{
type: Boolean,
default: false
} }
}, },
mounted() { mounted() {
@ -57,43 +61,43 @@ export default {
<!-- }--> <!-- }-->
<!-- </div>--> <!-- </div>-->
<el-form-item label="动物ID"> <el-form-item label="动物ID">
<el-input v-model="form.id" placeholder="请设置动物ID" type="number" :disabled="formAction.idDisable"/> <el-input v-model="form.id" placeholder="请设置动物ID" type="number" :disabled="formAction.idDisable || detail"/>
</el-form-item> </el-form-item>
<el-form-item label="动物名称"> <el-form-item label="动物名称">
<el-input v-model="form.name" placeholder="动物名称"/> <el-input v-model="form.name" placeholder="动物名称" :disabled="detail"/>
</el-form-item> </el-form-item>
<el-form-item label="性别"> <el-form-item label="性别">
<el-radio-group v-model="form.sex"> <el-radio-group v-model="form.sex" :disabled="detail">
<el-radio value="雄性">雄性</el-radio> <el-radio value="雄性">雄性</el-radio>
<el-radio value="雌性">雌性</el-radio> <el-radio value="雌性">雌性</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="动物种类"> <el-form-item label="动物种类">
<el-input v-model="form.species" placeholder="动物种类"/> <el-input v-model="form.species" placeholder="动物种类" :disabled="detail"/>
</el-form-item> </el-form-item>
<el-form-item label="动物体重KG"> <el-form-item label="动物体重KG">
<el-input-number v-model="form.weight" :precision="2" :step="0.1" :min="0" /> <el-input-number v-model="form.weight" :precision="2" :step="0.1" :min="0" :disabled="detail"/>
</el-form-item> </el-form-item>
<el-form-item label="动物身高M"> <el-form-item label="动物身高M">
<el-input-number v-model="form.height" :precision="2" :step="0.1" :min="0" /> <el-input-number v-model="form.height" :precision="2" :step="0.1" :min="0" :disabled="detail"/>
</el-form-item> </el-form-item>
<el-form-item label="动物状态"> <el-form-item label="动物状态">
<el-radio-group v-model="form.state"> <el-radio-group v-model="form.state" :disabled="detail">
<el-radio :value="0">正常</el-radio> <el-radio :value="0">正常</el-radio>
<el-radio :value="1">异常</el-radio> <el-radio :value="1">异常</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="饲养员ID"> <el-form-item label="饲养员ID">
<el-input v-model="form.roleId" type="number" placeholder="饲养员ID"/> <el-input v-model="form.roleId" type="number" placeholder="饲养员ID" :disabled="detail"/>
</el-form-item> </el-form-item>
<el-form-item label="动物颜色"> <el-form-item label="动物颜色">
<el-color-picker v-model="form.color" /> <el-color-picker v-model="form.color" :disabled="detail"/>
</el-form-item> </el-form-item>
<el-form-item label="动物特征"> <el-form-item label="动物特征">
<el-input v-model="form.features" placeholder="动物特征"/> <el-input v-model="form.features" placeholder="动物特征" :disabled="detail"/>
</el-form-item> </el-form-item>
<el-form-item label="生活习性"> <el-form-item label="生活习性">
<el-input v-model="form.habit" placeholder="生活习性"/> <el-input v-model="form.habit" placeholder="生活习性" :disabled="detail"/>
</el-form-item> </el-form-item>
<div class="right"> <div class="right">
<slot :form="form"></slot> <slot :form="form"></slot>

View File

@ -21,6 +21,10 @@ export default {
props: { props: {
breedingPlan: { breedingPlan: {
type: Object, type: Object,
},
detail: {
type: Boolean,
default: false
} }
}, },
mounted() { mounted() {
@ -39,22 +43,22 @@ export default {
<template> <template>
<el-form label-width="auto"> <el-form label-width="auto">
<el-form-item label="饲养计划ID"> <el-form-item label="饲养计划ID">
<el-input v-model="form.id" type="number" placeholder="饲养计划ID" :disabled="formAction.idDisable"/> <el-input v-model="form.id" type="number" placeholder="饲养计划ID" :disabled="formAction.idDisable || detail"/>
</el-form-item> </el-form-item>
<el-form-item label="计划名称"> <el-form-item label="计划名称">
<el-input v-model="form.name" placeholder="计划名称"/> <el-input v-model="form.name" placeholder="计划名称" :disabled="detail"/>
</el-form-item> </el-form-item>
<el-form-item label="动物种类"> <el-form-item label="动物种类">
<el-input v-model="form.species" placeholder="动物种类"/> <el-input v-model="form.species" placeholder="动物种类" :disabled="detail"/>
</el-form-item> </el-form-item>
<el-form-item label="性别"> <el-form-item label="性别">
<el-radio-group v-model="form.sex"> <el-radio-group v-model="form.sex" :disabled="detail">
<el-radio value="雄性">雄性</el-radio> <el-radio value="雄性">雄性</el-radio>
<el-radio value="雌性">雌性</el-radio> <el-radio value="雌性">雌性</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="生命阶段"> <el-form-item label="生命阶段">
<el-select v-model="form.phase" placeholder="生命阶段"> <el-select v-model="form.phase" placeholder="生命阶段" :disabled="detail">
<el-option label="幼年期" :value="0"/> <el-option label="幼年期" :value="0"/>
<el-option label="成长期" :value="1"/> <el-option label="成长期" :value="1"/>
<el-option label="成年期" :value="2"/> <el-option label="成年期" :value="2"/>
@ -62,21 +66,22 @@ export default {
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="动物状态"> <el-form-item label="动物状态">
<el-radio-group v-model="form.state"> <el-radio-group v-model="form.state" :disabled="detail">
<el-radio :value="0">正常</el-radio> <el-radio :value="0">正常</el-radio>
<el-radio :value="1">异常</el-radio> <el-radio :value="1">异常</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="执行饲养员"> <el-form-item label="执行饲养员">
<el-input v-model="form.roleId" type="number" placeholder="执行饲养员"/> <el-input v-model="form.roleId" type="number" placeholder="执行饲养员" :disabled="detail"/>
</el-form-item> </el-form-item>
<el-form-item label="计划描述"> <el-form-item label="计划描述" >
<el-input <el-input
v-model="form.describe" v-model="form.describe"
:rows="4" :rows="4"
type="textarea" type="textarea"
placeholder="计划描述" placeholder="计划描述"
resize="none" resize="none"
:disabled="detail"
/> />
</el-form-item> </el-form-item>
<div class="right"> <div class="right">

View File

@ -1,21 +1,29 @@
<script> <script>
import {hidePassword, showPassword} from "@/utils/common.js";
export default { export default {
name: "ZooUserFormDialog", name: "ZooUserFormDialog",
methods: {hidePassword, showPassword},
data() { data() {
return { return {
form: { form: {
id: '',
username: '', username: '',
password: '', password: '',
auth: 0, auth: 0,
}, },
formAction: { formAction: {
usernameDisable:false, usernameDisable: false,
} }
} }
}, },
props: { props: {
user: { user: {
type: Object, type: Object,
},
detail: {
type: Boolean,
default: false
} }
}, },
mounted() { mounted() {
@ -26,15 +34,19 @@ export default {
} }
}, },
beforeUnmount() { beforeUnmount() {
console.log('ZooUserFormDialog-beforeUnmount',this); console.log('ZooUserFormDialog-beforeUnmount', this);
} }
} }
</script> </script>
<template> <template>
<el-form label-width="auto"> <el-form label-width="auto">
<el-form-item label="用户ID">
<el-input v-model="form.id" placeholder="请设置用户ID" type="number"
:disabled="formAction.usernameDisable || detail"/>
</el-form-item>
<el-form-item label="用户名"> <el-form-item label="用户名">
<el-input v-model="form.username" placeholder="请设置用户名" :disabled="formAction.usernameDisable"/> <el-input v-model="form.username" placeholder="请设置用户名" :disabled="detail"/>
</el-form-item> </el-form-item>
<el-form-item label="密码"> <el-form-item label="密码">
<el-input <el-input
@ -42,15 +54,14 @@ export default {
type="password" type="password"
placeholder="请设置登录密码" placeholder="请设置登录密码"
show-password show-password
v-if="detail===false"
/> />
<div v-else-if="detail===true" @mouseover="showPassword($event,form.password)"
@mouseleave="hidePassword($event)">
</div>
</el-form-item> </el-form-item>
<el-form-item label="身份"> <el-form-item label="身份">
<!-- <el-select v-model="form.auth" placeholder="选择身份">--> <el-radio-group v-model="form.auth" :disabled="detail">
<!-- <el-option label="管理员" :value="0"/>-->
<!-- <el-option label="饲养员" :value="1"/>-->
<!-- <el-option label="兽医" :value="2"/>-->
<!-- </el-select>-->
<el-radio-group v-model="form.auth">
<el-radio :value="0">管理员</el-radio> <el-radio :value="0">管理员</el-radio>
<el-radio :value="1">饲养员</el-radio> <el-radio :value="1">饲养员</el-radio>
<el-radio :value="2">兽医</el-radio> <el-radio :value="2">兽医</el-radio>

View File

@ -1,6 +1,6 @@
<script> <script>
import {copy, fuzzyMatching, splitKeyWords} from "@/utils/common.js"; import {copy, fuzzyMatching, splitKeyWords} from "@/utils/common.js";
import {Delete, DocumentAdd, Edit, Search} from "@element-plus/icons-vue"; import {Delete, Document, DocumentAdd,Edit, Search} from "@element-plus/icons-vue";
import ZooAnimalFormDialog from "@/components/ZooAnimalFormDialog.vue"; import ZooAnimalFormDialog from "@/components/ZooAnimalFormDialog.vue";
import {mapActions,mapState} from "vuex"; import {mapActions,mapState} from "vuex";
@ -16,8 +16,9 @@ export default {
}, },
dialog: { dialog: {
addDialogVisible: false,// addDialogVisible: false,//
editDialogVisible: false,// editDialogVisible: false,//
editData: {} editData: {},
detailDialogVisible: false,//
} }
} }
}, },
@ -27,8 +28,8 @@ export default {
Search() { Search() {
return Search return Search
}, },
DocumentAdd() { Document() {
return DocumentAdd return Document
}, },
Edit() { Edit() {
return Edit return Edit
@ -36,6 +37,9 @@ export default {
Delete() { Delete() {
return Delete return Delete
}, },
DocumentAdd() {
return DocumentAdd
},
//endregion //endregion
...mapState(["animals"]) ...mapState(["animals"])
}, },
@ -49,6 +53,12 @@ export default {
}, },
methods: { methods: {
...mapActions(["getAnimals"]), ...mapActions(["getAnimals"]),
showDetailDialog(animal) {
//使animalid
this.dialog.editData = this.animals.find(e => e.id === animal.id)
console.log('点击了动物详情', this.dialog.editData)
this.dialog.detailDialogVisible = true
},
showEditDialog(animal) { showEditDialog(animal) {
//使animalid //使animalid
this.dialog.editData = this.animals.find(e => e.id === animal.id) this.dialog.editData = this.animals.find(e => e.id === animal.id)
@ -222,8 +232,11 @@ export default {
</el-table-column> </el-table-column>
<el-table-column prop="features" label="动物特征" width="200"/> <el-table-column prop="features" label="动物特征" width="200"/>
<el-table-column prop="habit" label="生活习性" width="200"/> <el-table-column prop="habit" label="生活习性" width="200"/>
<el-table-column fixed="right" label="操作" width="130"> <el-table-column fixed="right" label="操作" width="190">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" size="small" :icon="Document" @click="showDetailDialog(scope.row)">
查询
</el-button>
<el-button link type="primary" size="small" :icon="Edit" @click="showEditDialog(scope.row)"> <el-button link type="primary" size="small" :icon="Edit" @click="showEditDialog(scope.row)">
编辑 编辑
</el-button> </el-button>
@ -264,6 +277,18 @@ export default {
</template> </template>
</ZooAnimalFormDialog> </ZooAnimalFormDialog>
</el-dialog> </el-dialog>
<!-- 查看动物对话框-->
<el-dialog v-model="dialog.detailDialogVisible" title="查询动物" width="500" align-center draggable overflow
destroy-on-close>
<ZooAnimalFormDialog :animal="dialog.editData" detail>
<template #default="scope">
<el-button @click="dialog.detailDialogVisible = false">
关闭
</el-button>
</template>
</ZooAnimalFormDialog>
</el-dialog>
</template> </template>
<style scoped> <style scoped>

View File

@ -15,9 +15,10 @@ export default {
keyword: '' keyword: ''
}, },
dialog: { dialog: {
addDialogVisible: false,// addDialogVisible: false,//
editDialogVisible: false,// editDialogVisible: false,//
editData: {} editData: {},
detailDialogVisible:false//
} }
} }
}, },
@ -49,6 +50,12 @@ export default {
}, },
methods: { methods: {
...mapActions(["getBreedingPlans"]), ...mapActions(["getBreedingPlans"]),
showDetailDialog(breedingPlan) {
//使animalid
this.dialog.editData = this.breedingPlans.find(e => e.id === breedingPlan.id)
console.log('点击了编辑', this.dialog.editData)
this.dialog.detailDialogVisible = true
},
showEditDialog(breedingPlan) { showEditDialog(breedingPlan) {
//使animalid //使animalid
this.dialog.editData = this.breedingPlans.find(e => e.id === breedingPlan.id) this.dialog.editData = this.breedingPlans.find(e => e.id === breedingPlan.id)
@ -221,8 +228,11 @@ export default {
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="describe" label="计划描述" width="300"/> <el-table-column prop="describe" label="计划描述" width="300"/>
<el-table-column fixed="right" label="操作" width="130"> <el-table-column fixed="right" label="操作" width="190">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" size="small" :icon="Document" @click="showDetailDialog(scope.row)">
查询
</el-button>
<el-button link type="primary" size="small" :icon="Edit" @click="showEditDialog(scope.row)"> <el-button link type="primary" size="small" :icon="Edit" @click="showEditDialog(scope.row)">
编辑 编辑
</el-button> </el-button>
@ -263,6 +273,18 @@ export default {
</template> </template>
</ZooBreedingPlanFormDialog> </ZooBreedingPlanFormDialog>
</el-dialog> </el-dialog>
<!-- 查看动物对话框-->
<el-dialog v-model="dialog.detailDialogVisible" title="查询饲养计划" width="500" align-center draggable overflow
destroy-on-close>
<ZooBreedingPlanFormDialog :breedingPlan="dialog.editData" detail>
<template #default="scope">
<el-button @click="dialog.detailDialogVisible = false">
关闭
</el-button>
</template>
</ZooBreedingPlanFormDialog>
</el-dialog>
</template> </template>
<style scoped> <style scoped>

View File

@ -1,8 +1,8 @@
<script> <script>
import {Delete, Edit, Search, User} from "@element-plus/icons-vue"; import {Delete, Edit, Search, User,Document} from "@element-plus/icons-vue";
import {mapState,mapActions} from "vuex"; import {mapState,mapActions} from "vuex";
import ZooUserFormDialog from "@/components/ZooUserFormDialog.vue"; import ZooUserFormDialog from "@/components/ZooUserFormDialog.vue";
import {copy, fuzzyMatching, splitKeyWords} from "@/utils/common.js"; import {copy, fuzzyMatching, splitKeyWords,showPassword,hidePassword} from "@/utils/common.js";
export default { export default {
@ -23,6 +23,9 @@ export default {
Edit() { Edit() {
return Edit return Edit
}, },
Document() {
return Document
},
// endregion // endregion
@ -46,14 +49,22 @@ export default {
dialog: { dialog: {
addDialogVisible: false,// addDialogVisible: false,//
editDialogVisible: false,// editDialogVisible: false,//
editData: {} editData: {},
detailDialogVisible: false,//
} }
} }
}, },
methods: { methods: {
hidePassword,
showPassword,
...mapActions(['getUsers']), ...mapActions(['getUsers']),
showDetailDialog(user) {
//使user
this.dialog.editData = this.users.find(e => e.username === user.username)
console.log('点击了查询', this.dialog.editData)
this.dialog.detailDialogVisible = true
},
showEditDialog(user) { showEditDialog(user) {
// console.log('',user)
//使user //使user
this.dialog.editData = this.users.find(e => e.username === user.username) this.dialog.editData = this.users.find(e => e.username === user.username)
console.log('点击了编辑', this.dialog.editData) console.log('点击了编辑', this.dialog.editData)
@ -173,16 +184,6 @@ export default {
this.tableData = searchResult this.tableData = searchResult
}, },
//
//region
showPassword(event,password){
console.log('showPassword')
event.target.innerText = password
},
hidePassword(event) {
event.target.innerText = '••••••••'
}
//endregion
}, },
mounted() { mounted() {
this.getUsers()// this.getUsers()//
@ -221,6 +222,7 @@ export default {
<!-- <hr/>--> <!-- <hr/>-->
<div class="table"> <div class="table">
<el-table :data="tableData" style="height: 100%" empty-text="暂无数据" border> <el-table :data="tableData" style="height: 100%" empty-text="暂无数据" border>
<el-table-column fixed prop="id" label="用户ID" width="70"/>
<el-table-column fixed prop="username" label="用户名" width="150"/> <el-table-column fixed prop="username" label="用户名" width="150"/>
<el-table-column prop="password" label="密码" width="150"> <el-table-column prop="password" label="密码" width="150">
<template #default="scope"> <template #default="scope">
@ -235,8 +237,11 @@ export default {
<span v-else>未知</span> <span v-else>未知</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" width="130"> <el-table-column fixed="right" label="操作" width="190">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" size="small" :icon="Document" @click="showDetailDialog(scope.row)">
查询
</el-button>
<el-button link type="primary" size="small" :icon="Edit" @click="showEditDialog(scope.row)"> <el-button link type="primary" size="small" :icon="Edit" @click="showEditDialog(scope.row)">
编辑 编辑
</el-button> </el-button>
@ -277,6 +282,18 @@ export default {
</template> </template>
</ZooUserFormDialog> </ZooUserFormDialog>
</el-dialog> </el-dialog>
<!-- 用户详情对话框-->
<el-dialog v-model="dialog.detailDialogVisible" title="查询用户" width="400" align-center draggable overflow
destroy-on-close>
<ZooUserFormDialog :user="dialog.editData" detail>
<template #default="scope">
<el-button @click="dialog.detailDialogVisible = false">
关闭
</el-button>
</template>
</ZooUserFormDialog>
</el-dialog>
</template> </template>
<style scoped> <style scoped>

View File

@ -51,6 +51,7 @@ const mutations = {
const state = { const state = {
//登录用户数据 //登录用户数据
loginUser: { loginUser: {
id:0,
username: 'user1', username: 'user1',
auth: 0 auth: 0
}, },

View File

@ -3,7 +3,7 @@ export function generateUsers() {
//数据生成器 //数据生成器
for (let i = 0; i < 100; i++) { for (let i = 0; i < 100; i++) {
let user = { let user = {
userKey: i, id: i,
username: 'user' + (i + 3), username: 'user' + (i + 3),
password: '123456', password: '123456',
auth: Math.floor(Math.random() * 3), auth: Math.floor(Math.random() * 3),
@ -79,6 +79,20 @@ export function copy(value) {
return JSON.parse(result) return JSON.parse(result)
} }
//鼠标悬浮显示密码
//region
export function showPassword(event,password){
console.log('showPassword')
event.target.innerText = password
}
export function hidePassword(event) {
event.target.innerText = '••••••••'
}
//endregion
//模糊查询
//region
//分割字符串 //分割字符串
export function splitKeyWords(keyword) { export function splitKeyWords(keyword) {
let keyset = keyword.split(' ')//提取关键字 let keyset = keyword.split(' ')//提取关键字
@ -107,4 +121,5 @@ function keywordMatching(object, keyword) {
return Object.keys(object).some(key => { return Object.keys(object).some(key => {
return (object[key] + '').includes(keyword) return (object[key] + '').includes(keyword)
}) })
} }
//endregion