浏览代码

手持机页面

panhui 7 年之前
父节点
当前提交
78fb58ce01

+ 6 - 0
src/main/vue/src/entries/admin.js

@@ -199,6 +199,9 @@ Vue.prototype.getHaleInfo = function(serviceName, methodName, params, type, key,
                         if (key.indexOf('日期') != -1) {
                             item[key] = format(new Date(item[key]), dateType ? dateType : 'YYYY-MM-DD', { locale: zh })
                         }
+                        if (key.indexOf('时间') != -1) {
+                            item[key] = format(new Date(item[key]), dateType ? dateType : 'YYYY-MM-DD HH:mm:ss', { locale: zh })
+                        }
                     }
                 })
 
@@ -210,6 +213,9 @@ Vue.prototype.getHaleInfo = function(serviceName, methodName, params, type, key,
                     if (key.indexOf('日期') != -1) {
                         jsonp[key] = format(new Date(jsonp[key]), dateType ? dateType : 'YYYY-MM-DD', { locale: zh })
                     }
+                    if (key.indexOf('时间') != -1) {
+                        jsonp[key] = format(new Date(jsonp[key]), dateType ? dateType : 'YYYY-MM-DD HH:mm:ss', { locale: zh })
+                    }
                 }
                 console.log(jsonp)
                 resolve(jsonp)

+ 413 - 0
src/main/vue/src/pages/HandleFeeding.vue

@@ -0,0 +1,413 @@
+<template>
+    <el-container style="flex-grow:1">
+        <el-aside class="containAside" width="500px" style=" margin-right: 10px;">
+            <div class="asideInfo">
+                <div class="contentTitle">{{pageTitle}}
+
+                    <!-- <span>{{list.length}}头奶牛</span> -->
+                </div>
+                <div class="selectContent">
+                    <el-select v-model="task" placeholder="请选择同期任务" style="width:180px">
+                        <el-option v-for="item in taskList" :key="item" :label="item" :value="item">
+                        </el-option>
+                    </el-select>
+
+                    <el-select v-model="cowshed" placeholder="请选择牛舍" style="width:180px">
+                        <el-option v-for="item in cowShedList" :key="item" :label="item" :value="item">
+                        </el-option>
+                    </el-select>
+                    <el-button type="primary" plain @click="filitDayList=filitDay">筛选</el-button>
+
+                </div>
+                <div class="tableNum">
+                    {{filitList.length}}头奶牛
+                </div>
+                <el-table class="handleTable" border :data="filitList" style="width: 100%" :height='(allHeight-184)+"px"' size='small' @row-click='rowClick'>
+                    <el-table-column prop="牛号" label="牛号" fixed="left" align="center">
+                    </el-table-column>
+                    <el-table-column prop="当前牛舍" label="牛舍" align="center">
+                    </el-table-column>
+                    <el-table-column prop="繁殖状态" label="繁殖状态" align="center" min-width="100">
+                    </el-table-column>
+                    <el-table-column prop="产后|初检后" label="产后|初检后" width="100px" align="center">
+                    </el-table-column>
+                    <el-table-column prop="最近配种日期" label="最近配种" align="center">
+                    </el-table-column>
+                    <el-table-column prop="月龄" label="月龄" align="center">
+                    </el-table-column>
+                     <el-table-column prop="父号" label="父号" width="140px"  align="center">
+                    </el-table-column>
+                     <el-table-column prop="操作方案" label="操作方案" width="200px" align="center">
+                    </el-table-column>
+                </el-table>
+            </div>
+        </el-aside>
+        <el-main class="containMain">
+            <div class="contentTitle">同期配种信息登记</div>
+            <el-form ref="form" :model="formData" label-width="80px" style="margin-top:20px;">
+                <el-form-item label="" label-width="0">
+                    <el-input v-model="formData.cowID" disabled prefix-icon="el-icon-search" style="width:300px" maxlength="8"></el-input>
+                    <!-- <el-button type="primary" @click="getNowCow" style="width:90px;margin-left:12px">确认</el-button> -->
+                </el-form-item>
+                <div class="sub" v-if="tableData.length>0">
+                    操作牛号:{{tableData[0].value}}
+                </div>
+                <!-- <el-form-item label="建议配种">
+                    <el-radio-group v-model="formData.isMate">
+                        <el-radio label="0">是</el-radio>
+                        <el-radio label="1">否</el-radio>
+                    </el-radio-group>
+                </el-form-item> -->
+                <el-form-item label="配种方式">
+                    <el-select v-model="formData.mateMode" placeholder="请选择">
+                        <el-option v-for="item in mateModes" :key="item['详细方式']" :label="item['详细方式']" :value="item['详细方式']">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="配种冻精">
+                    <el-select v-model="formData.bull" placeholder="请选择">
+                        <el-option v-for="item in bulls" :key="item['牛号']" :label="item['牛号']" :value="item['牛号']">
+                        </el-option>
+                    </el-select>
+
+                    <div>
+                        <el-popover placement="right" width="200" trigger="hover">
+                            <div class="conetnt">
+                                <div class="item" v-for="(item,key) in bullMsg">
+                                    <div class="item-title">{{key}}</div>
+                                    <div class="text">{{item}}</div>
+                                </div>
+                            </div>
+                            <el-button type="text" slot="reference">查看此冻精详情</el-button>
+                        </el-popover>
+                    </div>
+                </el-form-item>
+
+                <!-- <el-form-item label="配种员">
+                    <el-select v-model="formData.person" placeholder="请选择">
+                        <el-option v-for="item in [userInfo.username]" :key="item" :label="item" :value="item">
+                        </el-option>
+                    </el-select>
+                </el-form-item> -->
+
+                <div style="margin-top:80px">
+                    <el-button @click="onSave" type="primary" style="width:98px;" size="mediu">确认保存</el-button>
+
+                </div>
+            </el-form>
+        </el-main>
+        <el-aside class="containAside" width="450px" style=" margin-left: 10px;">
+            <div class="asideInfo">
+                <div class="contentTitle">牛只信息</div>
+                <el-table class="handleTable" border :data="tableData" style="width: 100%" :height='(allHeight-70)+"px"' size='small'>
+                    <el-table-column prop="key" label="参数">
+                    </el-table-column>
+                    <el-table-column prop="value" label="当前牛只信信息">
+                    </el-table-column>
+                </el-table>
+            </div>
+        </el-aside>
+    </el-container>
+</template>
+<script>
+import formValidator from '../formValidator'
+import axios from 'axios'
+import { mapState } from 'vuex'
+export default {
+    created() {
+        //配种列表
+        this.getList(1)
+        //配种方式
+        this.getHaleInfo('wsCow', 'getUserDict', ['MateMode'], 'list').then((data) => {
+            this.mateModes = data
+            this.formData.mateMode = data[0]['详细方式']
+        })
+        //冻精列表
+        this.getHaleInfo('wsCow', 'getAllBullByFarmName', [
+            this.$store.state.farmName, true
+        ], 'list').then((data) => {
+            this.bulls = data
+        })
+
+    },
+    data() {
+        return {
+            saving: false,
+            formData: {
+                cowID: '',
+                isMate: '0',
+                mateMode: '',
+                bull: '',
+                person: '',
+            },
+            mateModes: [],
+            methods: ['人工观察', '计步器揭发', '同期发情'],
+            bulls: [],
+            tableData: [],
+            list: [],
+            cowshed: '',
+            task: '产后空怀牛同期',
+            taskList: ['产后空怀牛同期', '产后尚未配种泌乳牛同期', '繁殖障碍处理', '青年牛未孕同期', '十四月龄青年牛同期', '15.2月龄青年牛同期', '血液孕检无胎牛同期']
+        }
+    },
+    computed: {
+        ...mapState(['userInfo', 'allHeight']),
+        pageTitle() {
+            return this.$route.meta.title
+        },
+        bullMsg() {
+            var jsonp = {}
+            if (this.formData.bull) {
+                this.bulls.forEach(item => {
+                    if (item['牛号'] == this.formData.bull) {
+                        jsonp = item
+                    }
+                })
+            }
+
+            return jsonp
+
+
+        },
+        taskCowList() {
+            var list = []
+            if(this.task){
+                this.list.forEach(item=>{
+                    if(item['操作方案']==this.task+'方案'){
+                        list.push(item)
+                    }
+                })
+            }
+            return list
+        },
+        cowShedList() {
+            var list = ['全部牛舍']
+            this.taskCowList.forEach(item=>{
+                if(list.indexOf(item['当前牛舍'])==-1){
+                    list.push(item['当前牛舍'])
+                }
+            })
+            return list
+        },
+        filitList() {
+            var list = []
+            if(this.cowshed){
+                if(this.cowshed=='全部牛舍'){
+                    list=this.taskCowList
+                }
+                else{
+                    this.taskCowList.forEach(item=>{
+                        if(item['当前牛舍']==this.cowshed){
+                            list.push(item)
+                        }
+                    })
+                }
+            }
+            return list
+        }
+    },
+    watch: {
+        'formData.reason'() {
+            setTimeout(() => {
+                this.formData.remark = this.remarks[0]
+            }, 100)
+        },
+        'formData.cowID'() {
+            if (this.formData.cowID.length != 8) {
+                return
+            }
+            this.getNowCow()
+        }
+    },
+    methods: {
+        getList(type) {
+            this.getHaleInfo('wsBreeding', 'getMultiMateTask', [
+                this.$store.state.farmName
+            ], 'list').then((data) => {
+                this.list = data
+
+                if (this.list.length == 0 && type == 1) {
+                    this.$alert('暂无需要处理的奶牛', '提示', {
+                        confirmButtonText: '确定',
+                        callback: action => {
+
+                        }
+                    });
+                }
+
+            })
+        },
+        onSave() {
+            if (!this.formData.cowID) {
+                this.$message({
+                    message: '请录入牛只牛号',
+                    type: 'warning'
+                });
+                return
+            }
+
+            if (!this.formData.bull) {
+                this.$message({
+                    message: '请选择冻精',
+                    type: 'warning'
+                });
+                return
+            }
+
+
+            this.formData.operators = this.userInfo.username
+
+            this.getHaleInfo('wsBreeding', 'addHeatingInfo', [{
+                cowID: this.formData.cowID,
+                heatingDate: Date.parse(new Date()),
+                heatingCase: this.formData.sign,
+                exposeMode: this.formData.method
+            }], 'json').then((data) => {
+                console.log(data)
+                if (data.rtnCode == -1) {
+                    // this.$message({
+                    //     message: data.rtnMessage,
+                    //     type: 'warning'
+                    // });
+                    this.$alert(data.rtnMessage, '提示', {
+                        confirmButtonText: '确定',
+                        callback: action => {
+                            this.formData.cowID = ''
+                        }
+                    });
+                }
+                else {
+                    this.$message({
+                        message: '录入成功',
+                        type: 'success'
+                    });
+                    this.formData.cowID = ''
+                    this.getList()
+                }
+            })
+        },
+        getNowCow() {
+
+            this.getCowInfo(this.formData.cowID, 2).then((data) => {
+                // console.log(data)
+                var list = []
+                Object.keys(data).forEach(item => {
+                    list.push({
+                        key: item,
+                        value: data[item]
+                    })
+                })
+
+                // console.log(list)
+
+                this.tableData = list
+                if (data['繁殖状态'] == '复检有胎' || data['繁殖状态'] == '初检已孕') {
+                    this.$alert('当前牛号已经有胎,不允许录入配种信息,但目前允许选择冻精进行数据查看等。(可通过数据更正方式重置上次的妊检结果为未孕或无胎,再进行操作)', '提示', {
+                        confirmButtonText: '确定',
+                        callback: action => {
+                            this.formData.cowID = ''
+                        }
+                    });
+                }
+            }).catch(() => {
+                this.formData.cowID = ''
+            })
+
+
+        },
+        rowClick(row) {
+            this.formData = {
+                cowID: row['牛号'],
+                isMate: '0',
+                mateMode: this.mateModes[0]['详细方式'],
+                bull: '',
+                person: '',
+            }
+
+            this.getNowCow()
+        }
+    }
+}
+</script>
+<style lang="less" scoped>
+.containMain {
+    background: rgba(255, 255, 255, 1);
+    border-radius: 4px;
+    padding: 15px;
+    // margin-right: 10px;
+    .contentTitle {
+        border-bottom: 1px solid #f2f4f5;
+    }
+    // min-width: 450px;
+
+    .sub {
+        font-size: 14px;
+        font-weight: 600;
+        color: rgba(102, 102, 102, 1);
+        line-height: 20px;
+        margin-bottom: 40px;
+        padding-left: 20px;
+    }
+}
+
+.contentTitle {
+    font-size: 16px;
+    font-weight: bold;
+    color: rgba(0, 0, 0, 1);
+    line-height: 22px;
+    letter-spacing: 1px;
+    padding-bottom: 14px;
+    span {
+        font-size: 13px;
+        color: rgba(102, 102, 102, 1);
+        line-height: 18px;
+        margin-left: 10px;
+    }
+}
+.selectContent {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    padding: 20px 0;
+}
+
+.tableNum {
+    font-size: 13px;
+    font-weight: bold;
+    color: rgba(102, 102, 102, 1);
+    line-height: 18px;
+    padding-bottom: 15px;
+}
+.containAside {
+    padding: 0;
+
+    display: flex;
+    flex-direction: column;
+    .asideInfo {
+        flex-grow: 1;
+        background: rgba(255, 255, 255, 1);
+        border-radius: 4px;
+        padding: 15px;
+    }
+}
+
+.item {
+    .item-title {
+        font-size: 14px;
+        font-weight: bold;
+
+        color: rgba(0, 0, 0, 1);
+        line-height: 20px;
+        letter-spacing: 1px;
+    }
+
+    .text {
+        font-size: 13px;
+        color: rgba(0, 0, 0, 1);
+        line-height: 18px;
+        letter-spacing: 1px;
+        word-wrap: break-word;
+        padding: 10px 0 15px;
+    }
+}
+</style>

