linan 4 سال پیش
والد
کامیت
02c0de55d7

+ 1 - 0
package.json

@@ -35,6 +35,7 @@
     "eslint-plugin-vue": "^5.0.0",
     "node-sass": "^4.14.1",
     "prettier": "^1.18.2",
+    "qs": "^6.9.4",
     "sass-loader": "^9.0.0",
     "sass-resources-loader": "^2.0.3",
     "stylus": "^0.54.7",

+ 3 - 0
src/api/deliveryRoomManagement.js

@@ -3,3 +3,6 @@ import { ajax } from "../sdk/ajax";
 
 /* 产房信息 DeliveryRoom*/
 export const reqDeliveryRoom = (data) => ajax("post", "/farm-piglet/table/list", data)
+
+/* 产房配置 DeliveryRoomConfig*/
+export const reqDeliveryRoom = (data) => ajax("post", "/farm-piglet/table/device", data)

+ 4 - 0
src/api/index.js

@@ -0,0 +1,4 @@
+import { ajax } from "../sdk/ajax";
+
+/* 产房信息 */
+export const reqIndexInfo = () => ajax("get", "/farm-piglet/table/status")

+ 1 - 1
src/api/infoInform.js

@@ -2,7 +2,7 @@ import { ajax } from "../sdk/ajax";
 // 消息通知
 
 /* 生产预警  ProductionWarn */
-export const reqProductionWarnList = () => ajax("post", "/farm-piglet/production-warning/list")
+export const reqProductionWarnList = (datd) => ajax("post", "/farm-piglet/production-warning/list", datd)
 
 
 /* 设备故障  DvFault == DeviceFault*/

+ 11 - 4
src/api/system.js

@@ -1,9 +1,16 @@
 import { ajax } from "../sdk/ajax";
 // 系统配置
 
-/* 设备故障  DvFault == DeviceFault*/
-export const reqDvFaultList = (data) => ajax("post", "/farm-huyang/device/list", data)
+/* 获取设备配置 DeviceConfig*/
+export const reqDeviceConfig = () => ajax("get", "/publics/sysconf/get", {code: 'piglet_deviceConfig'})
+// 添加设备配置
+export const reqAddOrUpdateDeviceConfig = (data) => {
+    if(data.id) {
+        return ajax("post", "/publics/sysconf/update", data)
+    } else {
+        // return ajax("post", "/publics/sysconf/add", {code: 'piglet_deviceConfig', conf: JSON.stringify(data.conf), name: '猪仔管家设备配置'})
+        return ajax("post", "/publics/sysconf/add", data)
+    }
+}
 
-export const reqAddDvFault = (data) => ajax("post", "/farm-huyang/device/add", data)
 
-export const reqDelDvFault = (id) => ajax("post", "/farm-huyang/device/delete", {id})

BIN
src/assets/login_bg.jpg


BIN
src/assets/login_bg11.jpg


+ 66 - 38
src/sdk/ajax.js

@@ -2,6 +2,7 @@ import Vue from 'vue';
 import axios from 'axios';
 import VueAxios from 'vue-axios';
 import config from './config'
+import Qs from 'qs';
 
 const { serverAddress } = config
 
