From c6d3157eb616116c84d35e221ed9c57ef8da0ad6 Mon Sep 17 00:00:00 2001
From: long <515897141@qq.com>
Date: 星期四, 01 二月 2024 16:24:11 +0800
Subject: [PATCH] 操作频繁锁(60秒)

---
 src/pages/room/detail.vue |  197 +++++++++++++++++++++++++++++++++++++------------
 1 files changed, 148 insertions(+), 49 deletions(-)

diff --git a/src/pages/room/detail.vue b/src/pages/room/detail.vue
index 13df298..b385645 100644
--- a/src/pages/room/detail.vue
+++ b/src/pages/room/detail.vue
@@ -24,9 +24,11 @@
     <div class="page_header_placeholer" />
     <!-- 鏈湁瀹夋帓 -->
     <div v-if="(!occupyInfoViewArr || !occupyInfoViewArr.length) && (!assignTreatListView || !assignTreatListView.length)" class="page_container flex flex-1">
-      <div class="main flex-1">
+      <div class="main flex-1 flex flex-col">
         <div v-if="roomInfo && roomInfo.roomNo" class="room_title">{{ roomInfo.roomNo }}</div>
-        <div v-if="roomInfo" class="room_main_tip" style="margin-top: 93px;line-height: 186px;font-size: 140px;">-{{ statusTx[roomInfo.status] }}-</div>
+        <div class="flex-1" />
+        <div v-if="roomInfo" class="room_main_tip" style="line-height: 186px;font-size: 140px;margin-top: 0">-{{ statusTx[roomInfo.status] }}-</div>
+        <div class="flex-1" />
         <div class="btn_box flex flex-center">
           <div class="flex flex-ver">
             <div class="btn_box__item flex flex-center white" data-tx="绌洪棽" data-status="0" @click="statusChg">
@@ -87,7 +89,7 @@
     <div v-if="occupyInfoViewArr && occupyInfoViewArr.length" class="page_container flex flex-1" :class="[occupyInfoViewArr && occupyInfoViewArr.length>1?'over-width':'']">
       <div class="flex flex-1">
         <div v-for="(item,index) in occupyInfoViewArr" :key="index" class="main flex-1">
-          <div v-if="occupyInfoViewArr.length>1" class="cancel_icon_block" @click="cancelCustomerItem(item)">
+          <div v-if="occupyInfoViewArr.length>1 && item.treatRoomStatus === 0" class="cancel_icon_block" @click="cancelCustomerItem(item)">
             <img class="img" src="static/imgs/cancel.png">
           </div>
           <XioRoomGuestInfoBox :ref="`XioRoomGuestInfoBox_${item.id}`" :room-info="roomInfo" :occupy-info-view="item" :off-narcosis-ids="offNarcosisIds" @setStatus="setComStatus" />
@@ -95,7 +97,7 @@
       </div>
       <div class="right flex flex-col">
         <div v-for="(item,index) in occupyInfoViewArr" :key="index" class="flex-1 right_room_info">
-          <XioRoomInfoBlock ref="XioRoomInfoBlock" :occupy-info-view="item" />
+          <XioRoomInfoBlock ref="XioRoomInfoBlock" :occupy-info-view="item" :occupy-info-view-arr="occupyInfoViewArr" />
         </div>
         <div v-if="occupyInfoViewArr.length<=1" class="flex flex-col" style="border-radius: 10px;">
           <XioRoomGuestBox ref="XioRoomGuestBox" :assign-treat-list-view-com="assignTreatListView" @selectCustomer="selectCustomer" />
@@ -154,22 +156,24 @@
       timeObj: {}, // week锛氭槦鏈燂紝date锛氬勾鏈堟棩锛宼imeMin锛氭椂鍒嗭紝time锛氭椂鍒嗙锛宼imeStamp锛氭椂闂存埑
       curTreatId: '',
       curTreatIds: '', // 宸查�変腑鐨勬不鐤楄褰昳d鏁扮粍
