diff --git a/components/new-filter-page/new-filter-page.vue b/components/new-filter-page/new-filter-page.vue
new file mode 100644
index 0000000..f685d7b
--- /dev/null
+++ b/components/new-filter-page/new-filter-page.vue
@@ -0,0 +1,389 @@
+
+
+
+
+
+
+
+
+ {{ tab.label }}
+
+
+
+
+
+
+
+ handleSelect('education', e)">
+
+
+
+
+
+
+ handleSelect('experience', e)">
+
+
+
+
+
+
+ handleSelect('scale', e)">
+
+
+
+
+
+
+ handleSelect('jobType', e)">
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/components/index-one.vue b/pages/index/components/index-one.vue
index 6b48454..a7d9446 100644
--- a/pages/index/components/index-one.vue
+++ b/pages/index/components/index-one.vue
@@ -478,6 +478,13 @@
+
+ showNewFilter = value"
+ />
@@ -601,6 +608,7 @@ import useDictStore from '@/stores/useDictStore';
const { getTransformChildren, oneDictData, dictLabel: getDictLabel, industryLabel } = useDictStore();
import useLocationStore from '@/stores/useLocationStore';
import selectFilter from '@/components/selectFilter/selectFilter.vue';
+import newFilterPage from '@/components/new-filter-page/new-filter-page.vue';
import { useRecommedIndexedDBStore, jobRecommender } from '@/stores/useRecommedIndexedDBStore.js';
import { useScrollDirection } from '@/hook/useScrollDirection';
import { useColumnCount } from '@/hook/useColumnCount';
@@ -724,6 +732,7 @@ const inputText = ref('');
const showFilter = ref(false);
const selectFilterModel = ref(null);
const showModel = ref(false);
+const showNewFilter = ref(false);
// 选中的城市
const selectedCity = ref({ code: '', name: '' });
const rangeOptions = ref([
@@ -882,14 +891,7 @@ const handleLoginSuccess = () => {
getIsFourLevelLinkagePurview()
};
// H5环境下从URL获取token并自动登录
-onLoad(() => {
- // #ifdef H5
- const token = uni.getStorageSync('zkr-token');
- if (token) {
- useUserStore().loginSetToken(token);
- }
- // #endif
-});
+// onLoad 函数已移至下方,包含筛选参数处理
// 处理附近工作点击
const handleNearbyClick = (options ) => {
@@ -1088,34 +1090,65 @@ function navToService(serviceType) {
function openFilter() {
isInteractingWithFilter.value = true;
- showFilter.value = true;
+ showNewFilter.value = true;
emits('onShowTabbar', false);
- selectFilterModel.value?.open({
- title: '筛选',
- maskClick: true,
- success: (values) => {
- pageState.search = {
- ...pageState.search,
- };
- for (const [key, value] of Object.entries(values)) {
- // 特殊处理岗位类型,直接传递数字值
+}
+
+function handleNewFilterConfirm(values) {
+ pageState.search = {
+ ...pageState.search,
+ };
+ for (const [key, value] of Object.entries(values)) {
+ // 特殊处理岗位类型,直接传递数字值
+ if (key === 'jobType') {
+ pageState.search.type = value;
+ } else if (value) {
+ pageState.search[key] = value;
+ } else {
+ // 如果值为空,删除该搜索条件
+ delete pageState.search[key];
+ }
+ }
+ showNewFilter.value = false;
+ getJobList('refresh');
+ // 短暂延迟后解除交互锁,避免数据刷新导致顶部区域回弹
+ setTimeout(() => { isInteractingWithFilter.value = false; }, 400);
+ emits('onShowTabbar', true);
+}
+
+// 监听页面加载,接收筛选参数
+onLoad((options) => {
+ // #ifdef H5
+ const token = uni.getStorageSync('zkr-token');
+ if (token) {
+ useUserStore().loginSetToken(token);
+ }
+ // #endif
+
+ // 接收从筛选页面传递过来的参数
+ if (options.filterParams) {
+ try {
+ const filterParams = JSON.parse(options.filterParams);
+ console.log('filterParams:', filterParams);
+ for (const [key, value] of Object.entries(filterParams)) {
if (key === 'jobType') {
- pageState.search.type = value.join(',');
- } else {
- pageState.search[key] = value.join(',');
+ pageState.search.type = value;
+ } else if (value) {
+ pageState.search[key] = value;
}
}
- showFilter.value = false;
+ console.log('pageState.search:', pageState.search);
getJobList('refresh');
- // 短暂延迟后解除交互锁,避免数据刷新导致顶部区域回弹
- setTimeout(() => { isInteractingWithFilter.value = false; }, 400);
- },
- cancel: () => {
- showFilter.value = false;
- emits('onShowTabbar', true);
- setTimeout(() => { isInteractingWithFilter.value = false; }, 200);
- },
- });
+ } catch (error) {
+ console.error('解析筛选参数失败:', error);
+ }
+ }
+});
+
+function handleNewFilterClose() {
+ showNewFilter.value = false;
+ emits('onShowTabbar', true);
+ setTimeout(() => { isInteractingWithFilter.value = false; }, 200);
}
function handleFilterConfirm(e) {