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
da296582
Commit
da296582
authored
Oct 14, 2024
by
石建新(贵阳日报)
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
企业端bug
parent
8c37f24e
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
642 additions
and
276 deletions
+642
-276
postion.js
src/api/postion.js
+4
-0
user.js
src/api/user.js
+2
-0
index.vue
src/pages/dynamic/index.vue
+22
-9
index.vue
src/pages/login/index.vue
+1
-3
test.vue
src/pages/login/test.vue
+2
-1
index.vue
src/pages/messageList/index.vue
+9
-3
index.vue
src/pages/policy/index.vue
+1
-0
index.vue
src/pages/recommend/deliveryManagement/index.vue
+1
-0
index.vue
src/pages/recommend/index.vue
+52
-14
index.vue
src/pages/recommend/invitation/index.vue
+8
-6
step1.vue
src/pages/recommend/releasePostion/step1.vue
+33
-18
step2.vue
src/pages/recommend/releasePostion/step2.vue
+138
-61
step3.vue
src/pages/recommend/releasePostion/step3.vue
+13
-9
step4.vue
src/pages/recommend/releasePostion/step4.vue
+17
-16
step5.vue
src/pages/recommend/releasePostion/step5.vue
+34
-31
store.js
src/pages/recommend/releasePostion/store.js
+28
-23
appeal.vue
src/pages/user/businessLicense/appeal.vue
+19
-2
index.vue
src/pages/user/editUserInfo/index.vue
+1
-0
index.vue
src/pages/user/index.vue
+162
-23
licenseInfo.vue
src/pages/user/myCompany/licenseInfo.vue
+48
-56
index.vue
src/pages/user/resume/index.vue
+1
-0
enmpty-dt.png
src/static/image/enmpty-dt.png
+0
-0
top.png
src/static/image/icon/top.png
+0
-0
request.js
src/utils/request.js
+2
-1
utils.js
src/utils/utils.js
+44
-0
No files found.
src/api/postion.js
View file @
da296582
...
...
@@ -35,6 +35,10 @@ export const jobReleaseApi = id => instance.post(`/company/job/release/${id}`);
// 职位下线
export
const
jobOfflineApi
=
id
=>
instance
.
post
(
`/company/job/offline/
${
id
}
`
);
// 职位置顶
export
const
jobOfftopApi
=
id
=>
instance
.
post
(
`/company/job/top/
${
id
}
`
);
// 职位置顶
export
const
jobOffuntopApi
=
id
=>
instance
.
post
(
`/company/job/untop/
${
id
}
`
);
// 拒绝申请
export
const
rejectApplicationApi
=
id
=>
instance
.
post
(
`/company/job/rejectApplication/
${
id
}
`
);
src/api/user.js
View file @
da296582
...
...
@@ -37,6 +37,8 @@ export const feedbackAdd = params => instance.post("/feedback/add/business", par
//我的反馈列表
export
const
feedbackList
=
params
=>
instance
.
post
(
"/feedback/list"
,
params
);
//获取公司申诉信息
export
const
appealInfo
=
params
=>
instance
.
post
(
"/company/appeal/info"
,
params
);
//根据id获取反馈信息
export
const
feedbackById
=
params
=>
instance
.
post
(
`/feedback/
${
params
}
`
);
src/pages/dynamic/index.vue
View file @
da296582
<
template
>
<NavBar
:showIcon=
"false"
:showTitle=
"true"
title=
"动态"
></NavBar>
<div
class=
"policy"
>
<div
class=
"tab-name"
:enable-flex=
"true"
:scroll-x=
"true"
>
<div
class=
"tab-name"
:
style=
"
{ position: sticky, top: contentHeight }" :
enable-flex="true" :scroll-x="true">
<view
:class=
"
{ item: 1, active: active == v.id }" v-for="v in typeList" :key="v.id" @click="changeType(v)">
{{
v
.
name
}}
</view>
</div>
<scroll-view
:scroll-y=
"true"
class=
"content"
@
scrolltolower=
"feedbackListFn()"
>
<wd-status-tip
v-if=
"list.length == 0"
image=
"../.././static/image/enmpty-dt.png"
tip=
"暂无动态"
/>
<article-list
:list=
"list"
></article-list>
</scroll-view>
</div>
...
...
@@ -16,6 +17,7 @@
import
articleList
from
"@/components/articleList/index.vue"
;
import
{
getArticleListApi
,
getArticleTypesApi
}
from
"@/api/article.js"
;
import
{
reactive
,
ref
}
from
"vue"
;
const
contentHeight
=
ref
(
"100rpx"
);
const
active
=
ref
(
""
);
const
typeList
=
ref
([{
id
:
""
,
name
:
"全部"
}]);
getArticleTypesApi
(
2
).
then
(
res
=>
{
...
...
@@ -23,21 +25,30 @@ getArticleTypesApi(2).then(res => {
});
const
changeType
=
type
=>
{
active
.
value
=
type
.
id
;
pageNo
=
1
;
list
.
value
.
splice
(
0
,
list
.
length
);
flag
=
false
;
feedbackListFn
();
refresh
().
then
(
res
=>
{
feedbackListFn
();
});
};
onLoad
(()
=>
{
xma
.
xh
.
getSystemInfo
({
success
(
res
)
{
// console.log('设备信息', res); // 设备信息
}
});
xma
.
xh
.
getMenuButtonBoundingClientRect
({
success
(
res
)
{
contentHeight
.
value
=
(
res
.
top
+
res
.
bottom
)
/
2
+
25
+
"px"
;
}
});
});
/* 文章 */
// 判断是否还有数据
let
pageNo
=
1
;
let
flag
=
false
;
const
list
=
ref
([]);
const
params
=
ref
({
pageNo
:
1
,
pageSize
:
10
,
isEnd
:
false
,
type
:
1
,
type
:
2
,
categoryId
:
active
.
value
});
onShow
(()
=>
{
...
...
@@ -68,6 +79,8 @@ const refresh = () => {
list
.
value
=
[];
params
.
value
.
pageNo
=
1
;
params
.
value
.
isEnd
=
false
;
params
.
value
.
categoryId
=
active
.
value
;
resolve
();
});
};
...
...
src/pages/login/index.vue
View file @
da296582
...
...
@@ -36,10 +36,8 @@ const login = () => {
});
}
setToken
(
data
.
data
.
token
);
console
.
log
(
"data"
,
data
);
getLoginUserApi
().
then
(
el
=>
{
if
(
el
.
data
&&
el
.
data
.
companyId
)
{
if
(
el
.
data
&&
el
.
data
.
status
!==
0
)
{
uni
.
switchTab
({
url
:
"/pages/user/index"
});
...
...
src/pages/login/test.vue
View file @
da296582
...
...
@@ -23,7 +23,8 @@ const login = async () => {
setToken
(
loginRes
.
data
.
token
);
const
userInfoRes
=
await
getLoginUserApi
();
// 已经判断是否注册过企业
if
(
userInfoRes
.
data
?.
companyId
)
{
if
(
userInfoRes
.
data
.
status
!==
0
)
{
uni
.
switchTab
({
url
:
"/pages/user/index"
});
...
...
src/pages/messageList/index.vue
View file @
da296582
...
...
@@ -37,9 +37,15 @@ const params = ref({
isEnd
:
false
});
const
goToDetail
=
item
=>
{
xma
.
navigateTo
({
url
:
`/pages/user/feedbackDetails/index?id=
${
item
.
id
}
`
});
if
(
item
.
type
==
3
||
item
.
type
==
4
)
{
xma
.
navigateTo
({
url
:
`/pages/user/myCompany/licenseInfo?id=
${
item
.
id
}
`
});
}
else
if
(
item
.
type
==
2
)
{
xma
.
navigateTo
({
url
:
`/pages/user/feedbackDetails/index?id=
${
item
.
id
}
`
});
}
};
const
refresh
=
()
=>
{
...
...
src/pages/policy/index.vue
View file @
da296582
...
...
@@ -7,6 +7,7 @@
}}
</view>
</div>
<scroll-view
:scroll-y=
"true"
class=
"content"
@
scrolltolower=
"feedbackListFn"
>
<wd-status-tip
v-if=
"list.length == 0"
image=
"../.././static/image/enmpty-dt.png"
tip=
"暂无更多"
/>
<article-list
:list=
"list"
></article-list>
</scroll-view>
</div>
...
...
src/pages/recommend/deliveryManagement/index.vue
View file @
da296582
<
template
>
<NavBar
:showIcon=
"true"
:showTitle=
"true"
title=
"投递管理"
backgroundBox=
"#FFFFFF"
></NavBar>
<div
class=
"page"
>
<div
class=
"filter-bar flex-between"
>
<p
...
...
src/pages/recommend/index.vue
View file @
da296582
...
...
@@ -113,15 +113,19 @@
</view>
</view>
<view
class=
"btn-list flex-between"
>
<view
class=
"flex-center"
>
<view
class=
"flex-center"
@
click=
"jobOffuntopApiFn(v)"
v-if=
"v.top == 1"
>
<image
src=
"@/static/image/icon/cancelUpload.png"
mode=
""
/>
取消置顶
</view>
<view
class=
"flex-center"
>
<view
class=
"flex-center"
@
click=
"jobOfftopApiFn(v)"
v-else
>
<image
class=
"top"
src=
"@/static/image/icon/top.png"
mode=
""
/>
置顶
</view>
<view
class=
"flex-center"
@
click=
"getJobList(activeTopFilter)"
>
<image
src=
"@/static/image/icon/refresh.png"
mode=
""
/>
刷新
</view>
<view
class=
"flex-center"
@
click=
"switchJobStatus(v
.id, v.status
)"
>
<view
class=
"flex-center"
@
click=
"switchJobStatus(v)"
>
<image
:class=
"
{ rotate: v.status != 3 }" src="@/static/image/icon/download.png" mode="" />
{{
v
.
status
==
3
?
"下线"
:
"上线"
}}
</view>
...
...
@@ -158,18 +162,22 @@ import {
getListStatisticsApi
,
jobReleaseApi
,
jobOfflineApi
,
getJobByIdApi
getJobByIdApi
,
jobOfftopApi
,
jobOffuntopApi
}
from
"@/api/postion"
;
import
{
getTreeListApi
}
from
"@/api/common"
;
import
{
getEumData
,
getEnumText
}
from
"@/utils/utils"
;
import
{
useAsync
}
from
"@/hooks/useAsync"
;
import
_
from
"lodash"
;
import
{
useReleasePostionStore
}
from
"./releasePostion/store"
;
const
{
setForm
,
setFormDataKey
}
=
useReleasePostionStore
();
/* tab */
const
pinias
=
useReleasePostionStore
();
const
activeTab
=
ref
(
"求职推荐"
);
const
changeActiveTab
=
tab
=>
{
activeTab
.
value
=
tab
;
getTopFilter
();
getJobList
(
activeTopFilter
.
value
);
};
/* 获取职位列表 */
...
...
@@ -191,6 +199,20 @@ getJobListApi().then(res => {
getResumeRecommendList
();
}
});
function
jobOfftopApiFn
(
v
)
{
jobOfftopApi
(
v
.
id
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
getJobList
(
activeTopFilter
.
value
);
}
});
}
function
jobOffuntopApiFn
(
v
)
{
jobOffuntopApi
(
v
.
id
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
getJobList
(
activeTopFilter
.
value
);
}
});
}
/* 获取推荐 */
const
applicationList
=
ref
([]);
const
getApplicationListParams
=
ref
({
...
...
@@ -298,6 +320,8 @@ const confirmFilter = () => {
};
/* 跳转到发布职位 */
const
releasePostion
=
()
=>
{
console
.
log
(
"useReleasePostionStore"
,
useReleasePostionStore
);
uni
.
navigateTo
({
url
:
"/pages/recommend/releasePostion/step1"
});
...
...
@@ -320,8 +344,12 @@ const getTopFilter = async () => {
topFilter
.
value
=
data
;
};
const
getJobList
=
(
status
=
""
)
=>
{
xma
.
showLoading
({
title
:
"加载中..."
});
getListStatisticsApi
({
status
}).
then
(
res
=>
{
console
.
log
(
"resresres"
,
res
);
xma
.
hideLoading
();
res
.
data
.
forEach
(
v
=>
{
const
{
data
:
workModeText
}
=
useAsync
(
getEnumText
(
"EnumWorkMode"
,
v
.
workMode
));
const
{
data
:
statusText
}
=
useAsync
(
getEnumText
(
"EnumJobStatus"
,
v
.
status
));
...
...
@@ -331,15 +359,19 @@ const getJobList = (status = "") => {
jobList
.
value
=
res
.
data
;
});
};
getTopFilter
();
getJobList
();
onShow
(()
=>
{
getTopFilter
();
getJobList
();
});
/* 职位上下线 */
const
switchJobStatus
=
async
(
id
,
status
)
=>
{
const
switchJobStatus
=
async
v
=>
{
let
res
=
null
;
if
(
status
==
3
)
{
res
=
await
jobOfflineApi
(
id
);
}
else
if
(
status
==
4
||
status
==
1
)
{
res
=
await
jobReleaseApi
(
id
);
if
(
v
.
status
==
3
)
{
res
=
await
jobOfflineApi
(
v
.
id
);
v
.
status
=
4
;
}
else
if
(
v
.
status
==
4
||
v
.
status
==
1
)
{
res
=
await
jobReleaseApi
(
v
.
id
);
v
.
status
=
3
;
}
else
{
uni
.
showToast
({
title
:
"该状态不能操作"
,
...
...
@@ -403,7 +435,7 @@ const editJob = ({ id, status }) => {
contactPerson
,
contactPhone
}
=
res
.
data
;
setForm
({
pinias
.
setForm
({
workMode
,
jobName
,
jobType
,
...
...
@@ -431,7 +463,7 @@ const editJob = ({ id, status }) => {
contactPerson
,
contactPhone
});
setFormDataKey
(
"id"
,
id
);
pinias
.
setFormDataKey
(
"id"
,
id
);
uni
.
navigateTo
({
url
:
`/pages/recommend/releasePostion/step1?id=
${
id
}
`
});
...
...
@@ -752,6 +784,12 @@ const editJob = ({ id, status }) => {
width
:
28rpx
;
height
:
28rpx
;
}
.top
{
width
:
20rpx
;
height
:
20rpx
;
margin-right
:
3rpx
;
}
view
{
flex
:
1
;
font-size
:
24rpx
;
...
...
src/pages/recommend/invitation/index.vue
View file @
da296582
<
template
>
<div
class=
"page"
>
<navBar>
<template
#
left
>
<div
class=
"arrow"
@
click=
"back"
></div>
</
template
>
<
template
#
title
>
我的
</
template
>
</navBar>
<NavBar
:showIcon=
"true"
:showTitle=
"true"
backIcon=
"#fff"
textColor=
"#fff"
title=
"邀请面试"
backgroundBox=
"transparent"
></NavBar>
<view
class=
"bg"
></view>
<view
class=
"card"
>
...
...
src/pages/recommend/releasePostion/step1.vue
View file @
da296582
...
...
@@ -11,7 +11,7 @@
<view>
兼职
</view>
-->
<view
v-for=
"(item, index) in EnumWorkMode"
:class=
"item.code == formData.workMode ? 'active' : ''"
:class=
"item.code ==
pinias.
formData.workMode ? 'active' : ''"
@
tap=
"changeWorkMode(item.code)"
:key=
"index"
>
{{
item
.
text
}}
...
...
@@ -28,8 +28,8 @@
value-key=
"id"
use-default-slot
>
<view
:class=
"`inner flex-between $
{formData.jobTypeText ? '' : 'placeholder'}`">
{{
formData
.
jobTypeText
||
"请选择职位类型"
}}
<view
:class=
"`inner flex-between $
{
pinias.
formData.jobTypeText ? '' : 'placeholder'}`">
{{
pinias
.
formData
.
jobTypeText
||
"请选择职位类型"
}}
<view
class=
"arrow"
></view>
</view>
</wd-col-picker>
...
...
@@ -37,12 +37,17 @@
<view
class=
"form-item"
>
<view
class=
"form-item-title"
>
职位标题
</view>
<view
class=
"inner flex-between"
>
<input
v-model=
"formData.jobName"
type=
"text"
placeholder-class=
"placeholder"
placeholder=
"请输入职业标题"
/>
<input
v-model=
"pinias.formData.jobName"
type=
"text"
placeholder-class=
"placeholder"
placeholder=
"请输入职业标题"
/>
</view>
</view>
<view
class=
"form-item describe"
style=
"border: 0"
>
<view
class=
"form-item-title"
>
职位描述
</view>
<textarea
v-model=
"
formData.jobDesc"
placeholder=
"请输入你的职位描述"
/>
<textarea
maxlength=
"500"
v-model=
"pinias.
formData.jobDesc"
placeholder=
"请输入你的职位描述"
/>
</view>
</view>
...
...
@@ -51,7 +56,7 @@
</view>
-->
<wd-tabbar
@
tap=
"next"
custom-style=
"display: flex;justify-content: center !important;"
custom-style=
"display: flex;justify-content: center !important;
z-index:1;
"
fixed
placeholder
safeAreaInsetBottom
...
...
@@ -64,12 +69,20 @@
<
script
setup
>
import
{
getEumData
}
from
"@/utils/utils"
;
import
{
ref
}
from
"vue"
;
import
{
useReleasePostionStore
}
from
"./store"
;
import
{
dictJobTypeApi
}
from
"@/api/common"
;
import
{
getJobByIdApi
}
from
"@/api/postion"
;
import
{
validateForm
}
from
"@/utils/utils"
;
import
_
from
"lodash"
;
const
{
formData
,
setFormDataKey
,
setForm
}
=
useReleasePostionStore
();
import
{
useReleasePostionStore
}
from
"./store"
;
const
pinias
=
useReleasePostionStore
();
onLoad
(
option
=>
{
const
{
id
}
=
option
;
if
(
!
id
)
{
pinias
.
resetForm
();
}
});
/* 兼职全职枚举 */
const
EnumWorkMode
=
ref
([]);
const
getEnumWorkMode
=
async
()
=>
{
...
...
@@ -78,15 +91,15 @@ const getEnumWorkMode = async () => {
getEnumWorkMode
();
const
changeWorkMode
=
mode
=>
{
setFormDataKey
(
"workMode"
,
mode
);
setFormDataKey
(
"minSalary"
,
0
);
setFormDataKey
(
"maxSalary"
,
0
);
pinias
.
setFormDataKey
(
"workMode"
,
mode
);
pinias
.
setFormDataKey
(
"minSalary"
,
0
);
pinias
.
setFormDataKey
(
"maxSalary"
,
0
);
if
(
mode
==
2
)
{
// 小时
setFormDataKey
(
"settlementType"
,
1
);
pinias
.
setFormDataKey
(
"settlementType"
,
1
);
}
else
{
// 月
setFormDataKey
(
"settlementType"
,
4
);
pinias
.
setFormDataKey
(
"settlementType"
,
4
);
}
};
/* 职业类型 */
...
...
@@ -107,13 +120,15 @@ const columnChange = ({ selectedItem, resolve, finish }) => {
};
const
handleConfirm
=
({
selectedItems
,
value
})
=>
{
const
taget
=
_
.
last
(
selectedItems
);
setFormDataKey
(
"jobTypeText"
,
taget
.
name
);
setFormDataKey
(
"jobType"
,
taget
.
id
);
pinias
.
setFormDataKey
(
"jobTypeText"
,
taget
.
name
);
pinias
.
setFormDataKey
(
"jobType"
,
taget
.
id
);
};
const
next
=
()
=>
{
uni
.
navigateTo
({
url
:
"/pages/recommend/releasePostion/step2"
});
if
(
validateForm
(
pinias
.
formData
,
[
"jobType"
,
"jobTypeText"
,
"jobName"
,
"jobDesc"
]))
{
uni
.
navigateTo
({
url
:
"/pages/recommend/releasePostion/step2"
});
}
};
</
script
>
...
...
src/pages/recommend/releasePostion/step2.vue
View file @
da296582
...
...
@@ -8,28 +8,47 @@
<view
class=
"content"
>
<view
class=
"form-item"
>
<view
class=
"form-item-title"
>
职位薪资
</view>
<wd-col-picker
v-model=
"value"
:columns=
"columns"
:column-change=
"columnChange"
@
confirm=
"handleConfirm"
use-default-slot
<view
v-if=
"pinias.formData.settlementType == 4"
:class=
"`inner flex-between $
{salaryText ? '' : 'placeholder'}`"
@click="onOpen"
>
<view
:class=
"`inner flex-between $
{salaryText ? '' : 'placeholder'}`" bind:tap="onOpen">
{{
salaryText
||
"请选择(全职为月薪兼职为时薪)"
}}
{{
salaryText
||
"请选择月薪范围"
}}
<view
class=
"arrow"
></view>
<!--
<view
class=
"arrow"
></view>
-->
<checkbox
class=
"checkbox"
@
click=
"onChecked"
:checked=
"my"
>
面议
</checkbox>
</view>
<view
v-else
:class=
"`inner flex-between $
{salaryText ? '' : 'placeholder'}`" @click="onOpen">
{{
salaryText
||
"请选择时薪范围"
}}
<!--
<view
class=
"arrow"
></view>
-->
<checkbox
class=
"checkbox"
@
click=
"onChecked"
:checked=
"my"
>
面议
</checkbox>
</view>
<wd-popup
v-model=
"show"
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
name=
"close"
size=
"30rpx"
></wd-icon>
</view>
</wd-col-picker>
<wd-picker-view
@
change=
"handleConfirm"
use-default-slot
:columns=
"columns"
v-model=
"value"
@
close=
"handleClose"
></wd-picker-view>
</wd-popup>
</view>
<view
class=
"form-item"
>
<view
class=
"form-item-title"
>
是否提供食宿
</view>
<view
class=
"inner flex-between"
>
<!--
<van-radio-group
model:value=
"
{{
accommodation
}}
">
<van-radio
name=
"
{{
item
.
code
}}
" wx:for="
{{
EnumAccommodation
}}
" wx:key="index">
{{
item
.
text
}}
</van-radio>
</van-radio-group>
-->
<wd-radio-group
v-model=
"formData.accommodation"
inline
shape=
"dot"
>
<wd-radio
v-for=
"v in radioOpstion"
:value=
"v.code"
>
{{
v
.
text
}}
</wd-radio>
<wd-radio-group
v-model=
"pinias.formData.accommodation"
inline
shape=
"dot"
>
<wd-radio
v-for=
"(v, n) in radioOpstion"
:value=
"v.code"
:key=
"n"
>
{{
v
.
text
}}
</wd-radio>
</wd-radio-group>
</view>
</view>
...
...
@@ -59,71 +78,106 @@
</
template
>
<
script
setup
>
import
{
useReleasePostionStore
}
from
"./store"
;
import
{
getEumData
}
from
"@/utils/utils"
;
const
{
formData
,
setFormDataKey
}
=
useReleasePostionStore
();
import
{
useReleasePostionStore
}
from
"./store"
;
/* tab */
const
pinias
=
useReleasePostionStore
();
/* 薪资选择 */
cons
t
salaryText
=
ref
(
""
);
le
t
salaryText
=
ref
(
""
);
const
value
=
ref
([]);
const
columns
=
ref
([]);
console
.
log
(
formData
.
settlementType
);
let
my
=
ref
(
pinias
.
formData
.
negotiableSalary
==
1
);
console
.
log
(
pinias
.
formData
.
settlementType
,
"pinias.formData.settlementType"
);
const
show
=
ref
(
false
);
let
multiple
=
1
;
/* 兼职薪资基准 */
if
(
formData
.
settlementType
==
1
)
{
multiple
=
1
0
;
if
(
pinias
.
formData
.
settlementType
==
1
)
{
multiple
=
5
0
;
}
else
{
multiple
=
1000
;
}
const
initSalaryColumns
=
()
=>
{
const
temp
=
[
{
value
:
"面议"
,
label
:
"面议"
,
next
:
false
}
];
for
(
let
i
=
1
;
i
<
50
;
i
++
)
{
const
temp
=
[];
const
maxSalary
=
pinias
.
formData
.
settlementType
===
1
?
1000
:
50
*
multiple
;
// 生成序列
for
(
let
i
=
1
;
i
*
multiple
<=
maxSalary
;
i
++
)
{
const
currentValue
=
i
*
multiple
;
temp
.
push
({
value
:
i
*
multipl
e
,
label
:
i
*
multiple
,
value
:
currentValu
e
,
label
:
pinias
.
formData
.
settlementType
===
1
?
currentValue
:
`
${
currentValue
/
1000
}
k`
,
next
:
true
});
}
columns
.
value
.
push
(
temp
);
// 确保 columns.value 是一个数组
if
(
!
Array
.
isArray
(
columns
.
value
))
{
columns
.
value
=
[];
}
// 清空原来的数组,以确保只包含新的数据
columns
.
value
.
length
=
0
;
// 将 temp 复制两次,推入 columns.value
columns
.
value
.
push
([...
temp
],
[...
temp
]);
};
initSalaryColumns
();
const
columnChange
=
({
selectedItem
,
resolve
,
finish
})
=>
{
console
.
log
(
selectedItem
);
if
(
selectedItem
.
next
)
{
const
temp
=
[];
for
(
let
i
=
1
;
i
<
50
;
i
++
)
{
temp
.
push
({
value
:
i
*
multiple
+
selectedItem
.
value
,
label
:
i
*
multiple
+
selectedItem
.
value
,
next
:
false
});
resolve
(
temp
);
}
function
onChecked
()
{
my
.
value
=
!
my
.
value
;
// 如果勾选了面议
if
(
my
.
value
)
{
salaryText
.
value
=
""
;
pinias
.
setFormDataKey
(
"maxSalary"
,
0
);
pinias
.
setFormDataKey
(
"minSalary"
,
0
);
pinias
.
setFormDataKey
(
"negotiableSalary"
,
1
);
}
else
{
finish
(
);
pinias
.
setFormDataKey
(
"negotiableSalary"
,
0
);
}
};
}
onShow
(()
=>
{
// setFormDataKey("negotiableSalary", 0);
// setFormDataKey("maxSalary", 0);
// setFormDataKey("minSalary", 0);
});
const
handleConfirm
=
({
value
,
selectedItem
})
=>
{
salaryText
.
value
=
value
.
join
(
"~"
);
console
.
log
(
"value"
,
value
);
if
(
value
[
1
]
<
value
[
0
])
{
xma
.
showToast
({
title
:
"最高薪资不能小于最低薪资"
,
icon
:
"none"
});
return
;
}
my
.
value
=
false
;
if
(
pinias
.
formData
.
settlementType
===
1
)
{
salaryText
.
value
=
value
.
join
(
"~"
);
}
else
{
salaryText
.
value
=
value
.
map
(
num
=>
`
${
num
/
multiple
}
k`
).
join
(
"~"
);
}
const
[
min
,
max
]
=
value
;
if
(
max
)
{
setFormDataKey
(
"maxSalary"
,
max
);
setFormDataKey
(
"minSalary"
,
min
);
setFormDataKey
(
"negotiableSalary"
,
0
);
pinias
.
setFormDataKey
(
"maxSalary"
,
max
);
pinias
.
setFormDataKey
(
"minSalary"
,
min
);
pinias
.
setFormDataKey
(
"negotiableSalary"
,
0
);
}
else
{
setFormDataKey
(
"maxSalary"
,
0
);
setFormDataKey
(
"minSalary"
,
0
);
setFormDataKey
(
"negotiableSalary"
,
1
);
pinias
.
setFormDataKey
(
"maxSalary"
,
0
);
pinias
.
setFormDataKey
(
"minSalary"
,
0
);
pinias
.
setFormDataKey
(
"negotiableSalary"
,
1
);
}
};
function
onOpen
()
{
if
(
my
.
value
)
return
;
show
.
value
=
true
;
}
function
handleClose
()
{
show
.
value
=
false
;
}
/* 是否提供住宿 */
const
radioOpstion
=
ref
([]);
const
initRadioOpstion
=
async
()
=>
{
...
...
@@ -154,14 +208,22 @@ const onChangeBenefits = e => {
};
// 下一页
const
next
=
()
=>
{
setFormDataKey
(
pinias
.
setFormDataKey
(
"benefits"
,
benefits
.
value
.
filter
(
v
=>
v
.
active
)
.
map
(
v
=>
v
.
text
)
.
join
(
","
)
);
if
(
pinias
.
formData
.
negotiableSalary
==
0
)
{
if
(
pinias
.
formData
.
maxSalary
==
0
||
pinias
.
formData
.
minSalary
==
0
)
{
xma
.
showToast
({
title
:
"请输入薪资"
,
icon
:
"none"
});
return
;
}
}
uni
.
navigateTo
({
url
:
"/pages/recommend/releasePostion/step3"
});
...
...
@@ -169,15 +231,17 @@ const next = () => {
/* 初始化 */
const
initViewData
=
()
=>
{
console
.
log
(
formData
);
if
(
formData
.
id
)
{
console
.
log
(
pinias
.
formData
);
if
(
pinias
.
formData
.
id
)
{
// 福利
if
(
formData
.
benefits
)
{
if
(
pinias
.
formData
.
benefits
)
{
benefits
.
value
.
forEach
(
v
=>
{
v
.
active
=
formData
.
benefits
.
indexOf
(
v
.
text
)
!==
-
1
;
v
.
active
=
pinias
.
formData
.
benefits
.
indexOf
(
v
.
text
)
!==
-
1
;
});
}
salaryText
.
value
=
formData
.
negotiableSalary
?
"面议"
:
`
${
formData
.
minSalary
}
~
${
formData
.
maxSalary
}
`
;
salaryText
.
value
=
pinias
.
formData
.
negotiableSalary
?
"面议"
:
`
${
pinias
.
formData
.
minSalary
}
~
${
pinias
.
formData
.
maxSalary
}
`
;
}
};
initViewData
();
...
...
@@ -197,6 +261,19 @@ initViewData();
margin-bottom
:
24rpx
;
}
}
:deep
(
.uni-checkbox-input
)
{
border-radius
:
50%
!
important
;
}
.title-box
{
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
box-sizing
:
border-box
;
padding
:
0
32rpx
;
.title
{
font-weight
:
bold
;
}
}
.welfare
{
display
:
flex
;
flex-wrap
:
wrap
;
...
...
src/pages/recommend/releasePostion/step3.vue
View file @
da296582
...
...
@@ -11,7 +11,7 @@
<view
:class=
"`inner flex-between $
{address ? '' : 'placeholder'}`" @tap="getLocaltion">
<view
class=
"flex-align-center"
>
<image
src=
"@/static/image/icon/position.png"
/>
{{
address
||
"请选择工作地址"
}}
{{
address
||
pinias
.
formData
.
address
||
"请选择工作地址"
}}
</view>
<view
class=
"arrow"
></view>
</view>
...
...
@@ -31,10 +31,13 @@
<
script
setup
>
import
{
ref
}
from
"vue"
;
import
{
useReleasePostionStore
}
from
"./store"
;
/* tab */
const
pinias
=
useReleasePostionStore
();
const
showTab
=
ref
(
true
);
const
address
=
ref
(
""
);
const
{
formData
,
setFormDataKey
}
=
useReleasePostionStore
()
;
import
{
validateForm
}
from
"@/utils/utils"
;
const
getLocaltion
=
()
=>
{
showTab
.
value
=
false
;
...
...
@@ -44,10 +47,9 @@ const getLocaltion = () => {
if
(
res
.
errMsg
==
"chooseLocation:ok"
)
{
address
.
value
=
res
.
name
;
}
setFormDataKey
(
"locationLongitude"
,
res
.
longitude
||
106.647169
);
setFormDataKey
(
"locationLatitude"
,
res
.
latitude
||
26.615808
);
setFormDataKey
(
"address"
,
res
.
name
||
"华贵保险大厦"
);
setTimeout
(()
=>
{},
1000
);
pinias
.
setFormDataKey
(
"locationLongitude"
,
res
.
longitude
||
106.647169
);
pinias
.
setFormDataKey
(
"locationLatitude"
,
res
.
latitude
||
26.615808
);
pinias
.
setFormDataKey
(
"address"
,
res
.
name
||
"华贵保险大厦"
);
showTab
.
value
=
true
;
/*
address: "长岭南路178号"
...
...
@@ -62,9 +64,11 @@ const getLocaltion = () => {
};
const
next
=
()
=>
{
uni
.
navigateTo
({
url
:
"/pages/recommend/releasePostion/step4"
});
if
(
validateForm
(
pinias
.
formData
,
[
"address"
]))
{
uni
.
navigateTo
({
url
:
"/pages/recommend/releasePostion/step4"
});
}
};
</
script
>
...
...
src/pages/recommend/releasePostion/step4.vue
View file @
da296582
...
...
@@ -12,7 +12,7 @@
:columns=
"identityPostion"
value-key=
"code"
label-key=
"text"
v-model=
"formData.identityRequirement"
v-model=
"
pinias.
formData.identityRequirement"
@
confirm=
"handleConfirmIdentity"
use-default-slot
>
...
...
@@ -30,7 +30,7 @@
:columns=
"educationPostion"
value-key=
"code"
label-key=
"text"
v-model=
"formData.educationRequirement"
v-model=
"
pinias.
formData.educationRequirement"
@
confirm=
"handleConfirmEducation"
use-default-slot
>
...
...
@@ -61,7 +61,7 @@
</view>
<wd-tabbar
@
tap=
"next"
custom-style=
"display: flex;justify-content: center !important;"
custom-style=
"display: flex;justify-content: center !important;
z-index:1;
"
fixed
placeholder
safeAreaInsetBottom
...
...
@@ -75,7 +75,8 @@
import
{
ref
}
from
"vue"
;
import
{
getEumData
,
getEnumText
}
from
"@/utils/utils"
;
import
{
useReleasePostionStore
}
from
"./store"
;
const
{
formData
,
setFormDataKey
}
=
useReleasePostionStore
();
/* tab */
const
pinias
=
useReleasePostionStore
();
const
identityText
=
ref
(
""
);
const
educationText
=
ref
(
""
);
const
identityPostion
=
ref
([]);
...
...
@@ -106,7 +107,7 @@ const initSalaryColumns = () => {
next
:
false
}
];
for
(
let
i
=
1
;
i
<
50
;
i
++
)
{
for
(
let
i
=
1
6
;
i
<
81
;
i
++
)
{
temp
.
push
({
value
:
i
,
label
:
i
+
"岁"
,
...
...
@@ -139,16 +140,16 @@ const handleConfirm = ({ value, selectedItem }) => {
console
.
log
([
min
,
max
]);
if
(
max
)
{
// 没有选择不限
setFormDataKey
(
"maxAgeRequirement"
,
max
);
setFormDataKey
(
"minAgeRequirement"
,
min
);
pinias
.
setFormDataKey
(
"maxAgeRequirement"
,
max
);
pinias
.
setFormDataKey
(
"minAgeRequirement"
,
min
);
}
else
{
setFormDataKey
(
"maxAgeRequirement"
,
0
);
setFormDataKey
(
"minAgeRequirement"
,
0
);
pinias
.
setFormDataKey
(
"maxAgeRequirement"
,
0
);
pinias
.
setFormDataKey
(
"minAgeRequirement"
,
0
);
}
};
const
next
=
()
=>
{
console
.
log
(
formData
);
console
.
log
(
pinias
.
formData
);
uni
.
navigateTo
({
url
:
"/pages/recommend/releasePostion/step5"
});
...
...
@@ -156,13 +157,13 @@ const next = () => {
/* 初始化页面数据 */
const
initViewData
=
async
()
=>
{
if
(
formData
.
id
)
{
console
.
log
(
formData
);
if
(
pinias
.
formData
.
id
)
{
console
.
log
(
pinias
.
formData
);
identityText
.
value
=
await
getEnumText
(
"EnumIdentityRequirement"
,
formData
.
identityRequirement
);
educationText
.
value
=
await
getEnumText
(
"EnumEducationRequirement"
,
formData
.
educationRequirement
);
if
(
formData
.
maxAgeRequirement
)
{
ageText
.
value
=
`
${
formData
.
minAgeRequirement
}
~
${
formData
.
maxAgeRequirement
}
`
;
identityText
.
value
=
await
getEnumText
(
"EnumIdentityRequirement"
,
pinias
.
formData
.
identityRequirement
);
educationText
.
value
=
await
getEnumText
(
"EnumEducationRequirement"
,
pinias
.
formData
.
educationRequirement
);
if
(
pinias
.
formData
.
maxAgeRequirement
)
{
ageText
.
value
=
`
${
pinias
.
formData
.
minAgeRequirement
}
~
${
pinias
.
formData
.
maxAgeRequirement
}
`
;
}
}
};
...
...
src/pages/recommend/releasePostion/step5.vue
View file @
da296582
...
...
@@ -9,19 +9,19 @@
<view
class=
"form-item"
>
<view
class=
"form-item-title"
>
招聘人数
</view>
<view
class=
"inner felx-between"
>
<input
type=
"number"
v-model=
"formData.recruitmentNumber"
placeholder=
"请输入招聘人数"
/>
<input
type=
"number"
v-model=
"
pinias.
formData.recruitmentNumber"
placeholder=
"请输入招聘人数"
/>
</view>
</view>
<view
class=
"form-item"
>
<view
class=
"form-item-title"
>
联系电话
</view>
<view
class=
"inner felx-between"
>
<input
type=
"number"
v-model=
"formData.contactPhone"
placeholder=
"请输入联系电话"
/>
<input
type=
"number"
v-model=
"
pinias.
formData.contactPhone"
placeholder=
"请输入联系电话"
/>
</view>
</view>
<view
class=
"form-item"
>
<view
class=
"form-item-title"
>
联系人
</view>
<view
class=
"inner felx-between"
>
<input
type=
"text"
v-model=
"formData.contactPerson"
placeholder=
"请输入联系人"
/>
<input
type=
"text"
v-model=
"
pinias.
formData.contactPerson"
placeholder=
"请输入联系人"
/>
</view>
</view>
</view>
...
...
@@ -40,16 +40,17 @@
<
script
setup
>
import
{
createJobApi
,
updateJobApi
}
from
"@/api/postion"
;
import
{
useReleasePostionStore
}
from
"./store"
;
const
{
formData
,
resetForm
}
=
useReleasePostionStore
();
console
.
log
(
resetForm
);
/* tab */
const
pinias
=
useReleasePostionStore
();
import
{
validateForm
}
from
"@/utils/utils"
;
const
submit
=
()
=>
{
console
.
log
(
"submit"
,
formData
);
if
(
formData
.
id
)
{
if
(
pinias
.
formData
.
id
)
{
// 更新
updateJobApi
(
formData
).
then
(
res
=>
{
updateJobApi
(
pinias
.
formData
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
resetForm
();
pinias
.
resetForm
();
uni
.
showToast
({
title
:
"更新成功"
,
icon
:
"none"
,
...
...
@@ -69,28 +70,30 @@ const submit = () => {
}
});
}
else
{
// 提交
createJobApi
(
formData
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
resetForm
();
uni
.
showToast
({
title
:
"发布成功"
,
icon
:
"none"
,
duration
:
2000
,
success
:
()
=>
{
uni
.
switchTab
({
url
:
"/pages/recommend/index"
});
}
});
}
else
{
uni
.
showToast
({
title
:
res
.
msg
,
icon
:
"none"
,
duration
:
2000
});
}
});
if
(
validateForm
(
pinias
.
formData
,
[
"contactPhone"
,
"contactPerson"
]))
{
// 提交
createJobApi
(
pinias
.
formData
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
pinias
.
resetForm
();
uni
.
showToast
({
title
:
"发布成功"
,
icon
:
"none"
,
duration
:
2000
,
success
:
()
=>
{
uni
.
switchTab
({
url
:
"/pages/recommend/index"
});
}
});
}
else
{
uni
.
showToast
({
title
:
res
.
msg
,
icon
:
"none"
,
duration
:
2000
});
}
});
}
}
};
</
script
>
...
...
src/pages/recommend/releasePostion/store.js
View file @
da296582
import
{
defineStore
}
from
"pinia"
;
import
{
reactive
}
from
"vue"
;
import
{
reactive
,
ref
}
from
"vue"
;
export
const
useReleasePostionStore
=
defineStore
(
"releasePostion"
,
{
state
:
()
=>
({
formData
:
{
export
const
useReleasePostionStore
=
defineStore
(
"useReleasePostionStore"
,
()
=>
{
let
formData
=
ref
(
{
workMode
:
1
,
jobName
:
""
,
jobType
:
1
,
jobTypeText
:
""
,
jobDesc
:
""
,
negotiableSalary
:
1
,
settlementType
:
1
,
negotiableSalary
:
0
,
settlementType
:
4
,
minSalary
:
0
,
maxSalary
:
0
,
benefits
:
""
,
identityRequirement
:
1
,
educationRequirement
:
1
,
minAgeRequirement
:
1
,
maxAgeRequirement
:
1
,
minAgeRequirement
:
1
6
,
maxAgeRequirement
:
60
,
recruitmentNumber
:
1
,
accommodation
:
1
,
provinceCode
:
""
,
...
...
@@ -30,28 +29,27 @@ export const useReleasePostionStore = defineStore("releasePostion", {
locationLatitude
:
0
,
contactPerson
:
""
,
contactPhone
:
""
})
function
setFormDataKey
(
key
,
data
)
{
formData
.
value
[
key
]
=
data
;
}
}),
actions
:
{
setFormDataKey
(
key
,
data
)
{
this
.
formData
[
key
]
=
data
;
},
resetForm
()
{
this
.
formData
=
{
function
resetForm
()
{
formData
.
value
=
{
workMode
:
1
,
jobName
:
""
,
jobType
:
1
,
jobTypeText
:
""
,
jobDesc
:
""
,
negotiableSalary
:
1
,
negotiableSalary
:
0
,
settlementType
:
1
,
minSalary
:
0
,
maxSalary
:
0
,
benefits
:
""
,
identityRequirement
:
1
,
educationRequirement
:
1
,
minAgeRequirement
:
1
,
maxAgeRequirement
:
1
,
minAgeRequirement
:
1
6
,
maxAgeRequirement
:
60
,
recruitmentNumber
:
1
,
accommodation
:
1
,
provinceCode
:
""
,
...
...
@@ -65,10 +63,17 @@ export const useReleasePostionStore = defineStore("releasePostion", {
contactPerson
:
""
,
contactPhone
:
""
};
},
setForm
(
data
)
{
this
.
formData
=
reactive
(
data
);
console
.
log
(
"this.formData"
,
this
.
formData
);
console
.
log
(
'this.formthis.formDatathis.formDatathis.formDatathis.formDataData'
,
formData
.
value
);
}
}
function
setForm
(
data
)
{
formData
.
value
=
data
;
console
.
log
(
"this.formData"
,
formData
.
value
);
}
return
{
formData
,
setFormDataKey
,
resetForm
,
setForm
}
});
src/pages/user/businessLicense/appeal.vue
View file @
da296582
<
template
>
<div
class=
"page"
>
<NavBar
:showIcon=
"true"
:showTitle=
"true"
title=
"企业申诉"
></NavBar>
<view
class=
"appealing-name"
>
申诉企业:
{{
name
}}
</view>
<view
class=
"appealing-user-name"
>
<view>
申述人姓名
</view>
...
...
@@ -29,7 +30,7 @@
<view
class=
"t1"
>
(注:图片大小不超过10M)
</view>
</view>
<view
class=
"btn-wrap"
>
<view
class=
"btn-wrap"
v-if=
"status == 2"
>
<button
class=
"bottom-btn"
@
tap=
"submit"
>
提交
</button>
</view>
</div>
...
...
@@ -39,7 +40,7 @@
import
{
ref
,
reactive
}
from
"vue"
;
import
{
uploadFiles
}
from
"@/utils/fileUpload"
;
import
evn
from
"@/utils/config"
;
import
{
companyAppealApi
}
from
"@/api/user"
;
import
{
companyAppealApi
,
appealInfo
}
from
"@/api/user"
;
import
_
from
"lodash"
;
const
name
=
ref
(
""
);
const
params
=
reactive
({
...
...
@@ -49,9 +50,11 @@ const params = reactive({
content
:
""
,
companyId
:
1
});
let
status
=
ref
(
2
);
onLoad
(
data
=>
{
name
.
value
=
data
.
name
;
params
.
companyId
=
data
.
id
;
appealInfoFn
();
});
/* 选择图片 */
const
chooseImage
=
type
=>
{
...
...
@@ -70,6 +73,20 @@ const chooseImage = type => {
});
};
const
appealInfoFn
=
()
=>
{
appealInfo
().
then
(
res
=>
{
if
(
res
.
data
)
{
params
.
companyId
=
res
.
data
.
companyId
;
name
.
value
=
res
.
data
.
companyName
;
params
.
realName
=
res
.
data
.
realName
;
params
.
content
=
res
.
data
.
content
;
params
.
licensePath
=
res
.
data
.
licensePath
;
params
.
idCardPath
=
res
.
data
.
idCardPath
;
status
.
value
=
res
.
data
.
status
;
}
});
};
const
submit
=
()
=>
{
let
flag
=
true
;
_
.
mapValues
(
params
,
value
=>
{
...
...
src/pages/user/editUserInfo/index.vue
View file @
da296582
<
template
>
<NavBar
:showIcon=
"true"
:showTitle=
"true"
title=
"个人信息"
></NavBar>
<div
class=
"page"
>
<div
class=
"content"
>
<div
class=
"item flex-between"
>
...
...
src/pages/user/index.vue
View file @
da296582
<
template
>
<NavBar
:showIcon=
"false"
:showTitle=
"true"
title=
"我的"
textColor=
"#ffffff"
></NavBar>
<wd-overlay
:show=
"show"
>
<view
class=
"popup-wrapper"
>
<view
class=
"block"
@
click
.
stop=
""
>
<view
class=
"sumbit-error"
>
<view
class=
"title"
>
企业已存在
</view>
<view
class=
"info"
>
您在注册的
<text>
“
{{
name
}}
”
</text>
已在乐业观山湖认证,请核对企业名称是否正确
</view>
<view
class=
"btn flex-between"
@
tap=
"navigateTo('/pages/user/businessLicense/fillIn')"
>
<view
class=
"text"
>
<view
class=
"t1"
>
注册新公司
</view>
<view
class=
"t2"
>
注册新公司
</view>
</view>
<view
class=
"arrow"
></view>
</view>
<view
class=
"btn flex-between"
@
tap=
"navigateTo(`/pages/user/businessLicense/appeal?name=$
{name}
&
id=${id}`)">
<view
class=
"text"
>
<view
class=
"t1"
>
申述资质被冒用
</view>
<view
class=
"t2"
>
确定没有注册过乐业观山湖
</view>
</view>
<view
class=
"arrow"
></view>
</view>
</view>
</view>
</view>
</wd-overlay>
<div
class=
"user-container"
>
<view
class=
"bg"
></view>
<!-- 用户信息 -->
...
...
@@ -34,10 +60,13 @@
<
script
setup
>
import
navBar
from
"@/components/navBar/index.vue"
;
import
{
getLoginUserApi
,
getCompanyInfoApi
}
from
"@/api/user"
;
import
{
getLoginUserApi
,
getCompanyInfoApi
,
appealInfo
}
from
"@/api/user"
;
import
{
getEnumText
}
from
"@/utils/utils"
;
import
{
ref
,
reactive
}
from
"vue"
;
import
evn
from
"@/utils/config.js"
;
const
show
=
ref
(
false
);
let
name
=
ref
(
""
);
let
id
=
ref
(
""
);
import
{
removeToken
}
from
"@/utils/token"
;
const
navigateTo
=
(
url
,
fn
)
=>
{
if
(
fn
)
{
...
...
@@ -69,41 +98,91 @@ const navList = reactive([
removeToken
();
},
text
:
"退出登录"
},
{
icon
:
new
URL
(
"@/static/image/user/loginout.png"
,
import
.
meta
.
url
).
href
,
url
:
"/pages/user/businessLicense/fillIn"
,
text
:
"企业认证"
},
{
icon
:
new
URL
(
"@/static/image/user/loginout.png"
,
import
.
meta
.
url
).
href
,
url
:
"/pages/login/test"
,
fn
:
()
=>
{
removeToken
();
},
text
:
"退出登录(去测试登录)"
}
// {
// icon: new URL("@/static/image/user/loginout.png", import.meta.url).href,
// url: "/pages/user/businessLicense/fillIn",
// text: "企业认证"
// },
// {
// icon: new URL("@/static/image/user/loginout.png", import.meta.url).href,
// url: "/pages/login/test",
// fn: () => {
// removeToken();
// },
// text: "退出登录(去测试登录)"
// }
]);
/* 个人信息 */
const
userInfo
=
ref
({});
const
appealInfoFn
=
()
=>
{
appealInfo
().
then
(
res
=>
{
show
.
value
=
false
;
if
(
res
.
data
.
status
==
2
)
{
navList
[
0
].
url
=
"/pages/user/businessLicense/appeal"
;
navList
[
0
].
subText
=
"申诉不通过"
;
}
else
if
(
res
.
data
.
status
==
0
)
{
navList
[
0
].
subText
=
"申诉中"
;
navList
[
0
].
url
=
"/pages/user/businessLicense/appeal"
;
}
});
};
/* 获取用户信息 */
const
getUserInfo
=
async
()
=>
{
const
userRes
=
await
getLoginUserApi
();
if
(
userRes
.
code
==
200
)
{
userInfo
.
value
=
userRes
.
data
||
{};
navList
[
0
].
subText
=
userRes
.
data
.
companyName
;
name
.
value
=
userRes
.
data
.
companyName
;
id
.
value
=
userRes
.
data
.
companyId
;
}
const
{
status
}
=
userRes
.
data
;
if
(
status
!==
1
)
{
uni
.
hideTabBar
();
if
(
status
==
2
)
{
// 代表添加了申述信息,需要查看申述状态,调用申诉信息接口
appealInfoFn
();
}
else
if
(
status
==
3
)
{
show
.
value
=
true
;
// 代表账号所关联的企业被申述解除关联
}
}
const
companyRes
=
await
getCompanyInfoApi
();
if
(
companyRes
.
code
==
200
)
{
let
status
=
companyRes
.
data
.
companyAudit
.
status
;
if
(
status
!=
1
)
{
navList
[
0
].
subText
=
await
getEnumText
(
"EnumAuditStatus"
,
status
);
navList
[
0
].
auditStatus
=
status
;
uni
.
hideTabBar
();
}
else
{
uni
.
showTabBar
();
if
(
status
==
1
||
status
==
4
)
{
show
.
value
=
false
;
const
companyRes
=
await
getCompanyInfoApi
();
if
(
companyRes
.
code
==
200
)
{
let
type
=
companyRes
.
data
.
companyAudit
.
status
;
if
(
type
!=
1
)
{
navList
[
0
].
subText
=
await
getEnumText
(
"EnumAuditStatus"
,
type
);
navList
[
0
].
auditStatus
=
type
;
uni
.
hideTabBar
();
}
else
{
uni
.
showTabBar
();
}
}
}
// const companyRes = await getCompanyInfoApi();
// if (companyRes.code == 200) {
// let status = companyRes.data.companyAudit.status;
// if (status != 1) {
// navList[0].subText = await getEnumText("EnumAuditStatus", status);
// navList[0].auditStatus = status;
// uni.hideTabBar();
// } else {
// uni.showTabBar();
// }
// }
// if (companyRes.data.companyAppeal && companyRes.data.companyAppeal.status == 1) {
// } else if (companyRes.data.companyAppeal.status == 0) {
// navList[0].subText = "申诉中";
// navList[0].url = "/pages/user/businessLicense/appeal";
// uni.hideTabBar();
// } else {
// uni.showTabBar();
// navList[0].url = "/pages/user/businessLicense/appeal";
// navList[0].subText = "申诉不通过";
// }
};
onShow
(()
=>
{
getUserInfo
();
...
...
@@ -114,6 +193,66 @@ onShow(() => {
.user-container
{
padding-top
:
1rpx
;
}
.popup-wrapper
{
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
height
:
100%
;
.sumbit-error
{
position
:
relative
;
box-sizing
:
border-box
;
width
:
600rpx
;
padding
:
0
32rpx
32rpx
;
background-color
:
#ffffff
;
border-radius
:
10rpx
;
image
{
position
:
absolute
;
top
:
20rpx
;
right
:
20rpx
;
width
:
30rpx
;
height
:
30rpx
;
}
.title
{
padding
:
32rpx
0
;
font-size
:
36rpx
;
font-weight
:
600
;
line-height
:
54rpx
;
color
:
#1b2026
;
text-align
:
center
;
}
.info
{
font-family
:
"PingFang SC"
;
font-size
:
24rpx
;
line-height
:
48rpx
;
text
{
color
:
#1f86ff
;
}
}
.btn
{
padding
:
24rpx
;
padding-right
:
36rpx
;
margin-top
:
32rpx
;
border
:
2rpx
solid
#dfe1e5
;
border-radius
:
8rpx
;
.t1
{
font-size
:
28rpx
;
font-weight
:
500
;
line-height
:
36rpx
;
color
:
#1b2026
;
}
.t2
{
margin-top
:
8rpx
;
font-size
:
24rpx
;
line-height
:
36rpx
;
color
:
#a3a7b3
;
}
.arrow
{
border-color
:
#77818f
;
}
}
}
}
.nav-bar
{
.text
{
margin
:
0
auto
;
...
...
src/pages/user/myCompany/licenseInfo.vue
View file @
da296582
...
...
@@ -2,22 +2,17 @@
<NavBar
:showIcon=
"true"
:showTitle=
"true"
title=
"营业执照认证"
backgroundBox=
"#FFFFFF"
></NavBar>
<div
class=
"page"
>
<div
class=
"audit-message"
>
<p
class=
"title"
:style=
"
{ background:
companyInfo.companyAudit.
status == 2 ? '#ff5113' : '#1F86FF' }">
{{
companyInfo
.
companyAudit
.
status
==
2
?
"审核拒绝
"
:
"通过审核"
}}
<p
class=
"title"
:style=
"
{ background: status == 2 ? '#ff5113' : '#1F86FF' }">
{{
status
==
2
?
"审核拒绝"
:
status
==
0
?
"待审核
"
:
"通过审核"
}}
</p>
<div
class=
"message"
:style=
"
{ background: '#FFEDE7' }" v-if="
companyInfo.companyAudit.
status == 2">
<div
class=
"message"
:style=
"
{ background: '#FFEDE7' }" v-if="status == 2">
<p>
拒绝原因
</p>
{{
companyInfo
.
companyAudit
.
auditMessage
}}
</div>
</div>
<view
class=
"image-wrap"
>
<div
class=
"title"
v-if=
"companyInfo.companyAudit.status == 2"
>
重新提交
</div>
<image
@
click=
"chooseImage"
v-if=
"companyInfo.companyAudit.licensePath"
:src=
"evn.APP_IMAGE_BASE_API + companyInfo.companyAudit.licensePath"
mode=
""
/>
<div
class=
"title"
v-if=
"status == 2"
>
重新提交
</div>
<image
@
click=
"chooseImage"
v-if=
"myLicensePath"
:src=
"evn.APP_IMAGE_BASE_API + myLicensePath"
mode=
""
/>
<view>
注:接受拍摄复印件,黑白复印需要加盖公章,大小不超过10M
</view>
</view>
<view
class=
"content-wrap"
>
...
...
@@ -25,8 +20,8 @@
<wd-input
type=
"text"
size=
"small"
:disabled=
"
companyInfo.companyAudit.
status != 2"
v-model=
"company
Info.companyAudit.company
Name"
:disabled=
"status != 2"
v-model=
"companyName"
placeholder=
"请输入企业全称"
:use-label-slot=
"true"
@
input=
"handleChange($event, 'companyName')"
...
...
@@ -40,11 +35,11 @@
<wd-input
type=
"text"
size=
"small"
:disabled=
"
companyInfo.companyAudit.
status != 2"
v-model=
"
companyInfo.companyAudit.credit
Code"
:disabled=
"status != 2"
v-model=
"
my
Code"
placeholder=
"请输入信用代码"
:use-label-slot=
"true"
@
input=
"handleChange($event, '
credit
Code')"
@
input=
"handleChange($event, '
my
Code')"
>
<
template
#
label
>
<view
class=
"label"
>
信用代码
</view>
...
...
@@ -54,7 +49,7 @@
<view
class=
"item"
>
<view
class=
"label"
>
有效期
</view>
<view
class=
"content"
>
<wd-radio-group
v-model=
"radio"
shape=
"dot"
inline
:disabled=
"
companyInfo.companyAudit.
status != 2"
>
<wd-radio-group
v-model=
"radio"
shape=
"dot"
inline
:disabled=
"status != 2"
>
<wd-radio
:value=
"1"
>
长期
</wd-radio>
<wd-radio
:value=
"2"
>
具体时间
</wd-radio>
</wd-radio-group>
...
...
@@ -63,58 +58,65 @@
<view
class=
"item"
>
<view
class=
"label"
>
日期
</view>
<wd-calendar
v-model=
"
companyInfo.l
icenseValidityPeriod"
:disabled=
"radio == 1 &&
companyInfo.companyAudit.
status != 2"
v-model=
"
myL
icenseValidityPeriod"
:disabled=
"radio == 1 && status != 2"
:min-date=
"new Date().getTime()"
:max-date=
"new Date('2059/01/01').getTime()"
use-default-slot
>
<view
:class=
"`content ${radio == 1 ? 'disabled' : ''}`"
>
{{
(companyInfo.licenseValidityPeriod
&&
dayjs(companyInfo.licenseValidityPeriod).format("YYYY-MM-DD")) ||
"请选择"
}}
{{ (myLicenseValidityPeriod
&&
dayjs(myLicenseValidityPeriod).format("YYYY-MM-DD")) || "请选择" }}
</view>
</wd-calendar>
</view>
</view>
<view
class=
"btn-wrap"
v-if=
"
companyInfo.companyAudit.
status == 2"
>
<view
class=
"btn-wrap"
v-if=
"status == 2"
>
<button
class=
"bottom-btn"
@
tap=
"submit"
>
提交
</button>
</view>
</div>
</template>
<
script
setup
>
import
{
useCompanyInfoStore
}
from
"./companyInfo"
;
import
evn
from
"@/utils/config"
;
import
{
uploadFiles
}
from
"@/utils/fileUpload"
;
import
{
getCompanyInfoApi
,
resubmitCompanyApi
}
from
"@/api/user"
;
import
{
ref
}
from
"vue"
;
import
dayjs
from
"dayjs"
;
import
{
resubmitCompanyApi
}
from
"@/api/user"
;
const
{
companyInfo
}
=
useCompanyInfoStore
();
const
radio
=
ref
(
1
);
const
myCompanyName
=
ref
(
""
);
const
myCreditCode
=
ref
(
""
);
if
(
companyInfo
.
licenseValidityPeriod
==
4102329600000
)
{
radio
.
value
=
1
;
}
else
{
radio
.
value
=
2
;
}
onMounted
(()
=>
{
myCompanyName
.
value
=
companyInfo
.
companyAudit
.
companyName
;
myCreditCode
.
value
=
companyInfo
.
companyAudit
.
creditCode
;
const
companyName
=
ref
(
""
);
const
myCode
=
ref
(
""
);
const
myLicensePath
=
ref
(
""
);
let
status
=
ref
(
1
);
let
myLicenseValidityPeriod
=
ref
(
4102329600000
);
let
companyInfo
=
reactive
({});
onReady
(()
=>
{
getCompanyInfoApiFn
();
});
function
getCompanyInfoApiFn
()
{
getCompanyInfoApi
().
then
(
res
=>
{
companyInfo
=
res
.
data
;
status
.
value
=
res
.
data
.
companyAudit
.
status
;
myLicensePath
.
value
=
res
.
data
.
companyAudit
.
licensePath
;
companyName
.
value
=
res
.
data
.
companyAudit
.
companyName
;
myCode
.
value
=
res
.
data
.
companyAudit
.
creditCode
;
myLicenseValidityPeriod
.
value
=
res
.
data
.
licenseValidityPeriod
;
if
(
res
.
data
.
licenseValidityPeriod
==
4102329600000
)
{
radio
.
value
=
1
;
}
else
{
radio
.
value
=
2
;
}
});
}
/* 选择图片 */
const
chooseImage
=
()
=>
{
if
(
companyInfo
.
companyAudit
.
status
==
2
)
{
if
(
status
.
value
==
2
)
{
uni
.
chooseImage
({
count
:
1
,
success
:
async
({
tempFiles
})
=>
{
const
res
=
await
uploadFiles
(
tempFiles
);
companyInfo
.
companyAudit
.
licensePath
=
res
[
0
].
key
;
myLicensePath
.
value
=
res
[
0
].
key
;
}
});
}
...
...
@@ -122,31 +124,21 @@ const chooseImage = () => {
const
handleChange
=
(
event
,
type
)
=>
{
if
(
type
==
"companyName"
)
{
myC
ompanyName
.
value
=
event
.
value
;
c
ompanyName
.
value
=
event
.
value
;
}
else
{
myCreditCode
.
value
=
event
.
value
;
console
.
log
(
"event"
,
myCreditCode
.
value
);
myCode
.
value
=
event
.
value
;
}
};
const
submit
=
()
=>
{
console
.
log
(
companyInfo
);
let
{
companyName
:
name
,
creditCode
,
licenseValidityPeriod
,
licensePath
}
=
companyInfo
.
companyAudit
;
creditCode
=
myCreditCode
.
value
;
name
=
myCompanyName
.
value
;
console
.
log
(
"event"
,
creditCode
,
name
);
name
=
companyName
.
value
;
if
(
radio
.
value
==
1
)
{
licenseValidityPeriod
=
"2099-12-31"
;
}
else
{
licenseValidityPeriod
=
myLicenseValidityPeriod
.
value
;
}
console
.
log
(
"{ name, creditCode, licenseValidityPeriod, licensePath }"
,
{
name
,
creditCode
,
licenseValidityPeriod
,
licensePath
});
resubmitCompanyApi
({
name
,
creditCode
,
licenseValidityPeriod
,
licensePath
}).
then
(
res
=>
{
resubmitCompanyApi
({
name
,
creditCode
:
myCode
.
value
,
licenseValidityPeriod
,
licensePath
:
myLicensePath
.
value
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
uni
.
showToast
({
title
:
"提交成功"
,
...
...
src/pages/user/resume/index.vue
View file @
da296582
<
template
>
<NavBar
:showIcon=
"true"
:showTitle=
"true"
title=
"简历详情"
backgroundBox=
"transparent"
></NavBar>
<div
class=
"resume-page"
>
<!-- 个人信息 -->
<view
class=
"user-info flex-between"
>
...
...
src/static/image/enmpty-dt.png
0 → 100644
View file @
da296582
15.4 KB
src/static/image/icon/top.png
0 → 100644
View file @
da296582
378 Bytes
src/utils/request.js
View file @
da296582
import
axios
from
"axios"
;
import
{
getToken
}
from
"@/utils/token"
;
const
baseURL
=
"https://lygsh-api.wjzpgz.com/"
;
// const baseURL = "https://lygsh-api.wjzpgz.com/";
const
baseURL
=
"http://192.168.11.179:8080/"
;
// 创建一个 axios 实例
const
instance
=
axios
.
create
({
baseURL
,
// 设置基础 URL
...
...
src/utils/utils.js
View file @
da296582
...
...
@@ -67,3 +67,47 @@ export const formatTimestamp = (timestamp, formatString = "YYYY-MM-DD hh:mm:ss")
.
replace
(
/mm/g
,
minute
)
.
replace
(
/ss/g
,
second
);
}
export
const
validateForm
=
(
formData
,
requiredFields
)
=>
{
const
phoneRegex
=
/^1
[
3-9
]\d{9}
$/
;
// 正则表达式匹配中国大陆手机号码
for
(
const
field
of
requiredFields
)
{
if
(
field
===
"contactPhone"
)
{
if
(
!
formData
[
field
]
||
!
phoneRegex
.
test
(
formData
[
field
]))
{
uni
.
showToast
({
title
:
`请填写正确电话号码!`
,
icon
:
"none"
,
duration
:
2000
});
return
false
;
}
}
else
if
(
!
formData
[
field
])
{
uni
.
showToast
({
title
:
`请填写
${
field
===
"jobTypeText"
?
"职位类型"
:
field
===
"jobDesc"
?
"职位描述"
:
field
===
"jobName"
?
"职位名称"
:
field
===
'address'
?
'工作地址'
:
field
===
'identityRequirement'
?
'身份要求'
:
field
===
'educationRequirement'
?
'学历要求'
:
field
===
'maxAgeRequirement'
?
'年龄要求'
:
field
===
'contactPerson'
?
'联系人'
:
field
===
'jobType'
?
'职位类型'
:
""
}
!`
,
icon
:
"none"
,
duration
:
2000
});
return
false
;
}
}
return
true
;
}
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