Browse Source

小猪认养牧场管理、猪舍管理、单元管理完成

East 4 years ago
parent
commit
11e134c61f

+ 304 - 2
src/views/modules/basicdata/bpighouse.vue

@@ -1,10 +1,312 @@
 <template>
-  <div>
-    猪舍管理
+  <div class="bpighouse">
+    <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="number"
+        header-align="center"
+        align="center"
+        label="猪舍编号">
+      </el-table-column>
+      <el-table-column
+        prop="name"
+        header-align="center"
+        align="center"
+        label="所属牧场">
+      </el-table-column>
+      <el-table-column
+        prop="feeder"
+        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">
+      <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
+              v-for="item in pastureList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="猪舍编号" prop="number">
+          <el-input v-model="form.number" placeholder="猪舍编号"></el-input>
+        </el-form-item>
+        <el-form-item label="养殖员" prop="location">
+          <el-input v-model="form.feeder" placeholder="养殖员姓名"></el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="visible = false">取消</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: '',
+        number: '',
+        pastureId: '',
+        feeder: ''
+      },
+      pastureList: [] // 牧场list
+    }
+  },
+  created () {
+    this.getDataList()
+  },
+  methods: {
+    // 获取数据列表
+    getDataList () {
+      this.dataListLoading = true
+      this.$http({
+        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
+        if (data && data.code === 0) {
+          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
+              }
+            }
+          });
+        } 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 = row
+      }
+    },
+    // 选择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/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('删除牧场失败');
+          }
+          this.selectionDataList = []
+        })
+      }).catch(() => {})
+    },
+    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',
+            data: this.$http.adornData({
+              id: this.form.id,
+              number: this.form.number,
+              pastureId: this.form.pastureId,
+              feeder: this.form.feeder
+            })
+          }).then(result => {
+            if (result.data.code === 0) {
+              this.getDataList()
+              this.resetForm()
+              this.$message({
+                message: '成功修改猪舍信息',
+                type: 'success',
+                duration: 1000
+              })
+            } else {
+              this.$message.error('修改猪舍信息失败');
+            }
+          })
+          this.visible = false
+        } else {
+          // 请输入完整
+          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',
+            data: this.$http.adornData({
+              number: this.form.number,
+              pastureId: this.form.pastureId,
+              feeder: this.form.feeder
+            })
+          }).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('添加猪舍失败');
+            }
+          })
+          this.visible = false
+        } else {
+          // 请输入完整
+          this.$confirm(`请输入完整`, '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }).then(() => {
+            return
+          }).catch(() => {})
+        }
+      }
+    },
+    // 清空form
+    resetForm () {
+      this.form.id = ''
+      this.form.number = ''
+      this.form.pastureId = ''
+      this.form.feeder = ''
+    }
+  }
 }
 </script>
 <style scoped>

+ 197 - 40
src/views/modules/basicdata/branch.vue

@@ -4,7 +4,7 @@
       :inline="true"
       :model="dataForm"
       @keyup.enter.native="getDataList()">
-      <el-form-item>
+      <!-- <el-form-item>
         <el-input
           v-model="dataForm.key"
           placeholder="用户名/用户操作"
@@ -13,7 +13,7 @@
       </el-form-item>
       <el-form-item>
         <el-button @click="getDataList()">查询</el-button>
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item>
         <el-button v-if="isAuth('sys:role:save')" type="primary" @click="addOrUpdateHandle()">新增</el-button>
       </el-form-item>
@@ -24,7 +24,6 @@
     <el-table
       :data="dataList"
       @selection-change="selectionChangeHandle"
-      border
       v-loading="dataListLoading"
       style="width: 100%">
       <el-table-column
@@ -46,13 +45,13 @@
         label="地址">
       </el-table-column>
       <el-table-column
-        prop="principal"
+        prop="manager"
         header-align="center"
         align="center"
         label="负责人">
       </el-table-column>
       <el-table-column
-        prop="date"
+        prop="buildTime"
         header-align="center"
         align="center"
         :show-overflow-tooltip="true"
@@ -64,11 +63,39 @@
         align="center"
         label="操作">
         <template slot-scope="scope">
-          <el-button v-if="isAuth('sys:user:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.userId)">修改</el-button>
-          <el-button v-if="isAuth('sys:user:delete')" type="text" size="small" @click="deleteHandle(scope.row.userId)">删除</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">
+        <el-form-item label="牧场名称" prop="name">
+          <el-input v-model="form.name" placeholder="牧场名称"></el-input>
+        </el-form-item>
+        <el-form-item label="管理员" prop="manager">
+          <el-input v-model="form.manager" placeholder="牧场管理员"></el-input>
+        </el-form-item>
+        <el-form-item label="地址" prop="location">
+          <el-input v-model="form.location" placeholder="地址"></el-input>
+        </el-form-item>
+        <el-form-item label="日期" prop="buildTime">
+          <el-date-picker
+            v-model="form.buildTime"
+            type="date" 
+            value-format="yyyy-MM-dd" 
+            placeholder="选择日期">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="visible = false">取消</el-button>
+        <el-button type="primary" @click="formSubmit()">确定</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 <script>
@@ -80,17 +107,26 @@ export default {
       },
       dataList: [
         {
-          name: '123',
-          location: '123',
-          principal: '123',
-          date: 111
+          buildTime: '',
+          id: '',
+          location: '',
+          manager: '',
+          name: '',
         }
       ],
       pageIndex: 1,
       pageSize: 10,
       totalPage: 0,
       dataListLoading: false,
-      selectionDataList: []
+      selectionDataList: [],
+      visible: false,
+      form: {
+        id: '',
+        location: '',
+        manager: '',
+        name: '',
+        buildTime: ''
+      }
     }
   },
   created () {
@@ -99,25 +135,20 @@ export default {
   methods: {
     // 获取数据列表
     getDataList () {
-      // this.dataListLoading = true
-      // this.$http({
-      //   url: this.$http.adornUrl("/sys/log/list"),
-      //   method: "get",
-      //   params: this.$http.adornParams({
-      //     page: this.pageIndex,
-      //     limit: this.pageSize,
-      //     key: this.dataForm.key,
-      //   }),
-      // }).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;
-      // });
+      this.dataListLoading = true
+      this.$http({
+        url: this.$http.adornUrl('/management/pasture/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) {
@@ -130,17 +161,143 @@ export default {
       this.pageIndex = val
       this.getDataList()
     },
-    // 新增牧场
-    addOrUpdateHandle () {
-      // 显示牧场的那个啥
+    // 新增 or 修改牧场
+    addOrUpdateHandle (row) {
+      // 显示牧场新增 or 修改面板
+      this.visible = true
+      if (row) {
+        this.form = row
+      }
     },
-    // 选择
-    selectionChangeHandle () {
-      // 选呗
+    // 选择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/pasture/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('删除牧场失败');
+          }
+          this.selectionDataList = []
+        })
+      }).catch(() => {})
+    },
+    formSubmit () {
+      if (this.form.id) {
+        // 修改
+        if (this.form.name && this.form.manager && this.form.location && this.form.buildTime) {
+          // 进行修改操作
+          this.$http({
+            url: this.$http.adornUrl('/management/pasture/update'),
+            method: 'post',
+            data: this.$http.adornData({
+              id: this.form.id,
+              location: this.form.location,
+              manager: this.form.manager,
+              name: this.form.name,
+              buildTime: this.form.buildTime
+            })
+          }).then(result => {
+            if (result.data.code === 0) {
+              this.getDataList()
+              this.resetForm()
+              this.$message({
+                message: '成功修改牧场信息',
+                type: 'success',
+                duration: 1000
+              })
+            } else {
+              this.$message.error('修改牧场信息失败');
+            }
+          })
+          this.visible = false
+        } else {
+          // 请输入完整
+          this.$confirm(`请输入完整`, '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }).then(() => {
+            return
+          }).catch(() => {})
+        }
+        console.log(this.form);
+      } else {
+        // 新增
+        if (this.form.name && this.form.manager && this.form.location && this.form.buildTime) {
+          // 进行新增操作
+          this.$http({
+            url: this.$http.adornUrl('/management/pasture/save'),
+            method: 'post',
+            data: this.$http.adornData({
+              location: this.form.location,
+              manager: this.form.manager,
+              name: this.form.name,
+              buildTime: this.form.buildTime
+            })
+          }).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('添加牧场失败');
+            }
+          })
+          this.visible = false
+        } else {
+          // 请输入完整
+          this.$confirm(`请输入完整`, '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }).then(() => {
+            return
+          }).catch(() => {})
+        }
+      }
     },
