|
@@ -1,40 +1,124 @@
|
|
|
<template>
|
|
|
<div>
|
|
|
- <swiper class="swiper" circular autoplay :interval="5000">
|
|
|
- <swiper-item
|
|
|
- v-for="item in bannerList"
|
|
|
- :key="item.id"
|
|
|
- class="swiper-item"
|
|
|
- >
|
|
|
- <image :src="item.imgUrlsAfterConvert[0]" mode="aspectFill" />
|
|
|
- </swiper-item>
|
|
|
- </swiper>
|
|
|
+ <!-- <Navbar title="出国劳务" /> -->
|
|
|
+
|
|
|
+ <div class="px-15 pt-15">
|
|
|
+ <swiper class="h-150 rounded-lg overflow-hidden" circular autoplay :interval="5000">
|
|
|
+ <swiper-item v-for="item in bannerList" :key="item.id" class="h-full w-full">
|
|
|
+ <image
|
|
|
+ class="object-cover w-full h-full"
|
|
|
+ :src="item.imgUrlsAfterConvert[0]"
|
|
|
+ mode="aspectFill"
|
|
|
+ />
|
|
|
+ </swiper-item>
|
|
|
+ </swiper>
|
|
|
+
|
|
|
+ <div class="pt-15 flex justify-between items-center">
|
|
|
+ <input
|
|
|
+ v-model="searchQuery.searchString"
|
|
|
+ placeholder="请输入搜索关键词"
|
|
|
+ shape="round"
|
|
|
+ @search="onSearch"
|
|
|
+ class="flex-1"
|
|
|
+ />
|
|
|
+ <div class="w-40 flex items-center justify-center" @click="handleFilter">
|
|
|
+ <icon name="filter-o" color="#fe8e2c" size="25" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <scroll-view v-if="dataList.length" type="list" @scrolltolower="loadMore">
|
|
|
+ <LabourJobItem v-for="item in dataList" :key="item.id" :item-data="item" >
|
|
|
+ </LabourJobItem>
|
|
|
+ </scroll-view>
|
|
|
+ <!-- <Empty v-else-if="!dataList.length && !loading" /> -->
|
|
|
+ </div>
|
|
|
+ <Tabbar />
|
|
|
+
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import { getBannerList } from '@/api/common';
|
|
|
-
|
|
|
+import LabourJobItem from '@/components/Labour/JobItem.vue'
|
|
|
+import { getBannerList, getDirectoryList, getProjects } from '@/api/common';
|
|
|
const bannerList = ref([]);
|
|
|
async function requestBannerList() {
|
|
|
const { data } = await getBannerList({ belongTab: 10 });
|
|
|
bannerList.value = data.dataList;
|
|
|
}
|
|
|
|
|
|
+const defaultFirstArea = {
|
|
|
+ id: 16,
|
|
|
+ menuName: '全部',
|
|
|
+};
|
|
|
+
|
|
|
+const searchQuery = reactive({
|
|
|
+ belongTab: defaultFirstArea.id,
|
|
|
+ searchString: '',
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 10,
|
|
|
+});
|
|
|
+
|
|
|
+const dataList = ref([]);
|
|
|
+const loading = ref(true);
|
|
|
+const finished = ref(false);
|
|
|
+async function requestProjects() {
|
|
|
+ const { data } = await getProjects(searchQuery);
|
|
|
+ dataList.value = dataList.value.concat(data.dataList);
|
|
|
+ loading.value = false;
|
|
|
+ if (dataList.value.length >= data.totalCount) {
|
|
|
+ finished.value = true;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function loadMore() {
|
|
|
+ searchQuery.pageNum++;
|
|
|
+ requestProjects();
|
|
|
+}
|
|
|
+
|
|
|
+function onSearch() {
|
|
|
+ searchQuery.pageNum = 1;
|
|
|
+ dataList.value = [];
|
|
|
+ finished.value = false;
|
|
|
+ requestProjects();
|
|
|
+}
|
|
|
+
|
|
|
onMounted(() => {
|
|
|
requestBannerList();
|
|
|
+ requestProjects();
|
|
|
+ getAreaList();
|
|
|
});
|
|
|
-</script>
|
|
|
|
|
|
-<style lang="scss" scoped>
|
|
|
-.swiper {
|
|
|
- height: 500rpx;
|
|
|
- .swiper-item {
|
|
|
- height: 100%;
|
|
|
- image {
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- }
|
|
|
- }
|
|
|
+// 侧边过滤逻辑
|
|
|
+const showFilter = ref(false);
|
|
|
+function handleFilter() {
|
|
|
+ showFilter.value = !showFilter.value;
|
|
|
+}
|
|
|
+const areaList = ref([]);
|
|
|
+const currentArea = ref(defaultFirstArea);
|
|
|
+async function getAreaList() {
|
|
|
+ const { data } = await getDirectoryList({ parentId: 16 });
|
|
|
+ areaList.value = [defaultFirstArea, ...data.dataList];
|
|
|
}
|
|
|
-</style>
|
|
|
+
|
|
|
+function handleClick(item) {
|
|
|
+ currentArea.value = item;
|
|
|
+}
|
|
|
+
|
|
|
+function handleReset() {
|
|
|
+ currentArea.value = defaultFirstArea;
|
|
|
+}
|
|
|
+function handleConfirm() {
|
|
|
+ searchQuery.belongTab = currentArea.value.id;
|
|
|
+ showFilter.value = false;
|
|
|
+ reSearch();
|
|
|
+}
|
|
|
+
|
|
|
+function reSearch() {
|
|
|
+ searchQuery.pageNum = 1;
|
|
|
+ dataList.value = [];
|
|
|
+ finished.value = false;
|
|
|
+ requestProjects();
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped></style>
|