bug

parent 16b95493
......@@ -18,7 +18,7 @@ export const saveJobStatusApi = params => instance.post("/user/resume/saveJobSta
export const saveUserInfoApi = params => instance.post("/c/user/save", params);
// 保存身份证信息
export const saveIdCardApi = params => instance.post("/personal/user/saveIdCard", params);
export const saveIdCardApi = params => instance.post("/c/user/citizen/save", params);
// 保存求职意向
export const saveJobIntentionApi = params => instance.post("/user/resume/saveJobIntention", params);
// 保存工作经历
......@@ -32,6 +32,9 @@ export const getInterviewListApi = params => instance.post("/job/getInterviewLis
//更具code码获取城市名称
export const getCityNameByCodeApi = code => instance.post(`/dict/dictProvinceCityDistrict/find/dist/${code}`);
//根据任意code码获取城市名称
export const getCityNameByCodeApi2 = code => instance.post(`/dict/area/find/${code}`);
// 专业目录
export const getMajorTreeApi = () => instance.post(`/dict/major/tree`);
......
......@@ -12,7 +12,7 @@
</view>
<view class="flex-between">
<text class="company-name">{{ data.companyName }}</text>
<text class="address">{{ data.cityName + "-" + data.street }}</text>
<text class="address" v-show="data.cityName && data.street">{{ data.cityName + "-" + data.street }}</text>
</view>
</view>
</template>
......
......@@ -19,12 +19,14 @@ 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: -1, name: "招聘会岗位报名" }]);
// const typeList = ref([{ id: -1, name: "招聘会岗位查看" }]);
const typeList = ref([]);
getArticleTypesApi(2).then(res => {
typeList.value.push(...res.data);
changeType({id:typeList.value[0].id})
});
onShow(() => {
changeType({ id: "" });
// changeType({ id: -1 });
});
const changeType = type => {
......
......@@ -23,22 +23,21 @@
import NavBar from "@/components/navBar/index.vue";
import { xinhuaMpLogin } from "@/api/user.js";
import { setToken, getToken } from "@/utils/token";
import { removeToken } from "@/utils/token";
const res = ref("");
onLoad(() => {
// const token = getToken();
// if (token) {
// uni.switchTab({
// url: "/pages/postionList/index"
// });
// }
removeToken();
uni.removeStorageSync("userInfo");
});
const login = () => {
xma.xh.getUserProfile({
range: ["ACCOUNT", "MOBILE"],
range: ["ACCOUNT", "MOBILE",'CITIZEN'],
success(info) {
xinhuaMpLogin({ encryptedData: info.data.uMobile, userType: "consumer" })
console.log('infoinfoinfo',info);
xinhuaMpLogin({ encryptedData: info.data.uMobile, userType: "consumer",name: info.data.uName,citizenId:info.data.uIdCardNo })
.then(data => {
if(data.code !== 200) return
res.value = data;
console.log("datadatadata", data);
setToken(data.data);
......
......@@ -18,7 +18,8 @@ const login = async () => {
const a = await getSmsCode({ username: phone.value });
testLogin({
username: phone.value,
code: "000000"
code: "000000",
userType: "consumer",
}).then(res => {
console.log(res);
if (res.code === 200) {
......
<template>
<NavBar :showIcon="true" backgroundBox="#ffffff" :showTitle="true" title="职业指导"></NavBar>
<NavBar :showIcon="true" backgroundBox="#ffffff" :showTitle="true" title="需求登记"></NavBar>
<div class="page">
<scroll-view scroll-y="{{true}}" @scrolltolower="getData">
<view class="item" v-for="(item, index) in list" :key="item.id">
......
......@@ -2,12 +2,7 @@
<view style="height: 100%; padding-bottom: 40px">
<NavBar :showIcon="false" backgroundBox="#ffffff">
<view class="search-form">
<input
v-model="keyword"
placeholder="请输入要查询的内容"
placeholder-class="log-input-p"
type="text"
/>
<input v-model="keyword" placeholder="可查询公司、岗位名称等" placeholder-class="log-input-p" type="text" />
<wd-icon class="search-icon" name="search" @tap="confirm"></wd-icon>
</view>
</NavBar>
......@@ -37,6 +32,7 @@
</view> -->
<view class="filter-other flex-between">
<wd-col-picker
title="请选择工作地点"
label="选择地址"
v-model="valueCity"
:columns="columnsCity"
......@@ -50,6 +46,7 @@
</wd-col-picker>
<view class="filter-opstion">
<wd-col-picker
title="请选择专业"
v-model="majorValue"
:columns="majorOpstion"
value-key="name"
......@@ -58,7 +55,7 @@
@confirm="handleConfirmMajor"
use-default-slot
>
<view class="item">{{ majorText || "不限" }} <view class="arrow"></view> </view>
<view class="item">{{ majorText || "专业" }} <view class="arrow"></view> </view>
</wd-col-picker>
</view>
<view class="item" :class="{ active: maskType == 'other' }" @tap="openMask('other')"
......@@ -66,128 +63,70 @@
></view>
</view>
</view>
<!-- 蒙版弹框 -->
<view :style="{ top: contentHeight }" @touchmove.stop.prevent class="pop-mask" v-if="maskType" @click="maskType = null">
<!-- <NavBar :showIcon="false" backgroundBox="#ffffff" :showTitle="true" title="筛选" /> -->
<view class="select-nav" :style="{ top: '0px' }" catchtouchmove="{{true}}" @tap.stop>
<view class="recommend">推荐</view>
<view class="select-item">
<!-- <text :class="{ active: maskType == 'address' }" @tap="openMask('address')">贵州省</text> -->
<text :class="{ active: maskType == 'other' }" @tap="openMask('other')">更多筛选</text>
</view>
</view>
<!-- 区域弹窗 -->
<!-- <view
@click.stop=""
catchtap="preventD"
class="screen-pop address screen-pop-padding {{regionPop? 'screen-pop-tion':''}} "
v-if="maskType === 'address'"
>
<view class="region-pop-content">
<view class="region-pop-left">
<scroll-view scroll-y style="height: 652rpx">
<view
class="region-list"
:class="{ 'region-list-color': cityId == item.code }"
v-for="item in cityData"
:key="item.code"
@tap="bindCityList(item.code, item.name)"
>{{ item.name }}</view
>
</scroll-view>
<!-- 更多筛选弹窗 -->
<view class="screen-pop-box-new" @touchmove.stop.prevent :style="{paddingTop:contentHeight}" v-if="maskType === 'other'">
<scroll-view class="content-two" scroll-y="true">
<view class="right">
<view class="title">薪酬</view>
<view class="list">
<view
class="item"
:class="{ 'light-two': activeOne === index }"
v-for="(item, index) in salary"
:key="index"
@tap="choiceDetails(0,item, index)"
>{{ item.text }}</view
>
</view>
<view class="region-pop-right">
<scroll-view scroll-y style="height: 652rpx">
<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 class="title">学历</view>
<view class="list">
<view
class="item"
:class="{ 'light-two': activeTwo === index }"
v-for="(item, index) in educationData"
:key="item.code"
@tap="choiceDetails(1,item, index)"
>{{ item.text }}</view
>
</view>
</view>
</view> -->
<!-- 筛选弹窗 -->
<view
@click.stop=""
catchtap="preventD"
class="screen-pop other screen-pop-padding {{screenPop? 'screen-pop-tion':''}}"
v-if="maskType === 'other'"
>
<view class="screen-pop-box">
<view class="content-two">
<view class="left">
<view class="item" @tap="choice(0)" :class="{ light: active === 0 }">薪酬</view>
<view class="item" @tap="choice(1)" :class="{ light: active === 1 }">学历</view>
<view class="item" @tap="choice(2)" :class="{ light: active === 2 }">食宿条件</view>
<view class="item" @tap="choice(3)" :class="{ light: active === 3 }">身份</view>
<view class="item" @tap="choice(4)" :class="{ light: active === 4 }">职位类型</view>
</view>
<view class="right">
<view class="title">{{ active === 0 ? "薪酬要求" : selectionTitle }}</view>
<view v-if="active === 0" class="list">
<view
class="item"
:class="{ 'light-two': activeOne === index }"
v-for="(item, index) in salary"
:key="index"
@tap="choiceDetails(item, index)"
>{{ item.text }}</view
>
</view>
<view v-if="active === 1" class="list">
<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 == 2" class="list">
<view
class="item"
:class="{ 'light-two': activeThree === index }"
v-for="(item, index) in dataList"
:key="item.code"
@tap="choiceDetails(item, index)"
>{{ item.text }}</view
>
</view>
<view v-if="active == 3" class="list">
<view
class="item"
:class="{ 'light-two': activeFour === 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': activeFive === index }"
v-for="(item, index) in dataList"
:key="item.id"
@tap="choiceDetails(item, index)"
>{{ item.name }}</view
>
</view>
</view>
<view class="title">食宿条件</view>
<view class="list">
<view
class="item"
:class="{ 'light-two': activeThree === index }"
v-for="(item, index) in eatAndLiveData"
:key="item.code"
@tap="choiceDetails(2,item, index)"
>{{ item.text }}</view
>
</view>
<view class="title">人员类别</view>
<view class="list">
<view
class="item"
:class="{ 'light-two': activeFour === index }"
v-for="(item, index) in identityData"
:key="item.code"
@tap="choiceDetails(3,item, index)"
>{{ item.text }}{{ item.text }}</view
>
</view>
<view class="content-two-bottom">
<button @tap="resetParams">重置</button>
<button @tap="confirmParameters">确认</button>
<view class="title">职位类型</view>
<view class="list">
<view
class="item"
:class="{ 'light-two': activeFive === index }"
v-for="(item, index) in positionType"
:key="item.id"
@tap="choiceDetails(4,item, index)"
>{{ item.name }}</view
>
</view>
</view>
</scroll-view>
<view class="content-two-bottom">
<button @tap="resetParams">重置</button>
<button @tap="confirmParameters">确认</button>
</view>
</view>
<!-- 全职职位列表 -->
......@@ -387,7 +326,7 @@ const openMask = type => {
};
// 城市筛选
const valueCity = ref([]);
const cityText = ref("全国");
const cityText = ref("工作地点");
const columnsCity = ref([]);
const getColumnsCity = () => {
getTreeListApi().then(res => {
......@@ -596,12 +535,11 @@ const choice = index => {
break;
default:
selectionTitle.value = "职位类型";
console.log(positionType.value);
dataList.value = positionType.value;
}
};
const choiceDetails = (data, index) => {
switch (active.value) {
const choiceDetails = (active,data, index) => {
switch (active) {
case 0:
activeOne.value = index * 1;
minSalary = data.min;
......@@ -658,14 +596,14 @@ const resetParams = () => {
identityRequirement = null;
jobTypePid = null;
pageNo = 1;
positionListData.value = [];
positionListData.value = [];
getListData();
};
// 职位搜索
const confirm = e => {
pageNo = 1;
positionListData.value = [];
positionListData.value = [];
getListData();
};
// 职位筛选搜索
......@@ -949,8 +887,8 @@ const getListData = () => {
.pop-mask {
position: fixed;
inset: 0;
z-index: 100;
background-color: #00000066;
z-index: 10000;
background-color: #ffffff;
.address {
.region-pop-content {
text-align: center;
......@@ -1330,68 +1268,81 @@ const getListData = () => {
.screen-pop-padding {
padding: 0;
}
.content-two {
display: flex;
.left {
width: 200rpx;
// max-height:900rpx;
background: #e8f2ff;
.item {
font-size: 32rpx;
.screen-pop-box-new {
position: fixed;
inset: 0;
background: #ffffff;
z-index: 999999;
.content-two {
display: flex;
height: 80vh;
.left {
width: 200rpx;
text-align: center;
height: 100rpx;
line-height: 100rpx;
}
.light {
background: #ffffff;
color: #1f86ff;
}
}
.right {
width: calc(100% - 200rpx);
padding: 32rpx 24rpx;
.title {
font-size: 24rpx;
font-weight: 500;
color: #1b2026;
}
.list {
margin-top: 24rpx;
display: flex;
flex-wrap: wrap;
align-items: center;
// max-height:900rpx;
background: #e8f2ff;
.item {
width: 236rpx;
height: 60rpx;
line-height: 60rpx;
font-size: 32rpx;
width: 200rpx;
text-align: center;
border-radius: 8rpx;
background: #f0f4fa;
border: 1rpx solid #f0f4fa;
font-size: 24rpx;
color: #1b2026;
margin-right: 11rpx;
margin-bottom: 16rpx;
height: 100rpx;
line-height: 100rpx;
}
.light-two {
.light {
background: #ffffff;
border: 1rpx solid #1f86ff;
color: #1f86ff;
}
}
.right {
width: 100%;
padding: 32rpx 24rpx;
.title {
font-size: 32rpx;
font-weight: blod;
color: #1b2026;
}
.list {
margin: 16rpx 0 40rpx;
display: flex;
flex-wrap: wrap;
align-items: center;
.item {
padding: 0 14rpx;
min-width: 195rpx;
height: 60rpx;
line-height: 60rpx;
text-align: center;
border-radius: 8rpx;
background: #f0f4fa;
border: 1rpx solid #f0f4fa;
font-size: 24rpx;
color: #1b2026;
margin-right: 11rpx;
margin-bottom: 16rpx;
}
.light-two {
background: #ffffff;
border: 1rpx solid #1f86ff;
color: #1f86ff;
}
}
}
}
}
.content-two-bottom {
padding: 16rpx;
display: flex;
button {
flex-shrink: 0;
background: #1f86ff;
color: #ffffff;
font-size: 24rpx;
.content-two-bottom {
position: absolute;
bottom: calc(30rpx + env(safe-area-inset-bottom));
display: flex;
justify-content:space-around;
width: 100%;
button {
width: 300rpx;
flex-shrink: 0;
background: #1f86ff;
color: #ffffff;
font-size: 28rpx;
}
}
}
::-webkit-scrollbar {
width: 0;
height: 0;
......
......@@ -9,7 +9,7 @@
<view class="pos-details">
<view class="pos-title">
<text class="text">{{ partTimeJobData.name }}</text>
<text class="text">({{ partTimeJobData.recruitmentNumber}}人)</text>
<text class="text">({{ partTimeJobData.recruitmentNumber }}人)</text>
</view>
<view class="salary-wrap">
<view v-if="partTimeJobData">
......@@ -20,7 +20,15 @@
<view class="salary" v-else>
<view v-if="partTimeJobData.minSalary > 0">
<text class="number"
>{{ partTimeJobData.minSalary<1000?partTimeJobData.minSalary:partTimeJobData.minSalary / 1000 +'k'}}-{{ partTimeJobData.maxSalary<1000?partTimeJobData.maxSalary:partTimeJobData.maxSalary / 1000 +'k' }}</text
>{{
partTimeJobData.minSalary < 1000
? partTimeJobData.minSalary
: partTimeJobData.minSalary / 1000 + "k"
}}-{{
partTimeJobData.maxSalary < 1000
? partTimeJobData.maxSalary
: partTimeJobData.maxSalary / 1000 + "k"
}}</text
>
<text class="unit">/{{ partTimeJobData.company }}</text>
</view>
......@@ -37,16 +45,18 @@
<view class="experience-and-education flex-align-center">
<view class="flex-align-center">
<img src="@/static/image/postion/experience.png" alt="" />
<text v-if="partTimeJobData.minAgeRequirement>0">{{partTimeJobData.minAgeRequirement}}-{{partTimeJobData.maxAgeRequirement }}</text>
<text v-if="partTimeJobData.minAgeRequirement > 0"
>{{ partTimeJobData.minAgeRequirement }}-{{ partTimeJobData.maxAgeRequirement }}</text
>
<text v-else>不限</text>
</view>
<view class="flex-align-center">
<img src="@/static/image/postion/education.png" alt="" />
<text>{{ partTimeJobData.educationRequirement}}</text>
<text>{{ partTimeJobData.educationRequirement }}</text>
</view>
<view class="flex-align-center">
<img src="@/static/image/postion/people.png" alt="" />
<text>{{ partTimeJobData.identityRequirement}}</text>
<text>{{ partTimeJobData.identityRequirement }}</text>
</view>
</view>
<view class="pos-type flex-between">
......@@ -55,15 +65,19 @@
<text>{{ partTimeJobData.cityName }}</text>
</view>
<view class="type">
<text>{{partTimeJobData.workMode}}</text>
<text>{{ partTimeJobData.workMode }}</text>
<text class="margin-8">|</text>
<text>{{ partTimeJobData.jobTypeName }}</text>
</view>
</view>
<view class="label">
<view class="label-item" v-if="partTimeJobData.positionalTitle">{{partTimeJobData.positionalTitle}}</view>
<view class="label-item" v-if="partTimeJobData.professionalCertificates">{{partTimeJobData.professionalCertificates}}</view>
<view class="label-item" v-if="partTimeJobData.specialCertificates">{{partTimeJobData.specialCertificates}}</view>
<view class="label-item" v-if="partTimeJobData.positionalTitle">{{ partTimeJobData.positionalTitle }}</view>
<view class="label-item" v-if="partTimeJobData.professionalCertificates">{{
partTimeJobData.professionalCertificates
}}</view>
<view class="label-item" v-if="partTimeJobData.specialCertificates">{{
partTimeJobData.specialCertificates
}}</view>
</view>
<view class="cos-welfare" v-if="partTimeJobData.welfareTags">
<view class="welfare-list" v-for="(wel, i) in partTimeJobData.welfareTags" :key="i">{{ wel }}</view>
......@@ -111,7 +125,7 @@
</view>
<view class="cos-position">
<text
>{{ partTimeJobData.companyInfo.location.split('-')[1] || "" }} <text class="margin-8"></text> |
>{{ partTimeJobData.companyInfo.location.split("-")[1] || "" }} <text class="margin-8"></text> |
<text class="margin-8"></text>{{ partTimeJobData.companyInfo.jobVacancies || 0 }}个在招职位</text
>
</view>
......@@ -128,7 +142,7 @@
<!-- 职位推荐 -->
<view class="pos-recommend margin-top24">
<view class="title">
<text class="gradient-title">优选职位</text>
<text class="gradient-title">温馨提示</text>
</view>
<!-- 职位列表 -->
<view
......@@ -174,18 +188,30 @@
</view>
<!-- 聊工作/投简历Btn -->
<view class="btn" v-if="!partTimeJobData.application">
<view class="btn-list back-color" @tap="bindDelivery">投简历</view>
<view class="btn-list back-color" @tap="bindDelivery">投简历</view>
</view>
<!-- 提示 -->
<view class="warn-wrap">
<view class="warn">
<view class="title flex-align-center">
<!-- <image src="{{ossImgPrefix}}/warn.png" /> -->
乐业安全提示
<text class="content">观山湖人社提醒您:</text>
<text class="content">求职请记牢“九要九不要”</text>
</view>
<view class="content">
<!-- <view class="content">
未标明收费的职位不会收取任何费用,若商家要求缴纳费用或押金,<text>请一定提高警惕并第一时间向我们举报!</text>
</view>
</view> -->
<text class="content">一 要查看机构或企业是否有相关证照和资质,不要盲目信从;</text>
<text class="content"
>
要坚决抵制收取押金、报名费、风险金、扣押证件等违法行为,谨慎研判收取培训等费用的合理性,不要轻易交费;</text
>
<text class="content">三 要看承诺薪资是否与社会同等岗位大体一致,不要轻信高薪</text>
<text class="content">四 要通过小红书、抖音等社交平台了解机构或企业的口碑,不要慌不择路;</text>
<text class="content">五 要详细询问公司的背景及应聘岗位的薪酬、内容、时长等信息,不要不清不楚;</text>
<text class="content">六 要在达成就业意向后及时签订规范的劳动合同或就业协议等书面文书,不要满不在乎;</text>
<text class="content">七 要仔细阅读并完全理解所签文书特别是涉及费用、服务内容、违约责任等条款,不要任人摆布;</text>
<text class="content">八 要注意保护个人信息,同时收集保留损害自身权益的证据,不要口说无凭;</text>
<text class="content">九 要及时向当地人社部门投诉、反映、举报侵害就业权益的行为,不要畏手畏脚。</text>
</view>
</view>
</div>
......@@ -195,11 +221,14 @@
import steps from "@/components/steps/index.vue";
import { ref, reactive } from "vue";
import dayjs from "dayjs";
import { getEnumText} from "@/utils/utils";
import { getEnumText } from "@/utils/utils";
import { getJobDetailApi, submitResumeApi } from "@/api/postion";
import { getLoginUserApi } from "@/api/user";
const partTimeJobData = ref({});
const recommendList = ref([]);
const stepViewData = ref(null);
const userActive = ref(null)
let dutyFlag = ref(false);
const mapCenter = reactive({
latitude: 26.63,
......@@ -228,15 +257,18 @@ const markers = reactive([
const getJobDetail = id => {
getJobDetailApi(id).then(async ({ data }) => {
data.id = id;
data.position.positionDesc = data.position.positionDesc.replace(/\n/g, '<br>')
data.position.positionDesc = data.position.positionDesc.replace(/\n/g, "<br>");
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.educationRequirement = await getEnumText(
"EnumEducationRequirement",
data.position.educationRequirement
);
partTimeJobData.value.identityRequirement = await getEnumText("EnumIdentityType", data.position.identityRequirement);
partTimeJobData.value.workMode = await getEnumText("EnumWorkMode", data.position.workMode);
partTimeJobData.value.company = await getEnumText("EnumSettlementType", data.position.settlementType)
partTimeJobData.value.benefits = partTimeJobData.value.benefits.split(',')
partTimeJobData.value.company = await getEnumText("EnumSettlementType", data.position.settlementType);
partTimeJobData.value.benefits = partTimeJobData.value.benefits.split(",");
// 设置地图点
markers[0].latitude = data.locationLatitude;
markers[0].longitude = data.locationLongitude;
......@@ -247,6 +279,13 @@ const getJobDetail = id => {
};
/* 投递简历 */
const bindDelivery = () => {
if (userActive.value === 0) {
uni.showToast({
title: "请先完善个人信息!",
icon: "none"
});
return
}
submitResumeApi(partTimeJobData.value.id).then(res => {
if (res.code === 200) {
uni.showToast({
......@@ -269,6 +308,9 @@ const navigateTo = url => {
onLoad(({ id }) => {
getJobDetail(id);
getLoginUserApi().then(res => {
userActive.value = res.data.status
});
});
</script>
......@@ -737,16 +779,16 @@ onLoad(({ id }) => {
color: #1b2026;
}
}
.label{
margin-top:16rpx ;
.label {
margin-top: 16rpx;
display: flex;
.label-item{
background: #F2F3F5;
.label-item {
background: #f2f3f5;
padding: 8rpx 16rpx;
color: #4E5969;
color: #4e5969;
font-size: 24rpx;
margin-right: 16rpx;
border-radius:5rpx ;
border-radius: 5rpx;
}
}
.salary-wrap {
......@@ -934,18 +976,24 @@ onLoad(({ id }) => {
.warn {
padding: 34rpx;
background: #fff2ed;
display: flex;
flex-direction: column;
img {
width: 25rpx;
height: 28rpx;
margin-right: 14rpx;
}
.title {
font-size: 28rpx;
font-weight: 600;
color: #73331c;
display: flex;
flex-direction: column;
text {
font-size: 28rpx;
font-weight: 600;
color: #73331c;
}
}
.content {
margin-top: 16rpx;
margin: 12rpx 0;
font-size: 22rpx;
font-weight: 600;
line-height: 36rpx;
......
......@@ -4,8 +4,8 @@
<!-- <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.application?.status == 4">
<view class="t1">不合适</view>
<view class="t2">很遗憾,您没有得到本岗位的面试邀约感谢您的投递!</view>
<view class="t1">很遗憾</view>
<view class="t2">您没有得到本岗位的面试邀约,感谢您的投递!</view>
<view class="shadow"></view>
</view>
<view class="card success" v-if="postionData.application?.status == 2">
......@@ -13,6 +13,20 @@
<view class="t2">恭喜您获得本岗位的面试邀约,注意保持电话畅通或可以主动联系我们</view>
<view class="shadow"></view>
</view>
<view class="pos-card">
<view class="pos-name flex-between">
<text class="name">{{ postionData.position.name }}</text>
<view v-if="postionData.position.minSalary>0">{{ postionData.position.minSalary<1000?postionData.position.minSalary:postionData.position.minSalary / 1000 +'k'}}-{{ postionData.position.maxSalary<1000?postionData.position.maxSalary:postionData.position.maxSalary / 1000 +'k' }}<text>/{{ postionData.company }}</text></view>
<view v-else class="salary2">面议</view>
</view>
<view class="com-name">{{ postionData.position.companyName }}</view>
<view class="tags">
<text class="item" v-for="v in postionData.position.benefits?.split(',') || []" :key="v">{{ v }}</text>
</view>
</view>
<view class="pos-detail">
{{ postionData.position.positionDesc }}
</view>
<template v-if="postionData.application?.status == 2">
<div class="interview-info">
......@@ -34,22 +48,7 @@
</div>
</div>
</template>
<template v-else>
<view class="pos-card">
<view class="pos-name flex-between">
<text class="name">{{ postionData.position.name }}</text>
<view v-if="postionData.position.minSalary>0">{{ postionData.position.minSalary<1000?postionData.position.minSalary:postionData.position.minSalary / 1000 +'k'}}-{{ postionData.position.maxSalary<1000?postionData.position.maxSalary:postionData.position.maxSalary / 1000 +'k' }}<text>/{{ postionData.company }}</text></view>
<view v-else class="salary2">面议</view>
</view>
<view class="com-name">{{ postionData.position.companyName }}</view>
<view class="tags">
<text class="item" v-for="v in postionData.position.benefits?.split(',') || []" :key="v">{{ v }}</text>
</view>
</view>
<view class="pos-detail">
{{ postionData.position.positionDesc }}
</view>
</template>
<view class="steps-wrap">
<steps :data="postionData.application"></steps>
</view>
......@@ -120,7 +119,7 @@ onLoad(({ id }) => {
flex-direction: column;
gap: 32rpx;
padding: 0 32rpx;
margin-top: 168rpx;
margin-top: 100rpx;
div {
display: flex;
p {
......
......@@ -34,9 +34,7 @@
placeholderW
safeAreaInsetBottom
>
<wd-button :round="false" class="foot-btn" :disabled="params.questionDesc == '' || params.imagesPath == ''"
>投诉建议</wd-button
>
<wd-button :round="false" class="foot-btn" :disabled="params.questionDesc == ''">投诉建议</wd-button>
</wd-tabbar>
</view>
</template>
......@@ -56,7 +54,7 @@ const params = reactive({
onLoad(option => {
if (option.id) {
id.value = option.id;
feedbackByIdFn(option.id);
feedbackByIdFn(option.id);
}
});
const feedbackByIdFn = id => {
......@@ -92,9 +90,8 @@ const chooseImage = () => {
};
const feedbackAddFn = () => {
xma.showLoading();
if (params.questionDesc == "" || params.imagesPath == "") {
} else {
if (params.questionDesc !== "") {
xma.showLoading();
feedbackAdd(params).then(res => {
if (res.code == 200) {
xma.hideLoading();
......
......@@ -3,15 +3,14 @@
<div class="user-container">
<view class="bg"></view>
<!-- 用户信息 -->
<view class="user-info flex-align-center">
<view class="user-info flex-align-center" @click="navigateTo('/pages/user/resume/essentialInformation/index')">
<view class="avatar">
<!-- <image wx:if="{{avatarPath}}" src="{{imgPrefix}}/{{avatarPath}}" mode="" />
<image wx:else="" class="userinfo-avatar" src="{{ossImgPrefix}}/user/default-avatar.png"></image> -->
<img v-if="avatarPath" :src="evn.APP_IMAGE_BASE_API + avatarPath" />
<img v-else src="@/static/image/user/default-avatar.png" alt="" />
<!-- <img v-if="avatarPath" :src="evn.APP_IMAGE_BASE_API + avatarPath" />
<img v-else src="@/static/image/user/default-avatar.png" alt="" /> -->
<img src="@/static/image/user/default-avatar.png" alt="" />
</view>
<view class="name" @click="navigateTo('/pages/user/resume/essentialInformation/index')">
<text >{{ realName || "未实名" }}</text>
<view class="name">
<text >{{ realName || "名" }}</text>
<img src="@/static/image/user/write.png" />
</view>
<view class="education">{{ schoolName || '暂未写入' }} | {{ educationLevelText || "无" }}</view>
......@@ -95,19 +94,19 @@ const navList = [
url: "/pages/login/index",
text: "退出登录"
},
{
icon: new URL("@/static/image/user/loginout.png", import.meta.url).href,
url: "/pages/test",
text: "测试页面"
},
{
icon: new URL("@/static/image/user/loginout.png", import.meta.url).href,
url: "/pages/login/test",
fn: () => {
removeToken();
},
text: "退出登录(去测试登录)"
}
// {
// icon: new URL("@/static/image/user/loginout.png", import.meta.url).href,
// url: "/pages/test",
// text: "测试页面"
// },
// {
// icon: new URL("@/static/image/user/loginout.png", import.meta.url).href,
// url: "/pages/login/test",
// fn: () => {
// removeToken();
// },
// text: "退出登录(去测试登录)"
// }
];
/* 个人信息 */
const realName = ref("");
......@@ -118,17 +117,17 @@ const educationLevelText = ref("");
const getUserInfo = () => {
getLoginUserApi().then(async res => {
const { avatarPath: _avatarPath, name: _realName, education } = res.data;
realName.value = _realName;
avatarPath.value = _avatarPath;
realName.value = _realName || null;
avatarPath.value = _avatarPath || null;
/* this.setData({
avatarPath,
realName,
}); */
educationLevelText.value = await getEnumText("EnumEducation", education);
educationLevelText.value = await getEnumText("EnumEducation", education) || null;
});
getUserResumeApi().then(res => {
const { educationExperience } = res.data;
schoolName.value = JSON.parse(educationExperience)[0].schoolName;
schoolName.value = JSON.parse(educationExperience)[0].schoolName || null;
});
};
</script>
......
<template>
<NavBar :showIcon="true" :showTitle="true" title="教育经历" backgroundBox="#ffffff"></NavBar>
<view class="item">
<view class="label">学校名称</view>
<view class="label"><span style="color: red;">*</span>学校名称</view>
<input
v-model="params.schoolName"
placeholder-style="font-size: 24rpx;color: #77818f;"
......@@ -10,12 +10,12 @@
/>
</view>
<view class="item">
<view class="label">专业名称</view>
<view class="label"><span style="color: red;">*</span>专业名称</view>
<input v-model="params.major" placeholder-style="font-size: 24rpx;color: #77818f;" placeholder="请输入专业名称" border="{{ false }}" />
</view>
<view class="item">
<view class="label">开始时间</view>
<view class="label"><span style="color: red;">*</span>开始时间</view>
<wd-datetime-picker
:default-value="new Date().getTime()"
:maxDate="new Date().getTime()"
......@@ -31,7 +31,7 @@
</wd-datetime-picker>
</view>
<view class="item">
<view class="label">结束时间</view>
<view class="label"><span style="color: red;">*</span>结束时间</view>
<wd-datetime-picker
:default-value="new Date().getTime()"
:minDate="params.startDate"
......@@ -90,7 +90,7 @@ const submit = () => {
}
if (!really) {
uni.showToast({
title: `请完善表单!`,
title: `请完善相关信息`,
icon: "none"
});
return;
......
<template>
<div class="essential-information">
<NavBar backgroundBox="#ffffff" :showIcon="true" :showTitle="true" title="基本信息"></NavBar>
<view
<!-- <view
class="real-name-authentication flex-between"
v-if="verified == 0"
@tap="toIdcard"
......@@ -15,25 +15,28 @@
</view>
</view>
<view class="btn">去认证</view>
</view>
</view> -->
<!-- 个人资料 -->
<view class="my-info">
<view class="my-info-list flex-row-b-c pd-b-38 upload-avatar" @tap="bindUploadImg">
<view class="my-info-list flex-row-b-c pd-b-38 upload-avatar">
<view class="my-info-title avatar-label">
<text>头像</text>
<text>个人照片</text>
<!-- <text style="font-size: 20rpx;color: #77818f;"> (点击上传)</text> -->
</view>
<img class="avatar" v-if="userInfo.avatarPath" :src="evn.APP_IMAGE_BASE_API + userInfo.avatarPath" />
<img class="avatar" v-else src="@/static/image/user/default-avatar.png" />
<!-- <img class="avatar" v-if="userInfo.avatarPath" :src="evn.APP_IMAGE_BASE_API + userInfo.avatarPath" />
<img class="avatar" v-else src="@/static/image/user/default-avatar.png" /> -->
<img class="avatar" src="@/static/image/user/default-avatar.png" />
</view>
<view class="my-info-list flex-column">
<view class="my-info-title label">
<text>姓名</text>
<span style="color: red;">*</span><text>姓名</text>
</view>
<input class="my-info-form" v-model="userInfo.name" placeholder="请输入" placeholder-class="placeholder-style" />
</view>
<!-- 性别 -->
<view class="my-info-list pd-b-38">
<view class="my-info-title label">
<span style="color: red;">*</span>
<text>性别</text>
</view>
<view class="gender radios">
......@@ -46,6 +49,7 @@
<!-- 出生年月 -->
<view class="my-info-list flex-between">
<view class="my-info-title label">
<span style="color: red;">*</span>
<text>出生年月</text>
</view>
<wd-datetime-picker
......@@ -68,7 +72,8 @@
<!-- 身份 -->
<view class="my-info-list pd-b-38">
<view class="my-info-title label">
<text>身份</text>
<span style="color: red;">*</span>
<text>人员类别</text>
</view>
<wd-checkbox-group v-model="userInfo.identityTypes" shape="dot" inline>
<wd-checkbox :modelValue="v.code" :key="v.code" v-for="v in identityTypeOpstion">{{ v.text }}</wd-checkbox>
......@@ -77,6 +82,7 @@
<!-- 户籍地* -->
<view class="my-info-list flex-between">
<view class="my-info-title label">
<span style="color: red;">*</span>
<text>户籍地</text>
</view>
<wd-col-picker
......@@ -98,6 +104,7 @@
<!-- 户籍详细地址 -->
<view class="my-info-list flex-column">
<view class="my-info-title label">
<!-- <span style="color: red;">*</span> -->
<text>户籍详细地址</text>
</view>
<input
......@@ -110,6 +117,7 @@
<!-- 常住地* -->
<view class="my-info-list flex-between">
<view class="my-info-title label">
<span style="color: red;">*</span>
<text>常住地</text>
</view>
<wd-col-picker
......@@ -131,6 +139,7 @@
<!-- 常住详细地址 -->
<view class="my-info-list flex-column">
<view class="my-info-title label">
<!-- <span style="color: red;">*</span> -->
<text>常住详细地址</text>
</view>
<input
......@@ -144,6 +153,7 @@
<!-- 学历 -->
<view class="my-info-list flex-column">
<view class="my-info-title label">
<span style="color: red;">*</span>
<text>学历</text>
</view>
<wd-picker
......@@ -168,7 +178,8 @@
<!-- 专业 -->
<view class="my-info-list flex-column">
<view class="my-info-title label">
<text>专业(选填)</text>
<span style="color: red;">*</span>
<text>专业</text>
</view>
<!-- <input
class="my-info-form"
......@@ -198,7 +209,7 @@
</view>
<!-- 专业技术职称 -->
<view class="two-rows">
<text class="title">专业技术职称(选填)</text>
<text class="title">专业技术职称</text>
<view class="bottom-row">
<view class="bottom-one">
<input
......@@ -206,6 +217,7 @@
v-model="userInfo.positionalTitleOne"
placeholder="请填写专业技术职称"
placeholder-class="placeholder-style"
@input="changePositionTitleOne"
/>
<img class="write-icon" src="@/static/image/user/write.png" />
</view>
......@@ -231,7 +243,7 @@
</view>
<!-- 职业资格/技能等级证书 -->
<view class="two-rows">
<text class="title">职业资格/技能等级证书(选填)</text>
<text class="title">职业资格/技能等级证书</text>
<view class="bottom-row">
<view class="bottom-one">
<input
......@@ -239,6 +251,7 @@
v-model="userInfo.professionalCertificatesOne"
placeholder="请填写职业资格"
placeholder-class="placeholder-style"
@input="changeProfessionalCertificatesOne"
/>
<img class="write-icon" src="@/static/image/user/write.png" />
</view>
......@@ -266,7 +279,7 @@
<!-- 特种作业证 -->
<view class="my-info-list flex-column">
<view class="my-info-title label">
<text>特种作业证(选填)</text>
<text>特种作业证</text>
</view>
<input
class="my-info-form"
......@@ -278,6 +291,8 @@
<!-- 工作年限 -->
<view class="my-info-list flex-column" v-if="userInfo.identityCode != 0">
<view class="my-info-title label">
<span style="color: red;">*</span>
<!-- <text>{{identityCode == 0 ? '参加实习时间' : '参加工作时间'}}</text> -->
<text>工作年限</text>
</view>
......@@ -293,6 +308,7 @@
<!-- 身份证号 -->
<view class="my-info-list flex-column">
<view class="my-info-title label">
<span style="color: red;">*</span>
<text>身份证号</text>
</view>
<input
......@@ -306,6 +322,7 @@
<!-- 手机 -->
<view class="my-info-list flex-column">
<view class="my-info-title label">
<span style="color: red;">*</span>
<text>手机</text>
</view>
<input
......@@ -382,7 +399,9 @@ const userInfo = ref({
positionalTitleTwo: null,
professionalCertificatesOne: null,
professionalCertificatesTwo: null,
major:null
major:null,
birthAddress: '',
residenceAddress:''
});
onMounted(() => {
getEumDataFn();
......@@ -550,10 +569,35 @@ const getEumDataFn = () => {
const changeEducationLevel = e => {
educationText.value = e.selectedItems.text;
};
const changePositionTitleOne = e => {
if (!e.detail.value) {
userInfo.value.positionalTitleTwo = null
}
};
const changeProfessionalCertificatesOne = e => {
if (!e.detail.value) {
userInfo.value.professionalCertificatesTwo = null
}
};
const changeEducationLevel2 = e => {
if (!userInfo.value.positionalTitleOne) {
uni.showToast({
title: "请先填写专业技术职称!",
icon: "none"
});
return
}
userInfo.value.positionalTitleTwo = e.selectedItems.text;
};
const changeEducationLevel3 = e => {
if (!userInfo.value.professionalCertificatesOne) {
uni.showToast({
title: "请先填写职业资格或技能等级证书!",
icon: "none"
});
return
}
userInfo.value.professionalCertificatesTwo = e.selectedItems.text;
};
......@@ -566,11 +610,11 @@ const getData = async () => {
return;
}
userInfo.value = data;
const residence = data.residenceAddress.split("-");
const birth = data.birthAddress.split("-");
const residence = data.residenceAddress?.split("-");
const birth = data.birthAddress?.split("-");
residenceCodes.value = data.residenceCodes;
birthCodes.value = data.birthCodes;
userInfo.value.identityTypes = data.identityTypes.split(",").map(item => item * 1);
userInfo.value.identityTypes = data.identityTypes?.split(",").map(item => item * 1);
if (!data.major) {
userInfo.value.major = "不限";
}
......@@ -582,10 +626,10 @@ const getData = async () => {
userInfo.value.professionalCertificatesOne = data.professionalCertificates.split("-")[0];
userInfo.value.professionalCertificatesTwo = data.professionalCertificates.split("-")[1];
}
provinceCityDistrict.value = residence[0];
provinceCityDistrict2.value = birth[0];
userInfo.value.residenceAddress = residence[1];
userInfo.value.birthAddress = birth[1];
provinceCityDistrict.value = residence?residence[0]:'';
provinceCityDistrict2.value = birth?birth[0]:'';
userInfo.value.residenceAddress = residence?residence[1]:'';
userInfo.value.birthAddress = birth?birth[1]:'';
educationText.value = educationOpstion.value[data.education - 1].text;
}
};
......@@ -773,6 +817,7 @@ const submit = () => {
font-size: 28rpx;
font-weight: 600;
color: #213452;
margin-left: 20rpx;
}
.my-info .post-detail-data {
overflow: hidden;
......
......@@ -2,21 +2,22 @@
<NavBar :showIcon="true" backgroundBox="#ffffff" :showTitle="true" title="我的简历"></NavBar>
<div class="resume-page">
<!-- 个人信息 -->
<view class="user-info flex-between">
<view class="user-info flex-between" @click="navigateTo('/pages/user/resume/essentialInformation/index')">
<view>
<view class="name"
>{{ resumeData.realName || "未实名" }}
<!-- <img src="@/static/image/icon/edit.png" /> -->
<img src="@/static/image/icon/edit.png" />
</view>
<view class="other"
>{{ resumeData.workExperienceYear }}年经验·{{ resumeData.age }}岁·{{ resumeData.educationLevel }}</view
>
</view>
<image v-if="resumeData.avatarPath" class="avatar" :src="evn.APP_IMAGE_BASE_API + resumeData.avatarPath" mode="" />
<image v-else class="avatar" src="@/static/image/user/default-avatar.png" mode="" />
<!-- <image v-if="resumeData.avatarPath" class="avatar" :src="evn.APP_IMAGE_BASE_API + resumeData.avatarPath" mode="" /> -->
<!-- <image v-else class="avatar" src="@/static/image/user/default-avatar.png" mode="" /> -->
<image class="avatar" src="@/static/image/user/default-avatar.png" mode="" />
</view>
<!-- 个人信息 -->
<view class="basics" v-if="userInfoActive">
<view class="basics" v-if="userInfoActive.workAge">
<text class="gradient-title">个人信息</text>
<view class="basics-top">
<view class="item" >
......@@ -34,7 +35,7 @@
</view>
</view>
<view class="information">
<text class="label">身份</text>
<text class="label">人员类别</text>
<text class="value">{{resumeData.identityTypes}}</text>
</view>
<view class="information">
......@@ -103,7 +104,10 @@
<!-- 教育经历 -->
<view class="experience">
<view class="flex-between">
<text class="gradient-title">教育经历</text>
<view>
<text class="gradient-title">教育经历</text>
<span style="font-size: 22rpx;color: #77818f;margin-left: 16rpx;">(点击+号可添加多条)</span>
</view>
<wd-icon
name="add"
size="24rpx"
......@@ -141,7 +145,10 @@
<!-- 工作经历 -->
<view class="experience">
<view class="flex-between">
<text class="gradient-title">工作经历</text>
<view>
<text class="gradient-title">工作经历</text>
<span style="font-size: 22rpx;color: #77818f;margin-left: 16rpx;">(点击+号可添加多条)</span>
</view>
<wd-icon
name="add"
size="24rpx"
......@@ -338,7 +345,7 @@ const getOpstion = async () => {
};
const toPage = (index) => {
if (!userInfoActive.value) {
if (!userInfoActive.value.workAge) {
uni.showToast({
title: "请先完善个人基本信息",
icon: "none"
......@@ -368,7 +375,7 @@ const toPage = (index) => {
}
const changeJobStatus = async e => {
if (!userInfoActive.value) {
if (!userInfoActive.value.workAge) {
uni.showToast({
title: "请先完善个人基本信息",
icon: "none"
......
......@@ -22,7 +22,7 @@
>
<view class="form-item">
<view class="form-info">
<view class="label">选择岗位</view>
<view class="label"><span style="color: red">*</span>选择岗位</view>
</view>
<div>{{ mValue.map(v => v.name).join("|") }}</div>
......@@ -42,7 +42,7 @@
>
<view class="form-item">
<view class="form-info">
<view class="label">工作地点</view>
<view class="label"><span style="color: red">*</span>工作地点</view>
</view>
<div>{{ cityText }}</div>
......@@ -50,7 +50,7 @@
</view>
</wd-col-picker>
<!-- 薪资要求 -->
<wd-col-picker
<!-- <wd-col-picker
label="期望职位"
v-model="salaryValue"
:columns="salaryOpstion"
......@@ -65,9 +65,33 @@
<div>{{ salaryText }}</div>
<view class="arrow"></view>
</view>
</wd-col-picker>
</wd-col-picker> -->
<view class="form-item" @click="onOpen">
<view class="form-info">
<view class="label"><span style="color: red">*</span>薪资要求</view>
</view>
<div>{{ salaryText }}</div>
<view class="arrow"></view>
</view>
<wd-popup
v-model="show"
position="bottom"
custom-style="height:40%;border-radius: 20rpx;z-index:999;"
@close="handleClose"
>
<view class="title-box"
><view></view>
<view class="title">薪资要求</view>
<wd-icon @click="handleClose" name="close" size="30rpx"></wd-icon>
</view>
<wd-picker-view @change="handleConfirm2" use-default-slot :columns="columns2" v-model="value2"></wd-picker-view>
<view style="display: flex; justify-content: center; width: 100%; margin-top: 30rpx"
><wd-button style="width: 80%" @click="confirmSalary" block :round="false">确定</wd-button></view
>
</wd-popup>
<view class="my-info-list pd-b-38">
<view class="my-info-title label">
<span style="color: red">*</span>
<text>是否需要提供住宿</text>
</view>
<!-- <wd-radio-group v-model="accommodation" shape="dot" inline>
......@@ -75,15 +99,16 @@
<wd-radio :value="0" ></wd-radio >
</wd-radio-group> -->
<wd-radio-group v-model="accommodation3.active" shape="dot" inline>
<wd-radio v-for="(item) in accommodation3" :key="item.code" :value="item.code" >{{item.text}}</wd-radio >
<wd-radio v-for="item in accommodation3" :key="item.code" :value="item.code">{{ item.text }}</wd-radio>
</wd-radio-group>
</view>
<view class="my-info-list pd-b-38">
<view class="my-info-title label">
<span style="color: red">*</span>
<text>工作类型</text>
</view>
<wd-radio-group v-model="accommodation2.active" shape="dot" inline>
<wd-radio v-for="(item) in accommodation2" :key="item.code" :value="item.code" >{{item.text}}</wd-radio >
<wd-radio v-for="item in accommodation2" :key="item.code" :value="item.code">{{ item.text }}</wd-radio>
</wd-radio-group>
</view>
</view>
......@@ -95,7 +120,7 @@
<script setup>
import { dictJobTypeApi, getTreeListApi } from "@/api/common";
import { saveJobIntentionApi,getCityNameByCodeApi } from "@/api/user";
import { saveJobIntentionApi, getCityNameByCodeApi, getCityNameByCodeApi2 } from "@/api/user";
import { ref } from "vue";
import colPicker from "@/components/wd-col-picker22/wd-col-picker.vue";
import { getEnumText, getEumData } from "@/utils/utils";
......@@ -108,12 +133,12 @@ const salaryText = ref("");
onLoad(async options => {
// 获取工作类型
await getEumDataFn()
await getEumDataFn();
// 住宿
await getEumDataFn2()
await getEumDataFn2();
if (options.data) {
const data = JSON.parse(decodeURIComponent(options.data));
console.log('datadata',data);
console.log("datadata", data);
const preferredPositionList = data.positionNames.split("|");
mValue.value = preferredPositionList.map((item, index) => {
return {
......@@ -122,32 +147,47 @@ onLoad(async options => {
parentId: data.positionParentIds[index]
};
});
accommodation3.value.active = data.needAccommodation.toString();
accommodation2.value.active = data.workMode.toString();
citySelectedItems = data.citySelectedItems;
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 }];
const code = citySelectedItems[2]
? citySelectedItems[2]
: citySelectedItems[1]
? citySelectedItems[1]
: citySelectedItems[0];
getCityNameByCodeApi2(code).then(res => {
if (!res.data) {
cityText.value = "全国";
return;
}
const { provinceName, cityName, districtName } = res.data;
cityText.value = districtName
? `${provinceName}-${cityName}-${districtName}`
: cityName
? `${provinceName}-${cityName}`
: provinceName;
});
// 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);
minSalary = data.minSalary.slice(0, -1) * 1000;
maxSalary = data.maxSalary.slice(0, -1) * 1000;
console.log("datadata", data);
}
});
// 获取工作类型
const getEumDataFn = async () => {
const data = await getEumData("EnumWorkMode")
accommodation2.value = data
accommodation2.value.active = ''
}
const data = await getEumData("EnumWorkMode");
accommodation2.value = data;
accommodation2.value.active = "";
};
// 是否提供住宿
const getEumDataFn2 = async () => {
const data = await getEumData("EnumAccommodation")
accommodation3.value = data
accommodation3.value.active = ''
}
const data = await getEumData("EnumAccommodation");
accommodation3.value = data;
accommodation3.value.active = "";
};
const handleDelete = index => {
mValue.value.splice(index, 1);
......@@ -189,7 +229,28 @@ const cityText = ref("");
let citySelectedItems = [];
getTreeListApi().then(res => {
cityOpstion.value.push(res.data);
console.log(cityOpstion);
cityOpstion.value[0].forEach(item => {
item.children.unshift({
name: "不限",
code: null,
children: null
});
item.children.forEach(item2 => {
if (item2.children) {
item2.children.unshift({
name: "不限",
code: null,
children: null
});
}
});
});
cityOpstion.value[0].unshift({
name: "全国",
code: null,
children: null
});
console.log("cityOpstion", cityOpstion.value[0]);
});
const columnChangeCity = ({ selectedItem, resolve, finish }) => {
if (selectedItem.children) {
......@@ -202,61 +263,125 @@ const handleConfirmCity = ({ selectedItems }) => {
cityText.value = selectedItems.map(v => v.name).join("-");
citySelectedItems = selectedItems.map(item => item.code);
};
/* 薪水 */
const salaryOpstion = ref([]);
const salaryValue = ref([]);
const accommodation = ref(1);
const accommodation2 = ref([]);
const accommodation3 = ref([]);
let salarySelectedItems = [];
const initSalaryOpstion = () => {
let temp = [];
for (let i = 1; i < 50; i++) {
temp.push({
value: i * 1000,
label: i * 1000 + "元",
next: true
const show = ref(false);
const columns2 = ref([]);
const value2 = ref([]);
let minSalary = null;
let maxSalary = null;
let satisfy = true;
function onOpen() {
// if (my.value) return;
show.value = true;
}
function handleClose() {
show.value = false;
}
const confirmSalary = () => {
if (!satisfy) {
xma.showToast({
title: "最高薪资必须大于最低薪资!",
icon: "none"
});
minSalary = null;
maxSalary = null;
return;
}
salaryOpstion.value.push(temp);
show.value = false;
};
initSalaryOpstion();
const columnChangeSalary = ({ selectedItem, resolve, finish }) => {
let temp = [];
if (selectedItem.next) {
// resolve(selectedItem.children);
console.log(selectedItem);
for (let i = 1; i < 50; i++) {
temp.push({
value: i * 1000 + selectedItem.value,
label: i * 1000 + selectedItem.value + "元",
next: false
});
resolve(temp);
}
} else {
finish();
const handleConfirm2 = ({ value, selectedItem }) => {
minSalary = value[0].slice(0, -1) * 1;
maxSalary = value[1].slice(0, -1) * 1;
if (minSalary >= maxSalary) {
satisfy = false;
return;
}
satisfy = true;
salaryText.value = value[0] + "~" + value[1];
// my.value = false;
// if (pinias.formData.settlementType === 1) {
// salaryText.value = value.join("~");
// } else {
// salaryText.value = value.map(num => `${num / multiple}k`).join("~");
// }
// const [min, max] = value;
// if (max) {
// pinias.setFormDataKey("maxSalary", max);
// pinias.setFormDataKey("minSalary", min);
// pinias.setFormDataKey("negotiableSalary", 0);
// } else {
// pinias.setFormDataKey("maxSalary", 0);
// pinias.setFormDataKey("minSalary", 0);
// pinias.setFormDataKey("negotiableSalary", 1);
// }
};
const handleConfirmSalary = ({ selectedItems }) => {
console.log(selectedItems);
salaryText.value = selectedItems.map(v => v.label).join("~");
salarySelectedItems = selectedItems;
};
function generateArray() {
return Array.from({ length: 50 }, (_, index) => `${(index + 1) * 1000}元`);
}
columns2.value.push(generateArray());
columns2.value.push(generateArray());
/* 薪水 */
// const salaryOpstion = ref([]);
// const salaryValue = ref([]);
const accommodation = ref(1);
const accommodation2 = ref([]);
const accommodation3 = ref([]);
// let salarySelectedItems = [];
// const initSalaryOpstion = () => {
// let temp = [];
// for (let i = 1; i < 50; i++) {
// temp.push({
// value: i * 1000,
// label: i * 1000 + "元",
// next: true
// });
// }
// salaryOpstion.value.push(temp);
// };
// initSalaryOpstion();
// const columnChangeSalary = ({ selectedItem, resolve, finish }) => {
// let temp = [];
// if (selectedItem.next) {
// // resolve(selectedItem.children);
// console.log(selectedItem);
// for (let i = 1; i < 50; i++) {
// temp.push({
// value: i * 1000 + selectedItem.value,
// label: i * 1000 + selectedItem.value + "元",
// next: false
// });
// resolve(temp);
// }
// } else {
// finish();
// }
// };
// const handleConfirmSalary = ({ selectedItems }) => {
// console.log(selectedItems);
// salaryText.value = selectedItems.map(v => v.label).join("~");
// salarySelectedItems = selectedItems;
// };
const submit = () => {
let params = {};
const [p, c, d] = citySelectedItems;
console.log('mValue.valuemValue.value',mValue.value);
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.provinceCode = p;
params.cityCode = c;
params.districtCode = d;
params.minSalary = minSalary || null;
params.maxSalary = maxSalary || null;
params.provinceCode = p || null;
params.cityCode = c || null;
params.districtCode = d || null;
params.needAccommodation = accommodation3.value.active;
params.workMode = accommodation2.value.active;
console.log("params", params);
saveJobIntentionApi(params).then(res => {
console.log(res);
if (res.code == 200) {
......@@ -280,81 +405,89 @@ const submit = () => {
padding: 0 32rpx;
background-color: #ffffff;
}
.title-box {
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 32rpx;
margin: 30rpx;
}
.my-info-list {
position: relative;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
padding: 32rpx 0;
padding-top: 48rpx;
padding-right: 5rpx;
position: relative;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
padding: 32rpx 0;
padding-top: 48rpx;
padding-right: 5rpx;
/* height: 96rpx;
/* height: 96rpx;
line-height: 96rpx; */
overflow: hidden;
background: #ffffff;
border-bottom: 1rpx solid #e9e9e9;
overflow: hidden;
background: #ffffff;
border-bottom: 1rpx solid #e9e9e9;
/* picker {
/* picker {
flex: 1;
} */
.wd-radio-group{
text-align: end;
}
.label {
flex: 0 0 200rpx;
margin: 0;
font-size: 24rpx;
font-weight: 500;
line-height: 36rpx;
color: #77818f;
}
.placeholder-style {
font-size: 28rpx;
font-weight: normal;
line-height: 36rpx;
color: #77818f;
}
.my-info-form {
flex: 1;
padding: 0;
}
.radios {
font-size: 28rpx;
line-height: 36rpx;
color: #1b2026;
.radios-item {
display: flex;
align-items: center;
margin-right: 48rpx;
.wd-radio-group {
text-align: end;
}
.label {
flex: 0 0 200rpx;
margin: 0;
font-size: 24rpx;
font-weight: 500;
line-height: 36rpx;
color: #77818f;
}
.placeholder-style {
font-size: 28rpx;
font-weight: normal;
line-height: 36rpx;
color: #77818f;
}
.my-info-form {
flex: 1;
padding: 0;
}
.radios {
font-size: 28rpx;
line-height: 36rpx;
color: #1b2026;
.radios-item {
display: flex;
align-items: center;
margin-right: 48rpx;
.inner {
box-sizing: border-box;
width: 32rpx;
height: 32rpx;
margin-right: 16rpx;
border: 2rpx solid #77818f;
border-radius: 50%;
}
&.active {
.inner {
box-sizing: border-box;
width: 32rpx;
height: 32rpx;
margin-right: 16rpx;
border: 2rpx solid #77818f;
border-radius: 50%;
}
&.active {
.inner {
display: flex;
align-items: center;
justify-content: center;
border-color: #1f86ff;
&::after {
display: block;
width: 16rpx;
height: 16rpx;
content: "";
background-color: #1f86ff;
border-radius: 50%;
}
display: flex;
align-items: center;
justify-content: center;
border-color: #1f86ff;
&::after {
display: block;
width: 16rpx;
height: 16rpx;
content: "";
background-color: #1f86ff;
border-radius: 50%;
}
}
}
}
}
}
.container .header {
padding: 30rpx 0;
}
......
......@@ -81,7 +81,7 @@ const submit = () => {
}
if (!release) {
uni.showToast({
title: "请完善信息",
title: "请完善相关信息",
icon: "none"
});
return;
......
......@@ -9,14 +9,14 @@
<!-- 单位名称 -->
<view class="form-item">
<view class="form-info">
<view class="label">单位名称</view>
<view class="label"><span style="color: red;">*</span>单位名称</view>
<input type="text" v-model="params.companyName" placeholder="请输入" placeholder-class="placeholder" />
</view>
</view>
<!-- 在职时间 -->
<view class="form-item" bindtap="goToSelectJobType">
<view class="form-info">
<view class="label">在职时间</view>
<view class="label"><span style="color: red;">*</span>在职时间</view>
<view class="time-wrapper flex-r-c mt20">
<wd-datetime-picker
:default-value="new Date().getTime()"
......@@ -53,7 +53,7 @@
>
<view class="form-item">
<view class="form-info">
<view class="label">职位类型</view>
<view class="label"><span style="color: red;">*</span>职位类型</view>
<view :class="['cont', 'mt20', !jobTypeText ? 'placeholder-style' : '']">{{
jobTypeText || "请选择"
}}</view>
......@@ -64,7 +64,7 @@
<!-- 工作内容 -->
<view class="form-item">
<view class="form-info">
<view class="label">工作内容</view>
<view class="label"><span style="color: red;">*</span>工作内容</view>
<textarea class="input-textarea" :maxlength="500" cursor-spacing="500" v-model="params.content" placeholder="请输入" placeholder-class="placeholder"/>
</view>
</view>
......@@ -153,7 +153,7 @@ const save = () => {
}
if (!really) {
uni.showToast({
title: `请完善表单!`,
title: `请完善相关信息`,
icon: "none"
});
return;
......
import axios from "axios";
import { getToken } from "./token";
const baseURL = "https://lygsh-api.wjzpgz.com/";
// const baseURL = "http://192.168.11.48:8080/";
// const baseURL = "http://192.168.11.82:8080/";
// 创建一个 axios 实例
const instance = axios.create({
baseURL, // 设置基础 URL
......@@ -66,8 +66,8 @@ instance.interceptors.response.use(
content: '请等待审核,无需重复提交',
success: function (confirm) {
if (confirm.confirm) {
xma.navigateTo({
url: '/pages/postionList/appeal/index'
xma.reLaunch({
url: '/pages/login/index'
})
}
......@@ -89,6 +89,17 @@ instance.interceptors.response.use(
}
});
}
} else if (code === 14) {
uni.showModal({
title: '提示',
content: '您的账号已被禁用',
success: function (confirm) {
if (confirm.confirm) {
// console.log('已禁用');
}
}
})
}
uni.hideLoading()
// 在这里可以对响应数据进行预处理
......
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