目录

系统区别

win:不支持桌面通知,使用气泡显示

mac:有镜像/共享屏幕时 通知免打扰设置

代码

Vuex:免打扰状态

src/store/App/mutations.ts

src/store/App/state.ts

src/views/miracast/index.vue

Util

【可选】src/util/ipcUtil.ts:重写ipc【日志记录】

src/util/webimutil.ts:判断系统、通知

通知

样式

html

css

参考链接


系统区别

win:不支持桌面通知,使用气泡显示

window.Electron && window.Electron.ipcRenderer.send()

mac:有镜像/共享屏幕时 通知免打扰设置

const notification =new Notification(title,option)

且通知样式是固定的,只能传部分参数

        /**
         * title: "字符串"
         * option: {
         *  body: "xxxxx",
         *  tag: "IM",
         *  icon: ""
         * }
         */

new后会在用户设备的通知中心中创建一个通知条目,

notification.show();手动显示通知,

但一般是把条目按需放在通知中心,等待显示

代码

Vuex:免打扰状态

src/store/App/mutations.ts

    SET_NOTIFY_MUTED(state:any, value:any) {state.notifyMuted= value;},

src/store/App/state.ts

    notifyMuted:false,//通知免打扰

src/views/miracast/index.vue

  <el-checkbox v-model="isMuted" @change="toggleMute">投屏后不弹出新消息提示</el-checkbox>watch:{castStatus(newStatus:string){if(newStatus=='isCasting'&&this.isMuted){this.$store.commit('App/SET_NOTIFY_MUTED',true);}else{this.$store.commit('App/SET_NOTIFY_MUTED',false);}}},methods:{toggleMute() {     if(this.castStatus=='isCasting'&&this.isMuted){this.$store.commit('App/SET_NOTIFY_MUTED',true);}else{this.$store.commit('App/SET_NOTIFY_MUTED',false);}},
}

Util

【可选】src/util/ipcUtil.ts:重写ipc【日志记录】

src/util/webimutil.ts:判断系统、通知

import ipcUtil from '@/util/ipcUtil';const userAgent = window.navigator.userAgent.toLowerCase();
const ipc = window.Electron && window.Electron.ipcRenderer;/*** @desc 判断系统类型*/
export const checkWin = () => {let sUserAgent = navigator.userAgent;let isWin = sUserAgent.indexOf('Windows') > -1;return isWin;
};//在浏览器环境中,window 是全局对象,不需要前缀
export const isMac() = () => {return /macintosh|mac os x/i.test(navigator.userAgent);
},
export class NotificationHelper {static isNotificationSupported() {return typeof Notification === 'function' || typeof Notification === 'object';}static requestPermission() {if (!NotificationHelper.isNotificationSupported()) {return;}Notification.requestPermission().then(function(permission) {console.log('用户是否允许通知: ', permission === 'granted' ? '允许' : '拒绝');});}static showNotification(title: any, option: any, content: any) {//(正在聚焦、没有隐藏、主会话页)|| 免打扰  时 不通知if ((store.state.App.appIsFocus && !document.hidden && content.$route.path == '/main/conversation')||store.state.App.notifyMuted) {return;}// win不支持桌面通知if (checkWin()) {//气泡显示ipc.send('display-balloon', title, option);//闪烁图标ipc.send('flash-dock');return;}if (!NotificationHelper.isNotificationSupported()) {return;}if (Notification.permission !== 'granted') {NotificationHelper.requestPermission();}/*** title: "字符串"* option: {*  body: "xxxxx",*  tag: "IM",*  icon: ""* }*/let notify = new Notification(title, {...option,silent: true, //是否保持静默});notify.onshow = function() {};notify.onclick = function() {};notify.onclose = function() {};notify.onclose = function() {};notify.onerror = function() {};}
}

通知

	webimutil.NotificationHelper.showNotification('视频会议',{icon: 'assets/img/meishi.ico',body: '您的账号在其他地方登录!',silent: true,},this,);

样式

html

  <el-checkbox v-model="isMuted" @change="toggleMute">投屏后不弹出新消息提示</el-checkbox><el-popoverv-if="!isWin"placement="top-end"trigger="hover"     popper-class="info-popover"><div class="mute-tip"><dl><dd>没有弹出新消息提示,请前往设置</dd><dd>[设置]-[通知]-[当镜像或共享屏幕时允许通知]</dd></dl><img src="../../assets/img/miracast/mac_mute.png" alt="示例图片" ></div><i slot="reference" class="el-icon-info"></i></el-popover>

css