-    // 删除牧场
-    deleteHandle () {
-      // 删除
+    // 清空form
+    resetForm () {
+      this.form.id = ''
+      this.form.location = ''
+      this.form.manager = ''
+      this.form.name = ''
+      this.form.buildTime = ''
     }
   }
 }

+ 256 - 59
src/views/modules/basicdata/bunit.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="branch">
+  <div class="bunit">
     <el-form
       :inline="true"
       :model="dataForm"
@@ -7,9 +7,9 @@
       <el-form-item>
         <el-input
           v-model="dataForm.key"
-          placeholder="用户名/用户操作"
-          clearable
-        ></el-input>
+          placeholder="牧场关键字"
+          clearable>
+        </el-input>
       </el-form-item>
       <el-form-item>
         <el-button @click="getDataList()">查询</el-button>
@@ -24,7 +24,6 @@
     <el-table
       :data="dataList"
       @selection-change="selectionChangeHandle"
-      border
       v-loading="dataListLoading"
       style="width: 100%">
       <el-table-column
@@ -34,29 +33,22 @@
         width="50">
       </el-table-column>
       <el-table-column
-        prop="name"
-        header-align="center"
-        align="center"
-        label="名称">
-      </el-table-column>
-      <el-table-column
-        prop="location"
+        prop="number"
         header-align="center"
         align="center"
-        label="地址">
+        label="单元序号">
       </el-table-column>
       <el-table-column
-        prop="principal"
+        prop="phNumber"
         header-align="center"
         align="center"
-        label="负责人">
+        label="所属猪舍">
       </el-table-column>
       <el-table-column
-        prop="date"
+        prop="name"
         header-align="center"
         align="center"
-        :show-overflow-tooltip="true"
-        label="建立日期">
+        label="所属牧场">
       </el-table-column>
       <el-table-column
         fixed="right"
@@ -64,11 +56,45 @@
         align="center"
         label="操作">
         <template slot-scope="scope">
-          <el-button v-if="isAuth('sys:user:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.userId)">修改</el-button>
-          <el-button v-if="isAuth('sys:user:delete')" type="text" size="small" @click="deleteHandle(scope.row.userId)">删除</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">
+        <el-form-item label="所属牧场">
+          <el-select v-model="form.pastureId" placeholder="请选择所属牧场" @change="getPasture" ref="pasture">
+            <el-option
+              v-for="item in pastureList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="所属猪舍">
+          <el-select v-model="form.pigstyId" placeholder="请选择所属猪舍" @change="getPigsty">
+            <el-option
+              v-for="item in phSelectedList"
+              :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.number" placeholder="请输入单元序号"></el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="visible = false">取消</el-button>
+        <el-button type="primary" @click="formSubmit()">确定</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 <script>
@@ -80,57 +106,74 @@ export default {
       },
       dataList: [
         {
+          id: '',
+          number: '',
+          phNumber: '',
           name: '',
-          location: '',
-          principal: '',
-          date: undefined
         }
       ],
       pageIndex: 1,
       pageSize: 10,
       totalPage: 0,
       dataListLoading: false,
-      selectionDataList: []
+      selectionDataList: [],
+      visible: false,
+      form: {
+        id: '',
+        number: '',
+        pastureId: '',
+        pigstyId: ''
+      },
+      pastureList: [], // 牧场list
+      pighouseList: [], // 猪舍list
+      phSelectedList: [] // 选择过牧场后的猪舍list
     }
   },
