From e055d2d93b516985fbc2df0f6f5a135f3230cccf Mon Sep 17 00:00:00 2001
From: qushaowei <qushaowei@163.com>
Date: 星期四, 14 三月 2024 11:13:47 +0800
Subject: [PATCH] Merge branch 'master' of http://117.34.109.166:18448/r/vue_mdc_430 into develop

---
 src/views/WorkshopSignage.vue |  267 +++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 206 insertions(+), 61 deletions(-)

diff --git a/src/views/WorkshopSignage.vue b/src/views/WorkshopSignage.vue
index c9209c4..c803017 100644
--- a/src/views/WorkshopSignage.vue
+++ b/src/views/WorkshopSignage.vue
@@ -1,32 +1,49 @@
 <template>
   <dv-full-screen-container class="full-screen-container">
-    <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-space>
-        <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>
+    <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>
 
-    <dv-border-box-8>
-      <div class="content-container" ref="deviceContainerRef">
+          <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>-->
+            <!--&lt;!&ndash;<a-checkbox :checked="item.checked" @change="checkboxChange(item)"></a-checkbox>&ndash;&gt;-->
+            <!--<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"
@@ -38,11 +55,13 @@
           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)">
@@ -73,15 +92,15 @@
               ></div>
             </div>
             <div class="device-id" id="deviceId"
-                 :style="{ fontSize: item.fontSize + 'px',color:workshopDetails.equipmentIdColor }">
+                 :style="{ color:workshopDetails.equipmentIdColor }">
               {{ item.equipmentId }}
             </div>
           </div>
         </VueDragResize>
       </div>
-    </dv-border-box-8>
 
-    <EquipmentDetailModal ref="EquipmentDetailModal"></EquipmentDetailModal>
+      <EquipmentDetailModal ref="EquipmentDetailModal"></EquipmentDetailModal>
+    </div>
   </dv-full-screen-container>
 </template>
 
@@ -110,6 +129,10 @@
         isSwitchChecked: false, // 鏄惁寮�鍚姛鑳�
         timingAcquisition: null, // 瀹氭椂鍒锋柊鏄惁寮�鍚�
         parentH: 5000,//鐖剁骇楂樺害
+        parentW: 1920,//鐖剁骇瀹藉害
+        showGuideline: 'none',
+        guidelineXTop: 0,
+        guidelineYLeft: 0,
         deviceList: [
           // {
           //   equipmentId: '123213213123232',// 璁惧ID
@@ -118,35 +141,47 @@
           //   coordinateLeft: 100, // 鎷栨嫿鍏冪礌璺濈洅瀛愬乏渚ц窛绂�
           //   vw: 100,  // 缂╂斁鍏冪礌瀹藉害
           //   vh: 100, // 缂╂斁鍏冪礌楂樺害
-          //   fontSize: 12, // 缂╂斁鍏冪礌瀛椾綋澶у皬
           //   equipmentStatus: 1 // 璁惧鐘舵�� 0:鍏虫満 22:鎶ヨ 2:寰呮満 3:杩愯 寮�鏈�:1锛堟病鏈夊洓鑹茬伅鏍囪瘑褰掍负寰呮満锛�
           // }
         ], // 璁惧淇℃伅鍒楄〃
+        deviceList_copy: [],
         deviceStatusList: [
+          // {
+          //   label: '鍏ㄩ儴',
+          //   value: 99,
+          //   color: '#fff',
+          //   checked: true
+          // },
           {
             label: '鍏虫満',
             value: 0,
-            color: '#A8A8A8'
+            color: '#A8A8A8',
+            checked: false
           },
           {
             label: '寰呮満',
             value: 2,
-            color: '#FFFF00'
+            color: '#FFFF00',
+            checked: false
           },
           {
             label: '杩愯',
             value: 3,
-            color: '#00EE00'
+            color: '#00EE00',
+            checked: false
           },
           {
             label: '鎶ヨ',
             value: 22,
-            color: '#FF0000'
+            color: '#FF0000',
+            checked: false
           }
         ],// 璁惧鐘舵�佹寚绀虹伅鍒楄〃锛�
-        windowHeight: null,// 褰撳墠娴忚鍣ㄥ彲瑙嗗尯鍩熼珮搴︼紙锛堜笉鍖呮嫭宸ュ叿鏍忋�佷功绛俱�佸簳閮ㄤ换鍔℃爮锛夛紝杩涘叆椤甸潰鏃惰绠椾竴娆★紝闄ら潪閲嶆柊鍔犺浇椤甸潰鍚﹀垯娴忚鍣ㄥ彲瑙嗗尯鍩熼珮搴﹀垯涓嶅彂鐢熸敼鍙�
+        windowHeight: null,// 褰撳墠娴忚鍣ㄥ彲瑙嗗尯鍩熼珮搴︼紙锛堜笉鍖呮嫭宸ュ叿鏍忋�佷功绛俱�佸簳閮ㄤ换鍔℃爮锛�
         isFullScreen: false,// 杩涘叆鐪嬫澘椤甸潰鏃舵槸鍚︿负鍏ㄥ睆妯″紡锛屼笉鍖呮嫭姝e父妯″紡杩涘叆鍚庡垏鎹负鍏ㄥ睆妯″紡
