This commit is contained in:
史典卓
2025-03-28 15:19:42 +08:00
parent ad4eb162a5
commit 0216f6053a
396 changed files with 18278 additions and 9899 deletions

View File

@@ -9,7 +9,8 @@
<view class="logo-title">就业</view>
</view>
<view class="btns">
<button open-type="getUserInfo" @getuserinfo="getuserinfo" class="wxlogin">微信登录</button>
<button class="wxlogin" @click="loginTest">登录</button>
<!-- <button open-type="getUserInfo" @getuserinfo="getuserinfo" class="wxlogin">登录</button> -->
<view class="wxaddress">青岛市公共就业和人才服务中心</view>
</view>
</template>
@@ -21,15 +22,17 @@
<view class="color_D9D9D9">个人信息仅用于推送优质内容</view>
</view>
<view class="fl_box fl_justmiddle fl_1 fl_alstart">
<view class="tabtwo-sex">
<view class="tabtwo-sex" @click="changeSex(1)">
<image class="sex-img" src="../../static/icon/woman.png"></image>
<view class="mar_top5"></view>
<view class="dot"></view>
<view v-if="fromValue.sex === 1" class="dot doted"></view>
<view v-else class="dot"></view>
</view>
<view class="tabtwo-sex">
<view class="tabtwo-sex" @click="changeSex(0)">
<image class="sex-img" src="../../static/icon/man.png"></image>
<view class="mar_top5"></view>
<view class="dot doted"></view>
<view v-if="fromValue.sex === 0" class="dot doted"></view>
<view v-else class="dot"></view>
</view>
</view>
<view class="nextstep" @tap="nextStep">下一步</view>
@@ -43,10 +46,16 @@
<view class="color_D9D9D9">个人信息仅用于推送优质内容</view>
</view>
<view class="fl_box fl_deri fl_almiddle">
<view class="agebtn agebtned">30岁以下</view>
<view class="agebtn">31-40</view>
<view class="agebtn">41-50</view>
<view class="agebtn">51岁以上</view>
<!-- <view class="agebtn agebtned">30岁以下</view> -->
<view
class="agebtn"
:class="{ agebtned: item.value === fromValue.age }"
v-for="item in state.ageList"
:key="item.value"
@click="changeAge(item.value)"
>
{{ item.label }}
</view>
</view>
<view class="fl_box fl_justmiddle"></view>
<view class="nextstep" @tap="nextStep">下一步</view>
@@ -60,17 +69,15 @@
<view class="color_D9D9D9">个人信息仅用于推送优质内容</view>
</view>
<view class="eduction-content">
<view class="eductionbtn eductionbtned">初中及以下</view>
<view class="eductionbtn">中专/中技</view>
<view class="eductionbtn">高中</view>
<view class="eductionbtn">大专</view>
<view class="eductionbtn">本科</view>
<view class="eductionbtn">硕士</view>
<view class="eductionbtn">博士</view>
<view class="eductionbtn">MBA/EMBA</view>
<view class="eductionbtn">留学-学士</view>
<view class="eductionbtn">留学-硕士</view>
<view class="eductionbtn">留学-博士</view>
<view
class="eductionbtn"
:class="{ eductionbtned: item.value === fromValue.education }"
v-for="item in oneDictData('education')"
@click="changeEducation(item.value)"
:key="item.value"
>
{{ item.label }}
</view>
</view>
<view class="nextstep" @tap="nextStep">下一步</view>
</view>
@@ -83,22 +90,28 @@
<view class="color_D9D9D9">个人信息仅用于推送优质内容</view>
</view>
<view class="salary">
<scroll-view class="salary-content" :show-scrollbar="false" :scroll-y="true">
<view class="salary-content-item">不限</view>
<view class="salary-content-item salary-content-item-selected">2k</view>
<view class="salary-content-item">5k</view>
<view class="salary-content-item">10k</view>
<view class="salary-content-item">15k</view>
</scroll-view>
<view class="center-text"></view>
<scroll-view class="salary-content" :show-scrollbar="false" :scroll-y="true">
<view class="salary-content-item">不限</view>
<view class="salary-content-item salary-content-item-selected">2k</view>
<view class="salary-content-item">5k</view>
<view class="salary-content-item">10k</view>
<view class="salary-content-item">15k</view>
<view class="salary-content-item">15k</view>
</scroll-view>
<picker-view
indicator-style="height: 140rpx;"
:value="state.salayData"
@change="bindChange"
class="picker-view"
>
<picker-view-column>
<view class="item" v-for="(item, index) in state.lfsalay" :key="index">
<view class="item-child" :class="{ 'item-childed': state.salayData[0] === index }">
{{ item }}k
</view>
</view>
</picker-view-column>
<view class="item-center"></view>
<picker-view-column>
<view class="item" v-for="(item, index) in state.risalay" :key="index">
<view class="item-child" :class="{ 'item-childed': state.salayData[2] === index }">
{{ item }}k
</view>
</view>
</picker-view-column>
</picker-view>
</view>
<view class="fl_box fl_justmiddle"></view>
<view class="nextstep" @tap="nextStep">下一步</view>
@@ -112,17 +125,17 @@
<view class="color_D9D9D9">个人信息仅用于推送优质内容</view>
</view>
<view class="eduction-content">
<view class="eductionbtn eductionbtned">市南区</view>
<view class="eductionbtn">市北区</view>
<view class="eductionbtn">李沧区</view>
<view class="eductionbtn">崂山区</view>
<view class="eductionbtn">荒岛区</view>
<view class="eductionbtn">城阳区</view>
<view class="eductionbtn">即墨区</view>
<view class="eductionbtn">胶州市</view>
<view class="eductionbtn">平度市</view>
<view class="eductionbtn">莱西市</view>
<view class="eductionbtn">不限区域</view>
<!-- <view class="eductionbtn eductionbtned">市南区</view> -->
<view
class="eductionbtn"
:class="{ eductionbtned: item.value === fromValue.area }"
v-for="item in oneDictData('area')"
:key="item.value"
@click="changeArea(item.value)"
>
{{ item.label }}
</view>
<!-- <view class="eductionbtn">不限区域</view> -->
</view>
<view class="nextstep" @tap="nextStep">下一步</view>
</view>
@@ -134,37 +147,13 @@
<view class="color_FFFFFF fs_30">您的期望岗位6/6</view>
<view class="color_D9D9D9">个人信息仅用于推送优质内容</view>
</view>
<view class="sex-search">
<uni-icons class="iconsearch" type="search" size="20"></uni-icons>
<input class="uni-input searchinput" confirm-type="search" />
</view>
<view class="sex-content fl_1">
<scroll-view :show-scrollbar="false" :scroll-y="true" class="sex-content-left">
<view
v-for="item in state.station"
:key="item.value"
class="left-list-btn"
:class="{ 'left-list-btned': item.value === state.stationCateLog }"
@click="changeStationLog(item)"
>
{{ item.label }}
</view>
</scroll-view>
<scroll-view :show-scrollbar="false" :scroll-y="true" class="sex-content-right">
<view class="grid-sex">
<view class="sex-right-btn sex-right-btned">客户经理</view>
<view class="sex-right-btn">客户经理</view>
<view class="sex-right-btn">客户经理</view>
<view class="sex-right-btn">客户经理</view>
<view class="sex-right-btn">客户经理</view>
<view class="sex-right-btn">客户经理</view>
<view class="sex-right-btn">客户经理</view>
</view>
</scroll-view>
<expected-station @onChange="changeJobTitleId" :station="state.station"></expected-station>
</view>
<navigator url="/pages/index/index" open-type="reLaunch" hover-class="other-navigator-hover">
<button class="nextstep confirmStep">完成</button>
</navigator>
<button class="nextstep confirmStep" @click="complete">完成</button>
<!-- <navigator url="/pages/index/index" open-type="reLaunch" hover-class="other-navigator-hover">
<button class="nextstep confirmStep" @click="complete">完成</button>
</navigator> -->
</view>
</template>
</tabcontrolVue>
@@ -174,61 +163,125 @@
<script setup>
import tabcontrolVue from './components/tabcontrol.vue';
import { reactive, inject, watch, ref } from 'vue';
import { onLoad, onShow } from '@dcloudio/uni-app';
import useUserStore from '@/stores/useUserStore';
import useDictStore from '@/stores/useDictStore';
const { statusBarHeight } = inject('deviceInfo');
const { $api, navTo } = inject('globalFunction');
// 初始化
const station = [
{ label: '销售/商务拓展', value: 1 },
{ label: '人事/行政/财务/法务', value: 2 },
{ label: '互联网/通信及硬件', value: 3 },
{ label: '运维/测试', value: 4 },
{ label: '销售/商务拓展', value: 5 },
{ label: '人事/行政/财务/法务', value: 6 },
{ label: '互联网/通信及硬件', value: 7 },
{ label: '运维/测试', value: 8 },
{ label: '销售/商务拓展', value: 9 },
{ label: '人事/行政/财务/法务', value: 10 },
{ label: '互联网/通信及硬件', value: 11 },
{ label: '销售/商务拓展', value: 12 },
{ label: '人事/行政/财务/法务', value: 13 },
{ label: '互联网/通信及硬件', value: 14 },
];
const { loginSetToken, getUserResume } = useUserStore();
const { getDictSelectOption, oneDictData } = useDictStore();
// status
const tabCurrent = ref(0);
const salay = [2, 5, 10, 15, 20, 25, 30, 50, 80, 100];
const state = reactive({
station: station,
station: [],
stationCateLog: 1,
ageList: [],
lfsalay: [2, 5, 10, 15, 20, 25, 30, 50],
risalay: JSON.parse(JSON.stringify(salay)),
salayData: [0, 0, 0],
});
const fromValue = reactive({
sex: 1,
age: '0',
education: '4',
salaryMin: 2000,
salaryMax: 2000,
area: 0,
jobTitleId: '',
});
setTimeout(() => {
console.log('gg');
}, 4000);
const getuserinfo = (e) => {
console.log(e);
};
// 行为
function changeStationLog(item) {
state.stationCateLog = item.value;
onLoad((parmas) => {
getDictSelectOption('age').then((data) => {
state.ageList = data;
});
getTreeselect();
});
// 选择薪资
function bindChange(val) {
state.salayData = val.detail.value;
const copyri = JSON.parse(JSON.stringify(salay));
const [lf, _, ri] = val.detail.value;
state.risalay = copyri.slice(lf, copyri.length);
fromValue.salaryMin = copyri[lf] * 1000;
fromValue.salaryMax = state.risalay[ri] * 1000;
}
function changeSex(sex) {
fromValue.sex = sex;
}
function changeAge(age) {
fromValue.age = age;
}
function changeEducation(education) {
fromValue.education = education;
}
function changeArea(area) {
fromValue.area = area;
}
function changeJobTitleId(jobTitleId) {
fromValue.jobTitleId = jobTitleId;
}
// 行为
// function changeStationLog(item) {
// state.stationCateLog = item.value;
// }
function nextStep() {
tabCurrent.value += 1;
}
function handleScroll(event) {
console.log('滚动条滚动', event.detail.scrollTop);
console.log(Math.round(event.detail.scrollTop / 75));
// this.activeIndex = Math.round(event.detail.scrollTop / 75);
// function handleScroll(event) {
// console.log('滚动条滚动', event.detail.scrollTop);
// console.log(Math.round(event.detail.scrollTop / 75));
// // this.activeIndex = Math.round(event.detail.scrollTop / 75);
// }
// 获取职位
function getTreeselect() {
$api.createRequest('/app/common/jobTitle/treeselect', {}, 'GET').then((resData) => {
state.station = resData.data;
});
}
// 登录
function loginTest() {
const params = {
username: 'test',
password: 'test',
};
$api.createRequest('/app/login', params, 'post').then((resData) => {
$api.msg('模拟帐号密码测试登录成功');
loginSetToken(resData.token).then((resume) => {
if (resume.data.jobTitleId) {
// 设置推荐列表,每次退出登录都需要更新
useUserStore().initSeesionId();
uni.reLaunch({
url: '/pages/index/index',
});
} else {
nextStep();
}
});
});
}
function complete() {
$api.createRequest('/app/user/resume', fromValue, 'post').then((resData) => {
$api.msg('完成');
getUserResume();
uni.reLaunch({
url: '/pages/index/index',
});
});
}
</script>
<style lang="stylus" scoped>
.container
background: linear-gradient(#4778EC, #002979);
width: 100%;
height: calc(100vh - var(--window-top) - var(--status-bar-height) - var(--window-bottom));
position: relative;
position: fixed;
.login-content
position: absolute;
@@ -360,9 +413,53 @@ function handleScroll(event) {
.salary
width: fit-content;
display: grid;
grid-template-columns: 300rpx 40rpx 300rpx;
// grid-gap: 20rpx;
grid-template-columns: 640rpx;
grid-gap: 20rpx;
margin-top: 50rpx;
.picker-view {
width: 100%;
height: 600rpx;
margin-top: 20rpx;
.uni-picker-view-mask{
background: rgba(0,0,0,0);
}
}
.item {
.item-child{
line-height: 90rpx;
font-size: 38rpx;
color: #606060;
text-align: center;
background: #D9D9D9;
border-radius: 20rpx;
margin: 20rpx 10rpx 20rpx 10rpx;
}
.item-childed{
line-height: 105rpx;
margin: 10rpx 5rpx 10rpx 5rpx;
background: #13C57C;
color: #FFFFFF;
}
}
.item-center{
width: 40rpx;
line-height: 600rpx;
width: 51rpx;
height: 47rpx;
font-family: Inter, Inter;
font-weight: 400;
font-size: 28rpx;
color: #FFFFFF;
text-align: center;
font-style: normal;
text-transform: none;
}
.uni-picker-view-indicator:after{
border: 0
}
.uni-picker-view-indicator:before{
border: 0
}
.center-text
color: #FFFFFF;
text-align: center;
@@ -386,71 +483,12 @@ function handleScroll(event) {
padding-left: 0;
padding-right: 0;
background: #4678ec;
.sex-search
width: calc(100% - 28rpx - 28rpx);
padding: 10rpx 28rpx;
display: grid;
// grid-template-columns: 50rpx auto;
position: relative;
.iconsearch
position: absolute;
left: 40rpx;
top: 20rpx;
.searchinput
border-radius: 10rpx;
background: #FFFFFF;
padding: 10rpx 0 10rpx 58rpx;
.sex-content
background: #FFFFFF;
border-radius: 20rpx;
width: 100%;
margin-top: 20rpx;
margin-bottom: 40rpx;
display: flex;
border-bottom: 2px solid #D9D9D9;
overflow: hidden
.sex-content-left
width: 250rpx;
.left-list-btn
padding: 0 24rpx;
display: grid;
place-items: center;
height: 100rpx;
text-align: center;
color: #606060;
font-size: 28rpx;
.left-list-btned
color: #4778EC;
position: relative;
.left-list-btned::after
position: absolute;
left: 20rpx;
content: '';
width: 7rpx;
height: 38rpx;
background: #4778EC;
border-radius: 0rpx 0rpx 0rpx 0rpx;
.sex-content-right
border-left: 2px solid #D9D9D9;
flex: 1;
.grid-sex
display: grid;
grid-template-columns: 50% 50%;
place-items: center;
.sex-right-btn
width: 211rpx;
height: 84rpx;
font-size: 35rpx;
line-height: 41rpx;
text-align: center;
display: grid;
place-items: center;
background: #D9D9D9;
border-radius: 20rpx;
margin-top:30rpx;
color: #606060;
.sex-right-btned
color: #FFFFFF;
background: #4778EC;
overflow: hidden;
height: 100%
</style>