From 3caa6f535e0442143d0e313a723de03472028213 Mon Sep 17 00:00:00 2001
From: eight <641137800@qq.com>
Date: 星期五, 16 八月 2024 18:18:33 +0800
Subject: [PATCH] 医生选择诊室和工位 PASS

---
 src/views/ecg/room/RoomLoginSelect.vue |   17 ++++++++
 src/store/modules/user.ts              |   50 +++++++++++++++++++++++++
 src/permission.ts                      |   20 +++++++---
 3 files changed, 81 insertions(+), 6 deletions(-)

diff --git a/src/permission.ts b/src/permission.ts
index b04bc3c..a2e58d1 100644
--- a/src/permission.ts
+++ b/src/permission.ts
@@ -80,12 +80,20 @@
         permissionStore.getAddRouters.forEach((route) => {
           router.addRoute(route as unknown as RouteRecordRaw) // 鍔ㄦ�佹坊鍔犲彲璁块棶璺敱琛�
         })
-        const redirectPath = from.query.redirect || to.path
-        // 淇璺宠浆鏃朵笉甯﹀弬鏁扮殑闂
-        const redirect = decodeURIComponent(redirectPath as string)
-        const { paramsObject: query } = parseURL(redirect)
-        const nextData = to.path === redirect ? { ...to, replace: true } : { path: redirect, query }
-        next(nextData)
+
+        // 鏂板銆愯瘖瀹ら�夋嫨銆戦�昏緫
+        if (userStore.getRoles.includes("doctor") && !userStore.getIsSetRoom ) {
+          next({path: "/login-room-select"})
+        }
+        // <<<銆愯瘖瀹ら�夋嫨銆�<<<
+        else {
+          const redirectPath = from.query.redirect || to.path
+          // 淇璺宠浆鏃朵笉甯﹀弬鏁扮殑闂
+          const redirect = decodeURIComponent(redirectPath as string)
+          const {paramsObject: query} = parseURL(redirect)
+          const nextData = to.path === redirect ? {...to, replace: true} : {path: redirect, query}
+          next(nextData)
+        }
       } else {
         next()
       }
diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts
index b386180..2d5600b 100644
--- a/src/store/modules/user.ts
+++ b/src/store/modules/user.ts
@@ -3,6 +3,7 @@
 import { getAccessToken, removeToken } from '@/utils/auth'
 import { CACHE_KEY, useCache, deleteUserCache } from '@/hooks/web/useCache'
 import { getInfo, loginOut } from '@/api/login'
+import {RoomVO} from "@/api/ecg/room";
 
 const { wsCache } = useCache()
 
@@ -19,6 +20,10 @@
   roles: string[]
   isSetUser: boolean
   user: UserVO
+
+  // 鍖荤敓璇婂閫夋嫨
+  isSetRoom: boolean
+  room: RoomVO
 }
 
 export const useUserStore = defineStore('admin-user', {
@@ -31,6 +36,15 @@
       avatar: '',
       nickname: '',
       deptId: 0
+    },
+    // 鍖荤敓璇婂閫夋嫨
+    isSetRoom: false,
+    room: {
+      id: 0,
+      roomId: 0,
+      roomName: "",
+      bedNo: "",
+      onstage: true
     }
   }),
   getters: {
@@ -45,6 +59,13 @@
     },
     getUser(): UserVO {
       return this.user
+    },
+    // 鍖荤敓璇婂閫夋嫨
+    getIsSetRoom(): boolean {
+      return this.isSetRoom
+    },
+    getRoom(): RoomVO {
+      return this.room
     }
   },
   actions: {
@@ -64,6 +85,26 @@
       wsCache.set(CACHE_KEY.USER, userInfo)
       wsCache.set(CACHE_KEY.ROLE_ROUTERS, userInfo.menus)
     },
+    // 鍖荤敓璇婂閫夋嫨
+    async setRoomInfoAction(room: RoomVO) {
+      if (!getAccessToken()) {
+        this.resetState()
+        return null
+      }
+
+      // 鏇存柊 store
+      this.room = room
+      this.isSetRoom = true
+
+      // 鏇存柊 cache
+      const userInfo2 = wsCache.get(CACHE_KEY.USER)
+      if (userInfo2) {
+        userInfo2.room = room
+        userInfo2.isSetRoom = true
+        wsCache.set(CACHE_KEY.USER, userInfo2)
+      }
+    },
+
     async setUserAvatarAction(avatar: string) {
       const userInfo = wsCache.get(CACHE_KEY.USER)
       // NOTE: 鏄惁闇�瑕佸儚`setUserInfoAction`涓�鏍峰垽鏂璥userInfo != null`
@@ -94,6 +135,15 @@
         nickname: '',
         deptId: 0
       }
+      // 鍖荤敓璇婂閫夋嫨
+      this.isSetRoom = false
+      this.room = {
+        id: 0,
+        roomId: 0,
+        roomName: "",
+        bedNo: "",
+        onstage: true
+      }
     }
   }
 })
diff --git a/src/views/ecg/room/RoomLoginSelect.vue b/src/views/ecg/room/RoomLoginSelect.vue
index 44d3009..4b1c033 100644
--- a/src/views/ecg/room/RoomLoginSelect.vue
+++ b/src/views/ecg/room/RoomLoginSelect.vue
@@ -6,14 +6,21 @@
       </div>
     </div>
     <el-button type="primary" @click="roomConfirm">纭</el-button>
+    <el-button type="primary" @click="test">TEST</el-button>
   </div>
 </template>
 
 <script setup lang="ts">
 import {RoomBedSelect} from "@/components/RoomBedSelect"
 import { RoomApi, RoomVO } from '@/api/ecg/room'
+import {useUserStore} from "@/store/modules/user";
+import {CACHE_KEY, useCache} from "@/hooks/web/useCache";
+const { currentRoute, push } = useRouter()
+const { wsCache } = useCache()
 
 defineOptions({ name: 'RoomLoginSelect' })
+
+const userStore = useUserStore()
 
 const bedMap = ref<Map<String, RoomVO[]>>() // 鍒楄〃鐨勬暟鎹�
 
@@ -33,6 +40,16 @@
 
 const roomConfirm = () => {
   console.info(curSel.value)
+  userStore.setRoomInfoAction(curSel.value)
+  push({ path: "/"})
+}
+
+const test = () => {
+  userStore.getRoom;
+  console.info(userStore.getRoom);
+
+  const userInfo = wsCache.get(CACHE_KEY.USER)
+  console.info(userInfo);
 }
 
 /** 鍒濆鍖� **/

--
Gitblit v1.9.3