diff --git a/packages/ui/src/common/utils/resume.ts b/packages/ui/src/common/utils/resume.ts index f33e9fa..5c24bbb 100644 --- a/packages/ui/src/common/utils/resume.ts +++ b/packages/ui/src/common/utils/resume.ts @@ -78,6 +78,14 @@ export function formatResumeJsonToMarkdown(resume) { return result } +export function checkIsResumeContentValid(resumeItem: { content: ResumeContent }) { + return ( + !!resumeItem?.content && + resumeItem.content.geekProjExpList?.[0]?.name?.trim() && + resumeItem.content.geekWorkExpList?.[0]?.positionName?.trim() + ) +} + export function resumeContentEnoughDetect(resumeItem: { content: ResumeContent }) { return resumeItem?.content && formatResumeJsonToMarkdown(resumeItem)?.length > 800 } 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 295de2b..a20f520 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 @@ -38,7 +38,10 @@ import { autoReminderPromptTemplateFileName, writeDefaultAutoRemindPrompt } from '../../READ_NO_REPLY_AUTO_REMINDER/boss-operation' -import { resumeContentEnoughDetect } from '../../../../common/utils/resume' +import { + checkIsResumeContentValid, + resumeContentEnoughDetect +} from '../../../../common/utils/resume' export default function initIpc() { ipcMain.handle('fetch-config-file-content', async () => { @@ -510,6 +513,10 @@ export default function initIpc() { ipcMain.handle('check-if-auto-remind-prompt-valid', async () => { await getValidTemplate() }) + ipcMain.handle('check-is-resume-content-valid', async () => { + const res = (await readConfigFile('resumes.json'))?.[0] + return checkIsResumeContentValid(res) + }) ipcMain.handle('resume-content-enough-detect', async () => { const res = (await readConfigFile('resumes.json'))?.[0] return resumeContentEnoughDetect(res) diff --git a/packages/ui/src/renderer/src/page/MainLayout/ReadNoReplyReminder.vue b/packages/ui/src/renderer/src/page/MainLayout/ReadNoReplyReminder.vue index 9eef257..50b207b 100644 --- a/packages/ui/src/renderer/src/page/MainLayout/ReadNoReplyReminder.vue +++ b/packages/ui/src/renderer/src/page/MainLayout/ReadNoReplyReminder.vue @@ -270,6 +270,25 @@ const handleSubmit = async () => { formContent.value.autoReminder?.rechatContentSource === RECHAT_CONTENT_SOURCE.GEMINI_WITH_CHAT_CONTEXT ) { + if (!(await electron.ipcRenderer.invoke('check-is-resume-content-valid'))) { + gtagRenderer('cannot_launch_due_to_invalid_resume_content_dialog_show') + try { + await ElMessageBox.confirm(`简历内容无效;您需要编辑一下您的简历`, { + cancelButtonText: '取消', + confirmButtonText: '好的,去编辑我的简历', + dangerouslyUseHTMLString: true + }) + gtagRenderer('cannot_launch_due_to_invalid_resume_content_dialog_click_confirm') + try { + await electron.ipcRenderer.invoke('resume-edit') + } catch (err) { + console.log(err) + } + } catch { + gtagRenderer('cannot_launch_due_to_invalid_resume_content_dialog_click_cancel') + } + return + } try { await electron.ipcRenderer.invoke('check-if-llm-config-list-valid') } catch (err) { @@ -351,7 +370,9 @@ const handleSubmit = async () => { dangerouslyUseHTMLString: true } ) + gtagRenderer('resume_content_not_enough_dialog_click_confirm') } catch { + gtagRenderer('resume_content_not_enough_dialog_click_cancel') return } }