单应用项目,可以创建很多独立工具类页面 ,不用登录 初始化的页面
chenyc
2025-06-28 e9111e214585d6cf529e51caf94e13e41e3e7a5b
src/views/deviceWindoes2.vue
@@ -473,12 +473,11 @@
                      height: 75%;
                      text-align: center;
                      font-weight: 600;
                      font-size: 50px;
                      color: #333333;
                      color: #ca7070;
                    "
                  >
                    <el-row style="font-size: 30px">
                    <el-row style="font-size: 20px">
                      <el-col
                        v-for="(row, index) in deviceData.异常检验指标"
                        :span="8"
@@ -512,7 +511,7 @@
                      height: 75%;
                      text-align: center;
                      font-weight: 600;
                      font-size: 50px;
                      font-size: 25px;
                      color: #8079cb;
                    "
                    class="grid-container"
@@ -860,7 +859,7 @@
                        color: #ca7070;
                      "
                    >
                      <el-row style="font-size: 30px">
                      <el-row style="font-size: 20px">
                        <el-col
                          v-for="(row, index) in deviceData.异常检验指标"
                          :span="12"
@@ -1531,8 +1530,8 @@
      <template #footer>
        <div class="dialog-footer">
          <el-button @click="centerDialogVisible = false">取消</el-button>
          <el-button @click="test">测试播报</el-button>
          <el-button @click="toggleAlarm">测试报警</el-button>
          <!-- <el-button @click="test">测试播报</el-button> -->
          <!-- <el-button @click="toggleAlarm">测试报警</el-button> -->
          <el-button type="primary" @click="saveSet"> 确认 </el-button>
          <el-button type="success" @click="shuaxin"> 刷新 </el-button>
        </div>
@@ -1599,6 +1598,9 @@
                <el-option label="测血压" value="测血压" />
                <el-option label="开超滤" value="开超滤" />
                <el-option label="给药" value="给药" />
                <el-option label="调电导度" value="调电导度" />
                <el-option label="调血流量" value="调血流量" />
                <el-option label="冲管" value="冲管" />
              </el-select>
            </el-form-item>
            <el-form-item label="定型文:">