+ 498 - 0
src/main/vue/src/pages/HandleHoofCare.vue

@@ -0,0 +1,498 @@
+<template>
+    <el-container style="flex-grow:1">
+        <el-aside class="containAside" width="500px" style=" margin-right: 10px;">
+            <div class="asideInfo">
+                <div class="contentTitle">{{pageTitle}}
+
+                    <!-- <span>{{list.length}}头奶牛</span> -->
+                </div>
+                <div class="selectContent">
+                    <el-select v-model="task" placeholder="请选择围产期护理" style="width:230px">
+                        <el-option v-for="item in taskList" :key="item.type" :label="item.name" :value="item.type">
+                        </el-option>
+                    </el-select>
+
+                    <el-select v-model="cowshed" placeholder="请选择牛舍" style="width:230px">
+                        <el-option v-for="item in cowShedList" :key="item" :label="item" :value="item">
+                        </el-option>
+                    </el-select>
+                    <!-- <el-button type="primary" plain @click="filitDayList=filitDay">筛选</el-button> -->
+
+                </div>
+                <div class="tableNum">
+                    {{filitList.length}}头奶牛
+                </div>
+                <el-table class="handleTable" border :data="filitList" style="width: 100%" :height='(allHeight-184)+"px"' size='small' @row-click='rowClick'>
+                    <el-table-column prop="牛号" label="牛号" fixed="left" align="center">
+                    </el-table-column>
+                    <el-table-column prop="当前牛舍" label="牛舍" align="center">
+                    </el-table-column>
+                    <el-table-column prop="建议修蹄日期" label="建议修蹄日期" align="center" width="140">
+                    </el-table-column>
+                    <el-table-column prop="当前胎次" label="当前胎次" align="center">
+                    </el-table-column>
+                    <el-table-column prop="泌乳状态" label="泌乳状态" align="center">
+                    </el-table-column>
+                    <el-table-column prop="繁殖状态" label="繁殖状态" align="center">
+                    </el-table-column>
+                    <el-table-column prop="配种日期" label="配种日期" width="140" align="center">
+                    </el-table-column>
+
+                </el-table>
+            </div>
+        </el-aside>
+        <el-main class="containMain">
+            <div class="contentTitle">{{nowTaskJson.name}}信息登记</div>
+            <el-form ref="form" :model="formData" style="margin-top:20px;" label-width="80px">
+                <el-form-item label="" label-width="0">
+                    <el-input v-model="formData.cowID" prefix-icon="el-icon-search" style="width:300px" maxlength="8"></el-input>
+                    <el-button type="primary" @click="getNowCow" style="width:90px;margin-left:12px">确认</el-button>
+                </el-form-item>
+                <div class="sub" v-if="tableData.length>0">
+                    操作牛号:{{chooseCowInfo['牛号']}}
+                </div>
+
+                <el-form-item label="修蹄情况">
+                    <div class="HoofList">
+                        <div class="hoof-item" :class="{active:formData.nursing_FL==1}" @click="formData.nursing_FL=(formData.nursing_FL==1?0:1)">
+                            {{formData.nursing_FL==1?'已修':'未修'}}
+                        </div>
+                        <div class="hoof-item" :class="{active:formData.nursing_BL==1}" @click="formData.nursing_BL=(formData.nursing_BL==1?0:1)">
+                            {{formData.nursing_BL==1?'已修':'未修'}}
+
+                        </div>
+                        <div class="hoof-item" :class="{active:formData.nursing_FR==1}" @click="formData.nursing_FR=(formData.nursing_FR==1?0:1)">
+                            {{formData.nursing_FR==1?'已修':'未修'}}
+
+                        </div>
+                        <div class="hoof-item" :class="{active:formData.nursing_BR==1}" @click="formData.nursing_BR=(formData.nursing_BR==1?0:1)">
+                            {{formData.nursing_BR==1?'已修':'未修'}}
+
+                        </div>
+                    </div>
+
+                </el-form-item>
+
+                <el-form-item label="破行级别">
+                    <el-select v-model="formData.level" placeholder="请选择围产期护理" style="width:230px">
+                        <el-option v-for="item in levelList" :key="item" :label="item" :value="item">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="蹄病类型">
+                    <el-select v-model="formData.type" placeholder="请选择围产期护理" style="width:230px">
+                        <el-option v-for="item in typeList" :key="item['名称']" :label="item['名称']" :value="item['名称']">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="上次修蹄">
+                    <el-input v-model="formData.nursingDate" disabled style="width:230px"></el-input>
+                </el-form-item>
+
+                <div style="margin-top:80px">
+                    <el-button @click="onSave" type="primary" style="width:98px;" size="mediu">确认保存</el-button>
+
+                </div>
+            </el-form>
+        </el-main>
+        <el-aside class="containAside" width="450px" style=" margin-left: 10px;">
+            <div class="asideInfo">
+                <div class="contentTitle">牛只信息</div>
+                <el-table class="handleTable" border :data="tableData" style="width: 100%" :height='(allHeight-70)+"px"' size='small'>
+                    <el-table-column prop="key" label="参数">
+                    </el-table-column>
+                    <el-table-column prop="value" label="当前牛只信信息">
+                    </el-table-column>
+                </el-table>
+            </div>
+        </el-aside>
+    </el-container>
+</template>
+<script>
+import formValidator from '../formValidator'
+import axios from 'axios'
+import { mapState } from 'vuex'
+export default {
+    created() {
+        //任务列表
+        this.getList(1)
+
+
+        //获取全部疾病
+        this.getHaleInfo('wsCow', 'getUserDict', [
+            'HoofTreatment'
+        ], 'list').then((data) => {
+            this.typeList = [{ 名称: '暂无蹄病' }]
+            this.typeList = this.typeList.concat(data)
+            this.formData.type = this.typeList[0]['名称']
+        })
+
+    },
+    data() {
+        return {
+            saving: false,
+            formData: {
+                cowID: '',
+                type: '',
+                level: '0分:正常',
+                nursingDate: '',
+                nursing_FL: 1,
+                nursing_BL: 1,
+                nursing_FR: 1,
+                nursing_BR: 1
+            },
+            mateModes: [],
+            levelList: ['0分:正常', '1分:轻微破行', '2分:中度破行', '3分:破行', '4分:严重破行'],
+            bulls: [],
+            tableData: [],
+            list: [],
+            cowshed: '',
+            task: 2,
+            typeList: [],
+            taskList: [{
+                name: '干奶修蹄',
+                type: 1,
+                use: '请注射维生素E'
+            }
+                , {
+                name: '泌乳牛普修',
+                type: 2,
+                use: '请投喂博威钙'
+            }
+                , {
+                name: '青年牛修蹄',
+                type: 3,
+                use: '2-3胎次需要投服一粒博威钙,继续护理请点"是",结束护理请点"否"(注意:结束护理后,将不再提示护理操作)'
+            }],
+            chooseCowInfo:{}
+        }
+    },
+    computed: {
+        ...mapState(['userInfo', 'allHeight']),
+        pageTitle() {
+            return this.$route.meta.title
+        },
+
+        cowShedList() {
+            var list = ['全部牛舍']
+            this.list.forEach(item => {
+                if (list.indexOf(item['当前牛舍']) == -1) {
+                    list.push(item['当前牛舍'])
+                }
+            })
+            return list
+        },
+        filitList() {
+            var list = []
+            if (this.cowshed) {
+                if (this.cowshed == '全部牛舍') {
+                    list = this.list
+                }
+                else {
+                    this.list.forEach(item => {
+                        if (item['当前牛舍'] == this.cowshed) {
+                            list.push(item)
+                        }
+                    })
+                }
+            }
+            return list
+        },
+        nowTaskJson() {
+            var jsonp = {}
+            if (this.task) {
+                this.taskList.forEach(item => {
+                    if (this.task == item.type) {
+                        jsonp = item
+                    }
+                })
+            }
+
+            return jsonp
+        }
+    },
+    watch: {
+        task() {
+            this.cowshed = ''
+            this.formData.cowID = ''
+            this.getList(1)
+        },
+        'formData.cowID'() {
+            if (this.formData.cowID.length != 8) {
+                return
+            }
+            this.getNowCow()
+        }
+    },
+    methods: {
+        getList(type) {
+            this.getHaleInfo('wsVeterinary', 'getHoofNursingTask', [
+                this.$store.state.farmName, this.task
+            ], 'list').then((data) => {
+                this.list = data
+
+                if (this.list.length == 0 && type == 1) {
+                    this.$alert('暂无需要处理的奶牛', '提示', {
+                        confirmButtonText: '确定',
+                        callback: action => {
+
+                        }
+                    });
+                }
+
+            })
+        },
+        onSave() {
+            if (!this.formData.cowID) {
+                this.$message({
+                    message: '请录入牛只牛号',
+                    type: 'warning'
+                });
+                return
+            }
+
+
+            var jsonp = {}
+
+
+
+            this.getHaleInfo('wsVeterinary', 'addHoofNursing', [
+                {
+                    cowID: this.formData.cowID,
+                    nursingDate: Date.parse(new Date(this.formData.nursingDate)),
+                    nursing_FL: this.formData.nursing_FL,
+                    nursing_BL:this.formData.nursing_BL,
+                    nursing_FR: this.formData.nursing_FR,
+                    nursing_BR: this.formData.nursing_BR,
+                    level: this.formData.level,
+                    type: this.formData.type,
+                    recheckDate: Date.parse(new Date()),//复查日期F
+                },
+                this.chooseCowInfo['配种日期'] ? Date.parse(new Date(this.chooseCowInfo['配种日期'])) : Date.parse(new Date())
+
+            ], 'json').then((data) => {
+                console.log(data)
+                if (data.rtnCode == -1) {
+                    // this.$message({
+                    //     message: data.rtnMessage,
+                    //     type: 'warning'
+                    // });
+                    this.$alert(data.rtnMessage, '提示', {
+                        confirmButtonText: '确定',
+                        callback: action => {
+                            this.formData.cowID = ''
+                        }
+                    });
+                }
+                else {
+                    this.$message({
+                        message: '录入成功',
+                        type: 'success'
+                    });
+                    this.formData.cowID = ''
+                    this.getList()
+                }
+            })
+        },
+        saveFeed() {
+            var name = this.name.split('-')
+            this.getHaleInfo('wsVeterinary', 'addPCInfo', [
+                {
+                    cowID: this.formData['牛号'],
+                    careDate: Date.parse(new Date()),
+                    calvingDate: Date.parse(new Date(this.formData['产犊日期'])),
+                    bodyTemp: this.temperatureList.indexOf(this.bodyTemp),
+                    diseaseDate: Date.parse(new Date(this.formData['提示日期'])),
+                    diseaseCategory: name[0],
+                    diseaseName: name[1],
+                    isToHospital: this.isCheck
+                }
+            ], 'json').then((data) => {
+                console.log(data)
+                if (data.rtnCode == -1) {
+                    this.$alert(data.rtnMessage, '提示', {
+                        confirmButtonText: '确定',
+                        callback: action => {
+                            this.formData.cowID = ''
+                        }
+                    });
+                }
+                else {
+                    this.$message({
+                        message: '录入成功',
+                        type: 'success'
+                    });
+                    this.formData.cowID = ''
+                    this.getList()
+                }
+            })
+        },
+        badTreat() {
+            this.getHaleInfo('wsVeterinary', 'addPCFinishInfo', [
+                this.formData['牛号'], Date.parse(new Date(this.formData['产犊日期'])), '产犊', this.formData['产犊类型'], this.userInfo.username
+            ], 'json').then((data) => {
+                console.log(data)
+                if (data.rtnCode == -1) {
+                    this.$alert(data.rtnMessage, '提示', {
+                        confirmButtonText: '确定',
+                        callback: action => {
+                            this.formData.cowID = ''
+                        }
+                    });
+                }
+                else {
+                    this.$message({
+                        message: '录入成功',
+                        type: 'success'
+                    });
+                    this.formData.cowID = ''
+                    this.getList()
+                }
+            })
+        },
+        getNowCow(row) {
+            this.getHaleInfo('wsCow', 'getCowExtendInfoByCowID', [this.formData.cowID, 202], 'json').then((data) => {
+                // console.log(data)
+                this.chooseCowInfo=data
+                var list = []
+                Object.keys(data).forEach(item => {
+                    list.push({
+                        key: item,
+                        value: data[item]
+                    })
+                })
+
+                this.formData.nursingDate = data['上次修蹄日期']
+
+                // console.log(list)
+
+                this.tableData = list
+                // if (data['繁殖状态'] == '复检有胎' || data['繁殖状态'] == '初检已孕') {
+                //     this.$alert('当前牛号已经有胎,不允许录入初检信息,但目前允许选择冻精进行数据查看等。(可通过数据更正方式重置上次的妊检结果为未孕或无胎,再进行操作)', '提示', {
+                //         confirmButtonText: '确定',
+                //         callback: action => {
+                //             this.formData.cowID = ''
+                //         }
+                //     });
+                // }
+            }).catch(() => {
+                this.formData.cowID = ''
+            })
+
+
+
+        },
+        rowClick(row) {
+            this.formData.cowID = row['牛号']
+            this.getNowCow(row)
+        }
+    }
+}
+</script>
+<style lang="less" scoped>
+.containMain {
+    background: rgba(255, 255, 255, 1);
+    border-radius: 4px;
+    padding: 15px;
+    // margin-right: 10px;
+    .contentTitle {
+        border-bottom: 1px solid #f2f4f5;
+    }
+    // min-width: 450px;
+
+    .sub {
+        font-size: 14px;
+        font-weight: 600;
+        color: rgba(102, 102, 102, 1);
+        line-height: 20px;
+        margin-bottom: 40px;
+        padding-left: 20px;
+    }
+}
+
+.contentTitle {
+    font-size: 16px;
+    font-weight: bold;
+    color: rgba(0, 0, 0, 1);
+    line-height: 22px;
+    letter-spacing: 1px;
+    padding-bottom: 14px;
+    span {
+        font-size: 13px;
+        color: rgba(102, 102, 102, 1);
+        line-height: 18px;
+        margin-left: 10px;
+    }
+}
+.selectContent {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    padding: 20px 0;
+}
+
+.tableNum {
+    font-size: 13px;
+    font-weight: bold;
+    color: rgba(102, 102, 102, 1);
+    line-height: 18px;
+    padding-bottom: 15px;
+}
+.containAside {
+    padding: 0;
+
+    display: flex;
+    flex-direction: column;
+    .asideInfo {
+        flex-grow: 1;
+        background: rgba(255, 255, 255, 1);
+        border-radius: 4px;
+        padding: 15px;
+    }
+}
+
+.item {
+    .item-title {
+        font-size: 14px;
+        font-weight: bold;
+
+        color: rgba(0, 0, 0, 1);
+        line-height: 20px;
+        letter-spacing: 1px;
+    }
+
+    .text {
+        font-size: 13px;
+        color: rgba(0, 0, 0, 1);
+        line-height: 18px;
+        letter-spacing: 1px;
+        word-wrap: break-word;
+        padding: 10px 0 15px;
+    }
+}
+
+.HoofList {
+    display: flex;
+    width: 130px;
+    flex-wrap: wrap;
+    justify-content: space-between;
+    .hoof-item {
+        width: 60px;
+        height: 60px;
+        border-radius: 4px;
+        font-size: 13px;
+        font-weight: bold;
+        color: rgba(255, 255, 255, 1);
+        line-height: 18px;
+        text-align: center;
+        line-height: 60px;
+        background: rgb(0, 85, 128);
+        margin-bottom: 10px;
+        cursor: pointer;
+
+        &.active {
+            background: rgba(133, 195, 6, 1);
+        }
+    }
+}
+</style>

