From 0e0944361a66439f7be48567c2fe6c482dd37a5c Mon Sep 17 00:00:00 2001
From: hanbaoshan <hanbaoshan@aiotlink.com>
Date: 星期一, 01 二月 2021 13:57:26 +0800
Subject: [PATCH] 朔黄转储设备相关页面更新

---
 src/pages/shuohuangMonitorAnalyze/components/transferMemo.vue         |  157 ++++++++++++++++++++--
 src/pages/shuohuangMonitorAnalyze/components/guideIndex.vue           |   56 ++++++-
 src/pages/shuohuangMonitorAnalyze/components/transferDeviceManage.vue |  133 ++++++++++++++++++
 src/pages/shuohuangMonitorAnalyze/components/memberManage.vue         |   39 +++-
 src/api/shuohuang.ts                                                  |   26 ++-
 5 files changed, 361 insertions(+), 50 deletions(-)

diff --git a/src/api/shuohuang.ts b/src/api/shuohuang.ts
index 8c60ae4..ac54af1 100644
--- a/src/api/shuohuang.ts
+++ b/src/api/shuohuang.ts
@@ -126,10 +126,22 @@
     data
   })
 
-export const uploadFile = (data:any) =>{
-  request({
-    url:'/data/api-c/user/uploadFile',
-    method:'post',
-    data
-  })
-}
+export const getTransferRecord = (query:any) => request({
+  url:'/data/api-c/saverecord/getlst',
+  method: 'get',
+  params: query
+})
+
+export const getTransferStatusList = () => request({
+  url:'/data/api-c/saverecord/getStatusList',
+  method: 'get'
+})
+export const addDevice = (data:any)=>request({
+  url:'/data/api-c/device/add',
+  method: 'post',
+  data
+})
+export const getDeviceList = ()=>request({
+  url:'/data/api-c/device/getlst',
+  method: 'get'
+})
\ No newline at end of file
diff --git a/src/pages/shuohuangMonitorAnalyze/components/guideIndex.vue b/src/pages/shuohuangMonitorAnalyze/components/guideIndex.vue
index 05e7537..6128ecf 100644
--- a/src/pages/shuohuangMonitorAnalyze/components/guideIndex.vue
+++ b/src/pages/shuohuangMonitorAnalyze/components/guideIndex.vue
@@ -124,8 +124,11 @@
               </el-select>
             </div>
             <div class="rank-list">
-              <div class="rank-item" v-for="(rankItem,index) in rankList" :key="rankItem.id" >
-                <span class="rank-index" :class="{'first':index==0,'second':index==1,'third':index==2}">{{index+1}}</span>
+              <div class="rank-item" v-for="(rankItem,index) in rankList" :key="rankItem.id">
+                <span
+                  class="rank-index"
+                  :class="{'first':index==0,'second':index==1,'third':index==2}"
+                >{{index+1}}</span>
                 <span class="name">{{rankItem.name}}</span>
                 <span class="val">{{rankItem.val}}</span>
               </div>
@@ -182,7 +185,11 @@
                 <time-shortcut @actPickerChange="irregularEventStatistic"></time-shortcut>
               </div>
               <div class="statics-content">
-                <el-radio-group v-model="irregularEventType" @change="checkIrregularEventType" size="small">
+                <el-radio-group
+                  v-model="irregularEventType"
+                  @change="checkIrregularEventType"
+                  size="small"
+                >
                   <el-radio-button label="fhdd">闃叉姢鍦版</el-radio-button>
                   <el-radio-button label="jcz">杩涘嚭绔�</el-radio-button>
                   <el-radio-button label="gfx">杩囧垎鐩�</el-radio-button>
@@ -327,11 +334,13 @@
           </div>
         </div>
       </div>
+      <JsTree :node="jsTreeNodes"></JsTree>
     </div>
   </div>
 </template>
 
 <script>
+import JsTree from '@/components/treeMenu/index';
 import timeShortcut from './timeShortcut';
 import Bar from './charts/bar';
 import Pie from './charts/pie';
