# 致信客开常见问题

注:根目录是 源码的根目录或者致信安装位置的 resources/app 目录

# Q1. 如何更换客户端图标、名称以及窗口中的【致信】字样?

# 1). 客户端图标文件介绍

项目的 根目录/res 目录下,详细介绍如下:

  • app.icns:MacOS 应用图标(1024 * 1024)
  • app.ico:Windows 应用图标, 安装包图标(256 * 256)
  • app.png:Linux 应用图标,任务栏图标,启动页面背景图标(1024 * 1024)
  • bg.png: Mac 安装界面背景(600 * 400)
  • Windows_icon.png: Windows、Linux 托盘图标(64 * 64)
  • Windows_Remind_icon.png:Windows、Linux 托盘闪烁时图标(64 * 64)
  • remind_ZXlogo_normalTemplate@2x.png:Mac 托盘图标(64 * 64)
  • Mac_Remind_icon_white.png:Mac 托盘闪烁时图标(64 * 64)

备注:请分别替换掉上述图标文件,保持命名一样即可。 图标用法请参考https://www.electronjs.org/docs/latest/api/native-image

# 2). 修改客户端名称和图标(基于上方图标介绍)

  • Linux和国产化机器: 项目的 根目录/script/forge.config.js 文件里配置客户端打包信息,如下图: 1709117700992.png
  • MacOS 和 Windows: 项目的 根目录/src/local_config.json 文件里修改名称、版本号,如下图: 1709117740428.png 项目的 根目录/src/config.js 文件里修改图标(建议不修改),如下图: 1709117781039.png

# 3). 修改窗口中显示的【致信】

  • 项目的 根目录/src/locales 文件夹里, 如下文件,修改文件中致信: en.json zh-CN.json zh-TW.json
  • 项目的 根目录/src/modules/page_addr/i18n.js 文件。
  • 项目的 根目录/src/modules/page_addr/index.html 文件。

# Q2. 任务栏图标不显示或修改任务栏的图标?

项目的 项目根目录/src/main.js 找到创建窗口的方法,添加或修改图标,如下图: 1709117895884.png

# Q3. 修改窗口大小,位置等信息?

项目的 项目根目录/src/main.js 找到创建窗口的方法,参考文档https://www.electronjs.org/docs/latest/api/browser-window,如下图: 1709117975356.png

# Q4. 修改系统托盘菜单、图标、提示文字?

  • 系统托盘显示如图: 1709118051680.png
  • 系统托盘修改: 项目根目录/src/modules/tray/tray.set.js 设置托盘提示文字和图标,如下代码:

const Config = require('../../config.js');
const path = require('path');
const baseDir = path.join(__dirname, '../../../res');
let TrayImg = platform.darwin ? Config.MAC.TRAY : Config.WIN.TRAY; // 根目录/src/config.js 中配置
TrayImg = path.join(baseDir, TrayImg); // 托盘显示图标

let tray = {}
if (appTray) {
tray = appTray
} else {
tray = new Tray(TrayImg);
}

let trayMenu = Utils.getMenu(menus);
tray.on('click', () => {
openMainWindow()
});
tray.on('right-click', () => {
tray.popUpContextMenu(trayMenu)
});
tray.setImage(TrayImg); // 设置图标
tray.setToolTip(Config.MAIN_WINDOW.title); // 设置提示文字

- 登录前的菜单:
项目根目录/src/modules/tray/tray.main.js 设置托盘菜单、闪烁,如下代码:

```javascript
const Config = require('../../config.js');  
const setMenu = require('./tray.set.js')(electron);  
const path = require('path');  
const baseDir = path.join(__dirname, '../../../res');

const TrayImg =  path.join(baseDir, platform.darwin ? Config.MAC.TRAY : Config.WIN.TRAY); // 闪烁图标 根目录/src/config.js 中配置  
const TrayOffImg = path.join(baseDir, platform.darwin ? Config.MAC.TRAY_OFF : Config.WIN.TRAY_OFF); // 闪烁图标 根目录/src/config.js 中配置

const defaultMenus = () => { // 登录前的默认菜单  
    let locale = global.locale;  
    let template = [  
        {  
            label: locale.__('winTrayMenus.Open'), // 打开致信  
            click () {  
                openMainWindow() // 显示窗口  
            }  
        },  
        {  
            type: 'separator'  
        },  
        {  
            label: locale.__('winTrayMenus.Exit'), // 退出  
            click () {  
                app.quit(); // 退出程序  
            }  
        }  
    ];  
    return template;  
};

// 托盘闪烁操作  
const BlinkHandler = {  
    interval: null,  
    set: (enabled) => {  
        if (enabled) {  
            BlinkHandler.start();  
        } else {  
            BlinkHandler.stop();  
        }  
    },  
    start: () => {  
        BlinkHandler.stop();  
        let flag;  
        let iconFile = [ TrayImg, TrayOffImg ];  
        BlinkHandler.interval = setInterval(() => {  
            flag = !flag;  
            // 设置全局 tray 的 icon  
            if (BrowserWindow.tray && BrowserWindow.tray.setImage) {  
                BrowserWindow.tray.setImage(iconFile[ flag ? 1 : 0 ]);  
            }  
        }, 500);  
    },  
    stop: () => {  
        clearInterval(BlinkHandler.interval);  
        BlinkHandler.interval = null;  
        // 设置全局 tray 的 icon  
        if (BrowserWindow.tray) {  
            BrowserWindow.tray.setImage(TrayImg);  
        }  
    }  
};

ipcMain.on('tray-blink', (event, enabled) => {  
    BlinkHandler.set(enabled);  
});
  • 登录后托盘设置: 项目根目录/src/adapt-old.js 搜索 setTrayMenu 方法,设置登录后和锁定时的托盘菜单, 如下:
/**  
 * 设置托盘菜单  
 *  
 * @param {string} type 托盘菜单类型  
 *   
 * Tray 文档地址  
 * https://electronjs.org/docs/api/tray  
 *   
 * PS:执行下面的命令设置托盘菜单  
 *    ZX_CLIENT.setTrayMenu('login')  
 */  
function setTrayMenu(type) {  
  var Tray = ZxDesktop.require('Tray');  
  const locale = remote.getGlobal('locale');  
  var BrowserWindow = ZxDesktop.require('BrowserWindow');  
  var app = ZxDesktop.require('App');

  // 登录之前,和锁定的菜单  
  var loginMenus = [  
    {  
      label: locale.__('winTrayMenus.Open'), 打开致信  
      click: function () {  
        console.log(locale.__('winTrayMenus.Open'))  
        BrowserWindow.show();  
      }  
    },  
    {  
      type: 'separator'  
    },  
    {  
      label: locale.__('winTrayMenus.Exit'), // 退出  
      click: function () {  
        console.log(locale.__('winTrayMenus.Exit'))  
        app.quit();  
      }  
    }  
  ];

  // 登录之后的菜单  
  var loggedMenus = [  
    {  
      label: locale.__('winTrayMenus.Open'), // 打开致信  
      click: function () {  
        console.log(locale.__('winTrayMenus.Open'))  
        BrowserWindow.show();  
      }  
    },  
    {  
      label: locale.__('winTrayMenus.lock'), // 锁定  
      click: function () {  
        console.log(locale.__('winTrayMenus.lock'))  
        ipcRenderer.send('lock-screen');  
      }  
    },  
    {  
      type: 'separator'  
    },  
    {  
      label: locale.__('winTrayMenus.logout'), // 注销  
      click: function () {  
        console.log(locale.__('winTrayMenus.logout'))  
        ZX_CLIENT.setTrayMenu("login")  
        ipcRenderer.send('go-logout');  
      }  
    },  
    {  
      label: locale.__('winTrayMenus.Exit'), // 退出  
      click: function () {  
        console.log(locale.__('winTrayMenus.Exit'))  
        app.quit();  
      }  
    }  
  ];

  switch (type) {  
    case 'login': // 锁定  
      Tray.setMenu({menus: loginMenus});  
      break;

    case 'logged': // 登录后  
      Tray.setMenu({menus: loggedMenus});  
      setLoginAppMenus();  
      break;

    default:  
      break;  
  }  
}

# Q5. 启动致信客户端,配置IP页面,文字不显示 ?

1709118381892.png 删除 appdata/zhixin/uc.cfg 文件, APPDATA 路径:%APPDATA% Windows 中 $XDG_CONFIG_HOME or ~/.config Linux 中~/Library/Application macOS 中

# Q6. 使用ZX_CLIENT.getMAC()获取mac地址时会出现为null的情况 ?

  • 终端里 cd 到源码所在目录,执行 npm uninstall getmac ;
  • 然后 npm install getmac , 安装新版本getmac 模块;
  • 修改 文件 \src\modules\system\system.render.js
const mac = require('getmac') // 修改成 ->  
const getMac = require('getmac').default;

// 注释或删除下面代码  
// mac.getMac(function(err, mac) {  
//     if (err) throw err  
//     macAddress = mac;  
// });

deviceId: {  
  get: () => {  
    return macAddress;  
  }  
}

// 修改成 ->  
deviceId: {  
  get: () => {  
    if (!macAddress) {  
      macAddress = getMac();  
    }  
    return macAddress;  
  }  
}
创建人:wangywyf
修改人:duxf