Parcourir la source

薪资范围优化

wkw il y a 6 mois
Parent
commit
c9804b719e
2 fichiers modifiés avec 124 ajouts et 72 suppressions
  1. 78 25
      src/components/postPush/postPush.vue
  2. 46 47
      src/views/resume/addResume.vue

+ 78 - 25
src/components/postPush/postPush.vue

@@ -60,10 +60,20 @@
 					</el-form-item>
 					<el-form-item prop="salaryRange"
 						:rules="[{ required: true, message: '请选择薪资范围', trigger: 'blur', },]" class="row45" label="薪资范围">
-						<el-select style="width: 100%;" v-model="postPushForm.salaryRange" placeholder="请选择薪资范围">
-							<el-option v-for="item in moneyList" :key="item.value" :label="item.value"
-								:value="item.value" />
-						</el-select>
+						<div style="display: flex; gap: 10px; align-items: center; width: 100%">
+							<!-- 最低薪资 -->
+							<el-select v-model="minSalary" placeholder="最低薪资" style="flex: 1">
+								<el-option v-for="item in moneyList" :key="item.value" :label="item.label"
+									:value="item.value" />
+							</el-select>
+							<span>-</span>
+							<!-- 最高薪资 -->
+							<el-select v-model="maxSalary" placeholder="最高薪资" style="flex: 1">
+								<el-option
+									v-for="item in moneyList.filter(i => parseK(i.value) >= parseK(minSalary))"
+									:key="item.value" :label="item.label" :value="item.value" />
+							</el-select>
+						</div>
 					</el-form-item>
 					<el-form-item prop="salaryTimes"
 						:rules="[{ required: true, message: '请选择薪资福利', trigger: 'blur', },]" class="row45" label="薪资福利">
@@ -281,14 +291,41 @@ export default {
 				county: '', //区
 				lng: '',
 				lat: '',
-				companyId: localStorage.getItem('companyId')
-
+				companyId: localStorage.getItem('companyId'),
 			},
+			minSalary:'',
+			maxSalary:'',
 			loadingPostpush: false,
 			dialogPostPush: false,
 			workList: [], //经验要求列表
 			schoolList: [], //学历列表
-			moneyList: [], //薪资列表
+			moneyList: [{ value: "3k", label: "3k" },
+				{ value: "4k", label: "4k" },
+				{ value: "5k", label: "5k" },
+				{ value: "6k", label: "6k" },
+				{ value: "7k", label: "7k" },
+				{ value: "8k", label: "8k" },
+				{ value: "10k", label: "10k" },
+				{ value: "12k", label: "12k" },
+				{ value: "15k", label: "15k" },
+				{ value: "18k", label: "18k" },
+				{ value: "20k", label: "20k" },
+				{ value: "25k", label: "25k" },
+				{ value: "30k", label: "30k" },
+				{ value: "35k", label: "35k" },
+				{ value: "40k", label: "40k" },
+				{ value: "45k", label: "45k" },
+				{ value: "50k", label: "50k" },
+				{ value: "55k", label: "55k" },
+				{ value: "60k", label: "60k" },
+				{ value: "65k", label: "65k" },
+				{ value: "70k", label: "70k" },
+				{ value: "75k", label: "75k" },
+				{ value: "80k", label: "80k" },
+				{ value: "85k", label: "85k" },
+				{ value: "90k", label: "90k" },
+				{ value: "95k", label: "95k" },
+				{ value: "100k", label: "100k" }], //薪资列表
 			screenHeight: 0,
 			flList: [
 				"五险一金", "定期体检", "年终奖", "带薪年假",
@@ -370,6 +407,12 @@ export default {
 			},
 			deep: true // 使用deep属性来监听数组中元素的变化
 		},
