You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1368 lines
44 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<!-- :style="{ minHeight: `calc(100vh - ${navbarHeight}px)` }" -->
<view class="p-home-inedx g_w_all g_kuaishou" :class="computeCode == -1 ? 'g_flex_column_center' : ''" :style="{ 'background-image': `linear-gradient(to bottom, ${themeColor} 0%, #ededed 15%, #ededed 100%)`, minHeight: `calc(100vh)` }">
<div class="navContainer">
<u-navbar :is-back="false" :is-fixed="true" :borderBottom="false" background="transparent" :title-bold="false">
<view class="g_flex_row_start flex_center g_fs_20 g_pl_12">
<view><img :src="appInfo.logo" alt="" class="g_w_32 g_h_32 g_radius_50" /></view>
<view class="g_ml_8 g_mr_8 g_fw_600 g_ell_1 webfont" style="max-width: 150px">{{ appInfo.appName }}</view>
<!-- <view class="g_mr_6">|</view>
<view>信息真·价格高</view> -->
</view>
</u-navbar>
</div>
<view v-show="computeCode == -1" class="g_flex_column_center">
<rh-loading marginBottom="g_mb_130" />
</view>
<view v-show="computeCode > -1">
<view class="g_position_rela g_flex_row_center">
<view class="the_city g_flex_column_center" style hover-class="thover" @click="goCity">
<view class="g_flex_row_center">
<view class="g_fs_16 g_fw_600 g_ml_10" style="width: 36px; display: inline-block">{{ selectedCity }} </view>
<view class="g_flex_column_center">
<view class="iconfont icon-zhankai g_fs_12" style="display: inline-block"></view>
</view>
</view>
</view>
<!-- 搜索区 -->
<view class="m-search g_p_10 g_pt_8 g_position_abso bg_shawdoc g_flex_1" style="top: 0" id="searchInputBox">
<u-search height="80" v-model="keyword" class="g_flex_1" placeholder="搜索职位名称" bg-color="#fff" :show-action="false" placeholder-class="g_c_c" search-icon-color="#999999" :maxlength="20" @clear="getSearch" @search="getSearch"></u-search>
</view>
</view>
<scroll-view class="m-list" id="listBox" :scroll-into-view="scrollTo" refresher-default-style="none" refresher-background="#ededed" :refresher-enabled="true" :refresher-triggered="isTrigger" @refresherrefresh="refreshJobList" :style="{ height: `calc(100vh - ${navbarHeight + 40}px)` }" :scroll-y="true" @scrolltolower="reachBottom" @scroll="checkScroll">
<div>
<div class="g_text_c g_c_c g_fs_12" style="width: 100vw; position: absolute; top: -32px; z-index: 9999999">{{ "最近更新" + (jobNum || "-") + "条信息" }}</div>
<!-- <div class="g_h_10"></div> -->
<view>
<div>
<!-- <div v-if="appid == 'wxb0c590fd696b79be'">
<promotion cusType="image"></promotion>
</div> -->
<div>
<promotion cusType="image"></promotion>
</div>
</div>
<!--为最外层的大盒子-->
<!-- && appid != 'wxb0c590fd696b79be' -->
<!-- noticList.length > 0 && -->
<view class="g_flex_row_start flex_center g_bg_f g_ml_10 g_mr_10 g_radius_8" style="overflow: hidden;margin-top: 8px;"
@click="getMore"
>
<view class="g_flex_c g_h_48 g_w_40 g_flex_none">
<!-- <image class="g_w_48 g_h_48" :src="noticeImg" mode="aspectFit|aspectFill|widthFix" lazy-load="false" binderror="" bindload=""> </image> -->
<i class="iconfont icon-sound" style="font-size: 24px;color: #666;"></i>
</view>
<view :style="{
'width':'calc(100vw - ' + (isJm ? 90 : 80) + 'px)'
}"
>
<u-notice-bar ref="noticeBar"
color="#333"
padding="0rpx"
font-size="32"
style="width: calc(100% - 54px)"
:speed="100"
:volume-icon="false"
type="none"
:list="noticList"
class="g_flex_1"
></u-notice-bar>
</view>
<view class="g_flex_c g_h_48 g_flex_none" style="width: 30px;" v-if="isJm">
<i class="iconfont icon-gengduo11 g_c_c" style="font-size: 16px;"></i>
</view>
</view>
<view class="sticky g_flex_row_between flex_center" :class="toTop ? 'g_bg_f defaultShadow' : 'g_bg_f_5'" ref="tttop" id="tttop">
<view class="" style="">
<g-tabs bg-color="transparent" from="index" gutter="20" :list="tabInfo.list" :current="tabInfo.active" :active-color="themeColor" bar-width="64" bar-height="6" @change="handleUpdateTab" font-size="34" duration="0.05" height="76"></g-tabs>
</view>
<!-- <view v-if="isMember && hasPermission" class="g_mr_8" @click="goShare"> 批量分享 </view> -->
<view class="g_flex_row_end g_flex_1">
<view class="csbf" @click="chooseNl('sort')" :class="toTop ? 'g_bg_f_5 ' : 'g_bg_f'">
{{ sortList.list[sortList.active].showName }}
<span class="iconfont icon-shouqi g_fs_12 g_c_9 fst g_ml_4" v-if="whichOneShow == 'sort'"></span>
<span class="iconfont icon-zhankai g_fs_12 g_c_9 fst g_ml_4" v-if="whichOneShow != 'sort'"></span>
<view class="sortMask" v-if="whichOneShow == 'sort'">
<view class="sortContainer" style="overflow: hidden" @click.stop>
<view v-for="(item, index) in sortList.list" @click="sortJob(index)" :key="index" :class="sortList.active == index ? 'g_border_main g_c_main' : 'g_border_f'" class="g_fs_16 g_fw_600 g_mt_16 g_bg_f" style="border-radius: 30px; padding: 8px 16px">{{ item.name }}</view>
</view>
</view>
</view>
<view class="g_flex_column_center">
<view class="csbf" :class="toTop ? 'g_bg_f_5 ' : 'g_bg_f'" @click="chooseNl('special')" data-type="special">
筛选
<span class="iconfont icon-shouqi g_fs_12 g_c_9 fst g_ml_4" v-if="whichOneShow == 'special'"></span>
<span class="iconfont icon-zhankai g_fs_12 g_c_9 fst g_ml_4" v-if="whichOneShow != 'special'"></span>
<mfilter :show="whichOneShow" ref="filterChild" top="43px" :getFilterDataNew="getFilterData" @filterObj="receiveFromChild"></mfilter>
</view>
</view>
</view>
<scroll-view class="filterTag bt1 g_h_44" v-if="getFilterData.jobCategoryLabelObjects.length > 0 || getFilterData.jobSpecialLabelObjects.length > 0 || getFilterData.sex != '-1' || (getFilterData.ageRangeStr && getFilterData.ageRangeStr != '16-16')" :scroll-x="true" :scroll-y="false" scroll-top="0" scroll-left="0" scroll-into-view scroll-with-animation="false" enable-flex enable-back-to-top="false">
<div class="g_flex_row_between flex_center flex_nw g_w_all">
<div class="g_flex_row_start flex_nw" style="line-height: 44px">
<div class="tc genderTag f14 por" style="min-width: 60px" v-if="getFilterData.ageRangeStr != '' && getFilterData.ageRangeStr != '16-16'">
<div class="por bg_main" @click.stop="deleteAge">
{{ getFilterData.ageRangeStr }}
<div class="clear_icon iconfont icon-dianji"></div>
</div>
</div>
<div class="tc genderTag f14 por" style="min-width: 60px" v-if="getFilterData.sex != '-1'">
<div class="por bg_main" @click.stop="deleteSex">
{{ getFilterData.sex == 1 ? "收男工" : getFilterData.sex == 2 ? "收女工" : getFilterData.sex == 3 ? "男女都收" : "" }}
<!-- {{getFilterData.jobCategoryLabelObjects.length > 0}} {{getFilterData.jobSpecialLabelObjects.length > 0}} -->
<div class="clear_icon iconfont icon-dianji"></div>
</div>
</div>
<div class="brandTag ml8" v-if="getFilterData.jobCategoryLabelObjects.length > 0">
<block v-for="(item, index) in getFilterData.jobCategoryLabelObjects" :key="index">
<div class="por bg_main" @click.stop="deleteJobCategoryLabel(item.id)">
{{ item.name }}
<div class="clear_icon iconfont icon-dianji"></div>
</div>
</block>
</div>
<div class="specialTag ml8">
<block v-for="(item, index) in getFilterData.jobSpecialLabelObjects" :key="index">
<div class="por bg_main" @click.stop="deleteJobSpecialLabel(item.id)">
{{ item.name }}
<div class="clear_icon iconfont icon-dianji"></div>
</div>
</block>
</div>
<!-- <div class="specialTag" wx:if="{{selectJobList.length > 0}}">
<block wx:for="{{selectJobList}}" wx:key="index">
<div class="por" catchtap="deleteMark" data-item="{{item}}">
{{item.name}}
<div class="clear_icon iconfont icon-qingchu"></div>
</div>
</block>
</div> -->
</div>
<div class="clear" @click.stop="clearFilter1" data-type="outerClear">
<span class="iconfont icon-shanchu f14"></span>
清除
</div>
</div>
</scroll-view>
</view>
<g-yi-list-job :tabactive='tabInfo.active'
:hrtext="hrtext"
:isshowskit="isshowskit"
:pt="tabInfo.active == 0 ? 0 : 120"
style="padding-bottom: 120px"
from="home"
class="g_h_all"
:list="query.list"
@clickCard="goDetail"
@successLogin="successLogin"
:loading="loading"
:speed="speed"
:query="query"
:isShowLoginBtn="isLogin ? false : true"
:emptyText="isLogin ? (tabInfo.list[tabInfo.active].classify == 2 ? '您还未收藏职位,快去试试收藏职位吧' : '嘿,这里还没有数据呢') : '您还有没有登录,请登录后查看职位'"
/>
</view>
</div>
</scroll-view>
<u-popup v-model="popSelect.isShow" mode="bottom" uZindex="9999" border-radius="12" :closeable="true" :mask-close-able="true">
<view class="g_pt_32" style="height: calc(100vh - 300rpx)">
<selectPanel />
</view>
</u-popup>
</view>
<!-- v-if="isMember && hasPermission" -->
<!-- <div class="g_fs_12 g_text_c g_flex_column_center g_c_f g_bg_main g_boeder_e g_radius_50 g_p_4 g_w_48 g_h_48" style="position: fixed; right: 20px; bottom: 120px" @click="goShare">
<div class="">批量</div>
<div>分享</div>
</div> -->
</view>
<!-- <g-tabbar class="tabbar" :isShow="tabbarShow"></g-tabbar> -->
</template>
<script>
import selectPanel from "./child/select.vue";
import mfilter from "./child/filter.vue";
import promotion from "./child/promotion.vue";
export default {
components: {
selectPanel,
mfilter,
promotion,
},
mounted() {
// console.log("mountedmountedmountedmountedmountedmounted");
const query = uni.createSelectorQuery().in(this);
// console.log("query", query);
// 选择指定的 DOM 元素
query
.select(".navContainer")
.boundingClientRect((res) => {
this.navbarHeight = res.height;
})
.exec();
},
onShareAppMessage() {
let that = this;
let path;
console.log("getFilterData", this.getFilterData);
path = `/pages/home/index?filterInfo=${JSON.stringify(that.getFilterData)}&cityInfo=${that.selectedCity}`;
let appInfo = uni.getStorageSync("miniApp-info");
return {
// title: "你想找的厂都有,立即查看",
title: appInfo.slogan || "你想找的厂都有,立即查看",
imageUrl: appInfo.sharePoster,
path,
};
},
onShareTimeline() {
let appInfo = uni.getStorageSync("miniApp-info");
return {
// title: "你想找的厂都有,立即查看",
title: appInfo.slogan || "你想找的厂都有,立即查看",
imageUrl: appInfo.sharePoster,
};
},
onLoad(options) {
// console.log("options", options);
let that = this;
that.navInfo = that.G.getNavInfo();
let sceneInfo = uni.getLaunchOptionsSync();
// console.log("scenescene", sceneInfo);
if ((sceneInfo.scene == 1007 || sceneInfo.scene == 1008) && sceneInfo.query.filterInfo) {
// that.getFilterData = that.getFilterData. {...JSON.parse(sceneInfo.query.filterInfo)};
Object.assign(that.getFilterData, JSON.parse(sceneInfo.query.filterInfo));
if (sceneInfo.query.cityInfo) {
uni.setStorageSync("selectedCity", sceneInfo.query.cityInfo);
}
// console.log("that.getFilterData", that.getFilterData);
}
uni.setNavigationBarTitle({
title: that.pageTitle,
});
if (options.userId) {
this.userId = options.userId;
uni.setStorageSync("AGENCY_USER_ID", this.userId);
}
// console.log("options.scene", options.scene);
// console.log("options.scene", options.scene);
// console.log("options.scene", options.scene);
// console.log("options.scene", options.scene);
// console.log("options.scene", options.scene);
// console.log("options.scene", options.scene);
// // console.log("options.scene", decodeURIComponent(options.scene));
if (options.scene) {
// // // console.log("XXXXXXXXXXXX");
// // //扫小程序码携带参数
var sceneStr = decodeURIComponent(options.scene);
var sceneJson = this.G.sceneToJson(sceneStr);
// // // console.log("sceneJson===", sceneJson);
// // if (sceneJson.tk) {
// // uni.setStorageSync("apply-token", sceneJson.tk);
// // }
// console.log("options.scene",sceneJson);
// console.log("options.scene", sceneJson);
if (sceneJson.i) {
this.userId = sceneJson.i.split("_")[0];
uni.setStorageSync("AGENCY_USER_ID", this.userId);
}
}
// #ifdef MP-WEIXIN
this.searchAnimate();
// #endif
let appId = getApp().globalData.appId;
that.isshowskit = false;
// console.log("=========", that);
that.usetype = "share";
that.useshare = true;
that.query.page = 1;
this.isLogin = uni.getStorageSync("apply-userinfo") ? true : false;
this.query.size = this.isLogin ? 50 : 20;
// 如果没有携带城市信息,则在获取完城市定位后重新触发获取城市职位
// if (!sceneInfo.query.cityInfo) {
// uni.$on("setCity", () => {
// that.G.startAbort(1);
// that.loadSelectedCityFromCache();
// that.isCheckShare(() => {
// that.getList().then(() => {
// that.showNotic = "paused";
// console.log("that.showNotic1", that.showNotic);
// that.getJobNum();
// setTimeout(() => {
// if (uni.getStorageSync("miniApp-info").notice) {
// let notice = uni.getStorageSync("miniApp-info").notice;
// var reg = /[\r\n]/g;
// notice = notice.replace(reg, "");
// that.noticList = [];
// // that.noticList = notice;
// that.noticList.push(notice);
// that.showNotic = "play";
// }
// console.log("that.noticList", that.noticList);
// }, 100);
// });
// that.isShowTab = true;
// });
// });
// }
that.isCheckShare(() => {
that.getList().then(() => {
that.showNotic = "paused";
console.log("that.showNotic1", that.showNotic);
that.getJobNum();
setTimeout(() => {
if (uni.getStorageSync("miniApp-info").notice) {
let notice = uni.getStorageSync("miniApp-info").notice;
var reg = /[\r\n]/g;
notice = notice.replace(reg, "");
that.noticList = [notice,notice,notice,notice,notice,notice,notice,notice,notice,notice,notice,notice,notice,notice,notice,notice,notice,notice,notice,notice,notice];
that.showNotic = "play";
}
console.log("that.noticList", that.noticList);
}, 100);
});
that.isShowTab = true;
});
},
onShow() {
let that = this;
that.loadSelectedCityFromCache().then(() => {
this.getList();
});
// 尝试从缓存获取miniApp-info如果不存在则请求API获取
let miniAppInfo = uni.getStorageSync("miniApp-info");
if (!miniAppInfo || Object.keys(miniAppInfo).length === 0) {
// 如果缓存中没有数据则请求API获取
this.G.Get("/yishoudan/agency/getInfo", {}, (res) => {
let obj = { ...res.agency, ...res.weixinConfig };
for (let key in obj) {
if (typeof obj[key] == "string" && obj[key].indexOf("http://") > -1) {
obj[key] = obj[key].replace("http:", "https:");
}
}
uni.setStorageSync("miniApp-info", obj);
this.appInfo = obj;
if (this.appInfo.noticeImg) {
this.noticeImg = this.appInfo.noticeImg;
} else {
this.noticeImg = "https://bocai-cms.oss-cn-beijing.aliyuncs.com/web-resource/pugongying/notice/noticeDefault.png";
}
uni.setStorageSync("pgy-agency-id", res.agency.id);
uni.setStorageSync("ai-name", res.agency.aiRobotName);
uni.setStorageSync("ai-logo", res.agency.aiLogo);
});
} else {
// 如果缓存中有数据,则直接使用
this.appInfo = miniAppInfo;
if (this.appInfo.noticeImg) {
this.noticeImg = this.appInfo.noticeImg;
} else {
this.noticeImg = "https://bocai-cms.oss-cn-beijing.aliyuncs.com/web-resource/pugongying/notice/noticeDefault.png";
}
}
// setTimeout(() => {
// that.appInfo = uni.getStorageSync("miniApp-info");
// }, 100);
setTimeout(() => {
if (uni.getStorageSync("miniApp-info").notice) {
let notice = uni.getStorageSync("miniApp-info").notice;
var reg = /[\r\n]/g;
notice = notice.replace(reg, "");
that.noticList = [notice, notice];
that.showNotic = "play";
}
console.log("that.noticList", that.noticList);
}, 100);
},
data() {
return {
isAgency: uni.getStorageSync("apply-userinfo") && uni.getStorageSync("apply-userinfo").agencyId,
isJm:uni.getStorageSync("apply-userinfo") && uni.getStorageSync("apply-userinfo").agencyId && uni.getStorageSync("apply-userinfo").agencyId == '114827',
hrtext: 2,
tabbarShow: true,
navbarHeight: 0, // navbar高度
tabbarHeight: 0, // tabbar高度
isTrigger: false, // 职位刷新状态
jobNum: 0, // 职位刷新数
globalData: getApp().globalData,
isUseNewJob: getApp().globalData.isUseNewJob,
appid: getApp().globalData.appId,
selectedCity: "全国",
themeColor: getApp().globalData.themeColor,
envVersion: uni.getStorageSync("ENV_VERSION"), // 小程序环境判断
isMember: uni.getStorageSync("IS_MINIAPP_MEMBER"), // 登陆者是否当前小程序成员的判断
hasPermission: uni.getStorageSync("HAS_PERMISSION") == 1 ? true : false, // 登陆者是否有权限查看
noticeImg: "",
getFilterData: {
sex: "-1",
ageRangeStr: "",
jobCategoryLabelIds: "",
jobRequestLabelIds: "",
jobSpecialLabelObjects: [],
jobCategoryLabelObjects: [],
},
getFilterDataNew: {
sex: "-1",
jobCategoryLabelIds: "",
jobRequestLabelIds: "",
jobSpecialLabelObjects: [],
jobCategoryLabelObjects: [],
},
scrollTo: "",
whichOneShow: "",
pageTitle: getApp().globalData.title,
background: {
backgroundColor: "#3578f6",
},
isShowTab: false,
showPop: false, // 显示关注邀请弹窗显示
attentionList: [], // 关注列表
subAttentionList: [],
attentionConfig: {
num: 1,
size: 12,
},
checkAll: false, // 全选
upInfo: {
num: 0,
list: [],
},
computeCode: -1,
isLogin: true,
navInfo: {},
cdnBaseImg: this.G.store().cdnBaseImg,
localBaseImg: this.G.store().cdnBaseImg,
loading: true,
speed: -1,
query: {
page: 1,
size: 50,
list: [],
isFinish: -1,
ujc: 0, // 0 全部 1收藏
sortTag: 0,
},
keyword: "",
// 排序的配置
sortList: {
list: [
{
name: "时间",
key: 0,
showName: "按时间",
},
{
name: "工价",
key: 1,
showName: "按工价",
},
// {
// name: "按佣金",
// key: 3,
// showName: "按佣金",
// },
{
name: "距离",
key: 2,
showName: "按距离",
},
],
active: 0,
},
tabInfo: {
list: uni.getStorageSync("apply-userinfo")
? [
{
name: "全部",
classify: 0,
},
{
name: "推荐",
classify: 1,
},
// {
// name: "收藏",
// classify: 2,
// },
]
: [
{
name: "全部",
classify: 0,
},
{
name: "推荐",
classify: 1,
},
],
active: 0,
},
popSelect: {
isShow: false,
},
// "在这里,使用世界前沿的人工智能技术,为用户甄选海量的高清美图,用更流畅,更快捷,更精准的搜索体验,带你去发现多彩的世界。"
noticList: [],
showNotic: "paused",
userId: 0,
currentInfo: {},
appInfo: {},
toTop: false,
usetype: "share",
useshare: true,
isshowskit: false,
};
},
onReachBottom() {
let that = this;
if (!uni.getStorageSync("apply-token") && that.tabInfo.active == 1) {
return false;
}
if (that.query.isFinish == -1 || that.query.isFinish == that.query.size) {
that.query.page++;
that.getList("concat");
}
},
methods: {
getMore(){
let that = this;
if(that.isJm){
uni.navigateTo({
url:'/root/merchantManagement/dynamicNotice?cont=' + that.noticList[0]
})
}
},
loadSelectedCityFromCache() {
// 假设缓存中的键名为 'selectedCity'
return new Promise((reso, rej) => {
const cachedCity = uni.getStorageSync("selectedCity");
console.log("this.selectedCity", this.selectedCity);
console.log("this.selectedCity", cachedCity);
if (cachedCity && this.selectedCity != cachedCity) {
this.selectedCity = cachedCity;
reso();
}
});
},
checkScroll() {
let that = this;
uni
.createSelectorQuery()
.select("#tttop")
.boundingClientRect((data) => {
// // console.log("data", data);
if (data.top <= 0) {
that.toTop = true;
} else {
that.toTop = false;
}
// domTopInfo.value[id] = data.top;
// scrollTop.value = data.top - 200;
})
.exec();
},
/**
* 筛选相关========================================================
*/
deleteSex() {
// console.log("deleteSex");
this.getFilterData.sex = -1;
this.getList();
},
deleteAge() {
// console.log("deleteAge");
this.getFilterData.ageRangeStr = "";
this.getList();
},
deleteJobCategoryLabel(id) {
// console.log(id);
this.getFilterData.jobCategoryLabelObjects = this.getFilterData.jobCategoryLabelObjects.filter((obj) => obj.id != id);
const idsArray = this.getFilterData.jobCategoryLabelObjects.map((obj) => obj.id);
// 将数组转换为字符串
this.getFilterData.jobCategoryLabelIds = idsArray.join(",");
// console.log("deleteJobCategoryLabel", this.getFilterData);
this.getList();
},
deleteJobSpecialLabel(id) {
this.getFilterData.jobSpecialLabelObjects = JSON.parse(JSON.stringify(this.getFilterData.jobSpecialLabelObjects.filter((obj) => obj.id != id)));
const idsArray = this.getFilterData.jobSpecialLabelObjects.map((obj) => obj.id);
// 将数组转换为字符串
this.getFilterData.jobSpecialLabelIds = idsArray.join(",");
// console.log("deleteJobSpecialLabel", this.getFilterData);
this.getList();
},
clearFilter1() {
var that = this;
this.getFilterData.jobCategoryLabelIds = "";
this.getFilterData.jobSpecialLabelIds = "";
this.getFilterData.jobCategoryLabelObjects = [];
this.getFilterData.jobSpecialLabelObjects = [];
this.scrollTo = "";
this.getFilterData.sex = -1;
this.getFilterData.ageRangeStr = "";
// console.log("this.getFilterData", this.getFilterData);
this.$refs.filterChild.clearFilter();
this.getList();
setTimeout(() => {
that.scrollTo = "listBox";
// console.log("aaaaaaaaa");
}, 1);
},
receiveFromChild(data) {
// console.log(data);
this.whichOneShow = "";
this.query.page = 1;
this.getFilterData = JSON.parse(JSON.stringify(data));
// console.log("getFilterData in receiveFromChild", this.getFilterData);
this.getList();
// this.messageFromChild = data.message;
},
chooseNl(type) {
let that = this;
that.scrollTo = "";
that.whichOneShow = that.whichOneShow == type ? "" : type;
setTimeout(() => {
that.scrollTo = "tttop";
}, 1);
},
handleOpenCamera() {
let that = this;
that.G.handleScanCode();
},
goPage($path) {
uni.navigateTo({
url: $path,
});
},
reachBottom() {
let that = this;
if ((!uni.getStorageSync("apply-token") && that.tabInfo.active == 1) || !this.isLogin) {
return false;
}
if (that.query.isFinish == -1 || that.query.isFinish == that.query.size) {
that.query.page++;
that.getList("concat");
} else {
if (that.tabInfo.active == 1 && that.usetype == "share") {
that.isshowskit = true;
that.usetype = "only";
that.useshare = false;
that.query.isFinish = -1;
that.query.page = 1;
that.query.size = 50;
that.getList("initall");
}
}
},
isCheckShare(callback = () => {}) {
let that = this,
params = {};
params = {
...that.getFilterData,
pageNum: that.query.page,
pageSize: that.query.size,
keys: that.keyword,
ujc: that.query.ujc,
sortTag: that.query.sortTag,
recruitment: 1,
classify: 1,
workTypeStr: "",
jobClassify: "",
cityName: that.selectedCity == "全国" ? "" : that.selectedCity,
brandIds: "",
};
params.lat = "";
params.lng = "";
let _url = that.api.job_share;
// if (that.tabInfo.active == 1) {
// params.topRecommend = 1;
// }
that.G.Post(_url, params, (res) => {
console.log("一才职位列表:", res);
let resData = {};
resData = res.pageBean;
if (resData.recordCount == 0) {
that.tabInfo.active = 0;
} else {
that.tabInfo.active = 1;
}
console.log("that.tabInfo.active", that.tabInfo.active);
callback();
});
},
getList($type = "init") {
let that = this,
params = {};
if (that.query.list.length != 0) {
uni.showLoading({
title: "加载中...",
mask: true,
});
}
params = {
...that.getFilterData,
pageNum: that.query.page,
pageSize: that.query.size,
keys: that.keyword,
ujc: that.query.ujc,
sortTag: that.query.sortTag,
recruitment: 1,
classify: 1,
workTypeStr: "",
jobClassify: "",
cityName: that.selectedCity == "全国" ? "" : that.selectedCity,
brandIds: "",
};
// if (that.tabInfo.list[that.tabInfo.active].classify == 1) {
// params.jobType = 2;
// }
if (that.query.sortTag !== 2) {
params.lat = "";
params.lng = "";
// params.sortTag = 0;
} else {
params.lat = that.currentInfo.latitude ? that.currentInfo.latitude : "";
params.lng = that.currentInfo.longitude ? that.currentInfo.longitude : "";
// params.sortTag = 2;
}
return new Promise((resolve, reject) => {
let _url = "";
if ($type == "initall") {
_url = that.api.yi_job_list;
} else {
console.log(" that.useshare", that.useshare);
if (that.tabInfo.active == 1 && that.useshare) {
_url = that.api.job_share;
} else {
_url = that.api.yi_job_list;
}
}
// if (that.tabInfo.active == 1 && $type != 'initall') {
// params.topRecommend = 1;
// }
that.G.Post(_url, { ...params, abort: true }, (res) => {
uni.hideLoading();
// console.log("一才职位列表:", res);
that.computeCode = 1;
let resData = {};
resData = res.pageBean;
if (resData.recordCount == 0) {
that.loading = false;
} else {
that.loading = true;
}
console.log("$type $type $type $type ", $type);
// that.speed = resData.recordCount;
// that.query.isFinish = resData.recordList.length;
new Promise((reso) => {
if (resData.recordList && resData.recordList.length > 0) {
// if (that.tabInfo.active == 1) {
// // 根据 distance 进行从小到大排序
// resData.recordList.sort((a, b) => a.distance - b.distance);
// }
resData.recordList = that.G.toGetAddressv3(resData.recordList);
resData.recordList = that.G.toGetAge(resData.recordList);
if (uni.getStorageSync("JOB_REQUIRE_LIST") && Date.now() - uni.getStorageSync("JOB_REQUIRE_LIST").time < 2 * 24 * 60 * 60 * 1000) {
resData.recordList = that.G.yijobCopy(resData.recordList);
reso();
} else {
that.G.Post("/yishoudan/labels/type/app/80", {}, (res) => {
uni.setStorageSync("JOB_REQUIRE_LIST", { data: res.labels, time: Date.now() });
resData.recordList = that.G.yijobCopy(resData.recordList);
reso();
});
}
} else {
reso();
}
}).then((res) => {
console.log("00000000000000000000000000000000000000000000000000000000000000000000000000000res", res);
if ($type == "init") {
that.query.list = [];
uni.setStorageSync("lin-liu", 0);
uni.setStorageSync("lin-bao", 0);
that.query.list = resData.recordList.map((item, index) => {
item.liuNum = uni.getStorageSync("lin-liu") ? uni.getStorageSync("lin-liu") : Math.floor(Math.random() * 1000);
return {
...item,
liuNum: item.liuNum,
baoNum: uni.getStorageSync("lin-bao") ? uni.getStorageSync("lin-bao") / 10 : Math.ceil(item.liuNum / 10),
collected: item.collected ? true : false,
cus_price: item.salaryClassify != 7 ? that.G.getSalaryClassifyValueHtml(item.salaryClassify, item.salaryClassifyValue) : "月薪",
priceStr: item.salaryClassify != 7 ? that.G.getSalaryClassifyValue(item.salaryClassify, item.salaryClassifyValue) : "月薪",
gender: that.G.getGenderByMinAge(item),
recruitmentValue: item.recruitment == 1 ? true : false,
fuWuFei: that.G.setReturnFee(item.returnFee, item.returnFeeType),
newXmf:uni.getStorageSync('apply-agencyId') == uni.getStorageSync('pgy-agency-id') ?
(item.agencyId == uni.getStorageSync('apply-agencyId') ? (item.upAgencyName || item.upProviderName) : item.agencyName) :
''
};
});
if (that.tabInfo.active == 1 && resData.recordList && resData.recordList.length < that.query.size) {
console.log("111111111111111111111111111111111111111111111111");
if (that.tabInfo.active == 1 && that.usetype == "share") {
that.hrtext = 1;
that.isshowskit = true;
that.usetype = "only";
that.useshare = false;
that.query.isFinish = -1;
that.query.page = 1;
that.query.size = 50;
that.getList("initall");
} else {
that.hrtext = 2;
}
}
} else {
if ($type == "initall") {
that.query.list = that.query.list
.concat([
{
isskit: 1,
salaryClassifyValue: 3000,
mainlyPopularize: 0,
storeDistrict: "",
agencyId: 115429,
recommend: 0,
collected: 0,
cozeStructureRes:
'{"企业位置":"湖北省武汉市","休息":"","住宿":"住宿免费,水电均摊","体检要求":"","佣金":"共计 1200 元","佣金详情":"利润:打卡 7 天 1200 元;卡点 3 天离职无费用;免车费或做到工期 150 元车补;不满 7 天及旷自离无费用","保险":"商保100元按照记薪周期扣除","区域要求":"","厂牌押金":"","发薪日":"","吃饭":"刷卡吃饭,吃多少扣多少","员工福利":"免车费或做到工期150车补","安检门":"","宿舍押金":"","少数民族":"","岗位薪资":"30元/时","岗前培训":"","工作内容":"企业主要从事笔记本电脑组装","工作方式":"坐班为主,大部分坐着上班","工具押金":"","工衣":"","工装押金":"","带手机":"","性别年龄":"男 18 - 50女 18 - 50","文化学历":"","案底黑户":"","流水线":"","班次工时":"","纬度":"30.584355","纹身烟疤":"","经度":"114.298572","综合月薪":"6930 - 9000元/月","职位分类":"电子厂","职位数量":"1","职位标签":"短期工 免费住宿 坐班为主 人走账清 免路费 有车补 工时高 交商保","职位标题":"武汉某电子厂小时工","薪资明细":"员工30元/小时每天记薪10.5 - 11个小时出勤不满点对点也按30元工期需要在职20天工期结束员工24元/小时留任需满月做不到工期及留任不满月按16元/小时发放不满7天及旷自离无工资工资全额含服务费6%服务费100元按照记薪周期扣除","试用期":"","资质证件":"","身份证":"身份证有效期要大于31天小于31天的要临时身份证+身份证原件","身体状况":"测身高体重BMI值17 - 32","车间":"","返厂政策":"","银行卡":"","面试地址":"","面试时间":"","面试注意事项":"身份证有效期要大于31天小于31天的要临时身份证+身份证原件。测身高体重BMI值17 - 31.99","面试评价":"","项目驻场":"","预支工资":"","餐卡押金":""}',
recruitment: 1,
picked: 0,
maxMonthlyPay: 900000,
logo: "",
storeName: "",
id: 154510,
jobType: 2,
upAgencyId: 115429,
jobName: "武汉某电子厂小时工",
storeAddr: "湖北省武汉市",
salaryClassify: 0,
minMonthlyPay: 693000,
maxAgeWoman: 50,
updateTime: 1757322659000,
storeId: "",
upProviderId: "",
returnFeeType: 6,
maxAge: 50,
returnFee: 120000,
visibleRange: 123,
jobRequestLabelNames: "免费住宿, 交商保, 坐班为主, 短期工, 人走账清, 工时高, 有车补",
minAge: 18,
maxAgeMan: 50,
minAgeWoman: 18,
minAgeMan: 18,
},
])
.concat(
resData.recordList.map((item, index) => {
return {
...item,
fuWuFei: that.G.setReturnFee(item.returnFee, item.returnFeeType),
liuNum: item.liuNum,
baoNum: uni.getStorageSync("lin-bao") ? uni.getStorageSync("lin-bao") / 10 : Math.ceil(item.liuNum / 10),
collected: item.collected ? true : false,
cus_price: item.salaryClassify != 7 ? that.G.getSalaryClassifyValueHtml(item.salaryClassify, item.salaryClassifyValue) : "月薪",
priceStr: item.salaryClassify != 7 ? that.G.getSalaryClassifyValue(item.salaryClassify, item.salaryClassifyValue) : "月薪",
gender: that.G.getGenderByMinAge(item),
newXmf:uni.getStorageSync('apply-agencyId') == uni.getStorageSync('pgy-agency-id') ?
(item.agencyId == uni.getStorageSync('apply-agencyId') ? (item.upAgencyName || item.upProviderName) : item.agencyName) :
''
};
}),
);
} else {
that.query.list = that.query.list.concat(
resData.recordList.map((item, index) => {
return {
...item,
liuNum: item.liuNum,
baoNum: uni.getStorageSync("lin-bao") ? uni.getStorageSync("lin-bao") / 10 : Math.ceil(item.liuNum / 10),
collected: item.collected ? true : false,
cus_price: item.salaryClassify != 7 ? that.G.getSalaryClassifyValueHtml(item.salaryClassify, item.salaryClassifyValue) : "月薪",
priceStr: item.salaryClassify != 7 ? that.G.getSalaryClassifyValue(item.salaryClassify, item.salaryClassifyValue) : "月薪",
gender: that.G.getGenderByMinAge(item),
recruitmentValue: item.recruitment == 1 ? true : false,
fuWuFei: that.G.setReturnFee(item.returnFee, item.returnFeeType),
newXmf:uni.getStorageSync('apply-agencyId') == uni.getStorageSync('pgy-agency-id') ?
(item.agencyId == uni.getStorageSync('apply-agencyId') ? (item.upAgencyName || item.upProviderName) : item.agencyName) :
''
};
}),
);
}
}
that.speed = resData.recordCount;
that.query.isFinish = resData.recordList.length;
resolve();
});
// console.log("resData.recordList", resData.recordList);
});
});
},
goDetail($item) {
// console.log("前往详情页", $item);
uni.navigateTo({
url: "/root/detail/job?id=" + $item.id,
});
},
/**
* 搜索框的滚动监听变化
*/
searchAnimate() {
return;
let that = this;
uni
.createSelectorQuery()
.select("#listBox")
.fields(
{
scrollOffset: true,
size: true,
},
(res) => {
that.$mp.page.animate(
"#searchInputBox",
[
{
top: "10px",
width: "100%",
},
{
top: "-48px",
width: "70%",
},
],
800,
{
scrollSource: "#listBox",
timeRange: 1000,
startScrollOffset: 0,
endScrollOffset: 60,
},
);
that.$mp.page.animate(
".the_city",
[
{
color: "#333",
},
{
color: "#fff",
},
],
500,
{
scrollSource: "#listBox",
timeRange: 1000,
startScrollOffset: 0,
endScrollOffset: 90,
},
);
},
)
.exec();
},
shareJob(e) {
// console.log(e);
this.currentJob = e;
},
goSearch() {
// this.G.isLogin();
// if (this.G.isLogin()) {
uni.navigateTo({
url: "/root/other/search?from=home",
});
// }
},
goCity() {
uni.navigateTo({
url: "/root/other/city",
});
},
getLocation() {
let that = this;
return new Promise((resolve, reject) => {
uni.authorize({
// 检测是否授权位置信息
scope: "scope.userLocation",
success() {
// console.log("用户成功授权位置信息");
uni.getLocation({
type: "wgs84",
success(res) {
that.currentInfo = {
latitude: res.latitude,
longitude: res.longitude,
timestamp: new Date().getTime(),
};
// console.log("获取当前经纬度:", that.currentInfo);
resolve();
},
fail(err) {
// console.log(err);
},
complete() {
resolve();
},
});
},
fail(err) {
// console.log(err);
// console.log("用户拒绝授权位置信息,再次提示用户授权");
uni.showToast({
title: "请开启定位权限以显示距职位距离",
icon: "none",
});
resolve();
// that.showRefuseLocationPermission();
},
complete() {
// console.log();
// resolve();
},
});
});
},
refreshJobList() {
let that = this;
this.query.page = 1;
this.isTrigger = true;
this.useshare = true;
if (that.tabInfo.active == 1) {
that.usetype = "share";
}
this.getList().then(() => {
// console.log("that.isTrigger", that.isTrigger);
that.isTrigger = false;
that.getJobNum();
});
},
getJobNum() {
let that = this;
that.G.Get(that.api.get_job_updateNum, { hour: 48 }, (res) => {
// console.log("res", res);
that.jobNum = res;
});
},
getSearch(e) {
// console.log(e);
this.speed = -1;
this.keyword = e || "";
this.query.page = 1;
// console.log(this.whichPage);
this.getList();
},
handleUpdateTab(e) {
// console.log("获取tab数据", e);
let that = this;
that.isshowskit = false;
that.usetype = "share";
that.useshare = true;
that.query.list = [];
that.loading = true;
that.tabInfo.active = e;
that.query.page = 1;
that.speed = -1;
if (that.tabInfo.list[that.tabInfo.active].classify == 2) {
that.query.ujc = 1;
} else {
that.query.ujc = 0;
}
that.getList();
},
// 打开弹窗
openPop() {
uni.navigateTo({
url: "/root/detail/select",
});
},
// 批量分享
goShare() {
if (this.isLogin) {
uni.navigateTo({
url: "/root/detail/shareJob",
});
} else {
uni.showModal({
title: "登录提示",
content: "该页面需要登录才能查看,是否登录",
success(res) {
if (res.confirm) {
uni.navigateTo({
url: "/root/login/index",
});
} else {
}
},
});
}
},
successLogin() {
uni.reLaunch({
url: "/pages/home/index",
});
},
sortJob(ind) {
let that = this;
this.sortList.active = ind;
that.loading = true;
that.speed = -1;
that.query.list = [];
this.query.sortTag = this.sortList.list[ind].key;
this.whichOneShow = "";
if (this.query.sortTag === 2) {
// 60 * 60 * 24
if (that.currentInfo.latitude && new Date().getTime() - that.currentInfo.timestamp < 1000 * 10) {
// console.log("inTime");
this.getList();
} else {
// console.log("outTime");
this.getLocation().then(() => {
this.getList();
});
}
} else {
this.getList();
}
},
},
};
</script>
<style lang="scss">
.ml8 {
margin-left: 8px;
}
.bg_main {
background-color: v-bind("globalData.themeBackgroundColor");
border: 1px solid v-bind("globalData.themeColor");
}
.por {
position: relative;
}
@font-face {
font-family: "dongtai";
font-display: swap;
src: url("//at.alicdn.com/t/webfont_afw3rg7h8vi.eot");
/* IE9*/
src:
url("//at.alicdn.com/t/webfont_afw3rg7h8vi.eot?#iefix") format("embedded-opentype"),
/* IE6-IE8 */ url("//at.alicdn.com/t/webfont_afw3rg7h8vi.woff2") format("woff2"),
url("//at.alicdn.com/t/webfont_afw3rg7h8vi.woff") format("woff"),
/* chrome、firefox */ url("//at.alicdn.com/t/webfont_afw3rg7h8vi.ttf") format("truetype"),
/* chrome、firefox、opera、Safari, Android, iOS 4.2+*/ url("//at.alicdn.com/t/webfont_afw3rg7h8vi.svg#NotoSansHans-DemiLight") format("svg");
/* iOS 4.1- */
}
.dongtai {
font-size: 30rpx;
font-family: "dongtai";
-webkit-text-stroke-width: 0.1px;
// -moz-osx-font-smoothing: grayscale;
font-weight: 600;
color: #333;
}
.csbf {
padding: 0px 8px;
height: 28px;
// background-color: #fff;
border-radius: 16px;
text-align: center;
font-size: 14px;
font-weight: 400;
color: #333333;
line-height: 28px;
box-sizing: border-box;
// margin-top: 6px;
margin-right: 12px;
}
.p-home-inedx {
background-color: #ededed;
.m-more {
position: absolute;
left: 12rpx;
bottom: -44rpx;
width: 154px;
background-color: #696969;
box-shadow: 0px 2px 19px 0px rgba(179, 179, 179, 0.5);
border-radius: 8px;
}
.suffix {
position: absolute;
right: 20rpx;
top: 10px;
z-index: 1;
border-top-right-radius: 110rpx;
border-bottom-right-radius: 110rpx;
}
// #ifdef MP-WEIXIN
.u-border {
border-color: #fff !important;
background-color: #fff;
}
.navigatorBar .tabs {
position: relative;
left: 50%;
color: #fff;
transform: translateX(-50%);
justify-content: center;
box-sizing: border-box;
}
.sticky {
position: sticky;
top: 0px;
left: 0;
z-index: 100;
}
#searchInputBox {
display: flex;
justify-content: space-between;
padding: 0 10px;
top: 10px;
box-sizing: border-box;
position: relative;
z-index: 9999;
width: 100vw;
}
// #endif
}
.quickapply {
/* position: relative; */
display: flex;
justify-content: space-between;
height: 80px;
margin: 0 10px 0;
padding-top: 10px;
margin-bottom: 0;
/* background-color: #fff; */
overflow: hidden;
}
.quickapply button {
display: flex;
height: 100%;
width: 100%;
padding: 0;
margin: 0;
}
.sticky {
position: sticky;
top: 0px;
left: 0;
z-index: 999;
}
.quickapply button > view {
position: relative;
display: flex;
justify-content: space-between;
align-items: center;
width: 50%;
padding: 20px 24px;
border-radius: 8px;
background-color: #fff;
}
.quickapply button > view:last-child {
margin-left: 10px;
}
.display-flex {
display: flex;
justify-content: space-between;
}
/* .quickapply button > view:first-child::after {
content: "";
width: 1px;
height: 20px;
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
background-color: #eee;
} */
.quickapply button > view .t-icon {
width: 38px;
height: 38px;
}
.quickapply button > view .info > view {
text-align: left;
line-height: 1.6;
}
.clear {
position: sticky;
right: 0px;
top: 0px;
height: 44px;
min-width: 60px;
text-align: center;
line-height: 44px;
font-size: 14px;
background: linear-gradient(180deg, #f5f5f5, #ffffff 23%, #ffffff 79%, #f5f5f5);
box-shadow: -12px 0px 8px -4px rgba(206, 206, 206, 0.6);
}
.clear_icon {
position: absolute;
display: inline-block;
width: 12px;
height: 12px;
line-height: 10px;
border-radius: 50%;
background-color: #fff;
right: -2px;
top: -2px;
color: #aaa;
/* font-size: 12px; */
}
.u-notice-box {
margin-left: 0 !important;
}
.defaultShadow {
box-shadow: 0px 2px 3px 0px rgba(214, 214, 214, 0.3);
}
</style>