From 5d96a019b86fb9fb2c83ee5168562da64757e6ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Wed, 12 Feb 2025 17:07:57 +0800 Subject: [PATCH] =?UTF-8?q?optimize:=20`=E6=97=A5=E5=BF=97=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=BF=9D=E5=AD=98=E7=9B=AE=E5=BD=95`=20=E5=8F=AF?= =?UTF-8?q?=E5=AF=B9=E8=AF=9D=E6=A1=86=E9=80=89=E6=8B=A9=E4=BA=86=EF=BC=8C?= =?UTF-8?q?=E5=8F=A6=E5=A4=96=EF=BC=8C=E4=BC=98=E5=8C=96=E4=BA=86=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E9=80=89=E6=8B=A9=E6=A1=86=E7=9A=84=E5=8F=82=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E9=BB=98=E8=AE=A4=E6=89=93=E5=BC=80=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=89=80=E5=9C=A8=E6=96=87=E4=BB=B6=E5=A4=B9?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/src/bridge/file-selector/backend.js | 11 +++-- .../gui/src/bridge/file-selector/front.js | 47 +++++++++++++++++-- packages/gui/src/view/pages/server.vue | 4 +- packages/gui/src/view/pages/setting.vue | 12 ++++- 4 files changed, 64 insertions(+), 10 deletions(-) diff --git a/packages/gui/src/bridge/file-selector/backend.js b/packages/gui/src/bridge/file-selector/backend.js index 6cdec45..2e7c27f 100644 --- a/packages/gui/src/bridge/file-selector/backend.js +++ b/packages/gui/src/bridge/file-selector/backend.js @@ -3,10 +3,12 @@ export default { const { ipcMain, dialog, log } = context ipcMain.on('file-selector', (event, message) => { if (message.key === 'open') { - dialog.showOpenDialog({ - properties: ['openFile'], - ...message, - }).then((result) => { + const options = message.options || {} + if (options.properties == null || options.properties.length === 0) { + options.properties = ['openFile'] + } + + dialog.showOpenDialog(options).then((result) => { if (result.canceled) { event.sender.send('file-selector', { key: 'canceled' }) } else { @@ -14,6 +16,7 @@ export default { } }).catch((err) => { log.error('选择文件失败:', err) + event.sender.send('file-selector', { key: 'error', error: err }) }) } }) diff --git a/packages/gui/src/bridge/file-selector/front.js b/packages/gui/src/bridge/file-selector/front.js index 69b0d31..5ceff2c 100644 --- a/packages/gui/src/bridge/file-selector/front.js +++ b/packages/gui/src/bridge/file-selector/front.js @@ -1,14 +1,55 @@ function install (app, api) { api.fileSelector = { - open (value, options) { + + /** + * 打开文件选择框 + * + * 支持传参方式: + * 1. open(String defaultPath) + * 2. open(String defaultPath, String properties) + * 3. open(null, String properties) + * 4. open(String defaultPath, Object options) + * 5. open(Object options) + * + * @param value + * @param {Electron.OpenDialogOptions} options + * @returns {Promise} promise + */ + open (value = null, options = null) { + if (options == null && value && typeof value !== 'string') { + options = { ...value } + value = null + } else { + if (typeof options === 'string') { + if (options === 'dir') { + options = 'openDirectory' + } else if (options === 'file') { + options = 'openFile' + } + + options = { properties: [options] } // options 为字符串时,视为 properties 属性的值 + } else { + options = options || {} + } + } + + // 如果没有 defaultPath,则使用 value 作为 defaultPath + if (!options.defaultPath && value && typeof value === 'string') { + options.defaultPath = value + } + return new Promise((resolve, reject) => { - api.ipc.send('file-selector', { key: 'open', value, ...options }) + api.ipc.send('file-selector', { key: 'open', options }) api.ipc.on('file-selector', (event, message) => { console.log('selector', message) if (message.key === 'selected') { resolve(message.value) + } else if (message.key === 'canceled') { + resolve('') // 没有选择文件 + } else if (message.key === 'error') { + reject(message.error) } else { - reject(new Error('没有选择文件')) + reject(new Error('未知的响应')) } api.ipc.on('file-selector', () => {}) }) diff --git a/packages/gui/src/view/pages/server.vue b/packages/gui/src/view/pages/server.vue index d8d5d7b..bcfb04d 100644 --- a/packages/gui/src/view/pages/server.vue +++ b/packages/gui/src/view/pages/server.vue @@ -39,13 +39,13 @@ export default { }, methods: { async onCrtSelect () { - const value = await this.$api.fileSelector.open() + const value = await this.$api.fileSelector.open(this.config.server.setting.rootCaFile.certPath, 'file') if (value != null && value.length > 0) { this.config.server.setting.rootCaFile.certPath = value[0] } }, async onKeySelect () { - const value = await this.$api.fileSelector.open() + const value = await this.$api.fileSelector.open(this.config.server.setting.rootCaFile.keyPath, 'file') if (value != null && value.length > 0) { this.config.server.setting.rootCaFile.keyPath = value[0] } diff --git a/packages/gui/src/view/pages/setting.vue b/packages/gui/src/view/pages/setting.vue index 684f072..8a88c17 100644 --- a/packages/gui/src/view/pages/setting.vue +++ b/packages/gui/src/view/pages/setting.vue @@ -321,6 +321,12 @@ export default { } this.$refs.maxLogFileSize.focus() }, + async onLogFileSavePathSelect () { + const value = await this.$api.fileSelector.open(this.config.app.logFileSavePath, 'dir') + if (value != null && value.length > 0) { + this.config.app.logFileSavePath = value[0] + } + }, }, } @@ -470,7 +476,11 @@ export default {
- +
修改后,重启DS才生效!
注意:原目录中的文件不会自动转移到新的目录,请自行转移或删除。