enhance ui after add jobDetailRegExpMatchLogic option; change layout of job detail RegExp option

This commit is contained in:
geekgeekrun
2025-06-29 05:30:39 +08:00
parent d5dcdb4bd1
commit 8efce15fd5
@@ -520,50 +520,6 @@
><span><QuestionFilled w-1em h-1em mr2px /></span>如下各信息位置图示</el-button ><span><QuestionFilled w-1em h-1em mr2px /></span>如下各信息位置图示</el-button
> >
</el-tooltip> </el-tooltip>
<el-tooltip
effect="light"
placement="bottom"
@show="gtagRenderer('tooltip_show_about_how_to_fill_df')"
>
<template #content>
<p style="margin-top: 4px; margin-bottom: 4px">
目前版本中,职位名称正则、职位类型正则、职位描述正则三个筛选条件,为“且”的关系。<br />
也就是说,职位信息中只要任一不能匹配到,即这个职位会被标记不合适。<br />
你可以留空某个输入框,这表示任何职位一定匹配这个条件。<br />
如果三个输入框均留空,表示列表中出现的任意职位一定同时匹配这三个条件。
</p>
因此,可以按照如下场景填写你对于期望职位的筛选条件:
<ul style="margin-top: 4px; margin-bottom: 4px">
<li>
如果你只考虑工作类型,请填写“职位类型正则”输入框,其余两个输入框清空。<br />
这可以确保求职方向基本正确。
</li>
<li>
如果你着重关注职位描述,请填写“职位描述正则”,其余两个输入框酌情填写。
</li>
<li>如果你想开聊列表里的推荐的任意职位,请清空这三个输入框。</li>
</ul>
<div>
你可以在左侧"职位详情筛选模板"选择一个模板,并在选中模板基础上尝试修改
</div>
<div>
<b>“职位类型正则”填写过程中请注意</b
>,“职位类型”是由Boss直聘预定义好的一系列职位分类,<br />
因此<b>请按照这个分类编写正则来进行填写</b>。这个分类可以在此找到:<br />
<img w-400px src="../resources/job-type-source-entry.png" />
</div>
<a
href="javascript:;"
style="color: var(--el-color-primary)"
@click.prevent="handleHowToFillDetailFilterClick"
>请参阅这个链接</a
>
</template>
<el-button type="text" font-size-12px
><span><QuestionFilled w-1em h-1em mr2px /></span
>怎样填写下面的三个输入框?</el-button
>
</el-tooltip>
</div> </div>
<div> <div>
<el-dropdown ml20px @command="handleExpectJobFilterTemplateClicked"> <el-dropdown ml20px @command="handleExpectJobFilterTemplateClicked">
@@ -584,88 +540,166 @@
</el-dropdown> </el-dropdown>
</div> </div>
</div> </div>
<div :style="{ width: '100%' }">
<el-form-item mb0 prop="expectJobNameRegExpStr">
<div font-size-12px>职位名称/类型/描述正则匹配筛选逻辑</div>
<el-select
v-model="formContent.jobDetailRegExpMatchLogic"
@change="(value) => gtagRenderer('job_detail_re_ml_change', { value })"
>
<el-option
v-for="op in jobDetailRegExpMatchLogicOptions"
:key="op.value"
:label="op.name"
:value="op.value"
>{{ op.name }}</el-option
>
</el-select>
</el-form-item>
</div>
<div <div
:style="{ :style="{
display: 'grid',
gridTemplateColumns: '1fr 1em 1fr 1em 1fr',
gap: '5px',
width: '100%', width: '100%',
alignItems: 'end' display: 'flex',
gap: '10px'
}" }"
class="job-detail-filter-wrap"
> >
<el-form-item mb0 prop="expectJobNameRegExpStr"> <div flex-1>
<div font-size-12px>职位名称正则(不区分大小写)</div> <el-form-item mb0 prop="expectJobNameRegExpStr">
<el-input <div font-size-12px>职位类型/正则/描述 正则匹配筛选逻辑</div>
v-model="formContent.expectJobNameRegExpStr" <el-select
placeholder="true" v-model="formContent.jobDetailRegExpMatchLogic"
@blur=" @change="(value) => gtagRenderer('job_detail_re_ml_change', { value })"
formContent.expectJobNameRegExpStr = >
formContent.expectJobNameRegExpStr?.trim() ?? '' <el-option
" v-for="op in jobDetailRegExpMatchLogicOptions"
:key="op.value"
:label="op.name"
:value="op.value"
>{{ op.name }}</el-option
>
</el-select>
</el-form-item>
<div
:style="{
width: '100%',
height: '1px',
backgroundColor: '#f0f0f0',
marginTop: '0.5lh'
}"
/> />
</el-form-item> <div
<div mb10px font-size-12px flex flex-justify-center fw-800>且</div> :style="{
<el-form-item mb0 prop="expectJobTypeRegExpStr"> display: 'grid',
<div font-size-12px>职位类型正则(推荐填写,不区分大小写)</div> gridTemplateColumns: '2em 1fr',
<el-input gap: '5px',
v-model="formContent.expectJobTypeRegExpStr" flex: 1,
placeholder="true" alignItems: 'end'
@blur=" }"
formContent.expectJobTypeRegExpStr = class="job-detail-filter-wrap"
formContent.expectJobTypeRegExpStr?.trim() ?? '' >
" <div></div>
/> <el-tooltip
</el-form-item> effect="light"
<div mb10px font-size-12px flex flex-justify-center fw-800>且</div> placement="bottom"
<el-form-item mb0 prop="expectJobDescRegExpStr"> @show="gtagRenderer('tooltip_show_about_how_to_fill_df')"
<div font-size-12px>职位描述正则(不区分大小写)</div> >
<el-input <template #content>
v-model="formContent.expectJobDescRegExpStr" <div w-600px>
placeholder="true" <p style="margin-top: 4px; margin-bottom: 4px">
@blur=" 目前版本中,职位名称正则、职位类型正则、职位描述正则三个筛选条件,为“且”的关系。<br />
formContent.expectJobDescRegExpStr = 也就是说,职位信息中只要任一不能匹配到,即这个职位会被标记不合适。<br />
formContent.expectJobDescRegExpStr?.trim() ?? '' 你可以留空某个输入框,这表示任何职位一定匹配这个条件。<br />
" 如果三个输入框均留空,表示列表中出现的任意职位同时匹配这三个条件(即不根据职位类型/正则/描述进行筛选)。
/> </p>
</el-form-item> 因此,可以按照如下场景填写你对于期望职位的筛选条件:
</div> <ul style="margin-top: 4px; margin-bottom: 4px">
<template <li>
v-if=" 如果你只考虑工作类型,请填写“职位类型正则”输入框,其余两个输入框清空。<br />
formContent.expectJobNameRegExpStr?.trim() || 这可以确保求职方向基本正确。
formContent.expectJobTypeRegExpStr?.trim() || </li>
formContent.expectJobDescRegExpStr?.trim() <li>
" 如果你着重关注职位描述,请填写“职位描述正则”,其余两个输入框酌情填写。
> </li>
<div class="mt10px lh-2em font-size-12px"> <li>如果你想开聊列表里的推荐的任意职位,不根据职位类型/正则/描述进行筛选,请清空这三个输入框。</li>
当前职位名称/类型/描述不符合投递条件时: </ul>
<div>
你可以在左侧"职位详情筛选模板"选择一个模板,并在选中模板基础上尝试修改
</div>
<div>
<b>“职位类型正则”填写过程中请注意</b
>,“职位类型”是由Boss直聘预定义好的一系列职位分类,<br />
因此<b>请按照这个分类编写正则来进行填写</b>。这个分类可以在此找到:<br />
<img w-400px src="../resources/job-type-source-entry.png" />
</div>
<a
href="javascript:;"
style="color: var(--el-color-primary)"
@click.prevent="handleHowToFillDetailFilterClick"
>请参阅这个链接</a
>
</div>
</template>
<el-button
type="text"
font-size-12px
:style="{
width: 'fit-content',
padding: '0',
height: 'auto',
position: 'relative',
top: '6px'
}"
><span><QuestionFilled w-1em h-1em mr2px /></span
>怎样填写下面的三个输入框?它们工作机制是怎样的?</el-button
>
</el-tooltip>
<div></div>
<el-form-item mb0 prop="expectJobNameRegExpStr">
<div font-size-12px>职位名称正则(不区分大小写)</div>
<el-input
v-model="formContent.expectJobNameRegExpStr"
type="textarea"
:placeholder="getJobDetailRegExpMatchLogicConfig().inputPlaceholderText"
:autosize="{ minRows: 2 }"
max-h-6lh
@blur="
formContent.expectJobNameRegExpStr =
formContent.expectJobNameRegExpStr?.trim() ?? ''
"
/>
</el-form-item>
<div mb0px font-size-12px flex flex-justify-center fw-800>
{{ getJobDetailRegExpMatchLogicConfig().logicText }}
</div>
<el-form-item mb0 prop="expectJobTypeRegExpStr">
<div font-size-12px>职位类型正则(推荐填写,不区分大小写)</div>
<el-input
v-model="formContent.expectJobTypeRegExpStr"
type="textarea"
:placeholder="getJobDetailRegExpMatchLogicConfig().inputPlaceholderText"
:autosize="{ minRows: 2 }"
max-h-6lh
@blur="
formContent.expectJobTypeRegExpStr =
formContent.expectJobTypeRegExpStr?.trim() ?? ''
"
/>
</el-form-item>
<div mb0px font-size-12px flex flex-justify-center fw-800>
{{ getJobDetailRegExpMatchLogicConfig().logicText }}
</div>
<el-form-item mb0 prop="expectJobDescRegExpStr">
<div font-size-12px>职位描述正则(不区分大小写)</div>
<el-input
v-model="formContent.expectJobDescRegExpStr"
type="textarea"
:placeholder="getJobDetailRegExpMatchLogicConfig().inputPlaceholderText"
:autosize="{ minRows: 2 }"
max-h-6lh
@blur="
formContent.expectJobDescRegExpStr =
formContent.expectJobDescRegExpStr?.trim() ?? ''
"
/>
</el-form-item>
</div>
</div> </div>
<div <div
v-if="!isJobDetailRegExpEmpty()"
:style="{ :style="{
display: 'grid', width: '400px',
gridTemplateColumns: '1.25fr 0.75fr', borderLeft: '1px solid #f0f0f0',
gap: '10px 0', paddingLeft: '10px',
width: '100%', flex: `0 0 auto`
alignItems: 'end'
}" }"
> >
<div class="mt10px lh-2em font-size-12px">
当前职位名称/类型/描述不符合投递条件时:
</div>
<el-form-item mb0> <el-form-item mb0>
<el-select <el-select
v-model="formContent.jobNotMatchStrategy" v-model="formContent.jobNotMatchStrategy"
@@ -680,9 +714,17 @@
> >
</el-select> </el-select>
</el-form-item> </el-form-item>
<div />
</div> </div>
</template> <div
v-else
:style="{
width: '400px',
borderLeft: '1px solid transparent',
paddingLeft: '10px',
flex: `0 0 auto`
}"
/>
</div>
</div> </div>
<div class="h-1px bg-#f0f0f0" mt16px mb16px /> <div class="h-1px bg-#f0f0f0" mt16px mb16px />
<div mt16px> <div mt16px>
@@ -1307,6 +1349,40 @@ function handleHowToFillDetailFilterClick() {
'https://linux.do/t/topic/640626/74?u=geekgeekrun' 'https://linux.do/t/topic/640626/74?u=geekgeekrun'
) )
} }
function isJobDetailRegExpEmpty() {
return [
formContent.value.expectJobDescRegExpStr,
formContent.value.expectJobNameRegExpStr,
formContent.value.expectJobTypeRegExpStr
]
.map((it) => Boolean(it?.trim()))
.every((it) => it === false)
}
function getJobDetailRegExpMatchLogicConfig() {
const result = {
logicText: '-',
inputPlaceholderText: '-'
}
if (formContent.value.jobDetailRegExpMatchLogic === JobDetailRegExpMatchLogic.EVERY) {
Object.assign(result, {
logicText: '且',
inputPlaceholderText: 'true'
})
}
if (formContent.value.jobDetailRegExpMatchLogic === JobDetailRegExpMatchLogic.SOME) {
Object.assign(result, {
logicText: '或',
inputPlaceholderText: 'false'
})
}
if (isJobDetailRegExpEmpty()) {
result.inputPlaceholderText = 'true'
}
return result
}
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">