From 49a74a67140e814bb70efcde61b37d4750448e6a Mon Sep 17 00:00:00 2001 From: zhuzhuanzhuan Date: 星期二, 14 五月 2024 16:39:01 +0800 Subject: [PATCH] 1、设备加工工件报表页面调整表格唯一标识字段由equipmentId调整为id以试图解决项目服务器上表格数据混乱问题 2、设备利用率、设备开动率、班次利用率以及设备综合效率分析页面调整设备类型、驱动类型、设备级别以及设备种类页面组件为多选下拉菜单 --- src/views/mdc/base/modules/efficiencyPOReport/EfficiencyPOList.vue | 265 +++++++++++++++++++++++++++++----------------------- 1 files changed, 147 insertions(+), 118 deletions(-) diff --git a/src/views/mdc/base/modules/efficiencyPOReport/EfficiencyPOList.vue b/src/views/mdc/base/modules/efficiencyPOReport/EfficiencyPOList.vue index 02e63d1..5c0aaa0 100644 --- a/src/views/mdc/base/modules/efficiencyPOReport/EfficiencyPOList.vue +++ b/src/views/mdc/base/modules/efficiencyPOReport/EfficiencyPOList.vue @@ -7,31 +7,90 @@ <a-row :gutter="24"> <a-col :md="5" :sm="5"> <a-form-item label="璁惧绫诲瀷"> - <a-select placeholder="璇烽�夋嫨璁惧绫诲瀷" :triggerChange="true" v-model="queryParam.equipmentType" :allowClear="true"> - <a-select-option v-for='item in selectList' :key='item.id' :value='item.equipmentTypeName'> - {{item.equipmentTypeName}} + <a-select + :value="queryParams.equipmentType" + mode="multiple" + placeholder="璇烽�夋嫨璁惧绫诲瀷" + allow-clear + :maxTagCount="1" + @change="selectChange($event,'equipmentType')" + > + <a-select-option v-for="item in equipmentTypeList" :value="item.value"> + {{item.label}} </a-select-option> </a-select> </a-form-item> </a-col> <a-col :md="5" :sm="5"> <a-form-item label="椹卞姩绫诲瀷"> - <a-auto-complete - v-model="queryParam.driveType" - :data-source="driveTypeList" + <a-select + :value="queryParams.driveType" + mode="multiple" placeholder="璇烽�夋嫨椹卞姩绫诲瀷" - :filter-option="filterOption" - :allowClear="true" - /> + allow-clear + :maxTagCount="1" + @change="selectChange($event,'driveType')" + > + <a-select-option v-for="item in driveTypeList" :value="item.value"> + {{item.label}} + </a-select-option> + </a-select> </a-form-item> </a-col> - <a-col :md="6" :sm="6"> + <a-col :md="4" :sm="4"> <a-form-item label="鏃堕棿"> <a-range-picker @change="dateParamChange" :disabledDate="disabledDate" format="YYYYMMDD" v-model="dates" :allowClear="false"/> </a-form-item> </a-col> - <a-col :md="8" :sm="8" style="display: flex;align-items: flex-start;-webkit-align-items: flex-start;justify-content: space-between;"> - <table cellpadding="5" cellspacing="1" style="border: 1px solid darkgray;margin-left: 24px"> + <a-col :md="5" :sm="5" :xs="5"> + <a-form-item label="璁惧绾у埆"> + <a-select + :value="queryParams.deviceLevel" + mode="multiple" + placeholder="璇烽�夋嫨璁惧绾у埆" + allow-clear + :maxTagCount="1" + @change="selectChange($event,'deviceLevel')" + > + <a-select-option v-for="item in device_level_list" :value="item.value"> + {{item.label}} + </a-select-option> + </a-select> + </a-form-item> + </a-col> + <a-col :md="4" :sm="4" :xs="4"> + <a-form-item label="璁惧绉嶇被"> + <a-select + :value="queryParams.deviceCategory" + mode="multiple" + placeholder="璇烽�夋嫨璁惧绉嶇被" + allow-clear + :maxTagCount="1" + @change="selectChange($event,'deviceCategory')" + > + <a-select-option v-for="item in device_category_list" :value="item.value"> + {{item.label}} + </a-select-option> + </a-select> + </a-form-item> + </a-col> + </a-row> + <a-row :gutter="24" type="flex" align="middle"> + <a-col :md="24" :sm="24" :xs="24" + style="display: flex;justify-content: space-between;align-items: flex-start"> + <div> + <a-space style="margin-right: 20px"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload">閲嶇疆</a-button> + <a-button type="primary" @click="exportExcel" icon="download">瀵煎嚭</a-button> + <a-button type="primary" icon="printer" v-print="'#EfficiencyPO'" + v-has="'EfficiencyPO:print'">鎵撳嵃 + </a-button> + </a-space> + <a-checkbox-group :value="checkedList" :default-value="['lyl']" :options="efficiencyOptions" + @change="efficiencyOptionsOnChange"/> + </div> + <table cellpadding="5" cellspacing="1" style="border: 1px solid darkgray;"> <tr> <td v-for="(item, index) in identifying">{{item.title}}</td> </tr> @@ -39,48 +98,19 @@ <td style="text-align:center;" v-for="(item, index) in identifying"> <div class="identifyingclass" :style="{background: item.color}"></div> </td> - <!--<td style="text-align:center;"><div style="width: 55px;height: 15px;background-color: #e8ff37;display:inline-block"></div></td>--> - <!--<td style="text-align:center;"><div style="width: 55px;height: 15px;background-color: #99ff4e;display:inline-block"></div></td>--> </tr> </table> </a-col> </a-row> - <a-row :gutter="24" type="flex" align="middle"> - <a-col :md="5" :sm="5"> - <a-space> - <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> - <a-button type="primary" @click="searchReset" icon="reload">閲嶇疆</a-button> - <a-button type="primary" @click="exportExcel" icon="download">瀵煎嚭</a-button> - </a-space> - </a-col> - <a-col :md="19" :sm="19"> - <a-checkbox-group :value="checkedList" :default-value="['lyl']" :options="efficiencyOptions" - @change="efficiencyOptionsOnChange"/> - </a-col> - </a-row> </a-form> </div> - <!--<div style="width: 530px;position: absolute;top: 0; right:1.5%;">--> - <!--<table cellpadding="5" cellspacing="1" style="border: 1px solid darkgray;">--> - <!--<tr>--> - <!--<td v-for="(item, index) in identifying">{{item.title}}</td>--> - <!--</tr>--> - <!--<tr>--> - <!--<td style="text-align:center;" v-for="(item, index) in identifying">--> - <!--<div class="identifyingclass" :style="{background: item.color}"></div>--> - <!--</td>--> - <!--<!–<td style="text-align:center;"><div style="width: 55px;height: 15px;background-color: #e8ff37;display:inline-block"></div></td>–>--> - <!--<!–<td style="text-align:center;"><div style="width: 55px;height: 15px;background-color: #99ff4e;display:inline-block"></div></td>–>--> - <!--</tr>--> - <!--</table>--> - <!--</div>--> <a-spin :spinning="spinning"> <div class="container" id="EfficiencyPO" style="margin-top: 20px;" > <div class="table2"> <table class="dataContent table" border="1" cellspacing="0" cellpadding="0" style="white-space: nowrap" v-if="dataList.length>0"> <thead> <tr class="thead fixed equipname"> - <th class="thgu dong1 name" rowspan="2" style="min-width: 50px; max-width: 50px;width: 50px;">鍏徃</th> + <th class="thgu dong1 name" rowspan="2" style="min-width: 50px; max-width: 50px;width: 50px;height: 66px">鍏徃</th> <th class="thgu dong2 name" rowspan="2" style="min-width: 50px; max-width: 50px;width: 50px;">杞﹂棿</th> <th class="thgu dong3 name" rowspan="2" style="min-width: 50px; max-width: 50px;width: 50px;">宸ユ</th> <th class="thgu dong4 name" rowspan="2" style="min-width: 100px; max-width: 100px;width: 100px;">璁惧缂栧彿</th> @@ -93,7 +123,7 @@ </tr> <tr class="thead notfixed gudingth"> <template v-for="(tableHead, index) in tableHeads"> - <th>寮�鍔ㄧ巼(%)</th> + <th v-if="checkedList.indexOf('lyl') > -1">寮�鍔ㄧ巼(%)</th> <th v-if="checkedList.indexOf('kjl') > -1">寮�鏈虹巼(%)</th> <th v-if="checkedList.indexOf('kjsj') > -1">寮�鏈烘椂闂�(灏忔椂)</th> <th v-if="checkedList.indexOf('jgsj') > -1">鍔犲伐鏃堕棿(灏忔椂)</th> @@ -128,9 +158,8 @@ <template v-else> <td colspan="6" class="tdgu kaitou">{{item.level1}}</td> </template> - <!--<td>{{item.tierType}}</td>--> <template v-for="(tableHead, index) in item.dataList"> - <td :style="{background:tableHead.color }">{{tableHead.startRate | numFilter}}</td> + <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('lyl') > -1">{{tableHead.startRate | numFilter}}</td> <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('kjl') > -1"> {{tableHead.openRate | numFilter}} </td> @@ -174,12 +203,20 @@ typeParent:1, typeEquipment:1, dates: [], - selectList:[], + equipmentTypeList:[], + driveTypeList:[], + device_level_list: [], + device_category_list: [], queryParam: {}, + queryParams: { + equipmentType: [], + driveType: [], + deviceLevel: [], + deviceCategory: [] + }, queryParamEquip:{}, queryParamPeople:{}, identifying: [], - driveTypeList:[], efficiencyOptions: [ { label: '寮�鍔ㄧ巼', value: 'lyl' }, { label: '寮�鏈虹巼', value: 'kjl' }, @@ -209,6 +246,12 @@ this.loadData() this.queryGroup() this.getDriveTypeByApi() + this.initDictData('device_level') + this.initDictData('device_category') + }, + mounted() { + window.addEventListener('resize', this.handleWindowResize) + this.handleWindowResize() }, watch: { Type(valmath){ @@ -263,6 +306,23 @@ }, }, methods: { + initDictData(dictCode) { + // //浼樺厛浠庣紦瀛樹腑璇诲彇瀛楀吀閰嶇疆 + if (getDictItemsFromCache(dictCode)) { + this[dictCode + '_list'] = getDictItemsFromCache(dictCode) + return + } + //鏍规嵁瀛楀吀Code, 鍒濆鍖栧瓧鍏告暟缁� + ajaxGetDictItems(dictCode, null).then((res) => { + if (res.success) { + this[dictCode + '_list'] = res.result + return + } + }) + }, + selectChange(value, key) { + this.queryParams[key] = value + }, checkSameData(dataList){ let cache = {}; //瀛樺偍鐨勬槸閿槸kclx 鐨勫�硷紝鍊兼槸kclx 鍦╥ndeces涓暟缁勭殑涓嬫爣 let indices = []; //鏁扮粍涓瘡涓�涓�兼槸涓�涓暟缁勶紝鏁扮粍涓殑姣忎竴涓厓绱犳槸鍘熸暟缁勪腑鐩稿悓kclx鐨勪笅鏍� @@ -406,34 +466,31 @@ if(!this.queryParam.startTime&&!this.queryParam.endTime)this.searchReset() }, efficiencyOptionsOnChange(checkedList) { - let index = checkedList.indexOf('lyl') - if (index < 0) { - // this.$message.warn('涓嶈兘鍙栨秷鏌ヨ鍒╃敤鐜�') - this.$notification.warning({ - message:'娑堟伅', - description:"涓嶈兘鍙栨秷鏌ヨ鍒╃敤鐜�" - }) - return false - } + // let index = checkedList.indexOf('lyl') + // if (index < 0) { + // // this.$message.warn('涓嶈兘鍙栨秷鏌ヨ鍒╃敤鐜�') + // this.$notification.warning({ + // message:'娑堟伅', + // description:"涓嶈兘鍙栨秷鏌ヨ鍒╃敤鐜�" + // }) + // return false + // } this.checkedList = checkedList }, searchQuery() { - if(this.dates != ''){ - if(this.queryParam.typeTree == "1"){ - this.queryParam.parentId = this.queryParamEquip.parentId - this.queryParam.equipmentId = this.queryParamEquip.equipmentId - }else{ - this.queryParam.parentId = this.queryParamPeople.parentId - this.queryParam.equipmentId = "" - } - this.loadData() + if(this.queryParam.typeTree == "1"){ + this.queryParam.parentId = this.queryParamEquip.parentId + this.queryParam.equipmentId = this.queryParamEquip.equipmentId }else{ - this.$notification.warning({ - message:'娑堟伅', - description:"璇烽�夋嫨鏃堕棿" - }); + this.queryParam.parentId = this.queryParamPeople.parentId + this.queryParam.equipmentId = "" } - // this.onClearSelected() + Object.keys(this.queryParams).forEach(item => { + this.queryParam[item] = this.queryParams[item].join() + // 姝ゅ涓轰繚璇佹帴鍙e弬鏁颁笉澶氫綑锛屽彲鐪佺暐 + if (this.queryParams[item].length === 0) delete this.queryParam[item] + }) + this.loadData() }, searchReset() { this.typeTree = this.queryParam.typeTree @@ -447,11 +504,13 @@ this.queryParam.startTime = moment(this.dates[0]).format('YYYYMMDD') this.queryParam.endTime = moment(this.dates[1]).format('YYYYMMDD') // this.ipagination.current = 1 + this.queryParams = { + equipmentType: [], + driveType: [], + deviceLevel: [], + deviceCategory: [] + } this.loadData(); - // this.queryParam = {} - // this.dates = [] - // this.loadData() - // this.onClearSelected() }, loadData() { this.spinning=true @@ -481,10 +540,12 @@ queryGroup() { getAction(this.url.queryEquipmentType).then(res => { if (res.success) { - this.selectList = res.result - // this.selectList = res.result.map((item, index, arr) => { - // return { label: item.id, value: item.equipmentTypeName + '' } - // }) + this.equipmentTypeList = res.result.map(item => { + return { + label: item.equipmentTypeName, + value: item.equipmentTypeName + } + }) } else { // this.$message.warning(res.message) this.$notification.warning({ @@ -502,21 +563,19 @@ */ getDriveTypeByApi(){ api.getDriveTypeApi().then((res)=>{ - this.driveTypeList=res.result.map(item=>item.value) + if (res.success) this.driveTypeList = res.result }) }, /** - * 鑱旀兂杈撳叆妗嗙瓫閫夊姛鑳� - * @param input 杈撳叆鐨勫唴瀹� - * @param option 閰嶇疆 - * @returns {boolean} 鍒ゆ柇鏄惁绛涢�� + * 鍒嗚鲸鐜囨敼鍙樻椂鍚屾椂鏀瑰彉琛ㄦ牸楂樺害宸蹭繚璇侀椤典竴杩涘叆涓嶆嫋鍔ㄥ瀭鐩存粴鍔ㄦ潯鏃跺嵆鍙嫋鍔ㄨ〃鏍兼按骞虫粴鍔ㄦ潯 */ - filterOption(input, option) { - return ( - option.componentOptions.children[0].text.toUpperCase().indexOf(input.toUpperCase()) >= 0 - ); - }, + handleWindowResize() { + const tableContainer = document.getElementById('EfficiencyPO') // 琛ㄦ牸瀹瑰櫒 + const clientHeight = document.documentElement.clientHeight || document.body.clientHeight // 娴忚鍣ㄥ彲瑙嗗尯鍩熼珮搴� + const containerTopToClientTopHeight = tableContainer.getBoundingClientRect().top // 琛ㄦ牸瀹瑰櫒椤堕儴鍒版祻瑙堝櫒鍙鍖哄煙椤堕儴鐨勯棿璺� + tableContainer.style.height = (clientHeight - containerTopToClientTopHeight - 32) + 'px' + } } } </script> @@ -628,36 +687,6 @@ #EfficiencyPO{ overflow: hidden; -} - -@media screen and (min-width: 1920px){ - #EfficiencyPO{ - height: 687px!important; - } -} - -@media screen and (min-width: 1680px) and (max-width: 1920px){ - #EfficiencyPO{ - height: 687px!important; - } -} - -@media screen and (min-width: 1400px) and (max-width: 1680px){ - #EfficiencyPO{ - height: 540px!important; - } -} - -@media screen and (min-width: 1280px) and (max-width: 1400px){ - #EfficiencyPO{ - height: 440px!important; - } -} - -@media screen and (max-width: 1280px){ - #EfficiencyPO{ - height: 440px!important; - } } .identifyingclass { -- Gitblit v1.9.3