likang 3 years ago
parent
commit
d2b2ba5169

+ 2 - 0
src/config/componentsMap.js

@@ -65,6 +65,8 @@ export default {
     maintenancemapper: () => import ('@/views/work_record/maintenancemapper'),
     //作业位置管理表
     worklocal_config: () =>  import ('@/views/work_record/worklocal_config'),
+    //工作计划
+    work_plan: () =>  import ('@/views/work_record/work_plan'),
      //设备类别表
     equipmentType: () => import ('@/views/equipment/equipment_type'),
     //同步方案

+ 15 - 14
src/views/work_box_map/routeMap.vue

@@ -25,7 +25,7 @@
     </bm-control>
     <bm-control anchor="BMAP_ANCHOR_TOP_RIGHT" :offset="listControlOffset">
       <el-tabs type="border-card" @tab-click="clickTab" v-model="activeName">
-        <el-tab-pane label="设备列表" name="deviceList">
+        <el-tab-pane label="工具柜列表" name="deviceList">
             <div id="student-container">
               <el-table
                 class="ontop-table"
@@ -45,9 +45,9 @@
                 <el-table-column
                   property="number"
                   align="center"
-                  label="设备">
+                  label="设备名称">
                   <template slot-scope="scope">
-                     {{ scope.row.number}}
+                     {{ scope.row.name}}
                   </template>
                 </el-table-column>
               </el-table>
@@ -106,7 +106,7 @@ export default {
       activeName: 'deviceList',
       loading: false,
       center: '杭州市滨江区',
-      url:'map/queryDeviceList',
+      url:'map/queryWorkBoxMap?equipment_type=6',
       pointObj:[],
       currentUserId:'',
       currentActiveRfid:'',
@@ -128,7 +128,7 @@ export default {
  
       gpsFormVisible:false,
       userFormVisible:false,
-      markerIcons: 'https://rlfd.oss-cn-hangzhou.aliyuncs.com/smart_tool/beng.png',
+      markerIcons: 'https://rlfd.oss-cn-hangzhou.aliyuncs.com/smart_tool/work_box.png',
 
     };
   },
@@ -166,7 +166,7 @@ export default {
     },
     // 获取风场数据
     getwindData() {
-      this.$http.get('wind/getWindList').then(resp => {
+      this.$http.get('map/queryWorkBoxMap?equipment_type=6').then(resp => {
           if (resp.code === 10000) {
               resp.data.forEach(wind => {
                 this.addShapeWind(wind)
@@ -289,25 +289,26 @@ export default {
             $('#marker_address').text(address);
         });
       
-        var content ='<div class="info_label">设备名称:测试设备</div>'
-        content +='<div class="info_label">设备编号:' + (data.number) + '</div>'
+        var content ='<div class="info_label">设备名称:'+(data.name)+'</div>'
+        content +='<div class="info_label">设备物料号:' + (data.material_number) + '</div>'
         content += '<div class="info_label">定位地址:<a id="marker_address">' + address + '</a></div>' 
+        content +='<div class="info_label">设备状态:' + (data.status1) + '</div>'
 
         // content += '<div class="info_label">在线时间:'+data.online_time+'</div>'
 
-        content+='<div class="handle_btn info_label">'
+        // content+='<div class="handle_btn info_label">'
 
-        content+='<button onclick="showGpsRoute(\''+data.number+'\')" class="el-button el-button--info el-button--small">历史定位</button>';
+        // content+='<button onclick="showGpsRoute(\''+data.number+'\')" class="el-button el-button--info el-button--small">历史定位</button>';
 
-        // content+='<button onclick="showUserInfo(\''+data.user_id+'\')" class="el-button el-button--info el-button--small">用户信息</button>'
+        // // content+='<button onclick="showUserInfo(\''+data.user_id+'\')" class="el-button el-button--info el-button--small">用户信息</button>'
           
-        content+='</div>'
+        // content+='</div>'
           
       return content
     },
     queryLocationList(){
       const query = this.queryParam
-      this.$http.get("map/queryLocationList", { params: query }).then(response => {
+      this.$http.get("map/queryWorkBoxMap?equipment_type=6", { params: query }).then(response => {
         if(response.data.length>0){
           this.addMarkerPoint(response.data);
           // this.map.setViewport(this.pointObj)
@@ -336,7 +337,7 @@ export default {
       //   this.url = 'map/queryAlarmList';
       // } else 
       if (name == 'deviceList') {
-        this.url = 'map/queryDeviceList';
+        this.url = 'map/queryWorkBoxMap';
       }
       this.handleRefresh();
     },

+ 458 - 0
src/views/work_record/work_plan/detail.vue

@@ -0,0 +1,458 @@
+<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="6"
+              style="margin-top: 10px; font-size: 14px; color: #a0a0a0"
+            >
+              <div class="detail-item">
+                <span>所属地区:</span>
+                <span class="item">{{ data.department_name }}</span>
+              </div>
+              <div class="detail-item">
+                <pre style="display: inline">工作位置:</pre>
+                <span class="item">{{ data.work_local_name }}</span>
+              </div>
+              <div class="detail-item">
+                <span>螺栓型号:</span>
+                <span class="item">{{ data.boit_type_name }}</span>
+              </div>
+              <div class="detail-item">
+                <pre style="display: inline">外      径:</pre>
+                <span class="item">{{ data.external_diameter }}</span>
+              </div>
+            </el-col>
+            <el-col
+              :span="6"
+              style="margin-top: 10px; font-size: 14px; color: #a0a0a0"
+            >
+              <div class="detail-item">
+                <pre style="display: inline">风场名称:</pre>
+                <span class="item">{{ data.wind_name }}</span>
+              </div>
+              <div class="detail-item">
+                <span>所属部件:</span>
+                <span class="item">{{data.parts_name}}</span>
+              </div>
+              <div class="detail-item">
+                <pre style="display: inline">扭    矩:</pre>
+                <span class="item">{{ data.torque }}</span>
+              </div>
+               <div class="detail-item">
+                <pre style="display: inline">维保时间:</pre>
+                <span class="item">{{ data.created_at }}</span>
+              </div>
+            </el-col>
+            <el-col
+              :span="6"
+              style="margin-top: 10px; font-size: 14px; color: #a0a0a0"
+            >
+              <div class="detail-item">
+                <pre style="display: inline">风机机位号:</pre>
+                <span class="item">{{ data.fan_number }}</span>
+              </div>
+              <div class="detail-item">
+                <span>螺栓样式:</span>
+                <span class="item">{{ data.bolt_style_name }}</span>
+              </div>
+              <div class="detail-item">
+                <pre style="display: inline">压   力:</pre>
+                <span class="item">{{ data.pressure }}</span>
+              </div>
+              <div class="detail-item">
+                <pre style="display: inline">工作人员:</pre>
+                <span class="item">{{ data.work_name }}</span>
+              </div>
+            </el-col>
+            <el-col :span="6"></el-col>
+          </div>
+        </el-row>
+       
+      </el-tab-pane>
+      <el-tab-pane label="统计分析" name="second">
+        <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" width="50vw" :options="options" />
+              
+          </div>
+      </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,
+            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]);
+                    }
+                }]
+            },
+    };
+   
+   
+
+  },
+   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: black;
+  margin-top: 5px;
+}
+.el-table .warning-row {
+  background: oldlace !important;
+}
+
+.el-table .success-row {
+  background: #f0f9eb !important;
+}
+::v-deep .el-drawer{
+  overflow: scroll !important;
+}
+
+.search_title {
+  font-size: 12px;
+  color: #6a6a6a;
+}
+.chart{
+  width: 500px;
+}
+
+</style>

+ 303 - 0
src/views/work_record/work_plan/formModel.vue

@@ -0,0 +1,303 @@
+<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"
+    :dialogAttrs="{ 'close-on-click-modal': false,'top':'8vh'}"
+  />
+
+</template>
+
+<script>
+export default {
+  props: ["formModelVisible", "title"],
+  data() {
+    return {
+      formData: {},
+      formFieldsData: {
+        id:"",
+        is_used:"",
+        department_id: "",
+        number: "",
+        name: "",
+        model: "",
+        fan_id:"",
+        outside:"",
+        torque:"",
+        wrench:"",
+        stress:"",
+        bolt_size:"",
+        bolt_number:"",
+        install_position:"",
+        brand:"",
+        supplier:"",
+        out_date:"",
+        fastening_scheme:"",
+        remark: "",
+
+      }, 
+      url: "flange",
+      formConfig: {
+        formDesc: {
+           is_used: {
+            break:true,
+            layout:12,
+            type: "select",
+            label: "使用状态",
+            required: true,
+            isOptions: true,
+            options: [
+              {
+                text: "使用",
+                value: 1
+              },
+              {
+                text: "未使用",
+                value: -1
+              },
+              {
+                text: "已废弃",
+                value: -2
+              }
+            ]
+          },
+          
+           department_id: {
+            layout:12,
+            type: "cascader",
+            label: "所属部门",
+            isOptions: true,
+            options: [],
+            required: true,
+            attrs: {
+              props: {
+                label: "department_name",
+                value: "id",
+                emitPath: false,
+                checkStrictly: true
+
+              }
+            }
+          },
+          //风场id
+          fan_id:{
+             layout:12,
+              type: "cascader",
+              label: "风机编号",
+              isOptions: true,
+              options: [],
+              required: true,
+              vif:true,
+              attrs: {
+                //查询 
+                filterable:true,
+                props: {
+                  label: "text",
+                  value: "value",
+                  emitPath: false,
+                  multiple:false
+                }
+            }
+
+          },
+          number: {
+            layout:12,
+            required:true,
+            type: "input",
+            label: "编号",
+           
+          },
+           name: {
+            layout:12,
+            type: "input",
+            label: "名称",
+            required:true
+          },
+          model: {
+            layout:12,
+            required:true,
+            type: "select",
+            label: "型号",
+            required:true,
+            options:[]
+          },
+           outside:{
+            layout:12,
+            type: "input",
+            label: "外径",
+             required:true
+          },
+           torque:{
+             layout:12,
+             type: "input",
+             label: "扭矩",
+             required:true,
+             rules: [
+             {pattern: /^((0{1}\.\d{1,2})|([1-9]\d*\.{1}\d{1,2})|([1-9]+\d*)|0)$/,message: '请輸入正数,最多保存两位小数'}
+            ]
+          },
+          wrench:{
+             layout:12,
+             type: "select",
+              label: "液压扳手",
+              isOptions: true,
+              options: [],
+              required: true,
+              attrs: {
+                //查询
+                filterable:true,
+                multiple:true,
+                props: {
+                  label: "text",
+                  value: "value",
+                  emitPath: false,
+                  checkStrictly: false,
+                  multiple:false
+                }
+            }
+
+          },
+          fastening_scheme:{
+             layout:12,
+             type: "select",
+              label: "紧固方案",
+              isOptions: true,
+              options: [],
+              required: true,
+              attrs: {
+                //查询
+                filterable:true,
+                multiple:true,
+                props: {
+                  label: "text",
+                  value: "value",
+                  emitPath: false,
+                  checkStrictly: false,
+                  multiple:false
+                }
+            }
+
+          },
+          stress:{
+             layout:12,
+             required: true,
+             type: "input",
+             label: "压力",
+             rules: [
+               {pattern: /^((0{1}\.\d{1,2})|([1-9]\d*\.{1}\d{1,2})|([1-9]+\d*)|0)$/,message: '请輸入正数,最多保存两位小数'}
+            ]
+          },
+          bolt_size: {
+             layout:12,
+             type: "input",
+             label: "螺栓尺寸",
+             rules: [
+             {pattern: /^((0{1}\.\d{1,2})|([1-9]\d*\.{1}\d{1,2})|([1-9]+\d*)|0)$/,message: '请輸入正数,最多保存两位小数'}
+            ]
+          },
+           bolt_number: {
+            required: true,
+            layout:12,
+             type: "input",
+             label: "螺栓数量",
+             rules: [
+              
+               {pattern: /^[1-9]\d*$/,message: '请輸入正整数'}
+              
+            ]
+          },
+          install_position:{
+             layout:12,
+            type: "input",
+            label: "安装位置",
+            vif:true
+          },
+           brand: {
+             layout:12,
+            type: "input",
+            label: "品牌"
+          },
+           supplier: {
+            layout:12,
+            type: "input",
+            label: "供应商"
+          },
+            out_date: {
+            layout:12,
+            type: "date",
+            label: "出厂日期"
+          },
+          remark: {
+            type: "textarea",
+            label: "备注"
+          }
+        },
+        order: ["is_used","model","department_id","fan_id","number", "name","outside","wrench","torque","fastening_scheme","stress","bolt_size","bolt_number","install_position","brand","supplier","out_date","remark"]
+      }
+    };
+  },
+  created() {
+    // this.$http.get("departments").then(response => {
+    //   this.formConfig.formDesc.department_id.options = response.data;
+    // });
+  
+    //  this.$http.get("getwindfan").then(response => {
+    //   this.formConfig.formDesc.fan_id.options = response.data;
+    // });
+    // this.$http.get("get_device_mold",{ params: {type:2} }).then(resp => {
+    //     this.formConfig.formDesc.model.options = resp.data
+    //  });
+    // this.$http.get("wrenchtype").then(response => {
+    //   this.formConfig.formDesc.wrench.options = response.data;
+    // });
+    // this.$http.get("synschemetype").then(response => {
+    //   this.formConfig.formDesc.fastening_scheme.options = response.data;
+    // });
+
+
+
+  },
+  methods: {
+    handleFormSubmit(data) {
+
+      this.$parent.handleSubmit();
+    },
+    handleRequest(data) {
+      return Promise.resolve();
+    },
+    handleRequestSuccess() {
+      this.$message.success("发送成功");
+    }
+  },
+
+  computed: {
+    DialogVisible: {
+      set(val) {
+        this.$emit("sendVal", val); // 表示将子组件改变的值传递给父组件
+      },
+      get() {
+        if(this.formModelVisible)
+        {
+      
+            if(!this.formFieldsData.id)
+            {
+                this.formConfig.formDesc.fan_id.vif=false;
+                this.formConfig.formDesc.install_position.vif=false;
+            }
+            else
+            {
+              this.formConfig.formDesc.fan_id.vif=true;
+              this.formConfig.formDesc.install_position.vif=false;
+            }
+        }
+        return this.formModelVisible; // 表示获取父组件的值
+      }
+    }
+  }
+};
+</script>

+ 109 - 0
src/views/work_record/work_plan/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;
+  }

+ 548 - 0
src/views/work_record/work_plan/index.vue

@@ -0,0 +1,548 @@
+<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-cascader
+            class="filter-item form-search-input fl"
+            v-model="queryParam.department_id"
+            :options="departments"
+            clearable
+            :props="{
+              emitPath:false,
+              label: 'department_name',
+              value: 'id',
+            }"
+            @change="handleChange"
+          ></el-cascader>
+        </div>
+        <div class="search-item">
+         <el-select
+                  v-model="queryParam.wind_id"
+                  placeholder="风场名称"
+                  class="filter-item form-search-input fl"
+                  clearable
+                >
+             <el-option v-for="item in wind_options" 
+             :key="item.value" 
+             :label="item.text" 
+             :value="item.value"></el-option>
+          </el-select>
+          
+        </div>
+         <div class="search-item">
+          <el-input  
+            v-model="queryParam.fan_number"
+            placeholder="风机机位号"
+            clearable
+             class="filter-item form-search-input fl"
+            @keyup.enter.native="handleSearch"
+          />
+        </div>
+
+        <div class="search-item">
+          <el-input  
+            v-model="queryParam.number"
+            placeholder="编号"
+            clearable
+             class="filter-item form-search-input fl"
+            @keyup.enter.native="handleSearch"
+          />
+        </div>
+         <div class="search-item">
+          <el-input  
+            v-model="queryParam.work_name"
+            placeholder="操作人员名称"
+            clearable
+             class="filter-item form-search-input fl"
+            @keyup.enter.native="handleSearch"
+          />
+        </div>
+        <div class="search-item"> 
+               <el-select
+                  v-model="queryParam.work_local"
+                  placeholder="工作位置"
+                  class="filter-item form-search-input fl"
+                  clearable
+                >
+             <el-option v-for="item in work_local_options" 
+             :key="item.value" 
+             :label="item.name" 
+             :value="item.value"></el-option>
+          </el-select>
+        </div>
+
+          <div class="search-item"> 
+               <el-select
+                  v-model="queryParam.parts"
+                  placeholder="所属部件"
+                  class="filter-item form-search-input fl"
+                  clearable
+                >
+             <el-option v-for="item in parts_options" 
+             :key="item.value" 
+             :label="item.name" 
+             :value="item.value"></el-option>
+          </el-select>
+          </div>
+
+           <div class="search-item"> 
+               <el-select
+                  v-model="queryParam.bolt_style"
+                  placeholder="螺栓样式"
+                  class="filter-item form-search-input fl"
+                  clearable
+                >
+             <el-option v-for="item in bolt_style_options" 
+             :key="item.value" 
+             :label="item.name" 
+             :value="item.value"></el-option>
+          </el-select>
+          </div>
+
+             <div class="search-item"> 
+               <el-select
+                  v-model="queryParam.bolt_type"
+                  placeholder="螺栓型号"
+                  class="filter-item form-search-input fl"
+                  clearable
+                >
+             <el-option v-for="item in bolt_type_options" 
+             :key="item.value" 
+             :label="item.name" 
+             :value="item.value"></el-option>
+          </el-select>
+          </div>
+        
+
+        <div class="search-item">
+          <el-date-picker
+              v-model="queryParam.time"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="起始日期"
+              end-placeholder="结束日期">
+            </el-date-picker>
+        </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
+        >
+        <el-button
+          class="filter-item search fl"
+          :icon="this.searchDisplay ? 'el-icon-arrow-up' : 'el-icon-arrow-down'"
+          @click="searchDis"
+          >{{ word }}</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-setting"
+          @click="showColumnOption"
+          >列设置</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="plan_name"
+        label="工作计划"
+        align="center"
+        v-if="showColumn.number"
+        :show-overflow-tooltip="true"
+      />
+       <el-table-column
+        prop="wind_name"
+        label="风场名称"
+        align="center"
+        v-if="showColumn.wind_name"
+        :show-overflow-tooltip="true"
+      />
+      <el-table-column
+        prop="fan_number"
+        label="风机机位号"
+        align="center"
+        v-if="showColumn.fan_number"
+        :show-overflow-tooltip="true"
+        
+      />
+      <el-table-column
+        prop="work_sign_name"
+        label="工作位置"
+        align="center"
+        v-if="showColumn.work_local"
+        :show-overflow-tooltip="true"
+      />
+      <el-table-column
+        prop="parts_sign_name"
+        label="部件"
+        align="center"
+        v-if="showColumn.parts"
+        :show-overflow-tooltip="true"
+      />
+      <el-table-column
+        prop="boit_type_sign_name"
+        label="螺栓型号"
+        align="center"
+        v-if="showColumn.boit_type"
+        :show-overflow-tooltip="true"
+      />
+      <el-table-column
+        prop="creat_name"
+        label="创建人名称"
+        align="center"
+        v-if="showColumn.work_name"
+        :show-overflow-tooltip="true"
+      />
+       <el-table-column
+        prop="created_at"
+        label="创建时间"
+        align="center"
+        v-if="showColumn.create_time"
+        :show-overflow-tooltip="true"
+      />
+      <el-table-column
+        label="操作"
+        width="150"
+        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>
+        </template>
+      </el-table-column>
+    </el-table>
+    <transition name="fade">
+      <div class="columnOption" v-show="isShowColumn">
+        <div class="content">
+          <div class="head">选择显示字段</div>
+          <div class="body">
+            <el-checkbox v-model="checkList.id">序号</el-checkbox>
+            <el-checkbox v-model="checkList.department_name">所属地区</el-checkbox>
+            <el-checkbox v-model="checkList.wind_name">风场名称</el-checkbox>
+            <el-checkbox v-model="checkList.fan_number">风机机位号</el-checkbox>
+            <el-checkbox v-model="checkList.number">编号</el-checkbox>
+            <el-checkbox v-model="checkList.parts">所属部件</el-checkbox>
+            <el-checkbox v-model="checkList.bolt_style">螺丝样式</el-checkbox>
+            <el-checkbox v-model="checkList.boit_type">螺栓型号</el-checkbox>
+            <el-checkbox v-model="checkList.torque">扭矩</el-checkbox>
+            <el-checkbox v-model="checkList.pressure">压力</el-checkbox>
+            <el-checkbox v-model="checkList.external_diameter">外径</el-checkbox>
+            <el-checkbox v-model="checkList.work_name">操作人员</el-checkbox>
+            <el-checkbox v-model="checkList.created_at">创建时间</el-checkbox>
+
+          </div>
+          <div class="footer">
+            <el-button size="small" type="primary" plain @click="saveColumn"
+              >保存列配置</el-button
+            >
+          </div>
+        </div>
+      </div>
+    </transition>
+    <el-button
+      type="primary"
+      icon="el-icon-plus"
+      :loading="downloadLoading"
+      style="margin-top: 15px"
+      @click="handleCreate"
+      >添加</el-button
+    >
+    <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"
+    />
+     <form-model
+      @sendVal="closeDialog"
+      :formModelVisible="formVisible"
+      :title="title"
+      :ref="formName"
+    />
+    <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: "work_plan",
+  directives: { action },
+  mixins: [rlListOperate],
+  components: {
+    formModel,
+    detail,
+  },
+  data() {
+    return {
+      url: "workplan",
+      loading:false,
+      windoptions:[],
+      //工作位置
+      work_local_options:[],
+      //所属部件
+      parts_options:[],
+      //螺栓样式
+      bolt_style_options:[],
+      //螺栓型号
+      bolt_type_options:[],
+      //风场型号
+      wind_options:[],
+
+      queryParam: {
+        number: "",
+        department_id: [],
+        fan_number:'',
+        work_local:'',
+        parts:'',
+        //风场的id
+        wind_id:"",
+        bolt_style:'',
+        bolt_type:'',
+        //时间
+        time: "",
+        work_name:"",
+      
+      },
+      defaultQueryParam:['type'],
+      current_type: {
+        0: "success",
+        1: "danger",
+      },
+      formName:'worklocation',
+      formVisible:false,
+      //搜索
+      searchDisplay: true,
+      departments: [],
+      deviceModels:[],
+
+
+      //详情
+      detailVisible:false,
+      detail:{},
+
+      isShowColumn: false,
+      // 列的配置化对象,存储配置信息
+      checkList: {},
+      showColumn: {
+        id:true,
+        department_name:false,
+        wind_name:true,
+        fan_number:true,
+        number: true,
+        work_local: true,
+        parts:true,
+        bolt_style: true,
+        boit_type: true,
+        torque:true,
+        pressure:true,
+        external_diameter:true,
+        created_at:true,
+        work_name:true
+      }
+    };
+  },
+  created() {
+     this.$http.get("wind/getWindOptions").then((response) => {
+            this.wind_options = response.data;
+      });
+    this.$http.get("departments").then((response) => {
+      this.departments = response.data;
+    });
+     this.$http.get("get_mainten_option?type="+"2").then((response) => {
+      this.work_local_options = response.data;
+    });
+     this.$http.get("get_mainten_option?type="+"1").then((response) => {
+      this.parts_options = response.data;
+    });
+    this.$http.get("get_mainten_option?type="+"3").then((response) => {
+      this.bolt_style_options = response.data;
+    });
+     this.$http.get("get_mainten_option?type="+"4").then((response) => {
+      this.bolt_type_options = response.data;
+    });
+
+  },
+  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
+      console.log(row);
+    },
+    showColumnOption() {
+      this.isShowColumn = true;
+    },
+    saveColumn() {
+      localStorage.setItem("WorklocalSet", 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();
+    });
+    // 发请求得到checkListInitData的列的名字
+    if (localStorage.getItem("WorklocalSet")) {
+      this.checkList = JSON.parse(localStorage.getItem("WorklocalSet"));
+    } else {
+      this.checkList = {
+        id:true,
+        department_name:false,
+         wind_name:true,
+        fan_number:true,
+        number: true,
+        work_local: true,
+        parts:true,
+        bolt_style: true,
+        boit_type: true,
+        torque:true,
+        pressure:true,
+        external_diameter:true,
+        created_at:true,
+        work_name:true
+      };
+    }
+  },
+};
+</script>
+<style lang="scss" scoped>
+ @import "@/views/device/hydraulic/index.scss";
+</style>