Browse Source

养殖员页面

East 4 years ago
parent
commit
d99ac81814

+ 171 - 141
src/views/modules/basicdata/bpighouse.vue

@@ -8,17 +8,28 @@
         <el-input
           v-model="dataForm.key"
           placeholder="用户名/用户操作"
-          clearable
-        ></el-input>
+          clearable>
+        </el-input>
       </el-form-item>
       <el-form-item>
         <el-button @click="getDataList()">查询</el-button>
       </el-form-item>
       <el-form-item>
-        <el-button v-if="isAuth('sys:role:save')" type="primary" @click="addOrUpdateHandle()">新增</el-button>
+        <el-button
+          v-if="isAuth('sys:role:save')"
+          type="primary"
+          @click="addOrUpdateHandle()">
+          新增
+        </el-button>
       </el-form-item>
       <el-form-item>
-        <el-button v-if="isAuth('sys:role:delete')" type="danger" @click="deleteHandle()" :disabled="selectionDataList.length <= 0">批量删除</el-button>
+        <el-button
+          v-if="isAuth('sys:role:delete')"
+          type="danger"
+          @click="deleteHandle()"
+          :disabled="selectionDataList.length <= 0">
+          批量删除
+        </el-button>
       </el-form-item>
     </el-form>
     <el-table
@@ -56,16 +67,29 @@
         align="center"
         label="操作">
         <template slot-scope="scope">
-          <el-button v-if="isAuth('sys:user:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row)">修改</el-button>
-          <el-button v-if="isAuth('sys:user:delete')" type="text" size="small" @click="deleteHandle(scope.row.id)">删除</el-button>
+          <el-button
+            v-if="isAuth('sys:user:update')"
+            type="text"
+            size="small"
+            @click="addOrUpdateHandle(scope.row)">修改</el-button>
+          <el-button
+            v-if="isAuth('sys:user:delete')"
+            type="text"
+            size="small"
+            @click="deleteHandle(scope.row.id)">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
     <el-dialog
       :title="!form.id ? '新增' : '修改'"
       :close-on-click-modal="false"
-      :visible.sync="visible">
-      <el-form :model="form" ref="form" @keyup.enter.native="formSubmit()" label-width="80px">
+      :visible.sync="visible"
+      @close="cancel">
+      <el-form
+        :model="form"
+        ref="form"
+        @keyup.enter.native="formSubmit()"
+        label-width="80px">
         <el-form-item label="所属牧场" prop="name">
           <el-select v-model="form.pastureId" placeholder="请选择所属牧场">
             <el-option
@@ -84,7 +108,7 @@
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
-        <el-button @click="visible = false">取消</el-button>
+        <el-button @click="cancel">取消</el-button>
         <el-button type="primary" @click="formSubmit()">确定</el-button>
       </span>
     </el-dialog>
@@ -92,19 +116,19 @@
 </template>
 <script>
 export default {
-  data () {
+  data() {
     return {
       dataForm: {
-        key: ''
+        key: "",
       },
       dataList: [
         {
-          buildTime: '',
-          id: '',
-          location: '',
-          manager: '',
-          name: '',
-        }
+          buildTime: "",
+          id: "",
+          location: "",
+          manager: "",
+          name: "",
+        },
       ],
       pageIndex: 1,
       pageSize: 10,
@@ -113,201 +137,207 @@ export default {
       selectionDataList: [],
       visible: false,
       form: {
-        id: '',
-        number: '',
-        pastureId: '',
-        feeder: ''
+        id: "",
+        number: "",
+        pastureId: "",
+        feeder: "",
       },
-      pastureList: [] // 牧场list
-    }
+      pastureList: [], // 牧场list
+    };
   },
-  created () {
-    this.getDataList()
+  created() {
+    this.getDataList();
   },
   methods: {
     // 获取数据列表
-    getDataList () {
-      this.dataListLoading = true
+    getDataList() {
+      this.dataListLoading = true;
       this.$http({
-        url: this.$http.adornUrl('/management/pigsty/list'),
-        method: 'post',
+        url: this.$http.adornUrl("/management/pigsty/list"),
+        method: "post",
         params: this.$http.adornParams({
           // page: this.pageIndex,
           // limit: this.pageSize,
           // key: this.dataForm.key,
-        })
+        }),
       }).then(async ({ data }) => {
         let pastureResult = await this.$http({
-          url: this.$http.adornUrl('/management/pasture/list'),
-          method: 'post'
-        })
-        this.pastureList = pastureResult.data.page.list
+          url: this.$http.adornUrl("/management/pasture/list"),
+          method: "post",
+        });
+        this.pastureList = pastureResult.data.page.list;
         if (data && data.code === 0) {
-          this.dataList = data.page.list
-          this.totalPage = data.page.totalCount
-          this.dataList.forEach(item => {
+          this.dataList = data.page.list;
+          this.totalPage = data.page.totalCount;
+          this.dataList.forEach((item) => {
             for (let pasture of this.pastureList) {
               if (item.pastureId === pasture.id) {
-                item['name'] = pasture.name
-                break
+                item["name"] = pasture.name;
+                break;
               }
             }
           });
         } else {
-          this.dataList = []
-          this.totalPage = 0
+          this.dataList = [];
+          this.totalPage = 0;
         }
-        this.dataListLoading = false
-      })
+        this.dataListLoading = false;
+      });
     },
     // 每页数