+ 101 - 27
src/main/vue/src/pages/HandleMatch.vue

@@ -38,30 +38,41 @@
                         <el-radio label="1">否</el-radio>
                     </el-radio-group>
                 </el-form-item>
-                <el-form-item label="配种方式">
-                    <el-select v-model="formData.mateMode" placeholder="请选择">
-                        <el-option v-for="item in mateModes" :key="item['详细方式']" :label="item['详细方式']" :value="item['详细方式']">
-                        </el-option>
-                    </el-select>
-                </el-form-item>
-                <el-form-item label="配种冻精">
-                    <el-select v-model="formData.bull" placeholder="请选择">
-                        <el-option v-for="item in bulls" :key="item['牛号']" :label="item['牛号']" :value="item['牛号']">
-                        </el-option>
-                    </el-select>
+                <template v-if="formData.isMate==0">
+                    <el-form-item label="配种方式">
+                        <el-select v-model="formData.mateMode" placeholder="请选择">
+                            <el-option v-for="item in mateModes" :key="item['详细方式']" :label="item['详细方式']" :value="item['详细方式']">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="配种冻精">
+                        <el-select v-model="formData.bull" placeholder="请选择">
+                            <el-option v-for="item in bulls" :key="item['牛号']" :label="item['牛号']" :value="item['牛号']">
+                            </el-option>
+                        </el-select>
 
