From ce63c8ef8e6f0d6668e0d0badcc4f914c910d172 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E8=BE=89?= Date: Thu, 12 Mar 2026 14:22:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E7=AD=9B=E9=80=89=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../new-filter-page/new-filter-page.vue | 389 ++++++++++++++++++ pages/index/components/index-one.vue | 95 +++-- 2 files changed, 453 insertions(+), 31 deletions(-) create mode 100644 components/new-filter-page/new-filter-page.vue 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 @@ + + + + + \ 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 @@ + + @@ -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) {