From d92ca6fdca6e7dae8c9ff4596e2ad3519f9843c6 Mon Sep 17 00:00:00 2001
From: zhuzhuanzhuan
Date: 星期一, 07 八月 2023 17:38:11 +0800
Subject: [PATCH] 利用率走势界面的样式调整,利用率分段分析界面绘制,接口调取,渲染,功能的完成,定时任务加日志展示详情的处理

---
 src/views/mdc/base/modules/openRateTrendAnalysis/openRateTrendAnalysisMain.vue       |  137 ++++--
 src/views/mdc/base/openRateTrendAnalysis.vue                                         |    1 
 src/views/mdc/base/modules/openRateFractionAnalysis/openRateFractionAnalysisMain.vue |  547 ++++++++++++++++++++++++
 src/views/mdc/base/openRateFractionAnalysis.vue                                      |  122 +++++
 src/views/system/QuartzJobList.vue                                                   |   14 
 src/views/system/modules/QuartzJobListModal.vue                                      |  383 +++++++++++++++++
 src/views/system/modules/QuartzJobDetails.vue                                        |   72 +++
 7 files changed, 1,229 insertions(+), 47 deletions(-)

diff --git a/src/views/mdc/base/modules/openRateFractionAnalysis/openRateFractionAnalysisMain.vue b/src/views/mdc/base/modules/openRateFractionAnalysis/openRateFractionAnalysisMain.vue
new file mode 100644
index 0000000..8a5052c
--- /dev/null
+++ b/src/views/mdc/base/modules/openRateFractionAnalysis/openRateFractionAnalysisMain.vue
@@ -0,0 +1,547 @@
+<template>
+  <div class="efficiency_list" style="width: 100%;height: 100%;">
+    <a-card :bordered="false">
+      <!-- 鏌ヨ鍖哄煙 -->
+      <div class="table-page-search-wrapper">
+        <a-form layout="inline" @keyup.enter.native="searchQuery">
+          <a-row :gutter="24">
+            <a-col :md="6" :sm="6">
+              <a-form-item label="鏃堕棿">
+                <a-range-picker @change="dateParamChange" :disabledDate="disabledDate" format="YYYYMMDD" v-model="dates"/>
+              </a-form-item>
+            </a-col>
+            <a-col :md="7" :sm="7" :xs="7">
+              <a-form-item label="鏃堕棿娈�">
+                <a-time-picker :default-value="moment('00:00', 'HH:mm')" format="HH:mm" @change="onChangeStart" />
+                鑷�
+                <a-time-picker :default-value="moment('08:00', 'HH:mm')" format="HH:mm" @change="onChangeEnd" />
+              </a-form-item>
+            </a-col>
+            <a-col :lg="2" :md="3" :sm="3" :xs="3">
+              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+      <div id="DeviceList">
+        <div class="openRateTrendDg">
+          <div id="Efficiency" class="container" style="margin-top: 20px;">
+            <div class="table2">
+              <table class="dataContent table" border="1" cellspacing="0" cellpadding="0" style="white-space: nowrap;text-align: center;">
+                <thead>
+                <tr class="thead fixed equipname">
+                  <th class="thgu dong1 name" rowspan="2" style="min-width: 150px; max-width: 150px;width: 150px;">璁惧缂栧彿</th>
+                  <th class="thgu dong2 name" rowspan="2" style="min-width: 150px; max-width: 150px;width: 150px;">璁惧鍚嶇О</th>
+                  <th class="thgu dong3 name" rowspan="2" style="min-width: 100px; max-width: 100px;width: 100px;">璁惧绫诲瀷</th>
+                  <template v-for="(tableHead, index) in tableHeads">
+                    <th class="timeth">{{tableHead}}</th>
+                  </template>
+                </tr>
+                </thead>
+                <tbody>
+                <tr class="mathData" v-for="(item, index) in dataList" @click="TableDraw(index,item)">
+                  <td  class="tdgu  kaitou">{{item.equipmentId}}</td>
+                  <td  class="tdgu1 kaitou">{{item.equipmentName}}</td>
+                  <td  class="tdgu2 kaitou">{{item.equipmentType}}</td>
+                  <template v-for="(tableHead, index) in item.dataList">
+                    <td :style="{background:tableHead.color }">{{tableHead.utilizationRate | numFilter}}</td>
+                  </template>
+                </tr>
+                </tbody>
+              </table>
+            </div>
+          </div>
+        </div>
+        <div id="openRateTrendChart" style="width: 100%;height: 60%"></div>
+      </div>
+    </a-card>
+  </div>
+</template>
+
+<script>
+  import moment from 'moment'
+  import { putAction, getAction } from '@/api/manage'
+  import $ from 'jquery'
+  import '@/components/table2excel/table2excel'
+  import { ajaxGetDictItems, getDictItemsFromCache, duplicateCheck } from '@/api/api'
+  import {
+    JeecgListMixin
+  } from '@/mixins/JeecgListMixin'
+  export default {
+    // mixins: [JeecgListMixin],
+    name: 'openRateFractionAnalysisMain',
+    components: {},
+    data() {
+      return {
+        dataSource: [],
+        /* table鍔犺浇鐘舵�� */
+        loading: false,
+        typeTree: "",
+        typeParent: 1,
+        typeEquipment: 1,
+        TreeIDOne: 1,
+        TreeIDTwo: 2,
+        deviceTypeDict: '',
+        dates: [],
+        identifying: [],
+        queryParam: {},
+        queryParams: {},
+        queryParamEquip: {},
+        queryParamPeople: {},
+        efficiencyOptions: [
+          { label: '鍒╃敤鐜�', value: 'lyl' },
+          { label: '寮�鏈虹巼', value: 'kjl' },
+          { label: '寮�鏈烘椂闂�', value: 'kjsj' },
+          { label: '鍔犲伐鏃堕棿', value: 'jgsj' },
+          { label: '寰呮満鏃堕棿', value: 'djsj' },
+          { label: '鍏虫満鏃堕棿', value: 'gjsj' }
+        ],
+        checkedList: ['lyl'],
+        dataList: [],
+        url: {
+          efficiencyList: '/mdc/efficiencyReport/utilizationRateSectionAnalyze',
+          listByType: '/mdc/MdcUtilizationRate/getByType'
+        },
+        tableHeads: [],
+        XData:[0],
+        YData:[0],
+      }
+    },
+    props: { nodeTree: '', Type: '', nodePeople: '' },
+    /**
+     * 鐢熷懡鍛ㄦ湡 鎸傝浇鍓�
+     * */
+    created() {
+      this.dates = [moment().subtract('days', 8), moment().subtract('days', 1)]
+      this.queryParam.startDate = moment(this.dates[0]).format('YYYYMMDD')
+      this.queryParam.endDate = moment(this.dates[1]).format('YYYYMMDD')
+      this.queryParam.startTime = '00:00'
+      this.queryParam.endTime = "08:00"
+      this.queryParam.typeTree = "1"
+      this.loadData1()
+    },
+    watch: {
+      Type(valmath) {
+        this.dataList = [];
+        this.queryParam.typeTree = valmath
+      },
+      nodeTree(val) { //鐩戝惉currSelected 鍙樺寲锛屽皢鍙樺寲鍚庣殑鏁板�间紶閫掔粰 getCurrSelected 浜嬩欢
+        if (JSON.stringify(val) != '{}') {
+          if (val.equipmentId != null) {
+            this.queryParamEquip.parentId = ''
+            this.queryParamEquip.equipmentId = val.equipmentId
+          } else {
+            this.queryParamEquip.parentId = val.key
+            this.queryParamEquip.equipmentId = ''
+          }
+          /*杩欓噷浣犳槸鐩戝惉鍒版爲寰楀彉鍖� 鏄笉鏄姹備竴娆�*/
+          this.searchQuery()
+        }
+      },
+      nodePeople(val) {
+        if (JSON.stringify(val) != '{}') {
+          if (val.equipmentId != null) {
+            this.queryParamPeople.parentId = val.equipmentId
+            this.queryParamPeople.equipmentId = ''
+          } else {
+            this.queryParamPeople.parentId = val.key
+            this.queryParamPeople.equipmentId = ''
+          }
+          this.searchQuery()
+        }
+      }
+    },
+    filters: {
+      numFilter(value) {
+        if (value) {
+          return parseFloat((value * 100).toFixed(2))
+        } else {
+          return '0'
+        }
+      }
+    },
+    methods: {
+      moment,
+      onChangeStart(time, timeString) {
+        this.queryParam.startTime = timeString
+        // console.log(time, timeString);
+      },
+      onChangeEnd(time, timeString) {
+        this.queryParam.endTime = timeString
+        // console.log(time, timeString);
+      },
+      numBerTwo(value){
+        if (value) {
+          return parseFloat((value * 100).toFixed(2))
+        } else {
+          return '0'
+        }
+      },
+      TableDraw(key,val) {
+        this.XData=[0]
+        this.YData[0]
+        var Xarr = []
+        var Yarr = []
+        for (var i = 0; i < val.dataList.length; i++) {
+          Xarr.push(val.dataList[i].theDate)
+          Yarr.push(this.numBerTwo(val.dataList[i].utilizationRate))
+        }
+        this.XData=Xarr
+        this.YData=Yarr
+        // if(this.openRateTrendAnalysisChart !=null && this.openRateTrendAnalysisChart != '' && this.openRateTrendAnalysisChart != undefined){
+        //     this.openRateTrendAnalysisChart.dispose()
+        // }
+
+        this.draw()
+      },
+      //Can not slect days before today and today
+      disabledDate(current) {
+        return current && current > moment().subtract('days', 1);
+      },
+      dateParamChange(v1, v2) {
+        this.queryParam.startDate = v2[0]
+        this.queryParam.endDate = v2[1]
+      },
+      searchQuery() {
+        if (this.queryParam.typeTree == "1") {
+          this.queryParam.parentId = this.queryParamEquip.parentId
+          this.queryParam.equipmentId = this.queryParamEquip.equipmentId
+        } else {
+          this.queryParam.parentId = this.queryParamPeople.parentId
+          this.queryParam.equipmentId = ""
+        }
+        this.loadData1()
+        // this.onClearSelected()
+      },
+      // searchReset() {
+      //   this.typeTree = this.queryParam.typeTree
+      //   this.typeParent =  this.queryParam.parentId
+      //   this.typeEquipment = this.queryParam.equipmentId
+      //   this.queryParam = {}
+      //   this.dates = []
+      //   this.queryParam.typeTree = this.typeTree
+      //   this.queryParam.parentId = this.typeParent
+      //   this.queryParam.equipmentId =  this.typeEquipment
+      //   // this.ipagination.current = 1
+      //   this.loadData1();
+      //   // this.queryParam = {}
+      //   // this.dates = []
+      //   // this.loadData()
+      //   // this.onClearSelected()
+      // },
+      // loadData1() {
+      //   let that = this
+      //   that.columns=[
+      //     {
+      //       title: '璁惧缂栧彿',
+      //       align: 'center',
+      //       dataIndex: 'equipmentId',
+      //       width:'150px'
+      //     },
+      //     {
+      //       title: '璁惧鍚嶇О',
+      //       align: 'center',
+      //       dataIndex: 'equipmentName',
+      //       width:'150px'
+      //     },
+      //   ]
+      //   that.tableHeads = []
+      //   that.dataList = []
+      //   getAction(this.url.efficiencyList, that.queryParam).then(res => {
+      //     var tmp = {}
+      //     console.log(res)
+      //     if (res.success)
+      //
+      //       that.dataSource = res.result.mdcEfficiencyList
+      //       for(var k = 0;k<that.dataSource[0].dataList.length;k++){
+      //         that.columns.push(
+      //           {
+      //             title:that.dataSource[0].dataList.theDate,
+      //             align: 'center',
+      //             width:'120px',
+      //             // dataIndex:'utilizationRate',
+      //           }
+      //         )
+      //       }
+      //       for(var i = 0;i<that.dataSource.length;i++){
+      //         for (var j = 0; j < that.dataSource[i].dataList.length;j++){
+      //           // that.columns.push(
+      //           //   {
+      //           //     title:that.dataSource[0].dataList[j].theDate,
+      //           //     align: 'center',
+      //           //     width:'120px',
+      //           //     dataIndex:'utilizationRate',
+      //           //   }
+      //           // )
+      //         }
+      //
+      //       }
+      //       console.log(that.columns)
+      //       console.log(that.dataSource)
+      //       // this.initDeviceType(this.dataList)
+      //       this.draw()
+      //     }
+      //   }
+      loadData1() {
+        this.tableHeads = []
+        this.dataList = []
+        getAction(this.url.efficiencyList, this.queryParam).then(res => {
+          if (res.success) {
+            this.tableHeads = res.result.dates
+            this.dataList = res.result.mdcEfficiencyList
+            this.draw()
+            // this.checkSameData(this.dataList)
+            // this.checkSameData1(this.dataList)
+            // this.checkSameData2(this.dataList)
+            // this.combineCell();
+            // this.initDeviceType(this.dataList)
+
+          }
+        })
+      },
+      draw(){
+        let openRateTrendAnalysisChart = this.$echarts.init(document.getElementById('openRateTrendChart'), 'macarons');
+        let openRateTrendChartOptions = {
+          title: {
+            text: '鍒╃敤鐜囪蛋鍔垮垎鏋�',
+            x: 'center',
+            textStyle: {
+              fontSize: 18,
+              fontWeight: 'bolder',
+              color: "#151414"
+            }
+          },
+          tooltip: {
+            trigger: 'axis'
+          },
+          toolbox: {
+            show: true,
+            feature: {
+              mark: { show: true },
+              dataView: { show: true, readOnly: false },
+              magicType: { show: true, type: ['line', 'bar'] },
+              restore: { show: true },
+              saveAsImage: { show: true }
+            }
+          },
+          calculable: true,
+          xAxis: [
+            {
+              type: 'category',
+              data: this.XData
+            }
+          ],
+          yAxis: [
+            {
+              type: 'value'
+            }
+          ],
+          series: [
+            {
+              name: '鍒╃敤鐜�',
+              type: 'bar',
+              data: this.YData,
+              markPoint: {
+                data: [
+                  { type: 'max', name: '鏈�澶у��', symbolSize: 70 },
+                  { type: 'min', name: '鏈�灏忓��', symbolSize: 70 }
+                ]
+              },
+              markLine: {
+                data: [
+                  { type: 'average', name: '骞冲潎鍊�' }
+                ]
+              }
+            }
+          ]
+        };
+        openRateTrendAnalysisChart.setOption(openRateTrendChartOptions,true);
+      }
+    }
+  }
+</script>
+<style scoped>
+  .dataContent {
+    white-space: nowrap;
+    /*margin: 0;*/
+    /*border: none;*/
+    border-collapse: separate;
+    border-spacing: 0;
+    /*table-layout: fixed;*/
+    border: 1px solid #ccc;
+    /*border: 1px solid #ccc;*/
+    width: 100%;
+    /*height: 100%;*/
+    /*overflow: hidden;*/
+    /*overflow-y: auto;*/
+    text-align: center;
+  }
+
+  /*.dataContent .fixed th {*/
+  /*width: 50px;*/
+  /*}*/
+
+  .dataContent .thead th {
+    background-color: #fafafa;
+    text-align: center;
+    height: 30px;
+    padding: 5px;
+  }
+
+  .dataContent .notfixed th {
+    /*width: auto;*/
+  }
+
+  .dataContent tr td {
+    height: 35px;
+  }
+
+  .dataContent .mathData td {
+    padding: 10px;
+    /*display: none;*/
+  }
+
+  .dataContent .mathData .td {
+    /*background-color: #ff9bd2;*/
+    display: inline-block;
+    padding: 10px;
+  }
+
+  .dataContent .mathData .tdd {
+    /*display: none;*/
+  }
+  .table2{
+  width: 100%;
+  height: 100%;
+  overflow: auto;
+  }
+  /*tr th {*/
+    /*height: 50px!important;*/
+  /*}*/
+  /*tr td{*/
+    /*height: 50px!important;*/
+  /*}*/
+  .table2 thead tr th:first-child,
+  .table tbody tr .tdgu{
+    position: sticky;
+    left: 0;
+    z-index: 1;
+  }
+  .table tbody tr .kaitou{
+    z-index: 1;
+    background-color: white;
+  }
+  .table tbody tr .tdgu1{
+    position: sticky;
+    left: 150px;
+    z-index: 2;
+  }
+  .table tbody tr .tdgu2{
+    position: sticky;
+    left: 300px;
+    z-index: 2;
+  }
+  .table tbody tr .tdgu3{
+    position: sticky;
+    left: 450px;
+    z-index: 2;
+  }
+  .table tbody tr .tdgu4{
+    position: sticky;
+    left: 550px;
+    z-index: 2;
+  }
+  .table tbody tr .tdgu5{
+    position: sticky;
+    left: 700px;
+    z-index: 2;
+  }
+  .table2 thead tr .timeth,
+  .table2 thead tr  .thgu {
+    position: sticky;
+    top:0;
+    z-index: 3;
+  }
+  .table2 thead .gudingth th{
+    position: sticky;
+    top: 32px;
+    z-index: 6!important;
+  }
+  .table2 thead .equipname .name{
+    z-index: 3;
+  }
+  .table2 thead .equipname .dong1{
+    z-index: 4;
+    left: 0;
+    /*border: 1px solid #000;*/
+  }
+  .table2 thead .equipname .dong2{
+    z-index: 5;
+    left: 150px;
+  }
+  .table2 thead .equipname .dong3{
+    z-index: 5;
+    left: 300px;
+  }
+  .table2 thead .equipname .dong4{
+    z-index: 5;
+    left: 450px;
+  }
+  .table2 thead .equipname .dong5{
+    z-index: 5;
+    left: 550px;
+  }
+  .table2 thead .equipname .dong6{
+    z-index: 5;
+    left: 700px;
+  }
+
+  @media screen and (min-width: 1920px){
+  #Efficiency{
+  height: 337px!important;
+  overflow: scroll;
+  }
+  }
+  @media screen and (min-width: 1680px) and (max-width: 1920px){
+  #Efficiency{
+  height: 337px!important;
+  overflow: scroll;
+  }
+  }
+  @media screen and (min-width: 1400px) and (max-width: 1680px){
+  #Efficiency{
+  height: 190px!important;
+  overflow: scroll;
+  }
+  }
+  @media screen and (min-width: 1280px) and (max-width: 1400px){
+  #Efficiency{
+  height: 90px!important;
+  overflow: scroll;
+  }
+  }
+  @media screen and (max-width: 1280px){
+  #Efficiency{
+  height: 90px!important;
+  overflow: scroll;
+  }
+  }
+  #Efficiency .table_guding1{
+    position: absolute;
+    overflow: hidden;
+    width: 500px;
+  }
+  #Efficiency .table_guding2{
+    overflow-x: scroll;
+    width: 500px;
+  }
+  /deep/ .ant-card{
+    height: 100%!important;
+  }
+  /deep/ .ant-card .ant-card-body{
+    height: 100%!important;
+  }
+  .efficiency_list #DeviceList{
+    height: 90%!important;
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/mdc/base/modules/openRateTrendAnalysis/openRateTrendAnalysisMain.vue b/src/views/mdc/base/modules/openRateTrendAnalysis/openRateTrendAnalysisMain.vue
index c671ece..a8c7da6 100644
--- a/src/views/mdc/base/modules/openRateTrendAnalysis/openRateTrendAnalysisMain.vue
+++ b/src/views/mdc/base/modules/openRateTrendAnalysis/openRateTrendAnalysisMain.vue
@@ -17,10 +17,10 @@
           </a-form>
         </div>
         <div id="DeviceList">