@@ -14,45 +15,72 @@ Vue.use(VueAxios, axios)
 /* ajax封装 */
 export const ajax = function (type = "post", url, params) {
     let token = localStorage.getItem("token")
-    return new Promise((resole, reject) => {
-        axios({
-            method: type,
-            url: serverAddress + url,
-            params,
-            headers: {
-                'Content-Type': 'application/x-www-form-urlencoded',
-				'x-auth-token': token
-            }
-        }).then((res) => {
-            switch(res.data.errCode) {
-                case 'request_not_authorize': // 登录过期
-                    let url = window.location.protocol + "//" + window.location.host + "/#/login"
-                    window.location.replace(url)
-                    break;
-            }
-            resole(res.data);
-        }).catch((err) => {
-            reject(err.data);
+    if (type.toLowerCase() == 'get') {
+        return new Promise((resole, reject) => {
+            axios({
+                method: type,
+                url: serverAddress + url,
+                params,
+                paramsSerializer: function (params) {
+                    return Qs.stringify(params, { arrayFormat: 'brackets' })
+                },
+                headers: {
+                    'Content-Type': 'application/x-www-form-urlencoded',
+                    'x-auth-token': token
+                }
+            }).then((res) => {
+                switch (res.data.errCode) {
+                    case 'request_not_authorize': // 登录过期
+                        let url = window.location.protocol + "//" + window.location.host + "/#/login"
+                        window.location.replace(url)
+                        break;
+                }
+                resole(res.data);
+            }).catch((err) => {
+                reject(err);
+            });
         });
-    });
+    } else {
+        return new Promise((resole, reject) => {
+            axios({
+                method: type,
+                url: serverAddress + url,
+                params,
+                headers: {
+                    'Content-Type': 'application/x-www-form-urlencoded',
+                    'x-auth-token': token
+                }
+            }).then((res) => {
+                switch (res.data.errCode) {
+                    case 'request_not_authorize': // 登录过期
+                        let url = window.location.protocol + "//" + window.location.host + "/#/login"
+                        window.location.replace(url)
+                        break;
+                }
+                resole(res.data);
+            }).catch((err) => {
+                reject(err);
+            });
+        });
+    }
 }
 
 
-/* 测试服务的 ajax封装 */
-export const ajaxTest = function (type = "post", url, params) {
-    return new Promise((resole, reject) => {
-        axios({
-            method: type,
-            url: "http://119.3.84.55:31288" + url,
-            // url: url,
-            params,
-            headers: {
-                'Content-Type': 'application/json',
-            }
-        }).then((res) => {
-            resole(res.data);
-        }).catch((err) => {
-            reject(err.data);
-        });
-    });
-}
+// /* 测试服务的 ajax封装 */
+// export const ajaxTest = function (type = "post", url, params) {
+//     return new Promise((resole, reject) => {
+//         axios({
+//             method: type,
+//             url: "http://119.3.84.55:31288" + url,
+//             // url: url,
+//             params,
+//             headers: {
+//                 'Content-Type': 'application/json',
+//             }
+//         }).then((res) => {
+//             resole(res.data);
+//         }).catch((err) => {
+//             reject(err.data);
+//         });
+//     });
+// }

+ 1 - 1
src/views/Home/Home.vue

@@ -139,7 +139,7 @@ export default {
             });
         },
         onLogOut() {
-            this.$router.redirect('login')
+            this.$router.replace('login')
         }
     }
 };

+ 20 - 2
src/views/Login/Login.vue

@@ -2,8 +2,7 @@
     <div class="login">
         <div class="shade">
             <header class="header">
-                <img class="logo" src="../../assets/logo.png" alt="慧牧科技LOGO" />
-                慧牧科技
+                猪仔管家系统
             </header>
             <article class="article">
                 <h1>登录界面</h1>
@@ -29,6 +28,12 @@
                     </el-form-item>
                 </el-form>
             </article>
+
+             <footer class="footer">
+                <img class="logo" src="../../assets/logo.png" alt="慧牧科技LOGO" />
+                慧牧科技
+            </footer>
+
             <el-dialog title="请选择一个组织" :visible.sync="isShowDialog" append-to-body>
                 <el-select v-model="orgSelected">
                     <el-option
@@ -171,6 +176,19 @@ export default {
                 color: #eee;
             }
         }
+        >.footer{
+            font-size: 25px;
+            color: #eee;
+            margin: 180px 0 50px 0;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            .logo {
+                height: 35px;
+                width: 35px;
+                margin-right: 20px;
+            }
+        }
     }
 }
 </style>

+ 97 - 56
src/views/index/Index.vue

@@ -2,68 +2,69 @@
     <div class="Index">
         <header class="header">
             <div class="left">
-                <chart-a class="chart_a"></chart-a>
+                <chart-a class="chart_a" :data1="chart_a_data.data1" :data2="chart_a_data.data2"></chart-a>
             </div>
             <div class="right">
-                <chart-b></chart-b>
+                <chart-b :data="chart_b_data.data"></chart-b>
             </div>
         </header>
         <section class="section">
             <ul class="ul">
                 <li class="li">
                     <span class="title">总产仔数</span>
-                    <span class="content">2141</span>
+                    <span class="content">{{ info.allDeliver }}</span>
                 </li>
                 <li class="li">
                     <span class="title">总活仔数</span>
-                    <span class="content">2035</span>
+                    <span class="content">{{ info.allWeaning }}</span>
                 </li>
                 <li class="li">
                     <span class="title">均产仔数</span>
-                    <span class="content">11</span>
+                    <span class="content">{{ info.avgDeliver }}</span>
                 </li>
                 <li class="li">
                     <span class="title">均断奶活仔数</span>
-                    <span class="content">10</span>
+                    <span class="content">{{ info.avgWeaning }}</span>
                 </li>
                 <li class="li">
                     <span class="title">均断奶天数</span>
-                    <span class="content">21</span>
+                    <span class="content">{{ info.avgWeaningPeriod }}</span>
                 </li>
                 <li class="li">
                     <span class="title">均断奶存活率</span>
-                    <span class="content">97%</span>
+                    <span class="content">{{ (info.weaningRate*100).toFixed(2) }}%</span>
                 </li>
             </ul>
         </section>
         <footer class="footer">
-            <el-carousel height="150px" :interval="5000" direction="vertical" indicator-position="none">
-                <el-carousel-item>
-                    <div class="item item_1">
+            <el-carousel
+                height="150px"
+                :interval="5000"
+                direction="vertical"
+                indicator-position="none"
+            >
+                <el-carousel-item v-for="item in tableData" :key="item.id">
+                    <div class="item item_1" v-if="item.status == 0">
                         <div class="left el-icon-mobile-phone"></div>
                         <div class="right">
                             <p class="top">消息警报</p>
-                            <p class="middle">1耳标457865号母猪产仔存活率低于70%</p>
+                            <p class="middle">{{ item.message }}</p>
                             <span class="bottom">查看详情</span>
                         </div>
                     </div>
-                </el-carousel-item>
-                <el-carousel-item>
-                    <div class="item item_2">
+                    <div class="item item_1" v-else-if="item.status == 1">
                         <div class="left el-icon-mobile-phone"></div>
                         <div class="right">
                             <p class="top">消息警报</p>
-                            <p class="middle">2耳标457865号母猪产仔存活率低于70%</p>
+                            <p class="middle">{{ item.message }}</p>
                             <span class="bottom">查看详情</span>
                         </div>
                     </div>
-                </el-carousel-item>
-                <el-carousel-item>
-                    <div class="item item_3">
+                    <div class="item item_1" v-else>
                         <div class="left el-icon-mobile-phone"></div>
                         <div class="right">
                             <p class="top">消息警报</p>
-                            <p class="middle">3耳标457865号母猪产仔存活率低于70%</p>
+                            <p class="middle">{{ item.message }}</p>
                             <span class="bottom">查看详情</span>
                         </div>
                     </div>
@@ -74,10 +75,12 @@
 </template>
 
 <script>
-import { mapActions } from "vuex";
 import chart_a from "./charts/chart_a";
 import chart_b from "./charts/chart_b";
 
