Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mp-enterprise-people-recruitment-h5
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
彭佳妮(贵阳日报)
mp-enterprise-people-recruitment-h5
Commits
947af3a4
Commit
947af3a4
authored
Nov 01, 2024
by
石建新(贵阳日报)
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of…
Merge branch 'master' of
https://codeup.aliyun.com/62eb413b37e2c6c98549e0c9/gsh-hr-department/mp-enterprise-people-recruitment-h5
parents
c7c6ca82
2c4954cc
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
187 additions
and
26 deletions
+187
-26
common.js
src/api/common.js
+2
-0
index.vue
src/components/filter/index.vue
+2
-2
selectbox.vue
src/components/form/selectbox.vue
+1
-1
index.vue
src/components/jobSeekersCard/index.vue
+1
-1
index.vue
src/pages/recommend/deliveryManagement/index.vue
+1
-1
index.vue
src/pages/recommend/index.vue
+2
-0
step1.vue
src/pages/recommend/releasePostion/step1.vue
+4
-5
step2.vue
src/pages/recommend/releasePostion/step2.vue
+4
-3
step3.vue
src/pages/recommend/releasePostion/step3.vue
+4
-2
step4.vue
src/pages/recommend/releasePostion/step4.vue
+1
-4
step5.vue
src/pages/recommend/releasePostion/step5.vue
+1
-2
index.vue
src/pages/user/resume/index.vue
+155
-5
birth.png
src/static/image/user/birth.png
+0
-0
man.png
src/static/image/user/man.png
+0
-0
woman.png
src/static/image/user/woman.png
+0
-0
utils.js
src/utils/utils.js
+9
-0
No files found.
src/api/common.js
View file @
947af3a4
...
...
@@ -11,3 +11,5 @@ export const dictJobTypeApi = params => instance.post("/dict/dictJobType/getTree
export
const
getBannerListApi
=
type
=>
instance
.
post
(
`/banner/list/
${
type
}
`
);
//更具code码获取城市名称
export
const
getCityNameByCodeApi
=
code
=>
instance
.
post
(
`/dict/dictProvinceCityDistrict/find/city/
${
code
}
`
);
//更具code码获取地区名称
export
const
getDistNameByCodeApi
=
code
=>
instance
.
post
(
`/dict/dictProvinceCityDistrict/find/dist/
${
code
}
`
);
src/components/filter/index.vue
View file @
947af3a4
...
...
@@ -185,11 +185,11 @@ const onCancel = () => {
// 1. 确认 接收数据
const
onConfirm
=
()
=>
{
const
[
minAge
,
maxAge
]
=
age
.
value
;
const
{
min
:
minWork
Year
,
max
:
maxWorkYear
}
=
workYearList
.
value
.
find
(
v
=>
v
.
active
)
||
{
min
:
0
,
max
:
100
};
const
{
min
:
minWork
Age
,
max
:
maxWorkAge
}
=
workYearList
.
value
.
find
(
v
=>
v
.
active
)
||
{
min
:
0
,
max
:
100
};
const
education
=
educationList
.
value
.
find
(
v
=>
v
.
active
)?.
code
;
const
jobType
=
dictJobTypeList
.
value
.
find
(
v
=>
v
.
active
)?.
id
;
const
sex
=
genderList
.
value
.
find
(
v
=>
v
.
active
)?.
code
;
emit
(
"confirm"
,
{
minAge
,
maxAge
,
minWork
Year
,
maxWorkYear
,
education
,
jobType
,
sex
});
emit
(
"confirm"
,
{
minAge
,
maxAge
,
minWork
Age
,
maxWorkAge
,
education
,
jobType
,
sex
});
};
</
script
>
...
...
src/components/form/selectbox.vue
View file @
947af3a4
...
...
@@ -62,7 +62,7 @@ const onClickItem = e => {
emit
(
"update:modelValue"
,
value
);
}
emit
(
"update"
);
emit
(
"update"
,
value
);
};
</
script
>
...
...
src/components/jobSeekersCard/index.vue
View file @
947af3a4
...
...
@@ -5,7 +5,7 @@
<view
class=
"text-wrap"
>
<view
class=
"name"
>
{{
data
.
name
||
"名字"
}}
<
!--
<text>
· 今日活跃
</text>
--
>
<
text>
{{
data
.
positionName
||
''
}}
</text
>
</view>
<view
class=
"other"
>
{{
data
.
workAge
}}
年 |
{{
educationLevelText
}}
|
{{
data
.
minSalary
+
"~"
+
data
.
maxSalary
}}
...
...
src/pages/recommend/deliveryManagement/index.vue
View file @
947af3a4
...
...
@@ -78,7 +78,7 @@ const list = ref([]);
let
flag
=
true
;
const
getApplicationList
=
()
=>
{
if
(
!
flag
)
return
;
uni
.
showLoading
({
title
:
"加载中..."
});
uni
.
showLoading
({
title
:
"加载中..."
,
mask
:
true
});
getApplicationListApi
(
apiParams
).
then
(
res
=>
{
if
(
res
.
data
?.
length
&&
flag
)
{
list
.
value
.
push
(...
res
.
data
);
...
...
src/pages/recommend/index.vue
View file @
947af3a4
...
...
@@ -95,6 +95,7 @@ const jobListColumns = ref([]);
const
positionConfirm
=
({
selectedItems
})
=>
{
jobTypeText
.
value
=
selectedItems
.
name
;
resetPageParams
();
getResumeRecommendListParams
.
value
.
recommend
=
true
getResumeRecommendList
();
};
function
getJobListApiFn
()
{
...
...
@@ -148,6 +149,7 @@ const getResumeRecommendListParams = ref({
const
isEnd
=
ref
(
false
);
const
resetParams
=
()
=>
{
isEnd
.
value
=
false
;
applicationList
.
value
=
[];
getApplicationListParams
.
value
=
{
jobType
:
""
,
...
...
src/pages/recommend/releasePostion/step1.vue
View file @
947af3a4
...
...
@@ -7,7 +7,7 @@
<view
class=
"t2"
>
选择对应的职位并填写职位信息
</view>
</view>
<view
class=
"content"
>
<selectbox
:options=
"EnumWorkMode"
label-key=
"text"
value-key=
"code"
v-model=
"pinias.formData.workMode"
></selectbox>
<selectbox
@
update=
"changeWorkMode"
:options=
"EnumWorkMode"
label-key=
"text"
value-key=
"code"
v-model=
"pinias.formData.workMode"
></selectbox>
<form-row>
<form-item
title=
"职位类型"
>
<wd-col-picker
...
...
@@ -32,7 +32,7 @@
</form-row>
<form-row>
<form-item
title=
"职位描述"
:border=
"false"
icon=
""
>
<textarea
v-model=
"pinias.formData.positionDesc"
placeholder=
"请输入你的职位描述"
></textarea>
<textarea
v-model=
"pinias.formData.positionDesc"
placeholder=
"请输入你的职位描述"
maxlength=
"800"
></textarea>
</form-item>
</form-row>
</view>
...
...
@@ -82,8 +82,7 @@ const changeWorkMode = mode => {
pinias
.
setFormDataKey
(
"workMode"
,
mode
);
pinias
.
setFormDataKey
(
"minSalary"
,
0
);
pinias
.
setFormDataKey
(
"maxSalary"
,
0
);
console
.
log
(
"mode"
,
mode
);
// console.log("mode", mode);
if
(
mode
==
2
)
{
// 小时
pinias
.
setFormDataKey
(
"settlementType"
,
1
);
...
...
@@ -118,7 +117,7 @@ const next = () => {
console
.
log
(
pinias
.
formData
);
if
(
validateForm
(
pinias
.
formData
,
[
"jobTypeId"
,
"jobTypeName"
,
"name"
,
"positionDesc"
]))
{
uni
.
navigate
To
({
uni
.
redirect
To
({
url
:
"/pages/recommend/releasePostion/step2"
});
}
...
...
src/pages/recommend/releasePostion/step2.vue
View file @
947af3a4
...
...
@@ -232,16 +232,17 @@ const next = () => {
.
map
(
v
=>
v
.
text
)
.
join
(
","
)
);
// 薪资
if
(
pinias
.
formData
.
negotiableSalary
==
0
)
{
if
(
pinias
.
formData
.
maxSalary
==
0
||
pinias
.
formData
.
minSalary
==
0
)
{
if
(
!
(
pinias
.
formData
.
maxSalary
&&
pinias
.
formData
.
minSalary
)
)
{
xma
.
showToast
({
title
:
"请输
入
薪资"
,
title
:
"请输
选择
薪资"
,
icon
:
"none"
});
return
;
}
}
uni
.
navigate
To
({
uni
.
redirect
To
({
url
:
"/pages/recommend/releasePostion/step3"
});
};
...
...
src/pages/recommend/releasePostion/step3.vue
View file @
947af3a4
...
...
@@ -12,13 +12,15 @@
<wd-col-picker
v-model=
"cityValue"
:columns=
"cityOpstion"
style=
"width: 100%;"
value-key=
"code"
label-key=
"name"
:column-change=
"columnChangeCity"
@
confirm=
"handleConfirmCity"
use-default-slot
>
<p
:class=
"
{ placeholder: !cityText }" class="text-single">
{{
cityText
||
"请选择公司所在地"
}}
</p>
<p
:class=
"
{ placeholder: !cityText }" class="text-single"
style="width: 100%;"
>
{{
cityText
||
"请选择公司所在地"
}}
</p>
</wd-col-picker>
<view
class=
"arrow"
></view>
</view>
...
...
@@ -91,7 +93,7 @@ onLoad(() => {
});
const
next
=
()
=>
{
if
(
validateForm
(
pinias
.
formData
,
[
"address"
]))
{
uni
.
navigate
To
({
uni
.
redirect
To
({
url
:
"/pages/recommend/releasePostion/step4"
});
}
...
...
src/pages/recommend/releasePostion/step4.vue
View file @
947af3a4
...
...
@@ -248,12 +248,9 @@ const next = () => {
validateForm
(
pinias
.
formData
,
[
"identityRequirement"
,
"educationRequirement"
,
"positionalTitle"
,
"professionalCertificates"
,
"specialCertificates"
])
)
{
uni
.
navigate
To
({
uni
.
redirect
To
({
url
:
"/pages/recommend/releasePostion/step5"
});
}
...
...
src/pages/recommend/releasePostion/step5.vue
View file @
947af3a4
...
...
@@ -100,9 +100,8 @@ const submit = () => {
},
2000
);
setTimeout
(()
=>
{
uni
.
switchTab
({
url
:
"/pages/
recommend
/index"
url
:
"/pages/
user
/index"
});
pinias
.
resetForm
();
},
3000
);
}
else
{
...
...
src/pages/user/resume/index.vue
View file @
947af3a4
...
...
@@ -15,7 +15,53 @@
<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=
""
/>
</view>
<!-- 个人信息 -->
<view
class=
"basics"
>
<text
class=
"gradient-title"
>
个人信息
</text>
<view
class=
"basics-top"
>
<view
class=
"item"
>
<img
v-show=
"resumeData.sex === 1"
src=
"@/static/image/user/man.png"
alt=
""
/>
<img
v-show=
"resumeData.sex === 2"
src=
"@/static/image/user/woman.png"
alt=
""
/>
<text>
{{
resumeData
.
sex
===
1
?
"男"
:
"女"
}}
</text>
</view>
<view
class=
"item"
>
<img
src=
"@/static/image/user/birth.png"
alt=
""
/>
<text>
{{
resumeData
.
birthday
}}
</text>
</view>
<view
class=
"item"
>
<!--
<img
src=
"@/static/image/user/bag.png"
alt=
""
>
-->
<text>
{{
resumeData
.
workExperienceYear
}}
年
</text>
</view>
</view>
<view
class=
"information"
>
<text
class=
"label"
>
身份
</text>
<text
class=
"value"
>
{{
resumeData
.
identityTypes
}}
</text>
</view>
<view
class=
"information"
>
<text
class=
"label"
>
专业
</text>
<text
class=
"value"
>
{{
resumeData
.
major
||
"无"
}}
</text>
</view>
<view
class=
"information"
>
<text
class=
"label"
>
专业技术职称
</text>
<text
class=
"value"
>
{{
resumeData
.
positionalTitle
||
"无"
}}
</text>
</view>
<view
class=
"information"
>
<text
class=
"label"
>
职业资格/技能等级证书
</text>
<text
class=
"value"
>
{{
resumeData
.
professionalCertificates
||
"无"
}}
</text>
</view>
<view
class=
"information"
>
<text
class=
"label"
>
特种作业证
</text>
<text
class=
"value"
>
{{
resumeData
.
specialCertificates
||
"无"
}}
</text>
</view>
<view
class=
"information"
>
<text
class=
"label"
>
户籍地
</text>
<text
class=
"value"
>
{{
resumeData
.
residenceCodes
}}
</text>
</view>
<view
class=
"information"
>
<text
class=
"label"
>
常住地
</text>
<text
class=
"value"
>
{{
resumeData
.
birthCodes
}}
</text>
</view>
</view>
<!-- 个人优势 -->
<view
class=
"advantage"
>
<view
class=
"flex-between"
>
...
...
@@ -126,9 +172,9 @@ import {
getApplicationByIdApi
,
getUserResumeByApplicationIdApi
}
from
"@/api/postion"
;
import
{
getCityNameByCodeApi
}
from
"@/api/common"
;
import
{
getCityNameByCodeApi
,
getDistNameByCodeApi
}
from
"@/api/common"
;
import
{
getEnumText
,
getEumData
}
from
"@/utils/utils.js"
;
import
{
getEnumText
,
getEumData
,
getEnumText2
}
from
"@/utils/utils.js"
;
import
evn
from
"@/utils/config.js"
;
import
{
useMessage
}
from
"wot-design-uni"
;
// 投递id
...
...
@@ -184,14 +230,29 @@ const getUserResume = ({ userId, jobId, applicationId }) => {
operator
,
cityCode
}
=
res
.
data
.
userResume
;
const
{
workAge
,
education
,
avatarPath
,
phone
}
=
res
.
data
.
userInfo
;
const
{
workAge
,
education
,
avatarPath
,
phone
,
residenceCodes
,
birthCodes
,
specialCertificates
,
positionalTitle
,
professionalCertificates
,
major
,
identityTypes
,
sex
,
name
,
username
,
birthday
}
=
res
.
data
.
userInfo
;
resumeData
.
personalAdvantage
=
personalAdvantages
;
//个人优势
resumeData
.
maxSalary
=
maxSalary
&&
maxSalary
/
1000
+
"k"
;
//薪水
resumeData
.
minSalary
=
minSalary
&&
minSalary
/
1000
+
"k"
;
resumeData
.
preferredPosition
=
positionNames
;
resumeData
.
preferredCityName
=
(
await
getCityNameByCodeApi
(
cityCode
)).
data
.
cityName
;
resumeData
.
realName
=
operator
;
const
educationExperienceJson
=
JSON
.
parse
(
educationExperience
||
"[]"
);
//教育精力
resumeData
.
educationExperience
=
educationExperienceJson
;
resumeData
.
workExperienceYear
=
workAge
;
//工作年限
...
...
@@ -204,6 +265,30 @@ const getUserResume = ({ userId, jobId, applicationId }) => {
applicationData
.
value
=
res
.
data
.
application
||
{
status
:
0
};
applicationData
.
value
.
userPhone
=
phone
;
/* 个人信息 */
resumeData
.
realName
=
name
;
resumeData
.
workExperienceYear
=
workAge
;
resumeData
.
educationLevel
=
await
getEnumText
(
"EnumEducation"
,
education
);
resumeData
.
username
=
username
;
resumeData
.
avatarPath
=
avatarPath
;
resumeData
.
age
=
calculateAge
(
birthday
);
resumeData
.
sex
=
sex
;
resumeData
.
identityTypes
=
await
getEnumText2
(
"EnumIdentityType"
,
identityTypes
.
split
(
","
));
resumeData
.
birthday
=
formatTimestamp
(
28800000
);
resumeData
.
major
=
major
;
resumeData
.
positionalTitle
=
positionalTitle
;
resumeData
.
professionalCertificates
=
professionalCertificates
;
resumeData
.
specialCertificates
=
specialCertificates
;
console
.
log
(
'ascsacsacsa'
,
residenceCodes
);
getDistNameByCodeApi
(
residenceCodes
.
split
(
","
)[
2
]).
then
(
res
=>
{
resumeData
.
residenceCodes
=
res
.
data
.
provinceName
+
res
.
data
.
cityName
+
res
.
data
.
districtName
;
});
getDistNameByCodeApi
(
birthCodes
.
split
(
","
)[
2
]).
then
(
res
=>
{
resumeData
.
birthCodes
=
res
.
data
.
provinceName
+
res
.
data
.
cityName
+
res
.
data
.
districtName
;
});
/*
const { realName, workExperience: workExperienceYear, educationLevel, avatarPath } = res.data.user;
...
...
@@ -212,6 +297,28 @@ const getUserResume = ({ userId, jobId, applicationId }) => {
*/
});
};
// 时间戳转为年月日
function
formatTimestamp
(
timestampInMilliseconds
)
{
// 创建日期对象
var
date
=
new
Date
(
timestampInMilliseconds
);
// 获取年月日
var
year
=
date
.
getUTCFullYear
();
var
month
=
(
"0"
+
(
date
.
getUTCMonth
()
+
1
)).
slice
(
-
2
);
// 月份是从0开始的,所以加1,并确保两位数
var
day
=
(
"0"
+
date
.
getUTCDate
()).
slice
(
-
2
);
// 确保两位数
return
`
${
year
}
.
${
month
}
.
${
day
}
`
;
}
function
calculateAge
(
birthday
)
{
var
birthdayDate
=
new
Date
(
birthday
);
// 将时间戳转换为日期对象
var
today
=
new
Date
();
// 获取当前日期
var
age
=
today
.
getFullYear
()
-
birthdayDate
.
getFullYear
();
// 计算年份差
// 检查生日是否已经过去
var
m
=
today
.
getMonth
()
-
birthdayDate
.
getMonth
();
if
(
m
<
0
||
(
m
===
0
&&
today
.
getDate
()
<
birthdayDate
.
getDate
()))
{
age
--
;
}
return
age
;
}
const
pageType
=
ref
(
null
);
onLoad
(({
userId
,
jobId
,
applicationId
,
type
})
=>
{
pageType
.
value
=
type
;
...
...
@@ -345,6 +452,49 @@ const invitation = () => {
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
{
margin-right
:
16rpx
;
font-size
:
24rpx
;
color
:
#77818f
;
}
.value
{
font-size
:
24rpx
;
color
:
#1b2026
;
}
}
view
{
margin-top
:
16rpx
;
font-size
:
24rpx
;
line-height
:
36rpx
;
color
:
#1b2026
;
}
.arrow
{
border-color
:
#1b2026
;
}
}
.state
{
padding
:
0
32rpx
32rpx
;
margin-top
:
32rpx
;
...
...
src/static/image/user/birth.png
0 → 100644
View file @
947af3a4
536 Bytes
src/static/image/user/man.png
0 → 100644
View file @
947af3a4
436 Bytes
src/static/image/user/woman.png
0 → 100644
View file @
947af3a4
473 Bytes
src/utils/utils.js
View file @
947af3a4
...
...
@@ -31,6 +31,15 @@ export const getEnumText = async (type, code) => {
const
eumData
=
await
getEumData
(
type
);
return
eumData
.
find
(
item
=>
item
.
code
==
code
)?.
text
||
"无"
;
};
export
const
getEnumText2
=
async
(
type
,
codes
)
=>
{
const
eumData
=
await
getEumData
(
type
);
// 使用 Array.prototype.map 和 .filter 方法来获取所有匹配项的 text
const
texts
=
eumData
.
filter
(
item
=>
codes
.
includes
(
item
.
code
)).
map
(
item
=>
item
.
text
);
// 将获取到的 text 数组合并成一个字符串,用 "|" 分割
return
texts
.
join
(
"|"
)
||
"无"
;
};
/**
* 将数据存储在本地存储空间中。
* @param {string} key 要存储的数据的关键字,用于检索数据。
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment