diff --git a/packages/ui/package.json b/packages/ui/package.json index fa23227..e19fa08 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -40,6 +40,7 @@ "electron-updater": "^6.1.7", "minimist": "^1.2.8", "node-machine-id": "^1.1.12", + "pinia": "^3.0.2", "puppeteer": "20.1.0", "puppeteer-extra-plugin-stealth": "2.11.2", "uuid": "^11.1.0" diff --git a/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/index.ts b/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/index.ts index bdd9941..8d2409c 100644 --- a/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/index.ts +++ b/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/index.ts @@ -5,7 +5,6 @@ import './app-menu' import initIpc from './ipc' import gtag from '../../utils/gtag' import initPublicIpc from '../../utils/initPublicIpc' -import { checkUpdateForUi } from '../../features/updater' export function openSettingWindow() { // TODO: singleton lock; how can we check if there is another process should run as singleton with arguments? if (!app.requestSingleInstanceLock()) { @@ -66,6 +65,4 @@ export function openSettingWindow() { globalShortcut.unregister('Command+Option+Shift+/') }) }) - - checkUpdateForUi() } diff --git a/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/ipc/index.ts b/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/ipc/index.ts index fe2def6..82af5f5 100644 --- a/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/ipc/index.ts +++ b/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/ipc/index.ts @@ -50,6 +50,7 @@ import { readNoReplyReminderLlmMockWindow } from '../../../window/readNoReplyReminderLlmMockWindow' import { RequestSceneEnum } from '../../../features/llm-request-log' +import { checkUpdateForUi } from '../../../features/updater' export default function initIpc() { ipcMain.handle('fetch-config-file-content', async () => { @@ -579,6 +580,10 @@ export default function initIpc() { ipcMain.on('close-read-no-reply-reminder-llm-mock-window', () => readNoReplyReminderLlmMockWindow?.close() ) + ipcMain.handle('check-update', async () => { + const newRelease = await checkUpdateForUi() + return newRelease + }) ipcMain.handle('exit-app-immediately', () => { app.exit(0) diff --git a/packages/ui/src/renderer/src/main.ts b/packages/ui/src/renderer/src/main.ts index 464baf0..b6b7cec 100644 --- a/packages/ui/src/renderer/src/main.ts +++ b/packages/ui/src/renderer/src/main.ts @@ -2,13 +2,15 @@ import { createApp } from 'vue' import ElementPlus, { ElMessage } from 'element-plus' import App from './App.vue' import router from './router' +import { createPinia } from 'pinia' import 'normalize.css' import './style/public.scss' import 'element-plus/dist/index.css' import 'virtual:uno.css' import 'animate.css' -createApp(App).use(router).use(ElementPlus).mount('#app') +const pinia = createPinia() +createApp(App).use(pinia).use(router).use(ElementPlus).mount('#app') electron.ipcRenderer.on('toast-message', (_, payload) => { ElMessage(payload) }) diff --git a/packages/ui/src/renderer/src/page/MainLayout/index.vue b/packages/ui/src/renderer/src/page/MainLayout/index.vue index ff3e210..e242260 100644 --- a/packages/ui/src/renderer/src/page/MainLayout/index.vue +++ b/packages/ui/src/renderer/src/page/MainLayout/index.vue @@ -96,13 +96,43 @@ 公司库
-
当前版本: {{ buildInfo.version }}({{ buildInfo.buildVersion }})
-
- 项目首页 +
- | - 反馈问题 + 最新版本: {{ updateStore.availableNewRelease.releaseVersion }} + +
+
+ 从GitHub下载 + | + 了解更新内容 +
+
+
+
当前版本: {{ buildInfo.version }}({{ buildInfo.buildVersion }})
+
@@ -121,6 +151,8 @@ import { TopRight, QuestionFilled } from '@element-plus/icons-vue' import useBuildInfo from '@renderer/hooks/useBuildInfo' import { debounce } from 'lodash-es' import { gtagRenderer } from '@renderer/utils/gtag' +import { useUpdateStore } from '../../store/index' + const router = useRouter() const unmountedCbs: Array> = [] onUnmounted(() => { @@ -175,6 +207,16 @@ const handleLaunchBossSite = debounce( 1000, { leading: true, trailing: false } ) + +const updateStore = useUpdateStore() +function handleDownloadNewReleaseClick() { + gtagRenderer('click_download_release_form_nav') + electron.ipcRenderer.send('open-external-link', updateStore.availableNewRelease!.assetUrl) +} +function handleViewNewReleaseClick() { + gtagRenderer('click_view_release_form_nav') + electron.ipcRenderer.send('open-external-link', updateStore.availableNewRelease!.releasePageUrl) +}