瀏覽代碼

页面已完成,修bug中

duanxiaoduan 2 年之前
父節點
當前提交
8de7dd5935

+ 1 - 1
.env.development

@@ -18,7 +18,7 @@ VUE_APP_BASE_API = 'http://tmrwatch.cn:8085/'
 # 陈文强
 # VUE_APP_BASE_API = 'http://192.168.1.87:8081/'
 # 白少杰
-# VUE_APP_BASE_API = 'http://192.168.1.89:8081/'
+# VUE_APP_BASE_API = 'http://192.168.1.69:8081/'
 
 # vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable,
 # to control whether the babel-plugin-dynamic-import-node plugin is enabled.

二進制
dist.zip


+ 21 - 0
src/api/common.js

@@ -440,3 +440,24 @@ export function whichWeek(year) {
       }
       return arr
     }
+    
+    export function getUUID(len, radix) {
+      var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
+      var uuid = []
+      var i
+      radix = radix || chars.length
+      if (len) {
+        for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]
+      } else {
+        var r
+        uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
+        uuid[14] = '4'
+        for (i = 0; i < 36; i++) {
+          if (!uuid[i]) {
+            r = 0 | Math.random() * 16
+            uuid[i] = chars[(i === 19) ? (r & 0x3) | 0x8 : r]
+          }
+        }
+      }
+      return uuid.join('')
+    }

+ 42 - 12
src/directive/el-drag-dialog/drag2.js

