Electron桌面应用聊天(续)

2026.4.1

2026.4.10补充

一.Day.js

与时间格式相关的用day.js

安装 | Day.js中文网

复制代码
npm install dayjs --save

二.Omit

Omit 是 TypeScript 内置的泛型工具类型,作用是从一个类型中「剔除」指定的属性,生成一个新的类型。

语法与原理

复制代码
Omit<Type, Keys>
  • Type:你要操作的原始类型 (比如你的 MessageProps

  • Keys:你要剔除的属性名 (可以是单个属性,也可以是联合类型 'a' | 'b'

  • 最终返回一个剔除了指定属性后的新类型

三.进程间的通信(IPC)

渲染进程将问题连带着他的id等信息,传入主进程。在主进程调用对应的大模型,最后将结果又传回给渲染进程。

具体可查阅官方文档 进程间通信 | Electron

1.渲染进程 ---> 主进程

(1)渲染进程发送消息ipcRenderer.send

ipcRenderer.send(channel, data)

已经成功拿到newMessageId ,lastQuestion, provider.name, conversation.selectModel

可以进行发送:要把类型手动添加到window上去。

创建interface.d.ts,(在window上面加上electronAPI方法)

preload.ts中(在electron上面加上startChat方法)

conversation.vue(使用startChat方法)

type.ts

(2)主进程接收消息ipcMain.on

ipcMain.on(channel, (event, ...args) => {}

在main.ts中接收来自渲染进程的数据

可在终端查看,发现已成功打印

2.主进程 ----> 渲染进程

(1)主进程处理逻辑mainWindow.webContents.send

mainWindow.webContents.send('xxx', content);

上一步骤主进程已经拿到渲染进程的providerName, content, messageId, selectedModel。在这里就可以用拿到的数据,调用大模型,返回结果。又发送给渲染进程。

main.ts中

(2)渲染进程接收数据 ipcRenderer.on

发送的名字叫upload-message

proload.ts

给IElectronAPI加一个方法叫onUpdateMessage

interface.d.ts中

Conversation.vue就可以拿到大模型返回的数据了

可在控制台成功打印

(3)将数据展示到页面上

Conversation.vue

如图,成功返回。

【补充知识】

1.Electron 主进程 / 渲染进程区分:

  • 主进程(main.ts/main.js):Node.js 环境,负责窗口管理、IPC 通信,不能直接写 DOM 代码。

  • 渲染进程(.vue 文件):浏览器环境,支持 TS/JS,负责页面渲染,不能直接访问 Node.js API(需要通过 preload 桥接)。

2.TypeScript 类型的本质:

  • 所有 <> 包裹的类型语法(如 Omit<>data: Type)只在编译阶段生效,绝对不能出现在运行时的赋值语句中。

3.Electron IPC 通信规范:

1.渲染进程发送:ipcRenderer.send(channel, data)

2.主进程监听:ipcMain.on(channel, (event, ...args) => {}

中间靠proload.ts中的contextBridge桥接。

相关推荐
子兮曰1 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰1 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万1 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝1 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋1 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
大蓝头1 天前
安装包UI美化之路-nsNiuniuSkin全新UI调试与预览方法
ui·electron·安装包·截图控件·截屏控件
卡布鲁1 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄1 天前
JavaScript 隐式全局变量解析
javascript
汉堡大王95271 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大1 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端