+		minSalary(val) {
+			this.updateSalaryRange()
+		},
+		maxSalary(val) {
+			this.updateSalaryRange()
+		}
 	},
 	computed: {
 		rightList() {
@@ -394,10 +437,29 @@ export default {
 		// this.getPostType()
 		this.IntentionChen()
 		this.getSchoolList()
-		this.getMoneyList()
+		// this.getMoneyList()
 		// this.getFuliList()
 	},
 	methods: {
+		updateSalaryRange() {
+			if (this.minSalary && this.maxSalary) {
+				const min = this.parseK(this.minSalary)
+				const max = this.parseK(this.maxSalary)
+				if (max >= min) {
+					this.postPushForm.salaryRange = `${this.minSalary}-${this.maxSalary}`
+				} else {
+					this.postPushForm.salaryRange = ''
+				}
+			} else {
+				this.postPushForm.salaryRange = ''
+			}
+		},
+		parseK(val) {
+			return Number(val.replace('k', ''))
+		},
+		numberToK(num) {
+			return `${num / 1000}k`
+		},
 		// 切换从事方向选择状态
 		togglePreference(skillName) {
 			// 查找索引
@@ -531,7 +593,9 @@ export default {
 					this.postPushForm.address = obj.address
 					this.postPushForm.experience = obj.experience
 					this.postPushForm.education = obj.education
-					this.postPushForm.salaryRange = obj.salaryRange
+					// this.postPushForm.salaryRange = obj.salaryRange
+					this.minSalary = obj.minSalary ? this.numberToK(obj.minSalary) : ''
+					this.maxSalary = obj.maxSalary ? this.numberToK(obj.maxSalary) : ''
 					this.postPushForm.positionTag = obj.positionTag ? obj.positionTag.split(',') : []
 					this.postPushForm.welfareTag = obj.welfareTag ? obj.welfareTag.split(';') : []
 					this.postPushForm.positionDetails = obj.positionDetails
@@ -565,9 +629,11 @@ export default {
 				if (res.code == 0) {
 					this.price = res.data.price
 					// 同时更新表单其他字段
-					if (res.data.minSalary && res.data.maxSalary) {
-						this.postPushForm.salaryRange = res.data.minSalary + '-' + res.data.maxSalary
-					}
+					// if (res.data.minSalary && res.data.maxSalary) {
+					// 	this.postPushForm.salaryRange = res.data.minSalary + '-' + res.data.maxSalary
+					// }
+					this.minSalary = res.data.minSalary ? this.numberToK(res.data.minSalary) : ''
+					this.maxSalary = res.data.maxSalary ? this.numberToK(res.data.maxSalary) : ''
 					if (res.data.salaryTimes) {
 						this.postPushForm.salaryTimes = res.data.salaryTimes
 					}
@@ -704,19 +770,6 @@ export default {
 			}
 
 		},
-		//薪资列表
-		getMoneyList() {
-			let data = {
-				type: '薪资'
-			}
-			this.$Request.get('/app/dict/list', {
-				params: data
-			}).then(res => {
-				if (res.code == 0) {
-					this.moneyList = res.data
-				}
-			})
-		},
 		// 工作经验
 		getSchoolList() {
 			let data = {

+ 46 - 47
src/views/resume/addResume.vue

@@ -297,11 +297,22 @@
                                             trigger: 'blur'
                                         }
                                     ]" class="row45" label="期望薪资">
-                                        <el-select style="width: 100%" v-model="intentionJob.salaryRange"
-                                            placeholder="请选择期望薪资">
-                                            <el-option v-for="item in desireSalary" :key="item.value"
-                                                :label="item.label" :value="item.value" />
-                                        </el-select>
+                                        <div style="display: flex; gap: 10px; align-items: center; width: 100%">
+                                            <!-- 最低薪资 -->
+                                            <el-select v-model="intentionJob.minSalary" placeholder="最低薪资"
+                                                style="flex: 1">
+                                                <el-option v-for="item in desireSalary" :key="item.value"
+                                                    :label="item.label" :value="item.value" />
+                                            </el-select>
+                                            <span>-</span>
+                                            <!-- 最高薪资 -->
+                                            <el-select v-model="intentionJob.maxSalary" placeholder="最高薪资"
+                                                style="flex: 1">
+                                                <el-option
+                                                    v-for="item in desireSalary.filter(i => Number(i.value) >= Number(intentionJob.minSalary))"
+                                                    :key="item.value" :label="item.label" :value="item.value" />
+                                            </el-select>
+                                        </div>
                                     </el-form-item>
                                     <el-form-item prop="postType" :rules="[
                                         {
@@ -1060,7 +1071,9 @@ export default {
                 salaryRange: '', //薪资范围
                 industry: '', //行业
                 postType: '', //工作性质
-                isDefault: 0 //是否是第一意向
+                isDefault: 0,//是否是第一意向
+                minSalary: '',
+                maxSalary: ''
             }, //求职意向
             desireSalary: [], //期望薪资
             intentionId: '', //求职意向id
@@ -1086,13 +1099,17 @@ export default {
             eduList: [], // 教育经历列表
         };
     },
+    created() {
+        for (let i = 5000; i <= 50000; i += 1000) {
+            this.desireSalary.push({ value: i.toString(), label: i.toString() })
+        }
+    },
     computed: {
         rightList() {
             return this.workTypeList.length > 0
                 ? this.workTypeList[this.workCurrent].childrens
                 : [];
         },
-
         isVip() {
             return this.$store.state.isVip;
         }
@@ -1108,7 +1125,6 @@ export default {
             this.getUserInfo();
             this.getJlInfo();
             this.getJobType();
-            this.getMonyList();
             this.getPostType();
             this.getDepartment(); // 获取部门列表
             this.getJobList();
@@ -1128,7 +1144,7 @@ export default {
                     });
                 });
             },
-            deep: true // 使用deep属性来监听数组中元素的变化
+            deep: true
         },
         // 监听教育经历变化,自动更新最高学历信息
         eduList: {
@@ -1139,10 +1155,24 @@ export default {
                 this.form.major = highestEdu.major;
                 this.form.resumesEducation = highestEdu.degree;
             },
-            deep: true // 使用deep属性来监听数组中元素的变化
+            deep: true
+        },
+        'intentionJob.minSalary'(val) {
+            this.updateSalaryRange()
+        },
+        'intentionJob.maxSalary'(val) {
+            this.updateSalaryRange()
         }
     },
     methods: {
+        updateSalaryRange() {
+            const { minSalary, maxSalary } = this.intentionJob
+            if (minSalary && maxSalary && Number(maxSalary) > Number(minSalary)) {
+                this.intentionJob.salaryRange = `${minSalary}-${maxSalary}`
+            } else {
+                this.intentionJob.salaryRange = ''
+            }
+        },
         handleChange(list) {
             console.log("当前上传的简历文件列表:", list);
         },
@@ -2055,7 +2085,9 @@ export default {
                 citys: '', //工作城市
                 salaryRange: '', //薪资范围
                 industry: '', //行业
-                postType: '' //工作性质
+                postType: '', //工作性质
+                minSalary: '', //最小薪资
+                maxSalary: '' //最大薪资
             };
             this.hideFrom('gangweiEdit');
         },
@@ -2077,8 +2109,9 @@ export default {
                         this.intentionJob.citys = res.data.citys; //工作城市
                         
                         // 设置薪资范围,确保与desireSalary中的选项匹配
-                        this.intentionJob.salaryRange = res.data.salaryRange; //薪资范围(数值格式)
-                        
+                        // this.intentionJob.salaryRange = res.data.salaryRange; //薪资范围(数值格式)
+                        this.intentionJob.minSalary = res.data.minSalary; //最小薪资
+                        this.intentionJob.maxSalary = res.data.maxSalary; //最大薪资
                         this.intentionJob.industry = res.data.industry; //行业
                         this.intentionJob.postType = res.data.postType; //工作性质
                         this.intentionJob.isDefault = res.data.isDefault; //是否第一求职意向
@@ -2441,40 +2474,6 @@ export default {
                 }
             });
         },
-        //期望薪资
-        getMonyList() {
-            let data = {
-                type: '薪资'
-            };
-            this.$Request.get('/app/dict/list', { params: data }).then(res => {
-                if (res.code == 0) {
-                    res.data.map(item => {
-                        item.label = item.value; // 保留显示的格式
-                        // 将薪资范围从"10k-12K"转换为"10000-12000"格式
-                        if (item.value) {
-                            const salaryRange = item.value.split('-');
-                            if (salaryRange.length === 2) {
-                                // 处理最小值
-                                let minSalary = salaryRange[0].toLowerCase();
-                                if (minSalary.includes('k')) {
-                                    minSalary = (parseFloat(minSalary.replace('k', '')) * 1000).toString();
-                                }
-                                
-                                // 处理最大值
-                                let maxSalary = salaryRange[1].toLowerCase();
-                                if (maxSalary.includes('k')) {
-                                    maxSalary = (parseFloat(maxSalary.replace('k', '')) * 1000).toString();
-                                }
-                                
-                                // 组合成新的薪资范围格式
-                                item.value = `${minSalary}-${maxSalary}`;
-                            }
-                        }
-                    });
-                    this.desireSalary = res.data;
-                }
-            });
-        },
         // 获取部门列表
         getDepartment() {
             this.$Request.post('/app/userFirst/getDepartment', {},{type:'json'}).then((res) => {