Files
jobslink-user-clent/pages/seach/seach.vue

398 lines
9.8 KiB
Vue
Raw Normal View History

2024-02-02 14:44:30 +08:00
<template>
2024-02-17 18:22:11 +08:00
<view class="mainWrapper">
2024-02-02 14:44:30 +08:00
<view class="headSearch">
<view class="search-view">
<view class="search-item">
<image src="../../static/img/search.svg" style="width: 32rpx;height: 32rpx;" mode=""></image>
2024-02-19 09:08:07 +08:00
<input type="text" confirm-type="搜索" v-model="keywords" @confirm="getNewList('search')"
2024-02-17 18:22:11 +08:00
placeholder="请输入任务名称或公司名称" />
2024-02-19 23:17:06 +08:00
<view @click="getNewList('search')" style="width: 80rpx;height: 50rpx;color:#fff;background-color: #0091ff;font-size:24rpx;text-align: center;line-height: 50rpx;border-radius: 25rpx;;">搜索</view>
2024-02-02 14:44:30 +08:00
</view>
2024-02-19 09:08:07 +08:00
<!-- <view class="close" @click="closeBack">
2024-02-02 14:44:30 +08:00
取消
2024-02-19 09:08:07 +08:00
</view> -->
</view>
</view>
<view v-show="searchResultShow" class="search-result">
<view class="title">搜索结果</view>
<view v-for="(item, index) in searchResultList" class="search-item" @click="toDetail(item)">
<image src="../../static/img/search.svg" style="width: 32rpx;height: 32rpx;margin-right: 10rpx;" mode=""></image>
<view style="flex:1">{{ item.name }}</view>
<view class="type" v-if="item.type == 0">任务</view>
<view class="type" v-else-if="item.type == 1">岗位</view>
<view class="type" v-else-if="item.type == 2">政策</view>
</view>
<view v-if="searchResultList.length == 0" style="text-align: center;font-size: 26rpx;margin-top: 20rpx;">暂无数据</view>
</view>
<view v-show="!searchResultShow" class="search-history">
<view class="title">搜索记录</view>
<view class="clear" @click="clearKeyWords">
<image src="../../static/img/delete.png" style="width: 24rpx;height: 24rpx;" mode=""></image>
2024-02-19 09:08:07 +08:00
<view style="margin-left: 5rpx;">清空</view>
</view>
<view class="wrapper" v-if="searchHistoryList.length > 0">
<view class="item" v-for="(item, index) in searchHistoryList" @click="keyWordsClick(item.keywords)">
2024-02-19 09:08:07 +08:00
{{ item.keywords }}
2024-02-02 14:44:30 +08:00
</view>
</view>
2024-02-19 09:08:07 +08:00
<view v-else class="empty">暂无历史记录</view>
2024-02-02 14:44:30 +08:00
</view>
2024-02-20 09:57:00 +08:00
<v-tabs v-show="!searchResultShow" :tabs="['推荐任务', '推荐岗位', '推荐政策']" height="45px" v-model="activeTab" color="#999" activeColor="#000"
2024-02-17 18:22:11 +08:00
fontSize="30rpx" activeFontSize="31rpx" @change='changeTab' />
2024-02-19 09:08:07 +08:00
<block v-if="(activeTab == 0)&&!searchResultShow">
2024-02-17 18:22:11 +08:00
<view v-if="companyList.length > 0">
<block v-for="(item, index) in companyList" :key="item.id">
<companyList :companyitem="item"></companyList>
</block>
</view>
<view v-else>
<image src="../../static/img/pic_notask.svg" mode="" class="nothing"></image>
<view class="nothingContnt">
暂无信息
</view>
</view>
</block>
2024-02-19 09:08:07 +08:00
<block v-if="(activeTab == 1)&&!searchResultShow">
2024-02-17 18:22:11 +08:00
<view v-if="newList.length > 0">
<block v-for="(item, index) in newList" :key="index">
<companyList :companyitem="item"></companyList>
</block>
</view>
<view v-else>
<image src="../../static/img/pic_notask.svg" class="nothing" mode=""></image>
<view class="nothingContnt">暂无信息</view>
</view>
</block>
2024-02-19 09:08:07 +08:00
<block v-if="(activeTab == 2)&&!searchResultShow">
2024-02-17 18:22:11 +08:00
<view v-if="recommendList.length > 0">
<block v-for="(item, index) in recommendList" :key="item.id">
<companyList :companyitem="item"></companyList>
</block>
</view>
<view v-else>
<image src="../../static/img/pic_notask.svg" mode="" class="nothing"></image>
<view class="nothingContnt">
完善技能获取精推荐
</view>
<!-- <view class="btn" @click="goResume">
完善技能
</view> -->
</view>
</block>
<!-- <view v-if="companyList.length > 0">
2024-02-02 14:44:30 +08:00
<block v-for="(item, index) in companyList" :key="item.id">
<companyList :companyitem="item"></companyList>
<view class="baddd"></view>
</block>
</view>
<view v-else>
<image src="../../static/img/pic_notask.svg" mode="" class="nothing"></image>
<view class="nothingContnt">
暂无任务信息
</view>
2024-02-17 18:22:11 +08:00
</view> -->
2024-02-02 14:44:30 +08:00
</view>
</template>
<script>
2024-02-19 09:08:07 +08:00
import { newMissionAll, getSearchKeyWordsList, clearSearchKeyWords, getListByKeyWords } from '@/api/mission.js';
2024-02-02 14:44:30 +08:00
import companyList from '@/components/companyList/companyList.vue';
2024-02-17 18:22:11 +08:00
import vTabs from '@/components/v-tabs/v-tabs.vue';
2024-02-02 14:44:30 +08:00
import testData from '@/common/textdata.js';
export default {
components: {
2024-02-17 18:22:11 +08:00
companyList,
vTabs,
2024-02-02 14:44:30 +08:00
},
data() {
return {
2024-02-17 18:22:11 +08:00
activeTab: 0,
2024-02-02 14:44:30 +08:00
companyList: [],
2024-02-17 18:22:11 +08:00
recommendList: [],
newList: [],
keywords: '',
page: {
current: 1,
size: 10,
total: 0
2024-02-19 09:08:07 +08:00
},
searchHistoryList: [],
searchResultShow: false,
searchResultList: []
2024-02-02 14:44:30 +08:00
};
},
2024-02-17 18:22:11 +08:00
onLoad: function (option) {
this.keywords = option.keywords ? option.keywords : ''
2024-02-02 14:44:30 +08:00
},
2024-02-17 18:22:11 +08:00
onShow: function () {
2024-02-02 14:44:30 +08:00
this.getList('search');
2024-02-19 09:08:07 +08:00
this.getKeyWordsList()
2024-02-02 14:44:30 +08:00
},
/*页面滚动到底部*/
2024-02-17 18:22:11 +08:00
onReachBottom: function () {
2024-02-02 14:44:30 +08:00
this.upLoad()
},
methods: {
2024-02-19 09:08:07 +08:00
// 新面板搜索
getNewList() {
getListByKeyWords(this.keywords).then(res => {
this.searchResultShow = true
this.searchResultList = res.data.data
// this.searchResultList.forEach((item, index) => {
// item.name = this.getInf(item.name, this.keywords);
// })
})
},
// 获取搜索历史记录
getKeyWordsList() {
getSearchKeyWordsList().then(res => {
let response = res.data
if(response.code == 200) {
this.searchHistoryList = response.data
}
})
},
keyWordsClick(keyWords) {
console.log(keyWords)
this.keywords = keyWords;
this.getNewList();
},
2024-02-02 14:44:30 +08:00
//最新任务;
2024-02-17 18:22:11 +08:00
getList: function (type) {
2024-02-02 14:44:30 +08:00
//改变搜索条件页码值变为1
2024-02-17 18:22:11 +08:00
if (type === 'search') {
2024-02-02 14:44:30 +08:00
this.page.current = 1;
};
2024-02-17 18:22:11 +08:00
// if (this.keywords) {
newMissionAll(this.page.current, this.page.size, this.keywords).then(res => {
if (this.page.current === 1) {
this.companyList = [];
}
this.page.current += 1;
this.page.total = res.data.data.total;
if (res.data.data && res.data.data.records.length) {
this.companyList = this.companyList.concat(res.data.data.records);
}
//搜索关键词高亮
// if (this.companyList.length) {
// this.companyList.forEach((item, index) => {
// item.missionTitle = this.getInf(item.missionTitle, this.keywords);
// });
// }
console.log(this.companyList, '----------');
})
// }
2024-02-02 14:44:30 +08:00
},
2024-02-17 18:22:11 +08:00
2024-02-02 14:44:30 +08:00
//上拉加载
2024-02-17 18:22:11 +08:00
upLoad: function () {
if (this.page.current <= Math.ceil(this.page.total / this.page.size)) {
2024-02-02 14:44:30 +08:00
this.getList();
2024-02-17 18:22:11 +08:00
} else {
2024-02-02 14:44:30 +08:00
uni.showToast({
icon: "none",
title: '已经是最后一页',
})
2024-02-17 18:22:11 +08:00
return
2024-02-02 14:44:30 +08:00
}
},
2024-02-17 18:22:11 +08:00
closeBack() {
2024-02-02 14:44:30 +08:00
uni.navigateBack({
2024-02-17 18:22:11 +08:00
delta: 1
2024-02-02 14:44:30 +08:00
})
},
/**
* 指定关键字高亮
* @param {*} str 字符串
* @param {*} key 关键字
*/
getInf(str, key) {
if (str && key) {
let replaceReg = new RegExp(key, 'g')// 匹配关键字正则
let replaceString = "<span style='color: #1b66ff;'>" + key + "</span>" // 高亮替换
return str.replace(replaceReg, replaceString);
}
2024-02-17 18:22:11 +08:00
},
2024-02-19 09:08:07 +08:00
toDetail(item) {
const no = item.id
2024-02-19 23:17:06 +08:00
// 判断是岗位还是任务 0任务1岗位2政策
if(item.type == 0) {
uni.navigateTo({
url: `/pages/projectInfo/projectInfo?missionNo=${encodeURIComponent(no)}&isCan=1`
})
} else if(item.type == 1) {
uni.navigateTo({
url: `/pages/projectInfo/workInfo?workId=${encodeURIComponent(no)}&isCan=1`
})
} else if(item.type == 2) {
uni.navigateTo({
url:`/pages/user/policyContent?id=${no}`
})
}
2024-02-19 09:08:07 +08:00
},
2024-02-17 18:22:11 +08:00
changeTab: function (e) {
this.activeTab = e;
},
2024-02-19 09:08:07 +08:00
// 清空搜索历史
clearKeyWords() {
clearSearchKeyWords().then(res => {
if(res.data.code == 200) {
this.getKeyWordsList()
}
})
}
2024-02-02 14:44:30 +08:00
}
};
</script>
2024-02-17 18:22:11 +08:00
<style scoped>
.mainWrapper{
background-color: #f3f4f8;
min-height: 95vh;
}
.baddd {
background-color: #f6f6f6;
height: 20rpx;
}
.close {
position: absolute;
right: 24rpx;
top: 6rpx;
height: 60rpx;
padding: 5rpx 0;
line-height: 60rpx;
font-family: PingFangSC-Regular;
font-size: 32rpx;
color: #333333;
}
.headSearch .search-view {
border-bottom: 1rpx solid #dddddd;
padding: 10rpx 32rpx;
background: rgba(255, 255, 255, 1);
}
.headSearch .search-item {
display: flex;
2024-02-19 09:08:07 +08:00
width: 90%;
2024-02-17 18:22:11 +08:00
padding: 0 24rpx;
height: 60rpx;
line-height: 60rpx;
background: rgba(249, 249, 249, 1);
border-radius: 200px;
align-items: center;
border: 1px solid #0091ff;
}
.headSearch .search-item input {
padding: 0 24rpx;
height: 80rpx;
font-weight: 400;
flex: 1;
text-align: start;
font-size: 28rpx;
font-family: PingFang-SC-Bold, PingFang-SC;
color: rgba(51, 51, 51, 1);
}
.headSearch .search-item .placeholderClass {
color: #CCCCCC;
}
.headSearch .search-item image {
height: 32rpx;
width: 32rpx;
}
.nothing {
width: 400rpx;
height: 200rpx;
display: block;
margin: 0 auto;
margin-top: 50%;
}
.nothingContnt {
font-family: PingFangSC-Regular;
font-size: 28rpx;
color: #333333;
margin-top: 30rpx;
text-align: center;
}
2024-02-19 09:08:07 +08:00
.search-history {
background-color: #fff;
padding: 10rpx 20rpx;
position: relative;
}
.search-history .title {
font-size: 28rpx;
font-weight: bold;
}
.search-history .clear {
position: absolute;
right: 20rpx;
top: 10rpx;
font-size: 24rpx;
2024-02-19 09:08:07 +08:00
display: flex;
align-items: center;
color: #707070;
}
.search-history .empty {
font-size: 24rpx;
text-align: center;
color: #707070;
}
.search-history .wrapper {
display: flex;
flex-wrap: wrap;
}
.search-history .wrapper .item {
font-size: 24rpx;
2024-02-19 09:08:07 +08:00
background-color: #f6f6f6;
padding: 8rpx 12rpx;
2024-02-19 09:08:07 +08:00
border-radius: 20rpx;
margin-right: 10rpx;
}
.search-result {
padding: 20rpx 30rpx;
}
.search-result .title {
font-size: 26rpx;
font-weight: bold;
border-bottom: 1rpx solid #ddd;
height: 60rpx;
line-height: 60rpx;
}
.search-result .search-item {
display: flex;
align-items: center;
font-size: 26rpx;
border-bottom: 1rpx solid #ddd;
height: 80rpx;
line-height: 80rpx;
}
.search-result .search-item .type {
font-size: 20rpx;
color: #707070;
background-color: #dddddd;
border-radius: 15rpx;
height: 30rpx;
line-height: 30rpx;
padding: 0 20rpx;
}
2024-02-02 14:44:30 +08:00
</style>