-  created () {
+  mounted () {
     this.getDataList()
   },
   methods: {
     // 获取数据列表
     getDataList () {
-      // this.dataListLoading = true
-      // this.$http({
-      //   url: this.$http.adornUrl("/sys/log/list"),
-      //   method: "get",
-      //   params: this.$http.adornParams({
-      //     page: this.pageIndex,
-      //     limit: this.pageSize,
-      //     key: this.dataForm.key,
-      //   }),
-      // }).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;
-      // });
       this.dataListLoading = true
       this.$http({
         url: this.$http.adornUrl('/management/unit/list'),
-        method: 'post',
-        params: this.$http.adornParams({
-          // page: this.pageIndex,
-          // limit: this.pageSize,
-          // key: this.dataForm.key,
+        method: 'post'
+      }).then(async ({ data }) => {
+        // 获取所有牧场
+        let pastureResult = await this.$http({
+          url: this.$http.adornUrl('/management/pasture/list'),
+          method: 'post'
+        })
+        this.pastureList = pastureResult.data.page.list
+        // 获取所有猪舍
+        let pighouseResult = await this.$http({
+          url: this.$http.adornUrl('/management/pigsty/list'),
+          method: 'post'
         })
-      }).then(({ data }) => {
+        this.pighouseList = pighouseResult.data.page.list
         if (data && data.code === 0) {
           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
+              }
+            }
+          });
+          // 猪舍对应
+          this.dataList.forEach(item => {
+            for (let pighouse of this.pighouseList) {
+              if (item.pigstyId === pighouse.id) {
+                item.phNumber = pighouse.number
+                break
+              }
+            }
+          });
+          this.phSelectedList = this.pighouseList
         } else {
           this.dataList = []
           this.totalPage = 0
@@ -149,17 +192,171 @@ export default {
       this.pageIndex = val
       this.getDataList()
     },
-    // 新增牧场
-    addOrUpdateHandle () {
-      // 显示牧场的那个啥
+    // 获取到了牧场 → 限制猪舍
+    getPasture (val) {
+      console.log(val);
+      this.phSelectedList = []
+      this.pighouseList.forEach(item => {
+        if (item.pastureId === val) {
+          this.phSelectedList.push(item)
+        }
+      });
+      // 如果已有选中的猪舍,且该猪舍不属于该牧场,则清空猪舍选择
+      let i;
+      for (i = 0; i < this.phSelectedList.length; i++) {
+        let item = this.phSelectedList[i];
+        if (item.id === this.form.pigstyId) {
+          break
+        }
+      }
+      if (i === this.phSelectedList.length) {
+        this.form.pigstyId = ''
+      }
+    },
+    // 获取到猪舍 → 反向确定牧场
+    getPigsty (val) {
+      for (let item of this.pighouseList) {
+        if (item.id === val) {
+          this.form.pastureId = item.pastureId
+          break
+        }
+      }
+    },
+    // 新增 or 修改单元
+    addOrUpdateHandle (row) {
+      // 显示牧场新增 or 修改面板
+      this.visible = true
+      if (row) {
+        this.form = row
+        console.log(row);
+      }
+    },
+    // 选择n个牧场
+    selectionChangeHandle (val) {
+      this.selectionDataList = []
+      val.forEach(item => {
+        this.selectionDataList.push(item.id)
+      });
     },
-    // 选择
-    selectionChangeHandle () {
-      // 选呗
+    // 删除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/unit/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('删除牧场失败');
+          }
+          this.selectionDataList = []
+        })
+      }).catch(() => {})
+    },
+    formSubmit () {
+      if (this.form.id) {
+        // 修改
+        console.log(this.form);
+        if (this.form.number && this.form.pastureId) {
+          // 进行修改操作
+          this.$http({
+            url: this.$http.adornUrl('/management/unit/update'),
+            method: 'post',
+            data: this.$http.adornData({
+              id: this.form.id,
+              number: this.form.number,
+              pastureId: this.form.pastureId,
+              pigstyId: this.form.pigstyId
+            })
+          }).then(result => {
+            if (result.data.code === 0) {
+              this.getDataList()
+              this.resetForm()
+              this.$message({
+                message: '成功修改单元信息',
+                type: 'success',
+                duration: 1000
+              })
+            } else {
+              this.$message.error('修改牧场信息失败');
+            }
+          })
+          this.visible = false
+        } else {
+          // 请输入完整
+          this.$confirm(`请输入完整`, '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }).then(() => {
+            return
+          }).catch(() => {})
+        }
+        console.log(this.form);
+      } else {
+        // 新增
+        if (this.form.number && this.form.pastureId) {
+          // 进行新增操作
+          this.$http({
+            url: this.$http.adornUrl('/management/unit/save'),
+            method: 'post',
+            data: this.$http.adornData({
+              number: this.form.number,
+              pastureId: this.form.pastureId,
+              pigstyId: this.form.pigstyId
+            })
+          }).then(result => {
+            if (result.data.code === 0) {
+              this.getDataList()
+              this.$message({
+                message: '成功添加单元',
+                type: 'success',
+                duration: 1000
+              })
+            } else {
+              this.$message.error('添加单元失败');
+            }
+            this.resetForm()
+          })
+          this.visible = false
+        } else {
+          // 请输入完整
+          this.$confirm(`请输入完整`, '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }).then(() => {
+            return
+          }).catch(() => {})
+        }
+      }
     },