-          <div class="openRateTrendDg" style="width: 100%;height: 40%;overflow: scroll">
-            <div id="Efficiency" class="container" style="margin-top: 20px;width: 100%;height: 300px">
-              <div class="table2" style="width: 100%;height: 300px">
-                <table class="dataContent table" border="1" cellspacing="0" cellpadding="0" style="white-space: nowrap;width: 100%;height: 300px;text-align: center;">
+          <div class="openRateTrendDg">
+            <div id="Efficiency" class="container" style="margin-top: 20px;">
+              <div class="table2">
+                <table class="dataContent table" border="1" cellspacing="0" cellpadding="0" style="white-space: nowrap;text-align: center;">
                   <thead>
                   <tr class="thead fixed equipname">
                     <th class="thgu dong1 name" rowspan="2" style="min-width: 150px; max-width: 150px;width: 150px;">璁惧缂栧彿</th>
@@ -370,17 +370,66 @@
   }
 </script>
 <style scoped>
-  /*.table2{*/
-    /*width: 100%;*/
+  .dataContent {
+    white-space: nowrap;
+    /*margin: 0;*/
+    /*border: none;*/
+    border-collapse: separate;
+    border-spacing: 0;
+    /*table-layout: fixed;*/
+    border: 1px solid #ccc;
+    /*border: 1px solid #ccc;*/
+    width: 100%;
     /*height: 100%;*/
-    /*overflow: auto;*/
+    /*overflow: hidden;*/
+    /*overflow-y: auto;*/
+    text-align: center;
+  }
+
+  /*.dataContent .fixed th {*/
+  /*width: 50px;*/
   /*}*/