@@ -1665,7 +1667,13 @@
import cljd from "../img/cljd.png";
import tizhong from "../img/tizhong.png";
import { EventSourcePolyfill } from "event-source-polyfill";
import alertbaojin from '../assets/alert.wav'
import alertbaojin from "../assets/alert.wav";
import cxybaojing from "../assets/cxy.mp3";
import gybaojing from "../assets/gy.mp3";
import kclbaojing from "../assets/kcl.mp3";
import tdddbaojing from "../assets/tzddd.mp3";
import tzxllbaojing from "../assets/tzxll.mp3";
import cgbaojing from "../assets/cg.mp3";
import {
  computed,
@@ -1682,25 +1690,83 @@
import { jgTime4 } from "../utils/formatTime";
import { setTimeoutAlert } from "../utils/httpApi";
// 创建 Audio 对象,指向 public 目录下的音频文件
const alarmSound = new Audio(alertbaojin)
const alarmSound = new Audio(alertbaojin); //一般报警声音
const alarmSoundCXY = new Audio(cxybaojing); //测血压报警
alarmSoundCXY.loop = true; // 循环播放
const alarmSoundGY = new Audio(gybaojing); //给药报警
alarmSoundGY.loop = true; // 循环播放
const alarmSoundKCL = new Audio(kclbaojing); //开超滤报警
alarmSoundKCL.loop = true; // 循环播放
const alarmSoundTZDDD = new Audio(tdddbaojing); //调整电导度
alarmSoundTZDDD.loop = true; // 循环播放
const alarmSoundTZxll = new Audio(tzxllbaojing); //调整电导度
alarmSoundTZxll.loop = true; // 循环播放
const alarmSoundCG = new Audio(cgbaojing); //冲管
alarmSoundCG.loop = true; // 循环播放
// 控制播放状态的变量
const isPlaying = ref(false)
const isPlaying = ref(false);
// 切换播放/暂停的方法
const toggleAlarm = () => {
  console.log('-------------')
  console.log('看看是打开还是暂停')
  if (isPlaying.value) {
    alarmSound.pause()
    if (倒计时告警文本.value === "测血压") {
      alarmSoundCXY.pause();
    } else if (倒计时告警文本.value === "冲管") {
      alarmSoundCG.pause();
    } else if (倒计时告警文本.value === "开超滤") {
      alarmSoundKCL.pause();
    } else if (倒计时告警文本.value === "给药") {
      alarmSoundGY.pause();
    } else if (倒计时告警文本.value === "调电导度") {
      alarmSoundTZDDD.pause();
    } else if (倒计时告警文本.value === "调血流量") {
      alarmSoundTZxll.pause();
    } else {
      alarmSound.pause();
    }
  } else {
    alarmSound.currentTime = 0 // 从头开始播放
    alarmSound.play().catch((err) => {
      console.error('播放失败:', err)
    })
    if (倒计时告警文本.value === "测血压") {
      alarmSoundCXY.currentTime = 0; // 从头开始
      alarmSoundCXY.play().catch((err) => {
        console.error("播放失败:", err);
      });
    } else if (倒计时告警文本.value === "冲管") {
      alarmSoundCG.currentTime = 0; // 从头开始
      alarmSoundCG.play().catch((err) => {
        console.error("播放失败:", err);
      });
    } else if (倒计时告警文本.value === "开超滤") {
      alarmSoundKCL.currentTime = 0; // 从头开始
      alarmSoundKCL.play().catch((err) => {
        console.error("播放失败:", err);
      });
    } else if (倒计时告警文本.value === "给药") {
      alarmSoundGY.currentTime = 0; // 从头开始
      alarmSoundGY.play().catch((err) => {
        console.error("播放失败:", err);
      });
    } else if (倒计时告警文本.value === "调电导度") {
      alarmSoundTZDDD.currentTime = 0; // 从头开始
      alarmSoundTZDDD.play().catch((err) => {
        console.error("播放失败:", err);
      });
    } else if (倒计时告警文本.value === "调血流量") {
      alarmSoundTZxll.currentTime = 0; // 从头开始
      alarmSoundTZxll.play().catch((err) => {
        console.error("播放失败:", err);
      });
    } else {
      alarmSound.currentTime = 0; // 从头开始播放
      alarmSound.play().catch((err) => {
        console.error("播放失败:", err);
      });
    }
  }
  isPlaying.value = !isPlaying.value
}
// 语音播报
import Speech from "speak-tts";
const speech = ref(null);
  isPlaying.value = !isPlaying.value;
};
const { proxy } = getCurrentInstance() as any;
// 在需要使用的组件中引入
import { ChatDotSquare } from "@element-plus/icons-vue";
@@ -1946,7 +2012,6 @@
};
// 保存定时任务
const setDingshi = () => {
  console.log("--------------------");
  console.log(formInline.value);
  console.log(deviceCode.value);
@@ -1957,7 +2022,7 @@
  } else {
    alertText = formInline.value.alertText;
  }
  if (alertText==='') {
  if (alertText === "") {
    ElMessage.warning("设置报警消息不能为空");
    return true;
  }
@@ -1970,7 +2035,7 @@
    if (res.data === "OK") {
      倒计时.value = minutes * 60;
      centerDialogVisible2.value = false;
      倒计时告警文本.value = alertText
      倒计时告警文本.value = alertText;
    } else {
      ElMessage.warning(res.message);
    }
@@ -2136,24 +2201,55 @@
const 倒计时告警文本 = ref("");
// 定时器回调函数
const updateTime = () => {
  倒计时.value--;
  if (倒计时.value > 0) {
    倒计时显示.value = formatSecondsToTime(倒计时.value);
    倒计时.value--;
  } else if(倒计时.value!==-100) {
  } else if (倒计时.value > -5) {
    倒计时显示.value = "";
    // 只有没触发的时候才触发他
    if(centerDialogVisible3.value===false){
      centerDialogVisible3.value = true;
      关闭弹框警告();
      // 播报警告文本(倒计时告警文本.value);
      toggleAlarm()
    }
  }else{
     if (centerDialogVisible3.value === false) {
       centerDialogVisible3.value = true;
       关闭弹框警告();
      //  toggleAlarm();
     }
  } else {
    倒计时显示.value = "";
  }
};
let intervalId = null;
watch(()=>centerDialogVisible3.value,()=>{
  if(centerDialogVisible3.value===false){
    alarmSound.pause();
    alarmSoundCXY.pause();
    alarmSoundKCL.pause();
    alarmSoundGY.pause();
    alarmSoundTZDDD.pause();
    alarmSoundTZxll.pause();
    alarmSoundCG.pause();
  }else{
    if (倒计时告警文本.value === "测血压") {
      alarmSoundCXY.play();
    }
    else if (倒计时告警文本.value === "冲管") {
      alarmSoundCG.play();
    }
    else if (倒计时告警文本.value === "开超滤") {
      alarmSoundKCL.play();
    }
    else if (倒计时告警文本.value === "给药") {
      alarmSoundGY.play();
    }
    else if (倒计时告警文本.value === "调电导度") {
      alarmSoundTZDDD.play();
    }
    else if (倒计时告警文本.value === "调血流量") {
      alarmSoundTZxll.play();
    }
    else {
      alarmSound.play();
    }
  }
})
onMounted(() => {
  let devcieCode = Local.get("devcieCode");
  if (devcieCode) {
@@ -2163,12 +2259,6 @@
    centerDialogVisible.value = true;
  }
  intervalId = setInterval(updateTime, 1000);
  speech.value = new Speech();
  speech.value?.setLanguage("zh-CN");
  speech.value?.init().then(() => {
    console.log("语音初 始化成功");
    // test()
  });
});
// 在组件卸载前清除定时器,防止内存泄漏
onBeforeUnmount(() => {
@@ -2286,12 +2376,15 @@
          if (dataBody.倒计时?.提醒文本) {
            倒计时.value = dataBody.倒计时?.设定提醒倒计时;
            console.log("设置了倒计时值", 倒计时.value);
            if (倒计时.value <= 0 && 倒计时.value >= -60&& centerDialogVisible3.value===false) {
            if (
              倒计时.value <= 0 &&
              倒计时.value >= -60 &&
              centerDialogVisible3.value === false
            ) {
              centerDialogVisible3.value = true;
              倒计时告警文本.value = dataBody.倒计时?.提醒文本;
              关闭弹框警告();
              播报警告文本(倒计时告警文本.value);
              toggleAlarm()
              // toggleAlarm();
            } else if (倒计时.value <= -60) {
              centerDialogVisible3.value = false;
            }
@@ -2356,56 +2449,9 @@
  setTimeout(function () {
    console.log("30秒已过,关闭报警设置弹框。");
    centerDialogVisible3.value = false;
    toggleAlarm()
    倒计时.value=-100
    倒计时.value = -100;
  }, 30000); // 30000 毫秒 = 30 秒
};
const 播报警告文本 = (tex) => {
  if (centerDialogVisible3.value) {
    console.log(centerDialogVisible3.value,'播报')
    speech.value
      .speak({
        text: tex,
        listeners: {
          //开始播放
          onstart: () => {
            console.log("开始播报");
          },
          //判断播放是否完毕
          onend: () => {
            console.log("播报完成");
          },
          //恢复播放
          onresume: () => {
            console.log("Resume utterance");
          },
        },
      })
      .then(() => {
        播报警告文本(tex);
      });
  }
};
const test=()=>{
  speech.value
      .speak({
        text: '你好,我现在在测试播报内容',
        listeners: {
          //开始播放
          onstart: () => {
            console.log("开始播报");
          },
          //判断播放是否完毕
          onend: () => {
            console.log("播报完成");
          },
          //恢复播放
          onresume: () => {
            console.log("Resume utterance");
          },
        },
      })
}
//初始化
const sourceInit = () => {
  console.log("初始化see");