1、用户管理页面修改身份字段名称为首页权限并调整其选项值
2、按照新需求完成客户操作工进入后页面所有布局100%
3、调整全局页脚内容
已添加1个文件
已修改6个文件
1566 ■■■■ 文件已修改
src/components/page/GlobalFooter.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dashboard/Analysis.vue 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dashboard/BranchFactorySignage.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dashboard/EquipmentSignage.vue 695 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dashboard/IndexSignage.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dashboard/WorkshopSectionSignage.vue 640 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/modules/UserModal.vue 161 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/page/GlobalFooter.vue
@@ -12,7 +12,7 @@
         :style="{background:$route.meta.title==='首页'?'#0F103A':'',color:$route.meta.title==='首页'?'#fff':''}">
      Copyright
      <a-icon type="copyright"/>
      2019 <span>2015-2020 çµç§€æ™ºèƒ½</span>
      2024 <span>2015-2025 çµç§€æ™ºèƒ½</span>
    </div>
  </div>
</template>
src/views/dashboard/Analysis.vue
@@ -1,10 +1,6 @@
<template>
  <Component :is="currentSignage" :productionCode="productionCode" @switchToBranchFactory="switchToBranchFactory">
    <template #back_nav>
      <div class="back-nav" @click="backToLastSignage" v-if="userType===4">
        <dv-decoration-7>上一级</dv-decoration-7>
      </div>
    </template>
  <Component :is="currentSignage" :userType="userType" :productionCode="productionCode"
             @switchToNextSignage="switchToNextSignage" @backToLastSignage="backToLastSignage">
  </Component>
</template>
@@ -13,18 +9,22 @@
  import IndexSignage from './IndexSignage.vue'
  import BranchFactorySignage from './BranchFactorySignage.vue'
  import WorkshopSectionSignage from './WorkshopSectionSignage.vue'
  import EquipmentSignage from './EquipmentSignage.vue'
  export default {
    name: 'Analysis',
    components: {
      IndexSignage,
      BranchFactorySignage,
      WorkshopSectionSignage
      WorkshopSectionSignage,
      EquipmentSignage
    },
    data() {
      return {
        currentSignage: '',
        productionCode: '',
        branchFactoryProductionCode: '',
        workshopSectionProductionCode: '',
        userType: ''
      }
    },
@@ -41,7 +41,7 @@
            this.userType = res.userType
            switch (this.userType) {
              case 1:
                this.currentSignage = ''
                this.currentSignage = 'EquipmentSignage'
                break
              case 2:
                this.currentSignage = 'WorkshopSectionSignage'
@@ -60,28 +60,26 @@
      },
      backToLastSignage() {
        this.currentSignage = 'IndexSignage'
      backToLastSignage(signageName) {
        if (signageName === 'Index') this.productionCode = ''
        if (signageName === 'WorkshopSection') this.productionCode = this.workshopSectionProductionCode
        if (signageName === 'BranchFactory') this.productionCode = this.branchFactoryProductionCode
        this.currentSignage = signageName + 'Signage'
      },
      switchToBranchFactory(value) {
        console.log('子组件value', value)
        this.currentSignage = 'BranchFactorySignage'
        this.productionCode = value
      switchToNextSignage(params) {
        console.log('子组件params', params)
        if (params.signageName === 'WorkshopSection') this.branchFactoryProductionCode = this.productionCode
        if (params.signageName === 'Equipment') this.workshopSectionProductionCode = this.productionCode
        this.$nextTick(() => {
          this.productionCode = params.productionCode
          this.currentSignage = params.signageName + 'Signage'
        })
      }
    }
  }
</script>
<style lang="less" scoped>
  .back-nav {
    width: 100px;
    height: 30px;
    color: #ccc;
    position: absolute;
    top: 25px;
    left: 25px;
    cursor: pointer;
    z-index: 9999
  }
</style>
src/views/dashboard/BranchFactorySignage.vue
@@ -8,7 +8,9 @@
    <!--</div>-->
    <div class="content-container">
      <div style="width: 25%" class="left-col">
        <slot name="back_nav"></slot>
        <div class="back-nav" @click="$emit('backToLastSignage','Index')" v-if="userType===4">
          <dv-decoration-7>上一级</dv-decoration-7>
        </div>
        <dv-border-box-9 style="padding: 40px 20px 0">
          <!--<div class="first-title">M D C å…¥ ç½‘ æ€» æ•° : 6 0 3 å°</div>-->
          <div id="running_state_chart" style="width:100%;height: 400px;"></div>
@@ -79,6 +81,9 @@
      productionCode: {
        type: String,
        default: ''
      },
      userType: {
        type: Number
      }
    },
    data() {
@@ -551,7 +556,7 @@
          } else {
            console.log('yAxisParams===========', params)
            this.$emit('switchToBranchFactory', params.value)
            this.$emit('switchToNextSignage', { signageName: 'WorkshopSection', productionCode: params.value })
          }
        })
      },
@@ -1018,6 +1023,17 @@
      justify-content: space-between;
      .left-col {
        .back-nav {
          width: 100px;
          height: 30px;
          color: #eee;
          position: absolute;
          top: 25px;
          left: 25px;
          cursor: pointer;
          z-index: 9999
        }
        .first-title {
          color: #00A8AC;
          font-size: 20px;
src/views/dashboard/EquipmentSignage.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,695 @@
<template>
  <div class="page-container">
    <div class="content-container">
      <div style="width: 18%" class="left-col">
        <!--返回上一级-->
        <div class="back-nav" @click="$emit('backToLastSignage','WorkshopSection')" v-if="userType!==1">
          <dv-decoration-7>上一级</dv-decoration-7>
        </div>
        <!--当前设备编号-->
        <dv-border-box-12 style="height: 80px;padding: 0 10px 0">
          <div class="equipmentId-container">
            {{equipmentId}}
          </div>
        </dv-border-box-12>
        <!--设备列表-->
        <div style="height: 721px;overflow: auto;margin-top: 20px;">
          <table>
            <tr>
              <th>设备编号</th>
              <th>型号</th>
            </tr>
            <tr v-for="(item,index) in equipmentList" :key="index" @click="selectEquipment(item)">
              <td>{{item.equipmentId}}</td>
              <td>{{item.equipmentType}}</td>
            </tr>
          </table>
        </div>
      </div>
      <div style="width: 81.8%" class="right-col">
        <!--右上设备各项信息区域-->
        <dv-border-box-12 style="height: 50%" class="right-top-row">
          <!--各项信息展示区域-->
          <div style="display: flex;height: 70%">
            <dv-border-box-11 title="设备信息" class="info-container" style="flex:5;">
              <a-descriptions :column="3">
                <a-descriptions-item label="统一编号">
                  {{equipmentInfo.equipmentId}}
                </a-descriptions-item>
                <a-descriptions-item label="ABC标识">
                  {{equipmentInfo.ABCSymbol}}
                </a-descriptions-item>
                <a-descriptions-item label="设备名称">
                  {{equipmentInfo.equipmentName}}
                </a-descriptions-item>
                <a-descriptions-item label="型号">
                  {{equipmentInfo.equipmentType}}
                </a-descriptions-item>
                <a-descriptions-item label="设备分类">
                  {{equipmentInfo.equipmentCategory}}
                </a-descriptions-item>
                <a-descriptions-item label="工区">
                  {{equipmentInfo.workArea}}
                </a-descriptions-item>
                <a-descriptions-item label="操作系统">
                  {{equipmentInfo.driveType}}
                </a-descriptions-item>
                <a-descriptions-item label="规格">
                  {{equipmentInfo.standard}}
                </a-descriptions-item>
                <a-descriptions-item label="维护部门">
                  {{equipmentInfo.depart}}
                </a-descriptions-item>
                <a-descriptions-item label="工段">
                  {{equipmentInfo.workshopSection}}
                </a-descriptions-item>
                <a-descriptions-item label="操作工">
                  {{equipmentInfo.operator}}
                </a-descriptions-item>
              </a-descriptions>
            </dv-border-box-11>
            <dv-border-box-11 title="操作证信息" class="info-container" style="flex:2;">
              <a-descriptions :column="1">
                <a-descriptions-item label="操作证编号">
                  {{equipmentInfo.equipmentId}}
                </a-descriptions-item>
                <a-descriptions-item label="当前周期分数">
                  {{equipmentInfo.ABCSymbol}}
                </a-descriptions-item>
                <a-descriptions-item label="发证日期">
                  {{equipmentInfo.equipmentName}}
                </a-descriptions-item>
                <a-descriptions-item label="周期截止日期">
                  {{equipmentInfo.equipmentType}}
                </a-descriptions-item>
              </a-descriptions>
            </dv-border-box-11>
            <dv-border-box-11 title="维护信息" class="info-container" style="flex:2;">
              <a-descriptions :column="1">
                <a-descriptions-item label="下次三保日期">
                  {{equipmentInfo.equipmentId}}
                </a-descriptions-item>
                <a-descriptions-item label="下次二保日期">
                  {{equipmentInfo.ABCSymbol}}
                </a-descriptions-item>
                <a-descriptions-item label="技术状态">
                  {{equipmentInfo.equipmentName}}
                </a-descriptions-item>
              </a-descriptions>
            </dv-border-box-11>
          </div>
          <!--功能按钮区域-->
          <div style="display: flex;height: 30%;align-items: center;padding: 0 20px;color: #eee;">
            <div style="display: flex;justify-content:space-evenly;flex: 1">
              <div style="width: 45%;" class="info-card-container">
                <div class="info-card-title">本月报修数量</div>
                <div class="info-card-value" style="color: #EAC910">20</div>
              </div>
              <div style="width: 45%;" class="info-card-container">
                <div class="info-card-title">设备状态(维修中等)</div>
                <div class="info-card-value">维修中</div>
              </div>
            </div>
            <div style="display: flex;justify-content: space-evenly;font-size: 20px;padding: 0 50px">
              <dv-decoration-11 style="width: 200px;height: 70px;margin: 0 10px">备件信息</dv-decoration-11>
              <dv-decoration-11 style="width: 200px;height: 70px;margin: 0 10px">保养计划</dv-decoration-11>
              <dv-decoration-11 style="width: 200px;height: 70px;margin: 0 10px">报修</dv-decoration-11>
              <dv-decoration-11 style="width: 200px;height: 70px;margin: 0 10px">设备班次</dv-decoration-11>
            </div>
          </div>
        </dv-border-box-12>
        <!--右下各项数据图表区域-->
        <dv-border-box-12 style="height: 50%" class="right-bottom-row">
          <div style="display: flex;justify-content:space-evenly;height: 100%">
            <div style="display: flex;flex-wrap: wrap;width: 30%;height: 100%">
              <div id="gauge_chart1" class="gauge-chart"></div>
              <div id="gauge_chart2" class="gauge-chart"></div>
              <div id="gauge_chart3" class="gauge-chart"></div>
              <div id="gauge_chart4" class="gauge-chart"></div>
            </div>
            <div id="line_chart" style="width:40%;height: 100%;"></div>
            <div style="width: 25%;height:100%;display: flex;align-items: center">
              <a-descriptions :column="2">
                <a-descriptions-item label="运行模式">
                  {{equipmentInfo.equipmentId}}
                </a-descriptions-item>
                <a-descriptions-item label="程序号">
                  {{equipmentInfo.ABCSymbol}}
                </a-descriptions-item>
                <a-descriptions-item label="主轴转速">
                  {{equipmentInfo.equipmentName}}
                </a-descriptions-item>
                <a-descriptions-item label="主轴负荷">
                  {{equipmentInfo.equipmentType}}
                </a-descriptions-item>
                <a-descriptions-item label="主轴转速">
                  {{equipmentInfo.equipmentCategory}}
                </a-descriptions-item>
                <a-descriptions-item label="主轴倍率">
                  {{equipmentInfo.workArea}}
                </a-descriptions-item>
                <a-descriptions-item label="进给倍率">
                  {{equipmentInfo.driveType}}
                </a-descriptions-item>
                <a-descriptions-item label="报警信息">
                  {{equipmentInfo.standard}}
                </a-descriptions-item>
              </a-descriptions>
            </div>
          </div>
        </dv-border-box-12>
      </div>
    </div>
  </div>
</template>
<script>
  import signageApi from '@/api/signage'
  import moment from 'moment'
  export default {
    name: 'EquipmentSignage',
    props: {
      productionCode: {
        type: String,
        default: ''
      },
      userType: {
        type: Number
      }
    },
    data() {
      return {
        equipmentList: [
          {
            equipmentId: '2140223',
            equipmentType: 'CV4160'
          },
          {
            equipmentId: '2140224',
            equipmentType: 'CV4161'
          },
          {
            equipmentId: '2140225',
            equipmentType: 'CV4162'
          },
          {
            equipmentId: '2140226',
            equipmentType: 'CV4163'
          },
          {
            equipmentId: '2140227',
            equipmentType: 'CV4164'
          },
          {
            equipmentId: '2140227',
            equipmentType: 'CV4165'
          },
          {
            equipmentId: '2140228',
            equipmentType: 'CV4166'
          },
          {
            equipmentId: '2140229',
            equipmentType: 'CV4167'
          },
          {
            equipmentId: '2140230',
            equipmentType: 'CV4168'
          },
          {
            equipmentId: '2140231',
            equipmentType: 'CV4169'
          },
          {
            equipmentId: '2140232',
            equipmentType: 'CV4170'
          },
          {
            equipmentId: '2140233',
            equipmentType: 'CV4171'
          }
        ],
        equipmentInfo: {
          equipmentId: '2511563154',
          ABCSymbol: '3312321421',
          equipmentName: '机械中心',
          equipmentType: 'CV4160',
          equipmentCategory: '轧机',
          workArea: 'A分区',
          driveType: 'JSOWJDF',
          standard: '无',
          depart: '轧机中心',
          workshopSection: '407一工段',
          operator: 'admin'
        },
        lineChart: '',
        lineChartData: [],
        gaugeChart1: '',
        gaugeChart2: '',
        gaugeChart3: '',
        gaugeChart4: '',
        gaugeChartData1: [],
        gaugeChartData2: [],
        gaugeChartData3: [],
        gaugeChartData4: [],
        equipmentId: '2140223'
      }
    },
    mounted() {
      window.addEventListener('resize', this.handleWindowResize)
      this.drawCharts()
      this.getChartDataByApi()
    },
    activated() {
      this.handleWindowResize()
    },
    beforeDestroy() {
      window.removeEventListener('resize', this.handleWindowResize)
    },
    methods: {
      selectEquipment(record) {
        this.equipmentId = record.equipmentId
      },
      getChartDataByApi() {
      },
      /* ç»˜åˆ¶å›¾è¡¨æ±‡æ€»æ–¹æ³• */
      drawCharts() {
        this.drawGaugeChart()
        this.drawLineChart()
      },
      /* ç»˜åˆ¶ä»ªè¡¨ç›˜å›¾è¡¨ */
      drawGaugeChart() {
        const option = {
          title: {
            show: true, // æ˜¯å¦æ˜¾ç¤ºæ ‡é¢˜ï¼Œé»˜è®¤ä¸ºtrue
            text: '', // ä¸»æ ‡é¢˜æ–‡æœ¬
            x: 'center', // æ ‡é¢˜æ°´å¹³å®‰æ”¾ä½ç½®ï¼Œå¯é€‰å€¼ä¸º'left'、'center'、'right'或具体的水平坐标值
            y: 10, // æ ‡é¢˜åž‚直安放位置,可选值为'top'、'bottom'、'center'或具体的垂直坐标值
            textStyle: {
              // ä¸»æ ‡é¢˜æ–‡æœ¬æ ·å¼
              fontSize: 18,
              fontWeight: 'normal',
              color: '#00A8AC',
              fontWeight: 'bold'
            }
          },
          tooltip: {
            formatter: '{a} <br/>{b} : {c}%'
          },
          grid: {
            left: '1%',
            top: '1%',
            right: '10%',
            bottom: '1%'
          },
          series: [
            {
              name: '利用率',
              type: 'gauge',
              radius: '80%',
              center: ['50%', '60%'],    // é»˜è®¤å…¨å±€å±…中
              pointer: {
                width: 6,
                length: '50%',
                itemStyle: {
                  color: 'inherit'
                }
              },
              splitLine: {
                show: true,
                length: 10,
                lineStyle: {
                  color: '#fff',
                  width: 2
                }
              },
              axisTick: {
                length: 5,
                lineStyle: {
                  color: '#fff',
                  width: 1
                }
              },
              axisLabel: {
                show: false,
                fontSize: 18,
                formatter: function(value) {
                  return value + '%'
                }
              },
              axisLine: {
                lineStyle: { // å±žæ€§lineStyle控制线条样式
                  color: [ //表盘颜色
                    [0.3, '#E7781E'],//0-30%处的颜色
                    [0.7, '#C5C039'],//30%-60%处的颜色
                    [1, '#21C77F']//90%-100%处的颜色
                  ],
                  width: 15//表盘宽度
                }
              },
              detail: {
                formatter: '{score|{value}%}',
                offsetCenter: [0, '50%'],
                height: 30,
                rich: {
                  score: {
                    fontSize: 20
                  }
                }
              },
              data: [{ value: 100 }]
            }
          ]
        }
        this.drawGaugeChart1(option)
        this.drawGaugeChart2(option)
        this.drawGaugeChart3(option)
        this.drawGaugeChart4(option)
      },
      /* ç»˜åˆ¶åˆ©ç”¨çŽ‡ä»ªè¡¨ç›˜å›¾è¡¨ */
      drawGaugeChart1(opt) {
        this.gaugeChart1 = this.$echarts.init(document.getElementById('gauge_chart1'))
        const option = Object.assign({}, opt)
        option.title.text = '利用率'
        this.gaugeChart1.setOption(option, true)
      },
      /* ç»˜åˆ¶å¼€åŠ¨çŽ‡ä»ªè¡¨ç›˜å›¾è¡¨ */
      drawGaugeChart2(opt) {
        this.gaugeChart2 = this.$echarts.init(document.getElementById('gauge_chart2'))
        const option = Object.assign({}, opt)
        option.title.text = '开动率'
        this.gaugeChart2.setOption(option, true)
      },
      /* ç»˜åˆ¶å¼€æœºçŽ‡ä»ªè¡¨ç›˜å›¾è¡¨ */
      drawGaugeChart3(opt) {
        this.gaugeChart3 = this.$echarts.init(document.getElementById('gauge_chart3'))
        const option = Object.assign({}, opt)
        option.title.text = '开机率'
        this.gaugeChart3.setOption(option, true)
      },
      /* ç»˜åˆ¶OEE仪表盘图表 */
      drawGaugeChart4(opt) {
        this.gaugeChart4 = this.$echarts.init(document.getElementById('gauge_chart4'))
        const option = Object.assign({}, opt)
        option.title.text = 'OEE'
        this.gaugeChart4.setOption(option, true)
      },
      /* ç»˜åˆ¶æŠ˜çº¿å›¾ */
      drawLineChart() {
        this.lineChart = this.$echarts.init(document.getElementById('line_chart'))
        const newData = {
          xAxis: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
          yAxis: [
            {
              name: '利用率',
              value: [20, 60, 50, 60, 20, 50, 60, 70, 23, 40, 60, 70]
            },
            {
              name: '开动率',
              value: [23, 60, 44, 40, 74, 80, 60, 90, 70, 40, 70, 40]
            },
            {
              name: 'OEE',
              value: [90, 70, 40, 70, 80, 60, 73, 60, 70, 90, 40, 65]
            }
          ],
          yAxisName: '整年度利用率'
        }
        let legendData = []
        let seriesData = []
        let colorArr = ['#09F39E', '#A5F10D', '#09B3F6']
        legendData = newData.yAxis.map((item) => item.name)
        seriesData = newData.yAxis.map((item1, index1) => {
          return {
            name: item1.name,
            type: 'line',
            symbol: 'circle',
            symbolSize: 8,
            itemStyle: {
              color: colorArr[index1]
            },
            lineStyle: {
              width: 2
            },
            yAxisIndex: 1,
            data: item1.value // æŠ˜çº¿å›¾çš„æ•°æ®
          }
        })
        const option = {
          grid: {
            containLabel: true,
            bottom: '3%',
            top: '15%',
            left: '2%',
            right: '1%'
          },
          tooltip: {
            trigger: 'axis',
            axisPointer: {
              type: 'shadow'
            }
          },
          legend: {
            top: 20,
            right: 'center',
            data: legendData,
            itemGap: 10,
            textStyle: {
              fontSize: 14,
              color: '#ccc'
            }
          },
          xAxis: {
            triggerEvent: true,
            data: newData.xAxis || [],
            axisLabel: {
              interval: 0,
              show: true,
              fontSize: 12,
              color: '#50729A'
              // rotate: -30,
            },
            axisLine: {
              show: true,
              lineStyle: {
                color: '#50729A'
              }
            },
            axisTick: {
              show: true,
              alignWithLabel: true
            }
          },
          yAxis: [
            {
              name: newData.yAxisName,
              nameTextStyle: {
                color: '#00A8AC',
                fontSize: 18,
                padding: [0, 0, 0, 90]
              },
              nameGap: 25,
              type: 'value',
              position: 'left',
              axisLine: {
                show: true,
                lineStyle: {
                  color: '#50729A'
                }
              },
              axisTick: {
                show: false
              },
              splitLine: {
                show: false,
                lineStyle: {
                  color: '#3E4A82'
                }
              }
            },
            {
              type: 'value',
              position: 'right',
              splitNumber: 5,
              axisLabel: {
                show: true,
                color: '#50729A'
              },
              axisLine: {
                show: true,
                lineStyle: {
                  color: '#50729A'
                }
              },
              axisTick: {
                show: true
              },
              splitLine: {
                show: false,
                lineStyle: {
                  color: '#3E4A82'
                }
              }
            }
          ],
          series: seriesData
        }
        this.lineChart.setOption(option, true)
      },
      /**
       * çª—口尺寸变化时触发
       * è°ƒæ•´å›¾è¡¨å°ºå¯¸ä»¥é€‚应分辨率
       */
      handleWindowResize() {
        if (this.gaugeChart1) this.gaugeChart1.resize()
        if (this.gaugeChart2) this.gaugeChart2.resize()
        if (this.gaugeChart3) this.gaugeChart3.resize()
        if (this.gaugeChart4) this.gaugeChart4.resize()
        if (this.lineChart) this.lineChart.resize()
      }
    }
  }
</script>
<style lang="less" scoped>
  .page-container {
    .content-container {
      padding-top: 5px;
      display: flex;
      justify-content: space-between;
      .left-col {
        padding: 0 10px 0;
        .back-nav {
          width: 100px;
          height: 30px;
          color: #eee;
          position: absolute;
          top: 15px;
          left: 15px;
          cursor: pointer;
          z-index: 9999
        }
        .equipmentId-container {
          height: 100%;
          color: #eee;
          display: flex;
          justify-content: center;
          align-items: center;
          font-size: 30px
        }
        table {
          color: #eee;
          width: 100%;
          border-collapse: collapse;
          border-spacing: 0;
          border: 1px dashed;
          tr {
            height: 60px;
            text-align: center;
            font-size: 18px;
            position: relative;
            th, td {
              border: 1px dashed;
            }
            th {
              font-weight: bold;
              background-color: #10695D;
              position: sticky;
              z-index: 9999;
              top: 0;
            }
            td {
              cursor: pointer;
            }
          }
        }
      }
      .right-col {
        .right-top-row {
          .info-container {
            margin: 5px;
            padding: 70px 0 0 30px;
            height: 100%
          }
          .info-card-container {
            background-color: #67C23A;
            padding: 5px;
            border-radius: 3px;
            .info-card-title {
              font-weight: bold;
              white-space: nowrap;
              text-overflow: ellipsis;
              overflow: hidden
            }
            .info-card-value {
              text-align: center;
              font-size: 30px;
              white-space: nowrap;
              text-overflow: ellipsis;
              overflow: hidden
            }
          }
        }
        .right-bottom-row {
          .gauge-chart {
            width: 50%;
            height: 50%;
          }
        }
      }
    }
  }
  /deep/ .ant-descriptions {
    font-size: 16px;
  }
  /deep/ .ant-descriptions-item {
    padding-bottom: 25px;
    white-space: nowrap;
    overflow: hidden;
    -ms-text-overflow: ellipsis;
    text-overflow: ellipsis;
  }
  /deep/ .ant-descriptions-item-label, /deep/ .ant-descriptions-item-content {
    color: #eee;
    font-size: 16px;
  }
</style>
src/views/dashboard/IndexSignage.vue
@@ -532,7 +532,7 @@
            console.log('seriesParams===========', params)
          } else {
            console.log('yAxisParams===========', params)
            this.$emit('switchToBranchFactory', params.value)
            this.$emit('switchToNextSignage', { signageName: 'BranchFactory', productionCode: params.value })
          }
        })
      },
