From cdbd05d5bd48ac1716b6be6361a41e46eaa338e6 Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期一, 05 八月 2024 14:46:41 +0800 Subject: [PATCH] 1、新增MDC车间看板入口以及看板页面 2、新增大屏插件dataV和拖拽插件vue-drag-resize --- src/views/mdc/base/MdcWorkshopSignage.vue | 566 +++++++++++++++ src/assets/Bj.jpg | 0 src/main.js | 7 src/views/mdc/base/modules/WorkshopSignage/EquipmentDetailModal.vue | 1542 +++++++++++++++++++++++++++++++++++++++++ package.json | 8 src/views/mdc/base/WorkshopSignageEntrance.vue | 69 + src/config/router.config.js | 4 7 files changed, 2,193 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index bba804e..8b1d652 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "dependencies": { "@antv/data-set": "^0.11.4", "@jeecg/antd-online-mini": "3.4.3-beta2", + "@jiaminghi/data-view": "^2.10.0", "@tinymce/tinymce-vue": "2.1.0", "@toast-ui/editor": "^2.1.2", "ant-design-vue": "^1.7.2", @@ -37,6 +38,7 @@ "vue-area-linkage": "^5.1.0", "vue-calendar-component": "^2.8.2", "vue-cropper": "^0.5.4", + "vue-drag-resize": "^1.5.4", "vue-i18n": "^8.7.0", "vue-loader": "^15.7.0", "vue-ls": "^3.2.0", @@ -58,13 +60,13 @@ "@vue/cli-service": "^3.3.0", "@vue/eslint-config-standard": "^4.0.0", "babel-eslint": "7.2.3", + "compression-webpack-plugin": "^3.1.0", "eslint": "^5.16.0", "eslint-plugin-vue": "^5.1.0", + "html-webpack-plugin": "^4.2.0", "less": "^3.9.0", "less-loader": "^4.1.0", - "vue-template-compiler": "^2.6.10", - "html-webpack-plugin": "^4.2.0", - "compression-webpack-plugin": "^3.1.0" + "vue-template-compiler": "^2.6.10" }, "eslintConfig": { "root": true, diff --git a/src/assets/Bj.jpg b/src/assets/Bj.jpg new file mode 100644 index 0000000..125607b --- /dev/null +++ b/src/assets/Bj.jpg Binary files differ diff --git a/src/config/router.config.js b/src/config/router.config.js index f3b0f41..2154e1f 100644 --- a/src/config/router.config.js +++ b/src/config/router.config.js @@ -80,6 +80,10 @@ ] }, { + path: '/MdcWorkshopSignage/:id', + component: () => import('@/views/mdc/base/MdcWorkshopSignage.vue') + }, + { path: '/404', component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404') }, diff --git a/src/main.js b/src/main.js index 10d26b9..ebd34ec 100644 --- a/src/main.js +++ b/src/main.js @@ -51,6 +51,13 @@ import { rules } from '@/utils/rules' import * as echarts from 'echarts' +// 灏嗚嚜鍔ㄦ敞鍐屾墍鏈夌粍浠朵负鍏ㄥ眬缁勪欢 +import dataV from '@jiaminghi/data-view' +Vue.use(dataV) + +import VueDragResize from "vue-drag-resize" +Vue.component('vue-drag-resize', VueDragResize) + Vue.prototype.$echarts = echarts Vue.prototype.rules = rules Vue.config.productionTip = false diff --git a/src/views/mdc/base/MdcWorkshopSignage.vue b/src/views/mdc/base/MdcWorkshopSignage.vue new file mode 100644 index 0000000..3a90188 --- /dev/null +++ b/src/views/mdc/base/MdcWorkshopSignage.vue @@ -0,0 +1,566 @@ +<template> + <dv-full-screen-container class="full-screen-container"> + <div> + <!--椤靛ご鍖哄煙--> + <header class="page-header" :style="{height: pageHeaderHeight+'px'}"> + <a-row style="height: 100%"> + <a-col :span="7" class="header-left"> + <a-space> + <span v-if="!isSwitchChecked">寮�鍚姛鑳�</span> + <span v-else>鍏抽棴鍔熻兘</span> + <a-switch + checked-children="寮�" + un-checked-children="鍏�" + @change="handleSwitchChange" + v-model="isSwitchChecked" + :disabled="isSwitchChecked" + /> + <a-button type="primary" icon="save" size="large" @click="saveDevicePositionAndSizeByApi">淇濆瓨浣嶇疆</a-button> + </a-space> + </a-col> + + <a-col :span="10" class="workshop-name">{{ workshopDetails.workshopName }}</a-col> + + <a-col :span="7" class="device-status-info"> + <!--<a-space v-for="item in deviceStatusList" :key="item.value" class="single-status-info"--> + <!--@click="handleScreenDevive(item)">--> + <!--<div :style="{color:item.checked?'#1890FF':'#fff'}">{{ item.label }}</div>--> + <!--<div class="status-square" :style="{ backgroundColor: item.color }"></div>--> + <!--<!–<a-checkbox :checked="item.checked" @change="checkboxChange(item)"></a-checkbox>–>--> + <!--<div>{{getDeviceNumberByStatus(item.value) }}</div>--> + <!--</a-space>--> + <a-space v-for="item in deviceStatusList" :key="item.value" class="single-status-info"> + <div :style="{color:item.checked?'#1890FF':'#fff'}">{{ item.label }}</div> + <div class="status-square" :style="{ backgroundColor: item.color }"></div> + <!--<a-checkbox :checked="item.checked" @change="checkboxChange(item)"></a-checkbox>--> + <div>{{getDeviceNumberByStatus(item.value) }}</div> + </a-space> + </a-col> + </a-row> + </header> + + <!--鎷栨嫿璁惧鍖哄煙--> + <div class="content-container" ref="deviceContainerRef" style="overflow: auto"> + <img :src="imgSrc" width="1920" height="900"> + <div class="guideline guidelineX" :style="{top:guidelineXTop+'px',display:showGuideline}"></div> + <div class="guideline guidelineY" :style="{left:guidelineYLeft+'px',display:showGuideline}"></div> + <VueDragResize + v-for="(item, index) in deviceList" + :key="item.equipmentId" + :w="item.vw" + :h="item.vh" + :x="item.coordinateLeft" + :y="item.coordinateTop" + v-on:resizing="resize($event, index)" + v-on:dragging="resize($event, index)" + :parentLimitation="parentLimitation" + :parentH="parentH" + :parentW="parentW" + :minw="70" + :minh="70" + :isDraggable="isDraggable" + :isResizable="isResizable" + :stickSize="6" + @deactivated="showGuideline = 'none'" + > + <div class="single-device" :style="{ width: item.vw + 'px', height: item.vh + 'px' }" + @click="openDetail(item)"> + <div class="device-status"> + <div + v-if="item.equipmentStatus == 2 || item.equipmentStatus == 1" + :style="{ backgroundImage: `url(${require('@/assets/yellow.png')})` }" + class="status-image" + ></div> + <div + v-if="item.equipmentStatus == 22" + :style="{ backgroundImage: `url(${require('@/assets/red.png')})` }" + class="status-image" + ></div> + <div + v-if="item.equipmentStatus == 0" + :style="{ backgroundImage: `url(${require('@/assets/gray.png')})` }" + class="status-image" + ></div> + <div + v-if="item.equipmentStatus == 3" + :style="{ backgroundImage: `url(${require('@/assets/green.png')})` }" + class="status-image" + ></div> + <div + :style="{ backgroundImage: `url(${getImgView(item.equipmentImage)})` }" + class="device-image" + ></div> + </div> + <div class="device-id" id="deviceId" + :style="{ color:workshopDetails.equipmentIdColor }"> + {{ item.equipmentId }} + </div> + </div> + </VueDragResize> + </div> + + <EquipmentDetailModal ref="EquipmentDetailModal"></EquipmentDetailModal> + </div> + </dv-full-screen-container> +</template> + +<script> + import VueDragResize from 'vue-drag-resize' + import api from '@/api/mdc' + import { getFileAccessHttpUrl } from '@/api/manage' + import EquipmentDetailModal from './modules/WorkshopSignage/EquipmentDetailModal' + import { message } from 'ant-design-vue' + + message.config({ + maxCount: 3 + }) + + export default { + components: { + VueDragResize, + EquipmentDetailModal + }, + data() { + return { + pageHeaderHeight: 80,// 椤靛ご楂樺害 + workshopDetails: {}, // 杞﹂棿璇︾粏淇℃伅, + isDraggable: false, // 鏄惁寮�鍚嫋鎷� + isResizable: false, // 鏄惁寮�鍚缉鏀� + isSwitchChecked: false, // 鏄惁寮�鍚姛鑳� + timingAcquisition: null, // 瀹氭椂鍒锋柊鏄惁寮�鍚� + parentH: 5000,//鐖剁骇楂樺害 + parentW: 1920,//鐖剁骇瀹藉害 + showGuideline: 'none', + guidelineXTop: 0, + guidelineYLeft: 0, + deviceList: [ + // { + // equipmentId: '123213213123232',// 璁惧ID + // equipmentImage: require('@/assets/8.png'), // 璁惧鍥剧墖 + // coordinateTop: 200, // 鎷栨嫿鍏冪礌璺濈洅瀛愰《璺濈 + // coordinateLeft: 100, // 鎷栨嫿鍏冪礌璺濈洅瀛愬乏渚ц窛绂� + // vw: 100, // 缂╂斁鍏冪礌瀹藉害 + // vh: 100, // 缂╂斁鍏冪礌楂樺害 + // equipmentStatus: 1 // 璁惧鐘舵�� 0:鍏虫満 22:鎶ヨ 2:寰呮満 3:杩愯 寮�鏈�:1锛堟病鏈夊洓鑹茬伅鏍囪瘑褰掍负寰呮満锛� + // } + ], // 璁惧淇℃伅鍒楄〃 + deviceList_copy: [], + deviceStatusList: [ + // { + // label: '鍏ㄩ儴', + // value: 99, + // color: '#fff', + // checked: true + // }, + { + label: '鍏虫満', + value: 0, + color: '#A8A8A8', + checked: false + }, + { + label: '寰呮満', + value: 2, + color: '#FFFF00', + checked: false + }, + { + label: '杩愯', + value: 3, + color: '#00EE00', + checked: false + }, + { + label: '鎶ヨ', + value: 22, + color: '#FF0000', + checked: false + } + ],// 璁惧鐘舵�佹寚绀虹伅鍒楄〃锛� + windowHeight: null,// 褰撳墠娴忚鍣ㄥ彲瑙嗗尯鍩熼珮搴︼紙锛堜笉鍖呮嫭宸ュ叿鏍忋�佷功绛俱�佸簳閮ㄤ换鍔℃爮锛� + isFullScreen: false,// 杩涘叆鐪嬫澘椤甸潰鏃舵槸鍚︿负鍏ㄥ睆妯″紡锛屼笉鍖呮嫭姝e父妯″紡杩涘叆鍚庡垏鎹负鍏ㄥ睆妯″紡 + parentLimitation: false,// 鎷栨嫿鍖哄煙鏄惁闄愬埗鍦ㄧ埗鍏冪礌鍖哄煙鍐�, + checkedStatusCount: null,// 宸插嬀閫夌瓫閫夌姸鎬佷釜鏁� + imgSrc: ''// 杞﹂棿鍥剧焊鍦板潃 + } + }, + watch: { + isSwitchChecked: { + handler(newVal) { + if (!newVal) { + console.log('瀹氭椂鍣ㄥ紑鍚腑') + this.timingAcquisition = setInterval(() => { + this.getDeviceListByApi(this.$route.params.id) + }, 2000) + } else { + console.log('鍏抽棴瀹氭椂鍣�') + clearInterval(this.timingAcquisition) + this.timingAcquisition = null + } + }, + immediate: true + } + }, + methods: { + /** + * 閫氳繃杞﹂棿Id璋冪敤鎺ュ彛鑾峰彇璁惧淇℃伅鍒楄〃 + * @param id 杞﹂棿Id + */ + getDeviceListByApi(id) { + console.log('閲嶆柊鍒锋柊') + api.getDeviceListInWorkshopSignagePageApi(id).then((res) => { + if (res.result && res.result.length > 0) { + this.deviceList = res.result + this.deviceList_copy = res.result + } + }) + }, + + /** + * 閫氳繃杞﹂棿Id璋冪敤鎺ュ彛鑾峰彇杞﹂棿璇︾粏淇℃伅 + * @param id 杞﹂棿Id + */ + getWorkshopDetailsByApi(id) { + api.getWorkshopDetailByWorkshopIdApi(id).then((res) => { + this.workshopDetails = res.result + // this.$refs.deviceContainerRef.style.backgroundImage = `url(${this.getImgView( + // this.workshopDetails.backgroundImage + // )})` + this.imgSrc = this.getImgView(this.workshopDetails.backgroundImage) + this.$refs.deviceContainerRef.style.height = (this.windowHeight - this.pageHeaderHeight) + 'px' + // this.parentH = this.windowHeight - this.pageHeaderHeight + this.parentH = 900 + this.parentLimitation = true // 鍦ㄧ埗鍏冪礌楂樺害璁剧疆鍚庡啀璁剧疆闄愬埗鎷栨嫿鍖哄煙锛屼笉杩欐牱鏈夋鐜囧鑷寸埗鍏冪礌楂樺害鏈缃氨闄愬埗鎷栨嫿 + }) + }, + + /** + * 鍥剧墖棰勮 + * @param text 鍥剧墖鍦板潃 + */ + getImgView(text) { + if (text && text.indexOf(',') > 0) { + text = text.substring(0, text.indexOf(',')) + } + return getFileAccessHttpUrl(text) + }, + + /** + * 鐐瑰嚮淇濆瓨鎸夐挳璋冪敤鎺ュ彛淇濆瓨鎷栨嫿鍚庣殑浣嶇疆涓庤澶囧浘鏍囧昂瀵� + */ + saveDevicePositionAndSizeByApi() { + console.log('瑙﹀彂淇濆瓨') + if (this.isOperatingDevice) { + api.saveDevicePositionAndSizeApi(this.deviceList).then((res) => { + if (res.code === 200) { + this.$notification.success({ + message: '娑堟伅', + description: res.message + }) + this.isOperatingDevice = false + if (this.isSwitchChecked) { + this.isSwitchChecked = false + this.isResizable = !this.isResizable + this.isDraggable = !this.isDraggable + } + this.getDeviceListByApi(this.$route.params.id) + } + }) + } else { + this.$notification.warning({ + message: '娑堟伅', + description: '璇峰紑鍚姛鑳藉悗鍐嶈繘琛屼繚瀛�' + }) + } + }, + + /** + * 璁惧鎷栨嫿鎴栫缉鏀炬椂瑙﹀彂浜嬩欢 + * @param newRect 鎷栨嫿鎴栫缉鏀惧悗鐨勫昂瀵稿強璺濈 + * @param index 鎷栨嫿璁惧鍦ㄦ暟缁勪腑鐨勪笅鏍� + */ + resize(newRect, index) { + // if (newRect.width > 100) { + // if (newRect.width / newRect.height < 2) { + // this.deviceList[index].fontSize = newRect.width / 10 + // } else { + // this.deviceList[index].fontSize = newRect.height / 5 + // } + // } else { + // this.deviceList[index].fontSize = 12 + // } + this.showGuideline = 'block' + this.deviceList[index].vw = newRect.width + this.deviceList[index].vh = newRect.height + this.deviceList[index].coordinateTop = newRect.top + this.deviceList[index].coordinateLeft = newRect.left + this.guidelineXTop = newRect.top + newRect.height / 2 + this.guidelineYLeft = newRect.left + newRect.width / 2 + }, + + /** + * 鏍规嵁璁惧鐘舵�佸�艰幏鍙栧搴旇澶囨暟閲� + * @param value 璁惧鐘舵�佸�� + * @returns {number} 璁惧鏁伴噺 + */ + getDeviceNumberByStatus(value) { + if (value === 99) return this.deviceList_copy.length + return this.deviceList_copy.filter((item) => item.equipmentStatus === value).length + }, + + /** + * 寮�鍚姛鑳借Е鍙戜簨浠� + * @param checked 褰撳墠switch鐘舵�侊紝鏄惁寮�鍚紝鍒濆涓篺alse + */ + handleSwitchChange(checked) { + this.isOperatingDevice = true + this.isResizable = !this.isResizable + this.isDraggable = !this.isDraggable + }, + + openDetail(item) { + if (!this.isSwitchChecked) { + if (item.equipmentStatus == 0) { + this.$message.warning('璁惧澶勪簬鍏虫満鐘舵�侊紒') + return false + } + console.log(item) + console.log(this.$refs.EquipmentDetailModal) + this.$refs.EquipmentDetailModal.initData(item.equId) + this.$refs.EquipmentDetailModal.timerModel(item.equId) + // this.equipMessageTimer = setInterval(() => { + // setTimeout( this.$refs.equmentDetaiModel.initData(item.equipmentId),0) + // },1000*10) + } + }, + + /** + * 娴忚鍣ㄥ昂瀵稿彂鐢熸敼鍙樻椂瑙﹀彂 + */ + handleWindowSizeChange() { + // this.isFullScreen = !this.isFullScreen + // if (!this.isFullScreen) location.reload() // 濡傛灉涓哄叏灞忔ā寮忥紝鍒欏湪鍒囨崲妯″紡鏃堕噸鏂板姞杞介〉闈互閲嶆柊鑾峰彇娴忚鍣ㄥ彲瑙嗗尯鍩熼珮搴� + const windowHeight = + window.innerHeight || + document.documentElement.clientHeight || + document.body.clientHeight + // this.parentH = 99999 + // const scaleRate = windowHeight / this.windowHeight + // this.windowHeight = windowHeight + this.$refs.deviceContainerRef.style.height = (windowHeight - this.pageHeaderHeight) + 'px' + // const timer = setTimeout(() => { + // this.deviceList.forEach(item => { + // item.coordinateTop = item.coordinateTop * scaleRate + // item.vh = item.vh * scaleRate + // console.log('vh', item.vh) + // }) + // this.parentH = windowHeight - this.pageHeaderHeight + // console.log('changeDeviceList', this.deviceList) + // }, 500) + // console.log('scaleRate', scaleRate) + }, + + checkboxChange(obj) { + //闇�瑕佸垽鏂槸鍚﹀紑鍚姛鑳斤紝鐩殑鏄负浜嗗叧闂畾鏃跺櫒閬垮厤绛涢�夊悗璁惧琚畾鏃跺埛鏂扮殑鏂拌澶囪鐩� + if (this.isOperatingDevice) { + obj.checked = !obj.checked + if (obj.value !== 99) { + if (obj.checked) this.checkedStatusCount++ + else this.checkedStatusCount-- + } + + if (obj.value == 99) { + this.deviceStatusList.forEach(item => { + if (item.value !== obj.value) item.checked = obj.checked + }) + if (obj.checked) { + this.deviceList = this.deviceList_copy + this.checkedStatusCount = this.deviceStatusList.length - 1 + } else { + this.deviceList = [] + this.checkedStatusCount = 0 + } + } else { + this.deviceStatusList.forEach(item => { + if (item.value === 99) { + if (this.checkedStatusCount !== this.deviceStatusList.length - 1 || this.checkedStatusCount === 0) item.checked = false + if (this.checkedStatusCount === this.deviceStatusList.length - 1) item.checked = true + } + }) + if (obj.checked) { + this.deviceList.push(...this.deviceList_copy.filter(item => item.equipmentStatus === obj.value)) + } else { + this.deviceList = this.deviceList.filter(item => item.equipmentStatus !== obj.value) + } + } + } else { + this.$notification.warning({ + message: '娑堟伅', + description: '璇峰紑鍚姛鑳藉悗鍐嶈繘琛岀瓫閫�' + }) + } + }, + + handleScreenDevive(obj) { + //闇�瑕佸垽鏂槸鍚﹀紑鍚姛鑳斤紝鐩殑鏄负浜嗗叧闂畾鏃跺櫒閬垮厤绛涢�夊悗璁惧琚畾鏃跺埛鏂扮殑鏂拌澶囪鐩� + if (this.isOperatingDevice) { + obj.checked = true + this.deviceList = this.deviceList_copy + this.deviceStatusList.forEach(item => { + if (item.value !== obj.value) item.checked = false + }) + + if (obj.value == 99) this.deviceList = this.deviceList_copy + else this.deviceList = this.deviceList.filter(item => item.equipmentStatus === obj.value) + + } else { + this.$notification.warning({ + message: '娑堟伅', + description: '璇峰紑鍚姛鑳藉悗鍐嶈繘琛岀瓫閫�' + }) + } + } + }, + created() { + if (this.$route.params.id) { + this.getDeviceListByApi(this.$route.params.id) + this.getWorkshopDetailsByApi(this.$route.params.id) + } + this.checkedStatusCount = this.deviceStatusList.length - 1 + }, + mounted() { + // 绂佹鐢ㄦ埛閫変腑鍐呭 + document.onselectstart = () => false + + this.windowHeight = + window.innerHeight || + document.documentElement.clientHeight || + document.body.clientHeight + + // 鍒ゆ柇娴忚鍣ㄥ彲瑙嗗尯鍩熼珮搴︽槸鍚︾瓑浜庡垎杈ㄧ巼锛岃嫢鐩哥瓑鍒欒〃绀鸿繘鍏ユ椂娴忚鍣ㄤ负鍏ㄥ睆妯″紡 + // if (this.windowHeight === screen.height) this.isFullScreen = true + + window.addEventListener('resize', this.handleWindowSizeChange) + }, + beforeDestroy() { + // 纭繚閿�姣佸畾鏃跺櫒銆佷簨浠跺強鍥炴敹璧勬簮 + clearInterval(this.timingAcquisition) + this.timingAcquisition = null + } + } +</script> + +<style scoped lang="less"> + .full-screen-container { + background-image: url('../../../assets/Bj.jpg'); + background-size: 100% 100%; + color: #fff; + + .page-header { + /*font-size: 50px;*/ + /*text-align: center;*/ + /*position: relative;*/ + + .header-left { + height: 100%; + display: flex; + justify-content: center; + align-items: center; + padding-top: 20px; + } + + .workshop-name { + display: flex; + justify-content: center; + align-items: center; + font-size: 50px; + } + + .device-status-info { + height: 100%; + display: flex; + justify-content: flex-end; + align-items: center; + padding-top: 20px; + + .single-status-info { + margin: 10px; + cursor: pointer; + + .status-square { + width: 14px; + height: 14px; + border: 1px solid #fff; + border-radius: 3px; + } + } + } + } + + .content-container { + width: 100%; + background-repeat: no-repeat; + background-size: 100% 100%; + position: relative; + + .guideline { + position: absolute; + border: 1px dashed #ccc; + } + + .guidelineX { + width: 1920px; + left: 0; + } + + .guidelineY { + top: 0; + height: 900px; + } + + .single-device { + position: absolute; + border: 1px solid transparent; + padding: 10px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + cursor: default; + + &:active { + border: 1px solid #1890ff; + } + + .device-status { + width: 100%; + height: 100%; + display: flex; + -webkit-align-items: flex-end; + -moz-align-items: flex-end; + -ms-align-items: flex-end; + + .status-image { + background-size: 100% 100%; + background-repeat: no-repeat; + width: 10px; + height: 60%; + margin-right: 5px; + } + + .device-image { + background-size: 100% 100%; + background-repeat: no-repeat; + width: 100%; + height: 100%; + } + } + } + } + } + + /deep/ .ant-checkbox-inner { + background-color: transparent; + border-color: #fff; + } +</style> \ No newline at end of file diff --git a/src/views/mdc/base/WorkshopSignageEntrance.vue b/src/views/mdc/base/WorkshopSignageEntrance.vue new file mode 100644 index 0000000..05b5f38 --- /dev/null +++ b/src/views/mdc/base/WorkshopSignageEntrance.vue @@ -0,0 +1,69 @@ +<template> + <div class="page-container"> + <a-list + :grid="{ gutter: [{xs: 0, sm: 24, md: 24, lg: 56, xl: 64, xxl: 80},20], xs: 1, sm: 2, md: 2, lg: 3, xl: 4, xxl: 4 }" + :data-source="workshopList"> + <a-list-item slot="renderItem" slot-scope="item, index"> + <div class="workshop-name" @click="navigateToWorkshopSignage(item.id)">{{item.workshopName}}</div> + </a-list-item> + </a-list> + </div> +</template> + +<script> + import api from '@/api/mdc' + + export default { + name: 'WorkshopSignageEntrance', + data() { + return { + indexStyle: 1, + workshopList: [] + } + }, + created() { + this.getWorkshopListByApi() + }, + methods: { + /** + * 閫氳繃杞﹂棿Id璺宠浆鑷崇浉搴旇溅闂村ぇ灞忕湅鏉� + * @param id 杞﹂棿Id + */ + navigateToWorkshopSignage(id) { + const url = this.$router.resolve(`/MdcWorkshopSignage/${id}`).href + window.open(url, '_blank') + }, + /** + * 鑾峰彇杞﹂棿鍒楄〃 + */ + getWorkshopListByApi() { + api.getWorkshopListInHomePageApi().then(res => { + console.log('res', res) + if (res.result && res.result.length > 0) { + this.workshopList = res.result + } + }) + } + } + } +</script> + +<style lang="less" scoped> + .page-container { + padding: 30px 30px 0; + + .workshop-name { + width: 100%; + background: #fff; + padding: 55px 0; + border-radius: 20px; + text-align: center; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 30px; + cursor: pointer; + } + } + +</style> \ No newline at end of file diff --git a/src/views/mdc/base/modules/WorkshopSignage/EquipmentDetailModal.vue b/src/views/mdc/base/modules/WorkshopSignage/EquipmentDetailModal.vue new file mode 100644 index 0000000..8f038ea --- /dev/null +++ b/src/views/mdc/base/modules/WorkshopSignage/EquipmentDetailModal.vue @@ -0,0 +1,1542 @@ +<template> + <div ref="wrap" @mouseenter="getModalNode"> + <a-modal + :title="title" + width="70%" + :visible="visible" + :getContainer="() => this.$refs.wrap" + @cancel="handleCancel" + cancelText="鍏抽棴" + wrap-class-name="full-modal" + centered + :footer="null" + > + <div + id="mdcEquiInfo" + style="padding:1px;" + > + <table + width="100%" + style="border-collapse: separate;border-spacing:0px; color: #fff" + > + <tr> + <td v-if="this.spindlebeilv != null"> + <div + class="mdcEquipMon" + style="width: 250px; height: 200px;margin : 0 auto;padding: 0;" + align="center" + > + 涓昏酱鍊嶇巼 + <div + id="mdcEquiMoniGauge1" + ref="chart1" + style="width: 100%; height: 95%;" + ></div> + </div> + </td> + <td v-if="this.feedbeilv != null"> + <div + class="mdcEquipMon" + style="width: 210px; height: 180px;margin : 0 auto;" + align="center" + > + 杩涚粰鍊嶇巼 + <div + id="mdcEquiMoniGauge2" + ref="chart2" + style="width: 100%; height: 95%;" + ></div> + </div> + </td> + <td v-if="this.spindleload != null"> + <div + class="mdcEquipMon" + style="width: 210px; height: 180px;margin : 0 auto;" + align="center" + >涓昏酱璐熻嵎 + <div + id="mdcEquiMoniGauge3" + ref="mdcEquiMoniGauge3" + style="width: 100%; height: 95%;" + ></div> + </div> + </td> + <td v-if="this.rapidfeed != null"> + <div + class="mdcEquipMon" + style="width: 210px; height: 180px;margin : 0 auto;" + align="center" + >蹇�熻繘缁欏�嶇巼 + <div + id="mdcEquiMoniGauge4" + ref="mdcEquiMoniGauge4" + style="width: 100%; height: 95%;" + ></div> + </div> + </td> + </tr> + <tr> + <td colspan="5"> + <a-descriptions + title="鍩虹淇℃伅" + :column="4" + > + <a-descriptions-item label="璁惧缂栧彿">{{resultData.equipmentID|formatDescriptionsItem}}</a-descriptions-item> + <a-descriptions-item label="璁惧鍚嶇О">{{resultData.equipmentName|formatDescriptionsItem}}</a-descriptions-item> + <a-descriptions-item label="IP鍦板潃">{{resultData.equipmentIP|formatDescriptionsItem}}</a-descriptions-item> + <a-descriptions-item label="绔彛鍙�">{{resultData.dataPort|formatDescriptionsItem}}</a-descriptions-item> + <a-descriptions-item label="绯荤粺鐗堟湰鍙�">{{resultData.systemVersion|formatDescriptionsItem}}</a-descriptions-item> + <a-descriptions-item label="椹卞姩绫诲瀷">{{resultData.driveType|formatDescriptionsItem}}</a-descriptions-item> + <a-descriptions-item label="璁惧鍨嬪彿">{{resultData.equipmentModel|formatDescriptionsItem}}</a-descriptions-item> + <a-descriptions-item label="璁惧绫诲瀷">{{resultData.deviceType|formatDescriptionsItem}}</a-descriptions-item> + <a-descriptions-item label="璁惧鍔熺巼">{{resultData.devicePower|formatDescriptionsItem}}</a-descriptions-item> + <a-descriptions-item label="鏈夋晥杞存暟">{{resultData.validAxis|formatDescriptionsItem}}</a-descriptions-item> + <a-descriptions-item label="鏈�澶ц酱鏁�">{{resultData.maxAxis|formatDescriptionsItem}}</a-descriptions-item> + <a-descriptions-item label="澶囨敞">{{resultData.remark|formatDescriptionsItem}}</a-descriptions-item> + </a-descriptions> + + <!-- <a-descriptions + title="杩愯鏁版嵁" + v-if="driverType != 'LSV2' && driverType != 'ZUOLAN' " + :column="4" + > + <a-descriptions-item label="涓昏酱鍊嶇巼(%)">{{resultData.spindlebeilv}}</a-descriptions-item> + <a-descriptions-item label="杩涚粰鍊嶇巼(%)">{{resultData.feedbeilv}}</a-descriptions-item> + <a-descriptions-item label="涓昏酱璐熻嵎(%)">{{resultData.spindleload}}</a-descriptions-item> + <a-descriptions-item label="涓昏酱杞��(rpm)">{{resultData.spindlespeed}}</a-descriptions-item> + <a-descriptions-item label="杩涚粰閫熷害(mm/min)">{{resultData.feedrate}}</a-descriptions-item> + </a-descriptions> + + <a-descriptions + title="杩愯鏁版嵁 for lsv2" + v-if="driverType == 'LSV2'" + :column="4" + > + <a-descriptions-item label="涓昏酱鍊嶇巼(%)">{{resultData.spindlebeilv}}</a-descriptions-item> + <a-descriptions-item label="璁惧姝e父杩愯鏃堕棿">{{resultData.equipmentNormalTime}}</a-descriptions-item> + <a-descriptions-item label="蹇�熻繘缁欏�嶇巼(%)">{{resultData.rapidfeed}}</a-descriptions-item> + <a-descriptions-item label="NC姝e父杩愯鏃堕棿">{{resultData.nCNormalTime}}</a-descriptions-item> + <a-descriptions-item label="杩涚粰鍊嶇巼(%)">{{resultData.feedbeilv}}</a-descriptions-item> + <a-descriptions-item label="璁惧杩愯鏃堕棿">{{resultData.equipmentTime}}</a-descriptions-item> + <a-descriptions-item label="褰撳墠鍒�鍏峰彿">{{resultData.toolNum}}</a-descriptions-item> + </a-descriptions> --> + + <!-- <a-descriptions + title="绋嬪簭淇℃伅" + v-if="driverType != 'LSV2' && driverType != 'ZUOLAN' " + :column="4" + > + <a-descriptions-item label="搴忓垪鍙�">{{resultData.sequencenumber}}</a-descriptions-item> + <a-descriptions-item + label="褰撳墠鎵ц浠g爜" + :span="2" + >{{resultData.executingcode}}</a-descriptions-item> + <a-descriptions-item label="宸ヤ欢鍚嶇О">{{resultData.productName}}</a-descriptions-item> + </a-descriptions> --> + + <!-- <a-descriptions + title="绋嬪簭淇℃伅 for lsv2" + v-if="driverType == 'LSV2'" + :column="4" + > + <a-descriptions-item label="褰撳墠绋嬪簭">{{resultData.program}}</a-descriptions-item> + <a-descriptions-item label="绋嬪簭鎵ц鐐�">{{resultData.programPosition}}</a-descriptions-item> + <a-descriptions-item label="鎿嶄綔妯″紡">{{resultData.operationType}}</a-descriptions-item> + <a-descriptions-item label="閿欒淇℃伅缂栧彿涓�">{{resultData.firstErrorNum}}</a-descriptions-item> + <a-descriptions-item label="閿欒淇℃伅涓�">{{resultData.firstError}}</a-descriptions-item> + <a-descriptions-item label="閿欒淇℃伅">{{resultData.errorinfo}}</a-descriptions-item> + <a-descriptions-item label="閿欒淇℃伅缂栧彿浜�">{{resultData.secondErrorNum}}</a-descriptions-item> + <a-descriptions-item label="閿欒淇℃伅浜�">{{resultData.secondError}}</a-descriptions-item> + </a-descriptions> --> + + <!--<a-descriptions + title="杞寸洃鎺ф暟鎹� fro SIEMENS840DSL" + v-if="driverType == 'SIEMENS840DSL'" + :column="4" + > + <a-descriptions-item label="X杞存俯搴�">{{resultData.temperatureX}}</a-descriptions-item> + <a-descriptions-item label="Y杞存俯搴�">{{resultData.temperatureY}}</a-descriptions-item> + <a-descriptions-item label="Z杞存俯搴�">{{resultData.temperatureZ}}</a-descriptions-item> + <a-descriptions-item label="A杞存俯搴�">{{resultData.temperatureA}}</a-descriptions-item> + <a-descriptions-item label="B杞存俯搴�">{{resultData.temperatureB}}</a-descriptions-item> + <a-descriptions-item label="X杞寸數娴�">{{resultData.equipmentCurrentX}}</a-descriptions-item> + <a-descriptions-item label="Y杞寸數娴�">{{resultData.equipmentCurrentY}}</a-descriptions-item> + <a-descriptions-item label="Z杞寸數娴�">{{resultData.equipmentCurrentZ}}</a-descriptions-item> + <a-descriptions-item label="A杞寸數娴�">{{resultData.equipmentCurrentA}}</a-descriptions-item> + <a-descriptions-item label="B杞寸數娴�">{{resultData.equipmentCurrentB}}</a-descriptions-item> + <a-descriptions-item label="X杞撮殢鍔ㄨ宸�">{{resultData.equipmentLagErrorX}}</a-descriptions-item> + <a-descriptions-item label="Y杞撮殢鍔ㄨ宸�">{{resultData.equipmentLagErrorY}}</a-descriptions-item> + <a-descriptions-item label="Z杞撮殢鍔ㄨ宸�">{{resultData.equipmentLagErrorZ}}</a-descriptions-item> + <a-descriptions-item label="A杞撮殢鍔ㄨ宸�">{{resultData.equipmentLagErrorA}}</a-descriptions-item> + <a-descriptions-item label="B杞撮殢鍔ㄨ宸�">{{resultData.equipmentLagErrorB}}</a-descriptions-item> + </a-descriptions> +--> + <!-- <a-descriptions + title="鍧愭爣淇℃伅 " + v-if="driverType == 'FANUC'" + :column="3" + > + <a-descriptions-item label="缁濆鍧愭爣X">{{resultData.xabsolute}}</a-descriptions-item> + <a-descriptions-item label="缁濆鍧愭爣Y">{{resultData.yabsolute}}</a-descriptions-item> + <a-descriptions-item label="缁濆鍧愭爣Z">{{resultData.zabsolute}}</a-descriptions-item> + <a-descriptions-item label="鏈哄簥鍧愭爣X">{{resultData.xmachine}}</a-descriptions-item> + <a-descriptions-item label="鏈哄簥鍧愭爣Y">{{resultData.ymachine}}</a-descriptions-item> + <a-descriptions-item label="鏈哄簥鍧愭爣Z">{{resultData.zmachine}}</a-descriptions-item> + </a-descriptions> + + <a-descriptions + title="鍧愭爣淇℃伅 for lsv2" + v-if="driverType == 'LSV2'" + :column="4" + > + <a-descriptions-item label="X鍧愭爣">{{resultData.xmachine}}</a-descriptions-item> + <a-descriptions-item label="Y鍧愭爣">{{resultData.ymachine}}</a-descriptions-item> + <a-descriptions-item label="Z鍧愭爣">{{resultData.zmachine}}</a-descriptions-item> + <a-descriptions-item label="A鍧愭爣">{{resultData.amachine}}</a-descriptions-item> + <a-descriptions-item label="B鍧愭爣">{{resultData.bmachine}}</a-descriptions-item> + <a-descriptions-item label="C鍧愭爣">{{resultData.cmachine}}</a-descriptions-item> + </a-descriptions> + + <a-descriptions + title="鍧愭爣淇℃伅 for lsv2" + v-if="driverType == 'LSV2'" + :column="4" + > + <a-descriptions-item label="X鍧愭爣">{{resultData.xmachine}}</a-descriptions-item> + <a-descriptions-item label="Y鍧愭爣">{{resultData.ymachine}}</a-descriptions-item> + <a-descriptions-item label="Z鍧愭爣">{{resultData.zmachine}}</a-descriptions-item> + <a-descriptions-item label="A鍧愭爣">{{resultData.amachine}}</a-descriptions-item> + <a-descriptions-item label="B鍧愭爣">{{resultData.bmachine}}</a-descriptions-item> + <a-descriptions-item label="C鍧愭爣">{{resultData.cmachine}}</a-descriptions-item> + </a-descriptions> + + <a-descriptions + title="鍧愭爣淇℃伅" + v-if="driverType == 'LSV2'" + :column="4" + > + <a-descriptions-item label="X鍧愭爣">{{resultData.xmachine}}</a-descriptions-item> + <a-descriptions-item label="Y鍧愭爣">{{resultData.ymachine}}</a-descriptions-item> + <a-descriptions-item label="Z鍧愭爣">{{resultData.zmachine}}</a-descriptions-item> + <a-descriptions-item label="A鍧愭爣">{{resultData.amachine}}</a-descriptions-item> + <a-descriptions-item label="B鍧愭爣">{{resultData.bmachine}}</a-descriptions-item> + <a-descriptions-item label="C鍧愭爣">{{resultData.cmachine}}</a-descriptions-item> + </a-descriptions> --> + <!---鏁版嵁婧愯皟鏁� 鍔ㄦ�佸睍绀� 杩愯鏁版嵁----> + + <a-descriptions + title="杩愯鏁版嵁" + v-show="mdcDriveTypeParamConfigList != null" + v-if="driverType != 'PLC'" + :column="4" + class="operationData" + > + + <a-descriptions-item + v-for="(item,id) in mdcDriveTypeParamConfigList " + :key="item.id" + :label="item.chineseName" + > + <a-tooltip @mouseenter="mouseEnterItem"> + <template slot="title"> + {{item.value|formatDescriptionsItem}} + </template> + <div class="description-item-class">{{item.value|formatDescriptionsItem}}</div> + </a-tooltip> + + </a-descriptions-item> + + </a-descriptions> + + <!--<a-descriptions--> + <!--title="鍧愭爣淇℃伅"--> + <!--v-show="xyzAliasesList != null"--> + <!--v-if="driverType != 'PLC'"--> + <!--:column="4"--> + <!-->--> + <!--<a-descriptions-item--> + <!--v-for="(item,id) in xyzAliasesList "--> + <!--:key="item.id"--> + <!--:label="item.title"--> + <!-->{{item.value}}</a-descriptions-item>--> + <!--</a-descriptions>--> + + <!--<a-descriptions--> + <!--title="鐗堟湰淇℃伅 for lsv2"--> + <!--v-if="driverType == 'LSV2'"--> + <!--:column="4"--> + <!--class="lsv2Data"--> + <!-->--> + <!--<a-descriptions-item label="NC鐗堟湰">{{resultData.ncversion}}</a-descriptions-item>--> + <!--<a-descriptions-item label="TNC鐗堟湰">{{resultData.tncversion}}</a-descriptions-item>--> + <!--<a-descriptions-item label="OPT鐗堟湰">{{resultData.optversion}}</a-descriptions-item>--> + <!--<a-descriptions-item label="PLC鐗堟湰">{{resultData.plcversion}}</a-descriptions-item>--> + <!--</a-descriptions>--> + + </td> + </tr> + </table> + </div> + <template slot="footer"> + <a-button + :style="{ marginRight: '8px' }" + @click="handleCancel" + style="color: #1191b0;" + >鍏抽棴 + </a-button> + </template> + </a-modal> + </div> +</template> + +<script> + import { + getAction, + postAction + } from '@/api/manage' + import { ajaxGetDictItems, getDictItemsFromCache, duplicateCheck } from '@/api/api' + import Template1 from '../../../../jeecg/JVxeDemo/layout-demo/Template1' + + export default { + name: 'EqumentDetaiModal', + components: { Template1 }, + props: {}, + data() { + return { + mdcDriveTypeParamConfigList: [], + xyzAliasesList: [], + title: '', + //涓昏酱鍊嶇巼 + spindlebeilv: 1, + //杩涚粰鍊嶇巼 + feedbeilv: 1, + // 涓昏酱璐熻嵎 + spindleload: 1, + //蹇�熻繘缁欏�嶇巼 + rapidfeed: 1, + visible: false, + resultData: {}, + driverType: '', + deviceTypeDict: '', + url: { + mdcEquipmentDetailedInfo: '/mdc/mdcEquipment/mdcEquipmentDetailedInfo' + }, + modalTimer: null, + ee: ' ', + modalNode: null, + timeout: null + } + }, + mounted() { + + }, + watch: {}, + filters:{ + formatDescriptionsItem(value){ + return value?value:'鏃�' + } + }, + methods: { + drawLine() { + let _this = this + if (_this.spindlebeilv) { + //鍩轰簬鍑嗗濂界殑dom锛屽垵濮嬪寲echarts瀹炰緥 + let mdcEquiMoniGauge1 = this.$echarts.init(document.getElementById('mdcEquiMoniGauge1'), 'macarons') + let mdcEquiMoniGaugeOption1 = { + tooltip: { + formatter: '{a} <br/>{b} : {c}%' + }, + + series: [{ + name: '澶栭儴绾�', + type: 'gauge', + radius: '65%', // 鍔ㄦ�� + startAngle: 225, + endAngle: -45, + axisLine: { + lineStyle: { + color: [ + [1, '#31F3FF'] // 鍔ㄦ�� + ], + width: 1 + } + }, + axisLabel: { + show: false + }, + axisTick: { + show: false + }, + splitLine: { + show: false + }, + detail: { + show: false + }, + title: { //鏍囬 + show: false + } + }, + { + name: '澶栭儴鍒诲害', + type: 'gauge', + radius: '80%', + min: 0, //鏈�灏忓埢搴� + max: 300, //鏈�澶у埢搴� + splitNumber: 10, //鍒诲害鏁伴噺 + startAngle: 225, + endAngle: -45, + axisLine: { + show: false, + lineStyle: { + color: [ + [1, 'rgba(0,0,0,0)'] + ] + } + }, //浠〃鐩樿酱绾� + axisLabel: { + show: true, + color: '#31F3FF', + fontSize: 10, // 鍔ㄦ�� + distance: -20 // 鍔ㄦ�� + + }, //鍒诲害鏍囩銆� + axisTick: { + show: false + }, //鍒诲害鏍峰紡 + splitLine: { + show: false + } + }, + { + name: '鍐呴儴瀹界嚎鏉�', + type: 'gauge', + radius: '55%', + startAngle: 225, + endAngle: -45, + axisLine: { + lineStyle: { + color: [ + [1, '#122B3C'] + ], + width: 4 + } + }, + axisLabel: { + show: false + }, + axisTick: { + show: false + }, + splitLine: { + show: false + }, + detail: { + show: false + }, + title: { + show: false + } + }, + { + name: '鍐呴儴缁嗙嚎鏉�', + type: 'gauge', + radius: '40%', + startAngle: 225, + endAngle: -45, + axisLine: { + lineStyle: { + color: [ + [1, '#122B3C'] + ], + width: 3 + } + }, + axisLabel: { + show: false + }, + axisTick: { + show: false + }, + splitLine: { + show: false + }, + detail: { + show: false + }, + title: { + show: false + } + }, + { + name: '闂撮殧鏉″舰', + type: 'gauge', + radius: '52.5%', + z: 4, + splitNumber: 35, + startAngle: 225, + endAngle: -45, + axisLine: { + lineStyle: { + opacity: 0 + } + }, + axisLabel: { + show: false + }, + axisTick: { + show: false, + length: 20, + splitNumber: 1, + lineStyle: { + color: '#122B3C', + width: 1 + } + }, + splitLine: { + show: false + }, + detail: { + show: false + }, + title: { + show: false + } + }, + { + name: '鏁版嵁', + type: 'gauge', + radius: '52.5%', + z: 3, + startAngle: 225, + max: 300, + endAngle: -45, + axisLine: { + lineStyle: { + color: [ + [_this.spindlebeilv / 300, '#31F3FF'], // 鍔ㄦ�� + [1, '#185363'] + ], + width: 4 + } + }, + tooltip: { + show: false + }, + axisLabel: { + show: false + }, + axisTick: { + show: false + }, + splitLine: { + show: false + }, + detail: { + show: true, + fontWeight: 'bold', + fontSize: 12, + color: '#fff' + }, + pointer: { + show: true, + width: 3, + itemStyle:{ + color:'#fff' + } + }, + data: [{ + name: '', + value: _this.spindlebeilv + }] + }, + // 鍐呭渾 + { + 'name': '鍐呭渾鐜�', + 'type': 'pie', + 'radius': ['4%', '2%'], + 'hoverAnimation': false, + tooltip: { + show: false + }, + cursor: 'default', + 'labelLine': { + 'normal': { + 'show': false + } + }, + itemStyle: { + color: '#fff' + }, + animation: false, + 'data': [1] + }, + // 鍐呭渾 + { + 'name': '鍐呭渾鐜�2', + 'type': 'pie', + 'radius': '2%', + 'hoverAnimation': false, + cursor: 'default', + tooltip: { + show: false + }, + 'labelLine': { + 'normal': { + 'show': false + } + }, + itemStyle: { + color: '#31F3FF' + }, + animation: false, + 'data': [1] + } + ] + } + mdcEquiMoniGauge1.setOption(mdcEquiMoniGaugeOption1) + } + if (_this.feedbeilv) { + let mdcEquiMoniGauge2 = this.$echarts.init(document.getElementById('mdcEquiMoniGauge2'), 'macarons') + let mdcEquiMoniGaugeOption2 = { + tooltip: { + formatter: '{a} <br/>{b} : {c}%' + }, + + series: [{ + name: '澶栭儴绾�', + type: 'gauge', + radius: '65%', // 鍔ㄦ�� + startAngle: 225, + endAngle: -45, + axisLine: { + lineStyle: { + color: [ + [1, '#31F3FF'] // 鍔ㄦ�� + ], + width: 1 + } + }, + axisLabel: { + show: false + }, + axisTick: { + show: false + }, + splitLine: { + show: false + }, + detail: { + show: false + }, + title: { //鏍囬 + show: false + } + }, + { + name: '澶栭儴鍒诲害', + type: 'gauge', + radius: '80%', + min: 0, //鏈�灏忓埢搴� + max: 300, //鏈�澶у埢搴� + splitNumber: 10, //鍒诲害鏁伴噺 + startAngle: 225, + endAngle: -45, + axisLine: { + show: false, + lineStyle: { + color: [ + [1, 'rgba(0,0,0,0)'] + ] + } + }, //浠〃鐩樿酱绾� + axisLabel: { + show: true, + color: '#31F3FF', + fontSize: 10, // 鍔ㄦ�� + distance: -20 // 鍔ㄦ�� + + }, //鍒诲害鏍囩銆� + axisTick: { + show: false + }, //鍒诲害鏍峰紡 + splitLine: { + show: false + } + }, + { + name: '鍐呴儴瀹界嚎鏉�', + type: 'gauge', + radius: '55%', + startAngle: 225, + endAngle: -45, + axisLine: { + lineStyle: { + color: [ + [1, '#122B3C'] + ], + width: 4 + } + }, + axisLabel: { + show: false + }, + axisTick: { + show: false + }, + splitLine: { + show: false + }, + detail: { + show: false + }, + title: { + show: false + } + }, + { + name: '鍐呴儴缁嗙嚎鏉�', + type: 'gauge', + radius: '40%', + startAngle: 225, + endAngle: -45, + axisLine: { + lineStyle: { + color: [ + [1, '#122B3C'] + ], + width: 3 + } + }, + axisLabel: { + show: false + }, + axisTick: { + show: false + }, + splitLine: { + show: false + }, + detail: { + show: false + }, + title: { + show: false + } + }, + { + name: '闂撮殧鏉″舰', + type: 'gauge', + radius: '52.5%', + z: 4, + splitNumber: 35, + startAngle: 225, + endAngle: -45, + axisLine: { + lineStyle: { + opacity: 0 + } + }, + axisLabel: { + show: false + }, + axisTick: { + show: false, + length: 20, + splitNumber: 1, + lineStyle: { + color: '#122B3C', + width: 1 + } + }, + splitLine: { + show: false + }, + detail: { + show: false + }, + title: { + show: false + } + }, + { + name: '鏁版嵁', + type: 'gauge', + radius: '52.5%', + z: 3, + startAngle: 225, + max: 300, + endAngle: -45, + axisLine: { + lineStyle: { + color: [ + [_this.feedbeilv / 300, '#31F3FF'], // 鍔ㄦ�� + [1, '#185363'] + ], + width: 4 + } + }, + tooltip: { + show: false + }, + axisLabel: { + show: false + }, + axisTick: { + show: false + }, + splitLine: { + show: false + }, + detail: { + show: true, + fontWeight: 'bold', + fontSize: 12, + color: '#fff' + }, + pointer: { + show: true, + width: 3, + itemStyle:{ + color:'#fff' + } + }, + data: [{ + name: '', + value: _this.feedbeilv + }] + }, + // 鍐呭渾 + { + 'name': '鍐呭渾鐜�', + 'type': 'pie', + 'radius': ['4%', '2%'], + 'hoverAnimation': false, + tooltip: { + show: false + }, + cursor: 'default', + 'labelLine': { + 'normal': { + 'show': false + } + }, + itemStyle: { + color: '#fff' + }, + animation: false, + 'data': [1] + }, + // 鍐呭渾 + { + 'name': '鍐呭渾鐜�2', + 'type': 'pie', + 'radius': '2%', + 'hoverAnimation': false, + cursor: 'default', + tooltip: { + show: false + }, + 'labelLine': { + 'normal': { + 'show': false + } + }, + itemStyle: { + color: '#31F3FF' + }, + animation: false, + 'data': [1] + } + ] + } + mdcEquiMoniGauge2.setOption(mdcEquiMoniGaugeOption2) + } + if (_this.spindleload) { + let mdcEquiMoniGauge3 = this.$echarts.init(document.getElementById('mdcEquiMoniGauge3'), 'macarons') + let mdcEquiMoniGaugeOption3 = { + tooltip: { + formatter: '{a} <br/>{b} : {c}%' + }, + + series: [{ + name: '澶栭儴绾�', + type: 'gauge', + radius: '65%', // 鍔ㄦ�� + startAngle: 225, + endAngle: -45, + axisLine: { + lineStyle: { + color: [ + [1, '#31F3FF'] // 鍔ㄦ�� + ], + width: 1 + } + }, + axisLabel: { + show: false + }, + axisTick: { + show: false + }, + splitLine: { + show: false + }, + detail: { + show: false + }, + title: { //鏍囬 + show: false + } + }, + { + name: '澶栭儴鍒诲害', + type: 'gauge', + radius: '80%', + min: 0, //鏈�灏忓埢搴� + max: 100, //鏈�澶у埢搴� + splitNumber: 10, //鍒诲害鏁伴噺 + startAngle: 225, + endAngle: -45, + axisLine: { + show: false, + lineStyle: { + color: [ + [1, 'rgba(0,0,0,0)'] + ] + } + }, //浠〃鐩樿酱绾� + axisLabel: { + show: true, + color: '#31F3FF', + fontSize: 10, // 鍔ㄦ�� + distance: -20 // 鍔ㄦ�� + + }, //鍒诲害鏍囩銆� + axisTick: { + show: false + }, //鍒诲害鏍峰紡 + splitLine: { + show: false + } + }, + { + name: '鍐呴儴瀹界嚎鏉�', + type: 'gauge', + radius: '55%', + startAngle: 225, + endAngle: -45, + axisLine: { + lineStyle: { + color: [ + [1, '#122B3C'] + ], + width: 4 + } + }, + axisLabel: { + show: false + }, + axisTick: { + show: false + }, + splitLine: { + show: false + }, + detail: { + show: false + }, + title: { + show: false + } + }, + { + name: '鍐呴儴缁嗙嚎鏉�', + type: 'gauge', + radius: '40%', + startAngle: 225, + endAngle: -45, + axisLine: { + lineStyle: { + color: [ + [1, '#122B3C'] + ], + width: 3 + } + }, + axisLabel: { + show: false + }, + axisTick: { + show: false + }, + splitLine: { + show: false + }, + detail: { + show: false + }, + title: { + show: false + } + }, + { + name: '闂撮殧鏉″舰', + type: 'gauge', + radius: '52.5%', + z: 4, + splitNumber: 35, + startAngle: 225, + endAngle: -45, + axisLine: { + lineStyle: { + opacity: 0 + } + }, + axisLabel: { + show: false + }, + axisTick: { + show: false, + length: 20, + splitNumber: 1, + lineStyle: { + color: '#122B3C', + width: 1 + } + }, + splitLine: { + show: false + }, + detail: { + show: false + }, + title: { + show: false + } + }, + { + name: '鏁版嵁', + type: 'gauge', + radius: '52.5%', + z: 3, + startAngle: 225, + max: 100, + endAngle: -45, + axisLine: { + lineStyle: { + color: [ + [_this.spindleload / 100, '#31F3FF'], // 鍔ㄦ�� + [1, '#185363'] + ], + width: 4 + } + }, + tooltip: { + show: false + }, + axisLabel: { + show: false + }, + axisTick: { + show: false + }, + splitLine: { + show: false + }, + detail: { + show: true, + fontWeight: 'bold', + fontSize: 12, + color: '#fff' + }, + pointer: { + show: true, + width: 3, + itemStyle:{ + color:'#fff' + } + }, + data: [{ + name: '', + value: _this.spindleload + }] + }, + // 鍐呭渾 + { + 'name': '鍐呭渾鐜�', + 'type': 'pie', + 'radius': ['4%', '2%'], + 'hoverAnimation': false, + tooltip: { + show: false + }, + cursor: 'default', + 'labelLine': { + 'normal': { + 'show': false + } + }, + itemStyle: { + color: '#fff' + }, + animation: false, + 'data': [1] + }, + // 鍐呭渾 + { + 'name': '鍐呭渾鐜�2', + 'type': 'pie', + 'radius': '2%', + 'hoverAnimation': false, + cursor: 'default', + tooltip: { + show: false + }, + 'labelLine': { + 'normal': { + 'show': false + } + }, + itemStyle: { + color: '#31F3FF' + }, + animation: false, + 'data': [1] + } + ] + } + mdcEquiMoniGauge3.setOption(mdcEquiMoniGaugeOption3) + } + if (_this.rapidfeed) { + let mdcEquiMoniGauge4 = this.$echarts.init(document.getElementById('mdcEquiMoniGauge4'), 'macarons') + let mdcEquiMoniGaugeOption4 = { + tooltip: { + formatter: '{a} <br/>{b} : {c}%' + }, + + series: [{ + name: '澶栭儴绾�', + type: 'gauge', + radius: '65%', // 鍔ㄦ�� + startAngle: 225, + endAngle: -45, + axisLine: { + lineStyle: { + color: [ + [1, '#31F3FF'] // 鍔ㄦ�� + ], + width: 1 + } + }, + axisLabel: { + show: false + }, + axisTick: { + show: false + }, + splitLine: { + show: false + }, + detail: { + show: false + }, + title: { //鏍囬 + show: false + } + }, + { + name: '澶栭儴鍒诲害', + type: 'gauge', + radius: '80%', + min: 0, //鏈�灏忓埢搴� + max: 300, //鏈�澶у埢搴� + splitNumber: 10, //鍒诲害鏁伴噺 + startAngle: 225, + endAngle: -45, + axisLine: { + show: false, + lineStyle: { + color: [ + [1, 'rgba(0,0,0,0)'] + ] + } + }, //浠〃鐩樿酱绾� + axisLabel: { + show: true, + color: '#31F3FF', + fontSize: 10, // 鍔ㄦ�� + distance: -20 // 鍔ㄦ�� + + }, //鍒诲害鏍囩銆� + axisTick: { + show: false + }, //鍒诲害鏍峰紡 + splitLine: { + show: false + } + }, + { + name: '鍐呴儴瀹界嚎鏉�', + type: 'gauge', + radius: '55%', + startAngle: 225, + endAngle: -45, + axisLine: { + lineStyle: { + color: [ + [1, '#122B3C'] + ], + width: 4 + } + }, + axisLabel: { + show: false + }, + axisTick: { + show: false + }, + splitLine: { + show: false + }, + detail: { + show: false + }, + title: { + show: false + } + }, + { + name: '鍐呴儴缁嗙嚎鏉�', + type: 'gauge', + radius: '40%', + startAngle: 225, + endAngle: -45, + axisLine: { + lineStyle: { + color: [ + [1, '#122B3C'] + ], + width: 3 + } + }, + axisLabel: { + show: false + }, + axisTick: { + show: false + }, + splitLine: { + show: false + }, + detail: { + show: false + }, + title: { + show: false + } + }, + { + name: '闂撮殧鏉″舰', + type: 'gauge', + radius: '52.5%', + z: 4, + splitNumber: 35, + startAngle: 225, + endAngle: -45, + axisLine: { + lineStyle: { + opacity: 0 + } + }, + axisLabel: { + show: false + }, + axisTick: { + show: false, + length: 20, + splitNumber: 1, + lineStyle: { + color: '#122B3C', + width: 1 + } + }, + splitLine: { + show: false + }, + detail: { + show: false + }, + title: { + show: false + } + }, + { + name: '鏁版嵁', + type: 'gauge', + radius: '52.5%', + z: 3, + startAngle: 225, + max: 300, + endAngle: -45, + axisLine: { + lineStyle: { + color: [ + [_this.rapidfeed / 300, '#31F3FF'], // 鍔ㄦ�� + [1, '#185363'] + ], + width: 4 + } + }, + tooltip: { + show: false + }, + axisLabel: { + show: false + }, + axisTick: { + show: false + }, + splitLine: { + show: false + }, + detail: { + show: true, + fontWeight: 'bold', + fontSize: 12, + color: '#fff' + }, + pointer: { + show: true, + width: 3, + itemStyle:{ + color:'#fff' + } + }, + data: [{ + name: '', + value: _this.rapidfeed + }] + }, + // 鍐呭渾 + { + 'name': '鍐呭渾鐜�', + 'type': 'pie', + 'radius': ['4%', '2%'], + 'hoverAnimation': false, + tooltip: { + show: false + }, + cursor: 'default', + 'labelLine': { + 'normal': { + 'show': false + } + }, + itemStyle: { + color: '#fff' + }, + animation: false, + 'data': [1] + }, + // 鍐呭渾 + { + 'name': '鍐呭渾鐜�2', + 'type': 'pie', + 'radius': '2%', + 'hoverAnimation': false, + cursor: 'default', + tooltip: { + show: false + }, + 'labelLine': { + 'normal': { + 'show': false + } + }, + itemStyle: { + color: '#31F3FF' + }, + animation: false, + 'data': [1] + } + ] + } + mdcEquiMoniGauge4.setOption(mdcEquiMoniGaugeOption4) + } + }, + + handleCancel() { + this.$emit('close') + this.visible = false + // this.modalNode.removeEventListener('mouseleave', this.closeModal) + if(this.modalTimer){ + clearInterval(this.modalTimer) + this.modalTimer = null + } + if (this.timeout) { + clearTimeout(this.timeout) + this.timeout = null + } + }, + + timerModel(id) { + this.ee = id + this.modalTimer = setInterval(() => { + setTimeout(this.initData(this.ee), 0) + }, 1000 * 4) + }, + + initData(id) { + let _this = this + this.visible = true + // _this.drawLine() + getAction(this.url.mdcEquipmentDetailedInfo, { id: id }).then((res) => { + if (res.success) { + _this.resultData = res.result + _this.driverType = res.result.deviceType + _this.spindlebeilv = res.result.spindlebeilv + _this.feedbeilv = res.result.feedbeilv + _this.spindleload = res.result.spindleload + _this.rapidfeed = res.result.rapidfeed + _this.mdcDriveTypeParamConfigList = res.result.mdcDriveTypeParamConfigList + _this.xyzAliasesList = res.result.xyzAliasesList + this.$nextTick(() => { + _this.drawLine() + }) + // _this.initDeviceType(_this.resultData.deviceType) + } else { + // _this.$message.warn(res.message) + _this.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }) + }, + + getModalNode() { + // console.log(document.querySelector('.ant-modal-content')) + // this.modalNode = document.querySelector('.ant-modal-content') + // this.timeout = setTimeout(() => { + // this.modalNode.addEventListener('mouseleave', this.closeModal) + // }, 100) + }, + + closeModal() { + this.handleCancel() + }, + + mouseEnterItem(e){ + if (e.target.clientWidth >= e.target.scrollWidth) e.target.style.pointerEvents = 'none' // 闃绘榧犳爣浜嬩欢 pointer-events 灞炴�х敤浜庤缃厓绱犳槸鍚﹀榧犳爣浜嬩欢鍋氬嚭鍙嶅簲銆� + } + }, + beforeDestroy() { + clearInterval(this.modalTimer) + this.modalTimer = null + } + } +</script> + +<style scoped lang="less"> + body { + overflow-y: hidden !important; + } + + .full-modal { + .ant-modal { + top: 0; + padding-bottom: 0; + margin: 0; + background-color: #4a4a48 !important; + opacity: 0.9; + } + /deep/ .ant-modal-content { + display: flex; + flex-direction: column; + /*height: calc(100vh);*/ + background-color: #4a4a48; + } + .ant-modal-body { + flex: 1; + } + } + + /deep/ .ant-modal-content { + /*background: -moz-linear-gradient(left, rgba(0, 0, 0, 0.66) 0%, rgba(0, 0, 0, 0.27) 100%);*/ + /*background: -webkit-gradient(linear, left left, right right, color-stop(0%, rgba(0, 0, 0, 0.66)), color-stop(100%, rgba(0, 0, 0, 0.4)));*/ + /*background: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.66) 0%, rgba(0, 0, 0, 0.4) 100%);*/ + /*background: -o-linear-gradient(left, rgba(0, 0, 0, 0.66) 0%, rgba(0, 0, 0, 0.4) 100%);*/ + /*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: 1; + } + + /deep/ .ant-modal-close { + color: #1191b0; + font-size: 24px; + } + + /deep/ .ant-modal-close-x { + font-size: 24px; + } + + /deep/ .ant-modal-footer { + border-top: none; + } + + /deep/ .ant-descriptions { + border: 1px solid #16738d; + margin: 10px 0; + } + + /deep/ .ant-descriptions-title { + color: #fff; + padding: 10px; + margin-bottom: 0; + } + + /*/deep/ .ant-descriptions-view {*/ + /*padding: 0 20px;*/ + /*}*/ + + /deep/ .ant-descriptions-view .ant-descriptions-row .ant-descriptions-item { + padding-bottom: 5px; + } + + /deep/ .ant-descriptions-item-colon { + color: #fff; + /*width: 5.1vw;*/ + } + + /deep/ .ant-descriptions-item-content { + color: #fff; + border: 1px solid #4bcfc8; + padding: 0 10px; + min-width: 130px; + } + + .mdcEquipMon { + color: #fff; + } + + /deep/ .ant-descriptions-item-label{ + width: 6.7vw; + text-align: right; + margin-right: 10px; + } + + /deep/ .operationData .ant-descriptions-item-content, + .lsv2Data .ant-descriptions-item-content + { + width: 130px; + vertical-align: bottom; + } + + .description-item-class{ + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } +</style> -- Gitblit v1.9.3