-    sizeChangeHandle (val) {
-      this.pageSize = val
-      this.pageIndex = 1
-      this.getDataList()
+    sizeChangeHandle(val) {
+      this.pageSize = val;
+      this.pageIndex = 1;
+      this.getDataList();
     },
     // 当前页
-    currentChangeHandle (val) {
-      this.pageIndex = val
-      this.getDataList()
+    currentChangeHandle(val) {
+      this.pageIndex = val;
+      this.getDataList();
     },
     // 新增 or 修改牧场
-    addOrUpdateHandle (row) {
+    addOrUpdateHandle(row) {
       // 显示牧场新增 or 修改面板
-      this.visible = true
+      this.visible = true;
       if (row) {
-        this.form = row
+        this.form = row;
       }
     },
     // 选择n个牧场
-    selectionChangeHandle (val) {
-      this.selectionDataList = []
-      val.forEach(item => {
-        this.selectionDataList.push(item.id)
+    selectionChangeHandle(val) {
+      this.selectionDataList = [];
+      val.forEach((item) => {
+        this.selectionDataList.push(item.id);
       });
     },
     // 删除n个牧场
-    deleteHandle (id) {
-      this.$confirm(`确定删除牧场?`, '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        // 删除操作
-        if (id) {
-          this.selectionDataList.push(id)
-        }
-        if (this.selectionDataList.length <= 0) {
-          return
-        }
-        this.$http({
-          url: this.$http.adornUrl('/management/pigsty/delete'),
-          method: 'post',
-          data: this.$http.adornData(this.selectionDataList, false)
-        }).then(result => {
-          console.log(result);
-          if (result.data.code === 0) {
-            this.getDataList()
-            this.resetForm()
-            this.$message({
-              message: '成功删除牧场',
-              type: 'success',
-              duration: 1000
-            })
-          } else {
-            this.$message.error('删除牧场失败');
+    deleteHandle(id) {
+      this.$confirm(`确定删除牧场?`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          // 删除操作
+          if (id) {
+            this.selectionDataList.push(id);
+          }
+          if (this.selectionDataList.length <= 0) {
+            return;
           }
-          this.selectionDataList = []
+          this.$http({
+            url: this.$http.adornUrl("/management/pigsty/delete"),
+            method: "post",
+            data: this.$http.adornData(this.selectionDataList, false),
+          }).then((result) => {
+            console.log(result);
+            if (result.data.code === 0) {
+              this.$message({
+                message: "成功删除牧场",
+                type: "success",
+                duration: 1000,
+              });
+            } else {
+              this.$message.error("删除牧场失败");
+            }
+            this.resetForm();
+            this.selectionDataList = [];
+          });
         })
-      }).catch(() => {})
+        .catch(() => {});
     },
-    formSubmit () {
+    formSubmit() {
       if (this.form.id) {
         // 修改
         if (this.form.number && this.form.pastureId && this.form.feeder) {
           // 进行修改操作
           this.$http({
-            url: this.$http.adornUrl('/management/pigsty/update'),
-            method: 'post',
+            url: this.$http.adornUrl("/management/pigsty/update"),
+            method: "post",
             data: this.$http.adornData({
               id: this.form.id,
               number: this.form.number,
               pastureId: this.form.pastureId,
-              feeder: this.form.feeder
-            })
-          }).then(result => {
+              feeder: this.form.feeder,
+            }),
+          }).then((result) => {
             if (result.data.code === 0) {
-              this.getDataList()
-              this.resetForm()
+              this.resetForm();
+              this.visible = false;
               this.$message({
-                message: '成功修改猪舍信息',
-                type: 'success',
-                duration: 1000
-              })
+                message: "成功修改猪舍信息",
+                type: "success",
+                duration: 1000,
+              });
             } else {
-              this.$message.error('修改猪舍信息失败');
+              this.$message.error("修改猪舍信息失败");
             }
-          })
-          this.visible = false
+          });
         } else {
           // 请输入完整
-          this.$confirm(`请输入完整`, '提示', {
-            confirmButtonText: '确定',
-            cancelButtonText: '取消',
-            type: 'warning'
-          }).then(() => {
-            return
-          }).catch(() => {})
+          this.$confirm(`请输入完整`, "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+          })
+            .then(() => {
+              return;
+            })
+            .catch(() => {});
         }
-        console.log(this.form);
       } else {
         // 新增
         if (this.form.number && this.form.pastureId && this.form.feeder) {
           // 进行新增操作
           this.$http({
-            url: this.$http.adornUrl('/management/pigsty/save'),
-            method: 'post',
+            url: this.$http.adornUrl("/management/pigsty/save"),
+            method: "post",
             data: this.$http.adornData({
               number: this.form.number,
               pastureId: this.form.pastureId,
-              feeder: this.form.feeder
-            })
-          }).then(result => {
-            console.log(result);
+              feeder: this.form.feeder,
+            }),
+          }).then((result) => {
             if (result.data.code === 0) {
-              this.getDataList()
-              this.resetForm()
+              this.resetForm();
+              this.visible = false;
               this.$message({
-                message: '成功添加猪舍',
-                type: 'success',
-                duration: 1000
-              })
+                message: "成功添加猪舍",
+                type: "success",
+                duration: 1000,
+              });
             } else {
-              this.$message.error('添加猪舍失败');
+              this.$message.error("添加猪舍失败");
             }
-          })
-          this.visible = false
+          });
         } else {
           // 请输入完整
-          this.$confirm(`请输入完整`, '提示', {
-            confirmButtonText: '确定',
-            cancelButtonText: '取消',
-            type: 'warning'
-          }).then(() => {
-            return
-          }).catch(() => {})
+          this.$confirm(`请输入完整`, "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+          })
+            .then(() => {
+              return;
+            })
+            .catch(() => {});
         }
       }
     },
     // 清空form
-    resetForm () {
-      this.form.id = ''
-      this.form.number = ''
-      this.form.pastureId = ''
-      this.form.feeder = ''
-    }
-  }
-}
+    resetForm() {
+      for (let i in this.form) {
+        this.form[i] = "";
+      }
+      this.getDataList();
+    },
+    // 取消
+    cancel() {
+      this.visible = false;
+      this.resetForm();
+    },
+  },
+};
 </script>
 <style scoped>
 </style>

+ 17 - 18
src/views/modules/basicdata/branch.vue

@@ -71,7 +71,8 @@
     <el-dialog
       :title="!form.id ? '新增' : '修改'"
       :close-on-click-modal="false"
-      :visible.sync="visible">
+      :visible.sync="visible"
+      @close="cancel">
       <el-form :model="form" ref="form" @keyup.enter.native="formSubmit()" label-width="80px">
         <el-form-item label="牧场名称" prop="name">
           <el-input v-model="form.name" placeholder="牧场名称"></el-input>
@@ -92,7 +93,7 @@
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
-        <el-button @click="visible = false">取消</el-button>
+        <el-button @click="cancel">取消</el-button>
         <el-button type="primary" @click="formSubmit()">确定</el-button>
       </span>
     </el-dialog>