src/views/dashboard/WorkshopSectionSignage.vue
@@ -2,10 +2,12 @@
  <div class="page-container">
    <div class="content-container">
      <div style="width: 30%" class="left-col">
        <slot name="back_nav"></slot>
        <div class="back-nav" @click="$emit('backToLastSignage','BranchFactory')" v-if="userType>=3">
          <dv-decoration-7>上一级</dv-decoration-7>
        </div>
        <dv-border-box-9 style="padding: 15px">
          <div id="tech_condition_chart" style="width:100%;height: 230px;"></div>
          <div id="warranty_malfunction_chart" style="width:100%;height: 230px;"></div>
          <div id="tech_condition_chart" style="width:100%;height: 240px;"></div>
          <div id="warranty_malfunction_chart" style="width:100%;height: 240px;"></div>
          <div style="display: flex;">
            <div style="flex:0.5;display: flex;flex-direction:column;align-items: center">
@@ -70,12 +72,25 @@
        </dv-border-box-9>
      </div>
      <div style="width: 30%">
        <dv-border-box-9 style="padding: 30px 0">
          <div id="bar_chart" style="width:100%;height: 250px;"></div>
          <div id="double_bar_chart" style="width:100%;height: 300px;"></div>
          <div style="padding: 0 20px;">
            <dv-scroll-board :config="problemConfig" style="width:100%;height:220px"/>
        <dv-border-box-9 style="padding: 15px">
          <a-form layout="inline" @keyup.enter.native="$emit('switchToNextSignage', { signageName: 'Equipment', productionCode: equipmentId })">
            <a-form-item label="设备编号">
              <!--<a-input v-model="equipmentId" size="large"></a-input>-->
              <a-auto-complete
                v-model="equipmentId"
                placeholder="回车键查询"
                :allowClear="true"
                size="large"
              />
            </a-form-item>
          </a-form>
          <div style="display: flex;flex-wrap: wrap">
            <div id="gauge_chart1" style="width:50%;height: 200px;"></div>
            <div id="gauge_chart2" style="width:50%;height: 200px;"></div>
            <div id="gauge_chart3" style="width:50%;height: 200px;"></div>
            <div id="gauge_chart4" style="width:50%;height: 200px;"></div>
          </div>
          <div id="bar_chart" style="width:100%;height: 330px;"></div>
        </dv-border-box-9>
      </div>
    </div>
