192 lines
5.6 KiB
JavaScript
192 lines
5.6 KiB
JavaScript
const { shell } = require('electron');
|
|
const { getUrlParam } = require('../../eazax/browser-util');
|
|
const I18n = require('../../eazax/i18n');
|
|
const RendererEvent = require('../../eazax/renderer-event');
|
|
const PackageUtil = require('../../eazax/package-util');
|
|
const EditorRendererKit = require('../../eazax/editor-renderer-kit');
|
|
const ConfigManager = require('../../common/config-manager');
|
|
|
|
// 导入 Vue 工具函数
|
|
const { ref, watch, onMounted, onBeforeUnmount, createApp } = Vue;
|
|
|
|
/** 当前语言 */
|
|
const LANG = getUrlParam('lang');
|
|
|
|
// 构建 Vue 应用
|
|
const App = {
|
|
|
|
/**
|
|
* 设置
|
|
* @param {*} props
|
|
* @param {*} context
|
|
*/
|
|
setup(props, context) {
|
|
|
|
// 预设快捷键
|
|
const presets = ref([
|
|
{ key: '', name: t('none') },
|
|
{ key: 'custom', name: t('custom-key') },
|
|
{ key: 'F1', name: 'F1' },
|
|
{ key: 'F3', name: 'F3' },
|
|
{ key: 'F4', name: 'F4' },
|
|
{ key: 'F5', name: 'F5' },
|
|
{ key: 'F6', name: 'F6' },
|
|
{ key: 'CmdOrCtrl+F', name: 'Cmd/Ctrl + F' },
|
|
{ key: 'CmdOrCtrl+B', name: 'Cmd/Ctrl + B' },
|
|
{ key: 'CmdOrCtrl+Shift+F', name: 'Cmd/Ctrl + Shift + F' },
|
|
]);
|
|
// 选择
|
|
const selectKey = ref('');
|
|
// 自定义
|
|
const customKey = ref('');
|
|
// 打印详情
|
|
const printDetails = ref(true);
|
|
// 单行打印
|
|
const printFolding = ref(true);
|
|
// 自动检查更新
|
|
const autoCheckUpdate = ref(false);
|
|
|
|
// 仓库地址
|
|
const repositoryUrl = PackageUtil.repository;
|
|
// 包名
|
|
const packageName = PackageUtil.name;
|
|
|
|
// 监听选择快捷键
|
|
watch(selectKey, (value) => {
|
|
if (value !== 'custom') {
|
|
customKey.value = '';
|
|
}
|
|
});
|
|
|
|
// 监听自定义
|
|
watch(customKey, (value) => {
|
|
if (value !== '' && selectKey.value !== 'custom') {
|
|
selectKey.value = 'custom';
|
|
}
|
|
});
|
|
|
|
/**
|
|
* 获取配置
|
|
*/
|
|
function getConfig() {
|
|
const config = ConfigManager.get();
|
|
if (!config) return;
|
|
// 配置
|
|
printDetails.value = config.printDetails;
|
|
printFolding.value = config.printFolding;
|
|
autoCheckUpdate.value = config.autoCheckUpdate;
|
|
// 快捷键
|
|
const hotkey = config.hotkey;
|
|
if (!hotkey || hotkey === '') {
|
|
selectKey.value = '';
|
|
customKey.value = '';
|
|
return;
|
|
}
|
|
// 预设快捷键
|
|
for (let i = 0, l = presets.value.length; i < l; i++) {
|
|
if (presets.value[i].key === hotkey) {
|
|
selectKey.value = hotkey;
|
|
customKey.value = '';
|
|
return;
|
|
}
|
|
}
|
|
// 自定义快捷键
|
|
selectKey.value = 'custom';
|
|
customKey.value = hotkey;
|
|
}
|
|
|
|
/**
|
|
* 保存配置
|
|
*/
|
|
function setConfig() {
|
|
const config = {
|
|
hotkey: null,
|
|
printDetails: printDetails.value,
|
|
printFolding: printFolding.value,
|
|
autoCheckUpdate: autoCheckUpdate.value,
|
|
};
|
|
if (selectKey.value === 'custom') {
|
|
// 自定义输入是否有效
|
|
if (customKey.value === '') {
|
|
EditorRendererKit.print('warn', t('custom-key-error'));
|
|
return;
|
|
}
|
|
// 不可以使用双引号(避免 json 值中出现双引号而解析错误,导致插件加载失败)
|
|
if (customKey.value.includes('"')) {
|
|
customKey.value = customKey.value.replace(/\"/g, '');
|
|
EditorRendererKit.print('warn', t('quote-error'));
|
|
return;
|
|
}
|
|
config.hotkey = customKey.value;
|
|
} else {
|
|
config.hotkey = selectKey.value;
|
|
}
|
|
// 保存到本地
|
|
ConfigManager.set(config);
|
|
}
|
|
|
|
/**
|
|
* 应用按钮点击回调
|
|
* @param {*} event
|
|
*/
|
|
function onApplyBtnClick(event) {
|
|
// 保存配置
|
|
setConfig();
|
|
}
|
|
|
|
/**
|
|
* 翻译
|
|
* @param {string} key
|
|
*/
|
|
function t(key) {
|
|
return I18n.get(LANG, key);
|
|
}
|
|
|
|
/**
|
|
* 生命周期:挂载后
|
|
*/
|
|
onMounted(() => {
|
|
// 获取配置
|
|
getConfig();
|
|
// 覆盖 a 标签点击回调(使用默认浏览器打开网页)
|
|
const links = document.querySelectorAll('a[href]');
|
|
links.forEach((link) => {
|
|
link.addEventListener('click', (event) => {
|
|
event.preventDefault();
|
|
const url = link.getAttribute('href');
|
|
shell.openExternal(url);
|
|
});
|
|
});
|
|
// (主进程)检查更新
|
|
RendererEvent.send('check-update', false);
|
|
});
|
|
|
|
/**
|
|
* 生命周期:卸载前
|
|
*/
|
|
onBeforeUnmount(() => {
|
|
|
|
});
|
|
|
|
return {
|
|
presets,
|
|
selectKey,
|
|
customKey,
|
|
printDetails,
|
|
printFolding,
|
|
autoCheckUpdate,
|
|
repositoryUrl,
|
|
packageName,
|
|
onApplyBtnClick,
|
|
t,
|
|
};
|
|
|
|
},
|
|
|
|
};
|
|
|
|
// 创建实例
|
|
const app = createApp(App);
|
|
// 挂载
|
|
app.mount('#app');
|