From adae7524c986a758dd61bc5d0c23f6b922e299c7 Mon Sep 17 00:00:00 2001 From: Lius <Lius2225@163.com> Date: 星期四, 25 一月 2024 17:06:35 +0800 Subject: [PATCH] 加班管理添加字段 --- src/views/WorkshopSignage.vue | 210 +++++++++++++++++++++++++++++++++++----------------- 1 files changed, 141 insertions(+), 69 deletions(-) diff --git a/src/views/WorkshopSignage.vue b/src/views/WorkshopSignage.vue index d13018c..c9209c4 100644 --- a/src/views/WorkshopSignage.vue +++ b/src/views/WorkshopSignage.vue @@ -1,62 +1,87 @@ <template> <dv-full-screen-container class="full-screen-container"> - <header class="page-header"> - {{workshopDetails.workshopName}} - <div class="header-right" v-has="'home:saveDevicePositionAndSize'"> + <header class="page-header" :style="{height: pageHeaderHeight+'px'}"> + {{ workshopDetails.workshopName }} + <div class="header-left" v-has="'home:saveDevicePositionAndSize'" v-if="!isFullScreen"> <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-switch + checked-children="寮�" + un-checked-children="鍏�" + @change="handleSwitchChange" + v-model="isSwitchChecked" + :disabled="isSwitchChecked" + /> </a-space> - <a-button type="primary" icon="save" size="large" @click="saveDevicePositionAndSizeByApi" - >淇濆瓨浣嶇疆 - </a-button> + <a-button type="primary" icon="save" size="large" @click="saveDevicePositionAndSizeByApi">淇濆瓨浣嶇疆</a-button> + </div> + <div class="device-status-info"> + <a-space v-for="item in deviceStatusList" :key="item.value" class="single-status-info"> + <div>{{ item.label }}</div> + <div class="status-square" :style="{ backgroundColor: item.color }"></div> + <div>{{ getDeviceNumberByStatus(item.value) }}</div> + </a-space> </div> </header> <dv-border-box-8> <div class="content-container" ref="deviceContainerRef"> - <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="true" - :minw="100" - :minh="100" - :isDraggable="isDraggable" - :isResizable="isResizable" - :stickSize="6" + <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" + :minw="70" + :minh="70" + :isDraggable="isDraggable" + :isResizable="isResizable" + :stickSize="6" > - <div class="single-device" - :style="{width: item.vw+ 'px',height:item.vh+'px'}"> + <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)||require('@/assets/8.png')})`}" - class="device-image"></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) || require('@/assets/8.png')})` }" + class="device-image" + ></div> </div> - <div class="device-id" :style="{fontSize: item.fontSize+'px'}"> - {{item.equipmentId}} + <div class="device-id" id="deviceId" + :style="{ fontSize: item.fontSize + 'px',color:workshopDetails.equipmentIdColor }"> + {{ item.equipmentId }} </div> </div> </VueDragResize> - <div class="device-status-info"> - <div v-for="item in deviceStatusList" :key="item.value" class="single-status-info"> - <div>{{item.label}}</div> - <div class="status-square" :style="{backgroundColor:item.color}"></div> - <div>{{getDeviceNumberByStatus(item.value)}}</div> - </div> - </div> </div> </dv-border-box-8> + + <EquipmentDetailModal ref="EquipmentDetailModal"></EquipmentDetailModal> </dv-full-screen-container> </template> @@ -64,18 +89,27 @@ import VueDragResize from 'vue-drag-resize' import api from '@/api/mdc' import { getFileAccessHttpUrl } from '@/api/manage' + import EquipmentDetailModal from './mdc/base/modules/WorkshopSignage/EquipmentDetailModal' + import { message } from 'ant-design-vue' + + message.config({ + maxCount: 3 + }) export default { components: { - VueDragResize + VueDragResize, + EquipmentDetailModal }, data() { return { + pageHeaderHeight: 80,// 椤靛ご楂樺害 workshopDetails: {}, // 杞﹂棿璇︾粏淇℃伅, isDraggable: false, // 鏄惁寮�鍚嫋鎷� isResizable: false, // 鏄惁寮�鍚缉鏀� isSwitchChecked: false, // 鏄惁寮�鍚姛鑳� timingAcquisition: null, // 瀹氭椂鍒锋柊鏄惁寮�鍚� + parentH: 5000,//鐖剁骇楂樺害 deviceList: [ // { // equipmentId: '123213213123232',// 璁惧ID @@ -109,7 +143,10 @@ value: 22, color: '#FF0000' } - ] // 璁惧鐘舵�佹寚绀虹伅鍒楄〃 + ],// 璁惧鐘舵�佹寚绀虹伅鍒楄〃锛� + windowHeight: null,// 褰撳墠娴忚鍣ㄥ彲瑙嗗尯鍩熼珮搴︼紙锛堜笉鍖呮嫭宸ュ叿鏍忋�佷功绛俱�佸簳閮ㄤ换鍔℃爮锛夛紝杩涘叆椤甸潰鏃惰绠椾竴娆★紝闄ら潪閲嶆柊鍔犺浇椤甸潰鍚﹀垯娴忚鍣ㄥ彲瑙嗗尯鍩熼珮搴﹀垯涓嶅彂鐢熸敼鍙� + isFullScreen: false,// 杩涘叆鐪嬫澘椤甸潰鏃舵槸鍚︿负鍏ㄥ睆妯″紡锛屼笉鍖呮嫭姝e父妯″紡杩涘叆鍚庡垏鎹负鍏ㄥ睆妯″紡 + parentLimitation: false// 鎷栨嫿鍖哄煙鏄惁闄愬埗鍦ㄧ埗鍏冪礌鍖哄煙鍐� } }, watch: { @@ -136,7 +173,7 @@ */ getDeviceListByApi(id) { console.log('閲嶆柊鍒锋柊') - api.getDeviceListInWorkshopSignagePageApi(id).then(res => { + api.getDeviceListInWorkshopSignagePageApi(id).then((res) => { if (res.result && res.result.length > 0) { this.deviceList = res.result } @@ -148,9 +185,15 @@ * @param id 杞﹂棿Id */ getWorkshopDetailsByApi(id) { - api.getWorkshopDetailByWorkshopIdApi(id).then(res => { + api.getWorkshopDetailByWorkshopIdApi(id).then((res) => { this.workshopDetails = res.result - this.$refs.deviceContainerRef.style.backgroundImage = `url(${this.getImgView(this.workshopDetails.backgroundImage)})` + this.$refs.deviceContainerRef.style.backgroundImage = `url(${this.getImgView( + this.workshopDetails.backgroundImage + )})` + + this.$refs.deviceContainerRef.style.height = (this.windowHeight - this.pageHeaderHeight) + 'px' + this.parentH = this.windowHeight - this.pageHeaderHeight + this.parentLimitation = true // 鍦ㄧ埗鍏冪礌楂樺害璁剧疆鍚庡啀璁剧疆闄愬埗鎷栨嫿鍖哄煙锛屼笉杩欐牱鏈夋鐜囧鑷寸埗鍏冪礌楂樺害鏈缃氨闄愬埗鎷栨嫿 }) }, @@ -171,7 +214,7 @@ saveDevicePositionAndSizeByApi() { console.log('瑙﹀彂淇濆瓨') if (this.isOperatingDevice) { - api.saveDevicePositionAndSizeApi(this.deviceList).then(res => { + api.saveDevicePositionAndSizeApi(this.deviceList).then((res) => { if (res.code === 200) { this.$notification.success({ message: '娑堟伅', @@ -192,7 +235,6 @@ description: '璇峰紑鍚姛鑳藉悗鍐嶈繘琛屼繚瀛�' }) } - }, /** @@ -222,7 +264,7 @@ * @returns {number} 璁惧鏁伴噺 */ getDeviceNumberByStatus(value) { - return this.deviceList.filter(item => item.equipmentStatus === value).length + return this.deviceList.filter((item) => item.equipmentStatus === value).length }, /** @@ -233,6 +275,30 @@ 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() // 濡傛灉涓哄叏灞忔ā寮忥紝鍒欏湪鍒囨崲妯″紡鏃堕噸鏂板姞杞介〉闈互閲嶆柊鑾峰彇娴忚鍣ㄥ彲瑙嗗尯鍩熼珮搴� } }, created() { @@ -244,9 +310,19 @@ 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 } @@ -260,44 +336,32 @@ color: #fff; .page-header { - height: 80px; font-size: 50px; text-align: center; position: relative; - .header-right { + .header-left { width: 450px; position: absolute; - right: 0px; + left: 0; top: 35px; display: flex; justify-content: space-evenly; align-items: center; font-size: 16px; } - } - - .content-container { - position: relative; - width: 100%; - height: 100%; - background-repeat: no-repeat; - background-size: 100% 100%; .device-status-info { + font-size: 16px; width: 400px; position: absolute; - top: 5px; - right: 5px; + top: 40px; + right: 40px; display: flex; align-items: center; justify-content: space-between; .single-status-info { - width: 60px; - display: flex; - align-items: center; - justify-content: space-between; .status-square { width: 14px; @@ -307,6 +371,12 @@ } } } + } + + .content-container { + width: 100%; + background-repeat: no-repeat; + background-size: 100% 100%; .single-device { position: absolute; @@ -326,13 +396,16 @@ width: 100%; height: 100%; display: flex; - justify-content: space-between; + -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: 45px; - margin-right: 10px; + width: 10px; + height: 60%; + margin-right: 5px; } .device-image { @@ -343,7 +416,6 @@ } } } - } } </style> \ No newline at end of file -- Gitblit v1.9.3