    .info-popover{width: 328px;height: 206px ;background-color: rgba(255, 255, 255, 1);border: 1px solid rgba(206, 212, 224, 1);border-radius: 6px;box-shadow: 0px 4px 12px 0px rgba(27, 28, 30, 0.1);.mute-tip{display: flex;flex-direction: column;justify-content: space-around;height: 96%;                   text-align: center;align-items: center;dl{padding-top: 7px;}dd {font-size: 14px;font-weight: 400;line-height: 26px;color: #A8ACB3;}img {padding: 7px 0;width: 296px;height: 110px;border-radius: 8px;}}}

参考链接

通知 | Electron

通知(Notifications) | Electron

Notifications | Apple Developer Documentation

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96048.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96048.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/96048.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么Integer缓存-128 ~ 127

背景 面试题, 相关问题的考察. 题目大概是, 包装类型Integer 比较的时候 : -127 ~ 128 是否相等. 其他是否相等? 原理比较的是地址. 如果是不同的对象, 那么就不相等. 实践 下面是几个简单实践. 全部新建对象 解释: 新建对象后, 地址不同, 所以都是false不新建对象 暂时的理解…

微软Wasm学习-创建一个最简单的c#WebAssembly测试工程

要创建一个最简单的微软 WebAssembly&#xff08;Wasm&#xff09;测试工程&#xff0c;最直接的方式是使用 Blazor WebAssembly&#xff0c;这是微软官方推荐的 WebAssembly 开发框架。下面是创建和运行最简单 Blazor WebAssembly 项目的步骤&#xff1a; 相关&#xff1a;微…

通过 GitHub520 项目自动获取最新 Hosts 配置,无需手动查询 IP。

操作步骤&#xff1a;打开终端Command 空格 聚焦搜索“终端”&#xff0c;打开应用。执行一键脚本复制以下命令粘贴到终端运行&#xff08;需输入密码授权&#xff09;&#xff1a;bashsed -i "" "/# GitHub520 Host Start/,/# Github520 Host End/d" /et…

C# 目录与文件操作笔记

一、基本概念1. 数据存储方式对比存储方式适用场景特点数据库存储大量、关系复杂、有序的数据结构化强&#xff0c;支持复杂查询和事务文件存储少量、关系简单的数据&#xff08;如日志&#xff09;操作简便&#xff0c;可存储于任意介质2. 文件与流文件&#xff1a;存储在磁盘…

docker部署flask并迁移至内网

需要直接使用的可以使用下面的链接&#xff1a; 通过网盘分享的文件&#xff1a;docker_flask.tar 链接: https://pan.baidu.com/s/163ocPFw8cqfXgVXeejv36g?pwdqxqm 提取码: qxqm 来自百度网盘超级会员v6的分享 外网部署docker版flask 目录结构 ./miniconda-docker/ ├── d…

161. Java Lambda 表达式 - 使用工厂方法创建 Predicates

文章目录161. Java Lambda 表达式 - 使用工厂方法创建 Predicates&#x1f3af; Predicate 工厂方法概览&#x1f9ea; 示例一&#xff1a;Predicate.isEqual() 工厂方法&#x1f9ea; 示例二&#xff1a;Predicate.not() 工厂方法&#xff08;Java 11&#xff09;&#x1f3af…

c#Blazor WebAssembly在网页中多线程计算1000万次求余

在 Blazor WebAssembly 中实现多线程计算并获取线程 ID 是可行的&#xff0c;但需要正确配置多线程环境并处理线程安全和 UI 更新逻辑。以下是完整示例和检测方法&#xff1a;一、准备工作&#xff1a;启用多线程支持首先需确保项目已启用 WebAssembly 多线程&#xff0c;修改项…

鼠标右键没有“通过VSCode打开文件夹”

1, WinR 打开运行&#xff0c;输入regedit&#xff0c;打开注册表&#xff0c;找到HKEY_CLASSES_ROOT\*\shell分支&#xff0c;如果没有shell分支&#xff0c;则在*下点击右键&#xff0c;选择“新建&#xff0d;项”&#xff0c;建立shell分支。 2, 在shell下新建“VisualCod…

[ Spring 框架 ] 框架搭建和属性赋值

目录 1. Spring定义: (1). IOC( Inversion of Control): (2). AOP (Aspect Oriented Programming): (3)一站式: 2. spring搭建: (1). 创建一个Maven项目 (2). 导入核心 jar包 (3). 编写 spring 配置文件 (4). 编写实体类,并生成set方法 (5). 在resource中加入spring核…

前端 大文件分片下载上传

前端 大文件分片下载上传 背景介绍&#xff1a; 当前项目是给投行部门做系统&#xff0c;业务方需要有专门的文档中心去管理文件&#xff0c;包括但是不限于文件的上传和下载等等。笔者本来就是采用的浏览器表单上传的方式进行文件上传&#xff0c;但是谁曾想在进行稍微大一点的…

【Python练习】097. 编写一个函数,实现简单的版本控制工具

097. 编写一个函数,实现简单的版本控制工具 097. 编写一个函数,实现简单的版本控制工具 示例代码 功能说明 使用方法 注意事项 实现方法 基于文件快照的实现方法 基于差异存储的实现方法 基于命令模式的实现方法 基于Git-like的实现方法 097. 编写一个函数,实现简单的版本控…

嵌入式硬件篇---Tof

TOF 的原理与本质TOF&#xff08;Time of Flight&#xff0c;飞行时间&#xff09;是一种通过测量信号&#xff08;通常是光&#xff09;在空间中传播时间来计算距离的技术。其本质是利用 “距离 速度 时间” 的物理公式&#xff1a;通过发射信号&#xff08;如激光、红外光&…

Vue diff简介

Vue3 diff 最长递增子序列双端diff 理念 相同的前置和后置元素的预处理&#xff0c;考虑边界情况&#xff0c;减少移动&#xff1b;最长递增子序列&#xff08;动态规划、二分法&#xff09;&#xff0c;判断是否需要移动 操作 前置与后置预处理判断是否需要移动 递增法&#x…

罗技MX Anywhere 2S鼠标修复记录

【现象】单击时总是出现双击的现象 【问题原因】从网络收集&#xff1a; 说法1&#xff0c;欧姆龙微动损坏&#xff1b;说法2&#xff0c;按键磨损导致按键和微动开关接触不良&#xff1b; 【问题排查】 微动损坏&#xff1a;拆掉壳子后&#xff0c;用手按住左键的微动开关&…

常见IP模块的仲裁策略和实现

在一个 Message Unit 中包含两个 Core&#xff08;处理器核心&#xff09;&#xff0c;它们之间访问共享资源&#xff08;如寄存器、FIFO、buffer 等&#xff09;时&#xff0c;仲裁机制&#xff08;Arbitration&#xff09; 是确保系统稳定性和正确性的关键。以下是常见的仲裁…

上周60+TRO案件,波比的游戏时间/丹迪世界/飞盘/迪奥/多轮维权,手表/汽车品牌持续发力,垃圾桶专利等新增侵权风险!

赛贝整理上周&#xff08;2025年8月11日-8月15日&#xff09;的TRO诉讼案件发案情况&#xff0c;根据赛贝TRO案件查询系统了解到&#xff0c;上周合计发起了超60起诉讼案件&#xff0c;涵盖 IP /品牌、版权、专利等多个领域&#xff0c;涉及影视、奢侈品、汽车、游戏、日常用品…

用 Python 在 30 分钟内搭一个「可回放的实时日志」——把攻击流量变成可视化剧情

业务背景 我们运营一款 FPS 端游&#xff0c;外挂作者常把 DDoS 伪装成「玩家掉线」来骗客服。以前排查要捞 CDN 日志、对时间戳、人工比对&#xff0c;平均 2 小时才能定位。现在用一条 30 行的 Python 脚本把边缘节点日志实时打到 Kafka&#xff0c;再回放到 Grafana&#xf…

如何将 LM Studio 与 ONLYOFFICE 结合使用,实现安全的本地 AI 文档编辑

人工智能正在改变我们的工作方式——但如今大多数 AI 工具都存在弊端&#xff1a;速度和便利性虽有所提升&#xff0c;但也意味着数据需要发送到外部服务器。对于教育工作者、企业、非政府组织以及任何处理敏感信息的人来说&#xff0c;这都是不可接受的风险。 LM Studio 和 O…

超市电商销售分析项目:从数据分析到业务决策

国际超市电商销售数据分析实战&#xff1a;从数据清洗到业务决策的完整流程 在电商行业&#xff0c;数据是驱动业务增长的核心引擎。本文将以国际超市电商销售数据为研究对象&#xff0c;完整拆解从数据准备 → 深度分析 → 策略输出的实战流程&#xff0c;涵盖数据清洗、多维度…

GitHub 热榜项目 - 日榜(2025-08-17)

GitHub 热榜项目 - 日榜(2025-08-17) 生成于&#xff1a;2025-08-17 统计摘要 共发现热门项目&#xff1a;12 个 榜单类型&#xff1a;日榜 本期热点趋势总结 本期GitHub热榜呈现三大技术趋势&#xff1a;1) AI基础设施持续爆发&#xff0c;Archon OS和Parlant聚焦AI任务管…