+import { reqIndexInfo } from "@/api/index.js";
+import { reqProductionWarnList } from "@/api/infoInform.js";
+
 export default {
     name: "Index",
     components: {
@@ -85,25 +88,63 @@ export default {
         "chart-b": chart_b
     },
     data() {
-        return {};
+        return {
+            info: {},
+            chart_a_data: {
+                data1: [],
+                data2: []
+            },
+            chart_b_data: {
+                data: []
+            },
+            tableData: []
+        };
+    },
+    created() {
+        this.getIndexInfo();
+        this.getProductionWarnList();
     },
-    created() {},
     methods: {
-        ...mapActions(["fetch"]),
-        get() {
-            this.fetch({
-                api: "aaa",
-                method: "GET",
-                data: {},
-                success: res => {
+        getIndexInfo() {
+            reqIndexInfo()
+                .then(res => {
                     console.log(res);
-                },
-                fail: err => {
-                    console.log(err);
-                    if (err.errMsg) this.$message.error(err.errMsg);
-                    else this.$message.error("服务器发生异常");
-                }
-            });
+                    this.info = res;
+                    this.chart_a_data.data1 = [
+                        {
+                            value: res.feed + res.entry + res.weaning,
+                            name: "已用产床"
+                        },
+                        { value: res.empty, name: "未用产床" }
+                    ];
+                    this.chart_a_data.data2 = [
+                        { value: res.entry, name: "待产" },
+                        { value: res.feed, name: "已产" },
+                        { value: res.weaning, name: "断奶" },
+                        { value: res.empty, name: "空产床" }
+                    ];
+                    this.chart_b_data.data = [
+                        res.weaning,
+                        res.feed,
+                        res.entry,
+                        res.empty,
+                        res.feed + res.entry + res.weaning,
+                        res.feed + res.entry + res.weaning + res.empty
+                    ];
+                })
+                .catch(err => {
+                    console.error(err);
+                });
+        },
+        getProductionWarnList() {
+            reqProductionWarnList({ pageSize: 1000, pageNum: 1 })
+                .then(res => {
+                    console.log(res.content)
+                    this.tableData = res.content;
+                })
+                .catch(err => {
+                    console.error(err);
+                });
         }
     }
 };
@@ -154,50 +195,50 @@ export default {
         }
     }
     .footer {
-        .item{
+        .item {
             height: 100%;
             display: flex;
             box-sizing: border-box;
             border-radius: 10px;
             align-items: center;
-            
-            .left{
+
+            .left {
                 font-size: 30px;
                 margin-left: 20px;
                 margin-right: 20px;
             }
-            .right{
-                .top{
+            .right {
+                .top {
                     font-size: 20px;
                     font-weight: 600;
                     color: #746363;
                 }
-                .middle{
+                .middle {
                     font-size: 16px;
                     color: #999;
                 }
-                .bottom{
+                .bottom {
                     font-size: 16px;
                     color: rgb(48, 115, 240);
                 }
             }
         }
-        .item_1{
-            background-color: #EBF5FF;
-            .left{
-                color: #0079FE;
+        .item_1 {
+            background-color: #ebf5ff;
+            .left {
+                color: #0079fe;
             }
         }
-        .item_2{
-            background-color: #E6FAF0;
-            .left{
-                color: #4BD863;
+        .item_2 {
+            background-color: #e6faf0;
+            .left {
+                color: #4bd863;
             }
         }
-        .item_3{
-            background-color: #FFEEE6;
-            .left{
-                color: #FF3B30;
+        .item_3 {
+            background-color: #ffeee6;
+            .left {
+                color: #ff3b30;
             }
         }
     }

+ 14 - 11
src/views/index/charts/chart_a.vue

@@ -7,11 +7,22 @@
 <script>
 export default {
     name: "HelloWorld",
-    props: ["tagId"],
+    props: {
+        data1: Array,
+        data2: Array
+    },
     data() {
         return {
         };
     },
+    watch: {
+        data1(v) {
+            this.drawChart();
+        },
+        data2(v) {
+            this.drawChart();
+        }
+    },
     mounted() {
         this.drawChart();
     },
@@ -44,10 +55,7 @@ export default {
                         labelLine: {
                             show: true
                         },
-                        data: [
-                            { value: 800, name: "已用产床" },
-                            { value: 200, name: "未用产床" }
-                        ],
+                        data: this.data1,
                         itemStyle: {
                             emphasis: {
                                 shadowBlur: 10,
@@ -74,12 +82,7 @@ export default {
                         label: {
                             formatter: "{d}%"
                         },
-                        data: [
-                            { value: 300, name: "待产" },
-                            { value: 300, name: "已产" },
-                            { value: 200, name: "断奶" },
-                            { value: 200, name: "空产床" }
-                        ],
+                        data: this.data2,
                         itemStyle: {
                             emphasis: {
                                 shadowBlur: 10,

+ 9 - 2
src/views/index/charts/chart_b.vue

@@ -7,7 +7,14 @@
 <script>
 export default {
     name: "chart_b",
-    props: {},
+    props: {
+        data: Array
+    },
+     watch: {
+        data(v) {
+            this.drawChart();
+        }
+    },
     data() {
         return {};
     },
@@ -56,7 +63,7 @@ export default {
                         name: "数量",
                         type: "bar",
                         barWidth: "60%",
-                        data: [52, 200, 334, 390, 330, 220],
+                        data: this.data,
                         encode: {
                             // Map the "amount" column to X axis.
                             y: "amount",

+ 19 - 69
src/views/infoInform/productionWarn.vue

@@ -12,6 +12,16 @@
                 </el-table-column>
                 <el-table-column prop="warningTime" label="公告时间" fixed="right" width="180"></el-table-column>
             </el-table>
+            <el-row type="flex" justify="end">
+                    <el-col :span="8">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="Number(totalPages)"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
         </section>
     </div>
 </template>
@@ -19,79 +29,15 @@
 <script>
 import { reqProductionWarnList } from "@/api/infoInform.js";
 
-const pageSize = 10;
+const pageSize = 20;
 
 export default {
     name: "productionWarn",
     data() {
         return {
             page: 1,
-            tableData: [
-                {
-                    message: "产床001上的仔猪预计七天后可进行断奶,请留意观察",
-                    warningTime: "2020-08-24 14:28:43"
-                },
-                {
-                    message: "产床001上的仔猪预计七天后可进行断奶,请留意观察",
-                    warningTime: "2020-08-24 14:28:43"
-                },
-                {
-                    message: "产床001上的仔猪预计七天后可进行断奶,请留意观察",
-                    warningTime: "2020-08-24 14:28:43"
-                },
-                {
-                    message: "产床001上的仔猪预计七天后可进行断奶,请留意观察",
-                    warningTime: "2020-08-24 14:28:43"
-                },
-                {
-                    message: "产床001上的仔猪预计七天后可进行断奶,请留意观察",
-                    warningTime: "2020-08-24 14:28:43"
-                },
-                {
-                    message: "产床001上的仔猪预计七天后可进行断奶,请留意观察",
-                    warningTime: "2020-08-24 14:28:43"
-                },
-                {
-                    message: "产床001上的仔猪预计七天后可进行断奶,请留意观察",
-                    warningTime: "2020-08-24 14:28:43"
-                },
-                {
-                    message: "产床001上的仔猪预计七天后可进行断奶,请留意观察",
-                    warningTime: "2020-08-24 14:28:43"
-                },
-                {
-                    message: "产床001上的仔猪预计七天后可进行断奶,请留意观察",
-                    warningTime: "2020-08-24 14:28:43"
-                },
-                {
-                    message: "产床001上的仔猪预计七天后可进行断奶,请留意观察",
-                    warningTime: "2020-08-24 14:28:43"
-                },
-                {
-                    message: "产床001上的仔猪预计七天后可进行断奶,请留意观察",
-                    warningTime: "2020-08-24 14:28:43"
-                },
-                {
-                    message: "产床001上的仔猪预计七天后可进行断奶,请留意观察",
-                    warningTime: "2020-08-24 14:28:43"
-                },
-                {
-                    message: "产床001上的仔猪预计七天后可进行断奶,请留意观察",
-                    warningTime: "2020-08-24 14:28:43"
-                },
-                {
-                    message: "产床001上的仔猪预计七天后可进行断奶,请留意观察",
-                    warningTime: "2020-08-24 14:28:43"
-                },
-                {
-                    message: "产床001上的仔猪预计七天后可进行断奶,请留意观察",
-                    warningTime: "2020-08-24 14:28:43"
-                },
-                {
-                    message: "产床001上的仔猪预计七天后可进行断奶,请留意观察",
-                    warningTime: "2020-08-24 14:28:43"
-                },
-            ]
+            tableData: [],
+            totalPages: 1
         };
     },
     created() {
@@ -101,13 +47,17 @@ export default {
         getProductionWarnList() {
             reqProductionWarnList({pageSize,pageNum:this.page})
                 .then(res => {
-                    console.log(res);
-                    this.tableData = res
+                    this.tableData = res.content
+                    this.totalPages = res.totalPages
                 })
                 .catch(err => {
                     console.error(err);
                 });
         },
+        pageChange(p) {
+            this.page = p;
+            this.getProductionWarnList()
+        }
     }
 };
 </script>

+ 39 - 2
src/views/system/deviceConfig.vue

@@ -52,6 +52,8 @@
 
 
 <script>
+import { reqDeviceConfig, reqAddOrUpdateDeviceConfig } from "@/api/system.js";
+
 const rules = {};
 
 export default {
@@ -59,10 +61,20 @@ export default {
     data() {
         return {
             rules,
-            formData: {}
+            reqInfo: {},
+            formData: {
+                serverAddress: 'http://',
+                timeInterval: '5',
+                T1_3: '25',
+                T4_7: '25',
+                T8_14: '25',
+                T15_30: '25'
+            }
         };
     },
-    created() {},
+    created() {
+        this.AddOrUpdateDeviceConfig()
+    },
     methods: {
         submitForm(formName) {
             this.$refs[formName].validate(valid => {
@@ -73,6 +85,31 @@ export default {
                 }
             });
         },
+        getDeviceConfig() {
+            reqDeviceConfig()
+                .then(res => {
+                    console.log(res);
+                })
+                .catch(err => {
+                    console.error(err);
+                });
+        },
+        AddOrUpdateDeviceConfig() {
+            let tempArr = [];
+            for (const key in this.formData) {
+                tempArr.push({ key, val: this.formData[key] });
+            }
+            this.reqInfo.conf = JSON.stringify({
+                data: JSON.stringify(tempArr)
+            });
+            reqAddOrUpdateDeviceConfig( this.reqInfo )
+                .then(res => {
+                    console.log(res);
+                })
+                .catch(err => {
+                    console.error(err);
+                });
+        },
     }
 };
 </script>