@@ -195,10 +196,7 @@ export default {
           method: 'post',
           data: this.$http.adornData(this.selectionDataList, false)
         }).then(result => {
-          console.log(result);
           if (result.data.code === 0) {
-            this.getDataList()
-            this.resetForm()
             this.$message({
               message: '成功删除牧场',
               type: 'success',
@@ -207,6 +205,7 @@ export default {
           } else {
             this.$message.error('删除牧场失败');
           }
+          this.resetForm()
           this.selectionDataList = []
         })
       }).catch(() => {})
@@ -228,8 +227,8 @@ export default {
             })
           }).then(result => {
             if (result.data.code === 0) {
-              this.getDataList()
-              this.resetForm()
+              this.resetForm();
+              this.visible = false;
               this.$message({
                 message: '成功修改牧场信息',
                 type: 'success',
@@ -239,7 +238,6 @@ export default {
               this.$message.error('修改牧场信息失败');
             }
           })
-          this.visible = false
         } else {
           // 请输入完整
           this.$confirm(`请输入完整`, '提示', {
@@ -250,7 +248,6 @@ export default {
             return
           }).catch(() => {})
         }
-        console.log(this.form);
       } else {
         // 新增
         if (this.form.name && this.form.manager && this.form.location && this.form.buildTime) {
@@ -265,10 +262,9 @@ export default {
               buildTime: this.form.buildTime
             })
           }).then(result => {
-            console.log(result);
             if (result.data.code === 0) {
-              this.getDataList()
-              this.resetForm()
+              this.resetForm();
+              this.visible = false;
               this.$message({
                 message: '成功添加牧场',
                 type: 'success',
@@ -278,7 +274,6 @@ export default {
               this.$message.error('添加牧场失败');
             }
           })
-          this.visible = false
         } else {
           // 请输入完整
           this.$confirm(`请输入完整`, '提示', {
@@ -293,11 +288,15 @@ export default {
     },
     // 清空form
     resetForm () {
-      this.form.id = ''
-      this.form.location = ''
-      this.form.manager = ''
-      this.form.name = ''
-      this.form.buildTime = ''
+      for (let i in this.form) {
+        this.form[i] = ''
+      }
+      this.getDataList()
+    },
+    // 取消
+    cancel () {
+      this.visible = false
+      this.resetForm()
     }
   }
 }

+ 29 - 20
src/views/modules/basicdata/bunit.vue

@@ -64,7 +64,8 @@
     <el-dialog
       :title="!form.id ? '新增' : '修改'"
       :close-on-click-modal="false"
-      :visible.sync="visible">
+      :visible.sync="visible"
+      @close="cancel">
       <el-form :model="form" ref="form" @keyup.enter.native="formSubmit()" label-width="80px">
         <el-form-item label="所属牧场">
           <el-select v-model="form.pastureId" placeholder="请选择所属牧场" @change="getPasture" ref="pasture">
@@ -91,7 +92,7 @@
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
-        <el-button @click="visible = false">取消</el-button>
+        <el-button @click="cancel">取消</el-button>
         <el-button type="primary" @click="formSubmit()">确定</el-button>
       </span>
     </el-dialog>
@@ -194,7 +195,6 @@ export default {
     },
     // 获取到了牧场 → 限制猪舍
     getPasture (val) {
-      console.log(val);
       this.phSelectedList = []
       this.pighouseList.forEach(item => {
         if (item.pastureId === val) {
@@ -213,14 +213,22 @@ export default {
         this.form.pigstyId = ''
       }
     },
-    // 获取到猪舍 → 反向确定牧场
+    // 获取到猪舍
     getPigsty (val) {
+      //  → 反向确定牧场
       for (let item of this.pighouseList) {
         if (item.id === val) {
           this.form.pastureId = item.pastureId
           break
         }
       }
+      // → 先获取猪舍,没有确定牧场的情况下,限制猪舍
+      this.phSelectedList = []
+      this.pighouseList.forEach(item => {
+        if (item.pastureId === this.form.pastureId) {
+          this.phSelectedList.push(item)
+        }
+      });
     },
     // 新增 or 修改单元
     addOrUpdateHandle (row) {
@@ -240,7 +248,7 @@ export default {
     },
     // 删除n个牧场
     deleteHandle (id) {
-      this.$confirm(`确定删除牧场?`, '提示', {
+      this.$confirm(`确定删除单元?`, '提示', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning'
@@ -259,15 +267,14 @@ export default {
         }).then(result => {
           console.log(result);
           if (result.data.code === 0) {
-            this.getDataList()
             this.resetForm()
             this.$message({
-              message: '成功删除牧场',
+              message: '成功删除单元',
               type: 'success',
               duration: 1000
             })
           } else {
-            this.$message.error('删除牧场失败');
+            this.$message.error('删除单元失败');
           }
           this.selectionDataList = []
         })
@@ -290,18 +297,17 @@ export default {
             })
           }).then(result => {
             if (result.data.code === 0) {
-              this.getDataList()
-              this.resetForm()
+              this.resetForm();
+              this.visible = false;
               this.$message({
                 message: '成功修改单元信息',
                 type: 'success',
                 duration: 1000
               })
             } else {
-              this.$message.error('修改牧场信息失败');
+              this.$message.error('修改单元信息失败');
             }
           })
-          this.visible = false
         } else {
           // 请输入完整
           this.$confirm(`请输入完整`, '提示', {
@@ -312,7 +318,6 @@ export default {
             return
           }).catch(() => {})
         }
-        console.log(this.form);
       } else {
         // 新增
         if (this.form.number && this.form.pastureId) {
@@ -327,7 +332,8 @@ export default {
             })
           }).then(result => {
             if (result.data.code === 0) {
-              this.getDataList()
+              this.resetForm();
+              this.visible = false;
               this.$message({
                 message: '成功添加单元',
                 type: 'success',
@@ -336,9 +342,7 @@ export default {
             } else {
               this.$message.error('添加单元失败');
             }
-            this.resetForm()
           })
-          this.visible = false
         } else {
           // 请输入完整
           this.$confirm(`请输入完整`, '提示', {
@@ -353,10 +357,15 @@ export default {
     },
     // 清空form
     resetForm () {
-      this.form.id = ''
-      this.form.number = ''
-      this.form.pastureId = ''
-      this.form.pigstyId = ''
+      for (let i in this.form) {
+        this.form[i] = ''
+      }
+      this.getDataList()
+    },
+    // 取消
+    cancel () {
+      this.visible = false
+      this.resetForm()
     }
   }
 }

+ 196 - 54
src/views/modules/pigbasic/pbbasic.vue

@@ -42,10 +42,13 @@
               <span>{{ props.row.dayAge }}天</span>
             </el-form-item>
             <el-form-item label="健康状况">
-              <span>{{ props.row.healthStatus }}</span>
+              <span>{{ props.row.healthStatus? '健康': '不健康' }}</span>
             </el-form-item>
             <el-form-item label="体重">
-              <span>{{ props.row.weight }}</span>
+              <span>{{ props.row.weight }}千克</span>
+            </el-form-item>
+            <el-form-item label="品种">
+              <span>{{ props.row.variety }}</span>
             </el-form-item>
             <el-form-item label="去向">
               <span>{{ props.row.whereDidYouGo }}</span>
@@ -100,9 +103,10 @@
     <el-dialog
       :title="!form.id ? '新增' : '修改'"
       :close-on-click-modal="false"
-      :visible.sync="visible">
+      :visible.sync="visible"
+      @close="cancel">
       <el-form :model="form" ref="form" @keyup.enter.native="formSubmit()" label-width="80px">
-        <el-form-item label="所属牧场" prop="name">
+        <el-form-item label="所属牧场">
           <el-select v-model="form.pastureId" placeholder="请选择所属牧场" @change="getPasture" ref="pasture">
             <el-option
               v-for="item in pastureList"
@@ -112,7 +116,7 @@
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="所属猪舍" prop="number">
+        <el-form-item label="所属猪舍">
           <el-select v-model="form.pigstyId" placeholder="请选择所属猪舍" @change="getPigsty">
             <el-option
               v-for="item in phSelectedList"
@@ -122,12 +126,45 @@
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="单元序号" prop="id">
-          <el-input v-model="form.number" placeholder="请输入单元序号"></el-input>
+        <el-form-item label="单元序号">
+          <!-- <el-input v-model="form.number" placeholder="请输入单元序号"></el-input> -->
+          <el-select v-model="form.unitId" placeholder="请选择所属单元" @change="getUnit">
+            <el-option
+              v-for="item in unSelectedList"
+              :key="item.id"
+              :label="item.number"
+              :value="item.id">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="耳标">
+          <el-input v-model="form.eartag" placeholder="请输入耳标"></el-input>
+        </el-form-item>
+        <el-form-item label="年龄">
+          <el-input v-model="form.dayAge" placeholder="请输入年龄(天)"></el-input>
+        </el-form-item>
+        <el-form-item label="健康状况">
+          <el-select v-model="form.healthStatus" placeholder="请输入健康状况">
+            <el-option
+              v-for="item in health"
+              :key="item.label"
+              :label="item.label"
+              :value="item.value">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="体重">
+          <el-input v-model="form.weight" placeholder="请输入体重(千克)"></el-input>
+        </el-form-item>
+        <el-form-item label="品种">
+          <el-input v-model="form.variety" placeholder="请输入去向"></el-input>
+        </el-form-item>
+        <el-form-item label="去向">
+          <el-input v-model="form.whereDidYouGo" placeholder="请输入去向"></el-input>
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
-        <el-button @click="visible = false">取消</el-button>
+        <el-button @click="cancel">取消</el-button>
         <el-button type="primary" @click="formSubmit()">确定</el-button>
       </span>
     </el-dialog>
@@ -140,14 +177,7 @@ export default {
       dataForm: {
         key: ''
       },
-      dataList: [
-        {
-          id: '',
-          number: '',
-          phNumber: '',
-          name: '',
-        }
-      ],
+      dataList: [],
       pageIndex: 1,
       pageSize: 10,
       totalPage: 0,
@@ -156,14 +186,29 @@ export default {
       visible: false,
       form: {
         id: '',
-        number: '',
-        pastureId: '',
-        pigstyId: ''
+        unitId: '',
+        weight: '',
+        whereDidYouGo: '',
+        dayAge: '',
+        eartag: '',
+        healthStatus: '',
+        variety: ''
       },
       pastureList: [], // 牧场list
       pighouseList: [], // 猪舍list
       phSelectedList: [], // 选择过牧场后的猪舍list
-      unitList: [] // 单元list
+      unitList: [], // 单元list
+      unSelectedList: [], // 选择过后的单元list
+      health: [
+        {
+          value: true,
+          label: '健康'
+        },
+        {
+          value: false,
+          label: '不健康'
+        }
+      ]
     }
   },
   mounted () {
@@ -202,6 +247,7 @@ export default {
           this.dataList.forEach(item => {
             for (let unit of this.unitList) {
               if (item.unitId === unit.id) {
+                item.number = unit.number
                 item.pastureId = unit.pastureId
                 item.pigstyId = unit.pigstyId
                 break
@@ -226,7 +272,9 @@ export default {
               }
             }
           });
+          // 初始化时,选择后的与未选择的list相同
           this.phSelectedList = this.pighouseList
+          this.unSelectedList = this.unitList
         } else {
           this.dataList = []
           this.totalPage = 0
@@ -245,9 +293,10 @@ export default {
       this.pageIndex = val
       this.getDataList()
     },
-    // 获取到了牧场 → 限制猪舍
+    // 获取到了牧场 → 猪舍 + 单元处理
     getPasture (val) {
-      console.log(val);
+      /** 关于猪舍 */
+      //  → 限制猪舍
       this.phSelectedList = []
       this.pighouseList.forEach(item => {
         if (item.pastureId === val) {
@@ -265,15 +314,85 @@ export default {
       if (i === this.phSelectedList.length) {
         this.form.pigstyId = ''
       }
+      /** 关于单元 */
+      //  → 限制单元
+      this.unSelectedList = []
+      this.unitList.forEach(item => {
+        if (item.pastureId === val) {
+          this.unSelectedList.push(item)
+        }
+      });
+      // 如果已有选中的单元,且该猪舍不属于该牧场,则清空单元选择
+      let j;
+      for (j = 0; j < this.unSelectedList.length; j++) {
+        let item = this.unSelectedList[j];
+        if (item.id === this.form.pastureId) {
+          break
+        }
+      }
+      if (j === this.unSelectedList.length) {
+        this.form.unitId = ''
+      }
     },
-    // 获取到猪舍 → 反向确定牧场
+    // 获取到猪舍 → 牧场 + 猪舍自身 + 单元处理
     getPigsty (val) {
+      //  → 反向确定牧场
       for (let item of this.pighouseList) {
         if (item.id === val) {
           this.form.pastureId = item.pastureId
           break
         }
       }
+      // → 先获取猪舍,没有确定牧场的情况下,限制猪舍自身
+      this.phSelectedList = []
+      this.pighouseList.forEach(item => {
+        if (item.pastureId === this.form.pastureId) {
+          this.phSelectedList.push(item)
+        }
+      });
+      /** 关于单元 */
+      // → 限制单元
+      this.unSelectedList = []
+      this.unitList.forEach(item => {
+        if (item.pigstyId === val) {
+          this.unSelectedList.push(item)
+        }
+      });
+      // 如果已有选中的单元,且该猪舍不属于该牧场,则清空单元选择
+      let j;
+      for (j = 0; j < this.unSelectedList.length; j++) {
+        let item = this.unSelectedList[j];
+        if (item.id === this.form.pastureId) {
+          break
+        }
+      }
+      if (j === this.unSelectedList.length) {
+        this.form.unitId = ''
+      }
+    },
+    // 获取到了单元 → 牧场 + 猪舍 + 单元自身处理
+    getUnit (val) {
+      // → 反向确定牧场 + 牧场
+      for (let item of this.unSelectedList) {
+        if (item.id === val) {
+          this.form.pastureId = item.pastureId
+          this.form.pigstyId = item.pigstyId
+        }
+      }
+      // → 先获取单元,在没有确定牧场+猪舍的情况下,限制猪舍
+      this.phSelectedList = []
+      this.pighouseList.forEach(item => {
+        if (item.pastureId === this.form.pastureId) {
+          this.phSelectedList.push(item)
+        }
+      });
+      // → 先获取单元,在没有确定牧场+猪舍的情况下,限制单元自身
+      this.unSelectedList = []
+      this.unitList.forEach(item => {
+        if (item.pigstyId === this.form.pigstyId) {
+          this.unSelectedList.push(item)
+        }
+      });
     },
     // 新增 or 修改单元
     addOrUpdateHandle (row) {
@@ -293,7 +412,7 @@ export default {
     },
     // 删除n个牧场
     deleteHandle (id) {
-      this.$confirm(`确定删除牧场?`, '提示', {
+      this.$confirm(`确定删除年猪?`, '提示', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning'
@@ -306,21 +425,20 @@ export default {
           return
         }
         this.$http({
-          url: this.$http.adornUrl('/management/unit/delete'),
+          url: this.$http.adornUrl('/management/yearpigbase/delete'),
           method: 'post',
           data: this.$http.adornData(this.selectionDataList, false)
         }).then(result => {
-          console.log(result);
           if (result.data.code === 0) {
             this.getDataList()
             this.resetForm()
             this.$message({
-              message: '成功删除牧场',
+              message: '成功删除年猪',
               type: 'success',
               duration: 1000
             })
           } else {
-            this.$message.error('删除牧场失败');
+            this.$message.error('删除年猪失败');
           }
           this.selectionDataList = []
         })
@@ -329,32 +447,34 @@ export default {
     formSubmit () {
       if (this.form.id) {
         // 修改
-        console.log(this.form);
-        if (this.form.number && this.form.pastureId) {
+        if (this.confirmInput()) {
           // 进行修改操作
           this.$http({
-            url: this.$http.adornUrl('/management/unit/update'),
+            url: this.$http.adornUrl('/management/yearpigbase/update'),
             method: 'post',
             data: this.$http.adornData({
               id: this.form.id,
-              number: this.form.number,
-              pastureId: this.form.pastureId,
-              pigstyId: this.form.pigstyId
+              unitId: this.form.unitId,
+              dayAge: parseInt(this.form.dayAge),
+              eartag: this.form.eartag,
+              healthStatus: this.form.healthStatus,
+              weight: parseInt(this.form.weight),
+              whereDidYouGo: this.form.whereDidYouGo,
+              variety: this.form.variety
             })
           }).then(result => {
             if (result.data.code === 0) {
-              this.getDataList()
-              this.resetForm()
+              this.resetForm();
+              this.visible = false;
               this.$message({
-                message: '成功修改单元信息',
+                message: '成功修改年猪信息',
                 type: 'success',
                 duration: 1000
               })
             } else {
-              this.$message.error('修改牧场信息失败');
+              this.$message.error('修改年猪信息失败');
             }
           })
-          this.visible = false
         } else {
           // 请输入完整
           this.$confirm(`请输入完整`, '提示', {
@@ -365,33 +485,37 @@ export default {
             return
           }).catch(() => {})
         }
-        console.log(this.form);
       } else {
         // 新增
-        if (this.form.number && this.form.pastureId) {
+        if (this.confirmInput(1)) {
           // 进行新增操作
+          console.log('进行新增操作');
           this.$http({
-            url: this.$http.adornUrl('/management/unit/save'),
+            url: this.$http.adornUrl('/management/yearpigbase/save'),
             method: 'post',
             data: this.$http.adornData({
-              number: this.form.number,
-              pastureId: this.form.pastureId,
-              pigstyId: this.form.pigstyId
+              unitId: this.form.unitId,
+              dayAge: parseInt(this.form.dayAge),
+              eartag: this.form.eartag,
+              healthStatus: this.form.healthStatus,
+              weight: parseInt(this.form.weight),
+              whereDidYouGo: this.form.whereDidYouGo,
+              variety: this.form.variety
             })
           }).then(result => {
+            console.log(result);
             if (result.data.code === 0) {
-              this.getDataList()
+              this.resetForm();
+              this.visible = false;
               this.$message({
-                message: '成功添加单元',
+                message: '成功添加年猪',
                 type: 'success',
                 duration: 1000
               })
             } else {
-              this.$message.error('添加单元失败');
+              this.$message.error('添加年猪失败');
             }
-            this.resetForm()
           })
-          this.visible = false
         } else {
           // 请输入完整
           this.$confirm(`请输入完整`, '提示', {
@@ -404,12 +528,30 @@ export default {
         }
       }
     },
+    // 判断新增/修改时是否输入完整
+    confirmInput (val) {
+      console.log('判断是否输入完整');
+      console.log(val);
+      val && (delete this.form.id, delete this.form.deleted, delete this.form.fosterStatus, delete this.form.gmtCreate, delete this.form.gmtModified, delete this.form.name, delete this.form.number, delete this.form.phNumber)
+      console.log(this.form);
+      for (let i in this.form) {
+        if (!this.form[i].toString()) {
+          return false
+        }
+      }
+      return true
+    },
     // 清空form
     resetForm () {
-      this.form.id = ''
-      this.form.number = ''
-      this.form.pastureId = ''
-      this.form.pigstyId = ''
+      for (let i in this.form) {
+        this.form[i] = ''
+      }
+      this.getDataList()
+    },
+    // 取消
+    cancel () {
+      this.visible = false
+      this.resetForm()
     }
   }
 }

+ 441 - 2
src/views/modules/pigbasic/pbpedigree.vue

@@ -1,10 +1,449 @@
 <template>
-  <div>
-    谱系管理
+  <div class="branch">
+    <el-form
+      :inline="true"
+      :model="dataForm"
+      @keyup.enter.native="getDataList()">
+      <el-form-item>
+        <el-input
+          v-model="dataForm.key"
+          placeholder="用户名/用户操作"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-form-item>
+        <el-button @click="getDataList()">查询</el-button>
+      </el-form-item>
+      <el-form-item>
+        <el-button v-if="isAuth('sys:role:save')" type="primary" @click="addOrUpdateHandle()">新增</el-button>
+      </el-form-item>
+      <el-form-item>
+        <el-button v-if="isAuth('sys:role:delete')" type="danger" @click="deleteHandle()" :disabled="selectionDataList.length <= 0">批量删除</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table
+      :data="dataList"
+      @selection-change="selectionChangeHandle"
+      v-loading="dataListLoading"
+      style="width: 100%">
+      <el-table-column
+        type="selection"
+        header-align="center"
+        align="center"
+        width="50">
+      </el-table-column>
+      <el-table-column
+        prop="pigletEartag"
+        header-align="center"
+        align="center"
+        label="小猪耳标">
+      </el-table-column>
+      <el-table-column
+        prop="sowEartag"
+        header-align="center"
+        align="center"
+        label="母亲耳标">
+      </el-table-column>
+      <el-table-column
+        prop="boarEartag"
+        header-align="center"
+        align="center"
+        label="父亲耳标">
+      </el-table-column>
+      <el-table-column
+        fixed="right"
+        header-align="center"
+        align="center"
+        label="操作">
+        <template slot-scope="scope">
+          <el-button v-if="isAuth('sys:user:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row)">修改</el-button>
+          <el-button v-if="isAuth('sys:user:delete')" type="text" size="small" @click="deleteHandle(scope.row.id)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-dialog
+      :title="!form.id ? '新增' : '修改'"
+      :close-on-click-modal="false"
+      :visible.sync="visible"
+      @close="cancel">
+      <el-form :model="form" ref="form" @keyup.enter.native="formSubmit()" label-width="80px">
+        <el-form-item label="小猪耳标">
+          <!-- <div class="block">
+            <el-cascader
+              v-model="form.pigletEartag"
+              :options="options"
+              :props="{ expandTrigger: 'hover' }"
+              @change="handleChange"></el-cascader>
+          </div> -->
+          <el-cascader :options="options" :show-all-levels="false" v-model="form.pigletEartag" clearable></el-cascader>
+        </el-form-item>
+        <el-form-item label="母亲耳标">
+          <!-- <div class="block">
+            <el-cascader
+              v-model="form.sowEartag"
+              :options="options"
+              :props="{ expandTrigger: 'hover' }"
+              @change="handleChange"></el-cascader>
+          </div> -->
+          <el-cascader :options="options" :show-all-levels="false" v-model="form.sowEartag" clearable></el-cascader>
+        </el-form-item>
+        <el-form-item label="父亲耳标">
+          <!-- <div class="block">
+            <el-cascader
+              v-model="form.boarEartag"
+              :options="options"
+              :props="{ expandTrigger: 'hover' }"
+              @change="handleChange"></el-cascader>
+          </div> -->
+          <el-cascader :options="options" :show-all-levels="false" v-model="form.boarEartag" clearable></el-cascader>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="cancel">取消</el-button>
+        <el-button type="primary" @click="formSubmit()">确定</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 <script>
 export default {
+  data () {
+    return {
+      dataForm: {
+        key: ''
+      },
+      dataList: [
+        {
+          buildTime: '',
+          id: '',
+          location: '',
+          manager: '',
+          name: '',
+        }
+      ],
+      pageIndex: 1,
+      pageSize: 10,
+      totalPage: 0,
+      dataListLoading: false,
+      selectionDataList: [],
+      visible: false,
+      form: {
+        id: '',
+        pigletEartag: [],
+        sowEartag: [],
+        boarEartag: []
+      },
+      options: [],
+      pigs: []
+    }
+  },
+  created () {
+    this.getDataList()
+  },
+  mounted () {
+    this.getCascader()
+  },
+  methods: {
+    // 获取数据列表
+    getDataList () {
+      this.dataListLoading = true
+      this.$http({
+        url: this.$http.adornUrl('/management/yearpigpedigree/list'),
+        method: 'post'
+      }).then(({ data }) => {
+        if (data && data.code === 0) {
+          this.dataList = data.page.list
+          this.totalPage = data.page.totalCount
+        } else {
+          this.dataList = []
+          this.totalPage = 0
+        }
+        this.dataListLoading = false
+      })
+    },
+    // 每页数
+    sizeChangeHandle (val) {
+      this.pageSize = val
+      this.pageIndex = 1
+      this.getDataList()
+    },
+    // 当前页
+    currentChangeHandle (val) {
+      this.pageIndex = val
+      this.getDataList()
+    },
+    // 新增 or 修改谱系信息
+    addOrUpdateHandle (row) {
+      // 显示谱系新增 or 修改面板
+      this.visible = true
+      if (row) {
+        this.form.id = row.id
+        // 获取小猪耳标
+        for (let item of this.pigs) {
+          if (item.value === row.pigletEartag) {
+            this.form.pigletEartag = item.cascader
+            break
+          }
+        }
+        // 获取母亲耳标
+        for (let item of this.pigs) {
+          if (item.value === row.sowEartag) {
+            this.form.sowEartag = item.cascader
+            break
+          }
+        }
+        // 获取父亲耳标
+        for (let item of this.pigs) {
+          if (item.value === row.boarEartag) {
+            this.form.boarEartag = item.cascader
+            break
+          }
+        }
+      }
+    },
+    // 获取级联选择器
+    getCascader () {
+      // 获取所有年猪信息
+      this.$http({
+        url: this.$http.adornUrl('/management/yearpigbase/list'),
+        method: 'post'
+      }).then(async ({ data }) => {
+        // 获取所有牧场信息
+        let pastureResult = await this.$http({
+          url: this.$http.adornUrl('/management/pasture/list'),
+          method: 'post'
+        })
+        let pastures = []
+        pastureResult.data.page.list.forEach(pasture => {
+          let item = {
+            label: pasture.name,
+            value: pasture.id,
+            children: []
+          }
+          pastures.push(item)
+        });
+        // 获取所有猪舍信息
+        let pigstyResult = await this.$http({
+          url: this.$http.adornUrl('/management/pigsty/list'),
+          method: 'post'
+        })
+        let pigstys = []
+        pigstyResult.data.page.list.forEach(pigsty => {
+          let item = {
+            label: pigsty.number,
+            value: pigsty.id,
+            pastureId: pigsty.pastureId,
+            children: []
+          }
+          pigstys.push(item)
+        });
+        // 获取所有单元信息
+        let unitResult = await this.$http({
+          url: this.$http.adornUrl('/management/unit/list'),
+          method: 'post'
+        })
+        let units = []
+        unitResult.data.page.list.forEach(unit => {
+          let item = {
+            label: unit.number,
+            value: unit.id,
+            pigstyId: unit.pigstyId,
+            pastureId: unit.pastureId,
+            children: []
+          }
+          units.push(item)
+        });
+        if (data && data.code === 0) {
+          let pigs = data.page.list
+          // 将所有猪放进单元中
+          pigs.forEach(pig => {
+            for (let item of units) {
+              if (pig.unitId === item.value) {
+                let p = {
+                  label: pig.eartag,
+                  value: pig.eartag,
+                  cascader: [item.pastureId, item.pigstyId, item.value, pig.eartag]
+                }
+                item.children.push(p)
+                this.pigs.push(p)
+                break
+              }
+            }
+          });
+          // 将所有单元放进猪舍里面
+          units.forEach(unit => {
+            for (let item of pigstys) {
+              if (unit.pigstyId === item.value) {
+                item.children.push(unit)
+                break
+              }
+            }
+          });
+          // 将所有猪舍放进牧场里
+          pigstys.forEach(pigsty => {
+            for (let item of pastures) {
+              if (pigsty.pastureId === item.value) {
+                item.children.push(pigsty)
+                break
+              }
+            }
+          });
+        }
+        this.options = pastures
+      })
+    },
+    // 选择n个牧场
+    selectionChangeHandle (val) {
+      this.selectionDataList = []
+      val.forEach(item => {
+        this.selectionDataList.push(item.id)
+      });
+    },
+    // 删除n个牧场
+    deleteHandle (id) {
+      this.$confirm(`确定删除小猪谱系信息?`, '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        // 删除操作
+        if (id) {
+          this.selectionDataList.push(id)
+        }
+        if (this.selectionDataList.length <= 0) {
+          return
+        }
+        this.$http({
+          url: this.$http.adornUrl('/management/yearpigpedigree/delete'),
+          method: 'post',
+          data: this.$http.adornData(this.selectionDataList, false)
+        }).then(result => {
+          if (result.data.code === 0) {
+            this.$message({
+              message: '成功删除小猪谱系信息',
+              type: 'success',
+              duration: 1000
+            })
+          } else {
+            this.$message.error('删除小猪谱系信息失败');
+          }
+          this.resetForm()
+          this.selectionDataList = []
+        })
+      }).catch(() => {})
+    },
+    formSubmit () {
+      if (this.form.pigletEartag[3] === this.form.sowEartag[3] || this.form.pigletEartag[3] === this.form.boarEartag[3] || this.form.sowEartag[3] === this.form.boarEartag[3]) {
+        // 请勿选择相同猪
+        this.$confirm(`请勿选择相同猪`, '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }).then(() => {
+            return
+          }).catch(() => {})
+          return
+      }
+      // 正常操作
+      if (this.form.id) {
+        // 修改
+        if (this.confirmInput()) {
+          // 进行修改操作
+          this.$http({
+            url: this.$http.adornUrl('/management/yearpigpedigree/update'),
+            method: 'post',
+            data: this.$http.adornData({
+              id: this.form.id,
+              pigletEartag: this.form.pigletEartag[3],
+              sowEartag: this.form.sowEartag[3],
+              boarEartag: this.form.boarEartag[3]
+            })
+          }).then(result => {
+            if (result.data.code === 0) {
+              this.resetForm();
+              this.visible = false;
+              this.$message({
+                message: '成功修改小猪谱系信息',
+                type: 'success',
+                duration: 1000
+              })
+            } else {
+              this.$message.error('修改小猪谱系信息失败');
+            }
+          })
+        } else {
+          // 请输入完整
+          this.$confirm(`请输入完整`, '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }).then(() => {
+            return
+          }).catch(() => {})
+        }
+      } else {
+        // 新增
+        if (this.confirmInput(1)) {
+          // 进行新增操作
+          this.$http({
+            url: this.$http.adornUrl('/management/yearpigpedigree/save'),
+            method: 'post',
+            data: this.$http.adornData({
+              pigletEartag: this.form.pigletEartag[3],
+              sowEartag: this.form.sowEartag[3],
+              boarEartag: this.form.boarEartag[3]
+            })
+          }).then(result => {
+            if (result.data.code === 0) {
+              this.resetForm();
+              this.visible = false;
+              this.$message({
+                message: '成功添加小猪谱系信息',
+                type: 'success',
+                duration: 1000
+              })
+            } else {
+              this.$message.error('添加小猪谱系信息失败');
+            }
+          })
+        } else {
+          // 请输入完整
+          this.$confirm(`请输入完整`, '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }).then(() => {
+            return
+          }).catch(() => {})
+        }
+      }
+    },
+    // 判断新增/修改时是否输入完整
+    confirmInput (val) {
+      console.log('判断是否输入完整');
+      console.log(val);
+      val && (delete this.form.id, delete this.form.deleted, delete this.form.gmtCreate, delete this.form.gmtModified)
+      for (let i in this.form) {
+        if (!this.form[i].toString()) {
+          return false
+        }
+      }
+      return true
+    },
+    // 清空form
+    resetForm () {
+      for (let i in this.form) {
+        this.form[i] = []
+      }
+      this.form.id = ''
+      this.getDataList()
+    },
+    // 取消
+    cancel () {
+      this.visible = false
+      this.resetForm()
+    }
+  }
 }
 </script>
 <style scoped>

+ 453 - 2
src/views/modules/pigfarm/pfperson.vue

@@ -1,10 +1,461 @@
 <template>
-  <div>
-    养殖员管理
+  <div class="branch">
+    <el-form
+      :inline="true"
+      :model="dataForm"
+      @keyup.enter.native="getDataList()">
+      <el-form-item>
+        <el-input
+          v-model="dataForm.key"
+          placeholder="用户名/用户操作"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-form-item>
+        <el-button @click="getDataList()">查询</el-button>
+      </el-form-item>
+      <el-form-item>
+        <el-button v-if="isAuth('sys:role:save')" type="primary" @click="addOrUpdateHandle()">新增</el-button>
+      </el-form-item>
+      <el-form-item>
+        <el-button v-if="isAuth('sys:role:delete')" type="danger" @click="deleteHandle()" :disabled="selectionDataList.length <= 0">批量删除</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table
+      :data="dataList"
+      @selection-change="selectionChangeHandle"
+      v-loading="dataListLoading"
+      style="width: 100%">
+      <el-table-column
+        type="selection"
+        header-align="center"
+        align="center"
+        width="50">
+      </el-table-column>
+      <el-table-column
+        prop="name"
+        header-align="center"
+        align="center"
+        label="养殖员姓名">
+      </el-table-column>
+      <el-table-column
+        prop="position"
+        header-align="center"
+        align="center"
+        label="职位">
+      </el-table-column>
+      <el-table-column
+        prop="approachTime"
+        header-align="center"
+        align="center"
+        label="入场时间">
+      </el-table-column>
+      <el-table-column
+        prop="departureTime"
+        header-align="center"
+        align="center"
+        label="离场时间">
+      </el-table-column>
+      <el-table-column
+        prop="jobStauts"
+        header-align="center"
+        align="center"
+        label="当前在岗">
+      </el-table-column>
+      <el-table-column
+        fixed="right"
+        header-align="center"
+        align="center"
+        label="操作">
+        <template slot-scope="scope">
+          <el-button v-if="isAuth('sys:user:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row)">修改</el-button>
+          <el-button v-if="isAuth('sys:user:delete')" type="text" size="small" @click="deleteHandle(scope.row.id)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-dialog
+      :title="!form.id ? '新增' : '修改'"
+      :close-on-click-modal="false"
+      :visible.sync="visible"
+      @close="cancel">
+      <el-form :model="form" ref="form" @keyup.enter.native="formSubmit()" label-width="80px">
+        <el-form-item label="小猪耳标">
+          <!-- <div class="block">
+            <el-cascader
+              v-model="form.pigletEartag"
+              :options="options"
+              :props="{ expandTrigger: 'hover' }"
+              @change="handleChange"></el-cascader>
+          </div> -->
+          <el-cascader :options="options" :show-all-levels="false" v-model="form.pigletEartag" clearable></el-cascader>
+        </el-form-item>
+        <el-form-item label="母亲耳标">
+          <!-- <div class="block">
+            <el-cascader
+              v-model="form.sowEartag"
+              :options="options"
+              :props="{ expandTrigger: 'hover' }"
+              @change="handleChange"></el-cascader>
+          </div> -->
+          <el-cascader :options="options" :show-all-levels="false" v-model="form.sowEartag" clearable></el-cascader>
+        </el-form-item>
+        <el-form-item label="父亲耳标">
+          <!-- <div class="block">
+            <el-cascader
+              v-model="form.boarEartag"
+              :options="options"
+              :props="{ expandTrigger: 'hover' }"
+              @change="handleChange"></el-cascader>
+          </div> -->
+          <el-cascader :options="options" :show-all-levels="false" v-model="form.boarEartag" clearable></el-cascader>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="cancel">取消</el-button>
+        <el-button type="primary" @click="formSubmit()">确定</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 <script>
 export default {
+  data () {
+    return {
+      dataForm: {
+        key: ''
+      },
+      dataList: [
+        {
+          buildTime: '',
+          id: '',
+          location: '',
+          manager: '',
+          name: '',
+        }
+      ],
+      pageIndex: 1,
+      pageSize: 10,
+      totalPage: 0,
+      dataListLoading: false,
+      selectionDataList: [],
+      visible: false,
+      form: {
+        id: '',
+        pigletEartag: [],
+        sowEartag: [],
+        boarEartag: []
+      },
+      options: [],
+      pigs: []
+    }
+  },
+  created () {
+    this.getDataList()
+  },
+  mounted () {
+    this.getCascader()
+  },
+  methods: {
+    // 获取数据列表
+    getDataList () {
+      this.dataListLoading = true
+      this.$http({
+        url: this.$http.adornUrl('/management/yearpigpedigree/list'),
+        method: 'post'
+      }).then(({ data }) => {
+        if (data && data.code === 0) {
+          this.dataList = data.page.list
+          this.totalPage = data.page.totalCount
+        } else {
+          this.dataList = []
+          this.totalPage = 0
+        }
+        this.dataListLoading = false
+      })
+    },
+    // 每页数
+    sizeChangeHandle (val) {
+      this.pageSize = val
+      this.pageIndex = 1
+      this.getDataList()
+    },
+    // 当前页
+    currentChangeHandle (val) {
+      this.pageIndex = val
+      this.getDataList()
+    },
+    // 新增 or 修改谱系信息
+    addOrUpdateHandle (row) {
+      // 显示谱系新增 or 修改面板
+      this.visible = true
+      if (row) {
+        this.form.id = row.id
+        // 获取小猪耳标
+        for (let item of this.pigs) {
+          if (item.value === row.pigletEartag) {
+            this.form.pigletEartag = item.cascader
+            break
+          }
+        }
+        // 获取母亲耳标
+        for (let item of this.pigs) {
+          if (item.value === row.sowEartag) {
+            this.form.sowEartag = item.cascader
+            break
+          }
+        }
+        // 获取父亲耳标
+        for (let item of this.pigs) {
+          if (item.value === row.boarEartag) {
+            this.form.boarEartag = item.cascader
+            break
+          }
+        }
+      }
+    },
+    // 获取级联选择器
+    getCascader () {
+      // 获取所有年猪信息
+      this.$http({
+        url: this.$http.adornUrl('/management/yearpigbase/list'),
+        method: 'post'
+      }).then(async ({ data }) => {
+        // 获取所有牧场信息
+        let pastureResult = await this.$http({
+          url: this.$http.adornUrl('/management/pasture/list'),
+          method: 'post'
+        })
+        let pastures = []
+        pastureResult.data.page.list.forEach(pasture => {
+          let item = {
+            label: pasture.name,
+            value: pasture.id,
+            children: []
+          }
+          pastures.push(item)
+        });
+        // 获取所有猪舍信息
+        let pigstyResult = await this.$http({
+          url: this.$http.adornUrl('/management/pigsty/list'),
+          method: 'post'
+        })
+        let pigstys = []
+        pigstyResult.data.page.list.forEach(pigsty => {
+          let item = {
+            label: pigsty.number,
+            value: pigsty.id,
+            pastureId: pigsty.pastureId,
+            children: []
+          }
+          pigstys.push(item)
+        });
+        // 获取所有单元信息
+        let unitResult = await this.$http({
+          url: this.$http.adornUrl('/management/unit/list'),
+          method: 'post'
+        })
+        let units = []
+        unitResult.data.page.list.forEach(unit => {
+          let item = {
+            label: unit.number,
+            value: unit.id,
+            pigstyId: unit.pigstyId,
+            pastureId: unit.pastureId,
+            children: []
+          }
+          units.push(item)
+        });
+        if (data && data.code === 0) {
+          let pigs = data.page.list
+          // 将所有猪放进单元中
+          pigs.forEach(pig => {
+            for (let item of units) {
+              if (pig.unitId === item.value) {
+                let p = {
+                  label: pig.eartag,
+                  value: pig.eartag,
+                  cascader: [item.pastureId, item.pigstyId, item.value, pig.eartag]
+                }
+                item.children.push(p)
+                this.pigs.push(p)
+                break
+              }
+            }
+          });
+          // 将所有单元放进猪舍里面
+          units.forEach(unit => {
+            for (let item of pigstys) {
+              if (unit.pigstyId === item.value) {
+                item.children.push(unit)
+                break
+              }
+            }
+          });
+          // 将所有猪舍放进牧场里
+          pigstys.forEach(pigsty => {
+            for (let item of pastures) {
+              if (pigsty.pastureId === item.value) {
+                item.children.push(pigsty)
+                break
+              }
+            }
+          });
+        }
+        this.options = pastures
+      })
+    },
+    // 选择n个牧场
+    selectionChangeHandle (val) {
+      this.selectionDataList = []
+      val.forEach(item => {
+        this.selectionDataList.push(item.id)
+      });
+    },
+    // 删除n个牧场
+    deleteHandle (id) {
+      this.$confirm(`确定删除小猪谱系信息?`, '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        // 删除操作
+        if (id) {
+          this.selectionDataList.push(id)
+        }
+        if (this.selectionDataList.length <= 0) {
+          return
+        }
+        this.$http({
+          url: this.$http.adornUrl('/management/yearpigpedigree/delete'),
+          method: 'post',
+          data: this.$http.adornData(this.selectionDataList, false)
+        }).then(result => {
+          if (result.data.code === 0) {
+            this.$message({
+              message: '成功删除小猪谱系信息',
+              type: 'success',
+              duration: 1000
+            })
+          } else {
+            this.$message.error('删除小猪谱系信息失败');
+          }
+          this.resetForm()
+          this.selectionDataList = []
+        })
+      }).catch(() => {})
+    },
+    formSubmit () {
+      if (this.form.pigletEartag[3] === this.form.sowEartag[3] || this.form.pigletEartag[3] === this.form.boarEartag[3] || this.form.sowEartag[3] === this.form.boarEartag[3]) {
+        // 请勿选择相同猪
+        this.$confirm(`请勿选择相同猪`, '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }).then(() => {
+            return
+          }).catch(() => {})
+          return
+      }
+      // 正常操作
+      if (this.form.id) {
+        // 修改
+        if (this.confirmInput()) {
+          // 进行修改操作
+          this.$http({
+            url: this.$http.adornUrl('/management/yearpigpedigree/update'),
+            method: 'post',
+            data: this.$http.adornData({
+              id: this.form.id,
+              pigletEartag: this.form.pigletEartag[3],
+              sowEartag: this.form.sowEartag[3],
+              boarEartag: this.form.boarEartag[3]
+            })
+          }).then(result => {
+            if (result.data.code === 0) {
+              this.resetForm();
+              this.visible = false;
+              this.$message({
+                message: '成功修改小猪谱系信息',
+                type: 'success',
+                duration: 1000
+              })
+            } else {
+              this.$message.error('修改小猪谱系信息失败');
+            }
+          })
+        } else {
+          // 请输入完整
+          this.$confirm(`请输入完整`, '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }).then(() => {
+            return
+          }).catch(() => {})
+        }
+      } else {
+        // 新增
+        if (this.confirmInput(1)) {
+          // 进行新增操作
+          this.$http({
+            url: this.$http.adornUrl('/management/yearpigpedigree/save'),
+            method: 'post',
+            data: this.$http.adornData({
+              pigletEartag: this.form.pigletEartag[3],
+              sowEartag: this.form.sowEartag[3],
+              boarEartag: this.form.boarEartag[3]
+            })
+          }).then(result => {
+            if (result.data.code === 0) {
+              this.resetForm();
+              this.visible = false;
+              this.$message({
+                message: '成功添加小猪谱系信息',
+                type: 'success',
+                duration: 1000
+              })
+            } else {
+              this.$message.error('添加小猪谱系信息失败');
+            }
+          })
+        } else {
+          // 请输入完整
+          this.$confirm(`请输入完整`, '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }).then(() => {
+            return
+          }).catch(() => {})
+        }
+      }
+    },
+    // 判断新增/修改时是否输入完整
+    confirmInput (val) {
+      console.log('判断是否输入完整');
+      console.log(val);
+      val && (delete this.form.id, delete this.form.deleted, delete this.form.gmtCreate, delete this.form.gmtModified)
+      for (let i in this.form) {
+        if (!this.form[i].toString()) {
+          return false
+        }
+      }
+      return true
+    },
+    // 清空form
+    resetForm () {
+      for (let i in this.form) {
+        this.form[i] = []
+      }
+      this.form.id = ''
+      this.getDataList()
+    },
+    // 取消
+    cancel () {
+      this.visible = false
+      this.resetForm()
+    }
+  }
 }
 </script>
 <style scoped>