From a08a69f4e91d74540a0b4b071bbbff683721643f Mon Sep 17 00:00:00 2001
From: eight <641137800@qq.com>
Date: 星期三, 18 九月 2024 14:52:37 +0800
Subject: [PATCH] 护士 召回患者 功能
---
src/views/ecg/callingscreen/bigscreen.vue | 157 +++++++++++++++++++++++++++++++---------------------
1 files changed, 94 insertions(+), 63 deletions(-)
diff --git a/src/views/ecg/callingscreen/bigscreen.vue b/src/views/ecg/callingscreen/bigscreen.vue
index c9095e4..5dde9f5 100644
--- a/src/views/ecg/callingscreen/bigscreen.vue
+++ b/src/views/ecg/callingscreen/bigscreen.vue
@@ -1,5 +1,6 @@
<script setup lang="ts">
+import dayjs from 'dayjs'
import {ScreenApi, statusMap, CallingVO} from "@/api/ecg/screen";
defineOptions({ name: 'bigscreen' })
@@ -7,6 +8,10 @@
const listReady = ref<CallingVO[]>([]) // 鍒楄〃鐨勬暟鎹�
const listWaiting = ref<CallingVO[]>([]) // 鍒楄〃鐨勬暟鎹�
const listPassed = ref<CallingVO[]>([]) //
+
+let curSpeakPat : CallingVO | undefined = undefined;
+let curSpeakSeqNum : number = 0
+let curWorkDay : Date | undefined = undefined
const getList = async () => {
const data = await ScreenApi.getBigScreenData()
@@ -17,50 +22,91 @@
const startScrolling = () => {
setInterval(() => {
- // console.info("...")
getList();
- }, 3000); // 姣忎袱绉掓粴鍔ㄤ竴娆�
+ if ( curSpeakPat === undefined ) {
+ initiateSpeak()
+ }
+ }, 5000); // 姣廥绉掓粴鍔ㄤ竴娆�
}
onMounted( () => {
startScrolling()
})
+const onSpeachEndEvent = async (event) => {
+ console.log("Speech ended... " + event.currentTarget.text);
+ await ScreenApi.markCalled(curSpeakPat!.patId)
+ initiateSpeak()
+}
+
+const getNextSpeak = () => {
+ if (listReady.value.length === 0) {
+ return undefined;
+ }
+
+ // 澶勭悊姣忓ぉ 鍙嶈浆鐨勬儏鍐�
+ if ( curWorkDay === undefined) {
+ curSpeakSeqNum = 0;
+ curWorkDay = new Date()
+ } else if (!isSameDate(dayjs(listReady.value[0].bookDate).toDate(), curWorkDay)) {
+ curSpeakSeqNum = 0;
+ curWorkDay = dayjs(listReady.value[0].bookDate).toDate()
+ }
+
+ return listReady.value.find( item => item.status === 30 && item.called === 0 && item.seqNum > curSpeakSeqNum)
+}
+
+const initiateSpeak = () => {
+ const queuePat = getNextSpeak()
+ if (queuePat !== undefined) {
+ curSpeakPat = queuePat
+ curSpeakSeqNum = curSpeakPat.seqNum
+ speak("璇枫��" + queuePat.patName + "鍒�" + queuePat.roomName + "灏辫瘖");
+ } else {
+ curSpeakPat = undefined
+ }
+}
+
const speak = (msg) => {
- //const msg = new SpeechSynthesisUtterance(`璇�${this.currentNumber}鍙峰氨璇奰);
- const repeatNum = 3
+ console.info("speak " + msg);
var speech = new SpeechSynthesisUtterance()
- speech.text = msg
+ speech.text = msg + "銆傘�傘��" + msg + "銆傘�傘��" + msg + "銆傘�傘��"
speech.pitch = 1 // 鑾峰彇骞惰缃瘽璇殑闊宠皟(0-2 榛樿1锛屽�艰秺澶ц秺灏栭攼,瓒婁綆瓒婁綆娌�)
speech.rate = 0.9 // 鑾峰彇骞惰缃璇濈殑閫熷害(0.1-10 榛樿1锛屽�艰秺澶ц閫熻秺蹇�,瓒婂皬璇�熻秺鎱�)
speech.volume = 100 // 鑾峰彇骞惰缃璇濈殑闊抽噺
speech.lang = 'zh-CN' // 璁剧疆鎾斁璇█
- utterance.onend = function() {
- console.log("Speech ended");
- };
-
- // 澧炲姞鎺у埗鎾斁娆℃暟
- let count = 1
+ speech.onend = onSpeachEndEvent
speechSynthesis.speak(speech)
- while (count < repeatNum) {
- speechSynthesis.speak(speech)
- count++
- }
+}
+
+const isSameDate = ( date1: Date, date2 : Date) => {
+ if (date1.getFullYear() === date2.getFullYear()
+ && date1.getMonth() === date2.getMonth()
+ && date1.getDate() === date2.getDate())
+ return true
+ else
+ return false
}
</script>
<template>
- <el-container>
- <el-header>Header</el-header>
+ <el-container style="height: 100%;">
+ <el-header>
+ <img
+ height="40px"
+ src="@/assets/imgs/jinhua.png"
+ />
+ 閲戝崕浜烘皯鍖婚櫌
+ </el-header>
<el-container>
<el-aside width="500px">
<el-table
:data="listReady"
stripe
:show-header="false"
- style="width: 100%">
+ style="width: 100%; height: 100%; border: solid var(--el-color-primary-light-7); font-size: 18px;">
<el-table-column
prop="patName"
label="鎮h�呭鍚�"
@@ -70,66 +116,59 @@
{{ statusMap.get(scope.row.status) }}
</template>
</el-table-column>
+ <el-table-column
+ prop="roomName"
+ label="璇婂"
+ width="120"/>
</el-table>
</el-aside>
<el-container>
- <el-main>
- <el-table
- :data="listWaiting"
- stripe
- :show-header="false"
- style="width: 100%">
- <el-table-column
- prop="patName"
- label="鎮h�呭鍚�"
- width="80"/>
- <el-table-column label="鐘舵��" align="center" prop="status" width="80">
- <template #default="scope">
- {{ statusMap.get(scope.row.status) }}
- </template>
- </el-table-column>
- </el-table>
+ <el-main style="padding: 0 0 ">
+ <el-header height="30px" style="background-color: #98b8e5; line-height: 30px;">绛夊�欏尯</el-header>
+ <span v-for="(waitingItem, index) in listWaiting" :key="index">
+ {{waitingItem.patName + " "}}
+ </span>
</el-main>
- <el-footer>
- <el-table
- :data="listPassed"
- stripe
- :show-header="false"
- style="width: 100%">
- <el-table-column
- prop="patName"
- label="鎮h�呭鍚�"
- width="80"/>
- <el-table-column label="鐘舵��" align="center" prop="status" width="80">
- <template #default="scope">
- {{ statusMap.get(scope.row.status) }}
- </template>
- </el-table-column>
- </el-table>
+ <el-footer height="100px" style="padding: 0 0">
+ <el-header height="30px" style="background-color: #98b8e5; line-height: 30px;">杩囧彿鍖�</el-header>
+ <span v-for="(passedItem, index) in listPassed" :key="index">
+ {{passedItem.patName + " "}}
+ </span>
</el-footer>
</el-container>
</el-container>
- <el-button @click="speak('璇� 鐗规湕鏅� 鍒颁簩鍙疯瘖瀹� 灏辫瘖')" >鍙彿</el-button>
+ <el-button @click="speak('娆㈣繋浣跨敤')" >娆㈣繋浣跨敤</el-button>
</el-container>
</template>
<style scoped lang="scss">
-.el-header, .el-footer {
- background-color: #B3C0D1;
+.el-header {
+ background-color: var(--el-color-primary-light-7);
+ color: #333;
+ text-align: center;
+ line-height: 40px;
+
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.el-footer {
+ //background-color: var(--el-color-primary-light-7);
color: #333;
text-align: center;
line-height: 60px;
}
.el-aside {
- background-color: #D3DCE6;
+ background-color: var(--el-color-primary-light-7);
color: #333;
text-align: center;
line-height: 200px;
}
.el-main {
- background-color: #E9EEF3;
+ //background-color: var(--el-color-primary-light-7);
color: #333;
text-align: center;
line-height: 160px;
@@ -139,12 +178,4 @@
margin-bottom: 40px;
}
-.el-container:nth-child(5) .el-aside,
-.el-container:nth-child(6) .el-aside {
- line-height: 260px;
-}
-
-.el-container:nth-child(7) .el-aside {
- line-height: 320px;
-}
</style>
--
Gitblit v1.9.3