-                    <div>
-                        <el-popover placement="right" width="200" trigger="hover">
-                            <div class="conetnt">
-                                <div class="item" v-for="(item,key) in bullMsg">
-                                    <div class="item-title">{{key}}</div>
-                                    <div class="text">{{item}}</div>
+                        <div>
+                            <el-popover placement="right" width="200" trigger="hover">
+                                <div class="conetnt">
+                                    <div class="item" v-for="(item,key) in bullMsg">
+                                        <div class="item-title">{{key}}</div>
+                                        <div class="text">{{item}}</div>
+                                    </div>
                                 </div>
-                            </div>
-                            <el-button type="text" slot="reference">查看此冻精详情</el-button>
-                        </el-popover>
-                    </div>
-                </el-form-item>
+                                <el-button type="text" slot="reference">查看此冻精详情</el-button>
+                            </el-popover>
+                        </div>
+                    </el-form-item>
+                </template>
+                <template v-else>
+                     <el-form-item label="未配原因">
+                        <el-select v-model="formData.reason" placeholder="请选择">
+                            <el-option v-for="item in reasonList" :key="item['名称']" :label="item['名称']" :value="item['名称']">
+                            </el-option>
+                        </el-select>
+
+                    </el-form-item>
+                </template>
 
                 <el-form-item label="配种员">
                     <el-select v-model="formData.person" placeholder="请选择">
