Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
XBPX-ZP
Project
Project
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
Graph
比较
统计图
议题
0
议题
0
列表
看板
标记
Milestones
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
刘旭
XBPX-ZP
Commits
ca2001b3
提交
ca2001b3
authored
12月 12, 2023
作者:
刘旭
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
西部人力初步上线
上级
155e06ea
隐藏空白字符变更
内嵌
并排
正在显示
39 个修改的文件
包含
1942 行增加
和
360 行删除
+1942
-360
settings.json
.vscode/settings.json
+5
-5
vite.svg
public/vite.svg
+0
-2
imgUrl.ts
src/assets/imgUrl.ts
+0
-5
RichTextEditor.vue
src/components/RichTextEditor.vue
+2
-1
commonItem.vue
src/components/commonItem.vue
+85
-0
contentBlock.vue
src/components/contentBlock.vue
+5
-3
customSelect.vue
src/components/customSelect.vue
+1
-0
previewFile.vue
src/components/previewFile.vue
+2
-1
search.vue
src/components/search.vue
+2
-2
recruitmentManagement.ts
src/services/api/recruitmentManagement.ts
+44
-1
skillTraining.ts
src/services/api/skillTraining.ts
+0
-7
index.ts
src/services/index.ts
+3
-0
index.scss
src/views/collegeStudents/index.scss
+130
-1
index.vue
src/views/collegeStudents/index.vue
+234
-29
index.vue
src/views/login/index.vue
+41
-25
index.scss
src/views/policy/index.scss
+1
-1
index.vue
src/views/policy/index.vue
+1
-1
companyDetail.vue
src/views/recruitmentManagement/companyDetail.vue
+217
-34
morePosition.vue
src/views/recruitmentManagement/components/morePosition.vue
+243
-55
position.vue
src/views/recruitmentManagement/components/position.vue
+19
-16
previewResume.vue
src/views/recruitmentManagement/components/previewResume.vue
+48
-3
resume.vue
src/views/recruitmentManagement/components/resume.vue
+236
-69
talent.vue
src/views/recruitmentManagement/components/talent.vue
+15
-7
index.ts
src/views/recruitmentManagement/config/index.ts
+24
-0
editCompany.vue
src/views/recruitmentManagement/editCompany.vue
+2
-2
editResume.vue
src/views/recruitmentManagement/editResume.vue
+29
-1
enterpriseRecruitment.vue
src/views/recruitmentManagement/enterpriseRecruitment.vue
+6
-5
index.vue
src/views/recruitmentManagement/index.vue
+7
-4
personalRecruitment.vue
src/views/recruitmentManagement/personalRecruitment.vue
+7
-8
positionDetail.vue
src/views/recruitmentManagement/positionDetail.vue
+3
-24
seeMoreCompany.vue
src/views/recruitmentManagement/seeMoreCompany.vue
+250
-3
seeMorePosition.vue
src/views/recruitmentManagement/seeMorePosition.vue
+97
-35
companyDetail.scss
src/views/recruitmentManagement/style/companyDetail.scss
+4
-0
editResume.scss
src/views/recruitmentManagement/style/editResume.scss
+2
-1
enterprise.scss
src/views/recruitmentManagement/style/enterprise.scss
+2
-2
seeMoreCompany.scss
src/views/recruitmentManagement/style/seeMoreCompany.scss
+165
-0
index.vue
src/views/streetOfficeSpecialTopic/index.vue
+7
-3
components.d.ts
types/components.d.ts
+1
-3
vite.config.ts
vite.config.ts
+2
-1
没有找到文件。
.vscode/settings.json
浏览文件 @
ca2001b3
//
根目录下新建.vscode/settings.json文件
//
settings.json
{
"editor.formatOnType"
:
true
,
"editor.formatOnSave"
:
true
,
"editor.codeActionsOnSave"
:
{
"source.fixAll.eslint"
:
true
}
"editor.formatOnType"
:
true
,
"editor.formatOnSave"
:
true
,
"editor.codeActionsOnSave"
:
{
"source.fixAll.eslint"
:
true
}
}
public/vite.svg
deleted
100644 → 0
浏览文件 @
155e06ea
<svg
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
aria-hidden=
"true"
role=
"img"
class=
"iconify iconify--logos"
width=
"31.88"
height=
"32"
preserveAspectRatio=
"xMidYMid meet"
viewBox=
"0 0 256 257"
><defs><linearGradient
id=
"IconifyId1813088fe1fbc01fb466"
x1=
"-.828%"
x2=
"57.636%"
y1=
"7.652%"
y2=
"78.411%"
><stop
offset=
"0%"
stop-color=
"#41D1FF"
></stop><stop
offset=
"100%"
stop-color=
"#BD34FE"
></stop></linearGradient><linearGradient
id=
"IconifyId1813088fe1fbc01fb467"
x1=
"43.376%"
x2=
"50.316%"
y1=
"2.242%"
y2=
"89.03%"
><stop
offset=
"0%"
stop-color=
"#FFEA83"
></stop><stop
offset=
"8.333%"
stop-color=
"#FFDD35"
></stop><stop
offset=
"100%"
stop-color=
"#FFA800"
></stop></linearGradient></defs><path
fill=
"url(#IconifyId1813088fe1fbc01fb466)"
d=
"M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"
></path><path
fill=
"url(#IconifyId1813088fe1fbc01fb467)"
d=
"M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"
></path></svg>
\ No newline at end of file
src/assets/imgUrl.ts
deleted
100644 → 0
浏览文件 @
155e06ea
export
const
imgUrl
=
'https://x0.ifengimg.com/res/2021/D19180EA4230E6F277709FE11A4FE1EA4A5910A1_size646_w2048_h1365.jpeg'
export
const
imgUrl1
=
'https://img1.baidu.com/it/u=3125581720,366739733&fm=253&fmt=auto&app=138&f=JPEG?w=1080&h=460'
src/components/RichTextEditor.vue
浏览文件 @
ca2001b3
...
...
@@ -117,7 +117,8 @@ const handleCreated = (editor: any) => {
}
const
mouseout
=
()
=>
{
if
(
!
flag
.
value
||
valueHtml
.
value
===
'<p><br></p>'
)
return
// if (!flag.value || valueHtml.value === '
<
p
><
br
><
/p>'
)
retur
n
if
(
!
flag
.
value
)
return
// console.log('change', valueHtml.value)
// 存储当前的文件名数组
let
newList
=
[]
as
string
[]
...
...
src/components/commonItem.vue
0 → 100644
浏览文件 @
ca2001b3
<
template
>
<div
v-if=
"isDual"
class=
"common-box"
>
<div
class=
"common-content"
></div>
<div
class=
"trapezoid"
></div>
<span
class=
"common-text"
:title=
"text"
>
{{
text
}}
</span>
</div>
<div
v-else
class=
"common-box dual-common-box"
>
<div
class=
"common-content dual-common-content"
></div>
<div
class=
"trapezoid dual-trapezoid"
></div>
<span
class=
"common-text"
style=
"color: #ffffff"
:title=
"text"
>
{{
text
}}
</span>
</div>
</
template
>
<
script
setup
lang=
"ts"
>
defineProps
({
isDual
:
{
type
:
Boolean
,
default
:
true
},
text
:
{
type
:
String
,
default
:
''
}
})
</
script
>
<
style
lang=
"scss"
scoped
>
.common-box
{
cursor
:
pointer
;
position
:
relative
;
width
:
422px
;
height
:
200px
;
background
:
#ffffff
;
border-radius
:
12px
;
padding
:
16px
;
box-sizing
:
border-box
;
.common-content
{
width
:
390px
;
height
:
168px
;
border-radius
:
12px
;
border
:
1px
solid
#177cfa
;
}
.trapezoid
{
position
:
absolute
;
width
:
100px
;
height
:
0
;
left
:
-31px
;
bottom
:
31px
;
border-bottom
:
25px
solid
#a3e4ff
;
border-left
:
25px
solid
transparent
;
border-right
:
25px
solid
transparent
;
transform
:
rotate
(
225deg
);
}
.common-text
{
position
:
absolute
;
top
:
50%
;
left
:
50%
;
transform
:
translate
(
-50%
,
-50%
);
color
:
#177cfa
;
font-size
:
30px
;
width
:
300px
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
display
:
-
webkit-box
;
-webkit-line-clamp
:
2
;
-webkit-box-orient
:
vertical
;
}
}
.dual-common-box
{
background
:
#177cfa
;
color
:
#ffffff
;
.dual-common-content
{
border
:
1px
solid
#ffffff
;
}
.dual-trapezoid
{
background
:
linear-gradient
(
180deg
,
#a3e4ff
0%
,
#5b9cff
100%
);
}
}
</
style
>
src/components/contentBlock.vue
浏览文件 @
ca2001b3
<
template
>
<div
class=
"content-container"
>
<div
v-for=
"(item, index) in list"
:key=
"index"
class=
"content-item"
@
click=
"change(item)"
>
<img
:src=
"baseURL + '/' + item?.FPICTURE"
height=
"238"
/>
<div
class=
"detail nowrap-ellipsis"
:title=
"item.FTITLE"
>
{{
item
.
FTITLE
}}
</div>
<!--
<img
:src=
"baseURL + '/' + item?.FPICTURE"
height=
"238"
/>
<div
class=
"detail nowrap-ellipsis"
:title=
"item.FTITLE"
>
{{
item
.
FTITLE
}}
</div>
-->
<commonItem
:is-dual=
"index % 6
<
3
"
:text=
"item.FTITLE"
/>
</div>
</div>
</
template
>
<
script
setup
lang=
"ts"
>
import
{
baseURL
}
from
'@/services'
// import { baseURL } from '@/services'
import
commonItem
from
'@/components/commonItem.vue'
defineProps
({
list
:
{
...
...
src/components/customSelect.vue
浏览文件 @
ca2001b3
...
...
@@ -101,6 +101,7 @@ const handleChange = (item: any) => {
font-weight
:
400
;
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
background-color
:
#f8f8f8
;
color
:
#222222
;
cursor
:
pointer
;
...
...
src/components/previewFile.vue
浏览文件 @
ca2001b3
...
...
@@ -12,7 +12,8 @@
class=
"child"
frameborder=
"0"
:src=
"
'http://view.xdocin.com/xdoc?_xdoc=' + encodeURIComponent('http://192.168.1.168' + url)
// 'http://view.xdocin.com/xdoc?_xdoc=' + encodeURIComponent('http://192.168.1.168' + url)
'http://view.xdocin.com/xdoc?_xdoc=' + encodeURIComponent('http://14.29.230.199:84' + url)
"
/>
<vue-office-pdf
...
...
src/components/search.vue
浏览文件 @
ca2001b3
...
...
@@ -6,7 +6,7 @@
class=
"input-with-select"
@
change=
"handleSearch"
>
<template
#
prefix
>
<
!--
<
template
#
prefix
>
<el-select
v-model=
"selectValue"
placeholder=
""
>
<el-option
v-for=
"(item, index) in selectOptions"
...
...
@@ -15,7 +15,7 @@
:value=
"item.value"
/>
</el-select>
</
template
>
</
template
>
-->
<
template
#
suffix
>
<el-icon
size=
"25"
style=
"cursor: pointer"
@
click=
"handleSearch"
><i-ep-Search
/></el-icon>
</
template
>
...
...
src/services/api/recruitmentManagement.ts
浏览文件 @
ca2001b3
...
...
@@ -104,6 +104,13 @@ export const getResume = () => {
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SeResumeInfoGR,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
)
}
// 查看个人简历
export
const
getResumeInfo
=
(
data
:
any
)
=>
{
return
request
.
post
(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SeResumeInfo,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
,
data
)
}
// 个人用户修改简历信息
export
const
updateResume
=
(
data
:
any
)
=>
{
return
request
.
post
(
...
...
@@ -158,10 +165,46 @@ export const getTalentResume = (data: any) => {
)
}
//
企业人才管理简历查询
//
简历搜索/简历推荐
export
const
getResumeSearch
=
(
data
:
any
)
=>
{
return
request
.
post
(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.ResumeSearch,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
,
data
)
}
// 简历搜索/简历推荐
export
const
setTalentPool
=
(
data
:
any
)
=>
{
return
request
.
post
(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiEditService.CorporateResume,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
,
data
)
}
// 简历搜索/简历推荐
export
const
genCompanyList
=
(
data
:
any
)
=>
{
return
request
.
post
(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SearchEnterprise,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
,
data
)
}
// 用户查看公司详情
export
const
getCompanyDetail
=
(
data
:
any
)
=>
{
return
request
.
post
(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.CorporatePosition,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
,
data
)
}
// 查看公司职位列表
export
const
getCompanyPosition
=
(
data
:
any
)
=>
{
return
request
.
post
(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.EnterpriseJobs,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
,
data
)
}
// 查看用户期望职位
export
const
getDesirePosition
=
()
=>
{
return
request
.
post
(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.HotJobPage,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
)
}
src/services/api/skillTraining.ts
浏览文件 @
ca2001b3
...
...
@@ -14,10 +14,3 @@ export const getSkillTrainingList = (data: any) => {
data
)
}
export
const
getPolicyList
=
(
data
:
any
)
=>
{
return
request
.
post
(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SePolicyNotice,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
,
data
)
}
src/services/index.ts
浏览文件 @
ca2001b3
...
...
@@ -86,6 +86,7 @@ class RequestHttp {
this
.
service
.
interceptors
.
response
.
use
(
(
response
:
AxiosResponse
)
=>
{
const
{
data
,
config
}
=
response
// 解构
console
.
log
(
data
,
'response'
)
const
globalStore
=
useGlobalStore
()
const
userInfoStore
=
useUserInfoStore
()
if
(
data
.
code
===
501
)
{
...
...
@@ -113,10 +114,12 @@ class RequestHttp {
},
(
error
:
AxiosError
)
=>
{
const
{
response
}
=
error
console
.
log
(
response
,
'response'
)
// 请求超时 && 网络错误单独判断,没有 response
if
(
error
.
message
.
indexOf
(
'timeout'
)
!==
-
1
)
ElMessage
.
error
(
'请求超时!请您稍后重试'
)
if
(
error
.
message
.
indexOf
(
'Network Error'
)
!==
-
1
)
ElMessage
.
error
(
'网络错误!请您稍后重试'
)
// 根据响应的错误状态码,做不同的处理
if
(
response
)
this
.
handleCode
(
response
.
status
)
// 服务器结果都没有返回(可能服务器错误可能客户端断网),断网处理:可以跳转到断网页面
...
...
src/views/collegeStudents/index.scss
浏览文件 @
ca2001b3
...
...
@@ -24,7 +24,7 @@
display
:
flex
;
flex-wrap
:
wrap
;
.student-item
{
width
:
calc
((
100%
-
32px
)
/
3
)
;
cursor
:
pointer
;
flex
:
0
0
calc
((
100%
-
32px
)
/
3
);
margin
:
0
16px
24px
0
;
box-sizing
:
border-box
;
...
...
@@ -62,6 +62,135 @@
font-weight
:
400
;
color
:
#000000
;
}
.employment-policy
{
border-radius
:
12px
;
background-color
:
#ffffff
;
padding
:
20px
24px
;
.employment-policy-list
{
display
:
flex
;
flex-direction
:
column
;
align-items
:
start
;
font-size
:
16px
;
.poliy-item
{
margin-bottom
:
16px
;
.poliy-item-order
{
display
:
inline-block
;
width
:
16px
;
height
:
14px
;
line-height
:
14px
;
text-align
:
center
;
background
:
#f8f8f8
;
color
:
#999999
;
border-radius
:
2px
2px
2px
2px
;
font-size
:
12px
;
font-family
:
Roboto
,
Roboto
;
font-weight
:
400
;
margin-right
:
4px
;
}
.poliy-item-postorder
{
background
:
linear-gradient
(
90deg
,
#177cfa
0%
,
#177cfa
100%
);
color
:
#ffffff
;
}
}
}
}
.hot-company
{
width
:
1316px
;
text-align
:
center
;
margin-bottom
:
64px
;
img
{
width
:
50px
;
height
:
50px
;
}
.company-list
{
display
:
flex
;
flex-wrap
:
wrap
;
margin-top
:
24px
;
.company-item
{
display
:
flex
;
flex-direction
:
column
;
cursor
:
pointer
;
width
:
calc
((
100%
-
32px
)
/
3
);
flex
:
0
0
calc
((
100%
-
32px
)
/
3
);
margin
:
0
16px
16px
0
;
background
:
#ffffff
;
border-radius
:
12px
;
box-sizing
:
border-box
;
&
:nth-child
(
3n
)
{
margin-right
:
0
;
}
.company-tp
{
background
:
linear-gradient
(
90deg
,
#e3f0ff
0%
,
rgba
(
227
,
240
,
255
,
0
.15
)
100%
);
border-radius
:
12px
12px
0px
0px
;
padding
:
26px
21px
;
display
:
flex
;
.company-tp-rg
{
margin-left
:
21px
;
height
:
50px
;
}
}
.company-bt
{
flex
:
1
;
padding
:
26px
20px
;
display
:
flex
;
flex-direction
:
column
;
justify-content
:
space-between
;
.company-position-list
{
.company-position-item
{
margin-bottom
:
24px
;
cursor
:
pointer
;
.hot-position-item-ft
{
margin-top
:
16px
;
display
:
flex
;
span
{
padding
:
6px
12px
;
height
:
24px
;
background
:
#f8f8f8
;
border-radius
:
4px
;
line-height
:
24px
;
font-size
:
14px
;
font-weight
:
400
;
color
:
#666666
;
margin-right
:
8px
;
&
:first-child
{
width
:
45%
;
text-align
:
left
;
}
}
}
}
}
.company-bt-btn
{
width
:
100%
;
display
:
flex
;
justify-content
:
center
;
cursor
:
pointer
;
span
{
display
:
block
;
width
:
136px
;
height
:
38px
;
line-height
:
38px
;
text-align
:
center
;
border-radius
:
8px
;
border
:
1px
solid
#177cfa
;
color
:
#177cfa
;
font-size
:
16px
;
font-weight
:
400
;
}
}
}
}
}
}
.live-broadcast
{
display
:
flex
;
flex-wrap
:
wrap
;
...
...
src/views/collegeStudents/index.vue
浏览文件 @
ca2001b3
<
template
>
<div
class=
"student-container"
>
<div
class=
"container"
>
<img
:src=
"
imgUrl
"
height=
"560"
/>
<img
:src=
"
baseURL + '/' + commonData?.HbData?.[0].FPOSTERPICTURE
"
height=
"560"
/>
<div
class=
"student"
>
<el-tabs
v-model=
"activeName"
class=
"student-tabs"
stretch
@
tab-change=
"tabChange"
>
<el-tab-pane
v-for=
"(item, index) in tabsList"
:key=
"index"
v-loading=
"loading"
:label=
"item.label"
:name=
"item.name"
class=
"student-tab-pane"
>
<div
v-if=
"!index"
class=
"student-list"
>
<div
v-for=
"col in 12"
:key=
"col"
class=
"student-item"
>
<div
class=
"flx-justify-between"
style=
"margin-bottom: 20px"
>
<div
class=
"student-title nowrap-ellipsis"
>
销售经理销售经理销售经理销售经理销售经理销售经理
</div>
<div>
<span
class=
"salary"
>
6000-8000
</span>
<span
class=
"monthly-pay"
>
元/月
</span>
<div
v-if=
"!index"
>
<div
v-if=
"userPostionList.length"
>
<div
class=
"student-list"
>
<div
v-for=
"col in userPostionList"
:key=
"col"
class=
"student-item"
@
click=
"toPositionDetail(col.FID)"
>
<div
class=
"flx-justify-between"
style=
"margin-bottom: 20px"
>
<div
class=
"student-title nowrap-ellipsis"
>
{{
col
.
JobName
}}
</div>
<div>
<span
class=
"salary"
>
{{
col
.
FMINIMUMWAGE
}}
-
{{
col
.
FMAXIMUMSALARY
}}
</span>
<span
class=
"monthly-pay"
>
元/月
</span>
</div>
</div>
<div
class=
"position-label"
>
<span>
{{
col
.
FEDUCATIONALBACKGROUND
}}
</span>
<el-divider
direction=
"vertical"
/>
<span>
{{
col
.
FEXPERIENCE
}}
</span>
<el-divider
direction=
"vertical"
/>
<span>
招聘
{{
col
.
FRECRUITSNUMBER
}}
人
</span>
</div>
<el-divider
style=
"margin: 14px 0"
/>
<div
class=
"company"
>
{{
col
.
FirmName
}}
</div>
<div
class=
"company-label"
>
<span>
{{
col
.
FFINANCINGS
}}
</span>
<el-divider
direction=
"vertical"
/>
<span>
{{
col
.
FSCALES
}}
</span>
<el-divider
direction=
"vertical"
/>
<span>
{{
col
.
FINDUSTRY
}}
</span>
</div>
</div>
</div>
<div
class=
"position-label"
>
<span>
大专
</span>
<el-divider
direction=
"vertical"
/>
<span>
1-3年
</span>
<el-divider
direction=
"vertical"
/>
<span>
招聘2人
</span>
<customPagination
:pageSize=
"queryList.pageSize"
:pageIndex=
"queryList.pageIndex"
:total=
"queryList.total"
@
current-change=
"currentChange"
/>
</div>
<el-empty
v-else
description=
"暂无数据"
/>
</div>
<div
v-else-if=
"index === 2"
class=
"employment-policy"
>
<div
class=
"employment-policy-list"
>
<div
v-for=
"(col, cIndex) in policyList"
:key=
"col.FID"
class=
"poliy-item"
@
click=
"handleChange(col)"
>
<span
class=
"poliy-item-order"
:class=
"cIndex
<
3
&&
policyQuery
.
pageIndex =
=
1
?
'
poliy-item-postorder
'
:
''"
>
{{
policyQuery
.
pageIndex
===
1
?
cIndex
+
1
:
policyQuery
.
pageSize
*
policyQuery
.
pageIndex
+
cIndex
+
1
}}
</span
>
<el-link>
{{
col
.
FTITLE
}}
</el-link>
</div>
<el-divider
style=
"margin: 14px 0"
/>
<div
class=
"company"
>
深圳市世杰创益酒店酒店管理限公司
</div>
<div
class=
"company-label"
>
<span>
大专
</span>
<el-divider
direction=
"vertical"
/>
<span>
1-3年
</span>
<el-divider
direction=
"vertical"
/>
<span>
招聘2人
</span>
</div>
<customPagination
:pageSize=
"policyQuery.pageSize"
:pageIndex=
"policyQuery.pageIndex"
:total=
"policyQuery.total"
@
current-change=
"currentChange"
/>
</div>
<div
v-else-if=
"index === 3"
class=
"hot-company"
>
<div
class=
"company-list"
>
<div
v-for=
"col in hotCompanyList"
:key=
"col.FirmFID"
class=
"company-item"
>
<div
class=
"company-tp"
@
click=
"toCompanyDetail(col.FirmFID)"
>
<img
:src=
"baseURL + '/' + col.FLOGO"
width=
"50"
height=
"50"
/>
<div
class=
"company-tp-rg flx-column-start-between"
>
<span>
{{
col
.
FirmName
}}
</span>
<div
class=
"company-label"
>
<span>
{{
col
.
FFINANCINGS
}}
</span>
<el-divider
direction=
"vertical"
/>
<span>
{{
col
.
FSCALES
}}
</span>
<el-divider
direction=
"vertical"
/>
<span>
{{
col
.
FINDUSTRY
}}
</span>
</div>
</div>
</div>
<div
class=
"company-bt"
>
<div
class=
"company-position-list flx-direction-column"
>
<div
v-for=
"colS in col.JobS"
:key=
"colS.JobFID"
class=
"company-position-item"
@
click=
"toPositionDetail(colS.JobFID)"
>
<div
class=
"flx-justify-between"
style=
"margin-bottom: 22px"
>
<div
class=
"nowrap-ellipsis"
style=
"width: 207px; text-align: left"
:title=
"colS.JobName"
>
{{
colS
.
JobName
}}
</div>
<div>
<span
class=
"salary"
>
{{
colS
.
FMINIMUMWAGE
}}
-
{{
colS
.
FMAXIMUMSALARY
}}
</span
>
<span
class=
"monthly-pay"
>
元/月
</span>
</div>
</div>
<div
class=
"hot-position-item-ft"
>
<span
class=
"nowrap-ellipsis"
:title=
"colS.FWORKPLACE"
>
{{
`${colS.FWORKPLACE.split('/')[1]
}
${colS.FWORKPLACE.split('/')[2]
}
${
colS.FWORKPLACE.split('/')[3]
}
`
}}
<
/span
>
<
span
>
{{
colS
.
FEXPERIENCE
}}
<
/span
>
<
span
>
{{
colS
.
FEDUCATIONALBACKGROUND
}}
<
/span
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
...
...
@@ -135,18 +233,21 @@
<
div
v
-
else
class
=
"student-tab-item flx-center"
>
{{
item
.
label
}}
<
/div
>
<
/el-tab-pane
>
<
/el-tabs
>
<span
v-show=
"activeName === 0 || activeName === 6"
class=
"n-more"
style=
"margin-top: 24px"
>
查看更多
</span
>
<
span
v
-
show
=
"activeName === 6"
class
=
"n-more"
style
=
"margin-top: 24px"
>
查看更多
<
/span
>
<
/div
>
<
/div
>
<
/div
>
<
/template
>
<
script
setup
lang
=
"ts"
>
import
{
imgUrl
}
from
'@/assets/imgUrl'
import
{
baseURL
}
from
'@/services'
import
{
getCommon
}
from
'@/services/api/common'
import
{
getUserPostionList
,
getHotCompany
}
from
'@/services/api/recruitmentManagement'
import
{
getPolicyList
}
from
'@/services/api/policy'
import
customPagination
from
'@/components/customPagination.vue'
const
activeName
=
ref
(
7
)
const
router
=
useRouter
()
const
activeName
=
ref
(
0
)
const
formRef
=
ref
()
const
tabsList
=
[
{
label
:
'岗位速递'
,
name
:
0
}
,
...
...
@@ -179,7 +280,54 @@ const state = reactive({
agreeWith
:
false
}
)
const
loading
=
ref
(
true
)
const
commonData
=
ref
()
const
userPostionList
:
any
=
ref
([])
const
policyList
:
any
=
ref
([])
const
hotCompanyList
:
any
=
ref
([])
const
queryList
=
ref
({
pageIndex
:
1
,
pageSize
:
12
,
total
:
0
,
Filter
:
{
}
}
)
const
policyQuery
=
ref
({
pageIndex
:
1
,
pageSize
:
10
,
Type
:
0
,
total
:
0
}
)
const
currentChange
=
(
pageIndex
:
number
)
=>
{
switch
(
activeName
.
value
)
{
case
0
:
queryList
.
value
.
pageIndex
=
pageIndex
initUserPostionList
()
break
case
2
:
policyQuery
.
value
.
pageIndex
=
pageIndex
initPolicyList
()
break
default
:
break
}
}
const
handleChange
=
(
row
:
any
)
=>
{
router
.
push
({
path
:
'/commonDetail'
,
query
:
{
FID
:
row
.
FID
,
FormType
:
'B'
,
FTITLE
:
row
.
FTITLE
}
}
)
}
const
toPositionDetail
=
(
FID
:
number
)
=>
{
router
.
push
({
path
:
'/recruitmentManagement/positionDetail'
,
query
:
{
FID
}
}
)
}
const
toCompanyDetail
=
(
FID
:
number
)
=>
{
router
.
push
({
path
:
'/recruitmentManagement/companyDetail'
,
query
:
{
FID
}
}
)
}
const
tabChange
=
(
name
:
number
)
=>
{
}
const
open
=
()
=>
{
console
.
log
(
'open'
)
}
...
...
@@ -193,6 +341,63 @@ const onConfirm = () => {
}
}
)
}
const
initHotCompany
=
async
()
=>
{
const
res
:
any
=
await
getHotCompany
({
FNUMBER
:
activeName
.
value
}
)
if
(
res
.
code
===
200
)
{
hotCompanyList
.
value
=
res
.
data
||
[]
}
}
const
initPolicyList
=
async
()
=>
{
const
res
:
any
=
await
getPolicyList
(
policyQuery
.
value
)
if
(
res
.
code
===
200
)
{
policyList
.
value
=
res
.
data
||
[]
policyQuery
.
value
.
total
=
res
.
total
}
}
const
initUserPostionList
=
async
()
=>
{
loading
.
value
=
true
const
res
:
any
=
await
getUserPostionList
(
queryList
.
value
)
if
(
res
.
code
===
200
)
{
loading
.
value
=
false
userPostionList
.
value
=
res
.
data
||
[]
queryList
.
value
.
total
=
res
.
total
}
}
watch
(
()
=>
activeName
.
value
,
(
newVal
:
number
)
=>
{
switch
(
newVal
)
{
case
0
:
initUserPostionList
()
break
case
1
:
break
case
2
:
initPolicyList
()
break
case
3
:
initHotCompany
()
break
default
:
break
}
}
,
{
immediate
:
true
}
)
const
init
=
async
()
=>
{
const
res
:
any
=
await
getCommon
({
pageIndex
:
1
,
pageSize
:
10
,
FormType
:
'I'
}
)
if
(
res
.
code
===
200
)
{
commonData
.
value
=
res
.
data
loading
.
value
=
false
}
}
init
()
<
/script
>
<
style
lang
=
"scss"
scoped
>
...
...
src/views/login/index.vue
浏览文件 @
ca2001b3
...
...
@@ -41,7 +41,11 @@
</el-input>
</el-form-item>
</el-form>
<el-button
type=
"primary"
style=
"width: 100%; margin-top: 46px"
@
click=
"onConfirm"
<el-button
type=
"primary"
:loading=
"loading"
style=
"width: 100%; margin-top: 46px"
@
click=
"onConfirm"
>
登录/注册
</el-button
>
</div>
...
...
@@ -76,6 +80,7 @@ const props = defineProps({
const
emits
=
defineEmits
([
'update:show'
])
const
globalStore
=
useGlobalStore
()
const
userInfoStore
=
useUserInfoStore
()
const
loading
=
ref
(
false
)
const
formRef
=
ref
()
const
state
=
reactive
({
...
...
@@ -140,33 +145,44 @@ const onConfirm = () => {
if
(
!
state
.
agreeWith
)
return
ElMessage
.
warning
(
'请先同意授权!'
)
formRef
.
value
?.
validate
(
async
(
valid
:
boolean
,
fields
:
any
)
=>
{
if
(
valid
)
{
const
params
=
{
Phone
:
state
.
loginForm
.
Phone
,
Code
:
state
.
loginForm
.
Code
,
EnCode
:
state
.
EnCode
,
Type
:
state
.
userType
===
'个人用户'
?
'GR'
:
'QY'
// 企业:QY 个人:GR
}
const
res
:
any
=
await
loginSign
(
params
)
if
(
res
.
code
===
200
)
{
if
(
state
.
userType
===
'个人用户'
)
{
userInfoStore
.
setCompanyInfo
({})
userInfoStore
.
setPersonalInfo
(
res
.
data
)
}
else
{
userInfoStore
.
setPersonalInfo
({})
userInfoStore
.
setCompanyInfo
(
res
.
data
)
try
{
loading
.
value
=
true
const
params
=
{
Phone
:
state
.
loginForm
.
Phone
,
FNAME
:
state
.
loginForm
.
Company
,
Code
:
state
.
loginForm
.
Code
,
EnCode
:
state
.
EnCode
,
Type
:
state
.
userType
===
'个人用户'
?
'GR'
:
'QY'
// 企业:QY 个人:GR
}
const
res
:
any
=
await
loginSign
(
params
)
if
(
res
.
code
===
200
)
{
if
(
state
.
userType
===
'个人用户'
)
{
userInfoStore
.
setCompanyInfo
({})
userInfoStore
.
setPersonalInfo
(
res
.
data
)
}
else
{
userInfoStore
.
setPersonalInfo
({})
userInfoStore
.
setCompanyInfo
(
res
.
data
)
}
globalStore
.
setToken
(
res
.
data
.
Token
)
handleClose
()
ElMessage
.
success
(
'登录成功'
)
}
else
if
(
res
.
code
===
502
)
{
router
.
push
({
path
:
'/recruitmentManagement/editCompany'
,
query
:
{
register
:
1
,
companyName
:
state
.
loginForm
.
Company
,
phone
:
state
.
loginForm
.
Phone
}
})
handleClose
()
ElMessage
.
warning
(
res
.
msg
)
}
globalStore
.
setToken
(
res
.
data
.
Token
)
handleClose
()
ElMessage
.
success
(
'登录成功'
)
}
else
if
(
res
.
code
===
502
)
{
router
.
push
({
path
:
'/recruitmentManagement/editCompany'
,
query
:
{
register
:
1
,
companyName
:
state
.
loginForm
.
Company
,
phone
:
state
.
loginForm
.
Phone
}
})
handleClose
()
ElMessage
.
warning
(
res
.
msg
)
}
catch
(
error
)
{
loading
.
value
=
false
}
}
else
{
loading
.
value
=
false
console
.
log
(
'error submit!'
,
fields
)
}
})
...
...
src/views/policy/index.scss
浏览文件 @
ca2001b3
...
...
@@ -13,7 +13,7 @@
height
:
62px
;
margin-bottom
:
24px
;
.el-input
{
width
:
8
69
px
;
width
:
8
48
px
;
height
:
62px
;
margin-bottom
:
24px
;
.el-input__wrapper
{
...
...
src/views/policy/index.vue
浏览文件 @
ca2001b3
...
...
@@ -65,7 +65,7 @@ const querySearchAsync = async (queryString: string, cb: (arg: any) => void) =>
FTITLE
:
searchValue
.
value
})
if
(
res
.
code
===
200
)
{
let
results
=
res
.
data
let
results
=
res
.
data
||
[]
clearTimeout
(
timeout
)
timeout
=
setTimeout
(()
=>
{
cb
(
results
)
...
...
src/views/recruitmentManagement/companyDetail.vue
浏览文件 @
ca2001b3
...
...
@@ -6,24 +6,24 @@
<div
class=
"company-info"
>
<div
style=
"display: flex"
>
<img
src=
"@/assets/img/icon-can.png
"
:src=
"baseURL + '/' + detailData?.QyData?.FLogoUrl
"
width=
"96"
height=
"96"
style=
"border-radius: 8px; margin-right: 26px"
/>
<div
class=
"flx-column-start-between"
style=
"justify-content: space-evenly"
>
<div
class=
"position-name"
>
公司名称
</div>
<div
class=
"position-name"
>
{{
detailData
?.
QyData
?.
FName
}}
</div>
<div
class=
"flx-align-center"
>
<span>
融资情况
</span>
<span>
{{
detailData
?.
QyData
?.
FFinancingSName
}}
</span>
<el-divider
direction=
"vertical"
style=
"border-left: 1px solid #274e80"
/>
<span>
公司规模
</span>
<span>
{{
detailData
?.
QyData
?.
FScaleSName
}}
</span>
<el-divider
direction=
"vertical"
style=
"border-left: 1px solid #274e80"
/>
<span>
公司类型
</span>
<span>
{{
detailData
?.
QyData
?.
FIndustryName
}}
</span>
</div>
</div>
</div>
<div
style=
"margin-top: 17px"
>
<span
style=
"font-size: 60px; margin: 4px 6px 0 0"
>
20
</span>
<span
style=
"font-size: 60px; margin: 4px 6px 0 0"
>
{{
detailData
?.
Coutn
}}
</span>
<span>
在招职位
</span>
</div>
</div>
...
...
@@ -31,11 +31,11 @@
<span
:style=
"
{ color: activeName ? '#177cfa' : '' }"
style="margin-right: 64px"
@click="
activeName = true
"
@click="
tabsChange(true)
"
>公司简介
</span
>
<span
:style=
"
{ color: activeName ? '' : '#177cfa' }" @click="
activeName = false
"
>招聘职位(
20
)
</span
<span
:style=
"
{ color: activeName ? '' : '#177cfa' }" @click="
tabsChange(false)
"
>招聘职位(
{{
detailData
?.
Coutn
}}
)
</span
>
</div>
</div>
...
...
@@ -43,32 +43,107 @@
<div
class=
"hot-position"
>
<div
class=
"flx-justify-between"
style=
"margin-bottom: 24px"
>
<span
class=
"desc-title"
style=
"margin-bottom: 0"
>
热招职位
</span>
<div
class=
"flx-align-center"
style=
"cursor: pointer"
>
<span
style=
"font-size: 18px; color: #177cfa"
>
查看全部20个职位
</span>
<div
class=
"flx-align-center"
style=
"cursor: pointer"
@
click=
"tabsChange(false)"
>
<span
style=
"font-size: 18px; color: #177cfa"
>
查看全部
{{
detailData
?.
Coutn
}}
个职位
</span
>
<el-icon
color=
"#177CFA"
><i-ep-CaretRight
/></el-icon>
</div>
</div>
<div
class=
"position-list"
>
<div
v-for=
"item in 4"
:key=
"item"
class=
"position-item"
>
<div
v-for=
"item in detailData?.ZwData || []"
:key=
"item.JobFID"
class=
"position-item"
@
click=
"toPositionDetail(item.JobFID)"
>
<div
class=
"flx-justify-between"
style=
"margin-bottom: 15px"
>
<span
class=
"nowrap-ellipsis"
style=
"display: inline-block; width: 135px"
>
软件测试 (学信网软件测asdasdas试)
</span
<span
class=
"nowrap-ellipsis"
style=
"display: inline-block; width: 135px"
>
{{
item
.
JobName
}}
</span>
<span
style=
"font-size: 18px; color: #ff3333"
>
{{
item
.
FMINIMUMWAGE
}}
-
{{
item
.
FMAXIMUMSALARY
}}
</span
>
<span
style=
"font-size: 18px; color: #ff3333"
>
11-15K
</span>
</div>
<div>
<span
class=
"position-label"
>
深圳 福田区 新洲
</span>
<span
class=
"position-label"
>
经验不限
</span>
<div
class=
"flx-align-center"
>
<span
class=
"position-label nowrap-ellipsis"
style=
"width: 150px"
:title=
"`$
{item.FWORKPLACE.split('/')[1]} ${item.FWORKPLACE.split('/')[2]} ${
item.FWORKPLACE.split('/')[3]
}`"
>
{{
`${item.FWORKPLACE.split('/')[1]
}
${item.FWORKPLACE.split('/')[2]
}
${
item.FWORKPLACE.split('/')[3]
}
`
}}
<
/spa
n
>
<
span
class
=
"position-label"
>
{{
item
.
FEXPERIENCE
}}
<
/span
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"company-info"
>
<
span
class
=
"desc-title"
>
公司福利
<
/span
>
<div
style=
"margin-top: 24px"
>
<span
class=
"position-label"
>
深圳 福田区 新洲
</span>
<span
class=
"position-label"
>
经验不限
</span>
<span
class=
"position-label"
>
经验不限
</span>
<
div
style
=
"display: flex; flex-wrap: wrap; margin-bottom: 28px"
>
<
span
v
-
for
=
"(item, index) in detailData?.QyData?.FCorporateWelfare?.split(',')"
:
key
=
"index"
class
=
"position-label"
style
=
"margin-bottom: 8px"
>
{{
item
}}
<
/spa
n
>
<
/div
>
<
div
class
=
"desc-title"
>
公司介绍
<
/div
>
<
div
class
=
"text-container"
>
<
pre
>
{{
detailData
?.
QyData
.
FCompanyProfile
}}
<
/pre
>
<
div
class
=
"expand-btn"
@
click
=
"expandMore"
>
<
span
class
=
"expand-title"
>
查看更多
<
/spa
n
><
el
-
icon
>
<
i
-
ep
-
CaretBottom
v
-
if
=
"expandShow"
/>
<
i
-
ep
-
CaretTop
v
-
else
/
>
<
/el-icon
>
<
/div
>
<
/div
>
<
div
class
=
"desc-title"
>
工商信息
<
/div
>
<
div
class
=
"business-info"
>
<
el
-
descriptions
title
=
""
direction
=
"vertical"
:
column
=
"4"
>
<
el
-
descriptions
-
item
v
-
for
=
"(item, index) in list"
:
key
=
"index"
:
label
=
"item.label"
:
span
=
"item.span"
:
width
=
"item.width"
><
span
v
-
show
=
"item.label"
>
{{
detailData
?.
QyData
.
gsData
[
item
.
prop
]
&&
detailData
?.
QyData
.
gsData
[
item
.
prop
]
!==
' '
?
detailData
?.
QyData
.
gsData
[
item
.
prop
]
:
'-'
}}
<
/span></
el
-
descriptions
-
item
>
<
/el-descriptions
>
<
div
class
=
"business-expand"
@
click
=
"businessShow = !businessShow"
>
<
span
class
=
"business-more"
>
{{
businessShow
?
'查看更多'
:
'收起'
}}
<
/spa
n
><
el
-
icon
>
<
i
-
ep
-
CaretBottom
v
-
if
=
"businessShow"
/>
<
i
-
ep
-
CaretTop
v
-
else
/
>
<
/el-icon
>
<
/div
>
<
/div
>
<
div
class
=
"desc-title"
>
工作地址
<
/div
>
<
div
class
=
"map-info"
>
<
div
class
=
"map-addr"
>
<
el
-
icon
color
=
"#177CFA"
style
=
"margin-right: 4px"
><
i
-
ep
-
LocationFilled
/><
/el-icon
>
{{
detailData
?.
QyData
?.
FAddresss
?.
split
(
'/'
)[
detailData
?.
QyData
?.
FAddresss
?.
split
(
'/'
).
length
-
1
]
}}
<
/div
>
<
qqMap
ref
=
"mapRef"
/>
<
/div
>
<
/div
>
<
/div
>
...
...
@@ -77,10 +152,22 @@
<
div
style
=
"display: flex; margin-bottom: 16px"
>
<
span
class
=
"desc-title"
style
=
"margin-bottom: 0; width: 72px"
>
职位类型
<
/span
>
<
div
class
=
"type-list"
>
<span
class=
"type-item"
>
全部(20)
</span>
<span
class=
"type-item"
>
运营(1)
</span>
<span
class=
"type-item"
>
销售(9)
</span>
<span
v-for=
"item in 20"
:key=
"item"
class=
"type-item"
>
咨询(10)
</span>
<
span
class
=
"type-item"
:
style
=
"{ color: queryList.Filter.FJOBTYPE === '' ? '#177cfa' : ''
}
"
@
click
=
"JobTypeChange('')"
>
全部
{{
`(${detailData?.CountData?.reduce((a: any, b: any) => a + b.COUNT, 0)
}
)`
}}
<
/spa
n
>
<
span
v
-
for
=
"item in detailData?.CountData || []"
:
key
=
"item.FJOBTYPE"
class
=
"type-item"
:
style
=
"{ color: queryList.Filter.FJOBTYPE === item.FJOBTYPE ? '#177cfa' : ''
}
"
@
click
=
"JobTypeChange(item.FJOBTYPE)"
>
{{
`${item.FDATAVALUE
}
(${item.COUNT
}
)`
}}
<
/spa
n
>
<
/div
>
<
/div
>
<
div
class
=
"select-list"
>
...
...
@@ -94,7 +181,14 @@
/>
<
/div
>
<
/div
>
<morePosition
ref=
"morePositionRef"
/>
<
morePosition
v
-
if
=
"positionList.length"
ref
=
"morePositionRef"
:
positionList
=
"positionList"
:
queryList
=
"queryList"
@
current
-
change
=
"currentChange"
/>
<
el
-
empty
v
-
else
description
=
"暂无数据"
/>
<
/div
>
<
/div
>
<
/div
>
...
...
@@ -103,12 +197,21 @@
<
script
setup
lang
=
"ts"
>
import
{
getInformation
}
from
'@/services/api/common'
import
{
getCompanyDetail
,
getCompanyPosition
}
from
'@/services/api/recruitmentManagement'
import
{
baseURL
}
from
'@/services'
import
{
copyList
}
from
'./config'
import
customSelect
from
'@/components/customSelect.vue'
import
morePosition
from
'./components/morePosition.vue'
import
qqMap
from
'@/components/qqMap.vue'
const
route
=
useRoute
()
const
router
=
useRouter
()
const
morePositionRef
=
ref
()
const
mapRef
=
ref
()
const
loading
=
ref
(
false
)
const
activeName
=
ref
(
false
)
const
expandShow
=
ref
(
false
)
const
businessShow
=
ref
(
true
)
const
activeName
=
ref
(
true
)
const
filterList
=
ref
([
{
name
:
'工作经验'
,
...
...
@@ -128,20 +231,99 @@ const filterList = ref([
])
const
queryList
=
ref
({
pageIndex
:
1
,
pageSize
:
10
,
pageSize
:
6
,
FID
:
Number
(
route
.
query
.
FID
)
||
0
,
//企业id
Filter
:
{
//传id
F
NAME
:
''
,
//标题
F
JOBTYPE
:
''
,
//岗位类型
FEXPERIENCE
:
''
,
//经验
SalaryRange
:
''
,
//薪资范围
FEDUCATIONALBACKGROUND
:
''
//学历
}
as
any
}
as
any
,
total
:
0
}
)
const
positionList
=
ref
([]
as
any
)
const
list
=
ref
([]
as
any
)
const
detailData
:
any
=
ref
()
const
informationData
=
ref
()
const
selectChange
=
(
e
:
any
,
index
:
number
)
=>
{}
watch
(
()
=>
businessShow
.
value
,
(
newVal
:
any
)
=>
{
if
(
newVal
)
{
list
.
value
=
copyList
.
filter
((
item
:
any
,
i
:
number
)
=>
i
<
6
)
}
else
list
.
value
=
copyList
}
,
{
immediate
:
true
}
)
const
selectChange
=
(
e
:
any
,
index
:
number
)
=>
{
initCompanyPosition
()
}
const
JobTypeChange
=
(
Type
:
string
)
=>
{
queryList
.
value
.
Filter
.
FJOBTYPE
=
Type
initCompanyPosition
()
}
const
tabsChange
=
(
type
:
boolean
)
=>
{
if
(
type
)
{
activeName
.
value
=
true
setTimeout
(()
=>
{
mapRef
.
value
.
initMap
(
detailData
.
value
?.
QyData
.
FAddresss
)
}
,
300
)
}
else
{
initCompanyPosition
()
activeName
.
value
=
false
}
}
const
toPositionDetail
=
(
FID
:
number
)
=>
{
router
.
push
({
path
:
'/recruitmentManagement/positionDetail'
,
query
:
{
FID
}
}
)
}
const
expandMore
=
()
=>
{
const
textContainer
:
any
=
document
.
querySelector
(
'.text-container'
)
const
content
:
any
=
document
.
querySelector
(
'.expand-title'
)
const
expandBtn
:
any
=
document
.
querySelector
(
'.expand-btn'
)
textContainer
.
classList
.
toggle
(
'expanded'
)
if
(
textContainer
.
classList
.
contains
(
'expanded'
))
{
content
.
textContent
=
'收起'
textContainer
.
style
.
maxHeight
=
textContainer
.
scrollHeight
+
'px'
// 动态计算文本高度并设置max-height
expandBtn
.
style
.
bottom
=
'-40px'
expandShow
.
value
=
false
}
else
{
content
.
textContent
=
'查看更多'
textContainer
.
style
.
maxHeight
=
'calc(1 * 1.3em)'
// 恢复初始值
expandBtn
.
style
.
bottom
=
'-4px'
expandShow
.
value
=
true
}
}
const
currentChange
=
(
pageIndex
:
number
)
=>
{
queryList
.
value
.
pageIndex
=
pageIndex
initCompanyPosition
()
}
const
initCompanyDetail
=
async
()
=>
{
const
res
:
any
=
await
getCompanyDetail
({
FID
:
Number
(
route
.
query
?.
FID
)
}
)
if
(
res
.
code
===
200
)
{
detailData
.
value
=
res
.
data
mapRef
.
value
?.
initMap
(
res
.
data
?.
QyData
.
FAddresss
)
}
}
const
initCompanyPosition
=
async
()
=>
{
const
res
:
any
=
await
getCompanyPosition
(
queryList
.
value
)
if
(
res
.
code
===
200
)
{
positionList
.
value
=
res
.
data
||
[]
queryList
.
value
.
total
=
res
.
total
// morePositionRef.value?.init()
}
}
const
init
=
async
()
=>
{
const
res
:
any
=
await
getInformation
({
...
...
@@ -149,14 +331,15 @@ const init = async () => {
}
)
if
(
res
.
code
===
200
)
{
informationData
.
value
=
res
.
data
||
{
}
const
item
=
{
FDATAVALUE
:
'不限'
,
FDESCRIPTION
:
'不限'
,
FENTRYID
:
'
'
}
const
item
=
{
FDATAVALUE
:
'不限'
,
FDESCRIPTION
:
'不限'
,
FENTRYID
:
''
}
res
.
data
.
Experience
.
push
(
item
)
res
.
data
.
SalaryRange
.
push
(
item
)
res
.
data
.
Degree2
.
push
(
item
)
filterList
.
value
[
0
].
list
=
res
.
data
.
Experience
filterList
.
value
[
1
].
list
=
res
.
data
.
SalaryRange
filterList
.
value
[
2
].
list
=
res
.
data
.
Degree2
morePositionRef
.
value
.
init
()
initCompanyDetail
()
// morePositionRef.value?.init()
}
}
...
...
src/views/recruitmentManagement/components/morePosition.vue
浏览文件 @
ca2001b3
<
template
>
<div></div>
<div
class=
"position-content"
>
<div
class=
"position-content__list"
>
<div
v-for=
"item in positionList"
:key=
"item"
class=
"position-content__item enterprise"
>
<div
class=
"enterprise-tp"
@
click=
"toPositionDetail(item.JobName)"
>
<div
v-for=
"item in positionList"
:key=
"item"
class=
"position-content__item enterprise"
:class=
"activeName === item.FID ? 'active' : ''"
>
<div
class=
"enterprise-tp"
@
click=
"positionDetailChange(item)"
>
<div
class=
"flx-justify-between"
>
<div
class=
"item-lf nowrap-ellipsis"
:title=
"item.JobName"
>
{{
item
.
JobName
}}
...
...
@@ -11,102 +15,207 @@
<div
class=
"item-rg"
>
{{
item
.
FMINIMUMWAGE
}}
-
{{
item
.
FMAXIMUMSALARY
}}
</div>
</div>
<div
class=
"position-content__item-ft"
>
<span
class=
"nowrap-ellipsis"
>
{{
<
!--
<
span
class=
"nowrap-ellipsis"
>
{{
`${item.FWORKPLACE.split('/')[0]
}
${item.FWORKPLACE.split('/')[1]
}
${
item.FWORKPLACE.split('/')[2]
}
`
}}
<
/span
>
}}
<
/span>
--
>
<
span
>
{{
item
.
FEXPERIENCE
}}
<
/span
>
<
span
>
{{
item
.
FEDUCATIONALBACKGROUND
}}
<
/span
>
<
/div
>
<
/div
>
<
div
class
=
"enterprise-bt flx-justify-between"
>
<
div
class
=
"flx-align-center"
>
<
img
:
src
=
"baseURL + '/' + item.FLOGO"
width
=
"24"
height
=
"24"
/>
<
span
style
=
"margin-left: 8px"
>
{{
item
.
FirmName
}}
<
/span
>
<
div
>
<
div
v
-
if
=
"!isPositon"
class
=
"enterprise-bt flx-justify-between"
>
<
div
class
=
"flx-align-center"
>
<
span
style
=
"margin-left: 8px"
>
{{
item
.
FUSERNAME
}}
<
/span
>
<
span
style
=
"margin-left: 8px"
>
{{
item
.
FJOBTITLES
}}
<
/span
>
<
/div
>
<
div
style
=
"color: #666666; font-size: 14px"
>
{{
`${item.FWORKPLACE.split('/')[0]
}
${item.FWORKPLACE.split('/')[1]
}
${
item.FWORKPLACE.split('/')[2]
}
`
}}
<
/div
>
<
/div
>
<
div
>
<
span
>
{{
item
.
FINDUSTRY
}}
<
/span
>
<
el
-
divider
direction
=
"vertical"
/>
<
span
>
{{
item
.
FFINANCINGS
}}
<
/span
>
<
div
v
-
else
class
=
"enterprise-bt flx-justify-between"
@
click
=
"toCompanyDetail(item.FirmID)"
>
<
div
class
=
"flx-align-center"
>
<
img
:
src
=
"baseURL + '/' + item.FLOGO"
width
=
"24"
height
=
"24"
/>
<
span
style
=
"margin-left: 8px"
>
{{
item
.
FirmName
}}
<
/span
>
<
/div
>
<
div
>
<
span
>
{{
item
.
FINDUSTRY
}}
<
/span
>
<
el
-
divider
direction
=
"vertical"
/>
<
span
>
{{
item
.
FFINANCINGS
}}
<
/span
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"position-content__item"
>
eqwe
<
/div
>
<
customPagination
:
pageSize
=
"queryList.pageSize"
:
pageIndex
=
"queryList.pageIndex"
:
total
=
"queryList.total"
@
current
-
change
=
"currentChange"
/>
<
/div
>
<
div
class
=
"position-content__detail"
>
<
div
class
=
"position-content__detail__tp"
>
<
div
>
<
div
class
=
"flx-align-center"
>
<
span
class
=
"position-title"
>
高级声学工程师
<
/span
>
<
span
style
=
"font-size: 24px; color: #ff3333"
>
16
-
30
k
<
/span
>
<
span
class
=
"position-title"
>
{{
positionDetail
?.
JobName
}}
<
/span
>
<
span
style
=
"font-size: 24px; color: #ff3333"
>
{{
positionDetail
?.
FMINIMUMWAGE
}}
-
{{
positionDetail
?.
FMAXIMUMSALARY
}}
<
/spa
n
>
<
/div
>
<
div
class
=
"flx-align-center"
style
=
"margin-top: 6px; font-size: 14px"
>
<
div
class
=
"flx-align-center"
style
=
"margin-right: 12px"
>
<
img
src
=
"@/assets/img/icon-map1.png"
/>
<
span
>
{{
'深圳'
}}
<
/span
>
<
span
>
{{
positionDetail
?.
FWORKPLACE
?.
split
(
'/'
)[
1
]
}}
<
/span
>
<
/div
>
<
div
class
=
"flx-align-center"
style
=
"margin-right: 12px"
>
<
img
src
=
"@/assets/img/icon-resume8.png"
/>
<
span
>
{{
'10年以上经验'
}}
<
/span
>
<
span
>
{{
positionDetail
?.
FEXPERIENCE
}}
<
/span
>
<
/div
>
<
div
class
=
"flx-align-center"
>
<
img
src
=
"@/assets/img/icon-resume.png"
/>
<
span
>
{{
'本科'
}}
<
/span
>
<
span
>
{{
positionDetail
?.
FEDUCATIONALBACKGROUND
}}
<
/span
>
<
/div
>
<
/div
>
<
/div
>
<
span
class
=
"resume-btn"
>
投递简历
<
/span
>
<
span
class
=
"resume-btn"
@
click
=
"submitResume"
>
投递简历
<
/span
>
<
/div
>
<
span
class
=
"desc-title"
style
=
"margin-bottom: 16px"
>
职位描述
<
/span
>
<
div
class
=
"flx-align-center"
style
=
"margin-bottom: 18px"
>
<
span
class
=
"keyWords"
>
带团队
<
/span
>
<
span
class
=
"keyWords"
>
带团队
<
/span
>
<
span
class
=
"keyWords"
>
带团队
<
/span
>
<
/div
>
<
pre
>
1
.
负责新销售团队的搭建、管理和组织,制定销售目标和销售策略,确保团队实现业绩目标,
6
.
主持新员工的货代行业业务培训,确保团队成员对货运行业有深入的理解和认识。
<
/pr
e
>
<
el
-
divider
/>
<
span
class
=
"desc-title"
style
=
"margin-bottom: 16px"
>
工作地址
<
/span
>
<
div
class
=
"map-info"
>
<
div
class
=
"map-addr"
>
<
el
-
icon
color
=
"#177CFA"
style
=
"margin-right: 4px"
><
i
-
ep
-
LocationFilled
/><
/el-icon
>
奋成智谷大厦
<
el
-
scrollbar
>
<
span
class
=
"desc-title"
style
=
"margin-bottom: 16px"
>
职位描述
<
/span
>
<
div
class
=
"flx-align-center"
style
=
"margin-bottom: 18px; flex-wrap: wrap"
>
<
span
v
-
for
=
"(item, index) in positionDetail?.FJOBKEYWORDS || []"
:
key
=
"index"
class
=
"keyWords"
>
{{
item
}}
<
/spa
n
>
<
/div
>
<
qqMap
ref
=
"mapRef"
/>
<
/div
>
<
pre
>
{{
positionDetail
?.
FJOBDESCRIPTION_Tag
}}
<
/pre
>
<
el
-
divider
/>
<
span
class
=
"desc-title"
style
=
"margin-bottom: 16px"
>
工作地址
<
/span
>
<
div
>
<
div
class
=
"flx-align-center"
style
=
"margin-bottom: 10px"
>
<
el
-
icon
color
=
"#177CFA"
style
=
"margin-right: 4px"
><
i
-
ep
-
LocationFilled
/><
/el-icon
>
{{
positionDetail
?.
FWORKPLACE
.
split
(
'/'
).
slice
(
-
1
)[
0
]
}}
<
/div
>
<
qqMap
v
-
if
=
"mapFlag"
ref
=
"mapRef"
/>
<
/div
>
<
div
style
=
"width: 100%; text-align: center"
>
<
span
class
=
"seemore-btn"
@
click
=
"toPositionDetail(positionDetail?.FID)"
>
查看更多信息
<
/spa
n
>
<
/div
>
<
/el-scrollbar
>
<
/div
>
<
/div
>
<
/template
>
<
script
setup
lang
=
"ts"
>
import
{
baseURL
}
from
'@/services'
import
{
sendResume
}
from
'@/services/api/recruitmentManagement'
import
qqMap
from
'@/components/qqMap.vue'
import
customPagination
from
'@/components/customPagination.vue'
defineProps
({
const
props
=
defineProps
({
positionList
:
{
type
:
Array
,
default
:
()
=>
[]
}
as
any
}
as
any
,
queryList
:
{
type
:
Array
,
default
:
()
=>
{
}
}
as
any
,
isPositon
:
{
type
:
Boolean
,
default
:
false
}
}
)
const
emits
=
defineEmits
([
'current-change'
])
const
router
=
useRouter
()
const
mapRef
:
any
=
ref
()
const
activeName
=
ref
()
const
positionDetail
=
ref
()
const
mapFlag
=
ref
(
false
)
watch
(
()
=>
props
.
positionList
,
()
=>
{
mapFlag
.
value
=
true
setTimeout
(()
=>
{
if
(
props
.
positionList
.
length
)
{
activeName
.
value
=
props
.
positionList
[
0
].
FID
positionDetail
.
value
=
props
.
positionList
[
0
]
mapRef
.
value
?.
initMap
(
props
.
positionList
[
0
].
FWORKPLACE
)
}
}
,
300
)
}
,
{
immediate
:
true
,
deep
:
true
}
)
const
positionDetailChange
=
(
row
:
any
)
=>
{
if
(
row
.
FID
===
activeName
.
value
)
return
mapFlag
.
value
=
false
activeName
.
value
=
row
.
FID
positionDetail
.
value
=
props
.
positionList
.
find
((
item
:
any
)
=>
item
.
FID
===
activeName
.
value
)
setTimeout
(()
=>
{
mapFlag
.
value
=
true
setTimeout
(()
=>
{
mapRef
.
value
.
initMap
(
row
.
FWORKPLACE
)
}
,
300
)
}
,
100
)
}
const
toPositionDetail
=
(
FID
:
number
)
=>
{
router
.
push
({
path
:
'/recruitmentManagement/positionDetail'
,
query
:
{
FID
}
}
)
}
const
init
=
async
()
=>
{
setTimeout
(()
=>
{
mapRef
.
value
.
initMap
(
'广东省深圳市宝安区奋成智谷大厦A座'
)
}
,
300
)
const
toCompanyDetail
=
(
FID
:
number
)
=>
{
router
.
push
({
path
:
'/recruitmentManagement/companyDetail'
,
query
:
{
FID
}
}
)
}
defineExpose
({
init
}
)
const
currentChange
=
(
pageIndex
:
number
)
=>
{
mapFlag
.
value
=
false
emits
(
'current-change'
,
pageIndex
)
}
// 投递简历
const
submitResume
=
async
()
=>
{
const
res
:
any
=
await
sendResume
({
JobID
:
positionDetail
.
value
?.
FID
}
)
if
(
res
.
code
===
200
)
{
console
.
log
(
res
)
ElNotification
.
success
({
title
:
'投递简历'
,
message
:
'投递成功'
}
)
}
}
// const init = async () =>
{
// mapFlag.value = true
// setTimeout(() =>
{
// if (props.positionList.length)
{
// activeName.value = props.positionList[0].FID
// positionDetail.value = props.positionList[0]
// mapRef.value.initMap(props.positionList[0].FWORKPLACE)
//
}
//
}
,
100
)
//
}
// defineExpose(
{
// init
//
}
)
<
/script
>
<
style
lang
=
"scss"
scoped
>
...
...
@@ -129,11 +238,9 @@ defineExpose({
.
item
-
lf
{
width
:
183
px
;
// height: 14px;
font
-
size
:
16
px
;
font
-
weight
:
400
;
color
:
#
222222
;
// line-height: 14px;
text
-
align
:
left
;
}
.
item
-
rg
{
...
...
@@ -144,9 +251,9 @@ defineExpose({
.
position
-
content__item
-
ft
{
margin
-
top
:
16
px
;
display
:
flex
;
span
:
first
-
child
{
width
:
40
%
;
}
//
span:first-child
{
//
width: 40%;
//
}
span
{
display
:
inline
-
block
;
padding
:
6
px
12
px
;
...
...
@@ -159,18 +266,67 @@ defineExpose({
margin
-
right
:
8
px
;
}
}
.
enterprise
-
bt
{
padding
:
12
px
20
px
;
background
:
linear
-
gradient
(
90
deg
,
#
e3f0ff
0
%
,
rgba
(
227
,
240
,
255
,
0.15
)
100
%
);
border
-
radius
:
0
0
12
px
12
px
;
span
{
font
-
size
:
13
px
;
font
-
weight
:
400
;
color
:
#
666666
;
}
.
line
{
display
:
inline
-
block
;
width
:
1
px
;
height
:
10
px
;
background
:
#
cccccc
;
}
}
}
.
enterprise
{
padding
:
0
;
padding
-
top
:
26
px
;
&
:
hover
{
box
-
shadow
:
0
20
px
16
px
0
hsla
(
0
,
0
%
,
70.2
%
,
0.2
);
}
.
enterprise
-
tp
{
padding
:
0
20
px
;
margin
-
bottom
:
16
px
;
}
.
enterprise
-
bt
{
padding
:
12
px
20
px
;
background
:
linear
-
gradient
(
90
deg
,
#
e3f0ff
0
%
,
rgba
(
227
,
240
,
255
,
0.15
)
100
%
);
border
-
radius
:
0
0
12
px
12
px
;
span
{
font
-
size
:
13
px
;
font
-
weight
:
400
;
color
:
#
666666
;
}
.
line
{
display
:
inline
-
block
;
width
:
1
px
;
height
:
10
px
;
background
:
#
cccccc
;
}
}
}
.
active
{
border
:
1
px
solid
#
177
cfa
;
background
:
#
f8f8f8
;
}
}
.
position
-
content__detail
{
flex
:
1
;
background
:
#
ffffff
;
border
-
radius
:
12
px
;
padding
:
24
px
20
px
;
.
position
-
content__detail__tp
{
display
:
flex
;
justify
-
content
:
space
-
between
;
align
-
items
:
center
;
margin
-
bottom
:
24
px
;
// margin-bottom: 24px;
border
-
radius
:
12
px
12
px
0
0
;
background
-
color
:
#
ffffff
;
padding
:
24
px
20
px
;
.
position
-
title
{
font
-
size
:
30
px
;
font
-
weight
:
500
;
...
...
@@ -191,8 +347,24 @@ defineExpose({
cursor
:
pointer
;
}
}
.
el
-
scrollbar
{
background
-
color
:
#
ffffff
;
padding
:
0
20
px
24
px
;
max
-
height
:
calc
(
100
vh
-
223
px
);
border
-
radius
:
0
0
12
px
12
px
;
}
}
}
.
keyWords
{
padding
:
4
px
12
px
;
border
-
radius
:
39
px
;
border
:
1
px
solid
#
cccccc
;
margin
-
right
:
12
px
;
font
-
size
:
14
px
;
color
:
#
999999
;
margin
-
bottom
:
8
px
;
}
.
desc
-
title
{
display
:
inline
-
block
;
...
...
@@ -204,4 +376,20 @@ defineExpose({
pre
{
white
-
space
:
pre
-
wrap
;
}
.
seemore
-
btn
{
cursor
:
pointer
;
display
:
inline
-
block
;
width
:
136
px
;
height
:
38
px
;
border
-
radius
:
8
px
;
border
:
1
px
solid
#
177
cfa
;
font
-
size
:
16
px
;
font
-
weight
:
400
;
line
-
height
:
14
px
;
color
:
#
177
cfa
;
line
-
height
:
38
px
;
text
-
align
:
center
;
margin
-
top
:
24
px
;
}
<
/style
>
src/views/recruitmentManagement/components/position.vue
浏览文件 @
ca2001b3
...
...
@@ -8,7 +8,7 @@
<span
v-for=
"(item, index) in positionList"
:key=
"index"
:class=
"
positionQuery
.FPOSITIONSTATUS === item.type ? 'tag-active' : ''"
:class=
"
queryList
.FPOSITIONSTATUS === item.type ? 'tag-active' : ''"
@
click=
"tagChange(item)"
>
{{
item
.
name
}}
</span
>
...
...
@@ -45,15 +45,14 @@
<span
@
click=
"deletePosition(item)"
>
删除
</span>
</div>
</div>
<customPagination
:pageSize=
"queryList.pageSize"
:pageIndex=
"queryList.pageIndex"
:total=
"queryList.total"
@
current-change=
"currentChange"
/>
</div>
<el-empty
v-else
description=
"暂未添加职位"
/>
<el-pagination
background
layout=
"->, prev, pager, next"
:total=
"total"
hide-on-single-page
style=
"margin-top: 15px"
/>
</div>
<previewPosition
v-model:show=
"previewShow"
:position-item=
"positionDetailData"
/>
</
template
>
...
...
@@ -68,22 +67,28 @@ import {
deleteCompanyPosition
}
from
'@/services/api/recruitmentManagement'
import
previewPosition
from
'./previewPosition.vue'
import
customPagination
from
'@/components/customPagination.vue'
const
router
=
useRouter
()
const
loading
=
ref
(
true
)
const
previewShow
=
ref
(
false
)
const
total
=
ref
(
0
)
const
positionQuery
=
ref
({
const
queryList
=
ref
({
pageIndex
:
1
,
pageSize
:
10
,
FPOSITIONSTATUS
:
''
//A开放,B关闭,空全部
FPOSITIONSTATUS
:
''
,
//A开放,B关闭,空全部
total
:
0
})
const
positionData
:
any
=
ref
([])
const
positionDetailData
:
any
=
ref
([])
const
tagChange
=
(
row
:
any
)
=>
{
positionQuery
.
value
.
FPOSITIONSTATUS
=
row
.
type
queryList
.
value
.
FPOSITIONSTATUS
=
row
.
type
initCompanyPositionList
()
}
const
currentChange
=
(
pageIndex
:
number
)
=>
{
queryList
.
value
.
pageIndex
=
pageIndex
initCompanyPositionList
()
}
...
...
@@ -143,18 +148,16 @@ const deletePosition = (row: any) => {
const
initCompanyPositionDetail
=
async
(
FID
:
string
)
=>
{
const
res
:
any
=
await
getCompanyPositionDetail
({
FID
})
// console.log(res)
if
(
res
.
code
===
200
)
{
positionDetailData
.
value
=
res
.
data
}
}
const
initCompanyPositionList
=
async
()
=>
{
loading
.
value
=
true
const
res
:
any
=
await
getCompanyPositionList
(
positionQuery
.
value
)
// console.log(res)
const
res
:
any
=
await
getCompanyPositionList
(
queryList
.
value
)
if
(
res
.
code
===
200
)
{
positionData
.
value
=
res
.
data
||
[]
total
.
value
=
res
.
total
queryList
.
value
.
total
=
res
.
total
loading
.
value
=
false
}
}
...
...
src/views/recruitmentManagement/components/previewResume.vue
浏览文件 @
ca2001b3
...
...
@@ -154,6 +154,22 @@
</div>
</div>
</div>
<div
v-if=
"isCompany"
class=
"flx-center"
>
<span
class=
"btn"
@
click=
"talentStatusChange('B')"
>
简历待定
</span>
<span
class=
"btn"
@
click=
"talentStatusChange('C')"
>
安排面试
</span>
<el-dropdown>
<span
class=
"btn"
>
更多
</span>
<template
#
dropdown
>
<el-dropdown-menu>
<el-dropdown-item
@
click=
"talentStatusChange('D')"
>
已面试
</el-dropdown-item>
<el-dropdown-item
@
click=
"talentStatusChange('E')"
>
已录用
</el-dropdown-item>
<el-dropdown-item
@
click=
"talentStatusChange('F')"
>
已入职
</el-dropdown-item>
<el-dropdown-item
@
click=
"talentStatusChange('G')"
>
人才库
</el-dropdown-item>
<el-dropdown-item
@
click=
"talentStatusChange('H')"
>
人才储备
</el-dropdown-item>
</el-dropdown-menu>
</
template
>
</el-dropdown>
</div>
</div>
</el-dialog>
...
...
@@ -171,7 +187,7 @@ import { baseURL } from '@/services'
import
dayjs
from
'dayjs'
import
previewFile
from
'@/components/previewFile.vue'
defineProps
({
const
props
=
defineProps
({
show
:
{
type
:
Boolean
,
defualt
:
false
...
...
@@ -179,10 +195,18 @@ defineProps({
data
:
{
type
:
Object
,
default
:
()
=>
{}
},
isCompany
:
{
type
:
Boolean
,
default
:
false
},
deliverFID
:
{
type
:
String
,
default
:
''
}
})
const
emits
=
defineEmits
([
'update:show'
])
const
emits
=
defineEmits
([
'update:show'
,
'status-change'
])
const
state
=
reactive
({
previewFileShow
:
false
,
previewTitle
:
''
,
...
...
@@ -196,7 +220,12 @@ const selectDepartRemain = (departRemain: string) => {
return
row
?
row
.
label
:
jobStatus
[
3
].
label
}
// 预览简历
const
talentStatusChange
=
async
(
Type
:
string
)
=>
{
emits
(
'status-change'
,
Type
,
props
.
deliverFID
)
handleClose
()
}
// 预览文件
const
openFile
=
(
row
:
any
)
=>
{
state
.
fileSuffix
=
row
.
FATTACHMENTNAME
.
split
(
'.'
)[
row
.
FATTACHMENTNAME
.
split
(
'.'
).
length
-
1
]
state
.
fileUrl
=
baseURL
+
'/'
+
row
.
FFILEIDURL
...
...
@@ -273,6 +302,22 @@ const handleClose = () => {
color
:
#666666
;
}
}
.btn
{
display
:
inline-block
;
width
:
130px
;
height
:
40px
;
line-height
:
40px
;
text-align
:
center
;
background
:
#177cfa
;
border-radius
:
4px
;
opacity
:
1
;
border
:
1px
solid
rgba
(
23
,
124
,
250
,
1
);
margin-right
:
48px
;
font-size
:
16px
;
color
:
#ffffff
;
cursor
:
pointer
;
}
}
pre
{
white-space
:
pre-wrap
;
...
...
src/views/recruitmentManagement/components/resume.vue
浏览文件 @
ca2001b3
...
...
@@ -2,97 +2,148 @@
<div
class=
"resume"
>
<search
v-if=
"filterShow"
placeholder=
"请输入学校"
style=
"margin-bottom: 24px"
:select-options=
"[
{ label: '找人才', value: 1 },
{ label: '找企业', value: 2 }
]"
@
search-change=
"searchChange"
/>
<div
v-if=
"filterShow"
class=
"resume-filter"
>
<div
v-for=
"item in list"
:key=
"item.name"
class=
"filter-item"
>
<span
class=
"filter-title"
>
{{
item
.
name
}}
</span>
<span
class=
"filter-item-label filter-item-active"
>
不限
</span>
<span
class=
"filter-item-label"
>
不限
</span>
<span
class=
"filter-item-label"
>
不限
</span>
<div
v-if=
"item.name === '学历要求'"
>
<span
class=
"filter-title"
>
{{
item
.
name
}}
</span>
<span
v-for=
"col in informationData?.Degree2"
:key=
"col.FENTRYID"
class=
"filter-item-label"
:class=
"queryList.FEducationBackground === col.FENTRYID ? 'filter-item-active' : ''"
@
click=
"filterChange(col.FENTRYID)"
>
{{
col
.
FDATAVALUE
}}
</span
>
</div>
<div
v-if=
"item.name === '经验要求'"
>
<span
class=
"filter-title"
>
{{
item
.
name
}}
</span>
<span
v-for=
"col in informationData?.Experience"
:key=
"col.FENTRYID"
class=
"filter-item-label"
:class=
"queryList.FEducationBackground === col.FENTRYID ? 'filter-item-active' : ''"
>
{{
col
.
FDATAVALUE
}}
</span
>
</div>
<div
v-if=
"item.name === '其他要求'"
class=
"flx-align-center"
>
<span
class=
"filter-title"
>
{{
item
.
name
}}
</span>
<customSelect
v-for=
"(col, cIndex) in filterList"
:key=
"cIndex"
v-model=
"queryList[col.prop]"
:name=
"col.name"
:list=
"col.list"
@
change=
"selectChange($event, cIndex)"
/>
</div>
</div>
<div
class=
"clear-filter"
>
<span>
清空筛选
</span>
</div>
</div>
<div
class=
"resume-list"
>
<div
v-for=
"item in 3"
:key=
"item"
class=
"resume-item"
>
<div
style=
"display: flex; padding: 20px 0 20px 40px"
>
<div
class=
"flx-center-column"
>
<el-avatar
src=
"https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png"
style=
"width: 64px; height: 64px"
/>
<div
class=
"salary"
>
30-35k
</div>
</div>
<div
class=
"user-info"
>
<div
class=
"user-name"
>
陈琳
</div>
<div
style=
"margin: 10px 0"
>
<span>
27岁
</span>
<el-divider
direction=
"vertical"
/>
<span>
女
</span>
<el-divider
direction=
"vertical"
/>
<span>
1年
</span>
<el-divider
direction=
"vertical"
/>
<span>
硕士
</span>
<el-divider
direction=
"vertical"
/>
<span>
离职-随时到岗
</span>
<div
v-loading=
"loading"
class=
"resume-list"
>
<div
v-if=
"resumeSearchList.length"
>
<div
v-for=
"item in resumeSearchList"
:key=
"item.FID"
class=
"resume-item"
>
<div
style=
"display: flex; padding: 20px 0 20px 40px"
>
<div
class=
"flx-center-column"
>
<el-avatar
:src=
"baseURL + '/' + item.FPHOTOS"
style=
"width: 64px; height: 64px"
/>
<div
class=
"salary"
>
{{
item
.
FExpectSalary
}}
</div>
</div>
<div
class=
"flx-justify-between"
style=
"width: 838px"
>
<p>
强目标导向,并基于当下战略目标持续发现问题,定义问题,输出了解增长拉新有效策略解决问题成功的0-1及1-10经历,深入.
强目标导向,并基于当下战略目标持续发现问题,定义问题,输出了解增长拉新有效策略解决问题成功的0-1及1-10经历,深入.
</p>
<div
class=
"flx-direction-column"
style=
"font-size: 14px"
>
<div
class=
"flx-align-center"
style=
"margin-bottom: 6px"
>
<div
style=
"color: #999999"
>
职位:
</div>
<span>
华熙海御
</span>
<div
style=
"
width: 4px;
height: 4px;
background: #cccccc;
border-radius: 50%;
margin: 0 4px;
"
></div>
<span>
运营经理/主管
</span>
<div
class=
"user-info"
>
<div
class=
"user-name"
>
{{
item
.
FName
}}
</div>
<div
style=
"margin: 10px 0"
>
<span>
{{
item
.
Age
}}
岁
</span>
<el-divider
direction=
"vertical"
/>
<span>
{{
item
.
FSEX
==
'0'
?
'男'
:
'女'
}}
</span>
<el-divider
direction=
"vertical"
/>
<span>
{{
item
.
FGoWorkCount
?
item
.
FGoWorkCount
<
10
?
`${item.FGoWorkCount
}
年`
:
'10年以上'
:
''
}}
<
/span
>
<
el
-
divider
direction
=
"vertical"
/>
<
span
>
{{
item
.
FEDUCATIONBACKGROUND
}}
<
/span
>
<
el
-
divider
direction
=
"vertical"
/>
<
span
>
{{
selectDepartRemain
(
item
.
FDepartRemain
)
}}
<
/span
>
<
/div
>
<
div
class
=
"flx-justify-between"
style
=
"width: 838px; align-items: start"
>
<
p
v
-
show
=
"filterShow"
>
{{
item
.
FPersonalStrengths
}}
<
/p
>
<
div
v
-
show
=
"filterShow"
class
=
"flx-direction-column"
style
=
"font-size: 14px"
>
<
div
class
=
"flx-align-center"
style
=
"margin-bottom: 6px"
>
<
div
style
=
"color: #999999"
>
职位:
<
/div
>
<
span
>
{{
item
.
Zwdata
?.[
0
]?.
FCompanyName
}}
<
/span
>
<
div
class
=
"round"
/>
<
span
>
{{
item
.
Zwdata
?.[
0
]?.
FPosition
}}
<
/span
>
<
/div
>
<
div
class
=
"flx-align-center"
>
<
div
style
=
"color: #999999"
>
院校:
<
/div
>
<
span
>
{{
item
.
Jydata
?.
slice
(
-
1
)[
0
]?.
FLEARNINGNAME
}}
<
/span
>
<
div
class
=
"round"
/>
<
spa
>
{{
item
.
Jydata
?.
slice
(
-
1
)[
0
]?.
FSPECIALTY
}}
<
/spa
>
<
/div
>
<
/div
>
<
div
v
-
show
=
"!filterShow"
>
<
span
style
=
"color: #999999"
>
期望:
<
/span
>
<
span
>
{{
item
.
FDESIREDPOSITION
}}
<
/span
>
<
/div
>
<div
class=
"flx-align-center"
>
<div
style=
"color: #999999"
>
职位:
</div>
<span>
华熙海御
</span>
<
div
v
-
show
=
"!filterShow"
>
<
div
style=
"
width: 4px;
height: 4px;
background: #cccccc;
border-radius: 50%;
margin: 0 4px;
"
></div>
<spa>
运营经理/主管
</spa>
v
-
for
=
"(col, cIndex) in item.Zwdata || []"
:
key
=
"cIndex"
class
=
"flx-align-center"
style
=
"width: 400px"
>
<
div
style
=
"width: 90px; margin-right: 12px"
>
{{
`${Math.floor(col.FGoWorkCount / 12)
}
年${
col.FGoWorkCount % 12 === 0 ? '' : ' ' + (col.FGoWorkCount % 12) + '个月'
}
`
}}
<
/div
>
<
span
>
{{
col
.
FCompanyName
}}
<
/span
>
<
div
class
=
"round"
/>
<
spa
>
{{
col
.
FPosition
}}
<
/spa
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"flx-direction-column"
style
=
"padding: 14px 40px 14px 0; justify-content: center"
>
<!--
<
div
class
=
"resume-btn flx-center"
>
简历待定
<
/div> --
>
<
div
class
=
"resume-btn flx-center"
@
click
=
"talentPool('H', item.FID)"
>
人才库
<
/div
>
<
div
class
=
"resume-btn flx-center"
@
click
=
"talentPool('G', item.FID)"
>
人才储备
<
/div
>
<
/div
>
<
/div
>
<div
class=
"flx-direction-column"
style=
"padding: 14px 40px 14px 0"
>
<div
class=
"resume-btn flx-center"
>
简历待定
</div>
<div
class=
"resume-btn flx-center"
>
人才库
</div>
<div
class=
"resume-btn flx-center"
>
人才储备
</div>
</div>
<
customPagination
:
pageSize
=
"queryList.pageSize"
:
pageIndex
=
"queryList.pageIndex"
:
total
=
"queryList.total"
@
current
-
change
=
"currentChange"
/>
<
/div
>
<
el
-
empty
v
-
else
description
=
"暂无数据"
/>
<
/div
>
<
/div
>
<
/template
>
<
script
setup
lang
=
"ts"
>
import
{
baseURL
}
from
'@/services'
import
{
jobStatus
}
from
'../config'
import
{
getInformation
}
from
'@/services/api/common'
import
{
getResumeSearch
,
setTalentPool
}
from
'@/services/api/recruitmentManagement'
import
customPagination
from
'@/components/customPagination.vue'
import
search
from
'@/components/search.vue'
import
customSelect
from
'@/components/customSelect.vue'
defineProps
({
filterShow
:
{
...
...
@@ -103,12 +154,115 @@ defineProps({
const
list
=
[
{
name
:
'学历要求'
}
,
{
name
:
'院校要求'
},
{
name
:
'经验要求'
},
//
{
name
:
'院校要求'
}
,
//
{
name
:
'经验要求'
}
,
{
name
:
'其他要求'
}
]
const
searchChange
=
(
searchValue
:
string
)
=>
{}
const
loading
=
ref
(
true
)
const
queryList
:
any
=
ref
({
pageIndex
:
1
,
pageSize
:
10
,
KeyStr
:
''
,
//搜索关键词(院校名称)
FEducationBackground
:
''
,
//学历要求
FSex
:
''
,
//性别
FDepartRemain
:
''
,
//在职求职状态
SalaryRange
:
''
,
total
:
0
}
)
const
resumeSearchList
=
ref
([]
as
any
)
const
informationData
=
ref
()
const
filterList
=
ref
([
{
name
:
'性别'
,
prop
:
'FSex'
,
list
:
[
{
FDATAVALUE
:
'男'
,
FENTRYID
:
'0'
}
,
{
FDATAVALUE
:
'女'
,
FENTRYID
:
'1'
}
]
}
,
{
name
:
'薪资区间'
,
list
:
[],
prop
:
'SalaryRange'
}
,
{
name
:
'求职状态'
,
list
:
[
{
FDATAVALUE
:
'离职求职中'
,
FENTRYID
:
'0'
}
,
{
FDATAVALUE
:
'在职求职中'
,
FENTRYID
:
'1'
}
,
{
FDATAVALUE
:
'在职考虑中'
,
FENTRYID
:
'2'
}
,
{
FDATAVALUE
:
'待业'
,
FENTRYID
:
'3'
}
],
prop
:
'FDepartRemain'
}
])
const
selectDepartRemain
=
(
departRemain
:
string
)
=>
{
let
row
=
jobStatus
.
find
((
item
:
any
)
=>
item
.
value
===
departRemain
)
return
row
?
row
.
label
:
jobStatus
[
3
].
label
}
const
searchChange
=
(
searchValue
:
string
)
=>
{
if
(
!
searchValue
)
return
queryList
.
value
.
KeyStr
=
searchValue
init
()
}
const
currentChange
=
(
pageIndex
:
number
)
=>
{
queryList
.
value
.
pageIndex
=
pageIndex
init
()
}
const
talentPool
=
async
(
Type
:
string
,
FID
:
number
)
=>
{
const
res
:
any
=
await
setTalentPool
({
Type
,
FID
}
)
if
(
res
.
code
===
200
)
{
ElNotification
.
success
({
title
:
'添加'
,
message
:
Type
===
'H'
?
'添加人才库成功'
:
'添加人才储备成功'
}
)
}
}
const
selectChange
=
(
e
:
any
,
index
:
number
)
=>
{
init
()
}
const
filterChange
=
(
FENTRYID
:
any
)
=>
{
queryList
.
value
.
FEducationBackground
=
FENTRYID
init
()
}
const
init
=
async
()
=>
{
loading
.
value
=
true
const
res
:
any
=
await
getResumeSearch
(
queryList
.
value
)
if
(
res
.
code
===
200
)
{
resumeSearchList
.
value
=
res
.
data
||
[]
queryList
.
value
.
total
=
res
.
total
loading
.
value
=
false
}
}
const
initInformation
=
async
()
=>
{
const
res
:
any
=
await
getInformation
({
AuxiliaryS
:
[
'SalaryRange'
,
'Experience'
,
'Degree2'
]
}
)
if
(
res
.
code
===
200
)
{
const
item
=
{
FDATAVALUE
:
'不限'
,
FDESCRIPTION
:
'不限'
,
FENTRYID
:
''
}
res
.
data
.
SalaryRange
.
push
(
item
)
res
.
data
.
Experience
.
unshift
(
item
)
res
.
data
.
Degree2
.
unshift
(
item
)
filterList
.
value
[
1
].
list
=
res
.
data
.
SalaryRange
informationData
.
value
=
res
.
data
}
}
initInformation
()
defineExpose
({
init
}
)
<
/script
>
<
style
lang
=
"scss"
scoped
>
...
...
@@ -138,6 +292,7 @@ const searchChange = (searchValue: string) => {}
font
-
weight
:
400
;
color
:
#
909090
;
margin
-
right
:
32
px
;
margin
-
bottom
:
10
px
;
}
.
filter
-
item
-
label
{
...
...
@@ -151,6 +306,10 @@ const searchChange = (searchValue: string) => {}
background
:
#
dcecff
;
color
:
#
177
cfa
;
}
&
:
nth
-
child
(
3
)
{
margin
-
bottom
:
6
px
;
}
}
.
clear
-
filter
{
...
...
@@ -225,4 +384,12 @@ const searchChange = (searchValue: string) => {}
}
}
}
.
round
{
width
:
4
px
;
height
:
4
px
;
background
:
#
cccccc
;
border
-
radius
:
50
%
;
margin
:
0
4
px
;
}
<
/style
>
src/views/recruitmentManagement/components/talent.vue
浏览文件 @
ca2001b3
...
...
@@ -9,7 +9,7 @@
<div
v-if=
"talentList.length"
>
<div
v-for=
"col in talentList"
:key=
"col.DeliverFID"
class=
"tab-item"
>
<div
class=
"tab-item-tp"
>
<div
class=
"tab-item-tp-lf"
@
click=
"openResume"
>
<div
class=
"tab-item-tp-lf"
@
click=
"openResume
(col)
"
>
<el-avatar
:src=
"baseURL + '/' + col.FPHOTOS"
size=
"large"
/>
<div
class=
"user-info"
>
<div>
{{
col
.
UserName
}}
</div>
...
...
@@ -79,11 +79,12 @@
<
el
-
divider
direction
=
"vertical"
/>
<
span
class
=
"user-label"
>
{{
col
.
FSPECIALTY
}}
<
/span
>
<
/div
>
<
div
>
<
div
v
-
if
=
"col.FDELIVERYTIME"
>
<
span
class
=
"user-label"
>
{{
col
.
JobName
}}
<
/span
>
<
el
-
divider
direction
=
"vertical"
/>
<
span
class
=
"user-label"
>
{{
col
.
FDELIVERYTIME
}}
投递
<
/span
>
<
/div
>
<
span
v
-
else
class
=
"user-label"
>
未投递
<
/span
>
<
/div
>
<
/div
>
<
customPagination
...
...
@@ -96,7 +97,13 @@
<
el
-
empty
v
-
else
description
=
"暂无数据"
/>
<
/el-tab-pane
>
<
/el-tabs
>
<
previewResume
v
-
model
:
show
=
"previewResumeShow"
:
data
=
"resumeData"
/>
<
previewResume
v
-
model
:
show
=
"previewResumeShow"
:
data
=
"resumeData"
is
-
company
:
deliverFID
=
"DeliverFID"
@
status
-
change
=
"talentStatusChange"
/>
<
/template
>
<
script
setup
lang
=
"ts"
>
...
...
@@ -105,7 +112,7 @@ import { recruitStatus, jobStatus } from '../config/index'
import
{
getTalentResume
,
updateTalentResume
,
getResume
getResume
Info
}
from
'@/services/api/recruitmentManagement'
import
customPagination
from
'@/components/customPagination.vue'
import
previewResume
from
'./previewResume.vue'
...
...
@@ -113,6 +120,7 @@ import previewResume from './previewResume.vue'
const
activeName
=
ref
(
'A'
)
const
loading
=
ref
(
true
)
const
previewResumeShow
=
ref
(
false
)
const
DeliverFID
=
ref
()
// const rateValue = ref(4)
const
talentList
=
ref
([]
as
any
)
const
resumeData
=
ref
()
...
...
@@ -129,12 +137,12 @@ const selectDepartRemain = (departRemain: string) => {
return
row
?
row
.
label
:
jobStatus
[
3
].
label
}
const
openResume
=
async
()
=>
{
loading
.
value
=
true
const
res
:
any
=
await
getResume
()
const
openResume
=
async
(
row
:
any
)
=>
{
const
res
:
any
=
await
getResumeInfo
({
FID
:
row
.
VitaeID
}
)
if
(
res
.
code
===
200
)
{
resumeData
.
value
=
res
.
data
previewResumeShow
.
value
=
true
DeliverFID
.
value
=
row
.
DeliverFID
}
}
...
...
src/views/recruitmentManagement/config/index.ts
浏览文件 @
ca2001b3
...
...
@@ -61,3 +61,27 @@ export const jobStatus = [
{
label
:
'在职考虑中'
,
value
:
'2'
},
{
label
:
'待业'
,
value
:
'3'
}
]
export
const
copyList
=
[
{
width
:
'50%'
,
prop
:
'FCompanyName'
,
label
:
'公司名称'
,
span
:
2
},
{
width
:
'25%'
,
prop
:
'FLegalRepresentative'
,
label
:
'法定代表人'
,
span
:
1
},
{
width
:
'25%'
,
prop
:
'FDateEstablishment'
,
label
:
'成立日期'
,
span
:
1
},
{
width
:
'50%'
,
prop
:
'FRegisteredAddress'
,
label
:
'注册地址'
,
span
:
2
},
{
width
:
'25%'
,
prop
:
'FOperatingState'
,
label
:
'经营状态'
,
span
:
1
},
{
width
:
'25%'
,
prop
:
'FRegisteredCapital'
,
label
:
'注册资本'
,
span
:
1
},
{
width
:
'50%'
,
prop
:
'FTypeEnterprise'
,
label
:
'企业类型'
,
span
:
2
},
{
width
:
'25%'
,
prop
:
'FOperatingTerm'
,
label
:
'营业期限'
,
span
:
1
},
{
width
:
'25%'
,
prop
:
'FAffiliatingArea'
,
label
:
'所属地区'
,
span
:
1
},
{
width
:
'50%'
,
prop
:
'FCreditCode'
,
label
:
'统一社会信用代码'
,
span
:
2
},
{
width
:
'25%'
,
prop
:
'FDateApproval'
,
label
:
'核准日期'
,
span
:
1
},
{
width
:
'25%'
,
prop
:
''
,
label
:
''
,
span
:
1
},
{
width
:
'100%'
,
prop
:
'FPreviouslyName'
,
label
:
'曾用名'
,
span
:
4
},
{
width
:
'100%'
,
prop
:
'FRegistrationAuthority'
,
label
:
'登记机关'
,
span
:
4
},
{
width
:
'100%'
,
prop
:
'FFIndustryGS'
,
label
:
'所属行业'
,
span
:
4
},
{
width
:
'100%'
,
prop
:
'FBusinessScope'
,
label
:
'经营范围'
,
span
:
4
}
]
src/views/recruitmentManagement/editCompany.vue
浏览文件 @
ca2001b3
...
...
@@ -235,8 +235,8 @@ const state = reactive({
{
FEntryID
:
0
,
FUserPhoneS
:
''
,
//注册手机号
FUserName
:
'
注册人
'
,
FJobTitle
:
'
注册人
'
FUserName
:
'
先生/女士
'
,
FJobTitle
:
'
总经理
'
}
]
}
...
...
src/views/recruitmentManagement/editResume.vue
浏览文件 @
ca2001b3
...
...
@@ -131,6 +131,7 @@
<
div
class
=
"flx-justify-between"
>
<
div
class
=
"resume-label flx-center"
>
期望职位
<
/div
>
<
div
v
-
if
=
"!state.resumeData?.Qzdata || state.resumeData?.Qzdata?.length < 3"
class
=
"flx-align-center"
style
=
"color: #177cfa; cursor: pointer"
@
click
=
"addExpectedClick"
...
...
@@ -580,7 +581,9 @@ import previewFile from '@/components/previewFile.vue'
import
certificate
from
'./components/certificate.vue'
import
dayjs
from
'dayjs'
const
route
=
useRoute
()
const
userInfoStore
=
useUserInfoStore
()
const
state
=
reactive
({
userInfoShow
:
false
,
personalAdvantagesShow
:
false
,
...
...
@@ -670,6 +673,16 @@ const skillCertificateTag = computed(() => {
return
list
.
length
?
list
:
[]
}
)
const
handleScroll
=
()
=>
{
// let directoryEl: any = document.querySelector('.directory')
// directoryEl.style.top = scrollRef.value?.getBoundingClientRect().top + 'px'
// directoryEl.classList.add('animate')
// if (scrollRef.value?.getBoundingClientRect().top <= 6)
{
// directoryEl.style.top = '10px'
// directoryEl.classList.add('animate')
//
}
}
const
selectDepartRemain
=
(
departRemain
:
string
)
=>
{
let
row
=
jobStatus
.
find
((
item
:
any
)
=>
item
.
value
===
departRemain
)
return
row
?
row
.
label
:
jobStatus
[
3
].
label
...
...
@@ -887,6 +900,11 @@ const init = async () => {
loading
.
value
=
true
const
res
:
any
=
await
getResume
()
if
(
res
.
code
===
200
)
{
const
{
addExpected
}
=
route
.
query
if
(
addExpected
&&
res
.
data
?.
Qzdata
?.
length
<
3
)
{
state
.
resumeActive
=
'期望职位'
state
.
expectedPositionShow
=
true
}
state
.
resumeData
=
res
.
data
loading
.
value
=
false
}
...
...
@@ -913,7 +931,17 @@ const initInformation = async () => {
}
}
initInformation
()
onMounted
(()
=>
{
window
.
addEventListener
(
'scroll'
,
handleScroll
,
true
)
}
)
onBeforeUnmount
(()
=>
{
window
.
removeEventListener
(
'scroll'
,
handleScroll
)
}
)
onMounted
(()
=>
{
initInformation
()
}
)
<
/script
>
<
style
lang
=
"scss"
scoped
>
...
...
src/views/recruitmentManagement/enterpriseRecruitment.vue
浏览文件 @
ca2001b3
...
...
@@ -52,8 +52,8 @@
</div>
<talent
v-if=
"manageActive === '人才管理'"
ref=
"talentRef"
/>
<position
v-else-if=
"manageActive === '职位管理'"
ref=
"positionRef"
/>
<resume
v-else-if=
"manageActive === '简历搜索'"
/>
<resume
v-else
:filterS
how=
"false"
/>
<resume
v-else-if=
"manageActive === '简历搜索'"
ref=
"resumeRef"
/>
<resume
v-else
ref=
"resumeRef"
:filter-s
how=
"false"
/>
</div>
</div>
</
template
>
...
...
@@ -72,6 +72,7 @@ const globalStore = useGlobalStore()
const
manageActive
=
ref
(
'人才管理'
)
const
talentRef
=
ref
()
const
positionRef
=
ref
()
const
resumeRef
=
ref
()
const
manageList
=
[
{
name
:
'人才管理'
,
type
:
'A'
},
...
...
@@ -119,10 +120,10 @@ watch(
case
'职位管理'
:
positionRef
.
value
?.
initCompanyPositionList
()
break
case
'简历搜索'
:
break
// case '简历搜索':
// break
default
:
resumeRef
.
value
?.
init
()
break
}
},
100
)
...
...
src/views/recruitmentManagement/index.vue
浏览文件 @
ca2001b3
...
...
@@ -103,7 +103,7 @@
</div>
</div>
<el-divider
style=
"margin: 14px 0"
/>
<div>
<div
@
click=
"toCompanyDetail(col.firmfid)"
>
<div
class=
"company"
>
{{ col.firmname }}
</div>
<div
class=
"company-label"
>
<span>
{{ col.ffinancings }}
</span>
...
...
@@ -175,12 +175,12 @@
</div>
</div>
<div
v-if=
"item.JobS && item.JobS?.length"
class=
"company-bt-btn"
>
<span>
查看更多职位
</span>
<span
@
click=
"toCompanyDetail(item.FirmFID)"
>
查看更多职位
</span>
</div>
</div>
</div>
</div>
<span
class=
"n-more"
style=
"margin-top: 8px"
>
查看更多
</span>
<span
class=
"n-more"
style=
"margin-top: 8px"
@
click=
"toSeeMoreCompany"
>
查看更多
</span>
</div>
</div>
</template>
...
...
@@ -197,7 +197,6 @@ import { getStreet } from '@/services/api/streetOfficeSpecialTopic'
import
{
getPoster
}
from
'@/services/api/common'
import
{
useUserInfoStore
}
from
'@/stores/modules/userInfo'
import
autocomplete
from
'@/components/autocomplete.vue'
import
seeMorePosition
from
'./seeMorePosition.vue'
const
router
=
useRouter
()
const
userInfoStore
=
useUserInfoStore
()
...
...
@@ -259,6 +258,10 @@ const toSeeMorePosition = () => {
router
.
push
({
path
:
'/recruitmentManagement/seeMorePosition'
})
}
const
toSeeMoreCompany
=
()
=>
{
router
.
push
({
path
:
'/recruitmentManagement/seeMoreCompany'
})
}
const
subMenuList
=
computed
(()
=>
{
if
(
!
FDATAVALUE
.
value
)
return
[]
const
list
=
JSON
.
parse
(
JSON
.
stringify
(
menuList
.
value
))
||
[]
...
...
src/views/recruitmentManagement/personalRecruitment.vue
浏览文件 @
ca2001b3
...
...
@@ -41,14 +41,9 @@
</div>
</div>
<div
v-if=
"userPostionList.length"
v-loading=
"filterLoading"
class=
"personal-contnet"
>
<div
v-for=
"item in userPostionList"
:key=
"item"
class=
"personal-ct-item"
@
click=
"toPositionDetail(item.FID)"
>
<div
v-for=
"item in userPostionList"
:key=
"item"
class=
"personal-ct-item"
>
<div
class=
"personal-ct-item-tp"
>
<div
class=
"personal-ct-item-tp-lf"
>
<div
class=
"personal-ct-item-tp-lf"
@
click=
"toPositionDetail(item.FID)"
>
<div
:title=
"
item.JobName + [item.FWORKPLACE?.replace(/^.*?\//, '').replace(/\//g, '.')]
...
...
@@ -68,7 +63,7 @@
<span
class=
"info-label"
>
{{
item
.
FEDUCATIONALBACKGROUND
}}
</span>
</div>
</div>
<div
class=
"personal-ct-item-tp-ct"
>
<div
class=
"personal-ct-item-tp-ct"
@
click=
"toCompanyDetail(item.FirmID)"
>
<img
:src=
"baseURL + '/' + item.FLOGO"
width=
"54"
...
...
@@ -218,6 +213,10 @@ const toPositionDetail = (FID: number) => {
router
.
push
({
path
:
'/recruitmentManagement/positionDetail'
,
query
:
{
FID
}
})
}
const
toCompanyDetail
=
(
FID
:
number
)
=>
{
router
.
push
({
path
:
'/recruitmentManagement/companyDetail'
,
query
:
{
FID
}
})
}
const
initUserPostionList
=
async
()
=>
{
filterLoading
.
value
=
true
let
params
=
JSON
.
parse
(
JSON
.
stringify
(
queryList
.
value
))
...
...
src/views/recruitmentManagement/positionDetail.vue
浏览文件 @
ca2001b3
...
...
@@ -144,6 +144,7 @@
<
script
setup
lang=
"ts"
>
import
{
getUserPostionDetail
,
sendResume
}
from
'@/services/api/recruitmentManagement'
import
{
baseURL
}
from
'@/services'
import
{
copyList
}
from
'./config'
import
info
from
'./components/info.vue'
import
qqMap
from
'@/components/qqMap.vue'
...
...
@@ -151,30 +152,6 @@ const route = useRoute()
const
list
:
any
=
ref
([])
const
copyList
=
[
{
width
:
'50%'
,
prop
:
'FCompanyName'
,
label
:
'公司名称'
,
span
:
2
},
{
width
:
'25%'
,
prop
:
'FLegalRepresentative'
,
label
:
'法定代表人'
,
span
:
1
},
{
width
:
'25%'
,
prop
:
'FDateEstablishment'
,
label
:
'成立日期'
,
span
:
1
},
{
width
:
'50%'
,
prop
:
'FRegisteredAddress'
,
label
:
'注册地址'
,
span
:
2
},
{
width
:
'25%'
,
prop
:
'FOperatingState'
,
label
:
'经营状态'
,
span
:
1
},
{
width
:
'25%'
,
prop
:
'FRegisteredCapital'
,
label
:
'注册资本'
,
span
:
1
},
{
width
:
'50%'
,
prop
:
'FTypeEnterprise'
,
label
:
'企业类型'
,
span
:
2
},
{
width
:
'25%'
,
prop
:
'FOperatingTerm'
,
label
:
'营业期限'
,
span
:
1
},
{
width
:
'25%'
,
prop
:
'FAffiliatingArea'
,
label
:
'所属地区'
,
span
:
1
},
{
width
:
'50%'
,
prop
:
'FCreditCode'
,
label
:
'统一社会信用代码'
,
span
:
2
},
{
width
:
'25%'
,
prop
:
'FDateApproval'
,
label
:
'核准日期'
,
span
:
1
},
{
width
:
'25%'
,
prop
:
''
,
label
:
''
,
span
:
1
},
{
width
:
'100%'
,
prop
:
'FPreviouslyName'
,
label
:
'曾用名'
,
span
:
4
},
{
width
:
'100%'
,
prop
:
'FRegistrationAuthority'
,
label
:
'登记机关'
,
span
:
4
},
{
width
:
'100%'
,
prop
:
'FFIndustryGS'
,
label
:
'所属行业'
,
span
:
4
},
{
width
:
'100%'
,
prop
:
'FBusinessScope'
,
label
:
'经营范围'
,
span
:
4
}
]
const
loading
=
ref
(
true
)
const
mapRef
:
any
=
ref
()
const
detailData
:
any
=
ref
()
...
...
@@ -225,7 +202,9 @@ const init = async () => {
const
res
:
any
=
await
getUserPostionDetail
({
FID
:
route
.
query
.
FID
})
if
(
res
.
code
===
200
)
{
detailData
.
value
=
res
.
data
console
.
log
(
detailData
.
value
?.
FWORKPLACE
)
mapRef
.
value
.
initMap
(
detailData
.
value
?.
FWORKPLACE
)
loading
.
value
=
false
}
}
...
...
src/views/recruitmentManagement/seeMoreCompany.vue
浏览文件 @
ca2001b3
<
template
>
<div></div>
<div
class=
"see-more-company"
>
<div
class=
"container"
>
<div
class=
"filter"
>
<div
class=
"filter-list"
>
<div
v-for=
"(item, index) in filterList"
:key=
"index"
class=
"filter-item"
>
<div
class=
"filter-label"
>
{{
item
.
name
}}
</div>
<div
class=
"filter-span"
>
<span
v-for=
"col in item.list"
:key=
"col.FENTRYID"
:style=
"
{ color: col.FENTRYID === queryList.Filter[item.prop] ? '#177cfa' : '' }"
@click="filterChange(item.prop, col.FENTRYID)"
>
{{
col
.
FDATAVALUE
}}
</span
>
</div>
</div>
</div>
<div
class=
"filter-clear"
>
<span
@
click=
"clear"
>
清空筛选条件
</span>
</div>
<el-autocomplete
v-model=
"queryList.Filter.FNAME"
value-key=
"FirmName"
:fetch-suggestions=
"querySearchAsync"
placeholder=
"搜索公司"
@
select=
"search"
@
change=
"search"
>
<template
#
prefix
>
<span
style=
"padding-right: 28px"
>
找企业
</span>
</
template
>
<
template
#
suffix
>
<el-icon
size=
"24"
style=
"cursor: pointer"
@
click=
"querySearchAsync"
><i-ep-Search
/></el-icon>
</
template
>
</el-autocomplete>
</div>
<div
v-if=
"companyList.length"
v-loading=
"loading"
class=
"company-content"
>
<div
class=
"company-list"
>
<div
v-for=
"item in companyList"
:key=
"item.FirmFID"
class=
"company-item"
>
<div
class=
"company-tp"
@
click=
"toCompanyDetail(item.FirmFID)"
>
<img
:src=
"baseURL + '/' + item.FLOGO"
width=
"50"
height=
"50"
/>
<div
class=
"company-tp-rg flx-column-start-between"
>
<span>
{{ item.FirmName }}
</span>
<div
class=
"company-label"
>
<span>
{{ item.FFINANCINGS }}
</span>
<el-divider
direction=
"vertical"
/>
<span>
{{ item.FSCALES }}
</span>
<el-divider
direction=
"vertical"
/>
<span>
{{ item.FINDUSTRY }}
</span>
</div>
</div>
</div>
<div
class=
"company-bt"
>
<div
class=
"company-position-list flx-direction-column"
>
<div
v-for=
"col in item.JobS"
:key=
"col.JobFID"
class=
"company-position-item"
@
click=
"toPositionDetail(col.JobFID)"
>
<div
class=
"flx-justify-between"
style=
"margin-bottom: 22px"
>
<div
class=
"nowrap-ellipsis"
style=
"width: 207px; text-align: left"
:title=
"col.JobName"
>
{{ col.JobName }}
</div>
<div>
<span
class=
"salary"
>
{{ col.FMINIMUMWAGE }}-{{ col.FMAXIMUMSALARY }}
</span>
<span
class=
"monthly-pay"
>
元/月
</span>
</div>
</div>
<div
class=
"hot-position-item-ft"
>
<span
class=
"nowrap-ellipsis"
:title=
"col.FWORKPLACE"
>
{{
`${col.FWORKPLACE.split('/')[1]} ${col.FWORKPLACE.split('/')[2]} ${
col.FWORKPLACE.split('/')[3]
}`
}}
</span>
<span>
{{ col.FEXPERIENCE }}
</span>
<span>
{{ col.FEDUCATIONALBACKGROUND }}
</span>
</div>
</div>
</div>
<div
v-if=
"item.JobS && item.JobS?.length"
class=
"company-bt-btn"
>
<span
@
click=
"toSeeMorePosition"
>
查看更多职位
</span>
</div>
</div>
</div>
</div>
<customPagination
:pageSize=
"queryList.pageSize"
:pageIndex=
"queryList.pageIndex"
:total=
"queryList.total"
@
current-change=
"currentChange"
/>
</div>
<el-empty
v-else
description=
"暂无数据"
/>
</div>
</div>
</template>
<
script
setup
lang=
"ts"
></
script
>
<
script
setup
lang=
"ts"
>
import
{
getInformation
}
from
'@/services/api/common'
import
{
getStreet
}
from
'@/services/api/streetOfficeSpecialTopic'
import
{
genCompanyList
}
from
'@/services/api/recruitmentManagement'
import
{
baseURL
}
from
'@/services'
import
customPagination
from
'@/components/customPagination.vue'
const
router
=
useRouter
()
const
queryList
=
ref
({
pageIndex
:
1
,
pageSize
:
12
,
Filter
:
{
FNAME
:
''
,
//名称
FSUBSTREET
:
''
,
//街道
FINDUSTRY
:
''
,
//公司类型
FSCALES
:
''
,
//公司规模
FFINANCINGS
:
''
//融资情况
}
as
any
,
total
:
0
})
const
filterList
:
any
=
ref
([
{
name
:
'公司类型'
,
prop
:
'FINDUSTRY'
,
list
:
[]
},
{
name
:
'所在街道办'
,
list
:
[],
prop
:
'FSUBSTREET'
},
{
name
:
'公司规模'
,
list
:
[],
prop
:
'FSCALES'
},
{
name
:
'融资情况'
,
list
:
[],
prop
:
'FFINANCINGS'
}
])
const
loading
=
ref
(
true
)
const
informationData
=
ref
()
const
companyList
:
any
=
ref
([])
let
timeout
:
ReturnType
<
typeof
setTimeout
>
const
filterChange
=
(
prop
:
string
,
FENTRYID
:
string
)
=>
{
queryList
.
value
.
Filter
[
prop
]
=
FENTRYID
initCompanyList
()
}
const
currentChange
=
(
pageIndex
:
number
)
=>
{
queryList
.
value
.
pageIndex
=
pageIndex
initCompanyList
()
window
.
scrollTo
({
top
:
0
,
behavior
:
'auto'
// 可选,smooth 平滑滚动效果
})
}
const
toCompanyDetail
=
(
FID
:
number
)
=>
{
router
.
push
({
path
:
'/recruitmentManagement/companyDetail'
,
query
:
{
FID
}
})
}
const
toSeeMorePosition
=
()
=>
{
router
.
push
({
path
:
'/recruitmentManagement/seeMorePosition'
})
}
const
toPositionDetail
=
(
FID
:
number
)
=>
{
router
.
push
({
path
:
'/recruitmentManagement/positionDetail'
,
query
:
{
FID
}
})
}
const
search
=
(
item
:
Record
<
string
,
any
>
)
=>
{
initCompanyList
()
}
const
clear
=
()
=>
{
queryList
.
value
.
Filter
.
FINDUSTRY
=
''
queryList
.
value
.
Filter
.
FSCALES
=
''
queryList
.
value
.
Filter
.
FSUBSTREET
=
''
queryList
.
value
.
Filter
.
FFINANCINGS
=
''
initCompanyList
()
}
const
querySearchAsync
=
async
(
queryString
:
string
,
cb
:
(
arg
:
any
)
=>
void
)
=>
{
const
res
:
any
=
await
genCompanyList
({
pageIndex
:
1
,
pageSize
:
10
,
Filter
:
{
FNAME
:
queryList
.
value
.
Filter
.
FNAME
//名称
}
})
if
(
res
.
code
===
200
)
{
let
results
=
res
.
data
||
[]
clearTimeout
(
timeout
)
timeout
=
setTimeout
(()
=>
{
cb
(
results
)
},
300
)
}
}
const
initCompanyList
=
async
()
=>
{
loading
.
value
=
true
const
res
:
any
=
await
genCompanyList
(
queryList
.
value
)
if
(
res
.
code
===
200
)
{
companyList
.
value
=
res
.
data
||
[]
queryList
.
value
.
total
=
res
.
total
loading
.
value
=
false
}
}
const
init
=
async
()
=>
{
const
res
:
any
=
await
getInformation
({
AuxiliaryS
:
[
'Trade'
,
'Member'
,
'Financing'
]
})
if
(
res
.
code
===
200
)
{
informationData
.
value
=
res
.
data
const
item
=
{
FDATAVALUE
:
'不限'
,
FENTRYID
:
''
}
res
.
data
.
Trade
.
unshift
(
item
)
res
.
data
.
Member
.
unshift
(
item
)
res
.
data
.
Financing
.
unshift
(
item
)
filterList
.
value
[
0
].
list
=
res
.
data
?.
Trade
||
[]
filterList
.
value
[
2
].
list
=
res
.
data
?.
Member
||
[]
filterList
.
value
[
3
].
list
=
res
.
data
?.
Financing
||
[]
const
street
:
any
=
await
getStreet
()
if
(
street
.
code
===
200
)
{
street
.
data
?.
forEach
((
item
:
any
)
=>
{
item
.
FDATAVALUE
=
item
.
FNAME
+
'办'
item
.
FENTRYID
=
item
.
FID
})
const
item
=
{
FDATAVALUE
:
'全部'
,
FENTRYID
:
''
}
street
.
data
.
unshift
(
item
)
filterList
.
value
[
1
].
list
=
street
.
data
||
[]
initCompanyList
()
}
}
}
init
()
</
script
>
<
style
lang=
"scss"
scoped
></
style
>
<
style
lang=
"scss"
scoped
>
@import
url(./style/seeMoreCompany.scss)
;
</
style
>
src/views/recruitmentManagement/seeMorePosition.vue
浏览文件 @
ca2001b3
...
...
@@ -3,13 +3,31 @@
<div
class=
"container"
>
<div
class=
"sell-position"
>
<div
class=
"flx-align-center"
>
<span
class=
"desc-title"
>
推荐职位
</span>
<span
class=
"desc-title"
:style=
"
{ color: queryList.Filter.FNAME === '' ? '#177cfa' : '' }"
@click="selectChange('')"
>推荐职位
</span
>
<div
class=
"flx-align-center"
style=
"cursor: pointer"
>
<span>
测试员
</span>
<el-divider
direction=
"vertical"
/>
<span>
测试员
</span>
<el-divider
direction=
"vertical"
/>
<div
class=
"flx-align-center"
>
<div
v-for=
"(item, index) in expectedPositionList"
:key=
"item.FDESIREDPOSITION"
class=
"expected-position"
:style=
"
{
borderRight: expectedPositionList.length - 1 === index ? 0 : '',
color: queryList.Filter.FNAME === item.FDATAVALUE ? '#177cfa' : ''
}"
@click="selectChange(item.FDATAVALUE)"
>
{{
item
.
FDATAVALUE
}}
</div>
<div
v-show=
"expectedPositionList.length > 3"
class=
"flx-align-center"
style=
"padding-left: 24px; border-left: 1px solid #cccccc"
@
click=
"toEditResume"
>
<el-icon
style=
"margin: 3px 4px 0 0"
><i-ep-CirclePlus
/></el-icon>
<span>
添加求职期望
</span>
</div>
...
...
@@ -22,23 +40,33 @@
v-model=
"queryList.Filter[item.prop]"
:name=
"item.name"
:list=
"item.list"
@
change=
"selectChange
($event, index)
"
@
change=
"selectChange"
/>
</div>
</div>
<morePosition
ref=
"morePositionRef"
/>
<morePosition
v-if=
"positionList.length"
ref=
"morePositionRef"
v-loading=
"loading"
:positionList=
"positionList"
:queryList=
"queryList"
isPositon
@
current-change=
"currentChange"
/>
<el-empty
v-else
description=
"暂无数据"
/>
</div>
</div>
</
template
>
<
script
setup
lang=
"ts"
>
import
{
get
Information
}
from
'@/services/api/common
'
import
{
get
DesirePosition
,
getUserPostionList
}
from
'@/services/api/recruitmentManagement
'
import
morePosition
from
'./components/morePosition.vue'
import
customSelect
from
'@/components/customSelect.vue'
const
router
=
useRouter
()
const
queryList
=
ref
({
pageIndex
:
1
,
pageSize
:
10
,
pageSize
:
6
,
Filter
:
{
//传id
FNAME
:
''
,
//标题
...
...
@@ -48,7 +76,8 @@ const queryList = ref({
FEDUCATIONALBACKGROUND
:
''
,
//学历
FSCALES
:
''
,
//规模
FFINANCINGS
:
''
//融资情况
}
as
any
}
as
any
,
total
:
0
})
const
filterList
=
ref
([
...
...
@@ -68,44 +97,72 @@ const filterList = ref([
prop
:
'FEDUCATIONALBACKGROUND'
},
{
name
:
'公司
规模
'
,
name
:
'公司
类型
'
,
list
:
[],
prop
:
'F
SCALES
'
prop
:
'F
INDUSTRY
'
},
{
name
:
'
融资情况
'
,
name
:
'
公司规模
'
,
list
:
[],
prop
:
'F
FINANCING
S'
prop
:
'F
SCALE
S'
}
])
const
positionList
=
ref
([]
as
any
)
const
morePositionRef
=
ref
()
const
informationData
=
ref
()
const
loading
=
ref
(
true
)
const
expectedPositionList
=
ref
([]
as
any
)
const
selectChange
=
(
FName
?:
string
)
=>
{
if
(
FName
)
queryList
.
value
.
Filter
.
FNAME
=
FName
else
queryList
.
value
.
Filter
.
FNAME
=
''
initUserPostionList
()
}
const
selectChange
=
(
e
:
any
,
index
:
number
)
=>
{}
const
currentChange
=
(
pageIndex
:
number
)
=>
{
queryList
.
value
.
pageIndex
=
pageIndex
initUserPostionList
()
}
const
toEditResume
=
()
=>
{
router
.
push
({
path
:
'/recruitmentManagement/editResume'
,
query
:
{
addExpected
:
'true'
}
})
}
const
initUserPostionList
=
async
()
=>
{
loading
.
value
=
true
const
res
:
any
=
await
getUserPostionList
(
queryList
.
value
)
if
(
res
.
code
===
200
)
{
positionList
.
value
=
res
.
data
||
[]
queryList
.
value
.
total
=
res
.
total
loading
.
value
=
false
}
}
const
init
=
async
()
=>
{
const
res
:
any
=
await
getInformation
({
AuxiliaryS
:
[
'Experience'
,
'SalaryRange'
,
'Degree2'
,
'Member'
,
'Financing'
]
})
const
initDesirePosition
=
async
()
=>
{
const
res
:
any
=
await
getDesirePosition
()
if
(
res
.
code
===
200
)
{
informationData
.
value
=
res
.
data
const
item
=
{
FDATAVALUE
:
'不限'
,
FDESCRIPTION
:
'不限'
,
FENTRYID
:
' '
}
res
.
data
.
Experience
.
push
(
item
)
res
.
data
.
SalaryRange
.
push
(
item
)
res
.
data
.
Degree2
.
push
(
item
)
res
.
data
.
Member
.
push
(
item
)
res
.
data
.
Financing
.
push
(
item
)
filterList
.
value
[
0
].
list
=
res
.
data
.
Experience
filterList
.
value
[
1
].
list
=
res
.
data
.
SalaryRange
filterList
.
value
[
2
].
list
=
res
.
data
.
Degree2
filterList
.
value
[
3
].
list
=
res
.
data
.
Member
filterList
.
value
[
4
].
list
=
res
.
data
.
Financing
morePositionRef
.
value
.
init
()
const
{
FzData
,
QwDat
}
=
await
res
.
data
informationData
.
value
=
res
.
data
?.
FzData
expectedPositionList
.
value
=
QwDat
||
[]
const
item
=
{
FDATAVALUE
:
'不限'
,
FDESCRIPTION
:
'不限'
,
FENTRYID
:
''
}
FzData
.
Experience
.
push
(
item
)
FzData
.
SalaryRange
.
push
(
item
)
FzData
.
Degree2
.
push
(
item
)
FzData
.
Member
.
push
(
item
)
filterList
.
value
[
0
].
list
=
FzData
.
Experience
filterList
.
value
[
1
].
list
=
FzData
.
SalaryRange
filterList
.
value
[
2
].
list
=
FzData
.
Degree2
filterList
.
value
[
3
].
list
=
FzData
.
Trade
filterList
.
value
[
4
].
list
=
FzData
.
Member
initUserPostionList
()
loading
.
value
=
false
morePositionRef
.
value
?.
init
()
}
}
onMounted
(()
=>
{
init
()
init
DesirePosition
()
})
</
script
>
...
...
@@ -126,10 +183,15 @@ onMounted(() => {
}
.desc-title
{
cursor
:
pointer
;
display
:
inline-block
;
font-size
:
18px
;
color
:
#000000
;
margin-right
:
40px
;
margin-right
:
16px
;
}
.expected-position
{
padding
:
0
24px
;
border-right
:
1px
solid
#cccccc
;
}
.select-list
{
display
:
flex
;
...
...
src/views/recruitmentManagement/style/companyDetail.scss
浏览文件 @
ca2001b3
...
...
@@ -152,6 +152,10 @@
font-weight
:
400
;
color
:
#222222
;
margin-bottom
:
8px
;
&
:hover
{
color
:
#177cfa
;
}
}
}
.select-list
{
...
...
src/views/recruitmentManagement/style/editResume.scss
浏览文件 @
ca2001b3
...
...
@@ -16,7 +16,7 @@
background
:
#ffffff
;
box-shadow
:
0px
1px
2px
0px
rgba
(
0
,
0
,
0
,
0
.1
);
border-radius
:
12px
;
margin-right
:
15px
;
//
margin-right: 15px;
transition
:
top
0
.4s
ease-in-out
;
.directory-first
{
height
:
46px
;
...
...
@@ -60,6 +60,7 @@
box-shadow
:
0px
1px
2px
0px
rgba
(
0
,
0
,
0
,
0
.1
);
border-radius
:
12px
;
font-weight
:
400
;
// margin-left: 242px;
.resume-header
{
height
:
46px
;
...
...
src/views/recruitmentManagement/style/enterprise.scss
浏览文件 @
ca2001b3
...
...
@@ -80,7 +80,7 @@
font-weight
:
400
;
color
:
#999999
;
line-height
:
14px
;
margin-top
:
16
px
;
margin-top
:
8
px
;
display
:
flex
;
align-items
:
center
;
}
...
...
@@ -88,7 +88,7 @@
.company-detail
{
width
:
391px
;
height
:
243px
;
font-size
:
1
2
px
;
font-size
:
1
4
px
;
font-weight
:
400
;
color
:
#666666
;
margin
:
24px
0
20px
;
...
...
src/views/recruitmentManagement/style/seeMoreCompany.scss
0 → 100644
浏览文件 @
ca2001b3
.see-more-company
{
display
:
flex
;
justify-content
:
center
;
margin
:
24px
;
.container
{
width
:
1316px
;
color
:
#222222
;
.filter
{
padding
:
24px
36px
;
background
:
#ffffff
;
border-radius
:
8px
;
.filter-list
{
margin-bottom
:
24px
;
.filter-item
{
display
:
flex
;
margin-bottom
:
8px
;
.filter-label
{
width
:
80px
;
height
:
24px
;
font-size
:
16px
;
font-weight
:
400
;
color
:
#222222
;
margin
:
0
24px
8px
0
;
}
.filter-span
{
flex
:
1
;
display
:
flex
;
flex-wrap
:
wrap
;
span
{
font-size
:
14px
;
color
:
#666666
;
margin
:
0
24px
8px
0
;
cursor
:
pointer
;
&
:hover
{
color
:
#177cfa
;
}
}
}
}
}
.filter-clear
{
display
:
flex
;
justify-content
:
flex-end
;
font-size
:
14px
;
color
:
#666666
;
margin-right
:
24px
;
span
{
cursor
:
pointer
;
&
:hover
{
color
:
#177cfa
;
}
}
}
}
.company-content
{
width
:
1316px
;
text-align
:
center
;
margin-bottom
:
64px
;
.company-list
{
display
:
flex
;
flex-wrap
:
wrap
;
margin-top
:
24px
;
.company-item
{
display
:
flex
;
flex-direction
:
column
;
cursor
:
pointer
;
width
:
calc
((
100%
-
32px
)
/
3
);
flex
:
0
0
calc
((
100%
-
32px
)
/
3
);
margin
:
0
16px
16px
0
;
background
:
#ffffff
;
border-radius
:
12px
;
box-sizing
:
border-box
;
&
:nth-child
(
3n
)
{
margin-right
:
0
;
}
.company-tp
{
background
:
linear-gradient
(
90deg
,
#e3f0ff
0%
,
rgba
(
227
,
240
,
255
,
0
.15
)
100%
);
border-radius
:
12px
12px
0px
0px
;
padding
:
26px
21px
;
display
:
flex
;
.company-tp-rg
{
margin-left
:
21px
;
height
:
50px
;
}
}
.company-bt
{
flex
:
1
;
padding
:
26px
20px
;
display
:
flex
;
flex-direction
:
column
;
justify-content
:
space-between
;
.company-position-list
{
.company-position-item
{
margin-bottom
:
24px
;
cursor
:
pointer
;
.hot-position-item-ft
{
margin-top
:
16px
;
display
:
flex
;
span
{
padding
:
6px
12px
;
height
:
24px
;
background
:
#f8f8f8
;
border-radius
:
4px
;
line-height
:
24px
;
font-size
:
14px
;
font-weight
:
400
;
color
:
#666666
;
margin-right
:
8px
;
&
:first-child
{
width
:
45%
;
text-align
:
left
;
}
}
}
}
}
.company-bt-btn
{
width
:
100%
;
display
:
flex
;
justify-content
:
center
;
cursor
:
pointer
;
span
{
display
:
block
;
width
:
136px
;
height
:
38px
;
line-height
:
38px
;
text-align
:
center
;
border-radius
:
8px
;
border
:
1px
solid
#177cfa
;
color
:
#177cfa
;
font-size
:
16px
;
font-weight
:
400
;
}
}
}
}
}
}
}
:deep
(
.el-autocomplete
)
{
width
:
869px
;
height
:
62px
;
margin-bottom
:
24px
;
.el-input
{
width
:
869px
;
height
:
62px
;
margin-bottom
:
24px
;
.el-input__wrapper
{
border-radius
:
29px
;
padding
:
0
45px
;
}
}
.el-input__prefix-inner
{
border-right
:
1px
solid
#ccc
;
margin-right
:
24px
;
}
}
}
src/views/streetOfficeSpecialTopic/index.vue
浏览文件 @
ca2001b3
...
...
@@ -90,7 +90,7 @@
:
key
=
"item"
class
=
"hot-position-item enterprise"
>
<
div
class
=
"enterprise-tp"
@
click
=
"toPositionDetail(item.Job
Name
)"
>
<
div
class
=
"enterprise-tp"
@
click
=
"toPositionDetail(item.Job
FID
)"
>
<
div
class
=
"flx-justify-between"
>
<
div
class
=
"item-lf nowrap-ellipsis"
:
title
=
"item.JobName"
>
{{
item
.
JobName
}}
...
...
@@ -107,9 +107,9 @@
<
span
>
{{
item
.
FEDUCATIONALBACKGROUND
}}
<
/span
>
<
/div
>
<
/div
>
<
div
class
=
"enterprise-bt flx-justify-between"
>
<
div
class
=
"enterprise-bt flx-justify-between"
@
click
=
"toCompanyDetail(item.FirmFID)"
>
<
div
class
=
"flx-align-center"
>
<
img
:
src
=
"baseURL + '/' + item.FLOGO"
width
=
"24"
height
=
"24
px
"
/>
<
img
:
src
=
"baseURL + '/' + item.FLOGO"
width
=
"24"
height
=
"24"
/>
<
span
style
=
"margin-left: 8px"
>
{{
item
.
FirmName
}}
<
/span
>
<
/div
>
<
div
>
...
...
@@ -184,6 +184,10 @@ const toPersonal = () => {
router
.
push
({
path
:
'/recruitmentManagement/personal'
,
query
:
{
street
:
streetActive
.
value
}
}
)
}
const
toCompanyDetail
=
(
FID
:
number
)
=>
{
router
.
push
({
path
:
'/recruitmentManagement/companyDetail'
,
query
:
{
FID
}
}
)
}
const
change
=
(
FID
:
string
)
=>
{
streetActive
.
value
=
FID
initStreetPosition
()
...
...
types/components.d.ts
浏览文件 @
ca2001b3
...
...
@@ -9,6 +9,7 @@ declare module 'vue' {
export
interface
GlobalComponents
{
Autocomplete
:
typeof
import
(
'./../src/components/autocomplete.vue'
)[
'default'
]
CommonDetail
:
typeof
import
(
'./../src/components/commonDetail.vue'
)[
'default'
]
CommonItem
:
typeof
import
(
'./../src/components/commonItem.vue'
)[
'default'
]
ContentBlock
:
typeof
import
(
'./../src/components/contentBlock.vue'
)[
'default'
]
CustomPagination
:
typeof
import
(
'./../src/components/customPagination.vue'
)[
'default'
]
CustomSelect
:
typeof
import
(
'./../src/components/customSelect.vue'
)[
'default'
]
...
...
@@ -23,8 +24,6 @@ declare module 'vue' {
ElCascader
:
typeof
import
(
'element-plus/es'
)[
'ElCascader'
]
ElCheckbox
:
typeof
import
(
'element-plus/es'
)[
'ElCheckbox'
]
ElCol
:
typeof
import
(
'element-plus/es'
)[
'ElCol'
]
ElCollapse
:
typeof
import
(
'element-plus/es'
)[
'ElCollapse'
]
ElCollapseItem
:
typeof
import
(
'element-plus/es'
)[
'ElCollapseItem'
]
ElConfigProvider
:
typeof
import
(
'element-plus/es'
)[
'ElConfigProvider'
]
ElContainer
:
typeof
import
(
'element-plus/es'
)[
'ElContainer'
]
ElDatePicker
:
typeof
import
(
'element-plus/es'
)[
'ElDatePicker'
]
...
...
@@ -46,7 +45,6 @@ declare module 'vue' {
ElMenu
:
typeof
import
(
'element-plus/es'
)[
'ElMenu'
]
ElMenuItem
:
typeof
import
(
'element-plus/es'
)[
'ElMenuItem'
]
ElOption
:
typeof
import
(
'element-plus/es'
)[
'ElOption'
]
ElPagination
:
typeof
import
(
'element-plus/es'
)[
'ElPagination'
]
ElPopover
:
typeof
import
(
'element-plus/es'
)[
'ElPopover'
]
ElRow
:
typeof
import
(
'element-plus/es'
)[
'ElRow'
]
ElScrollbar
:
typeof
import
(
'element-plus/es'
)[
'ElScrollbar'
]
...
...
vite.config.ts
浏览文件 @
ca2001b3
...
...
@@ -75,7 +75,8 @@ export default defineConfig({
// 设置代理
proxy
:
{
'/K3Cloud'
:
{
target
:
'http://192.168.1.168'
,
// target: 'http://192.168.1.168',
target
:
'http://14.29.230.199:84/'
,
changeOrigin
:
true
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论