@@ -84,6 +99,7 @@
<script>
  import signageApi from '@/api/signage'
  import moment from 'moment'
  export default {
    name: 'WorkshopSectionSignage',
@@ -91,6 +107,9 @@
      productionCode: {
        type: String,
        default: ''
      },
      userType: {
        type: Number
      }
    },
    data() {
@@ -120,34 +139,58 @@
        nextNextMonthMaintenancePlanNum: 0,
        lineChart: '',
        lineChartData: [],
        gaugeChart1: '',
        gaugeChart2: '',
        gaugeChart3: '',
        gaugeChart4: '',
        gaugeChartData1: [],
        gaugeChartData2: [],
        gaugeChartData3: [],
        gaugeChartData4: [],
        barChart: '',
        barChartData: [],
        doubleBarChart: '',
        doubleBarChartData: {},
        supportPlanList: [
        barChartData: [
          {
            label: '本月三保计划',
            value: 299,
            background: '#719D8E'
            name: '2640221',
            value: 20
          },
          {
            label: '本月完成',
            value: 229,
            background: '#409EFF'
            name: '2640222',
            value: 40
          },
          {
            label: '下月三保计划',
            value: 319,
            background: '#A8985D'
            name: '2640223',
            value: 70
          },
          {
            label: '下下月三保计划',
            value: 329,
            background: '#58D9F9'
            name: '2640224',
            value: 30
          },
          {
            name: '2640225',
            value: 35
          },
          {
            name: '2640226',
            value: 80
          },
          {
            name: '2640227',
            value: 40
          },
          {
            name: '12640220',
            value: 60
          },
          {
            name: '12640221',
            value: 40
          },
          {
            name: '12640222',
            value: 35
          }
        ],
        maintenanceConfig: {},
        problemConfig: {}
        equipmentId: ''
      }
    },
    mounted() {
@@ -158,22 +201,18 @@
    activated() {
      console.log('触发activated')
      this.handleWindowResize()
      if (this.barChartCarouselTime) clearInterval(this.barChartCarouselTime)
    },
    beforeDestroy() {
      window.removeEventListener('resize', this.handleWindowResize)
      if (this.barChartCarouselTime) clearInterval(this.barChartCarouselTime)
    },
    methods: {
      backToLastSignage() {
        console.log('触发上一级')
      },
      getChartDataByApi() {
        this.getTechConditionDataByApi()
        this.getWarrantyMalfunctionDataByApi()
        this.getRunningStateDataByApi()
        this.getMonthMaintenanceNumByApi()
        this.getBarChartDataByApi()
        this.getDoubleBarChartDataByApi()
      },
      /* è°ƒç”¨æŽ¥å£èŽ·å–æŠ€æœ¯çŠ¶æ€ */
@@ -235,33 +274,14 @@
          })
      },
      /* è°ƒç”¨æŽ¥å£èŽ·å–è®¾å¤‡OEE统计 */
      getBarChartDataByApi() {
        signageApi.getEquipmentOEEStatistics(this.productionCode)
          .then(res => {
            if (res.success) this.barChartData = res.result
            this.drawBarChart()
          })
      },
      /* è°ƒç”¨æŽ¥å£èŽ·å–è®¾å¤‡OEE和利用率对比 */
      getDoubleBarChartDataByApi() {
        signageApi.getEquipmentMonthStatisticsApi(this.productionCode)
          .then(res => {
            if (res.success) this.doubleBarChartData = res.result
            this.drawDoubleBarChart()
          })
      },
      /* ç»˜åˆ¶å›¾è¡¨æ±‡æ€»æ–¹æ³• */
      drawCharts() {
        this.drawRunningStateChart()
        this.drawTechConditionChart()
        this.drawWarrantyMalfunctionChart()
        this.drawLineChart()
        this.drawGaugeChart()
        this.drawBarChart()
        this.drawDoubleBarChart()
        this.drawProblemChart()
      },
      /* ç»˜åˆ¶æŠ€æœ¯çŠ¶æ€é¥¼å›¾ */