-        parentLimitation: false// 鎷栨嫿鍖哄煙鏄惁闄愬埗鍦ㄧ埗鍏冪礌鍖哄煙鍐�
+        parentLimitation: false,// 鎷栨嫿鍖哄煙鏄惁闄愬埗鍦ㄧ埗鍏冪礌鍖哄煙鍐�,
+        checkedStatusCount: null,// 宸插嬀閫夌瓫閫夌姸鎬佷釜鏁�
+        imgSrc: ''// 杞﹂棿鍥剧焊鍦板潃
       }
     },
     watch: {
@@ -176,6 +211,7 @@
         api.getDeviceListInWorkshopSignagePageApi(id).then((res) => {
           if (res.result && res.result.length > 0) {
             this.deviceList = res.result
+            this.deviceList_copy = res.result
           }
         })
       },
@@ -187,12 +223,13 @@
       getWorkshopDetailsByApi(id) {
         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.imgSrc = this.getImgView(this.workshopDetails.backgroundImage)
           this.$refs.deviceContainerRef.style.height = (this.windowHeight - this.pageHeaderHeight) + 'px'
-          this.parentH = this.windowHeight - this.pageHeaderHeight
+          // this.parentH = this.windowHeight - this.pageHeaderHeight
+          this.parentH = 900
           this.parentLimitation = true // 鍦ㄧ埗鍏冪礌楂樺害璁剧疆鍚庡啀璁剧疆闄愬埗鎷栨嫿鍖哄煙锛屼笉杩欐牱鏈夋鐜囧鑷寸埗鍏冪礌楂樺害鏈缃氨闄愬埗鎷栨嫿
         })
       },
@@ -252,10 +289,13 @@
         // } 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
       },
 
       /**
@@ -264,7 +304,8 @@
        * @returns {number} 璁惧鏁伴噺
        */
       getDeviceNumberByStatus(value) {
-        return this.deviceList.filter((item) => item.equipmentStatus === value).length
+        if (value === 99) return this.deviceList_copy.length
+        return this.deviceList_copy.filter((item) => item.equipmentStatus === value).length
       },
 
       /**
@@ -297,8 +338,87 @@
        * 娴忚鍣ㄥ昂瀵稿彂鐢熸敼鍙樻椂瑙﹀彂
        */
       handleWindowSizeChange() {
-        this.isFullScreen = !this.isFullScreen
-        if (!this.isFullScreen) location.reload() // 濡傛灉涓哄叏灞忔ā寮忥紝鍒欏湪鍒囨崲妯″紡鏃堕噸鏂板姞杞介〉闈互閲嶆柊鑾峰彇娴忚鍣ㄥ彲瑙嗗尯鍩熼珮搴�
+        // 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() {
@@ -306,6 +426,7 @@
         this.getDeviceListByApi(this.$route.params.id)
         this.getWorkshopDetailsByApi(this.$route.params.id)
       }
+      this.checkedStatusCount = this.deviceStatusList.length - 1
     },
     mounted() {
       // 绂佹鐢ㄦ埛閫変腑鍐呭
@@ -317,7 +438,7 @@
         document.body.clientHeight
 
       // 鍒ゆ柇娴忚鍣ㄥ彲瑙嗗尯鍩熼珮搴︽槸鍚︾瓑浜庡垎杈ㄧ巼锛岃嫢鐩哥瓑鍒欒〃绀鸿繘鍏ユ椂娴忚鍣ㄤ负鍏ㄥ睆妯″紡
-      if (this.windowHeight === screen.height) this.isFullScreen = true
+      // if (this.windowHeight === screen.height) this.isFullScreen = true
 
       window.addEventListener('resize', this.handleWindowSizeChange)
     },
@@ -336,38 +457,41 @@
     color: #fff;
 
     .page-header {
-      font-size: 50px;
-      text-align: center;
-      position: relative;
+      /*font-size: 50px;*/
+      /*text-align: center;*/
+      /*position: relative;*/
 
       .header-left {
-        width: 450px;
-        position: absolute;
-        left: 0;
-        top: 35px;
+        height: 100%;
         display: flex;
-        justify-content: space-evenly;
+        justify-content: center;
         align-items: center;
-        font-size: 16px;
+        padding-top: 20px;
+      }
+
+      .workshop-name {
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        font-size: 50px;
       }
 
       .device-status-info {
-        font-size: 16px;
-        width: 400px;
-        position: absolute;
-        top: 40px;
-        right: 40px;
+        height: 100%;
         display: flex;
+        justify-content: flex-end;
         align-items: center;
-        justify-content: space-between;
+        padding-top: 20px;
 
         .single-status-info {
+          margin: 10px;
+          cursor: pointer;
 
           .status-square {
             width: 14px;
             height: 14px;
             border: 1px solid #fff;
-            border-radius: 2px;
+            border-radius: 3px;
           }
         }
       }
@@ -377,6 +501,22 @@
       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;
@@ -418,4 +558,9 @@
       }
     }
   }
+
+  /deep/ .ant-checkbox-inner {
+    background-color: transparent;
+    border-color: #fff;
+  }
 </style>
\ No newline at end of file

--
Gitblit v1.9.3