show mark as not suit for city reason in not suit record table

This commit is contained in:
geekgeekrun
2025-05-25 22:45:13 +08:00
parent 03df5f8d5a
commit aee6340c6a
6 changed files with 70 additions and 15 deletions
@@ -549,7 +549,12 @@ async function toRecommendPage (hooks) {
: :
true 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, targetJobData,
{ {
markFrom: ChatStartupFrom.AutoFromRecommendList, markFrom: ChatStartupFrom.AutoFromRecommendList,
markReason: MarkAsNotSuitReason.JOB_NOT_SUIT, markReason: MarkAsNotSuitReason.JOB_CITY_NOT_SUIT,
extInfo: { extInfo: {
bossActiveTimeDesc: targetJobData.bossInfo.activeTimeDesc,
chosenReasonInUi chosenReasonInUi
}, },
markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS
@@ -711,7 +715,7 @@ async function toRecommendPage (hooks) {
targetJobData, targetJobData,
{ {
markFrom: ChatStartupFrom.AutoFromRecommendList, markFrom: ChatStartupFrom.AutoFromRecommendList,
markReason: MarkAsNotSuitReason.JOB_NOT_SUIT, markReason: MarkAsNotSuitReason.JOB_CITY_NOT_SUIT,
extInfo: null, extInfo: null,
markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL
} }
@@ -911,6 +915,7 @@ export async function mainLoop (hooks) {
await hooks.mainFlowWillLaunch?.callAsync({ await hooks.mainFlowWillLaunch?.callAsync({
jobNotMatchStrategy, jobNotMatchStrategy,
jobNotActiveStrategy, jobNotActiveStrategy,
expectCityNotMatchStrategy,
blockJobNotSuit, blockJobNotSuit,
blockBossNotActive, blockBossNotActive,
}) })
+13 -1
View File
@@ -108,12 +108,14 @@ export default class SqlitePlugin {
async ({ async ({
jobNotMatchStrategy, jobNotMatchStrategy,
jobNotActiveStrategy, jobNotActiveStrategy,
expectCityNotMatchStrategy,
blockJobNotSuit, blockJobNotSuit,
blockBossNotActive, blockBossNotActive,
}) => { }) => {
if ( if (
jobNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL || 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 ds = await this.initPromise;
const last7DayMarkRecords = (await getNotSuitMarkRecordsInLastSomeDays(ds, 7) ?? []); const last7DayMarkRecords = (await getNotSuitMarkRecordsInLastSomeDays(ds, 7) ?? []);
@@ -142,6 +144,16 @@ export default class SqlitePlugin {
id => blockJobNotSuit.add(id) 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)
)
}
} }
} }
); );
@@ -92,7 +92,11 @@ const attachRequestsListener = async (target: Target) => {
}, },
markReason: MarkAsNotSuitReason.USER_MANUAL_OPERATION_WITH_UNKNOWN_REASON 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('活跃度低')) { if (reasonCodeToTextMap[chosenCode]?.includes('活跃度低')) {
markDetail.markReason = MarkAsNotSuitReason.BOSS_INACTIVE markDetail.markReason = MarkAsNotSuitReason.BOSS_INACTIVE
markDetail.extInfo.bossActiveTimeDesc = currentJobData?.bossInfo.activeTimeDesc markDetail.extInfo.bossActiveTimeDesc = currentJobData?.bossInfo.activeTimeDesc
@@ -127,7 +131,10 @@ const attachRequestsListener = async (target: Target) => {
const currentUserInfo = await page.evaluate( const currentUserInfo = await page.evaluate(
'document.querySelector(".job-detail-box").__vue__.$store.state.userInfo' '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 saveChatStartupRecord(
await dbInitPromise, await dbInitPromise,
currentJobData, currentJobData,
+13 -4
View File
@@ -2,11 +2,20 @@ import gtag from '.'
export default class GtagPlugin { export default class GtagPlugin {
apply(hooks) { apply(hooks) {
hooks.newChatStartup.tap('GtagPlugin', (_, { chatStartupFrom }) => { hooks.newChatStartup.tap('GtagPlugin', (jobData, { chatStartupFrom }) => {
gtag('new_chat_startup', { chatStartupFrom }) gtag('new_chat_startup', {
chatStartupFrom,
encryptJobId: jobData.jobInfo.encryptId
})
}) })
hooks.jobMarkedAsNotSuit.tap('GtagPlugin', (_, { markFrom }) => { hooks.jobMarkedAsNotSuit.tap('GtagPlugin', (jobData, { markFrom, markOp, markReason }) => {
gtag('job_marked_as_not_suit', { markFrom }) gtag('job_marked_as_not_suit', {
markFrom,
markOp,
markReason,
bossActiveTimeDesc: jobData.bossInfo.activeTimeDesc,
encryptJobId: jobData.jobInfo.encryptId
})
}) })
hooks.noPositionFoundForCurrentJob.tap('GtagPlugin', () => { hooks.noPositionFoundForCurrentJob.tap('GtagPlugin', () => {
gtag('no_position_found_for_current_job') gtag('no_position_found_for_current_job')
@@ -498,6 +498,11 @@ electron.ipcRenderer.invoke('fetch-config-file-content').then((res) => {
: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS : MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS
formContent.value.expectCityList = res.config['boss.json']?.expectCityList ?? [] 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 = { const formRules = {
@@ -38,6 +38,10 @@
<template v-else-if="row.markReason === MarkAsNotSuitReason.JOB_NOT_SUIT"> <template v-else-if="row.markReason === MarkAsNotSuitReason.JOB_NOT_SUIT">
<strong>{{ markReasonTopicMap[row.markReason] }}</strong> <strong>{{ markReasonTopicMap[row.markReason] }}</strong>
</template> </template>
<template v-if="row.markReason === MarkAsNotSuitReason.JOB_CITY_NOT_SUIT">
<strong>{{ markReasonTopicMap[row.markReason] }}</strong>
<pre class="m-0 of-auto">{{ formatMarkReason(row) }}</pre>
</template>
</template> </template>
</ElTableColumn> </ElTableColumn>
<ElTableColumn prop="experienceName" label="工作经验" /> <ElTableColumn prop="experienceName" label="工作经验" />
@@ -139,7 +143,7 @@ async function getMarkAsNotSuitRecord() {
try { try {
gtagRenderer('mansr_request_sent', { gtagRenderer('mansr_request_sent', {
page_no: pagination.value.pageNo, page_no: pagination.value.pageNo,
page_size: pagination.value.pageSize, page_size: pagination.value.pageSize
}) })
isTableLoading.value = true isTableLoading.value = true
const { data: res } = (await electron.ipcRenderer.invoke('get-mark-as-not-suit-record', { const { data: res } = (await electron.ipcRenderer.invoke('get-mark-as-not-suit-record', {
@@ -154,13 +158,13 @@ async function getMarkAsNotSuitRecord() {
} }
gtagRenderer('mansr_request_success', { gtagRenderer('mansr_request_success', {
page_no: pagination.value.pageNo, page_no: pagination.value.pageNo,
page_size: pagination.value.pageSize, page_size: pagination.value.pageSize
}) })
} catch (err) { } catch (err) {
gtagRenderer('mansr_request_error', { gtagRenderer('mansr_request_error', {
err, err,
page_no: pagination.value.pageNo, page_no: pagination.value.pageNo,
page_size: pagination.value.pageSize, page_size: pagination.value.pageSize
}) })
console.log(err) console.log(err)
tableData.value = [] tableData.value = []
@@ -204,7 +208,8 @@ function handleViewJobSnapshotButtonClick(record: VMarkAsNotSuitLog) {
const markReasonTopicMap = { const markReasonTopicMap = {
[MarkAsNotSuitReason.BOSS_INACTIVE]: 'Boss不活跃', [MarkAsNotSuitReason.BOSS_INACTIVE]: 'Boss不活跃',
[MarkAsNotSuitReason.USER_MANUAL_OPERATION_WITH_UNKNOWN_REASON]: '手动标记不合适', [MarkAsNotSuitReason.USER_MANUAL_OPERATION_WITH_UNKNOWN_REASON]: '手动标记不合适',
[MarkAsNotSuitReason.JOB_NOT_SUIT]: '职位不合适' [MarkAsNotSuitReason.JOB_NOT_SUIT]: '职位不合适',
[MarkAsNotSuitReason.JOB_CITY_NOT_SUIT]: '工作地不合适'
} }
function formatMarkReason(row: VMarkAsNotSuitLog) { function formatMarkReason(row: VMarkAsNotSuitLog) {
@@ -236,6 +241,18 @@ function formatMarkReason(row: VMarkAsNotSuitLog) {
.filter(Boolean) .filter(Boolean)
.join('\n') .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: { default: {
return '' return ''
} }