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

View File

@@ -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,
})

View File

@@ -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)
)
}
}
}
);

View File

@@ -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,

View File

@@ -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')

View File

@@ -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 = {

View File

@@ -38,6 +38,10 @@
<template v-else-if="row.markReason === MarkAsNotSuitReason.JOB_NOT_SUIT">
<strong>{{ markReasonTopicMap[row.markReason] }}</strong>
</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>
</ElTableColumn>
<ElTableColumn prop="experienceName" label="工作经验" />
@@ -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 ''
}