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
155e06ea
提交
155e06ea
authored
12月 09, 2023
作者:
刘旭
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新代码
上级
8cb40226
显示空白字符变更
内嵌
并排
正在显示
37 个修改的文件
包含
1396 行增加
和
165 行删除
+1396
-165
index.html
index.html
+1
-1
icon-map1.png
src/assets/img/icon-map1.png
+0
-0
logo.png
src/assets/img/logo.png
+0
-0
vue.svg
src/assets/vue.svg
+0
-2
customPagination.vue
src/components/customPagination.vue
+86
-0
customSelect.vue
src/components/customSelect.vue
+2
-0
qqMap.vue
src/components/qqMap.vue
+4
-16
index.ts
src/routers/index.ts
+12
-0
recruitmentManagement.ts
src/services/api/recruitmentManagement.ts
+40
-0
companyDetail.vue
src/views/recruitmentManagement/companyDetail.vue
+170
-0
certificate.vue
src/views/recruitmentManagement/components/certificate.vue
+126
-0
educationExperience.vue
.../recruitmentManagement/components/educationExperience.vue
+1
-8
expectedPosition.vue
...ews/recruitmentManagement/components/expectedPosition.vue
+1
-8
morePosition.vue
src/views/recruitmentManagement/components/morePosition.vue
+207
-0
personalAdvantages.vue
...s/recruitmentManagement/components/personalAdvantages.vue
+1
-7
projectExperience.vue
...ws/recruitmentManagement/components/projectExperience.vue
+1
-8
talent.vue
src/views/recruitmentManagement/components/talent.vue
+132
-28
userInfo.vue
src/views/recruitmentManagement/components/userInfo.vue
+7
-8
workExperience.vue
...views/recruitmentManagement/components/workExperience.vue
+1
-8
index.ts
src/views/recruitmentManagement/config/index.ts
+10
-17
editCompany.vue
src/views/recruitmentManagement/editCompany.vue
+9
-0
editResume.vue
src/views/recruitmentManagement/editResume.vue
+114
-5
enterpriseRecruitment.vue
src/views/recruitmentManagement/enterpriseRecruitment.vue
+2
-1
index.vue
src/views/recruitmentManagement/index.vue
+44
-20
personalRecruitment.vue
src/views/recruitmentManagement/personalRecruitment.vue
+13
-10
positionDetail.vue
src/views/recruitmentManagement/positionDetail.vue
+18
-7
seeMoreCompany.vue
src/views/recruitmentManagement/seeMoreCompany.vue
+7
-0
seeMorePosition.vue
src/views/recruitmentManagement/seeMorePosition.vue
+141
-0
companyDetail.scss
src/views/recruitmentManagement/style/companyDetail.scss
+204
-0
editResume.scss
src/views/recruitmentManagement/style/editResume.scss
+11
-0
index.scss
src/views/recruitmentManagement/style/index.scss
+11
-0
positionDetail.scss
src/views/recruitmentManagement/style/positionDetail.scss
+7
-3
index.scss
src/views/specialRecruitment/index.scss
+3
-0
index.vue
src/views/specialRecruitment/index.vue
+1
-1
index.scss
src/views/streetOfficeSpecialTopic/index.scss
+2
-4
index.vue
src/views/streetOfficeSpecialTopic/index.vue
+1
-1
components.d.ts
types/components.d.ts
+6
-2
没有找到文件。
index.html
浏览文件 @
155e06ea
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
<html
lang=
"en"
>
<html
lang=
"en"
>
<head>
<head>
<meta
charset=
"UTF-8"
/>
<meta
charset=
"UTF-8"
/>
<link
rel=
"icon"
type=
"image/svg+xml"
href=
"/
vite.sv
g"
/>
<link
rel=
"icon"
type=
"image/svg+xml"
href=
"/
src/assets//img/logo.pn
g"
/>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1.0"
/>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1.0"
/>
<title>
南山就业帮
</title>
<title>
南山就业帮
</title>
<style>
<style>
...
...
src/assets/img/icon-map1.png
0 → 100644
浏览文件 @
155e06ea
424 Bytes
src/assets/img/logo.png
0 → 100644
浏览文件 @
155e06ea
15.9 KB
src/assets/vue.svg
deleted
100644 → 0
浏览文件 @
8cb40226
<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=
"37.07"
height=
"36"
preserveAspectRatio=
"xMidYMid meet"
viewBox=
"0 0 256 198"
><path
fill=
"#41B883"
d=
"M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"
></path><path
fill=
"#41B883"
d=
"m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"
></path><path
fill=
"#35495E"
d=
"M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"
></path></svg>
\ No newline at end of file
src/components/customPagination.vue
0 → 100644
浏览文件 @
155e06ea
<
template
>
<div
class=
"flx-center"
style=
"margin: 20px 0 30px; color: #222222"
>
<div
class=
"flx-align-center"
>
<span
style=
"margin-right: 24px"
>
当前第
{{
pageIndex
}}
页
</span>
<span
style=
"margin-right: 24px"
>
总共
{{
totalPages
}}
页
</span>
<el-icon
size=
"22"
:class=
"pageIndex === 1 ? 'prohibit' : ''"
style=
"margin-right: 18px; cursor: pointer"
@
click=
"currentChange('minus')"
><i-ep-CaretLeft
/></el-icon>
<el-icon
size=
"22"
:class=
"pageIndex === totalPages ? 'prohibit' : ''"
style=
"margin-right: 18px; cursor: pointer"
@
click=
"currentChange('add')"
><i-ep-CaretRight
/></el-icon>
<span
class=
"tail-page"
:style=
"
{ cursor: pageIndex === totalPages ? 'no-drop' : '' }"
@click="tailPage"
>尾页
</span
>
</div>
</div>
</
template
>
<
script
setup
lang=
"ts"
>
const
props
=
defineProps
({
pageIndex
:
{
type
:
Number
,
default
:
1
},
pageSize
:
{
type
:
Number
,
default
:
1
},
total
:
{
type
:
Number
,
default
:
1
}
})
const
emits
=
defineEmits
([
'current-change'
,
'tail-page'
])
const
totalPages
=
computed
(()
=>
Math
.
ceil
(
props
.
total
/
props
.
pageSize
))
const
currentChange
=
(
type
:
string
)
=>
{
if
(
type
===
'minus'
)
{
if
(
props
.
pageIndex
===
1
)
return
emits
(
'current-change'
,
props
.
pageIndex
-
1
)
}
else
{
if
(
props
.
pageIndex
===
totalPages
.
value
)
return
emits
(
'current-change'
,
props
.
pageIndex
+
1
)
}
}
const
tailPage
=
()
=>
{
if
(
props
.
pageIndex
===
totalPages
.
value
)
return
emits
(
'current-change'
,
totalPages
.
value
)
}
</
script
>
<
style
lang=
"scss"
scoped
>
.tail-page
{
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
width
:
44px
;
height
:
31px
;
background
:
#177cfa
;
border-radius
:
4px
;
font-size
:
18px
;
font-weight
:
400
;
color
:
#ffffff
;
text-align
:
center
;
cursor
:
pointer
;
}
.prohibit
{
color
:
#909399
;
cursor
:
no-drop
!
important
;
}
</
style
>
src/components/customSelect.vue
浏览文件 @
155e06ea
...
@@ -13,6 +13,7 @@
...
@@ -13,6 +13,7 @@
</div>
</div>
</div>
</div>
<div
ref=
"dropdownRef"
class=
"filter-select-dropdown"
>
<div
ref=
"dropdownRef"
class=
"filter-select-dropdown"
>
<el-scrollbar
max-height=
"320px"
>
<div
<div
v-for=
"(item, index) in list"
v-for=
"(item, index) in list"
:key=
"index"
:key=
"index"
...
@@ -24,6 +25,7 @@
...
@@ -24,6 +25,7 @@
}}
</span>
}}
</span>
<el-icon
color=
"#177CFA"
><i-ep-Check
v-show=
"item.FENTRYID === modelValue"
/></el-icon>
<el-icon
color=
"#177CFA"
><i-ep-Check
v-show=
"item.FENTRYID === modelValue"
/></el-icon>
</div>
</div>
</el-scrollbar>
</div>
</div>
</div>
</div>
</
template
>
</
template
>
...
...
src/components/qqMap.vue
浏览文件 @
155e06ea
<
template
>
<
template
>
<div
style=
"width: 100%; height: 210px"
>
<div
style=
"width: 100%; height: 210px"
>
<!--
<div>
<div
v-if=
"flag"
id=
"map-container"
style=
"height: 210px; width: 100%"
/>
<el-form>
<el-empty
v-else
description=
"公司地址有误"
style=
"padding: 0"
/>
<div
style=
"display: flex; justify-content: flex-start"
>
<el-form-item
label=
"纬度"
>
<el-input
v-model:value=
"loc.lat"
></el-input>
</el-form-item>
<el-form-item
label=
"经度"
>
<el-input
v-model:value=
"loc.lng"
></el-input>
</el-form-item>
</div>
</el-form>
</div>
-->
<div
id=
"map-container"
style=
"height: 210px; width: 100%"
/>
<!--
<div
class=
"common-map-loc"
></div>
-->
</div>
</div>
</
template
>
</
template
>
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
{
jsonp
}
from
'@/utils'
import
{
jsonp
}
from
'@/utils'
const
windows
:
any
=
window
const
windows
:
any
=
window
let
flag
=
ref
(
true
)
// 组件挂载后,渲染对应组件
// 组件挂载后,渲染对应组件
const
initMap
=
(
address
:
string
)
=>
{
const
initMap
=
(
address
:
string
)
=>
{
...
@@ -57,7 +45,7 @@ const initMap = (address: string) => {
...
@@ -57,7 +45,7 @@ const initMap = (address: string) => {
}
}
]
]
})
})
}
}
else
flag
.
value
=
false
})
})
}
}
...
...
src/routers/index.ts
浏览文件 @
155e06ea
...
@@ -52,10 +52,22 @@ const routes = [
...
@@ -52,10 +52,22 @@ const routes = [
component
:
()
=>
import
(
'@/views/recruitmentManagement/positionDetail.vue'
)
component
:
()
=>
import
(
'@/views/recruitmentManagement/positionDetail.vue'
)
},
},
{
{
path
:
'/recruitmentManagement/companyDetail'
,
component
:
()
=>
import
(
'@/views/recruitmentManagement/companyDetail.vue'
)
},
{
path
:
'/recruitmentManagement/addAdmin'
,
path
:
'/recruitmentManagement/addAdmin'
,
component
:
()
=>
import
(
'@/views/recruitmentManagement/addAdmin.vue'
)
component
:
()
=>
import
(
'@/views/recruitmentManagement/addAdmin.vue'
)
},
},
{
{
path
:
'/recruitmentManagement/seeMorePosition'
,
component
:
()
=>
import
(
'@/views/recruitmentManagement/seeMorePosition.vue'
)
},
{
path
:
'/recruitmentManagement/seeMoreCompany'
,
component
:
()
=>
import
(
'@/views/recruitmentManagement/seeMoreCompany.vue'
)
},
{
path
:
'/specialRecruitment'
,
path
:
'/specialRecruitment'
,
component
:
()
=>
import
(
'@/views/specialRecruitment/index.vue'
)
component
:
()
=>
import
(
'@/views/specialRecruitment/index.vue'
)
},
},
...
...
src/services/api/recruitmentManagement.ts
浏览文件 @
155e06ea
...
@@ -125,3 +125,43 @@ export const getHotPosition = (data: any) => {
...
@@ -125,3 +125,43 @@ export const getHotPosition = (data: any) => {
data
data
)
)
}
}
export
const
getHotCompany
=
(
data
:
any
)
=>
{
return
request
.
post
(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SeFirmPage,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
,
data
)
}
// 投递简历
export
const
sendResume
=
(
data
:
any
)
=>
{
return
request
.
post
(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiEditService.SendResume,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
,
data
)
}
// 人才管理
// 企业更改简历状态
export
const
updateTalentResume
=
(
data
:
any
)
=>
{
return
request
.
post
(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiEditService.ChangeState,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
,
data
)
}
// 企业人才管理简历查询
export
const
getTalentResume
=
(
data
:
any
)
=>
{
return
request
.
post
(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SeTalentManagement,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
,
data
)
}
// 企业人才管理简历查询
export
const
getResumeSearch
=
(
data
:
any
)
=>
{
return
request
.
post
(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.ResumeSearch,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
,
data
)
}
src/views/recruitmentManagement/companyDetail.vue
0 → 100644
浏览文件 @
155e06ea
<
template
>
<div
v-loading=
"loading"
class=
"detail-container flx-center"
>
<div
class=
"container"
>
<div
class=
"detail-filter"
>
<div
class=
"detail-header"
>
<div
class=
"company-info"
>
<div
style=
"display: flex"
>
<img
src=
"@/assets/img/icon-can.png"
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=
"flx-align-center"
>
<span>
融资情况
</span>
<el-divider
direction=
"vertical"
style=
"border-left: 1px solid #274e80"
/>
<span>
公司规模
</span>
<el-divider
direction=
"vertical"
style=
"border-left: 1px solid #274e80"
/>
<span>
公司类型
</span>
</div>
</div>
</div>
<div
style=
"margin-top: 17px"
>
<span
style=
"font-size: 60px; margin: 4px 6px 0 0"
>
20
</span>
<span>
在招职位
</span>
</div>
</div>
<div
class=
"company-switch"
>
<span
:style=
"
{ color: activeName ? '#177cfa' : '' }"
style="margin-right: 64px"
@click="activeName = true"
>公司简介
</span
>
<span
:style=
"
{ color: activeName ? '' : '#177cfa' }" @click="activeName = false"
>招聘职位(20)
</span
>
</div>
</div>
<div
v-if=
"activeName"
>
<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>
<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
class=
"flx-justify-between"
style=
"margin-bottom: 15px"
>
<span
class=
"nowrap-ellipsis"
style=
"display: inline-block; width: 135px"
>
软件测试 (学信网软件测asdasdas试)
</span
>
<span
style=
"font-size: 18px; color: #ff3333"
>
11-15K
</span>
</div>
<div>
<span
class=
"position-label"
>
深圳 福田区 新洲
</span>
<span
class=
"position-label"
>
经验不限
</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>
</div>
</div>
<div
v-else
>
<div
class=
"position-type"
>
<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>
</div>
</div>
<div
class=
"select-list"
>
<customSelect
v-for=
"(item, index) in filterList"
:key=
"index"
v-model=
"queryList.Filter[item.prop]"
:name=
"item.name"
:list=
"item.list"
@
change=
"selectChange($event, index)"
/>
</div>
</div>
<morePosition
ref=
"morePositionRef"
/>
</div>
</div>
</div>
</div>
</
template
>
<
script
setup
lang=
"ts"
>
import
{
getInformation
}
from
'@/services/api/common'
import
customSelect
from
'@/components/customSelect.vue'
import
morePosition
from
'./components/morePosition.vue'
const
morePositionRef
=
ref
()
const
loading
=
ref
(
false
)
const
activeName
=
ref
(
false
)
const
filterList
=
ref
([
{
name
:
'工作经验'
,
prop
:
'FEXPERIENCE'
,
list
:
[]
},
{
name
:
'薪资待遇'
,
list
:
[],
prop
:
'SalaryRange'
},
{
name
:
'学历要求'
,
list
:
[],
prop
:
'FEDUCATIONALBACKGROUND'
}
])
const
queryList
=
ref
({
pageIndex
:
1
,
pageSize
:
10
,
Filter
:
{
//传id
FNAME
:
''
,
//标题
FEXPERIENCE
:
''
,
//经验
SalaryRange
:
''
,
//薪资范围
FEDUCATIONALBACKGROUND
:
''
//学历
}
as
any
})
const
positionList
=
ref
([]
as
any
)
const
informationData
=
ref
()
const
selectChange
=
(
e
:
any
,
index
:
number
)
=>
{}
const
init
=
async
()
=>
{
const
res
:
any
=
await
getInformation
({
AuxiliaryS
:
[
'Experience'
,
'SalaryRange'
,
'Degree2'
]
})
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
)
filterList
.
value
[
0
].
list
=
res
.
data
.
Experience
filterList
.
value
[
1
].
list
=
res
.
data
.
SalaryRange
filterList
.
value
[
2
].
list
=
res
.
data
.
Degree2
morePositionRef
.
value
.
init
()
}
}
onMounted
(()
=>
{
init
()
})
</
script
>
<
style
lang=
"scss"
scoped
>
@import
url(./style/companyDetail.scss)
;
</
style
>
src/views/recruitmentManagement/components/certificate.vue
0 → 100644
浏览文件 @
155e06ea
<
template
>
<el-dialog
:modelValue=
"show"
:title=
"title"
width=
"25%"
:before-close=
"handleClose"
>
<el-form
ref=
"formRef"
:model=
"form"
:rules=
"rules"
hide-required-asterisk
label-position=
"top"
>
<el-form-item
v-if=
"type === 'SkillCertificate'"
label=
""
prop=
"FSkillCertificate"
>
<el-input
v-model=
"form.FSkillCertificate"
size=
"large"
:placeholder=
"placeholder"
/>
</el-form-item>
<el-form-item
v-else
label=
""
prop=
"FCredentials"
>
<el-input
v-model=
"form.FCredentials"
size=
"large"
:placeholder=
"placeholder"
/>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
size=
"large"
style=
"width: 100px"
@
click=
"handleClose"
>
取消
</el-button>
<el-button
size=
"large"
type=
"primary"
style=
"width: 100px"
@
click=
"onConfirm"
>
完成
</el-button
>
</
template
>
</el-dialog>
</template>
<
script
setup
lang=
"ts"
>
import
{
updateResume
}
from
'@/services/api/recruitmentManagement'
const
props
=
defineProps
({
show
:
{
type
:
Boolean
,
default
:
false
},
type
:
{
type
:
String
,
default
:
'FSkillCertificate'
},
title
:
{
type
:
String
,
default
:
'添加证书'
},
placeholder
:
{
type
:
String
,
default
:
'请输入证书'
},
data
:
{
type
:
String
,
default
:
''
}
})
const
emits
=
defineEmits
([
'update:show'
,
'init'
])
const
form
=
ref
({
FSkillCertificate
:
''
,
FCredentials
:
''
})
const
validateName
=
(
rule
:
any
,
value
:
string
,
callback
:
any
)
=>
{
if
(
value
.
includes
(
','
))
{
callback
(
new
Error
(
'证书名称不能包含逗号'
))
}
else
{
callback
()
}
}
const
rules
=
ref
({
FSkillCertificate
:
[
{
required
:
true
,
message
:
'技能证书名称不能为空'
,
trigger
:
'blur'
},
{
validator
:
validateName
,
trigger
:
'blur'
}
],
FCredentials
:
[
{
required
:
true
,
message
:
'资料证书名称不能为空'
,
trigger
:
'blur'
},
{
validator
:
validateName
,
trigger
:
'blur'
}
]
})
const
formRef
=
ref
()
const
onConfirm
=
async
()
=>
{
await
formRef
.
value
?.
validate
(
async
(
valid
:
boolean
)
=>
{
if
(
valid
)
{
let
params
if
(
props
.
type
===
'SkillCertificate'
)
{
params
=
{
NeedUpDateFields
:
[
'FSkillCertificate'
],
IsDeleteEntry
:
'false'
,
Model
:
{
FID
:
0
,
FSkillCertificate
:
props
.
data
!==
' '
?
props
.
data
+
','
+
form
.
value
.
FSkillCertificate
:
form
.
value
.
FSkillCertificate
//技能证书
}
}
}
else
{
params
=
{
NeedUpDateFields
:
[
'FCredentials'
],
IsDeleteEntry
:
'false'
,
Model
:
{
FID
:
0
,
FCredentials
:
props
.
data
!==
' '
?
props
.
data
+
','
+
form
.
value
.
FCredentials
:
form
.
value
.
FCredentials
}
}
}
const
res
:
any
=
await
updateResume
({
Parmeter
:
params
})
if
(
res
.
code
===
200
)
{
ElNotification
.
success
({
title
:
'添加证书'
,
message
:
'添加成功'
})
handleClose
()
emits
(
'init'
)
}
}
})
}
const
handleClose
=
()
=>
{
formRef
.
value
?.
resetFields
()
emits
(
'update:show'
,
false
)
}
defineExpose
({
form
})
</
script
>
<
style
lang=
"scss"
scoped
></
style
>
src/views/recruitmentManagement/components/educationExperience.vue
浏览文件 @
155e06ea
<
template
>
<
template
>
<div
v-show=
"show"
class=
"edit-expected-position"
>
<div
v-show=
"show"
class=
"edit-expected-position"
>
<el-form
<el-form
ref=
"formRef"
:model=
"form"
:rules=
"rules"
hide-required-asterisk
label-position=
"top"
>
ref=
"formRef"
:model=
"form"
:rules=
"rules"
hide-required-asterisk
label-position=
"top"
@
close=
"handleClose"
>
<el-row
:gutter=
"28"
>
<el-row
:gutter=
"28"
>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"学校名称"
prop=
"FLearningName"
>
<el-form-item
label=
"学校名称"
prop=
"FLearningName"
>
...
...
src/views/recruitmentManagement/components/expectedPosition.vue
浏览文件 @
155e06ea
<
template
>
<
template
>
<div
v-show=
"show"
class=
"edit-expected-position"
>
<div
v-show=
"show"
class=
"edit-expected-position"
>
<el-form
<el-form
ref=
"formRef"
:model=
"form"
:rules=
"rules"
hide-required-asterisk
label-position=
"top"
>
ref=
"formRef"
:model=
"form"
:rules=
"rules"
hide-required-asterisk
label-position=
"top"
@
close=
"handleClose"
>
<el-row
:gutter=
"28"
>
<el-row
:gutter=
"28"
>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"求职类型"
>
<el-form-item
label=
"求职类型"
>
...
...
src/views/recruitmentManagement/components/morePosition.vue
0 → 100644
浏览文件 @
155e06ea
<
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
class=
"flx-justify-between"
>
<div
class=
"item-lf nowrap-ellipsis"
:title=
"item.JobName"
>
{{
item
.
JobName
}}
</div>
<div
class=
"item-rg"
>
{{
item
.
FMINIMUMWAGE
}}
-
{{
item
.
FMAXIMUMSALARY
}}
</div>
</div>
<div
class=
"position-content__item-ft"
>
<span
class=
"nowrap-ellipsis"
>
{{
`${item.FWORKPLACE.split('/')[0]
}
${item.FWORKPLACE.split('/')[1]
}
${
item.FWORKPLACE.split('/')[2]
}
`
}}
<
/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
>
<
span
>
{{
item
.
FINDUSTRY
}}
<
/span
>
<
el
-
divider
direction
=
"vertical"
/>
<
span
>
{{
item
.
FFINANCINGS
}}
<
/span
>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"position-content__item"
>
eqwe
<
/div
>
<
/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
>
<
/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
>
<
/div
>
<
div
class
=
"flx-align-center"
style
=
"margin-right: 12px"
>
<
img
src
=
"@/assets/img/icon-resume8.png"
/>
<
span
>
{{
'10年以上经验'
}}
<
/span
>
<
/div
>
<
div
class
=
"flx-align-center"
>
<
img
src
=
"@/assets/img/icon-resume.png"
/>
<
span
>
{{
'本科'
}}
<
/span
>
<
/div
>
<
/div
>
<
/div
>
<
span
class
=
"resume-btn"
>
投递简历
<
/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
>
奋成智谷大厦
<
/div
>
<
qqMap
ref
=
"mapRef"
/>
<
/div
>
<
/div
>
<
/div
>
<
/template
>
<
script
setup
lang
=
"ts"
>
import
{
baseURL
}
from
'@/services'
import
qqMap
from
'@/components/qqMap.vue'
defineProps
({
positionList
:
{
type
:
Array
,
default
:
()
=>
[]
}
as
any
}
)
const
router
=
useRouter
()
const
mapRef
:
any
=
ref
()
const
toPositionDetail
=
(
FID
:
number
)
=>
{
router
.
push
({
path
:
'/recruitmentManagement/positionDetail'
,
query
:
{
FID
}
}
)
}
const
init
=
async
()
=>
{
setTimeout
(()
=>
{
mapRef
.
value
.
initMap
(
'广东省深圳市宝安区奋成智谷大厦A座'
)
}
,
300
)
}
defineExpose
({
init
}
)
<
/script
>
<
style
lang
=
"scss"
scoped
>
.
position
-
content
{
display
:
flex
;
width
:
100
%
;
.
position
-
content__list
{
width
:
428
px
;
display
:
flex
;
flex
-
direction
:
column
;
margin
-
right
:
16
px
;
.
position
-
content__item
{
width
:
100
%
;
margin
-
bottom
:
16
px
;
box
-
sizing
:
border
-
box
;
background
:
#
ffffff
;
border
-
radius
:
12
px
;
padding
:
26
px
20
px
;
cursor
:
pointer
;
.
item
-
lf
{
width
:
183
px
;
// height: 14px;
font
-
size
:
16
px
;
font
-
weight
:
400
;
color
:
#
222222
;
// line-height: 14px;
text
-
align
:
left
;
}
.
item
-
rg
{
font
-
size
:
18
px
;
font
-
weight
:
400
;
color
:
#
ff3333
;
}
.
position
-
content__item
-
ft
{
margin
-
top
:
16
px
;
display
:
flex
;
span
:
first
-
child
{
width
:
40
%
;
}
span
{
display
:
inline
-
block
;
padding
:
6
px
12
px
;
background
:
#
f8f8f8
;
border
-
radius
:
4
px
;
line
-
height
:
24
px
;
font
-
size
:
14
px
;
font
-
weight
:
400
;
color
:
#
666666
;
margin
-
right
:
8
px
;
}
}
}
}
.
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
;
.
position
-
title
{
font
-
size
:
30
px
;
font
-
weight
:
500
;
color
:
#
222222
;
margin
-
right
:
34
px
;
}
.
resume
-
btn
{
display
:
block
;
width
:
120
px
;
height
:
43
px
;
line
-
height
:
43
px
;
background
:
#
177
cfa
;
border
-
radius
:
6
px
;
font
-
size
:
18
px
;
font
-
weight
:
500
;
color
:
#
ffffff
;
text
-
align
:
center
;
cursor
:
pointer
;
}
}
}
}
.
desc
-
title
{
display
:
inline
-
block
;
font
-
size
:
18
px
;
color
:
#
000000
;
margin
-
bottom
:
24
px
;
}
pre
{
white
-
space
:
pre
-
wrap
;
}
<
/style
>
src/views/recruitmentManagement/components/personalAdvantages.vue
浏览文件 @
155e06ea
<
template
>
<
template
>
<div
v-show=
"show"
class=
"personal-advantages"
>
<div
v-show=
"show"
class=
"personal-advantages"
>
<div
class=
"edit-info"
>
编辑个人优势
</div>
<div
class=
"edit-info"
>
编辑个人优势
</div>
<el-form
<el-form
ref=
"formRef"
:model=
"form.Parmeter.Model"
:rules=
"rules"
hide-required-asterisk
>
ref=
"formRef"
:model=
"form.Parmeter.Model"
:rules=
"rules"
hide-required-asterisk
@
close=
"handleClose"
>
<el-form-item
label=
""
prop=
"FPersonalStrengths"
>
<el-form-item
label=
""
prop=
"FPersonalStrengths"
>
<el-input
<el-input
v-model=
"form.Parmeter.Model.FPersonalStrengths"
v-model=
"form.Parmeter.Model.FPersonalStrengths"
...
...
src/views/recruitmentManagement/components/projectExperience.vue
浏览文件 @
155e06ea
<
template
>
<
template
>
<div
v-show=
"show"
class=
"edit-expected-position"
>
<div
v-show=
"show"
class=
"edit-expected-position"
>
<el-form
<el-form
ref=
"formRef"
:model=
"form"
:rules=
"rules"
hide-required-asterisk
label-position=
"top"
>
ref=
"formRef"
:model=
"form"
:rules=
"rules"
hide-required-asterisk
label-position=
"top"
@
close=
"handleClose"
>
<el-row
:gutter=
"28"
>
<el-row
:gutter=
"28"
>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目名称"
prop=
"FProjectName"
>
<el-form-item
label=
"项目名称"
prop=
"FProjectName"
>
...
...
src/views/recruitmentManagement/components/talent.vue
浏览文件 @
155e06ea
<
template
>
<
template
>
<el-tabs
v-model=
"activeName"
stretch
>
<el-tabs
v-model=
"activeName"
v-loading=
"loading"
stretch
@
tab-click=
"handleClick"
>
<el-tab-pane
<el-tab-pane
v-for=
"(item, index) in recruitStatus"
v-for=
"(item, index) in recruitStatus"
:key=
"index"
:key=
"index"
:label=
"item.status + ' ' + item.value"
:label=
"item.status + ' ' + item.value"
:name=
"item.
status
"
:name=
"item.
type
"
>
>
<div
v-for=
"(col, colIndex) in 4"
:key=
"colIndex"
class=
"tab-item"
>
<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"
>
<div
class=
"tab-item-tp-lf
"
>
<div
class=
"tab-item-tp-lf"
@
click=
"openResume
"
>
<el-avatar
:src=
"can
"
size=
"large"
/>
<el-avatar
:src=
"baseURL + '/' + col.FPHOTOS
"
size=
"large"
/>
<div
class=
"user-info"
>
<div
class=
"user-info"
>
<div>
龙昌萍
</div>
<div>
{{
col
.
UserName
}}
</div>
<div
class=
"flx-align-center"
>
<div
class=
"flx-align-center"
>
<span>
未知
</span>
<span>
{{
col
.
FSEX
===
'0'
?
'男'
:
'女'
}}
</span>
<el-divider
direction=
"vertical"
style=
"margin-bottom: 0"
/>
<el-divider
direction=
"vertical"
style=
"margin-bottom: 0"
/>
<span>
20
岁
</span>
<span>
{{
col
.
Age
}}
岁
</span>
</div>
</div>
<div
class=
"flx-align-center"
>
<div
class=
"flx-align-center"
>
<img
src=
"@/assets/img/icon-learn-time.png"
/>
<img
src=
"@/assets/img/icon-learn-time.png"
/>
<span
style=
"margin-left: 3px"
>
在职求职中
</span>
<span
style=
"margin-left: 3px"
>
{{
selectDepartRemain
(
col
.
FDEPARTREMAIN
)
}}
</span>
</div>
</div>
<div
class=
"flx-align-center"
>
<div
class=
"flx-align-center"
>
<img
src=
"@/assets/img/icon-stutus.png"
/>
<img
src=
"@/assets/img/icon-stutus.png"
/>
<span
style=
"margin-left: 3px"
>
2021-09至2024-07
</span>
<span
style=
"margin-left: 3px"
>
{{
col
.
FGoWorkCount
?
col
.
FGoWorkCount
<
10
?
`工作${col.FGoWorkCount
}
年`
:
'10年以上经验'
:
''
}}
<
/span
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"tab-item-tp-rg"
>
<
div
class
=
"tab-item-tp-rg"
>
<
div
class
=
"flx-align-center"
>
<
div
class
=
"flx-align-center"
>
<span
class=
"info-label"
>
简历待定
</span>
<
span
class
=
"info-label"
@
click
=
"talentStatusChange('B', col.DeliverFID)"
<span
class=
"info-label"
>
安排面试
</span>
>
简历待定
<
/spa
n
>
<
span
class
=
"info-label"
@
click
=
"talentStatusChange('C', col.DeliverFID)"
>
安排面试
<
/spa
n
>
<
el
-
dropdown
>
<
el
-
dropdown
>
<
span
class
=
"info-label"
>
更多
<
/span
>
<
span
class
=
"info-label"
>
更多
<
/span
>
<
template
#
dropdown
>
<
template
#
dropdown
>
<
el
-
dropdown
-
menu
>
<
el
-
dropdown
-
menu
>
<el-dropdown-item>
已面试
</el-dropdown-item>
<
el
-
dropdown
-
item
@
click
=
"talentStatusChange('D', col.DeliverFID)"
<el-dropdown-item>
已录用
</el-dropdown-item>
>
已面试
<
/el-dropdown-ite
m
<el-dropdown-item>
已入职
</el-dropdown-item>
>
<el-dropdown-item>
人才库
</el-dropdown-item>
<
el
-
dropdown
-
item
@
click
=
"talentStatusChange('E', col.DeliverFID)"
<el-dropdown-item>
人才储备
</el-dropdown-item>
>
已录用
<
/el-dropdown-ite
m
>
<
el
-
dropdown
-
item
@
click
=
"talentStatusChange('F', col.DeliverFID)"
>
已入职
<
/el-dropdown-ite
m
>
<
el
-
dropdown
-
item
@
click
=
"talentStatusChange('G', col.DeliverFID)"
>
人才库
<
/el-dropdown-ite
m
>
<
el
-
dropdown
-
item
@
click
=
"talentStatusChange('H', col.DeliverFID)"
>
人才储备
<
/el-dropdown-ite
m
>
<
/el-dropdown-menu
>
<
/el-dropdown-menu
>
<
/template
>
<
/template
>
<
/el-dropdown
>
<
/el-dropdown
>
...
@@ -52,31 +73,113 @@
...
@@ -52,31 +73,113 @@
<
/div
>
<
/div
>
<
div
class
=
"tab-item-bt flx-justify-between"
>
<
div
class
=
"tab-item-bt flx-justify-between"
>
<
div
>
<
div
>
<span
class=
"user-label"
>
大专
</span>
<
span
class
=
"user-label"
>
{{
col
.
FEDUCATIONBACKGROUND
}}
<
/span
>
<
el
-
divider
direction
=
"vertical"
/>
<
el
-
divider
direction
=
"vertical"
/>
<span
class=
"user-label"
>
长江工程职业技术学校
</span>
<
span
class
=
"user-label"
>
{{
col
.
FLEARNINGNAME
}}
<
/span
>
<
el
-
divider
direction
=
"vertical"
/>
<
el
-
divider
direction
=
"vertical"
/>
<span
class=
"user-label"
>
计算机软件技术
</span>
<
span
class
=
"user-label"
>
{{
col
.
FSPECIALTY
}}
<
/span
>
<
/div
>
<
/div
>
<
div
>
<
div
>
<span
class=
"user-label"
>
抖音运营
</span>
<
span
class
=
"user-label"
>
{{
col
.
JobName
}}
<
/span
>
<el-divider
direction=
"vertical"
/>
<span
class=
"user-label"
>
2023/07/10投递
</span>
<
el
-
divider
direction
=
"vertical"
/>
<
el
-
divider
direction
=
"vertical"
/>
<span
class=
"user-label"
>
3323234
</span>
<
span
class
=
"user-label"
>
{{
col
.
FDELIVERYTIME
}}
投递
<
/span
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
customPagination
:
pageSize
=
"queryList.pageSize"
:
pageIndex
=
"queryList.pageIndex"
:
total
=
"queryList.total"
@
current
-
change
=
"currentChange"
/>
<
/div
>
<
el
-
empty
v
-
else
description
=
"暂无数据"
/>
<
/el-tab-pane
>
<
/el-tab-pane
>
<
/el-tabs
>
<
/el-tabs
>
<
previewResume
v
-
model
:
show
=
"previewResumeShow"
:
data
=
"resumeData"
/>
<
/template
>
<
/template
>
<
script
setup
lang
=
"ts"
>
<
script
setup
lang
=
"ts"
>
import
{
recruitStatus
}
from
'../config/index'
import
{
baseURL
}
from
'@/services'
import
can
from
'@/assets/img/icon-can.png'
import
{
recruitStatus
,
jobStatus
}
from
'../config/index'
import
{
getTalentResume
,
updateTalentResume
,
getResume
}
from
'@/services/api/recruitmentManagement'
import
customPagination
from
'@/components/customPagination.vue'
import
previewResume
from
'./previewResume.vue'
const
activeName
=
ref
(
'A'
)
const
loading
=
ref
(
true
)
const
previewResumeShow
=
ref
(
false
)
// const rateValue = ref(4)
const
talentList
=
ref
([]
as
any
)
const
resumeData
=
ref
()
const
queryList
=
ref
({
pageIndex
:
1
,
pageSize
:
10
,
Type
:
'A'
,
total
:
0
}
)
// 设置求职状态
const
selectDepartRemain
=
(
departRemain
:
string
)
=>
{
let
row
=
jobStatus
.
find
((
item
:
any
)
=>
item
.
value
===
departRemain
)
return
row
?
row
.
label
:
jobStatus
[
3
].
label
}
const
openResume
=
async
()
=>
{
loading
.
value
=
true
const
res
:
any
=
await
getResume
()
if
(
res
.
code
===
200
)
{
resumeData
.
value
=
res
.
data
previewResumeShow
.
value
=
true
}
}
const
activeName
=
ref
(
'简历未查看'
)
const
currentChange
=
(
pageIndex
:
number
)
=>
{
const
rateValue
=
ref
(
4
)
queryList
.
value
.
pageIndex
=
pageIndex
init
()
}
const
handleClick
=
(
tab
:
any
)
=>
{
queryList
.
value
.
Type
=
tab
.
props
.
name
init
()
}
const
talentStatusChange
=
async
(
Type
:
string
,
DeliverFID
:
number
)
=>
{
const
data
=
{
DeliverFID
,
//投递记录id
Type
//更改类型
}
const
res
:
any
=
await
updateTalentResume
(
data
)
if
(
res
.
code
===
200
)
{
init
()
ElMessage
.
success
(
res
.
msg
)
}
}
const
init
=
async
()
=>
{
loading
.
value
=
true
const
res
:
any
=
await
getTalentResume
(
queryList
.
value
)
if
(
res
.
code
===
200
)
{
talentList
.
value
=
res
.
data
?.
datalist
||
[]
queryList
.
value
.
total
=
res
.
total
for
(
const
key
in
res
.
data
?.
StatisticsCount
)
{
const
item
=
recruitStatus
.
value
.
find
((
item
:
any
)
=>
item
.
type
===
key
)
if
(
item
)
{
item
.
value
=
res
.
data
?.
StatisticsCount
[
key
]
+
'份'
}
}
loading
.
value
=
false
}
}
defineExpose
({
init
}
)
<
/script
>
<
/script
>
<
style
lang
=
"scss"
scoped
>
<
style
lang
=
"scss"
scoped
>
...
@@ -92,6 +195,7 @@ const rateValue = ref(4)
...
@@ -92,6 +195,7 @@ const rateValue = ref(4)
.
tab
-
item
-
tp
-
lf
{
.
tab
-
item
-
tp
-
lf
{
display
:
flex
;
display
:
flex
;
cursor
:
pointer
;
.
user
-
info
{
.
user
-
info
{
display
:
flex
;
display
:
flex
;
flex
-
direction
:
column
;
flex
-
direction
:
column
;
...
...
src/views/recruitmentManagement/components/userInfo.vue
浏览文件 @
155e06ea
...
@@ -7,12 +7,11 @@
...
@@ -7,12 +7,11 @@
:rules=
"rules"
:rules=
"rules"
label-position=
"top"
label-position=
"top"
hide-required-asterisk
hide-required-asterisk
@
close=
"handleClose"
>
>
<el-row
:gutter=
"28"
>
<el-row
:gutter=
"28"
>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"姓名"
prop=
"FName"
>
<el-form-item
label=
"姓名"
prop=
"FName"
>
<el-input
v-model=
"form.Model.FName"
size=
"large"
/>
<el-input
v-model=
"form.Model.FName"
size=
"large"
placeholder=
"请输入姓名"
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
...
@@ -20,7 +19,7 @@
...
@@ -20,7 +19,7 @@
<el-select
<el-select
v-model=
"form.Model.FDepartRemain"
v-model=
"form.Model.FDepartRemain"
size=
"large"
size=
"large"
placeholder=
"
"
placeholder=
"
选择求职状态
"
style=
"width: 100%"
style=
"width: 100%"
>
>
<el-option
<el-option
...
@@ -49,7 +48,7 @@
...
@@ -49,7 +48,7 @@
<el-select
<el-select
v-model=
"form.Model.FMyIdentity"
v-model=
"form.Model.FMyIdentity"
size=
"large"
size=
"large"
placeholder=
"
"
placeholder=
"
请选择身份
"
style=
"width: 100%"
style=
"width: 100%"
>
>
<el-option
label=
"职场人"
value=
"0"
/>
<el-option
label=
"职场人"
value=
"0"
/>
...
@@ -88,12 +87,12 @@
...
@@ -88,12 +87,12 @@
</el-col>
</el-col>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"微信号 (选填)"
>
<el-form-item
label=
"微信号 (选填)"
>
<el-input
v-model=
"form.Model.FWechat"
size=
"large"
/>
<el-input
v-model=
"form.Model.FWechat"
size=
"large"
placeholder=
"请输入微信号"
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"邮箱 (选填)"
>
<el-form-item
label=
"邮箱 (选填)"
prop=
"FEmail"
>
<el-input
v-model=
"form.Model.FEmail"
size=
"large"
/>
<el-input
v-model=
"form.Model.FEmail"
size=
"large"
placeholder=
"请输入邮箱"
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"12"
class=
"edit-resume-btn"
>
<el-col
:span=
"12"
class=
"edit-resume-btn"
>
...
@@ -153,7 +152,7 @@ const form: any = ref({
...
@@ -153,7 +152,7 @@ const form: any = ref({
const
rules
=
{
const
rules
=
{
FName
:
[{
required
:
true
,
message
:
'姓名不能为空'
,
trigger
:
'blur'
}],
FName
:
[{
required
:
true
,
message
:
'姓名不能为空'
,
trigger
:
'blur'
}],
FEmail
:
[
FEmail
:
[
{
required
:
true
,
message
:
'邮箱不能为空'
,
trigger
:
'blur'
},
//
{ required: true, message: '邮箱不能为空', trigger: 'blur' },
{
type
:
'email'
,
message
:
'请输入有效的邮箱地址'
,
trigger
:
'blur'
}
{
type
:
'email'
,
message
:
'请输入有效的邮箱地址'
,
trigger
:
'blur'
}
],
],
FSex
:
[{
required
:
true
,
message
:
'性别不能为空'
,
trigger
:
'change'
}],
FSex
:
[{
required
:
true
,
message
:
'性别不能为空'
,
trigger
:
'change'
}],
...
...
src/views/recruitmentManagement/components/workExperience.vue
浏览文件 @
155e06ea
<
template
>
<
template
>
<div
v-show=
"show"
class=
"edit-expected-position"
>
<div
v-show=
"show"
class=
"edit-expected-position"
>
<el-form
<el-form
ref=
"formRef"
:model=
"form"
:rules=
"rules"
hide-required-asterisk
label-position=
"top"
>
ref=
"formRef"
:model=
"form"
:rules=
"rules"
hide-required-asterisk
label-position=
"top"
@
close=
"handleClose"
>
<el-row
:gutter=
"28"
>
<el-row
:gutter=
"28"
>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"公司名称"
prop=
"FCompanyName"
>
<el-form-item
label=
"公司名称"
prop=
"FCompanyName"
>
...
...
src/views/recruitmentManagement/config/index.ts
浏览文件 @
155e06ea
import
{
useUserInfoStore
}
from
'@/stores/modules/userInfo'
const
userInfoStore
=
useUserInfoStore
()
const
companyInfo
=
computed
(()
=>
userInfoStore
.
getCompanyInfo
)
export
const
filterList
=
ref
([
export
const
filterList
=
ref
([
{
{
name
:
'工作经验'
,
name
:
'工作经验'
,
...
@@ -31,18 +26,16 @@ export const filterList = ref([
...
@@ -31,18 +26,16 @@ export const filterList = ref([
}
}
])
])
export
const
recruitStatus
=
computed
(()
=>
{
export
const
recruitStatus
=
ref
([
return
[
{
type
:
'A'
,
status
:
'简历未查看'
,
value
:
''
},
{
status
:
'简历未查看'
,
value
:
companyInfo
.
value
?.
NotViewed
+
'份'
},
{
type
:
'B'
,
status
:
'简历待定'
,
value
:
''
},
{
status
:
'简历待定'
,
value
:
companyInfo
.
value
?.
Pending
+
'份'
},
{
type
:
'C'
,
status
:
'安排面试'
,
value
:
''
},
{
status
:
'安排面试'
,
value
:
companyInfo
.
value
?.
Arrange
+
'份'
},
{
type
:
'D'
,
status
:
'已面试'
,
value
:
''
},
{
status
:
'已面试'
,
value
:
companyInfo
.
value
?.
HaveInterview
+
'份'
},
{
type
:
'E'
,
status
:
'已录用'
,
value
:
''
},
{
status
:
'已录用'
,
value
:
companyInfo
.
value
?.
HaveHired
+
'份'
},
{
type
:
'F'
,
status
:
'已入职'
,
value
:
''
},
{
status
:
'已入职'
,
value
:
companyInfo
.
value
?.
AlreadyBoard
+
'份'
},
{
type
:
'G'
,
status
:
'人才库'
,
value
:
''
},
{
status
:
'人才库'
,
value
:
companyInfo
.
value
?.
TalentPool
+
'份'
},
{
type
:
'H'
,
status
:
'人才储备'
,
value
:
''
}
{
status
:
'人才储备'
,
value
:
companyInfo
.
value
?.
Blacklist
+
'份'
}
])
]
})
export
const
positionList
=
[
export
const
positionList
=
[
{
name
:
'全部职位'
,
type
:
''
},
{
name
:
'全部职位'
,
type
:
''
},
...
...
src/views/recruitmentManagement/editCompany.vue
浏览文件 @
155e06ea
...
@@ -324,6 +324,15 @@ const submit = async () => {
...
@@ -324,6 +324,15 @@ const submit = async () => {
}
}
const
res
:
any
=
await
editCompanyInfo
(
data
)
const
res
:
any
=
await
editCompanyInfo
(
data
)
if
(
res
.
code
===
200
)
{
if
(
res
.
code
===
200
)
{
// 编辑成功后更新内存公司信息
userInfoStore
.
companyInfo
.
ADDRESSS
=
state
.
form
.
FAddresss
userInfoStore
.
companyInfo
.
FCOMPANYPROFILE
=
state
.
form
.
FCompanyProfile
userInfoStore
.
companyInfo
.
FSCALE
=
state
.
informationData
?.
Member
.
find
(
(
item
:
any
)
=>
item
.
FNUMBER
===
state
.
form
.
FScaleS
)?.
FDATAVALUE
userInfoStore
.
companyInfo
.
FFINANCING
=
state
.
informationData
?.
Financing
.
find
(
(
item
:
any
)
=>
item
.
FNUMBER
===
state
.
form
.
FFinancingS
)?.
FDATAVALUE
ElNotification
({
ElNotification
({
title
:
'企业编辑'
,
title
:
'企业编辑'
,
message
:
res
.
msg
,
message
:
res
.
msg
,
...
...
src/views/recruitmentManagement/editResume.vue
浏览文件 @
155e06ea
...
@@ -273,7 +273,7 @@
...
@@ -273,7 +273,7 @@
添加
添加
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
projectExperience
v
-
model
:
show
=
"state.projectExperienceShow"
projectRef
/>
<
projectExperience
v
-
model
:
show
=
"state.projectExperienceShow"
@
init
=
"init"
/>
<
div
class
=
"resume-content"
>
<
div
class
=
"resume-content"
>
<
div
<
div
v
-
for
=
"(item, index) in state.resumeData?.Xmdata || []"
v
-
for
=
"(item, index) in state.resumeData?.Xmdata || []"
...
@@ -386,16 +386,17 @@
...
@@ -386,16 +386,17 @@
<
div
id
=
"resume6"
class
=
"resume-item"
>
<
div
id
=
"resume6"
class
=
"resume-item"
>
<
div
class
=
"flx-justify-between"
>
<
div
class
=
"flx-justify-between"
>
<
div
class
=
"resume-label flx-center"
style
=
"width: 170px"
>
自定义添加
<
/div
>
<
div
class
=
"resume-label flx-center"
style
=
"width: 170px"
>
自定义添加
<
/div
>
<
div
class
=
"flx-align-center"
style
=
"color: #177cfa; cursor: pointer"
>
<
!--
<
div
class
=
"flx-align-center"
style
=
"color: #177cfa; cursor: pointer"
>
<
el
-
icon
color
=
"#177CFA"
style
=
"margin-right: 4px"
<
el
-
icon
color
=
"#177CFA"
style
=
"margin-right: 4px"
><
i
-
ep
-
CirclePlusFilled
><
i
-
ep
-
CirclePlusFilled
/><
/el-icon
>
/><
/el-icon
>
添加
添加
<
/div
>
<
/div>
--
>
<
/div
>
<
/div
>
<
div
class
=
"resume-content"
>
<
div
class
=
"resume-content"
>
<
el
-
row
style
=
"width: 100%"
>
<
el
-
row
style
=
"width: 100%"
>
<
el
-
col
:
span
=
"11"
class
=
"custom-col"
>
<
el
-
col
:
span
=
"11"
>
<
div
class
=
"custom-col"
@
click
=
"openCertificate('FCredentials')"
>
<
div
class
=
"flx-direction-column"
>
<
div
class
=
"flx-direction-column"
>
<
span
>
资格证书
<
/span
>
<
span
>
资格证书
<
/span
>
<
span
style
=
"color: #666666; font-size: 16px; margin-top: 12px"
<
span
style
=
"color: #666666; font-size: 16px; margin-top: 12px"
...
@@ -403,8 +404,22 @@
...
@@ -403,8 +404,22 @@
>
>
<
/div
>
<
/div
>
<
img
src
=
"@/assets/img/icon-resume6.png"
style
=
"cursor: pointer"
/>
<
img
src
=
"@/assets/img/icon-resume6.png"
style
=
"cursor: pointer"
/>
<
/div
>
<
div
class
=
"certificate-tag"
>
<
el
-
tag
v
-
for
=
"(item, index) in credentialsTag"
:
key
=
"index"
class
=
"tag"
type
=
"info"
size
=
"large"
closable
@
close
=
"tagClose(index, 'Credentials')"
>
{{
item
}}
<
/el-ta
g
>
<
/div
>
<
/el-col
>
<
/el-col
>
<
el
-
col
:
span
=
"11"
class
=
"custom-col"
>
<
el
-
col
:
span
=
"11"
>
<
div
class
=
"custom-col"
@
click
=
"openCertificate('SkillCertificate')"
>
<
div
class
=
"flx-direction-column"
>
<
div
class
=
"flx-direction-column"
>
<
span
>
技能证书
<
/span
>
<
span
>
技能证书
<
/span
>
<
span
style
=
"color: #666666; font-size: 16px; margin-top: 12px"
<
span
style
=
"color: #666666; font-size: 16px; margin-top: 12px"
...
@@ -412,6 +427,19 @@
...
@@ -412,6 +427,19 @@
>
>
<
/div
>
<
/div
>
<
img
src
=
"@/assets/img/icon-resume6.png"
style
=
"cursor: pointer"
/>
<
img
src
=
"@/assets/img/icon-resume6.png"
style
=
"cursor: pointer"
/>
<
/div
>
<
div
class
=
"certificate-tag"
>
<
el
-
tag
v
-
for
=
"(item, index) in skillCertificateTag"
:
key
=
"index"
class
=
"tag"
type
=
"info"
size
=
"large"
closable
@
close
=
"tagClose(index, 'SkillCertificate')"
>
{{
item
}}
<
/el-ta
g
>
<
/div
>
<
/el-col
>
<
/el-col
>
<
/el-row
>
<
/el-row
>
<
/div
>
<
/div
>
...
@@ -518,6 +546,14 @@
...
@@ -518,6 +546,14 @@
:
url
=
"state.fileUrl"
:
url
=
"state.fileUrl"
:
title
=
"state.previewTitle"
:
title
=
"state.previewTitle"
/>
/>
<
certificate
v
-
model
:
show
=
"state.certificateShow"
:
title
=
"state.certificateTitle"
:
placeholder
=
"state.certificatePlaceholder"
:
type
=
"state.certificateType"
:
data
=
"state.certificateData"
@
init
=
"init"
/>
<
/template
>
<
/template
>
<
script
setup
lang
=
"ts"
>
<
script
setup
lang
=
"ts"
>
...
@@ -531,6 +567,7 @@ import {
...
@@ -531,6 +567,7 @@ import {
import
{
getInformation
}
from
'@/services/api/common'
import
{
getInformation
}
from
'@/services/api/common'
import
{
useUserInfoStore
}
from
'@/stores/modules/userInfo'
import
{
useUserInfoStore
}
from
'@/stores/modules/userInfo'
import
{
baseURL
}
from
'@/services'
import
{
baseURL
}
from
'@/services'
import
{
deepCopy
}
from
'@/utils'
import
userInfo
from
'./components/userInfo.vue'
import
userInfo
from
'./components/userInfo.vue'
import
personalAdvantages
from
'./components/personalAdvantages.vue'
import
personalAdvantages
from
'./components/personalAdvantages.vue'
import
expectedPosition
from
'./components/expectedPosition.vue'
import
expectedPosition
from
'./components/expectedPosition.vue'
...
@@ -540,6 +577,7 @@ import educationExperience from './components/educationExperience.vue'
...
@@ -540,6 +577,7 @@ import educationExperience from './components/educationExperience.vue'
import
dragUpload
from
'@/components/dragUpload.vue'
import
dragUpload
from
'@/components/dragUpload.vue'
import
previewResume
from
'./components/previewResume.vue'
import
previewResume
from
'./components/previewResume.vue'
import
previewFile
from
'@/components/previewFile.vue'
import
previewFile
from
'@/components/previewFile.vue'
import
certificate
from
'./components/certificate.vue'
import
dayjs
from
'dayjs'
import
dayjs
from
'dayjs'
const
userInfoStore
=
useUserInfoStore
()
const
userInfoStore
=
useUserInfoStore
()
...
@@ -553,7 +591,14 @@ const state = reactive({
...
@@ -553,7 +591,14 @@ const state = reactive({
dragShow
:
false
,
dragShow
:
false
,
previewResumeShow
:
false
,
previewResumeShow
:
false
,
previewFileShow
:
false
,
previewFileShow
:
false
,
// 自定义证书参数
certificateShow
:
false
,
certificateTitle
:
''
,
certificateType
:
''
,
certificatePlaceholder
:
''
,
previewTitle
:
''
,
previewTitle
:
''
,
certificateData
:
''
,
resumeActive
:
'个人信息'
,
resumeActive
:
'个人信息'
,
resumeData
:
{
}
as
any
,
resumeData
:
{
}
as
any
,
informationData
:
{
}
as
any
,
informationData
:
{
}
as
any
,
...
@@ -603,6 +648,7 @@ const maskedWechat = computed(() => {
...
@@ -603,6 +648,7 @@ const maskedWechat = computed(() => {
return
''
return
''
}
}
}
)
}
)
const
maskedUserPhone
=
computed
(()
=>
{
const
maskedUserPhone
=
computed
(()
=>
{
const
{
FUserPhone
}
=
state
.
resumeData
?.
Jbdata
||
{
}
const
{
FUserPhone
}
=
state
.
resumeData
?.
Jbdata
||
{
}
if
(
FUserPhone
&&
FUserPhone
.
trim
())
{
if
(
FUserPhone
&&
FUserPhone
.
trim
())
{
...
@@ -612,6 +658,18 @@ const maskedUserPhone = computed(() => {
...
@@ -612,6 +658,18 @@ const maskedUserPhone = computed(() => {
}
}
}
)
}
)
const
credentialsTag
=
computed
(()
=>
{
if
(
!
state
.
resumeData
?.
Jbdata
?.
FCredentials
.
trim
())
return
[]
let
list
=
state
.
resumeData
?.
Jbdata
?.
FCredentials
?.
split
(
','
)
||
[]
return
list
.
length
?
list
:
[]
}
)
const
skillCertificateTag
=
computed
(()
=>
{
if
(
!
state
.
resumeData
?.
Jbdata
?.
FSkillCertificate
.
trim
())
return
[]
let
list
=
state
.
resumeData
?.
Jbdata
?.
FSkillCertificate
?.
split
(
','
)
||
[]
return
list
.
length
?
list
:
[]
}
)
const
selectDepartRemain
=
(
departRemain
:
string
)
=>
{
const
selectDepartRemain
=
(
departRemain
:
string
)
=>
{
let
row
=
jobStatus
.
find
((
item
:
any
)
=>
item
.
value
===
departRemain
)
let
row
=
jobStatus
.
find
((
item
:
any
)
=>
item
.
value
===
departRemain
)
return
row
?
row
.
label
:
jobStatus
[
3
].
label
return
row
?
row
.
label
:
jobStatus
[
3
].
label
...
@@ -665,6 +723,57 @@ const openFile = (row: any) => {
...
@@ -665,6 +723,57 @@ const openFile = (row: any) => {
state
.
previewFileShow
=
true
state
.
previewFileShow
=
true
}
}
const
openCertificate
=
(
type
:
string
)
=>
{
switch
(
type
)
{
case
'SkillCertificate'
:
state
.
certificateTitle
=
'添加技能证书'
state
.
certificatePlaceholder
=
'请输入技能证书名称'
state
.
certificateType
=
'SkillCertificate'
state
.
certificateData
=
state
.
resumeData
?.
Jbdata
.
FSkillCertificate
break
default
:
state
.
certificateTitle
=
'添加资格证书'
state
.
certificatePlaceholder
=
'请输入资格证书名称'
state
.
certificateType
=
'FCredentials'
state
.
certificateData
=
state
.
resumeData
?.
Jbdata
.
FCredentials
break
}
state
.
certificateShow
=
true
}
const
tagClose
=
async
(
index
:
number
,
type
:
string
)
=>
{
let
params
if
(
type
===
'Credentials'
)
{
let
list
=
deepCopy
(
credentialsTag
.
value
)
list
.
splice
(
index
,
1
)
let
str
=
list
.
join
(
','
)
params
=
{
NeedUpDateFields
:
[
'FCredentials'
],
IsDeleteEntry
:
'false'
,
Model
:
{
FID
:
0
,
FCredentials
:
str
//技能证书
}
}
}
else
{
let
list
=
deepCopy
(
skillCertificateTag
.
value
)
list
.
splice
(
index
,
1
)
let
str
=
list
.
join
(
','
)
params
=
{
NeedUpDateFields
:
[
'FSkillCertificate'
],
IsDeleteEntry
:
'false'
,
Model
:
{
FID
:
0
,
FSkillCertificate
:
str
//技能证书
}
}
}
const
res
:
any
=
await
updateResume
({
Parmeter
:
params
}
)
if
(
res
.
code
===
200
)
{
init
()
}
}
// 修改个人信息
// 修改个人信息
const
userInfoClick
=
()
=>
{
const
userInfoClick
=
()
=>
{
const
{
FWechat
,
FUserPhone
,
FEmail
}
=
state
.
resumeData
.
Jbdata
const
{
FWechat
,
FUserPhone
,
FEmail
}
=
state
.
resumeData
.
Jbdata
...
...
src/views/recruitmentManagement/enterpriseRecruitment.vue
浏览文件 @
155e06ea
...
@@ -69,7 +69,7 @@ import resume from './components/resume.vue'
...
@@ -69,7 +69,7 @@ import resume from './components/resume.vue'
const
router
=
useRouter
()
const
router
=
useRouter
()
const
userInfoStore
=
useUserInfoStore
()
const
userInfoStore
=
useUserInfoStore
()
const
globalStore
=
useGlobalStore
()
const
globalStore
=
useGlobalStore
()
const
manageActive
=
ref
(
'
职位
管理'
)
const
manageActive
=
ref
(
'
人才
管理'
)
const
talentRef
=
ref
()
const
talentRef
=
ref
()
const
positionRef
=
ref
()
const
positionRef
=
ref
()
...
@@ -114,6 +114,7 @@ watch(
...
@@ -114,6 +114,7 @@ watch(
setTimeout
(()
=>
{
setTimeout
(()
=>
{
switch
(
newVal
)
{
switch
(
newVal
)
{
case
'人才管理'
:
case
'人才管理'
:
talentRef
.
value
?.
init
()
break
break
case
'职位管理'
:
case
'职位管理'
:
positionRef
.
value
?.
initCompanyPositionList
()
positionRef
.
value
?.
initCompanyPositionList
()
...
...
src/views/recruitmentManagement/index.vue
浏览文件 @
155e06ea
...
@@ -116,7 +116,7 @@
...
@@ -116,7 +116,7 @@
</div>
</div>
</div>
</div>
<div
class=
"flx-center"
style=
"text-align: center"
>
<div
class=
"flx-center"
style=
"text-align: center"
>
<span
class=
"n-more"
@
click=
"
seeMore
"
>
查看更多
</span>
<span
class=
"n-more"
@
click=
"
toSeeMorePosition
"
>
查看更多
</span>
</div>
</div>
</div>
</div>
<el-empty
v-else
description=
"暂无职位"
/>
<el-empty
v-else
description=
"暂无职位"
/>
...
@@ -128,44 +128,53 @@
...
@@ -128,44 +128,53 @@
<div
class=
"hot-company"
>
<div
class=
"hot-company"
>
<div
class=
"n-title"
>
热门企业
</div>
<div
class=
"n-title"
>
热门企业
</div>
<div
class=
"company-list"
>
<div
class=
"company-list"
>
<div
v-for=
"item in
6"
:key=
"item
"
class=
"company-item"
>
<div
v-for=
"item in
hotCompanyList"
:key=
"item.FirmFID
"
class=
"company-item"
>
<div
class=
"company-tp"
>
<div
class=
"company-tp"
@
click=
"toCompanyDetail(item.FirmFID)"
>
<img
src=
"@/assets/img/icon-zhao.png
"
width=
"50"
height=
"50"
/>
<img
:src=
"baseURL + '/' + item.FLOGO
"
width=
"50"
height=
"50"
/>
<div
class=
"company-tp-rg flx-column-start-between"
>
<div
class=
"company-tp-rg flx-column-start-between"
>
<span>
博彦科技
</span>
<span>
{{ item.FirmName }}
</span>
<div
class=
"company-label"
>
<div
class=
"company-label"
>
<span>
大专
</span>
<span>
{{ item.FFINANCINGS }}
</span>
<el-divider
direction=
"vertical"
/>
<el-divider
direction=
"vertical"
/>
<span>
1-3年
</span>
<span>
{{ item.FSCALES }}
</span>
<el-divider
direction=
"vertical"
/>
<el-divider
direction=
"vertical"
/>
<span>
招聘2人
</span>
<span>
{{ item.FINDUSTRY }}
</span>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"company-bt"
>
<div
class=
"company-bt"
>
<div
class=
"company-position-list flx-direction-column"
>
<div
class=
"company-position-list flx-direction-column"
>
<div
v-for=
"col in 3"
:key=
"col"
class=
"company-position-item"
>
<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=
"flx-justify-between"
style=
"margin-bottom: 22px"
>
<div
<div
class=
"nowrap-ellipsis"
class=
"nowrap-ellipsis"
style=
"width: 207px"
style=
"width: 207px
; text-align: left
"
title=
"软件测试 (学信网可查,学信网可查)
"
:title=
"col.JobName
"
>
>
软件测试 (学信网可查,学信网可查)
{{ col.JobName }}
</div>
</div>
<div>
<div>
<span
class=
"salary"
>
6000-8000
</span>
<span
class=
"salary"
>
{{ col.FMINIMUMWAGE }}-{{ col.FMAXIMUMSALARY }}
</span>
<span
class=
"monthly-pay"
>
元/月
</span>
<span
class=
"monthly-pay"
>
元/月
</span>
</div>
</div>
</div>
</div>
<div
class=
"hot-position-item-ft"
>
<div
class=
"hot-position-item-ft"
>
<span>
深圳 福田区 新洲
</span>
<span
class=
"nowrap-ellipsis"
:title=
"col.FWORKPLACE"
>
{{
<span>
经验不限
</span>
`${col.FWORKPLACE.split('/')[1]} ${col.FWORKPLACE.split('/')[2]} ${
<span>
学历不限
</span>
col.FWORKPLACE.split('/')[3]
}`
}}
</span>
<span>
{{ col.FEXPERIENCE }}
</span>
<span>
{{ col.FEDUCATIONALBACKGROUND }}
</span>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"company-bt-btn"
>
<div
v-if=
"item.JobS && item.JobS?.length"
class=
"company-bt-btn"
>
<span>
查看更多职位
</span>
<span>
查看更多职位
</span>
</div>
</div>
</div>
</div>
...
@@ -181,12 +190,14 @@ import { baseURL } from '@/services'
...
@@ -181,12 +190,14 @@ import { baseURL } from '@/services'
import
{
import
{
getPosition
,
getPosition
,
getUserPostionList
,
getUserPostionList
,
getHotPosition
getHotPosition
,
getHotCompany
}
from
'@/services/api/recruitmentManagement'
}
from
'@/services/api/recruitmentManagement'
import
{
getStreet
}
from
'@/services/api/streetOfficeSpecialTopic'
import
{
getStreet
}
from
'@/services/api/streetOfficeSpecialTopic'
import
{
getPoster
}
from
'@/services/api/common'
import
{
getPoster
}
from
'@/services/api/common'
import
{
useUserInfoStore
}
from
'@/stores/modules/userInfo'
import
{
useUserInfoStore
}
from
'@/stores/modules/userInfo'
import
autocomplete
from
'@/components/autocomplete.vue'
import
autocomplete
from
'@/components/autocomplete.vue'
import
seeMorePosition
from
'./seeMorePosition.vue'
const
router
=
useRouter
()
const
router
=
useRouter
()
const
userInfoStore
=
useUserInfoStore
()
const
userInfoStore
=
useUserInfoStore
()
...
@@ -196,6 +207,7 @@ const FDATAVALUE = ref()
...
@@ -196,6 +207,7 @@ const FDATAVALUE = ref()
const
streetList
=
ref
()
const
streetList
=
ref
()
const
posterList
:
any
=
ref
([])
const
posterList
:
any
=
ref
([])
const
hotPositionList
:
any
=
ref
([])
const
hotPositionList
:
any
=
ref
([])
const
hotCompanyList
:
any
=
ref
([])
const
querySearch
=
ref
([])
const
querySearch
=
ref
([])
const
tabsList
=
[
const
tabsList
=
[
...
@@ -243,8 +255,8 @@ const searchChange = (searchValue: string) => {
...
@@ -243,8 +255,8 @@ const searchChange = (searchValue: string) => {
router
.
push
({
path
:
'/recruitmentManagement/personal'
,
query
:
{
searchValue
}
})
router
.
push
({
path
:
'/recruitmentManagement/personal'
,
query
:
{
searchValue
}
})
}
}
const
seeMore
=
()
=>
{
const
toSeeMorePosition
=
()
=>
{
router
.
push
({
path
:
'/recruitmentManagement/
personal
'
})
router
.
push
({
path
:
'/recruitmentManagement/
seeMorePosition
'
})
}
}
const
subMenuList
=
computed
(()
=>
{
const
subMenuList
=
computed
(()
=>
{
...
@@ -278,6 +290,10 @@ const toPositionDetail = (FID: number) => {
...
@@ -278,6 +290,10 @@ const toPositionDetail = (FID: number) => {
router
.
push
({
path
:
'/recruitmentManagement/positionDetail'
,
query
:
{
FID
}
})
router
.
push
({
path
:
'/recruitmentManagement/positionDetail'
,
query
:
{
FID
}
})
}
}
const
toCompanyDetail
=
(
FID
:
number
)
=>
{
router
.
push
({
path
:
'/recruitmentManagement/companyDetail'
,
query
:
{
FID
}
})
}
const
initHotPosition
=
async
()
=>
{
const
initHotPosition
=
async
()
=>
{
const
res
:
any
=
await
getHotPosition
({
FNUMBER
:
activeName
.
value
})
const
res
:
any
=
await
getHotPosition
({
FNUMBER
:
activeName
.
value
})
if
(
res
.
code
===
200
)
{
if
(
res
.
code
===
200
)
{
...
@@ -285,6 +301,13 @@ const initHotPosition = async () => {
...
@@ -285,6 +301,13 @@ const initHotPosition = async () => {
}
}
}
}
const
initHotCompany
=
async
()
=>
{
const
res
:
any
=
await
getHotCompany
({
FNUMBER
:
activeName
.
value
})
if
(
res
.
code
===
200
)
{
hotCompanyList
.
value
=
res
.
data
||
[]
}
}
const
init
=
async
()
=>
{
const
init
=
async
()
=>
{
const
res
:
any
=
await
getPosition
()
const
res
:
any
=
await
getPosition
()
if
(
res
.
code
===
200
)
{
if
(
res
.
code
===
200
)
{
...
@@ -301,6 +324,7 @@ const init = async () => {
...
@@ -301,6 +324,7 @@ const init = async () => {
posterList
.
value
=
poster
.
data
||
[]
posterList
.
value
=
poster
.
data
||
[]
}
}
await
initHotPosition
()
await
initHotPosition
()
await
initHotCompany
()
}
}
onMounted
(()
=>
{
onMounted
(()
=>
{
...
...
src/views/recruitmentManagement/personalRecruitment.vue
浏览文件 @
155e06ea
...
@@ -84,7 +84,7 @@
...
@@ -84,7 +84,7 @@
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"personal-ct-item-tp-bt"
@
click
.
stop=
"
handleDeliver
"
>
<div
class=
"personal-ct-item-tp-bt"
@
click
.
stop=
"
submitResume(item.FID)
"
>
<span>
投递
</span>
<span>
投递
</span>
</div>
</div>
</div>
</div>
...
@@ -120,17 +120,15 @@
...
@@ -120,17 +120,15 @@
<info
/>
<info
/>
</div>
</div>
</div>
</div>
<dragUpload
v-model:show=
"dragShow"
/>
</
template
>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
{
filterList
}
from
'./config/index'
import
{
filterList
}
from
'./config/index'
import
{
getStreet
}
from
'@/services/api/streetOfficeSpecialTopic'
import
{
getStreet
}
from
'@/services/api/streetOfficeSpecialTopic'
import
{
getInformation
}
from
'@/services/api/common'
import
{
getInformation
}
from
'@/services/api/common'
import
{
getUserPostionList
}
from
'@/services/api/recruitmentManagement'
import
{
getUserPostionList
,
sendResume
}
from
'@/services/api/recruitmentManagement'
import
{
baseURL
}
from
'@/services'
import
{
baseURL
}
from
'@/services'
import
customSelect
from
'@/components/customSelect.vue'
import
customSelect
from
'@/components/customSelect.vue'
import
dragUpload
from
'@/components/dragUpload.vue'
import
info
from
'./components/info.vue'
import
info
from
'./components/info.vue'
const
route
=
useRoute
()
const
route
=
useRoute
()
...
@@ -140,7 +138,6 @@ const activeName = ref('0')
...
@@ -140,7 +138,6 @@ const activeName = ref('0')
const
autocompleteRef
=
ref
()
const
autocompleteRef
=
ref
()
const
loading
=
ref
(
true
)
const
loading
=
ref
(
true
)
const
filterLoading
=
ref
(
true
)
const
filterLoading
=
ref
(
true
)
const
dragShow
=
ref
(
false
)
const
streetList
=
ref
([]
as
any
)
const
streetList
=
ref
([]
as
any
)
const
informationData
=
ref
()
const
informationData
=
ref
()
const
querySearch
=
ref
([])
const
querySearch
=
ref
([])
...
@@ -206,8 +203,15 @@ const seeMore = () => {
...
@@ -206,8 +203,15 @@ const seeMore = () => {
initUserPostionList
()
initUserPostionList
()
}
}
const
handleDeliver
=
()
=>
{
// 投递简历
dragShow
.
value
=
true
const
submitResume
=
async
(
FID
:
number
)
=>
{
const
res
:
any
=
await
sendResume
({
JobID
:
FID
})
if
(
res
.
code
===
200
)
{
ElNotification
.
success
({
title
:
'投递简历'
,
message
:
'投递成功'
})
}
}
}
const
toPositionDetail
=
(
FID
:
number
)
=>
{
const
toPositionDetail
=
(
FID
:
number
)
=>
{
...
@@ -218,10 +222,9 @@ const initUserPostionList = async () => {
...
@@ -218,10 +222,9 @@ const initUserPostionList = async () => {
filterLoading
.
value
=
true
filterLoading
.
value
=
true
let
params
=
JSON
.
parse
(
JSON
.
stringify
(
queryList
.
value
))
let
params
=
JSON
.
parse
(
JSON
.
stringify
(
queryList
.
value
))
for
(
const
key
in
params
.
Filter
)
{
for
(
const
key
in
params
.
Filter
)
{
params
.
Filter
[
key
]
=
params
.
Filter
[
key
].
trim
()
if
(
typeof
params
.
Filter
[
key
]
!==
'number'
)
params
.
Filter
[
key
]
=
(
params
.
Filter
[
key
]
+
''
).
trim
()
}
}
console
.
log
(
params
.
Filter
)
const
res
:
any
=
await
getUserPostionList
(
params
)
const
res
:
any
=
await
getUserPostionList
(
params
)
if
(
res
.
code
===
200
)
{
if
(
res
.
code
===
200
)
{
loading
.
value
=
false
loading
.
value
=
false
...
...
src/views/recruitmentManagement/positionDetail.vue
浏览文件 @
155e06ea
...
@@ -33,6 +33,7 @@
...
@@ -33,6 +33,7 @@
>
>
<el-popover
<el-popover
v-if=
"detailData?.FCORPORATEWELFARE?.length >= 5"
placement=
"bottom-start"
placement=
"bottom-start"
title=
""
title=
""
:show-arrow=
"false"
:show-arrow=
"false"
...
@@ -62,7 +63,7 @@
...
@@ -62,7 +63,7 @@
<span
class=
"salary"
<span
class=
"salary"
>
{{ detailData?.FMINIMUMWAGE }}-{{ detailData?.FMAXIMUMSALARY }}
</span
>
{{ detailData?.FMINIMUMWAGE }}-{{ detailData?.FMAXIMUMSALARY }}
</span
>
>
<span
class=
"deliver"
>
投递简历
</span>
<span
class=
"deliver"
@
click=
"submitResume"
>
投递简历
</span>
</div>
</div>
</div>
</div>
<div
class=
"position-describe"
>
<div
class=
"position-describe"
>
...
@@ -141,13 +142,11 @@
...
@@ -141,13 +142,11 @@
</template>
</template>
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
{
getUserPostionDetail
}
from
'@/services/api/recruitmentManagement'
import
{
getUserPostionDetail
,
sendResume
}
from
'@/services/api/recruitmentManagement'
import
{
useGlobalStore
}
from
'@/stores/modules/global'
import
{
baseURL
}
from
'@/services'
import
{
baseURL
}
from
'@/services'
import
info
from
'./components/info.vue'
import
info
from
'./components/info.vue'
import
qqMap
from
'@/components/qqMap.vue'
import
qqMap
from
'@/components/qqMap.vue'
const
globalStore
=
useGlobalStore
()
const
route
=
useRoute
()
const
route
=
useRoute
()
const
list
:
any
=
ref
([])
const
list
:
any
=
ref
([])
...
@@ -200,16 +199,28 @@ const expandMore = () => {
...
@@ -200,16 +199,28 @@ const expandMore = () => {
if
(
textContainer
.
classList
.
contains
(
'expanded'
))
{
if
(
textContainer
.
classList
.
contains
(
'expanded'
))
{
content
.
textContent
=
'收起'
content
.
textContent
=
'收起'
textContainer
.
style
.
maxHeight
=
textContainer
.
scrollHeight
+
'px'
// 动态计算文本高度并设置max-height
textContainer
.
style
.
maxHeight
=
textContainer
.
scrollHeight
+
'px'
// 动态计算文本高度并设置max-height
expandBtn
.
style
.
bottom
=
'-
30%
'
expandBtn
.
style
.
bottom
=
'-
40px
'
expandShow
.
value
=
false
expandShow
.
value
=
false
}
else
{
}
else
{
content
.
textContent
=
'查看更多'
content
.
textContent
=
'查看更多'
textContainer
.
style
.
maxHeight
=
'calc(
3
* 1.3em)'
// 恢复初始值
textContainer
.
style
.
maxHeight
=
'calc(
1
* 1.3em)'
// 恢复初始值
expandBtn
.
style
.
bottom
=
'-
2
px'
expandBtn
.
style
.
bottom
=
'-
4
px'
expandShow
.
value
=
true
expandShow
.
value
=
true
}
}
}
}
// 投递简历
const
submitResume
=
async
()
=>
{
const
res
:
any
=
await
sendResume
({
JobID
:
route
.
query
.
FID
})
if
(
res
.
code
===
200
)
{
console
.
log
(
res
)
ElNotification
.
success
({
title
:
'投递简历'
,
message
:
'投递成功'
})
}
}
const
init
=
async
()
=>
{
const
init
=
async
()
=>
{
const
res
:
any
=
await
getUserPostionDetail
({
FID
:
route
.
query
.
FID
})
const
res
:
any
=
await
getUserPostionDetail
({
FID
:
route
.
query
.
FID
})
if
(
res
.
code
===
200
)
{
if
(
res
.
code
===
200
)
{
...
...
src/views/recruitmentManagement/seeMoreCompany.vue
0 → 100644
浏览文件 @
155e06ea
<
template
>
<div></div>
</
template
>
<
script
setup
lang=
"ts"
></
script
>
<
style
lang=
"scss"
scoped
></
style
>
src/views/recruitmentManagement/seeMorePosition.vue
0 → 100644
浏览文件 @
155e06ea
<
template
>
<div
class=
"see-more-position"
>
<div
class=
"container"
>
<div
class=
"sell-position"
>
<div
class=
"flx-align-center"
>
<span
class=
"desc-title"
>
推荐职位
</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"
>
<el-icon
style=
"margin: 3px 4px 0 0"
><i-ep-CirclePlus
/></el-icon>
<span>
添加求职期望
</span>
</div>
</div>
</div>
<div
class=
"select-list"
>
<customSelect
v-for=
"(item, index) in filterList"
:key=
"index"
v-model=
"queryList.Filter[item.prop]"
:name=
"item.name"
:list=
"item.list"
@
change=
"selectChange($event, index)"
/>
</div>
</div>
<morePosition
ref=
"morePositionRef"
/>
</div>
</div>
</
template
>
<
script
setup
lang=
"ts"
>
import
{
getInformation
}
from
'@/services/api/common'
import
morePosition
from
'./components/morePosition.vue'
import
customSelect
from
'@/components/customSelect.vue'
const
queryList
=
ref
({
pageIndex
:
1
,
pageSize
:
10
,
Filter
:
{
//传id
FNAME
:
''
,
//标题
FSUBSTREET
:
''
,
//街道
FEXPERIENCE
:
''
,
//经验
SalaryRange
:
''
,
//薪资范围
FEDUCATIONALBACKGROUND
:
''
,
//学历
FSCALES
:
''
,
//规模
FFINANCINGS
:
''
//融资情况
}
as
any
})
const
filterList
=
ref
([
{
name
:
'工作经验'
,
prop
:
'FEXPERIENCE'
,
list
:
[]
},
{
name
:
'薪资待遇'
,
list
:
[],
prop
:
'SalaryRange'
},
{
name
:
'学历要求'
,
list
:
[],
prop
:
'FEDUCATIONALBACKGROUND'
},
{
name
:
'公司规模'
,
list
:
[],
prop
:
'FSCALES'
},
{
name
:
'融资情况'
,
list
:
[],
prop
:
'FFINANCINGS'
}
])
const
morePositionRef
=
ref
()
const
informationData
=
ref
()
const
selectChange
=
(
e
:
any
,
index
:
number
)
=>
{}
const
init
=
async
()
=>
{
const
res
:
any
=
await
getInformation
({
AuxiliaryS
:
[
'Experience'
,
'SalaryRange'
,
'Degree2'
,
'Member'
,
'Financing'
]
})
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
()
}
}
onMounted
(()
=>
{
init
()
})
</
script
>
<
style
lang=
"scss"
scoped
>
.see-more-position
{
display
:
flex
;
justify-content
:
center
;
color
:
#222222
;
font-size
:
16px
;
margin
:
24px
0
;
.container
{
width
:
1316px
;
.sell-position
{
padding
:
24px
20px
14px
;
background
:
#ffffff
;
border-radius
:
12px
;
margin-bottom
:
24px
;
}
.desc-title
{
display
:
inline-block
;
font-size
:
18px
;
color
:
#000000
;
margin-right
:
40px
;
}
.select-list
{
display
:
flex
;
flex-wrap
:
wrap
;
margin-top
:
24px
;
}
}
}
</
style
>
src/views/recruitmentManagement/style/companyDetail.scss
0 → 100644
浏览文件 @
155e06ea
.detail-container
{
width
:
100%
;
.container
{
width
:
1316px
;
display
:
flex
;
padding
:
24px
0
;
color
:
#222222
;
.detail-filter
{
flex
:
1
;
.detail-header
{
background
:
#ffffff
;
border-radius
:
12px
;
box-sizing
:
border-box
;
.company-info
{
border-radius
:
12px
12px
0
0
;
padding
:
34px
32px
;
color
:
#ffffff
;
background
:
#022756
;
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
box-sizing
:
border-box
;
.position-name
{
font-size
:
36px
;
font-weight
:
500
;
margin-bottom
:
8px
;
}
}
.company-switch
{
padding
:
16px
32px
;
background
:
#dcecff
;
border-radius
:
0
0
12px
12px
;
span
{
cursor
:
pointer
;
}
}
}
.hot-position
{
padding
:
24px
32px
;
margin
:
24px
0
;
background
:
#ffffff
;
border-radius
:
12px
;
.position-list
{
width
:
100%
;
display
:
flex
;
.position-item
{
cursor
:
pointer
;
box-sizing
:
border-box
;
flex
:
0
0
calc
((
100%
-
48px
)
/
4
);
margin-right
:
16px
;
padding
:
12px
;
background
:
#ffffff
;
border-radius
:
4px
;
border
:
1px
solid
#cccccc
;
&
:last-child
{
margin-right
:
0
;
}
}
}
}
.company-info
{
margin-top
:
16px
;
background
:
#ffffff
;
border-radius
:
12px
;
box-sizing
:
border-box
;
padding
:
24px
36px
;
.text-container
{
position
:
relative
;
max-height
:
calc
(
1
*
1
.3em
);
/* 3行文本的高度,假设行高为1.2em */
overflow
:
hidden
;
margin-bottom
:
36px
;
}
.expand-btn
{
cursor
:
pointer
;
position
:
absolute
;
right
:
0
;
bottom
:
-4px
;
display
:
flex
;
align-items
:
center
;
justify-content
:
flex-end
;
margin-top
:
10px
;
color
:
#177cfa
;
width
:
120px
;
padding
:
4px
14px
4px
0
;
background
:
linear-gradient
(
270deg
,
#fff
65%
,
rgba
(
255
,
255
,
255
,
0
)
100%
);
box-sizing
:
border-box
;
}
.expanded
{
max-height
:
none
;
overflow
:
visible
;
}
.business-info
{
background
:
#f8f8f8
;
border-radius
:
12px
;
padding
:
18px
26px
36px
;
margin-bottom
:
36px
;
:deep
(
.el-descriptions__body
)
{
background
:
#f8f8f8
;
}
:deep
(
.is-vertical-label
)
{
color
:
#999999
;
font-size
:
16px
;
}
:deep
(
.is-vertical-content
)
{
color
:
#222222
;
font-size
:
16px
;
}
.business-expand
{
cursor
:
pointer
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
color
:
#177cfa
;
}
}
.map-info
{
height
:
300px
;
.map-addr
{
display
:
flex
;
align-items
:
center
;
color
:
#177cfa
;
font-size
:
14px
;
margin-bottom
:
10px
;
}
}
}
.position-type
{
padding
:
24px
20px
;
background
:
#ffffff
;
border-radius
:
12px
;
margin
:
16px
0
;
.type-list
{
flex
:
1
;
margin-left
:
40px
;
display
:
flex
;
align-items
:
center
;
flex-wrap
:
wrap
;
.type-item
{
cursor
:
pointer
;
margin-right
:
52px
;
font-size
:
16px
;
font-weight
:
400
;
color
:
#222222
;
margin-bottom
:
8px
;
}
}
.select-list
{
display
:
flex
;
flex-wrap
:
wrap
;
}
}
.position-label
{
display
:
inline-block
;
background
:
#f8f8f8
;
border-radius
:
4px
;
padding
:
6px
12px
;
margin-right
:
8px
;
font-size
:
14px
;
font-weight
:
400
;
color
:
#666666
;
}
}
}
.desc-title
{
display
:
inline-block
;
font-size
:
18px
;
color
:
#000000
;
margin-bottom
:
24px
;
}
.keyWords
{
padding
:
4px
12px
;
border-radius
:
39px
;
border
:
1px
solid
#cccccc
;
margin-right
:
12px
;
font-size
:
14px
;
color
:
#999999
;
}
pre
{
white-space
:
pre-wrap
;
}
.round
{
display
:
inline-block
;
width
:
4px
;
height
:
4px
;
background
:
#cccccc
;
border-radius
:
50%
;
margin
:
0
4px
;
}
}
src/views/recruitmentManagement/style/editResume.scss
浏览文件 @
155e06ea
...
@@ -232,6 +232,7 @@
...
@@ -232,6 +232,7 @@
max-width
:
49%
;
max-width
:
49%
;
}
}
.custom-col
{
.custom-col
{
cursor
:
pointer
;
padding
:
36px
24px
!
important
;
padding
:
36px
24px
!
important
;
height
:
116px
;
height
:
116px
;
background
:
#f8f8f8
;
background
:
#f8f8f8
;
...
@@ -281,4 +282,14 @@
...
@@ -281,4 +282,14 @@
pre
{
pre
{
white-space
:
pre-wrap
;
white-space
:
pre-wrap
;
}
}
.certificate-tag
{
margin-top
:
16px
;
display
:
flex
;
flex-wrap
:
wrap
;
.tag
{
margin
:
0
8px
8px
0
;
}
}
}
}
src/views/recruitmentManagement/style/index.scss
浏览文件 @
155e06ea
...
@@ -155,6 +155,8 @@
...
@@ -155,6 +155,8 @@
flex-wrap
:
wrap
;
flex-wrap
:
wrap
;
margin-top
:
24px
;
margin-top
:
24px
;
.company-item
{
.company-item
{
display
:
flex
;
flex-direction
:
column
;
cursor
:
pointer
;
cursor
:
pointer
;
width
:
calc
((
100%
-
32px
)
/
3
);
width
:
calc
((
100%
-
32px
)
/
3
);
flex
:
0
0
calc
((
100%
-
32px
)
/
3
);
flex
:
0
0
calc
((
100%
-
32px
)
/
3
);
...
@@ -178,7 +180,11 @@
...
@@ -178,7 +180,11 @@
}
}
}
}
.company-bt
{
.company-bt
{
flex
:
1
;
padding
:
26px
20px
;
padding
:
26px
20px
;
display
:
flex
;
flex-direction
:
column
;
justify-content
:
space-between
;
.company-position-list
{
.company-position-list
{
.company-position-item
{
.company-position-item
{
margin-bottom
:
24px
;
margin-bottom
:
24px
;
...
@@ -188,6 +194,7 @@
...
@@ -188,6 +194,7 @@
display
:
flex
;
display
:
flex
;
span
{
span
{
padding
:
6px
12px
;
padding
:
6px
12px
;
height
:
24px
;
background
:
#f8f8f8
;
background
:
#f8f8f8
;
border-radius
:
4px
;
border-radius
:
4px
;
line-height
:
24px
;
line-height
:
24px
;
...
@@ -195,6 +202,10 @@
...
@@ -195,6 +202,10 @@
font-weight
:
400
;
font-weight
:
400
;
color
:
#666666
;
color
:
#666666
;
margin-right
:
8px
;
margin-right
:
8px
;
&
:first-child
{
width
:
45%
;
text-align
:
left
;
}
}
}
}
}
}
}
...
...
src/views/recruitmentManagement/style/positionDetail.scss
浏览文件 @
155e06ea
...
@@ -93,7 +93,7 @@
...
@@ -93,7 +93,7 @@
.text-container
{
.text-container
{
position
:
relative
;
position
:
relative
;
max-height
:
calc
(
3
*
1
.3em
);
/* 3行文本的高度,假设行高为1.2em */
max-height
:
calc
(
1
*
1
.3em
);
/* 3行文本的高度,假设行高为1.2em */
overflow
:
hidden
;
overflow
:
hidden
;
margin-bottom
:
36px
;
margin-bottom
:
36px
;
}
}
...
@@ -102,12 +102,16 @@
...
@@ -102,12 +102,16 @@
cursor
:
pointer
;
cursor
:
pointer
;
position
:
absolute
;
position
:
absolute
;
right
:
0
;
right
:
0
;
bottom
:
-
2
px
;
bottom
:
-
4
px
;
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
justify-content
:
flex-end
;
margin-top
:
10px
;
margin-top
:
10px
;
color
:
#177cfa
;
color
:
#177cfa
;
background-color
:
#ffffff
;
width
:
120px
;
padding
:
4px
14px
4px
0
;
background
:
linear-gradient
(
270deg
,
#fff
65%
,
rgba
(
255
,
255
,
255
,
0
)
100%
);
box-sizing
:
border-box
;
}
}
.expanded
{
.expanded
{
...
...
src/views/specialRecruitment/index.scss
浏览文件 @
155e06ea
...
@@ -8,6 +8,7 @@
...
@@ -8,6 +8,7 @@
margin-top
:
24px
;
margin-top
:
24px
;
.special-item
{
.special-item
{
position
:
relative
;
position
:
relative
;
width
:
calc
((
100%
-
50px
)
/
3
);
flex
:
0
0
calc
((
100%
-
50px
)
/
3
);
flex
:
0
0
calc
((
100%
-
50px
)
/
3
);
margin
:
0
25px
25px
0
;
margin
:
0
25px
25px
0
;
padding
:
12px
12px
24px
;
padding
:
12px
12px
24px
;
...
@@ -45,6 +46,8 @@
...
@@ -45,6 +46,8 @@
}
}
.special-title
{
.special-title
{
display
:
inline-block
;
width
:
100%
;
height
:
18px
;
height
:
18px
;
font-size
:
18px
;
font-size
:
18px
;
font-weight
:
400
;
font-weight
:
400
;
...
...
src/views/specialRecruitment/index.vue
浏览文件 @
155e06ea
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
<div
class=
"special-list"
>
<div
class=
"special-list"
>
<div
v-for=
"(item, index) in specialRecruitmentData"
:key=
"index"
class=
"special-item"
>
<div
v-for=
"(item, index) in specialRecruitmentData"
:key=
"index"
class=
"special-item"
>
<img
:src=
"baseURL + '/' + item.PICTURE"
width=
"398"
height=
"280"
/>
<img
:src=
"baseURL + '/' + item.PICTURE"
width=
"398"
height=
"280"
/>
<div
class=
"special-title"
>
{{
item
.
FNAME
}}
</div>
<div
class=
"special-title
nowrap-ellipsis"
:title=
"item.FNAME
"
>
{{
item
.
FNAME
}}
</div>
<div
class=
"special-detail"
>
{{
item
.
FSUBTITLE
}}
</div>
<div
class=
"special-detail"
>
{{
item
.
FSUBTITLE
}}
</div>
<div
class=
"flx-justify-between"
>
<div
class=
"flx-justify-between"
>
<span
v-show=
"!item.FSTATE"
class=
"special-tag"
style=
"cursor: pointer"
>
进入专题
</span>
<span
v-show=
"!item.FSTATE"
class=
"special-tag"
style=
"cursor: pointer"
>
进入专题
</span>
...
...
src/views/streetOfficeSpecialTopic/index.scss
浏览文件 @
155e06ea
...
@@ -183,11 +183,9 @@
...
@@ -183,11 +183,9 @@
.item-lf
{
.item-lf
{
width
:
183px
;
width
:
183px
;
height
:
14px
;
font-size
:
16px
;
font-size
:
16px
;
font-weight
:
400
;
font-weight
:
400
;
color
:
#222222
;
color
:
#222222
;
line-height
:
14px
;
text-align
:
left
;
text-align
:
left
;
}
}
.item-rg
{
.item-rg
{
...
@@ -245,7 +243,7 @@
...
@@ -245,7 +243,7 @@
.trapezoid
{
.trapezoid
{
position
:
absolute
;
position
:
absolute
;
right
:
-14
.1%
;
right
:
-14
.1%
;
top
:
2
2
%
;
top
:
2
1
.9
%
;
width
:
29
.5%
;
width
:
29
.5%
;
border-bottom
:
30px
solid
#ffffff
;
border-bottom
:
30px
solid
#ffffff
;
border-left
:
17px
solid
transparent
;
border-left
:
17px
solid
transparent
;
...
@@ -254,7 +252,7 @@
...
@@ -254,7 +252,7 @@
.trapezoid1
{
.trapezoid1
{
position
:
absolute
;
position
:
absolute
;
right
:
-14
.1%
;
right
:
-14
.1%
;
bottom
:
2
2
%
;
bottom
:
2
1
.9
%
;
width
:
29
.5%
;
width
:
29
.5%
;
border-top
:
30px
solid
#ffffff
;
border-top
:
30px
solid
#ffffff
;
border-left
:
17px
solid
transparent
;
border-left
:
17px
solid
transparent
;
...
...
src/views/streetOfficeSpecialTopic/index.vue
浏览文件 @
155e06ea
...
@@ -109,7 +109,7 @@
...
@@ -109,7 +109,7 @@
<
/div
>
<
/div
>
<
div
class
=
"enterprise-bt flx-justify-between"
>
<
div
class
=
"enterprise-bt flx-justify-between"
>
<
div
class
=
"flx-align-center"
>
<
div
class
=
"flx-align-center"
>
<
img
src
=
"@/assets/img/icon-gonggao.png"
width
=
"24px
"
height
=
"24px"
/>
<
img
:
src
=
"baseURL + '/' + item.FLOGO"
width
=
"24
"
height
=
"24px"
/>
<
span
style
=
"margin-left: 8px"
>
{{
item
.
FirmName
}}
<
/span
>
<
span
style
=
"margin-left: 8px"
>
{{
item
.
FirmName
}}
<
/span
>
<
/div
>
<
/div
>
<
div
>
<
div
>
...
...
types/components.d.ts
浏览文件 @
155e06ea
...
@@ -10,6 +10,7 @@ declare module 'vue' {
...
@@ -10,6 +10,7 @@ declare module 'vue' {
Autocomplete
:
typeof
import
(
'./../src/components/autocomplete.vue'
)[
'default'
]
Autocomplete
:
typeof
import
(
'./../src/components/autocomplete.vue'
)[
'default'
]
CommonDetail
:
typeof
import
(
'./../src/components/commonDetail.vue'
)[
'default'
]
CommonDetail
:
typeof
import
(
'./../src/components/commonDetail.vue'
)[
'default'
]
ContentBlock
:
typeof
import
(
'./../src/components/contentBlock.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'
]
CustomSelect
:
typeof
import
(
'./../src/components/customSelect.vue'
)[
'default'
]
DragUpload
:
typeof
import
(
'./../src/components/dragUpload.vue'
)[
'default'
]
DragUpload
:
typeof
import
(
'./../src/components/dragUpload.vue'
)[
'default'
]
ElAutocomplete
:
typeof
import
(
'element-plus/es'
)[
'ElAutocomplete'
]
ElAutocomplete
:
typeof
import
(
'element-plus/es'
)[
'ElAutocomplete'
]
...
@@ -22,6 +23,8 @@ declare module 'vue' {
...
@@ -22,6 +23,8 @@ declare module 'vue' {
ElCascader
:
typeof
import
(
'element-plus/es'
)[
'ElCascader'
]
ElCascader
:
typeof
import
(
'element-plus/es'
)[
'ElCascader'
]
ElCheckbox
:
typeof
import
(
'element-plus/es'
)[
'ElCheckbox'
]
ElCheckbox
:
typeof
import
(
'element-plus/es'
)[
'ElCheckbox'
]
ElCol
:
typeof
import
(
'element-plus/es'
)[
'ElCol'
]
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'
]
ElConfigProvider
:
typeof
import
(
'element-plus/es'
)[
'ElConfigProvider'
]
ElContainer
:
typeof
import
(
'element-plus/es'
)[
'ElContainer'
]
ElContainer
:
typeof
import
(
'element-plus/es'
)[
'ElContainer'
]
ElDatePicker
:
typeof
import
(
'element-plus/es'
)[
'ElDatePicker'
]
ElDatePicker
:
typeof
import
(
'element-plus/es'
)[
'ElDatePicker'
]
...
@@ -45,7 +48,6 @@ declare module 'vue' {
...
@@ -45,7 +48,6 @@ declare module 'vue' {
ElOption
:
typeof
import
(
'element-plus/es'
)[
'ElOption'
]
ElOption
:
typeof
import
(
'element-plus/es'
)[
'ElOption'
]
ElPagination
:
typeof
import
(
'element-plus/es'
)[
'ElPagination'
]
ElPagination
:
typeof
import
(
'element-plus/es'
)[
'ElPagination'
]
ElPopover
:
typeof
import
(
'element-plus/es'
)[
'ElPopover'
]
ElPopover
:
typeof
import
(
'element-plus/es'
)[
'ElPopover'
]
ElRate
:
typeof
import
(
'element-plus/es'
)[
'ElRate'
]
ElRow
:
typeof
import
(
'element-plus/es'
)[
'ElRow'
]
ElRow
:
typeof
import
(
'element-plus/es'
)[
'ElRow'
]
ElScrollbar
:
typeof
import
(
'element-plus/es'
)[
'ElScrollbar'
]
ElScrollbar
:
typeof
import
(
'element-plus/es'
)[
'ElScrollbar'
]
ElSelect
:
typeof
import
(
'element-plus/es'
)[
'ElSelect'
]
ElSelect
:
typeof
import
(
'element-plus/es'
)[
'ElSelect'
]
...
@@ -55,8 +57,11 @@ declare module 'vue' {
...
@@ -55,8 +57,11 @@ declare module 'vue' {
ElUpload
:
typeof
import
(
'element-plus/es'
)[
'ElUpload'
]
ElUpload
:
typeof
import
(
'element-plus/es'
)[
'ElUpload'
]
IEpArrowRight
:
typeof
import
(
'~icons/ep/arrow-right'
)[
'default'
]
IEpArrowRight
:
typeof
import
(
'~icons/ep/arrow-right'
)[
'default'
]
IEpCaretBottom
:
typeof
import
(
'~icons/ep/caret-bottom'
)[
'default'
]
IEpCaretBottom
:
typeof
import
(
'~icons/ep/caret-bottom'
)[
'default'
]
IEpCaretLeft
:
typeof
import
(
'~icons/ep/caret-left'
)[
'default'
]
IEpCaretRight
:
typeof
import
(
'~icons/ep/caret-right'
)[
'default'
]
IEpCaretTop
:
typeof
import
(
'~icons/ep/caret-top'
)[
'default'
]
IEpCaretTop
:
typeof
import
(
'~icons/ep/caret-top'
)[
'default'
]
IEpCheck
:
typeof
import
(
'~icons/ep/check'
)[
'default'
]
IEpCheck
:
typeof
import
(
'~icons/ep/check'
)[
'default'
]
IEpCirclePlus
:
typeof
import
(
'~icons/ep/circle-plus'
)[
'default'
]
IEpCirclePlusFilled
:
typeof
import
(
'~icons/ep/circle-plus-filled'
)[
'default'
]
IEpCirclePlusFilled
:
typeof
import
(
'~icons/ep/circle-plus-filled'
)[
'default'
]
IEpDArrowRight
:
typeof
import
(
'~icons/ep/d-arrow-right'
)[
'default'
]
IEpDArrowRight
:
typeof
import
(
'~icons/ep/d-arrow-right'
)[
'default'
]
IEpDeleteFilled
:
typeof
import
(
'~icons/ep/delete-filled'
)[
'default'
]
IEpDeleteFilled
:
typeof
import
(
'~icons/ep/delete-filled'
)[
'default'
]
...
@@ -64,7 +69,6 @@ declare module 'vue' {
...
@@ -64,7 +69,6 @@ declare module 'vue' {
IEpLocation
:
typeof
import
(
'~icons/ep/location'
)[
'default'
]
IEpLocation
:
typeof
import
(
'~icons/ep/location'
)[
'default'
]
IEpLocationFilled
:
typeof
import
(
'~icons/ep/location-filled'
)[
'default'
]
IEpLocationFilled
:
typeof
import
(
'~icons/ep/location-filled'
)[
'default'
]
IEpMoreFilled
:
typeof
import
(
'~icons/ep/more-filled'
)[
'default'
]
IEpMoreFilled
:
typeof
import
(
'~icons/ep/more-filled'
)[
'default'
]
IEpOfficeBuilding
:
typeof
import
(
'~icons/ep/office-building'
)[
'default'
]
IEpPlus
:
typeof
import
(
'~icons/ep/plus'
)[
'default'
]
IEpPlus
:
typeof
import
(
'~icons/ep/plus'
)[
'default'
]
IEpSearch
:
typeof
import
(
'~icons/ep/search'
)[
'default'
]
IEpSearch
:
typeof
import
(
'~icons/ep/search'
)[
'default'
]
IEpView
:
typeof
import
(
'~icons/ep/view'
)[
'default'
]
IEpView
:
typeof
import
(
'~icons/ep/view'
)[
'default'
]
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论