完善

parent 6f7917fe
......@@ -30,7 +30,7 @@
"vconsole": "^3.15.1",
"vue": "^3.3.11",
"vue-i18n": "^9.1.9",
"wot-design-uni": "^1.3.12",
"wot-design-uni": "^1.3.13",
"xinhua-sdk": "^1.8.0"
},
"devDependencies": {
......@@ -14654,9 +14654,9 @@
}
},
"node_modules/wot-design-uni": {
"version": "1.3.12",
"resolved": "https://registry.npmmirror.com/wot-design-uni/-/wot-design-uni-1.3.12.tgz",
"integrity": "sha512-aF4ReRTqLLQ7/JcQQvBZJBivoprX9xrvI0b+xWakis5xDSF7tfz1ndPSCBgPtPdTzIaEG5RAT18x0ueRSUbixQ==",
"version": "1.3.13",
"resolved": "https://registry.npmmirror.com/wot-design-uni/-/wot-design-uni-1.3.13.tgz",
"integrity": "sha512-3LHW480eivYAIDsxQr8KxMHCpeoj45XXpbmslLEvSWdPaRBvkXukaMW8z7wjejrMozxPBkQZT52bktCLBT/kOA==",
"engines": {
"HBuilderX": "^3.8.7"
},
......
......@@ -30,7 +30,7 @@
"vconsole": "^3.15.1",
"vue": "^3.3.11",
"vue-i18n": "^9.1.9",
"wot-design-uni": "^1.3.12",
"wot-design-uni": "^1.3.13",
"xinhua-sdk": "^1.8.0"
},
"devDependencies": {
......
import instance from "@/utils/request";
// 获取职位列表
export const getjobListApi = params => instance.post("/c/position/page", params);
// 获取系统匹配岗位
export const getjobListApi2 = params => instance.post("/c/position/recommend/page", params);
// 获取文章匹配岗位
export const getjobListApi3 = articleId => instance.post(`/jobFair/position/${articleId}`);
// 获取职位详情
export const getJobDetailApi = id => instance.post(`/job/detail/${id}`);
export const getJobDetailApi = id => instance.post(`/c/position/detail/${id}`);
// 投递简历
export const submitResumeApi = id => instance.post(`/application/delivery/${id}`);
export const submitResumeApi = id => instance.post(`/position/application/delivery/${id}`);
// 获取投递
export const getSubmitResumeApi = id => instance.post(`/job/getApplication/${id}`);
// 获取职位详情
export const getCompanyDetailApi = id => instance.post(`/job/company/detail/${id}`);
export const getCompanyDetailApi = id => instance.post(`/c/position/company/detail/${id}`);
// 需求信息分页
export const getNeedListApi = data => instance.post("/need/getPageList", data);
export const getNeedListApi = data => instance.post("/need/getPageList",data);
// 需求登记
export const needRegisterApi = id => instance.post(`/need/register/${id}`);
// 获取平台分页 1零工,2其它
......
......@@ -26,7 +26,7 @@ export const saveWorkExperienceApi = params => instance.post("/user/resume/saveW
// 保存教育经历
export const saveEducationExperienceApi = params => instance.post("/user/resume/saveEducationExperience", params);
// 获取投递列表
export const getApplicationListApi = params => instance.post("/job/getApplicationList", params);
export const getApplicationListApi = params => instance.post("/user/application/page", params);
// 获取面试列表
export const getInterviewListApi = params => instance.post("/job/getInterviewList", params);
......
<template>
<view class="postion-card1" @tap="jump(data.id)">
<view class="flex-between">
<view class="postion-name">{{ data.jobName }}</view>
<view class="postion-name">{{ data.name }}</view>
<view v-if="data.minSalary > 0" class="salary"
>{{ data.minSalary / 1000 }}k-{{ data.maxSalary / 1000 }}k<text>/月</text></view
>
......@@ -12,7 +12,7 @@
</view>
<view class="flex-between">
<text class="company-name">{{ data.companyName }}</text>
<text class="address">{{ data.cityName + "-" + data.districtName }}</text>
<text class="address">{{ data.cityName + "-" + data.street }}</text>
</view>
</view>
</template>
......
......@@ -54,6 +54,13 @@
"navigationStyle": "custom"
}
},
{
"path": "pages/user/matchingTwo/index",
"style": {
"navigationBarTitleText": "岗位",
"navigationStyle": "custom"
}
},
{
"path": "pages/policy/index",
"style": {
......
......@@ -20,6 +20,9 @@
</view>
<div class="content" v-html="data.content"></div>
</div>
<view class="btn-box" v-if="data.type === 3">
<button class="btn" @tap="viewJobPositions">查看岗位</button>
</view>
</div>
</template>
......@@ -35,11 +38,18 @@ onLoad(({ id }) => {
data.value = res.data;
});
});
const viewJobPositions = () => {
uni.navigateTo({
url: `/pages/user/matchingTwo/index?id=${data.value.id}`
});
}
</script>
<style lang="scss" scoped>
.page {
padding: 32rpx;
padding-bottom:calc(112rpx + env(safe-area-inset-bottom)) ;
.top {
padding-bottom: 32rpx;
margin-bottom: 32rpx;
......@@ -90,4 +100,22 @@ onLoad(({ id }) => {
}
}
}
.btn-box{
position: fixed;
bottom: 0;
height: 112rpx;
width: 100%;
background: #ffffff;
display: flex;
align-items: center;
padding-bottom:env(safe-area-inset-bottom) ;
.btn{
background: #1F86FF;
width: 622rpx;
height: 80rpx;
line-height: 80rpx;
color: white;
font-size: 28rpx;
}
}
</style>
......@@ -7,7 +7,7 @@
v.name
}}</view>
</div>
<scroll-view :scroll-y="true" class="content" @scrolltolower="getData()">
<scroll-view :scroll-y="true" class="content" @scrolltolower="onReachBottom">
<article-list :list="list"></article-list>
</scroll-view>
</div>
......@@ -19,42 +19,45 @@ import articleList from "@/components/articleList/index.vue";
import { getArticleListApi, getArticleTypesApi } from "@/api/article.js";
import { reactive, ref } from "vue";
const active = ref("");
const typeList = ref([{ id: "", name: "全部" }]);
const typeList = ref([{ id: "", name: "全部" },{ id: -1, name: "招聘会" }]);
getArticleTypesApi(2).then(res => {
typeList.value.push(...res.data);
});
onShow(() => {
changeType({ id: "" });
});
const changeType = type => {
active.value = type.id;
pageNo = 1;
list.splice(0, list.length);
flag = false;
list.value = []
getData();
};
/* 文章 */
// 判断是否还有数据
let pageNo = 1;
let flag = false;
const list = reactive([]);
const list = ref([]);
const getData = () => {
if (flag) {
return;
}
getArticleListApi({
const params = {
type: 2,
categoryId: active.value,
pageNo: pageNo++,
pageNo,
pageSize: 10
}).then(res => {
if (res.data.length < 10) {
flag = true;
}
list.push(...res.data);
}
if (active.value === -1) {
params.type = 3
delete params.categoryId
}
getArticleListApi(params).then(res => {
list.value.push(...res.data);
});
};
const onReachBottom = () => {
pageNo++
getData()
}
</script>
<style lang="scss" scoped>
......@@ -83,5 +86,6 @@ const getData = () => {
.content {
flex-grow: 1;
height: 200rpx;
padding-bottom: calc(100rpx + env(safe-area-inset-bottom));
}
</style>
......@@ -7,7 +7,7 @@
v.name
}}</view>
</div>
<scroll-view :scroll-y="true" class="content" @scrolltolower="getData()">
<scroll-view :scroll-y="true" class="content" @scrolltolower="onReachBottom">
<article-list :list="list"></article-list>
</scroll-view>
</div>
......@@ -29,32 +29,30 @@ onShow(() => {
const changeType = type => {
active.value = type.id;
pageNo = 1;
list.splice(0, list.length);
flag = false;
list.value = []
getData();
};
/* 文章 */
// 判断是否还有数据
let pageNo = 1;
let flag = false;
const list = reactive([]);
const list = ref([]);
const getData = () => {
if (flag) {
return;
}
getArticleListApi({
const params = {
type: 1,
categoryId: active.value,
pageNo: pageNo++,
pageNo,
pageSize: 10
}).then(res => {
if (res.data.length < 10) {
flag = true;
}
list.push(...res.data);
}
getArticleListApi(params).then(res => {
list.value.push(...res.data);
});
};
const onReachBottom = () => {
pageNo++
getData()
}
</script>
<style lang="scss" scoped>
......@@ -83,5 +81,6 @@ const getData = () => {
.content {
flex-grow: 1;
height: 200rpx;
padding-bottom: calc(100rpx + env(safe-area-inset-bottom));
}
</style>
......@@ -21,9 +21,9 @@
<view class="pos-name">{{ partTimeJobData.name }}</view>
<view class="cos-position">
<!-- <text>{{partTimeJobData.placeCityName}}</text> -->
<text>{{ partTimeJobData.cityName }}</text>
<text>{{ partTimeJobData.location?.split('-')[1] }}</text>
<text class="margin-8">|</text>
<text>{{ partTimeJobData.jobList?.length }}个在招职位</text>
<text>{{ partTimeJobData.jobVacancies }}个在招职位</text>
</view>
</view>
</view>
......@@ -32,7 +32,7 @@
<view class="pos-address">
<text class="title">公司地址</text>
<view class="address flex-between">
<text>{{ partTimeJobData.address }}</text>
<text>{{ partTimeJobData.location }}</text>
<!-- <view @click="showNavigation = true">
<image src="@/static/image/icon/navigation.png" mode="" />
导航
......@@ -40,19 +40,19 @@
</view>
</view>
<!-- 选择地图 -->
<wd-action-sheet
<!-- <wd-action-sheet
v-model="showNavigation"
:actions="navigationActions"
@close="showNavigation = false"
@select="navigationSelect"
/>
/> -->
<!-- 公司介绍 -->
<view class="pos-introduce pos-padding-top0" v-if="partTimeJobData.companyIntro">
<view class="pos-introduce pos-padding-top0" v-if="partTimeJobData.introduction">
<view class="title">
<text class="text">公司介绍</text>
</view>
<view class="pos-duty activeClass">
<text>{{ partTimeJobData.companyIntro }}</text>
<text>{{ partTimeJobData.introduction }}</text>
</view>
</view>
<!-- 公司基本信息 -->
......@@ -72,41 +72,41 @@
<text class="pos-label">注册资本:</text>
<text class="pos-label-text">{{ partTimeJobData.registeredCapital }}</text>
</view>
<view class="pos-int" v-if="partTimeJobData.companyType">
<view class="pos-int" v-if="partTimeJobData.industry">
<text class="pos-label">行业类型:</text>
<text class="pos-label-text">{{ partTimeJobData.industryCategory }}</text>
<text class="pos-label-text">{{ partTimeJobData.industry }}</text>
</view>
</view>
<!-- 职位推荐 -->
<view
class="pos-recommend"
:style="`top:${activeRecommend ? top : recommendTop}px`"
v-if="partTimeJobData.jobList?.length"
v-if="partTimeJobData.positionList?.length"
@touchstart="onTouchStart"
@touchmove="onTouchMove"
@touchend="onTouchEnd"
>
<view class="title">
<text class="text"
>公司在招职位<text class="num">{{ partTimeJobData.jobList.length }}</text></text
>公司在招职位<text class="num">{{ partTimeJobData.positionList.length }}</text></text
>
</view>
<scroll-view scroll-x="{{true}}" class="pos-select">
<!-- <scroll-view scroll-x="{{true}}" class="pos-select">
<view class="flex-align-center">
<text :class="activeJobListType === '' ? 'active' : ''" @tap="filterOpstionList('')">全部</text>
<text
:class="activeJobListType === item ? 'active' : ''"
v-for="(item, index) in partTimeJobData.jobTypeTextList"
v-for="(item) in partTimeJobData.jobTypeTextList"
:key="item"
@tap="filterOpstionList(item)"
>{{ item }}</text
>
</view>
</scroll-view>
</scroll-view> -->
<!-- 职位列表 -->
<scroll-view scroll-y="{{true}}" class="recommend-list-wrap">
<block v-for="(item, index) in partTimeJobData.jobList" :key="index">
<view class="card-wrap" v-if="item.isShow">
<block v-for="(item, index) in partTimeJobData.positionList" :key="index">
<view class="card-wrap">
<PostionCard1 :data="item"></PostionCard1>
</view>
</block>
......@@ -125,7 +125,8 @@ onLoad(({ id }) => {
console.log(id);
getCompanyDetailApi(id).then(res => {
console.log(res);
partTimeJobData.value = res.data;
partTimeJobData.value = res.data.companyInfo;
partTimeJobData.value.positionList = res.data.positionList;
partTimeJobData.value.jobList.forEach(v => {
v.isShow = true;
});
......@@ -951,8 +952,8 @@ const navigationSelect = ({ item }) => {
}
}
.recommend-list-wrap {
flex-grow: 1;
height: 1000rpx;
// flex-grow: 1;
height: 780rpx;
.card-wrap {
padding: 32rpx;
border-bottom: 1px solid #f3f4f8;
......
......@@ -36,10 +36,15 @@ import { reactive, ref } from "vue";
import { getNeedListApi, needRegisterApi } from "@/api/postion";
const list = reactive([]);
let page = 1;
const getData = () => {
onLoad(({category}) => {
getData(category);
})
const getData = (category) => {
getNeedListApi({
pageSize: 10,
pageNo: page++
pageNo: page++,
category
}).then(res => {
if (res.code == 200) {
// console.log(list);
......@@ -79,7 +84,6 @@ const submit = () => {
show.value = false;
});
};
getData();
</script>
<style lang="scss" scoped>
......
......@@ -3,7 +3,7 @@
<NavBar :showIcon="false" backgroundBox="#ffffff">
<view class="search-form">
<wd-icon class="search-icon" name="search"></wd-icon>
<input placeholder="请输入要查询的内容" placeholder-class="log-input-p" type="text" @confirm="confirm" />
<input v-model="keyword" placeholder="请输入要查询的内容" placeholder-class="log-input-p" type="text" @confirm="confirm" />
</view>
</NavBar>
<!-- 轮播区 -->
......@@ -63,14 +63,20 @@
</view>
<view class="region-pop-right">
<scroll-view scroll-y style="height: 652rpx">
<view
class="region-list"
:class="{ 'region-list-color': regionId == v.code }"
v-for="(v) in regionData"
:key="v.code"
@tap="bindRegionList(v.code, v.name)"
>{{ v.name }}</view
>
<view
class="region-list"
:class="{ 'region-list-color': regionId == -1 }"
@tap="bindRegionList(-1)"
>全部</view
>
<view
class="region-list"
:class="{ 'region-list-color': regionId == v.code }"
v-for="(v) in regionData"
:key="v.code"
@tap="bindRegionList(v.code)"
>{{ v.name }}</view
>
</scroll-view>
</view>
</view>
......@@ -94,13 +100,13 @@
<view class="right">
<view class="title">{{active===0?'薪酬要求':selectionTitle}}</view>
<view v-if="active===0" class="list">
<view class="item" :class="{'light-two':activeTwo===index}" v-for="(item,index) in salary" :key="index" @tap="choiceDetails(index)">{{item.text}}</view>
<view class="item" :class="{'light-two':activeTwo===index}" v-for="(item,index) in salary" :key="index" @tap="choiceDetails(item,index)">{{item.text}}</view>
</view>
<view v-if="active!==0 && active!==4" class="list">
<view class="item" :class="{'light-two':activeTwo===index}" v-for="(item,index) in dataList" :key="item.code" @tap="choiceDetails(index)">{{item.text}}</view>
<view class="item" :class="{'light-two':activeTwo===index}" v-for="(item,index) in dataList" :key="item.code" @tap="choiceDetails(item,index)">{{item.text}}</view>
</view>
<view v-if="active===4" class="list">
<view class="item" :class="{'light-two':activeTwo===index}" v-for="(item,index) in dataList" :key="item.id" @tap="choiceDetails(index)">{{item.name}}</view>
<view class="item" :class="{'light-two':activeTwo===index}" v-for="(item,index) in dataList" :key="item.id" @tap="choiceDetails(item,index)">{{item.name}}</view>
</view>
</view>
</view>
......@@ -163,7 +169,7 @@ let showDoubt = ref(false);
let showInvalid = ref(false);
let active = ref(0);
let activeTwo = ref(-1);
let salary = ref([{text:'不限'},{text:'3k以下',min:0,max:3000},{text:'3-5k',min:3000,max:5000},{text:'5-10k',min:5000,max:10000},{text:'10-20k',min:10000,max:20000},{text:'20-50k',min:20000,max:50000},{text:'50k以上',min:50000,max:100000}])
let salary = ref([{text:'不限',min:null,max:null},{text:'3k以下',min:0,max:3000},{text:'3-5k',min:3000,max:5000},{text:'5-10k',min:5000,max:10000},{text:'10-20k',min:10000,max:20000},{text:'20-50k',min:20000,max:50000},{text:'50k以上',min:50000,max:100000}])
onShow(() => {
getLoginUserApi().then(res => {
......@@ -292,23 +298,32 @@ const bindCityList = (code, name) => {
cityCode = code;
};
// 选择区
const bindRegionList = (code, name) => {
let _regionNav;
if (name == "全部") {
for (let i = 0; i < cityData.length; i++) {
if (cityId.value == cityData[i].code) {
_regionNav = cityData[i].name;
}
}
} else {
pageNo = 1;
regionNav = name;
regionId.value = code;
districtCode = code;
pageNo = 1;
positionListData.value = [];
getListData();
const bindRegionList = (code) => {
regionId.value = code;
maskType.value = null
if (code === -1) {
districtCode = null;
}else{
districtCode = code;
}
pageNo = 1;
positionListData.value = [];
getListData();
// let _regionNav;
// if (name == "全部") {
// for (let i = 0; i < cityData.length; i++) {
// if (cityId.value == cityData[i].code) {
// _regionNav = cityData[i].name;
// }
// }
// } else {
// pageNo = 1;
// regionNav = name;
// regionId.value = code;
// districtCode = code;
// getListData();
// }
// console.log(code);
};
// 职业类型筛选
const positionType = ref([]);
......@@ -362,17 +377,16 @@ const bindScreenEducationList = (text, code) => {
getListData();
};
/* 获取职位列表 */
const keyword = ref("");
let pageNo = 1,
pageSize = 10,
isPartTimeJob = null,
cityCode = null,
districtCode = null,
jobTypeList = [],
genderType = null,
jobIdentityType = null,
orderBy = null,
keyword = null,
identityRequirementList = [];
minSalary = null,
maxSalary = null,
educationRequirement = null,
accommodation = null,
identityRequirement = null,
jobTypePid = null
let positionListData = ref([]);
let selectionTitle = ref("");
......@@ -398,8 +412,33 @@ const choice = (index) => {
dataList.value = positionType.value
}
}
const choiceDetails = (index) => {
activeTwo.value = index*1
const choiceDetails = (data, index) => {
activeTwo.value = index*1
pageNo = 1;
positionListData.value = [];
switch (active.value) {
case 0:
minSalary = data.min;
maxSalary = data.max;
getListData();
break;
case 1:
educationRequirement = data.code;
getListData();
break;
case 2:
accommodation = data.code;
getListData();
break;
case 3:
identityRequirement = data.code;
getListData();
break;
default:
jobTypePid = data.id;
getListData();
}
console.log(data)
}
// 重置
......@@ -407,15 +446,15 @@ const reset = () => {
return new Promise(resolve => {
pageNo = 1;
pageSize = 10;
isPartTimeJob = null;
cityCode = null;
keyword.value = "";
districtCode = null;
jobTypeList = [];
genderType = null;
jobIdentityType = null;
orderBy = null;
minSalary = null;
maxSalary = null;
educationRequirement = null;
accommodation = null;
identityRequirement = null;
jobTypePid = null
positionListData.value = [];
identityRequirementList = [];
resolve();
});
};
......@@ -423,7 +462,7 @@ const reset = () => {
// 职位搜索
const confirm = e => {
reset().then(res => {
keyword = e.detail.value;
keyword.value = e.detail.value;
getListData();
});
};
......@@ -432,16 +471,14 @@ const getListData = () => {
let data = {
pageNo: pageNo,
pageSize: pageSize,
isPartTimeJob: isPartTimeJob,
provinceCode: "520000",
cityCode: cityCode || null,
keyword: keyword.value || null,
districtCode: districtCode || null,
jobTypeList: jobTypeList || [],
genderType: genderType || null,
jobIdentityType: jobIdentityType || null,
orderBy: orderBy || 1,
keyword: keyword || null,
identityRequirementList: identityRequirementList || []
minSalary: minSalary || null,
maxSalary: maxSalary || null,
educationRequirement: educationRequirement || null,
accommodation: accommodation || null,
identityRequirement: identityRequirement || null,
jobTypePid: jobTypePid || null
};
getjobListApi(data).then(res => {
if (res.code == 200) {
......@@ -1043,7 +1080,7 @@ const getListData = () => {
.screen-pop-box {
position: relative;
width: 100%;
max-height: 900rpx;
// max-height: 900rpx;
}
.screen-pop-content {
position: absolute;
......@@ -1058,7 +1095,7 @@ const getListData = () => {
display: flex;
.left{
width: 200rpx;
max-height:900rpx;
// max-height:900rpx;
background: #E8F2FF;
.item{
font-size: 32rpx;
......
<template>
<NavBar :showIcon="true" backgroundBox="#ffffff" :showTitle="true" title="需求登记"></NavBar>
<img @tap="navigateTo('/pages/postionList/demandRegistration/index')" src="@/static/image/postion/modular-one.png" class="img"/>
<img @tap="navigateTo('/pages/postionList/demandRegistration/index')" src="@/static/image/postion/modular-two.png" class="img"/>
<img @tap="navigateTo('/pages/postionList/demandRegistration/index')" src="@/static/image/postion/modular-three.png" class="img"/>
<img @tap="navigateTo('/pages/postionList/demandRegistration/index')" src="@/static/image/postion/modular-four.png" class="img"/>
<img @tap="navigateTo(`/pages/postionList/demandRegistration/index?category=${1}`)" src="@/static/image/postion/modular-one.png" class="img"/>
<img @tap="navigateTo(`/pages/postionList/demandRegistration/index?category=${2}`)" src="@/static/image/postion/modular-two.png" class="img"/>
<img @tap="navigateTo(`/pages/postionList/demandRegistration/index?category=${3}`)" src="@/static/image/postion/modular-three.png" class="img"/>
<img @tap="navigateTo(`/pages/postionList/demandRegistration/index?category=${4}`)" src="@/static/image/postion/modular-four.png" class="img"/>
</template>
<script setup>
......
......@@ -3,12 +3,12 @@
<NavBar :showIcon="true" :showTitle="true" title="职位详情" backgroundBox="#ffffff"></NavBar>
<!--pages/position-details/position-details.wxml-->
<view class="steps-wrap">
<steps v-if="partTimeJobData.jobApplication" :data="partTimeJobData.jobApplication"></steps>
<steps v-if="partTimeJobData.application" :data="partTimeJobData.jobApplication"></steps>
</view>
<!-- 职位详情 -->
<view class="pos-details">
<view class="pos-title">
<text class="text">{{ partTimeJobData.jobName }}</text>
<text class="text">{{ partTimeJobData.name }}</text>
</view>
<view class="salary-wrap">
<view v-if="partTimeJobData">
......@@ -36,23 +36,22 @@
<view class="experience-and-education flex-align-center">
<view class="flex-align-center">
<img src="@/static/image/postion/experience.png" alt="" />
<text>1-3年</text>
<text>{{partTimeJobData.minAgeRequirement}}-{{partTimeJobData.maxAgeRequirement }}</text>
</view>
<view class="flex-align-center">
<img src="@/static/image/postion/education.png" alt="" />
<text>学历不限</text>
<text>{{ partTimeJobData.educationRequirement}}</text>
</view>
</view>
<view class="pos-type flex-between">
<view class="flex-align-center position">
<img src="@/static/image/postion/position.png" alt="" />
<text>{{ partTimeJobData.cityName }}·{{ partTimeJobData.districtName }}</text>
<text>{{ partTimeJobData.cityName }}</text>
</view>
<view class="type">
<text v-if="partTimeJobData.isPartTimeJob == 1">兼职</text>
<text v-else>全职</text>
<text>{{partTimeJobData.workMode}}</text>
<text class="margin-8">|</text>
<text>{{ partTimeJobData.jobTypeText }}</text>
<text>{{ partTimeJobData.jobTypeName }}</text>
</view>
</view>
<view class="cos-welfare" v-if="partTimeJobData.welfareTags">
......@@ -66,9 +65,9 @@
<text class="gradient-title">职位详情</text>
</view>
<view class="pos-int">
<text class="pos-label" v-for="(item, index) in partTimeJobData.benefitsList" :key="index">{{ item }}</text>
<text class="pos-label" v-for="(item, index) in partTimeJobData.benefits" :key="index">{{ item }}</text>
</view>
<view class="pos-duty" :class="{ activeClass: dutyFlag }">{{ partTimeJobData.jobDesc }}</view>
<view class="pos-duty" :class="{ activeClass: dutyFlag }">{{ partTimeJobData.positionDesc }}</view>
<view class="duty-more" @tap="moreClick" v-if="partTimeJobData.jobDesc?.length > 150 && dutyFlag === false">
<text>查看全部</text>
</view>
......@@ -77,8 +76,8 @@
<view class="cos-info margin-top24">
<view
class="flex-align-center"
@click="navigateTo(`/pages/postionList/companyDetails/index?id=${partTimeJobData.company.id}`)"
data-id="{{partTimeJobData.company.id}}"
@click="navigateTo(`/pages/postionList/companyDetails/index?id=${partTimeJobData.companyInfo.id}`)"
data-id="{{partTimeJobData.companyInfo.id}}"
bindtap="bindNavCompany"
>
<view class="cosimage">
......@@ -86,8 +85,8 @@
</view>
<view>
<view class="cos-title">
<text class="cos-name" v-if="partTimeJobData.company?.name != undefined">{{
partTimeJobData.company?.name
<text class="cos-name" v-if="partTimeJobData.companyInfo?.name != undefined">{{
partTimeJobData.companyInfo?.name
}}</text>
<!-- <image
wx:if="{{partTimeJobData.permRecommendType}}"
......@@ -100,18 +99,18 @@
</view>
<view class="cos-position">
<text
>{{ partTimeJobData.company.cityName || "" }} <text class="margin-8"></text> |
<text class="margin-8"></text>{{ partTimeJobData.company.pubJobNum || 0 }}个在招职位</text
>{{ partTimeJobData.companyInfo.location.split('-')[1] || "" }} <text class="margin-8"></text> |
<text class="margin-8"></text>{{ partTimeJobData.companyInfo.jobVacancies || 0 }}个在招职位</text
>
</view>
<!-- <img class="modu-icon" src="@/static/image/temp/test.jpg" /> -->
<view class="arrow modu-icon"></view>
</view>
</view>
<view class="map">
<!-- <view class="map">
<map id="mapId" class="map" :latitude="mapCenter.latitude" :longitude="mapCenter.longitude" :markers="markers">
</map>
</view>
</view> -->
</view>
<!-- 职位推荐 -->
......@@ -162,8 +161,8 @@
</view>
</view>
<!-- 聊工作/投简历Btn -->
<view class="btn" v-if="!partTimeJobData.jobApplication">
<view class="btn-list back-color" v-if="!partTimeJobData.isRegister" @tap="bindDelivery">投简历</view>
<view class="btn" v-if="!partTimeJobData.application">
<view class="btn-list back-color" @tap="bindDelivery">投简历</view>
</view>
<!-- 提示 -->
<view class="warn-wrap">
......@@ -184,6 +183,7 @@
import steps from "@/components/steps/index.vue";
import { ref, reactive } from "vue";
import dayjs from "dayjs";
import { getEnumText} from "@/utils/utils";
import { getJobDetailApi, submitResumeApi } from "@/api/postion";
const partTimeJobData = ref({});
const recommendList = ref([]);
......@@ -214,9 +214,14 @@ const markers = reactive([
}
]);
const getJobDetail = id => {
getJobDetailApi(id).then(({ data }) => {
getJobDetailApi(id).then(async ({ data }) => {
data.id = id;
partTimeJobData.value = data;
partTimeJobData.value = data.position;
partTimeJobData.value.companyInfo = data.companyInfo;
partTimeJobData.value.application = data.application;
partTimeJobData.value.educationRequirement = await getEnumText("EnumEducationRequirement", data.position.educationRequirement);
partTimeJobData.value.workMode = await getEnumText("EnumWorkMode", data.position.workMode);
partTimeJobData.value.benefits = partTimeJobData.value.benefits.split(',')
// 设置地图点
markers[0].latitude = data.locationLatitude;
markers[0].longitude = data.locationLongitude;
......@@ -233,7 +238,7 @@ const bindDelivery = () => {
title: "投递成功",
icon: "none"
});
partTimeJobData.value.jobApplication = res.data;
partTimeJobData.value.application = res.data;
}
});
};
......
......@@ -3,54 +3,54 @@
<NavBar :showIcon="true" :showTitle="true" title="投递反馈" backgroundBox="#ffffff"></NavBar>
<!-- <view v-if="v.status == 2" class="state success"> 待面试 </view>
<view v-if="v.status == 4" class="state warning"> 已拒绝 </view> -->
<view class="card" v-if="postionData.jobApplication?.status == 4">
<view class="card" v-if="postionData.application?.status == 4">
<view class="t1">不合适</view>
<view class="t2">抱歉!经公司慎重考虑,很遗憾你不适合该职位感谢你的投递!</view>
<view class="shadow"></view>
</view>
<view class="card success" v-if="postionData.jobApplication?.status == 2">
<view class="card success" v-if="postionData.application?.status == 2">
<view class="t1">面试邀约</view>
<view class="t2">你好,陈春瑞!通过对你的简历了解,希望能和你面谈,特此发送面试邀约</view>
<view class="t2">你好,{{postionData.application.userName}}!通过对你的简历了解,希望能和你面谈,特此发送面试邀约</view>
<view class="shadow"></view>
</view>
<template v-if="postionData.jobApplication?.status == 2">
<template v-if="postionData.application?.status == 2">
<div class="interview-info">
<div>
<p class="label">面试时间</p>
<p>{{ dayjs(postionData.jobApplication.interviewTime).format("YYYY-MM-DD HH:mm") }}</p>
<p>{{ dayjs(postionData.application.interviewTime).format("YYYY-MM-DD HH:mm") }}</p>
</div>
<div>
<p class="label">面试地点</p>
<p>{{ postionData.jobApplication.address }}</p>
<p>{{ postionData.application.interviewLocation}}</p>
</div>
<div>
<p class="label">联系电话</p>
<p>{{ postionData.jobApplication.contactPerson }}</p>
<p>{{ postionData.application.contactPerson }}</p>
</div>
<div>
<p class="label">联系人</p>
<p>{{ postionData.jobApplication.contactPhone }}</p>
<p>{{ postionData.application.contactPhone }}</p>
</div>
</div>
</template>
<template v-else>
<view class="pos-card">
<view class="pos-name flex-between">
<text class="name">{{ postionData.jobName }}</text>
<view>{{ postionData.minSalary / 1000 }}k-{{ postionData.maxSalary / 1000 }}k/<text>/月</text></view>
<text class="name">{{ postionData.position.name }}</text>
<view>{{ postionData.position.minSalary / 1000 }}k-{{ postionData.position.maxSalary / 1000 }}k/<text>/月</text></view>
</view>
<view class="com-name">{{ postionData.companyName }}</view>
<view class="com-name">{{ postionData.position.companyName }}</view>
<view class="tags">
<text class="item" v-for="v in postionData.benefits?.split(',') || []" :key="v">{{ v }}</text>
<text class="item" v-for="v in postionData.position.benefits?.split(',') || []" :key="v">{{ v }}</text>
</view>
</view>
<view class="pos-detail">
{{ postionData.jobDesc }}
{{ postionData.position.positionDesc }}
</view>
</template>
<view class="steps-wrap">
<steps :data="postionData.jobApplication"></steps>
<steps :data="postionData.application"></steps>
</view>
</div>
</template>
......
......@@ -109,14 +109,14 @@ const educationLevelText = ref("");
/* 获取用户信息 */
const getUserInfo = () => {
getLoginUserApi().then(async res => {
const { avatarPath: _avatarPath, realName: _realName, educationLevel } = res.data;
const { avatarPath: _avatarPath, name: _realName, education } = res.data;
realName.value = _realName;
avatarPath.value = _avatarPath;
/* this.setData({
avatarPath,
realName,
}); */
educationLevelText.value = await getEnumText("EnumEducation", educationLevel);
educationLevelText.value = await getEnumText("EnumEducation", education);
});
getUserResumeApi().then(res => {
const { educationExperience } = res.data;
......
This diff is collapsed.
This diff is collapsed.
......@@ -3,19 +3,22 @@
<div class="page">
<view class="item" v-for="v in list" :key="v.id" @click="jumpToDetail(v)">
<view class="name-salary flex-between">
<text class="name">{{ v.jobName }}</text>
<text class="name">{{ v.positionName }}</text>
<!-- <text class="salary">6k-12k<text>/月</text></text> -->
<text class="salary">{{ v.salary }}</text>
</view>
<view class="com-name">{{ v.companyName }}</view>
<view class="flex-align-center tags">
<text v-for="(benefit, index) in v.benefits?.split(',') || []" :key="index">{{ benefit }}</text>
<view class="bottom-row">
<view class="com-name">{{ v.companyName }}</view>
<!-- <view class="flex-align-center tags">
<text v-for="(benefit, index) in v.benefits?.split(',') || []" :key="index">{{ benefit }}</text>
</view> -->
<view v-if="v.status == 0" class="state success"> 已投递 </view>
<view v-if="v.status == 1" class="state success"> 已查看 </view>
<view v-if="v.status == 2" class="state success"> 待面试 </view>
<view v-if="v.status == 3" class="state success"> 已面试 </view>
<view v-if="v.status == 4" class="state warning"> 已拒绝 </view>
</view>
<view v-if="v.status == 0" class="state success"> 已投递 </view>
<view v-if="v.status == 1" class="state success"> 已查看 </view>
<view v-if="v.status == 2" class="state success"> 待面试 </view>
<view v-if="v.status == 3" class="state success"> 已面试 </view>
<view v-if="v.status == 4" class="state warning"> 已拒绝 </view>
</view>
</div>
</template>
......@@ -35,7 +38,7 @@ onLoad(e => {
});
const jumpToDetail = e => {
uni.navigateTo({
url: "/pages/user/deliveryFeedback/index?id=" + e.jobId
url: "/pages/user/deliveryFeedback/index?id=" + e.positionId
});
};
// "code": "0",
......@@ -49,11 +52,15 @@ const jumpToDetail = e => {
// "code": "4",
// "text": "已拒绝",
const getList = () => {
let api = type == "我的投递" ? getApplicationListApi : getInterviewListApi;
api({
// let api = type == "我的投递" ? getApplicationListApi : getInterviewListApi;
const params = {
pageNo: pageNo++,
pageSize: 10
}).then(res => {
pageSize: 10,
}
if (title.value === "我的面试") {
params.status = 3
}
getApplicationListApi(params).then(res => {
list.push(...res.data);
});
};
......@@ -86,40 +93,46 @@ const getList = () => {
}
}
}
.com-name {
margin-top: 8px;
font-size: 12px;
font-weight: normal;
line-height: 18px;
color: #77818f;
}
.tags {
gap: 7px;
height: 30rpx;
margin-top: 10px;
text {
padding: 2px 4px;
font-size: 10px;
color: #4e5969;
background: #f2f3f5;
.bottom-row{
display: flex;
justify-content: space-between;
margin-top: 20rpx;
.com-name {
margin-top: 8px;
font-size: 12px;
font-weight: normal;
line-height: 18px;
color: #77818f;
}
}
.state {
position: absolute;
right: 16px;
bottom: 24px;
padding: 8px 16px;
font-size: 12px;
font-weight: 600;
line-height: 14px;
&.warning {
color: #f53f3f;
background: #ffece8;
.tags {
gap: 7px;
height: 30rpx;
margin-top: 10px;
text {
padding: 2px 4px;
font-size: 10px;
color: #4e5969;
background: #f2f3f5;
}
}
&.success {
color: #31cbae;
background: rgb(49 203 174 / 10%);
.state {
// position: absolute;
// right: 16px;
// bottom: 24px;
padding: 8px 16px;
font-size: 12px;
font-weight: 600;
line-height: 14px;
&.warning {
color: #f53f3f;
background: #ffece8;
}
&.success {
color: #31cbae;
background: rgb(49 203 174 / 10%);
}
}
}
}
</style>
......@@ -444,8 +444,17 @@ const getData = async () => {
verified.value = 1;
return;
}
userInfo.value = data;
educationText.value = educationOpstion.value[data.educationLevel - 1].text;
userInfo.value = data;
residenceCodes.value = data.residenceCodes
birthCodes.value = data.birthCodes
userInfo.value.identityTypes = data.identityTypes.split(',').map(item => item * 1);
userInfo.value.positionalTitleOne = data.positionalTitle.split('-')[0]
userInfo.value.positionalTitleTwo = data.positionalTitle.split('-')[1]
userInfo.value.professionalCertificatesOne = data.professionalCertificates.split('-')[1]
userInfo.value.professionalCertificatesTwo = data.professionalCertificates.split('-')[1]
value.value = data.residenceCodes.split(',');
value2.value = data.birthCodes.split(',');
educationText.value = educationOpstion.value[data.education - 1].text;
}
};
......@@ -453,7 +462,7 @@ const getData = async () => {
const submit = () => {
console.log(userInfo);
const {citizenId,positionalTitleOne,positionalTitleTwo,professionalCertificatesOne,professionalCertificatesTwo,specialCertificates,major,birthAddress,residenceAddress, avatarPath, name, sex, phone, email, birthday, identityTypes, education, workAge, personalTags } =
userInfo.value;
userInfo.value;
saveUserInfoApi({
residenceCodes: residenceCodes.value,
birthCodes:birthCodes.value,
......@@ -508,6 +517,9 @@ const submit = () => {
font-size: 32rpx;
color: #000;
}
::v-deep .wd-col-picker__value{
font-weight: 600;
}
}
</style>
......@@ -751,7 +763,7 @@ const submit = () => {
height: 48rpx;
}
.placeholder-style {
font-size: 28rpx !important;
font-size: 24rpx !important;
color: #a0afc3 !important;
}
.footer-warning {
......
......@@ -98,11 +98,14 @@
<text class="gradient-title">求职意向</text>
<view class="arrow"></view>
</view>
<view class="postion">{{ resumeData.preferredPosition }}</view>
<view class="salary"
>{{ resumeData.minSalary }}{{ resumeData.minSalary ? "-" : "" }}{{ resumeData.maxSalary
}}{{ resumeData.preferredCityName ? "| " : "" }} {{ resumeData.preferredCityName }}</view
>
<view class="postion">{{ resumeData.positionNames }}</view>
<view class="salary-postion">
<view class="salary"
>{{ resumeData.minSalary }}{{ resumeData.minSalary ? "-" : "" }}{{ resumeData.maxSalary
}}{{ resumeData.districtCode ? " | " : "" }} {{ resumeData.districtCode }}</view
>
<text class="text">{{ resumeData.needAccommodation === 1?'需提供住宿':'不需提供住宿' }}</text>
</view>
</view>
<!-- 工作经历 -->
<view class="experience">
......@@ -256,30 +259,32 @@ const getUserResume = () => {
// console.log(res);
const {
personalAdvantages,
preferredPosition,
positionNames,
positionIds,
positionParentIds,
maxSalary,
minSalary,
preferredProvinceName,
preferredProvinceCode,
preferredCityName,
preferredCityCode,
preferredDistrictName,
preferredDistrictCode,
workExperience,
educationExperience,
preferredPositionId,
currentStatus
currentStatus,
districtCode,
provinceCode,
cityCode,
needAccommodation,
preferredCityName
} = res.data;
resumeData.jobStatusText = await getEnumText("EnumUserJobStatus", currentStatus);
resumeData.preferredCityName = preferredCityName;
resumeData.citySelectedItems = [
{ name: preferredProvinceName, code: preferredProvinceCode },
{ name: preferredCityName, code: preferredCityCode },
{ name: preferredDistrictName, code: preferredDistrictCode }
];
resumeData.citySelectedItems = [provinceCode,cityCode,districtCode];
resumeData.personalAdvantage = personalAdvantages; // 求职状态回
// resumeData.preferredPosition = preferredPosition.split(",").join("|");
// resumeData.preferredPositionId = preferredPositionId.split(",");
resumeData.positionNames = positionNames;
resumeData.positionIds = positionIds.split(",");
resumeData.positionParentIds = positionParentIds.split(",");
resumeData.districtCodeId = districtCode;
getCityNameByCodeApi(districtCode).then(res => {
resumeData.districtCode = res.data.cityName;
})
resumeData.needAccommodation = needAccommodation
resumeData.maxSalary = maxSalary && maxSalary / 1000 + "k";
resumeData.minSalary = minSalary && minSalary / 1000 + "k";
resumeData.workExperience = JSON.parse(workExperience || "[]");
......@@ -498,6 +503,14 @@ const deleteItemTwo = index => {
line-height: 36rpx;
color: #1b2026;
}
.salary-postion{
display: flex;
align-items: center;
justify-content: space-between;
.text{
margin-top: 16rpx;
}
}
}
.experience {
padding: 32rpx;
......
......@@ -84,7 +84,7 @@
<script setup>
import { dictJobTypeApi, getTreeListApi } from "@/api/common";
import { saveJobIntentionApi } from "@/api/user";
import { saveJobIntentionApi,getCityNameByCodeApi } from "@/api/user";
import { ref } from "vue";
import colPicker from "@/components/wd-col-picker22/wd-col-picker.vue";
import _ from "lodash";
......@@ -97,16 +97,19 @@ const salaryText = ref("");
onLoad(options => {
if (options.data) {
const data = JSON.parse(decodeURIComponent(options.data));
console.log("data,", data);
const preferredPositionList = data.preferredPosition.split("|");
const preferredPositionList = data.positionNames.split("|");
mValue.value = preferredPositionList.map((item, index) => {
return {
name: item,
id: data.preferredPositionId[index]
id: data.positionIds[index],
parentId: data.positionParentIds[index]
};
});
accommodation.value = data.needAccommodation;
citySelectedItems = data.citySelectedItems;
cityText.value = citySelectedItems.map(v => v.name).join("-");
getCityNameByCodeApi(citySelectedItems[2]).then(res => {
cityText.value = res.data.provinceName+ "-" + res.data.cityName+ "-" + res.data.districtName;
})
salarySelectedItems = [{ value: data.minSalary.slice(0, -1) * 1000 }, { value: data.maxSalary.slice(0, -1) * 1000 }];
salaryText.value = data.minSalary.slice(0, -1) * 1000 + "元" + "~" + data.maxSalary.slice(0, -1) * 1000 + "元";
console.log("salarySelectedItems", salarySelectedItems);
......@@ -164,7 +167,7 @@ const columnChangeCity = ({ selectedItem, resolve, finish }) => {
};
const handleConfirmCity = ({ selectedItems }) => {
cityText.value = selectedItems.map(v => v.name).join("-");
citySelectedItems = selectedItems;
citySelectedItems = selectedItems.map(item => item.code);
};
/* 薪水 */
const salaryOpstion = ref([]);
......@@ -206,30 +209,17 @@ const handleConfirmSalary = ({ selectedItems }) => {
salarySelectedItems = selectedItems;
};
const submit = () => {
let params = {
maxSalary: 0,
minSalary: 0,
preferredCityCode: "",
preferredCityName: "",
preferredDistrictCode: "",
preferredDistrictName: "",
preferredPosition: "",
preferredProvinceCode: "",
preferredProvinceName: "",
preferredPositionId: "",
needAccommodation:""
};
let params = {};
const [p, c, d] = citySelectedItems;
params.preferredPosition = mValue.value.map(v => v.name).join(",");
params.preferredPositionId = mValue.value.map(v => v.id).join(",");
console.log('mValue.valuemValue.value',mValue.value);
params.positionNames = mValue.value.map(v => v.name).join(",");
params.positionIds = mValue.value.map(v => v.id).join(",");
params.positionParentIds = mValue.value.map(v => v.parentId).join(",");
params.minSalary = salarySelectedItems[0].value;
params.maxSalary = salarySelectedItems[1].value;
params.preferredProvinceCode = p.code;
params.preferredProvinceName = p.name;
params.preferredCityCode = c.code;
params.preferredCityName = c.name;
params.preferredDistrictCode = d.code;
params.preferredDistrictName = d.name;
params.provinceCode = p;
params.cityCode = c;
params.districtCode = d;
params.needAccommodation = accommodation.value * 1;
saveJobIntentionApi(params).then(res => {
console.log(res);
......
......@@ -22,6 +22,9 @@ instance.interceptors.request.use(
// }·
const token = getToken();
config.headers["User-Token"] = token;
uni.showLoading({
title: "加载中..."
})
return config;
},
error => {
......@@ -54,6 +57,7 @@ instance.interceptors.response.use(
}
});
}
uni.hideLoading()
// 在这里可以对响应数据进行预处理
return response.data;
},
......
......@@ -6942,10 +6942,10 @@ which@^2.0.1:
dependencies:
isexe "^2.0.0"
wot-design-uni@^1.3.12:
version "1.3.12"
resolved "https://registry.npmmirror.com/wot-design-uni/-/wot-design-uni-1.3.12.tgz"
integrity sha512-aF4ReRTqLLQ7/JcQQvBZJBivoprX9xrvI0b+xWakis5xDSF7tfz1ndPSCBgPtPdTzIaEG5RAT18x0ueRSUbixQ==
wot-design-uni@^1.3.13:
version "1.3.13"
resolved "https://registry.npmmirror.com/wot-design-uni/-/wot-design-uni-1.3.13.tgz"
integrity sha512-3LHW480eivYAIDsxQr8KxMHCpeoj45XXpbmslLEvSWdPaRBvkXukaMW8z7wjejrMozxPBkQZT52bktCLBT/kOA==
wrap-ansi@^7.0.0:
version "7.0.0"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment