From a04b8970aa94f80c4c4937706c787391759aded7 Mon Sep 17 00:00:00 2001 From: zhuzhuanzhuan Date: 星期三, 13 十二月 2023 15:54:17 +0800 Subject: [PATCH] 1、全局车间层级以及部门层级树默认展开 2、车间看板页面设备详情弹窗背景透明度改为不透明 3、所有含有车间层级树页面新增弹窗中的选择设备弹窗内容由表格选择调整为树方式 4、报警分析页面表格字段出现次数与合计持续时间增加排序功能以及表格请求数据设置加载中动画 5、设备利用率、设备开动率以及班次利用率页面表格有关时间值调整为小时并保留两位小数以及通过与后端数据联调,增加表格平均值及合计值展示 6、设备综合效率分析页面表格班次字段若数据过长则省略 7、用户管理页面添加用户与重新设定密码弹窗中的登录密码校验长度与数据字典password_length设置保持一致以及表格车间字段若数据过长则省略 --- src/views/mdc/base/modules/deviceRepair/DeviceRepairModel.vue | 35 + src/views/mdc/base/modules/mdcPassRate/mdcPassRateModal.vue | 32 + src/views/mdc/base/EfficiencyReport.vue | 4 src/views/mdc/base/modules/HolidayManagement/HolidayManagementModal.vue | 30 + src/views/mdc/base/modules/efficiencyPOReport/EfficiencyPOList.vue | 149 ++++--- src/views/system/modules/PasswordModal.vue | 23 + src/views/mdc/base/modules/efficiencyReport/EfficiencyList.vue | 214 ++++++--- src/views/mdc/base/modules/DepartList/DepartListTree/DepartTree.vue | 1 src/views/mdc/base/modules/TorqueconfigurationList/TorqueconfigurationModal.vue | 166 ++++--- src/views/system/modules/SelectDeviceModal.vue | 5 src/views/mdc/base/modules/UnplannedDowntimemManager/UnplannedDowntimemManagerModal.vue | 32 + src/views/system/UserList.vue | 9 src/views/mdc/common/BaseTree.vue | 1 src/views/system/modules/UserModal.vue | 27 + src/views/mdc/base/modules/OEEAnalysis/OEEAnalysisList.vue | 9 src/views/mdc/base/modules/WorkshopSignage/EquipmentDetailModal.vue | 2 src/views/mdc/base/modules/comparativeAnalysis/comparativeAnalysismain.vue | 1 src/views/mdc/base/modules/efficiencyShiftReport/EfficiencyShiftList.vue | 185 +++++---- src/views/mdc/base/EfficiencyPOReport.vue | 4 src/views/mdc/base/modules/mdcStandardProcessDuration/MdcStandardProcessDurationModal.vue | 31 + src/views/mdc/base/modules/alarmAnalysis/alarmAnalysisMain.vue | 179 ++++---- src/views/mdc/base/modules/deviceCalendar/DeviceCalendarModel.vue | 28 + 22 files changed, 731 insertions(+), 436 deletions(-) diff --git a/src/views/mdc/base/EfficiencyPOReport.vue b/src/views/mdc/base/EfficiencyPOReport.vue index 6ff308f..b9749d0 100644 --- a/src/views/mdc/base/EfficiencyPOReport.vue +++ b/src/views/mdc/base/EfficiencyPOReport.vue @@ -2,7 +2,7 @@ <div style="width: 100%; height: 100%;"> <a-card :bordered="false"> <a-row type="flex" :gutter="16"> - <a-col :md="4"> + <a-col :md="5"> <a-tabs :activeKey="activeKey" @change="tabChange"> <a-tab-pane key="1" tab="杞﹂棿灞傜骇" force-render> <base-tree @getCurrSelected="changeSelectionNode"></base-tree> @@ -12,7 +12,7 @@ </a-tab-pane> </a-tabs> </a-col> - <a-col :md="20"> + <a-col :md="19"> <efficiencyPO-list ref="EfficiencyPOList" :nodeTree='selectEquement' :nodePeople='selectPeople' :Type="slectTypeTree"/> </a-col> </a-row> diff --git a/src/views/mdc/base/EfficiencyReport.vue b/src/views/mdc/base/EfficiencyReport.vue index 9b35e22..e9cc7ef 100644 --- a/src/views/mdc/base/EfficiencyReport.vue +++ b/src/views/mdc/base/EfficiencyReport.vue @@ -2,7 +2,7 @@ <div style="width: 100%; height: 100%;"> <a-card :bordered="false"> <a-row type="flex" :gutter="16"> - <a-col :md="4"> + <a-col :md="5"> <a-tabs :activeKey="activeKey" @change="tabChange"> <a-tab-pane key="1" tab="杞﹂棿灞傜骇" force-render> <base-tree @getCurrSelected="changeSelectionNode"></base-tree> @@ -12,7 +12,7 @@ </a-tab-pane> </a-tabs> </a-col> - <a-col :md="20"> + <a-col :md="19"> <EfficiencyList ref="EfficiencyList" :nodePeople='selectPeople' :nodeTree = 'selectEquement' :Type="slectTypeTree"></EfficiencyList> </a-col> </a-row> diff --git a/src/views/mdc/base/modules/DepartList/DepartListTree/DepartTree.vue b/src/views/mdc/base/modules/DepartList/DepartListTree/DepartTree.vue index 99dfe82..f6eb2c5 100644 --- a/src/views/mdc/base/modules/DepartList/DepartListTree/DepartTree.vue +++ b/src/views/mdc/base/modules/DepartList/DepartListTree/DepartTree.vue @@ -145,6 +145,7 @@ this.allTreeKeys = [] this.treeDataSource = res.result this.generateList(res.result) + this.expandedKeys=this.allTreeKeys } else { // this.$message.warn(res.message) this.$notification.warning({ diff --git a/src/views/mdc/base/modules/HolidayManagement/HolidayManagementModal.vue b/src/views/mdc/base/modules/HolidayManagement/HolidayManagementModal.vue index 4e0393b..3c952d6 100644 --- a/src/views/mdc/base/modules/HolidayManagement/HolidayManagementModal.vue +++ b/src/views/mdc/base/modules/HolidayManagement/HolidayManagementModal.vue @@ -7,7 +7,7 @@ <a-col :span="24"> <a-form-item label="璁惧缁�" :labelCol="labelColLong" :wrapperCol="wrapperColLong"> <a-input-search :readOnly="true" v-decorator="['equipmentIds', validatorRules.equipmentIds]" - @search="deviceSearch" enter-button/> + @search="deviceSearch" enter-button placeholder="璇烽�夋嫨璁惧"/> </a-form-item> </a-col> </a-row> @@ -36,7 +36,7 @@ </a-form> </a-spin> <holiday-management-modal-list ref="deviceRepairListModel" @sendSelectionRows="getDeviceRows"></holiday-management-modal-list> - + <select-device-modal ref="selectDeviceModal" @selectFinished="selectOK" :title="'閫夋嫨璁惧'"/> </a-modal> </template> @@ -53,10 +53,11 @@ import { duplicateCheck } from '@/api/api' + import SelectDeviceModal from '../../../../system/modules/SelectDeviceModal' export default { name: 'HolidayManagementModal', - components: {HolidayManagementModalList}, + components: { SelectDeviceModal, HolidayManagementModalList}, props: {}, data() { return { @@ -184,9 +185,10 @@ // }) }, deviceSearch() { - this.$refs.deviceRepairListModel.openPage() - this.$refs.deviceRepairListModel.title = '閫夋嫨璁惧' - this.$refs.deviceRepairListModel.disableSubmit = false + this.$refs.selectDeviceModal.visible = true + this.$refs.selectDeviceModal.selectedRowKeys = [] + this.$refs.selectDeviceModal.selectedRows = [] + this.$refs.selectDeviceModal.checkedKeys = this.form.getFieldValue('equipmentIds') ? this.form.getFieldValue('equipmentIds').split(',') : [] }, //绾ц仈妗唎nChange浜嬩欢 // onChange(value) { @@ -322,6 +324,22 @@ }, checkboxChange(e) { this.checked = e.target.checked + }, + + /** + * 閫夋嫨宸叉湁璁惧鍚庣偣鍑荤‘瀹氭椂瑙﹀彂 + * @param data 宸查�夋嫨鐨勮澶� + */ + selectOK(data) { + // let params = {} + // params.equipmentIdList = [] + // for (var a = 0; a < data.length; a++) { + // params.equipmentIdList.push(data[a]) + // } + console.log('data=', data) + this.form.setFieldsValue({ + equipmentIds: data.join(',') + }) } } } diff --git a/src/views/mdc/base/modules/OEEAnalysis/OEEAnalysisList.vue b/src/views/mdc/base/modules/OEEAnalysis/OEEAnalysisList.vue index 136a05d..fd2560d 100644 --- a/src/views/mdc/base/modules/OEEAnalysis/OEEAnalysisList.vue +++ b/src/views/mdc/base/modules/OEEAnalysis/OEEAnalysisList.vue @@ -54,7 +54,7 @@ <div class="container" id="EfficiencyShift" style="margin-top: 20px;"> <div class="table2"> <a-table :columns="columns" :dataSource="dataSource.records" :pagination="false" bordered - :scroll="{ x: 3000, y: false }"> + :scroll="{ x: 3200, y: false }"> </a-table> </div> </div> @@ -129,7 +129,7 @@ { title: '璁惧鍚嶇О', align: 'center', - width: 150, + width: 200, dataIndex: 'equipmentName' // fixed: 'left' }, @@ -148,8 +148,9 @@ { title: '鐝', align: 'center', - width: 80, - dataIndex: 'shift' + width: 300, + dataIndex: 'shift', + ellipsis: true, }, { title: '姣忕彮灏忔椂', diff --git a/src/views/mdc/base/modules/TorqueconfigurationList/TorqueconfigurationModal.vue b/src/views/mdc/base/modules/TorqueconfigurationList/TorqueconfigurationModal.vue index 2fab0bc..26e2386 100644 --- a/src/views/mdc/base/modules/TorqueconfigurationList/TorqueconfigurationModal.vue +++ b/src/views/mdc/base/modules/TorqueconfigurationList/TorqueconfigurationModal.vue @@ -7,7 +7,7 @@ <a-col :span="24"> <a-form-item label="璁惧缁�" :labelCol="labelColLong" :wrapperCol="wrapperColLong"> <a-input-search :readOnly="true" v-decorator="['equipmentIds', validatorRules.equipmentIds]" - @search="deviceSearch" enter-button/> + @search="deviceSearch" enter-button placeholder="璇烽�夋嫨璁惧"/> </a-form-item> </a-col> </a-row> @@ -15,27 +15,27 @@ <a-col :span="12"> <a-form-item label="鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol"> <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨鏃堕棿" - v-decorator="['torqueDate', validatorRules.torqueDate]"></j-date> + v-decorator="['torqueDate', validatorRules.torqueDate]"></j-date> </a-form-item> </a-col> <a-col :span="12"> <a-form-item label="鎵煩鍊�" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-input-number :min="0" :disabled="disableSubmit" placeholder="璇疯緭鍏ユ壄鐭╁��" - v-decorator="['torqueValue', validatorRules.torqueValue]"/> + v-decorator="['torqueValue', validatorRules.torqueValue]"/> </a-form-item> </a-col> </a-row> <a-row :gutter="24"> <a-col :span="24"> - <a-form-item label="澶囨敞" :labelCol="labelColLong" :wrapperCol="wrapperColLong"> - <a-textarea :maxLength="20" v-decorator="['notes', validatorRules.notes]" placeholder="璇疯緭鍏ュ娉�" ></a-textarea> - </a-form-item> + <a-form-item label="澶囨敞" :labelCol="labelColLong" :wrapperCol="wrapperColLong"> + <a-textarea :maxLength="20" v-decorator="['notes', validatorRules.notes]" + placeholder="璇疯緭鍏ュ娉�"></a-textarea> + </a-form-item> </a-col> </a-row> </a-form> </a-spin> - <torqueconfiguration-modal-list ref="deviceRepairListModel" @sendSelectionRows="getDeviceRows"></torqueconfiguration-modal-list> - + <select-device-modal ref="selectDeviceModal" @selectFinished="selectOK" :title="'閫夋嫨璁惧'"/> </a-modal> </template> @@ -52,22 +52,23 @@ import { duplicateCheck } from '@/api/api' + import SelectDeviceModal from '../../../../system/modules/SelectDeviceModal' export default { name: 'TorqueconfigurationModal', - components: {TorqueconfigurationModalList}, + components: { SelectDeviceModal }, props: {}, data() { return { - mesag:21, - readOnly:true, + mesag: 21, + readOnly: true, title: '', visible: false, show: false, model: {}, checked: false, - startData:"", - endData:"", + startData: '', + endData: '', labelCol: { xs: { span: 24 @@ -103,30 +104,30 @@ confirmLoading: false, form: this.$form.createForm(this), validatorRules: { - equipmentIds:{ - rules:[ + equipmentIds: { + rules: [ { - required:true, - message: "璇烽�夋嫨璁惧" - }, - ], + required: true, + message: '璇烽�夋嫨璁惧' + } + ] }, - torqueDate:{ - rules:[ + torqueDate: { + rules: [ { - required:true, - message: "璇烽�夋嫨鏃堕棿" - }, - ], + required: true, + message: '璇烽�夋嫨鏃堕棿' + } + ] }, - torqueValue:{ - rules:[ + torqueValue: { + rules: [ { - required:true, - message: "璇疯緭鍏ユ壄鐭╁��" - }, - ], - }, + required: true, + message: '璇疯緭鍏ユ壄鐭╁��' + } + ] + } }, url: { @@ -158,21 +159,21 @@ // // this.endData = dateStrings[1]; // // console.log(this.startData,this.endData); // }, - onChangeEnd(dates, dateStrings){ - this.endTime = dateStrings[0]; + onChangeEnd(dates, dateStrings) { + this.endTime = dateStrings[0] }, getDeviceRows(val) { - var equipmentIds; - for(var i = 0;i<val.length;i++){ + var equipmentIds + for (var i = 0; i < val.length; i++) { if (i == 0) { - equipmentIds = val[i].equipmentId; + equipmentIds = val[i].equipmentId } else { - equipmentIds = equipmentIds + "," + val[i].equipmentId; + equipmentIds = equipmentIds + ',' + val[i].equipmentId } } // console.log("========",equipmentIds); this.form.setFieldsValue({ - equipmentIds: equipmentIds, + equipmentIds: equipmentIds }) // this.form.setFieldsValue({ // equipmentId: val.equipmentId, @@ -184,9 +185,10 @@ // }) }, deviceSearch() { - this.$refs.deviceRepairListModel.openPage() - this.$refs.deviceRepairListModel.title = '閫夋嫨璁惧' - this.$refs.deviceRepairListModel.disableSubmit = false + this.$refs.selectDeviceModal.visible = true + this.$refs.selectDeviceModal.selectedRowKeys = [] + this.$refs.selectDeviceModal.selectedRows = [] + this.$refs.selectDeviceModal.checkedKeys = this.form.getFieldValue('equipmentIds') ? this.form.getFieldValue('equipmentIds').split(',') : [] }, //绾ц仈妗唎nChange浜嬩欢 // onChange(value) { @@ -219,7 +221,7 @@ this.model = Object.assign({}, record) this.visible = true this.$nextTick(() => { - this.form.setFieldsValue(pick(this.model, 'equipmentIds', 'equipmentName', 'mdcRepairType', 'startTime', 'endTime', + this.form.setFieldsValue(pick(this.model, 'equipmentIds', 'equipmentName', 'mdcRepairType', 'startTime', 'endTime' )) }) }, @@ -252,36 +254,36 @@ // // this.endTime = '' // that.confirmLoading = false // }else{ - let obj - if (!this.model.id) { - obj = postAction(this.url.add, formData) - } else { - obj = requestPut(this.url.edit, formData, { - id: this.model.id - }) - } - obj.then((res) => { - if (res.success) { - // that.$message.success("娣诲姞鎴愬姛") - that.$notification.success({ - message:'娑堟伅', - description:"娣诲姞鎴愬姛" - }); - // that.$message.success(res.message) - that.$emit('ok', res.result) - } else { - // that.$message.warning(res.message) - that.$notification.warning({ - message:'娑堟伅', - description:res.message - }); - } - }).finally(() => { - that.confirmLoading = false - that.close() + let obj + if (!this.model.id) { + obj = postAction(this.url.add, formData) + } else { + obj = requestPut(this.url.edit, formData, { + id: this.model.id + }) + } + obj.then((res) => { + if (res.success) { + // that.$message.success("娣诲姞鎴愬姛") + that.$notification.success({ + message: '娑堟伅', + description: '娣诲姞鎴愬姛' + }) + // that.$message.success(res.message) + that.$emit('ok', res.result) + } else { + // that.$message.warning(res.message) + that.$notification.warning({ + message: '娑堟伅', + description: res.message }) } - // } + }).finally(() => { + that.confirmLoading = false + that.close() + }) + } + // } // } }) @@ -322,7 +324,24 @@ }, checkboxChange(e) { this.checked = e.target.checked + }, + + /** + * 閫夋嫨宸叉湁璁惧鍚庣偣鍑荤‘瀹氭椂瑙﹀彂 + * @param data 宸查�夋嫨鐨勮澶� + */ + selectOK(data) { + // let params = {} + // params.equipmentIdList = [] + // for (var a = 0; a < data.length; a++) { + // params.equipmentIdList.push(data[a]) + // } + console.log('data=', data) + this.form.setFieldsValue({ + equipmentIds: data.join(',') + }) } + } } </script> @@ -346,7 +365,8 @@ .ant-tabs-content .ant-form-item { margin-bottom: 0px; } - /deep/ .ant-input-number{ - width: 100%!important; + + /deep/ .ant-input-number { + width: 100% !important; } </style> diff --git a/src/views/mdc/base/modules/UnplannedDowntimemManager/UnplannedDowntimemManagerModal.vue b/src/views/mdc/base/modules/UnplannedDowntimemManager/UnplannedDowntimemManagerModal.vue index 2a2ffdb..9b68f1e 100644 --- a/src/views/mdc/base/modules/UnplannedDowntimemManager/UnplannedDowntimemManagerModal.vue +++ b/src/views/mdc/base/modules/UnplannedDowntimemManager/UnplannedDowntimemManagerModal.vue @@ -7,7 +7,7 @@ <a-col :span="24"> <a-form-item label="璁惧缁�" :labelCol="labelColLong" :wrapperCol="wrapperColLong"> <a-input-search :readOnly="true" v-decorator="['equipmentIds', validatorRules.equipmentIds]" - @search="deviceSearch" enter-button/> + @search="deviceSearch" enter-button placeholder="璇烽�夋嫨璁惧"/> </a-form-item> </a-col> </a-row> @@ -43,15 +43,13 @@ </a-row> </a-form> </a-spin> - <plan-downtime-maintenance-modal-list ref="deviceRepairListModel" @sendSelectionRows="getDeviceRows"></plan-downtime-maintenance-modal-list> - + <select-device-modal ref="selectDeviceModal" @selectFinished="selectOK" :title="'閫夋嫨璁惧'"/> </a-modal> </template> <script> import moment from 'moment' import pick from 'lodash.pick' - import PlanDowntimeMaintenanceModalList from './UnplannedDowntimemManagerModalList' import JDate from '../deviceRepair/JDate' import { getAction, @@ -61,10 +59,11 @@ import { duplicateCheck } from '@/api/api' + import SelectDeviceModal from '../../../../system/modules/SelectDeviceModal' export default { name: 'UnplannedDowntimemManagerModal', - components: {PlanDowntimeMaintenanceModalList,JDate}, + components: { SelectDeviceModal,JDate}, props: {}, data() { return { @@ -201,9 +200,10 @@ // }) }, deviceSearch() { - this.$refs.deviceRepairListModel.openPage() - this.$refs.deviceRepairListModel.title = '閫夋嫨璁惧' - this.$refs.deviceRepairListModel.disableSubmit = false + this.$refs.selectDeviceModal.visible = true + this.$refs.selectDeviceModal.selectedRowKeys = [] + this.$refs.selectDeviceModal.selectedRows = [] + this.$refs.selectDeviceModal.checkedKeys = this.form.getFieldValue('equipmentIds') ? this.form.getFieldValue('equipmentIds').split(',') : [] }, //绾ц仈妗唎nChange浜嬩欢 // onChange(value) { @@ -336,6 +336,22 @@ }, checkboxChange(e) { this.checked = e.target.checked + }, + + /** + * 閫夋嫨宸叉湁璁惧鍚庣偣鍑荤‘瀹氭椂瑙﹀彂 + * @param data 宸查�夋嫨鐨勮澶� + */ + selectOK(data) { + // let params = {} + // params.equipmentIdList = [] + // for (var a = 0; a < data.length; a++) { + // params.equipmentIdList.push(data[a]) + // } + console.log('data=', data) + this.form.setFieldsValue({ + equipmentIds: data.join(',') + }) } } } diff --git a/src/views/mdc/base/modules/WorkshopSignage/EquipmentDetailModal.vue b/src/views/mdc/base/modules/WorkshopSignage/EquipmentDetailModal.vue index bcb1fe9..7a76659 100644 --- a/src/views/mdc/base/modules/WorkshopSignage/EquipmentDetailModal.vue +++ b/src/views/mdc/base/modules/WorkshopSignage/EquipmentDetailModal.vue @@ -1464,7 +1464,7 @@ /*background: -ms-linear-gradient(left, rgba(0, 0, 0, 0.66) 0%, rgba(0, 0, 0, 0.4) 100%);*/ /*background: linear-gradient(to right, rgba(0, 0, 0, 0.66) 0%, rgba(0, 0, 0, 0.4) 100%);*/ background-color: #312c2c; - opacity: 0.7; + opacity: 1; } /deep/ .ant-modal-close { diff --git a/src/views/mdc/base/modules/alarmAnalysis/alarmAnalysisMain.vue b/src/views/mdc/base/modules/alarmAnalysis/alarmAnalysisMain.vue index dfbbc21..87106d7 100644 --- a/src/views/mdc/base/modules/alarmAnalysis/alarmAnalysisMain.vue +++ b/src/views/mdc/base/modules/alarmAnalysis/alarmAnalysisMain.vue @@ -56,9 +56,9 @@ <!--</table>--> <!--</div>--> <!--</div>--> - <a-table :columns="columns" :data-source="dataList" bordered :pagination="false" :scroll="{y:168}" + <a-table :columns="columns" :data-source="dataList" bordered :pagination="false" :scroll="{y:210}" :customRow="customRow" - rowKey="alarmCode" + rowKey="alarmCode" @expand="handleExpandChange" > <span slot="timeCount" slot-scope="text">{{getFormattedTime(text)}}</span> <!--<a-table--> @@ -68,6 +68,7 @@ <!--:data-source="row.innerDataList"--> <!--:pagination="false"--> <!--rowKey="equipmentId"--> + <!--:loading="loading"--> <!-->--> <!--<span slot="duration" slot-scope="text">{{getFormattedTime(text)}}</span>--> <!--</a-table>--> @@ -97,13 +98,14 @@ const columns = [ { title: '鎶ヨ鍙�', dataIndex: 'alarmCode', key: 'alarmCode', align: 'center' }, - { title: '鍑虹幇娆℃暟', dataIndex: 'count', key: 'count', align: 'center' }, + { title: '鍑虹幇娆℃暟', dataIndex: 'count', key: 'count', align: 'center', sorter: (a, b) => b.count - a.count }, { title: '鍚堣鎸佺画鏃堕棿', dataIndex: 'timeCount', key: 'timeCount', scopedSlots: { customRender: 'timeCount' }, - align: 'center' + align: 'center', + sorter: (a, b) => b.timeCount - a.timeCount }, { title: '鎶ヨ淇℃伅', dataIndex: 'alarmContent', key: 'alarmContent', align: 'center' } ] @@ -131,7 +133,7 @@ dataSource: [], /* table鍔犺浇鐘舵�� */ loading: false, - spinning:false, + spinning: false, typeTree: '', typeParent: 1, typeEquipment: 1, @@ -164,7 +166,8 @@ XData: [0], YData: [0], columns, - innerColumns + innerColumns, + hasRequsetAlarmCodeList: [] } }, props: { nodeTree: '', Type: '', nodePeople: '' }, @@ -232,34 +235,34 @@ }, TableDraw(key, val) { let that = this - that.spinning=true + that.spinning = true that.queryParam.alarmCode = val.alarmCode console.log(this.queryParam) getAction(that.url.alarmTrend, that.queryParam) .then(res => { - if (res.success) { - that.pieDate=res.result.equipmentCountList.map(item=>{ - return { - name:item.key, - value:item.count - } - }) - that.XData=res.result.dateCountList.map(item=>item.key) - that.YData=res.result.dateCountList.map(item=>item.count) + if (res.success) { + that.pieDate = res.result.equipmentCountList.map(item => { + return { + name: item.key, + value: item.count + } + }) + that.XData = res.result.dateCountList.map(item => item.key) + that.YData = res.result.dateCountList.map(item => item.count) - // this.tableHeads = res.result.dates - // this.dataList = res.result - // this.draw() - // this.checkSameData(this.dataList) - // this.checkSameData1(this.dataList) - // this.checkSameData2(this.dataList) - // this.combineCell(); - // this.initDeviceType(this.dataList) - that.drawWrin() - } - }) - .finally(()=>{ - that.spinning=false + // this.tableHeads = res.result.dates + // this.dataList = res.result + // this.draw() + // this.checkSameData(this.dataList) + // this.checkSameData1(this.dataList) + // this.checkSameData2(this.dataList) + // this.combineCell(); + // this.initDeviceType(this.dataList) + that.drawWrin() + } + }) + .finally(() => { + that.spinning = false }) console.log(this.YData) @@ -394,31 +397,7 @@ if (res.success) { // this.tableHeads = res.result.dates this.dataList = res.result - this.dataList[0].innerDataList=[ - { - equipmentId: '11234', - equipmentName: '绔嬩綋鏈哄簥', - alarmTime: 20, - endTime: 20, - duration: 123 - }, - { - equipmentId: '4213', - equipmentName: '鍗у鏈哄簥', - alarmTime: 312, - endTime: 31, - duration: 421 - } - ] - this.dataList[1].innerDataList=[ - { - equipmentId: '4213', - equipmentName: '鍗у鏈哄簥', - alarmTime: 312, - endTime: 31, - duration: 421 - } - ] + this.hasRequsetAlarmCodeList = [] // this.draw() // this.checkSameData(this.dataList) // this.checkSameData1(this.dataList) @@ -552,10 +531,10 @@ var secs = seconds % 60 if (hours === 0) { - if (minutes === 0 ) { + if (minutes === 0) { return secs === 0 ? 0 : `${secs}绉抈 } else { - if(secs=== 0 ){ + if (secs === 0) { return `${minutes}鍒哷 } return `${minutes}鍒� ${secs}绉抈 @@ -581,37 +560,70 @@ on: { click: (event) => { // 濡傛灉鐐瑰嚮鐨勪笉鏄睍寮�鍥炬爣鍖哄煙鍒欐覆鏌撳浘琛紝鐩稿弽鍒欑浉褰撲簬鐐瑰嚮灞曞紑鍥炬爣 - if(event.target.className !== 'ant-table-row-expand-icon-cell'){ + if (event.target.className !== 'ant-table-row-expand-icon-cell') { this.TableDraw(index, record) - }else{ - if(event.target.children && event.target.children.length>0) event.target.children[0].click() + } else { + if (event.target.children && event.target.children.length > 0) event.target.children[0].click() } } } } }, - /** - * 鑷畾涔夊睍寮�琛ㄦ牸鍥炬爣 - * @param props 鍥炬爣灞炴�� - * @returns {null} 鑻ヤ富琛ㄦ暟鎹笅鏃犳暟鎹垯涓嶆樉绀哄浘鏍� - */ - expandIcon(props){ - console.log('props',props) - if (props.record.innerDataList&&props.record.innerDataList.length>0){ - if (props.expanded) { - return <a style="margin-right:0px;color:#999" onClick={e=> { - props.onExpand(props.record, e); - }}><a-icon type="minus" /></a> - } else{ - return <a style="margin-right:0px;color:#999" onClick={e => { - props.onExpand(props.record, e); - }}><a-icon type="plus"/></a> - } - }else{ - return null + handleExpandChange(expanded, record) { + console.log('expanded', expanded, 'record', record) + let _this = this + // 褰撳睍寮�鏃惰嫢璇ヨ鏈灞曞紑杩囨墠浼氳姹傚悗鍙版暟鎹紝灞曞紑杩囩殑鏁版嵁浼氳缂撳瓨鏃犻渶閲嶅璇锋眰 + if (expanded && !this.hasRequsetAlarmCodeList.includes(record.alarmCode)) { + this.loading = true + setTimeout(() => { + _this.dataList.forEach(item => { + if (record.alarmCode === item.alarmCode) { + item.innerDataList = [ + { + equipmentId: '11234', + equipmentName: '绔嬩綋鏈哄簥', + alarmTime: 20, + endTime: 20, + duration: 123 + }, + { + equipmentId: '4213', + equipmentName: '鍗у鏈哄簥', + alarmTime: 312, + endTime: 31, + duration: 421 + } + ] + } + }) + this.loading = false + }, 1000) + this.hasRequsetAlarmCodeList.push(record.alarmCode) } } + + // /** + // * 鑷畾涔夊睍寮�琛ㄦ牸鍥炬爣 + // * @param props 鍥炬爣灞炴�� + // * @returns {null} 鑻ヤ富琛ㄦ暟鎹笅鏃犳暟鎹垯涓嶆樉绀哄浘鏍� + // */ + // expandIcon(props){ + // console.log('props',props) + // if (props.record.innerDataList&&props.record.innerDataList.length>0){ + // if (props.expanded) { + // return <a style="margin-right:0px;color:#999" onClick={e=> { + // props.onExpand(props.record, e); + // }}><a-icon type="minus" /></a> + // } else{ + // return <a style="margin-right:0px;color:#999" onClick={e => { + // props.onExpand(props.record, e); + // }}><a-icon type="plus"/></a> + // } + // }else{ + // return null + // } + // } } } </script> @@ -835,12 +847,19 @@ cursor: pointer; } - /deep/ .ant-spin-nested-loading{ + /deep/ .ant-spin-nested-loading { height: 55%; } - /deep/ .ant-spin-container{ + /deep/ .ant-spin-container { height: 100%; } + /deep/ .ant-table.ant-table-bordered { + height: 265px; + } + + /deep/ .ant-table-scroll>.ant-table-placeholder { + height: 210px; + } </style> \ No newline at end of file diff --git a/src/views/mdc/base/modules/comparativeAnalysis/comparativeAnalysismain.vue b/src/views/mdc/base/modules/comparativeAnalysis/comparativeAnalysismain.vue index e903acd..a3a6eed 100644 --- a/src/views/mdc/base/modules/comparativeAnalysis/comparativeAnalysismain.vue +++ b/src/views/mdc/base/modules/comparativeAnalysis/comparativeAnalysismain.vue @@ -442,7 +442,6 @@ this.$refs.selectDeviceModal.selectedRowKeys = [] this.$refs.selectDeviceModal.selectedRows = [] this.$refs.selectDeviceModal.checkedKeys = this.queryParam.equipmentId.split(',') - this.$refs.selectDeviceModal.expandAll() }, /** diff --git a/src/views/mdc/base/modules/deviceCalendar/DeviceCalendarModel.vue b/src/views/mdc/base/modules/deviceCalendar/DeviceCalendarModel.vue index f48a441..01f0c63 100644 --- a/src/views/mdc/base/modules/deviceCalendar/DeviceCalendarModel.vue +++ b/src/views/mdc/base/modules/deviceCalendar/DeviceCalendarModel.vue @@ -8,7 +8,7 @@ <a-col :span="24"> <a-form-item label="璁惧缁�" :labelCol="labelColLong" :wrapperCol="wrapperColLong"> <a-input-search :readOnly="true" v-decorator="['equipmentId', validatorRules.equipmentId]" - @search="deviceSearch" enter-button/> + @search="deviceSearch" enter-button placeholder="璇烽�夋嫨璁惧"/> </a-form-item> </a-col> </a-row> @@ -44,6 +44,7 @@ </a-form> </a-spin> <device-calend-list-model ref="deviceRepairListModel" @sendSelectionRows="getDeviceRows"></device-calend-list-model> + <select-device-modal ref="selectDeviceModal" @selectFinished="selectOK" :title="'閫夋嫨璁惧'"/> </a-modal> </div> </template> @@ -62,10 +63,11 @@ } from '@/api/api' import Calendar from 'vue-calendar-component'; + import SelectDeviceModal from '../../../../system/modules/SelectDeviceModal' export default { name: 'ShiftInfoModel', - components: {DeviceCalendListModel,Calendar}, + components: { SelectDeviceModal, DeviceCalendListModel,Calendar}, props: {}, data() { return { @@ -239,9 +241,10 @@ this.value = value; }, deviceSearch() { - this.$refs.deviceRepairListModel.openPage() - this.$refs.deviceRepairListModel.title = '閫夋嫨璁惧' - this.$refs.deviceRepairListModel.disableSubmit = false + this.$refs.selectDeviceModal.visible = true + this.$refs.selectDeviceModal.selectedRowKeys = [] + this.$refs.selectDeviceModal.selectedRows = [] + this.$refs.selectDeviceModal.checkedKeys = this.form.getFieldValue('equipmentId') ? this.form.getFieldValue('equipmentId').split(',') : [] }, getDeviceRows(val) { console.log("========",val); @@ -342,6 +345,21 @@ this.close() }, + /** + * 閫夋嫨宸叉湁璁惧鍚庣偣鍑荤‘瀹氭椂瑙﹀彂 + * @param data 宸查�夋嫨鐨勮澶� + */ + selectOK(data) { + // let params = {} + // params.equipmentIdList = [] + // for (var a = 0; a < data.length; a++) { + // params.equipmentIdList.push(data[a]) + // } + console.log('data=', data) + this.form.setFieldsValue({ + equipmentId: data.join(',') + }) + } } } </script> diff --git a/src/views/mdc/base/modules/deviceRepair/DeviceRepairModel.vue b/src/views/mdc/base/modules/deviceRepair/DeviceRepairModel.vue index 77685af..99823a2 100644 --- a/src/views/mdc/base/modules/deviceRepair/DeviceRepairModel.vue +++ b/src/views/mdc/base/modules/deviceRepair/DeviceRepairModel.vue @@ -19,7 +19,7 @@ <!--</a-form-item>--> <a-form-item label="璁惧缁�" :labelCol="labelColLong" :wrapperCol="wrapperColLong"> <a-input-search :readOnly="true" v-decorator="['equipmentIds', validatorRules.equipmentIds]" - @search="deviceSearch" enter-button/> + @search="deviceSearch" enter-button placeholder="璇烽�夋嫨璁惧"/> <!--<a-input :disabled="disableSubmit" :readOnly="disableSubmit" allow-clear placeholder="璇疯緭鍏ヨ澶囩紪鍙�"--> <!--v-decorator="['equipmentId',validatorRules.equipmentId]"/>--> </a-form-item> @@ -74,17 +74,13 @@ <!--</a-row>--> </a-form> </a-spin> - <device-repair-list-model ref="deviceRepairListModel" @sendSelectionRows="getDeviceRows" - :selectedEquipmentIds="selectedEquipmentIds" - ></device-repair-list-model> - + <select-device-modal ref="selectDeviceModal" @selectFinished="selectOK" :title="'閫夋嫨璁惧'"/> </a-modal> </template> <script> import moment from 'moment' import pick from 'lodash.pick' - import DeviceRepairListModel from './DeviceRepairListModel' import JDate from './JDate' import { getAction, @@ -94,12 +90,12 @@ import { duplicateCheck } from '@/api/api' - import AFormItem from 'ant-design-vue/es/form/FormItem' import Vue from 'vue' + import SelectDeviceModal from '../../../../system/modules/SelectDeviceModal' export default { name: 'DeviceRepairModel', - components: { AFormItem, DeviceRepairListModel, JDate }, + components: { SelectDeviceModal, JDate }, props: { equipmentId: { type: String @@ -277,9 +273,10 @@ // }) }, deviceSearch() { - this.$refs.deviceRepairListModel.openPage() - this.$refs.deviceRepairListModel.title = '閫夋嫨璁惧' - this.$refs.deviceRepairListModel.disableSubmit = false + this.$refs.selectDeviceModal.visible = true + this.$refs.selectDeviceModal.selectedRowKeys = [] + this.$refs.selectDeviceModal.selectedRows = [] + this.$refs.selectDeviceModal.checkedKeys = this.form.getFieldValue('equipmentIds') ? this.form.getFieldValue('equipmentIds').split(',') : [] }, //绾ц仈妗唎nChange浜嬩欢 // onChange(value) { @@ -477,6 +474,22 @@ return { disabledSeconds: () => this.range(1, 60) } + }, + + /** + * 閫夋嫨宸叉湁璁惧鍚庣偣鍑荤‘瀹氭椂瑙﹀彂 + * @param data 宸查�夋嫨鐨勮澶� + */ + selectOK(data) { + // let params = {} + // params.equipmentIdList = [] + // for (var a = 0; a < data.length; a++) { + // params.equipmentIdList.push(data[a]) + // } + console.log('data=', data) + this.form.setFieldsValue({ + equipmentIds: data.join(',') + }) } } } diff --git a/src/views/mdc/base/modules/efficiencyPOReport/EfficiencyPOList.vue b/src/views/mdc/base/modules/efficiencyPOReport/EfficiencyPOList.vue index 66530ca..6e8d49e 100644 --- a/src/views/mdc/base/modules/efficiencyPOReport/EfficiencyPOList.vue +++ b/src/views/mdc/base/modules/efficiencyPOReport/EfficiencyPOList.vue @@ -49,65 +49,73 @@ </tr> </table> </div> - <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"> - <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 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 dong5 name" rowspan="2" style="min-width: 150px; max-width: 150px;width: 150px;">璁惧鍚嶇О</th> - <th class="thgu dong6 name" rowspan="2" style="min-width: 100px; max-width: 100px;width: 100px;">璁惧绫诲瀷</th> - <!--<th rowspan="2">缁勫埆</th>--> - <template v-for="(tableHead, index) in tableHeads"> - <th class="timeth" :colspan="checkedList.length">{{tableHead}}</th> - </template> - </tr> - <tr class="thead notfixed gudingth"> - <template v-for="(tableHead, index) in tableHeads"> - <th>寮�鍔ㄧ巼(%)</th> - <th v-if="checkedList.indexOf('kjl') > -1">寮�鏈虹巼(%)</th> - <th v-if="checkedList.indexOf('kjsj') > -1">寮�鏈烘椂闂�(s)</th> - <th v-if="checkedList.indexOf('jgsj') > -1">鍔犲伐鏃堕棿(s)</th> - <th v-if="checkedList.indexOf('djsj') > -1">寰呮満鏃堕棿(s)</th> - <th v-if="checkedList.indexOf('gjsj') > -1">鍏虫満鏃堕棿(s)</th> - </template> - </tr> - </thead> - <tbody> - <tr class="mathData" v-for="(item, index) in dataList"> - <td class="tdgu kaitou wenzi" :rowspan="item.level1span" :class="{hidden: item.level1dis,noExl:item.level1dis}" v-show="!item.level1dis">{{item.level1}}</td> - <td class="tdgu1 kaitou wenzi" :rowspan="item.level2span" :class="{hidden: item.level2dis,noExl:item.level2dis}" v-show="!item.level2dis">{{item.level2}}</td> - <td class="tdgu2 kaitou wenzi" :rowspan="item.level3span" :class="{hidden: item.level3dis,noExl:item.level3dis}" v-show="!item.level3dis">{{item.level3}}</td> - <td class="tdgu3 kaitou">{{item.equipmentId}}</td> - <td class="tdgu4 kaitou">{{item.equipmentName}}</td> - <td class="tdgu5 kaitou">{{item.equipmentType}}</td> - <!--<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('kjl') > -1"> - {{tableHead.openRate | numFilter}} - </td> - <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('kjsj') > -1"> - {{tableHead.openLong}} - </td> - <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('jgsj') > -1"> - {{tableHead.processLong}} - </td> - <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('djsj') > -1"> - {{tableHead.waitLong}} - </td> - <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('gjsj') > -1"> - {{tableHead.closeLong}} - </td> - </template> - </tr> - </tbody> - </table> + <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 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 dong5 name" rowspan="2" style="min-width: 162px; max-width: 162px;width: 162px;">璁惧鍚嶇О</th> + <th class="thgu dong6 name" rowspan="2" style="min-width: 100px; max-width: 100px;width: 100px;">璁惧绫诲瀷</th> + <!--<th rowspan="2">缁勫埆</th>--> + <template v-for="(tableHead, index) in tableHeads"> + <th class="timeth" :colspan="checkedList.length">{{tableHead}}</th> + </template> + </tr> + <tr class="thead notfixed gudingth"> + <template v-for="(tableHead, index) in tableHeads"> + <th>寮�鍔ㄧ巼(%)</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> + <th v-if="checkedList.indexOf('djsj') > -1">寰呮満鏃堕棿(灏忔椂)</th> + <th v-if="checkedList.indexOf('gjsj') > -1">鍏虫満鏃堕棿(灏忔椂)</th> + </template> + </tr> + </thead> + <tbody> + <tr class="mathData" v-for="(item, index) in dataList"> + <template v-if="item.level1!=='鍚堣'&&item.level1!=='骞冲潎鍊�'"> + <td class="tdgu kaitou wenzi" :rowspan="item.level1span" :class="{hidden: item.level1dis,noExl:item.level1dis}" v-show="!item.level1dis">{{item.level1}}</td> + <td class="tdgu1 kaitou wenzi" :rowspan="item.level2span" :class="{hidden: item.level2dis,noExl:item.level2dis}" v-show="!item.level2dis">{{item.level2}}</td> + <td class="tdgu2 kaitou wenzi" :rowspan="item.level3span" :class="{hidden: item.level3dis,noExl:item.level3dis}" v-show="!item.level3dis">{{item.level3}}</td> + <td class="tdgu3 kaitou">{{item.equipmentId}}</td> + <td style="min-width: 162px; max-width: 162px;width: 162px;" class="tdgu4 kaitou">{{item.equipmentName}}</td> + <td class="tdgu5 kaitou">{{item.equipmentType}}</td> + </template> + + <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('kjl') > -1"> + {{tableHead.openRate | numFilter}} + </td> + <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('kjsj') > -1"> + {{tableHead.openLong | getFormattedTime}} + </td> + <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('jgsj') > -1"> + {{tableHead.processLong | getFormattedTime}} + </td> + <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('djsj') > -1"> + {{tableHead.waitLong | getFormattedTime}} + </td> + <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('gjsj') > -1"> + {{tableHead.closeLong | getFormattedTime}} + </td> + </template> + </tr> + </tbody> + </table> + </div> </div> - </div> + </a-spin> </div> </div> </template> @@ -147,7 +155,8 @@ listByType: '/mdc/MdcUtilizationRate/getByType', queryEquipmentType: '/mdc/mdcEquipmentType/queryEquipmentType' }, - tableHeads: [] + tableHeads: [], + spinning:false } }, props: { nodeTree: '', Type:'',nodePeople: ''}, @@ -197,7 +206,20 @@ } else { return '0' } - } + }, + + /** + * 鏍煎紡鍖栨椂闂� + * @param seconds 绉掓暟 + * @returns '' 鏍煎紡鍖栧悗鏃堕棿瀛楃涓� + */ + getFormattedTime(seconds) { + if (seconds) { + return parseFloat((seconds / 3600).toFixed(2)) + '灏忔椂' + } else { + return '0' + } + }, }, methods: { checkSameData(dataList){ @@ -389,6 +411,7 @@ // this.onClearSelected() }, loadData() { + this.spinning=true this.tableHeads = [] this.dataList = [] getAction(this.url.list, this.queryParam).then(res => { @@ -402,6 +425,8 @@ this.combineCell(); // this.initDeviceType(this.dataList) } + }).finally(()=>{ + this.spinning=false }) }, queryGroup() { @@ -471,7 +496,7 @@ } .table tbody tr .tdgu5{ position: sticky; - left: 400px; + left: 412px; z-index: 2; } @@ -512,7 +537,7 @@ } .table2 thead .equipname .dong6{ z-index: 5; - left: 400px; + left: 412px; } diff --git a/src/views/mdc/base/modules/efficiencyReport/EfficiencyList.vue b/src/views/mdc/base/modules/efficiencyReport/EfficiencyList.vue index 4060b9a..3948f87 100644 --- a/src/views/mdc/base/modules/efficiencyReport/EfficiencyList.vue +++ b/src/views/mdc/base/modules/efficiencyReport/EfficiencyList.vue @@ -8,7 +8,8 @@ <a-row :gutter="24"> <a-col :md="4" :sm="4"> <a-form-item label="璁惧绫诲瀷"> - <a-select placeholder="璇烽�夋嫨璁惧绫诲瀷" :triggerChange="true" v-model="queryParam.equipmentType" :allowClear="true"> + <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-option> @@ -53,70 +54,89 @@ </div> </div> - <div id="Efficiency" class="container" style="margin-top: 20px;"> - <div class="table2"> - <table class="dataContent table" border="1" cellspacing="0" cellpadding="0" style="white-space: nowrap"> - <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 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 dong5 name" rowspan="2" style="min-width: 150px; max-width: 150px;width: 150px;">璁惧鍚嶇О</th> - <th class="thgu dong6 name" rowspan="2" style="min-width: 100px; max-width: 100px;width: 100px;">璁惧绫诲瀷</th> - <!--<th rowspan="2">缁勫埆</th>--> - <template v-for="(tableHead, index) in tableHeads"> - <th class="timeth" :colspan="checkedList.length">{{tableHead}}</th> - </template> - </tr> - <tr class="thead notfixed gudingth"> - <template v-for="(tableHead, index) in tableHeads"> - <th>鍒╃敤鐜�(%)</th> - <th v-if="checkedList.indexOf('kjl') > -1">寮�鏈虹巼(%)</th> - <th v-if="checkedList.indexOf('kjsj') > -1">寮�鏈烘椂闂�(s)</th> - <th v-if="checkedList.indexOf('jgsj') > -1">鍔犲伐鏃堕棿(s)</th> - <th v-if="checkedList.indexOf('djsj') > -1">寰呮満鏃堕棿(s)</th> - <th v-if="checkedList.indexOf('gjsj') > -1">鍏虫満鏃堕棿(s)</th> - </template> - </tr> - </thead> - <tbody> - <tr class="mathData" v-for="(item, index) in dataList"> - <td class="tdgu kaitou wenzi" :rowspan="item.level1span" - :class="{hidden: item.level1dis,noExl:item.level1dis}" v-show="!item.level1dis">{{item.level1}} - </td> - <td class="tdgu1 kaitou wenzi" :rowspan="item.level2span" - :class="{hidden: item.level2dis,noExl:item.level2dis}" v-show="!item.level2dis">{{item.level2}} - </td> - <td class="tdgu2 kaitou wenzi" :rowspan="item.level3span" - :class="{hidden: item.level3dis,noExl:item.level3dis}" v-show="!item.level3dis">{{item.level3}} - </td> - <td class="tdgu3 kaitou">{{item.equipmentId}}</td> - <td class="tdgu4 kaitou">{{item.equipmentName}}</td> - <td class="tdgu5 kaitou">{{item.equipmentType}}</td> - <template v-for="(tableHead, index) in item.dataList"> - <td :style="{background:tableHead.color }">{{tableHead.utilizationRate | numFilter}}</td> - <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('kjl') > -1"> - {{tableHead.openRate | numFilter}} - </td> - <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('kjsj') > -1"> - {{tableHead.openLong}} - </td> - <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('jgsj') > -1"> - {{tableHead.processLong}} - </td> - <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('djsj') > -1"> - {{tableHead.waitLong}} - </td> - <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('gjsj') > -1"> - {{tableHead.closeLong}} - </td> - </template> - </tr> - </tbody> - </table> + <a-spin :spinning="spinning"> + <div id="Efficiency" class="container" style="margin-top: 20px;"> + <div class="table2"> + <table class="dataContent table" border="1" cellspacing="0" cellpadding="0" style="white-space: nowrap" + 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 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 dong5 name" rowspan="2" style="min-width: 162px; max-width: 162px;width: 162px;">璁惧鍚嶇О + </th> + <th class="thgu dong6 name" rowspan="2" style="min-width: 100px; max-width: 100px;width: 100px;">璁惧绫诲瀷 + </th> + <!--<th rowspan="2">缁勫埆</th>--> + <template v-for="(tableHead, index) in tableHeads"> + <th class="timeth" :colspan="checkedList.length">{{tableHead}}</th> + </template> + </tr> + <tr class="thead notfixed gudingth"> + <template v-for="(tableHead, index) in tableHeads"> + <th>鍒╃敤鐜�(%)</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> + <th v-if="checkedList.indexOf('djsj') > -1">寰呮満鏃堕棿(灏忔椂)</th> + <th v-if="checkedList.indexOf('gjsj') > -1">鍏虫満鏃堕棿(灏忔椂)</th> + </template> + + </tr> + </thead> + <tbody> + + <tr class="mathData" v-for="(item, index) in dataList"> + <template v-if="item.level1!=='鍚堣'&&item.level1!=='骞冲潎鍊�'"> + <td class="tdgu kaitou wenzi" :rowspan="item.level1span" + :class="{hidden: item.level1dis,noExl:item.level1dis}" v-show="!item.level1dis">{{item.level1}} + </td> + <td class="tdgu1 kaitou wenzi" :rowspan="item.level2span" + :class="{hidden: item.level2dis,noExl:item.level2dis}" v-show="!item.level2dis">{{item.level2}} + </td> + <td class="tdgu2 kaitou wenzi" :rowspan="item.level3span" + :class="{hidden: item.level3dis,noExl:item.level3dis}" v-show="!item.level3dis">{{item.level3}} + </td> + <td class="tdgu3 kaitou">{{item.equipmentId}}</td> + <td class="tdgu4 kaitou" style="min-width: 162px; max-width: 162px;width: 162px;">{{item.equipmentName}}</td> + <td class="tdgu5 kaitou">{{item.equipmentType}}</td> + </template> + + <!--鍚堣涓庡钩鍧囧�煎尯鍩�--> + <template v-else> + <td colspan="6" class="tdgu kaitou">{{item.level1}}</td> + </template> + + <template v-for="(tableHead, index) in item.dataList"> + <td :style="{background:tableHead.color }">{{tableHead.utilizationRate | numFilter}}</td> + <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('kjl') > -1"> + {{tableHead.openRate | numFilter}} + </td> + <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('kjsj') > -1"> + {{tableHead.openLong | getFormattedTime}} + </td> + <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('jgsj') > -1"> + {{tableHead.processLong | getFormattedTime}} + </td> + <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('djsj') > -1"> + {{tableHead.waitLong | getFormattedTime}} + </td> + <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('gjsj') > -1"> + {{tableHead.closeLong | getFormattedTime}} + </td> + </template> + + </tr> + + </tbody> + </table> + + </div> </div> - </div> + </a-spin> </div> </div> </template> @@ -161,8 +181,15 @@ listByType: '/mdc/MdcUtilizationRate/getByType', queryEquipmentType: '/mdc/mdcEquipmentType/queryEquipmentType' }, - tableHeads: [] - + tableHeads: [], + distinguishColorList: [], + utilizationRateRowAverage: '', + openRateRowAverage: '', + openLongRowAverage: '', + processLongRowAverage: '', + waitLongRowAverage: '', + closeLongRowAverage: '', + spinning: false } }, props: { nodeTree: '', Type: '', nodePeople: '' }, @@ -212,8 +239,22 @@ } else { return '0' } + }, + + /** + * 鏍煎紡鍖栨椂闂� + * @param seconds 绉掓暟 + * @returns '' 鏍煎紡鍖栧悗鏃堕棿瀛楃涓� + */ + getFormattedTime(seconds) { + if (seconds) { + return parseFloat((seconds / 3600).toFixed(2)) + '灏忔椂' + } else { + return '0' + } } }, + computed: {}, methods: { checkSameData(dataList) { let cache = {} //瀛樺偍鐨勬槸閿槸kclx 鐨勫�硷紝鍊兼槸kclx 鍦╥ndeces涓暟缁勭殑涓嬫爣 @@ -394,7 +435,7 @@ // // this.onClearSelected() // }, searchQuery() { - console.log('dates',this.dates) + console.log('dates', this.dates) if (this.dates != '') { if (this.queryParam.typeTree == '1') { this.queryParam.parentId = this.queryParamEquip.parentId @@ -431,17 +472,21 @@ loadData() { this.tableHeads = [] this.dataList = [] + this.spinning = true getAction(this.url.list, this.queryParam).then(res => { if (res.success) { this.tableHeads = res.result.dates this.dataList = res.result.mdcEfficiencyList + this.distinguishColorList = res.result.utilizationRateList this.checkSameData(this.dataList) this.checkSameData1(this.dataList) this.checkSameData2(this.dataList) this.combineCell() + // this.columns.push(...dataColumns) // this.initDeviceType(this.dataList) - } + }).finally(() => { + this.spinning = false }) }, queryGroup() { @@ -461,7 +506,7 @@ }).finally(() => { this.loading = false }) - } + }, } } </script> @@ -518,7 +563,7 @@ .table tbody tr .tdgu5 { position: sticky; - left: 400px; + left: 412px; z-index: 2; } @@ -567,7 +612,7 @@ .table2 thead .equipname .dong6 { z-index: 5; - left: 400px; + left: 412px; } @media screen and (min-width: 1920px) { @@ -668,10 +713,6 @@ padding: 10px; } - .dataContent .mathData .tdd { - /*display: none;*/ - } - td { vertical-align: middle; } @@ -687,4 +728,27 @@ .green { background-color: #99ff4e; } + + .vertical-text { + writing-mode: vertical-rl; + } + + /*/deep/ .ant-table-body .ant-table-row td {*/ + /*padding-top: 10px;*/ + /*padding-bottom: 10px;*/ + /*}*/ + + /deep/ .ant-table-body .ant-table-row td.data { + min-width: 150px; + max-width: 150px; + } + + /deep/ .ant-table-tbody > tr.ant-table-row:hover > td { + background: none !important; + } + + /deep/ .ant-table-thead th { + text-align: center; + } + </style> \ No newline at end of file diff --git a/src/views/mdc/base/modules/efficiencyShiftReport/EfficiencyShiftList.vue b/src/views/mdc/base/modules/efficiencyShiftReport/EfficiencyShiftList.vue index 522f636..82ff5b5 100644 --- a/src/views/mdc/base/modules/efficiencyShiftReport/EfficiencyShiftList.vue +++ b/src/views/mdc/base/modules/efficiencyShiftReport/EfficiencyShiftList.vue @@ -80,87 +80,91 @@ <!--</table>--> <!--</div>--> </div> - <div class="container" id="EfficiencyShift" style="margin-top: 20px;"> - <div class="table2"> - <table class="dataContent table" border="1" cellspacing="0" cellpadding="0" style="white-space: nowrap"> - <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 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 dong5 name" rowspan="2" style="min-width: 150px; max-width: 150px;width: 150px;">璁惧鍚嶇О</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> - <template v-for="(tableHead, index) in tableHeads"> - <th class="timeth" :colspan="checkedList.length">{{tableHead}}</th> - </template> - <!--average--> - <!--<th class="thgu dong4 name" rowspan="2" style="min-width: 100px; max-width: 150px;width: 150px;">骞冲潎鍊�(鐝鍒╃敤鐜�)</th>--> + <a-spin :spinning="spinning"> + <div class="container" id="EfficiencyShift" 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 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 dong5 name" rowspan="2" style="min-width: 162px; max-width: 162px;width: 162px;">璁惧鍚嶇О</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> + <template v-for="(tableHead, index) in tableHeads"> + <th class="timeth" :colspan="checkedList.length">{{tableHead}}</th> + </template> + <!--average--> + <!--<th class="thgu dong4 name" rowspan="2" style="min-width: 100px; max-width: 150px;width: 150px;">骞冲潎鍊�(鐝鍒╃敤鐜�)</th>--> - </tr> - <tr class="thead notfixed gudingth"> - <template v-for="(tableHead, index) in tableHeads"> - <th>鐝鍒╃敤鐜�(%)</th> - <!--<th v-if="checkedList.indexOf('gzl') > -1">鏁呴殰鐜�(%)</th>--> - <!--<th v-if="checkedList.indexOf('processingLong') > -1">杩愯鏃堕棿(s)</th>--> - <!--<th v-if="checkedList.indexOf('totalLong') > -1">鏈夋晥鏃堕棿(s)</th>--> - <!--<th v-if="checkedList.indexOf('faultLong') > -1">鏁呴殰鏃堕棿(s)</th>--> - <!--<!–<th v-if="checkedList.indexOf('gjsj') > -1">鍏虫満鏃堕棿(s)</th>–>--> - <th v-if="checkedList.indexOf('kjsj') > -1">寮�鏈烘椂闂�(s)</th> - <th v-if="checkedList.indexOf('jgsj') > -1">鍔犲伐鏃堕棿(s)</th> - <th v-if="checkedList.indexOf('djsj') > -1">寰呮満鏃堕棿(s)</th> - <th v-if="checkedList.indexOf('gjsj') > -1">鍏虫満鏃堕棿(s)</th> - </template> - </tr> -<!-- <tr>--> -<!-- <th rowspan="2">骞冲潎鍊�</th>--> -<!-- </tr>--> - </thead> - <tbody> - <tr class="mathData" v-for="(item, index) in dataList"> - <td class="tdgu kaitou wenzi" :rowspan="item.level1span" :class="{hidden: item.level1dis,noExl:item.level1dis}" v-show="!item.level1dis">{{item.level1}}</td> - <td class="tdgu1 kaitou wenzi" :rowspan="item.level2span" :class="{hidden: item.level2dis,noExl:item.level2dis}" v-show="!item.level2dis">{{item.level2}}</td> - <td class="tdgu2 kaitou wenzi" :rowspan="item.level3span" :class="{hidden: item.level3dis,noExl:item.level3dis}" v-show="!item.level3dis">{{item.level3}}</td> - <td class="tdgu3 kaitou">{{item.equipmentId}}</td> - <td class="tdgu4 kaitou">{{item.equipmentName}}</td> - <td class="tdgu5 kaitou">{{item.equipmentType}}</td> - <td class="tdgu6 kaitou">{{item.shiftSubName}}</td> + </tr> + <tr class="thead notfixed gudingth"> + <template v-for="(tableHead, index) in tableHeads"> + <th>鐝鍒╃敤鐜�(%)</th> + <!--<th v-if="checkedList.indexOf('gzl') > -1">鏁呴殰鐜�(%)</th>--> + <!--<th v-if="checkedList.indexOf('processingLong') > -1">杩愯鏃堕棿(s)</th>--> + <!--<th v-if="checkedList.indexOf('totalLong') > -1">鏈夋晥鏃堕棿(s)</th>--> + <!--<th v-if="checkedList.indexOf('faultLong') > -1">鏁呴殰鏃堕棿(s)</th>--> + <!--<!–<th v-if="checkedList.indexOf('gjsj') > -1">鍏虫満鏃堕棿(s)</th>–>--> + <th v-if="checkedList.indexOf('kjsj') > -1">寮�鏈烘椂闂�(灏忔椂)</th> + <th v-if="checkedList.indexOf('jgsj') > -1">鍔犲伐鏃堕棿(灏忔椂)</th> + <th v-if="checkedList.indexOf('djsj') > -1">寰呮満鏃堕棿(灏忔椂)</th> + <th v-if="checkedList.indexOf('gjsj') > -1">鍏虫満鏃堕棿(灏忔椂)</th> + </template> + </tr> + </thead> + <tbody> + <tr class="mathData" v-for="(item, index) in dataList"> + <template v-if="item.level1!=='鍚堣'&&item.level1!=='骞冲潎鍊�'"> + <td class="tdgu kaitou wenzi" :rowspan="item.level1span" :class="{hidden: item.level1dis,noExl:item.level1dis}" v-show="!item.level1dis">{{item.level1}}</td> + <td class="tdgu1 kaitou wenzi" :rowspan="item.level2span" :class="{hidden: item.level2dis,noExl:item.level2dis}" v-show="!item.level2dis">{{item.level2}}</td> + <td class="tdgu2 kaitou wenzi" :rowspan="item.level3span" :class="{hidden: item.level3dis,noExl:item.level3dis}" v-show="!item.level3dis">{{item.level3}}</td> + <td class="tdgu3 kaitou">{{item.equipmentId}}</td> + <td class="tdgu4 kaitou" style="min-width: 162px; max-width: 162px;width: 162px;">{{item.equipmentName}}</td> + <td class="tdgu5 kaitou">{{item.equipmentType}}</td> + <td class="tdgu6 kaitou">{{item.shiftSubName}}</td> + </template> - <!--<td>{{item.tierType}}</td>--> - <template v-for="(tableHead, index) in item.dataList"> - <!--<td :style="{background:tableHead.color }" v-if='tableHead.utilizationRate !== 0'>{{tableHead.utilizationRate | numFilter}}</td>--> - <!--<td :style="{background:tableHead.color }" v-if='tableHead.lyl == 0 && tableHead.status == 1'>缁翠慨</td>--> - <!--<td :style="{background:tableHead.color }" v-if='tableHead.lyl == 0 && tableHead.status == 2'>浼戠彮</td>--> - <!--<td :style="{background:tableHead.color }" v-if='tableHead.lyl == 0 && tableHead.status == 10'>{{tableHead.lyl | numFilter}}</td>--> - <!--<td :style="{background:tableHead.color }" v-if='tableHead.lyl == 0 && tableHead.status == 11'>鏈绠�</td>--> - <!--<td :style="{background:tableHead.color }" v-if='tableHead.lyl == 0 && tableHead.status == 12'>鏃犵彮娆�</td>--> - <td :style="{background:tableHead.color }">{{tableHead.utilizationRate | numFilter}}</td> - <!--<td :style="{background:tableHead.color }" v-if="checkedList.indexOf('gzl') > -1">--> + <template v-else> + <td colspan="7" 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='tableHead.utilizationRate !== 0'>{{tableHead.utilizationRate | numFilter}}</td>--> + <!--<td :style="{background:tableHead.color }" v-if='tableHead.lyl == 0 && tableHead.status == 1'>缁翠慨</td>--> + <!--<td :style="{background:tableHead.color }" v-if='tableHead.lyl == 0 && tableHead.status == 2'>浼戠彮</td>--> + <!--<td :style="{background:tableHead.color }" v-if='tableHead.lyl == 0 && tableHead.status == 10'>{{tableHead.lyl | numFilter}}</td>--> + <!--<td :style="{background:tableHead.color }" v-if='tableHead.lyl == 0 && tableHead.status == 11'>鏈绠�</td>--> + <!--<td :style="{background:tableHead.color }" v-if='tableHead.lyl == 0 && tableHead.status == 12'>鏃犵彮娆�</td>--> + <td :style="{background:tableHead.color }">{{tableHead.utilizationRate | numFilter}}</td> + <!--<td :style="{background:tableHead.color }" v-if="checkedList.indexOf('gzl') > -1">--> <!--{{tableHead.gzl | numFilter}}--> - <!--</td>--> - <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('kjsj') > -1"> - {{tableHead.openLong}} - </td> - <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('jgsj') > -1"> - {{tableHead.processLong}} - </td> - <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('djsj') > -1"> - {{tableHead.waitLong}} - </td> - <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('gjsj') > -1"> - {{tableHead.closeLong}} - </td> - <!--<td :style="{background:item[tableHead].color }" v-if="checkedList.indexOf('gjsj') > -1">--> + <!--</td>--> + <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('kjsj') > -1"> + {{tableHead.openLong | getFormattedTime}} + </td> + <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('jgsj') > -1"> + {{tableHead.processLong | getFormattedTime}} + </td> + <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('djsj') > -1"> + {{tableHead.waitLong | getFormattedTime}} + </td> + <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('gjsj') > -1"> + {{tableHead.closeLong | getFormattedTime}} + </td> + <!--<td :style="{background:item[tableHead].color }" v-if="checkedList.indexOf('gjsj') > -1">--> <!--{{item[tableHead].gjsj}}--> - <!--</td>--> - </template> - <!--<td :style="{background:item.average.color }" >{{item.average.lyl | numFilter}}</td>--> - </tr> - </tbody> - </table> + <!--</td>--> + </template> + <!--<td :style="{background:item.average.color }" >{{item.average.lyl | numFilter}}</td>--> + </tr> + </tbody> + </table> + </div> </div> - </div> + </a-spin> </div> </div> </template> @@ -210,7 +214,8 @@ }, tableHeads: [], shiftList: [], - shiftSubList: [] + shiftSubList: [], + spinning:false } }, props: { nodeTree: '', Type:'',nodePeople: '' }, @@ -262,7 +267,20 @@ } else { return '0' } - } + }, + + /** + * 鏍煎紡鍖栨椂闂� + * @param seconds 绉掓暟 + * @returns '' 鏍煎紡鍖栧悗鏃堕棿瀛楃涓� + */ + getFormattedTime(seconds) { + if (seconds) { + return parseFloat((seconds / 3600).toFixed(2)) + '灏忔椂' + } else { + return '0' + } + }, }, methods: { checkSameData(dataList){ @@ -474,6 +492,7 @@ // this.onClearSelected() }, loadData() { + this.spinning=true this.tableHeads = [] this.dataList = [] getAction(this.url.list, this.queryParam).then(res => { @@ -486,6 +505,8 @@ this.combineCell(); // this.initDeviceType(this.dataList) } + }).finally(()=>{ + this.spinning=false }) }, queryGroup() { @@ -554,12 +575,12 @@ } .table tbody tr .tdgu5{ position: sticky; - left: 400px; + left: 412px; z-index: 2; } .table tbody tr .tdgu6{ position: sticky; - left: 500px; + left: 512px; z-index: 2; } @@ -600,11 +621,11 @@ } .table2 thead .equipname .dong6{ z-index: 5; - left: 400px; + left: 412px; } .table2 thead .equipname .dong7{ z-index: 6; - left: 500px; + left: 512px; } @media screen and (min-width: 1920px){ diff --git a/src/views/mdc/base/modules/mdcPassRate/mdcPassRateModal.vue b/src/views/mdc/base/modules/mdcPassRate/mdcPassRateModal.vue index 8fc91e2..dffd018 100644 --- a/src/views/mdc/base/modules/mdcPassRate/mdcPassRateModal.vue +++ b/src/views/mdc/base/modules/mdcPassRate/mdcPassRateModal.vue @@ -7,7 +7,7 @@ <a-col :span="12"> <a-form-item label="璁惧缁�" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-input-search :readOnly="true" v-decorator="['equipmentIds', validatorRules.equipmentIds]" - @search="deviceSearch" enter-button/> + @search="deviceSearch" enter-button placeholder="璇烽�夋嫨璁惧"/> </a-form-item> </a-col> @@ -39,15 +39,13 @@ </a-row> </a-form> </a-spin> - <mdc-pass-rate-modal-list ref="deviceRepairListModel" @sendSelectionRows="getDeviceRows"></mdc-pass-rate-modal-list> - + <select-device-modal ref="selectDeviceModal" @selectFinished="selectOK" :title="'閫夋嫨璁惧'"/> </a-modal> </template> <script> import moment from 'moment' import pick from 'lodash.pick' - import mdcPassRateModalList from './mdcPassRateModalList' // import JDate from './JDate' import { getAction, @@ -57,10 +55,11 @@ import { duplicateCheck } from '@/api/api' + import SelectDeviceModal from '../../../../system/modules/SelectDeviceModal' export default { name: 'mdcPassRateModal', - components: {mdcPassRateModalList}, + components: { SelectDeviceModal}, props: {}, data() { return { @@ -197,9 +196,10 @@ // }) }, deviceSearch() { - this.$refs.deviceRepairListModel.openPage() - this.$refs.deviceRepairListModel.title = '閫夋嫨璁惧' - this.$refs.deviceRepairListModel.disableSubmit = false + this.$refs.selectDeviceModal.visible = true + this.$refs.selectDeviceModal.selectedRowKeys = [] + this.$refs.selectDeviceModal.selectedRows = [] + this.$refs.selectDeviceModal.checkedKeys = this.form.getFieldValue('equipmentIds') ? this.form.getFieldValue('equipmentIds').split(',') : [] }, //绾ц仈妗唎nChange浜嬩欢 // onChange(value) { @@ -347,6 +347,22 @@ }, checkboxChange(e) { this.checked = e.target.checked + }, + + /** + * 閫夋嫨宸叉湁璁惧鍚庣偣鍑荤‘瀹氭椂瑙﹀彂 + * @param data 宸查�夋嫨鐨勮澶� + */ + selectOK(data) { + // let params = {} + // params.equipmentIdList = [] + // for (var a = 0; a < data.length; a++) { + // params.equipmentIdList.push(data[a]) + // } + console.log('data=', data) + this.form.setFieldsValue({ + equipmentIds: data.join(',') + }) } } } diff --git a/src/views/mdc/base/modules/mdcStandardProcessDuration/MdcStandardProcessDurationModal.vue b/src/views/mdc/base/modules/mdcStandardProcessDuration/MdcStandardProcessDurationModal.vue index 807a942..0cc0796 100644 --- a/src/views/mdc/base/modules/mdcStandardProcessDuration/MdcStandardProcessDurationModal.vue +++ b/src/views/mdc/base/modules/mdcStandardProcessDuration/MdcStandardProcessDurationModal.vue @@ -7,7 +7,7 @@ <a-col :span="24"> <a-form-item label="璁惧缁�" :labelCol="labelColLong" :wrapperCol="wrapperColLong"> <a-input-search :readOnly="true" v-decorator="['equipmentIds', validatorRules.equipmentIds]" - @search="deviceSearch" enter-button/> + @search="deviceSearch" enter-button placeholder="璇烽�夋嫨璁惧"/> </a-form-item> </a-col> </a-row> @@ -44,7 +44,7 @@ </a-row> </a-form> </a-spin> - <mdc-standard-process-duration-modal-list ref="deviceRepairListModel" @sendSelectionRows="getDeviceRows"></mdc-standard-process-duration-modal-list> + <select-device-modal ref="selectDeviceModal" @selectFinished="selectOK" :title="'閫夋嫨璁惧'"/> </a-modal> </template> @@ -52,7 +52,6 @@ <script> import moment from 'moment' import pick from 'lodash.pick' - import MdcStandardProcessDurationModalList from './MdcStandardProcessDurationModalList' // import JDate from './JDate' import { getAction, @@ -62,10 +61,11 @@ import { duplicateCheck } from '@/api/api' + import SelectDeviceModal from '../../../../system/modules/SelectDeviceModal' export default { name: 'MdcStandardProcessDurationModal', - components: {MdcStandardProcessDurationModalList}, + components: { SelectDeviceModal }, props: {}, data() { return { @@ -210,9 +210,10 @@ // }) }, deviceSearch() { - this.$refs.deviceRepairListModel.openPage() - this.$refs.deviceRepairListModel.title = '閫夋嫨璁惧' - this.$refs.deviceRepairListModel.disableSubmit = false + this.$refs.selectDeviceModal.visible = true + this.$refs.selectDeviceModal.selectedRowKeys = [] + this.$refs.selectDeviceModal.selectedRows = [] + this.$refs.selectDeviceModal.checkedKeys = this.form.getFieldValue('equipmentIds') ? this.form.getFieldValue('equipmentIds').split(',') : [] }, //绾ц仈妗唎nChange浜嬩欢 // onChange(value) { @@ -348,6 +349,22 @@ }, checkboxChange(e) { this.checked = e.target.checked + }, + + /** + * 閫夋嫨宸叉湁璁惧鍚庣偣鍑荤‘瀹氭椂瑙﹀彂 + * @param data 宸查�夋嫨鐨勮澶� + */ + selectOK(data) { + // let params = {} + // params.equipmentIdList = [] + // for (var a = 0; a < data.length; a++) { + // params.equipmentIdList.push(data[a]) + // } + console.log('data=', data) + this.form.setFieldsValue({ + equipmentIds: data.join(',') + }) } } } diff --git a/src/views/mdc/common/BaseTree.vue b/src/views/mdc/common/BaseTree.vue index ed5229a..1eebf9d 100644 --- a/src/views/mdc/common/BaseTree.vue +++ b/src/views/mdc/common/BaseTree.vue @@ -149,6 +149,7 @@ this.allTreeKeys = [] this.treeDataSource = res.result this.generateList(res.result) + this.expandedKeys=this.allTreeKeys } else { this.$message.warn(res.message) } diff --git a/src/views/system/UserList.vue b/src/views/system/UserList.vue index 6e4d7d2..ef70a2b 100644 --- a/src/views/system/UserList.vue +++ b/src/views/system/UserList.vue @@ -269,7 +269,8 @@ title: '杞﹂棿', align: "center", width: 240, - dataIndex: 'productionName' + dataIndex: 'productionName', + ellipsis: true, }, { title: '鐘舵��', @@ -363,7 +364,8 @@ title: '杞﹂棿', align: "center", width: 240, - dataIndex: 'productionName' + dataIndex: 'productionName', + ellipsis: true, }, { title: '鐘舵��', @@ -433,7 +435,8 @@ title: '杞﹂棿', align: "center", width: 240, - dataIndex: 'productionName' + dataIndex: 'productionName', + ellipsis: true, }, { title: '鐝粍', diff --git a/src/views/system/modules/PasswordModal.vue b/src/views/system/modules/PasswordModal.vue index f9f897e..810cc5f 100644 --- a/src/views/system/modules/PasswordModal.vue +++ b/src/views/system/modules/PasswordModal.vue @@ -31,6 +31,7 @@ <script> import {changePassword} from '@/api/api' + import { ajaxGetDictItems, getDictItemsFromCache } from '@/api/api' export default { name: "PasswordModal", @@ -69,6 +70,13 @@ sm: { span: 16 }, }, form:this.$form.createForm(this) + } + }, + watch:{ + visible:{ + handler(value){ + if(value) this.initDictData('password_length') + } } }, created () { @@ -136,7 +144,20 @@ handleConfirmBlur (e) { const value = e.target.value this.confirmDirty = this.confirmDirty || !!value - } + }, + initDictData(dictCode) { + //鏍规嵁瀛楀吀Code, 鍒濆鍖栧瓧鍏告暟缁� + ajaxGetDictItems(dictCode, null).then((res) => { + if (res.success) { + const regExp = new RegExp("^(?=.*[a-zA-Z])(?=.*\\\d)(?=.*[~!@#$%^&*()_+`\\-={}:\";'<>?,./]).{"+Number(res.result[0].value)+",}$"); + this.validatorRules.password.rules[0]={ + required:true, + pattern: regExp, + message: `瀵嗙爜鐢�${res.result[0].value}浣嶆暟瀛椼�佸ぇ灏忓啓瀛楁瘝鍜岀壒娈婄鍙风粍鎴�!`, + } + } + }) + }, } } </script> \ No newline at end of file diff --git a/src/views/system/modules/SelectDeviceModal.vue b/src/views/system/modules/SelectDeviceModal.vue index 12c2b26..f91e1d4 100644 --- a/src/views/system/modules/SelectDeviceModal.vue +++ b/src/views/system/modules/SelectDeviceModal.vue @@ -223,6 +223,7 @@ this.treeDataSource = res.result this.generateList(this.treeDataSource) console.log('treeDataSource', this.treeDataSource) + this.expandedKeys = this.allTreeKeys } else { this.$message.warn(res.message) } @@ -276,9 +277,7 @@ this.visible = false }, handleOk() { - if (this.checkedKeys.length > 0) { - this.$emit('selectFinished', this.deviceNodes) - } + this.$emit('selectFinished', this.deviceNodes) this.visible = false } diff --git a/src/views/system/modules/UserModal.vue b/src/views/system/modules/UserModal.vue index 7ba6715..e5ea623 100644 --- a/src/views/system/modules/UserModal.vue +++ b/src/views/system/modules/UserModal.vue @@ -67,7 +67,7 @@ <j-select-production v-model="model.selectedProduction" :multi="true" @back="backProductionInfo" :backProduction="true" :treeProductOpera="true"></j-select-production> </a-form-model-item> <a-form-model-item label="鐝粍鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="teamId"> - <j-dict-select-tag + <j-dict-select-tag v-model="model.teamId" :triggerChange="true" dictCode="mom_base_team,name,id,del_flag = 0" @@ -143,6 +143,7 @@ import { duplicateCheck } from '@/api/api' import JSelectProduction from '../../../components/jeecgbiz/JSelectProduction' import {mapActions} from 'vuex' + import { ajaxGetDictItems, getDictItemsFromCache } from '@/api/api' export default { name: "UserModal", @@ -208,6 +209,13 @@ nextProductionOptions:[], isDepartType:'', + } + }, + watch:{ + visible:{ + handler(value){ + if(value) this.initDictData('password_length') + } } }, created () { @@ -541,7 +549,22 @@ }else{ this.departIdShow=true; } - } + }, + initDictData(dictCode) { + //鏍规嵁瀛楀吀Code, 鍒濆鍖栧瓧鍏告暟缁� + ajaxGetDictItems(dictCode, null).then((res) => { + if (res.success) { + const regExp = new RegExp("^(?=.*[a-zA-Z])(?=.*\\\d)(?=.*[~!@#$%^&*()_+`\\-={}:\";'<>?,./]).{"+Number(res.result[0].value)+",}$"); + + this.validatorRules.password[0]={ + required:true, + pattern: regExp, + message: `瀵嗙爜鐢�${res.result[0].value}浣嶆暟瀛椼�佸ぇ灏忓啓瀛楁瘝鍜岀壒娈婄鍙风粍鎴�!`, + } + + } + }) + }, } } </script> -- Gitblit v1.9.3