From d7a8405c0f57f8947f971b798d3e4713a8d1800f Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期四, 15 五月 2025 16:49:39 +0800
Subject: [PATCH] 1、利用率分段分析页面增加导出功能,默认进入页面的计算时间段修改为00:00至23:59 2、设备管理页面增加设备属性的维护(普通、重点)同时TEEP页面新增对应筛选条件 3、看板增加MES产量数据展示(饼图里面改为设备产量对比,饼图下方增加两行展示计划量和完成量数目,点击饼图出现弹窗展示对应车间或车间工段下产量列表)2h 4、设备管理页面新增字段展示权限(弹窗中设备状态字段增加菜单按钮权限控制显隐) 5、OEE计算弹窗新增loading提示与计算成功后刷新列表功能 6、删除用户管理冗余字段展示

---
 src/views/mdc/base/modules/WorkshopSignage/WorkshopDeviceOverview.vue                |   51 +++
 src/views/mdc/base/EquipmentList.vue                                                 |    6 
 src/views/mdc/base/modules/EquipmentList/UserModal.vue                               |  407 ++++++++++++++------------
 src/views/system/UserList.vue                                                        |   48 --
 src/views/mdc/base/WorkshopSignage.vue                                               |   19 
 src/views/system/modules/UserModal.vue                                               |    5 
 src/views/mdc/base/modules/OEEAnalysis/OEEAnalysisList.vue                           |    2 
 src/views/mdc/base/modules/efficiencyReport/EfficiencyList.vue                       |    5 
 src/views/mdc/base/modules/OEEAnalysis/ComputeOeeModal.vue                           |   36 +
 src/views/mdc/base/modules/OpenRateFractionAnalysis/OpenRateFractionAnalysisMain.vue |   25 +
 src/views/mdc/base/modules/WorkshopSignage/SignageModal.vue                          |  242 ++++++++++++++++
 src/api/signage.js                                                                   |    6 
 12 files changed, 591 insertions(+), 261 deletions(-)

diff --git a/src/api/signage.js b/src/api/signage.js
index b67808a..2cc4dc3 100644
--- a/src/api/signage.js
+++ b/src/api/signage.js
@@ -24,5 +24,9 @@
   // 缂栬緫杞﹂棿淇℃伅
   editWorkshopApi: params => putAction('/mdc/mdcWorkshopInfo/edit', params),
   // 鑾峰彇浜岀骇杞﹂棿淇℃伅
-  getWorkshopListApi: () => getAction('/mdc/mdcWorkshopInfo/getProductionList')
+  getWorkshopListApi: () => getAction('/mdc/mdcWorkshopInfo/getProductionList'),
+  // 鑾峰彇杞﹂棿涓嬪伐娈靛垪琛�
+  getSectionListApi: productionId => getAction('/mdc/largeScreen/productionList', { productionId }),
+  // 鑾峰彇杞﹂棿mes浜ч噺鍒楄〃
+  getMesProductionListApi: params => getAction('/mdc/mdcEquipmentOverFla/list', params)
 }
\ No newline at end of file
diff --git a/src/views/mdc/base/EquipmentList.vue b/src/views/mdc/base/EquipmentList.vue
index 8af88e6..2c93341 100644
--- a/src/views/mdc/base/EquipmentList.vue
+++ b/src/views/mdc/base/EquipmentList.vue
@@ -280,6 +280,12 @@
                   dataIndex:'equipmentStatus_dictText'
                 },
                 {
+                  title:'璁惧灞炴��',
+                  align:'center',
+                  width: 100,
+                  dataIndex:'attribute_dicText'
+                },
+                {
                   title: '鏈哄簥IP',
                   align: 'center',
                   width: 150,
diff --git a/src/views/mdc/base/WorkshopSignage.vue b/src/views/mdc/base/WorkshopSignage.vue
index 7a124a2..c6042b2 100644
--- a/src/views/mdc/base/WorkshopSignage.vue
+++ b/src/views/mdc/base/WorkshopSignage.vue
@@ -5,7 +5,8 @@
       <div class="left-col">
         <div class="col-content">
           <div class="content-title">{{workshopDetails.workshopName}}#璁惧鎯呭喌</div>
-          <workshop-device-overview ref="workshopDeviceOverviewRef" :currentProductionId="currentProductionId"
+          <workshop-device-overview ref="workshopDeviceOverviewRef" :workshopName="workshopDetails.workshopName"
+                                    :currentProductionId="currentProductionId"
                                     :equipmentStatusList="equipmentStatusList" :toDecimal2NoZero="toDecimal2NoZero"/>
         </div>
         <div class="col-content">
@@ -208,15 +209,15 @@
             padding: 1% 5%;
           }
 