-  tr th {
-    height: 50px!important;
+
+  .dataContent .thead th {
+    background-color: #fafafa;
+    text-align: center;
+    height: 30px;
+    padding: 5px;
   }
-  tr td{
-    height: 50px!important;
+
+  .dataContent .notfixed th {
+    /*width: auto;*/
   }
+
+  .dataContent tr td {
+    height: 35px;
+  }
+
+  .dataContent .mathData td {
+    padding: 10px;
+    /*display: none;*/
+  }
+
+  .dataContent .mathData .td {
+    /*background-color: #ff9bd2;*/
+    display: inline-block;
+    padding: 10px;
+  }
+
+  .dataContent .mathData .tdd {
+    /*display: none;*/
+  }
+  .table2{
+    width: 100%;
+    height: 100%;
+    overflow: auto;
+  }
+  /*tr th {*/
+  /*height: 50px!important;*/
+  /*}*/
+  /*tr td{*/
+  /*height: 50px!important;*/
+  /*}*/
   .table2 thead tr th:first-child,
   .table tbody tr .tdgu{
     position: sticky;
@@ -456,36 +505,36 @@
     left: 700px;
   }
 
-  /*@media screen and (min-width: 1920px){*/
-    /*#Efficiency{*/
-      /*height: 687px!important;*/
-      /*overflow: scroll;*/
-    /*}*/
-  /*}*/
-  /*@media screen and (min-width: 1680px) and (max-width: 1920px){*/
-    /*#Efficiency{*/
-      /*height: 687px!important;*/
-      /*overflow: scroll;*/
-    /*}*/
-  /*}*/
-  /*@media screen and (min-width: 1400px) and (max-width: 1680px){*/
-    /*#Efficiency{*/
-      /*height: 540px!important;*/
-      /*overflow: scroll;*/
-    /*}*/
-  /*}*/
-  /*@media screen and (min-width: 1280px) and (max-width: 1400px){*/
-    /*#Efficiency{*/
-      /*height: 440px!important;*/
-      /*overflow: scroll;*/
-    /*}*/
-  /*}*/
-  /*@media screen and (max-width: 1280px){*/
-    /*#Efficiency{*/
-      /*height: 440px!important;*/
-      /*overflow: scroll;*/
-    /*}*/
-  /*}*/
+  @media screen and (min-width: 1920px){
+    #Efficiency{
+      height: 337px!important;
+      overflow: scroll;
+    }
+  }
+  @media screen and (min-width: 1680px) and (max-width: 1920px){
+    #Efficiency{
+      height: 337px!important;
+      overflow: scroll;
+    }
+  }
+  @media screen and (min-width: 1400px) and (max-width: 1680px){
+    #Efficiency{
+      height: 190px!important;
+      overflow: scroll;
+    }
+  }
+  @media screen and (min-width: 1280px) and (max-width: 1400px){
+    #Efficiency{
+      height: 90px!important;
+      overflow: scroll;
+    }
+  }
+  @media screen and (max-width: 1280px){
+    #Efficiency{
+      height: 90px!important;
+      overflow: scroll;
+    }
+  }
   #Efficiency .table_guding1{
     position: absolute;
     overflow: hidden;
