diff --git a/packages/geek-auto-start-chat-with-boss/index.mjs b/packages/geek-auto-start-chat-with-boss/index.mjs index 2b3f291..89e94fa 100644 --- a/packages/geek-auto-start-chat-with-boss/index.mjs +++ b/packages/geek-auto-start-chat-with-boss/index.mjs @@ -549,7 +549,12 @@ async function toRecommendPage (hooks) { : true ) || ( - (Array.isArray(expectCityList) && expectCityList.length) ? !expectCityList.includes(it.cityName) : false + // enter job detail to mark as not suit + ( + Array.isArray(expectCityList) && + expectCityList.length && + expectCityNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS + ) ? !expectCityList.includes(it.cityName) : false ) ) }) @@ -694,9 +699,8 @@ async function toRecommendPage (hooks) { targetJobData, { markFrom: ChatStartupFrom.AutoFromRecommendList, - markReason: MarkAsNotSuitReason.JOB_NOT_SUIT, + markReason: MarkAsNotSuitReason.JOB_CITY_NOT_SUIT, extInfo: { - bossActiveTimeDesc: targetJobData.bossInfo.activeTimeDesc, chosenReasonInUi }, markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS @@ -711,7 +715,7 @@ async function toRecommendPage (hooks) { targetJobData, { markFrom: ChatStartupFrom.AutoFromRecommendList, - markReason: MarkAsNotSuitReason.JOB_NOT_SUIT, + markReason: MarkAsNotSuitReason.JOB_CITY_NOT_SUIT, extInfo: null, markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL } @@ -911,6 +915,7 @@ export async function mainLoop (hooks) { await hooks.mainFlowWillLaunch?.callAsync({ jobNotMatchStrategy, jobNotActiveStrategy, + expectCityNotMatchStrategy, blockJobNotSuit, blockBossNotActive, }) diff --git a/packages/sqlite-plugin/src/index.ts b/packages/sqlite-plugin/src/index.ts index 2940b04..3fdd3e4 100644 --- a/packages/sqlite-plugin/src/index.ts +++ b/packages/sqlite-plugin/src/index.ts @@ -108,12 +108,14 @@ export default class SqlitePlugin { async ({ jobNotMatchStrategy, jobNotActiveStrategy, + expectCityNotMatchStrategy, blockJobNotSuit, blockBossNotActive, }) => { if ( jobNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL || - jobNotActiveStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL + jobNotActiveStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL || + expectCityNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL ) { const ds = await this.initPromise; const last7DayMarkRecords = (await getNotSuitMarkRecordsInLastSomeDays(ds, 7) ?? []); @@ -142,6 +144,16 @@ export default class SqlitePlugin { id => blockJobNotSuit.add(id) ) } + if (expectCityNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL) { + last7DayMarkRecords + .filter(it => it.markReason === MarkAsNotSuitReason.JOB_CITY_NOT_SUIT) + .map( + it => it.encryptJobId + ) + .forEach( + id => blockJobNotSuit.add(id) + ) + } } } ); diff --git a/packages/ui/src/main/flow/LAUNCH_BOSS_SITE/index.ts b/packages/ui/src/main/flow/LAUNCH_BOSS_SITE/index.ts index 36a7c51..38895f2 100644 --- a/packages/ui/src/main/flow/LAUNCH_BOSS_SITE/index.ts +++ b/packages/ui/src/main/flow/LAUNCH_BOSS_SITE/index.ts @@ -92,7 +92,11 @@ const attachRequestsListener = async (target: Target) => { }, markReason: MarkAsNotSuitReason.USER_MANUAL_OPERATION_WITH_UNKNOWN_REASON } - gtag('job_marked_as_not_suit', { markFrom: markDetail.markFrom }) + gtag('job_marked_as_not_suit', { + markFrom: markDetail.markFrom, + bossActiveTimeDesc: currentJobData?.bossInfo?.activeTimeDesc, + encryptJobId: currentJobData?.jobInfo?.encryptId + }) if (reasonCodeToTextMap[chosenCode]?.includes('活跃度低')) { markDetail.markReason = MarkAsNotSuitReason.BOSS_INACTIVE markDetail.extInfo.bossActiveTimeDesc = currentJobData?.bossInfo.activeTimeDesc @@ -127,7 +131,10 @@ const attachRequestsListener = async (target: Target) => { const currentUserInfo = await page.evaluate( 'document.querySelector(".job-detail-box").__vue__.$store.state.userInfo' ) - gtag('new_chat_startup', { chatStartupFrom: ChatStartupFrom.ManuallyFromRecommendList }) + gtag('new_chat_startup', { + chatStartupFrom: ChatStartupFrom.ManuallyFromRecommendList, + encryptJobId: currentJobData?.jobInfo?.encryptId + }) await saveChatStartupRecord( await dbInitPromise, currentJobData, diff --git a/packages/ui/src/main/utils/gtag/GtagPlugin.ts b/packages/ui/src/main/utils/gtag/GtagPlugin.ts index 12a98f3..e0401d0 100644 --- a/packages/ui/src/main/utils/gtag/GtagPlugin.ts +++ b/packages/ui/src/main/utils/gtag/GtagPlugin.ts @@ -2,11 +2,20 @@ import gtag from '.' export default class GtagPlugin { apply(hooks) { - hooks.newChatStartup.tap('GtagPlugin', (_, { chatStartupFrom }) => { - gtag('new_chat_startup', { chatStartupFrom }) + hooks.newChatStartup.tap('GtagPlugin', (jobData, { chatStartupFrom }) => { + gtag('new_chat_startup', { + chatStartupFrom, + encryptJobId: jobData.jobInfo.encryptId + }) }) - hooks.jobMarkedAsNotSuit.tap('GtagPlugin', (_, { markFrom }) => { - gtag('job_marked_as_not_suit', { markFrom }) + hooks.jobMarkedAsNotSuit.tap('GtagPlugin', (jobData, { markFrom, markOp, markReason }) => { + gtag('job_marked_as_not_suit', { + markFrom, + markOp, + markReason, + bossActiveTimeDesc: jobData.bossInfo.activeTimeDesc, + encryptJobId: jobData.jobInfo.encryptId + }) }) hooks.noPositionFoundForCurrentJob.tap('GtagPlugin', () => { gtag('no_position_found_for_current_job') diff --git a/packages/ui/src/renderer/src/page/MainLayout/GeekAutoStartChatWithBoss/index.vue b/packages/ui/src/renderer/src/page/MainLayout/GeekAutoStartChatWithBoss/index.vue index f60e42c..d681353 100644 --- a/packages/ui/src/renderer/src/page/MainLayout/GeekAutoStartChatWithBoss/index.vue +++ b/packages/ui/src/renderer/src/page/MainLayout/GeekAutoStartChatWithBoss/index.vue @@ -498,6 +498,11 @@ electron.ipcRenderer.invoke('fetch-config-file-content').then((res) => { : MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS formContent.value.expectCityList = res.config['boss.json']?.expectCityList ?? [] + formContent.value.expectCityNotMatchStrategy = strategyOptionWhenCurrentJobNotMatch + .map((it) => it.value) + .includes(res.config['boss.json'].expectCityNotMatchStrategy) + ? res.config['boss.json'].expectCityNotMatchStrategy + : MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS }) const formRules = { diff --git a/packages/ui/src/renderer/src/page/MainLayout/MarkAsNotSuitRecord.vue b/packages/ui/src/renderer/src/page/MainLayout/MarkAsNotSuitRecord.vue index 914ab9a..e28e0ce 100644 --- a/packages/ui/src/renderer/src/page/MainLayout/MarkAsNotSuitRecord.vue +++ b/packages/ui/src/renderer/src/page/MainLayout/MarkAsNotSuitRecord.vue @@ -38,6 +38,10 @@ {{ markReasonTopicMap[row.markReason] }} + + {{ markReasonTopicMap[row.markReason] }} + {{ formatMarkReason(row) }} + @@ -139,7 +143,7 @@ async function getMarkAsNotSuitRecord() { try { gtagRenderer('mansr_request_sent', { page_no: pagination.value.pageNo, - page_size: pagination.value.pageSize, + page_size: pagination.value.pageSize }) isTableLoading.value = true const { data: res } = (await electron.ipcRenderer.invoke('get-mark-as-not-suit-record', { @@ -154,13 +158,13 @@ async function getMarkAsNotSuitRecord() { } gtagRenderer('mansr_request_success', { page_no: pagination.value.pageNo, - page_size: pagination.value.pageSize, + page_size: pagination.value.pageSize }) } catch (err) { gtagRenderer('mansr_request_error', { err, page_no: pagination.value.pageNo, - page_size: pagination.value.pageSize, + page_size: pagination.value.pageSize }) console.log(err) tableData.value = [] @@ -204,7 +208,8 @@ function handleViewJobSnapshotButtonClick(record: VMarkAsNotSuitLog) { const markReasonTopicMap = { [MarkAsNotSuitReason.BOSS_INACTIVE]: 'Boss不活跃', [MarkAsNotSuitReason.USER_MANUAL_OPERATION_WITH_UNKNOWN_REASON]: '手动标记不合适', - [MarkAsNotSuitReason.JOB_NOT_SUIT]: '职位不合适' + [MarkAsNotSuitReason.JOB_NOT_SUIT]: '职位不合适', + [MarkAsNotSuitReason.JOB_CITY_NOT_SUIT]: '工作地不合适' } function formatMarkReason(row: VMarkAsNotSuitLog) { @@ -236,6 +241,18 @@ function formatMarkReason(row: VMarkAsNotSuitLog) { .filter(Boolean) .join('\n') } + case MarkAsNotSuitReason.JOB_CITY_NOT_SUIT: { + const extInfo = (() => { + try { + return JSON.parse(row.extInfo) + } catch { + return null + } + })() + return [extInfo?.chosenReasonInUi?.text && `Boss选项内容:${extInfo.chosenReasonInUi.text}`] + .filter(Boolean) + .join('\n') + } default: { return '' }
{{ formatMarkReason(row) }}