浏览代码

小程序筛选岗位时的地理位置筛选精确到区

jialuyu 1 月之前
父节点
当前提交
47a8a961e1

+ 5 - 1
pages/jobs/filter.vue

@@ -154,10 +154,12 @@ const selectedEducation = ref('');
 // 地理位置
 const selectedRegion = ref(['', '', '']);
 const selectedCity = ref('');
+const selectedDistrict = ref('');
 
 const onRegionChange = (e) => {
   selectedRegion.value = e.detail.value;
   selectedCity.value = e.detail.value[1]; // 取城市名作为核心过滤条件
+  selectedDistrict.value = e.detail.value[2]; // 取区名
 };
 
 const loadDictionaries = () => {
@@ -261,7 +263,8 @@ const confirmFilters = () => {
     experience: userExp,
     education: userEdu,
     workCity: selectedCity.value,
-    workProvince: selectedRegion.value[0]
+    workProvince: selectedRegion.value[0],
+    workDistrict: selectedDistrict.value
   };
   
   uni.$emit('updateFilters', filterParams);
@@ -286,6 +289,7 @@ const resetFilters = () => {
   selectedEducation.value = '不限';
   selectedRegion.value = ['', '', ''];
   selectedCity.value = '';
+  selectedDistrict.value = '';
 };
 </script>
 

+ 7 - 4
pages/jobs/jobs.vue

@@ -259,7 +259,8 @@ const filterCriteria = ref({
   experience: '',
   education: '',
   workCity: '',
-  workProvince: ''
+  workProvince: '',
+  workDistrict: ''
 });
 
 const activeFilterCount = computed(() => {
@@ -270,6 +271,7 @@ const activeFilterCount = computed(() => {
   if (filterCriteria.value.education) count++;
   if (filterCriteria.value.minSalary > 0 || filterCriteria.value.maxSalary < 50) count++;
   if (filterCriteria.value.workCity) count++;
+  if (filterCriteria.value.workDistrict) count++;
   return count;
 });
 
@@ -302,7 +304,8 @@ const fetchJobs = (reset = false) => {
     minSalary: filterCriteria.value.minSalary,
     maxSalary: filterCriteria.value.maxSalary,
     workCity: filterCriteria.value.workCity || '',
-    workProvince: filterCriteria.value.workProvince || ''
+    workProvince: filterCriteria.value.workProvince || '',
+    workDistrict: filterCriteria.value.workDistrict || ''
   };
 
   // 只有登录状态下才附带 studentId,避免传 "undefined" 字符串给后端
@@ -324,14 +327,14 @@ const fetchJobs = (reset = false) => {
          title: item.postName,
          salaryText: item.salaryRange || '面议',
          // 使用后端翻译好的 Label 字段(如"全职"、"本科"、"3-5年"),而不是原始字典 value
-         tags: [item.workCity, item.educationRequirementLabel || item.educationRequirement, item.gradeRequirementLabel || item.gradeRequirement].filter(Boolean),
+         tags: [item.workCity + (item.workDistrict ? ' ' + item.workDistrict : ''), item.educationRequirementLabel || item.educationRequirement, item.gradeRequirementLabel || item.gradeRequirement].filter(Boolean),
          isUrgent: item.isUrgent === 1,
          count: item.recruitNum || 1,
          deadline: item.registrationEndDate ? item.registrationEndDate.split(' ')[0] : '长期有效',
          isExpiring: false,
          company: item.companyName || '平台推荐',
          rawTenantId: item.tenantId, // 保留原始 tenantId 用于屏蔽公司
-         location: (item.workProvince || '') + (item.workCity ? '·' + item.workCity : ''),
+         location: (item.workProvince || '') + (item.workCity ? '·' + item.workCity : '') + (item.workDistrict ? ' ' + item.workDistrict : ''),
          logo: item.companyAvatar || '/static/images/default-company.svg'
       }));
 

文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/jobs/filter.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/jobs/jobs.js.map


+ 1 - 1
unpackage/dist/dev/mp-weixin/common/vendor.js

@@ -7048,7 +7048,7 @@ function isConsoleWritable() {
 function initRuntimeSocketService() {
   const hosts = "127.0.0.1,192.168.1.191";
   const port = "8090";
-  const id = "mp-weixin_wNej2_";
+  const id = "mp-weixin_lbWU2j";
   const lazy = typeof swan !== "undefined";
   let restoreError = lazy ? () => {
   } : initOnError();

+ 5 - 1
unpackage/dist/dev/mp-weixin/pages/jobs/filter.js

@@ -22,9 +22,11 @@ const _sfc_main = {
     const selectedEducation = common_vendor.ref("");
     const selectedRegion = common_vendor.ref(["", "", ""]);
     const selectedCity = common_vendor.ref("");
+    const selectedDistrict = common_vendor.ref("");
     const onRegionChange = (e) => {
       selectedRegion.value = e.detail.value;
       selectedCity.value = e.detail.value[1];
+      selectedDistrict.value = e.detail.value[2];
     };
     const loadDictionaries = () => {
       api_dict.getDicts("main_position_type").then((res) => {
@@ -113,7 +115,8 @@ const _sfc_main = {
         experience: userExp,
         education: userEdu,
         workCity: selectedCity.value,
-        workProvince: selectedRegion.value[0]
+        workProvince: selectedRegion.value[0],
+        workDistrict: selectedDistrict.value
       };
       common_vendor.index.$emit("updateFilters", filterParams);
       common_vendor.index.showToast({
@@ -134,6 +137,7 @@ const _sfc_main = {
       selectedEducation.value = "不限";
       selectedRegion.value = ["", "", ""];
       selectedCity.value = "";
+      selectedDistrict.value = "";
     };
     return (_ctx, _cache) => {
       return common_vendor.e({

+ 8 - 4
unpackage/dist/dev/mp-weixin/pages/jobs/jobs.js

@@ -85,7 +85,8 @@ const _sfc_main = {
       experience: "",
       education: "",
       workCity: "",
-      workProvince: ""
+      workProvince: "",
+      workDistrict: ""
     });
     const activeFilterCount = common_vendor.computed(() => {
       let count = 0;
@@ -97,6 +98,8 @@ const _sfc_main = {
         count++;
       if (filterCriteria.value.workCity)
         count++;
+      if (filterCriteria.value.workDistrict)
+        count++;
       return count;
     });
     const fetchJobs = (reset = false) => {
@@ -124,7 +127,8 @@ const _sfc_main = {
         minSalary: filterCriteria.value.minSalary,
         maxSalary: filterCriteria.value.maxSalary,
         workCity: filterCriteria.value.workCity || "",
-        workProvince: filterCriteria.value.workProvince || ""
+        workProvince: filterCriteria.value.workProvince || "",
+        workDistrict: filterCriteria.value.workDistrict || ""
       };
       const currentStudentId = getStudentId();
       if (currentStudentId) {
@@ -142,7 +146,7 @@ const _sfc_main = {
             title: item.postName,
             salaryText: item.salaryRange || "面议",
             // 使用后端翻译好的 Label 字段(如"全职"、"本科"、"3-5年"),而不是原始字典 value
-            tags: [item.workCity, item.educationRequirementLabel || item.educationRequirement, item.gradeRequirementLabel || item.gradeRequirement].filter(Boolean),
+            tags: [item.workCity + (item.workDistrict ? " " + item.workDistrict : ""), item.educationRequirementLabel || item.educationRequirement, item.gradeRequirementLabel || item.gradeRequirement].filter(Boolean),
             isUrgent: item.isUrgent === 1,
             count: item.recruitNum || 1,
             deadline: item.registrationEndDate ? item.registrationEndDate.split(" ")[0] : "长期有效",
@@ -150,7 +154,7 @@ const _sfc_main = {
             company: item.companyName || "平台推荐",
             rawTenantId: item.tenantId,
             // 保留原始 tenantId 用于屏蔽公司
-            location: (item.workProvince || "") + (item.workCity ? "·" + item.workCity : ""),
+            location: (item.workProvince || "") + (item.workCity ? "·" + item.workCity : "") + (item.workDistrict ? " " + item.workDistrict : ""),
             logo: item.companyAvatar || "/static/images/default-company.svg"
           }));
           jobList.value = reset ? formattedRows : [...jobList.value, ...formattedRows];

部分文件因为文件数量过多而无法显示