-    // 删除牧场
-    deleteHandle () {
-      // 删除
+    // 清空form
+    resetForm () {
+      this.form.id = ''
+      this.form.number = ''
+      this.form.pastureId = ''
+      this.form.pigstyId = ''
     }
   }
 }

+ 423 - 3
src/views/modules/pigbasic/pbbasic.vue

@@ -1,11 +1,431 @@
 <template>
-  <div>
-    基本信息
+  <div class="pbbasic">
+    <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 type="expand">
+        <template slot-scope="props">
+          <el-form label-position="left" inline class="demo-table-expand">
+            <el-form-item label="耳标">
+              <span>{{ props.row.eartag }}</span>
+            </el-form-item>
+            <el-form-item label="年龄">
+              <span>{{ props.row.dayAge }}天</span>
+            </el-form-item>
+            <el-form-item label="健康状况">
+              <span>{{ props.row.healthStatus }}</span>
+            </el-form-item>
+            <el-form-item label="体重">
+              <span>{{ props.row.weight }}</span>
+            </el-form-item>
+            <el-form-item label="去向">
+              <span>{{ props.row.whereDidYouGo }}</span>
+            </el-form-item>
+            <el-form-item label="所属单元">
+              <span>{{ props.row.number }}</span>
+            </el-form-item>
+            <el-form-item label="所属猪舍">
+              <span>{{ props.row.phNumber }}</span>
+            </el-form-item>
+            <el-form-item label="所属牧场">
+              <span>{{ props.row.name }}</span>
+            </el-form-item>
+          </el-form>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="eartag"
+        header-align="center"
+        align="center"
+        label="年猪耳标">
+      </el-table-column>
+      <el-table-column
+        prop="number"
+        header-align="center"
+        align="center"
+        label="所属单元">
+      </el-table-column>
+      <el-table-column
+        prop="phNumber"
+        header-align="center"
+        align="center"
+        label="所属猪舍">
+      </el-table-column>
+      <el-table-column
+        prop="name"
+        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">
+      <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="请选择所属牧场" @change="getPasture" ref="pasture">
+            <el-option
+              v-for="item in pastureList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="所属猪舍" prop="number">
+          <el-select v-model="form.pigstyId" placeholder="请选择所属猪舍" @change="getPigsty">
+            <el-option
+              v-for="item in phSelectedList"
+              :key="item.id"
+              :label="item.number"
+              :value="item.id">
+            </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>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="visible = false">取消</el-button>
+        <el-button type="primary" @click="formSubmit()">确定</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 <script>
 export default {
+  data () {
+    return {
+      dataForm: {
+        key: ''
+      },
+      dataList: [
+        {
+          id: '',
+          number: '',
+          phNumber: '',
+          name: '',
+        }
+      ],
+      pageIndex: 1,
+      pageSize: 10,
+      totalPage: 0,
+      dataListLoading: false,
+      selectionDataList: [],
+      visible: false,
+      form: {
+        id: '',
+        number: '',
+        pastureId: '',
+        pigstyId: ''
+      },
+      pastureList: [], // 牧场list
+      pighouseList: [], // 猪舍list
+      phSelectedList: [], // 选择过牧场后的猪舍list
+      unitList: [] // 单元list
+    }
+  },
+  mounted () {
+    this.getDataList()
+  },
+  methods: {
+    // 获取数据列表
+    getDataList () {
+      this.dataListLoading = true
+      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'
+        })
+        this.pastureList = pastureResult.data.page.list
+        // 获取所有猪舍
+        let pighouseResult = await this.$http({
+          url: this.$http.adornUrl('/management/pigsty/list'),
+          method: 'post'
+        })
+        this.pighouseList = pighouseResult.data.page.list
+        // 获取所有单元
+        let unitResult = await this.$http({
+          url: this.$http.adornUrl('/management/unit/list'),
+          method: 'post'
+        })
+        this.unitList = unitResult.data.page.list
+        if (data && data.code === 0) {
+          this.dataList = data.page.list
+          this.totalPage = data.page.totalCount
+          // 单元对应
+          this.dataList.forEach(item => {
+            for (let unit of this.unitList) {
+              if (item.unitId === unit.id) {
+                item.pastureId = unit.pastureId
+                item.pigstyId = unit.pigstyId
+                break
+              }
+            }
+          });
+          // 牧场对应
+          this.dataList.forEach(item => {
+            for (let pasture of this.pastureList) {
+              if (item.pastureId === pasture.id) {
+                item.name = pasture.name
+                break
+              }
+            }
+          });
+          // 猪舍对应
+          this.dataList.forEach(item => {
+            for (let pighouse of this.pighouseList) {
+              if (item.pigstyId === pighouse.id) {
+                item.phNumber = pighouse.number
+                break
+              }
+            }
+          });
+          this.phSelectedList = this.pighouseList
+        } 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()
+    },
+    // 获取到了牧场 → 限制猪舍
+    getPasture (val) {
+      console.log(val);
+      this.phSelectedList = []
+      this.pighouseList.forEach(item => {
+        if (item.pastureId === val) {
+          this.phSelectedList.push(item)
+        }
+      });
+      // 如果已有选中的猪舍,且该猪舍不属于该牧场,则清空猪舍选择
+      let i;
+      for (i = 0; i < this.phSelectedList.length; i++) {
+        let item = this.phSelectedList[i];
+        if (item.id === this.form.pigstyId) {
+          break
+        }
+      }
+      if (i === this.phSelectedList.length) {
+        this.form.pigstyId = ''
+      }
+    },
+    // 获取到猪舍 → 反向确定牧场
+    getPigsty (val) {
+      for (let item of this.pighouseList) {
+        if (item.id === val) {
+          this.form.pastureId = item.pastureId
+          break
+        }
+      }
+    },
+    // 新增 or 修改单元
+    addOrUpdateHandle (row) {
+      // 显示牧场新增 or 修改面板
+      this.visible = true
+      if (row) {
+        this.form = row
+        console.log(row);
+      }
+    },
+    // 选择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/unit/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('删除牧场失败');
+          }
+          this.selectionDataList = []
+        })
+      }).catch(() => {})
+    },
+    formSubmit () {
+      if (this.form.id) {
+        // 修改
+        console.log(this.form);
+        if (this.form.number && this.form.pastureId) {
+          // 进行修改操作
+          this.$http({
+            url: this.$http.adornUrl('/management/unit/update'),
+            method: 'post',
+            data: this.$http.adornData({
+              id: this.form.id,
+              number: this.form.number,
+              pastureId: this.form.pastureId,
+              pigstyId: this.form.pigstyId
+            })
+          }).then(result => {
+            if (result.data.code === 0) {
+              this.getDataList()
+              this.resetForm()
+              this.$message({
+                message: '成功修改单元信息',
+                type: 'success',
+                duration: 1000
+              })
+            } else {
+              this.$message.error('修改牧场信息失败');
+            }
+          })
+          this.visible = false
+        } else {
+          // 请输入完整
+          this.$confirm(`请输入完整`, '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }).then(() => {
+            return
+          }).catch(() => {})
+        }
+        console.log(this.form);
+      } else {
+        // 新增
+        if (this.form.number && this.form.pastureId) {
+          // 进行新增操作
+          this.$http({
+            url: this.$http.adornUrl('/management/unit/save'),
+            method: 'post',
+            data: this.$http.adornData({
+              number: this.form.number,
+              pastureId: this.form.pastureId,
+              pigstyId: this.form.pigstyId
+            })
+          }).then(result => {
+            if (result.data.code === 0) {
+              this.getDataList()
+              this.$message({
+                message: '成功添加单元',
+                type: 'success',
+                duration: 1000
+              })
+            } else {
+              this.$message.error('添加单元失败');
+            }
+            this.resetForm()
+          })
+          this.visible = false
+        } else {
+          // 请输入完整
+          this.$confirm(`请输入完整`, '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }).then(() => {
+            return
+          }).catch(() => {})
+        }
+      }
+    },
+    // 清空form
+    resetForm () {
+      this.form.id = ''
+      this.form.number = ''
+      this.form.pastureId = ''
+      this.form.pigstyId = ''
+    }
+  }
 }
 </script>
-<style scoped>
+<style>
+.demo-table-expand {
+  font-size: 0;
+  margin-left: 40px;
+}
+.demo-table-expand label {
+  width: 90px;
+  color: #99a9bf;
+}
+.demo-table-expand .el-form-item {
+  margin-right: 0;
+  margin-bottom: 0;
+  width: 80%;
+}
 </style>