@@ -311,7 +331,7 @@
            {
              type: 'pie',
              // selectedMode: "single",
              radius: ['30%', '50%'],
              radius: ['40%', '60%'],
              center: ['50%', '50%'],
              color: [
                '#0AA012',
@@ -390,7 +410,7 @@
            {
              type: 'pie',
              // selectedMode: "single",
              radius: ['30%', '50%'],
              radius: ['40%', '60%'],
              center: ['50%', '50%'],
              color: [
                '#00CED1',
@@ -468,9 +488,9 @@
          series: [
            {
              type: 'pie',
              roseType: 'angle', // çŽ«ç‘°å›¾
              // roseType: 'angle', // çŽ«ç‘°å›¾
              // selectedMode: "single",
              radius: ['30%', '70%'],
              radius: ['35%', '55%'],
              center: ['50%', '50%'],
              color: [
                '#686869',
@@ -484,7 +504,7 @@
                color: 'inherit',
                // textBorderColor: 'inherit',
                // textBorderWidth: 1,
                fontSize: 16,
                fontSize: 30,
                formatter: function(params) {
                  if (params.name !== '') {
                    return `${params.name}:${params.value}`
@@ -493,8 +513,8 @@
              },
              labelLine: {
                show: true,
                length2: 10,
                length: 10
                length2: 20,
                length: 30
              },
              data: this.runningStateData
            }
@@ -507,19 +527,19 @@
      drawLineChart() {
        this.lineChart = this.$echarts.init(document.getElementById('line_chart'))
        const newData = {
          xAxis: ['2640221', '2640223', '2640224', '2640225', '2640226', '2640227', '2640228', '2640229', '12640220', '12640221', '12640222'],
          xAxis: ['3月19日', '3月20日', '3月21日', '3月22日', '3月23日', '3月24日', '3月25日'],
          yAxis: [
            {
              name: '利用率',
              value: [20, 60, 55, 36, 52, 52, 63, 78, 23, 42, 65]
              value: [200, 600, 550, 360, 520, 520, 630, 780, 230, 420, 650, 700]
            },
            {
              name: '开动率',
              value: [23, 63, 44, 40, 74, 80, 60, 90, 70, 40, 70]
              value: [230, 630, 440, 400, 740, 800, 600, 900, 700, 400, 700, 400]
            },
            {
              name: '开机率',
              value: [90, 70, 40, 70, 80, 65, 73, 60, 70, 90, 40]
              value: [900, 700, 400, 700, 800, 605, 730, 600, 700, 900, 400, 605]
            }
          ],
          yAxisName: '前7天利用率'
@@ -544,7 +564,6 @@
            data: item1.value // æŠ˜çº¿å›¾çš„æ•°æ®
          }
        })
        const option = {
          grid: {
            containLabel: true,
@@ -565,7 +584,7 @@
            data: legendData,
            itemGap: 10,
            textStyle: {
              fontSize: 16,
              fontSize: 14,
              color: '#ccc'
            }
          },
@@ -573,10 +592,10 @@
            triggerEvent: true,
            data: newData.xAxis || [],
            axisLabel: {
              interval: 1,
              interval: 0,
              show: true,
              fontSize: 12,
              color: '#50729A',
              color: '#50729A'
              // rotate: -30,
            },
            axisLine: {
@@ -587,7 +606,7 @@
            },
            axisTick: {
              show: true,
              alignWithLabel:true,
              alignWithLabel: true
            }
          },
          yAxis: [
@@ -598,6 +617,7 @@
                fontSize: 18,
                padding: [0, 0, 0, 80]
              },
              nameGap: 30,
              type: 'value',
              position: 'left',
              axisLine: {
@@ -622,7 +642,6 @@
              splitNumber: 5,
              axisLabel: {
                show: true,
                fontSize: 16,
                color: '#50729A'
              },
              axisLine: {
@@ -642,16 +661,166 @@
              }
            }
          ],
          series: seriesData
          series: seriesData,
          // dataZoom: {
          //   show: false,
          //   startValue: 0, // ä»Žå¤´å¼€å§‹ã€‚
          //   endValue: 5 // ä¸€æ¬¡æ€§å±•示几个
          // }
        }
        this.lineChart.setOption(option, true)
        // if (newData.xAxis.length <= 6) return
        // this.lineChartCarouselTime = setInterval(() => {
        //   this.barChartData.push(this.barChartData.shift())
        //   newData.xAxis.push(newData.xAxis.shift())
        //   newData.yAxis.forEach(item => item.value.push(item.value.shift()))
        //   this.$nextTick(() => {
        //     this.lineChart.setOption(option, true)
        //   })
        // }, 3000)
      },
      /* ç»˜åˆ¶ä»ªè¡¨ç›˜å›¾è¡¨ */
      drawGaugeChart() {
        const option = {
          title: {
            show: true, // æ˜¯å¦æ˜¾ç¤ºæ ‡é¢˜ï¼Œé»˜è®¤ä¸ºtrue
            text: '', // ä¸»æ ‡é¢˜æ–‡æœ¬
            x: 'center', // æ ‡é¢˜æ°´å¹³å®‰æ”¾ä½ç½®ï¼Œå¯é€‰å€¼ä¸º'left'、'center'、'right'或具体的水平坐标值
            y: 'top', // æ ‡é¢˜åž‚直安放位置,可选值为'top'、'bottom'、'center'或具体的垂直坐标值
            textStyle: {
              // ä¸»æ ‡é¢˜æ–‡æœ¬æ ·å¼
              fontSize: 18,
              fontWeight: 'normal',
              color: '#00A8AC',
              fontWeight: 'bold'
            }
          },
          tooltip: {
            formatter: '{a} <br/>{b} : {c}%'
          },
          grid: {
            left: '1%',
            top: '1%',
            right: '10%',
            bottom: '1%'
          },
          series: [
            {
              name: '利用率',
              type: 'gauge',
              radius: '80%',
              center: ['50%', '60%'],    // é»˜è®¤å…¨å±€å±…中
              pointer: {
                width: 6,
                length: '50%',
                itemStyle: {
                  color: 'inherit'
                }
              },
              splitLine: {
                show: true,
                length: 10,
                lineStyle: {
                  color: '#fff',
                  width: 2
                }
              },
              axisTick: {
                length: 5,
                lineStyle: {
                  color: '#fff',
                  width: 1
                }
              },
              axisLabel: {
                show: false,
                fontSize: 18,
                formatter: function(value) {
                  return value + '%'
                }
              },
              axisLine: {
                lineStyle: { // å±žæ€§lineStyle控制线条样式
                  color: [ //表盘颜色
                    [0.3, '#E7781E'],//0-30%处的颜色
                    [0.7, '#C5C039'],//30%-60%处的颜色
                    [1, '#21C77F']//90%-100%处的颜色
                  ],
                  width: 15//表盘宽度
                }
              },
              detail: {
                formatter: '{score|{value}%}',
                offsetCenter: [0, '50%'],
                height: 30,
                rich: {
                  score: {
                    fontSize: 20
                  }
                }
              },
              data: [{ value: 100 }]
            }
          ]
        }
        this.drawGaugeChart1(option)
        this.drawGaugeChart2(option)
        this.drawGaugeChart3(option)
        this.drawGaugeChart4(option)
      },
      /* ç»˜åˆ¶åˆ©ç”¨çŽ‡ä»ªè¡¨ç›˜å›¾è¡¨ */
      drawGaugeChart1(opt) {
        this.gaugeChart1 = this.$echarts.init(document.getElementById('gauge_chart1'))
        const option = Object.assign({}, opt)
        option.title.text = '利用率'
        this.gaugeChart1.setOption(option, true)
      },
      /* ç»˜åˆ¶å¼€åŠ¨çŽ‡ä»ªè¡¨ç›˜å›¾è¡¨ */
      drawGaugeChart2(opt) {
        this.gaugeChart2 = this.$echarts.init(document.getElementById('gauge_chart2'))
        const option = Object.assign({}, opt)
        option.title.text = '开动率'
        this.gaugeChart2.setOption(option, true)
      },
      /* ç»˜åˆ¶å¼€æœºçŽ‡ä»ªè¡¨ç›˜å›¾è¡¨ */
      drawGaugeChart3(opt) {
        this.gaugeChart3 = this.$echarts.init(document.getElementById('gauge_chart3'))
        const option = Object.assign({}, opt)
        option.title.text = '开机率'
        this.gaugeChart3.setOption(option, true)
      },
      /* ç»˜åˆ¶OEE仪表盘图表 */
      drawGaugeChart4(opt) {
        this.gaugeChart4 = this.$echarts.init(document.getElementById('gauge_chart4'))
        const option = Object.assign({}, opt)
        option.title.text = 'OEE'
        this.gaugeChart4.setOption(option, true)
      },
      /* ç»˜åˆ¶å•柱图 */
      drawBarChart() {
        this.barChart = this.$echarts.init(document.getElementById('bar_chart'))
        const xAisData = this.barChartData.map(item => item.name)
        const option = {
          height: 260,
          title: {
            show: true, // æ˜¯å¦æ˜¾ç¤ºæ ‡é¢˜ï¼Œé»˜è®¤ä¸ºtrue
            text: '上个月OEE', // ä¸»æ ‡é¢˜æ–‡æœ¬
            x: 'center', // æ ‡é¢˜æ°´å¹³å®‰æ”¾ä½ç½®ï¼Œå¯é€‰å€¼ä¸º'left'、'center'、'right'或具体的水平坐标值
            y: 'top', // æ ‡é¢˜åž‚直安放位置,可选值为'top'、'bottom'、'center'或具体的垂直坐标值
            textStyle: {
              // ä¸»æ ‡é¢˜æ–‡æœ¬æ ·å¼
              fontSize: 18,
              fontWeight: 'normal',
              color: '#00A8AC',
              fontWeight: 'bold'
            }
          },
          tooltip: {
            trigger: 'axis',
            axisPointer: {
@@ -666,186 +835,79 @@
          },
          grid: {
            top: '15%',
            left: '10%'
            left: '6%',
            right: '3%'
          },
          xAxis: [{
            name: 'OEE车间',
            nameLocation: 'middle',
            nameGap: 30, // xè½´name与横坐标轴线的间距
            type: 'category',
            data: this.barChartData.map(item => item.name),
            axisLine: {
              lineStyle: {
                color: '#FFFFFF'
              }
            },
            axisLabel: {
              margin: 10,
              color: '#e2e9ff',
              textStyle: {
                fontSize: 12
              }
            },
            axisTick: {
              show: false
            }
          }],
          yAxis: [{
            name: '数量',
            nameLocation: 'middle',
            nameGap: 30, // xè½´name与横坐标轴线的间距
            axisLabel: {
              formatter: '{value}',
              color: '#e2e9ff'
            },
            axisTick: {
              show: false
            },
            axisLine: {
              show: false,
              lineStyle: {
                color: '#FFFFFF'
              }
            },
            splitLine: {
              lineStyle: {
                color: 'rgba(255,255,255,0.12)'
              }
            }
          }],
          series: [{
            type: 'bar',
            data: this.barChartData,
            barWidth: '15%',
            itemStyle: {
              color: '#7DB17F'
            },
            label: {
              show: true,
              lineHeight: 10,
              formatter: params => {
                if (+params.value === 0) return ''
                else return params.value
          xAxis: [
            {
              // name: '上个月OEE',
              // nameLocation: 'middle',
              // nameGap: 40, // xè½´name与横坐标轴线的间距
              type: 'category',
              data: xAisData,
              axisLine: {
                lineStyle: {
                  color: '#50729A'
                }
              },
              position: 'inside',
              textStyle: {
                color: '#fff',
                fontSize: 18
              axisLabel: {
                show: true, // æ˜¯å¦æ˜¾ç¤ºåˆ»åº¦æ ‡ç­¾ï¼Œé»˜è®¤æ˜¾ç¤º
                interval: 0, // åæ ‡è½´åˆ»åº¦æ ‡ç­¾çš„æ˜¾ç¤ºé—´éš”,在类目轴中有效;默认会采用标签不重叠的策略间隔显示标签;可以设置成0强制显示所有标签;如果设置为1,表示『隔一个标签显示一个标签』,如果值为2,表示隔两个标签显示一个标签,以此类推。
                // rotate: this.barChartData.length >= 5 ? -30 : 0, // åˆ»åº¦æ ‡ç­¾æ—‹è½¬çš„角度,在类目轴的类目标签显示不下的时候可以通过旋转防止标签之间重叠;旋转的角度从-90度到90度
                inside: false, // åˆ»åº¦æ ‡ç­¾æ˜¯å¦æœå†…,默认朝外
                margin: 6 // åˆ»åº¦æ ‡ç­¾ä¸Žè½´çº¿ä¹‹é—´çš„距离
              },
              axisTick: {
                show: true,
                alignWithLabel: true
              }
            }
          }]
        }
        this.barChart.setOption(option, true)
      },
      /* ç»˜åˆ¶åŒæŸ±å›¾ */
      drawDoubleBarChart() {
        this.doubleBarChart = this.$echarts.init(document.getElementById('double_bar_chart'))
        const option = {
          color: ['#4992FF', '#4DC0B1'],
          tooltip: {
            confine: true,
            formatter: function(params) {
              return '<span style="font-weight:bolder;">' + params.name + '</span><br/>' +
                '<span style="display:inline-block; width:10px; height:10px; border-radius:100px; margin-right:5px; background:' + params.color + '"></span>' + params.seriesName + ' : ' + params.value + '%'
            }
          },
          grid: {
            left: '5%',
            right: '4%',
            bottom: '10%',
            top: '20%',
            containLabel: true
          },
          legend: {
            icon: 'roundRect',
            orient: 'horizontal',
            left: 'center',
            itemWidth: 14,
            itemHeight: 14,
            formatter: ['{a|{name}}'].join('\n'),
            textStyle: {
              fontSize: 14,
              color: '#6A93B9',
              height: 8,
              rich: {
                a: {
                  verticalAlign: 'bottom'
            }],
          yAxis: [
            {
              // name: '数量',
              // nameLocation: 'middle',
              // nameGap: 30, // xè½´name与横坐标轴线的间距
              position: 'left',
              axisLabel: {
                formatter: '{value}',
                color: '#50729A'
              },
              axisTick: {
                show: false
              },
              axisLine: {
                show: true,
                lineStyle: {
                  color: '#50729A'
                }
              },
              splitLine: {
                show: false,
                lineStyle: {
                  color: 'rgba(255,255,255,0.12)'
                }
              }
            },
            data: ['OEE', '利用率']
          },
          xAxis: {
            type: 'category',
            data: this.doubleBarChartData.dateList,
            axisLine: {
              lineStyle: {
                color: 'rgba(255,255,255,0.45)'
            {
              position: 'right',
              axisLine: {
                show: true,
                lineStyle: {
                  color: '#50729A'
                }
              }
            },
            axisLabel: {
              fontSize: 12,
              color: '#6A93B9'
            },
            axisTick: {
              show: false
            }
          },
          yAxis: [{
            name: '%',
            type: 'value',
            min: 0,
            minInterval: 1,
            splitArea: {
              show: false
            },
            axisLine: {
              show: false
            },
            axisTick: {
              show: false
            },
            splitLine: {
              lineStyle: {
                color: 'rgba(255, 255, 255, 0.15)'
                // type: 'dashed', // dotted è™šçº¿
              }
            },
            axisLabel: {
              fontSize: 12,
              color: '#6A93B9',
              fontFamily: 'Bebas'
            }
          }, {
            type: 'value',
            axisLine: {
              show: false
            },
            axisTick: {
              show: false
            },
            splitLine: {
              show: false
            },
            axisLabel: {
              fontSize: 12,
              formatter: '{value}%', // å³ä¾§Y轴文字显示
              fontFamily: 'Bebas',
              color: '#6A93B9'
            },
            splitArea: {
              show: false
            }
          }],
          ],
          series: [{
            type: 'bar',
            barWidth: 15,
            itemStyle: { barBorderRadius: [3, 3, 0, 0] },
            name: 'OEE',
            data: this.doubleBarChartData.oeeList,
            data: this.barChartData,
            barWidth: '25%',
            itemStyle: {
              color: '#129FC6',
              barBorderRadius: [10, 10, 10, 10]
            },
            label: {
              show: true,
              show: false,
              lineHeight: 10,
              formatter: params => {
                if (+params.value === 0) return ''
@@ -853,48 +915,27 @@
              },
              position: 'inside',
              textStyle: {
                color: '#fff',
                fontSize: 12
                color: '#50729A',
                fontSize: 18
              }
            }
          }, {
            type: 'bar',
            barWidth: 15,
            itemStyle: { barBorderRadius: [3, 3, 0, 0] },
            name: '利用率',
            data: this.doubleBarChartData.utilizationList,
            label: {
              show: true,
              lineHeight: 10,
              formatter: params => {
                if (+params.value === 0) return ''
                else return params.value
              },
              position: 'inside',
              textStyle: {
                color: '#fff',
                fontSize: 12
              }
            }
          }],
          dataZoom: {
            show: false,
            startValue: 0, // ä»Žå¤´å¼€å§‹ã€‚
            endValue: 5 // ä¸€æ¬¡æ€§å±•示几个
          }
          ]
        }
        this.doubleBarChart.setOption(option, true)
      },
      /* ç»˜åˆ¶é—®é¢˜æ»šåŠ¨è¡¨ */
      drawProblemChart() {
        this.problemConfig = {
          indexHeader: '序号',
          header: ['时间', '问题内容'],
          headerBGC: '#83B883',
          oddRowBGC: '#556955',
          evenRowBGC: '#556955',
          data: [],
          index: true,
          columnWidth: [100, 300, 300],
          align: ['center']
        }
        option.title.text = `${moment().subtract(1, 'months').format('M')}月OEE`
        this.barChart.setOption(option, true)
        if (this.barChartData.length <= 6) return
        this.barChartCarouselTime = setInterval(() => {
          this.barChartData.push(this.barChartData.shift())
          xAisData.push(xAisData.shift())
          this.$nextTick(() => {
            this.barChart.setOption(option, true)
          })
        }, 3000)
      },
      /**
@@ -902,12 +943,15 @@
       * è°ƒæ•´å›¾è¡¨å°ºå¯¸ä»¥é€‚应分辨率
       */
      handleWindowResize() {
        if (this.runningStateChart) this.runningStateChart.resize()
        if (this.efficiencyChart) this.efficiencyChart.resize()
        if (this.techConditionChart) this.techConditionChart.resize()
        if (this.warrantyMalfunctionChart) this.warrantyMalfunctionChart.resize()
        if (this.runningStateChart) this.runningStateChart.resize()
        if (this.lineChart) this.lineChart.resize()
        if (this.gaugeChart1) this.gaugeChart1.resize()
        if (this.gaugeChart2) this.gaugeChart2.resize()
        if (this.gaugeChart3) this.gaugeChart3.resize()
        if (this.gaugeChart4) this.gaugeChart4.resize()
        if (this.barChart) this.barChart.resize()
        if (this.doubleBarChart) this.doubleBarChart.resize()
      }
    }
  }
@@ -936,6 +980,17 @@
      justify-content: space-between;
      .left-col {
        .back-nav {
          width: 100px;
          height: 30px;
          color: #eee;
          position: absolute;
          top: 50px;
          left: 10px;
          cursor: pointer;
          z-index: 9999
        }
        .support-plan-container {
          width: 100%;
          display: flex;
@@ -977,7 +1032,28 @@
    }
  }
  /deep/ .dv-scroll-board .header {
    height: 35px;
  /deep/ .ant-form.ant-form-inline {
    text-align: center;
    margin-bottom: 20px;
  }
  /deep/ .ant-form .ant-form-item-label label {
    color: #fff;
    font-size: 18px;
  }
  /deep/ .ant-select-selection {
    background: transparent !important;
  }
  /deep/ .ant-select-selection__clear {
    background: transparent !important;
    color: #fff;
  }
  /deep/ .ant-input {
    border: 1px solid #689ACA;
    color: #fff;
    background: transparent !important;
  }
</style>
src/views/system/modules/UserModal.vue
@@ -160,6 +160,15 @@
                          placeholder="请选择设备" :disabled="!model.selectedProduction"/>
        </a-form-model-item>
        <a-form-model-item label="首页权限" :labelCol="labelCol" :wrapperCol="wrapperCol">
          <a-radio-group v-model="model.userType" :defaultValue="1">
            <a-radio :value="4">公司级</a-radio>
            <a-radio :value="3">车间级</a-radio>
            <a-radio :value="2">工段级</a-radio>
            <a-radio :value="1">操作工</a-radio>
          </a-radio-group>
        </a-form-model-item>
        <a-form-model-item
          label="班组分配"
          :labelCol="labelCol"
@@ -201,91 +210,82 @@
          </j-multi-select-tag>
        </a-form-model-item>
        <a-form-model-item
          label="头像"
          :labelCol="labelCol"
          :wrapperCol="wrapperCol"
        >
          <j-image-upload
            class="avatar-uploader"
            text="上传"
            v-model="model.avatar"
          ></j-image-upload>
        </a-form-model-item>
        <!--<a-form-model-item-->
        <!--label="头像"-->
        <!--:labelCol="labelCol"-->
        <!--:wrapperCol="wrapperCol"-->
        <!--&gt;-->
        <!--<j-image-upload-->
        <!--class="avatar-uploader"-->
        <!--text="上传"-->
        <!--v-model="model.avatar"-->
        <!--&gt;</j-image-upload>-->
        <!--</a-form-model-item>-->
        <a-form-model-item
          label="生日"
          :labelCol="labelCol"
          :wrapperCol="wrapperCol"
        >
          <a-date-picker
            style="width: 100%"
            placeholder="请选择生日"
            v-model="model.birthday"
            :format="dateFormat"
            :getCalendarContainer="node => node.parentNode"
          />
        </a-form-model-item>
        <!--<a-form-model-item-->
        <!--label="生日"-->
        <!--:labelCol="labelCol"-->
        <!--:wrapperCol="wrapperCol"-->
        <!--&gt;-->
        <!--<a-date-picker-->
        <!--style="width: 100%"-->
        <!--placeholder="请选择生日"-->
        <!--v-model="model.birthday"-->
        <!--:format="dateFormat"-->
        <!--:getCalendarContainer="node => node.parentNode"-->
        <!--/>-->
        <!--</a-form-model-item>-->
        <a-form-model-item
          label="性别"
          :labelCol="labelCol"
          :wrapperCol="wrapperCol"
        >
          <a-select
            v-model="model.sex"
            placeholder="请选择性别"
            :getPopupContainer="(target) => target.parentNode"
          >
            <a-select-option :value="1">男</a-select-option>
            <a-select-option :value="2">女</a-select-option>
          </a-select>
        </a-form-model-item>
        <!--<a-form-model-item-->
        <!--label="性别"-->
        <!--:labelCol="labelCol"-->
        <!--:wrapperCol="wrapperCol"-->
        <!--&gt;-->
        <!--<a-select-->
        <!--v-model="model.sex"-->
        <!--placeholder="请选择性别"-->
        <!--:getPopupContainer="(target) => target.parentNode"-->
        <!--&gt;-->
        <!--<a-select-option :value="1">男</a-select-option>-->
        <!--<a-select-option :value="2">女</a-select-option>-->
        <!--</a-select>-->
        <!--</a-form-model-item>-->
        <a-form-model-item
          label="邮箱"
          :labelCol="labelCol"
          :wrapperCol="wrapperCol"
          prop="email"
        >
          <a-input
            placeholder="请输入邮箱"
            v-model="model.email"
          />
        </a-form-model-item>
        <!--<a-form-model-item-->
        <!--label="邮箱"-->
        <!--:labelCol="labelCol"-->
        <!--:wrapperCol="wrapperCol"-->
        <!--prop="email"-->
        <!--&gt;-->
        <!--<a-input-->
        <!--placeholder="请输入邮箱"-->
        <!--v-model="model.email"-->
        <!--/>-->
        <!--</a-form-model-item>-->
        <a-form-model-item
          label="手机号码"
          :labelCol="labelCol"
          :wrapperCol="wrapperCol"
          prop="phone"
        >
          <a-input
            placeholder="请输入手机号码"
            v-model="model.phone"
          />
        </a-form-model-item>
        <!--<a-form-model-item-->
        <!--label="手机号码"-->
        <!--:labelCol="labelCol"-->
        <!--:wrapperCol="wrapperCol"-->
        <!--prop="phone"-->
        <!--&gt;-->
        <!--<a-input-->
        <!--placeholder="请输入手机号码"-->
        <!--v-model="model.phone"-->
        <!--/>-->
        <!--</a-form-model-item>-->
        <a-form-model-item
          label="座机"
          :labelCol="labelCol"
          :wrapperCol="wrapperCol"
          prop="telephone"
        >
          <a-input
            placeholder="请输入座机"
            v-model="model.telephone"
          />
        </a-form-model-item>
        <a-form-model-item label="身份" :labelCol="labelCol" :wrapperCol="wrapperCol">
          <a-radio-group v-model="model.userType">
            <a-radio :value="1">普通用户</a-radio>
            <a-radio :value="2">工段主管</a-radio>
            <a-radio :value="3">车间主管</a-radio>
            <a-radio :value="4">公司主管</a-radio>
          </a-radio-group>
        </a-form-model-item>
        <!--<a-form-model-item-->
        <!--label="座机"-->
        <!--:labelCol="labelCol"-->
        <!--:wrapperCol="wrapperCol"-->
        <!--prop="telephone"-->
        <!--&gt;-->
        <!--<a-input-->
        <!--placeholder="请输入座机"-->
        <!--v-model="model.telephone"-->
        <!--/>-->
        <!--</a-form-model-item>-->
        <!--<a-form-model-item label="工作流引擎" :labelCol="labelCol" :wrapperCol="wrapperCol">-->
        <!--<j-dict-select-tag  v-model="model.activitiSync"  placeholder="请选择是否同步工作流引擎" :type="'radio'" dictCode="activiti_sync"/>-->
        <!--</a-form-model-item>-->
@@ -452,6 +452,7 @@
        this.refresh()
        this.edit({
          activitiSync: '1',
          userType: 1,
          userIdentity: 1,
          selectedroles: '',
          selecteddeparts: '',