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
f6eb04e5
Commit
f6eb04e5
authored
Oct 30, 2024
by
石建新(贵阳日报)
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
招聘会
parent
a61f8e84
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
415 additions
and
236 deletions
+415
-236
settings.json
.vscode/settings.json
+1
-1
article.js
src/api/article.js
+1
-1
user.js
src/api/user.js
+4
-0
form-item.vue
src/components/form/form-item.vue
+1
-0
index.vue
src/pages/articleDetails/index.vue
+38
-12
addPost.vue
src/pages/signUp/addPost.vue
+364
-219
index.vue
src/pages/signUp/index.vue
+4
-2
utils.js
src/utils/utils.js
+2
-1
No files found.
.vscode/settings.json
View file @
f6eb04e5
...
...
@@ -8,7 +8,7 @@
"files.eol"
:
"
\n
"
,
"typescript.tsdk"
:
"node_modules/typescript/lib"
,
"[vue]"
:
{
"editor.defaultFormatter"
:
"
esbenp.prettier-vscode
"
"editor.defaultFormatter"
:
"
octref.vetur
"
},
"[typescript]"
:
{
"editor.defaultFormatter"
:
"esbenp.prettier-vscode"
...
...
src/api/article.js
View file @
f6eb04e5
...
...
@@ -8,7 +8,7 @@ export const getArticleDetailApi = id => instance.post(`/article/detail/${id}`);
export
const
getArticleTypesApi
=
type
=>
instance
.
post
(
`/article/category/list/
${
type
}
`
);
//招聘会报名状态
export
const
registerStatus
=
articleId
=>
instance
.
post
(
`/
jobFair/register/status
/
${
articleId
}
`
);
export
const
registerStatus
=
articleId
=>
instance
.
post
(
`/
article/jobFair/check
/
${
articleId
}
`
);
// 参加招聘会
...
...
src/api/user.js
View file @
f6eb04e5
...
...
@@ -49,6 +49,10 @@ export const companyReviewInfo = params => instance.post("/b/company/review/info
export
const
companyReviewUpdate
=
params
=>
instance
.
post
(
"/b/company/review/update"
,
params
);
//职位列表
export
const
positionList
=
params
=>
instance
.
post
(
"/b/position/list"
,
params
);
//批量创建岗位
export
const
positionAddList
=
params
=>
instance
.
post
(
"/b/position/addList"
,
params
);
//批量更新职位
export
const
positionuUdateList
=
params
=>
instance
.
post
(
"/b/position/updateList"
,
params
);
//根据id获取反馈信息
export
const
feedbackById
=
params
=>
instance
.
post
(
`/feedback/
${
params
}
`
);
src/components/form/form-item.vue
View file @
f6eb04e5
...
...
@@ -39,6 +39,7 @@ const iconPath = new URL(`../../static/image/icon/${props.icon}.png`, import.met
font-size
:
32rpx
;
font-weight
:
600
;
line-height
:
36rpx
;
white-space
:
nowrap
;
}
.icon
{
position
:
absolute
;
...
...
src/pages/articleDetails/index.vue
View file @
f6eb04e5
...
...
@@ -26,10 +26,14 @@
placeholder
safeAreaInsetBottom
>
<wd-button
@
tap=
"next"
:disabled=
"data.bmStutas || !data.bm"
round=
"false"
class=
"foot-btn"
>
{{
<
!--
<
wd-button
@
tap=
"next"
:disabled=
"data.bmStutas || !data.bm"
round=
"false"
class=
"foot-btn"
>
{{
!
data
.
bmStutas
&&
data
.
bm
?
"立即报名"
:
data
.
bmStutas
?
"已报名"
:
"报名结束"
}}
</wd-button>
-->
<wd-button
@
tap=
"next"
:disabled=
"!data.bm"
round=
"false"
class=
"foot-btn"
>
{{
data
.
bm
?
"立即报名"
:
"报名结束"
}}
</wd-button>
</wd-tabbar>
<wd-action-sheet
v-model=
"show"
:actions=
"actions"
@
close=
"close"
@
select=
"select"
/>
</div>
</
template
>
...
...
@@ -39,6 +43,15 @@ import evn from "@/utils/config.js";
import
{
ref
}
from
"vue"
;
import
dayjs
from
"dayjs"
;
const
data
=
ref
({});
const
show
=
ref
(
false
);
const
actions
=
ref
([
{
name
:
"更新岗位"
},
{
name
:
"新增岗位"
}
]);
let
articleId
=
ref
(
null
);
onLoad
(({
id
})
=>
{
articleId
.
value
=
id
;
...
...
@@ -53,12 +66,27 @@ onLoad(({ id }) => {
data
.
value
.
bm
=
false
;
}
registerStatus
(
id
).
then
(
Res
=>
{
data
.
value
.
bmStutas
=
Res
.
data
;
});
//
registerStatus(id).then(Res => {
//
data.value.bmStutas = Res.data;
//
});
});
console
.
log
(
"data.value"
,
data
.
value
.
bm
,
data
.
value
.
bmStutas
);
});
function
showActions
()
{}
function
close
()
{
show
.
value
=
false
;
}
function
select
({
item
,
index
})
{
if
(
index
==
0
)
{
xma
.
navigateTo
({
url
:
`/pages/signUp/addPost?articleId=
${
articleId
.
value
}
&type=update`
});
}
else
{
xma
.
navigateTo
({
url
:
`/pages/signUp/addPost?articleId=
${
articleId
.
value
}
&type=add`
});
}
}
onShow
(()
=>
{
const
currentTime
=
Date
.
now
();
getArticleDetailApi
(
articleId
.
value
).
then
(
res
=>
{
...
...
@@ -71,16 +99,14 @@ onShow(() => {
data
.
value
.
bm
=
false
;
}
registerStatus
(
articleId
.
value
).
then
(
Res
=>
{
data
.
value
.
bmStutas
=
Res
.
data
;
});
//
registerStatus(articleId.value).then(Res => {
//
data.value.bmStutas = Res.data;
//
});
});
});
const
form
=
ref
();
function
next
()
{
xma
.
navigateTo
({
url
:
`/pages/signUp/index?articleId=
${
articleId
.
value
}
`
});
show
.
value
=
true
;
}
</
script
>
...
...
src/pages/signUp/addPost.vue
View file @
f6eb04e5
<
template
>
<div
class=
"page"
>
<NavBar
:showIcon=
"true"
:showTitle=
"true"
title=
"岗位信息"
backgroundBox=
"#FFFFFF"
></NavBar>
<wd-tabs
sticky
:offset-top=
"0"
v-model=
"tab"
>
<block
v-for=
"item in tabList"
:key=
"item.id"
>
<wd-tab
:title=
"item.name"
>
<view
class=
"from-1"
v-if=
"tab == 0"
>
<wd-checkbox-group
v-model=
"value"
>
<view
class=
"wd-cell-item"
v-for=
"i in gwList"
:key=
"i.id"
>
<wd-checkbox
:value=
"i"
></wd-checkbox>
<view
class=
"right"
>
<view
class=
"position-name"
>
{{
i
.
name
}}
</view>
<view
class=
"tip"
>
贵阳|
{{
i
.
workDic
}}
|
{{
i
.
jobTypeName
}}
</view>
</view>
</view>
</wd-checkbox-group>
<view
class=
"from-1"
v-if=
"pageType == 'update'"
>
<wd-checkbox-group
v-model=
"value"
>
<view
class=
"wd-cell-item"
v-for=
"i in gwList"
:key=
"i.id"
>
<wd-checkbox
:modelValue=
"i.id"
></wd-checkbox>
<view
class=
"right"
>
<view
class=
"position-name"
>
{{
i
.
name
}}
</view>
<view
class=
"tip"
>
贵阳|
{{
i
.
workDic
}}
|
{{
i
.
jobTypeName
}}
</view>
</view>
<view
v-else
>
<view
class=
"from-2"
v-for=
"(item, index) in jobForm"
:key=
"index"
>
<view
class=
"title"
>
新增岗位信息
{{
index
+
1
}}
</view>
<selectbox
@
update=
"initSalaryColumns"
:options=
"EnumWorkMode"
label-key=
"text"
value-key=
"code"
v-model=
"item.workMode"
></selectbox>
<!-- 职位类型 -->
<form-row>
<form-item
title=
"职位类型"
>
<wd-col-picker
v-model=
"positionTypeValue"
:columns=
"columns"
:column-change=
"columnChange"
@
confirm=
"params => handleConfirm(params, item)"
label-key=
"name"
value-key=
"id"
use-default-slot
>
<view
:class=
"`inner flex-between $
{item.jobTypeName ? '' : 'placeholder'}`">
{{
item
.
jobTypeName
||
"请选择职位类型"
}}
</view>
</wd-col-picker>
</form-item>
</form-row>
<!-- 职位标题 -->
<form-row>
<form-item
title=
"职位标题"
icon=
"arrow"
>
<input
type=
"text"
v-model=
"item.name"
placeholder=
"输入职位标题如“财务总监”"
/>
</form-item>
</form-row>
<!-- 职位描述 -->
<form-row>
<form-item
title=
"职位描述"
:border=
"false"
icon=
""
>
<textarea
v-model=
"item.positionDesc"
placeholder=
"请输入你的职位描述"
></textarea>
</form-item>
</form-row>
<view
class=
"transverse"
>
<form-item
title=
"职位薪资"
icon=
""
>
<view
v-if=
"item.settlementType == 4"
:class=
"`inner flex-between $
{item.salaryText ? '' : 'placeholder'}`"
@click="onOpen(item, index)"
>
{{
item
.
salaryText
||
"请选择月薪范围"
}}
</view>
</wd-checkbox-group>
</view>
<view
v-else
>
<view
class=
"from-2"
v-for=
"(item, index) in jobForm"
:key=
"index"
>
<view
class=
"title"
>
新增岗位信息
{{
index
+
1
}}
</view>
<selectbox
@
update=
"initSalaryColumns"
:options=
"EnumWorkMode"
label-key=
"text"
value-key=
"code"
v-model=
"item.workMode"
></selectbox>
<!-- 职位类型 -->
<form-row>
<form-item
title=
"职位类型"
>
<wd-col-picker
v-model=
"positionTypeValue"
:columns=
"columns"
:column-change=
"columnChange"
@
confirm=
"params => handleConfirm(params, item)"
label-key=
"name"
value-key=
"id"
use-default-slot
>
<view
:class=
"`inner flex-between $
{item.jobTypeName ? '' : 'placeholder'}`">
{{
item
.
jobTypeName
||
"请选择职位类型"
}}
</view>
</wd-col-picker>
</form-item>
</form-row>
<!-- 职位标题 -->
<form-row>
<form-item
title=
"职位标题"
icon=
"arrow"
>
<input
type=
"text"
v-model=
"item.name"
placeholder=
"输入职位标题如“财务总监”"
/>
</form-item>
</form-row>
<!-- 职位描述 -->
<form-row>
<form-item
title=
"职位描述"
:border=
"false"
icon=
""
>
<textarea
v-model=
"item.positionDesc"
placeholder=
"请输入你的职位描述"
></textarea>
</form-item>
</form-row>
<view
class=
"transverse"
>
<form-item
title=
"职位薪资"
icon=
""
>
<view
v-if=
"item.settlementType == 4"
:class=
"`inner flex-between $
{item.salaryText ? '' : 'placeholder'}`"
@click="onOpen(item, index)"
>
{{
item
.
salaryText
||
"请选择月薪范围"
}}
<!--
<view
class=
"arrow"
></view>
-->
<checkbox
class=
"checkbox"
:value=
"item.negotiableSalary"
@
click=
"onChecked(item)"
:checked=
"item.negotiableSalary == 1"
>
面议
</checkbox
>
</view>
<view
v-else
:class=
"`inner flex-between $
{item.salaryText ? '' : 'placeholder'}`"
@click="onOpen(item, index)"
>
{{
item
.
salaryText
||
"请选择时薪范围"
}}
<!--
<view
class=
"arrow"
></view>
-->
<checkbox
class=
"checkbox"
:value=
"item.negotiableSalary"
@
click=
"onChecked(item)"
:checked=
"item.negotiableSalary == 1"
>
面议
</checkbox
>
</view>
</form-item>
<form-item
title=
"工作地址"
icon=
""
>
<wd-col-picker
v-model=
"cityValue"
:columns=
"cityOpstion"
value-key=
"code"
label-key=
"name"
:column-change=
"columnChangeCity"
@
confirm=
"params => handleConfirmCity(params, item)"
use-default-slot
>
<p
:class=
"
{ placeholder: !item.cityText }" class="text-single">
{{
item
.
cityText
||
"请选择公司所在地"
}}
</p>
</wd-col-picker>
</form-item>
<!--
<view
class=
"arrow"
></view>
-->
<checkbox
class=
"checkbox"
:value=
"item.negotiableSalary"
@
click=
"onChecked(item)"
:checked=
"item.negotiableSalary == 1"
>
面议
</checkbox
>
</view>
<view
v-else
:class=
"`inner flex-between $
{item.salaryText ? '' : 'placeholder'}`"
@click="onOpen(item, index)"
>
{{
item
.
salaryText
||
"请选择时薪范围"
}}
<!--
<view
class=
"arrow"
></view>
-->
<checkbox
class=
"checkbox"
:value=
"item.negotiableSalary"
@
click=
"onChecked(item)"
:checked=
"item.negotiableSalary == 1"
>
面议
</checkbox
>
</view>
</form-item>
<form-item
title=
"工作地址"
icon=
""
>
<wd-col-picker
v-model=
"cityValue"
:columns=
"cityOpstion"
value-key=
"code"
label-key=
"name"
:column-change=
"columnChangeCity"
@
confirm=
"params => handleConfirmCity(params, item)"
use-default-slot
>
<p
:class=
"
{ placeholder: !item.cityText }" class="text-single">
{{
item
.
cityText
||
"请选择公司所在地"
}}
</p>
</wd-col-picker>
</form-item>
</view>
<form-item
title=
"是否提供食宿"
icon=
""
>
<wd-radio-group
v-model=
"item.accommodation"
inline
shape=
"dot"
>
<wd-radio
v-for=
"(v, n) in radioOpstion"
:value=
"v.code"
:key=
"n"
>
{{
v
.
text
}}
</wd-radio>
</wd-radio-group>
</form-item>
<form-item
title=
"福利待遇"
icon=
""
>
<view
class=
"welfare"
>
<view
v-for=
"(el, nl) in item.myBenefits"
:class=
"`t $
{el.active ? 'active' : ''}`"
@tap="onChangeBenefits(el, item)"
:key="nl"
>
{{
el
.
text
}}
</view
>
</view>
</form-item>
<form-item
title=
"身份要求"
icon=
""
>
<wd-picker
:columns=
"identityPostion"
value-key=
"code"
label-key=
"text"
v-model=
"item.identityRequirement"
@
confirm=
"params => handleConfirmIdentity(params, item)"
use-default-slot
>
<view
:class=
"`inner flex-between $
{item.identityText ? '' : 'placeholder'}`">
<view
class=
"flex-align-center"
>
{{
item
.
identityText
||
"请选择身份要求"
}}
</view>
<form-item
title=
"是否提供食宿"
icon=
""
>
<wd-radio-group
v-model=
"item.accommodation"
inline
shape=
"dot"
>
<wd-radio
v-for=
"(v, n) in radioOpstion"
:value=
"v.code"
:key=
"n"
>
{{
v
.
text
}}
</wd-radio>
</wd-radio-group>
</form-item>
<form-item
title=
"福利待遇"
icon=
""
>
<view
class=
"welfare"
>
<view
v-for=
"(el, nl) in item.myBenefits"
:class=
"`t $
{el.active ? 'active' : ''}`"
@tap="onChangeBenefits(el, item)"
:key="nl"
>
{{
el
.
text
}}
</view
>
</view>
</wd-picker>
</form-item>
<view
class=
"transverse"
>
<form-item
title=
"学历要求"
icon=
""
>
<wd-picker
:columns=
"educationPostion"
value-key=
"code"
label-key=
"text"
v-model=
"item.educationRequirement"
@
confirm=
"params => handleConfirmEducation(params, item)"
use-default-slot
>
<view
:class=
"`inner flex-between $
{item.educationText ? '' : 'placeholder'}`">
<view
class=
"flex-align-center"
>
{{
item
.
educationText
||
"请选择学历"
}}
</view>
</form-item>
<form-item
title=
"身份要求"
icon=
""
>
<wd-picker
:columns=
"identityPostion"
value-key=
"code"
label-key=
"text"
v-model=
"item.identityRequirement"
@
confirm=
"params => handleConfirmIdentity(params, item)"
use-default-slot
>
<view
:class=
"`inner flex-between $
{item.identityText ? '' : 'placeholder'}`">
<view
class=
"flex-align-center"
>
{{
item
.
identityText
||
"请选择身份要求"
}}
</view>
</view>
</wd-picker>
</form-item>
<view
class=
"transverse"
>
<form-item
title=
"学历要求"
icon=
""
>
<wd-picker
:columns=
"educationPostion"
value-key=
"code"
label-key=
"text"
v-model=
"item.educationRequirement"
@
confirm=
"params => handleConfirmEducation(params, item)"
use-default-slot
>
<view
:class=
"`inner flex-between $
{item.educationText ? '' : 'placeholder'}`">
<view
class=
"flex-align-center"
>
{{
item
.
educationText
||
"请选择学历"
}}
</view>
</view>
</wd-picker>
</form-item
><form-item
title=
"年龄要求"
icon=
""
>
<wd-col-picker
v-model=
"ageValue"
:columns=
"ageColumns"
:column-change=
"ageColumnChange"
@
confirm=
"params => ageHandleConfirm(params, item)"
use-default-slot
>
<view
:class=
"`inner flex-between $
{item.ageText ? '' : 'placeholder'}`">
{{
item
.
ageText
||
"请选择年龄范围"
}}
</view>
</wd-col-picker>
</form-item>
</view>
<form-row
:fill=
"false"
>
<form-item
title=
"职业资格/技能等级证书"
icon=
"edit"
>
<input
type=
"text"
v-model=
"certificateInputValue"
placeholder=
"请填写职业资格"
/>
</form-item>
<form-item
title=
""
>
<wd-picker
:columns=
"levelOptions"
value-key=
"text"
label-key=
"text"
v-model=
"certificateSelectValue"
use-default-slot
>
<view
:class=
"`inner flex-between $
{certificateSelectValue ? '' : 'placeholder'}`">
<view
class=
"flex-align-center"
bind:tap=
"onShowIdentitySelect"
>
{{
certificateSelectValue
||
"请选择职业资格等级"
}}
</view>
</view>
</wd-picker>
</form-item>
</form-row>
</view>
</view>
</wd-tab>
</block>
<wd-popup
v-model=
"salaryShow"
position=
"bottom"
custom-style=
"height:40%;border-radius: 20rpx;z-index:999;"
@
close=
"handleClose"
>
<view
class=
"title-box"
><view></view>
<view
class=
"title"
>
薪资选择
</view>
<wd-icon
@
click=
"handleClose"
name=
"close"
size=
"30rpx"
></wd-icon>
</wd-picker>
</form-item
><form-item
title=
"年龄要求"
icon=
""
>
<wd-col-picker
v-model=
"ageValue"
:columns=
"ageColumns"
:column-change=
"ageColumnChange"
@
confirm=
"params => ageHandleConfirm(params, item)"
use-default-slot
>
<view
:class=
"`inner flex-between $
{item.ageText ? '' : 'placeholder'}`">
{{
item
.
ageText
||
"请选择年龄范围"
}}
</view>
</wd-col-picker>
</form-item>
</view>
<wd-picker-view
@
change=
"params => salaryHandleConfirm(params, item)"
use-default-slot
:columns=
"salaryColumns"
v-if=
"salaryShow"
v-model=
"salaryValue"
></wd-picker-view>
<view
style=
"display: flex; justify-content: center; width: 100%"
><wd-button
style=
"width: 80%"
@
click=
"handleClose"
block
:round=
"false"
>
确定
</wd-button></view
>
</wd-popup>
</wd-tabs>
<form-row
:fill=
"false"
>
<form-item
title=
"专业技术职称"
icon=
"edit"
>
<input
type=
"text"
@
input=
"inputMajor($event, item)"
v-model=
"majorInputValue"
placeholder=
"请填写职称"
/>
</form-item>
<form-item
title=
""
>
<wd-picker
:columns=
"levelOptions"
value-key=
"text"
label-key=
"text"
v-model=
"majorSelectValue"
@
confirm=
"params => handMajoration(params, item)"
use-default-slot
>
<view
:class=
"`inner flex-between $
{majorSelectValue ? '' : 'placeholder'}`">
<view
class=
"flex-align-center"
bind:tap=
"onShowIdentitySelect"
>
{{
majorSelectValue
||
"请选择职业等级"
}}
</view>
</view>
</wd-picker>
</form-item>
</form-row>
<form-row
:fill=
"false"
>
<form-item
title=
"职业资格/技能等级证书"
icon=
"edit"
>
<input
type=
"text"
@
input=
"inputLeve($event, item)"
v-model=
"certificateInputValue"
placeholder=
"请填写职业资格"
/>
</form-item>
<form-item
title=
""
>
<wd-picker
:columns=
"levelOptions"
value-key=
"text"
label-key=
"text"
@
confirm=
"params => handlelevelation(params, item)"
v-model=
"certificateSelectValue"
use-default-slot
>
<view
:class=
"`inner flex-between $
{certificateSelectValue ? '' : 'placeholder'}`">
<view
class=
"flex-align-center"
>
{{
certificateSelectValue
||
"请选择职业资格等级"
}}
</view>
</view>
</wd-picker>
</form-item>
</form-row>
<form-item
title=
"特种作业证"
icon=
"edit"
>
<input
v-model=
"item.specialCertificates"
type=
"text"
placeholder=
"请填写特种作业证"
/>
</form-item>
<form-row
:fill=
"false"
>
<form-item
title=
"招聘人数"
icon=
"edit"
>
<input
type=
"number"
v-model=
"item.recruitmentNumber"
placeholder=
"请输入招聘人数"
/>
</form-item>
<form-item
title=
"联系电话"
icon=
"edit"
>
<input
type=
"number"
v-model=
"item.contactPhone"
placeholder=
"请输入联系电话"
/>
</form-item>
</form-row
><form-item
title=
"联系人"
icon=
"edit"
>
<input
type=
"text"
v-model=
"item.contactPerson"
placeholder=
"请输入联系人"
/>
</form-item>
</view>
</view>
<wd-popup
v-model=
"salaryShow"
position=
"bottom"
custom-style=
"height:40%;border-radius: 20rpx;z-index:999;"
@
close=
"handleClose"
>
<view
class=
"title-box"
><view></view>
<view
class=
"title"
>
薪资选择
</view>
<wd-icon
@
click=
"handleClose"
name=
"close"
size=
"30rpx"
></wd-icon>
</view>
<wd-picker-view
@
change=
"params => salaryHandleConfirm(params, item)"
use-default-slot
:columns=
"salaryColumns"
v-if=
"salaryShow"
v-model=
"salaryValue"
></wd-picker-view>
<view
style=
"display: flex; justify-content: center; width: 100%"
><wd-button
style=
"width: 80%"
@
click=
"handleClose"
block
:round=
"false"
>
确定
</wd-button></view
>
</wd-popup>
<wd-tabbar
v-if=
"
tab == 0
"
v-if=
"
pageType == 'update'
"
custom-style=
"display: flex;justify-content: center !important;z-index:1;"
fixed
placeholder
safeAreaInsetBottom
>
<view
class=
"footer"
>
<button
class=
"foot-btn"
@
click=
"
openMask"
>
下一步
</button></view>
<view
class=
"footer"
>
<button
class=
"foot-btn"
@
click=
"
submitFrom"
>
提交报名
</button></view>
</wd-tabbar>
<wd-tabbar
v-else
...
...
@@ -232,7 +266,7 @@
>
<view
class=
"footer"
>
<button
class=
"foot-btn1"
@
click=
"addPost"
>
继续添加
</button>
<button
class=
"foot-btn"
@
click=
"
openMask
"
>
提交报名
</button></view
<button
class=
"foot-btn"
@
click=
"
submitFrom
"
>
提交报名
</button></view
>
</wd-tabbar>
</div>
...
...
@@ -240,15 +274,16 @@
<
script
setup
>
import
{
ref
}
from
"vue"
;
import
{
positionList
}
from
"@/api/user"
;
import
{
positionList
,
positionAddList
,
positionuUdateList
}
from
"@/api/user"
;
import
Selectbox
from
"@/components/form/selectbox.vue"
;
import
FormItem
from
"@/components/form/form-item.vue"
;
import
FormRow
from
"@/components/form/form-row.vue"
;
import
{
dictJobTypeApi
,
getTreeListApi
}
from
"@/api/common"
;
import
{
validateForm
}
from
"@/utils/utils"
;
import
town
from
"@/assets/town.json"
;
import
{
getEumData
}
from
"@/utils/utils"
;
const
tab
=
ref
(
1
);
const
tab
=
ref
(
0
);
const
value
=
ref
([]);
const
gwList
=
ref
([]);
const
columns
=
ref
([]);
...
...
@@ -267,10 +302,16 @@ let salaryText = ref("");
const
salaryColumns
=
ref
([]);
/* 是否提供住宿 */
const
radioOpstion
=
ref
([]);
const
certificateInputValue
=
ref
(
""
);
const
certificateSelectValue
=
ref
(
""
);
const
majorInputValue
=
ref
(
""
);
const
majorSelectValue
=
ref
(
""
);
/* 职业类型 */
const
positionTypeValue
=
ref
([]);
/* 兼职全职枚举 */
const
EnumWorkMode
=
ref
([]);
const
articleIds
=
ref
(
""
);
const
pageType
=
ref
(
""
);
/* 等级选择项 */
const
levelOptions
=
ref
([
"初级"
,
"中级"
,
"高级"
,
"高级以上"
]);
...
...
@@ -290,9 +331,9 @@ const jobForm = ref([
maxSalary
:
null
,
benefits
:
""
,
identityRequirement
:
1
,
educationRequirement
:
null
,
minAgeRequirement
:
null
,
maxAgeRequirement
:
null
,
educationRequirement
:
0
,
minAgeRequirement
:
0
,
maxAgeRequirement
:
0
,
recruitmentNumber
:
1
,
accommodation
:
0
,
provinceCode
:
""
,
...
...
@@ -302,10 +343,10 @@ const jobForm = ref([
address
:
""
,
contactPerson
:
""
,
contactPhone
:
""
,
articleId
:
""
,
positionalTitle
:
""
,
professionalCertificates
:
""
,
specialCertificates
:
""
,
articleId
:
articleIds
.
value
,
salaryText
:
""
,
//显示
myBenefits
:
[
{
...
...
@@ -335,6 +376,10 @@ const jobForm = ref([
]
}
]);
onLoad
(({
articleId
,
type
})
=>
{
articleIds
.
value
=
articleId
;
pageType
.
value
=
type
;
});
const
tabList
=
ref
([
{
id
:
213213
,
name
:
"选择已有岗位"
,
type
:
1
},
{
id
:
1651651
,
name
:
"新增岗位"
,
type
:
2
}
...
...
@@ -390,6 +435,9 @@ positionList({}).then(res => {
item
.
workDic
=
EnumWorkMode
.
value
.
find
(
v
=>
v
.
code
==
item
.
workMode
).
text
;
return
item
;
});
res
.
data
=
res
.
data
.
filter
(
item
=>
{
return
!
item
.
articleId
;
});
gwList
.
value
=
res
.
data
;
});
const
getJobType
=
()
=>
{
...
...
@@ -412,9 +460,11 @@ const columnChange = ({ selectedItem, resolve, finish }) => {
};
const
handleConfirm
=
(
params
,
item
)
=>
{
const
{
selectedItems
,
value
}
=
params
;
item
.
jobTypeName
=
selectedItems
[
1
].
name
;
item
.
jobTypePid
=
selectedItems
[
1
].
id
;
item
.
jobTypeParentId
=
selectedItems
[
0
].
id
;
item
.
jobTypeId
=
selectedItems
[
1
].
id
;
item
.
jobTypePid
=
selectedItems
[
0
].
id
;
console
.
log
(
"selectedItems"
,
item
.
jobTypeName
,
item
.
jobTypeId
,
item
.
jobTypePid
);
};
// 职业类型
// 地址
...
...
@@ -438,9 +488,11 @@ const handleConfirmCity = (params, item) => {
const
[
city
,
district
,
street
]
=
selectedItems
;
item
.
address
=
selectedItems
.
map
(
v
=>
v
.
name
||
""
).
join
(
""
);
item
.
provinceCode
=
520000
;
item
.
cityName
=
city
.
name
;
item
.
cityCode
=
city
.
code
;
item
.
districtCode
=
district
.
code
;
item
.
street
=
street
?
street
.
name
:
""
;
console
.
log
(
"item.cityName"
,
item
.
cityName
);
};
// 地址
...
...
@@ -585,6 +637,99 @@ const handleConfirmEducation = (params, item) => {
const
{
selectedItems
,
value
}
=
params
;
item
.
educationText
=
selectedItems
.
text
;
};
const
inputLeve
=
(
e
,
item
)
=>
{
const
{
value
}
=
e
.
detail
;
item
.
professionalCertificates
=
value
+
"-"
+
certificateSelectValue
.
value
;
};
const
handlelevelation
=
(
params
,
item
)
=>
{
const
{
selectedItems
,
value
}
=
params
;
item
.
professionalCertificates
=
certificateInputValue
.
value
+
"-"
+
value
;
};
const
inputMajor
=
(
e
,
item
)
=>
{
const
{
value
}
=
e
.
detail
;
item
.
positionalTitle
=
value
+
"-"
+
majorSelectValue
.
value
;
};
const
handMajoration
=
(
params
,
item
)
=>
{
const
{
selectedItems
,
value
}
=
params
;
item
.
positionalTitle
=
majorInputValue
.
value
+
"-"
+
value
;
};
const
selectedJobs
=
ref
([]);
const
submitFrom
=
()
=>
{
if
(
pageType
.
value
==
"update"
)
{
let
updateArr
=
gwList
.
value
.
filter
(
item
=>
value
.
value
.
includes
(
String
(
item
.
id
)));
updateArr
=
updateArr
.
map
(
item
=>
{
return
{
id
:
item
.
id
,
articleId
:
articleIds
.
value
};
});
if
(
updateArr
.
length
>
0
)
{
xma
.
showLoading
({
title
:
"提交中..."
,
mask
:
true
});
positionuUdateList
(
updateArr
).
then
(
res
=>
{
xma
.
hideLoading
();
if
(
res
.
code
==
200
)
{
xma
.
navigateBack
({
delta
:
1
});
}
});
}
else
{
xma
.
showToast
({
title
:
"请选择职位"
,
icon
:
"none"
});
}
}
else
{
console
.
log
(
"jobForm.value"
,
jobForm
.
value
);
const
allValid
=
jobForm
.
value
.
length
>
0
&&
jobForm
.
value
.
every
(
item
=>
{
return
(
item
&&
validateForm
(
item
,
[
"jobTypeId"
,
"jobTypeName"
,
"name"
,
"positionDesc"
,
"address"
,
"identityRequirement"
,
"educationRequirement"
,
"positionalTitle"
,
"professionalCertificates"
,
"specialCertificates"
,
"contactPhone"
,
"contactPerson"
])
);
});
if
(
allValid
)
{
xma
.
showLoading
({
title
:
"提交中..."
,
mask
:
true
});
positionAddList
(
jobForm
.
value
).
then
(
res
=>
{
xma
.
hideLoading
();
if
(
res
.
code
==
200
)
{
xma
.
navigateBack
({
delta
:
1
});
}
});
}
else
{
xma
.
showToast
({
title
:
"请填写完整"
,
icon
:
"none"
});
}
}
};
function
openMask
()
{
tab
.
value
=
1
;
}
function
addPost
()
{
jobForm
.
value
.
push
({
workMode
:
1
,
...
...
@@ -611,10 +756,10 @@ function addPost() {
address
:
""
,
contactPerson
:
""
,
contactPhone
:
""
,
articleId
:
""
,
positionalTitle
:
""
,
professionalCertificates
:
""
,
specialCertificates
:
""
,
articleId
:
articleIds
.
value
,
salaryText
:
""
,
//显示
myBenefits
:
[
{
...
...
src/pages/signUp/index.vue
View file @
f6eb04e5
...
...
@@ -38,14 +38,16 @@ import { getCompanyInfoApi } from "@/api/user";
import
{
useStore
}
from
"./store"
;
const
pinias
=
useStore
();
const
enterpriseInformation
=
ref
({});
onLoad
(
options
=>
{
const
articleIds
=
ref
(
""
);
onLoad
(({
articleId
})
=>
{
articleIds
.
value
=
articleId
;
getCompanyInfoApi
().
then
(
res
=>
{
enterpriseInformation
.
value
=
res
.
data
;
});
});
const
next
=
()
=>
{
uni
.
navigateTo
({
url
:
"/pages/signUp/addPost"
url
:
`/pages/signUp/addPost?articleId=
${
articleIds
.
value
}
`
});
};
</
script
>
...
...
src/utils/utils.js
View file @
f6eb04e5
...
...
@@ -71,6 +71,7 @@ export const formatTimestamp = (timestamp, formatString = "YYYY-MM-DD hh:mm:ss")
export
const
validateForm
=
(
formData
,
requiredFields
)
=>
{
const
phoneRegex
=
/^1
[
3-9
]\d{9}
$/
;
// 正则表达式匹配中国大陆手机号码
for
(
const
field
of
requiredFields
)
{
const
fieldValue
=
formData
[
field
];
if
(
field
===
"contactPhone"
||
field
===
"phone"
)
{
if
(
!
formData
[
field
]
||
!
phoneRegex
.
test
(
formData
[
field
]))
{
uni
.
showToast
({
...
...
@@ -80,7 +81,7 @@ export const validateForm = (formData, requiredFields) => {
});
return
false
;
}
}
else
if
(
!
formData
[
field
]
)
{
}
else
if
(
fieldValue
===
null
||
fieldValue
===
undefined
||
fieldValue
===
""
)
{
console
.
log
(
field
);
uni
.
showToast
({
...
...
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