=【首页】岗位筛选 - 新增按薪资筛选条件(minSalary/maxSalary)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -53,6 +53,24 @@
|
|||||||
</radio-group>
|
</radio-group>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
<!-- 薪资 -->
|
||||||
|
<view v-if="activeTab === 'salary'" class="content-section">
|
||||||
|
<radio-group @change="(e) => handleSelect('salary', e)">
|
||||||
|
<label
|
||||||
|
v-for="option in salaryOptions"
|
||||||
|
:key="option.value"
|
||||||
|
class="radio-item"
|
||||||
|
:class="{ checked: selectedValues['salary'] === String(option.value) }"
|
||||||
|
>
|
||||||
|
<radio
|
||||||
|
:value="String(option.value)"
|
||||||
|
:checked="selectedValues['salary'] === String(option.value)"
|
||||||
|
/>
|
||||||
|
<text class="option-label">{{ option.label }}</text>
|
||||||
|
</label>
|
||||||
|
</radio-group>
|
||||||
|
</view>
|
||||||
|
|
||||||
<!-- 公司规模 -->
|
<!-- 公司规模 -->
|
||||||
<view v-if="activeTab === 'scale'" class="content-section">
|
<view v-if="activeTab === 'scale'" class="content-section">
|
||||||
<radio-group @change="(e) => handleSelect('scale', e)">
|
<radio-group @change="(e) => handleSelect('scale', e)">
|
||||||
@@ -143,6 +161,7 @@ const getJobTypeData = () => {
|
|||||||
const tabs = [
|
const tabs = [
|
||||||
{ key: 'education', label: '学历要求' },
|
{ key: 'education', label: '学历要求' },
|
||||||
{ key: 'experience', label: '工作经验' },
|
{ key: 'experience', label: '工作经验' },
|
||||||
|
{ key: 'salary', label: '薪资' },
|
||||||
{ key: 'scale', label: '公司规模' },
|
{ key: 'scale', label: '公司规模' },
|
||||||
{ key: 'jobType', label: '岗位类型' },
|
{ key: 'jobType', label: '岗位类型' },
|
||||||
{ key: 'area', label: '地区' }
|
{ key: 'area', label: '地区' }
|
||||||
@@ -155,6 +174,7 @@ const activeTab = ref('education');
|
|||||||
const selectedValues = reactive({
|
const selectedValues = reactive({
|
||||||
education: '',
|
education: '',
|
||||||
experience: '',
|
experience: '',
|
||||||
|
salary: '',
|
||||||
scale: '',
|
scale: '',
|
||||||
area: '',
|
area: '',
|
||||||
jobType: ''
|
jobType: ''
|
||||||
@@ -167,6 +187,16 @@ const scaleOptions = ref([]);
|
|||||||
const areaOptions = ref([]);
|
const areaOptions = ref([]);
|
||||||
const jobTypeOptions = ref([]);
|
const jobTypeOptions = ref([]);
|
||||||
|
|
||||||
|
// 薪资区间数据(单位:元/月),min/max 为空表示该侧不设限
|
||||||
|
const salaryOptions = ref([
|
||||||
|
{ label: '3K以下', value: '0-3000', min: '', max: 3000 },
|
||||||
|
{ label: '3-5K', value: '3000-5000', min: 3000, max: 5000 },
|
||||||
|
{ label: '5-10K', value: '5000-10000', min: 5000, max: 10000 },
|
||||||
|
{ label: '10-20K', value: '10000-20000', min: 10000, max: 20000 },
|
||||||
|
{ label: '20-50K', value: '20000-50000', min: 20000, max: 50000 },
|
||||||
|
{ label: '50K以上', value: '50000-0', min: 50000, max: '' },
|
||||||
|
]);
|
||||||
|
|
||||||
// 加载状态
|
// 加载状态
|
||||||
const loading = ref(true);
|
const loading = ref(true);
|
||||||
|
|
||||||
@@ -202,8 +232,23 @@ const handleClear = () => {
|
|||||||
|
|
||||||
// 确认筛选
|
// 确认筛选
|
||||||
const handleConfirm = () => {
|
const handleConfirm = () => {
|
||||||
console.log('selectedValues:', selectedValues);
|
const payload = { ...selectedValues };
|
||||||
emit('confirm', selectedValues);
|
// 将选中的薪资区间转换为 minSalary / maxSalary 参数
|
||||||
|
// 始终带上 minSalary / maxSalary(含空值),便于父组件在清除时移除旧值
|
||||||
|
let minSalary = '';
|
||||||
|
let maxSalary = '';
|
||||||
|
if (payload.salary) {
|
||||||
|
const selected = salaryOptions.value.find((item) => item.value === payload.salary);
|
||||||
|
if (selected) {
|
||||||
|
minSalary = selected.min;
|
||||||
|
maxSalary = selected.max;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
payload.minSalary = minSalary;
|
||||||
|
payload.maxSalary = maxSalary;
|
||||||
|
delete payload.salary;
|
||||||
|
console.log('selectedValues:', payload);
|
||||||
|
emit('confirm', payload);
|
||||||
handleClose();
|
handleClose();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user