@@ -339,13 +348,41 @@
 import SwipeTabs from './swipeTabs';
 import DatasetChart from './charts/dataset';
 export default {
-  components: { timeShortcut, Bar, Pie, LineChart, SwipeTabs, DatasetChart },
+  components: { timeShortcut, Bar, Pie, LineChart, SwipeTabs, DatasetChart, JsTree },
+  mounted () {
+    let tempArr = [{
+      "text": "Same but with checkboxes",
+      "children": [
+        {
+          "text": "initially selected",
+          "selected": true
+        }
+      ]
+    }];
+    for (var i = 0; i < 20; i++) {
+      tempArr[0].children.push({
+        "text": "initially open",
+        "icon": "fa fa-folder icon-state-default",
+        "opened": true,
+        "children": [
+          {
+            "text": "Another node"
+          }
+        ]
+      })
+    }
+    tempArr.forEach(node=>{
+      //if(node.children.length)
+      
+    })
+    this.jsTreeNodes = tempArr
+  },
   data () {
     return {
       //actCardTab: 'dataStatistic',
       actCardTab: 'taskStatistic',
       hidDangerTab: 'hidDanderStatistic',
-      optionsOfWeekAnalyze:{
+      optionsOfWeekAnalyze: {
         animation: false,
         grid: {
           top: 0,
@@ -720,14 +757,15 @@
           }
         ]
       },
-      taskAnalyzeCaseTableData: []
+      taskAnalyzeCaseTableData: [],
+      jsTreeNodes: [],
     }
   },
   methods: {
-    checkTabInSwipe(tab){
+    checkTabInSwipe (tab) {
       debugger
     },
-    checkIrregularEventType(type){
+    checkIrregularEventType (type) {
       debugger
     },
     taskAnalyzeCase (time) {
@@ -758,7 +796,7 @@
 
     }
   },
-  
+
 }
 </script>
 
diff --git a/src/pages/shuohuangMonitorAnalyze/components/memberManage.vue b/src/pages/shuohuangMonitorAnalyze/components/memberManage.vue
index fb52efc..2111a3e 100644
--- a/src/pages/shuohuangMonitorAnalyze/components/memberManage.vue
+++ b/src/pages/shuohuangMonitorAnalyze/components/memberManage.vue
@@ -33,11 +33,12 @@
           <el-option
             v-for="item in genders"
             :key="item.id"
-            :value="item.id"
+            :value="item.name=='鍏ㄩ儴'?'':item.name"
             :label="item.name"
           >{{item.name}}</el-option>
         </el-select>
         <el-button type="primary" size="small" @click="renderMemberTable">鏌ヨ</el-button>
+        <el-button type="primary" size="small" @click="resetFilter">閲嶇疆</el-button>
       </div>
       <div class="table-area">
         <div class="actions">
@@ -157,7 +158,7 @@
           <el-form-item label="韬唤璇佸彿:">
             <el-input v-model="memberEditForm.OwnerID" size="mini"></el-input>
           </el-form-item>
-          <el-form-item label="鎵嬫満鍙�:">
+          <el-form-item label="鎵嬫満鍙�:" prop="Tel">
             <el-input v-model="memberEditForm.Tel" size="mini"></el-input>
           </el-form-item>
           <div class="btns">
@@ -232,7 +233,6 @@
 <script>
 
 import { getShuohuangDepartTree, getOrganizeTree, getMemberList, updateMemberInfo, addMember, updateUnit, uploadMemberPic, uploadDirectory, uploadFile } from '@/api/shuohuang'
-
 export default {
   data () {
     return {
@@ -247,7 +247,7 @@
       menuLeft: 0,
       keyword: '',
       gender: '',
-      genders: [{ name: '鐢�', id: 'g0' }, { name: '濂�', id: 'g1' }],
+      genders: [{id:'g3',name:'鍏ㄩ儴'},{ name: '鐢�', id: 'g0' }, { name: '濂�', id: 'g1' }],
       tableData: [],
       multipleTableSelection: [],
       PageIndex: 1,
@@ -265,7 +265,8 @@
       memberEditFormRule: {
         Name: [{ required: true, message: '璇疯緭鍏ュ鍚�', trigger: 'change' }],
         UserName: [{ required: true, message: '璇疯緭鍏ュ鍚�', trigger: 'change' }],
-        Sex: [{ required: true, message: '璇烽�夋嫨鎬у埆', trigger: 'change' }]
+        Sex: [{ required: true, message: '璇烽�夋嫨鎬у埆', trigger: 'change' }],
+        Tel: [{ validator: this.isPhone, trigger: 'change' }],
       },
       memberPicUrl: '',
       showDemo: false,
@@ -279,6 +280,20 @@
 
   },
   methods: {
+    resetFilter(){
+      this.keyword = '';
+      this.gender = '';
+      this.renderMemberTable();
+    },
+    isPhone (rule, value, callback) {
+      if (value.trim()) {
+        var pattern = /^1[345789]\d{9}$/
+        if (pattern.test(value)) {
+          return callback()
+        }
+        return callback(new Error('杈撳叆鐨勬墜鏈哄彿閿欒'))
+      }
+    },
     nodeContextMenu (e, data, node, comp) {
       this.showMenu = true;
       this.menuTop = e.pageY;
@@ -313,7 +328,7 @@
     memberSave () {
       this.$refs['memberForm'].validate((valid) => {
         if (valid) {
-          let params = Object.assign({DeptID:this.curLeftTreeNode.id},this.memberEditForm);
+          let params = Object.assign({ DeptID: this.curLeftTreeNode.id }, this.memberEditForm);
           if (this.memberEditForm.ID) {
             updateMemberInfo(params).then(res => {
               if (res.success) {
@@ -379,7 +394,7 @@
       let _this = this;
       let params = {
         DeptID: this.deptId,
-        keyword: this.keyword,
+        Keyword: this.keyword,
         Sex: this.gender,
         PageIndex: this.PageIndex,
         PageSize: this.PageSize
@@ -398,14 +413,14 @@
     importDirectory () {
       //this.$refs['directoryInput'].files //鏂囦欢澶筸ap
       let formData = new FormData;
-      for(var file in this.$refs['directoryInput'].files){
+      for (var file in this.$refs['directoryInput'].files) {
         formData.append('files', this.$refs['directoryInput'].files[file])
       }
       //formData.append('files', this.$refs['directoryInput'].files)
 
-      uploadDirectory(formData).then(res=>{
+      uploadDirectory(formData).then(res => {
         debugger
-          
+
       })
     },
 
@@ -483,10 +498,10 @@
           return obj
         });
         this.$nextTick(() => {
-          if(!Object.keys(_this.curLeftTreeNode).length){
+          if (!Object.keys(_this.curLeftTreeNode).length) {
             _this.curLeftTreeNode = _this.treeData[0];
             _this.$refs['leftTreeNodes'].setCurrentNode(_this.treeData[0]);
-          }else{
+          } else {
             _this.$refs['leftTreeNodes'].setCurrentNode(_this.curLeftTreeNode);
           }
           _this.checkNode(_this.curLeftTreeNode);
diff --git a/src/pages/shuohuangMonitorAnalyze/components/transferDeviceManage.vue b/src/pages/shuohuangMonitorAnalyze/components/transferDeviceManage.vue
index 3665b38..5429e2b 100644
--- a/src/pages/shuohuangMonitorAnalyze/components/transferDeviceManage.vue
+++ b/src/pages/shuohuangMonitorAnalyze/components/transferDeviceManage.vue
@@ -1,6 +1,29 @@
 <template>
   <div class="transfer-device-manage">
+    <div class="header-with-tab">
+      <el-tabs v-model="actTab" @tab-click="checkTab" >
+        <el-tab-pane name="dev1" v-for="tab in devices" :key="tab">
+          <div slot="label" class="label-slot">
+            <span>{{tab.Name}}</span>
+            <span class="capsule" :class="{'online':tab.Status==0,'offline':tab.Status==1}">{{tab.Status==0?"鍦ㄧ嚎":"绂荤嚎"}}</span>
+          </div>
+        </el-tab-pane>
+        <el-tab-pane name="dev2">
+          <div slot="label" class="label-slot">
+            <span>杞偍璁惧2</span>
+            <span class="capsule offline">绂荤嚎</span>
+          </div>
+        </el-tab-pane>
+      </el-tabs>
+      <div class="btn-add-dev" @click="showAddDevice">
+        <i class="el-icon-circle-plus"></i>
+        <span>娣诲姞璁惧</span>
+      </div>
+    </div>
     <div class="general-view">
+      <div class="indicator">
+        <el-button>璁惧閲嶅惎</el-button>
+      </div>
       <div
         class="indicator"
         :class="{'lastOne':index==generalIndicators.length-1}"
@@ -16,12 +39,12 @@
     </div>
     <div class="table-area">
       <div class="filter-bar flex-box">
-        <div>
+        <!-- <div>
           <label>璁惧鍦板潃:</label>
           <div>
             <el-input v-model="deviceAddr" size="small"></el-input>
           </div>
-        </div>
+        </div> -->
         <div>
           <label>璁惧鐘舵��:</label>
           <div>
@@ -49,21 +72,75 @@
         </el-table-column>
       </el-table>
     </div>
+    <el-dialog :visible="visibleOfialogAddDev">
+      <div>
+        <p slot="title">娣诲姞璁惧</p>
+        <div class="flex-box">
+          <label>璁惧鍚嶇О锛�</label>
+          <el-input v-model="Name"></el-input>
+        </div>
+        <div class="flex-box">
+          <label>璁惧IP锛�</label>
+          <el-input v-model="IP"></el-input>
+        </div>
+        <div slot="footer" class="btns">
+          <el-button type="primary" size="small" @click="toAddDevice">纭畾</el-button>
+          <el-button size="small" @click="visibleOfialogAddDev=false">鍙栨秷</el-button>
+        </div>
+      </div>
+    </el-dialog>
   </div>
 </template>
 <script>
+import {addDevice,getDeviceList} from '@/api/shuohuang';
 export default {
-
   data () {
     return {
+      actTab: 'dev1',
+      devices: [],
       generalIndicators: [{ id: 'gz', title: '鏈夋晠闅滆澶�', val: 156 }, { id: 'zc', title: '姝e父璁惧', val: 5000 }, { id: 'dx', title: '璇诲啓涓�', val: 56 }, { id: 'kx', title: '绌洪棽涓�', val: 2000 }, { id: 'ccgz', title: '鎻掓Ы鏁呴殰', val: 1000 }],
       deviceAddr: '',
       deviceState: '',
-      tableData: []
+      tableData: [],
+      visibleOfialogAddDev: false,
+      Name:'',
+      IP:'',
     }
   },
+  mounted(){
+    this.findDeviceList();
+  },
   methods: {
-    checkSlot(row){
+    findDeviceList (){
+      getDeviceList().then(res=>{
+        debugger
+        //_this.devices = 
+      })
+    },
+    toAddDevice(){
+      let _this = this;
+      let params = {
+        Name: this.Name,
+        IP: this.IP
+      }
+      addDevice(params).then(res=>{
+        if(res.success){
+          this.$notify({
+            type:'success',
+            message: res.msg
+          })
+          _this.visibleOfialogAddDev = true;
+        }
+      })
+    },
+    showAddDevice(){
+      this.visibleOfialogAddDev = true;
+
+    },
+    checkTab (tab, event) {
+
+    },
+    checkSlot (row) {
 
     }
   }
@@ -73,6 +150,51 @@
 <style lang="scss">
 .transfer-device-manage {
   padding: 20px;
+  .el-tabs__item{
+    height: 45px;
+    line-height: 45px;
+  }
+  .el-tabs__nav-wrap::after {
+    height: 1px;
+  }
+  .header-with-tab {
+    position: relative;
+    .label-slot {
+      display: flex;
+      align-items: center;
+      padding: 0 20px;
+      font-weight: bold;
+      .capsule {
+        width: 42px;
+        height: 20px;
+        margin-left: 10px; 
+        line-height: 20px;
+        text-align: center;
+        border-radius: 20px;
+        font-size: 12px;
+        font-weight: normal;
+        color: #fff;
+        &.online{
+          background: #00a854;
+        }
+        &.offline{
+          background: #f04134;
+        }
+      }
+    }
+    .btn-add-dev {
+      cursor: pointer;
+      position: absolute;
+      right: 0;
+      top: 10px;
+      color: #1890ff;
+      font-size: 14px;
+      i {
+        padding-right: 4px;
+        font-size: 16px;
+      }
+    }
+  }
   .general-view {
     display: flex;
     padding: 30px;
@@ -119,6 +241,5 @@
       }
     }
   }
-  
 }
 </style>
\ No newline at end of file
diff --git a/src/pages/shuohuangMonitorAnalyze/components/transferMemo.vue b/src/pages/shuohuangMonitorAnalyze/components/transferMemo.vue
index 9dbc0bc..cc0bccd 100644
--- a/src/pages/shuohuangMonitorAnalyze/components/transferMemo.vue
+++ b/src/pages/shuohuangMonitorAnalyze/components/transferMemo.vue
@@ -3,55 +3,177 @@
     <div class="filter-bar flex-box">
       <div>
         <label>鎿嶄綔鏃堕棿:</label>
-        <div></div>
+        <el-date-picker
+          v-model="searchTime"
+          type="datetimerange"
+          size="small"
+          :picker-options="pickerOptions"
+          range-separator="鑷�"
+          start-placeholder="寮�濮嬫棩鏈�"
+          end-placeholder="缁撴潫鏃ユ湡"
+          align="right"
+        ></el-date-picker>
       </div>
       <div>
         <label>鎿嶄綔浜�:</label>
         <div>
-          <el-input v-model="operator" size="small"></el-input>
+          <el-input v-model="Operator" size="small"></el-input>
         </div>
       </div>
       <div>
         <label>杞偍鐘舵��:</label>
         <div>
-          <el-select v-model="transferStatus" size="small">
+          <el-select v-model="Status" size="small">
+            <el-option value="" label="鍏ㄩ儴"></el-option>
             <el-option
               v-for="item in allTransferStatus"
               :key="item.id"
-              :value="item.id"
+              :value="item.name"
               :label="item.name"
             ></el-option>
           </el-select>
         </div>
       </div>
       <div class="btns">
-        <el-button type="primary" size="small">鏌ヨ</el-button>
+        <el-button type="primary" size="small" @click="renderTable">鏌ヨ</el-button>
+        <el-button type="primary" size="small" @click="resetFilter">閲嶇疆</el-button>
       </div>
     </div>
     <div class="table-area">
       <el-table :data="tableData" fit>
-        <el-table-column prop="time" label="鎿嶄綔鏃堕棿"></el-table-column>
-        <el-table-column prop="operator" label="鎿嶄綔浜�"></el-table-column>
-        <el-table-column prop="tranferDevice" label="杞偍璁惧鍚嶇О"></el-table-column>
-        <el-table-column prop="pos" label="鍗℃Ы浣嶇疆"></el-table-column>
-        <el-table-column prop="transferStatus" label="杞偍鐘舵��"></el-table-column>
-        <el-table-column prop="pic" label="鐜板満鍥剧墖"></el-table-column>
-        <el-table-column prop="content" label="杞偍鍐呭"></el-table-column>
+        <el-table-column prop="OperaterDate" label="鎿嶄綔鏃堕棿"></el-table-column>
+        <el-table-column prop="Operator" label="鎿嶄綔浜�"></el-table-column>
+        <el-table-column prop="tranferDevice" label="杞偍璁惧鍚嶇О">
+          <template slot-scope="scope">
+            <div>
+              璁惧{{scope.$index}}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column prop="SlotID" label="鍗℃Ы浣嶇疆">
+          <template slot-scope="scope">
+            <div>
+              鎻掓Ы{{scope.row.SlotID}}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column prop="Status" label="杞偍鐘舵��"></el-table-column>
+        <el-table-column prop="Cover" label="鐜板満鍥剧墖"></el-table-column>
+        <el-table-column prop="Content" label="杞偍鍐呭"></el-table-column>
       </el-table>
-      <el-pagination background layout="prev, pager, next" :total="tableDataTotal"></el-pagination>
+      <el-pagination
+        class="pagination-under-table"
+        @size-change="handleTableSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page.sync="PageIndex"
+        :page-size="PageSize"
+        :page-sizes="pageSizes"
+        layout="total,sizes, prev, pager, next"
+        :total="tableTotal"
+      ></el-pagination>
     </div>
   </div>
 </template>
 
 <script>
+import { getTransferStatusList,getTransferRecord } from "@/api/shuohuang"
 export default {
   data () {
     return {
-      transferStatus: '',
-      operator: '',
+      pickerOptions: {
+        shortcuts: [{
+          text: '浠婂ぉ',
+          onClick (picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setHours(0, 0, 0);
+            picker.$emit('pick', [start, end]);
+          }
+        }, {
+          text: '鏄ㄥぉ',
+          onClick (picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24);
+            start.setHours(0, 0, 0);
+            end.setTime(end.getTime() - 3600 * 1000 * 24);
+            end.setHours(23, 59, 59);
+            picker.$emit('pick', [start, end]);
+          }
+        }, {
+          text: '杩戜笁澶�',
+          onClick (picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 3);
+            picker.$emit('pick', [start, end]);
+          }
+        }, {
+          text: '杩戜竴鍛�',
+          onClick (picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+            //start.setHours(0,0,0);
+            picker.$emit('pick', [start, end]);
+          }
+        }]
+      },
+      Status: '',
+      Operator: '',
       allTransferStatus: [],
       tableData: [],
-      tableDataTotal: 5
+      tableTotal: 0,
+      PageIndex: 1,
+      pageSizes: [8, 15, 20],
+      PageSize: 8,
+      searchTime: [this.$moment(new Date().getTime() - 3600 * 1000 * 24 * 5).format("YYYY-MM-DD HH:mm:ss"), this.$moment(new Date()).format("YYYY-MM-DD HH:mm:ss")],
+    }
+  },
+  mounted () {
+    this.renderTable();
+    this.renderTransferStatusList();
+  },
+  methods: {
+    handleCurrentChange(){
+      this.renderTable();
+    },
+    resetFilter(){
+      this.searchTime = [];
+      this.Operator = '';
+      this.Status = '';
+      this.renderTable();
+    },
+    handleTableSizeChange (size) {
+      this.tablePageSize = size;
+      this.renderTable();
+    },
+    renderTransferStatusList(){
+      let _this = this;
+      getTransferStatusList().then(res=>{
+        _this.allTransferStatus = res.data.map((item,index)=>{
+          return {
+            id: 'sta'+index,
+            name: item
+          }
+        });
+      })
+    },
+    renderTable () {
+      let _this = this;
+      let params = {
+        Operator: this.Operator,
+        Status: this.Status,
+        PageIndex: this.PageIndex,
+        PageSize: this.PageSize,
+        StartDate: this.searchTime ? this.searchTime[0]:'',
+        EndDate: this.searchTime ? this.searchTime[1]:'',
+      };
+      
+      getTransferRecord(params).then(res=>{
+        _this.tableData = res.data;
+        _this.tableTotal = res.total;
+      })
     }
   }
 }
@@ -81,5 +203,8 @@
       cursor: pointer;
     }
   }
+  .pagination-under-table{
+    margin-top: 20px;
+  }
 }
 </style>
\ No newline at end of file

--
Gitblit v1.8.0