src/api/ecg/doctor/index.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/api/ecg/queue/index.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/permission.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/utils/stringUtil.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/ecg/doctor/components/QueuePanel.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/ecg/doctor/components/TitlePanel.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/ecg/doctor/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/ecg/room/RoomLoginSelect.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/ecg/doctor/index.ts
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ import request from '@/config/axios' export interface RoomBedVO { roomId: number // è¯å®¤ç¼å· bedNo: string // è¯çåºç¼å· } // å»ç API export const DoctorApi = { // ä¸ä¸ä½æ£è nextPatient: async (params: RoomBedVO) => { return await request.get({ url: `/ecg/doctor/nextpatient`, params }) } } src/api/ecg/queue/index.ts
@@ -5,16 +5,16 @@ id: number // id patId: string // æ£è ç¼å· patName: string // æ£è å§å patGender: boolean // æ£è æ§å« patGender: number // æ£è æ§å« bookTimeslot: number // é¢çº¦æ¶é´æ®µ bookCheckType: boolean // é¢çº¦æ£æ¥ç±»å bookCheckType: number // é¢çº¦æ£æ¥ç±»å seqNum: number // æéåºå· status: number // 10:æéä¸ 20:åè¯åå¤ 30:å°±è¯ä¸ 40:å°±è¯å®æ 50:è¿å· 60:è¿æ passed: boolean // è¿å·æ è®° expired: boolean // é¢çº¦è¿ææ è®° roomId: number // è¯å®¤ç¼å· roomName: string // è¯å®¤åç§° bedNum: string // è¯çåºç¼å· bedNo: string // è¯çåºç¼å· } // æé API src/permission.ts
@@ -83,7 +83,7 @@ // æ°å¢ãè¯å®¤éæ©ãé»è¾ if (userStore.getRoles.includes("doctor") && !userStore.getIsSetRoom ) { next({path: "/login-room-select"}) next({path: `/login-room-select?redirect=${to.fullPath}`}) } // <<<ãè¯å®¤éæ©ã<<< else { src/utils/stringUtil.ts
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,5 @@ export function isStringEmpty(value: string | null | undefined): boolean { return !value || value.trim() === ''; } src/views/ecg/doctor/components/QueuePanel.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,39 @@ <script setup lang="ts"> import {defineComponent, PropType} from "vue"; import { queueApi, queueVO } from '@/api/ecg/queue' import {DICT_TYPE} from "@/utils/dict"; defineComponent({ name: 'QueuePanel' }) const props = defineProps({ queue: { type: Array as PropType<queueVO[]>, required: true } /*, modelValue: { type: Object as PropType<RoomVO>, required: true } */ }) </script> <template> <div v-for="(item, index) in queue" :key="index"> {{item.patName}} {{item.patGender==1 ? "ç·" : "女"}} {{item.roomId}} {{item.roomName}} {{item.bedNo}} <dict-tag :type="DICT_TYPE.ECG_CHECK_TYPE" :value="item.bookCheckType" /> <dict-tag :type="DICT_TYPE.ECG_QUEUE_STATUS" :value="item.status" /> </div> </template> <style scoped lang="scss"> </style> src/views/ecg/doctor/components/TitlePanel.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,42 @@ <script setup lang="ts"> import {defineComponent, PropType} from "vue"; import {useUserStore} from "@/store/modules/user"; import {RoomBedVO} from "@/api/ecg/doctor"; const userStore = useUserStore(); defineComponent({ name: 'TitlePanel' }) const roomBedVO: RoomBedVO = { roomId: userStore.room.roomId, bedNo: userStore.room.bedNo } const props = defineProps({ room: { type: String, required: true } /*, bedList: { type: Array as PropType<RoomVO[]>, required: true }, modelValue: { type: Object as PropType<RoomVO>, required: true } */ }) </script> <template> 已就è¯{{10}} åå¤ä¸{{3}} è¿å·{{2}} æéä¸{{100}} è¯å®¤{{roomBedVO.roomId}} å·¥ä½{{roomBedVO.bedNo}} </template> <style scoped lang="scss"> </style> src/views/ecg/doctor/index.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,55 @@ <script setup lang="ts"> import TitlePanel from "@/views/ecg/doctor/components/TitlePanel.vue"; import QueuePanel from "@/views/ecg/doctor/components/QueuePanel.vue"; import { DoctorApi, RoomBedVO } from '@/api/ecg/doctor'; import {useUserStore} from "@/store/modules/user"; import {queueVO} from "@/api/ecg/queue"; const userStore = useUserStore(); const roomBedVO: RoomBedVO = { roomId: userStore.room.roomId, bedNo: userStore.room.bedNo } const list = ref<queueVO[]>([]) const nextPatient = async () => { const data = await DoctorApi.nextPatient(roomBedVO) list.value = data } const finishPatient = async () => { } /** åå§å **/ onMounted(() => { nextPatient() }) </script> <template> <el-container> <el-header style="background-color: var(--el-color-primary-light-7); font-size: 24px"> <TitlePanel room="A208"/> </el-header> <el-container> <el-main> è£ æºçé¢ </el-main> <el-aside width="300px" style="background-color: var(--el-color-primary-light-7);"> <QueuePanel :queue="list"/> </el-aside> </el-container> <el-container style="justify-content: center;"> <el-button type="primary" @click="finishPatient">宿</el-button> <el-button type="primary" @click="nextPatient">ä¸ä¸ä½</el-button> </el-container> </el-container> </template> <style scoped lang="scss"> </style> src/views/ecg/room/RoomLoginSelect.vue
@@ -16,10 +16,14 @@ import {useUserStore} from "@/store/modules/user"; import {CACHE_KEY, useCache} from "@/hooks/web/useCache"; import {ElMessage} from "element-plus"; const { currentRoute, push } = useRouter() import {isStringEmpty} from "@/utils/stringUtil" const { push } = useRouter() const { wsCache } = useCache() defineOptions({ name: 'RoomLoginSelect' }) const route = useRoute(); const userStore = useUserStore() @@ -52,7 +56,10 @@ } userStore.setRoomInfoAction(curSel.value) push({ path: "/"}) if (isStringEmpty(route.redirectedFrom?.fullPath)) push({ path: "/"}) else push({ path: route.redirectedFrom?.fullPath}) } const test = () => {