@@ -1,20 +1,20 @@
 export default {
-  bind(el, binding) {
+  bind(el, binding,vNode,vNode1) {
     el.style.cursor = 'move'
     el.onmousedown = function(e) {
       //鼠标按下,计算当前元素距离可视区的距离
       let disx = e.pageX - el.offsetLeft
       let disy = e.pageY - el.offsetTop
-      document.onselectstart = function() { 
-        return false; 
+      document.onselectstart = function(e) {
+        return false;
       };//解决拖动会选中文字的问题
       document.onmousemove = function(e) {
         let x = e.pageX - disx
         let y = e.pageY - disy
         let maxX = document.getElementById("box").clientWidth - parseInt(window.getComputedStyle(el).width)
         let maxY = document.getElementById("box").clientHeight - parseInt(window.getComputedStyle(el).height)
-        console.log('maxX==>',maxX)
-        console.log('maxY==>',maxY)
+        // console.log('maxX==>',maxX)
+        // console.log('maxY==>',maxY)
         if (x < 0) {
           x = 0
         } else if (x > maxX) {
@@ -24,21 +24,51 @@ export default {
         if (y < 0) {
           y = 0
         } else if (y > maxY) {
-          console.log(111)
           y = maxY
         }
 
         el.style.left = x + 'px'
         el.style.top = y + 'px'
         //将此时的位置传出去
-        binding.value({
-          x: x,
-          y: y
-        })
+        // binding.value({
+        //   x: x + 'px',
+        //   y: y + 'px'
+        // })
       };
       document.onmouseup = function(e) {
-        document.onmousemove = null;
-        document.onmouseup = null;
+          // console.log(e.target.innerHTML,'innerHTML===')
+
+          
+          let str = e.target.innerHTML;
+          let result = el.getElementsByClassName('myspan')[0].innerText;
+          let x = e.pageX - disx
+          let y = e.pageY - disy
+          let maxX = document.getElementById("box").clientWidth - parseInt(window.getComputedStyle(el).width)
+          let maxY = document.getElementById("box").clientHeight - parseInt(window.getComputedStyle(el).height)
+            // console.log('maxX==>',maxX)
+            // console.log('maxY==>',maxY)
+            if (x < 0) {
+              x = 0
+            } else if (x > maxX) {
+              x = maxX
+            }
+
+            if (y < 0) {
+              y = 0
+            } else if (y > maxY) {
+              y = maxY
+            }
+
+            el.style.left = x + 'px'
+            el.style.top = y + 'px'
+            //将此时的位置传出去
+            binding.value({
+              x: x + 'px',
+              y: y + 'px',
+              myId:result
+            })
+          document.onmousemove = null;
+          document.onmouseup = null;
       };
     };
   }

+ 156 - 0
src/directive/el-drag-dialog/drag3.js

@@ -0,0 +1,156 @@
+let seed = 0;
+const ctx = "@@draggableContext";
+function handleMousedown(event) {
+  event.preventDefault();
+  const el = this;
+  const rect = el.getBoundingClientRect();
+
+  Object.assign(el[ctx], {
+    type: "mousedown",
+    rect: rect,
+    x: rect.x || rect.left,
+    y: rect.y || rect.top,
+    dragstartX: event.clientX, // 鼠标按下时坐标
+    dragstartY: event.clientY,
+    dragendX: void 0, // 鼠标松开时坐标
+    dragendY: void 0,
+    startX: event.clientX, // 起点坐标
+    startY: event.clientY,
+    dragging: true,
+    isMove: false,
+  });
+
+  // callback(el);
+
+  window.addEventListener("mousemove", el[ctx]._handleMousemove, false);
+  window.addEventListener("mouseup", el[ctx]._handleMouseup, false);
+}
+
+function handleMousemove(el) {
+  return function(event) {
+    event.preventDefault();
+
+    if (event.target === document.documentElement) return;
+
+    const current = {
+      x: event.clientX,
+      y: event.clientY,
+    };
+
+    const diff = {
+      x: current.x - el[ctx].startX,
+      y: current.y - el[ctx].startY,
+    };
+
+    if (el[ctx].binding.modifiers.sticky) {
+      // 不会拖出屏幕边缘
+      const clientWidth = document.documentElement.clientWidth;
+      const clientHeight = document.documentElement.clientHeight;
+
+      const {
+        x,
+        y,
+        rect: { width, height },
+      } = el[ctx];
+
+      if (diff.x < 0 && x + diff.x <= 0) {
+        el[ctx].x = 0;
+      } else if (diff.x > 0 && x + width - clientWidth >= 0) {
+        el[ctx].x = clientWidth - width;
+      } else {
+        el[ctx].x += diff.x;
+      }
+
+      if (diff.y < 0 && y + diff.y <= 0) {
+        el[ctx].y = 0;
+      } else if (diff.y > 0 && y + height - clientHeight >= 0) {
+        el[ctx].y = clientHeight - height;
+      } else {
+        el[ctx].y += diff.y;
+      }
+    } else {
+      el[ctx].x += diff.x;
+      el[ctx].y += diff.y;
+    }
+
+    Object.assign(el[ctx], {
+      type: "mousemove",
+      startX: current.x,
+      startY: current.y,
+      diffX: diff.x,
+      diffY: diff.y,
+      isMove: true,
+    });
+
+    // callback(el);
+  };
+}
+function handleMouseup(el) {
+  return function(event) {
+    event.preventDefault();
+
+    const lastType = el[ctx].type;
+
+    Object.assign(el[ctx], {
+      type: "mouseup",
+      dragendX: event.clientX, // 鼠标按下时坐标
+      dragendY: event.clientY,
+      dragging: false,
+      isMove: lastType === "mousemove",
+    });
+
+    callback(el);
+
+    window.removeEventListener("mousemove", el[ctx]._handleMousemove, false);
+    window.removeEventListener("mouseup", el[ctx]._handleMouseup, false);
+  };
+}
+
+function callback(el) {
+  const bindingFn = el[ctx]?.binding?.value;
+  console.log(1111,el)
+  if (typeof bindingFn === "function") {
+    bindingFn({ ...el[ctx], target: el });
+  } else {
+    const { x, y, rect, dragging } = el[ctx];
+    if (!dragging) return;
+    el.style.cssText = `
+      left: ${x}px;
+      top: ${y}px;
+      width: ${rect.width}px;
+      height: ${rect.height}px;
+    `;
+  }
+}
+/**
+ * v-draggable
+ * @desc
+ * @example
+ * ```vue
+ * <div v-draggable>
+ *
+ * <div v-draggable.sticky>
+ * <div v-draggable="handleDraggable">
+ * ```
+ */
+export default {
+  bind(el, binding, vnode) {
+    const id = seed++;
+    el[ctx] = {
+      id,
+      binding,
+      vnode,
+      _handleMousemove: handleMousemove(el, binding, vnode),
+      _handleMouseup: handleMouseup(el, binding, vnode),
+    };
+
+    el.addEventListener("mousedown", handleMousedown, false);
+  },
+
+  unbind(el) {
+    window.removeEventListener("mousemove", el[ctx]._handleMousemove, false);
+    window.removeEventListener("mouseup", el[ctx]._handleMouseup, false);
+    el.removeEventListener("mousedown", handleMousedown, false);
+    delete el[ctx];
+  },
+};

+ 1 - 1
src/settings.js

@@ -1,6 +1,6 @@
 module.exports = {
 
-  title: 'TMRWatch全混合日粮监管系统',
+  title: '脖环管理系统',
 
   /**
    * @type {boolean} true | false

+ 1 - 1
src/store/modules/user.js

@@ -46,7 +46,7 @@ const mutations = {
   },
   SET_PASTUREID: (state, pastureid) => {
     Cookies.set('pastureid', pastureid)
-    Cookies.set('pageCount', 50)
+    Cookies.set('pageCount', 30)
     state.pastureid = pastureid
   },
   SET_PASTURENAME: (state, pasturename) => {

+ 7 - 8
src/utils/request.js

@@ -61,14 +61,13 @@ service.interceptors.response.use(
     const res = response.data
 
     // if the custom code is not 20000, it is judged as an error.
-    if (res.code !== 200) {
-      Message({
-        // message: res.msg + res.code,
-        message: '请求超时',
-        type: 'error',
-        duration: 5 * 1000
-      })
-
+    if (res.code !== 200 && res.code !==  500) {
+		Message({
+			// message: res.msg + res.code,
+			message: '请求超时',
+			type: 'error',
+			duration: 5 * 1000
+		})
       // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
       if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
         // to re-login

+ 71 - 104
src/views/deviceManagement/factoryRegistration/index.vue

@@ -6,9 +6,9 @@
         <el-select v-model="table1.parammaps.genre" filterable placeholder="类型" class="filter-item" style="width: 150px;" clearable>
           <el-option v-for="item in table1.typeList" :key="item.id" :label="item.name" :value="item.id" />
         </el-select>
-        <el-input-number v-model="table1.parammaps.startcount" class="filter-item" :controls="false" label="出厂数量" />
-        <span>-</span>
-        <el-input-number v-model="table1.parammaps.endcount" class="filter-item" :controls="false" label="出厂数量" />
+        <el-input-number v-model="table1.parammaps.startcount" class="filter-item" :controls="false" placeholder="出厂数量" />
+        <span style="margin-right: 5px;">-</span>
+        <el-input-number v-model="table1.parammaps.endcount" class="filter-item" :controls="false" placeholder="出厂数量" />
         <el-input v-model="table1.parammaps.createname" placeholder="登记人" style="width: 180px;" class="filter-item" clearable />
         <el-date-picker v-model="table1.parammaps.inputDatetime" type="daterange"  class="filter-item" range-separator="至" start-placeholder="登记开始日期" end-placeholder="登记结束日期" />
         <el-button class="successBorder" @click="handleSearch1">查询</el-button>
@@ -56,11 +56,7 @@
           </el-table-column>
           <el-table-column label="登记人" min-width="60px" align="center" prop="createname" />
           <el-table-column label="登记日期" min-width="60px" align="center" prop="createtime" />
-          <el-table-column label="操作" min-width="60px" align="center">
-            <template slot-scope="{row}">
-              <a @click="clickRevoke(row)" style="text-decoration: underline;color: #0000FF;">撤销</a>
-            </template>
-          </el-table-column>
+
         </el-table>
         <pagination v-show="table1.total>0" :total="table1.total" :page.sync="table1.offset" :limit.sync="table1.pagecount" @pagination="getList1" />
       </div>
@@ -117,7 +113,7 @@
               <span v-else>1</span>
             </template>
           </el-table-column>
-          <el-table-column label="召回批次号" min-width="60px" align="center" prop="factory" />
+          <el-table-column label="召回批次号" min-width="60px" align="center" prop="batch" />
           <el-table-column label="召回数量" min-width="60px" align="center" prop="count" />
           <el-table-column label="登记人" min-width="60px" align="center" prop="createname" />
           <el-table-column label="登记日期" min-width="60px" align="center" prop="createtime" />
@@ -129,57 +125,8 @@
       </div>
     </el-dialog>
 
-    <!-- 处理 -->
-    <el-dialog :title="textMap[handle.dialogStatus]" :visible.sync="handle.dialogFormVisible" :close-on-click-modal="false" width="40%">
-      <div class="handle">
-        <el-form ref="handleTemp" :rules="handle.rules" :model="handle.temp" label-position="right" label-width="150px" style="width: 100%;margin:0 auto 50px">
-          <el-row>
-            <el-col :span="8">
-              <el-form-item label="脖环号:" prop="filed1">
-                <span>{{handle.filed1}}</span>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="8">
-              <el-form-item label="牛号:" prop="filed1">
-                <span>{{handle.filed1}}</span>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="8">
-              <el-form-item label="牛舍:" prop="filed1">
-                <span>{{handle.filed1}}</span>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="8">
-              <el-form-item label="最后接收时间:" prop="filed1">
-                <span>{{handle.filed1}}</span>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="16">
-              <el-form-item label="处理措施:" prop="filed1">
-                <el-select ref="times" v-model="handle.temp.times"  filterable placeholder="处理措施" class="filter-item" style="width: 100%;">
-                  <el-option v-for="item in handle.treatmentMeasuresList" :key="item.id" :label="item.name" :value="item.id" />
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </el-row>
-        </el-form>
-      </div>
-      <div slot="footer" class="dialog-footer" style="bottom: 10px;">
-        <el-button  class="save" :disabled="isokDisable" @click="clickhandleData()">确认</el-button>
-        <el-button class="cancelClose" @click="handle.dialogFormVisible = false; ">取消</el-button>
-      </div>
-    </el-dialog>
-
     <!-- 新增 -->
-    <el-dialog  :title="textMap[edit.dialogStatus]"  :visible.sync="edit.dialogFormVisible" :close-on-click-modal="false" width="70%">
+    <el-dialog  :title="textMap[edit.dialogStatus]"  :visible.sync="edit.dialogFormVisible" :close-on-click-modal="false" @close="close" width="70%">
       <div class="edit">
         <el-form ref="editTemp" :rules="edit.rules" :model="edit.temp" label-position="right" label-width="150px" style="width: 100%;margin:0 auto 50px;">
           <el-row>
@@ -191,13 +138,6 @@
               </el-form-item>
             </el-col>
           </el-row>
-          <el-row>
-            <el-col :span="16">
-              <el-form-item label="脖环数量:" prop="count">
-                <el-input v-model="edit.temp.count" placeholder="脖环数量" style="width: 100%;" class="filter-item" />
-              </el-form-item>
-            </el-col>
-          </el-row>
           <el-row>
             <el-col :span="16">
               <el-form-item label="类型:" prop="genre">
@@ -207,13 +147,20 @@
               </el-form-item>
             </el-col>
           </el-row>
+          <el-row v-if="edit.temp.genre !== '' && edit.temp.genre == 0">
+            <el-col :span="16">
+              <el-form-item label="脖环数量:" prop="count">
+                <el-input v-model="edit.temp.count" placeholder="脖环数量" style="width: 100%;" class="filter-item" />
+              </el-form-item>
+            </el-col>
+          </el-row>
         </el-form>
         <div class="batch" v-if="edit.temp.genre == 1" style="border-top: 1px solid #000;">
           <div class="search">
-            <el-input v-model="edit.batch.parammaps.batch" placeholder=" 召回批次号" style="width: 180px;" class="filter-item" clearable />
-            <el-input-number v-model="edit.batch.parammaps.startcount" class="filter-item" :controls="false" label="召回数量" />
+            <el-input v-model="edit.batch.parammaps.batch" placeholder="召回批次号" style="width: 180px;" class="filter-item" clearable />
+            <el-input-number v-model="edit.batch.parammaps.startcount" class="filter-item" :controls="false" placeholder="召回数量" />
             <span>-</span>
-            <el-input-number v-model="edit.batch.parammaps.endcount" class="filter-item" :controls="false" label="召回数量" />
+            <el-input-number v-model="edit.batch.parammaps.endcount" class="filter-item" :controls="false" placeholder="召回数量" />
             <el-input v-model="edit.batch.parammaps.createname" placeholder="登记人" style="width: 180px;" class="filter-item" clearable />
             <el-date-picker v-model="edit.batch.parammaps.inputDatetime" type="daterange"  class="filter-item" range-separator="至" start-placeholder="登记开始日期" end-placeholder="登记结束日期" />
             <el-button class="successBorder" @click="handleBatchSearch">查询</el-button>
@@ -266,7 +213,7 @@
           typeList:[{id:0,name:'购买'},{id:1,name:'置换'}],
           pastureList:[],
           page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')),
-          parammaps: { batch:'',genre:'',startcount:'',endcount:'',createname:'',inputDatetime:'',startdate:'',enddate:'' },
+          parammaps: { batch:'',genre:'',startcount:undefined,endcount:undefined,createname:'',inputDatetime:'',startdate:'',enddate:'' },
           tableKey: 0, list: [], total: 0, listLoading: false
         },
         // 出厂数量
@@ -276,7 +223,7 @@
           temp:{},
           table1:{
             page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')),
-            parammaps: { batch:'',genre:'',startcount:'',endcount:'',createname:'',inputDatetime:'',startdate:'',enddate:'' },
+            parammaps: { batch:'',genre:'',startcount:undefined,endcount:undefined,createname:'',inputDatetime:'',startdate:'',enddate:'' },
             tableKey: 0, list: [], total: 0, listLoading: false
           },
         },
@@ -287,31 +234,24 @@
           temp:{},
           table1:{
             page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')),
-            parammaps: { batch:'',genre:'',startcount:'',endcount:'',createname:'',inputDatetime:'',startdate:'',enddate:'' },
+            parammaps: { batch:'',genre:'',startcount:undefined,endcount:undefined,createname:'',inputDatetime:'',startdate:'',enddate:'' },
             tableKey: 0, list: [], total: 0, listLoading: false
           },
         },
-        // 处理
-        handle:{
-          dialogStatus: '',
-          dialogFormVisible: false,
-          rules:{},
-          temp:{},
-          treatmentMeasuresList:[]
-        },
+
         // 新增
         edit:{
           dialogStatus: '',
           dialogFormVisible: false,
           rules:{
             pastureid: [{ type: 'string', required: true, message: '必填', trigger: 'change' }],
-            count: [{ type: 'string', required: true, message: '必填', trigger: 'change' }],
+            // count: [{ type: 'string', required: true, message: '必填', trigger: 'change' }],
             genre: [{ type: 'number', required: true, message: '必填', trigger: 'change' }]
           },
           temp:{},
           batch:{
             page: 1, offset: 1, pagecount: '',
-            parammaps: { batch:'',startcount:'',endcount:'',createname:'',inputDatetime:'',startdate:'',enddate:'' },
+            parammaps: { batch:'',startcount:undefined,endcount:undefined,createname:'',inputDatetime:'',startdate:'',enddate:'' },
             tableKey: 0, list: [], total: 0, listLoading: false,
             selectList:[],
             sumCount:''
@@ -349,7 +289,7 @@
       getList1() {
         this.table1.listLoading = true
         let genre = ''
-        if(this.table1.parammaps.genre == '' || this.table1.parammaps.genre == null){
+        if(this.table1.parammaps.genre === '' || this.table1.parammaps.genre === null){
           genre = -1
         }else{
           genre = this.table1.parammaps.genre
@@ -363,11 +303,23 @@
           startdate = ''
           enddate = ''
         }
+        let startcount = ''
+        let endcount = ''
+        if(this.table1.parammaps.startcount == undefined){
+          startcount = ''
+        }else{
+          startcount = this.table1.parammaps.startcount
+        }
+        if(this.table1.parammaps.endcount == undefined){
+          endcount = ''
+        }else{
+          endcount = this.table1.parammaps.endcount
+        }
         let data = 'index=' + this.table1.offset
         + '&pagesize=' + this.table1.pagecount
         + '&batch=' + this.table1.parammaps.batch
-        + '&startcount=' + this.table1.parammaps.startcount
-        + '&endcount=' + this.table1.parammaps.endcount
+        + '&startcount=' + startcount
+        + '&endcount=' + endcount
         + '&createname=' + this.table1.parammaps.createname
         + '&startdate=' + startdate
         + '&enddate=' + enddate
@@ -397,8 +349,8 @@
         this.table1.parammaps = {
           batch:'',
           genre:'',
-          startcount:'',
-          endcount:'',
+          startcount:undefined,
+          endcount:undefined,
           createname:'',
           inputDatetime:'',
           startdate:'',
@@ -416,6 +368,7 @@
         }
         this.quantity.dialogStatus = 'quantityTxt'
         this.quantity.temp = Object.assign({}, row)
+        this.quantity.table1.offset = 1
         this.getQuantityList()
       },
       getQuantityList() {
@@ -444,6 +397,7 @@
         this.recall.dialogFormVisible = true
         this.recall.dialogStatus = 'recallTxt'
         this.recall.temp = Object.assign({}, row)
+        this.recall.table1.offset = 1
         this.getRecallList()
       },
       getRecallList() {
@@ -467,15 +421,7 @@
           }, 100)
         })
       },
-      clickRevoke(row){
-        console.log('撤销')
-        this.handle.temp = Object.assign({}, row)
-        this.handle.dialogFormVisible = true
-        this.handle.dialogStatus = 'revokeTxt'
-      },
-      clickhandleData(){
-         console.log('处理确认')
-      },
+
       clickCreate(){
         this.edit.dialogFormVisible = true
         this.edit.dialogStatus = 'createTxt'
@@ -492,7 +438,7 @@
         this.isokDisable = true
         setTimeout(() => {
           this.isokDisable = false
-        }, 1000)
+        }, 3000)
         this.$refs['editTemp'].validate(valid => {
           if (valid) {
             console.log(this.edit.temp,'this.edit.temp')
@@ -503,6 +449,12 @@
               recall:this.edit.batch.sumCount,
               recallid:this.edit.batch.selectList
             }
+            if(this.edit.temp.genre == 0){
+              if(this.edit.temp.count == ''){
+                this.$message({ type: 'warning', message: '请填写脖环数量' })
+                return
+              }
+            }
             if(this.edit.temp.genre == 1){
               if(this.edit.batch.selectList.length == 0 ){
                 this.$message({ type: 'warning', message: '请选择召回批次' })
@@ -524,8 +476,9 @@
         })
       },
       close(){
-        this.$refs.editTemp.resetFields();
+        this.$refs['editTemp'].resetFields()
         this.edit.dialogFormVisible = false
+        this.getList1()
       },
       changeType(item){
         if(item == 1){
@@ -538,8 +491,8 @@
             pastureid:'',
             batch:'',
             batch:'',
-            startcount:'',
-            endcount:'',
+            startcount:undefined,
+            endcount:undefined,
             createname:'',
             inputDatetime:''
           }
@@ -557,15 +510,29 @@
           startdate = ''
           enddate = ''
         }
+		let startcount = ''
+		let endcount = ''
+		if(this.edit.batch.parammaps.startcount == undefined){
+		  startcount = ''
+		}else{
+		  startcount = this.edit.batch.parammaps.startcount
+		}
+		if(this.edit.batch.parammaps.endcount == undefined){
+		  endcount = ''
+		}else{
+		  endcount = this.edit.batch.parammaps.endcount
+		}
         let data = 'index=' + this.edit.batch.offset
         + '&pagesize=' + this.edit.batch.pagecount
         + '&pastureid=' + this.edit.temp.pastureid
         + '&batch=' + this.edit.batch.parammaps.batch
-        + '&startcount=' + this.edit.batch.parammaps.startcount
-        + '&endcount=' + this.edit.batch.parammaps.endcount
+        + '&startcount=' + startcount
+        + '&endcount=' + endcount
         + '&createname=' + this.edit.batch.parammaps.createname
         + '&startdate=' + startdate
         + '&enddate=' + enddate
+        + '&replacement=' + 1
+
 
         let url = 'recall/list?'
         getJson(url,data).then(response => {
@@ -597,8 +564,8 @@
         this.edit.batch.parammaps = {
           batch:'',
           batch:'',
-          startcount:'',
-          endcount:'',
+          startcount:undefined,
+          endcount:undefined,
           createname:'',
           inputDatetime:''
         }

+ 206 - 79
src/views/deviceManagement/neckRing/index.vue

@@ -2,20 +2,18 @@
   <div class="app-container">
     <div class="table1">
       <div class="search">
-        <el-select v-model="table1.parammaps.enable" filterable placeholder="全部牧场" class="filter-item" style="width: 150px;float: left;" clearable>
-          <el-option v-for="item in table1.pastureList" :key="item.id" :label="item.name" :value="item.id" />
+        <el-select v-model="table1.parammaps.pastureid" filterable placeholder="全部牧场" class="filter-item" style="width: 150px;" clearable>
+          <el-option v-for="item in table1.pastureList" :key="item.pastureid" :label="item.pasturename" :value="item.pastureid" />
         </el-select>
-        <el-date-picker style="float: left;" v-model="table1.parammaps.inputDatetime" type="daterange"  class="filter-item" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" />
-        <el-select v-model="table1.parammaps.enable" filterable placeholder="类型" class="filter-item" style="float: left;width: 150px;" clearable>
+        <el-date-picker v-model="table1.parammaps.inputDatetime" type="daterange"  class="filter-item" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" />
+        <el-select v-model="table1.parammaps.genre" filterable placeholder="类型" class="filter-item" style="float: left;width: 150px;" clearable>
           <el-option v-for="item in table1.typeList" :key="item.id" :label="item.name" :value="item.id" />
         </el-select>
-        <el-button style="float: left;" class="successBorder" @click="handleSearch1">查询</el-button>
-        <el-button style="float: left;" class="successBorder" @click="handleRefresh1">重置</el-button>
-        <el-upload style="float: left;margin-left: 10px;" class="filter-item" :headers="headers" :data="uploadData" :action="uploadExcelUrl" :show-file-list="false" :before-upload="beforeImport" :on-success="handleImportSuccess">
-          <el-button class="filter-item import" icon="el-icon-download" style="float: left;">导入</el-button>
-        </el-upload>
-        <el-button class="filter-item export" icon="el-icon-upload2" @click="handleDownload" style="float: left;">导出</el-button>
-        <el-button class="filter-item export" icon="el-icon-upload2" @click="handleDownloadTemp" style="float: left;">导入模板下载</el-button>
+        <el-button class="successBorder" @click="handleSearch1">查询</el-button>
+        <el-button class="successBorder" @click="handleRefresh1">重置</el-button>
+        <el-button class="filter-item import" style="display:inline-block;" icon="el-icon-download" @click="handleImport">导入</el-button>
+        <el-button class="filter-item export" icon="el-icon-upload2" @click="handleDownload()" style="display:inline-block;">导出</el-button>
+        <el-button class="filter-item export" icon="el-icon-upload2" @click="handleDownloadTemp()" style="display:inline-block;">导入模板下载</el-button>
       </div>
       <div class="table">
         <el-table
@@ -37,19 +35,48 @@
               <span v-else>1</span>
             </template>
           </el-table-column>
-          <el-table-column label="牧场名称" min-width="60px" align="center" prop="filed1" />
-          <el-table-column label="数量" min-width="60px" align="center" prop="filed2">
+          <el-table-column label="牧场名称" min-width="60px" align="center" prop="pasturename" />
+          <el-table-column label="数量" min-width="60px" align="center" prop="count">
             <template slot-scope="{row}">
-              <a @click="clickQuantity(row)" style="text-decoration: underline;color: #0000FF;">{{row.filed2}}</a>
+              <a @click="clickQuantity(row)" style="text-decoration: underline;color: #0000FF;">{{row.count}}</a>
             </template>
           </el-table-column>
-          <el-table-column label="类型" min-width="60px" align="center" prop="filed2" />
-          <el-table-column label="日期" min-width="60px" align="center" prop="filed2" />
-          <el-table-column label="导入时间" min-width="60px" align="center" prop="filed14" />
+          <el-table-column label="类型" min-width="60px" align="center" prop="genre">
+            <template slot-scope="{row}">
+              <span v-if="row.genre == 0">售卖</span>
+              <span v-if="row.genre == 1">返厂</span>
+              <span v-else>置换</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="导入时间" min-width="60px" align="center" prop="importdate" />
         </el-table>
         <pagination v-show="table1.total>0" :total="table1.total" :page.sync="table1.offset" :limit.sync="table1.pagecount" @pagination="getList1" />
       </div>
     </div>
+    <el-dialog  :title="textMap[importPasture.dialogStatus]"  :visible.sync="importPasture.dialogFormVisible" :close-on-click-modal="false" width="50%">
+      <div class="import1" style="height: 300px;">
+        <el-form ref="temp" :model="importPasture.temp" label-position="right" label-width="150px" style="width: 100%;margin:0 auto 50px">
+          <el-row>
+            <el-col :span="16">
+              <el-form-item label="牧场:" prop="pastureid">
+                <el-select v-model="importPasture.temp.pastureid" filterable placeholder="牧场名称" class="filter-item" style="width: 100%;" @change="changePasture">
+                  <el-option v-for="item in table1.pastureList" :key="item.pastureid" :label="item.pasturename" :value="item.pastureid" />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <div style="display: flex;justify-content: center;margin-top: 20px;height: 100px;" >
+          <el-upload v-if="importPasture.temp.pastureid !== ''" :headers="headers" :data="uploadData" :action="uploadExcelUrl" :show-file-list="false" :before-upload="beforeImport" :on-success="handleImportSuccess">
+            <el-button class="save" :disabled="importPasture.temp.pastureid==''">选择导入文件</el-button>
+          </el-upload>
+          <el-button class="save" v-else @click="clickImpotFile()">选择导入文件</el-button>
+        </div>
+      </div>
+      <div slot="footer" class="dialog-footer" style="bottom: 10px;">
+        <el-button class="cancelClose1" @click="importPasture.dialogFormVisible = false;">关闭</el-button>
+      </div>
+    </el-dialog>
     <!-- 数量 -->
     <el-dialog  :visible.sync="quantity.dialogFormVisible" :close-on-click-modal="false" width="50%">
       <template slot="title">
@@ -58,7 +85,7 @@
             <span style="display:inline-block;width:3px;height:20px;margin-right:5px; float: left;margin-top:2px" />
             {{ textMap[quantity.dialogStatus] }}
           </span>
-          <span style="margin-right: 100px;">导入时间:{{quantity.temp.filed14}}</span>
+          <span style="margin-right: 100px;">导入时间:{{quantity.temp.importdate}}</span>
         </div>
       </template>
       <div class="quantity">
@@ -81,10 +108,8 @@
               <span v-else>1</span>
             </template>
           </el-table-column>
-          <el-table-column label="脖环号" min-width="60px" align="center" prop="filed1" />
-          <el-table-column label="卖出日期" min-width="60px" align="center" prop="filed2" />
-          <el-table-column label="日期" min-width="60px" align="center" prop="filed2" />
-          <el-table-column label="导入时间" min-width="60px" align="center" prop="filed2" />
+          <el-table-column label="脖环号" min-width="60px" align="center" prop="code" />
+          <el-table-column label="售卖日期" min-width="60px" align="center" prop="date" />
         </el-table>
         <pagination v-show="table1.total>0" :total="table1.total" :page.sync="table1.offset" :limit.sync="table1.pagecount" @pagination="getList1" />
       </div>
@@ -97,7 +122,8 @@
 
 <script>
   import Pagination from '@/components/Pagination'
-  import { postJson } from '@/api/common'
+  import { postJson,getJson } from '@/api/common'
+  import { parseTime,json2excel } from '@/utils/index.js'
   import Cookies from 'js-cookie'
   import axios from 'axios'
   import { getToken } from '@/utils/auth'
@@ -109,10 +135,10 @@
     data() {
       return {
         table1:{
-          pastureList:[{id:'1',name:'牧场1'},{id:'2',name:'牧场2'}],
-          typeList:[{id:'1',name:'类型1'},{id:'2',name:'类型2'}],
+          pastureList:[],
+          typeList:[{id:0,name:'售卖'},{id:1,name:'返厂'},{id:2,name:'置换'}],
           page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')),
-          parammaps: { pastureid: '', date:'' },
+          parammaps: { pastureid: '', genre:'',inputDatetime:'' },
           tableKey: 0, list: [], total: 0, listLoading: true
         },
         // 数量
@@ -125,11 +151,19 @@
             page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')),
             parammaps: { pastureid: '', date:'' },
             tableKey: 0, list: [], total: 0, listLoading: true
-          },
+          }
+        },
+        importPasture:{
+          dialogStatus: '',
+          dialogFormVisible: false,
+          temp:{
+            pastureid:''
+          }
         },
         isokDisable:false,
         textMap: {
-          quantityTxt: '售卖数量'
+          quantityTxt: '售卖数量',
+          importTxt:'选择牧场'
         },
         rowStyle: { maxHeight: 30 + 'px', height: 30 + 'px' },
         cellStyle: { padding: 0 + 'px' }
@@ -143,42 +177,60 @@
         }
       },
       uploadData() {
-        return {
-          name: 'checkFeed,checkProviderRK,checkcontractcode,checkcontractcodePrice,insertFeedlaidUpload,insertFeedstorageLaidUpload',
-          importParams: '入库日期,送货单编号,饲料名称,供应商,合同编号,入库重量(kg),单价(元),总价(元),毛重(kg),皮重(kg),许可证号,批号,创建人,备注',
-          sheetname: 'Sheet1',
-          // 登录牧场
-          pastureid: Cookies.get('pastureid'),
-          // 日期参数
-          dateParams: '入库日期',
-          // 必填参数
-          requiredParams: '入库日期,饲料名称,入库重量(kg),单价(元)',
-          // 为数值的参数
-          numParams: '入库重量(kg),单价(元),总价(元),毛重(kg),皮重(kg)'
-        }
+        return {}
       },
       // 设置上传地址
       uploadExcelUrl() {
-        return process.env.VUE_APP_BASE_API + 'authdata/ImportExcel'
+        return process.env.VUE_APP_BASE_API + 'management/add'
       }
     },
     created() {
       this.getList1()
+      this.getPastureList()
     },
     methods: {
+      getPastureList(){
+        let data = 'index=' + 1
+        + '&pagesize=' + ''
+        let url = 'public/pasture?'
+        getJson(url,data).then(response => {
+          if (response.code == 200) {
+            this.table1.pastureList = response.data.list
+          } else {
+            this.table1.pastureList = []
+          }
+        })
+      },
       getList1() {
         this.table1.listLoading = true
-        let data = this.table1.parammaps
-        let url = 'authdata/GetDataByName'
-        postJson(url,data).then(response => {
-          response.data.list = [{
-            'filed1':'牧场A','filed2':'123','filed14':'2022-06-22 16:53:42'
-          }]
-          if (response.data.list !== null) {
-            console.log('table数据', response.data.list)
+        let genre = ''
+        if(this.table1.parammaps.genre == '' || this.table1.parammaps.genre == null){
+          genre = -1
+        }else{
+          genre = this.table1.parammaps.genre
+        }
+        let startdate = ''
+        let enddate = ''
+        if(this.table1.parammaps.inputDatetime !== '' && this.table1.parammaps.inputDatetime !== null){
+          startdate = parseTime(this.table1.parammaps.inputDatetime[0],'{y}-{m}-{d}')
+          enddate = parseTime(this.table1.parammaps.inputDatetime[1],'{y}-{m}-{d}')
+        }else{
+          startdate = ''
+          enddate = ''
+        }
+        let data = 'index=' + this.table1.offset
+        + '&pagesize=' + this.table1.pagecount
+        + '&genre=' + genre
+        + '&pastureid=' + this.table1.parammaps.pastureid
+        + '&startdate=' + startdate
+        + '&enddate=' + enddate
+
+        let url = 'management/list?'
+        getJson(url,data).then(response => {
+          if (response.code == 200) {
             this.table1.list = response.data.list
-            this.table1.pageNum = response.data.pageNum
-            this.table1.pageSize = response.data.pageSize
+            this.table1.pageNum = this.table1.offset
+            this.table1.pageSize = this.table1.pagecount
           } else {
             this.table1.list = []
           }
@@ -194,6 +246,9 @@
       },
       handleRefresh1(){
         this.table1.offset = 1
+        this.table1.parammaps.pastureid = ''
+        this.table1.parammaps.inputDatetime = ''
+        this.table1.parammaps.genre = ''
         this.getList1()
       },
       clickQuantity(row){
@@ -205,17 +260,15 @@
       },
       getQuantityList1() {
         this.quantity.table1.listLoading = true
-        let data = this.quantity.table1.parammaps
-        let url = 'authdata/GetDataByName'
-        postJson(url,data).then(response => {
-          response.data.list = [{
-            'filed1':'牧场A','filed2':'123','filed14':'2022-06-22 16:53:42'
-          }]
-          if (response.data.list !== null) {
-            console.log('table数据', response.data.list)
+        let data = 'index=' + this.quantity.table1.offset
+        + '&pagesize=' + this.quantity.table1.pagecount
+        + '&managementid=' + this.quantity.temp.id
+        let url = 'managementbh/list?'
+        getJson(url,data).then(response => {
+          if (response.code == 200) {
             this.quantity.table1.list = response.data.list
-            this.quantity.table1.pageNum = response.data.pageNum
-            this.quantity.table1.pageSize = response.data.pageSize
+            this.quantity.table1.pageNum = this.quantity.table1.offset
+            this.quantity.table1.pageSize = this.quantity.table1.pagecount
           } else {
             this.quantity.table1.list = []
           }
@@ -230,9 +283,95 @@
       },
       handleDownload(){
         console.log('导出')
+        let genre = ''
+        if(this.table1.parammaps.genre == '' || this.table1.parammaps.genre == null){
+          genre = -1
+        }else{
+          genre = this.table1.parammaps.genre
+        }
+        let startdate = ''
+        let enddate = ''
+        if(this.table1.parammaps.inputDatetime !== '' && this.table1.parammaps.inputDatetime !== null){
+          startdate = parseTime(this.table1.parammaps.inputDatetime[0],'{y}-{m}-{d}')
+          enddate = parseTime(this.table1.parammaps.inputDatetime[1],'{y}-{m}-{d}')
+        }else{
+          startdate = ''
+          enddate = ''
+        }
+        let data = 'index=' + 1
+        + '&pagesize=' + ''
+        + '&genre=' + genre
+        + '&pastureid=' + this.table1.parammaps.pastureid
+        + '&startdate=' + startdate
+        + '&enddate=' + enddate
+
+        let url = 'management/list?'
+        var downList = []
+        getJson(url,data).then(response => {
+          if (response.code == 200) {
+            response.data.list.forEach((ele)=> {
+              if(ele.genre == 0){
+                ele.genre = '售卖'
+              }else if(ele.genre == 1){
+                ele.genre = '返厂'
+              }else{
+                ele.genre = '置换'
+              }
+            });
+            downList = response.data.list
+          } else {
+            downList = []
+          }
+          var excelDatas = [{
+            tHeader: ['牧场名称','数量','类型','导入时间'],
+            filterVal: ['pasturename','count','genre','importdate'],
+            tableDatas: downList,
+            sheetName: 'sheet'
+          }]
+          json2excel(excelDatas, '脖环管理', true, 'xlsx')
+        })
       },
       handleDownloadTemp(){
-        console.log('导入模板下载')
+        const requestParam = {}
+        const url = process.env.VUE_APP_BASE_API + 'download?filename=脖环管理.xlsx' // 请求下载文件的地址
+        console.log(url)
+        axios({
+          method: 'GET',
+          url: url,
+          data: requestParam,
+          headers: { token: getToken(), optname: 'insertcustomdoc' },
+          responseType: 'blob'
+        }).then(res => {
+          if (!res) return
+          this.percentage = 99
+          setTimeout(() => {
+            this.isPercentage = false
+          }, 2000)
+          const blob = new Blob([res.data], {
+            type: 'application/octet-stream;charset=utf-8'
+          })
+          const url = window.URL.createObjectURL(blob)
+          const aLink = document.createElement('a')
+          aLink.style.display = 'none'
+          aLink.href = url
+          const docname = '脖环管理导入模板下载.xlsx'
+          aLink.setAttribute('download', docname) // 下载的文件
+          document.body.appendChild(aLink)
+          aLink.click()
+          document.body.removeChild(aLink)
+          window.URL.revokeObjectURL(url)
+        })
+      },
+      handleImport(){
+        this.importPasture.dialogFormVisible = true
+        this.importPasture.dialogStatus = 'importTxt'
+        this.importPasture.temp.pastureid = ''
+      },
+      clickImpotFile(){
+        this.$message.warning('请选择牧场')
+      },
+      changePasture(item){
+        this.uploadData.pastureid = item
       },
       beforeImport(file) {
         const isLt2M = file.size / 1024 / 1024 < 2
@@ -242,27 +381,15 @@
         return isLt2M
       },
       handleImportSuccess(res, file) {
-        this.getList()
         if (res.msg === 'ok') {
-          this.$message({ title: '成功', message: '导入成功:' + res.data.success + '条!', type: 'success', duration: 2000 })
-          if (res.data.err_count > 0) {
-            this.$notify({ title: '失败', message: '导入失败:' + res.data.err_count + '条!', type: 'danger', duration: 2000 })
-             import('@/vendor/Export2Excel').then(excel => {
-               const list1 = res.data.result
-               const tHeader = [
-                 '入库日期', '送货单编号', '饲料名称', '供应商', '合同编号', '入库重量(kg)', '单价(元)', '总价(元)', '毛重(kg)', '皮重(kg)', '许可证号', '批号', '创建人', '创建日期', '备注', '错误信息'
-               ]
-               const filterVal = [
-                 '入库日期', '送货单编号', '饲料名称', '供应商', '合同编号', '入库重量(kg)', '单价(元)', '总价(元)', '毛重(kg)', '皮重(kg)', '许可证号', '批号', '创建人', '创建日期', '备注', 'error_msg'
-               ]
-               const data1 = this.formatJson(filterVal, list1)
-               excel.export_json_to_excel({ header: tHeader, data: data1, filename: '入库管理导入报错信息', autoWidth: true, bookType: 'xlsx' })
-             })
-          }
+          this.$message({ title: '成功', message: '导入成功', type: 'success', duration: 2000 })
+          this.importPasture.dialogFormVisible = false
+          this.getList1()
         } else {
           this.$notify({ title: '失败', message: '上传失败', type: 'danger', duration: 2000 })
         }
       },
+
       formatJson(filterVal, jsonData) {
         return jsonData.map(v =>
           filterVal.map(j => {

+ 7 - 1
src/views/deviceManagement/neckRingList/index.vue

@@ -97,7 +97,7 @@
           manufactureend = ''
         }
         let status = ''
-        if(this.table1.parammaps.status == '' || this.table1.parammaps.status == null){
+        if(this.table1.parammaps.status === '' || this.table1.parammaps.status === null){
           status = -1
         }else{
           status = this.table1.parammaps.status
@@ -134,6 +134,12 @@
       },
       handleRefresh1(){
         this.table1.offset = 1
+        this.table1.parammaps.status = ''
+        this.table1.parammaps.code = ''
+        this.table1.parammaps.purchasedate = ''
+        this.table1.parammaps.cattle = ''
+        this.table1.parammaps.barname = ''
+        this.table1.parammaps.manufacturedate = ''
         this.getList1()
       }
     }

+ 207 - 185
src/views/deviceManagement/recallRecord/index.vue

@@ -4,11 +4,11 @@
       <div class="search">
         <el-input v-model="table1.parammaps.batch" placeholder="召回批次号" style="width: 180px;" class="filter-item" clearable />
         <el-select v-model="table1.parammaps.pastureid" filterable placeholder="牧场" class="filter-item" style="width: 150px;" clearable>
-          <el-option v-for="item in table1.pastureList" :key="item.id" :label="item.name" :value="item.id" />
+          <el-option v-for="item in table1.pastureList" :key="item.pastureid" :label="item.pasturename" :value="item.pastureid" />
         </el-select>
-        <el-input-number v-model="table1.parammaps.startcount" class="filter-item" :controls="false" label="召回数量" />
+        <el-input-number v-model="table1.parammaps.startcount" class="filter-item" :controls="false" placeholder="召回数量" />
         <span>-</span>
-        <el-input-number v-model="table1.parammaps.endcount" class="filter-item" :controls="false" label="召回数量" />
+        <el-input-number v-model="table1.parammaps.endcount" class="filter-item" :controls="false" placeholder="召回数量" />
         <el-input v-model="table1.parammaps.createname" placeholder="登记人" style="width: 180px;" class="filter-item" clearable />
         <el-date-picker v-model="table1.parammaps.inputDatetime" type="daterange"  class="filter-item" range-separator="至" start-placeholder="登记开始日期" end-placeholder="登记结束日期" />
         <el-button class="successBorder" @click="handleSearch1">查询</el-button>
@@ -16,10 +16,8 @@
       </div>
         <div class="operation">
           <el-button  class="success" icon="el-icon-plus" @click="clickCreate">新增</el-button>
-          <el-upload  style="display: inline-block;margin:0 10px;"  :headers="headers" :data="uploadData" :action="uploadExcelUrl" :show-file-list="false" :before-upload="beforeImport" :on-success="handleImportSuccess">
-            <el-button class="import" icon="el-icon-download">导入模板下载</el-button>
-          </el-upload>
-          <el-button class="export" icon="el-icon-upload2" @click="handleExport()">导出</el-button>
+          <el-button class="import" icon="el-icon-download" @click="handleExportTemp1()">导入模板下载</el-button>
+          <el-button class="export" icon="el-icon-upload2" @click="handleExport1()">导出</el-button>
         </div>
       <div class="table">
         <el-table
@@ -55,11 +53,6 @@
           </el-table-column>
           <el-table-column label="登记人" min-width="60px" align="center" prop="createname" />
           <el-table-column label="登记日期" min-width="60px" align="center" prop="createtime" />
-          <el-table-column label="操作" min-width="60px" align="center">
-            <template slot-scope="{row}">
-              <a @click="clickRevoke(row)" style="text-decoration: underline;color: #0000FF;">撤销</a>
-            </template>
-          </el-table-column>
         </el-table>
         <pagination v-show="table1.total>0" :total="table1.total" :page.sync="table1.offset" :limit.sync="table1.pagecount" @pagination="getList1" />
       </div>
@@ -117,7 +110,7 @@
               <span v-else>1</span>
             </template>
           </el-table-column>
-          <el-table-column label="出厂批次号" min-width="60px" align="center" prop="factory" />
+          <el-table-column label="出厂批次号" min-width="60px" align="center" prop="batch" />
           <el-table-column label="出厂数量" min-width="60px" align="center" prop="count" />
           <el-table-column label="登记人" min-width="60px" align="center" prop="createname" />
           <el-table-column label="登记日期" min-width="60px" align="center" prop="createtime" />
@@ -129,82 +122,28 @@
       </div>
     </el-dialog>
 
-    <!-- 处理 -->
-    <el-dialog :title="textMap[handle.dialogStatus]" :visible.sync="handle.dialogFormVisible" :close-on-click-modal="false" width="40%">
-      <div class="handle">
-        <el-form ref="handleTemp" :rules="handle.rules" :model="handle.temp" label-position="right" label-width="150px" style="width: 100%;margin:0 auto 50px">
-          <el-row>
-            <el-col :span="8">
-              <el-form-item label="脖环号:" prop="filed1">
-                <span>{{handle.filed1}}</span>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="8">
-              <el-form-item label="牛号:" prop="filed1">
-                <span>{{handle.filed1}}</span>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="8">
-              <el-form-item label="牛舍:" prop="filed1">
-                <span>{{handle.filed1}}</span>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="8">
-              <el-form-item label="最后接收时间:" prop="filed1">
-                <span>{{handle.filed1}}</span>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="16">
-              <el-form-item label="处理措施:" prop="filed1">
-                <el-select ref="times" v-model="handle.temp.times"  filterable placeholder="处理措施" class="filter-item" style="width: 100%;">
-                  <el-option v-for="item in handle.treatmentMeasuresList" :key="item.id" :label="item.name" :value="item.id" />
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </el-row>
-        </el-form>
-      </div>
-      <div slot="footer" class="dialog-footer" style="bottom: 10px;">
-        <el-button  class="save" :disabled="isokDisable" @click="clickhandleData()">确认</el-button>
-        <el-button class="cancelClose" @click="handle.dialogFormVisible = false; ">取消</el-button>
-      </div>
-    </el-dialog>
 
     <!-- 新增 -->
-    <el-dialog  :title="textMap[edit.dialogStatus]"  :visible.sync="edit.dialogFormVisible" :close-on-click-modal="false" width="70%">
+    <el-dialog  :title="textMap[edit.dialogStatus]"  :visible.sync="edit.dialogFormVisible" :close-on-click-modal="false" @close="close" width="70%">
       <div class="edit">
         <el-form ref="editTemp" :rules="edit.rules" :model="edit.temp" label-position="right" label-width="150px" style="width: 100%;margin:0 auto 50px;">
           <el-row>
             <el-col :span="16">
               <el-form-item label="牧场:" prop="pastureid">
-                <el-select v-model="edit.temp.pastureid" filterable placeholder="牧场" class="filter-item" style="width: 100%;">
+                <el-select v-model="edit.temp.pastureid" filterable placeholder="牧场" class="filter-item" style="width: 100%;" @change="changePasture">
                   <el-option v-for="item in table1.pastureList" :key="item.pastureid" :label="item.pasturename" :value="item.pastureid" />
                 </el-select>
               </el-form-item>
             </el-col>
           </el-row>
-          <el-row>
-            <el-col :span="16">
-              <el-form-item label="导入:">
-                <el-button class="save" @click="selectFile()">选择文件</el-button>
-              </el-form-item>
-            </el-col>
-          </el-row>
         </el-form>
-        <div class="batch" style="border-top: 1px solid #000;">
+        <div class="batch" style="border-top: 1px solid #000;border-bottom: 1px solid #000;">
+          <h5>关联到出厂批次:</h5>
           <div class="search">
-            <el-input v-model="edit.batch.parammaps.batch" placeholder=" 召回批次号" style="width: 180px;" class="filter-item" clearable />
-            <el-input-number v-model="edit.batch.parammaps.startcount" class="filter-item" :controls="false" label="召回数量" />
-            <span>-</span>
-            <el-input-number v-model="edit.batch.parammaps.endcount" class="filter-item" :controls="false" label="召回数量" />
+            <el-input v-model="edit.batch.parammaps.batch" placeholder="出厂批次号" style="width: 180px;" class="filter-item" clearable />
+            <el-input-number v-model="edit.batch.parammaps.startcount" class="filter-item" :controls="false" placeholder="出厂数量" />
+            <span style="margin-right: 5px;">-</span>
+            <el-input-number v-model="edit.batch.parammaps.endcount" class="filter-item" :controls="false" placeholder="出厂数量" />
             <el-input v-model="edit.batch.parammaps.createname" placeholder="登记人" style="width: 180px;" class="filter-item" clearable />
             <el-date-picker v-model="edit.batch.parammaps.inputDatetime" type="daterange"  class="filter-item" range-separator="至" start-placeholder="登记开始日期" end-placeholder="登记结束日期" />
             <el-button class="successBorder" @click="handleBatchSearch">查询</el-button>
@@ -222,22 +161,29 @@
               style="width: 100%;"
               :row-style="rowStyle"
               :cell-style="cellStyle"
+              :height="300"
               class="elTable table-fixed"
               @selection-change="handleSelectionChange">
             >
               <el-table-column type="selection" width="55" />
               <el-table-column label="序号" align="center" type="index" width="50px" />
-              <el-table-column label="召回批次号" min-width="60px" align="center" prop="batch" />
-              <el-table-column label="召回数量" min-width="60px" align="center" prop="count" />
+              <el-table-column label="出厂批次号" min-width="60px" align="center" prop="batch" />
+              <el-table-column label="出厂数量" min-width="60px" align="center" prop="count" />
               <el-table-column label="登记人" min-width="60px" align="center" prop="createname" />
               <el-table-column label="登记日期" min-width="60px" align="center" prop="createtime" />
             </el-table>
           </div>
         </div>
+        <div style="display: flex;justify-content: center;margin-top: 20px;" >
+          <el-upload v-if="edit.batch.selectList.length>0" :headers="headers2" :data="uploadData2" :action="uploadExcelUrl2" :show-file-list="false" :before-upload="beforeImport2" :on-success="handleImportSuccess2">
+            <el-button class="save" :disabled="edit.batch.selectList.length==0">选择导入文件</el-button>
+          </el-upload>
+          <el-button class="save" v-else disabled>选择导入文件</el-button>
+        </div>
       </div>
       <div slot="footer" class="dialog-footer" style="bottom: 10px;">
-        <el-button class="save" :disabled="isokDisable" @click="createData()">确认</el-button>
-        <el-button class="cancelClose" @click="close()">取消</el-button>
+        <!-- <el-button class="save" :disabled="isokDisable" @click="createData()">确认</el-button> -->
+        <el-button class="cancelClose1" @click="close()">取消</el-button>
       </div>
     </el-dialog>
   </div>
@@ -247,8 +193,10 @@
   import Pagination from '@/components/Pagination'
   import { postJson,getJson  } from '@/api/common'
   import Cookies from 'js-cookie'
-  import { parseTime } from '@/utils/index.js'
+  import { parseTime,json2excel } from '@/utils/index.js'
   import { getToken } from '@/utils/auth'
+  import axios from 'axios'
+  import xlsx from 'xlsx'
   export default {
     name: 'FactoryRegistration',
     components: { Pagination },
@@ -258,7 +206,7 @@
           typeList:[{id:0,name:'购买'},{id:1,name:'置换'}],
           pastureList:[],
           page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')),
-          parammaps: { batch:'',pastureid:'',startcount:'',endcount:'',createname:'',inputDatetime:'',startdate:'',enddate:'' },
+          parammaps: { batch:'',pastureid:'',startcount:undefined,endcount:undefined,createname:'',inputDatetime:'',startdate:'',enddate:'' },
           tableKey: 0, list: [], total: 0, listLoading: false
         },
         // 出厂数量
@@ -268,7 +216,7 @@
           temp:{},
           table1:{
             page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')),
-            parammaps: { batch:'',genre:'',startcount:'',endcount:'',createname:'',inputDatetime:'',startdate:'',enddate:'' },
+            parammaps: { batch:'',genre:'',startcount:undefined,endcount:undefined,createname:'',inputDatetime:'',startdate:'',enddate:'' },
             tableKey: 0, list: [], total: 0, listLoading: false
           },
         },
@@ -279,18 +227,10 @@
           temp:{},
           table1:{
             page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')),
-            parammaps: { batch:'',genre:'',startcount:'',endcount:'',createname:'',inputDatetime:'',startdate:'',enddate:'' },
+            parammaps: { batch:'',genre:'',startcount:undefined,endcount:undefined,createname:'',inputDatetime:'',startdate:'',enddate:'' },
             tableKey: 0, list: [], total: 0, listLoading: false
           },
         },
-        // 处理
-        handle:{
-          dialogStatus: '',
-          dialogFormVisible: false,
-          rules:{},
-          temp:{},
-          treatmentMeasuresList:[]
-        },
         // 新增
         edit:{
           dialogStatus: '',
@@ -303,7 +243,7 @@
           temp:{},
           batch:{
             page: 1, offset: 1, pagecount: '',
-            parammaps: { batch:'',startcount:'',endcount:'',createname:'',inputDatetime:'',startdate:'',enddate:'' },
+            parammaps: { batch:'',startcount:undefined,endcount:undefined,createname:'',inputDatetime:'',startdate:'',enddate:'' },
             tableKey: 0, list: [], total: 0, listLoading: false,
             selectList:[],
             sumCount:''
@@ -314,38 +254,30 @@
           revokeTxt: '撤销',
           quantityTxt: '',
           recallTxt:'',
-          createTxt:'出厂登记',
+          createTxt:'召回登记',
           batchTxt:'选择批次'
         },
+        uploadData2:'',
+        downParam:{},
         rowStyle: { maxHeight: 30 + 'px', height: 30 + 'px' },
         cellStyle: { padding: 0 + 'px' }
       }
     },
     computed: {
       // 设置请求头
-      headers() {
+      headers2() {
         return {
           token: getToken()
         }
       },
-      uploadData() {
-        return {
-          name: 'checkft,updateOptscoreUpload',
-          importParams: '配方名称,体况评分标准(分),体况评分数据来源,粪便评分标准(分),粪便评分数据来源',
-          sheetname: 'Sheet1',
-          // 登录牧场
-          pastureid: Cookies.get('pastureid'),
-          // 日期参数
-          dateParams: '',
-          // 必填参数
-          requiredParams: '配方名称,体况评分标准(分),粪便评分标准(分)',
-          // 为数值的参数
-          numParams: '体况评分标准(分),粪便评分标准(分)'
-        }
-      },
+      // uploadData2() {
+      //   return {
+      //     // data:edit.batch.selectList
+      //   }
+      // },
       // 设置上传地址
-      uploadExcelUrl() {
-        return process.env.VUE_APP_BASE_API + 'authdata/ImportExcel'
+      uploadExcelUrl2() {
+        return process.env.VUE_APP_BASE_API + 'recall/add'
       },
     },
     created() {
@@ -382,12 +314,24 @@
           startdate = ''
           enddate = ''
         }
+        let startcount = ''
+        let endcount = ''
+        if(this.table1.parammaps.startcount == undefined){
+          startcount = ''
+        }else{
+          startcount = this.table1.parammaps.startcount
+        }
+        if(this.table1.parammaps.endcount == undefined){
+          endcount = ''
+        }else{
+          endcount = this.table1.parammaps.endcount
+        }
         let data = 'index=' + this.table1.offset
         + '&pagesize=' + this.table1.pagecount
         + '&batch=' + this.table1.parammaps.batch
         + '&pastureid=' + this.table1.parammaps.pastureid
-        + '&startcount=' + this.table1.parammaps.startcount
-        + '&endcount=' + this.table1.parammaps.endcount
+        + '&startcount=' + startcount
+        + '&endcount=' + endcount
         + '&createname=' + this.table1.parammaps.createname
         + '&startdate=' + startdate
         + '&enddate=' + enddate
@@ -416,8 +360,8 @@
         this.table1.parammaps = {
           batch:'',
           pastureid:'',
-          startcount:'',
-          endcount:'',
+          startcount:undefined,
+          endcount:undefined,
           createname:'',
           inputDatetime:'',
           startdate:'',
@@ -435,13 +379,14 @@
         }
         this.quantity.dialogStatus = 'quantityTxt'
         this.quantity.temp = Object.assign({}, row)
+        this.quantity.table1.offset = 1
         this.getQuantityList()
       },
       getQuantityList() {
         this.quantity.table1.listLoading = true
         let data = 'index=' + this.quantity.table1.offset
         + '&pagesize=' + this.quantity.table1.pagecount
-        + '&factoryid=' + this.quantity.temp.id
+        + '&recallid=' + this.quantity.temp.id
 
         let url = 'ring/listing?'
         getJson(url,data).then(response => {
@@ -463,6 +408,7 @@
         this.recall.dialogFormVisible = true
         this.recall.dialogStatus = 'recallTxt'
         this.recall.temp = Object.assign({}, row)
+        this.recall.table1.offset = 1
         this.getRecallList()
       },
       getRecallList() {
@@ -471,7 +417,7 @@
         + '&pagesize=' + this.recall.table1.pagecount
         + '&recallid=' + this.recall.temp.id
 
-        let url = 'recall/list?'
+        let url = 'factory/list?'
         getJson(url,data).then(response => {
           if (response.code == 200) {
             this.recall.table1.list = response.data.list
@@ -486,32 +432,20 @@
           }, 100)
         })
       },
-      clickRevoke(row){
-        console.log('撤销')
-        this.handle.temp = Object.assign({}, row)
-        this.handle.dialogFormVisible = true
-        this.handle.dialogStatus = 'revokeTxt'
-      },
-      clickhandleData(){
-         console.log('处理确认')
-      },
       clickCreate(){
         this.edit.dialogFormVisible = true
         this.edit.dialogStatus = 'createTxt'
         this.edit.temp = {
-          count:'',
-          genre:'',
           pastureid:'',
-          recall:'',
-          recallid:''
         }
         this.edit.batch.selectList = []
+        this.edit.batch.list = []
       },
       createData(){
         this.isokDisable = true
         setTimeout(() => {
           this.isokDisable = false
-        }, 1000)
+        }, 3000)
         this.$refs['editTemp'].validate(valid => {
           if (valid) {
             console.log(this.edit.temp,'this.edit.temp')
@@ -543,27 +477,12 @@
         })
       },
       close(){
-        this.$refs.editTemp.resetFields();
+        this.$refs['editTemp'].resetFields()
         this.edit.dialogFormVisible = false
+        this.getList1()
       },
-      changeType(item){
-        if(item == 1){
-          if(this.edit.temp.pastureid == ''){
-            this.$message({ type: 'warning', message: '请选择牧场' })
-            this.edit.temp.genre = ''
-            return
-          }
-          this.edit.batch.parammaps = {
-            pastureid:'',
-            batch:'',
-            batch:'',
-            startcount:'',
-            endcount:'',
-            createname:'',
-            inputDatetime:''
-          }
-          this.getBatchList()
-        }
+      changePasture(){
+        this.getBatchList()
       },
       getBatchList() {
         this.table1.listLoading = true
@@ -576,17 +495,30 @@
           startdate = ''
           enddate = ''
         }
+        let startcount = ''
+        let endcount = ''
+        if(this.edit.batch.parammaps.startcount == undefined){
+          startcount = ''
+        }else{
+          startcount = this.edit.batch.parammaps.startcount
+        }
+        if(this.edit.batch.parammaps.endcount == undefined){
+          endcount = ''
+        }else{
+          endcount = this.edit.batch.parammaps.endcount
+        }
         let data = 'index=' + this.edit.batch.offset
         + '&pagesize=' + this.edit.batch.pagecount
+        + '&genre=' + 0
         + '&pastureid=' + this.edit.temp.pastureid
         + '&batch=' + this.edit.batch.parammaps.batch
-        + '&startcount=' + this.edit.batch.parammaps.startcount
-        + '&endcount=' + this.edit.batch.parammaps.endcount
+        + '&startcount=' + startcount
+        + '&endcount=' + endcount
         + '&createname=' + this.edit.batch.parammaps.createname
         + '&startdate=' + startdate
         + '&enddate=' + enddate
 
-        let url = 'recall/list?'
+        let url = 'factory/list?'
         getJson(url,data).then(response => {
           if (response.code == 200) {
             this.edit.batch.list = response.data.list
@@ -601,11 +533,16 @@
       },
       handleSelectionChange(val){
         this.edit.batch.selectList = []
-        this.edit.batch.sumCount = 0
+        this.uploadData2 = {}
+        this.uploadData2.pastureid = this.edit.temp.pastureid
+        let factoryidList = []
+        // this.edit.batch.sumCount = 0
         val.forEach((ele)=> {
+          factoryidList.push(ele.id)
           this.edit.batch.selectList.push(ele.id)
-          this.edit.batch.sumCount += ele.count
         });
+        this.uploadData2.factoryid = '['+factoryidList+']'
+
       },
       handleBatchSearch(){
         this.edit.batch.offset = 1
@@ -616,45 +553,44 @@
         this.edit.batch.parammaps = {
           batch:'',
           batch:'',
-          startcount:'',
-          endcount:'',
+          startcount:undefined,
+          endcount:undefined,
           createname:'',
           inputDatetime:''
         }
         this.getBatchList()
       },
-      selectFile(){
-
-      },
-      handleExport(){},
       beforeImport2(file) {
-        const isLt2M = file.size / 1024 / 1024 < 2
-        if (!isLt2M) {
-          this.$message.error('上传文件大小不能超过 2MB!')
-        }
-        return isLt2M
+          const isLt2M = file.size / 1024 / 1024 < 2
+          if (!isLt2M) {
+            this.$message.error('上传文件大小不能超过 2MB!')
+          }
+          return isLt2M
       },
       handleImportSuccess2(res, file) {
-        this.getList2()
-        if (res.msg === 'ok') {
-          this.$message({ title: '成功', message: '导入成功:' + res.data.success + '条!', type: 'success', duration: 2000 })
-          if (res.data.err_count > 0) {
-            this.$notify({ title: '失败', message: '导入失败:' + res.data.err_count + '条!', type: 'danger', duration: 2000 })
-             import('@/vendor/Export2Excel').then(excel => {
-               const list1 = res.data.result
-               const tHeader = [
-                 '牲畜父类', '牲畜子类', '宾州筛一层(%)', '宾州筛二层(%)', '宾州筛三层(%)', '宾州筛四层(%)', '宾州筛数据来源', '粪便筛二层(%)', '粪便筛三层(%)', '粪便筛数据来源', '错误信息'
-               ]
-               const filterVal = [
-                 '牲畜父类', '牲畜子类', '宾州筛一层(%)', '宾州筛二层(%)', '宾州筛三层(%)', '宾州筛四层(%)', '宾州筛数据来源', '粪便筛二层(%)', '粪便筛三层(%)', '粪便筛数据来源', 'error_msg'
-               ]
-               const data1 = this.formatJson2(filterVal, list1)
-               excel.export_json_to_excel({ header: tHeader, data: data1, filename: '宾州筛、粪便筛导入报错信息', autoWidth: true, bookType: 'xlsx' })
-             })
+          if (res.msg === 'ok') {
+            console.log(res,'res===')
+            this.$message({ title: '成功', message: '导入成功', type: 'success', duration: 2000 })
+            this.edit.dialogFormVisible = false
+            this.getList1()
+          } else if(res.msg === 'recall'){
+            import('@/vendor/Export2Excel').then(excel => {
+              console.log(res.data,'res.data')
+              const list1 = res.data
+              const tHeader = [
+                '脖环号',  '错误信息'
+              ]
+              const filterVal = [
+                'a1', 'a2'
+              ]
+              const data1 = this.formatJson2(filterVal, list1)
+              excel.export_json_to_excel({ header: tHeader, data: data1, filename: '脖环召回记录导入报错信息', autoWidth: true, bookType: 'xlsx' })
+            })
+            this.edit.dialogFormVisible = false
+            this.getList1()
+          } else {
+            this.$notify({ title: '失败', message: res.data, type: 'danger', duration: 2000 })
           }
-        } else {
-          this.$notify({ title: '失败', message: '上传失败', type: 'danger', duration: 2000 })
-        }
       },
       formatJson2(filterVal, jsonData) {
         return jsonData.map(v =>
@@ -666,6 +602,92 @@
             }
           })
         )
+      },
+      handleExport1(){
+        let genre = ''
+        if(this.table1.parammaps.genre == '' || this.table1.parammaps.genre == null){
+          genre = -1
+        }else{
+          genre = this.table1.parammaps.genre
+        }
+        let startdate = ''
+        let enddate = ''
+        if(this.table1.parammaps.inputDatetime !== '' && this.table1.parammaps.inputDatetime !== null){
+          startdate = parseTime(this.table1.parammaps.inputDatetime[0],'{y}-{m}-{d}')
+          enddate = parseTime(this.table1.parammaps.inputDatetime[1],'{y}-{m}-{d}')
+        }else{
+          startdate = ''
+          enddate = ''
+        }
+        let startcount = ''
+        let endcount = ''
+        if(this.table1.parammaps.startcount == undefined){
+          startcount = ''
+        }else{
+          startcount = this.table1.parammaps.startcount
+        }
+        if(this.table1.parammaps.endcount == undefined){
+          endcount = ''
+        }else{
+          endcount = this.table1.parammaps.endcount
+        }
+        let data = 'index=' + 1
+        + '&pagesize=' + ''
+        + '&batch=' + this.table1.parammaps.batch
+        + '&pastureid=' + this.table1.parammaps.pastureid
+        + '&startcount=' + startcount
+        + '&endcount=' + endcount
+        + '&createname=' + this.table1.parammaps.createname
+        + '&startdate=' + startdate
+        + '&enddate=' + enddate
+
+        let url = 'recall/list?'
+        var downList = []
+        getJson(url,data).then(response => {
+          if (response.code == 200) {
+            downList = response.data.list
+          } else {
+            downList = []
+          }
+          var excelDatas = [{
+            tHeader: ['召回批次号','牧场','召回数量','关联出厂批次数','登记人','登记日期'],
+            filterVal: ['batch','pasturename','count','recall','createname','createtime'],
+            tableDatas: downList,
+            sheetName: 'sheet'
+          }]
+          json2excel(excelDatas, '脖环召回记录', true, 'xlsx')
+        })
+      },
+      handleExportTemp1(){
+        const requestParam = {}
+        const url = process.env.VUE_APP_BASE_API + 'download?filename=脖环召回.xlsx' // 请求下载文件的地址
+        console.log(url)
+        axios({
+          method: 'GET',
+          url: url,
+          data: requestParam,
+          headers: { token: getToken(), optname: 'insertcustomdoc' },
+          responseType: 'blob'
+        }).then(res => {
+          if (!res) return
+          this.percentage = 99
+          setTimeout(() => {
+            this.isPercentage = false
+          }, 2000)
+          const blob = new Blob([res.data], {
+            type: 'application/octet-stream;charset=utf-8'
+          })
+          const url = window.URL.createObjectURL(blob)
+          const aLink = document.createElement('a')
+          aLink.style.display = 'none'
+          aLink.href = url
+          const docname = '脖环召回记录导入模板下载.xlsx'
+          aLink.setAttribute('download', docname) // 下载的文件
+          document.body.appendChild(aLink)
+          aLink.click()
+          document.body.removeChild(aLink)
+          window.URL.revokeObjectURL(url)
+        })
       }
     }
   }

+ 110 - 15
src/views/deviceManagement/receiver/index.vue

@@ -32,9 +32,10 @@
               <span v-else>1</span>
             </template>
           </el-table-column>
+          <el-table-column label="接收器ID" min-width="60px" align="center" prop="id" />
           <el-table-column label="接收器编号" min-width="60px" align="center" prop="code" />
           <el-table-column label="牧场名称" min-width="60px" align="center" prop="pasturename" />
-          <el-table-column label="牧场编号" min-width="60px" align="center" prop="pastureid" />
+          <el-table-column label="牧场编号" min-width="60px" align="center" prop="pasturecode" />
           <el-table-column label="牛舍名称" min-width="60px" align="center" prop="barname" />
           <el-table-column label="SIM卡号" min-width="60px" align="center" prop="card" />
           <el-table-column label="启用状态" min-width="60px" align="center" prop="status">
@@ -43,11 +44,12 @@
               <span v-else>未启用</span>
             </template>
           </el-table-column>
-          <el-table-column label="安装位置" min-width="60px" align="center" prop="location" />
+          <!-- <el-table-column label="安装位置" min-width="60px" align="center" prop="location" /> -->
           <el-table-column label="最后更新时间" min-width="60px" align="center" prop="updatedate" />
           <el-table-column label="操作" min-width="60px" align="center">
             <template slot-scope="{row}">
               <a @click="clickEdit(row)" style="text-decoration: underline;color: #0000FF;">编辑</a>
+              <a @click="clickSee(row)" style="text-decoration: underline;color: #0000FF;margin-left: 10px;">查看位置</a>
             </template>
           </el-table-column>
         </el-table>
@@ -76,7 +78,7 @@
           <el-row>
             <el-col :span="16">
               <el-form-item label="牧场:" prop="pastureid">
-                <el-select v-model="edit.temp.pastureid" filterable placeholder="牧场名称" class="filter-item" style="width: 100%;">
+                <el-select v-model="edit.temp.pastureid" filterable placeholder="牧场名称" class="filter-item" style="width: 100%;" @change="changePasture">
                   <el-option v-for="item in pastureList" :key="item.pastureid" :label="item.pasturename" :value="item.pastureid" />
                 </el-select>
               </el-form-item>
@@ -84,8 +86,8 @@
           </el-row>
           <!-- <el-row>
             <el-col :span="16">
-              <el-form-item label="牧场编号:" prop="filed1">
-                <el-input v-model="edit.temp.filed1" placeholder="牧场编号" style="width: 100%;" class="filter-item" />
+              <el-form-item label="牧场编号:" prop="pasturecode">
+                <el-input v-model="edit.temp.pasturecode" placeholder="牧场编号" style="width: 100%;" class="filter-item" disabled />
               </el-form-item>
             </el-col>
           </el-row> -->
@@ -107,13 +109,13 @@
               </el-form-item>
             </el-col>
           </el-row>
-          <el-row>
+          <!-- <el-row>
             <el-col :span="16">
               <el-form-item label="安装位置:" prop="location">
-                <el-input v-model="edit.temp.location" placeholder="安装位置" style="width: 100%;" class="filter-item" />
+                <el-input v-model="edit.temp.location" placeholder="安装位置" style="width: 100%;" class="filter-item" :disabled="edit.dialogStatus == 'editTxt'" />
               </el-form-item>
             </el-col>
-          </el-row>
+          </el-row> -->
         </el-form>
       </div>
       <div slot="footer" class="dialog-footer" style="bottom: 10px;">
@@ -121,14 +123,44 @@
         <el-button class="cancelClose" @click="edit.dialogFormVisible = false; ">取消</el-button>
       </div>
     </el-dialog>
+    <el-dialog  :title="textMap[see.dialogStatus]"  :visible.sync="see.dialogFormVisible" :close-on-click-modal="false" width="50%">
+      <div class="see">
+        <div>
+          <b style="margin-right: 10px;display:inline-block;width:100px;text-align:right;">接收器编号:</b>
+          <span>{{see.temp.code}}</span>
+        </div>
+        <div>
+          <b style="margin-right: 10px;display:inline-block;width:100px;text-align:right;">启用状态:</b>
+          <span v-if="see.temp.status == 1">启用</span>
+          <span v-else>未启用</span>
+        </div>
+        <div>
+          <b style="margin-right: 10px;display:inline-block;width:100px;text-align:right;">最后更新时间:</b>
+          <span>{{see.temp.updatedate}}</span>
+        </div>
+        <div class="content">
+          <div class="draggable-box" id="box">
+            <img :src="see.bgImg" style="height: 100%;width: 100%;">
+            <div class="draggable-item"  v-for="(item,index) in see.positionList" :key="index" :style="item.style">
+            {{item.title}}
+            </div>
+          </div>
+        </div>
+      </div>
+      <div slot="footer" class="dialog-footer" style="bottom: 10px;">
+        <el-button class="cancelClose1" @click="see.dialogFormVisible = false; ">取消</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
   import Pagination from '@/components/Pagination'
   import { postJson,getJson } from '@/api/common'
+  // import draggable from '@/directive/el-drag-dialog/drag2'
   import Cookies from 'js-cookie'
   export default {
+    // directives: { draggable },
     name: 'NeckRingList',
     components: { Pagination },
     data() {
@@ -144,13 +176,23 @@
         edit:{
           dialogStatus: '',
           dialogFormVisible: false,
-          rules:{},
+          rules:{
+            code:[{ type: 'string', required: true, message: '必填', trigger: 'change' }],
+          },
           temp:{}
         },
         isokDisable:false,
         textMap: {
           editTxt: '编辑',
-          createTxt:'新增'
+          createTxt:'新增',
+          seeTxt:'查看位置'
+        },
+        see:{
+          dialogStatus: '',
+          dialogFormVisible: false,
+          temp:{},
+          positionList:[],
+          bgImg:''
         },
         rowStyle: { maxHeight: 30 + 'px', height: 30 + 'px' },
         cellStyle: { padding: 0 + 'px' }
@@ -160,14 +202,14 @@
     created() {
       this.getList1()
       this.getPastureList()
-      this.getCowshedList()
+      // this.getCowshedList()
       this.getSimCardList()
     },
     methods: {
       getList1() {
         this.table1.listLoading = true
         let status = ''
-        if(this.table1.parammaps.status == '' || this.table1.parammaps.status == null){
+        if(this.table1.parammaps.status === '' || this.table1.parammaps.status === null){
           status = -1
         }else{
           status = this.table1.parammaps.status
@@ -219,6 +261,7 @@
       getCowshedList() {
         let data = 'index=' + 1
         + '&pagesize=' + ''
+        + '&pastureid=' + this.edit.temp.pastureid
         let url = 'public/housephy?'
         getJson(url,data).then(response => {
           if (response.code == 200) {
@@ -240,6 +283,11 @@
           }
         })
       },
+      changePasture(item){
+        this.edit.temp.pasturecode = this.pastureList.find(obj => obj.pastureid === item).pasturecode
+        this.edit.temp.barid = ''
+        this.getCowshedList()
+      },
       clickCreate(){
         console.log('新增')
         this.edit.dialogFormVisible = true
@@ -258,7 +306,7 @@
         this.isokDisable = true
         setTimeout(() => {
           this.isokDisable = false
-        }, 1000)
+        }, 3000)
         this.$refs['temp'].validate(valid => {
           if (valid) {
             console.log(this.edit.temp,'this.edit.temp')
@@ -289,13 +337,14 @@
         this.edit.temp = Object.assign({}, row)
         this.edit.dialogFormVisible = true
         this.edit.dialogStatus = 'editTxt'
+        this.getCowshedList()
       },
       editData(){
         console.log('编辑保存')
         this.isokDisable = true
         setTimeout(() => {
           this.isokDisable = false
-        }, 1000)
+        }, 3000)
         this.$refs['temp'].validate(valid => {
           if (valid) {
             console.log(this.edit.temp,'this.edit.temp')
@@ -320,10 +369,56 @@
             })
           }
         })
+      },
+      clickSee(row){
+        this.see.positionList = []
+        this.see.bgImg = process.env.VUE_APP_BASE_API+row.image
+        row.status == 1 ? row.style.background = 'green' : row.style.background = 'red'
+        if(row.style.left !== '' && row.style.left !== ''){
+          row.title = row.id
+          this.see.positionList.push(row)
+        }
+        console.log(this.see.positionList,'this.see.positionList')
+        this.see.temp = Object.assign({}, row)
+        this.see.dialogFormVisible = true
+        this.see.dialogStatus = 'seeTxt'
       }
     }
   }
 </script>
 
-<style>
+<style scoped lang="scss">
+  .draggable-box {
+    position: relative;
+    border: 1px solid #333;
+    margin-left: 5%;
+    margin-top: 20px;
+    width: 90%;
+    height: 500px;
+  }
+  .draggable-item{
+    width: 30px;
+    height: 30px;
+    border-radius:50%;
+    position: absolute;
+    text-align: center;
+    line-height: 30px;
+    color: #fff;
+  }
+  .follow{
+    cursor: pointer;
+    position: absolute;
+    height: 40px;
+    width: 40px;
+    background: #fff;
+    color: red;
+    line-height: 20px;
+    left: 35px;
+    top: 0;
+    z-index: 2;
+    border-radius: 5px;
+  }
+  .follow span{
+    text-decoration: underline;
+  }
 </style>

+ 255 - 84
src/views/deviceManagement/receiverInstallation/index.vue

@@ -2,12 +2,13 @@
   <div class="app-container">
     <div class="table1">
       <div class="search">
-        <el-input v-model="table1.getdataListParm.parammaps.drivername" placeholder="牧场编号" style="width: 180px;"
-          class="filter-item" clearable />
-        <el-input v-model="table1.getdataListParm.parammaps.drivername" placeholder=" 牛舍名称" style="width: 180px;"
-          class="filter-item" clearable />
-        <el-button class="successBorder" @click="handleSearch1">查询</el-button>
-        <el-button class="successBorder" @click="handleRefresh1">重置</el-button>
+        <el-select v-model="table1.parammaps.pastureid" filterable placeholder="全部牧场" class="filter-item" style="width: 150px;" clearable>
+          <el-option v-for="item in table1.pastureList" :key="item.pastureid" :label="item.pasturename" :value="item.pastureid" />
+        </el-select>
+        <!-- <el-input v-model="table1.parammaps.drivername" placeholder="牧场编号" style="width: 180px;" class="filter-item" clearable /> -->
+        <el-input v-model="table1.parammaps.barname" placeholder=" 牛舍名称" style="width: 180px;" class="filter-item" clearable />
+        <el-button class="successBorder" @click="handleSearch1()">查询</el-button>
+        <el-button class="successBorder" @click="handleRefresh1()">重置</el-button>
       </div>
       <div class="table">
         <el-table :key="table1.tableKey" v-loading="table1.listLoading" element-loading-text="给我一点时间"
@@ -19,19 +20,18 @@
               <span v-else>1</span>
             </template>
           </el-table-column>
-          <el-table-column label="牧场编号" min-width="60px" align="center" prop="filed1" />
-          <el-table-column label="牛舍名称" min-width="60px" align="center" prop="filed2" />
-          <el-table-column label="接收器总数" min-width="60px" align="center" prop="filed2" />
-          <el-table-column label="已启用" min-width="60px" align="center" prop="filed2" />
-          <el-table-column label="未启用" min-width="60px" align="center" prop="filed2" />
-          <el-table-column label="操作" min-width="60px" align="center" prop="filed2">
+          <el-table-column label="牧场名称" min-width="60px" align="center" prop="FARM_NAME" />
+          <el-table-column label="牛舍名称" min-width="60px" align="center" prop="PHYSICALNAME" />
+          <el-table-column label="接收器总数" min-width="60px" align="center" prop="总数" />
+          <el-table-column label="已启用" min-width="60px" align="center" prop="启用" />
+          <el-table-column label="未启用" min-width="60px" align="center" prop="未启用" />
+          <el-table-column label="操作" min-width="60px" align="center">
             <template slot-scope="{row}">
               <a @click="clickSet(row)" style="text-decoration: underline;color: #0000FF;">设置</a>
             </template>
           </el-table-column>
         </el-table>
-        <pagination v-show="table1.total>0" :total="table1.total" :page.sync="table1.getdataListParm.offset"
-          :limit.sync="table1.getdataListParm.pagecount" @pagination="getList1" />
+        <pagination v-show="table1.total>0" :total="table1.total" :page.sync="table1.offset" :limit.sync="table1.pagecount" @pagination="getList1()" />
       </div>
     </div>
 
@@ -39,19 +39,26 @@
     <el-dialog :title="textMap[set.dialogStatus]" :visible.sync="set.dialogFormVisible" :close-on-click-modal="false"
       width="50%">
       <div class="set">
-        <el-upload style="display: inline-block;margin-right: 10px;border-radius:5px;" class="save" :show-file-list="false" action="set.uploadImageUrl" :on-preview="uploadPlan" :limit="1">
+        <el-upload style="display: inline-block;margin-right: 10px;border-radius:5px;" class="save" :show-file-list="false" list-type="picture" :file-list="set.fileList" :action="set.uploadImageUrl" :on-success="handleSuccess" :headers="set.headers" :data="set.data" >
           <el-button class="save">上传平面图</el-button>
         </el-upload>
-        <el-button class="save" :disabled= "set.bgImg == ''" @click="addReceiver()">添加接收器</el-button>
+        <el-button class="save" :disabled= "set.bgImg == null || set.positionLength == 0 || set.positionLength == set.positionList.length" @click="addReceiver()">添加接收器</el-button>
+        <div style="float: right;">
+          <div style="display: inline-block;"><span style="width: 10px;height: 10px;display: inline-block;border-radius: 5px;background: green;margin-right:10px;"></span>已启用:{{set.enabledTotal}}</div>
+          <div style="display: inline-block;margin-left: 10px;"><span style="width: 10px;height: 10px;display: inline-block;border-radius: 5px;background: red;margin-right:10px;"></span>未启用:{{set.notEnabledTotal}}</div>
+
+        </div>
         <div class="content">
           <div class="draggable-box" id="box">
             <img :src="set.bgImg" style="height: 100%;width: 100%;">
-            <div class="draggable-item"  v-for="(item,index) in set.positionList" :key="index" :style="item.style" @dblclick="dblclickReceiver(item)"  v-draggable="greet">
+            <div class="draggable-item"  v-for="(item,index) in set.positionList" :key="index" :style="item.style" @dblclick="dblclickReceiver(item)" @onmouseup="onmouseup(item)"  v-draggable="greet">
             {{item.title}}
+            <span v-show="false" class="myspan">{{item.myId}}</span>
+            <!-- <span class="myspan">{{item.myId}}</span> -->
               <div class="follow" v-if="item.display">
                 <span @click="clickDel(item)">删除</span><br/>
                 <span v-if="item.enable == 1" @click="clickIsenable(item,1)">停用</span>
-                <span v-else @click="clickIsenable(item,1)">启用</span>
+                <span v-else @click="clickIsenable(item,0)">启用</span>
               </div>
             </div>
           </div>
@@ -67,9 +74,10 @@
 
 <script>
   import Pagination from '@/components/Pagination'
-  import { postJson } from '@/api/common'
+  import { postJson,getJson,getUUID } from '@/api/common'
   import Cookies from 'js-cookie'
   import draggable from '@/directive/el-drag-dialog/drag2'
+  import { getToken } from '@/utils/auth'
   export default {
     directives: { draggable },
     name: 'ReceiverInstallation',
@@ -77,31 +85,30 @@
     data() {
       return {
         table1: {
-          getdataListParm: {
-            name: 'getDriverList',
-            page: 1,
-            offset: 1,
-            pagecount: parseInt(Cookies.get('pageCount')),
-            returntype: 'Map',
-            parammaps: {
-              pastureid: '',
-              date: ''
-            }
-          },
-          tableKey: 0,
-          list: [],
-          total: 0,
-          listLoading: true
+          pastureList:[],
+          page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')),
+          parammaps: { pastureid: '', barname:'' },
+          tableKey: 0, list: [], total: 0, listLoading: true
         },
         set: {
           dialogStatus: '',
           dialogFormVisible: false,
           rules: {},
           temp: {},
+          positionLength:0,
           positionList:[],//位置列表
+          noneList:[],
+          num:0,
+          enabledTotal:0,
+          notEnabledTotal:0,
           fileList:[],//上传列表
-          uploadImageUrl:process.env.VUE_APP_BASE_API + 'authdata/uploaderimage',
-          bgImg:'https://s3.bmp.ovh/imgs/2022/07/20/6c1ac9b5151fca72.png'
+          bgImg:null,
+          // bgImg:'https://s3.bmp.ovh/imgs/2022/07/20/6c1ac9b5151fca72.png'
+          headers: { id: 1, token: getToken() },
+          uploadImageUrl: process.env.VUE_APP_BASE_API + 'housephy/image',
+          data:{
+            id:''
+          }
         },
         isokDisable: false,
         textMap: {
@@ -116,21 +123,32 @@
         },
       }
     },
-
     created() {
       this.getList1()
+      this.getPastureList()
     },
     methods: {
+      getPastureList(){
+        let data = 'index=' + 1
+        + '&pagesize=' + ''
+        let url = 'public/pasture?'
+        getJson(url,data).then(response => {
+          if (response.code == 200) {
+            this.table1.pastureList = response.data.list
+          } else {
+            this.table1.pastureList = []
+          }
+        })
+      },
       getList1() {
         this.table1.listLoading = true
-        let data = this.table1.getdataListParm
+        let data = {
+          name:'getReceiverInfo',
+          page: this.table1.page, offset: this.table1.offset, pagecount: this.table1.pagecount, returntype: 'Map',
+          parammaps: this.table1.parammaps
+        }
         let url = 'authdata/GetDataByName'
         postJson(url, data).then(response => {
-          response.data.list = [{
-            'filed1': '牧场A',
-            'filed2': '123',
-            'filed14': '2022-06-22 16:53:42'
-          }]
           if (response.data.list !== null) {
             console.log('table数据', response.data.list)
             this.table1.list = response.data.list
@@ -146,77 +164,228 @@
         })
       },
       handleSearch1() {
-        this.table1.getdataListParm.offset = 1
+        this.table1.offset = 1
         this.getList1()
       },
       handleRefresh1() {
-        this.table1.getdataListParm.offset = 1
+        this.table1.offset = 1
+        this.table1.parammaps.pastureid = ''
+        this.table1.parammaps.barname = ''
         this.getList1()
       },
       clickSet(row) {
-        console.log('设置')
-        row.list = [{
-          title:1,
-          enable:1,
-          style:{
-            left: '100px',
-            top: '100px',
+        this.set.temp = Object.assign({}, row)
+        this.set.dialogStatus = 'setTxt'
+        this.set.data.id = this.set.temp.barid
+        this.getImgList()
+        this.getPositionList()
+      },
+      getImgList(){
+        let data = 'id='+this.set.temp.barid
+        let url = 'image?'
+        getJson(url, data).then(response => {
+            console.log('table数据', response)
+          if (response.code == 200) {
+            if(response.data !== null){
+              this.set.bgImg = process.env.VUE_APP_BASE_API + response.data
+            }else{
+              this.set.bgImg = null
+            }
+            console.log(this.set.bgImg,'img')
+          } else {
+            this.set.bgImg = null
           }
-          },{
-          title:2,
-          enable:0,
-          style:{
-            left: '30px',
-            top: '0',
+          this.set.dialogFormVisible = true
+        })
+      },
+      getPositionList(){
+        let data = 'barid='+this.set.temp.barid
+        let url = 'receiver/coordinates?'
+        getJson(url, data).then(response => {
+            console.log('table数据', response)
+          if (response.code == 200) {
+            this.set.positionList = []
+             this.set.noneList = []
+             this.set.enabledTotal = 0
+             this.set.notEnabledTotal = 0
+            response.data.list.forEach((item,key)=>{
+              item.myId = getUUID(32, 16)
+              item.display = false
+              item.title = item.id
+              item.enable == 1 ? item.style.background = 'green' : item.style.background = 'red'
+              if(item.style.left !== '' && item.style.left !== ''){
+                this.set.positionList.push(item)
+                if(item.enable == 1){
+                  this.set.enabledTotal += 1
+                }else{
+                  this.set.notEnabledTotal += 1
+                }
+              }else{
+                this.set.noneList.push(item)
+              }
+            })
+            this.set.positionLength = response.data.list.length
+            // this.set.positionList = response.data.list
+            console.log(this.set.noneList,'noneList')
+            console.log(this.set.positionList.length,'positionList')
+            console.log(this.set.positionLength,'positionLength')
+          } else {
+            this.set.positionLength = 0
+            this.set.positionList = []
+            this.set.noneList = []
           }
-        }]
-        row.list.forEach((item,key)=>{
-          item.display = false
-          item.enable == 1 ? item.style.background = 'green' : item.style.background = 'red'
         })
-        this.set.positionList = row.list
-        this.set.temp = Object.assign({}, row)
-        this.set.dialogFormVisible = true
-        this.set.dialogStatus = 'setTxt'
       },
-      setData() {
-        console.log('设置保存')
+      handleSuccess(response, file, fileList){
+        console.log(response, file, fileList)
+        this.set.fileList = fileList
+        this.set.bgImg = fileList[fileList.length-1].url
       },
-      uploadPlan(file) {
-        this.set.bgImg = 'https://s3.bmp.ovh/imgs/2022/07/20/6c1ac9b5151fca72.png'
-        console.log('上传平面图')
-        console.log(file);
+      setData() {
+        console.log('设置保存',this.set.positionList)
+        let list = []
+        this.set.positionList.forEach((item,key)=>{
+          let obj = {}
+          obj.barid = this.set.temp.barid
+          obj.left = item.style.left
+          obj.top = item.style.top
+          obj.id = item.id
+          obj.enable = item.enable
+          obj.pastureid = item.pastureid
+          list.push(obj)
+        })
+        if(this.set.noneList.length > 0){
+          this.set.noneList.forEach((item,key)=>{
+            let obj = {}
+            obj.barid = this.set.temp.barid
+            obj.left = ''
+            obj.top = ''
+            obj.id = item.id
+            obj.enable = item.enable
+            obj.pastureid = item.pastureid
+            list.push(obj)
+          })
+        }
+        let url = 'receiver/coordinates/edit'
+        postJson(url,list).then(response => {
+          if (response.code == 200) {
+            this.$notify({ title: '', message: '保存成功', type: 'success', duration: 2000 })
+            this.set.dialogFormVisible = false
+            this.getList1()
+          }else{
+            this.$notify({ title: '保存失败', message: response.data, type: 'warning', duration: 2000 })
+          }
+        })
       },
       addReceiver(){
-        console.log('添加接收器')
+        this.set.num +=1
+        console.log('添加接收器',this.set.num)
         let obj = {}
-        obj.title = this.set.positionList.length + 1
-        obj.enable = 0
-         obj.style = {
-          background: 'red',
-          left: '0',
-          top: '0',
+        obj.title = this.set.noneList[0].id
+        obj.id = this.set.noneList[0].id
+        obj.pastureid = this.set.noneList[0].pastureid
+        this.set.noneList.splice(0,1)
+        obj.myId = getUUID(32, 16)
+        obj.enable = 1
+        obj.style = {
+          background: 'green',
+          left: '0px',
+          top: '0px',
         }
         this.set.positionList.push(obj)
+        // 添加后重新核算已启用跟未启用的数量
+        this.set.enabledTotal = 0
+        this.set.notEnabledTotal = 0
+        this.set.positionList.forEach((value,key)=>{
+          if(value.style.left !== '' && value.style.top !== ''){
+            if(value.enable == 1){
+              this.set.enabledTotal +=1
+            }else{
+              this.set.notEnabledTotal += 1
+            }
+          }
+        })
+        console.log('添加接收器',this.set.positionList)
       },
       dblclickReceiver(item){
-        console.log(item)
         this.$set(item,'display',true)
       },
       clickDel(item){
         console.log('点击了删除',item)
+        // 判断noneList是否为空,如果为空,直接push,else只添加没有对应的id的参数
+        if(this.set.noneList.length == 0){
+          let obj = {}
+          obj.id = item.id
+          obj.pastureid = item.pastureid
+          obj.pastureid = item.pastureid
+          this.set.noneList.push(obj)
+        }else{
+           this.set.noneList.forEach((value,key)=>{
+             if(item.id !== value.id){
+               let obj = {}
+               obj.id = item.id
+               obj.pastureid = item.pastureid
+               obj.pastureid = item.pastureid
+               this.set.noneList.push(obj)
+             }
+           })
+        }
+        // 删除对应的点
+        this.set.positionList.forEach((value,key)=>{
+          if(item.id == value.id){
+            this.set.positionList.splice(key,1)
+          }
+        })
+        // 删除后重新核算已启用跟未启用的数量
+        this.set.enabledTotal = 0
+        this.set.notEnabledTotal = 0
+        this.set.positionList.forEach((value,key)=>{
+          if(value.style.left !== '' && value.style.top !== ''){
+            if(value.enable == 1){
+              this.set.enabledTotal +=1
+            }else{
+              this.set.notEnabledTotal += 1
+            }
+          }
+        })
+         // this.set.positionLength =  this.set.positionList.length
+         this.$set(item,'display',false)
+         console.log('点击了删除positionList',this.set.positionList)
+         console.log('点击了删除noneList',this.set.noneList)
       },
       clickIsenable(item,item2){
         if(item2 == 1){
-          console.log('点击了停用')
+          item.enable = 0
         }else{
-          console.log('点击了启用')
+          item.enable = 1
         }
+        item.enable == 1 ? item.style.background = 'green' : item.style.background = 'red'
+        this.set.enabledTotal = 0
+        this.set.notEnabledTotal = 0
+        this.set.positionList.forEach((item,key)=>{
+          if(item.enable == 1){
+            this.set.enabledTotal += 1
+          }else{
+            this.set.notEnabledTotal += 1
+          }
+        })
+        this.$set(item,'display',false)
+      },
+      onmousemove(item){
+        console.log('item', item)
       },
       greet(val) {
         console.log('val', val)
-        this.val = val
-      }
+        this.set.positionList.forEach((item,key)=>{
+          if(item.myId == val.myId){
+            item.style.left = val.x
+            item.style.top = val.y
+          }
+        })
+        // this.val = val
+        // this.set.positionList.
+      },
+
     }
   }
 </script>
@@ -249,6 +418,8 @@
     line-height: 20px;
     left: 35px;
     top: 0;
+    z-index: 2;
+    border-radius: 5px;
   }
   .follow span{
     text-decoration: underline;

+ 16 - 7
src/views/deviceManagement/simCard/index.vue

@@ -71,7 +71,7 @@
           <el-row>
             <el-col :span="16">
               <el-form-item label="启用状态:" prop="status">
-                <el-switch v-model="edit.temp.status" active-value="1" inactive-value="0" />
+                <el-switch v-model="edit.temp.status" active-value="1" inactive-value="0" @change="changeStatus"/>
               </el-form-item>
             </el-col>
           </el-row>
@@ -175,12 +175,13 @@
         table1:{
           parammaps: {status: '', card:'',company:''},
           offset: 1, pagecount: parseInt(Cookies.get('pageCount')),pageNum:'',pageSize:'',total: 0, listLoading: true, tableKey: 0, list: []
-
         },
         edit:{
           dialogStatus: '',
           dialogFormVisible: false,
-          rules:{},
+          rules:{
+            card: [{ type: 'string', required: true, message: '必填', trigger: 'change' }],
+          },
           temp:{}
         },
         isokDisable:false,
@@ -201,7 +202,7 @@
       getList1() {
         this.table1.listLoading = true
         let status = ''
-        if(this.table1.parammaps.status == '' || this.table1.parammaps.status == null){
+        if(this.table1.parammaps.status === '' || this.table1.parammaps.status === null){
           status = -1
         }else{
           status = this.table1.parammaps.status
@@ -257,7 +258,7 @@
         this.edit.temp = {
           status:'0',
           card:'',
-          company:'',
+          company:'移动',
           purchasedate:'',
           activatedate:'',
           topupdate:'',
@@ -282,7 +283,7 @@
         this.isokDisable = true
         setTimeout(() => {
           this.isokDisable = false
-        }, 1000)
+        }, 3000)
         this.$refs['temp'].validate(valid => {
           if (valid) {
             console.log(this.edit.temp,'this.edit.temp')
@@ -324,7 +325,7 @@
         this.isokDisable = true
         setTimeout(() => {
           this.isokDisable = false
-        }, 1000)
+        }, 3000)
         this.$refs['temp'].validate(valid => {
           if (valid) {
             console.log(this.edit.temp,'this.edit.temp')
@@ -352,6 +353,14 @@
             })
           }
         })
+      },
+      changeStatus(item){
+        console.log(this.edit.temp.receivercode)
+        if(this.edit.temp.receivercode !== '' && this.edit.temp.receivercode !== undefined && this.edit.temp.receivercode !== null){
+          if(item == 0){
+            this.$message.warning('关闭SIM卡后,该卡将与(接收器编号)自动解绑')
+          }
+        }
       }
     }
   }

+ 84 - 45
src/views/neckRingStatistics/abnormalNeckRing/index.vue

@@ -2,12 +2,9 @@
   <div class="app-container">
     <div class="table1">
       <div class="search">
-        <el-input v-model="table1.getdataListParm.parammaps.drivername" placeholder="脖环号" style="width: 180px;" class="filter-item" clearable />
-        <el-input v-model="table1.getdataListParm.parammaps.drivername" placeholder="牛号" style="width: 180px;" class="filter-item" clearable />
-        <el-select v-model="table1.getdataListParm.parammaps.enable" filterable placeholder="最后接收时间" class="filter-item" style="width: 150px;" clearable>
-          <el-option v-for="item in table1.lastReceivingTimeList" :key="item.id" :label="item.name" :value="item.id" />
-        </el-select>
-        <!-- <el-date-picker v-model="table1.getdataListParm.parammaps.date"  type="date" placeholder="选择日期" /> -->
+        <el-input v-model="table1.parammaps.code" placeholder="脖环号" style="width: 180px;" class="filter-item" clearable />
+        <el-input v-model="table1.parammaps.cownum" placeholder="牛号" style="width: 180px;" class="filter-item" clearable />
+        <el-date-picker v-model="table1.parammaps.inputDatetime" type="daterange"  class="filter-item" range-separator="至" start-placeholder="最后接收时间" end-placeholder="最后接收时间" />
         <el-button class="successBorder" @click="handleSearch1">查询</el-button>
         <el-button class="successBorder" @click="handleRefresh1">重置</el-button>
       </div>
@@ -31,24 +28,24 @@
               <span v-else>1</span>
             </template>
           </el-table-column>
-          <el-table-column label="脖环号" min-width="60px" align="center" prop="filed1" />
-          <el-table-column label="牛号" min-width="60px" align="center" prop="filed2" />
-          <el-table-column label="牛舍名称" min-width="60px" align="center" prop="filed2" />
-          <el-table-column label="最后接收时间" min-width="60px" align="center" prop="filed2" />
-          <el-table-column label="最后定位" min-width="60px" align="center" prop="filed2">
+          <el-table-column label="脖环号" min-width="60px" align="center" prop="REGIST_NUM_2" />
+          <el-table-column label="牛号" min-width="60px" align="center" prop="COW_NUM" />
+          <el-table-column label="牛舍名称" min-width="60px" align="center" prop="HOUSE_NAME" />
+          <el-table-column label="最后接收时间" min-width="60px" align="center" prop="createtime" />
+          <el-table-column label="最后定位" min-width="60px" align="center">
             <template slot-scope="{row}">
               <a @click="clickFind(row)" style="text-decoration: underline;color: #0000FF;">查找</a>
             </template>
           </el-table-column>
-          <el-table-column label="处理时间" min-width="60px" align="center" prop="filed2" />
-          <el-table-column label="处理措施" min-width="60px" align="center" prop="filed2" />
-          <el-table-column label="操作" min-width="60px" align="center" prop="filed14">
+          <el-table-column label="处理时间" min-width="60px" align="center" prop="measuretime" />
+          <el-table-column label="处理措施" min-width="60px" align="center" prop="measure" />
+          <el-table-column label="操作" min-width="60px" align="center">
             <template slot-scope="{row}">
               <a @click="clickHandle(row)" style="text-decoration: underline;color: #0000FF;">处理</a>
             </template>
           </el-table-column>
         </el-table>
-        <pagination v-show="table1.total>0" :total="table1.total" :page.sync="table1.getdataListParm.offset" :limit.sync="table1.getdataListParm.pagecount" @pagination="getList1" />
+        <pagination v-show="table1.total>0" :total="table1.total" :page.sync="table1.offset" :limit.sync="table1.pagecount" @pagination="getList1()" />
       </div>
     </div>
     <!-- 查找 -->
@@ -64,39 +61,39 @@
     <!-- 处理 -->
     <el-dialog :title="textMap[handle.dialogStatus]" :visible.sync="handle.dialogFormVisible" :close-on-click-modal="false" width="40%">
       <div class="handle">
-        <el-form ref="temp" :rules="handle.rules" :model="handle.temp" label-position="right" label-width="150px" style="width: 100%;margin:0 auto 50px">
+        <el-form ref="handleTemp" :rules="handle.rules" :model="handle.temp" label-position="right" label-width="150px" style="width: 100%;margin:0 auto 50px">
           <el-row>
-            <el-col :span="8">
-              <el-form-item label="脖环号:" prop="filed1">
-                <span>{{handle.filed1}}</span>
+            <el-col :span="20">
+              <el-form-item label="脖环号:" prop="REGIST_NUM_2">
+                <span>{{handle.temp.REGIST_NUM_2}}</span>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row>
-            <el-col :span="8">
-              <el-form-item label="牛号:" prop="filed1">
-                <span>{{handle.filed1}}</span>
+            <el-col :span="20">
+              <el-form-item label="牛号:" prop="COW_NUM">
+                <span>{{handle.temp.COW_NUM}}</span>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row>
-            <el-col :span="8">
-              <el-form-item label="牛舍:" prop="filed1">
-                <span>{{handle.filed1}}</span>
+            <el-col :span="20">
+              <el-form-item label="牛舍:" prop="HOUSE_NAME">
+                <span>{{handle.temp.HOUSE_NAME}}</span>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row>
-            <el-col :span="8">
-              <el-form-item label="最后接收时间:" prop="filed1">
-                <span>{{handle.filed1}}</span>
+            <el-col :span="20">
+              <el-form-item label="最后接收时间:" prop="createtime">
+                <span>{{handle.temp.createtime}}</span>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row>
-            <el-col :span="16">
-              <el-form-item label="处理措施:" prop="filed1">
-                <el-select ref="times" v-model="handle.temp.times"  filterable placeholder="处理措施" class="filter-item" style="width: 100%;">
+            <el-col :span="20">
+              <el-form-item label="处理措施:" prop="measure">
+                <el-select ref="measure" v-model="handle.temp.measureid"  filterable placeholder="处理措施" class="filter-item" style="width: 100%;">
                   <el-option v-for="item in handle.treatmentMeasuresList" :key="item.id" :label="item.name" :value="item.id" />
                 </el-select>
               </el-form-item>
@@ -115,6 +112,7 @@
 <script>
   import Pagination from '@/components/Pagination'
   import { postJson } from '@/api/common'
+  import { parseTime } from '@/utils/index.js'
   import Cookies from 'js-cookie'
   export default {
     name: 'AbnormalNeckRing',
@@ -122,12 +120,9 @@
     data() {
       return {
         table1:{
-          lastReceivingTimeList:[{id:'1',name:'牧场1'},{id:'2',name:'牧场2'}],
-          getdataListParm: {
-            name: 'getDriverList', page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')), returntype: 'Map',
-            parammaps: { pastureid: '', date:'' }
-          },
-          tableKey: 0, list: [], total: 0, listLoading: true
+          page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')),
+          parammaps: { cownum:'',code:'',inputDatetime:'',startdate:'',enddate:'' },
+          tableKey: 0, list: [], total: 0, listLoading: false
         },
         // 查找
         find:{
@@ -138,9 +133,11 @@
         handle:{
           dialogStatus: '',
           dialogFormVisible: false,
-          rules:{},
+          rules:{
+            measureid: [{ type: 'String', required: true, message: '必填', trigger: 'change' }],
+          },
           temp:{},
-          treatmentMeasuresList:[]
+          treatmentMeasuresList:[{id:'0',name:'信号范围之外'},{id:'1',name:'更换'}]
         },
         isokDisable:false,
         textMap: {
@@ -157,12 +154,21 @@
     methods: {
       getList1() {
         this.table1.listLoading = true
-        let data = this.table1.getdataListParm
+        if(this.table1.parammaps.inputDatetime !== '' && this.table1.parammaps.inputDatetime !== null){
+          this.table1.parammaps.startdate = parseTime(this.table1.parammaps.inputDatetime[0],'{y}-{m}-{d}')
+          this.table1.parammaps.enddate = parseTime(this.table1.parammaps.inputDatetime[1],'{y}-{m}-{d}')
+        }else{
+          this.table1.parammaps.startdate = ''
+          this.table1.parammaps.enddate = ''
+          this.table1.parammaps.inputDatetime = ''
+        }
+        let data = {
+          name:'getAbnormalStatistics',
+          page: this.table1.page, offset: this.table1.offset, pagecount: this.table1.pagecount, returntype: 'Map',
+          parammaps: this.table1.parammaps
+        }
         let url = 'authdata/GetDataByName'
         postJson(url,data).then(response => {
-          response.data.list = [{
-            'filed1':'牧场A','filed2':'123','filed14':'2022-06-22 16:53:42'
-          }]
           if (response.data.list !== null) {
             console.log('table数据', response.data.list)
             this.table1.list = response.data.list
@@ -178,11 +184,18 @@
         })
       },
       handleSearch1(){
-        this.table1.getdataListParm.offset = 1
+        this.table1.offset = 1
         this.getList1()
       },
       handleRefresh1(){
-        this.table1.getdataListParm.offset = 1
+        this.table1.offset = 1
+        this.table1.parammaps= {
+          cownum:'',
+          code:'',
+          startdate:'',
+          enddate:'',
+          inputDatetime:''
+        }
         this.getList1()
       },
       clickFind(row){
@@ -198,6 +211,32 @@
       },
       clickhandleData(){
          console.log('处理确认')
+        this.isokDisable = true
+        setTimeout(() => {
+          this.isokDisable = false
+        }, 3000)
+        this.$refs['handleTemp'].validate(valid => {
+          if (valid) {
+            let data = {
+              name:'updatejbqerr',
+              parammaps:{
+                measureid:this.handle.temp.measureid,
+                id:this.handle.temp.id,
+              }
+            }
+            let url = 'authdata/PostDataByName'
+            postJson(url,data).then(response => {
+              if (response.code == 200) {
+                this.$notify({ title: '', message: '保存成功', type: 'success', duration: 2000 })
+                this.$refs.handleTemp.resetFields();
+                this.handle.dialogFormVisible = false
+                this.getList1()
+              }else{
+                this.$notify({ title: '保存失败', message: response.data, type: 'warning', duration: 2000 })
+              }
+            })
+          }
+        })
       }
     }
   }

+ 165 - 150
src/views/neckRingStatistics/neckRingOperation/index.vue

@@ -2,10 +2,10 @@
   <div class="app-container">
     <div class="table1" v-if="isTable1">
       <div class="search">
-        <el-select v-model="table1.getdataListParm.parammaps.enable" filterable placeholder="全部牧场" class="filter-item" style="width: 120px;" clearable>
-          <el-option v-for="item in table1.pastureList" :key="item.id" :label="item.name" :value="item.id" />
+        <el-select v-model="table1.parammaps.pastureid" filterable placeholder="全部牧场" class="filter-item" style="width: 120px;" clearable>
+          <el-option v-for="item in table1.pastureList" :key="item.pastureid" :label="item.pasturename" :value="item.pastureid" />
         </el-select>
-        <el-date-picker v-model="table1.getdataListParm.parammaps.date"  type="date" placeholder="选择日期" />
+        <el-date-picker v-model="table1.parammaps.inputDatetime" type="daterange"  class="filter-item" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" />
         <el-button class="successBorder" @click="handleSearch1">查询</el-button>
         <el-button class="successBorder" @click="handleRefresh1">重置</el-button>
       </div>
@@ -29,61 +29,61 @@
               <span v-else>1</span>
             </template>
           </el-table-column>
-          <el-table-column sortable label="牧场" min-width="60px" align="center" prop="filed1" />
-          <el-table-column sortable label="成母牛数" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="脖环佩戴数" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="泌乳牛未佩戴" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="干奶牛未佩戴" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="青年牛未佩戴" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="脖环工作数" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="异常脖环" min-width="60px" align="center" prop="filed2">
+          <el-table-column sortable label="牧场" min-width="60px" align="center" prop="牧场" />
+          <el-table-column sortable label="成母牛数" min-width="60px" align="center" prop="成母牛数" />
+          <el-table-column sortable label="脖环佩戴数" min-width="60px" align="center" prop="佩戴脖环数" />
+          <el-table-column sortable label="泌乳牛未佩戴" min-width="60px" align="center" prop="泌乳牛未佩戴脖环数" />
+          <el-table-column sortable label="干奶牛未佩戴" min-width="60px" align="center" prop="干奶牛未佩戴" />
+          <el-table-column sortable label="青年牛未佩戴" min-width="60px" align="center" prop="青年牛未佩戴" />
+          <el-table-column sortable label="脖环工作数" min-width="60px" align="center" prop="脖环工作数量" />
+          <el-table-column sortable label="异常脖环" min-width="60px" align="center" prop="异常脖环">
             <template slot-scope="{row}">
-              <a @click="clickCell1(row)" style="text-decoration: underline;color: #0000FF;">{{ row.filed2 }}</a>
+              <a @click="clickCell1(row)" style="text-decoration: underline;color: #0000FF;">{{ row['异常脖环数量'] }}</a>
             </template>
           </el-table-column>
-          <el-table-column sortable label="安装接收器数量" min-width="60px" align="center" prop="filed2">
+          <el-table-column sortable label="安装接收器数量" min-width="60px" align="center" prop="接收器安装数量">
             <template slot-scope="{row}">
-              <a @click="clickCell2(row)" style="text-decoration: underline;color: #0000FF;">{{ row.filed2 }}</a>
+              <a @click="clickCell2(row)" style="text-decoration: underline;color: #0000FF;">{{ row['接收器安装数量'] }}</a>
             </template>
           </el-table-column>
 
-          <el-table-column sortable label="接收器工作数量" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="8小时接收率" min-width="60px" align="center" prop="filed2">
+          <el-table-column sortable label="接收器工作数量" min-width="60px" align="center" prop="接收器工作数量" />
+          <el-table-column sortable label="8小时接收率" min-width="60px" align="center" prop="8小时接收率">
             <template slot-scope="{row}">
-              <a @click="clickCell3(row)" style="text-decoration: underline;color: #0000FF;">{{ row.filed2 }}</a>
+              <a @click="clickCell3(row)" style="text-decoration: underline;color: #0000FF;">{{ row['8小时接收率'] }}</a>
             </template>
           </el-table-column>
-          <el-table-column sortable label="脖环数据丢失头数" min-width="60px" align="center" prop="filed2">
+          <el-table-column sortable label="脖环数据丢失头数" min-width="60px" align="center" prop="记录丢失牛只数">
             <template slot-scope="{row}">
-              <a @click="clickCell4(row)" style="text-decoration: underline;color: #0000FF;">{{ row.filed2 }}</a>
+              <a @click="clickCell4(row)" style="text-decoration: underline;color: #0000FF;">{{ row['记录丢失牛只数'] }}</a>
             </template>
           </el-table-column>
-          <el-table-column sortable label="脖环数据丢失数量" min-width="60px" align="center" prop="filed2">
+          <el-table-column sortable label="脖环数据丢失数量" min-width="60px" align="center" prop="丢失记录数">
             <template slot-scope="{row}">
-              <a @click="clickCell5(row)" style="text-decoration: underline;color: #0000FF;">{{ row.filed2 }}</a>
+              <a @click="clickCell5(row)" style="text-decoration: underline;color: #0000FF;">{{ row['丢失记录数'] }}</a>
             </template>
           </el-table-column>
-          <el-table-column sortable label="统计时间" min-width="60px" align="center" prop="filed14" />
+          <el-table-column sortable label="统计时间" min-width="60px" align="center" prop="统计时间" />
         </el-table>
-        <pagination v-show="table1.total>0" :total="table1.total" :page.sync="table1.getdataListParm.offset" :limit.sync="table1.getdataListParm.pagecount" @pagination="getList1" />
+        <pagination v-show="table1.total>0" :total="table1.total" :page.sync="table1.offset" :limit.sync="table1.pagecount" @pagination="getList1" />
       </div>
     </div>
 
     <!-- 异常脖环 -->
     <div class="table2" v-if="isTable2">
       <div class="search">
-        <el-select v-model="table2.getdataListParm.parammaps.enable" filterable placeholder="异常类型" class="filter-item" style="width: 120px;" clearable>
+        <el-select v-model="table2.parammaps.reason" filterable placeholder="异常类型" class="filter-item" style="width: 120px;" clearable>
           <el-option v-for="item in table2.exceptionTypeList" :key="item.id" :label="item.name" :value="item.id" />
         </el-select>
-        <el-select v-model="table2.getdataListParm.parammaps.enable" filterable placeholder="检查结果" class="filter-item" style="width: 120px;" clearable>
+        <el-select v-model="table2.parammaps.measure" filterable placeholder="检查结果" class="filter-item" style="width: 120px;" clearable>
           <el-option v-for="item in table2.inspectionResultsList" :key="item.id" :label="item.name" :value="item.id" />
         </el-select>
         <el-button class="successBorder" @click="handleSearch2">查询</el-button>
         <el-button class="successBorder" @click="handleRefresh2">重置</el-button>
       </div>
       <div class="top">
-        牧场:{{temp.filed1}}<br/>
-        日期:{{temp.filed14}}<br/>
+        牧场:{{temp['牧场']}}<br/>
+        日期:{{temp['统计时间']}}<br/>
       </div>
       <div class="table">
         <el-table
@@ -105,18 +105,18 @@
               <span v-else>1</span>
             </template>
           </el-table-column>
-          <el-table-column sortable label="牛号" min-width="60px" align="center" prop="filed1" />
-          <el-table-column sortable label="脖环号" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="脖环佩戴日期" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="牛舍号" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="异常类型" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="接收数量" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="高活动量数量" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="电池电量" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="检查结果" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="最后统计时间" min-width="60px" align="center" prop="filed14" />
+          <el-table-column sortable label="牛号" min-width="60px" align="center" prop="COW_NUM" />
+          <el-table-column sortable label="脖环号" min-width="60px" align="center" prop="REGIST_NUM_2" />
+          <el-table-column sortable label="脖环佩戴日期" min-width="60px" align="center" prop="REGIST_NUM_2DATE" />
+          <el-table-column sortable label="牛舍号" min-width="60px" align="center" prop="HOUSE_NAME" />
+          <el-table-column sortable label="异常类型" min-width="60px" align="center" prop="reason" />
+          <el-table-column sortable label="接收数量" min-width="60px" align="center" prop="lose" />
+          <el-table-column sortable label="高活动量数量" min-width="60px" align="center" prop=" loseh" />
+          <el-table-column sortable label="电池电量" min-width="60px" align="center" prop="voltage" />
+          <el-table-column sortable label="检查结果" min-width="60px" align="center" prop="measure" />
+          <el-table-column sortable label="最后统计时间" min-width="60px" align="center" prop="createtime" />
         </el-table>
-        <pagination v-show="table2.total>=0" :total="table2.total" :page.sync="table2.getdataListParm.offset" :limit.sync="table2.getdataListParm.pagecount" @pagination="getList2" />
+        <pagination v-show="table2.total>=0" :total="table2.total" :page.sync="table2.offset" :limit.sync="table2.pagecount" @pagination="getList2()" />
       </div>
       <el-button class="export" style="float: right;margin-top: 10px;" @click="goBack()">返回</el-button>
     </div>
@@ -124,8 +124,8 @@
     <!-- 安装接收器数量 -->
     <div class="table3" v-if="isTable3">
       <div class="top">
-        牧场:{{temp.filed1}}<br/>
-        日期:{{temp.filed14}}<br/>
+       牧场:{{temp['牧场']}}<br/>
+       日期:{{temp['统计时间']}}<br/>
       </div>
       <div class="table">
         <el-table
@@ -147,21 +147,21 @@
               <span v-else>1</span>
             </template>
           </el-table-column>
-          <el-table-column sortable label="牛舍号" min-width="60px" align="center" prop="filed1" />
+          <el-table-column sortable label="牛舍号" min-width="60px" align="center" prop="PHYSICALNAME" />
           <el-table-column sortable label="接收器编号" min-width="60px" align="center" prop="filed2" />
           <el-table-column sortable label="接收器定位" min-width="60px" align="center" prop="filed2">
             <template slot-scope="{row}">
               <a @click="clickReceiverPositioning(row)" style="text-decoration: underline;color: #0000FF;">{{ row.filed2 }}</a>
             </template>
           </el-table-column>
-          <el-table-column sortable label="2小时接收数量" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="4小时接收数量" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="6小时接收数量" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="8小时接收率" min-width="60px" align="center" prop="filed14" />
-          <el-table-column sortable label="24小时接收率" min-width="60px" align="center" prop="filed14" />
-          <el-table-column sortable label="最后统计时间" min-width="60px" align="center" prop="filed14" />
+          <el-table-column sortable label="2小时接收率" min-width="60px" align="center" prop="p2h" />
+          <el-table-column sortable label="4小时接收率" min-width="60px" align="center" prop="p4h" />
+          <el-table-column sortable label="6小时接收率" min-width="60px" align="center" prop="p6h" />
+          <el-table-column sortable label="8小时接收率" min-width="60px" align="center" prop="p8h" />
+          <el-table-column sortable label="24小时接收率" min-width="60px" align="center" prop="p24h" />
+          <el-table-column sortable label="最后统计时间" min-width="60px" align="center" prop="createtime" />
         </el-table>
-        <pagination v-show="table3.total>=0" :total="table3.total" :page.sync="table3.getdataListParm.offset" :limit.sync="table3.getdataListParm.pagecount" @pagination="getList3" />
+        <pagination v-show="table3.total>=0" :total="table3.total" :page.sync="table3.offset" :limit.sync="table3.pagecount" @pagination="getList3()" />
       </div>
       <el-button class="export" style="float: right;margin-top: 10px;" @click="goBack()">返回</el-button>
 
@@ -184,8 +184,8 @@
     <!-- 8小时接收率 -->
     <div class="table4" v-if="isTable4">
       <div class="top">
-        牧场:{{temp.filed1}}<br/>
-        日期:{{temp.filed14}}<br/>
+        牧场:{{temp['牧场']}}<br/>
+        日期:{{temp['统计时间']}}<br/>
       </div>
       <div class="table">
         <el-table
@@ -207,14 +207,14 @@
               <span v-else>1</span>
             </template>
           </el-table-column>
-          <el-table-column sortable label="牛舍名称" min-width="60px" align="center" prop="filed1" />
-          <el-table-column sortable label="2小时接收率" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="4小时接收率" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="6小时接收率" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="8小时接收率" min-width="60px" align="center" prop="filed14" />
-          <el-table-column sortable label="最后统计时间" min-width="60px" align="center" prop="filed14" />
+          <el-table-column sortable label="牛舍名称" min-width="60px" align="center" prop="HOUSE_NAME" />
+          <el-table-column sortable label="2小时接收率" min-width="60px" align="center" prop="p2h" />
+          <el-table-column sortable label="4小时接收率" min-width="60px" align="center" prop="p4h" />
+          <el-table-column sortable label="6小时接收率" min-width="60px" align="center" prop="p6h" />
+          <el-table-column sortable label="8小时接收率" min-width="60px" align="center" prop="p8h" />
+          <el-table-column sortable label="最后统计时间" min-width="60px" align="center" prop="createtime" />
         </el-table>
-        <pagination v-show="table4.total>0" :total="table4.total" :page.sync="table4.getdataListParm.offset" :limit.sync="table4.getdataListParm.pagecount" @pagination="getList4" />
+        <pagination v-show="table4.total>0" :total="table4.total" :page.sync="table4.offset" :limit.sync="table4.pagecount" @pagination="getList4()" />
       </div>
       <el-button class="export" style="float: right;margin-top: 10px;" @click="goBack()">返回</el-button>
     </div>
@@ -222,8 +222,8 @@
     <!-- 脖环数据丢失头数 -->
     <div class="table5" v-if="isTable5">
       <div class="top">
-        牧场:{{temp.filed1}}<br/>
-        日期:{{temp.filed14}}<br/>
+        牧场:{{temp['牧场']}}<br/>
+        日期:{{temp['统计时间']}}<br/>
       </div>
       <div class="table">
         <el-table
@@ -245,15 +245,15 @@
               <span v-else>1</span>
             </template>
           </el-table-column>
-          <el-table-column sortable label="牛号" min-width="60px" align="center" prop="filed1" />
-          <el-table-column sortable label="脖环号" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="脖环佩戴日期" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="牛舍号" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="丢失数据条数" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="电池电量" min-width="60px" align="center" prop="filed2" />
-          <el-table-column sortable label="最后统计时间" min-width="60px" align="center" prop="filed14" />
+          <el-table-column sortable label="牛号" min-width="60px" align="center" prop="COW_NUM" />
+          <el-table-column sortable label="脖环号" min-width="60px" align="center" prop="REGIST_NUM_2" />
+          <el-table-column sortable label="脖环佩戴日期" min-width="60px" align="center" prop="REGIST_NUM_2DATE" />
+          <el-table-column sortable label="牛舍号" min-width="60px" align="center" prop="HOUSE_NAME" />
+          <el-table-column sortable label="丢失数据条数" min-width="60px" align="center" prop="lose" />
+          <el-table-column sortable label="电池电量" min-width="60px" align="center" prop="voltage" />
+          <el-table-column sortable label="最后统计时间" min-width="60px" align="center" prop="createtime" />
         </el-table>
-        <pagination v-show="table5.total>0" :total="table5.total" :page.sync="table5.getdataListParm.offset" :limit.sync="table5.getdataListParm.pagecount" @pagination="getList5" />
+        <pagination v-show="table5.total>0" :total="table5.total" :page.sync="table5.offset" :limit.sync="table5.pagecount" @pagination="getList5()" />
       </div>
       <el-button class="export" style="float: right;margin-top: 10px;" @click="goBack()">返回</el-button>
     </div>
@@ -261,8 +261,8 @@
     <!-- 脖环数据丢失数量 -->
       <div class="table6" v-if="isTable6">
         <div class="top">
-          牧场:{{temp.filed1}}<br/>
-          日期:{{temp.filed14}}<br/>
+         牧场:{{temp['牧场']}}<br/>
+         日期:{{temp['统计时间']}}<br/>
         </div>
         <div class="table">
           <el-table
@@ -284,15 +284,14 @@
                 <span v-else>1</span>
               </template>
             </el-table-column>
-            <el-table-column sortable label="牛号" min-width="60px" align="center" prop="filed1" />
-            <el-table-column sortable label="脖环号" min-width="60px" align="center" prop="filed2" />
-            <el-table-column sortable label="脖环佩戴日期" min-width="60px" align="center" prop="filed2" />
-            <el-table-column sortable label="牛舍号" min-width="60px" align="center" prop="filed2" />
-            <el-table-column sortable label="丢失数据条数" min-width="60px" align="center" prop="filed2" />
-            <el-table-column sortable label="电池电量" min-width="60px" align="center" prop="filed2" />
-            <el-table-column sortable label="最后统计时间" min-width="60px" align="center" prop="filed14" />
+            <el-table-column sortable label="牛号" min-width="60px" align="center" prop="COW_NUM" />
+            <el-table-column sortable label="脖环号" min-width="60px" align="center" prop="REGIST_NUM_2" />
+            <el-table-column sortable label="脖环佩戴日期" min-width="60px" align="center" prop="REGIST_NUM_2DATE" />
+            <el-table-column sortable label="牛舍号" min-width="60px" align="center" prop="HOUSE_NAME" />
+            <el-table-column sortable label="电池电量" min-width="60px" align="center" prop="voltage" />
+            <el-table-column sortable label="最后统计时间" min-width="60px" align="center" prop="createtime" />
           </el-table>
-          <pagination v-show="table6.total>0" :total="table6.total" :page.sync="table6.getdataListParm.offset" :limit.sync="table6.getdataListParm.pagecount" @pagination="getList6" />
+          <pagination v-show="table6.total>0" :total="table6.total" :page.sync="table6.offset" :limit.sync="table6.pagecount" @pagination="getList6" />
         </div>
         <el-button class="export" style="float: right;margin-top: 10px;" @click="goBack()">返回</el-button>
       </div>
@@ -302,7 +301,8 @@
 
 <script>
   import Pagination from '@/components/Pagination'
-  import { postJson } from '@/api/common'
+  import { postJson,getJson } from '@/api/common'
+  import { parseTime } from '@/utils/index.js'
   import Cookies from 'js-cookie'
   export default {
     name: 'NeckRingOperation',
@@ -310,62 +310,43 @@
     data() {
       return {
         table1:{
-          pastureList:[{id:'1',name:'牧场1'},{id:'2',name:'牧场2'}],
-          getdataListParm: {
-            name: 'getDriverList', page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')), returntype: 'Map',
-            parammaps: { pastureid: '', date:'' }
-          },
-          tableKey: 0, list: [], total: 0, listLoading: true
+          pastureList:[],
+          page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')),
+          parammaps: { pastureid:'',inputDatetime:'',startdate:'',enddate:'' },
+          tableKey: 0, list: [], total: 0, listLoading: false
         },
         // 异常脖环
         table2:{
-          exceptionTypeList:[{id:'1',name:'无信号'},{id:'2',name:'接收少'}],
-          inspectionResultsList:[{id:'1',name:'牛只不在信号范围内'},{id:'2',name:'无脖环'}],
-          getdataListParm: {
-            name: 'getDriverList', page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')), returntype: 'Map',
-            parammaps: { pastureid: '', date:'' }
-          },
-          tableKey: 0, list: [], total: 0, listLoading: true
+          exceptionTypeList:[{id:-1,name:'疑似脱落'},{id:1,name:'无信号'},{id:2,name:'接收少'},{id:3,name:'电量低'},{id:4,name:'数据延迟'},{id:5,name:'活动量低'},{id:6,name:'数据丢失'},{id:7,name:'数据丢失明细'}],
+          inspectionResultsList:[{id:0,name:'信号范围之外'},{id:1,name:'更换'}],
+          page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')),
+          parammaps: { reason:'',measure:''},
+          tableKey: 0, list: [], total: 0, listLoading: false
         },
         // 安装接收器数量
         table3:{
-          exceptionTypeList:[{id:'1',name:'无信号'},{id:'2',name:'接收少'}],
-          inspectionResultsList:[{id:'1',name:'牛只不在信号范围内'},{id:'2',name:'无脖环'}],
-          getdataListParm: {
-            name: 'getDriverList', page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')), returntype: 'Map',
-            parammaps: { pastureid: '', date:'' }
-          },
-          tableKey: 0, list: [], total: 0, listLoading: true
+          page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')),
+          parammaps: {},
+          tableKey: 0, list: [], total: 0, listLoading: false
         },
+
         // 8小时接收率
         table4:{
-          exceptionTypeList:[{id:'1',name:'无信号'},{id:'2',name:'接收少'}],
-          inspectionResultsList:[{id:'1',name:'牛只不在信号范围内'},{id:'2',name:'无脖环'}],
-          getdataListParm: {
-            name: 'getDriverList', page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')), returntype: 'Map',
-            parammaps: { pastureid: '', date:'' }
-          },
-          tableKey: 0, list: [], total: 0, listLoading: true
+          page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')),
+          parammaps: {},
+          tableKey: 0, list: [], total: 0, listLoading: false
         },
         // 脖环数据丢失头数
         table5:{
-          exceptionTypeList:[{id:'1',name:'无信号'},{id:'2',name:'接收少'}],
-          inspectionResultsList:[{id:'1',name:'牛只不在信号范围内'},{id:'2',name:'无脖环'}],
-          getdataListParm: {
-            name: 'getDriverList', page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')), returntype: 'Map',
-            parammaps: { pastureid: '', date:'' }
-          },
-          tableKey: 0, list: [], total: 0, listLoading: true
+          page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')),
+          parammaps: {},
+          tableKey: 0, list: [], total: 0, listLoading: false
         },
         // 脖环数据丢失数量
         table6:{
-          exceptionTypeList:[{id:'1',name:'无信号'},{id:'2',name:'接收少'}],
-          inspectionResultsList:[{id:'1',name:'牛只不在信号范围内'},{id:'2',name:'无脖环'}],
-          getdataListParm: {
-            name: 'getDriverList', page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')), returntype: 'Map',
-            parammaps: { pastureid: '', date:'' }
-          },
-          tableKey: 0, list: [], total: 0, listLoading: true
+          page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')),
+          parammaps: {},
+          tableKey: 0, list: [], total: 0, listLoading: false
         },
         temp:{},
         isTable1:true,
@@ -390,16 +371,38 @@
     },
     created() {
       this.getList1()
+      this.getPastureList()
     },
     methods: {
+      getPastureList(){
+        let data = 'index=' + 1
+        + '&pagesize=' + ''
+        let url = 'public/pasture?'
+        getJson(url,data).then(response => {
+          if (response.code == 200) {
+            this.table1.pastureList = response.data.list
+          } else {
+            this.table1.pastureList = []
+          }
+        })
+      },
       getList1() {
         this.table1.listLoading = true
-        let data = this.table1.getdataListParm
+        if(this.table1.parammaps.inputDatetime !== '' && this.table1.parammaps.inputDatetime !== null){
+          this.table1.parammaps.startdate = parseTime(this.table1.parammaps.inputDatetime[0],'{y}-{m}-{d}')
+          this.table1.parammaps.enddate = parseTime(this.table1.parammaps.inputDatetime[1],'{y}-{m}-{d}')
+        }else{
+          this.table1.parammaps.startdate = ''
+          this.table1.parammaps.enddate = ''
+          this.table1.parammaps.inputDatetime = ''
+        }
+        let data = {
+          name:'getOperation',
+          page: this.table1.page, offset: this.table1.offset, pagecount: this.table1.pagecount, returntype: 'Map',
+          parammaps: this.table1.parammaps
+        }
         let url = 'authdata/GetDataByName'
-        postJson(url,data).then(response => {
-          response.data.list = [{
-            'filed1':'牧场A','filed2':'123','filed14':'2022-06-22 16:53:42'
-          }]
+         postJson(url,data).then(response => {
           if (response.data.list !== null) {
             console.log('table数据', response.data.list)
             this.table1.list = response.data.list
@@ -415,12 +418,14 @@
         })
       },
       handleSearch1(){
-        this.table1.getdataListParm.offset = 1
-        this.getList2()
+        this.table1.offset = 1
+        this.getList1()
       },
       handleRefresh1(){
-        this.table1.getdataListParm.offset = 1
-        this.getList2()
+        this.table1.offset = 1
+        this.table1.parammaps.pastureid = ''
+        this.table1.parammaps.inputDatetime = ''
+        this.getList1()
       },
       clickCell1(row){
         //异常脖环
@@ -480,12 +485,14 @@
       //异常脖环
       getList2() {
         this.table2.listLoading = true
-        let data = this.table2.getdataListParm
+        this.table2.parammaps.pastureid = this.temp.FARM_UUID
+        let data = {
+          name:'getAbnormal',
+          page: this.table2.page, offset: this.table2.offset, pagecount: this.table2.pagecount, returntype: 'Map',
+          parammaps: this.table2.parammaps
+        }
         let url = 'authdata/GetDataByName'
         postJson(url,data).then(response => {
-          response.data.list = [{
-            'filed1':'牧场A','filed2':'123','filed14':'2022-06-22 16:53:42'
-          }]
           if (response.data.list !== null) {
             console.log('table数据', response.data.list)
             this.table2.list = response.data.list
@@ -501,22 +508,24 @@
         })
       },
       handleSearch2(){
-        this.table2.getdataListParm.offset = 1
+        this.table2.offset = 1
         this.getList2()
       },
       handleRefresh2(){
-        this.table2.getdataListParm.offset = 1
+        this.table2.offset = 1
         this.getList2()
       },
       // 安装接收器数量
       getList3() {
         this.table3.listLoading = true
-        let data = this.table3.getdataListParm
+        this.table3.parammaps.pastureid = this.temp.FARM_UUID
+        let data = {
+          name:'getNumberOfReceivers',
+          page: this.table3.page, offset: this.table3.offset, pagecount: this.table3.pagecount, returntype: 'Map',
+          parammaps: this.table3.parammaps
+        }
         let url = 'authdata/GetDataByName'
         postJson(url,data).then(response => {
-          response.data.list = [{
-            'filed1':'牧场A','filed2':'123','filed14':'2022-06-22 16:53:42'
-          }]
           if (response.data.list !== null) {
             console.log('table数据', response.data.list)
             this.table3.list = response.data.list
@@ -560,12 +569,14 @@
       // 8小时接收率
       getList4() {
         this.table4.listLoading = true
-        let data = this.table4.getdataListParm
+        this.table4.parammaps.pastureid = this.temp.FARM_UUID
+        let data = {
+          name:'getReceiverReceptionRate',
+          page: this.table4.page, offset: this.table4.offset, pagecount: this.table4.pagecount, returntype: 'Map',
+          parammaps: this.table4.parammaps
+        }
         let url = 'authdata/GetDataByName'
         postJson(url,data).then(response => {
-          response.data.list = [{
-            'filed1':'牧场A','filed2':'123','filed14':'2022-06-22 16:53:42'
-          }]
           if (response.data.list !== null) {
             console.log('table数据', response.data.list)
             this.table4.list = response.data.list
@@ -583,12 +594,14 @@
       // 脖环数据丢失头数
       getList5() {
         this.table5.listLoading = true
-        let data = this.table5.getdataListParm
+        this.table5.parammaps.pastureid = this.temp.FARM_UUID
+        let data = {
+          name:'getLoseCattleNumbers',
+          page: this.table5.page, offset: this.table5.offset, pagecount: this.table5.pagecount, returntype: 'Map',
+          parammaps: this.table5.parammaps
+        }
         let url = 'authdata/GetDataByName'
         postJson(url,data).then(response => {
-          response.data.list = [{
-            'filed1':'牧场A','filed2':'123','filed14':'2022-06-22 16:53:42'
-          }]
           if (response.data.list !== null) {
             console.log('table数据', response.data.list)
             this.table5.list = response.data.list
@@ -607,12 +620,14 @@
       // 脖环数据丢失数量
       getList6() {
         this.table6.listLoading = true
-        let data = this.table6.getdataListParm
+        this.table6.parammaps.pastureid = this.temp.FARM_UUID
+        let data = {
+          name:'getMissingRecord',
+          page: this.table6.page, offset: this.table6.offset, pagecount: this.table6.pagecount, returntype: 'Map',
+          parammaps: this.table6.parammaps
+        }
         let url = 'authdata/GetDataByName'
         postJson(url,data).then(response => {
-          response.data.list = [{
-            'filed1':'牧场A','filed2':'123','filed14':'2022-06-22 16:53:42'
-          }]
           if (response.data.list !== null) {
             console.log('table数据', response.data.list)
             this.table6.list = response.data.list

+ 51 - 200
src/views/neckRingStatistics/use/index.vue

@@ -2,20 +2,12 @@
   <div class="app-container">
     <div class="table1">
       <div class="search">
-        <el-select v-model="table1.getdataListParm.parammaps.enable" filterable placeholder="全部牧场" class="filter-item" style="width: 150px;float: left;" clearable>
-          <el-option v-for="item in table1.pastureList" :key="item.id" :label="item.name" :value="item.id" />
+        <el-select v-model="table1.parammaps.pastureid" filterable placeholder="全部牧场" class="filter-item" style="width: 150px;" clearable>
+          <el-option v-for="item in table1.pastureList" :key="item.pastureid" :label="item.pasturename" :value="item.pastureid" />
         </el-select>
-        <el-date-picker style="float: left;" v-model="table1.getdataListParm.parammaps.inputDatetime" type="daterange"  class="filter-item" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" />
-        <el-select v-model="table1.getdataListParm.parammaps.enable" filterable placeholder="类型" class="filter-item" style="float: left;width: 150px;" clearable>
-          <el-option v-for="item in table1.typeList" :key="item.id" :label="item.name" :value="item.id" />
-        </el-select>
-        <el-button style="float: left;" class="successBorder" @click="handleSearch1">查询</el-button>
-        <el-button style="float: left;" class="successBorder" @click="handleRefresh1">重置</el-button>
-        <el-upload style="float: left;margin-left: 10px;" class="filter-item" :headers="headers" :data="uploadData" :action="uploadExcelUrl" :show-file-list="false" :before-upload="beforeImport" :on-success="handleImportSuccess">
-          <el-button class="filter-item import" icon="el-icon-download" style="float: left;">导入</el-button>
-        </el-upload>
-        <el-button class="filter-item export" icon="el-icon-upload2" @click="handleDownload" style="float: left;">导出</el-button>
-        <el-button class="filter-item export" icon="el-icon-upload2" @click="handleDownloadTemp" style="float: left;">导入模板下载</el-button>
+        <el-date-picker v-model="table1.parammaps.inputDatetime" type="daterange"  class="filter-item" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" />
+        <el-button class="successBorder" @click="handleSearch1">查询</el-button>
+        <el-button class="successBorder" @click="handleRefresh1">重置</el-button>
       </div>
       <div class="table">
         <el-table
@@ -37,100 +29,39 @@
               <span v-else>1</span>
             </template>
           </el-table-column>
-          <el-table-column label="牧场名称" min-width="60px" align="center" prop="filed1" />
-          <el-table-column label="数量" min-width="60px" align="center" prop="filed2">
-            <template slot-scope="{row}">
-              <a @click="clickQuantity(row)" style="text-decoration: underline;color: #0000FF;">{{row.filed2}}</a>
-            </template>
-          </el-table-column>
-          <el-table-column label="类型" min-width="60px" align="center" prop="filed2" />
-          <el-table-column label="日期" min-width="60px" align="center" prop="filed2" />
-          <el-table-column label="导入时间" min-width="60px" align="center" prop="filed14" />
+          <el-table-column label="牧场" min-width="60px" align="center" prop="牧场" />
+          <el-table-column label="购买数" min-width="60px" align="center" prop="购买数" />
+          <el-table-column label="佩戴数" min-width="60px" align="center" prop="佩戴数" />
+          <el-table-column label="摘除数" min-width="60px" align="center" prop="摘除数" />
+          <el-table-column label="未使用数" min-width="60px" align="center" prop="未使用数" />
+          <el-table-column label="召回数" min-width="60px" align="center" prop="召回数" />
         </el-table>
-        <pagination v-show="table1.total>0" :total="table1.total" :page.sync="table1.getdataListParm.offset" :limit.sync="table1.getdataListParm.pagecount" @pagination="getList1" />
+        <pagination v-show="table1.total>0" :total="table1.total" :page.sync="table1.offset" :limit.sync="table1.pagecount" @pagination="getList1" />
       </div>
     </div>
-    <!-- 数量 -->
-    <el-dialog  :visible.sync="quantity.dialogFormVisible" :close-on-click-modal="false" width="50%">
-      <template slot="title">
-        <div class="avue-crud__dialog__header">
-          <span class="el-dialog__title">
-            <span style="display:inline-block;width:3px;height:20px;margin-right:5px; float: left;margin-top:2px" />
-            {{ textMap[quantity.dialogStatus] }}
-          </span>
-          <span style="margin-right: 100px;">导入时间:{{quantity.temp.filed14}}</span>
-        </div>
-      </template>
-      <div class="quantity">
-        <el-table
-          :key="quantity.table1.tableKey"
-          v-loading="quantity.table1.listLoading"
-          element-loading-text="给我一点时间"
-          :data="quantity.table1.list"
-          border
-          fit
-          highlight-current-row
-          style="width: 100%;"
-          :row-style="rowStyle"
-          :cell-style="cellStyle"
-          class="elTable table-fixed"
-        >
-          <el-table-column label="序号" align="center" type="index" width="50px">
-            <template slot-scope="scope">
-              <span v-if="quantity.table1.pageNum">{{ scope.$index + (quantity.table1.pageNum-1) * quantity.table1.pageSize + 1 }}</span>
-              <span v-else>1</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="脖环号" min-width="60px" align="center" prop="filed1" />
-          <el-table-column label="卖出日期" min-width="60px" align="center" prop="filed2" />
-          <el-table-column label="日期" min-width="60px" align="center" prop="filed2" />
-          <el-table-column label="导入时间" min-width="60px" align="center" prop="filed2" />
-        </el-table>
-        <pagination v-show="table1.total>0" :total="table1.total" :page.sync="table1.getdataListParm.offset" :limit.sync="table1.getdataListParm.pagecount" @pagination="getList1" />
-      </div>
-      <div slot="footer" class="dialog-footer" style="bottom: 10px;">
-        <el-button class="cancelClose1" @click="quantity.dialogFormVisible = false; ">关闭</el-button>
-      </div>
-    </el-dialog>
   </div>
 </template>
 
 <script>
   import Pagination from '@/components/Pagination'
-  import { postJson } from '@/api/common'
+  import { postJson,getJson  } from '@/api/common'
   import Cookies from 'js-cookie'
   import axios from 'axios'
   import { getToken } from '@/utils/auth'
   import xlsx from 'xlsx'
-  import { upload } from '@/utils/index.js'
+  import { upload,parseTime } from '@/utils/index.js'
   export default {
     name: 'Use',
     components: { Pagination },
     data() {
       return {
         table1:{
-          pastureList:[{id:'1',name:'牧场1'},{id:'2',name:'牧场2'}],
-          typeList:[{id:'1',name:'类型1'},{id:'2',name:'类型2'}],
-          getdataListParm: {
-            name: 'getDriverList', page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')), returntype: 'Map',
-            parammaps: { pastureid: '', date:'' }
-          },
-          tableKey: 0, list: [], total: 0, listLoading: true
-        },
-        // 数量
-        quantity:{
-          dialogStatus: '',
-          dialogFormVisible: false,
-          rules:{},
-          temp:{},
-          table1:{
-            getdataListParm: {
-              name: 'getDriverList', page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')), returntype: 'Map',
-              parammaps: { pastureid: '', date:'' }
-            },
-            tableKey: 0, list: [], total: 0, listLoading: true
-          },
+          pastureList:[],
+          page: 1, offset: 1, pagecount: parseInt(Cookies.get('pageCount')),
+          parammaps: { pastureid:'',inputDatetime:'',startdate:'',enddate:'' },
+          tableKey: 0, list: [], total: 0, listLoading: false
         },
+
         isokDisable:false,
         textMap: {
           quantityTxt: '售卖数量'
@@ -139,45 +70,42 @@
         cellStyle: { padding: 0 + 'px' }
       }
     },
-    computed: {
-      // 设置请求头
-      headers() {
-        return {
-          token: getToken()
-        }
-      },
-      uploadData() {
-        return {
-          name: 'checkFeed,checkProviderRK,checkcontractcode,checkcontractcodePrice,insertFeedlaidUpload,insertFeedstorageLaidUpload',
-          importParams: '入库日期,送货单编号,饲料名称,供应商,合同编号,入库重量(kg),单价(元),总价(元),毛重(kg),皮重(kg),许可证号,批号,创建人,备注',
-          sheetname: 'Sheet1',
-          // 登录牧场
-          pastureid: Cookies.get('pastureid'),
-          // 日期参数
-          dateParams: '入库日期',
-          // 必填参数
-          requiredParams: '入库日期,饲料名称,入库重量(kg),单价(元)',
-          // 为数值的参数
-          numParams: '入库重量(kg),单价(元),总价(元),毛重(kg),皮重(kg)'
-        }
-      },
-      // 设置上传地址
-      uploadExcelUrl() {
-        return process.env.VUE_APP_BASE_API + 'authdata/ImportExcel'
-      }
-    },
+
     created() {
       this.getList1()
+      this.getPastureList()
     },
     methods: {
+      getPastureList(){
+        let data = 'index=' + 1
+        + '&pagesize=' + ''
+        let url = 'public/pasture?'
+        getJson(url,data).then(response => {
+          if (response.code == 200) {
+            this.table1.pastureList = response.data.list
+          } else {
+            this.table1.pastureList = []
+          }
+        })
+      },
       getList1() {
         this.table1.listLoading = true
-        let data = this.table1.getdataListParm
+        let startdate = ''
+        let enddate = ''
+        if(this.table1.parammaps.inputDatetime !== '' && this.table1.parammaps.inputDatetime !== null){
+          startdate = parseTime(this.table1.parammaps.inputDatetime[0],'{y}-{m}-{d}')
+          enddate = parseTime(this.table1.parammaps.inputDatetime[1],'{y}-{m}-{d}')
+        }else{
+          startdate = ''
+          enddate = ''
+        }
+        let data = {
+          name:'getUseTj',
+          page: this.table1.page, offset: this.table1.offset, pagecount: this.table1.pagecount, returntype: 'Map',
+          parammaps: this.table1.parammaps
+        }
         let url = 'authdata/GetDataByName'
-        postJson(url,data).then(response => {
-          response.data.list = [{
-            'filed1':'牧场A','filed2':'123','filed14':'2022-06-22 16:53:42'
-          }]
+         postJson(url,data).then(response => {
           if (response.data.list !== null) {
             console.log('table数据', response.data.list)
             this.table1.list = response.data.list
@@ -193,91 +121,14 @@
         })
       },
       handleSearch1(){
-        this.table1.getdataListParm.offset = 1
+        this.table1.offset = 1
         this.getList1()
       },
       handleRefresh1(){
-        this.table1.getdataListParm.offset = 1
+        this.table1.offset = 1
+        this.table1.parammaps = { pastureid:'',inputDatetime:'',startdate:'',enddate:'' }
         this.getList1()
       },
-      clickQuantity(row){
-        console.log('数量')
-        this.quantity.temp = Object.assign({}, row)
-        this.quantity.dialogFormVisible = true
-        this.quantity.dialogStatus = 'quantityTxt'
-        this.getQuantityList1()
-      },
-      getQuantityList1() {
-        this.quantity.table1.listLoading = true
-        let data = this.quantity.table1.getdataListParm
-        let url = 'authdata/GetDataByName'
-        postJson(url,data).then(response => {
-          response.data.list = [{
-            'filed1':'牧场A','filed2':'123','filed14':'2022-06-22 16:53:42'
-          }]
-          if (response.data.list !== null) {
-            console.log('table数据', response.data.list)
-            this.quantity.table1.list = response.data.list
-            this.quantity.table1.pageNum = response.data.pageNum
-            this.quantity.table1.pageSize = response.data.pageSize
-          } else {
-            this.quantity.table1.list = []
-          }
-          this.quantity.table1.total = response.data.total
-          setTimeout(() => {
-            this.quantity.table1.listLoading = false
-          }, 100)
-        })
-      },
-      clickhandleData(){
-         console.log('处理确认')
-      },
-      handleDownload(){
-        console.log('导出')
-      },
-      handleDownloadTemp(){
-        console.log('导入模板下载')
-      },
-      beforeImport(file) {
-        const isLt2M = file.size / 1024 / 1024 < 2
-        if (!isLt2M) {
-          this.$message.error('上传文件大小不能超过 2MB!')
-        }
-        return isLt2M
-      },
-      handleImportSuccess(res, file) {
-        this.getList()
-        if (res.msg === 'ok') {
-          this.$message({ title: '成功', message: '导入成功:' + res.data.success + '条!', type: 'success', duration: 2000 })
-          if (res.data.err_count > 0) {
-            this.$notify({ title: '失败', message: '导入失败:' + res.data.err_count + '条!', type: 'danger', duration: 2000 })
-             import('@/vendor/Export2Excel').then(excel => {
-               const list1 = res.data.result
-               const tHeader = [
-                 '入库日期', '送货单编号', '饲料名称', '供应商', '合同编号', '入库重量(kg)', '单价(元)', '总价(元)', '毛重(kg)', '皮重(kg)', '许可证号', '批号', '创建人', '创建日期', '备注', '错误信息'
-               ]
-               const filterVal = [
-                 '入库日期', '送货单编号', '饲料名称', '供应商', '合同编号', '入库重量(kg)', '单价(元)', '总价(元)', '毛重(kg)', '皮重(kg)', '许可证号', '批号', '创建人', '创建日期', '备注', 'error_msg'
-               ]
-               const data1 = this.formatJson(filterVal, list1)
-               excel.export_json_to_excel({ header: tHeader, data: data1, filename: '入库管理导入报错信息', autoWidth: true, bookType: 'xlsx' })
-             })
-          }
-        } else {
-          this.$notify({ title: '失败', message: '上传失败', type: 'danger', duration: 2000 })
-        }
-      },
-      formatJson(filterVal, jsonData) {
-        return jsonData.map(v =>
-          filterVal.map(j => {
-            if (j === 'timestamp') {
-              return parseTime(v[j])
-            } else {
-              return v[j]
-            }
-          })
-        )
-      }
     }
   }
 </script>

+ 3 - 3
src/views/systemManagement/boardEchartManagement/index.vue

@@ -540,7 +540,7 @@ export default {
       this.isokDisable = true
       setTimeout(() => {
         this.isokDisable = false
-      }, 1000)
+      }, 3000)
       this.requestParam.name = 'insertDashboard'
       this.requestParam.parammaps = this.table.temp
       PostDataByName(this.requestParam).then(response => {
@@ -688,7 +688,7 @@ export default {
       this.isokDisable = true
       setTimeout(() => {
         this.isokDisable = false
-      }, 1000)
+      }, 3000)
 
       console.log(this.table.temp)
 
@@ -765,7 +765,7 @@ export default {
       this.isokDisable = true
       setTimeout(() => {
         this.isokDisable = false
-      }, 1000)
+      }, 3000)
 
       console.log(this.table2.temp)
 

+ 3 - 3
src/views/systemManagement/boardEchartManagement2/index.vue

@@ -540,7 +540,7 @@ export default {
       this.isokDisable = true
       setTimeout(() => {
         this.isokDisable = false
-      }, 1000)
+      }, 3000)
       this.requestParam.name = 'insertDashboard'
       this.requestParam.parammaps = this.table.temp
       PostDataByName(this.requestParam).then(response => {
@@ -688,7 +688,7 @@ export default {
       this.isokDisable = true
       setTimeout(() => {
         this.isokDisable = false
-      }, 1000)
+      }, 3000)
 
       console.log(this.table.temp)
 
@@ -765,7 +765,7 @@ export default {
       this.isokDisable = true
       setTimeout(() => {
         this.isokDisable = false
-      }, 1000)
+      }, 3000)
 
       console.log(this.table2.temp)
 

+ 2 - 2
src/views/systemManagement/role/index.vue

@@ -319,7 +319,7 @@ export default {
       this.isokDisable = true
       setTimeout(() => {
         this.isokDisable = false
-      }, 1000)
+      }, 3000)
       this.requestParam.name = 'createRole'
       this.requestParam.parammaps = this.table.temp
       PostDataByName(this.requestParam).then(response => {
@@ -381,7 +381,7 @@ export default {
       this.isokDisable = true
       setTimeout(() => {
         this.isokDisable = false
-      }, 1000)
+      }, 3000)
       this.requestParam.name = 'updateRole'
       this.requestParam.parammaps = this.table.temp
       PostDataByName(this.requestParam).then(response => {

+ 2 - 2
src/views/systemManagement/user/index.vue

@@ -311,7 +311,7 @@ export default {
       this.isokDisable = true
       setTimeout(() => {
         this.isokDisable = false
-      }, 1000)
+      }, 3000)
       this.requestParam.name = 'createUser'
       this.table.temp.isgroups = Cookies.get('ispastureuse')
       this.requestParam.parammaps = this.table.temp
@@ -388,7 +388,7 @@ export default {
       this.isokDisable = true
       setTimeout(() => {
         this.isokDisable = false
-      }, 1000)
+      }, 3000)
       this.requestParam.name = 'updateUser'
       this.requestParam.parammaps = this.table.temp
       PostDataByName(this.requestParam).then(response => {