@@ -108,6 +119,11 @@ export default {
         ], 'list').then((data) => {
             this.bulls = data
         })
+         //未配原因
+        this.getHaleInfo('wsBreeding', 'getUnmateReason', [], 'list').then((data) => {
+            this.reasonList = data
+            this.formData.reason = data[0]['详细方式']
+        })
 
     },
     data() {
@@ -119,12 +135,15 @@ export default {
                 mateMode: '',
                 bull: '',
                 person: '',
+                reason:''
             },
             mateModes: [],
             methods: ['人工观察', '计步器揭发', '同期发情'],
             bulls: [],
             tableData: [],
             list: [],
+            editCowInfo: {},
+            reasonList:[]
         }
     },
     computed: {
@@ -179,6 +198,12 @@ export default {
                 return
             }
 
+            if (this.formData.isMate == '1') {
+                this.notMatch()
+                return
+            }
+
+
             if (!this.formData.bull) {
                 this.$message({
                     message: '请选择冻精',
@@ -196,11 +221,20 @@ export default {
             }
             this.formData.operators = this.userInfo.username
 
-            this.getHaleInfo('wsBreeding', 'addHeatingInfo', [{
-                cowID: this.formData.cowID,
-                heatingDate: Date.parse(new Date()),
-                heatingCase: this.formData.sign,
-                exposeMode: this.formData.method
+            this.getHaleInfo('wsBreeding', 'addMateInfo', [{
+                "cowID": this.formData.cowID,
+                "mateDate": Date.parse(new Date()),
+                "currFarm": this.$store.state.farmName,
+                "currGroup": this.editCowInfo['当前牛舍'],
+                "currCategory": this.editCowInfo['牛只类别'],
+                "groCode": this.editCowInfo['泌乳状态'],
+                "repCode": this.editCowInfo['繁殖状态'],
+                "currLact": parseInt(this.editCowInfo['当前胎次']),
+                "mateMode": this.formData.mateMode,
+                "mateBull": this.formData.bull,
+                "mateTimes": parseInt(this.editCowInfo['配次']) + 1,
+                "semens": this.bullMsg['女儿数'],
+                "operators": this.formData.person
             }], 'json').then((data) => {
                 console.log(data)
                 if (data.rtnCode == -1) {
@@ -225,6 +259,45 @@ export default {
                 }
             })
         },
+        notMatch() {
+
+            if (!this.formData.reason) {
+                this.$message({
+                    message: '请选择未配原因',
+                    type: 'warning'
+                });
+                return
+            }
+
+            if (!this.formData.person) {
+                this.$message({
+                    message: '请选择配种员',
+                    type: 'warning'
+                });
+                return
+            }
+            this.getHaleInfo('wsBreeding', 'updateHeatingByNomate', [
+                  this.formData.cowID, this.formData.reason, this.formData.person
+            ], 'json').then((data) => {
+                console.log(data)
+                if (data.rtnCode == -1) {
+                    this.$alert(data.rtnMessage, '提示', {
+                        confirmButtonText: '确定',
+                        callback: action => {
+                            this.formData.cowID = ''
+                        }
+                    });
+                }
+                else {
+                    this.$message({
+                        message: '录入成功',
+                        type: 'success'
+                    });
+                    this.formData.cowID = ''
+                    this.getList()
+                }
+            })
+        },
         getNowCow() {
 
             this.getCowInfo(this.formData.cowID, 2).then((data) => {
@@ -237,6 +310,7 @@ export default {
                     })
                 })
 
+                this.editCowInfo = data
                 // console.log(list)
 
                 this.tableData = list

+ 471 - 0
src/main/vue/src/pages/HandlePerinatalCare.vue

@@ -0,0 +1,471 @@
+<template>
+    <el-container style="flex-grow:1">
+        <el-aside class="containAside" width="500px" style=" margin-right: 10px;">
+            <div class="asideInfo">
+                <div class="contentTitle">{{pageTitle}}
+
+                    <!-- <span>{{list.length}}头奶牛</span> -->
+                </div>
+                <div class="selectContent">
+                    <el-select v-model="task" placeholder="请选择围产期护理" style="width:230px">
+                        <el-option v-for="item in taskList" :key="item.type" :label="item.name" :value="item.type">
+                        </el-option>
+                    </el-select>
+
+                    <el-select v-model="cowshed" placeholder="请选择牛舍" style="width:230px">
+                        <el-option v-for="item in cowShedList" :key="item" :label="item" :value="item">
+                        </el-option>
+                    </el-select>
+                    <!-- <el-button type="primary" plain @click="filitDayList=filitDay">筛选</el-button> -->
+
+                </div>
+                <div class="tableNum">
+                    {{filitList.length}}头奶牛
+                </div>
+                <el-table class="handleTable" border :data="filitList" style="width: 100%" :height='(allHeight-184)+"px"' size='small' @row-click='rowClick'>
+                    <el-table-column prop="牛号" label="牛号" fixed="left" align="center">
+                    </el-table-column>
+                    <el-table-column prop="当前牛舍" label="牛舍" align="center">
+                    </el-table-column>
+                    <el-table-column prop="当前胎次" label="当前胎次" align="center" width="70">
+                    </el-table-column>
+                    <el-table-column prop="繁殖状态" label="繁殖状态" align="center">
+                    </el-table-column>
+                    <el-table-column prop="泌乳状态" label="泌乳状态" align="center">
+                    </el-table-column>
+                    <el-table-column v-if="task==2" prop="配种日期" label="配种日期" width="120px" align="center">
+                    </el-table-column>
+                    <el-table-column v-if="task==2" prop="预产日期" label="预产日期" width="120px" align="center">
+                    </el-table-column>
+                    <el-table-column v-if="task!=2" prop="产犊日期" label="产犊日期" width="120px" align="center">
+                    </el-table-column>
+                    <el-table-column v-if="task==1" prop="产犊类型" label="产犊类型" align="center">
+                    </el-table-column>
+                    <el-table-column v-if="task==1" prop="提示日期" label="提示日期" width="120px" align="center">
+                    </el-table-column>
+                    <el-table-column v-if="task==3" prop="投喂博威钙次数" label="投喂博威钙次数" width="120px" align="center">
+                    </el-table-column>
+                    <el-table-column v-if="task==3" prop="投喂博威钙时间" label="投喂博威钙时间" width="160px" align="center">
+                    </el-table-column>
+
+                </el-table>
+            </div>
+        </el-aside>
+        <el-main class="containMain">
+            <div class="contentTitle">{{nowTaskJson.name}}信息登记</div>
+            <el-form ref="form" :model="formData" style="margin-top:20px;" label-width="120px">
+                <el-form-item label="" label-width="0">
+                    <el-input v-model="formData.cowID" disabled prefix-icon="el-icon-search" style="width:300px" maxlength="8"></el-input>
+                    <!-- <el-button type="primary" @click="getNowCow" style="width:90px;margin-left:12px">确认</el-button> -->
+                </el-form-item>
+                <div class="sub" v-if="tableData.length>0">
+                    操作牛号:{{tableData[0].value}}
+                </div>
+                <div style="margin:20px">
+                    <div style="margin-bottom:10px">{{nowTaskJson.use}}</div>
+
+                    <el-radio-group v-model="formData.isUse">
+                        <el-radio label="1">是</el-radio>
+                        <el-radio v-if="task==1" label="0">否</el-radio>
+                    </el-radio-group>
+                </div>
+                <template v-if="task==1&&formData.isUse=='1'">
+                    <el-form-item label="体温">
+                        <el-select v-model="bodyTemp" placeholder="请选择围产期护理" style="width:230px">
+                            <el-option v-for="item in temperatureList" :key="item" :label="item" :value="item">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="疾病名称">
+                        <el-select v-model="name" placeholder="请选择围产期护理" style="width:230px">
+                            <el-option v-for="item in allDiseaseInfo" :key="item['名称']" :label="item['名称']" :value="item['名称']">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="转入兽医院">
+                        <el-switch v-model="formData.isCheck">
+                        </el-switch>
+                    </el-form-item>
+                </template>
+
+                <div style="margin-top:80px">
+                    <el-button @click="onSave" type="primary" style="width:98px;" size="mediu">确认保存</el-button>
+
+                </div>
+            </el-form>
+        </el-main>
+        <el-aside class="containAside" width="450px" style=" margin-left: 10px;">
+            <div class="asideInfo">
+                <div class="contentTitle">牛只信息</div>
+                <el-table class="handleTable" border :data="tableData" style="width: 100%" :height='(allHeight-70)+"px"' size='small'>
+                    <el-table-column prop="key" label="参数">
+                    </el-table-column>
+                    <el-table-column prop="value" label="当前牛只信信息">
+                    </el-table-column>
+                </el-table>
+            </div>
+        </el-aside>
+    </el-container>
+</template>
+<script>
+import formValidator from '../formValidator'
+import axios from 'axios'
+import { mapState } from 'vuex'
+export default {
+    created() {
+        //任务列表
+        this.getList(1)
+
+
+        //获取全部疾病
+        this.getHaleInfo('wsCow', 'getUserDict', [
+            'PostpartumCare'
+        ], 'list').then((data) => {
+            this.allDiseaseInfo = data
+            if (data.length > 4) {
+                this.name = data[3]['名称']
+            } else if (data.length > 0) {
+                this.name = data[0]['名称']
+            }
+
+
+        })
+
+    },
+    data() {
+        return {
+            saving: false,
+            formData: {
+                cowID: '',
+                isUse: '1',
+            },
+            mateModes: [],
+            methods: ['人工观察', '计步器揭发', '同期发情'],
+            bulls: [],
+            tableData: [],
+            list: [],
+            cowshed: '',
+            task: 2,
+            name: '',
+            isCheck: false,
+            bodyTemp: '38.5-39度',
+            temperatureList: ['37度及以下', '37-37.5度', '37.5-38度', '38-38.5度', '38.5-39度', '39-39.5度', '39.5度-40度', '40-40.5度', '40.5-41度', '41度及以上'],
+            allDiseaseInfo: [],
+            taskList: [{
+                name: '产前保健',
+                type: 2,
+                use: '请注射维生素E'
+            }
+            // , {
+            //     name: '投喂博威钙',
+            //     type: 3,
+            //     use: '请投喂博威钙'
+            // }
+            , {
+                name: '产后保健',
+                type: 1,
+                use: '2-3胎次需要投服一粒博威钙,继续护理请点"是",结束护理请点"否"(注意:结束护理后,将不再提示护理操作)'
+            }]
+        }
+    },
+    computed: {
+        ...mapState(['userInfo', 'allHeight']),
+        pageTitle() {
+            return this.$route.meta.title
+        },
+
+        cowShedList() {
+            var list = ['全部牛舍']
+            this.list.forEach(item => {
+                if (list.indexOf(item['当前牛舍']) == -1) {
+                    list.push(item['当前牛舍'])
+                }
+            })
+            return list
+        },
+        filitList() {
+            var list = []
+            if (this.cowshed) {
+                if (this.cowshed == '全部牛舍') {
+                    list = this.list
+                }
+                else {
+                    this.list.forEach(item => {
+                        if (item['当前牛舍'] == this.cowshed) {
+                            list.push(item)
+                        }
+                    })
+                }
+            }
+            return list
+        },
+        nowTaskJson() {
+            var jsonp = {}
+            if (this.task) {
+                this.taskList.forEach(item => {
+                    if (this.task == item.type) {
+                        jsonp = item
+                    }
+                })
+            }
+
+            return jsonp
+        }
+    },
+    watch: {
+        task() {
+            this.cowshed = ''
+            this.formData.cowID = ''
+            this.getList(1)
+        }
+    },
+    methods: {
+        getList(type) {
+            this.getHaleInfo('wsVeterinary', 'getPCTask', [
+                this.$store.state.farmName, this.task
+            ], 'list').then((data) => {
+                this.list = data
+
+                if (this.list.length == 0 && type == 1) {
+                    this.$alert('暂无需要处理的奶牛', '提示', {
+                        confirmButtonText: '确定',
+                        callback: action => {
+
+                        }
+                    });
+                }
+
+            })
+        },
+        onSave() {
+            if (!this.formData.cowID) {
+                this.$message({
+                    message: '请录入牛只牛号',
+                    type: 'warning'
+                });
+                return
+            }
+
+            var list = [{
+                name: '产前保健',
+                type: 'addInjectVitaInfo',
+                params: [
+                    this.formData['牛号'], this.formData['当前胎次'], this.userInfo.username
+                ]
+            }, {
+                name: '投喂博威钙',
+                type: 'addFeedCalInfo',
+                params: [
+                    this.formData['牛号'], Date.parse(new Date(this.formData['产犊日期'])), this.userInfo.username
+                ]
+            }, {
+                name: '产后保健',
+                type: 'addPCFinishInfo',
+            }]
+
+            if (this.task == 1) {
+                if (this.formData.isUse == '0') {
+                    this.badTreat()
+                    return
+                }
+                else {
+                    this.saveFeed()
+                    return
+                }
+            }
+
+            var jsonp = {}
+
+            list.forEach(item => {
+                if (item.name == this.nowTaskJson.name) {
+                    jsonp = item
+                }
+            })
+
+            this.getHaleInfo('wsVeterinary', jsonp.type, jsonp.params, 'json').then((data) => {
+                console.log(data)
+                if (data.rtnCode == -1) {
+                    // this.$message({
+                    //     message: data.rtnMessage,
+                    //     type: 'warning'
+                    // });
+                    this.$alert(data.rtnMessage, '提示', {
+                        confirmButtonText: '确定',
+                        callback: action => {
+                            this.formData.cowID = ''
+                        }
+                    });
+                }
+                else {
+                    this.$message({
+                        message: '录入成功',
+                        type: 'success'
+                    });
+                    this.formData.cowID = ''
+                    this.getList()
+                }
+            })
+        },
+        saveFeed() {
+            var name = this.name.split('-')
+            this.getHaleInfo('wsVeterinary', 'addPCInfo', [
+                {
+                    cowID: this.formData['牛号'],
+                    careDate: Date.parse(new Date()),
+                    calvingDate: Date.parse(new Date(this.formData['产犊日期'])),
+                    bodyTemp: this.temperatureList.indexOf(this.bodyTemp),
+                    diseaseDate: Date.parse(new Date(this.formData['提示日期'])),
+                    diseaseCategory: name[0],
+                    diseaseName: name[1],
+                    isToHospital: this.isCheck
+                }
+            ], 'json').then((data) => {
+                console.log(data)
+                if (data.rtnCode == -1) {
+                    this.$alert(data.rtnMessage, '提示', {
+                        confirmButtonText: '确定',
+                        callback: action => {
+                            this.formData.cowID = ''
+                        }
+                    });
+                }
+                else {
+                    this.$message({
+                        message: '录入成功',
+                        type: 'success'
+                    });
+                    this.formData.cowID = ''
+                    this.getList()
+                }
+            })
+        },
+        badTreat() {
+            this.getHaleInfo('wsVeterinary', 'addPCFinishInfo', [
+                this.formData['牛号'], Date.parse(new Date(this.formData['产犊日期'])), '产犊', this.formData['产犊类型'], this.userInfo.username
+            ], 'json').then((data) => {
+                console.log(data)
+                if (data.rtnCode == -1) {
+                    this.$alert(data.rtnMessage, '提示', {
+                        confirmButtonText: '确定',
+                        callback: action => {
+                            this.formData.cowID = ''
+                        }
+                    });
+                }
+                else {
+                    this.$message({
+                        message: '录入成功',
+                        type: 'success'
+                    });
+                    this.formData.cowID = ''
+                    this.getList()
+                }
+            })
+        },
+        getNowCow(row) {
+            var list = []
+            Object.keys(row).forEach(item => {
+                list.push({
+                    key: item,
+                    value: row[item]
+                })
+            })
+
+            // console.log(list)
+
+            this.tableData = list
+
+
+
+        },
+        rowClick(row) {
+            row.cowID = row['牛号']
+            row.isUse = '1'
+            this.formData = { ...row }
+            this.getNowCow(row)
+        }
+    }
+}
+</script>
+<style lang="less" scoped>
+.containMain {
+    background: rgba(255, 255, 255, 1);
+    border-radius: 4px;
+    padding: 15px;
+    // margin-right: 10px;
+    .contentTitle {
+        border-bottom: 1px solid #f2f4f5;
+    }
+    // min-width: 450px;
+
+    .sub {
+        font-size: 14px;
+        font-weight: 600;
+        color: rgba(102, 102, 102, 1);
+        line-height: 20px;
+        margin-bottom: 40px;
+        padding-left: 20px;
+    }
+}
+
+.contentTitle {
+    font-size: 16px;
+    font-weight: bold;
+    color: rgba(0, 0, 0, 1);
+    line-height: 22px;
+    letter-spacing: 1px;
+    padding-bottom: 14px;
+    span {
+        font-size: 13px;
+        color: rgba(102, 102, 102, 1);
+        line-height: 18px;
+        margin-left: 10px;
+    }
+}
+.selectContent {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    padding: 20px 0;
+}
+
+.tableNum {
+    font-size: 13px;
+    font-weight: bold;
+    color: rgba(102, 102, 102, 1);
+    line-height: 18px;
+    padding-bottom: 15px;
+}
+.containAside {
+    padding: 0;
+
+    display: flex;
+    flex-direction: column;
+    .asideInfo {
+        flex-grow: 1;
+        background: rgba(255, 255, 255, 1);
+        border-radius: 4px;
+        padding: 15px;
+    }
+}
+
+.item {
+    .item-title {
+        font-size: 14px;
+        font-weight: bold;
+
+        color: rgba(0, 0, 0, 1);
+        line-height: 20px;
+        letter-spacing: 1px;
+    }
+
+    .text {
+        font-size: 13px;
+        color: rgba(0, 0, 0, 1);
+        line-height: 18px;
+        letter-spacing: 1px;
+        word-wrap: break-word;
+        padding: 10px 0 15px;
+    }
+}
+</style>

+ 360 - 0
src/main/vue/src/pages/HandleTransferHouse.vue

@@ -0,0 +1,360 @@
+<template>
+    <el-container style="flex-grow:1">
+        <el-main class="containMain">
+            <div class="contentTitle">{{pageTitle}}
+                <el-select v-model="transform" size="mini" placeholder="请选择转舍类别" style="float:right">
+                    <el-option v-for="item in ['自定义转牛','整舍转牛']" :key="item" :label="item" :value="item">
+                    </el-option>
+                </el-select>
+
+            </div>
+            <el-form ref="form" :model="formData" label-width="80px" style="margin-top:20px;">
+                <el-form-item label="" label-width="0" v-if="transform=='自定义转牛'">
+                    <el-input v-model="formData.cowID" prefix-icon="el-icon-search" style="width:300px" maxlength="8"></el-input>
+                    <el-button type="primary" @click="getNowCow" style="width:90px;margin-left:12px">确认</el-button>
+                </el-form-item>
+
+                <el-card v-if="formData.list.length>0" style="margin-bottom:20px">
+                    <el-row type='flex'>
+                        <div class="item" v-for="(item,index) in formData.list">
+                            <span> {{item}}</span>
+                            <i class="el-icon-error" @click="delCow(index)"></i>
+                        </div>
+                    </el-row>
+                </el-card>
+
+                <el-form-item label="转出牛舍" v-if="transform=='整舍转牛'">
+                    <el-select v-model="formData.outCowshed" placeholder="请选择">
+                        <el-option v-for="item in cowShedList" :key="item['牛舍编号']" :label="item['牛舍编号']" :value="item['牛舍编号']">
+                        </el-option>
+                    </el-select>
+                    <div class="num">
+                        奶牛数:{{outCowshedInfo['当前存栏数']}}
+                    </div>
+                </el-form-item>
+
+                <el-form-item label="转入牛舍">
+                    <el-select v-model="formData.inCowshed" placeholder="请选择">
+                        <el-option v-for="item in cowShedList" :key="item['牛舍编号']" :label="item['牛舍编号']" :value="item['牛舍编号']">
+                        </el-option>
+                    </el-select>
+
+                    <div class="num" v-if="transform=='整舍转牛'">
+                        奶牛数:{{inCowshedInfo['当前存栏数']}}
+                    </div>
+                </el-form-item>
+                <el-form-item label="转舍原因">
+                    <el-select v-model="formData.reason" placeholder="请选择">
+                        <el-option v-for="item in reasons" v-if="reasons.length>0" :key="item" :label="item" :value="item">
+                        </el-option>
+                    </el-select>
+
+                </el-form-item>
+
+                <div style="margin-top:80px">
+                    <el-button @click="onSave" type="primary" style="width:98px;" size="mediu">确认提交</el-button>
+
+                </div>
+            </el-form>
+        </el-main>
+        <el-aside class="containAside" width="450px">
+            <div class="asideInfo">
+                <div class="contentTitle">牛只信息</div>
+                <el-table class="handleTable" border :data="tableData" style="width: 100%" :height='(allHeight-70)+"px"' size='small'>
+                    <el-table-column prop="key" label="参数">
+                    </el-table-column>
+                    <el-table-column prop="value" label="当前牛只信信息">
+                    </el-table-column>
+                </el-table>
+            </div>
+        </el-aside>
+    </el-container>
+
+</template>
+<script>
+import formValidator from '../formValidator'
+import axios from 'axios'
+import { mapState } from 'vuex'
+export default {
+    created() {
+        //牛舍列表
+        this.getCowshed()
+
+    },
+    data() {
+        return {
+            saving: false,
+            formData: {
+                "cowID": '',
+                'inCowshed': '',
+                'outCowshed': '',
+                'reason': '',
+                'list': []
+            },
+            reasons: ['按产后天数分群', '按月龄分群', '按在胎天数分群', '病牛出院', '病牛转舍', '哺乳转断奶', '产后调整', '产后牛转群', '初产转高产', '传染病隔离', '待产', '待淘牛集中', '犊牛入舍', '断奶转育成', '干奶修蹄转群', '干奶转群', '高产牛分栏', '过抗转舍', '合栏饲养', '混群调整', '牛群普查调整', '围产调整', '新发其他疾病转群', '新发乳房炎转群', '新发蹄病转群', '育成牛按体高分群', '整舍调整', '转参配牛', '转场', '转低产牛', '转高产1', '转高产2', '转禁配牛', '转流产牛', '转有胎牛', '转早产牛'],
+            tableData: [],
+            transform: '自定义转牛',
+            cowShedList: []
+        }
+    },
+    computed: {
+        ...mapState(['userInfo', 'allHeight']),
+        pageTitle() {
+            return this.$route.meta.title
+        },
+        inCowshedInfo() {
+            var jsonp = {}
+            if (this.formData.inCowshed) {
+                this.cowShedList.forEach(item => {
+                    if (item['牛舍编号'] == this.formData.inCowshed) {
+                        jsonp = item
+                    }
+                })
+
+            }
+
+            return jsonp
+        },
+        outCowshedInfo() {
+            var jsonp = {}
+            if (this.formData.outCowshed) {
+                this.cowShedList.forEach(item => {
+                    if (item['牛舍编号'] == this.formData.outCowshed) {
+                        jsonp = item
+                    }
+                })
+
+            }
+
+            return jsonp
+        },
+    },
+    watch: {
+        'formData.reason'() {
+            setTimeout(() => {
+                this.formData.remark = this.remarks[0]
+            }, 100)
+        },
+        'formData.cowID'() {
+            if (this.formData.cowID.length != 8) {
+                return
+            }
+            this.getNowCow()
+        }
+    },
+    methods: {
+        getCowshed() {
+            this.getHaleInfo('wsCow', 'getAllGroupByFarmName', [
+                this.$store.state.farmName
+            ], 'list').then((data) => {
+                this.cowShedList = data
+            })
+        },
+        onSave() {
+            if (this.transform == '自定义转牛' && this.formData.list.length == 0) {
+                this.$message({
+                    message: '请录入转舍牛只',
+                    type: 'warning'
+                });
+                return
+            }
+            if (this.transform == '整舍转牛' && !this.formData.outCowshed) {
+                this.$message({
+                    message: '请录选择转出牛舍',
+                    type: 'warning'
+                });
+                return
+            }
+            if (!this.formData.inCowshed) {
+                this.$message({
+                    message: '请录选择转入牛舍',
+                    type: 'warning'
+                });
+                return
+            }
+
+            if (!this.formData.reason) {
+                this.$message({
+                    message: '请录选择转舍原因',
+                    type: 'warning'
+                });
+                return
+            }
+
+            if (this.transform == '整舍转牛') {
+                this.saveAll()
+                return
+            }
+
+
+
+            this.getHaleInfo('wsCow', 'bulkChangeGroup', [
+                this.formData.list, this.formData.inCowshed, this.formData.reason, this.userInfo.username
+            ], 'json').then((data) => {
+                console.log(data)
+                if (data.rtnCode == -1) {
+                    this.$alert(data.rtnMessage, '提示', {
+                        confirmButtonText: '确定',
+                        callback: action => {
+                            this.formData.cowID = ''
+                        }
+                    });
+                }
+                else {
+                    if (this.transform == '自定义转牛') {
+                        this.$alert('成功将' + data.rtnCode + '头牛进行转舍操作<br/>未成功转舍的牛只存在以下可能:<br/>1、牛号未在系统登录;<br/>2、牛只已经离场;<br/>3、当前牛舍与目标牛舍一致;<br/>4、牛只不在当前牧场', '提示', {
+                            confirmButtonText: '确定',
+                            dangerouslyUseHTMLString: true,
+                            callback: action => {
+
+                            }
+                        });
+                    }
+                    else {
+                        this.$message({
+                            message: '录入成功',
+                            type: 'success'
+                        });
+                    }
+
+
+                }
+            })
+        },
+        saveAll() {
+            this.getHaleInfo('wsCow', 'bulkChangeGroupByWholeGroup', [
+                this.$store.state.farmName, this.formData.outCowshed, this.formData.inCowshed, this.formData.reason, this.userInfo.username
+            ], 'json').then((data) => {
+                console.log(data)
+                if (data.rtnCode == -1) {
+                    this.$alert(data.rtnMessage, '提示', {
+                        confirmButtonText: '确定',
+                        callback: action => {
+                            this.formData.cowID = ''
+                        }
+                    });
+                }
+                else {
+                    this.$alert('成功将' + data.rtnCode + '头牛进行转舍操作<br/>未成功转舍的牛只存在以下可能:<br/>1、牛号未在系统登录;<br/>2、牛只已经离场;<br/>3、当前牛舍与目标牛舍一致;<br/>4、牛只不在当前牧场', '提示', {
+                        confirmButtonText: '确定',
+                        dangerouslyUseHTMLString: true,
+                        callback: action => {
+                            this.getCowshed()
+                        }
+                    });
+
+
+                }
+            })
+        },
+        getNowCow() {
+
+            this.getCowInfo(this.formData.cowID, 99).then((data) => {
+                this.formData.cowID = ''
+                if (data['离场日期']) {
+                    this.$alert('当前牛只已经离场,不能转舍。', '提示', {
+                        confirmButtonText: '确定',
+                        callback: action => {
+
+                        }
+                    });
+                    return
+                }
+
+                var list = []
+                Object.keys(data).forEach(item => {
+                    list.push({
+                        key: item,
+                        value: data[item]
+                    })
+                })
+                this.tableData = list
+                this.formData.list.push(data['牛号'])
+            }).catch(() => {
+                this.formData.cowID = ''
+            })
+        },
+        delCow(index) {
+            this.formData.list.splice(index, 1)
+        }
+    }
+}
+</script>
+<style lang="less" scoped>
+.containMain {
+    background: rgba(255, 255, 255, 1);
+    border-radius: 4px;
+    padding: 15px;
+    // margin-right: 10px;
+    .contentTitle {
+        border-bottom: 1px solid #f2f4f5;
+    }
+    // min-width: 450px;
+
+    .sub {
+        font-size: 14px;
+        font-weight: 600;
+        color: rgba(102, 102, 102, 1);
+        line-height: 20px;
+        margin-bottom: 40px;
+        padding-left: 20px;
+    }
+}
+
+.contentTitle {
+    font-size: 16px;
+    font-weight: bold;
+    color: rgba(0, 0, 0, 1);
+    line-height: 22px;
+    letter-spacing: 1px;
+    padding-bottom: 14px;
+}
+
+.containAside {
+    padding: 0;
+    margin-left: 10px;
+    display: flex;
+    flex-direction: column;
+    .asideInfo {
+        flex-grow: 1;
+        background: rgba(255, 255, 255, 1);
+        border-radius: 4px;
+        padding: 15px;
+    }
+}
+
+.num {
+    display: inline-block;
+    width: 138px;
+    height: 40px;
+    background: rgba(225, 228, 230, 1);
+    border-radius: 4px;
+    font-size: 14px;
+    font-weight: bold;
+    color: rgba(0, 0, 0, 1);
+    line-height: 40px;
+    text-align: center;
+    margin-left: 20px;
+}
+
+.item {
+    width: 120px;
+    height: 30px;
+    background: rgba(236, 245, 255, 1);
+    border-radius: 2px;
+    border: 1px solid rgba(0, 150, 224, 1);
+    font-size: 14px;
+    font-weight: bold;
+    color: rgba(0, 150, 224, 1);
+    line-height: 30px;
+    letter-spacing: 1px;
+    padding: 0 10px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-right: 10px;
+    i {
+        cursor: pointer;
+    }
+}
+</style>

+ 40 - 0
src/main/vue/src/router/index.js

@@ -415,6 +415,46 @@ const router = new Router({
                         type: '手持机录入',
                         title: '干奶登记'
                     }
+                },
+                {
+                    path: '/handlePerinatalCare',
+                    name: 'handlePerinatalCare',
+                    component: () =>
+                        import ('../pages/HandlePerinatalCare'),
+                    meta: {
+                        type: '手持机录入',
+                        title: '围产期护理'
+                    }
+                },
+                {
+                    path: '/handleFeeding',
+                    name: 'handleFeeding',
+                    component: () =>
+                        import ('../pages/HandleFeeding'),
+                    meta: {
+                        type: '手持机录入',
+                        title: '投喂博威钙'
+                    }
+                },
+                {
+                    path: '/handleHoofCare',
+                    name: 'handleHoofCare',
+                    component: () =>
+                        import ('../pages/HandleHoofCare'),
+                    meta: {
+                        type: '手持机录入',
+                        title: '修蹄保健'
+                    }
+                },
+                {
+                    path: '/handleTransferHouse',
+                    name: 'handleTransferHouse',
+                    component: () =>
+                        import ('../pages/HandleTransferHouse'),
+                    meta: {
+                        type: '手持机录入',
+                        title: '奶牛转舍'
+                    }
                 }
             ]
         },

+ 1 - 1
src/main/vue/src/vuex/index.js

@@ -9,7 +9,7 @@ export default new Vuex.Store({
         allHeight: 0,
         fetchingData: false,
         userInfo: null,
-        farmName: '金',
+        farmName: '金',
         loginHistory: [{
             name: '/dashboard',
             title: '首页'