-      offNarcosisIds: [] // 鏄惁宸查�氱煡鍗搁夯鐨勭敤鎴穒d鏁扮粍
+      offNarcosisIds: [], // 鏄惁宸查�氱煡鍗搁夯鐨勭敤鎴穒d鏁扮粍
       // isShowAppellationName: true // 鏄惁鏄剧ず绉拌皳
+
+      // 60绉掑垏鎹㈢姸鎬侀攣 鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌
+      setStatusLock: false, // 鏇存柊鐘舵�侀攣
+      setStatusLockDuration: 60000, // 鏇存柊鐘舵�侀攣鏃堕棿
+      setStatusLockTimer: null
+      // 60绉掑垏鎹㈢姸鎬侀攣 鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈
     }
   },
   computed: {
     // 褰撳墠宸查�夋嫨鐢ㄦ埛鐨勬暟缁勬暟鎹�
     occupyInfoViewArr() {
-      // 缂撳瓨璁板綍
-      if (this.curTreatIds && this.curTreatIds.length) {
-        // todo 瀛樺湪缂撳瓨涓斿瓨鍦ㄥ崰鐢ㄦ暟鎹殑鏃跺�欙紝鏍规嵁鍚庣杩斿洖鍐嶈ˉ鍏呴�昏緫
-        return this.getCurTreatArr(this.curTreatIds)
+      if (this.occupyInfo && this.occupyInfo.length) {
+        return this.occupyInfoViewArrIdsHandleArr()
       } else {
-        // todo 瀛樺湪鍗犵敤鏁版嵁鐨勬椂鍊欙紝鏍规嵁鍚庣杩斿洖鍐嶈ˉ鍏呴�昏緫
-        if (this.occupyInfo) {
-          this.occupyInfoViewArrIdsHandle(this.occupyInfo)
-          return [this.occupyInfo]
+        if (this.curTreatIds && this.curTreatIds.length) {
+          return this.getCurTreatArr(this.curTreatIds)
         } else {
           if ((!isUseDefault || (isUseDefault && isUseDefaultChg === 0)) && this.assignTreatList && this.assignTreatList.length) {
             isUseDefault = true
@@ -195,7 +199,7 @@
         } else {
           // 杩樻病浣跨敤榛樿瀹汉鍊兼垨鑰呭凡浣跨敤榛樿瀹汉鍊艰繕娌℃敼鍙樼姸鎬侊紙閫傞厤杞锛�
           if ((!isUseDefault || (isUseDefault && isUseDefaultChg === 0)) && this.assignTreatList && this.assignTreatList.length) {
-            isUseDefault = true
+            // isUseDefault = true
             return this.assignTreatList[0]
           // 宸蹭娇鐢ㄨ繃榛樿瀹汉鍊�
           } else {
@@ -273,6 +277,32 @@
       this.curTreatIds.push(item.id)
       this.setLocalCurTreatIds()
     },
+    // 鍒濆榛樿閫夋嫨鐨刬d鏁扮粍澶勭悊
+    occupyInfoViewArrIdsHandleArr() {
+      if (!this.curTreatIds) {
+        this.curTreatIds = []
+      }
+      if (this.occupyInfo && this.occupyInfo.length === 1) {
+        var res = []
+        res.push(this.occupyInfo[0])
+        if (this.curTreatIds && this.curTreatIds.length) {
+          this.curTreatIds = this.curTreatIds.filter((o) => { return o !== this.occupyInfo[0].id })
+          if (this.assignTreatList && this.assignTreatList.length && this.curTreatIds && this.curTreatIds.length) {
+            var curTreatItem = this.assignTreatList.find((o) => { return o.id === this.curTreatIds[0] })
+            if (curTreatItem) {
+              res.push(curTreatItem)
+            }
+          }
+        }
+        this.setLocalCurTreatIds()
+        return res
+      } else if (this.occupyInfo && this.occupyInfo.length > 1) {
+        this.occupyInfo.forEach((o) => {
+          this.curTreatIds.push(o.id)
+        })
+        return this.occupyInfo
+      }
+    },
     // 璁剧疆宸查�氱煡鍗搁夯id鏁扮粍
     setLocalStorageOffNarcosisIds() {
       localStorage.setItem('offNarcosisIds', JSON.stringify(this.offNarcosisIds))
@@ -320,6 +350,13 @@
             })
           }
         })
+        // 鍩烘湰涓嶄細鍑虹幇杩欑鎯呭喌锛屼絾鏄互闃蹭竾涓�锛岃嫢鏈湴缂撳瓨id瀛樺湪锛屼絾瀵逛笉涓婂垪琛ㄥ垯缂撳瓨绗竴鏉℃暟鎹甶d
+        if (!arr.length) {
+          arr.push(this.assignTreatList[0])
+          this.curTreatIds = []
+          this.curTreatIds.push(this.assignTreatList[0].id)
+          this.setLocalCurTreatIds()
+        }
       }
       return arr
     },
@@ -360,6 +397,7 @@
                 userName: '榛勫槈鑽�',
                 gender: 1,
                 hempStatus: 2,
+                treatRoomStatus: 0,
                 ciq: '123',
                 adviserName: 'a鍚�',
                 aDoctorName: 'b鍚�',
@@ -373,6 +411,7 @@
                 userName: '鏉庡痉鍗�',
                 gender: 1,
                 hempStatus: 2,
+                treatRoomStatus: 0,
                 ciq: '456',
                 adviserName: 'd鍚�',
                 aDoctorName: 'e鍚�',
@@ -386,6 +425,7 @@
                 userName: '鐚涘鍙�',
                 gender: 2,
                 hempStatus: 2,
+                treatRoomStatus: 0,
                 ciq: '789',
                 adviserName: 'g鍚�',
                 aDoctorName: 'h鍚�',
@@ -408,18 +448,17 @@
               o.appellationName = o.userName[0] + `${o.gender ? ['濂冲+', '鍏堢敓', '濂冲+'][o.gender] : '濂冲+'}`
             })
           }
