更新

parent ad76916e
{
"recommendations": ["Vue.volar", "stylelint.vscode-stylelint"]
}
{
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.stylelint": "explicit"
},
"stylelint.enable": true,
"stylelint.validate": ["css", "less", "postcss", "scss", "vue", "sass", "html"],
"files.eol": "\n",
"typescript.tsdk": "node_modules/typescript/lib",
"[vue]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[scss]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[markdown]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[less]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}
...@@ -22,13 +22,16 @@ ...@@ -22,13 +22,16 @@
"@dcloudio/uni-mp-weixin": "3.0.0-4000720240327002", "@dcloudio/uni-mp-weixin": "3.0.0-4000720240327002",
"@dcloudio/uni-mp-xhs": "3.0.0-4000720240327002", "@dcloudio/uni-mp-xhs": "3.0.0-4000720240327002",
"@dcloudio/uni-quickapp-webview": "3.0.0-4000720240327002", "@dcloudio/uni-quickapp-webview": "3.0.0-4000720240327002",
"@vant/area-data": "^2.0.0",
"axios": "^1.7.2", "axios": "^1.7.2",
"dayjs": "^1.11.12", "dayjs": "^1.11.12",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"pinia": "2.0.36", "pinia": "2.0.36",
"vconsole": "^3.15.1",
"vue": "^3.3.11", "vue": "^3.3.11",
"vue-i18n": "^9.1.9", "vue-i18n": "^9.1.9",
"wot-design-uni": "^1.3.12" "wot-design-uni": "^1.3.12",
"xinhua-sdk": "^1.8.0"
}, },
"devDependencies": { "devDependencies": {
"@dcloudio/types": "^3.3.2", "@dcloudio/types": "^3.3.2",
...@@ -4694,6 +4697,11 @@ ...@@ -4694,6 +4697,11 @@
"dev": true, "dev": true,
"peer": true "peer": true
}, },
"node_modules/@vant/area-data": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/@vant/area-data/-/area-data-2.0.0.tgz",
"integrity": "sha512-zgP4AA8z09S9QTNgVCCHo9cHjcybrv22RJDYPjuCkecn4SB98T5EoPQh2TwqbQXmUhbaOGgiZGy3OUaUxnY7qg=="
},
"node_modules/@vitejs/plugin-legacy": { "node_modules/@vitejs/plugin-legacy": {
"version": "4.1.1", "version": "4.1.1",
"resolved": "https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-4.1.1.tgz", "resolved": "https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-4.1.1.tgz",
...@@ -6228,6 +6236,17 @@ ...@@ -6228,6 +6236,17 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/copy-text-to-clipboard": {
"version": "3.2.0",
"resolved": "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz",
"integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/core-js": { "node_modules/core-js": {
"version": "3.37.1", "version": "3.37.1",
"resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.37.1.tgz", "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.37.1.tgz",
...@@ -11064,6 +11083,11 @@ ...@@ -11064,6 +11083,11 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/mutation-observer": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz",
"integrity": "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA=="
},
"node_modules/mute-stream": { "node_modules/mute-stream": {
"version": "0.0.8", "version": "0.0.8",
"resolved": "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz", "resolved": "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz",
...@@ -14312,6 +14336,17 @@ ...@@ -14312,6 +14336,17 @@
"node": ">= 0.8" "node": ">= 0.8"
} }
}, },
"node_modules/vconsole": {
"version": "3.15.1",
"resolved": "https://registry.npmmirror.com/vconsole/-/vconsole-3.15.1.tgz",
"integrity": "sha512-KH8XLdrq9T5YHJO/ixrjivHfmF2PC2CdVoK6RWZB4yftMykYIaXY1mxZYAic70vADM54kpMQF+dYmvl5NRNy1g==",
"dependencies": {
"@babel/runtime": "^7.17.2",
"copy-text-to-clipboard": "^3.0.1",
"core-js": "^3.11.0",
"mutation-observer": "^1.0.3"
}
},
"node_modules/vite": { "node_modules/vite": {
"version": "4.3.5", "version": "4.3.5",
"resolved": "https://registry.npmmirror.com/vite/-/vite-4.3.5.tgz", "resolved": "https://registry.npmmirror.com/vite/-/vite-4.3.5.tgz",
...@@ -14740,11 +14775,9 @@ ...@@ -14740,11 +14775,9 @@
} }
}, },
"node_modules/xinhua-sdk": { "node_modules/xinhua-sdk": {
"version": "1.6.0", "version": "1.9.6",
"resolved": "https://registry.npmmirror.com/xinhua-sdk/-/xinhua-sdk-1.6.0.tgz", "resolved": "https://registry.npmmirror.com/xinhua-sdk/-/xinhua-sdk-1.9.6.tgz",
"integrity": "sha512-N30rTu91PZjUvPeNj46Z2CS5QvjRPe1ckyTFejj2Md5ZEIcpd7ldCOlmgGJiP+0n3gYjzFQWd6YubXMWI5rFkA==", "integrity": "sha512-Q+OBXlqyB5uMYO0fVNq767SpFMZiu19bi/mL19W+aAFPfSj22aOE0bzngT/eG4DffcASozv+qddjikrr0z+Dgg=="
"dev": true,
"license": "ISC"
}, },
"node_modules/xml-name-validator": { "node_modules/xml-name-validator": {
"version": "3.0.0", "version": "3.0.0",
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
"@dcloudio/uni-mp-weixin": "3.0.0-4000720240327002", "@dcloudio/uni-mp-weixin": "3.0.0-4000720240327002",
"@dcloudio/uni-mp-xhs": "3.0.0-4000720240327002", "@dcloudio/uni-mp-xhs": "3.0.0-4000720240327002",
"@dcloudio/uni-quickapp-webview": "3.0.0-4000720240327002", "@dcloudio/uni-quickapp-webview": "3.0.0-4000720240327002",
"@vant/area-data": "^2.0.0",
"axios": "^1.7.2", "axios": "^1.7.2",
"dayjs": "^1.11.12", "dayjs": "^1.11.12",
"lodash": "^4.17.21", "lodash": "^4.17.21",
......
import instance from "@/utils/request"; import instance from "@/utils/request";
// 获取职位列表 // 获取职位列表
export const getjobListApi = params => instance.post("/job/getPageList", params); export const getjobListApi = params => instance.post("/c/position/page", params);
// 获取职位详情 // 获取职位详情
export const getJobDetailApi = id => instance.post(`/job/detail/${id}`); export const getJobDetailApi = id => instance.post(`/job/detail/${id}`);
// 投递简历 // 投递简历
export const submitResumeApi = id => instance.post(`/job/application/${id}`); export const submitResumeApi = id => instance.post(`/application/delivery/${id}`);
// 获取投递 // 获取投递
export const getSubmitResumeApi = id => instance.post(`/job/getApplication/${id}`); export const getSubmitResumeApi = id => instance.post(`/job/getApplication/${id}`);
// 获取职位详情 // 获取职位详情
......
import instance from "@/utils/request"; import instance from "@/utils/request";
// 测试登录 // 测试登录
export const testLogin = params => instance.post("/user/appUser/smsLogin", params); export const testLogin = params => instance.post("/user/smsLogin", params);
export const getSmsCode = params => instance.postForm("/personal/user/getSmsCode", 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/appUser/xinhua/mpLogin", params);
// 获取用户简历 // 获取用户简历
export const getUserResumeApi = () => instance.post("/personal/user/resume/get"); export const getUserResumeApi = () => instance.post("/user/resume/info");
// 获取等用户信息 // 获取等用户信息
export const getLoginUserApi = () => instance.post("/personal/user/getLoginUser"); export const getLoginUserApi = () => instance.post("/c/user/getLoginUser");
// 保存个人优势 // 保存个人优势
export const saveAdvantageApi = params => instance.post("/personal/user/resume/saveAdvantage", params); export const saveAdvantageApi = params => instance.post("/user/resume/saveAdvantage", params);
// 保存用户求职状态 // 保存用户求职状态
export const saveJobStatusApi = params => instance.post("/personal/user/resume/saveJobStatus", params); export const saveJobStatusApi = params => instance.post("/user/resume/saveJobStatus", params);
// 保存用户基本信息 // 保存用户基本信息
export const saveUserInfoApi = params => instance.post("/personal/user/save", params); 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("/personal/user/saveIdCard", params);
// 保存求职意向 // 保存求职意向
export const saveJobIntentionApi = params => instance.post("/personal/user/resume/saveJobIntention", params); export const saveJobIntentionApi = params => instance.post("/user/resume/saveJobIntention", params);
// 保存工作经历 // 保存工作经历
export const saveWorkExperienceApi = params => instance.post("/personal/user/resume/saveWorkExperience", params); export const saveWorkExperienceApi = params => instance.post("/user/resume/saveWorkExperience", params);
// 保存教育经历 // 保存教育经历
export const saveEducationExperienceApi = params => instance.post("/personal/user/resume/saveEducationExperience", params); 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("/job/getApplicationList", params);
// 获取面试列表 // 获取面试列表
......
// 可以将此代码放置于项目src/hooks/useColPickerData.ts中
import { useCascaderAreaData } from '@vant/area-data'
export type CascaderOption = {
text: string
value: string
children?: CascaderOption[]
}
/**
* 使用'@vant/area-data'作为数据源,构造ColPicker组件的数据
* @returns
*/
export function useColPickerData() {
// '@vant/area-data' 数据源
const colPickerData: CascaderOption[] = useCascaderAreaData()
// 根据code查找子节点,不传code则返回所有节点
function findChildrenByCode(data: CascaderOption[], code?: string): CascaderOption[] | null {
if (!code) {
return data
}
for (const item of data) {
if (item.value === code) {
return item.children || null
}
if (item.children) {
const childrenResult = findChildrenByCode(item.children, code)
if (childrenResult) {
return childrenResult
}
}
}
return null
}
return { colPickerData, findChildrenByCode }
}
\ No newline at end of file
...@@ -2,12 +2,12 @@ import { createSSRApp } from "vue"; ...@@ -2,12 +2,12 @@ import { createSSRApp } from "vue";
import App from "./App.vue"; import App from "./App.vue";
import store from "./store"; import store from "./store";
import NavBar from "@/components/navBar/index.vue"; import NavBar from "@/components/navBar/index.vue";
import Vconsole from "vconsole"; // import Vconsole from "vconsole";
export function createApp() { export function createApp() {
const app = createSSRApp(App); const app = createSSRApp(App);
app.component("NavBar", NavBar); app.component("NavBar", NavBar);
const vConsole = new Vconsole(); // const vConsole = new Vconsole();
app.use(store); app.use(store);
return { return {
app app
......
...@@ -47,6 +47,13 @@ ...@@ -47,6 +47,13 @@
"navigationStyle": "custom" "navigationStyle": "custom"
} }
}, },
{
"path": "pages/user/matching/index",
"style": {
"navigationBarTitleText": "系统匹配岗位",
"navigationStyle": "custom"
}
},
{ {
"path": "pages/policy/index", "path": "pages/policy/index",
"style": { "style": {
...@@ -111,12 +118,19 @@ ...@@ -111,12 +118,19 @@
} }
}, },
{ {
"path": "pages/postionList/demandRegistration/index", "path": "pages/postionList/modular/index",
"style": { "style": {
"navigationBarTitleText": "需求登记", "navigationBarTitleText": "需求登记",
"navigationStyle": "custom" "navigationStyle": "custom"
} }
}, },
{
"path": "pages/postionList/demandRegistration/index",
"style": {
"navigationBarTitleText": "职业指导",
"navigationStyle": "custom"
}
},
{ {
"path": "pages/postionList/platformList/index", "path": "pages/postionList/platformList/index",
"style": { "style": {
...@@ -133,6 +147,15 @@ ...@@ -133,6 +147,15 @@
"navigationStyle": "custom" "navigationStyle": "custom"
} }
}, },
{
"path": "pages/postionList/appeal/index",
"style": {
"navigationBarTitleText": "申诉",
"navigationBarBackgroundColor": "#1D2C3E",
"navigationBarTextStyle": "white",
"navigationStyle": "custom"
}
},
{ {
"path": "pages/user/deliveryFeedback/index", "path": "pages/user/deliveryFeedback/index",
"style": { "style": {
......
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
import NavBar from "@/components/navBar/index.vue"; import NavBar from "@/components/navBar/index.vue";
import { xinhuaMpLogin } from "@/api/user.js"; import { xinhuaMpLogin } from "@/api/user.js";
import { setToken, getToken } from "@/utils/token"; import { setToken, getToken } from "@/utils/token";
import { getLoginUserApi } from "@/api/user";
const res = ref(""); const res = ref("");
onLoad(() => { onLoad(() => {
...@@ -40,9 +39,6 @@ const login = () => { ...@@ -40,9 +39,6 @@ const login = () => {
res.value = data; res.value = data;
console.log("datadatadata", data); console.log("datadatadata", data);
setToken(data.data.token); setToken(data.data.token);
getLoginUserApi().then(res => {
uni.setStorageSync("userInfo", res.data);
});
uni.switchTab({ uni.switchTab({
url: "/pages/postionList/index" url: "/pages/postionList/index"
}); });
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
<script setup> <script setup>
import { testLogin, getSmsCode } from "@/api/user"; import { testLogin, getSmsCode } from "@/api/user";
import { setToken } from "@/utils/token"; import { setToken } from "@/utils/token";
import { getLoginUserApi } from "@/api/user";
const phone = ref(""); const phone = ref("");
const login = async () => { const login = async () => {
const a = await getSmsCode({ username: phone.value }); const a = await getSmsCode({ username: phone.value });
...@@ -21,9 +22,12 @@ const login = async () => { ...@@ -21,9 +22,12 @@ const login = async () => {
}).then(res => { }).then(res => {
console.log(res); console.log(res);
if (res.code === 200) { if (res.code === 200) {
setToken(res.data.token); setToken(res.data);
getLoginUserApi().then(res => {
uni.setStorageSync("userInfo", res.data);
});
uni.switchTab({ uni.switchTab({
url: "/pages/user/index" url: "/pages/postionList/index"
}); });
} }
}); });
......
...@@ -21,6 +21,10 @@ ...@@ -21,6 +21,10 @@
</view> </view>
</view> </view>
</view> </view>
<!-- 暂无消息通知-->
<view class="nothing" v-if="!list.length">
<view class="nothing-text">暂无消息通知</view>
</view>
</scroll-view> </scroll-view>
</div> </div>
</view> </view>
...@@ -231,5 +235,17 @@ scroll-view { ...@@ -231,5 +235,17 @@ scroll-view {
} }
} }
} }
.nothing {
width: 100%;
text-align: center;
.nothing-text {
display: inline-block;
margin-top: 80rpx;
font-size: 28rpx;
font-weight: 400;
line-height: 68rpx;
color: rgb(128 128 128 / 100%);
}
}
} }
</style> </style>
<template>
<div class="page">
<NavBar
backIcon="#ffffff"
:showIcon="true"
:showTitle="true"
title="账户申诉"
backgroundBox="#1F86FF"
textColor="#ffffff"
></NavBar>
<view class="welcome flex-between">
<view class="text">
<view class="t1">Welcome</view>
<view class="t2">进入乐业观山湖</view>
</view>
<image src="@/static/image/postion/hi.png"></image>
</view>
<view class="content">
<view class="name">
<view class="t1">账户申述</view>
<textarea v-model="value" placeholder="请填写申述理由" />
</view>
</view>
<view class="btn-wrap flex-center">
<button class="bottom-btn" @tap="nextStep">提交</button>
</view>
</div>
</template>
<script setup>
import { ref } from "vue";
import { getLoginUserApi } from "@/api/user.js";
onLoad(() => {
});
onShow(() => {
getLoginUserApiFn();
});
function getLoginUserApiFn() {
getLoginUserApi().then(user => {
// if (user.code == 200 && user.data) {
// const { avatarPath, name, phone, position } = user.data;
// params.avatarPath = avatarPath;
// params.name = name;
// params.phone = phone;
// params.position = position;
// if (step.value !== 2) {
// if (name) {
// step.value = 3;
// }
// }
// }
});
}
const nextStep = () => {
};
</script>
<style></style>
<style lang="scss" scoped>
:deep(.uni-page-head-hd) {
display: none;
}
.page {
box-sizing: border-box;
display: flex;
flex-direction: column;
height: 100%;
// padding-top: 54rpx;
background-color: #1f86ff;
}
.welcome {
padding: 54rpx 80rpx 0 66rpx;
image {
width: 164rpx;
height: 164.46rpx;
}
.t1 {
font-size: 48rpx;
line-height: 40rpx;
color: #ffffff;
}
.t2 {
margin-top: 26rpx;
font-size: 48rpx;
line-height: 40rpx;
color: #ffffff;
}
}
.content {
flex: 1;
padding: 80rpx 32rpx 0;
margin-top: 52rpx;
background-color: #ffffff;
border-top-left-radius: 80rpx;
border-top-right-radius: 80rpx;
.item {
display: flex;
align-items: center;
// justify-content: space-between;
padding: 16px 0;
border-bottom: 1px solid #f3f4f8;
.label {
flex: 0 0 100px;
font-size: 12px;
font-weight: 500;
line-height: 18px;
color: #77818f;
.red {
color: red;
}
}
input {
font-size: 14px;
font-weight: normal;
line-height: 18px;
color: #1b2026;
}
image {
width: 28px;
height: 28px;
border-radius: 50%;
}
}
.t1 {
font-size: 32rpx;
line-height: 54rpx;
color: #1b2026;
}
.t2 {
font-size: 24rpx;
line-height: 36rpx;
color: #a3a7b3;
}
.name {
input {
padding: 32rpx 0 16rpx;
margin-top: 16rpx;
border-bottom: 2rpx solid #f3f4f8;
}
textarea {
position: relative;
box-sizing: border-box;
width: 686rpx;
height: 272rpx;
padding: 32rpx;
padding-bottom: 54rpx;
margin-top: 32rpx;
background: #f2f5fb;
border-radius: 8rpx;
opacity: 1;
text {
position: absolute;
right: 20rpx;
bottom: 16rpx;
font-size: 24rpx;
color: #77818f;
}
}
}
.image-upload {
.t2 {
margin-top: 16rpx;
}
image {
width: 686rpx;
height: 386rpx;
margin-top: 84rpx;
}
}
}
.popout-wrap {
.tips {
padding: 32rpx 0 94rpx;
background-color: #ffffff;
border-top-left-radius: 16rpx;
border-top-right-radius: 16rpx;
.title {
margin: 0 0 70rpx;
font-size: 36rpx;
font-weight: 600;
line-height: 54rpx;
color: #1b2026;
text-align: center;
}
image {
width: 340rpx;
height: 222rpx;
}
.flex-between {
padding: 0 32rpx 0 16rpx;
.text-wrap {
margin-left: 10rpx;
}
.m16 {
margin: 32rpx 0;
}
.orange {
color: #ff561b;
}
view {
font-size: 24rpx;
line-height: 36rpx;
color: #1b2026;
}
}
}
.select-list {
margin-top: 14rpx;
text-align: center;
background-color: #ffffff;
.item {
height: 108rpx;
line-height: 108rpx;
&:not(:first-child) {
border-top: 2rpx solid #f3f4f8;
}
}
}
}
.btn-wrap {
box-sizing: border-box;
height: 112rpx;
padding: 16rpx 0;
background-color: #ffffff;
border-top: 2rpx solid rgb(31 35 41 / 15%);
.bottom-btn{
background: #1F86FF;
width: 622rpx;
height: 80rpx;
line-height: 80rpx;
color: #ffffff;
}
}
.wd-transition {
display: flex;
flex-direction: column;
justify-content: flex-end;
}
</style>
<template> <template>
<NavBar :showIcon="true" backgroundBox="#ffffff" :showTitle="true" title="需求登记"></NavBar> <NavBar :showIcon="true" backgroundBox="#ffffff" :showTitle="true" title="职业指导"></NavBar>
<div class="page"> <div class="page">
<scroll-view scroll-y="{{true}}" @scrolltolower="getData"> <scroll-view scroll-y="{{true}}" @scrolltolower="getData">
<view class="item" v-for="(item, index) in list" :key="item.id"> <view class="item" v-for="(item, index) in list" :key="item.id">
...@@ -55,6 +55,7 @@ const showPopup = item => { ...@@ -55,6 +55,7 @@ const showPopup = item => {
}; };
const submit = () => { const submit = () => {
const userInfo = uni.getStorageSync("userInfo"); const userInfo = uni.getStorageSync("userInfo");
console.log("打印", userInfo);
if (!userInfo.citizenId) { if (!userInfo.citizenId) {
uni.showToast({ uni.showToast({
title: "请先实名认证", title: "请先实名认证",
......
<template> <template>
<!--pages/wanted/wanted.wxml-->
<!-- 自定义顶部 -->
<!-- <nav-bar class="nav-bar" bgColor="#fff" bind:getData="getData">
<view class="search-form">
<image class="search-icon" src="{{ossImgPrefix}}/icon/search.png"></image>
<input placeholder="搜索职位,公司" placeholder-class="log-input-p" type="text"></input>
</view>
</nav-bar> -->
<view style="height: 100%; padding-bottom: 40px"> <view style="height: 100%; padding-bottom: 40px">
<NavBar :showIcon="false" backgroundBox="#ffffff"> <NavBar :showIcon="false" backgroundBox="#ffffff">
<view class="search-form"> <view class="search-form">
...@@ -32,11 +24,10 @@ ...@@ -32,11 +24,10 @@
</view> </view>
</view> </view>
<!-- 筛选导航 --> <!-- 筛选导航 -->
<view class="select-nav" :style="{ top: '0px' }" catchtouchmove="{{true}}"> <view v-if="!maskType" class="select-nav" :style="{ top: '0px' }" catchtouchmove="{{true}}">
<view class="recommend">推荐</view> <view class="recommend">推荐</view>
<view class="select-item"> <view class="select-item">
<text :class="{ active: maskType == 'address' }" @tap="openMask('address')">贵州省</text> <text :class="{ active: maskType == 'address' }" @tap="openMask('address')">贵州省</text>
<text :class="{ active: maskType == 'position' }" @tap="openMask('position')">职位类型</text>
<text :class="{ active: maskType == 'other' }" @tap="openMask('other')">更多筛选</text> <text :class="{ active: maskType == 'other' }" @tap="openMask('other')">更多筛选</text>
</view> </view>
</view> </view>
...@@ -47,7 +38,6 @@ ...@@ -47,7 +38,6 @@
<view class="recommend">推荐</view> <view class="recommend">推荐</view>
<view class="select-item"> <view class="select-item">
<text :class="{ active: maskType == 'address' }" @tap="openMask('address')">贵州省</text> <text :class="{ active: maskType == 'address' }" @tap="openMask('address')">贵州省</text>
<text :class="{ active: maskType == 'position' }" @tap="openMask('position')">职位类型</text>
<text :class="{ active: maskType == 'other' }" @tap="openMask('other')">更多筛选</text> <text :class="{ active: maskType == 'other' }" @tap="openMask('other')">更多筛选</text>
</view> </view>
</view> </view>
...@@ -64,7 +54,7 @@ ...@@ -64,7 +54,7 @@
<view <view
class="region-list" class="region-list"
:class="{ 'region-list-color': cityId == item.code }" :class="{ 'region-list-color': cityId == item.code }"
v-for="(item, index) in cityData" v-for="(item) in cityData"
:key="item.code" :key="item.code"
@tap="bindCityList(item.code, item.name)" @tap="bindCityList(item.code, item.name)"
>{{ item.name }}</view >{{ item.name }}</view
...@@ -76,7 +66,7 @@ ...@@ -76,7 +66,7 @@
<view <view
class="region-list" class="region-list"
:class="{ 'region-list-color': regionId == v.code }" :class="{ 'region-list-color': regionId == v.code }"
v-for="(v, i) in regionData" v-for="(v) in regionData"
:key="v.code" :key="v.code"
@tap="bindRegionList(v.code, v.name)" @tap="bindRegionList(v.code, v.name)"
>{{ v.name }}</view >{{ v.name }}</view
...@@ -85,43 +75,6 @@ ...@@ -85,43 +75,6 @@
</view> </view>
</view> </view>
</view> </view>
<!-- 职位类型弹窗 -->
<view
@click.stop=""
catchtap="preventD"
class="screen-pop position screen-pop-padding {{sortPop? 'screen-pop-tion':''}}"
v-if="maskType === 'position'"
>
<view class="screen-pop-box">
<view class="screen-pop-content screen-pop-padding">
<scroll-view scroll-y class="screen-pop-padding40" style="height: 652rpx">
<view>
<view class="screen-pop-title">全部</view>
<view class="pop-title-label">
<view
class="label-list"
:class="{ 'label-list-color': sortNav == '职位类型' }"
@tap="bindSortList('全部', '')"
>全部</view
>
</view>
</view>
<view v-for="(item, index) in positionType" :key="index">
<view class="screen-pop-title">{{ item.name }}</view>
<view class="pop-title-label">
<view
v-for="(v, i) in item.children"
:class="['label-list', sortNav == v.name ? 'label-list-color' : '']"
:key="i"
@tap="bindSortList(v.name, v.id)"
>{{ v.name }}</view
>
</view>
</view>
</scroll-view>
</view>
</view>
</view>
<!-- 筛选弹窗 --> <!-- 筛选弹窗 -->
<view <view
@click.stop="" @click.stop=""
...@@ -130,19 +83,26 @@ ...@@ -130,19 +83,26 @@
v-if="maskType === 'other'" v-if="maskType === 'other'"
> >
<view class="screen-pop-box"> <view class="screen-pop-box">
<view class="screen-pop-content screen-pop-padding" style="bottom: 130rpx"> <view class="content-two">
<scroll-view scroll-y class="screen-pop-padding40" style="height: 522rpx"> <view class="left">
<view class="screen-pop-title">身份要求</view> <view class="item" @tap="choice(0)" :class="{'light':active===0}">薪酬</view>
<view class="pop-title-label"> <view class="item" @tap="choice(1)" :class="{'light':active===1}">学历</view>
<view <view class="item" @tap="choice(2)" :class="{'light':active===2}">食宿条件</view>
v-for="item in identityData" <view class="item" @tap="choice(3)" :class="{'light':active===3}">身份</view>
:class="['label-list', screenEducation == item.text ? 'label-list-color' : '']" <view class="item" @tap="choice(4)" :class="{'light':active===4}">职位类型</view>
:key="item.code" </view>
@tap="bindScreenEducationList(item.text, item.code)" <view class="right">
>{{ item.text }}</view <view class="title">{{active===0?'薪酬要求':selectionTitle}}</view>
> <view v-if="active===0" class="list">
</view> <view class="item" :class="{'light-two':activeTwo===index}" v-for="(item,index) in salary" :key="index" @tap="choiceDetails(index)">{{item.text}}</view>
</scroll-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>
<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>
</view>
</view> </view>
</view> </view>
</view> </view>
...@@ -150,7 +110,7 @@ ...@@ -150,7 +110,7 @@
<!-- 全职职位列表 --> <!-- 全职职位列表 -->
<view class="content"> <view class="content">
<view class="position-content"> <view class="position-content">
<view class="item" v-for="(v, i) in positionListData" :key="v"> <view class="item" v-for="(v) in positionListData" :key="v">
<postion-card1 :data="v"></postion-card1> <postion-card1 :data="v"></postion-card1>
</view> </view>
</view> </view>
...@@ -159,6 +119,30 @@ ...@@ -159,6 +119,30 @@
<view class="nothing-text">暂无职位推荐</view> <view class="nothing-text">暂无职位推荐</view>
</view> </view>
</view> </view>
<wd-popup :z-index="1000" v-model="showDoubt" custom-class="one-tips" custom-style="border-radius: 16rpx;" @close="handleClose">
<view class="box">
<img class="img-icon" src="@/static/image/postion/obtainEmployment.png"/>
<text class="text">请问您现在是否已就业?</text>
<view class="btns">
<button class="btn"></button>
<button class="btn"></button>
</view>
</view>
</wd-popup>
<wd-popup :z-index="1000" v-model="showInvalid" custom-class="two-tips" custom-style="border-radius: 16rpx;" @close="handleClose">
<view class="box">
<img class="img-icon" src="@/static/image/postion/earth.png"/>
<text class="text">您的帐号已失效</text>
<text class="text-small" style="margin-top:40rpx">由于您超过{{'1'}}月未登录</text>
<text class="text-small">现系统已将您的账号封禁</text>
<text class="text-small">您可完成申述后继续使用</text>
<view class="btns">
<button class="btn-one">取消</button>
<button class="btn-two">立即申诉</button>
</view>
</view>
</wd-popup>
</view> </view>
</template> </template>
...@@ -170,12 +154,21 @@ import postionCard1 from "@/components/postionCard1/index.vue"; ...@@ -170,12 +154,21 @@ import postionCard1 from "@/components/postionCard1/index.vue";
import { getEumData } from "@/utils/utils.js"; import { getEumData } from "@/utils/utils.js";
import { getToken } from "@/utils/token"; import { getToken } from "@/utils/token";
import evn from "@/utils/config.js"; import evn from "@/utils/config.js";
import { getLoginUserApi } from "@/api/user";
/* 轮播 */ /* 轮播 */
const swiperList = ref([]); const swiperList = ref([]);
let swiperListData = []; let swiperListData = [];
let contentHeight = ref(null); let contentHeight = ref(null);
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}])
onShow(() => { onShow(() => {
getLoginUserApi().then(res => {
uni.setStorageSync("userInfo", res.data);
});
getTreeData(); getTreeData();
dictJobType(); dictJobType();
reset().then(res => { reset().then(res => {
...@@ -216,7 +209,7 @@ const routerLinkList = [ ...@@ -216,7 +209,7 @@ const routerLinkList = [
{ {
icon: new URL("@/static/image/postion/xuqiudengji.png", import.meta.url).href, icon: new URL("@/static/image/postion/xuqiudengji.png", import.meta.url).href,
text: "需求登记", text: "需求登记",
url: "/pages/postionList/demandRegistration/index" url: "/pages/postionList/modular/index"
}, },
{ {
icon: new URL("@/static/image/postion/qiuzhixianjing.png", import.meta.url).href, icon: new URL("@/static/image/postion/qiuzhixianjing.png", import.meta.url).href,
...@@ -247,11 +240,12 @@ const maskType = ref(""); ...@@ -247,11 +240,12 @@ const maskType = ref("");
/* 筛选 */ /* 筛选 */
const openMask = type => { const openMask = type => {
maskType.value = type; maskType.value = type;
// uni.pageScrollTo({
// scrollTop: 280,
// duration: 0
// });
// 页面滚动到合适位子 // 页面滚动到合适位子
uni.pageScrollTo({
scrollTop: 280,
duration: 0
});
if (type === "address") { if (type === "address") {
cityCode = "520100"; cityCode = "520100";
} }
...@@ -343,15 +337,17 @@ const bindSortList = (name, id) => { ...@@ -343,15 +337,17 @@ const bindSortList = (name, id) => {
}; };
// 其他筛选 // 其他筛选
const educationData = ref([]);
const identityData = ref([]); const identityData = ref([]);
const screenSexData = ref([]); const eatAndLiveData = ref([]);
const screenSex = ref(""); const screenSex = ref("");
const screenSexCode = ref(""); const screenSexCode = ref("");
const screenEducation = ref(""); const screenEducation = ref("");
const screenEducationCode = ref(""); const screenEducationCode = ref("");
const initOtherData = async () => { const initOtherData = async () => {
screenSexData.value = await getEumData("EnumGenderRequirement"); educationData.value = await getEumData("EnumEducationRequirement");
identityData.value = await getEumData("EnumIdentityRequirement"); identityData.value = await getEumData("EnumIdentityRequirement");
eatAndLiveData.value = await getEumData("EnumAccommodation");
}; };
// const bindScreenSexList = (text, code) => { // const bindScreenSexList = (text, code) => {
// screenSex.value = text; // screenSex.value = text;
...@@ -379,6 +375,33 @@ let pageNo = 1, ...@@ -379,6 +375,33 @@ let pageNo = 1,
identityRequirementList = []; identityRequirementList = [];
let positionListData = ref([]); let positionListData = ref([]);
let selectionTitle = ref("");
let dataList = ref([]);
const choice = (index) => {
active.value = index * 1
switch (index*1) {
case 1:
selectionTitle.value = '学历要求'
dataList.value = educationData.value
break;
case 2:
selectionTitle.value = '食宿条件'
dataList.value = eatAndLiveData.value
break;
case 3:
selectionTitle.value = '身份条件'
dataList.value = identityData.value
break;
default:
selectionTitle.value = '职位类型'
console.log(positionType.value)
dataList.value = positionType.value
}
}
const choiceDetails = (index) => {
activeTwo.value = index*1
}
// 重置 // 重置
const reset = () => { const reset = () => {
return new Promise(resolve => { return new Promise(resolve => {
...@@ -429,11 +452,108 @@ const getListData = () => { ...@@ -429,11 +452,108 @@ const getListData = () => {
}); });
}; };
</script> </script>
<style lang="scss" scoped>
.one-tips{
overflow: hidden;
.box{
width: 600rpx !important;
height: 500rpx !important;
background: #FFFFFF;
display: flex;
// justify-content: center;
align-items: center;
flex-direction: column;
.img-icon{
width: 250rpx;
height: 200rpx;
margin-top: 20rpx;
}
.text{
font-size: 32rpx;
font-weight: 600;
color: #1B2026;
font-family: PingFang SC;
margin-top: 52rpx;
}
.btns{
width: 90%;
display: flex;
jsustify-content: space-between;
margin-top: 80rpx;
.btn{
width: 240rpx;
height: 72rpx;
line-height: 72rpx;
background: rgba(31, 134, 255, 0.1);
color: #1F86FF;
font-size: 28rpx;
font-weight: 500;
}
}
}
}
.two-tips{
overflow: hidden;
.box{
width: 600rpx !important;
height: 668rpx !important;
background: #FFFFFF;
display: flex;
// justify-content: center;
align-items: center;
flex-direction: column;
.img-icon{
width: 348rpx;
height: 276rpx;
margin-top: 20rpx;
}
.text{
font-size: 28rpx;
font-weight: 600;
color: #1B2026;
font-family: PingFang SC;
}
.text-small{
font-size: 28rpx;
color: #000000;
line-height: 48rpx;
}
.btns{
width: 90%;
display: flex;
jsustify-content: space-between;
margin-top: 40rpx;
.btn-one{
width: 120rpx;
height: 72rpx;
line-height: 72rpx;
background: rgba(31, 134, 255, 0.1);
color: #1F86FF;
font-size: 28rpx;
font-weight: 500;
}
.btn-two{
width: 324rpx;
height: 72rpx;
line-height: 72rpx;
background: #1F86FF;
color: #FFFFFF;
font-size: 28rpx;
font-weight: 500;
}
}
}
}
</style>
<style lang="scss" scoped> <style lang="scss" scoped>
/* page { /* page {
background: #ffffff; background: #ffffff;
} */ } */
.search-form { .search-form {
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -602,7 +722,8 @@ const getListData = () => { ...@@ -602,7 +722,8 @@ const getListData = () => {
// 工作列表 // 工作列表
.content { .content {
min-height: 100vh; // min-height: 100vh;
padding-bottom: 100rpx;
.position-content { .position-content {
padding: 0; padding: 0;
background: #f6f7f8; background: #f6f7f8;
...@@ -922,7 +1043,7 @@ const getListData = () => { ...@@ -922,7 +1043,7 @@ const getListData = () => {
.screen-pop-box { .screen-pop-box {
position: relative; position: relative;
width: 100%; width: 100%;
height: 652rpx; max-height: 900rpx;
} }
.screen-pop-content { .screen-pop-content {
position: absolute; position: absolute;
...@@ -933,9 +1054,57 @@ const getListData = () => { ...@@ -933,9 +1054,57 @@ const getListData = () => {
.screen-pop-padding { .screen-pop-padding {
padding: 0; padding: 0;
} }
.screen-pop-padding40 { .content-two{
box-sizing: border-box; display: flex;
padding-left: 40rpx; .left{
width: 200rpx;
max-height:900rpx;
background: #E8F2FF;
.item{
font-size: 32rpx;
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;
.item{
width: 236rpx;
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;
}
}
}
} }
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 0; width: 0;
......
<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"/>
</template>
<script setup>
import { navigateTo } from "@/utils/utils";
import {} from "vue"
</script>
<style lang="scss" scoped>
.img{
border-radius: 16rpx;
width: 686rpx;
height: 294rpx;
margin: 32rpx auto 0;
display: block;
}
</style>
...@@ -66,19 +66,10 @@ ...@@ -66,19 +66,10 @@
<text class="gradient-title">职位详情</text> <text class="gradient-title">职位详情</text>
</view> </view>
<view class="pos-int"> <view class="pos-int">
<!-- <text class="pos-label pos-age">
<block wx:if="{{partTimeJobData.minAge}}">{{partTimeJobData.minAge}}-{{partTimeJobData.maxAge}}</block>
<block wx:else>年龄不限</block>
</text> -->
<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.benefitsList" :key="index">{{ item }}</text>
</view> </view>
<view class="pos-duty {{dutyFlag ? 'activeClass' : ''}}">{{ partTimeJobData.jobDesc }}</view> <view class="pos-duty" :class="{ activeClass: dutyFlag }">{{ partTimeJobData.jobDesc }}</view>
<view <view class="duty-more" @tap="moreClick" v-if="partTimeJobData.jobDesc?.length > 150 && dutyFlag === false">
class="duty-more"
bindtap="moreClick"
:style="{ display: dutyFlag ? 'none' : '' }"
v-if="partTimeJobData.content?.length > 150"
>
<text>查看全部</text> <text>查看全部</text>
</view> </view>
</view> </view>
...@@ -197,6 +188,7 @@ import { getJobDetailApi, submitResumeApi } from "@/api/postion"; ...@@ -197,6 +188,7 @@ import { getJobDetailApi, submitResumeApi } from "@/api/postion";
const partTimeJobData = ref({}); const partTimeJobData = ref({});
const recommendList = ref([]); const recommendList = ref([]);
const stepViewData = ref(null); const stepViewData = ref(null);
let dutyFlag = ref(false);
const mapCenter = reactive({ const mapCenter = reactive({
latitude: 26.63, latitude: 26.63,
longitude: 106.67 longitude: 106.67
...@@ -245,6 +237,10 @@ const bindDelivery = () => { ...@@ -245,6 +237,10 @@ const bindDelivery = () => {
} }
}); });
}; };
const moreClick = () => {
dutyFlag.value = true;
};
const navigateTo = url => { const navigateTo = url => {
uni.navigateTo({ uni.navigateTo({
url url
...@@ -429,7 +425,7 @@ onLoad(({ id }) => { ...@@ -429,7 +425,7 @@ onLoad(({ id }) => {
} }
.pos-introduce .activeClass { .pos-introduce .activeClass {
margin-bottom: 0; margin-bottom: 0;
-webkit-line-clamp: inherit; -webkit-line-clamp: inherit !important;
} }
.pos-introduce .duty-more { .pos-introduce .duty-more {
position: absolute; position: absolute;
......
...@@ -62,6 +62,11 @@ const navigateTo = url => { ...@@ -62,6 +62,11 @@ const navigateTo = url => {
} }
}; };
const navList = [ const navList = [
{
icon: new URL("@/static/image/user/bag.png", import.meta.url).href,
url: "/pages/user/matching/index",
text: "系统匹配岗位"
},
{ {
icon: new URL("@/static/image/user/history.png", import.meta.url).href, icon: new URL("@/static/image/user/history.png", import.meta.url).href,
url: "/pages/user/myDelivery/index?type=我的投递", url: "/pages/user/myDelivery/index?type=我的投递",
......
<template>
<view style="height: 100%; padding-bottom: 40px">
<NavBar :showIcon="true" :showTitle="true" title="系统匹配岗位" backgroundBox="#FFFFFF"></NavBar>
<!-- 筛选导航 -->
<view class="select-nav2" :style="{ top: contentHeight }" catchtouchmove="{{true}}">
<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 :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="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>
<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
>
</scroll-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':activeTwo===index}" v-for="(item,index) in salary" :key="index" @tap="choiceDetails(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>
<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>
</view>
</view>
</view>
</view>
</view>
<!-- 全职职位列表 -->
<view class="content">
<view class="position-content">
<view class="item" v-for="(v) in positionListData" :key="v">
<postion-card1 :data="v"></postion-card1>
</view>
</view>
<!-- 暂无职位推荐-->
<view class="nothing" v-if="!positionListData.length">
<view class="nothing-text">暂无职位推荐</view>
</view>
</view>
</view>
</template>
<script setup>
import { ref, reactive } from "vue";
import { getjobListApi } from "@/api/postion.js";
import { getTreeListApi, dictJobTypeApi, getBannerListApi } from "@/api/common.js";
import postionCard1 from "@/components/postionCard1/index.vue";
import { getEumData } from "@/utils/utils.js";
import { getToken } from "@/utils/token";
import evn from "@/utils/config.js";
import { getLoginUserApi } from "@/api/user";
/* 轮播 */
const swiperList = ref([]);
let swiperListData = [];
let contentHeight = ref(null);
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}])
onShow(() => {
getLoginUserApi().then(res => {
uni.setStorageSync("userInfo", res.data);
});
getTreeData();
dictJobType();
reset().then(res => {
getListData();
});
initOtherData();
xma.xh.getMenuButtonBoundingClientRect({
success(res) {
contentHeight.value = (res.top + res.bottom) / 2 + 25 + "px";
}
});
});
onReachBottom(e => {
pageNo++;
getListData();
});
// 获取数据
getBannerListApi(1).then(res => {
swiperListData = res.data;
console.log(swiperListData);
swiperList.value = res.data.map(item => evn.APP_IMAGE_BASE_API + item.imgPath);
});
const current = ref(0);
const handleClickSwiper = e => {
console.log(e);
uni.navigateTo({
url: `/pages/articleDetails/index?id=${swiperListData[e.index].articleId}`
});
};
const routerLinkList = [
{
icon: new URL("@/static/image/postion/qiuzhidengji.png", import.meta.url).href,
text: "求职登记",
url: "/pages/user/resume/index"
},
{
icon: new URL("@/static/image/postion/xuqiudengji.png", import.meta.url).href,
text: "需求登记",
url: "/pages/postionList/modular/index"
},
{
icon: new URL("@/static/image/postion/qiuzhixianjing.png", import.meta.url).href,
text: "求职陷阱",
url: "/pages/postionList/trap/index"
},
{
icon: new URL("@/static/image/postion/linggongzhuanqu.png", import.meta.url).href,
text: "零工专区",
url: "/pages/postionList/platformList/index?type=零工专区"
},
{
icon: new URL("@/static/image/postion/qitapingtai.png", import.meta.url).href,
text: "其他平台",
url: "/pages/postionList/platformList/index?type=其他平台"
}
];
const clickNav = url => {
if (url) {
uni.navigateTo({
url
});
}
};
const nothingFlag = false;
const maskType = ref("");
/* 筛选 */
const openMask = type => {
maskType.value = type;
if (type === "address") {
cityCode = "520100";
}
};
// 省市区
let regionPop = false; //区域
let regionNav = "贵州省"; //选中区域
let cityId = ref(null); //选中市id
const cityData = ref([]); //市
const regionId = ref(null); //选中区域id
const regionData = ref([]); //区
const getTreeData = () => {
getTreeListApi({
isCityNeedUnlimited: true,
isDistrictNeedUnlimited: true
}).then(res => {
if (res.code === 200) {
let _data = res.data;
for (let i = 0; i < _data.length; i++) {
if (_data[i].code == 520000) {
let _children = _data[i].children;
cityData.value = _children;
for (let j = 0; j < _children.length; j++) {
if (_children[j].code == 520100) {
cityId.value = 520100;
regionData.value = _data[i].children[j].children;
}
}
}
}
}
});
};
// 选择市
const bindCityList = (code, name) => {
for (let i = 0; i < cityData.value.length; i++) {
if (cityData.value[i].code == code) {
let _children = cityData.value[i].children;
regionData.value = _children;
cityId.value = code;
}
}
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 positionType = ref([]);
const sortNav = ref("职位类型");
const sortId = ref("");
const dictJobType = () => {
dictJobTypeApi({ jobDateType: 1 }).then(({ code, data }) => {
if (code == 200) {
positionType.value = data;
}
});
};
const bindSortList = (name, id) => {
if (name == "全部") {
sortNav.value = "职位类型";
sortId.value = id;
pageNo = 1;
} else {
sortNav.value = name;
sortId.value = id;
jobTypeList = [id];
pageNo = 1;
positionListData.value = [];
getListData();
}
};
// 其他筛选
const educationData = ref([]);
const identityData = ref([]);
const eatAndLiveData = ref([]);
const screenSex = ref("");
const screenSexCode = ref("");
const screenEducation = ref("");
const screenEducationCode = ref("");
const initOtherData = async () => {
educationData.value = await getEumData("EnumEducationRequirement");
identityData.value = await getEumData("EnumIdentityRequirement");
eatAndLiveData.value = await getEumData("EnumAccommodation");
};
// const bindScreenSexList = (text, code) => {
// screenSex.value = text;
// screenSexCode.value = code;
// };
const bindScreenEducationList = (text, code) => {
screenEducation.value = text;
screenEducationCode.value = code;
identityRequirementList = [code];
pageNo = 1;
positionListData.value = [];
getListData();
};
/* 获取职位列表 */
let pageNo = 1,
pageSize = 10,
isPartTimeJob = null,
cityCode = null,
districtCode = null,
jobTypeList = [],
genderType = null,
jobIdentityType = null,
orderBy = null,
keyword = null,
identityRequirementList = [];
let positionListData = ref([]);
let selectionTitle = ref("");
let dataList = ref([]);
const choice = (index) => {
active.value = index * 1
switch (index*1) {
case 1:
selectionTitle.value = '学历要求'
dataList.value = educationData.value
break;
case 2:
selectionTitle.value = '食宿条件'
dataList.value = eatAndLiveData.value
break;
case 3:
selectionTitle.value = '身份条件'
dataList.value = identityData.value
break;
default:
selectionTitle.value = '职位类型'
console.log(positionType.value)
dataList.value = positionType.value
}
}
const choiceDetails = (index) => {
activeTwo.value = index*1
}
// 重置
const reset = () => {
return new Promise(resolve => {
pageNo = 1;
pageSize = 10;
isPartTimeJob = null;
cityCode = null;
districtCode = null;
jobTypeList = [];
genderType = null;
jobIdentityType = null;
orderBy = null;
positionListData.value = [];
identityRequirementList = [];
resolve();
});
};
// 职位搜索
const confirm = e => {
reset().then(res => {
keyword = e.detail.value;
getListData();
});
};
const getListData = () => {
let data = {
pageNo: pageNo,
pageSize: pageSize,
isPartTimeJob: isPartTimeJob,
provinceCode: "520000",
cityCode: cityCode || null,
districtCode: districtCode || null,
jobTypeList: jobTypeList || [],
genderType: genderType || null,
jobIdentityType: jobIdentityType || null,
orderBy: orderBy || 1,
keyword: keyword || null,
identityRequirementList: identityRequirementList || []
};
getjobListApi(data).then(res => {
if (res.code == 200) {
positionListData.value = [...positionListData.value, ...res.data];
}
console.log(positionListData.value);
maskType.value = "";
});
};
</script>
<style lang="scss" scoped>
.one-tips{
overflow: hidden;
.box{
width: 600rpx !important;
height: 500rpx !important;
background: #FFFFFF;
display: flex;
// justify-content: center;
align-items: center;
flex-direction: column;
.img-icon{
width: 250rpx;
height: 200rpx;
margin-top: 20rpx;
}
.text{
font-size: 32rpx;
font-weight: 600;
color: #1B2026;
font-family: PingFang SC;
margin-top: 52rpx;
}
.btns{
width: 90%;
display: flex;
jsustify-content: space-between;
margin-top: 80rpx;
.btn{
width: 240rpx;
height: 72rpx;
line-height: 72rpx;
background: rgba(31, 134, 255, 0.1);
color: #1F86FF;
font-size: 28rpx;
font-weight: 500;
}
}
}
}
.two-tips{
overflow: hidden;
.box{
width: 600rpx !important;
height: 668rpx !important;
background: #FFFFFF;
display: flex;
// justify-content: center;
align-items: center;
flex-direction: column;
.img-icon{
width: 348rpx;
height: 276rpx;
margin-top: 20rpx;
}
.text{
font-size: 28rpx;
font-weight: 600;
color: #1B2026;
font-family: PingFang SC;
}
.text-small{
font-size: 28rpx;
color: #000000;
line-height: 48rpx;
}
.btns{
width: 90%;
display: flex;
jsustify-content: space-between;
margin-top: 40rpx;
.btn-one{
width: 120rpx;
height: 72rpx;
line-height: 72rpx;
background: rgba(31, 134, 255, 0.1);
color: #1F86FF;
font-size: 28rpx;
font-weight: 500;
}
.btn-two{
width: 324rpx;
height: 72rpx;
line-height: 72rpx;
background: #1F86FF;
color: #FFFFFF;
font-size: 28rpx;
font-weight: 500;
}
}
}
}
</style>
<style lang="scss" scoped>
/* page {
background: #ffffff;
} */
.search-form {
display: flex;
align-items: center;
width: 452rpx;
height: 72rpx;
margin-left: 32rpx;
overflow: hidden;
background: #f7f7f7;
border-radius: 68rpx;
.search-icon {
width: 28rpx;
height: 28rpx;
margin-left: 32rpx;
color: #86909c;
}
input {
margin-left: 16rpx;
font-size: 28rpx;
}
.log-input-p {
color: #b3b7bf;
}
}
// 轮播
.banner {
padding: 0 32rpx;
margin-top: 30rpx;
swiper-item {
overflow: hidden;
background-color: #0c81ee;
border-radius: 10rpx;
}
}
// 链接跳转
.router-link {
padding: 40rpx 60rpx;
text-align: center;
border-bottom: 16rpx solid #f3f4f8;
img {
width: 83.66rpx;
height: 80rpx;
}
view {
font-size: 24rpx;
font-weight: normal;
color: #1b2026;
}
}
// 筛选条
.select-nav {
// position: sticky;
// z-index: 30;
display: flex;
align-items: center;
justify-content: center;
height: 80rpx;
padding: 0 32rpx;
background-color: #ffffff;
.recommend {
position: relative;
font-size: 36rpx;
font-weight: bold;
color: #1b2026;
letter-spacing: 0;
&::after {
position: absolute;
right: -8rpx;
bottom: 4rpx;
z-index: -1;
display: block;
width: 36px;
height: 16rpx;
content: "";
background: linear-gradient(90deg, rgb(241 246 251 / 0%) 0%, #76a5ff 100%);
}
}
.select-item {
margin-right: 8rpx;
text {
position: relative;
padding: 2rpx 20rpx 2rpx 12rpx;
margin-left: 24rpx;
font-size: 24rpx;
line-height: 24rpx;
color: #1b2026;
background-color: #ffffff;
&::after {
position: absolute;
right: 12rpx;
bottom: 6rpx;
display: block;
width: 0;
height: 0;
content: "";
border: 4rpx solid #1b2026;
border-top-color: transparent;
border-left-color: transparent;
}
&.active {
color: #ffffff;
background: linear-gradient(180deg, #3570ff -3%, #29a5ff 100%);
border-radius: 8rpx;
&::after {
border: 4rpx solid #ffffff;
border-top-color: transparent;
border-left-color: transparent;
}
}
}
}
}
.select-nav2 {
position: sticky;
// z-index: 30;
display: flex;
align-items: center;
justify-content: center;
height: 80rpx;
padding: 0 32rpx;
background-color: #ffffff;
.recommend {
position: relative;
font-size: 36rpx;
font-weight: bold;
color: #1b2026;
letter-spacing: 0;
&::after {
position: absolute;
right: -8rpx;
bottom: 4rpx;
z-index: -1;
display: block;
width: 36px;
height: 16rpx;
content: "";
background: linear-gradient(90deg, rgb(241 246 251 / 0%) 0%, #76a5ff 100%);
}
}
.select-item {
margin-right: 8rpx;
text {
position: relative;
padding: 2rpx 20rpx 2rpx 12rpx;
margin-left: 24rpx;
font-size: 24rpx;
line-height: 24rpx;
color: #1b2026;
background-color: #ffffff;
&::after {
position: absolute;
right: 12rpx;
bottom: 6rpx;
display: block;
width: 0;
height: 0;
content: "";
border: 4rpx solid #1b2026;
border-top-color: transparent;
border-left-color: transparent;
}
&.active {
color: #ffffff;
background: linear-gradient(180deg, #3570ff -3%, #29a5ff 100%);
border-radius: 8rpx;
&::after {
border: 4rpx solid #ffffff;
border-top-color: transparent;
border-left-color: transparent;
}
}
}
}
}
// 筛选弹框
.pop-mask {
position: fixed;
inset: 0;
z-index: 100;
background-color: #00000066;
.address {
.region-pop-content {
text-align: center;
background-color: #ffffff;
.region-pop-left {
width: 375rpx;
padding: 0;
.region-list {
width: 375rpx;
padding: 0;
border: 0;
}
.region-list-color {
background-color: #f3f4f8;
}
}
.region-pop-right {
width: 375rpx;
padding: 0;
.region-list {
background-color: #f3f4f8;
border: 0;
}
}
}
}
.position,
.other {
.screen-pop-box {
background-color: #ffffff;
.screen-pop-title {
font-size: 28rpx;
font-weight: 600;
color: #1b2026;
}
.label-list-color {
font-weight: 600;
color: #1f86ff;
background-color: rgb(31 134 255 / 10%);
border-color: transparent;
}
}
}
}
// 工作列表
.content {
.position-content {
padding: 0;
background: #f6f7f8;
.recommend-list {
position: relative;
padding: 32rpx 32rpx 0;
margin-bottom: 20rpx;
background-color: #ffffff;
border: 0;
}
.item {
padding: 32rpx;
background-color: #ffffff;
border-bottom: 16rpx solid #f3f4f8;
}
}
}
/* nav全职兼职推荐 */
.nav {
/* height: 100rpx; */
box-sizing: border-box;
width: 100%;
padding: 28rpx 40rpx;
padding-bottom: 0;
background: #ffffff;
}
.nav .nav-list {
display: inline-block;
margin-right: 40rpx;
}
.nav .nav-list .nav-list-title {
font-size: 32rpx;
font-weight: 400;
line-height: 44rpx;
color: rgb(128 128 128 / 100%);
transition: 0.3s ease all;
}
.nav .nav-list .nav-active {
font-size: 36rpx;
font-weight: 600;
color: rgb(58 58 60 / 100%);
}
.nav .nav-list .nav-list-before {
width: 60rpx;
height: 8rpx;
margin: 0 auto;
margin-top: 4rpx;
background: rgb(24 146 255 / 100%);
border-radius: 4rpx;
opacity: 0;
transition: 0.3s ease all;
}
.nav .nav-list .before-active {
opacity: 1;
}
/* 筛选导航 */
.nav-screen {
background: #ffffff;
border-bottom: 1px solid rgb(238 239 238 / 100%);
}
/* 职位筛选弹窗 */
.nav-screen .screen-pop-mask {
position: fixed;
inset: 0;
z-index: 10;
background: rgb(0 0 0 / 40%);
transition: 0.3s ease all;
}
.nav-screen .screen-pop {
position: absolute;
/* top: 326rpx; */
top: 230rpx;
left: -1000rpx;
z-index: 20;
width: 100%;
max-height: 652rpx;
padding-left: 40rpx;
overflow-y: auto;
background: #ffffff;
transition: 0.3s ease all;
}
.nav-screen .screen-pop-tion {
left: 0;
}
.nav-screen .screen-pop-list {
font-size: 28rpx;
line-height: 80rpx;
color: #3a3a3c;
background: #ffffff;
border-top: 1px solid #e9e9e9;
}
.nav-screen .screen-pop-list:nth-child(1) {
border: none;
}
/* nav */
.nav-screen-position .nav-screen-child text {
font-size: 32rpx;
font-weight: 500;
line-height: 44rpx;
color: rgb(58 58 60 / 100%);
vertical-align: middle;
}
.nav-screen-position .nav-screen-child .icon {
width: 18rpx;
height: 10rpx;
margin-left: 16rpx;
vertical-align: middle;
transition: 0.3s ease all;
}
.nav-screen-position .nav-screen-child .icon-tion {
transform: rotate(180deg);
}
.nav-screen-list {
display: flex;
/* position: absolute; */
/* top: 94rpx; */
padding: 28rpx 40rpx;
overflow: hidden;
background: #ffffff;
/* z-index: 20; */
}
.nav-screen-list .nav-screen-child {
display: flex;
flex: 1;
align-items: center;
justify-content: center;
width: 200rpx;
height: 56rpx;
color: rgb(128 128 128 / 100%);
text-align: center;
background: rgb(245 245 245 / 100%);
border: 2rpx solid rgb(0 0 0 / 0%);
border-radius: 4rpx;
}
.nav-screen-list .nav-screen-color {
color: #1892ff;
background: rgb(245 245 245 / 0%);
border: 2rpx solid #1892ff;
}
.nav-screen-list .nav-screen-child:nth-child(2) {
margin: 0 34rpx;
}
.nav-screen-list .nav-screen-child text {
overflow: hidden;
font-size: 24rpx;
font-weight: 400;
line-height: 34rpx;
text-overflow: ellipsis;
white-space: nowrap;
}
.nav-screen-list .nav-screen-child .icon {
width: 18rpx;
height: 10rpx;
margin-left: 6rpx;
vertical-align: middle;
transition: 0.3s ease all;
}
.nav-screen-list .nav-screen-child .icon-tion {
transform: rotate(180deg);
}
/* 职位列表 */
.position-content {
padding: 28rpx 32rpx;
padding-bottom: 0rpx;
background: #ffffff;
}
.position-content .recommend-list {
margin-bottom: 28rpx;
border-bottom: 2rpx solid rgb(238 239 238 / 100%);
}
.position-content .recommend-list .recommend-title {
margin-bottom: 14rpx;
overflow: hidden;
}
.recommend-list .recommend-title .sign {
width: auto;
height: 28rpx;
padding: 0 10rpx;
margin-right: 12rpx;
font-size: 20rpx;
font-weight: 400;
line-height: 25rpx;
color: rgb(250 122 96 / 100%);
text-align: center;
vertical-align: middle;
background: rgb(252 229 229 / 100%);
border-radius: 4rpx;
}
.recommend-list .recommend-title .title {
font-size: 32rpx;
font-weight: 500;
color: rgb(58 58 60 / 100%);
vertical-align: middle;
}
.recommend-list .salary-info {
margin-bottom: 28rpx;
overflow: hidden;
}
.recommend-list .salary-info .salary {
font-size: 28rpx;
font-weight: 600;
color: rgb(255 89 55 / 100%);
vertical-align: middle;
}
.recommend-list .salary-info .deliveryBtn {
float: right;
}
.recommend-list .cos-details {
display: flex;
margin-bottom: 18rpx;
}
.recommend-list .cos-details .cos-requirement {
flex: 1;
}
.recommend-list .cos-details .cos-requirement .cos-title {
margin-bottom: 20rpx;
}
.recommend-list .cos-details .cos-requirement .cos-title .cos-name {
display: inline-block;
max-width: 260rpx;
height: 32rpx;
overflow: hidden;
font-weight: 400;
text-overflow: ellipsis;
white-space: nowrap;
vertical-align: middle;
}
.recommend-list .cos-details .cos-requirement .cos-title .cos-name-width {
max-width: 500rpx;
}
.recommend-list .cos-details .cos-requirement .cos-title .cos-recommend {
display: inline-block;
height: 36rpx;
padding: 0 4rpx;
font-size: 20rpx;
font-weight: 400;
line-height: 36rpx;
color: rgb(155 1 1 / 100%);
vertical-align: middle;
background: rgb(255 233 237 / 100%);
border-radius: 4rpx;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.recommend-list .cos-details .cos-requirement .cos-title image {
display: inline-block;
width: 36rpx;
height: 36rpx;
vertical-align: middle;
background-color: rgb(255 233 237 / 100%);
border-top-left-radius: 50%;
border-bottom-left-radius: 50%;
}
.recommend-list .cos-details .cos-ask {
margin-bottom: 16rpx;
font-size: 24rpx;
font-weight: 400;
color: rgb(128 128 128 / 100%);
}
.recommend-list .cos-details .margin-none {
margin-bottom: 0;
}
.recommend-list .cos-details .cos-welfare {
width: 100%;
max-height: 50rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.recommend-list .cos-details .cos-welfare .welfare-list {
float: left;
width: auto;
height: 40rpx;
padding: 0 10rpx;
margin: 0 12rpx 10rpx 0;
font-size: 24rpx;
font-weight: 400;
line-height: 40rpx;
color: rgb(128 128 128 / 100%);
text-align: center;
border: 2rpx solid rgb(186 186 186 / 100%);
border-radius: 4rpx;
}
.recommend-list .cos-details .cos-video {
position: relative;
width: 160rpx;
height: 120rpx;
overflow: hidden;
}
.recommend-list .cos-details .recommend-video {
width: 100%;
height: 100%;
}
.cos-play-icon {
position: absolute;
top: 50%;
left: 50%;
z-index: 1;
width: 64rpx;
height: 64rpx;
transform: translate(-50%, -50%);
}
/* 筛选弹窗 */
.nav-screen .screen-pop-padding {
padding-left: 0;
}
.screen-pop-box {
position: relative;
width: 100%;
max-height: 900rpx;
}
.screen-pop-content {
position: absolute;
inset: 0 0 0rpx;
padding: 0 40rpx;
overflow: hidden;
}
.screen-pop-padding {
padding: 0;
}
.content-two{
display: flex;
.left{
width: 200rpx;
max-height:900rpx;
background: #E8F2FF;
.item{
font-size: 32rpx;
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;
.item{
width: 236rpx;
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;
}
}
}
}
::-webkit-scrollbar {
width: 0;
height: 0;
color: rgb(0 0 0 / 0%);
}
.screen-pop-content .screen-pop-title {
margin-top: 28rpx;
margin-bottom: 16rpx;
font-size: 28rpx;
font-weight: 400;
line-height: 40rpx;
color: rgb(58 58 60 / 100%);
}
.screen-pop-content .screen-pop-title text {
color: #1892ff;
}
.screen-pop-content .pop-title-label {
overflow: hidden;
}
.screen-pop-content .pop-padding {
padding: 0 12rpx;
}
.screen-pop-content .label-list {
float: left;
padding: 12rpx 32rpx;
margin: 12rpx 0;
margin-right: 20rpx;
font-size: 28rpx;
font-weight: 400;
color: rgb(128 128 128 / 100%);
border: 1px solid rgb(186 186 186 / 100%);
border-radius: 8rpx;
}
.screen-pop-content .label-list-color {
color: #1892ff;
border-color: #1892ff;
}
.pop-bottom {
position: absolute;
right: 0;
bottom: 0;
left: 0;
padding: 28rpx 32rpx;
overflow: hidden;
background: #ffffff;
border-top: 1px solid rgb(238 239 238 / 100%);
}
.pop-bottom .pop-btn {
float: right;
width: 132rpx;
height: 64rpx;
margin-left: 28rpx;
font-size: 28rpx;
font-weight: 400;
line-height: 64rpx;
color: rgb(58 58 60 / 100%);
text-align: center;
border: 1px solid rgb(186 186 186 / 100%);
border-radius: 8rpx;
}
.pop-bottom .pop-btn:nth-child(2) {
color: #ffffff;
background: rgb(24 146 255 / 100%);
border-color: rgb(24 146 255 / 100%);
}
/* 区域弹窗 */
.region-pop-content {
position: relative;
width: 100%;
height: 652rpx;
}
.region-pop-content .region-pop-left {
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 40%;
overflow: hidden;
background: #ffffff;
}
.region-pop-content .region-pop-right {
position: absolute;
top: 0;
right: 0;
bottom: 0;
box-sizing: border-box;
width: 60%;
padding-left: 32rpx;
overflow: hidden;
background: #f7f7f7;
}
.region-pop-content .region-list {
font-size: 28rpx;
line-height: 80rpx;
color: #3a3a3c;
background: #f7f7f7;
border-top: 1px solid #e9e9e9;
}
.region-pop-content .region-pop-left .region-list {
padding-left: 32rpx;
background: #ffffff;
}
.screen-pop .region-list-color {
color: #1892ff;
}
.region-pop-content .region-list:nth-child(1) {
border: none;
}
.range-slider-block {
position: relative;
width: 50rpx;
height: 50rpx;
text-align: center;
background-color: white;
border-radius: 50%;
box-shadow: 0 0 5px #888888;
}
.range-slider-block .range-slider-icon {
position: absolute;
top: 50%;
left: 50%;
display: inline-block;
width: 16rpx;
height: 16rpx;
line-height: 50rpx;
background: #1892ff;
border-radius: 50%;
transform: translate(-50%, -50%);
}
.range-slider-value {
width: 54rpx;
font-size: 24rpx;
font-weight: 400;
line-height: 34rpx;
color: rgb(128 128 128 / 100%);
}
/* 暂无职位推荐 */
.nothing {
/* position: absolute; */
/* top: 60%; */
width: 100%;
margin-top: 150rpx;
/* z-index: 3; */
/* transform: translateY(-50%); */
background: #ffffff;
}
.nothing .nothing-back {
display: block;
width: 406rpx;
height: 256rpx;
margin: 0 auto;
margin-bottom: 28rpx;
/* margin-top: 428rpx; */
}
.nothing .nothing-text {
margin-bottom: 80rpx;
font-size: 28rpx;
font-weight: 400;
line-height: 40rpx;
color: rgb(128 128 128 / 100%);
text-align: center;
}
.nothing .nothing-btn {
box-sizing: border-box;
display: flex;
width: 220rpx;
height: 68rpx;
margin: 0 auto;
border: 1px solid rgb(24 146 255 / 100%);
border-radius: 8rpx;
}
.nothing .nothing-btn image {
width: 40rpx;
height: 40rpx;
margin: 14rpx 10rpx 14rpx 26rpx;
}
.nothing .nothing-btn text {
display: inline-block;
flex: 1;
font-size: 28rpx;
font-weight: 400;
line-height: 68rpx;
color: rgb(24 146 255 / 100%);
vertical-align: middle;
}
.margin-8 {
margin: 0 8rpx;
}
</style>
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
</view> </view>
<input <input
class="my-info-form" class="my-info-form"
v-model="userInfo.realName" v-model="userInfo.name"
placeholder="请输入" placeholder="请输入"
placeholder-class="placeholder-style" placeholder-class="placeholder-style"
/> />
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
<text>性别</text> <text>性别</text>
</view> </view>
<view class="gender radios"> <view class="gender radios">
<wd-radio-group v-model="userInfo.gender" shape="dot" inline> <wd-radio-group v-model="userInfo.sex" shape="dot" inline>
<wd-radio :value="1"></wd-radio> <wd-radio :value="1"></wd-radio>
<wd-radio :value="2"></wd-radio> <wd-radio :value="2"></wd-radio>
</wd-radio-group> </wd-radio-group>
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
<text>出生年月</text> <text>出生年月</text>
</view> </view>
<wd-datetime-picker <wd-datetime-picker
v-model="userInfo.birthDate" v-model="userInfo.birthday"
:maxDate="new Date().getTime()" :maxDate="new Date().getTime()"
:minDate="new Date('1950/01/01').getTime()" :minDate="new Date('1950/01/01').getTime()"
type="date" type="date"
...@@ -63,8 +63,8 @@ ...@@ -63,8 +63,8 @@
style="flex: 1" style="flex: 1"
> >
<div style="flex: 1" class="flex-between"> <div style="flex: 1" class="flex-between">
<view :class="['my-info-form', !userInfo.birthDate ? 'placeholder-style' : '']"> <view :class="['my-info-form', !userInfo.birthday ? 'placeholder-style' : '']">
{{ userInfo.birthDate ? dateformat(userInfo.birthDate) : "选择出生年月" }}</view {{ userInfo.birthday ? dateformat(userInfo.birthday) : "选择出生年月" }}</view
> >
<view class="arrow"></view> <view class="arrow"></view>
</div> </div>
...@@ -75,22 +75,36 @@ ...@@ -75,22 +75,36 @@
<view class="my-info-title label"> <view class="my-info-title label">
<text>身份</text> <text>身份</text>
</view> </view>
<wd-radio-group v-model="userInfo.identityType" shape="dot" inline> <wd-checkbox-group v-model="userInfo.identityTypes" shape="dot" inline>
<wd-radio :value="v.code" :key="v.code" v-for="v in identityTypeOpstion">{{ v.text }}</wd-radio> <wd-checkbox :modelValue="v.code" :key="v.code" v-for="v in identityTypeOpstion">{{ v.text }}</wd-checkbox >
</wd-radio-group> </wd-checkbox-group>
</view> </view>
<!-- 工作年限 --> <!-- 户籍地* -->
<view class="my-info-list flex-column" v-if="userInfo.identityCode != 0"> <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-column">
<view class="my-info-title label"> <view class="my-info-title label">
<!-- <text>{{identityCode == 0 ? '参加实习时间' : '参加工作时间'}}</text> --> <text>户籍详细地址</text>
<text>工作年限</text>
</view> </view>
<input <input
class="my-info-form" class="my-info-form"
v-model="userInfo.workExperience" v-model="userInfo.residenceAddress"
placeholder="请输入工作年限" placeholder="请输入户籍详细地址"
placeholder-class="placeholder-style"
/>
</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-column">
<view class="my-info-title label">
<text>常驻详细地址</text>
</view>
<input
class="my-info-form"
v-model="userInfo.birthAddress"
placeholder="请输入常驻详细地址"
placeholder-class="placeholder-style" placeholder-class="placeholder-style"
type="number"
/> />
</view> </view>
...@@ -103,7 +117,7 @@ ...@@ -103,7 +117,7 @@
:columns="educationOpstion" :columns="educationOpstion"
label-key="text" label-key="text"
value-key="code" value-key="code"
v-model="userInfo.educationLevel" v-model="userInfo.education"
use-default-slot use-default-slot
@confirm="changeEducationLevel" @confirm="changeEducationLevel"
style="flex: 1" style="flex: 1"
...@@ -118,35 +132,142 @@ ...@@ -118,35 +132,142 @@
<!-- <image class="my-info-icon" src="{{ossImgPrefix}}/my/right.png"></image> --> <!-- <image class="my-info-icon" src="{{ossImgPrefix}}/my/right.png"></image> -->
<view class="arrow"></view> <view class="arrow"></view>
</view> </view>
<!-- 手机 --> <!-- 专业 -->
<view class="my-info-list flex-column"> <view class="my-info-list flex-column">
<view class="my-info-title label"> <view class="my-info-title label">
<text>手机</text> <text>专业</text>
</view> </view>
<input <input
class="my-info-form" class="my-info-form"
v-model="userInfo.phone" v-model="userInfo.major"
maxlength="11" placeholder="请输入专业名称"
placeholder-class="placeholder-style"
/>
</view>
<!-- 专业技术职称 -->
<view class="two-rows">
<text class="title">专业技术职称</text>
<view class="bottom-row">
<view class="bottom-one">
<input
class="my-info-form"
v-model="userInfo.positionalTitleOne"
placeholder="请填写专业技术职称"
placeholder-class="placeholder-style"
/>
<img class="write-icon" src="@/static/image/user/write.png" />
</view>
<view class="bottom-one">
<wd-picker
:columns="levelOpstion"
label-key="text"
value-key="code"
v-model="userInfo.positionalTitleTwo"
use-default-slot
@confirm="changeEducationLevel2"
style="flex: 1"
>
<view class="picker">
<view :class="['my-info-form', userInfo.positionalTitleTwo ? '' : 'placeholder-style']">{{
userInfo.positionalTitleTwo || "请选择职业资格等级"
}}</view>
</view>
</wd-picker>
<view class="arrow"></view>
</view>
</view>
</view>
<!-- 职业资格/技能等级证书 -->
<view class="two-rows">
<text class="title">职业资格/技能等级证书</text>
<view class="bottom-row">
<view class="bottom-one">
<input
class="my-info-form"
v-model="userInfo.professionalCertificatesOne"
placeholder="请填写职业资格"
placeholder-class="placeholder-style"
/>
<img class="write-icon" src="@/static/image/user/write.png" />
</view>
<view class="bottom-one">
<wd-picker
:columns="levelOpstion"
label-key="text"
value-key="code"
v-model="userInfo.professionalCertificatesTwo"
use-default-slot
@confirm="changeEducationLevel3"
style="flex: 1"
>
<view class="picker">
<view :class="['my-info-form', userInfo.professionalCertificatesTwo ? '' : 'placeholder-style']">{{
userInfo.professionalCertificatesTwo || "请选择职业资格等级"
}}</view>
</view>
</wd-picker>
<view class="arrow"></view>
</view>
</view>
</view>
<!-- 特种作业证 -->
<view class="my-info-list flex-column">
<view class="my-info-title label">
<text>特种作业证</text>
</view>
<input
class="my-info-form"
v-model="userInfo.specialCertificates"
placeholder="请输入专业技术职称名称"
placeholder-class="placeholder-style"
/>
</view>
<!-- 工作年限 -->
<view class="my-info-list flex-column" v-if="userInfo.identityCode != 0">
<view class="my-info-title label">
<!-- <text>{{identityCode == 0 ? '参加实习时间' : '参加工作时间'}}</text> -->
<text>工作年限</text>
</view>
<input
class="my-info-form"
v-model="userInfo.workAge"
placeholder="请输入工作年限"
placeholder-class="placeholder-style"
type="number" type="number"
placeholder="请填写手机号" />
</view>
<view class="tips">
*注:以下用户证件信息及联系方式将进行严格保密。
</view>
<!-- 身份证号 -->
<view class="my-info-list flex-column">
<view class="my-info-title label">
<text>身份证号</text>
</view>
<input
class="my-info-form"
v-model="userInfo.citizenId"
type="text"
placeholder="请输入身份证号码"
placeholder-class="placeholder-style" placeholder-class="placeholder-style"
/> />
</view> </view>
<!-- 邮箱 --> <!-- 手机 -->
<view class="my-info-list flex-column"> <view class="my-info-list flex-column">
<view class="my-info-title label"> <view class="my-info-title label">
<text>邮箱</text> <text>手机</text>
</view> </view>
<input <input
cursor-spacing="30"
class="my-info-form" class="my-info-form"
v-model="userInfo.email" v-model="userInfo.phone"
placeholder="请填写邮箱" maxlength="11"
type="number"
placeholder="请填写手机号"
placeholder-class="placeholder-style" placeholder-class="placeholder-style"
/> />
</view> </view>
<!-- 邮箱 --> <!-- 邮箱 -->
<view class="my-info-list flex-column" style="opacity: 0"> <view class="my-info-list flex-column">
<view class="my-info-title label"> <view class="my-info-title label">
<text>邮箱</text> <text>邮箱</text>
</view> </view>
...@@ -172,6 +293,18 @@ import { getEumData, navigateTo } from "@/utils/utils.js"; ...@@ -172,6 +293,18 @@ import { getEumData, navigateTo } from "@/utils/utils.js";
import { uploadFiles } from "@/utils/fileUpload.js"; import { uploadFiles } from "@/utils/fileUpload.js";
import evn from "@/utils/config.js"; import evn from "@/utils/config.js";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { useColPickerData } from '@/hooks/useColPickerData'
const { colPickerData, findChildrenByCode } = useColPickerData()
const value = ref([])
const area = ref([
colPickerData.map((item) => {
return {
value: item.value,
label: item.text
}
})
])
const value2 = ref([])
let verified = ref(0); let verified = ref(0);
const cropperFlag = 0; const cropperFlag = 0;
const identityCode = 0; const identityCode = 0;
...@@ -179,14 +312,14 @@ const userInfo = ref({ ...@@ -179,14 +312,14 @@ const userInfo = ref({
userId: "", userId: "",
username: "", username: "",
avatarPath: "user/default-avatar.png", avatarPath: "user/default-avatar.png",
realName: "", name: "",
gender: 2, sex: 2,
phone: "", phone: "",
email: "", email: "",
birthDate: "", birthday: "",
identityType: 2, identityTypes: [],
educationLevel: 6, education: 6,
workExperience: null, workAge: null,
personalTags: null, personalTags: null,
verified: 1, verified: 1,
loginTime: "", loginTime: "",
...@@ -195,11 +328,37 @@ const userInfo = ref({ ...@@ -195,11 +328,37 @@ const userInfo = ref({
user: null user: null
}); });
onMounted(() => { onMounted(() => {
getEumDataFn().then(res => { getEumDataFn()
getData(); getData();
});
}); });
const columnChange = ({ selectedItem, resolve, finish }) => {
const areaData = findChildrenByCode(colPickerData, selectedItem.value)
if (areaData && areaData.length) {
resolve(
areaData.map((item) => {
return {
value: item.value,
label: item.text
}
})
)
} else {
finish()
}
}
let residenceCodes = ref('');
function handleConfirm({ value }) {
console.log(value)
residenceCodes.value = value.join()
}
let birthCodes = ref('');
function handleConfirm2({ value }) {
console.log(value)
birthCodes.value = value.join()
}
// 页面跳转 // 页面跳转
const toIdcard = () => { const toIdcard = () => {
uni.navigateTo({ uni.navigateTo({
...@@ -245,26 +404,37 @@ getEumData("EnumIdentityType").then(res => { ...@@ -245,26 +404,37 @@ getEumData("EnumIdentityType").then(res => {
res.forEach(v => { res.forEach(v => {
v.code = v.code * 1; v.code = v.code * 1;
}); });
identityTypeOpstion.value = res; identityTypeOpstion.value = res;
console.log('identityTypeOpstionidentityTypeOpstion',identityTypeOpstion.value );
}); });
/* 学历 */ /* 学历 */
const educationText = ref(""); const educationText = ref("");
const educationOpstion = ref([]); const educationOpstion = ref([]);
const levelOpstion = ref([]);
const getEumDataFn = () => { const getEumDataFn = () => {
return new Promise(resolve => { getEumData("EnumEducation").then(res => {
getEumData("EnumEducation").then(res => { res.forEach(v => {
res.forEach(v => { v.code = v.code * 1;
v.code = v.code * 1; });
}); educationOpstion.value = res;
educationOpstion.value = res; });
resolve(); getEumData("EnumCertificatesLevel").then(res => {
}); res.forEach(v => {
}); v.code = v.code * 1;
});
levelOpstion.value = res;
});
}; };
const changeEducationLevel = e => { const changeEducationLevel = e => {
educationText.value = e.selectedItems.text; educationText.value = e.selectedItems.text;
}; };
const changeEducationLevel2 = e => {
userInfo.value.positionalTitleTwo = e.selectedItems.text;
};
const changeEducationLevel3 = e => {
userInfo.value.professionalCertificatesTwo = e.selectedItems.text;
};
const getData = async () => { const getData = async () => {
const { data, code } = await getLoginUserApi(); const { data, code } = await getLoginUserApi();
...@@ -282,19 +452,28 @@ const getData = async () => { ...@@ -282,19 +452,28 @@ const getData = async () => {
/* 提交 */ /* 提交 */
const submit = () => { const submit = () => {
console.log(userInfo); console.log(userInfo);
const { avatarPath, realName, gender, phone, email, birthDate, identityType, educationLevel, workExperience, personalTags } = 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({ saveUserInfoApi({
avatarPath, residenceCodes: residenceCodes.value,
realName, birthCodes:birthCodes.value,
gender, residenceAddress,
phone, birthAddress,
email, major,
birthDate, positionalTitle: positionalTitleOne + '-' + positionalTitleTwo,
identityType, professionalCertificates: professionalCertificatesOne + '-' + professionalCertificatesTwo,
educationLevel, citizenId,
workExperience, specialCertificates,
personalTags avatarPath,
name,
sex,
phone,
email,
birthday,
identityTypes:identityTypes.join(),
education,
workAge,
personalTags
}).then(res => { }).then(res => {
if (res.code == 200) { if (res.code == 200) {
uni.showToast({ uni.showToast({
...@@ -311,13 +490,33 @@ const submit = () => { ...@@ -311,13 +490,33 @@ const submit = () => {
}); });
}; };
</script> </script>
<style lang="scss" scoped>
.col-picker{
border-bottom: 1rpx solid #e9e9e9;
padding: 32rpx 0;
::v-deep .wd-col-picker__cell{
padding: 0;
}
::v-deep .wd-col-picker__label{
color: #77818f;
font-size: 24rpx;
margin: 0;
min-width:200rpx !important;
max-width:200rpx !important;
}
::v-deep .wd-col-picker__arrow{
font-size: 32rpx;
color: #000;
}
}
</style>
<style lang="scss" scoped> <style lang="scss" scoped>
/* pages/my-resume/my-resume.wxss */ /* pages/my-resume/my-resume.wxss */
.essential-information { .essential-information {
box-sizing: border-box; box-sizing: border-box;
height: 100%;
background: #ffffff; background: #ffffff;
padding-bottom:calc(env(safe-area-inset-bottom) + 160rpx)
} }
.real-name-authentication { .real-name-authentication {
padding: 12rpx 20rpx; padding: 12rpx 20rpx;
...@@ -564,6 +763,11 @@ const submit = () => { ...@@ -564,6 +763,11 @@ const submit = () => {
} }
.my-info { .my-info {
padding: 0 32rpx; padding: 0 32rpx;
.tips{
font-size: 24rpx;
color: #CCCCCC;
margin-top:24rpx ;
}
.my-info-list { .my-info-list {
position: relative; position: relative;
display: flex; display: flex;
...@@ -635,6 +839,43 @@ const submit = () => { ...@@ -635,6 +839,43 @@ const submit = () => {
} }
} }
} }
.two-rows{
display: flex;
flex-direction: column;
padding-top: 24rpx;
.title{
font-size: 24rpx;
color: #77818F;
font-family: 苹方-;
}
.bottom-row{
display: flex;
align-items: center;
justify-content: space-between;
.bottom-one{
display: flex;
justify-content: space-between;
align-items: center;
width: 45%;
border-bottom: 1rpx solid #e9e9e9;
height: 100rpx;
.write-icon{
width: 28rpx;
height: 28rpx;
}
.placeholder-style {
font-size: 28rpx;
font-weight: normal;
line-height: 36rpx;
color: #77818f;
}
.my-info-form {
flex: 1;
padding: 0;
}
}
}
}
.upload-avatar { .upload-avatar {
.avatar { .avatar {
width: 56rpx; width: 56rpx;
...@@ -656,5 +897,6 @@ const submit = () => { ...@@ -656,5 +897,6 @@ const submit = () => {
padding-bottom: env(safe-area-inset-bottom); padding-bottom: env(safe-area-inset-bottom);
text-align: center; text-align: center;
border-top: 1rpx solid #ebebeb; border-top: 1rpx solid #ebebeb;
background-color: #ffffff;
} }
</style> </style>
...@@ -15,6 +15,53 @@ ...@@ -15,6 +15,53 @@
<image v-if="resumeData.avatarPath" class="avatar" :src="evn.APP_IMAGE_BASE_API + resumeData.avatarPath" 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 v-else class="avatar" src="@/static/image/user/default-avatar.png" mode="" />
</view> </view>
<!-- 个人信息 -->
<view class="basics">
<text class="gradient-title">个人信息</text>
<view class="basics-top">
<view class="item" >
<img v-show="false" src="@/static/image/user/man.png" alt="">
<img v-show="true" src="@/static/image/user/woman.png" alt="">
<text></text>
</view>
<view class="item">
<img src="@/static/image/user/birth.png" alt="">
<text>1998.05.13</text>
</view>
<view class="item">
<img src="@/static/image/user/bag.png" alt="">
<text>3年</text>
</view>
</view>
<view class="information">
<text class="label">身份</text>
<text class="value">应届生 | 吸毒人员</text>
</view>
<view class="information">
<text class="label">专业</text>
<text class="value">网络工程信息技术</text>
</view>
<view class="information">
<text class="label">专业技术职称</text>
<text class="value">网络工程师 · 中级</text>
</view>
<view class="information">
<text class="label">职业资格/技能等级证书</text>
<text class="value">网络工程师资格证 · 中级</text>
</view>
<view class="information">
<text class="label">特种作业证</text>
<text class="value">高空作业证</text>
</view>
<view class="information">
<text class="label">户籍地</text>
<text class="value">贵州省贵阳市观山湖区高科一号C栋8楼</text>
</view>
<view class="information">
<text class="label">常住地</text>
<text class="value">贵州省贵阳市观山湖区高科一号C栋8楼</text>
</view>
</view>
<!-- 求职状态 --> <!-- 求职状态 -->
<view class="state"> <view class="state">
<text class="gradient-title">求职状态</text> <text class="gradient-title">求职状态</text>
...@@ -194,10 +241,10 @@ function calculateAge(birthday) { ...@@ -194,10 +241,10 @@ function calculateAge(birthday) {
} }
// 数据回显 // 数据回显
const getUserResume = () => { const getUserResume = () => {
getUserResumeApi().then(res => { getUserResumeApi().then(async res => {
// console.log(res); // console.log(res);
const { const {
personalAdvantage, personalAdvantages,
preferredPosition, preferredPosition,
maxSalary, maxSalary,
minSalary, minSalary,
...@@ -209,16 +256,17 @@ const getUserResume = () => { ...@@ -209,16 +256,17 @@ const getUserResume = () => {
preferredDistrictCode, preferredDistrictCode,
workExperience, workExperience,
educationExperience, educationExperience,
preferredPositionId preferredPositionId,
currentStatus
} = res.data; } = res.data;
resumeData.jobStatusText = await getEnumText("EnumUserJobStatus", currentStatus);
resumeData.preferredCityName = preferredCityName; resumeData.preferredCityName = preferredCityName;
resumeData.citySelectedItems = [ resumeData.citySelectedItems = [
{ name: preferredProvinceName, code: preferredProvinceCode }, { name: preferredProvinceName, code: preferredProvinceCode },
{ name: preferredCityName, code: preferredCityCode }, { name: preferredCityName, code: preferredCityCode },
{ name: preferredDistrictName, code: preferredDistrictCode } { name: preferredDistrictName, code: preferredDistrictCode }
]; ];
resumeData.personalAdvantage = personalAdvantage; // 求职状态回 resumeData.personalAdvantage = personalAdvantages; // 求职状态回
resumeData.preferredPosition = preferredPosition.split(",").join("|"); resumeData.preferredPosition = preferredPosition.split(",").join("|");
resumeData.preferredPositionId = preferredPositionId.split(","); resumeData.preferredPositionId = preferredPositionId.split(",");
resumeData.maxSalary = maxSalary && maxSalary / 1000 + "k"; resumeData.maxSalary = maxSalary && maxSalary / 1000 + "k";
...@@ -229,7 +277,7 @@ const getUserResume = () => { ...@@ -229,7 +277,7 @@ const getUserResume = () => {
// 获取用户基本信息 // 获取用户基本信息
getLoginUserApi().then(async res => { getLoginUserApi().then(async res => {
if (res.code === 200) { if (res.code === 200) {
const { workExperience, educationLevel, realName, username, avatarPath, birthDate, jobStatus } = res.data; const { workAge, educationLevel, name, username, avatarPath, birthday, jobStatus } = res.data;
/* this.setData({ /* this.setData({
realName, realName,
workExperienceYear: workExperience, workExperienceYear: workExperience,
...@@ -239,13 +287,12 @@ const getUserResume = () => { ...@@ -239,13 +287,12 @@ const getUserResume = () => {
avatarPath, avatarPath,
age: calculateAge(birthDate) age: calculateAge(birthDate)
}); */ }); */
resumeData.realName = realName; resumeData.realName = name;
resumeData.workExperienceYear = workExperience; resumeData.workExperienceYear = workAge;
resumeData.educationLevel = await getEnumText("EnumEducation", educationLevel); resumeData.educationLevel = await getEnumText("EnumEducation", educationLevel);
resumeData.jobStatusText = await getEnumText("EnumUserJobStatus", jobStatus);
resumeData.username = username; resumeData.username = username;
resumeData.avatarPath = avatarPath; resumeData.avatarPath = avatarPath;
resumeData.age = calculateAge(birthDate); resumeData.age = calculateAge(birthday);
} }
}); });
}; };
...@@ -351,6 +398,49 @@ const deleteItemTwo = index => { ...@@ -351,6 +398,49 @@ const deleteItemTwo = index => {
border-radius: 50%; border-radius: 50%;
} }
} }
.basics {
padding: 0 32rpx 32rpx;
margin-top: 32rpx;
border-bottom: 16rpx solid #f3f4f8;
.basics-top{
display: flex;
align-items: center;
.item{
display: flex;
align-items: center;
margin-right: 96rpx;
img{
width: 28rpx;
height: 28rpx;
margin-right: 16rpx;
}
text{
font-size: 24rpx;
color: #1B2026;
}
}
}
.information{
.label{
font-size: 24rpx;
color: #77818F;
margin-right: 16rpx;
}
.value{
font-size: 24rpx;
color: #1B2026;
}
}
view {
margin-top: 16rpx;
font-size: 24rpx;
line-height: 36rpx;
color: #1b2026;
}
.arrow {
border-color: #1b2026;
}
}
.state { .state {
padding: 0 32rpx 32rpx; padding: 0 32rpx 32rpx;
margin-top: 32rpx; margin-top: 32rpx;
......
...@@ -66,6 +66,15 @@ ...@@ -66,6 +66,15 @@
<view class="arrow"></view> <view class="arrow"></view>
</view> </view>
</wd-col-picker> </wd-col-picker>
<view class="my-info-list pd-b-38">
<view class="my-info-title label">
<text>是否需要提供住宿</text>
</view>
<wd-radio-group v-model="accommodation" shape="dot" inline>
<wd-radio :value="1" ></wd-radio >
<wd-radio :value="0" ></wd-radio >
</wd-radio-group>
</view>
</view> </view>
<view class="btn-wrapper"> <view class="btn-wrapper">
<button class="save-btn" @tap="submit">保存</button> <button class="save-btn" @tap="submit">保存</button>
...@@ -83,6 +92,7 @@ import _ from "lodash"; ...@@ -83,6 +92,7 @@ import _ from "lodash";
const value = ref([]); const value = ref([]);
const mValue = ref([]); const mValue = ref([]);
const columns = ref([]); const columns = ref([]);
const salaryText = ref("");
onLoad(options => { onLoad(options => {
if (options.data) { if (options.data) {
...@@ -159,7 +169,7 @@ const handleConfirmCity = ({ selectedItems }) => { ...@@ -159,7 +169,7 @@ const handleConfirmCity = ({ selectedItems }) => {
/* 薪水 */ /* 薪水 */
const salaryOpstion = ref([]); const salaryOpstion = ref([]);
const salaryValue = ref([]); const salaryValue = ref([]);
const salaryText = ref(""); const accommodation = ref(1);
let salarySelectedItems = []; let salarySelectedItems = [];
const initSalaryOpstion = () => { const initSalaryOpstion = () => {
let temp = []; let temp = [];
...@@ -206,7 +216,8 @@ const submit = () => { ...@@ -206,7 +216,8 @@ const submit = () => {
preferredPosition: "", preferredPosition: "",
preferredProvinceCode: "", preferredProvinceCode: "",
preferredProvinceName: "", preferredProvinceName: "",
preferredPositionId: "" preferredPositionId: "",
needAccommodation:""
}; };
const [p, c, d] = citySelectedItems; const [p, c, d] = citySelectedItems;
params.preferredPosition = mValue.value.map(v => v.name).join(","); params.preferredPosition = mValue.value.map(v => v.name).join(",");
...@@ -219,6 +230,7 @@ const submit = () => { ...@@ -219,6 +230,7 @@ const submit = () => {
params.preferredCityName = c.name; params.preferredCityName = c.name;
params.preferredDistrictCode = d.code; params.preferredDistrictCode = d.code;
params.preferredDistrictName = d.name; params.preferredDistrictName = d.name;
params.needAccommodation = accommodation.value * 1;
saveJobIntentionApi(params).then(res => { saveJobIntentionApi(params).then(res => {
console.log(res); console.log(res);
if (res.code == 200) { if (res.code == 200) {
...@@ -242,6 +254,78 @@ const submit = () => { ...@@ -242,6 +254,78 @@ const submit = () => {
padding: 0 32rpx; padding: 0 32rpx;
background-color: #ffffff; background-color: #ffffff;
} }
.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;
/* height: 96rpx;
line-height: 96rpx; */
overflow: hidden;
background: #ffffff;
border-bottom: 1rpx solid #e9e9e9;
/* picker {
flex: 1;
} */
.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 {
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 { .container .header {
padding: 30rpx 0; padding: 30rpx 0;
} }
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<view class="input-form"> <view class="input-form">
<view class="item"> <view class="item">
<view class="label">姓名</view> <view class="label">姓名</view>
<input type="text" :value="data.realName" placeholder="请输入姓名" /> <input type="text" v-model="data.realName" placeholder="请输入姓名" />
</view> </view>
<view class="item"> <view class="item">
<view class="label">身份证号</view> <view class="label">身份证号</view>
...@@ -73,6 +73,7 @@ const uploadeImage = type => { ...@@ -73,6 +73,7 @@ const uploadeImage = type => {
}; };
const submit = () => { const submit = () => {
let release = true; let release = true;
console.log("打印", data);
for (let i in data) { for (let i in data) {
if (!data[i]) { if (!data[i]) {
release = false; release = false;
......
import axios from "axios"; import axios from "axios";
import { getToken } from "./token"; import { getToken } from "./token";
const baseURL = "https://lygsh-api.wjzpgz.com/"; // const baseURL = "https://lygsh-api.wjzpgz.com/";
// const baseURL = "http://192.168.11.181:8080/"; const baseURL = "http://192.168.11.48:8080/";
// 创建一个 axios 实例 // 创建一个 axios 实例
const instance = axios.create({ const instance = axios.create({
baseURL, // 设置基础 URL baseURL, // 设置基础 URL
......
...@@ -960,7 +960,7 @@ ...@@ -960,7 +960,7 @@
resolved "https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz" resolved "https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz"
integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
"@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": "@babel/runtime@^7.17.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4":
version "7.24.7" version "7.24.7"
resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.24.7.tgz" resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.24.7.tgz"
integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw== integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==
...@@ -2276,6 +2276,11 @@ ...@@ -2276,6 +2276,11 @@
dependencies: dependencies:
"@types/yargs-parser" "*" "@types/yargs-parser" "*"
"@vant/area-data@^2.0.0":
version "2.0.0"
resolved "https://registry.npmmirror.com/@vant/area-data/-/area-data-2.0.0.tgz"
integrity sha512-zgP4AA8z09S9QTNgVCCHo9cHjcybrv22RJDYPjuCkecn4SB98T5EoPQh2TwqbQXmUhbaOGgiZGy3OUaUxnY7qg==
"@vitejs/plugin-legacy@^4.0.3", "@vitejs/plugin-legacy@4.1.1": "@vitejs/plugin-legacy@^4.0.3", "@vitejs/plugin-legacy@4.1.1":
version "4.1.1" version "4.1.1"
resolved "https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-4.1.1.tgz" resolved "https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-4.1.1.tgz"
...@@ -3172,6 +3177,11 @@ cookie@0.6.0: ...@@ -3172,6 +3177,11 @@ cookie@0.6.0:
resolved "https://registry.npmmirror.com/cookie/-/cookie-0.6.0.tgz" resolved "https://registry.npmmirror.com/cookie/-/cookie-0.6.0.tgz"
integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
copy-text-to-clipboard@^3.0.1:
version "3.2.0"
resolved "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz"
integrity sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==
core-js-compat@^3.31.0, core-js-compat@^3.36.1: core-js-compat@^3.31.0, core-js-compat@^3.36.1:
version "3.37.1" version "3.37.1"
resolved "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.37.1.tgz" resolved "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.37.1.tgz"
...@@ -3179,7 +3189,7 @@ core-js-compat@^3.31.0, core-js-compat@^3.36.1: ...@@ -3179,7 +3189,7 @@ core-js-compat@^3.31.0, core-js-compat@^3.36.1:
dependencies: dependencies:
browserslist "^4.23.0" browserslist "^4.23.0"
core-js@^3.31.1, core-js@^3.4.1: core-js@^3.11.0, core-js@^3.31.1, core-js@^3.4.1:
version "3.37.1" version "3.37.1"
resolved "https://registry.npmmirror.com/core-js/-/core-js-3.37.1.tgz" resolved "https://registry.npmmirror.com/core-js/-/core-js-3.37.1.tgz"
integrity sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw== integrity sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==
...@@ -5212,6 +5222,11 @@ muggle-string@^0.3.1: ...@@ -5212,6 +5222,11 @@ muggle-string@^0.3.1:
resolved "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.3.1.tgz" resolved "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.3.1.tgz"
integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg== integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==
mutation-observer@^1.0.3:
version "1.0.3"
resolved "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz"
integrity sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA==
mute-stream@0.0.8: mute-stream@0.0.8:
version "0.0.8" version "0.0.8"
resolved "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz" resolved "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz"
...@@ -6774,6 +6789,16 @@ vary@~1.1.2: ...@@ -6774,6 +6789,16 @@ vary@~1.1.2:
resolved "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz" resolved "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz"
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
vconsole@^3.15.1:
version "3.15.1"
resolved "https://registry.npmmirror.com/vconsole/-/vconsole-3.15.1.tgz"
integrity sha512-KH8XLdrq9T5YHJO/ixrjivHfmF2PC2CdVoK6RWZB4yftMykYIaXY1mxZYAic70vADM54kpMQF+dYmvl5NRNy1g==
dependencies:
"@babel/runtime" "^7.17.2"
copy-text-to-clipboard "^3.0.1"
core-js "^3.11.0"
mutation-observer "^1.0.3"
vite@^4.0.0, "vite@^4.0.0 || ^5.0.0", vite@4.3.5: vite@^4.0.0, "vite@^4.0.0 || ^5.0.0", vite@4.3.5:
version "4.3.5" version "4.3.5"
resolved "https://registry.npmmirror.com/vite/-/vite-4.3.5.tgz" resolved "https://registry.npmmirror.com/vite/-/vite-4.3.5.tgz"
...@@ -6974,10 +6999,10 @@ xhr@^2.0.1: ...@@ -6974,10 +6999,10 @@ xhr@^2.0.1:
parse-headers "^2.0.0" parse-headers "^2.0.0"
xtend "^4.0.0" xtend "^4.0.0"
xinhua-sdk@*: xinhua-sdk@*, xinhua-sdk@^1.8.0:
version "1.6.0" version "1.9.6"
resolved "https://registry.npmmirror.com/xinhua-sdk/-/xinhua-sdk-1.6.0.tgz" resolved "https://registry.npmmirror.com/xinhua-sdk/-/xinhua-sdk-1.9.6.tgz"
integrity sha512-N30rTu91PZjUvPeNj46Z2CS5QvjRPe1ckyTFejj2Md5ZEIcpd7ldCOlmgGJiP+0n3gYjzFQWd6YubXMWI5rFkA== integrity sha512-Q+OBXlqyB5uMYO0fVNq767SpFMZiu19bi/mL19W+aAFPfSj22aOE0bzngT/eG4DffcASozv+qddjikrr0z+Dgg==
xml-name-validator@^3.0.0: xml-name-validator@^3.0.0:
version "3.0.0" version "3.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