diff --git a/packages/geek-auto-start-chat-with-boss/index.mjs b/packages/geek-auto-start-chat-with-boss/index.mjs index 6866e80..f433826 100644 --- a/packages/geek-auto-start-chat-with-boss/index.mjs +++ b/packages/geek-auto-start-chat-with-boss/index.mjs @@ -16,9 +16,9 @@ import { calculateTotalCombinations, combineFiltersWithConstraintsGenerator } fr import { default as jobFilterConditions } from './internal-config/job-filter-conditions-20241002.json' import { default as rawIndustryFilterExemption } from './internal-config/job-filter-industry-filter-exemption-20241002.json' import { ChatStartupFrom } from '@geekgeekrun/sqlite-plugin/dist/entity/ChatStartupLog' -import { MarkAsNotSuitReason, MarkAsNotSuitOp, StrategyScopeOptionWhenMarkJobNotMatch } from '@geekgeekrun/sqlite-plugin/dist/enums' +import { MarkAsNotSuitReason, MarkAsNotSuitOp, StrategyScopeOptionWhenMarkJobNotMatch, SalaryCalculateWay } from '@geekgeekrun/sqlite-plugin/dist/enums' import { activeDescList } from './constant.mjs' - +import { parseSalary } from "@geekgeekrun/sqlite-plugin/dist/utils/parser" const jobFilterConditionsMapByCode = {} Object.values(jobFilterConditions).forEach(arr => { arr.forEach(option => { @@ -86,6 +86,19 @@ const expectCityList = readConfigFile('boss.json').expectCityList ?? [] const strategyScopeOptionWhenMarkJobCityNotMatch = readConfigFile('boss.json').strategyScopeOptionWhenMarkJobCityNotMatch ?? StrategyScopeOptionWhenMarkJobNotMatch.ONLY_COMPANY_MATCHED_JOB +// salary +const expectSalaryLow = parseFloat(readConfigFile('boss.json').expectSalaryLow) || null +const expectSalaryHigh = parseFloat(readConfigFile('boss.json').expectSalaryHigh) || null +const expectSalaryCalculateWay = readConfigFile('boss.json').expectSalaryCalculateWay ?? SalaryCalculateWay.MONTH_SALARY +const expectSalaryNotMatchStrategy = readConfigFile('boss.json').expectSalaryNotMatchStrategy ?? MarkAsNotSuitOp.NO_OP +const isSalaryFilterEnabled = expectSalaryLow || expectSalaryHigh +const strategyScopeOptionWhenMarkSalaryNotMatch = readConfigFile('boss.json').strategyScopeOptionWhenMarkSalaryNotMatch ?? StrategyScopeOptionWhenMarkJobNotMatch.ONLY_COMPANY_MATCHED_JOB + +// work exp +const expectWorkExpList = readConfigFile('boss.json').expectWorkExpList ?? [] +const expectWorkExpNotMatchStrategy = readConfigFile('boss.json').expectWorkExpNotMatchStrategy ?? MarkAsNotSuitOp.NO_OP +const strategyScopeOptionWhenMarkJobWorkExpNotMatch = readConfigFile('boss.json').strategyScopeOptionWhenMarkJobWorkExpNotMatch ?? StrategyScopeOptionWhenMarkJobNotMatch.ONLY_COMPANY_MATCHED_JOB + const markAsNotActiveSelectedTimeRange = (() => { let n = readConfigFile('boss.json').markAsNotActiveSelectedTimeRange if ( @@ -189,19 +202,16 @@ async function markJobAsNotSuitInRecommendPage (reasonCode) { } break } - case MarkAsNotSuitReason.JOB_CITY_NOT_SUIT: { - const bossNotActiveOptionProxy = await chooseReasonDialogProxy.$(`.zp-type-item[title$="城市"]`) - if (bossNotActiveOptionProxy) { - await bossNotActiveOptionProxy.click() + case MarkAsNotSuitReason.JOB_WORK_EXP_NOT_SUIT: + case MarkAsNotSuitReason.JOB_CITY_NOT_SUIT: + case MarkAsNotSuitReason.JOB_SALARY_NOT_SUIT: { + const opProxy = (await chooseReasonDialogProxy.$(`.zp-type-item[title$="城市"]`)) + ?? (await chooseReasonDialogProxy.$(`.zp-type-item[title="同城距离远"]`)) + ?? (await chooseReasonDialogProxy.$(`.zp-type-item[title="公司不感兴趣"]`)) + ?? (await chooseReasonDialogProxy.$(`.zp-type-item[title="面试过/入职过"]`)) + if (opProxy) { + await opProxy.click() isOptionChosen = true - } else { - const fallbackOptionProxy = (await chooseReasonDialogProxy.$(`.zp-type-item[title="同城距离远"]`)) - ?? (await chooseReasonDialogProxy.$(`.zp-type-item[title="公司不感兴趣"]`)) - ?? (await chooseReasonDialogProxy.$(`.zp-type-item[title="面试过/入职过"]`)) - if (fallbackOptionProxy) { - await fallbackOptionProxy.click() - isOptionChosen = true - } } break } @@ -539,10 +549,29 @@ async function toRecommendPage (hooks) { // due to city can get from list immediately // so just set those job which city is not suit to blockJobNotSuit // to skip view detail + + // skip invalid salaryData (兼职、日结、实习 etc) + jobListData.forEach(it => { + const salaryData = parseSalary(it.salaryDesc) + if (!salaryData.high || !salaryData.low) { + blockJobNotSuit.add(it.encryptJobId) + } + }) if ( - expectCityNotMatchStrategy === MarkAsNotSuitOp.NO_OP && - Array.isArray(expectCityList) && - expectCityList.length + ( + expectCityNotMatchStrategy === MarkAsNotSuitOp.NO_OP && + Array.isArray(expectCityList) && + expectCityList.length + ) || + ( + expectWorkExpNotMatchStrategy === MarkAsNotSuitOp.NO_OP && + Array.isArray(expectWorkExpList) && + expectWorkExpList.length + ) || + ( + strategyScopeOptionWhenMarkSalaryNotMatch === MarkAsNotSuitOp.NO_OP && + isSalaryFilterEnabled + ) ) { console.log(`add job city not suit into blockJobNotSuit set`) for (const it of jobListData) { @@ -557,6 +586,26 @@ async function toRecommendPage (hooks) { let hasReachLastPage = false let targetJobIndex = -1 let targetJobData, selectedJobData // they show be same; one is from list, another is from detail + function checkIfSalarySuit(salaryDesc) { + const salaryData = parseSalary(salaryDesc) + if (expectSalaryCalculateWay === SalaryCalculateWay.MONTH_SALARY) { + if (expectSalaryHigh && salaryData.high > expectSalaryHigh) { + return false + } + if (expectSalaryLow && salaryData.low < expectSalaryLow) { + return false + } + } else if (expectSalaryCalculateWay === SalaryCalculateWay.ANNUAL_PACKAGE) { + const salaryDataMonth = salaryData.month || 12 + if (expectSalaryHigh && (salaryData.high * salaryDataMonth) / 10 > expectSalaryHigh) { + return false + } + if (expectSalaryLow && (salaryData.low * salaryDataMonth) / 10 < expectSalaryLow) { + return false + } + } + return true + } function getTempTargetJobIndexToCheckDetail () { return jobListData.findIndex(it => { return !blockBossNotNewChat.has(it.encryptBossId) && @@ -571,7 +620,7 @@ async function toRecommendPage (hooks) { : true ) || ( - // enter job detail to mark as not suit + // enter job detail to mark as not suit for city filter ( Array.isArray(expectCityList) && expectCityList.length && @@ -581,6 +630,27 @@ async function toRecommendPage (hooks) { ].includes(expectCityNotMatchStrategy) && strategyScopeOptionWhenMarkJobCityNotMatch === StrategyScopeOptionWhenMarkJobNotMatch.ALL_JOB ) ? !expectCityList.includes(it.cityName) : false + ) || ( + // enter job detail to mark as not suit for work exp filter + ( + Array.isArray(expectWorkExpList) && + expectWorkExpList.length && + [ + MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS, + MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL + ].includes(expectWorkExpNotMatchStrategy) && + strategyScopeOptionWhenMarkJobWorkExpNotMatch === StrategyScopeOptionWhenMarkJobNotMatch.ALL_JOB + ) ? !expectWorkExpList.includes(it.jobExperience) : false + ) || ( + // enter job detail to mark as not suit for salary filter + ( + isSalaryFilterEnabled && + [ + MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS, + MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL + ].includes(expectSalaryNotMatchStrategy) && + strategyScopeOptionWhenMarkSalaryNotMatch === StrategyScopeOptionWhenMarkJobNotMatch.ALL_JOB + ) ? !checkIfSalarySuit(it.salaryDesc) : false ) ) }) @@ -664,6 +734,186 @@ async function toRecommendPage (hooks) { // save the job detail info await hooks.jobDetailIsGetFromRecommendList?.promise(targetJobData) + //#region collect not suit reasons + const notSuitReasonIdToStrategyMap = {} + const notSuitConditionHandleMap = { + async active() { + blockBossNotActive.add(targetJobData.jobInfo.encryptUserId) + if (jobNotActiveStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS) { + try { + const { chosenReasonInUi } = await markJobAsNotSuitInRecommendPage(MarkAsNotSuitReason.BOSS_INACTIVE) + await hooks.jobMarkedAsNotSuit.promise( + targetJobData, + { + markFrom: ChatStartupFrom.AutoFromRecommendList, + markReason: MarkAsNotSuitReason.BOSS_INACTIVE, + extInfo: { + bossActiveTimeDesc: targetJobData.bossInfo.activeTimeDesc, + chosenReasonInUi + }, + markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS + } + ) + } catch { + } + } + else if (jobNotActiveStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL) { + try { + await hooks.jobMarkedAsNotSuit.promise( + targetJobData, + { + markFrom: ChatStartupFrom.AutoFromRecommendList, + markReason: MarkAsNotSuitReason.BOSS_INACTIVE, + extInfo: null, + markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL + } + ) + } catch { + } + } + }, + async city() { + blockJobNotSuit.add(targetJobData.jobInfo.encryptId) + if (expectCityNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS) { + try { + const { chosenReasonInUi } = await markJobAsNotSuitInRecommendPage(MarkAsNotSuitReason.JOB_CITY_NOT_SUIT) + await hooks.jobMarkedAsNotSuit.promise( + targetJobData, + { + markFrom: ChatStartupFrom.AutoFromRecommendList, + markReason: MarkAsNotSuitReason.JOB_CITY_NOT_SUIT, + extInfo: { + chosenReasonInUi + }, + markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS + } + ) + } catch { + } + } + else if (expectCityNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL) { + try { + await hooks.jobMarkedAsNotSuit.promise( + targetJobData, + { + markFrom: ChatStartupFrom.AutoFromRecommendList, + markReason: MarkAsNotSuitReason.JOB_CITY_NOT_SUIT, + extInfo: null, + markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL + } + ) + } catch { + } + } + }, + async workExp() { + blockJobNotSuit.add(targetJobData.jobInfo.encryptId) + if (expectWorkExpNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS) { + try { + const { chosenReasonInUi } = await markJobAsNotSuitInRecommendPage(MarkAsNotSuitReason.JOB_WORK_EXP_NOT_SUIT) + await hooks.jobMarkedAsNotSuit.promise( + targetJobData, + { + markFrom: ChatStartupFrom.AutoFromRecommendList, + markReason: MarkAsNotSuitReason.JOB_WORK_EXP_NOT_SUIT, + extInfo: { + chosenReasonInUi + }, + markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS + } + ) + } catch { + } + } + else if (expectWorkExpNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL) { + try { + await hooks.jobMarkedAsNotSuit.promise( + targetJobData, + { + markFrom: ChatStartupFrom.AutoFromRecommendList, + markReason: MarkAsNotSuitReason.JOB_WORK_EXP_NOT_SUIT, + extInfo: null, + markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL + } + ) + } catch { + } + } + }, + async jobDetail() { + blockJobNotSuit.add(targetJobData.jobInfo.encryptId) + if (jobNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS) { + try { + const { chosenReasonInUi } = await markJobAsNotSuitInRecommendPage(MarkAsNotSuitReason.JOB_NOT_SUIT) + await hooks.jobMarkedAsNotSuit.promise( + targetJobData, + { + markFrom: ChatStartupFrom.AutoFromRecommendList, + markReason: MarkAsNotSuitReason.JOB_NOT_SUIT, + extInfo: { + bossActiveTimeDesc: targetJobData.bossInfo.activeTimeDesc, + chosenReasonInUi + }, + markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS + } + ) + } catch { + } + } + else if (jobNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL) { + try { + await hooks.jobMarkedAsNotSuit.promise( + targetJobData, + { + markFrom: ChatStartupFrom.AutoFromRecommendList, + markReason: MarkAsNotSuitReason.JOB_NOT_SUIT, + extInfo: null, + markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL + } + ) + } catch { + } + } + }, + async salary() { + blockJobNotSuit.add(targetJobData.jobInfo.encryptId) + if (expectSalaryNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS) { + try { + const { chosenReasonInUi } = await markJobAsNotSuitInRecommendPage(MarkAsNotSuitReason.JOB_SALARY_NOT_SUIT) + await hooks.jobMarkedAsNotSuit.promise( + targetJobData, + { + markFrom: ChatStartupFrom.AutoFromRecommendList, + markReason: MarkAsNotSuitReason.JOB_SALARY_NOT_SUIT, + extInfo: { + salaryDesc: selectedJobData.salaryDesc, + chosenReasonInUi + }, + markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS + } + ) + } catch { + } + } + else if (expectSalaryNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL) { + try { + await hooks.jobMarkedAsNotSuit.promise( + targetJobData, + { + markFrom: ChatStartupFrom.AutoFromRecommendList, + markReason: MarkAsNotSuitReason.JOB_SALARY_NOT_SUIT, + extInfo: { + salaryDesc: selectedJobData.salaryDesc, + }, + markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL + } + ) + } catch { + } + } + } + } + //#region // null // 刚刚活跃 // 今日活跃 // 昨日活跃 // 3日内活跃 // 本周活跃 // 2周内活跃 @@ -674,122 +924,56 @@ async function toRecommendPage (hooks) { markAsNotActiveSelectedTimeRange > 0 && indexOfActiveText > 0 && indexOfActiveText <= markAsNotActiveSelectedTimeRange ) { - blockBossNotActive.add(targetJobData.jobInfo.encryptUserId) // click prevent recommend button - if (jobNotActiveStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS) { - try { - const { chosenReasonInUi } = await markJobAsNotSuitInRecommendPage(MarkAsNotSuitReason.BOSS_INACTIVE) - await hooks.jobMarkedAsNotSuit.promise( - targetJobData, - { - markFrom: ChatStartupFrom.AutoFromRecommendList, - markReason: MarkAsNotSuitReason.BOSS_INACTIVE, - extInfo: { - bossActiveTimeDesc: targetJobData.bossInfo.activeTimeDesc, - chosenReasonInUi - }, - markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS - } - ) - } catch { - } - } - else if (jobNotActiveStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL) { - try { - await hooks.jobMarkedAsNotSuit.promise( - targetJobData, - { - markFrom: ChatStartupFrom.AutoFromRecommendList, - markReason: MarkAsNotSuitReason.BOSS_INACTIVE, - extInfo: null, - markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL - } - ) - } catch { - } - } - continue continueFind + notSuitReasonIdToStrategyMap.active = jobNotActiveStrategy } if ( (Array.isArray(expectCityList) && expectCityList.length) && !expectCityList.includes(selectedJobData.cityName) ) { - blockJobNotSuit.add(targetJobData.jobInfo.encryptId) - if (expectCityNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS) { - try { - const { chosenReasonInUi } = await markJobAsNotSuitInRecommendPage(MarkAsNotSuitReason.JOB_CITY_NOT_SUIT) - await hooks.jobMarkedAsNotSuit.promise( - targetJobData, - { - markFrom: ChatStartupFrom.AutoFromRecommendList, - markReason: MarkAsNotSuitReason.JOB_CITY_NOT_SUIT, - extInfo: { - chosenReasonInUi - }, - markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS - } - ) - } catch { - } - } - else if (expectCityNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL) { - try { - await hooks.jobMarkedAsNotSuit.promise( - targetJobData, - { - markFrom: ChatStartupFrom.AutoFromRecommendList, - markReason: MarkAsNotSuitReason.JOB_CITY_NOT_SUIT, - extInfo: null, - markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL - } - ) - } catch { - } - } - continue continueFind + notSuitReasonIdToStrategyMap.city = expectCityNotMatchStrategy + } + if ( + (Array.isArray(expectWorkExpList) && expectWorkExpList.length) && !expectWorkExpList.includes(selectedJobData.jobExperience) + ) { + notSuitReasonIdToStrategyMap.workExp = expectWorkExpNotMatchStrategy } if ( !testIfJobTitleOrDescriptionSuit(targetJobData.jobInfo) ) { - blockJobNotSuit.add(targetJobData.jobInfo.encryptId) - if (jobNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS) { - try { - const { chosenReasonInUi } = await markJobAsNotSuitInRecommendPage(MarkAsNotSuitReason.JOB_NOT_SUIT) - await hooks.jobMarkedAsNotSuit.promise( - targetJobData, - { - markFrom: ChatStartupFrom.AutoFromRecommendList, - markReason: MarkAsNotSuitReason.JOB_NOT_SUIT, - extInfo: { - bossActiveTimeDesc: targetJobData.bossInfo.activeTimeDesc, - chosenReasonInUi - }, - markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS - } - ) - } catch { - } - } - else if (jobNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL) { - try { - await hooks.jobMarkedAsNotSuit.promise( - targetJobData, - { - markFrom: ChatStartupFrom.AutoFromRecommendList, - markReason: MarkAsNotSuitReason.JOB_NOT_SUIT, - extInfo: null, - markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL - } - ) - } catch { - } - } + notSuitReasonIdToStrategyMap.jobDetail = jobNotMatchStrategy + } + if ( + !checkIfSalarySuit(selectedJobData.salaryDesc) + ) { + notSuitReasonIdToStrategyMap.salary = expectSalaryNotMatchStrategy + } + // #endregion + console.log('not suit reason and related strategy: ', notSuitReasonIdToStrategyMap) + + // #region execute mark logic + // 1. find the one mark on Boss + const markOnBossCondition = Object.keys(notSuitReasonIdToStrategyMap).find(k => notSuitReasonIdToStrategyMap[k] === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS) + if (markOnBossCondition) { + await notSuitConditionHandleMap[markOnBossCondition]() continue continueFind } - // test company again - when allow list not include target company, just skip + // 2. if there is no condition to mark Boss, then find the one mark on local db + const markOnLocalDbCondition = Object.keys(notSuitReasonIdToStrategyMap).find(k => notSuitReasonIdToStrategyMap[k] === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL) + if (markOnLocalDbCondition) { + await notSuitConditionHandleMap[markOnBossCondition]() + continue continueFind + } + // #endregion if ( + // test company again - when allow list not include target company, just skip enableCompanyAllowList && ![...expectCompanySet].find( name => selectedJobData.brandName?.toLowerCase?.()?.includes(name.toLowerCase()) - ) + ) || + // check if job has been marked as not suit or not active + [ + ...blockJobNotSuit, + ...blockBossNotActive + ].includes(targetJobData.jobInfo.encryptId) ) { // just skip continue continueFind diff --git a/packages/sqlite-plugin/src/enums.ts b/packages/sqlite-plugin/src/enums.ts index 10f3bf7..ddab6c5 100644 --- a/packages/sqlite-plugin/src/enums.ts +++ b/packages/sqlite-plugin/src/enums.ts @@ -4,6 +4,8 @@ export enum MarkAsNotSuitReason { USER_MANUAL_OPERATION_WITH_UNKNOWN_REASON = 2, JOB_NOT_SUIT = 3, JOB_CITY_NOT_SUIT = 4, + JOB_WORK_EXP_NOT_SUIT = 5, + JOB_SALARY_NOT_SUIT = 6, } export enum MarkAsNotSuitOp { @@ -16,3 +18,8 @@ export enum StrategyScopeOptionWhenMarkJobNotMatch { ALL_JOB = 1, ONLY_COMPANY_MATCHED_JOB = 2 } + +export enum SalaryCalculateWay { + MONTH_SALARY = 1, + ANNUAL_PACKAGE = 2, +} \ No newline at end of file diff --git a/packages/ui/package.json b/packages/ui/package.json index 276ca1d..48306f9 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -66,7 +66,7 @@ "electron": "28.2.0", "electron-builder": "^24.9.1", "electron-vite": "^2.0.0", - "element-plus": "^2.5.5", + "element-plus": "^2.8.4", "eslint": "^8.56.0", "eslint-plugin-vue": "^9.20.1", "find-chrome-bin": "^2.0.1", 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 d0f39f9..04d6ede 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 @@ -107,6 +107,8 @@ export default function initIpc() { if (hasOwn(payload, 'autoReminder')) { bossConfig.autoReminder = payload.autoReminder } + + // city if (hasOwn(payload, 'expectCityList')) { bossConfig.expectCityList = payload.expectCityList } @@ -117,6 +119,37 @@ export default function initIpc() { bossConfig.strategyScopeOptionWhenMarkJobCityNotMatch = payload.strategyScopeOptionWhenMarkJobCityNotMatch } + + // salary + if (hasOwn(payload, 'expectSalaryCalculateWay')) { + bossConfig.expectSalaryCalculateWay = payload.expectSalaryCalculateWay + } + if (hasOwn(payload, 'expectSalaryNotMatchStrategy')) { + bossConfig.expectSalaryNotMatchStrategy = payload.expectSalaryNotMatchStrategy + } + if (hasOwn(payload, 'strategyScopeOptionWhenMarkSalaryNotMatch')) { + bossConfig.strategyScopeOptionWhenMarkSalaryNotMatch = + payload.strategyScopeOptionWhenMarkSalaryNotMatch + } + if (hasOwn(payload, 'expectSalaryLow')) { + bossConfig.expectSalaryLow = payload.expectSalaryLow + } + if (hasOwn(payload, 'expectSalaryHigh')) { + bossConfig.expectSalaryHigh = payload.expectSalaryHigh + } + + // work exp + if (hasOwn(payload, 'expectWorkExpList')) { + bossConfig.expectWorkExpList = payload.expectWorkExpList + } + if (hasOwn(payload, 'expectWorkExpNotMatchStrategy')) { + bossConfig.expectWorkExpNotMatchStrategy = payload.expectWorkExpNotMatchStrategy + } + if (hasOwn(payload, 'strategyScopeOptionWhenMarkJobWorkExpNotMatch')) { + bossConfig.strategyScopeOptionWhenMarkJobWorkExpNotMatch = + payload.strategyScopeOptionWhenMarkJobWorkExpNotMatch + } + promiseArr.push(writeConfigFile('boss.json', bossConfig)) if (hasOwn(payload, 'expectCompanies')) { diff --git a/packages/ui/src/main/window/mainWindow.ts b/packages/ui/src/main/window/mainWindow.ts index fbe6031..79797a2 100644 --- a/packages/ui/src/main/window/mainWindow.ts +++ b/packages/ui/src/main/window/mainWindow.ts @@ -10,7 +10,7 @@ export function createMainWindow(): BrowserWindow { mainWindow = new BrowserWindow({ width: 1280, height: 720, - minWidth: 1024, + minWidth: 1280, show: false, autoHideMenuBar: true, ...(process.platform === 'linux' diff --git a/packages/ui/src/renderer/src/page/MainLayout/GeekAutoStartChatWithBoss/components/CityChooser.vue b/packages/ui/src/renderer/src/page/MainLayout/GeekAutoStartChatWithBoss/components/CityChooser.vue index d31609c..b07f057 100644 --- a/packages/ui/src/renderer/src/page/MainLayout/GeekAutoStartChatWithBoss/components/CityChooser.vue +++ b/packages/ui/src/renderer/src/page/MainLayout/GeekAutoStartChatWithBoss/components/CityChooser.vue @@ -11,8 +11,23 @@
当前未选择任何期望城市,将不会按照城市进行筛选
-
- 选择城市 +
+ 选择城市 import { PropType, ref } from 'vue' import cityGroupData from '../../../../../../common/constant/cityGroup.json' +import { gtagRenderer } from '@renderer/utils/gtag' const props = defineProps({ modelValue: { @@ -136,23 +152,29 @@ for (const group of cityGroup) { function handleDialogOpen() { activeTabName.value = '热门城市' selectedCities.value = [...(props.modelValue ?? [])] + gtagRenderer('choose_city_dialog_open') } function handleCancelClicked() { + gtagRenderer('choose_city_cancel_button_clicked') isDialogVisible.value = false } function handleConfirmClicked() { + gtagRenderer('choose_city_confirm_button_clicked', { value: selectedCities.value.join(',') }) isDialogVisible.value = false emits('update:modelValue', [...(selectedCities.value ?? [])]) } function handleDialogClosed() { selectedCities.value = [] + gtagRenderer('choose_city_dialog_closed') } function handleClearSelectedCitiesInModelValue() { emits('update:modelValue', []) + gtagRenderer('clear_selected_cities_in_mv_clicked') } function handleClearSelectedCitiesInDialog() { selectedCities.value = [] + gtagRenderer('clear_selected_cities_in_dialog_clicked') } 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 caf5cc4..b7c0628 100644 --- a/packages/ui/src/renderer/src/page/MainLayout/GeekAutoStartChatWithBoss/index.vue +++ b/packages/ui/src/renderer/src/page/MainLayout/GeekAutoStartChatWithBoss/index.vue @@ -38,7 +38,7 @@ }" >
- 期望公司白名单(以逗号分隔,不区分大小写;输入框留空表示不筛选) 期望公司信息位置图示公司信息UI位置图示
期望公司模板 公司列表模板
@@ -475,7 +771,7 @@