-          // todo 宸插崰鐢ㄧ敤鎴锋暟鎹鐞嗭紝寰呭悗绔慨鏀瑰啀澶勭悊
-          if (res.data.occupyInfo && res.data.occupyInfo.userName) {
-            res.data.occupyInfo.appellationName = res.data.occupyInfo.userName[0] + `${res.data.occupyInfo.gender ? ['濂冲+', '鍏堢敓', '濂冲+'][res.data.occupyInfo.gender] : '濂冲+'}`
+          if (res.data.occupyInfo && res.data.occupyInfo.length) {
+            res.data.occupyInfo.forEach((o) => {
+              // 娌荤枟鏃堕棿澶勭悊
+              var st = (o.startTime).split(' ')[1].split(':')
+              o.startTime = `${st[0]}:${st[1]}`
+              // 绉拌皳澶勭悊
+              o.appellationName = o.userName[0] + `${o.gender ? ['濂冲+', '鍏堢敓', '濂冲+'][o.gender] : '濂冲+'}`
+            })
           }
-          // todo 宸叉湁鍗犵敤鐨勶紝鏇存敼宸蹭娇鐢ㄩ粯璁ゅ浜虹殑鐘舵��
-          res.data.occupyInfo && (isUseDefaultChg = 1)
-          res.data.occupyInfo && (isUseDefault = 1)
-          // todo 鍗犵敤淇℃伅娌荤枟鏃堕棿澶勭悊
-          if (res.data.occupyInfo && res.data.occupyInfo.startTime) {
-            var ost = (res.data.occupyInfo.startTime).split(' ')[1].split(':')
-            res.data.occupyInfo.startTime = `${ost[0]}:${ost[1]}`
-          }
+          res.data.occupyInfo && res.data.occupyInfo.length && (isUseDefaultChg = 1)
+          res.data.occupyInfo && res.data.occupyInfo.length && (isUseDefault = 1)
           for (const key in res.data) {
             this[key] = res.data[key]
           }
@@ -497,17 +536,71 @@
     },
     // 鏀瑰彉鎴块棿鐘舵�佸紓姝ユ柟娉�
     changeStatusFn(item = {}, status, cb) {
+      // 鏈В閿� 20240201 long
+      if (this.setStatusLock) {
+        return this.$messageWarn('鎿嶄綔棰戠箒锛岃绋嶅悗鍐嶈瘯')
+      }
+      this.setStatusLock = true
+      clearInterval(this.setStatusLockTimer)
+      this.setStatusLockTimer = null
+
       var params = {}
-      // 鏇存敼鐨勭姸鎬�
-      params.status = status * 1
       // 鎴块棿id
       if (this.id) {
         params.shopRoomId = this.id
       }
-      // 娌荤枟璁板綍id
+      // 娌荤枟璁板綍id this.curTreatIds occupyInfoViewArr
+      // 1.浣跨敤涓�/鏁烽夯涓� 鏁烽夯涓� 2 浜哄崰鐢�
+      // 2.浣跨敤涓�/浣跨敤涓� 浣跨敤涓� 2 浜哄崰鐢�
+      // 3.浣跨敤涓�/浼戞伅涓�  浣跨敤涓� 1 浜哄崰鐢�
+      var arr = JSON.parse(JSON.stringify(this.occupyInfoViewArr))
       if (item && item.id) {
-        params.treatRecordId = item.id
+        if (arr && arr.length) {
+          arr.forEach((o) => {
+            if (o.id === item.id) {
+              o.treatRoomStatus = status * 1
+            }
+          })
+          // 鏄惁鏈変汉浣跨敤涓�
+          var status_1 = arr.find((o) => { return o.treatRoomStatus === 1 })
+          // 鏄惁鏈夊浜轰紤鎭�
+          var status_2 = arr.find((o) => { return o.treatRoomStatus === 2 })
+          // 鏄惁鏈変汉鎵撴壂涓�
+          var status_3 = arr.find((o) => { return o.treatRoomStatus === 3 })
+          // 鏄惁鏈変汉鏁烽夯
+          var status_4 = arr.find((o) => { return o.treatRoomStatus === 4 })
+          // 鏇存敼鐨勭姸鎬� 鏁烽夯涓� > 浣跨敤涓� > 浼戞伅涓� > 寰呮墦鎵�
+          params.status = status * 1
+          if (status_3) {
+            params.status = 3
+          }
+          if (status_2) {
+            params.status = 2
+          }
+          if (status_1) {
+            params.status = 1
+          }
+          if (status_4) {
+            params.status = 4
+          }
+        }
+
+        // 褰撳墠閫夋嫨瀹㈡埛鐨勬暟缁勫垹闄ゅ鎴�
+        this.occupyInfoViewArrDataHandle('cancel', item)
+        params.treatRoomList = []
+        if (arr && arr.length) {
+          arr.forEach((o) => {
+            params.treatRoomList.push({
+              treatRecordId: o.id,
+              status: o.treatRoomStatus
+            })
+          })
+        }
+      } else {
+        // 鏇存敼鐨勭姸鎬�
+        params.status = status * 1
       }
+
       Req.http.post({
         url: 'guide/treat/screen/room/status/update',
         data: params,
@@ -523,28 +616,25 @@
           console.log('鍦ㄥ凡鏈夐粯璁ゅ浜虹殑鎯呭喌涓嬶紝鏀瑰彉鐘舵�佹洿鏀规爣璇�')
           isUseDefaultChg = 1
         }
-        // 褰撳墠閫変腑鐨勭敤鎴锋埧闂存洿鏀逛簡鐘舵�侊紝宸茬粡鎴愪负鍗犵敤鏃讹紝娓呴櫎閫変腑鍖荤枟璁板綍id
-        // if (item && item.id && item.id === this.curTreatId) {
-        //   console.log('褰撳墠閫変腑鐨勭敤鎴锋埧闂存洿鏀逛簡鐘舵�侊紝宸茬粡鎴愪负鍗犵敤鏃讹紝娓呴櫎閫変腑鍖荤枟璁板綍id')
-        //   localStorage.removeItem('curTreatId')
-        //   this.curTreatId = ''
-        // }
         // 鍙鏇存敼涓虹┖闂插氨閲嶇疆鍙傛暟
-        if (status === 0) {
+        if (params.status === 0) {
           console.log('鎴块棿鏇存敼涓虹┖闂�')
           // 閲嶇疆榛樿宸蹭娇鐢ㄥ浜虹殑鍙傛暟
           isUseDefault = false
           isUseDefaultChg = 0
           // this.isShowAppellationName = true
         }
-        // todo 鐢ㄦ埛缁撴潫娌荤枟鍚庯紝灏嗗叾浠庣紦瀛樹腑鍒犻櫎, 寰呮祴璇�
-        if (item && item.id && this.curTreatIds && this.curTreatIds.length && status === 0) {
-          console.log('褰撳墠鐢ㄦ埛鎵�鍦ㄦ埧闂存洿鏀逛簡鐘舵�佷负缁撴潫锛屾竻闄ゅ綋鍓嶇殑鍖荤枟璁板綍id')
-          // 褰撳墠閫夋嫨瀹㈡埛鐨勬暟缁勫垹闄ゅ鎴�
-          this.occupyInfoViewArrDataHandle('cancel', item)
-        }
         // console.log('8888888888888888888888888888888888', res)
         cb && cb()
+
+        // 30s鍚庤В閿� 20240201 long
+        this.setStatusLockTimer = setInterval(() => {
+          this.setStatusLock = false
+        }, this.setStatusLockDuration)
+      }, () => {
+        setTimeout(() => {
+          this.setStatusLock = false
+        }, 1000)
       })
     },
     // 閲嶇疆鐘舵��
@@ -597,12 +687,12 @@
       // 褰撳墠閫夋嫨瀹㈡埛鐨勬暟缁勫鍔犲鎴�
       this.occupyInfoViewArrDataHandle('add', opt)
       // 閲嶇疆鎴块棿鐘舵��
-      if (this.roomInfo) {
-        this.changeStatusFn({}, 0, () => {
-          // 鍒锋柊璇︽儏
-          this.getData()
-        })
-      }
+      // if (this.roomInfo) {
+      //   this.changeStatusFn({}, 0, () => {
+      //     // 鍒锋柊璇︽儏
+      //     this.getData()
+      //   })
+      // }
       // 鍏抽棴寮圭獥
       this.$refs['XioCustomerSelect'].hideDialog()
     },
@@ -622,6 +712,11 @@
           if (!flag) {
             this.curTreatIds.push(item.id)
           }
+          // 缂撳瓨
+          this.setLocalCurTreatIds()
+        }
+        if (this.curTreatIds && !this.curTreatIds.length) {
+          this.curTreatIds.push(item.id)
           // 缂撳瓨
           this.setLocalCurTreatIds()
         }
@@ -674,6 +769,9 @@
 }
 .page_header_placeholer {
   height: 100px;
+  width: 100%;
+  display: block;
+  flex-shrink: 0;
 }
 .page_header {
   position: fixed;
@@ -751,7 +849,8 @@
   color: rgba(154,154,154,1);
 }
 .page_container .main .btn_box {
-  margin-top: 130px;
+  /* margin-top: 130px; */
+  margin-bottom: 40px;
 }
 .page_container .main .btn_box__item {
   width: 250px;

--
Gitblit v1.8.0