parent d8849108
......@@ -4,7 +4,7 @@ import instance from "@/utils/request";
export const testLogin = params => instance.post("/user/smsLogin", params);
export const getSmsCode = params => instance.postForm("/user/getSmsCode", params);
// 新华登录
export const xinhuaMpLogin = params => instance.post("/user/appUser/xinhua/mpLogin", params);
export const xinhuaMpLogin = params => instance.post("/user/xinhua/mpLogin", params);
// 获取用户简历
export const getUserResumeApi = () => instance.post("/user/resume/info");
// 获取等用户信息
......
......@@ -4,7 +4,7 @@
<div class="message-list">
<scroll-view :scroll-y="true" @scrolltolower="getList">
<view class="system">
<view class="item flex-between" v-for="(v, i) in list" :key="i" @tap="toDetail(v.id)">
<view class="item flex-between" v-for="(v, i) in list" :key="i" @tap="toDetail(v)">
<img src="@/static/image/user/default-avatar.png" alt="" />
<view class="content">
<view class="name-date flex-between">
......@@ -64,10 +64,16 @@ const getList = () => {
});
};
const toDetail = id => {
uni.navigateTo({
url: `/pages/user/feedbackDetails/index?id=${id}`
});
const toDetail = data => {
if (data.type == 1) {
uni.navigateTo({
url: `/pages/user/deliveryFeedback/index?id=${data.targetId}`
});
} else {
uni.navigateTo({
url: `/pages/user/feedbackDetails/index?id=${data.targetId}`
});
}
};
onReachBottom(() => {
pageNo++;
......
......@@ -100,13 +100,19 @@
<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(item,index)">{{item.text}}</view>
<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!==0 && active!==4" class="list">
<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':activeTwo===index}" v-for="(item,index) in dataList" :key="item.id" @tap="choiceDetails(item,index)">{{item.name}}</view>
<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>
......@@ -168,7 +174,11 @@ let contentHeight = ref(null);
let showDoubt = ref(false);
let showInvalid = ref(false);
let active = ref(0);
let activeOne = ref(-1);
let activeTwo = ref(-1);
let activeThree = ref(-1);
let activeFour = ref(-1);
let activeFive = ref(-1);
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(() => {
......@@ -413,28 +423,34 @@ const choice = (index) => {
}
}
const choiceDetails = (data, index) => {
activeTwo.value = index*1
pageNo = 1;
positionListData.value = [];
switch (active.value) {
case 0:
activeOne.value = index*1
minSalary = data.min;
maxSalary = data.max;
getListData();
break;
case 1:
activeTwo.value = index * 1
educationRequirement = data.code;
if(data.code == '0') educationRequirement = null
getListData();
break;
case 2:
activeThree.value = index*1
accommodation = data.code;
getListData();
break;
case 3:
activeFour.value = index*1
identityRequirement = data.code;
if(data.code == '0') identityRequirement = null
getListData();
break;
default:
activeFive.value = index*1
jobTypePid = data.id;
getListData();
}
......
......@@ -67,10 +67,11 @@
<view class="pos-int">
<text class="pos-label" v-for="(item, index) in partTimeJobData.benefits" :key="index">{{ item }}</text>
</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">
<!-- <view class="pos-duty" :class="{ activeClass: dutyFlag }">{{ partTimeJobData.positionDesc }}</view> -->
<rich-text class="pos-duty" :nodes="partTimeJobData.positionDesc"></rich-text>
<!-- <view class="duty-more" @tap="moreClick" v-if="partTimeJobData.positionDesc?.length > 125 && dutyFlag === false">
<text>查看全部</text>
</view>
</view> -->
</view>
<!-- 公司信息 -->
<view class="cos-info margin-top24">
......@@ -216,6 +217,7 @@ const markers = reactive([
const getJobDetail = id => {
getJobDetailApi(id).then(async ({ data }) => {
data.id = id;
data.position.positionDesc = data.position.positionDesc.replace(/\n/g, '<br>')
partTimeJobData.value = data.position;
partTimeJobData.value.companyInfo = data.companyInfo;
partTimeJobData.value.application = data.application;
......@@ -786,8 +788,8 @@ onLoad(({ id }) => {
color: #1b2026;
letter-spacing: 0;
word-break: break-all;
-webkit-line-clamp: 5;
-webkit-box-orient: vertical;
// -webkit-line-clamp: 5;
// -webkit-box-orient: vertical;
}
}
.cos-info {
......
......@@ -22,7 +22,7 @@
</view>
</view>
<view class="tip" v-if="!id">上传图片(可上传0-3张图片)</view>
<view class="msg">
<view class="msg" v-if="id">
<view class="title">平台回复</view>
<view class="hf">{{ detail.replyMessage || "暂无回复" }}</view>
</view>
......@@ -54,8 +54,10 @@ const params = reactive({
imagesPath: ""
});
onLoad(option => {
id.value = option.id;
feedbackByIdFn(option.id);
if (option.id) {
id.value = option.id;
feedbackByIdFn(option.id);
}
});
const feedbackByIdFn = id => {
feedbackById(id).then(feedback => {
......
......@@ -4,14 +4,14 @@
<view class="label">学校名称</view>
<input
v-model="params.schoolName"
placeholder-style="font-size: 24rpx;"
placeholder="请输入用户名"
placeholder-style="font-size: 24rpx;color: #77818f;"
placeholder="请输入学校名称"
border="{{ false }}"
/>
</view>
<view class="item">
<view class="label">专业名称</view>
<input v-model="params.major" placeholder-style="font-size: 24rpx;" placeholder="请输入用户名" border="{{ false }}" />
<input v-model="params.major" placeholder-style="font-size: 24rpx;color: #77818f;" placeholder="请输入专业名称" border="{{ false }}" />
</view>
<view class="item">
......@@ -42,7 +42,7 @@
class="my-datetime-picker"
>
<view :class="`inner ${params.endDate ? '' : 'placeholder'}`">
{{ format(params.endDate) || "结束时间" }}
{{ format(params.endDate) || "选择结束时间" }}
</view>
</wd-datetime-picker>
</view>
......
......@@ -80,7 +80,26 @@
</wd-checkbox-group>
</view>
<!-- 户籍地* -->
<wd-col-picker custom-class="col-picker" label="户籍地" v-model="value" :columns="area" :column-change="columnChange" @confirm="handleConfirm"></wd-col-picker>
<view class="my-info-list flex-between">
<view class="my-info-title label">
<text>户籍地</text>
</view>
<wd-col-picker
v-model="value"
:columns="area"
:column-change="columnChange"
@confirm="handleConfirm"
use-default-slot
style="flex: 1"
>
<div style="flex: 1" class="flex-between">
<view :class="['my-info-form', !provinceCityDistrict ? 'placeholder-style' : '']">
{{ provinceCityDistrict ? provinceCityDistrict : "选择户籍地" }}</view
>
<view class="arrow"></view>
</div>
</wd-col-picker>
</view>
<!-- 户籍详细地址 -->
<view class="my-info-list flex-column">
<view class="my-info-title label">
......@@ -94,7 +113,26 @@
/>
</view>
<!-- 常驻地* -->
<wd-col-picker custom-class="col-picker" label="常驻地" v-model="value2" :columns="area" :column-change="columnChange" @confirm="handleConfirm2"></wd-col-picker>
<view class="my-info-list flex-between">
<view class="my-info-title label">
<text>常驻地</text>
</view>
<wd-col-picker
v-model="value2"
:columns="area"
:column-change="columnChange2"
@confirm="handleConfirm2"
use-default-slot
style="flex: 1"
>
<div style="flex: 1" class="flex-between">
<view :class="['my-info-form', !provinceCityDistrict2 ? 'placeholder-style' : '']">
{{ provinceCityDistrict2 ? provinceCityDistrict2 : "选择常住地" }}</view
>
<view class="arrow"></view>
</div>
</wd-col-picker>
</view>
<!-- 常驻详细地址 -->
<view class="my-info-list flex-column">
<view class="my-info-title label">
......@@ -332,8 +370,33 @@ onMounted(() => {
getData();
});
const columnChange = ({ selectedItem, resolve, finish }) => {
const areaData = findChildrenByCode(colPickerData, selectedItem.value)
// 户籍地
const provinceCityDistrict = ref("")
const provinceCityDistrictArray = []
const columnChange = ({ selectedItem, index, resolve, finish }) => {
provinceCityDistrictArray.splice(index,1,selectedItem.label)
const areaData = findChildrenByCode(colPickerData, selectedItem.value)
if (areaData && areaData.length) {
resolve(
areaData.map((item) => {
return {
value: item.value,
label: item.text
}
})
)
} else {
finish()
provinceCityDistrict.value = provinceCityDistrictArray.join('')
}
}
// 常住地
const provinceCityDistrict2 = ref("")
const provinceCityDistrictArray2 = []
const columnChange2 = ({ selectedItem, index, resolve, finish }) => {
provinceCityDistrictArray2.splice(index,1,selectedItem.label)
const areaData = findChildrenByCode(colPickerData, selectedItem.value)
if (areaData && areaData.length) {
resolve(
areaData.map((item) => {
......@@ -341,15 +404,17 @@ const columnChange = ({ selectedItem, resolve, finish }) => {
value: item.value,
label: item.text
}
})
)
} else {
finish()
})
)
} else {
finish()
provinceCityDistrict2.value = provinceCityDistrictArray2.join('')
}
}
let residenceCodes = ref('');
function handleConfirm({ value }) {
console.log(value)
residenceCodes.value = value.join()
}
......@@ -445,6 +510,8 @@ const getData = async () => {
return;
}
userInfo.value = data;
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);
......@@ -452,8 +519,10 @@ const getData = async () => {
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(',');
provinceCityDistrict.value = residence[0]
provinceCityDistrict2.value = birth[0]
userInfo.value.residenceAddress = residence[1]
userInfo.value.birthAddress = birth[1]
educationText.value = educationOpstion.value[data.education - 1].text;
}
};
......@@ -466,8 +535,8 @@ const submit = () => {
saveUserInfoApi({
residenceCodes: residenceCodes.value,
birthCodes:birthCodes.value,
residenceAddress,
birthAddress,
residenceAddress: provinceCityDistrict.value + "-" + residenceAddress,
birthAddress:provinceCityDistrict2.value + "-" + birthAddress ,
major,
positionalTitle: positionalTitleOne + '-' + positionalTitleTwo,
professionalCertificates: professionalCertificatesOne + '-' + professionalCertificatesTwo,
......
......@@ -2,7 +2,7 @@
<NavBar :showIcon="true" backgroundBox="#ffffff" :showTitle="true" title="我的简历"></NavBar>
<div class="resume-page">
<!-- 个人信息 -->
<view class="user-info flex-between" @click="navigateTo('/pages/user/resume/essentialInformation/index')">
<view class="user-info flex-between" @click="navigateTo('/pages/user/resume/essentialInformation/index')">
<view>
<view class="name"
>{{ resumeData.realName || "未实名" }}
......@@ -16,7 +16,7 @@
<image v-else class="avatar" src="@/static/image/user/default-avatar.png" mode="" />
</view>
<!-- 个人信息 -->
<view class="basics">
<view class="basics" v-if="userInfoActive">
<text class="gradient-title">个人信息</text>
<view class="basics-top">
<view class="item" >
......@@ -55,11 +55,11 @@
</view>
<view class="information">
<text class="label">户籍地</text>
<text class="value">{{resumeData.residenceCodes}}</text>
<text class="value">{{resumeData.residenceAddress}}</text>
</view>
<view class="information">
<text class="label">常住地</text>
<text class="value">{{resumeData.birthCodes}}</text>
<text class="value">{{resumeData.birthAddress}}</text>
</view>
</view>
<!-- 求职状态 -->
......@@ -75,12 +75,12 @@
>
<view class="flex-between">
<text>{{ resumeData.jobStatusText }}</text>
<view class="arrow" bind:tap="onOpenStateSelect"></view>
<view class="arrow"></view>
</view>
</wd-picker>
</view>
<!-- 个人优势 -->
<view class="advantage" @click="navigateTo(`/pages/user/resume/introduce/index?data=${resumeData.personalAdvantage}`)">
<view class="advantage" @click="toPage(0)">
<view class="flex-between">
<text class="gradient-title">个人优势</text>
<view class="arrow" bind:tap="navigateTo"></view>
......@@ -92,7 +92,7 @@
<!-- 求职意向 -->
<view
class="intention"
@click="navigateTo(`/pages/user/resume/jobIntention/index?data=${encodeURIComponent(JSON.stringify(resumeData))}`)"
@click="toPage(1)"
>
<view class="flex-between">
<text class="gradient-title">求职意向</text>
......@@ -104,7 +104,7 @@
>{{ resumeData.minSalary }}{{ resumeData.minSalary ? "-" : "" }}{{ resumeData.maxSalary
}}{{ resumeData.districtCode ? " | " : "" }} {{ resumeData.districtCode }}</view
>
<text class="text">{{ resumeData.needAccommodation === 1?'需提供住宿':'不需提供住宿' }}</text>
<text class="text">{{ resumeData.needAccommodationText }}</text>
</view>
</view>
<!-- 工作经历 -->
......@@ -114,13 +114,7 @@
<wd-icon
name="add"
size="24rpx"
@click="
navigateTo(
`/pages/user/resume/workExperience/index?data=${encodeURIComponent(
JSON.stringify(resumeData.workExperience)
)}`
)
"
@click="toPage(2)"
></wd-icon>
</view>
<view class="list">
......@@ -157,13 +151,7 @@
<wd-icon
name="add"
size="24rpx"
@click="
navigateTo(
`/pages/user/resume/educationExperience/index?data=${encodeURIComponent(
JSON.stringify(resumeData.educationExperience)
)}`
)
"
@click="toPage(3)"
></wd-icon>
</view>
<view class="list">
......@@ -213,6 +201,7 @@ import { useToast } from "wot-design-uni";
import { navigateTo } from "@/utils/utils.js";
import evn from "@/utils/config.js";
const toast = useToast();
const userInfoActive = ref(null)
const resumeData = reactive({
preferredCityName: "",
personalAdvantage: "",
......@@ -248,9 +237,9 @@ function formatTimestamp(timestampInMilliseconds) {
// 创建日期对象
var date = new Date(timestampInMilliseconds);
// 获取年月日
var year = date.getUTCFullYear();
var month = ("0" + (date.getUTCMonth() + 1)).slice(-2); // 月份是从0开始的,所以加1,并确保两位数
var day = ("0" + date.getUTCDate()).slice(-2); // 确保两位数
var year = date.getFullYear();
var month = ("0" + (date.getMonth() + 1)).slice(-2); // 月份是从0开始的,所以加1,并确保两位数
var day = ("0" + date.getDate()).slice(-2); // 确保两位数
return `${year}.${month}.${day}`;
}
// 数据回显
......@@ -284,6 +273,13 @@ const getUserResume = () => {
getCityNameByCodeApi(districtCode).then(res => {
resumeData.districtCode = res.data.cityName;
})
if (needAccommodation === 1) {
resumeData.needAccommodationText = '需提供住宿'
} else if (needAccommodation === 0) {
resumeData.needAccommodationText = '不需提供住宿'
} else {
resumeData.needAccommodationText = ''
}
resumeData.needAccommodation = needAccommodation
resumeData.maxSalary = maxSalary && maxSalary / 1000 + "k";
resumeData.minSalary = minSalary && minSalary / 1000 + "k";
......@@ -292,8 +288,9 @@ const getUserResume = () => {
});
// 获取用户基本信息
getLoginUserApi().then(async res => {
userInfoActive.value = res.data
if (res.code === 200) {
const {residenceCodes,birthCodes,specialCertificates,positionalTitle,professionalCertificates,major,identityTypes,sex,workAge, education, name, username, avatarPath, birthday, jobStatus } = res.data;
const {residenceAddress,birthAddress,specialCertificates,positionalTitle,professionalCertificates,major,identityTypes,sex,workAge, education, name, username, avatarPath, birthday, jobStatus } = res.data;
/* this.setData({
realName,
workExperienceYear: workExperience,
......@@ -311,17 +308,19 @@ const getUserResume = () => {
resumeData.age = calculateAge(birthday);
resumeData.sex = sex;
resumeData.identityTypes = await getEnumText2("EnumIdentityType", identityTypes.split(","));;
resumeData.birthday = formatTimestamp(28800000);
resumeData.birthday = formatTimestamp(birthday);
resumeData.major = major;
resumeData.positionalTitle = positionalTitle;
resumeData.professionalCertificates = professionalCertificates;
resumeData.specialCertificates = specialCertificates;
getCityNameByCodeApi(residenceCodes.split(",")[2]).then(res => {
resumeData.residenceCodes = res.data.provinceName+res.data.cityName+res.data.districtName;
})
getCityNameByCodeApi(birthCodes.split(",")[2]).then(res => {
resumeData.birthCodes = res.data.provinceName+res.data.cityName+res.data.districtName;
})
resumeData.residenceAddress = residenceAddress;
resumeData.birthAddress = birthAddress;
// getCityNameByCodeApi(residenceCodes.split(",")[2]).then(res => {
// resumeData.residenceCodes = res.data.provinceName+res.data.cityName+res.data.districtName;
// })
// getCityNameByCodeApi(birthCodes.split(",")[2]).then(res => {
// resumeData.birthCodes = res.data.provinceName+res.data.cityName+res.data.districtName;
// })
}
});
};
......@@ -336,8 +335,45 @@ const getOpstion = async () => {
jobStatusColumns.value = await getEumData("EnumUserJobStatus");
console.log(jobStatusColumns.value);
};
const toPage = (index) => {
if (!userInfoActive.value) {
uni.showToast({
title: "请先完善个人基本信息",
icon: "none"
});
return
}
switch (index) {
case 0:
navigateTo(`/pages/user/resume/introduce/index?data=${resumeData.personalAdvantage}`)
break;
case 1:
navigateTo(`/pages/user/resume/jobIntention/index?data=${encodeURIComponent(JSON.stringify(resumeData))}`)
break;
case 2:
navigateTo(`/pages/user/resume/workExperience/index?data=${encodeURIComponent(
JSON.stringify(resumeData.workExperience)
)}`
)
break;
case 3:
navigateTo(`/pages/user/resume/educationExperience/index?data=${encodeURIComponent(
JSON.stringify(resumeData.educationExperience)
)}`
)
break;
}
}
const changeJobStatus = async e => {
console.log(e.selectedItems.text);
if (!userInfoActive.value) {
uni.showToast({
title: "请先完善个人基本信息",
icon: "none"
});
return
}
const { code, message } = await saveJobStatusApi({ jobStatus: e.value });
if (code == 200) {
resumeData.jobStatusText = e.selectedItems.text;
......
......@@ -21,7 +21,9 @@ import { saveAdvantageApi } from "@/api/user.js";
const inputvalue = ref("");
onLoad(options => {
inputvalue.value = options.data;
if (options.data) {
inputvalue.value = options.data;
}
});
const save = () => {
saveAdvantageApi({ personalAdvantage: inputvalue.value }).then(res => {
......
......@@ -10,7 +10,7 @@
<view class="form-item">
<view class="form-info">
<view class="label">公司名称</view>
<input type="text" v-model="params.companyName" placeholder="请输入" />
<input type="text" v-model="params.companyName" placeholder="请输入" placeholder-class="placeholder" />
</view>
</view>
<!-- 在职时间 -->
......@@ -34,6 +34,7 @@
type="year-month"
v-model="params.endDate"
:formatter="formatter"
class="my-datetime-picker"
/>
</view>
</view>
......@@ -64,7 +65,7 @@
<view class="form-item">
<view class="form-info">
<view class="label">工作内容</view>
<textarea :maxlength="500" v-model="params.content" placeholder="请输入" />
<textarea :maxlength="500" v-model="params.content" placeholder="请输入" placeholder-class="placeholder"/>
</view>
</view>
</view>
......@@ -213,9 +214,13 @@ const save = () => {
}
.form-item .form-info .cont {
font-size: 28rpx;
font-weight: 600;
// font-weight: 600;
color: #213452;
}
.placeholder{
color: #bfbfbf;
font-size: 28rpx;
}
/* 保存按钮 */
.btn-wrapper {
......@@ -253,8 +258,8 @@ const save = () => {
color: #a0afc3;
}
.placeholder-style {
font-size: 28rpx !important;
color: #a0afc3 !important;
color: #bfbfbf !important;
font-size: 28rpx;
}
.flex-r-c {
display: flex;
......
......@@ -43,6 +43,8 @@ instance.interceptors.response.use(
});
}
if (response.data.code === 9) {
const path = getCurrentPages()[0].$page.path
if(path === '/pages/user/resume/essentialInformation/index') return
uni.showModal({
title: "提示",
content: "请先完善基本信息!",
......
......@@ -10,15 +10,15 @@ import { getDictDataApi } from "@/api/common";
export const getEumData = type => {
const storage = getStorageSync(type);
return new Promise(resolve => {
if (storage) {
resolve(storage);
} else {
getDictDataApi([type]).then(res => {
const data = res.data[type];
setStorageSync(type, data);
resolve(data);
});
}
// if (storage) {
// resolve(storage);
// } else {
getDictDataApi([type]).then(res => {
const data = res.data[type];
setStorageSync(type, data);
resolve(data);
});
// }
});
};
export const getEnumText = async (type, code) => {
......
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