- 基于 openim-electron-demo 改造:工号+密码登录(自研账号服务)、会话列表/聊天窗/通讯录界面重做
- 文字/语音/文件/图片消息、文件拖拽发送、表情面板、一对一语音通话(LiveKit)
- RTC 令牌对接账号服务带鉴权版 /api/rtc_token(Bearer imToken + {room,identity})
- account-service: CORS Allow-Headers 补 authorization(浏览器/渲染进程跨域调 rtc_token 需要)
- 附本地 mock 账号服务(scripts/mock-account-server.js)与截图联调脚本
42 lines
929 B
TypeScript
42 lines
929 B
TypeScript
import { app, Menu, Tray } from "electron";
|
|
import { t } from "i18next";
|
|
import { hideWindow, showWindow } from "./windowManage";
|
|
|
|
let appTray: Tray;
|
|
|
|
export const createTray = () => {
|
|
const trayMenu = Menu.buildFromTemplate([
|
|
{
|
|
label: t("system.showWindow"),
|
|
click: showWindow,
|
|
},
|
|
{
|
|
label: t("system.hideWindow"),
|
|
click: hideWindow,
|
|
},
|
|
{
|
|
label: t("system.toggleDevTools"),
|
|
role: "toggleDevTools",
|
|
},
|
|
{
|
|
label: t("system.quit"),
|
|
click: () => {
|
|
global.forceQuit = true;
|
|
app.quit();
|
|
},
|
|
},
|
|
]);
|
|
appTray = new Tray(global.pathConfig.trayIcon);
|
|
appTray.setToolTip(app.getName());
|
|
appTray.setIgnoreDoubleClickEvents(true);
|
|
appTray.on("click", showWindow);
|
|
|
|
appTray.setContextMenu(trayMenu);
|
|
};
|
|
|
|
export const destroyTray = () => {
|
|
if (!appTray || appTray.isDestroyed()) return;
|
|
appTray.destroy();
|
|
appTray = null;
|
|
};
|