likang 2 년 전
부모
커밋
bde75bb5f8

+ 2 - 2
.env.production

@@ -6,5 +6,5 @@ ENV = 'production'
 #开发环境
 #VUE_APP_BASE_API = 'http://116.62.220.88:8118'
 
-#派狗smart  
-VUE_APP_BASE_API = 'http://47.114.185.186:8118'
+# 
+VUE_APP_BASE_API = 'http://116.62.220.88:8112'

+ 4 - 2
src/config/componentsMap.js

@@ -4,7 +4,7 @@
  * @Author: likang
  * @Date: 2022-08-12 10:40:39
  * @LastEditors: likang
- * @LastEditTime: 2022-08-12 11:50:05
+ * @LastEditTime: 2022-08-18 16:43:20
  */
 /**
  * export component map
@@ -69,7 +69,9 @@ export default {
     //大屏
     screen: () => import('@/views/screen'),
     //基站标签
-    tag_history: () => import ('@/views/tag_history'),
+    tag_history: () => import('@/views/tag_history'),
+    //基站报表
+    tag_report: ()=>import('@/views/tag_report')
     
    
     

+ 5 - 5
src/router/index.js

@@ -15,13 +15,13 @@ export const constantRoutes = [
   {
     path: '/',
     component: Layout,
-    redirect: '/screen',
+    redirect: '/tag_history',
     children: [
       {
-        path: 'screen',
-        component: () => import('@/views/screen'),
-        name: 'Screen',
-        meta: { title: '监控大屏', icon: 'dashboard', affix: true }
+        path: 'tag_history',
+        component: () => import('@/views/tag_history'),
+        name: 'tag_history',
+        meta: { title: '基站测试标签', icon: 'dashboard', affix: true }
       }
     ]
   },

+ 55 - 251
src/views/tag_history/detail.vue

@@ -1,122 +1,57 @@
 <template>
-  <el-drawer
-    title="统计分析"
-    :visible.sync="drawerVisible"
-    :direction="direction"
-    size="60%"
-  >
-    <div class="app-container" style="padding:0px 20px;margin:0px">
-        <div class="head-search">
-            <div>
-                <label class="search_title">上报时间:</label>
-                <el-date-picker
-                    class="search-box"
-                    v-model="timepart"
-                    type="datetimerange"
-                    align="right"
-                    value-format="yyyy-MM-dd HH:mm:ss"
-                    unlink-panels
-                    range-separator="至"
-                    start-placeholder="开始日期"
-                    end-placeholder="截止日期"
-                    :picker-options="pickerOptions"
-                    @change="refresh"
-                    :clearable="false"
-                ></el-date-picker>
-                
-                <el-button class="search-box" type="info" @click="refresh">筛选</el-button>
-                <!-- <el-button type="defaul" @click="clearFilter">重置</el-button> -->
-            </div>
-        </div>
-        <el-divider content-position="left">塔基</el-divider>
-        <base-line-chart  ref="angleChart" height="400px" :options="options" />
-        <el-divider content-position="left">第一层塔筒</el-divider>
-        <base-line-chart  ref="angleChart" height="400px" :options="options" />
-        <el-divider content-position="left">第二层塔筒</el-divider>
-        <base-line-chart  ref="angleChart" height="400px" :options="options" />
-        <el-divider content-position="left">第三层塔筒</el-divider>
-        <base-line-chart  ref="angleChart" height="400px" :options="options" />
-        <el-divider content-position="left">第四层塔筒</el-divider>
-        <base-line-chart  ref="angleChart" height="400px" :options="options" />
-        
-     </div>
+  <el-drawer title="设备信息" :visible.sync="drawerVisible" :direction="direction" size="60%">
+    <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
+      <el-tab-pane label="日志记录" name="first">
+        <el-table :data="data" style="width: 100%; margin-left: 20px">
+          <el-table-column prop="mac" label="基站mac地址" align="center"></el-table-column>
+          <el-table-column prop="lable" label="标签" align="center"></el-table-column>
+          <el-table-column prop="time" label="标签上报时间" align="center"></el-table-column>
+          <el-table-column prop="addTime" label="上报时间" align="center" min-width="160"></el-table-column>
+          <el-table-column prop="rssi" label="心跳" align="center" min-width="160"></el-table-column>
 
+        </el-table>
+        <el-pagination background class="pagination-container" @size-change="handleSizeChange"
+          @current-change="handleCurrentChange" :current-page="paginate.current" :page-sizes="paginate.sizes"
+          :page-size="paginate.limit" :layout="paginate.layout" :total="paginate.total" />
+      </el-tab-pane>
+
+    </el-tabs>
+    <checkdetail :checkDetailVisible="checkDetailVisible" :record="detail" @sendVal="closeDrawer"></checkdetail>
   </el-drawer>
+
 </template>
 <script>
-import BaseLineChart from '@/components/Charts/BaseLineChart';
+import rlListOperate from "@/layout/rl-list-operate/rlListOperate";
+import checkdetail from './detail.vue';
 export default {
-  components: { BaseLineChart },
-  props: ["detailVisible", "data"],
+  components: { checkdetail },
+  props: ["detailVisible", "record"],
+  mixins: [rlListOperate],
   data() {
     return {
+      url: 'getRecordByTag',
       drawer: false,
+      data: [],
       direction: "rtl",
       activeName: "first",
-      options: {},
-      xData: [],
-      chartData: [], // 扭矩数据
-      pressData: [], // 压力数据
-      openValue: 25,    // 
-      recoverValue: 8, // 
-      timepart: null,
-            pickerOptions: {
-                shortcuts: [{
-                    text: '昨天',
-                    onClick(picker) {
-                      const end = new Date(new Date().toLocaleDateString());
-                      const start = new Date(new Date().toLocaleDateString());
-                      start.setTime(start.getTime() - 3600 * 1000 * 24);
-                      picker.$emit('pick', [start, end]);
-                    }
-                },{
-                    text: '今天',
-                    onClick(picker) {
-                      const end = new Date(new Date().toLocaleDateString());
-                      const start = new Date(new Date().toLocaleDateString());
-                      end.setTime(start.getTime() + 3600 * 1000 * 24);
-                      picker.$emit('pick', [start, end]);
-                    }
-                },{
-                    text: '最近一周',
-                    onClick(picker) {
-                      const end = new Date();
-                      const start = new Date(new Date().toLocaleDateString());
-                      start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
-                      picker.$emit('pick', [start, end]);
-                    }
-                }, {
-                    text: '最近一个月',
-                    onClick(picker) {
-                      const end = new Date();
-                      const start = new Date(new Date().toLocaleDateString());
-                      start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
-                      picker.$emit('pick', [start, end]);
-                    }
-                }, {
-                    text: '最近三个月',
-                    onClick(picker) {
-                      const end = new Date();
-                      const start = new Date(new Date().toLocaleDateString());
-                      start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
-                      picker.$emit('pick', [start, end]);
-                    }
-                }]
-            },
+      detail: '',
+      checkDetailVisible: false,
+      title: ''
     };
   },
-  created() {
-        // 初始查询日期
-        var start = new Date(new Date().toLocaleDateString());
-        var end = new Date(new Date().toLocaleDateString());
-        start.setTime(end.getTime() - 3600 * 1000 * 24 * 30);
-        this.timepart = [start, end]
-        // 获取配置
-        // this.getDeviceInfo()
-  },
   methods: {
+
     handleClick(tab, event) {
-      console.log(tab, event);
+      // console.log(tab, event);
+    },
+    closeDrawer() {
+      this.checkDetailVisible = false
+    },
+    handleDetail(row, rowtype) {
+
+      row.rowtype = rowtype;
+      this.detail = row;
+      this.checkDetailVisible = true;
     },
     tableRowClassName({ row, rowIndex }) {
       if (rowIndex === 1) {
@@ -126,145 +61,6 @@ export default {
       }
       return "";
     },
-        /**
-         * 初始化数据
-         */
-        initData() {
-            this.options = {}
-            this.xData = []
-            this.pressData = []
-            this.chartData = []
-            let data=[
-              {"pressure":30,"torque":29,"time":"2022-04-23 00:28:50"},
-              {"pressure":15,"torque":20,"time":"2022-04-24 00:28:50"},
-              {"pressure":19,"torque":14,"time":"2022-04-25 00:28:50"},
-              {"pressure":30,"torque":35,"time":"2022-04-26 00:28:50"},
-              {"pressure":22,"torque":29,"time":"2022-04-27 00:28:50"},
-              {"pressure":25,"torque":24,"time":"2022-04-28 00:28:50"},
-              {"pressure":30,"torque":13,"time":"2022-04-29 00:28:50"},
-              {"pressure":12,"torque":18,"time":"2022-04-30 00:28:50"},
-              {"pressure":30,"torque":31,"time":"2022-05-01 00:28:50"},
-              {"pressure":30,"torque":22,"time":"2022-05-02 00:28:50"},
-              {"pressure":11,"torque":23,"time":"2022-05-03 00:28:50"},
-              {"pressure":30,"torque":24,"time":"2022-05-04 00:28:50"},
-              {"pressure":30,"torque":29,"time":"2022-05-05 00:28:50"},
-              {"pressure":24,"torque":29,"time":"2022-05-06 00:28:50"},
-              {"pressure":30,"torque":26,"time":"2022-05-07 00:28:50"},
-              {"pressure":24,"torque":11,"time":"2022-05-08 00:28:50"},
-              {"pressure":7,"torque":29,"time":"2022-05-09 00:28:50"},
-              {"pressure":11,"torque":9,"time":"2022-05-10 00:28:50"},
-              {"pressure":17,"torque":12,"time":"2022-05-11 00:28:50"},
-            
-            ]
-            data.forEach(item => {
-                this.xData.push(item.time)
-                this.pressData.push(item.pressure)
-                this.chartData.push(item.torque)
-                  
-            })
-            this.getOptions()
-        },
-        /**
-         * 刷新
-         */
-        refresh(){
-            this.getData(this.assetNo)
-            this.getDeviceInfo()
-        },
-        /**
-         * 图表配置
-         */
-        getOptions() {
-            var itemStyle = {
-                        opacity: 0.8,
-                        shadowBlur: 10,
-                        shadowOffsetX: 0,
-                        shadowOffsetY: 0,
-                        shadowColor: 'rgba(0,0,0,0.7)'
-                    };
-            this.options = {
-                color: ['#80F1BE', '#dd4444'],
-                tooltip: {
-                    trigger: 'axis',
-                    axisPointer: {
-                        type: 'cross'
-                    }
-                },
-                xAxis: {
-                     nameTextStyle: {
-                      color: "#fff"
-                    },
-                    axisLine: {
-                      lineStyle: { color: "#70b9eb" }
-                    },
-                    axisLabel: {
-                      textStyle: {
-                        color: "#fff"
-                      },
-                    
-                    },
-                    type: "category",
-                    data: this.xData
-                },
-                yAxis: {
-                     nameTextStyle: {
-                        color: "#fff"
-                      },
-                      axisLine: {
-                        lineStyle: { color: "#70b9eb" }
-                      },
-                      axisLabel: {
-                        textStyle: {
-                          color: "#fff"
-                        }
-                      }
-                },
-                // dataZoom: [{
-                //     startValue: this.xData[0]
-                // }, {
-                //     type: 'inside'
-                // }],
-                visualMap: {
-                    show: false,
-                    min: 0,
-                    max: 180,
-                    inRange: {
-                        // symbolSize: [10, 20]
-                    }
-                },
-                series: [{
-                    name: '扭矩',
-                    type: 'scatter',
-                    symbolSize: 15,
-                    itemStyle: itemStyle,
-                    markLine: {
-                        silent: true,
-                        lineStyle: {
-                            color: '#0f0'
-                        },
-                        data: [{
-                            yAxis: 20,
-                        }]
-                    },
-                    data: this.chartData,
-                },{
-                    name: '压力',
-                    type: 'scatter',
-                    symbolSize: 15,
-                    itemStyle: itemStyle,
-                    markLine: {
-                        silent: true,
-                        lineStyle: {
-                            color: '#c00'
-                        },
-                        data: [{
-                            yAxis: this.openValue
-                        }]
-                    },
-                    data: this.pressData,
-                }]
-            }
-      }
   },
   computed: {
     drawerVisible: {
@@ -272,8 +68,11 @@ export default {
         this.$emit("sendVal", val); // 表示将子组件改变的值传递给父组件
       },
       get() {
-        if(this.detailVisible){
-           this.initData()
+        if (this.detailVisible) {
+          //获取维护记录
+          this.queryParam.lable = this.record.lable;
+          this.queryParam.mac = this.record.mac;
+          this.getList()
         }
         return this.detailVisible; // 表示获取父组件的值
       },
@@ -282,19 +81,23 @@ export default {
 };
 </script>
 <style scoped>
-::v-deep .el-drawer{
-  overflow: scroll !important;
+.back-color {
+  background: black;
 }
+
 .detail-item {
   width: 100%;
   padding: 15px 0px;
   list-style-type: none;
+
 }
+
 .item {
   font-size: 14px;
-  color: black;
+  color: #FFF;
   margin-top: 5px;
 }
+
 .el-table .warning-row {
   background: oldlace !important;
 }
@@ -302,8 +105,9 @@ export default {
 .el-table .success-row {
   background: #f0f9eb !important;
 }
-.search_title {
-  font-size: 12px;
-  color: #6a6a6a;
+
+.pagination-container {
+  padding-left: 25px;
+  padding-right: 25px;
 }
 </style>

+ 32 - 21
src/views/tag_history/index.vue

@@ -126,7 +126,7 @@
         :show-overflow-tooltip="true"
       />
   
-      <!-- <el-table-column
+      <el-table-column
         label="操作"
         min-width="120"
         align="center"
@@ -138,26 +138,14 @@
             <el-button type="primary" size="mini" icon="el-icon-data-line" @click="handleDetail(record.row)" ></el-button>
             
         </template>
-      </el-table-column> -->
+      </el-table-column>
     </el-table>
 
-    
-    <!-- <el-pagination
-      background
-      class="pagination-container"
-      @size-change="handleSizeChange"
-      @current-change="handleCurrentChange"
-      :current-page="paginate.current"
-      :page-sizes="paginate.sizes"
-      :page-size="paginate.limit"
-      :layout="paginate.layout"
-      :total="paginate.total"
-    />
-     -->
+  
     <detail
       :detailVisible="detailVisible"
        @sendVal="closeDrawer"
-       :data="detail"
+       :record="Detail"
     />
     
   </div>
@@ -202,7 +190,7 @@ export default {
       is_suspended: false,
       //详情
       detailVisible:false,
-      detail:{},
+      Detail:{},
       //定时器
       refreshTageAndStation: '',
       //计时
@@ -264,6 +252,11 @@ export default {
       });
 
     },
+    handleDetail(row) {
+     
+      this.detailVisible = true;
+      this.Detail = row;
+    },
 
     hydraulicSelectMulti(data) {
       this.selectedIds = [];
@@ -303,12 +296,15 @@ export default {
     //暂停
     beforhandleRefresh()
     {
+
       this.is_suspended = true;
+      this.getReport();
       clearInterval(this.refreshData);
       clearInterval(this.refreshTime);
       this.refreshData = null;
-      this.refreshTime = null
-      this.start = false
+      this.refreshTime = null;
+      //生成报表
+      this.start = false;
       //this.handleRefresh()
     },
 
@@ -344,8 +340,8 @@ export default {
     //定时请求数据
     getData()
     {
-      
-      const query = this.queryParam;
+
+        const query = this.queryParam;
         this.$http.get(this.url, { params: query }).then(response => {
           if (this.is_suspended)
           {
@@ -363,6 +359,21 @@ export default {
           
         })
     },
+    getReport()
+    {
+      let querylist = {
+        endtime: 1,
+        mac: this.queryParam.mac,
+        tage: this.queryParam.tage,
+        meter: this.queryParam.meter,
+        time: this.queryParam.time,
+      }
+      console.log(querylist);
+      this.$http.get(this.url, { params: querylist }).then((response) => {
+        console.log(response.data)
+      });
+
+    },
     remoteMethod(query) {
         if (query !== '') {
           this.loading = true;

+ 344 - 0
src/views/tag_report/detail.vue

@@ -0,0 +1,344 @@
+<template>
+  <el-drawer title="计划详情" :visible.sync="drawerVisible" :direction="direction" size="60%">
+    <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
+      <el-tab-pane label="计划详情" name="first">
+        <el-divider content-position="left">基础信息</el-divider>
+
+        <el-row>
+          <div style="margin-bottom: 30px; margin-left: 50px">
+            <el-col :span="24" style="margin-top: 10px; font-size: 14px; color: #a0a0a0">
+              <div class="detail-item">
+                <span>基站mac地址 :    </span>
+                <span class="item">{{ data.mac }}</span>
+              </div>
+              <div class="detail-item">
+                <pre style="display: inline">标签号 :</pre>
+                <span class="item">{{ data.lable }}</span>
+              </div>
+              <div class="detail-item">
+                <span>距离 :</span>
+                <span class="item">{{ data.meter }}米</span>
+              </div>
+            </el-col>
+            
+          </div>
+        </el-row>
+        <el-row>
+
+
+        <baseLineChart>
+        
+        </baseLineChart>
+        
+
+
+
+        
+        
+        
+        </el-row>
+
+      </el-tab-pane>
+
+      <!-- 
+      <el-tab-pane label="螺栓紧固方案" name="third">
+        <el-divider content-position="left"><span style="color:#1850ef">单同步</span></el-divider>
+        <el-table
+          :data="oneData"
+          style="width: 100%;margin-left: 20px"
+        >
+          <el-table-column prop="step" label="步骤">
+          </el-table-column>
+          <el-table-column prop="number" label="螺栓编号">
+          </el-table-column>
+          <el-table-column prop="preload" label="标准预紧力(N*m)"> </el-table-column>
+        </el-table>
+        <el-divider content-position="left"><span style="color:#1850ef">两同步</span></el-divider>
+        <el-table
+          :data="twoData"
+          style="width: 100%;margin-left: 20px"
+        >
+          <el-table-column prop="step" label="步骤">
+          </el-table-column>
+          <el-table-column prop="number" label="螺栓编号">
+          </el-table-column>
+          <el-table-column prop="preload" label="标准预紧力(N*m)"> </el-table-column>
+        </el-table>
+        <el-divider content-position="left"><span style="color:#1850ef">四同步</span></el-divider>
+        <el-table
+          :data="fourData"
+          style="width: 100%;margin-left: 20px"
+        >
+          <el-table-column prop="step" label="步骤">
+          </el-table-column>
+          <el-table-column prop="number" label="螺栓编号">
+          </el-table-column>
+          <el-table-column prop="preload" label="标准预紧力(N*m)"> </el-table-column>
+        </el-table>
+        <el-divider content-position="left"><span style="color:#1850ef">六同步</span></el-divider>
+        <el-table
+          :data="sixData"
+          style="width: 100%;margin-left: 20px"
+        >
+          <el-table-column prop="step" label="步骤">
+          </el-table-column>
+          <el-table-column prop="number" label="螺栓编号">
+          </el-table-column>
+          <el-table-column prop="preload" label="标准预紧力(N*m)"> </el-table-column>
+        </el-table>
+      </el-tab-pane>
+      <el-tab-pane label="实时维保信息" name="fourth">
+           <el-table
+          :data="nowData"
+          style="width: 100%;margin-left: 20px"
+        >
+          <el-table-column prop="number" label="螺栓编号">
+          </el-table-column>
+          <el-table-column prop="real_preload" label="实际预紧力(N*m)">
+          </el-table-column>
+          <el-table-column prop="stand_preload" label="标准预紧力(N*m)">
+          </el-table-column>
+          <el-table-column prop="end_time" label="预紧结束时间">
+          </el-table-column>
+          <el-table-column prop="beng_no" label="液压泵编号">
+          </el-table-column>
+          <el-table-column prop="banshou_no" label="液压扳手编号">
+          </el-table-column>
+          <el-table-column prop="ways" label="紧固方式">
+          </el-table-column>
+          <el-table-column prop="operator" label="操作员"> </el-table-column>
+        </el-table>
+      </el-tab-pane>
+      <el-tab-pane label="历史维保记录" name="five">
+           <el-table
+          :data="historyData"
+          style="width: 100%;margin-left: 20px"
+        >
+         <el-table-column prop="number" label="螺栓编号">
+          </el-table-column>
+          <el-table-column prop="real_preload" label="实际预紧力(N*m)">
+          </el-table-column>
+          <el-table-column prop="stand_preload" label="标准预紧力(N*m)">
+          </el-table-column>
+          <el-table-column prop="end_time" label="预紧结束时间">
+          </el-table-column>
+          <el-table-column prop="beng_no" label="液压泵编号">
+          </el-table-column>
+          <el-table-column prop="banshou_no" label="液压扳手编号">
+          </el-table-column>
+          <el-table-column prop="ways" label="紧固方式">
+          </el-table-column>
+          <el-table-column prop="operator" label="操作员"> </el-table-column>
+        </el-table>
+      </el-tab-pane> -->
+    </el-tabs>
+  </el-drawer>
+</template>
+<script>
+import BaseLineChart from '@/components/Charts/BaseLineChart';
+export default {
+   components: { BaseLineChart },
+  props: ["detailVisible", "data"],
+  data() {
+    return {
+      drawer: false,
+      direction: "rtl",
+      activeName: "first",
+       options: {},
+      xData: [],
+      chartData: [], // 扭矩数据
+      pressData: [], // 压力数据
+      openValue: 25,    // 
+      recoverValue: 8, // 
+      timepart: null,
+    };
+   
+   
+
+  },
+   created() {
+        // 初始查询日期
+        var start = new Date(new Date().toLocaleDateString());
+        var end = new Date(new Date().toLocaleDateString());
+        start.setTime(end.getTime() - 3600 * 1000 * 24 * 30);
+        this.timepart = [start, end]
+        // 获取配置
+        // this.getDeviceInfo()
+  },
+  methods: {
+     /**
+         * 初始化数据
+         */
+        initData() {
+            this.options = {}
+            this.xData = []
+            this.pressData = []
+            this.chartData = []
+            let data=[
+              {"pressure":30,"torque":29,"time":"2022-04-23 00:28:50"},
+              {"pressure":15,"torque":20,"time":"2022-04-24 00:28:50"},
+              {"pressure":19,"torque":14,"time":"2022-04-25 00:28:50"},
+              {"pressure":30,"torque":35,"time":"2022-04-26 00:28:50"},
+              {"pressure":22,"torque":29,"time":"2022-04-27 00:28:50"},
+              {"pressure":25,"torque":24,"time":"2022-04-28 00:28:50"},
+              {"pressure":30,"torque":13,"time":"2022-04-29 00:28:50"},
+              {"pressure":12,"torque":18,"time":"2022-04-30 00:28:50"},
+              {"pressure":30,"torque":31,"time":"2022-05-01 00:28:50"},
+              {"pressure":30,"torque":22,"time":"2022-05-02 00:28:50"},
+              {"pressure":11,"torque":23,"time":"2022-05-03 00:28:50"},
+              {"pressure":30,"torque":24,"time":"2022-05-04 00:28:50"},
+              {"pressure":30,"torque":29,"time":"2022-05-05 00:28:50"},
+              {"pressure":24,"torque":29,"time":"2022-05-06 00:28:50"},
+              {"pressure":30,"torque":26,"time":"2022-05-07 00:28:50"},
+              {"pressure":24,"torque":11,"time":"2022-05-08 00:28:50"},
+              {"pressure":7,"torque":29,"time":"2022-05-09 00:28:50"},
+              {"pressure":11,"torque":9,"time":"2022-05-10 00:28:50"},
+              {"pressure":17,"torque":12,"time":"2022-05-11 00:28:50"},
+            
+            ]
+            data.forEach(item => {
+                this.xData.push(item.time)
+                this.pressData.push(item.pressure)
+                this.chartData.push(item.torque)
+                  
+            })
+            this.getOptions()
+        },
+        /**
+         * 刷新
+         */
+        refresh(){
+            this.getData(this.assetNo)
+            this.getDeviceInfo()
+        },
+        /**
+         * 图表配置
+         */
+        getOptions() {
+            var itemStyle = {
+                        opacity: 0.8,
+                        shadowBlur: 10,
+                        shadowOffsetX: 0,
+                        shadowOffsetY: 0,
+                        shadowColor: 'rgba(0,0,0,0.7)'
+                    };
+            this.options = {
+                color: ['#80F1BE', '#dd4444'],
+                tooltip: {
+                    trigger: 'axis',
+                    axisPointer: {
+                        type: 'cross'
+                    }
+                },
+                xAxis: {
+                    type: "category",
+                    data: this.xData
+                },
+                yAxis: {},
+                dataZoom: [{
+                    startValue: this.xData[0]
+                }, {
+                    type: 'inside'
+                }],
+                visualMap: {
+                    show: false,
+                    min: 0,
+                    max: 180,
+                    inRange: {
+                        // symbolSize: [10, 20]
+                    }
+                },
+                series: [{
+                    name: '扭矩',
+                    type: 'scatter',
+                    symbolSize: 15,
+                    itemStyle: itemStyle,
+                    markLine: {
+                        silent: true,
+                        lineStyle: {
+                            color: '#0f0'
+                        },
+                        data: [{
+                            yAxis: 20,
+                        }]
+                    },
+                    data: this.chartData,
+                },{
+                    name: '压力',
+                    type: 'scatter',
+                    symbolSize: 15,
+                    itemStyle: itemStyle,
+                    markLine: {
+                        silent: true,
+                        lineStyle: {
+                            color: '#c00'
+                        },
+                        data: [{
+                            yAxis: this.openValue
+                        }]
+                    },
+                    data: this.pressData,
+                }]
+            }
+      },
+    handleClick(tab, event) {
+      console.log(tab.name);
+      if(tab.name=='second')
+      {
+        this.initData();
+      
+        
+      }
+    },
+    tableRowClassName({ row, rowIndex }) {
+      if (rowIndex === 1) {
+        return "warning-row";
+      } else if (rowIndex === 3) {
+        return "success-row";
+      }
+      return "";
+    },
+  },
+  computed: {
+    drawerVisible: {
+      set(val) {
+        this.$emit("sendVal", val); // 表示将子组件改变的值传递给父组件
+      },
+      get() {
+        //   if(this.detailVisible){
+        //    this.initData()
+        // }
+        return this.detailVisible; // 表示获取父组件的值
+      },
+    },
+  },
+};
+</script>
+<style scoped>
+
+.detail-item {
+  width: 100%;
+  padding: 15px 0px;
+  list-style-type: none;
+}
+
+.item {
+  font-size: 14px;
+  color: #FFF;
+  margin-top: 5px;
+}
+
+.el-table .warning-row {
+  background: oldlace !important;
+}
+
+.el-table .success-row {
+  background: #f0f9eb !important;
+}
+
+.pagination-container {
+  padding-left: 25px;
+  padding-right: 25px;
+}
+
+</style>

+ 302 - 0
src/views/tag_report/formModel.vue

@@ -0,0 +1,302 @@
+<template>
+  <ele-form-dialog
+    v-bind="formConfig"
+    v-model="formFieldsData"
+    v-dialogDrag
+    :title="title"
+    :request-fn="handleFormSubmit"
+    :visible.sync="DialogVisible"
+    custom-class="abow_dialog"
+    label-position="left"
+    width="450px"
+    :dialogAttrs="{ 'close-on-click-modal': false,'top':'8vh'}"
+  />
+</template>
+
+<script>
+export default {
+  props: ["formModelVisible", "title"],
+  data() {
+    let that = this;
+    return {
+      formData: {},
+      formFieldsData: {
+        id: "",
+        plan_number:'',
+        plan_name:'',
+        wind_id:"",
+        fan_id:"",
+        work_sign:"",
+        parts_sign:"",
+        boit_type_sign: "",
+        //螺栓总数
+        bolt_num: '',
+        //紧固模式
+        tighten_mode: '',
+        //偏移紧固数值
+        bias:"",
+        //扭矩
+        torque:'',
+        status:'',
+        info: "",
+        fan_model:""
+      }, 
+      url: "workplan",
+      formConfig: {
+        formDesc: {
+          plan_number: {
+            required: true,
+            type: "input",
+            label: "计划编号"
+          },
+          plan_name: {
+            required: true,
+            type: "input",
+            label: "计划名称"
+          },
+          wind_id: {
+            type: "cascader",
+            label: "风场名称",
+            isOptions: true,
+            options: [],
+            required: true,
+            vif: true,
+            on: {
+              change: (val) => {
+
+                this.queryFanByWindId(val);
+              }
+            },
+            attrs: {
+              //查询 
+              filterable: true,
+              props: {
+                label: "text",
+                value: "value",
+                emitPath: false,
+                multiple: false
+              }
+            }
+
+          },
+          //风机id
+          fan_id:{
+              type: "cascader",
+              label: "风机编号",
+              isOptions: true,
+             // isReloadOptions: true,
+              options: [],
+              required: true,
+              vif: true,
+              on: {
+                change: (val) => {
+                  let arr = this.formConfig.formDesc.fan_id.options;
+                  let model_id = '';
+                  arr.forEach(item => {
+                    if (item.id == val)
+                    {
+                       model_id = item.fan_model;
+                    }
+                    
+                  });
+                  this.formFieldsData.fan_model = model_id;
+                  that.queryWorkByFanModel();
+
+              }
+              },
+              attrs: {
+                //查询 
+                filterable:true,
+                props: {
+                  label: "number",
+                  value: "id",
+                  emitPath: false,
+                  multiple:false
+                }
+            }
+
+          },
+          parts_sign: {
+          
+            type: "cascader",
+            label: "部件类型",
+            isOptions: true,
+            options: [],
+            required: true,
+            vif: true,
+            on: {
+              change: (val)=>
+              {
+                that.queryWorkByFanModel();
+              }
+              
+            },
+            attrs: {
+              //查询 
+              filterable: true,
+              props: {
+                label: "name",
+                value: "value",
+                emitPath: false,
+                multiple: false
+              }
+            }
+
+          },
+          work_sign: {
+            
+            type: "cascader",
+            label: "工作位置",
+            isOptions: true,
+            options: [],
+            required: true,
+            vif: true,
+            attrs: {
+              //查询 
+              filterable: true,
+              props: {
+                label: "name",
+                value: "value",
+                emitPath: false,
+                multiple: false
+              }
+            }
+
+          },
+          boit_type_sign: {
+           
+            type: "cascader",
+            label: "螺栓型号",
+            isOptions: true,
+            options: [],
+            required: true,
+            vif: true,
+            attrs: {
+              //查询 
+              filterable: true,
+              props: {
+                label: "name",
+                value: "value",
+                emitPath: false,
+                multiple: false
+              }
+            }
+
+          },
+          bolt_num: {
+            required: true,
+            type: "input",
+            label: "螺栓总数",
+            attrs: {
+              min: 0,
+              type: "number"
+            }
+
+          },
+          bias: {
+            type: "input",
+            label: "偏移紧固数值",
+          },
+          
+          tighten_mode: {
+            required: true,
+            label: "紧固模式",
+            type: "select",
+            options: [
+              { text: '顺序紧固 ', value:0},
+              { text: '对角紧固', value:1 },
+              { text: '偏移紧固', value: 3},
+            ]
+
+          },
+          torque: {
+            type: "input",
+            label: "扭矩",
+            attrs: {
+              type: "number"
+            }
+
+          },
+          status: {
+            type: "switch",
+            label: "使用状态",
+            isOptions: true,
+            default:1,
+            attrs: {
+              activeValue: 1,
+              inactiveValue:-1
+            }
+          },
+          info: {
+            type: "textarea",
+            label: "备注"
+          },
+        },
+        order: ['plan_number', "plan_name", "wind_id", "fan_id", "parts_sign", "work_sign", "boit_type_sign", 'bolt_num', 'tighten_mode','bias','torque', "status","info"]
+      }
+    };
+  },
+  created() {
+    this.$http.get("wind/getWindOptions").then((response) => {
+      this.formConfig.formDesc.wind_id.options = response.data;
+    });
+   
+    // this.$http.get("get_mainten_option?type=" + "2").then((response) => {
+    //   this.formConfig.formDesc.work_sign.options = response.data;
+    // });
+    this.$http.get("get_mainten_option?type=" + "1").then((response) => {
+      this.formConfig.formDesc.parts_sign.options = response.data;
+    });
+    this.$http.get("get_mainten_option?type=" + "4").then((response) => {
+      this.formConfig.formDesc.boit_type_sign.options = response.data;
+    });
+
+
+  },
+  methods: {
+    handleFormSubmit(data) {
+
+      this.$parent.handleSubmit();
+    },
+    handleRequest(data) {
+      return Promise.resolve();
+    },
+    handleRequestSuccess() {
+      this.$message.success("发送成功");
+    },
+    queryFanByWindId(id)
+    {
+      this.$http.get("queryFanByWindId?id=" +id).then((response) => {
+        this.formConfig.formDesc.fan_id.options = response.data;
+      });
+    },
+
+    queryWorkByFanModel()
+    {
+      let part = this.formFieldsData.parts_sign;
+      let fan_model= this.formFieldsData.fan_model;
+      this.$http.get("get_mainten_option?type=2&fan_model=" + fan_model +'&part='+part).then((response) => {
+        this.formConfig.formDesc.work_sign.options = response.data;
+      });
+    }
+
+  },
+
+  computed: {
+    DialogVisible: {
+      set(val) {
+        this.$emit("sendVal", val); // 表示将子组件改变的值传递给父组件
+      },
+      get() {
+        if (this.formModelVisible)
+        {
+          this.queryFanByWindId(this.formFieldsData.wind_id)
+          this.queryWorkByFanModel();
+
+        }
+        return this.formModelVisible; // 表示获取父组件的值
+      }
+    }
+  }
+};
+</script>

+ 109 - 0
src/views/tag_report/index.scss

@@ -0,0 +1,109 @@
+.col-setting-popover {
+    min-width: 100px;
+    padding: 9px 16px;
+    .col-setting-title {
+      color: #7f8b93;
+      font-size: 12px;
+    }
+    .col-setting-group {
+      .el-checkbox {
+        display: block;
+        margin-top: 5px;
+      }
+    }
+  }
+  .icyuandianda {
+    font-size: 12px;
+  }
+  .search-box-area {
+    width: 70%;
+    height: 44px;
+    float: left;
+  }
+  .search-operate-area {
+    width: 20%;
+    height: 44px;
+    float: left;
+  }
+  .search-item {
+    width: 25%;
+    height: 44px;
+    float: left;
+  }
+  #searchBox {
+    overflow: hidden;
+  }
+  .upload-dialog .el-dialog__body {
+    padding: 0px, 20px !important;
+  }
+  .columnOption {
+    position: fixed;
+    z-index: 20;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background-color: rgba(0, 0, 0, 0.3);
+    display: flex;
+    flex-direction: row-reverse;
+    .content {
+      width: 140px;
+      height: 100%;
+      background-color: rgb(255, 255, 255);
+      .head {
+        width: 100%;
+        height: 44px;
+        border-bottom: 1px solid #000;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        font-size: 12px;
+      }
+      .body {
+        width: 100%;
+        height: calc(100% - 88px);
+        box-sizing: border-box;
+        padding-top: 10px;
+        padding-left: 10px;
+        overflow-y: auto;
+        .items {
+          width: 100%;
+          height: 100%;
+          overflow-y: auto;
+          display: flex;
+          flex-direction: column;
+          .el-checkbox {
+            width: 100%;
+            height: 28px;
+            line-height: 28px;
+            margin-bottom: 14px;
+            display: inline-block;
+            font-family: PingFang SC;
+            font-style: normal;
+            font-weight: normal;
+            font-size: 14px;
+            color: #000;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            white-space: nowrap;
+            box-sizing: border-box;
+            padding-left: 14px;
+          }
+          .el-checkbox:hover {
+            background-color: #f5f7fa;
+          }
+        }
+      }
+      .footer {
+        width: 100%;
+        height: 44px;
+        border-top: 1px solid #000;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+      }
+    }
+  }
+  .el-tag {
+    border: 0px;
+  }

+ 302 - 0
src/views/tag_report/index.vue

@@ -0,0 +1,302 @@
+<template>
+  <div class="app-container">
+    <div class="filter-container" style="padding-bottom: 0px">
+      <div class="search-box-area" id="searchBox">
+         <div class="search-item">
+          <el-input  
+            v-model="queryParam.meter"
+            placeholder="距离"
+            clearable
+             class="filter-item form-search-input fl"
+            @keyup.enter.native="handleSearch"
+          />
+        </div>
+      </div>
+      <div class="search-operate-area">
+        <!-- <el-input v-model="queryParam.code" placeholder="唯一编码" clearable class="filter-item form-search-input fl" /> -->
+        <el-button
+          class="filter-item search fl"
+          icon="el-icon-search"
+          @click="handleSearch"
+          >搜索</el-button
+        >
+        <el-button
+          class="filter-item fl"
+          icon="el-icon-refresh"
+          @click="handleRefresh"
+          >重置</el-button
+        >
+       
+      </div>
+      <div class="list-operate-area">
+        <!-- <el-button size="mini" class="filter-item search fl" icon="el-icon-plus" @click="handleCreate">添加</el-button> -->
+        <el-button
+          class="filter-item search fl"
+          icon="el-icon-refresh-right"
+          @click="refresh"
+          >刷新</el-button
+        >
+      </div>
+    </div>
+    <el-table
+      :data="data"
+      v-loading="loading"
+      ref="multipleTable"
+      @selection-change="hydraulicSelectMulti"
+      @sort-change="sortChange"
+      :dynamicColumnSetting="true"
+      tooltip-effect="dark"
+      style="width: 100%"
+      border
+      fit
+    >
+      <el-table-column
+        type="selection"
+        fixed="left"
+        width="55"
+      ></el-table-column>
+
+      <el-table-column
+        prop="id"
+        label="序号"
+        align="center"
+        v-if="showColumn.id"
+        :show-overflow-tooltip="true"
+       
+      />
+       <el-table-column
+        prop="mac"
+        label="基站mac地址"
+        align="center"
+      
+        :show-overflow-tooltip="true"
+      />
+       <el-table-column
+        prop="lable"
+        label="标签号"
+        align="center"
+     
+      />
+      <el-table-column
+       
+        label="距离"
+        align="center"
+        :show-overflow-tooltip="true"
+        
+      >
+        <template slot-scope="record">
+            <p>{{record.row.meter+'米'}}</p>
+          </template>
+      </el-table-column>
+      <el-table-column
+        prop="startTime"
+        label="开始时间"
+        align="center"
+      />
+      <el-table-column
+        prop="endTime"
+        label="结束时间"
+        align="center"
+        :show-overflow-tooltip="true"
+      />
+     
+      <el-table-column
+        label="操作"
+        width="200"
+        align="center"
+        fixed="right"
+      >
+      <template slot-scope="record">
+    
+          <el-tooltip
+            content="查看"
+            placement="top"
+            :enterable="false"
+          >
+            <el-button
+              type="primary"
+              size="mini"
+              icon="el-icon-view"
+              @click="handleDetail(record.row)"
+            ></el-button>
+          </el-tooltip>
+          <el-button type="danger" size="mini" icon="el-icon-delete" @click="handleDelete(record.row.id)" />
+        </template>
+      </el-table-column>
+    </el-table>
+   
+   
+    <el-button
+      type="danger"
+      icon="el-icon-delete"
+      v-if="selectedIds.length > 0"
+      style="margin-top: 15px"
+      @click="handleMultiDelete()"
+      >删除</el-button
+    >
+      <el-button
+      type="warning"
+      icon="el-icon-download"
+      :loading="downloadLoading"
+      style="margin-top: 15px"
+      @click="exportExcel"
+      >导出</el-button
+    >
+    <el-pagination
+      background
+      class="pagination-container"
+      @size-change="handleSizeChange"
+      @current-change="handleCurrentChange"
+      :current-page="paginate.current"
+      :page-sizes="paginate.sizes"
+      :page-size="paginate.limit"
+      :layout="paginate.layout"
+      :total="paginate.total"
+    />
+    
+    <detail
+      :detailVisible="detailVisible"
+       @sendVal="closeDrawer"
+       :data="detail"
+    />
+  </div>
+</template>
+
+<script>
+import rlListOperate from "@/layout/rl-list-operate/rlListOperate";
+import { action } from "@/directive/permission/index.js";
+import formModel from './formModel.vue'
+import detail from "./detail.vue"
+export default {
+  name: "report",
+  directives: { action },
+  mixins: [rlListOperate],
+  components: {
+    formModel,
+    detail,
+  },
+  data() {
+    return {
+      url: "report",
+      loading:false,
+      windoptions:[],
+      //工作位置
+      work_local_options:[],
+      //所属部件
+      parts_options:[],
+      //螺栓样式
+      bolt_style_options:[],
+      //螺栓型号
+      bolt_type_options:[],
+      //风场型号
+      wind_options:[],
+
+      queryParam: {
+       
+        meter:"",
+      
+      },
+      defaultQueryParam:['type'],
+      current_type: {
+        0: "success",
+        1: "danger",
+      },
+      formName:'worklocation',
+      formVisible:false,
+      //搜索
+      searchDisplay: true,
+      departments: [],
+      deviceModels:[],
+
+
+      //详情
+      detailVisible:false,
+      detail:{},
+
+      isShowColumn: false,
+      // 列的配置化对象,存储配置信息
+      checkList: {},
+    
+    };
+  },
+  created() {
+  },
+  methods: {
+    //重置
+    handleChange(val) {
+      this.queryParam.department_id = val;
+      this.handleSearch();
+    },
+    hydraulicSelectMulti(data) {
+      this.selectedIds = [];
+      data.forEach((item) => {
+        this.selectedIds.push(item.id);
+      });
+    },
+    refresh() {
+      this.queryParam.page = this.paginate.current;
+      this.getList();
+    },
+    
+    searchDis() {
+      this.searchDisplay = !this.searchDisplay;
+      var searchBoxHeght = document.getElementById("searchBox");
+      if (this.searchDisplay == false) {
+        searchBoxHeght.style.height = 40 + "px";
+      } else {
+        searchBoxHeght.style.height = "auto";
+      }
+    },
+    handleDetail(row){
+      this.detailVisible = true,
+      this.detail = row
+     
+    },
+    showColumnOption() {
+      this.isShowColumn = true;
+    },
+    saveColumn() {
+      localStorage.setItem("WorkPlanSet", JSON.stringify(this.checkList));
+      this.isShowColumn = false;
+    },
+    closeDrawer(){
+      this.detailVisible = false
+    }
+  },
+  watch: {
+    // 监听复选框配置列所有的变化
+    checkList: {
+      handler: function (newnew, oldold) {
+        // console.log(newnew);
+        this.showColumn = newnew;
+        // 这里需要让表格重新绘制一下,否则会产生固定列错位的情况
+        this.$nextTick(() => {
+          this.$refs.multipleTable.doLayout();
+        });
+      },
+      deep: true,
+      immediate: true,
+    },
+  },
+  computed: {
+    word: function () {
+      if (this.searchDisplay == false) {
+        //对文字进行处理
+        return "展开";
+      } else {
+        return "收起";
+      }
+    },
+  },
+  mounted() {
+    // this.getIsUseVoice();
+    this.$nextTick(function () {
+      this.searchDis();
+    });
+    
+  },
+};
+</script>
+<style lang="scss" scoped>
+ @import "@/views/device/hydraulic/index.scss";
+</style>

+ 2 - 2
static/app_config.json

@@ -6,10 +6,10 @@
     "loginPageRole": "ai",
     "deviceBasicCount": 0,
     "indexDeviceStyle": "default",
-    "platformName": "智能工器具",
+    "platformName": "测试基站标签",
     "showOfficialSiteLink": false,
     "loginWord": {
-      "default": "智能工器具平台"
+      "default": "测试基站标签"
     },
     "serviceType": {
       "basic": "/total",