| | |
| | | <div class="table-page-search-wrapper"> |
| | | <a-form layout="inline" @keyup.enter.native="searchQuery"> |
| | | <a-row :gutter="24"> |
| | | <a-col :md="4" :sm="4"> |
| | | <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,index) in equipmentTypeList" :value="item.value" :key="index"> |
| | | {{item.label}} |
| | | </a-select-option> |
| | | </a-select> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :md="4" :sm="4"> |
| | | <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,index) in driveTypeList" :value="item.value" :key="index"> |
| | | {{item.label}} |
| | | </a-select-option> |
| | | </a-select> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :md="6" :sm="6" :xs="6"> |
| | | <a-col :md="4" :sm="4" :xs="4"> |
| | | <a-form-item label="时间"> |
| | | <a-range-picker @change="dateParamChange" :disabledDate="disabledDate" format="YYYYMMDD" |
| | | <a-range-picker @change="dateParamChange" :disabledDate="disabledDate" |
| | | @calendarChange="handleCalendarChange" @openChange="handleCalendarOpenChange" |
| | | format="YYYYMMDD" |
| | | v-model="dates" :allowClear="false"/> |
| | | </a-form-item> |
| | | </a-col> |
| | |
| | | </a-row> |
| | | |
| | | <a-row :gutter="24" v-if="toggleSearchStatus"> |
| | | <a-col :md="4" :sm="4" :xs="4"> |
| | | <a-col :md="5" :sm="5" :xs="5"> |
| | | <a-form-item label="设备级别"> |
| | | <j-dict-select-tag placeholder="请选择设备级别" dictCode="device_level" v-model="queryParam.deviceLevel" |
| | | allow-clear/> |
| | | <a-select |
| | | :value="queryParams.deviceLevel" |
| | | mode="multiple" |
| | | placeholder="请选择设备级别" |
| | | allow-clear |
| | | :maxTagCount="1" |
| | | @change="selectChange($event,'deviceLevel')" |
| | | > |
| | | <a-select-option v-for="(item,index) in device_level_list" :value="item.value" :key="index"> |
| | | {{item.label}} |
| | | </a-select-option> |
| | | </a-select> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :md="4" :sm="4" :xs="4"> |
| | | <a-form-item label="设备种类"> |
| | | <j-dict-select-tag placeholder="请选择设备种类" dictCode="device_category" |
| | | v-model="queryParam.deviceCategory" |
| | | allow-clear/> |
| | | <a-col :md="5" :sm="5" :xs="5"> |
| | | <a-form-item label="重要程度"> |
| | | <a-select |
| | | v-model="queryParam.deviceImportanceLevel" |
| | | placeholder="请选择设备重要程度" |
| | | allow-clear |
| | | > |
| | | <a-select-option v-for="(item,index) in device_importance_level_list" :value="item.value" |
| | | :key="index"> |
| | | {{item.label}} |
| | | </a-select-option> |
| | | </a-select> |
| | | </a-form-item> |
| | | </a-col> |
| | | </a-row> |
| | |
| | | <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" @click="handleShowFeedbackModal" icon="plus" |
| | | v-has="'efficiencyShiftReport:feedback'">异常反馈 |
| | | </a-button> |
| | | <a-button type="primary" icon="printer" v-print="'#EfficiencyShift'" |
| | | v-has="'efficiencyShiftReport: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> |
| | |
| | | </table> |
| | | </a-col> |
| | | </a-row> |
| | | |
| | | <a-row :gutter="24"> |
| | | <a-col> |
| | | <a-checkbox-group :value="checkedList" :default-value="['lyl']" :options="efficiencyOptions" |
| | | @change="efficiencyOptionsOnChange"/> |
| | | </a-col> |
| | | </a-row> |
| | | </a-form> |
| | | </div> |
| | | </div> |
| | | |
| | | <a-spin :spinning="spinning"> |
| | | <div class="container" id="EfficiencyShift" style="margin-top: 20px;"> |
| | | <div class="table2"> |
| | |
| | | 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;height: 66px">公司</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> |
| | | <th class="thgu dong6 name" rowspan="2" style="min-width: 100px; max-width: 100px;width: 100px;">设备类型 |
| | | </th> |
| | | <th class="thgu dong7 name" rowspan="2" style="min-width: 100px; max-width: 100px;width: 100px;">班次</th> |
| | | <th class="thgu dong7 name" rowspan="2" style="min-width: 120px; max-width: 120px;width: 120px;">设备型号 |
| | | </th> |
| | | <th class="thgu dong8 name" rowspan="2" style="min-width: 100px; max-width: 100px;width: 100px;">班次</th> |
| | | <template v-for="(tableHead, index) in tableHeads"> |
| | | <th class="timeth" :colspan="checkedList.length">{{tableHead}}</th> |
| | | </template> |
| | |
| | | {{item.equipmentName}} |
| | | </td> |
| | | <td class="tdgu5 kaitou">{{item.equipmentType}}</td> |
| | | <td class="tdgu6 kaitou">{{item.shiftSubName}}</td> |
| | | <td class="tdgu6 kaitou">{{item.equipmentModel}}</td> |
| | | <td class="tdgu7 kaitou">{{item.shiftSubName}}</td> |
| | | </template> |
| | | |
| | | <template v-else> |
| | | <td colspan="7" class="tdgu kaitou">{{item.level1}}</td> |
| | | <td colspan="8" class="tdgu kaitou">{{item.level1}}</td> |
| | | </template> |
| | | <!--<td>{{item.tierType}}</td>--> |
| | | <template v-for="(tableHead, index) in item.dataList"> |
| | | <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('lyl') > -1">{{tableHead.utilizationRate | numFilter}}</td> |
| | | <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('lyl') > -1"> |
| | | {{tableHead.utilizationRate | numFilter}} |
| | | </td> |
| | | <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('kjsj') > -1"> |
| | | {{tableHead.openLong | getFormattedTime}} |
| | | </td> |
| | |
| | | </div> |
| | | </a-spin> |
| | | </div> |
| | | |
| | | <mdc-message-approval-modal ref="modalForm" :visible="modalVisible" @closeModal="modalVisible = false"/> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | import '@/components/table2excel/table2excel' |
| | | import { ajaxGetDictItems, getDictItemsFromCache, duplicateCheck } from '@/api/api' |
| | | import api from '@/api/mdc' |
| | | import MdcMessageApprovalModal from '../MdcMessageApproval/MdcMessageApprovalModal' |
| | | |
| | | export default { |
| | | name: 'EfficiencyShiftList', |
| | | components: {}, |
| | | components: { MdcMessageApprovalModal }, |
| | | data() { |
| | | return { |
| | | typeTree: '', |
| | |
| | | allowClear: true, |
| | | allowClearSu: true, |
| | | dates: [], |
| | | selectList: [], |
| | | equipmentTypeList: [], |
| | | driveTypeList: [], |
| | | device_level_list: [], |
| | | device_importance_level_list: [], |
| | | identifying: [], |
| | | queryParam: {}, |
| | | queryParams: { |
| | | equipmentType: [], |
| | | driveType: [], |
| | | deviceLevel: [] |
| | | }, |
| | | queryParamEquip: {}, |
| | | queryParamPeople: {}, |
| | | efficiencyOptions: [ |
| | |
| | | shiftList: [], |
| | | shiftSubList: [], |
| | | spinning: false, |
| | | toggleSearchStatus: false |
| | | toggleSearchStatus: false, |
| | | modalVisible: false,// 异常反馈弹窗是否弹出 |
| | | preSelectFirstDate: null |
| | | } |
| | | }, |
| | | props: { nodeTree: '', Type: '', nodePeople: '' }, |
| | |
| | | this.loadData() |
| | | this.queryGroup() |
| | | this.getDriveTypeByApi() |
| | | this.initDictData('device_level') |
| | | this.initDictData('device_category') |
| | | this.initDictData('device_importance_level') |
| | | }, |
| | | mounted() { |
| | | window.addEventListener('resize', this.handleWindowResize) |
| | |
| | | } |
| | | }, |
| | | 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 在indeces中数组的下标 |
| | | let indices = [] //数组中每一个值是一个数组,数组中的每一个元素是原数组中相同kclx的下标 |
| | |
| | | } |
| | | return list |
| | | }, |
| | | disabledDate(current) { |
| | | //Can not slect days before today and today |
| | | return current && current > moment().subtract('days', 1) |
| | | |
| | | /** |
| | | * 时间选择器面板上的值发生改变时触发 |
| | | * @param dates 面板上的两个值组成的数组 |
| | | */ |
| | | handleCalendarChange(dates) { |
| | | if (dates.length === 1) this.preSelectFirstDate = dates[0] |
| | | }, |
| | | |
| | | /** |
| | | * 控制时间选择器面板开启与关闭 |
| | | * @param status 开启状态 |
| | | */ |
| | | handleCalendarOpenChange(status) { |
| | | if (status) this.preSelectFirstDate = null |
| | | }, |
| | | |
| | | /** |
| | | * 面板上禁止选择的日期 |
| | | * @param current 禁止的时间范围 |
| | | */ |
| | | disabledDate(current) { |
| | | if (!this.preSelectFirstDate) { |
| | | return current > moment().startOf('days') |
| | | } else { |
| | | return current < moment(this.preSelectFirstDate).subtract(365, 'days').startOf('days') |
| | | || current > moment().startOf('days') |
| | | || current > moment(this.preSelectFirstDate).add(365, 'days').endOf('days') |
| | | } |
| | | }, |
| | | |
| | | initDeviceType(deviceList) { |
| | | let dictCode = 'mdc_equipmentType' |
| | | let items = [] |
| | |
| | | dateParamChange(v1, v2) { |
| | | this.queryParam.startTime = v2[0] |
| | | this.queryParam.endTime = v2[1] |
| | | // 点击时间选择器的清空按钮时会触发此判断(点击重置按钮不会触发),实现重置列表功能,切实改变列表显示效果 |
| | | // 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 |
| | | // } |
| | | this.checkedList = checkedList |
| | | }, |
| | | searchQuery() { |
| | |
| | | this.queryParam.parentId = this.queryParamPeople.parentId |
| | | this.queryParam.equipmentId = '' |
| | | } |
| | | Object.keys(this.queryParams).forEach(item => { |
| | | this.queryParam[item] = this.queryParams[item].join() |
| | | // 此处为保证接口参数不多余,可省略 |
| | | if (this.queryParams[item].length === 0) delete this.queryParam[item] |
| | | }) |
| | | this.loadData() |
| | | // this.onClearSelected() |
| | | }, |
| | | searchReset() { |
| | | this.typeTree = this.queryParam.typeTree |
| | |
| | | this.queryParam.typeTree = this.typeTree |
| | | this.queryParam.parentId = this.typeParent |
| | | this.queryParam.equipmentId = this.typeEquipment |
| | | this.queryParams = { |
| | | equipmentType: [], |
| | | driveType: [], |
| | | deviceLevel: [] |
| | | } |
| | | this.loadData() |
| | | // this.onClearSelected() |
| | | }, |
| | |
| | | if (res.result.mdcEfficiencyList && !res.result.mdcEfficiencyList.length) { |
| | | this.$notification.info({ |
| | | message: '消息', |
| | | description: '暂无该设备类型数据' |
| | | description: '暂无该类型数据' |
| | | }) |
| | | } |
| | | this.checkSameData(this.dataList) |
| | |
| | | this.spinning = false |
| | | }) |
| | | }, |
| | | |
| | | // 控制异常反馈弹窗弹出 |
| | | handleShowFeedbackModal() { |
| | | this.$refs.modalForm.formParams = {} |
| | | this.modalVisible = true |
| | | }, |
| | | |
| | | 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({ |
| | | message: '消息', |
| | | description: res.message |
| | | }) |
| | | } |
| | | }).finally(() => { |
| | | this.loading = false |
| | | }) |
| | | }, |
| | | |
| | |
| | | */ |
| | | 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('EfficiencyShift') |
| | | const clientHeight = document.body.clientHeight |
| | | const containerTopToClientTopHeight = tableContainer.getBoundingClientRect().top |
| | | const tableContainer = document.getElementById('EfficiencyShift') // 表格容器 |
| | | const clientHeight = document.documentElement.clientHeight || document.body.clientHeight // 浏览器可视区域高度 |
| | | const containerTopToClientTopHeight = tableContainer.getBoundingClientRect().top // 表格容器顶部到浏览器可视区域顶部的间距 |
| | | tableContainer.style.height = (clientHeight - containerTopToClientTopHeight - 32) + 'px' |
| | | } |
| | | } |
| | |
| | | z-index: 2; |
| | | } |
| | | |
| | | .table tbody tr .tdgu7 { |
| | | position: sticky; |
| | | left: 632px; |
| | | z-index: 2; |
| | | } |
| | | |
| | | .table2 thead tr .timeth, |
| | | .table2 thead tr .thgu { |
| | | position: sticky; |
| | |
| | | left: 512px; |
| | | } |
| | | |
| | | .table2 thead .equipname .dong8 { |
| | | z-index: 6; |
| | | left: 632px; |
| | | } |
| | | |
| | | #EfficiencyShift { |
| | | overflow: hidden; |
| | | } |