-          .content-footer-container {
-            height: 25%;
+          /*.content-footer-container {*/
+          /*height: 25%;*/
 
-            .content-footer {
-              font-size: 0.7vw;
-              padding-left: 5%;
-              height: 40%;
-            }
-          }
+          /*.content-footer {*/
+          /*font-size: 0.7vw;*/
+          /*padding-left: 5%;*/
+          /*height: 40%;*/
+          /*}*/
+          /*}*/
 
           .chart-container {
             flex: 1;
diff --git a/src/views/mdc/base/modules/EquipmentList/UserModal.vue b/src/views/mdc/base/modules/EquipmentList/UserModal.vue
index bc14e33..088ba27 100644
--- a/src/views/mdc/base/modules/EquipmentList/UserModal.vue
+++ b/src/views/mdc/base/modules/EquipmentList/UserModal.vue
@@ -19,17 +19,18 @@
     </template>
 
     <a-spin :spinning="confirmLoading">
-      <a-form-model ref="form" :form="form" :model="model" :rules="validatorRules">
+      <a-form-model ref="form" :form="form" :model="model" :rules="validatorRules" :labelCol="labelCol"
+                    :wrapperCol="wrapperCol">
         <a-row :gutter="24">
           <a-col :span="12">
-            <a-form-model-item label="缁熶竴缂栫爜" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId">
+            <a-form-model-item label="缁熶竴缂栫爜" prop="equipmentId">
               <a-input-search :readOnly="true"
                               v-model="model.equipmentId"
-                              :disabled="disSearch"   @search="deviceSearch" enter-button placeholder='璇烽�夋嫨缁熶竴缂栫爜' />
+                              :disabled="disSearch" @search="deviceSearch" enter-button placeholder='璇烽�夋嫨缁熶竴缂栫爜'/>
             </a-form-model-item>
           </a-col>
           <a-col :span="12">
-            <a-form-model-item label="璁惧鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol">
+            <a-form-model-item label="璁惧鍚嶇О">
               <a-input :disabled="disSearch" :readOnly="disableSubmit" allow-clear placeholder="璇疯緭鍏ヨ澶囧悕绉�"
                        v-model="model.equipmentName"/>
             </a-form-model-item>
@@ -38,11 +39,13 @@
 
         <a-row :gutter="24">
           <a-col :span="12">
-            <a-form-model-item  v-if="isDepartType == 0" label="閮ㄩ棬鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!departDisabled">
-              <j-select-equipment-depart :disabled="disableSubmit" v-model="model.selectedDeparts" :multi="false" @back="backDepartInfo" :backDepart="true" :treeOpera="true"></j-select-equipment-depart>
+            <a-form-model-item v-if="isDepartType == 0" label="閮ㄩ棬鍒嗛厤" v-show="!departDisabled">
+              <j-select-equipment-depart :disabled="disableSubmit" v-model="model.selectedDeparts" :multi="false"
+                                         @back="backDepartInfo" :backDepart="true"
+                                         :treeOpera="true"></j-select-equipment-depart>
             </a-form-model-item>
 
-            <a-form-model-item v-if="isDepartType == -1" label="璁惧绫诲瀷" :labelCol="labelCol" :wrapperCol="wrapperCol">
+            <a-form-model-item v-if="isDepartType == -1" label="璁惧绫诲瀷">
               <a-select :disabled="disableSubmit" :readOnly="disableSubmit" placeholder="璇烽�夋嫨璁惧绫诲瀷"
                         :triggerChange="true"
                         v-model="model.equipmentType">
@@ -53,23 +56,26 @@
             </a-form-model-item>
           </a-col>
           <a-col :span="12">
-            <a-form-model-item label="杞﹂棿鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol"  v-show="!productionDisabled" ref="selectedProduction"  prop="selectedProduction">
+            <a-form-model-item label="杞﹂棿鍒嗛厤" v-show="!productionDisabled" ref="selectedProduction"
+                               prop="selectedProduction">
               <!--<j-select-equipment-production  v-decorator="['selectedProduction',{rules:[{required:true,message:'璇烽�夋嫨杞﹂棿!'}]}]" :multi="false" @back="backProductionInfo" :backProduction="true" :treeProductOpera="true"></j-select-equipment-production>-->
-              <j-select-equipment-production :disabled="disableSubmit"  v-model="model.selectedProduction" :multi="false" @back="backProductionInfo" :backProduction="true" :treeProductOpera="true"></j-select-equipment-production>
+              <j-select-equipment-production :disabled="disableSubmit" v-model="model.selectedProduction" :multi="false"
+                                             @back="backProductionInfo" :backProduction="true"
+                                             :treeProductOpera="true"></j-select-equipment-production>
             </a-form-model-item>
 
           </a-col>
         </a-row>
         <a-row :gutter="24">
           <a-col :span="12">
-            <a-form-model-item v-if="isDepartType == 0" label="璁惧绫诲瀷" :labelCol="labelCol" :wrapperCol="wrapperCol">
-            <a-select :disabled="disableSubmit" :readOnly="disableSubmit" placeholder="璇烽�夋嫨璁惧绫诲瀷"
-              :triggerChange="true"
-                      v-model="model.equipmentType">
-              <a-select-option v-for='item in selectList' :key='item.id' :value='item.equipmentTypeName'>
-                {{item.equipmentTypeName}}
-              </a-select-option>
-            </a-select>
+            <a-form-model-item v-if="isDepartType == 0" label="璁惧绫诲瀷">
+              <a-select :disabled="disableSubmit" :readOnly="disableSubmit" placeholder="璇烽�夋嫨璁惧绫诲瀷"
+                        :triggerChange="true"
+                        v-model="model.equipmentType">
+                <a-select-option v-for='item in selectList' :key='item.id' :value='item.equipmentTypeName'>
+                  {{item.equipmentTypeName}}
+                </a-select-option>
+              </a-select>
             </a-form-model-item>
 
           </a-col>
@@ -77,13 +83,13 @@
 
         <a-row :gutter="24">
           <a-col :span="12">
-            <a-form-model-item label="鏈哄簥IP" :labelCol="labelCol" :wrapperCol="wrapperCol">
+            <a-form-model-item label="鏈哄簥IP">
               <a-input :disabled="true" :readOnly="disableSubmit" placeholder="璇疯緭鍏ユ満搴奍P"
                        v-model="model.equipmentIp"/>
             </a-form-model-item>
           </a-col>
           <a-col :span="12">
-            <a-form-model-item label="鏈哄簥绔彛" :labelCol="labelCol" :wrapperCol="wrapperCol">
+            <a-form-model-item label="鏈哄簥绔彛">
               <a-input :disabled="true" :readOnly="disableSubmit" placeholder="璇疯緭鍏ユ満搴婄鍙�"
                        v-model="model.dataPort"/>
             </a-form-model-item>
@@ -92,14 +98,14 @@
 
         <a-row :gutter="24">
           <a-col :span="12">
-            <a-form-model-item label="椹卞姩绫诲瀷" :labelCol="labelCol" :wrapperCol="wrapperCol">
+            <a-form-model-item label="椹卞姩绫诲瀷">
               <j-dict-select-tag :disabled="true" :readOnly="disableSubmit" placeholder="璇烽�夋嫨椹卞姩绫诲瀷"
                                  :triggerChange="true" dictCode="mdc_driveType"
                                  v-model="model.driveType" allow-clear/>
             </a-form-model-item>
           </a-col>
           <a-col :span="12">
-            <a-form-model-item label="璁惧鍨嬪彿" :labelCol="labelCol" :wrapperCol="wrapperCol">
+            <a-form-model-item label="璁惧鍨嬪彿">
               <a-input :disabled="true" :readOnly="disableSubmit" allow-clear placeholder="璇疯緭鍏ヨ澶囧瀷鍙�"
                        v-model="model.equipmentModel"/>
             </a-form-model-item>
@@ -108,20 +114,28 @@
 
         <a-row :gutter="24">
           <a-col :span="12">
-            <a-form-model-item label="绯荤粺绫诲瀷" :labelCol="labelCol" :wrapperCol="wrapperCol">
-              <j-dict-select-tag  placeholder="璇烽�夋嫨绯荤粺绫诲瀷" :triggerChange="true" dictCode="system_type" v-model="model.systemType" allow-clear/>
+            <a-form-model-item label="绯荤粺绫诲瀷">
+              <j-dict-select-tag placeholder="璇烽�夋嫨绯荤粺绫诲瀷" :triggerChange="true" dictCode="system_type"
+                                 v-model="model.systemType" allow-clear/>
             </a-form-model-item>
           </a-col>
           <a-col :span="12">
-            <a-form-model-item label="璁惧鐘舵��" :labelCol="labelCol" :wrapperCol="wrapperCol">
-              <j-dict-select-tag  placeholder="璇烽�夋嫨璁惧鐘舵��" :triggerChange="true" dictCode="mdc_equipment_status" v-model="model.equipmentStatus" allow-clear/>
+            <a-form-model-item label="璁惧鐘舵��">
+              <j-dict-select-tag placeholder="璇烽�夋嫨璁惧鐘舵��" :triggerChange="true" dictCode="mdc_equipment_status"
+                                 v-model="model.equipmentStatus" allow-clear/>
             </a-form-model-item>
           </a-col>
         </a-row>
 
         <a-row :gutter="24">
+          <a-col :span="12" v-has="'equipment_attribute'">
+            <a-form-model-item label="璁惧灞炴��">
+              <j-dict-select-tag v-model="model.attribute"  type="radio"
+                                 dictCode="equipment_attribute"/>
+            </a-form-model-item>
+          </a-col>
           <a-col :span="12">
-            <a-form-model-item label="鎺掑簭" :labelCol="labelCol" :wrapperCol="wrapperCol">
+            <a-form-model-item label="鎺掑簭">
               <a-input :disabled="disableSubmit" :readOnly="disableSubmit" placeholder="璇疯緭鍏ユ帓搴�"
                        v-model="model.sortNo" style="width: 100%"/>
             </a-form-model-item>
@@ -130,7 +144,7 @@
 
         <a-row :gutter="24">
           <a-col :span="24">
-            <a-form-model-item :labelCol="{span:3}" :wrapperCol="{span:21}" label="澶囨敞">
+            <a-form-model-item :labelCol="{span:4}" :wrapperCol="{span:19}" label="澶囨敞">
               <a-textarea :disabled="disableSubmit" :readOnly="disableSubmit" placeholder="璇疯緭鍏ュ娉�"
                           v-model="model.remark"/>
             </a-form-model-item>
@@ -155,117 +169,118 @@
   import pick from 'lodash.pick'
   import moment from 'moment'
   import Vue from 'vue'
-  import { ACCESS_TOKEN } from "@/store/mutation-types"
+  import { ACCESS_TOKEN } from '@/store/mutation-types'
   import { getAction } from '@/api/manage'
-  import { addEquipment,editEquipment} from '@/api/api'
-  import { disabledAuthFilter } from "@/utils/authFilter"
+  import { addEquipment, editEquipment } from '@/api/api'
+  import { disabledAuthFilter } from '@/utils/authFilter'
   import { duplicateCheck } from '@/api/api'
   import JSelectEquipmentProduction from '../../../../../components/jeecgbiz/JSelectEquipmentProduction'
   import JSelectProduction from '../../../../../components/jeecgbiz/JSelectProduction'
   import DeviceListModel from './DeviceListModal'
   import JSelectEquipmentDepart from '../../../../../components/jeecgbiz/JSelectEquipmentDepart'
-  import {mapActions} from 'vuex'
+  import { mapActions } from 'vuex'
+
   export default {
-    name: "UserModal",
+    name: 'UserModal',
     components: {
       JSelectProduction,
       JSelectEquipmentDepart,
       JSelectEquipmentProduction,
       DeviceListModel
     },
-    data () {
+    data() {
       return {
-        disSearch:false,
+        disSearch: false,
         departDisabled: false, //鏄惁鏄垜鐨勯儴闂ㄨ皟鐢ㄨ椤甸潰
         productionDisabled: false, //鏄惁鏄垜鐨勮溅闂磋皟鐢ㄨ椤甸潰
         roleDisabled: false, //鏄惁鏄鑹茬淮鎶よ皟鐢ㄨ椤甸潰
-        modalWidth:800,
-        drawerWidth:700,
-        modalToggleFlag:true,
+        modalWidth: 800,
+        drawerWidth: 700,
+        modalToggleFlag: true,
         confirmDirty: false,
-        userId:"", //淇濆瓨鐢ㄦ埛id
+        userId: '', //淇濆瓨鐢ㄦ埛id
         // disableSubmit:false,
         disableSubmit: true,
-        dateFormat:"YYYY-MM-DD",
+        dateFormat: 'YYYY-MM-DD',
         form: this.$form.createForm(this),
 
-        validatorRules:{
+        validatorRules: {
           // equipmentId: [{required: false, message: '璇烽�夋嫨璁惧缂栧彿!'}, {validator: this.validatequipmentId}],
           equipmentId:
             [
               {
-              required: true, message: '璇烽�夋嫨璁惧缂栧彿!'
-              },
+                required: true, message: '璇烽�夋嫨璁惧缂栧彿!'
+              }
               // {
               // validator: this.validatequipmentId
               // }
             ],
-            // trigger: 'blur' // 瑙﹀彂鏂瑰紡
+          // trigger: 'blur' // 瑙﹀彂鏂瑰紡
 
           selectedProduction:
             [
               {
-                required:true,message: '璇烽�夋嫨杞﹂棿'
+                required: true, message: '璇烽�夋嫨杞﹂棿'
               }
             ]
 
         },
-        departIdShow:false,
-        title:"鎿嶄綔",
+        departIdShow: false,
+        title: '鎿嶄綔',
         visible: false,
         model: {
-          equipmentId: "",
-          equipmentName: "",
-          equipmentModel: "",
-          equipmentIp: "",
-          dataPort: "",
-          driveType: "",
-          systemType: "",
+          equipmentId: '',
+          equipmentName: '',
+          equipmentModel: '',
+          equipmentIp: '',
+          dataPort: '',
+          driveType: '',
+          systemType: '',
           equipmentStatus: '0',
-          deviceLevel: "",
-          deviceCategory: "",
+          deviceLevel: '',
+          deviceCategory: ''
         },
         labelCol: {
           xs: { span: 24 },
-          sm: { span: 8 },
+          sm: { span: 8 }
         },
         wrapperCol: {
           xs: { span: 24 },
-          sm: { span: 15 },
+          sm: { span: 14 }
         },
-        uploadLoading:false,
+        uploadLoading: false,
         confirmLoading: false,
-        headers:{},
+        headers: {},
         url: {
-          fileUpload: window._CONFIG['domianURL']+"/sys/common/upload",
-          userWithDepart: "/mdc/mdcEquipment/equipmentDepartList", // 寮曞叆涓烘寚瀹氱敤鎴锋煡鐪嬮儴闂ㄤ俊鎭渶瑕佺殑url
+          fileUpload: window._CONFIG['domianURL'] + '/sys/common/upload',
+          userWithDepart: '/mdc/mdcEquipment/equipmentDepartList', // 寮曞叆涓烘寚瀹氱敤鎴锋煡鐪嬮儴闂ㄤ俊鎭渶瑕佺殑url
           //寮曞叆涓烘寚瀹氱敤鎴锋煡鐪嬭溅闂翠俊鎭渶瑕佺殑url
           userProductionList: '/mdc/mdcEquipment/equipmentProductionList',
-          userId:"/sys/user/generateUserId", // 寮曞叆鐢熸垚娣诲姞鐢ㄦ埛鎯呭喌涓嬬殑url
-          syncUserByUserName:"/act/process/extActProcess/doSyncUserByUserName",//鍚屾鐢ㄦ埛鍒板伐浣滄祦
+          userId: '/sys/user/generateUserId', // 寮曞叆鐢熸垚娣诲姞鐢ㄦ埛鎯呭喌涓嬬殑url
+          syncUserByUserName: '/act/process/extActProcess/doSyncUserByUserName',//鍚屾鐢ㄦ埛鍒板伐浣滄祦
           queryTenantList: '/sys/tenant/queryList',
-          check:'/sys/duplicate/check',
-          queryEquipmentType:'/mdc/mdcEquipmentType/queryEquipmentType'
+          check: '/sys/duplicate/check',
+          queryEquipmentType: '/mdc/mdcEquipmentType/queryEquipmentType'
         },
         tenantsOptions: [],
-        rolesOptions:[],
-        nextDepartOptions:[],
-        nextProductionOptions:[],
-        selectList:[],
-        isDepartType:''
+        rolesOptions: [],
+        nextDepartOptions: [],
+        nextProductionOptions: [],
+        selectList: [],
+        isDepartType: ''
       }
     },
-    created () {
-      const token = Vue.ls.get(ACCESS_TOKEN);
-      this.headers = {"X-Access-Token":token}
+    created() {
+      const token = Vue.ls.get(ACCESS_TOKEN)
+      this.headers = { 'X-Access-Token': token }
       this.queryGroup()
       this.queryTreeData()
       // this.initRoleList()
       // this.initTenantList()
     },
-    computed:{
-      uploadAction:function () {
-        return this.url.fileUpload;
+    computed: {
+      uploadAction: function() {
+        return this.url.fileUpload
       }
     },
     methods: {
@@ -277,11 +292,11 @@
           } else {
             // this.$message.warn(res.message)
             this.$notification.warning({
-              message:'娑堟伅',
-              description:res.message
-            });
+              message: '娑堟伅',
+              description: res.message
+            })
           }
-        }).finally(() =>{
+        }).finally(() => {
         })
       },
       queryGroup() {
@@ -294,9 +309,9 @@
           } else {
             // this.$message.warning(res.message)
             this.$notification.warning({
-              message:'娑堟伅',
-              description:res.message
-            });
+              message: '娑堟伅',
+              description: res.message
+            })
           }
         }).finally(() => {
           this.loading = false
@@ -304,15 +319,15 @@
       },
       getDeviceRows(val) {
         console.log(val)
-        if(val.equipmentid ){
+        if (val.equipmentid) {
           this.model.equipmentId = val.equipmentid
           this.model.equipmentName = val.equipmentname
-            this.model.equipmentModel = val.equipmentmodel
-            this.model.equipmentIp = val.equipmentip
-            this.model.dataPort =  val.dataport
-            this.model.driveType = val.drivetype
-            this.model.controlSystem = val.controlsystem
-            this.model.saveTableName = val.savetablename
+          this.model.equipmentModel = val.equipmentmodel
+          this.model.equipmentIp = val.equipmentip
+          this.model.dataPort = val.dataport
+          this.model.driveType = val.drivetype
+          this.model.controlSystem = val.controlsystem
+          this.model.saveTableName = val.savetablename
         }
 
       },
@@ -321,63 +336,76 @@
         this.$refs.deviceListModel.title = '閫夋嫨璁惧'
         this.$refs.deviceListModel.disableSubmit = false
       },
-      add () {
-        this.refresh();
-        this.edit({activitiSync:'1',userIdentity:1,equipmentId:"",equipmentName:"",equipmentModel:"",equipmentIp:'',dataPort:"",driveType:"",controlSystem:"",saveTableName:"",equipmentStatus:'0'});
+      add() {
+        this.refresh()
+        this.edit({
+          activitiSync: '1',
+          userIdentity: 1,
+          equipmentId: '',
+          equipmentName: '',
+          equipmentModel: '',
+          equipmentIp: '',
+          dataPort: '',
+          driveType: '',
+          controlSystem: '',
+          saveTableName: '',
+          equipmentStatus: '0',
+          attribute: 0
+        })
       },
-      edit (record) {
-        let that = this;
-        that.visible = true;
+      edit(record) {
+        let that = this
+        that.visible = true
         //鏍规嵁灞忓箷瀹藉害鑷�傚簲鎶藉眽瀹藉害
-        this.resetScreenSize();
+        this.resetScreenSize()
 
         // that.userId = record.id;
         // console.log(record)
-        that.model = Object.assign({}, record);
+        that.model = Object.assign({}, record)
         // that.model = Object.assign({},{selectedroles:'',selectedProduction:''}, record);
         // this.model = Object.assign({}, record)
 
         this.$nextTick(() => {
           this.form.setFieldsValue(pick(that.model, 'selectedDeparts', 'selectedProduction', 'equipmentId', 'equipmentName', 'equipmentModel', 'equipmentType', 'equipmentIp', 'dataPort',
-            'driveType', 'sortNo', 'remark','systemVersion','devicePower','controlSystem','saveTableName'))
+            'driveType', 'sortNo', 'remark', 'systemVersion', 'devicePower', 'controlSystem', 'saveTableName'))
         })
-        if(record.hasOwnProperty("id")){
+        if (record.hasOwnProperty('id')) {
           // that.getUserRoles(record.id);
-          that.getUserDeparts(record.id);
+          that.getUserDeparts(record.id)
         }
         // console.log('that.model=',that.model)
       },
-      isDisabledAuth(code){
-        return disabledAuthFilter(code);
+      isDisabledAuth(code) {
+        return disabledAuthFilter(code)
       },
       //绐楀彛鏈�澶у寲鍒囨崲
-      toggleScreen(){
-        if(this.modalToggleFlag){
-          this.modalWidth = window.innerWidth;
-        }else{
-          this.modalWidth = 800;
+      toggleScreen() {
+        if (this.modalToggleFlag) {
+          this.modalWidth = window.innerWidth
+        } else {
+          this.modalWidth = 800
         }
-        this.modalToggleFlag = !this.modalToggleFlag;
+        this.modalToggleFlag = !this.modalToggleFlag
       },
       // 鏍规嵁灞忓箷鍙樺寲,璁剧疆鎶藉眽灏哄
-      resetScreenSize(){
-        let screenWidth = document.body.clientWidth;
-        if(screenWidth < 500){
-          this.drawerWidth = screenWidth;
-        }else{
-          this.drawerWidth = 700;
+      resetScreenSize() {
+        let screenWidth = document.body.clientWidth
+        if (screenWidth < 500) {
+          this.drawerWidth = screenWidth
+        } else {
+          this.drawerWidth = 700
         }
       },
-      getUserDeparts(userid){
-        let that = this;
+      getUserDeparts(userid) {
+        let that = this
         //閮ㄩ棬鐨剈rl
-        getAction(that.url.userWithDepart,{equipmentId:userid}).then((res)=>{
-          if(res.success){
+        getAction(that.url.userWithDepart, { equipmentId: userid }).then((res) => {
+          if (res.success) {
             // console.log(res.result)
-            let departOptions=[];
-            let selectDepartKeys=[]
+            let departOptions = []
+            let selectDepartKeys = []
             for (let i = 0; i < res.result.length; i++) {
-              selectDepartKeys.push(res.result[i].key);
+              selectDepartKeys.push(res.result[i].key)
               //鏂板璐熻矗閮ㄩ棬閫夋嫨涓嬫媺妗�
               departOptions.push({
                 value: res.result[i].key,
@@ -385,22 +413,22 @@
               })
             }
 
-            that.model.selectedDeparts = selectDepartKeys.join(",")
+            that.model.selectedDeparts = selectDepartKeys.join(',')
             // that.model.selectedProduction = selectDepartKeys.join(",")
 
-            that.nextDepartOptions=departOptions;
+            that.nextDepartOptions = departOptions
             // console.log('that.nextDepartOptions=',that.nextDepartOptions)
           }
         })
 
-        getAction(that.url.userProductionList,{equipmentId:userid}).then((res)=>{
-          if(res.success){
+        getAction(that.url.userProductionList, { equipmentId: userid }).then((res) => {
+          if (res.success) {
             // console.log(res.result)
-            let ProductionOptions=[];
-            let selectProductKeys=[]
+            let ProductionOptions = []
+            let selectProductKeys = []
             // console.log(res.result)
             for (let i = 0; i < res.result.length; i++) {
-              selectProductKeys.push(res.result[i].key);
+              selectProductKeys.push(res.result[i].key)
               //鏂板璐熻矗閮ㄩ棬閫夋嫨涓嬫媺妗�
               ProductionOptions.push({
                 value: res.result[i].key,
@@ -408,9 +436,9 @@
               })
             }
 
-            that.model.selectedProduction = selectProductKeys.join(",")
+            that.model.selectedProduction = selectProductKeys.join(',')
 
-            that.nextProductionOptions=ProductionOptions;
+            that.nextProductionOptions = ProductionOptions
             // console.log('that.nextProductionOptions=',that.nextProductionOptions)
           }
         })
@@ -418,106 +446,107 @@
       },
       backDepartInfo(info) {
         // console.log(info)
-        this.model.departIds = this.model.selectedDeparts;
-        this.nextDepartOptions = info.map((item,index,arr)=>{
-          let c = {label:item.text, value: item.value+""}
-          return c;
+        this.model.departIds = this.model.selectedDeparts
+        this.nextDepartOptions = info.map((item, index, arr) => {
+          let c = { label: item.text, value: item.value + '' }
+          return c
         })
       },
       backProductionInfo(info) {
         // console.log(info)
-        this.model.productionIds = this.model.selectedProduction;
-        this.nextProductionOptions = info.map((item,index,arr)=>{
-          let c = {label:item.text, value: item.value+""}
-          return c;
+        this.model.productionIds = this.model.selectedProduction
+        this.nextProductionOptions = info.map((item, index, arr) => {
+          let c = { label: item.text, value: item.value + '' }
+          return c
         })
       },
 
-      refresh () {
-        this.userId=""
-        this.nextDepartOptions=[];
-        this.nextProductionOptions = [];
-        this.departIdShow=false;
-      },
-      close () {
-        this.$emit('close');
-        this.visible = false;
-        this.disableSubmit = false;
-        this.nextDepartOptions=[];
+      refresh() {
+        this.userId = ''
+        this.nextDepartOptions = []
         this.nextProductionOptions = []
-        this.departIdShow=false;
+        this.departIdShow = false
+      },
+      close() {
+        this.$emit('close')
+        this.visible = false
+        this.disableSubmit = false
+        this.nextDepartOptions = []
+        this.nextProductionOptions = []
+        this.departIdShow = false
         // this.$refs.form.resetFields();
       },
       moment,
-      handleSubmit () {
-        const that = this;
+      handleSubmit() {
+        const that = this
         // 瑙﹀彂琛ㄥ崟楠岃瘉
         this.$refs.form.validate(valid => {
           if (valid) {
-            that.confirmLoading = true;
+            that.confirmLoading = true
             //濡傛灉鏄笂绾ф嫨浼犲叆departIds,鍚﹀垯涓虹┖
             // if(this.model.userIdentity!==2){
             //   this.model.departIds="";
             // }
-            let obj;
-            if(!this.model.id){
-              this.model.id = this.userId;
-              obj=addEquipment(this.model);
-            }else{
-              obj=editEquipment(this.model,{
-                        id: this.model.id
-                      });
+            let obj
+            if (!this.model.id) {
+              this.model.id = this.userId
+              obj = addEquipment(this.model)
+            } else {
+              obj = editEquipment(this.model, {
+                id: this.model.id
+              })
             }
-            obj.then((res)=>{
-              if(res.success){
+            obj.then((res) => {
+              if (res.success) {
                 that.$notification.success({
-                  message:'娑堟伅',
-                  description:res.message
-                });
-                that.$emit('ok');
-              }else{
+                  message: '娑堟伅',
+                  description: res.message
+                })
+                that.$emit('ok')
+              } else {
                 that.$notification.warning({
-                  message:'娑堟伅',
-                  description:res.message
-                });
+                  message: '娑堟伅',
+                  description: res.message
+                })
               }
             }).finally(() => {
-              that.confirmLoading = false;
-              that.close();
+              that.confirmLoading = false
+              that.close()
             })
-          }else{
-            return false;
+          } else {
+            return false
           }
         })
       },
 
       handleConfirmBlur(e) {
-        const value = e.target.value;
+        const value = e.target.value
         this.confirmDirty = this.confirmDirty || !!value
       },
-      identityChange(e){
-        if(e.target.value===1){
-          this.departIdShow=false;
-        }else{
-          this.departIdShow=true;
+      identityChange(e) {
+        if (e.target.value === 1) {
+          this.departIdShow = false
+        } else {
+          this.departIdShow = true
         }
       },
       /**
        * 缂栬緫鎴栨煡鐪嬭鎯呮暟鎹椂娓呴櫎鎶藉眽琛ㄥ崟楠岃瘉
        */
-      removeValidate(){
+      removeValidate() {
         this.$refs.form.clearValidate()
       }
-    },
+    }
 
   }
 </script>
 
 <style scoped>
   .avatar-uploader > .ant-upload {
-    width:104px;
-    height:104px;
+    width: 104px;
+    height: 104px;
   }
+
   .ant-upload-select-picture-card i {
     font-size: 49px;
     color: #999;
@@ -528,9 +557,9 @@
     color: #666;
   }
 
-  .ant-table-tbody .ant-table-row td{
-    padding-top:10px;
-    padding-bottom:10px;
+  .ant-table-tbody .ant-table-row td {
+    padding-top: 10px;
+    padding-bottom: 10px;
   }
 
   .drawer-bottom-button {
diff --git a/src/views/mdc/base/modules/OEEAnalysis/ComputeOeeModal.vue b/src/views/mdc/base/modules/OEEAnalysis/ComputeOeeModal.vue
index 1445eee..030dba9 100644
--- a/src/views/mdc/base/modules/OEEAnalysis/ComputeOeeModal.vue
+++ b/src/views/mdc/base/modules/OEEAnalysis/ComputeOeeModal.vue
@@ -1,17 +1,19 @@
 <template>
-  <a-modal title="璁$畻OEE" :visible="visible" :width="550" @cancel="handleModalClose" @ok="handleComputeOee"
-           :maskClosable="false">
-    <a-form-model :model="model" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
-      <a-row>
-        <a-col :span="24">
-          <a-form-model-item label="鏃ユ湡">
-            <a-range-picker v-model="dates" style="width: 100%" value-format="YYYY-MM-DD"
-                            @change="dateParamChange"></a-range-picker>
-          </a-form-model-item>
-        </a-col>
-      </a-row>
-    </a-form-model>
-  </a-modal>
+  <j-modal title="璁$畻OEE" :visible="visible" :width="550" @cancel="handleModalClose" @ok="handleComputeOee"
+           :maskClosable="false" :confirmLoading="confirmLoading">
+    <a-spin :spinning="confirmLoading">
+      <a-form-model :model="model" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item label="鏃ユ湡">
+              <a-range-picker v-model="dates" style="width: 100%" value-format="YYYY-MM-DD"
+                              @change="dateParamChange"></a-range-picker>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </a-spin>
+  </j-modal>
 </template>
 
 <script>
@@ -23,6 +25,7 @@
     data() {
       return {
         visible: false,
+        confirmLoading: false,
         model: {},
         dates: [],
         labelColLong: {
@@ -46,6 +49,7 @@
           return
         }
 
+        this.confirmLoading = true
         mdcApi.computeOeeApi(this.model)
           .then(res => {
             if (res.success) {
@@ -53,7 +57,8 @@
                 message: '娑堟伅',
                 description: res.message
               })
-              this.visible = false
+              this.$emit('ok')
+              this.handleModalClose()
             } else {
               this.$notification.error({
                 message: '娑堟伅',
@@ -67,6 +72,9 @@
               description: '璁$畻澶辫触'
             })
           })
+          .finally(() => {
+            this.confirmLoading = false
+          })
       },
 
       dateParamChange(value1, value2) {
diff --git a/src/views/mdc/base/modules/OEEAnalysis/OEEAnalysisList.vue b/src/views/mdc/base/modules/OEEAnalysis/OEEAnalysisList.vue
index b09a6a0..df9092d 100644
--- a/src/views/mdc/base/modules/OEEAnalysis/OEEAnalysisList.vue
+++ b/src/views/mdc/base/modules/OEEAnalysis/OEEAnalysisList.vue
@@ -49,7 +49,7 @@
       </a-table>
     </div>
 
-    <ComputeOeeModal ref="computeOeeModalRef"/>
+    <ComputeOeeModal ref="computeOeeModalRef" @ok="modalFormOk"/>
   </div>
 </template>
 
diff --git a/src/views/mdc/base/modules/OpenRateFractionAnalysis/OpenRateFractionAnalysisMain.vue b/src/views/mdc/base/modules/OpenRateFractionAnalysis/OpenRateFractionAnalysisMain.vue
index 6972c4b..1ee20b1 100644
--- a/src/views/mdc/base/modules/OpenRateFractionAnalysis/OpenRateFractionAnalysisMain.vue
+++ b/src/views/mdc/base/modules/OpenRateFractionAnalysis/OpenRateFractionAnalysisMain.vue
@@ -16,8 +16,9 @@
                 <a-space>
                   <a-time-picker :default-value="moment('00:00', 'HH:mm')" format="HH:mm" @change="onChangeStart" :allowClear="false"/>
                   鑷�
-                  <a-time-picker :default-value="moment('08:00', 'HH:mm')" format="HH:mm" @change="onChangeEnd" :allowClear="false"/>
+                  <a-time-picker :default-value="moment('23:59', 'HH:mm')" format="HH:mm" @change="onChangeEnd" :allowClear="false"/>
                   <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+                  <a-button type="primary" @click="exportExcel" icon="download">瀵煎嚭</a-button>
                 </a-space>
               </a-form-item>
             </a-col>
@@ -28,17 +29,16 @@
         <a-spin :spinning="loading">
           <div id="Efficiency" class="container" style="margin-bottom: 15px;">
               <div class="table2">
-                <table class="dataContent table" border="1" cellspacing="0" cellpadding="0"
-                       style="white-space: nowrap;text-align: center;">
+                <table class="dataContent table" border="1" cellspacing="0" cellpadding="0">
                   <thead>
                   <tr class="thead fixed equipname">
-                    <th class="thgu dong1 name" rowspan="2" style="min-width: 150px; max-width: 150px;width: 150px;">
+                    <th class="thgu dong1 name" style="min-width: 150px; max-width: 150px;width: 150px;">
                       璁惧缂栧彿
                     </th>
-                    <th class="thgu dong2 name" rowspan="2" style="min-width: 162px; max-width: 162px;width: 162px;">
+                    <th class="thgu dong2 name" style="min-width: 162px; max-width: 162px;width: 162px;">
                       璁惧鍚嶇О
                     </th>
-                    <th class="thgu dong3 name" rowspan="2" style="min-width: 100px; max-width: 100px;width: 100px;">
+                    <th class="thgu dong3 name" style="min-width: 100px; max-width: 100px;width: 100px;">
                       璁惧绫诲瀷
                     </th>
                     <template v-for="(tableHead, index) in tableHeads">
@@ -128,7 +128,7 @@
       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.endTime = '23:59'
       this.queryParam.typeTree = '1'
       this.loadData1()
 
@@ -183,6 +183,17 @@
     },
     methods: {
       moment,
+      exportExcel() {
+        $('#Efficiency').table2excel({
+          exclude: '.noExl',
+          name: 'Excel Document Name',
+          filename: '鍒╃敤鐜囧垎娈靛垎鏋�',
+          exclude_img: true,
+          fileext: '.xls',
+          exclude_links: true,
+          exclude_inputs: true
+        })
+      },
       onChangeStart(time, timeString) {
         this.queryParam.startTime = timeString
         // console.log(time, timeString);
diff --git a/src/views/mdc/base/modules/WorkshopSignage/SignageModal.vue b/src/views/mdc/base/modules/WorkshopSignage/SignageModal.vue
new file mode 100644
index 0000000..022da86
--- /dev/null
+++ b/src/views/mdc/base/modules/WorkshopSignage/SignageModal.vue
@@ -0,0 +1,242 @@
+<template>
+  <a-modal :title="modalTitle" :width="modalWidth" :visible="visible" :footer="null" @cancel="visible=false"
+           destroyOnClose>
+    <a-form layout="inline" @keyup.enter.native="loadData(1)">
+      <a-form-item label="宸ユ">
+        <a-select default-value="" style="width: 200px" @select="handleSelectChange">
+          <a-select-option key="">鍏ㄩ儴</a-select-option>
+          <a-select-option v-for="item in selectList" :key="item.id">{{item.productionName}}</a-select-option>
+        </a-select>
+      </a-form-item>
+      <a-form-item>
+        <a-button type="primary" @click="loadData(1)">鏌ヨ</a-button>
+      </a-form-item>
+    </a-form>
+    <a-table :columns="columns" :dataSource="dataSource" :pagination="ipagination" :loading="loading"
+             @change="handleTableChange" style="margin-top: 20px" rowKey="id">
+      <template slot="qualifiedStatus" slot-scope="text, record">
+        <span :style="{color:text==='鏈畬鎴�'?'#f00':'#89D961',fontWeight:'bold'}">{{text}}</span>
+      </template>
+    </a-table>
+  </a-modal>
+</template>
+
+<script>
+  import signageApi from '@/api/signage'
+  import { filterObj } from '@/utils/util'
+
+  export default {
+    name: 'SignageModal',
+    components: {},
+    props: {
+      modalWidth: {
+        type: Number,
+        default: 1048
+      },
+      modalTitle: {
+        type: String
+      },
+      productionId: {
+        type: String
+      }
+    },
+    watch: {
+      visible: {
+        handler(newVal) {
+          // 鎵撳紑寮圭獥鏃舵暟鎹洖鍒扮涓�椤典笖姣忛〉鏄剧ず鏈�澶ф潯鏁版仮澶嶄负鏈�灏忓��
+          if (newVal) {
+            this.getSectionListByApi()
+            this.searchReset()
+            this.ipagination.pageSize = +this.ipagination.pageSizeOptions[0]
+          }
+        }
+      }
+    },
+    data() {
+      return {
+        visible: false,
+        selectList: [],
+        queryParam: {},
+        loading: false,
+        /* 鍒嗛〉鍙傛暟 */
+        ipagination: {
+          current: 1,
+          pageSize: 10,
+          pageSizeOptions: ['10', '20', '30'],
+          showTotal: (total, range) => {
+            return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
+          },
+          showQuickJumper: true,
+          showSizeChanger: true,
+          total: 0
+        },
+        dataSource: [],
+        columns: [
+          {
+            align: 'center',
+            title: '宸ュ巶鍚嶇О',
+            dataIndex: 'workshop',
+            key: 'workshop'
+          },
+          {
+            align: 'center',
+            title: '宸ユ鍚嶇О',
+            dataIndex: 'dept',
+            key: 'dept'
+          },
+          {
+            align: 'center',
+            title: '闆朵欢缂栧彿',
+            dataIndex: 'mdsItemCode',
+            key: 'mdsItemCode'
+          },
+          {
+            align: 'center',
+            title: '涓嬭揪浠诲姟閲�',
+            key: 'batchNum',
+            dataIndex: 'batchNum'
+          },
+          {
+            align: 'center',
+            title: '瀹屾垚浠诲姟閲�',
+            key: 'qualifiedQty',
+            dataIndex: 'qualifiedQty'
+          },
+          {
+            align: 'center',
+            title: '瀹屾垚鐧惧垎姣�',
+            key: 'qualifiedRate',
+            dataIndex: 'qualifiedRate'
+          },
+          {
+            align: 'center',
+            title: '鏄惁瀹屾垚',
+            key: 'qualifiedStatus',
+            dataIndex: 'qualifiedStatus',
+            scopedSlots: { customRender: 'qualifiedStatus' }
+          }
+        ]
+      }
+    },
+    methods: {
+      // 鑾峰彇杞﹂棿瀵瑰簲宸ユ鍒楄〃
+      getSectionListByApi() {
+        const that = this
+        signageApi.getSectionListApi(this.productionId)
+          .then(res => {
+            console.log('res--------', res)
+            if (res.success) that.selectList = res.result
+          })
+      },
+
+      loadData(arg) {
+        //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭
+        if (arg === 1) this.ipagination.current = 1
+        const params = this.getQueryParams()//鏌ヨ鏉′欢
+        params.productionId = this.productionId
+        if (!params) return false
+        this.loading = true
+        signageApi.getMesProductionListApi(params)
+          .then((res) => {
+            if (res.success) {
+              this.dataSource = res.result.records || res.result
+              if (res.result.total) {
+                this.ipagination.total = res.result.total
+              } else {
+                this.ipagination.total = 0
+              }
+            } else {
+              this.$message.warning(res.message)
+            }
+          })
+          .finally(() => {
+            this.loading = false
+          })
+      },
+
+      /**
+       * 宸ユ閫夋嫨鍙樺寲鏃惰Е鍙�
+       * @param value 閫夋嫨鍚巏ey
+       */
+      handleSelectChange(value) {
+        this.queryParam.proChildId = value
+      },
+
+      getQueryParams() {
+        //鑾峰彇鏌ヨ鏉′欢
+        let sqp = {}
+        const param = Object.assign(sqp, this.queryParam, this.isorter, this.filters)
+        param.field = this.getQueryField()
+        param.pageNo = this.ipagination.current
+        param.pageSize = this.ipagination.pageSize
+        return filterObj(param)
+      },
+
+      getQueryField() {
+        let str = 'id,'
+        this.columns.forEach(function(value) {
+          str += ',' + value.dataIndex
+        })
+        return str
+      },
+
+      searchReset() {
+        this.queryParam = {}
+        this.dataSource = []
+        this.loadData(1)
+      },
+
+      /**
+       * 鍒嗛〉鍙樺寲鏃惰Е鍙�
+       * @param pagination 鍒嗛〉鍙傛暟
+       */
+      handleTableChange(pagination) {
+        this.ipagination = pagination
+        this.loadData()
+      }
+    }
+  }
+</script>
+
+<style scoped>
+  /deep/ .ant-modal-content, /deep/ .ant-modal-header,
+  /deep/ .ant-table-placeholder, /deep/ .ant-pagination-item-active {
+    background-color: #000;
+  }
+
+  /deep/ .ant-modal-title, /deep/ .ant-pagination-total-text,
+  /deep/ .ant-modal-close, /deep/ .ant-form-item-label label,
+  /deep/ .ant-table-placeholder .ant-empty-description, /deep/ .ant-pagination-options-quick-jumper {
+    color: #fff;
+  }
+
+  /deep/ .ant-input, /deep/ .ant-pagination-item a,
+  /deep/ .ant-pagination-item-link, /deep/ .ant-select-selection--single,
+  /deep/ .ant-pagination-options-quick-jumper input, /deep/ .ant-select-dropdown-menu-item {
+    color: #fff;
+    background-color: #000;
+  }
+
+  /deep/ .ant-table-thead th {
+    background-color: #5C5C5C;
+    color: #fff;
+  }
+
+  /deep/ .ant-table-tbody td {
+    background-color: #262626;
+    color: #fff;
+  }
+
+  /deep/ .ant-table-tbody > tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected) > td {
+    background: #7E7E7E;
+  }
+
+  /deep/ .ant-pagination-item-link:hover {
+    color: #1890FF;
+    border-color: #1890FF;
+  }
+
+  /deep/ .ant-select-dropdown-menu-item:hover:not(.ant-select-dropdown-menu-item-disabled) {
+    background-color: #1890FF;
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/mdc/base/modules/WorkshopSignage/WorkshopDeviceOverview.vue b/src/views/mdc/base/modules/WorkshopSignage/WorkshopDeviceOverview.vue
index 4bf22e8..6eade6e 100644
--- a/src/views/mdc/base/modules/WorkshopSignage/WorkshopDeviceOverview.vue
+++ b/src/views/mdc/base/modules/WorkshopSignage/WorkshopDeviceOverview.vue
@@ -1,6 +1,20 @@
 <template>
   <div style="flex:1;display: flex;">
-    <div class="chart-container" :id="chartContainerId"></div>
+    <!--<div style="height: 100%">-->
+    <!--<div class="chart-container" :id="chartContainerId"></div>-->
+
+    <!--</div>-->
+    <div style="flex: 1;display: flex;flex-direction: column">
+      <div class="chart-container" :id="chartContainerId" style="flex: 1"></div>
+      <div class="pie-value-container">
+        <div>
+          <span class="color-square" style="background-color: #00923f"></span>瀹屾垚閲� {{equipmentStatusCountObj.qualifiedQty}}
+        </div>
+        <div>
+          <span class="color-square" style="background-color: #e67817"></span>浠诲姟閲� {{equipmentStatusCountObj.planQty}}
+        </div>
+      </div>
+    </div>
     <div class="equipment-state-container">
       <div>璁惧鎬绘暟锛歿{equipmentStatusCountObj.equipmentCount}}鍙�</div>
       <div>澶т慨銆侀」淇暟閲忥細{{equipmentStatusCountObj.repairCount}}鍙�</div>
@@ -18,16 +32,22 @@
 
       </div>
     </div>
+
+    <SignageModal ref="signageModalRef" :modalTitle="modalTitle" :productionId="currentProductionId"/>
   </div>
 </template>
 
 <script>
   import signageApi from '@/api/signage'
+  import SignageModal from './SignageModal'
 
   export default {
     name: 'WorkshopDeviceOverview',
-    components: {},
+    components: { SignageModal },
     props: {
+      workshopName: {
+        type: String
+      },
       currentProductionId: {
         type: String
       },
@@ -42,7 +62,8 @@
       return {
         chartContainer: null,
         chartContainerId: 'left-col-chart1',
-        equipmentStatusCountObj: {}
+        equipmentStatusCountObj: {},
+        modalTitle: ''
       }
     },
     mounted() {
@@ -81,7 +102,7 @@
             {
               name: '绫荤洰',
               type: 'pie',
-              radius: '60%',
+              radius: '90%',
               center: ['50%', '50%'],
               hoverAnimation: false,
               data: [
@@ -124,6 +145,12 @@
         }
         option.series[0].data[0].value = yAxisData1
         option.series[0].data[1].value = yAxisData2
+
+        this.chartContainer.on('click', () => {
+          this.modalTitle = this.workshopName + '褰撴湀浠诲姟瀹屾垚鐧惧垎姣�'
+          this.$refs.signageModalRef.visible = true
+        })
+
         this.chartContainer.setOption(option, true)
       },
 
@@ -155,6 +182,22 @@
 </script>
 
 <style lang="less">
+  .pie-value-container {
+    > div {
+      text-align: center;
+      margin-bottom: 5px;
+    }
+
+    .color-square {
+      display: inline-block;
+      width: 0.625vw;
+      height: 0.45vw;
+      border-radius: 0.1vw;
+      background-color: #00ff80;
+      margin-right: 0.4vw;
+    }
+  }
+
   .equipment-state-container {
     display: flex;
     flex-direction: column;
diff --git a/src/views/mdc/base/modules/efficiencyReport/EfficiencyList.vue b/src/views/mdc/base/modules/efficiencyReport/EfficiencyList.vue
index 461a698..961e4a6 100644
--- a/src/views/mdc/base/modules/efficiencyReport/EfficiencyList.vue
+++ b/src/views/mdc/base/modules/efficiencyReport/EfficiencyList.vue
@@ -44,6 +44,11 @@
                                   v-model="dates" :allowClear="false"/>
                 </a-form-item>
               </a-col>
+              <a-col :md="6" :sm="6">
+                <a-form-item label="璁惧灞炴��">
+                  <j-dict-select-tag v-model="queryParam.attribute"  type="radio" dictCode="equipment_attribute"/>
+                </a-form-item>
+              </a-col>
             </a-row>
 
             <a-row :gutter="24" type="flex" align="middle">
diff --git a/src/views/system/UserList.vue b/src/views/system/UserList.vue
index f29115e..0e25598 100644
--- a/src/views/system/UserList.vue
+++ b/src/views/system/UserList.vue
@@ -7,55 +7,33 @@
         <a-row :gutter="24">
 
           <a-col :md="6" :sm="12">
-            <a-form-item label="璐﹀彿">
+            <a-form-item label="鐢ㄦ埛璐﹀彿">
               <!--<a-input placeholder="璇疯緭鍏ヨ处鍙锋煡璇�" v-model="queryParam.username"></a-input>-->
               <j-input placeholder="杈撳叆璐﹀彿妯$硦鏌ヨ" v-model="queryParam.username"></j-input>
             </a-form-item>
           </a-col>
 
+
           <a-col :md="6" :sm="8">
-            <a-form-item label="鎬у埆">
-              <a-select v-model="queryParam.sex" placeholder="璇烽�夋嫨鎬у埆">
-                <a-select-option value="">璇烽�夋嫨</a-select-option>
-                <a-select-option value="1">鐢�</a-select-option>
-                <a-select-option value="2">濂�</a-select-option>
-              </a-select>
+            <a-form-item label="鐢ㄦ埛濮撳悕">
+              <a-input placeholder="璇疯緭鍏ョ敤鎴峰鍚�" v-model="queryParam.realname"></a-input>
             </a-form-item>
           </a-col>
 
-
-          <template v-if="toggleSearchStatus">
-            <a-col :md="6" :sm="8">
-              <a-form-item label="鐪熷疄鍚嶅瓧">
-                <a-input placeholder="璇疯緭鍏ョ湡瀹炲悕瀛�" v-model="queryParam.realname"></a-input>
-              </a-form-item>
-            </a-col>
-
-            <a-col :md="6" :sm="8">
-              <a-form-item label="鎵嬫満鍙风爜">
-                <a-input placeholder="璇疯緭鍏ユ墜鏈哄彿鐮佹煡璇�" v-model="queryParam.phone"></a-input>
-              </a-form-item>
-            </a-col>
-
-            <a-col :md="6" :sm="8">
-              <a-form-item label="鐢ㄦ埛鐘舵��">
-                <a-select v-model="queryParam.status" placeholder="璇烽�夋嫨">
-                  <a-select-option value="">璇烽�夋嫨</a-select-option>
-                  <a-select-option value="1">姝e父</a-select-option>
-                  <a-select-option value="2">鍐荤粨</a-select-option>
-                </a-select>
-              </a-form-item>
-            </a-col>
-          </template>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="鐢ㄦ埛鐘舵��">
+              <a-select v-model="queryParam.status" placeholder="璇烽�夋嫨">
+                <a-select-option value="">璇烽�夋嫨</a-select-option>
+                <a-select-option value="1">姝e父</a-select-option>
+                <a-select-option value="2">鍐荤粨</a-select-option>
+              </a-select>
+            </a-form-item>
+          </a-col>
 
           <a-col :md="6" :sm="8">
             <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
               <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
               <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
-              <a @click="handleToggleSearch" style="margin-left: 8px">
-                {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}
-                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
-              </a>
             </span>
           </a-col>
 
diff --git a/src/views/system/modules/UserModal.vue b/src/views/system/modules/UserModal.vue
index 8b4de17..d6ab07a 100644
--- a/src/views/system/modules/UserModal.vue
+++ b/src/views/system/modules/UserModal.vue
@@ -82,6 +82,7 @@
           <a-input
             placeholder="璇疯緭鍏ョ敤鎴峰鍚�"
             v-model="model.realname"
+            :readOnly="disableSubmit"
           />
         </a-form-model-item>
 
@@ -94,6 +95,7 @@
           <a-input
             placeholder="璇疯緭鍏ュ伐鍙�"
             v-model="model.workNo"
+            :readOnly="disableSubmit"
           />
         </a-form-model-item>
 
@@ -145,6 +147,7 @@
             v-model="model.selectedProduction"
             :multi="true"
             @back="backProductionInfo"
+            :disabled="disableSubmit"
             :backProduction="true"
             :treeProductOpera="true"
           ></j-select-production>
@@ -215,7 +218,7 @@
             <!--placeholder="璇风淮鎶や腑蹇�"-->
           <!--&gt;-->
           <!--</j-multi-select-tag>-->
-        </a-form-model-item>
+        <!--</a-form-model-item>-->
         <!--<a-form-model-item-->
           <!--label="璐熻矗閮ㄩ棬"-->
           <!--:labelCol="labelCol"-->

--
Gitblit v1.9.3