@@ -495,9 +544,9 @@
     overflow-x: scroll;
     width: 500px;
   }
- /deep/ .ant-card{
-   height: 100%!important;
- }
+  /deep/ .ant-card{
+    height: 100%!important;
+  }
   /deep/ .ant-card .ant-card-body{
     height: 100%!important;
   }
diff --git a/src/views/mdc/base/openRateFractionAnalysis.vue b/src/views/mdc/base/openRateFractionAnalysis.vue
new file mode 100644
index 0000000..e54e962
--- /dev/null
+++ b/src/views/mdc/base/openRateFractionAnalysis.vue
@@ -0,0 +1,122 @@
+<template>
+  <div style="width: 100%; height: 100%;">
+    <a-card :bordered="false">
+      <a-row type="flex" :gutter="16">
+        <a-col :md="4">
+          <a-tabs :activeKey="activeKey"  @change="tabChange">
+            <a-tab-pane key="1" tab="杞﹂棿灞傜骇" force-render>
+              <base-tree @getCurrSelected="changeSelectionNode"></base-tree>
+            </a-tab-pane>
+            <a-tab-pane key="2" tab="閮ㄩ棬灞傜骇">,
+              <depart-tree  @getCurrSelectedDD="changeSelectionNodedd"
+              ></depart-tree>
+            </a-tab-pane>
+          </a-tabs>
+        </a-col>
+        <a-col :md="20">
+          <open-rate-fraction-analysis-main  ref="EfficiencyList" :nodePeople='selectPeople' :nodeTree = 'selectEquement' :Type="slectTypeTree"></open-rate-fraction-analysis-main>
+        </a-col>
+      </a-row>
+    </a-card>
+  </div>
+
+</template>
+
+<script>
+  import { putAction, getAction } from '@/api/manage'
+  import { frozenBatch } from '@/api/api'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import JInput from '@/components/jeecg/JInput'
+  import BaseTree from '../common/BaseTree'
+  import openRateFractionAnalysisMain from './modules/openRateFractionAnalysis/openRateFractionAnalysisMain'
+  import JSuperQuery from '@/components/jeecg/JSuperQuery'
+  import JThirdAppButton from '@/components/jeecgbiz/thirdApp/JThirdAppButton'
+  import DepartTree from './modules/DepartList/DepartListTree/DepartTree'
+  export default {
+    name: 'openRateFractionAnalysis',
+    components: {
+      JThirdAppButton,
+      JInput,
+      BaseTree,
+      JSuperQuery,
+      DepartTree,
+      openRateFractionAnalysisMain
+    },
+    data() {
+      return {
+        activeKey: '1',
+        description: '璁惧淇℃伅',
+        selectEquementId: '',
+        selectEquement: {},
+        selectPeople:{},
+        slectTypeTree:"",
+        url: {
+          equipmentStatistics: '/mdc/equipment/equipmentStatistics'
+        }
+      }
+    },
+    created() {
+    },
+    methods: {
+      tabChange(val) {
+        // console.log(val);
+        this.activeKey = val
+        this.slectTypeTree = val
+      },
+      // changeSelection(val) {
+      //   this.selectEquementId = val
+      //   this.$refs.efficiencyList.pQuery(val)
+      //   this.$refs.efficiencyList.searchQuery()
+      // },
+      changeSelectionNode(val) {
+        this.selectEquement = val
+        this.slectTypeTree = "1"
+      },
+      changeSelectionNodedd(val) {
+        this.selectPeople = val
+        this.slectTypeTree = "2"
+      }
+    }
+
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+
+  .equipMessage {
+    width: 100%;
+    height: 10%;
+  }
+
+  .equipMessage table {
+    width: 60%;
+    height: 100%;
+    line-height: 50%;
+  }
+
+  .equipMessage table td {
+    text-align: center;
+  }
+
+  .equipMessage table td span {
+    display: inline-block;
+    width: 15px;
+    height: 15px;
+  }
+
+  .equipMessage table td .equipShutdown {
+    background-color: #808080;
+  }
+
+  .equipMessage table td .equipStandby {
+    background-color: #ffbf37;
+  }
+
+  .equipMessage table td .equipRun {
+    background-color: #19FE01;
+  }
+
+  .equipMessage table td .equipAlarm {
+    background-color: #FD0008;
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/mdc/base/openRateTrendAnalysis.vue b/src/views/mdc/base/openRateTrendAnalysis.vue
index 07c67b2..f2df369 100644
--- a/src/views/mdc/base/openRateTrendAnalysis.vue
+++ b/src/views/mdc/base/openRateTrendAnalysis.vue
@@ -14,7 +14,6 @@
           </a-tabs>
         </a-col>
         <a-col :md="20">
-          <!--<EfficiencyList ref="EfficiencyList" :nodePeople='selectPeople' :nodeTree = 'selectEquement' :Type="slectTypeTree"></EfficiencyList>-->
           <open-rate-trend-analysis-main  ref="EfficiencyList" :nodePeople='selectPeople' :nodeTree = 'selectEquement' :Type="slectTypeTree"></open-rate-trend-analysis-main>
         </a-col>
       </a-row>
diff --git a/src/views/system/QuartzJobList.vue b/src/views/system/QuartzJobList.vue
index ed57aa3..9596938 100644
--- a/src/views/system/QuartzJobList.vue
+++ b/src/views/system/QuartzJobList.vue
@@ -85,6 +85,7 @@
             <a-menu slot="overlay">
               <a-menu-item><a @click="executeImmediately(record)">绔嬪嵆鎵ц</a></a-menu-item>
               <a-menu-item><a @click="handleEdit(record)">缂栬緫</a></a-menu-item>
+                <a-menu-item><a @click="handlequartzLog(record)">鏃ュ織</a></a-menu-item>
               <a-menu-item>
                 <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
                   <a>鍒犻櫎</a>
@@ -105,11 +106,15 @@
 
     <!-- 琛ㄥ崟鍖哄煙 -->
     <quartzJob-modal ref="modalForm" @ok="modalFormOk"></quartzJob-modal>
+
+    <!--鏃ュ織-->
+    <quartz-job-list-modal ref="modalFormList" @ok="modalFormOk"></quartz-job-list-modal>
   </a-card>
 </template>
 
 <script>
   import QuartzJobModal from './modules/QuartzJobModal'
+  import QuartzJobListModal from './modules/QuartzJobListModal'
   import { getAction } from '@/api/manage'
   import { JeecgListMixin } from '@/mixins/JeecgListMixin'
   import JEllipsis from "@/components/jeecg/JEllipsis";
@@ -119,6 +124,7 @@
     mixins:[JeecgListMixin],
     components: {
       QuartzJobModal,
+      QuartzJobListModal,
       JEllipsis
     },
     data () {
@@ -204,7 +210,11 @@
     },
 
     methods: {
-
+      handlequartzLog: function (record) {
+        this.$refs.modalFormList.openPage(record);
+        this.$refs.modalFormList.title = "鎵ц鏃ュ織";
+        this.$refs.modalFormList.disableSubmit = false;
+      },
       //绛涢�夐渶瑕侀噸鍐檋andleTableChange
       handleTableChange(pagination, filters, sorter) {
         //鍒嗛〉銆佹帓搴忋�佺瓫閫夊彉鍖栨椂瑙﹀彂
@@ -214,7 +224,7 @@
           this.isorter.order = "ascend" == sorter.order ? "asc" : "desc"
         }
         //杩欑绛涢�夋柟寮忓彧鏀寔鍗曢��
-        
+
         // update-begin-author:liusq date:20210624 for:鍓嶅彴瀹氭椂浠诲姟鏃犳硶缈婚〉  #2666
         if(filters && Object.keys(filters).length>0 && filters.status){
           this.filters.status = filters.status[0];
diff --git a/src/views/system/modules/QuartzJobDetails.vue b/src/views/system/modules/QuartzJobDetails.vue
new file mode 100644
index 0000000..db41484
--- /dev/null
+++ b/src/views/system/modules/QuartzJobDetails.vue
@@ -0,0 +1,72 @@
+
+<template>
+  <a-modal :title="title" width="100%" :visible="visible" :maskClosable="false" @ok="handleOk" @cancel="handleCancel"
+           cancelText="鍏抽棴">
+    <a-card :bordered="false">
+      <div>
+        {{textContent}}
+      </div>
+    </a-card>
+  </a-modal>
+</template>
+
+<script>
+
+
+  export default {
+    name: 'QuartzJobDetails',
+    // mixins: [JeecgListMixin],
+    components: {
+
+    },
+    props: {
+
+    },
+    data() {
+      return {
+        title:'',
+        visible:false,
+        textContent:'',
+
+      }
+    },
+    created() {
+
+    },
+    watch: {
+
+    },
+    methods: {
+        showDetails(record){
+          console.log(record)
+          this.visible = true
+          this.textContent = record.exceptionDetail
+        },
+      close() {
+        this.$emit('close')
+        this.visible = false
+      },
+      handleCancel() {
+        this.close()
+      },
+      handleOk() {
+        this.close()
+      },
+    },
+  }
+</script>
+<style>
+  @import '~@assets/less/common.less';
+
+  .frozenRowClass {
+    color: #c9c9c9;
+  }
+
+  .success {
+    color: green;
+  }
+
+  .error {
+    color: red;
+  }
+</style>
diff --git a/src/views/system/modules/QuartzJobListModal.vue b/src/views/system/modules/QuartzJobListModal.vue
new file mode 100644
index 0000000..32e14c5
--- /dev/null
+++ b/src/views/system/modules/QuartzJobListModal.vue
@@ -0,0 +1,383 @@
+
+<template>
+  <a-modal :title="title" width="100%" :visible="visible" :maskClosable="false" @ok="handleOk" @cancel="handleCancel"
+           cancelText="鍏抽棴">
+    <a-card :bordered="false">
+      <!-- 鏌ヨ鍖哄煙 -->
+      <div class="table-page-search-wrapper">
+        <a-form layout="inline" @keyup.enter.native="searchQuery">
+          <a-row :gutter="24">
+
+            <a-col :md="6" :sm="6">
+              <a-form-item label="浠诲姟鍚嶇О">
+                <a-input placeholder="璇疯緭鍏ヤ换鍔″悕绉�" v-model="queryParam.jobClassName"></a-input>
+              </a-form-item>
+            </a-col>
+
+            <a-col :md="6" :sm="6">
+              <a-form-item label="鏃堕棿">
+                <a-range-picker @change="dateParamChange" :disabledDate="disabledDate" format="YYYY-MM-DD HH:mm:ss" v-model="dates"/>
+              </a-form-item>
+            </a-col>
+            <a-col :md="2" :sm="2">
+              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+            </a-col>
+            <a-col :md="2" :sm="2">
+              <a-button type="primary" icon="download" @click="handleExportXls('鎵ц鏃ュ織瀵煎嚭')">瀵煎嚭</a-button>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+      <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+      <div class="table-operator">
+
+        <!--<a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>-->
+      </div>
+      <!-- table鍖哄煙-begin -->
+      <div>
+        <a-table ref="table" size="middle" bordered rowKey="index" :scroll="{聽 y: 400聽}" :columns="columns"
+                 :dataSource="dataSource" :pagination="ipagination" :loading="loading"
+                 @change="handleTableChange">
+          <!-- 鐘舵�佹覆鏌撴ā鏉� -->
+          <template slot="customRenderStatus" slot-scope="isSuccess">
+            <a-tag v-if="isSuccess==0" color="green">鎴愬姛</a-tag>
+            <a-tag v-if="isSuccess==-1" color="red">澶辫触</a-tag>
+          </template>
+          <span slot="action" slot-scope="text, record">
+
+             <a v-if="record.isSuccess == -1" @click="executeImmediately(record)">鏌ョ湅璇︽儏</a>
+
+        </span>
+        </a-table>
+      </div>
+      <!-- table鍖哄煙-end -->
+      <quartz-job-details ref="modalForm"></quartz-job-details>
+
+    </a-card>
+  </a-modal>
+</template>
+
+<script>
+  import { filterObj } from '@/utils/util';
+  import {
+    ajaxGetSelectItems
+  } from '@/api/api'
+  import JDictSelectTag from '@/components/dict/JDictSelectTag'
+  import {
+    deleteAction,
+    requestPut,
+    getAction,
+    downFile,
+    postAction
+  } from '@/api/manage'
+  import {
+    JeecgListMixin
+  } from '@/mixins/JeecgListMixin'
+  import JInput from '@/components/jeecg/JInput'
+  import JEllipsis from '@/components/jeecg/JEllipsis'
+  import Tooltip from 'ant-design-vue/es/tooltip'
+  import JDate from '@/components/jeecg/JDate'
+  import moment from 'moment'
+  import QuartzJobDetails from './QuartzJobDetails'
+  export default {
+    name: 'QuartzJobListModal',
+    // mixins: [JeecgListMixin],
+    components: {
+      JDictSelectTag,
+      JEllipsis,
+      JInput,
+      Tooltip,
+      JDate,
+      QuartzJobDetails
+    },
+    props: {
+      status: {
+        type: Number,
+        default: 1
+      }
+    },
+    data() {
+      return {
+        title:'',
+        visible:false,
+        /* 鏌ヨ鏉′欢-璇蜂笉瑕佸湪queryParam涓0鏄庨潪瀛楃涓插�肩殑灞炴�� */
+        queryParam: {},
+        /* 鏁版嵁婧� */
+        dataSource:[],
+        /* 鍒嗛〉鍙傛暟 */
+        ipagination:{
+          current: 1,
+          pageSize: 10,
+          pageSizeOptions: ['10', '20', '30'],
+          showTotal: (total, range) => {
+            return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�"
+          },
+          showQuickJumper: true,
+          showSizeChanger: true,
+          total: 0
+        },
+        /* 鎺掑簭鍙傛暟 */
+        isorter:{
+          column: 'createTime',
+          order: 'desc',
+        },
+        /* 绛涢�夊弬鏁� */
+        filters: {},
+        /* table鍔犺浇鐘舵�� */
+        loading:false,
+        /* table閫変腑keys*/
+        selectedRowKeys: [],
+        /* table閫変腑records*/
+        selectionRows: [],
+        /* 鏌ヨ鎶樺彔 */
+        toggleSearchStatus:false,
+        /* 楂樼骇鏌ヨ鏉′欢鐢熸晥鐘舵�� */
+        superQueryFlag:false,
+        /* 楂樼骇鏌ヨ鏉′欢 */
+        superQueryParams: '',
+        /** 楂樼骇鏌ヨ鎷兼帴鏂瑰紡 */
+        superQueryMatchType: 'and',
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key: 'rowIndex',
+            width: 60,
+            align: "center",
+            customRender: function (t, r, index) {
+              return parseInt(index) + 1;
+            }
+          },
+          {
+
+            title: '浠诲姟鍚嶇О',
+            align: 'center',
+            dataIndex: 'jobClassName',
+          },
+          {
+            title: 'cron琛ㄨ揪寮�',
+            align: 'center',
+            dataIndex: 'cronExpression',
+          },
+          {
+            title: '鍙傛暟',
+            align: 'center',
+            dataIndex: 'parameter'
+          },
+          {
+            title: '鎻忚堪',
+            align: 'center',
+            dataIndex: 'description'
+          },
+          {
+            title: '鎶ラ敊淇℃伅',
+            dataIndex: 'action',
+            align:"center",
+            scopedSlots: { customRender: 'action' },
+          },
+          {
+            title: '鎴愬姛鏍囧織',
+            align: 'center',
+            dataIndex: 'isSuccess',
+            scopedSlots: { customRender: 'customRenderStatus' },
+            filterMultiple: false,
+            filters: [
+              { text: '鎴愬姛', value: '0' },
+              { text: '澶辫触', value: '-1' },
+            ]
+          },
+          {
+            title: '鎵ц鏃堕棿锛堟绉掞級',
+            align: 'center',
+            dataIndex: 'executionTime',
+
+          },
+          {
+            title: '鍒涘缓鏃堕棿',
+            align: 'center',
+            dataIndex: 'createTime'
+          },
+        ],
+        sectionPData: [],
+        sectionData: [],
+        url: {
+          list: '/sys/quartzLog/list',
+          exportXlsUrl:'/sys/quartzLog/exportXls'
+        },
+        value:undefined,
+        valueProduct:undefined,
+        dates: [],
+      }
+    },
+    created() {
+
+    },
+    watch: {
+
+    },
+    methods: {
+      executeImmediately:function (record) {
+        this.$refs.modalForm.showDetails(record);
+        this.$refs.modalForm.title = "鎶ラ敊淇℃伅";
+        this.$refs.modalForm.disableSubmit = false;
+      },
+      handleExportXls(fileName){
+        if(!fileName || typeof fileName != "string"){
+          fileName = "瀵煎嚭鏂囦欢"
+        }
+        let param = this.getQueryParams();
+        if(this.selectedRowKeys && this.selectedRowKeys.length>0){
+          param['selections'] = this.selectedRowKeys.join(",")
+        }
+        console.log("瀵煎嚭鍙傛暟",param)
+        downFile(this.url.exportXlsUrl,param).then((data)=>{
+          if (!data) {
+            this.$message.warning("鏂囦欢涓嬭浇澶辫触")
+            return
+          }
+          if (typeof window.navigator.msSaveBlob !== 'undefined') {
+            window.navigator.msSaveBlob(new Blob([data],{type: 'application/vnd.ms-excel'}), fileName+'.xls')
+          }else{
+            let url = window.URL.createObjectURL(new Blob([data],{type: 'application/vnd.ms-excel'}))
+            let link = document.createElement('a')
+            link.style.display = 'none'
+            link.href = url
+            link.setAttribute('download', fileName+'.xls')
+            document.body.appendChild(link)
+            link.click()
+            document.body.removeChild(link); //涓嬭浇瀹屾垚绉婚櫎鍏冪礌
+            window.URL.revokeObjectURL(url); //閲婃斁鎺塨lob瀵硅薄
+          }
+        })
+      },
+      disabledDate(current) {
+        return current && current > moment().subtract('days', 1);
+      },
+      dateParamChange(v1, v2) {
+        this.queryParam.startTime = v2[0]
+        this.queryParam.endTime = v2[1]
+      },
+      handleTableChange(pagination, filters, sorter) {
+        // this.onClearSelected()
+        //鍒嗛〉銆佹帓搴忋�佺瓫閫夊彉鍖栨椂瑙﹀彂
+        //TODO 绛涢��
+        console.log(pagination)
+        if (Object.keys(sorter).length > 0) {
+          this.isorter.column = sorter.field;
+          this.isorter.order = "ascend" == sorter.order ? "asc" : "desc"
+        }
+        this.ipagination = pagination;
+        this.loadData();
+      },
+      openPage(record) {
+        // console.log(record)
+        this.visible = true
+        this.dataSource = [];
+        this.queryParam = {
+          jobId: record.id
+        };
+
+        this.loadData();
+      },
+      getQueryParams() {
+        //鑾峰彇鏌ヨ鏉′欢
+        let sqp = {}
+        if(this.superQueryParams){
+          sqp['superQueryParams']=encodeURI(this.superQueryParams)
+          sqp['superQueryMatchType'] = this.superQueryMatchType
+        }
+        var param = Object.assign(sqp, this.queryParam, this.isorter ,this.filters);
+        param.field = this.getQueryField();
+        param.pageNo = this.ipagination.current;
+        param.pageSize = this.ipagination.pageSize;
+        //鑾峰彇鐢ㄦ埛瀹氬埗鐨勫弬鏁板睘鎬�
+        // if (this.getCustomQueryParams) {
+        //   param = this.getCustomQueryParams(param);
+        //   if(!param){
+        //     return false;
+        //   }
+        // }
+
+        return filterObj(param);
+      },
+      getQueryField() {
+        //TODO 瀛楁鏉冮檺鎺у埗
+        var str = "id,";
+        this.columns.forEach(function (value) {
+          str += "," + value.dataIndex;
+        });
+        return str;
+      },
+      loadData(arg) {
+        if(!this.url.list){
+          this.$message.error("璇疯缃畊rl.list灞炴��!")
+          return
+        }
+        //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭
+        if (arg === 1) {
+          this.ipagination.current = 1;
+        }
+        var params = this.getQueryParams();//鏌ヨ鏉′欢
+
+        if(!params){
+          return false;
+        }
+
+        this.loading = true;
+        // params.id = this.queryParam.id
+        getAction(this.url.list, params).then((res) => {
+          if (res.success) {
+            // console.log(res)
+            //update-begin---author:zhangyafei    Date:20201118  for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------
+            this.dataSource = res.result.records||res.result;
+            if(res.result.total)
+            {
+              this.ipagination.total = res.result.total;
+            }else{
+              this.ipagination.total = 0;
+            }
+            //update-end---author:zhangyafei    Date:20201118  for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------
+          }else{
+            this.$message.warning(res.message)
+          }
+        }).finally(() => {
+          this.loading = false
+        })
+      },
+      modalFormOk(val) {
+        // 鏂板/淇敼 鎴愬姛鏃讹紝閲嶈浇鍒楄〃
+        this.loadData();
+
+        this.selectedRowKeys = [val.id];
+      },
+      searchQuery() {
+        this.loadData();
+      },
+      close() {
+        this.$emit('close')
+        this.visible = false
+      },
+      handleCancel() {
+        this.close()
+      },
+      handleOk() {
+        this.close()
+      },
+    },
+  }
+</script>
+<style>
+  @import '~@assets/less/common.less';
+
+  .frozenRowClass {
+    color: #c9c9c9;
+  }
+
+  .success {
+    color: green;
+  }
+
+  .error {
+    color: red;
+  }
+</style>

--
Gitblit v1.9.3