Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
yangchao
/
invitePc
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 2580a21d
authored
Jan 04, 2020
by
yangchao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
1 parent
8eb09c66
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
953 additions
and
462 deletions
src/api/common.js
src/api/interview.js
src/api/resume.js
src/components/Upload/upload.vue
src/router/index.js
src/utils/positionType.js
src/utils/request.js
src/views/interview/detail.vue
src/views/interview/list.vue
src/views/login/login.vue
src/views/message/info.vue
src/views/position/edit.vue
src/views/position/list.vue
src/views/recommend/detail.vue
src/views/recommend/list.vue
src/views/resume/detail.vue
src/views/resume/list.vue
src/api/common.js
View file @
2580a21
...
...
@@ -50,4 +50,15 @@ export function getJobClassify(data) {
})
}
//投递拒绝原因
export
function
applyRefuseReasons
(
data
)
{
return
request
({
url
:
'recruit/common/applyRefuseReasons'
,
method
:
'post'
,
data
:
data
,
source
:
'zp'
})
}
src/api/interview.js
View file @
2580a21
...
...
@@ -3,7 +3,7 @@ import request from '@/utils/request'
//面试邀请列表
export
function
interviewList
(
data
)
{
return
request
({
url
:
'
design/myTemplate/lists
'
,
url
:
'
recruit/interview/list
'
,
method
:
'post'
,
data
:
data
,
source
:
'zp'
...
...
@@ -22,7 +22,7 @@ export function interviewDetail (data) {
//面试邀请处理
export
function
interviewDispose
(
data
)
{
return
request
({
url
:
'
design/myTemplate/lists
'
,
url
:
'
recruit/interview/ask
'
,
method
:
'post'
,
data
:
data
,
source
:
'zp'
...
...
src/api/resume.js
View file @
2580a21
...
...
@@ -13,7 +13,7 @@ export function resumeList (data) {
//简历详情
export
function
resumeDetail
(
data
)
{
return
request
({
url
:
'
design/myTemplate/lists
'
,
url
:
'
recruit/cv/info
'
,
method
:
'post'
,
data
:
data
,
source
:
'zp'
...
...
src/components/Upload/upload.vue
View file @
2580a21
<
template
>
<div>
<el-upload
class=
"upload-pic"
action=
"//upload.qiniup.com"
:data=
"form"
:limit=
"
1
"
multiple
<el-upload
class=
"upload-pic"
action=
"//upload.qiniup.com"
:data=
"form"
:limit=
"
66
"
multiple
:file-list=
"fileList"
:on-error=
"handleErrorpics"
:on-success=
"handleSuccesspics"
:before-upload=
"beforeUploadpics"
list-type=
"picture-card"
:on-preview=
"handlePictureCardPreview"
:on-remove=
"handleRemove"
accept=
"image/*"
>
...
...
@@ -8,11 +8,12 @@
</el-upload>
<el-dialog
:visible
.
sync=
"dialogVisible"
width=
"40%"
center
>
<div
style=
"display: flex;align-items: center;flex-direction: row;"
>
<!--
<div
@
click=
"toBeforeImg(imgIndex)"
>
前移
</div>
-->
<!--
<div
@
click=
"toBeforeImg(imgIndex)"
>
前移
</div>
-->
<img
width=
"80%"
:src=
"dialogImageUrl"
alt=
""
class=
"img"
>
<!--
<div
@
click=
"toAfterImg(imgIndex)"
>
后移
</div>
-->
<!--
<div
@
click=
"toAfterImg(imgIndex)"
>
后移
</div>
-->
</div>
</el-dialog>
<!--
<p
class=
"info"
>
建议尺寸:750*750,小于1M,最多上传6张,建议主图背景为白色
</p>
-->
</div>
</
template
>
...
...
@@ -35,7 +36,7 @@
dialogImageUrl
:
''
,
dialogVisible
:
false
,
is1M
:
false
,
limitSize
:
3
,
//验证图片大小,单位MB
limitSize
:
1
,
//验证图片大小,单位MB
imgIndex
:
-
1
,
}
},
...
...
@@ -49,6 +50,14 @@
}
},
methods
:
{
// toBeforeImg(index) {
// this.pics[index] = this.pics[index-1];
// console.log(this.pics);
// },
// toAfterImg(index) {
//
// },
handleImageList
(
fileList
)
{
this
.
pics
=
[];
fileList
.
forEach
((
v
,
i
)
=>
{
...
...
@@ -79,7 +88,7 @@
this
.
is1M
=
file
.
size
/
1024
/
1024
<
this
.
limitSize
;
if
(
!
this
.
is1M
)
{
Loading
.
service
({}).
close
();
this
.
$message
.
error
(
'上传图片应小于
3
M'
);
this
.
$message
.
error
(
'上传图片应小于
1
M'
);
return
false
}
...
...
@@ -108,6 +117,12 @@
handlePictureCardPreview
(
file
)
{
this
.
dialogImageUrl
=
file
.
url
;
this
.
dialogVisible
=
true
;
// if (file.response && file.response.domain && file.response.truekey) {
// file.url = file.response.domain + file.response.truekey;
// }
// this.imgIndex = this.pics.indexOf(file.url);
// console.log(this.imgIndex);
},
},
}
...
...
@@ -123,20 +138,14 @@
.img
{
margin
:
0
auto
;
height
:
114px
;
width
:
114px
;
}
.upload-pic
>>>
.el-upload--picture-card
{
line-height
:
114px
;
height
:
114px
;
width
:
114px
;
line-height
:
156px
;
}
.upload-pic
>>>
.el-upload-list--picture-card
.el-upload-list__item-actions
{
line-height
:
1
1
4px
;
line-height
:
1
4
4px
;
left
:
-5px
;
height
:
114px
;
width
:
114px
;
}
</
style
>
src/router/index.js
View file @
2580a21
...
...
@@ -33,6 +33,22 @@ export const constantRouterMap = [
},
//init
{
path
:
'/'
,
component
:
Layout
,
redirect
:
'/position/list/list'
,
children
:
[
{
path
:
'list'
,
component
:
_import
(
'position/list'
),
meta
:
{
auth
:
[
'basic'
,
'generally'
],
role
:
[
'master'
]
}
}
]
},
//init
{
path
:
'/position/list'
,
component
:
Layout
,
redirect
:
'/position/list/list'
,
...
...
@@ -77,7 +93,7 @@ export const constantRouterMap = [
}
},
{
path
:
'list/detail
/:id
'
,
path
:
'list/detail'
,
component
:
_import
(
'resume/detail'
),
meta
:
{
auth
:
[
'basic'
,
'generally'
],
...
...
@@ -100,7 +116,7 @@ export const constantRouterMap = [
}
},
{
path
:
'list/detail
/:id
'
,
path
:
'list/detail'
,
component
:
_import
(
'recommend/detail'
),
meta
:
{
auth
:
[
'basic'
,
'generally'
],
...
...
@@ -123,7 +139,7 @@ export const constantRouterMap = [
}
},
{
path
:
'list/detail
/:id
'
,
path
:
'list/detail'
,
component
:
_import
(
'interview/detail'
),
meta
:
{
auth
:
[
'basic'
,
'generally'
],
...
...
src/utils/positionType.js
0 → 100644
View file @
2580a21
const
positionTtpe
=
function
(
res
)
{
let
content
=
[];
for
(
let
item
in
res
.
data
[
'01'
])
{
content
.
push
({
value
:
item
,
label
:
res
.
data
[
'01'
][
item
]
})
}
content
.
forEach
((
v
,
i
)
=>
{
for
(
let
item
in
res
.
data
)
{
if
(
v
.
value
==
item
)
{
v
.
children
=
[];
for
(
let
item_1
in
res
.
data
[
item
])
{
v
.
children
.
push
({
value
:
item_1
,
label
:
res
.
data
[
item
][
item_1
]
})
}
}
}
v
.
children
.
forEach
((
vv
,
ii
)
=>
{
for
(
let
item
in
res
.
data
)
{
if
(
vv
.
value
==
item
)
{
v
.
children
[
ii
].
children
=
[];
for
(
let
item_1
in
res
.
data
[
item
])
{
v
.
children
[
ii
].
children
.
push
({
value
:
item_1
,
label
:
res
.
data
[
item
][
item_1
]
})
}
}
}
})
});
return
content
;
}
export
{
positionTtpe
}
src/utils/request.js
View file @
2580a21
...
...
@@ -42,11 +42,11 @@ const service = axios.create({
// request interceptor
service
.
interceptors
.
request
.
use
(
config
=>
{
if
(
config
.
source
===
'apc'
)
{
config
.
headers
.
token
=
getUserToken
();
}
else
config
.
headers
.
token
=
getMallToken
();
// if (config.source === 'apc') {
// config.headers.token = getUserToken();
// } else
// config.headers.token = getMallToken();
//判断baseURL
// if (process.env.NODE_ENV === 'development')
if
(
config
.
source
===
'cm'
)
config
.
baseURL
=
store
.
state
.
testBaseURL
;
...
...
src/views/interview/detail.vue
View file @
2580a21
<
template
>
<div
class=
"contanier"
>
<!--
<div
class=
"search-title"
>
-->
<!--
<div></div>
-->
<!--
<div>
-->
<!--
<el-button
type=
"primary"
size=
"small"
@
click=
"optimizedVisible = true"
>
添加优化建议-->
<!--
</el-button>
-->
<!--
<el-tooltip
effect=
"dark"
placement=
"right-start"
>
-->
<!--
<div
slot=
"content"
class=
"slot"
>
-->
<!--
<p>
注释信息及辅助提示文字内容
</p>
-->
<!--
</div>
-->
<!--
<el-button
type=
"text"
icon=
"el-icon-question"
></el-button>
-->
<!--
</el-tooltip>
-->
<!--
</div>
-->
<!--
</div>
-->
<div
class=
"resume-contanier"
>
<div
class=
"resume-header flex"
>
<div
class=
"flex resume-header_left"
style=
"margin-right:200px;"
>
<img
src=
"https://wx.qlogo.cn/mmopen/vi_32/0nluCqghffPjzhVqMuguxaGFY0dgicfArLZrFGIJo3xL3wZrODiaJR8Znux6w7KhR1HeKTkw7Yw3fqrmcO7cNSWQ/132
"
alt=
""
class=
"resume-avatar"
>
<img
:src=
"detailInfo.photo
"
alt=
""
class=
"resume-avatar"
>
<div
class=
"resume-header_info flex-direct"
>
<div>
<span
class=
"name mr"
>
王富贵
</span>
<span>
先生/27
岁
</span>
<span
class=
"name mr"
>
{{
detailInfo
.
base_name
}}
</span>
<span>
{{
detailInfo
.
base_sex
==
1
?
'男'
:
'女'
}}
/
{{
detailInfo
.
age
}}
岁
</span>
</div>
<div>
<span
class=
"mr"
>
教课老师
</span>
<span
class=
"mr"
>
本科
</span>
<
span
>
3-5年
</span
>
<span
class=
"mr"
>
{{
detailInfo
.
work_experiences
[
0
].
job_name
}}
</span>
<span
class=
"mr"
>
{{
detailInfo
.
edu_experiences
[
0
].
qualifications
}}
</span>
<
!--
<span
>
3-5年
</span>
--
>
</div>
</div>
</div>
...
...
@@ -33,11 +20,13 @@
<div
class=
"resume-header_info flex-direct"
>
<div
class=
"flex-between"
>
<i
class=
'iconfont icon-mobile txtSize'
></i>
<span
class=
'ml'
>
已隐藏
</span>
<span
class=
'ml'
v-if=
"detailInfo.show_status==2"
>
已隐藏
</span>
<span
class=
'ml'
v-else
>
{{
detailInfo
.
base_phone
}}
</span>
</div>
<div
class=
"flex-between"
>
<i
class=
'iconfont icon-dianziyoujian txtSize'
></i>
<span
class=
'ml'
>
已隐藏
</span>
<span
class=
'ml'
v-if=
"detailInfo.show_status==2"
>
已隐藏
</span>
<span
class=
'ml'
v-else
>
{{
detailInfo
.
base_email
}}
</span>
</div>
</div>
</div>
...
...
@@ -46,42 +35,39 @@
<div
class=
"resume-item-title"
>
求职意向
</div>
<div
class=
"resume-icon-style"
>
<i
class=
'iconfont icon-ruzhishijian txtSize'
></i>
<span
class=
'txt_adjust'
>
待业-求职中
</span>
<span
class=
'txt_adjust'
>
{{
detailInfo
.
intention_current_status
==
1
?
'待业-求职中'
:
detailInfo
.
intention_current_status
==
2
?
'正常工作-寻求机会'
:
detailInfo
.
intention_current_status
==
3
?
'在业-暂不考虑机会'
:
'学业中-寻找机会'
}}
</span>
</div>
<div
class=
"flex"
>
<div
class=
"resume-icon-style gap"
>
<i
class=
'iconfont icon-yingpinzhiwei txtSize'
></i>
<span
class=
'txt_adjust'
>
英语教师
</span>
</div>
<div
class=
"resume-icon-style gap"
>
<i
class=
'iconfont icon-xueli txtSizel'
></i>
<span
class=
'txt_adjust'
>
初中
</span>
<span
class=
'txt_adjust'
>
{{
detailInfo
.
job_name
}}
</span>
</div>
<div
class=
"resume-icon-style gap"
>
<i
class=
'iconfont icon-suozaichengshi txtSize'
></i>
<span
class=
'txt_adjust'
>
西安-雁塔
</span>
<span
class=
'txt_adjust'
>
{{
detailInfo
.
work_city
}}
-
{{
detailInfo
.
work_area
}}
</span>
</div>
<div
class=
"resume-icon-style gap"
>
<i
class=
'iconfont icon-xinziyaoqiu txtSize'
></i>
<span
class=
'txt_adjust'
>
5K-10
K
</span>
<span
class=
'txt_adjust'
>
{{
detailInfo
.
intention_salary_min
?(
detailInfo
.
intention_salary_min
/
100000
).
toFixed
(
1
):
0
}}
K-
{{
detailInfo
.
intention_salary_max
?(
detailInfo
.
intention_salary_max
/
100000
).
toFixed
(
1
):
0
}}
K
</span>
</div>
</div>
</div>
<div
class=
"resume-item"
>
<div
class=
"resume-item-title"
>
工作经历
</div>
<div
class=
"resume-experice"
>
<div
class=
"resume-experice-item"
>
<div
class=
"resume-experice-item"
v-for=
"(item,index) in detailInfo.work_experiences"
:key=
"index"
>
<div
class=
"resume-experice-company mb"
>
<span
class=
"resume-experice-txt"
>
陕西当老师教育科技有限公司
</span>
<span>
2019.11 - 至今
</span>
<span
class=
"resume-experice-txt"
>
{{
item
.
organization_name
}}
</span>
<span>
{{
item
.
start_time
}}
-
{{
item
.
end_time
?
item
.
end_time
:
'至今'
}}
</span>
</div>
<div
class=
"resume-experice-job mb"
>
数学教师
</div>
<div
class=
"resume-experice-job mb"
>
{{
item
.
job_name
}}
</div>
<div>
工作内容:
</div>
<div
class=
"resume-content"
>
<p>
1、配合协助班级主班保育教育工作;
</p>
<p>
2、负责幼儿园的家庭教育指导工作;
</p>
<p>
3、负责幼儿园的亲子教育工作;
</p>
<p>
4、收集、整理家园教育资料
</p>
<div
class=
"resume-content"
v-html=
"item.work_content"
>
</div>
</div>
</div>
...
...
@@ -89,20 +75,13 @@
<div
class=
"resume-item"
>
<div
class=
"resume-item-title"
>
教育经历
</div>
<div
class=
"resume-edu"
>
<div
class=
"resume-edu-item"
>
<div
class=
"resume-edu-item"
v-for=
"(item,index) in detailInfo.edu_experiences"
:key=
"index"
>
<div
class=
"resume-edu-school mb"
>
<span
class=
"resume-edu-txt"
>
陕西当老师教育科技有限公司
</span>
<span
class=
"resume-edu-txt"
>
{{
item
.
school_name
}}
</span>
</div>
<div
class=
"resume-edu mb"
>
<span
class=
"resume-edu-course"
>
教育心理学 · 本科
</span>
<span>
2019.11 - 至今
</span>
</div>
<div>
工作内容:
</div>
<div
class=
"resume-content"
>
<p>
1、配合协助班级主班保育教育工作;
</p>
<p>
2、负责幼儿园的家庭教育指导工作;
</p>
<p>
3、负责幼儿园的亲子教育工作;
</p>
<p>
4、收集、整理家园教育资料
</p>
<span
class=
"resume-edu-course"
>
{{
item
.
major_name
}}
·
{{
item
.
qualifications
}}
</span>
<span>
{{
item
.
start_time
}}
-
{{
item
.
end_time
?
item
.
end_time
:
'至今'
}}
</span>
</div>
</div>
</div>
...
...
@@ -110,29 +89,20 @@
<div
class=
"resume-item"
>
<div
class=
"resume-item-title mb"
>
自我评价
</div>
<div>
相关描述:
</div>
<div
class=
"resume-content"
>
<p>
1、配合协助班级主班保育教育工作;
</p>
<p>
2、负责幼儿园的家庭教育指导工作;
</p>
<p>
3、负责幼儿园的亲子教育工作;
</p>
<p>
4、收集、整理家园教育资料
</p>
<div
class=
"resume-content"
v-html=
"detailInfo.self_advantage"
>
</div>
</div>
</div>
<!--优化建议-->
<el-dialog
title=
"优化建议"
:visible
.
sync=
"optimizedVisible"
width=
"600px"
center
>
<div>
<el-input
type=
"textarea"
v-model=
"remarks"
maxlength=
"200"
rows=
"5"
placeholder=
"请输入优化建议,最多200字"
></el-input>
</div>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"optimizedVisible=false"
size=
"small"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"optimizedVisible=false"
size=
"small"
>
确 认
</el-button>
</span>
</el-dialog>
</div>
</
template
>
<
script
>
import
{
resumeDetail
}
from
'@/api/resume'
import
{
getJobClassify
}
from
'@/api/common'
import
{
CodeToText
,
TextToCode
,}
from
'element-china-area-data'
;
import
{
Loading
}
from
'element-ui'
;
export
default
{
props
:
{
...
...
@@ -143,20 +113,112 @@
data
()
{
return
{
optimizedVisible
:
false
,
remarks
:
''
remarks
:
''
,
detailInfo
:
''
,
//获取详情
suggestList
:[],
jobList
:[],
};
},
methods
:
{
jsGetAge
(
strBirthday
){
var
returnAge
;
var
strBirthdayArr
=
strBirthday
.
split
(
"-"
);
var
birthYear
=
strBirthdayArr
[
0
];
var
birthMonth
=
strBirthdayArr
[
1
];
var
birthDay
=
strBirthdayArr
[
2
];
},
computed
:
{
let
d
=
new
Date
();
var
nowYear
=
d
.
getFullYear
();
var
nowMonth
=
d
.
getMonth
()
+
1
;
var
nowDay
=
d
.
getDate
();
if
(
nowYear
==
birthYear
){
returnAge
=
0
;
//同年 则为0岁
}
else
{
var
ageDiff
=
nowYear
-
birthYear
;
//年之差
if
(
ageDiff
>
0
){
if
(
nowMonth
==
birthMonth
)
{
var
dayDiff
=
nowDay
-
birthDay
;
//日之差
if
(
dayDiff
<
0
)
{
returnAge
=
ageDiff
-
1
;
}
else
{
returnAge
=
ageDiff
;
}
}
else
{
var
monthDiff
=
nowMonth
-
birthMonth
;
//月之差
if
(
monthDiff
<
0
)
{
returnAge
=
ageDiff
-
1
;
}
else
{
returnAge
=
ageDiff
;
}
}
}
else
{
returnAge
=
-
1
;
//返回-1 表示出生日期输入错误 晚于今天
}
}
return
returnAge
;
//返回周岁年龄
},
getDetail
(){
let
loading
=
Loading
.
service
({
target
:
document
.
querySelector
(
'.main-container'
),
text
:
'请求中...'
,
});
// this.$route.query.cv_token
let
data
=
{
utoken
:
this
.
$route
.
query
.
utoken
,
cv_token
:
"CV1577948246894fzJFS"
,
mode
:
0
}
resumeDetail
(
data
).
then
(
res
=>
{
loading
.
close
();
if
(
res
.
error
==
0
){
let
obj
=
{
...
res
.
data
,
age
:
this
.
jsGetAge
(
res
.
data
.
base_birthday
),
work_city
:
CodeToText
[
res
.
data
.
intention_area_id
.
slice
(
0
,
4
)
+
'00'
],
work_area
:
CodeToText
[
res
.
data
.
intention_area_id
],
job_name
:
this
.
jobList
[
res
.
data
.
intention_job
.
slice
(
0
,
6
)
+
'00'
][
res
.
data
.
intention_job
]
}
console
.
log
(
this
.
jobList
)
let
a1
=
this
.
jobList
[
res
.
data
.
intention_job
.
slice
(
0
,
4
)
+
'0000'
]
console
.
log
(
a1
);
console
.
log
(
obj
);
this
.
detailInfo
=
obj
;
}
}).
catch
()
},
watch
:
{
//获取职位列表
getJobList
(){
return
new
Promise
((
resolve
,
reject
)
=>
{
getJobClassify
().
then
(
res
=>
{
if
(
res
.
error
==
0
){
this
.
jobList
=
res
.
data
;
}
}).
catch
();
resolve
(
true
)
}).
catch
(
error
=>
{
reject
(
error
)
})
},
},
created
()
{
async
created
()
{
await
this
.
getJobList
();
this
.
getDetail
();
this
.
getSysSuggestion
();
},
mounted
()
{
...
...
@@ -248,4 +310,10 @@
.resume-edu-course
{
margin-right
:
100px
;
}
.suggest_title
,
.suggest_txt
{
line-height
:
30px
;
}
.suggest_txt
{
color
:
#666
;
}
</
style
>
src/views/interview/list.vue
View file @
2580a21
<
template
>
<div
class=
"partner-supervise-container"
>
<el-form
:inline=
"true"
:model=
"queryForm"
size=
"small"
ref=
"queryForm"
class=
"fiter-box"
>
<div
class=
"fiter-col"
style=
"margin-bottom: 0"
>
<el-form-item
label=
"搜索内容:"
prop=
"searchContent"
class=
"order-item"
>
<el-input
placeholder=
"请输入内容"
v-model=
"queryForm.searchContent"
class=
"order-input"
>
</el-input>
</el-form-item>
<el-form-item
label=
""
prop=
"searchContent"
class=
"order-item"
>
<el-button
type=
"primary"
size=
"small"
style=
"margin-left: -20px"
@
click=
"search"
>
搜索
</el-button>
</el-form-item>
</div>
</el-form>
<!--
<el-form
:inline=
"true"
:model=
"queryForm"
size=
"small"
ref=
"queryForm"
class=
"fiter-box"
>
-->
<!--
<div
class=
"fiter-col"
>
-->
<!--
<el-form-item
label=
"状态:"
prop=
"searchContent"
class=
"order-item"
>
-->
<!--
<el-select
v-model=
"queryForm.status"
placeholder=
"请选择"
class=
"input-style"
size=
"small"
>
-->
<!--
<el-option
label=
"全部"
value=
""
></el-option>
-->
<!--
<el-option
label=
"待邀请"
value=
"1"
></el-option>
-->
<!--
<el-option
label=
"已邀请"
value=
"2"
></el-option>
-->
<!--
<el-option
label=
"已接受邀请"
value=
"3"
></el-option>
-->
<!--
<el-option
label=
"已拒绝邀请"
value=
"4"
></el-option>
-->
<!--
<el-option
label=
"已完成面试"
value=
"5"
></el-option>
-->
<!--
</el-select>
-->
<!--
</el-form-item>
-->
<!--
<el-form-item
label=
""
prop=
"searchContent"
class=
"order-item"
>
-->
<!--
<el-button
type=
"primary"
size=
"small"
style=
""
@
click=
"search"
>
搜索
</el-button>
-->
<!--
</el-form-item>
-->
<!--
</div>
-->
<!--
</el-form>
-->
<el-tabs
v-model=
"resumeStatus"
type=
"card"
@
tab-click=
"handleClick"
>
<el-tab-pane
label=
"待邀请"
name=
"1"
></el-tab-pane>
<el-tab-pane
label=
"已邀请"
name=
"2"
></el-tab-pane>
<el-tab-pane
label=
"已接受"
name=
"3"
></el-tab-pane>
<el-tab-pane
label=
"已拒绝"
name=
"4"
></el-tab-pane>
<el-tab-pane
label=
"已完成"
name=
"5"
></el-tab-pane>
</el-tabs>
<div
class=
"partner-supervise-table"
>
<el-table
:data=
"list"
stripe
size=
"medium"
:header-cell-class-name=
"headerName"
>
<el-table-column
align=
"center"
prop=
"truename"
label=
"职位信息"
width=
"300"
>
<template
slot-scope=
"scope"
>
<div
class=
"position-info"
>
<div
class=
"position"
><span>
全
</span>
{{
scope
.
row
.
position
}}
</div>
<div
class=
"position"
><span>
{{
scope
.
row
.
job_type
==
1
?
'全'
:
'兼'
}}
</span>
{{
scope
.
row
.
base_name
}}
</div>
<div
class=
"info"
>
<div>
{{
scope
.
row
.
address
}}
</div>
<div>
{{
scope
.
row
.
education
}}
</div
>
<
div>
{{
scope
.
row
.
experience
}}
</div
>
<div>
{{
scope
.
row
.
work_city
}}
-
{{
scope
.
row
.
work_area
}}
</div>
<!--
<div>
{{
scope
.
row
.
edu_experiences
[
0
].
qualifications
}}
</div>
--
>
<
!--
<div>
{{
scope
.
row
.
experience
}}
</div>
--
>
</div>
</div>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
prop=
"compensation"
show-overflow-tooltip
label=
"
薪资
"
>
<el-table-column
align=
"center"
prop=
"compensation"
show-overflow-tooltip
label=
"
简历状态
"
>
<
template
slot-scope=
"scope"
>
<div
class=
"compensation"
>
{{
scope
.
row
.
compensation
}}
</div>
<div
class=
"compensation"
v-if=
"scope.row.status == 1"
>
待邀请
</div>
<div
class=
"compensation"
v-if=
"scope.row.status == 2"
>
已邀请
</div>
<div
class=
"compensation"
v-if=
"scope.row.status == 3"
>
已接受邀请
</div>
<div
class=
"compensation"
v-if=
"scope.row.status == 4"
>
已拒绝邀请
</div>
<div
class=
"compensation"
v-if=
"scope.row.status == 5"
>
已完成面试
</div>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
prop=
"publishTime"
show-overflow-tooltip
label=
"
发布时间
"
>
<el-table-column
align=
"center"
prop=
"publishTime"
show-overflow-tooltip
label=
"
求职状态
"
>
<
template
slot-scope=
"scope"
>
<span
class=
"table-inf0-h3"
>
{{
scope
.
row
.
publishTime
}}
</span>
<div
class=
"table-inf0-h3"
v-if=
"scope.row.intention_current_status==1"
>
待业-求职中
</div>
<div
class=
"table-inf0-h3"
v-if=
"scope.row.intention_current_status==2"
>
正常工作-寻求机会
</div>
<div
class=
"table-inf0-h3"
v-if=
"scope.row.intention_current_status==3"
>
在业-暂不考虑机会
</div>
<div
class=
"table-inf0-h3"
v-if=
"scope.row.intention_current_status==4"
>
学业中-寻找机会
</div>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
prop=
"refreshTime"
show-overflow-tooltip
label=
"
刷新时间
"
>
<el-table-column
align=
"center"
prop=
"refreshTime"
show-overflow-tooltip
label=
"
求职职位
"
>
<
template
slot-scope=
"scope"
>
<span
class=
"table-inf0-h3"
>
{{
scope
.
row
.
refreshTi
me
}}
</span>
<span
class=
"table-inf0-h3"
>
{{
scope
.
row
.
job_na
me
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
prop=
"status"
show-overflow-tooltip
label=
"
职位状态
"
>
<el-table-column
align=
"center"
prop=
"status"
show-overflow-tooltip
label=
"
处理时间
"
>
<
template
slot-scope=
"scope"
>
<span
class=
"table-inf0-h3"
>
{{
scope
.
row
.
status
}}
</span>
<span
class=
"table-inf0-h3"
>
{{
scope
.
row
.
interview_time
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"操作"
width=
"260"
>
<
template
slot-scope=
"scope"
>
<div>
<el-button
size=
"small"
type=
"text"
@
click=
"checkResume()"
>
查看简历
</el-button>
<el-button
size=
"small"
type=
"text"
@
click=
"checkResume(
scope.row.cv_token_apply, scope.row.utoken
)"
>
查看简历
</el-button>
<span
class=
"segmenting-line"
v-if=
"resumeStatus != 4"
>
|
</span>
<el-button
size=
"small"
type=
"text"
@
click=
"disposeResume"
v-if=
"resumeStatus == 1"
>
处理
</el-button>
<el-button
size=
"small"
type=
"text"
@
click=
"disposeResume"
v-if=
"resumeStatus == 2 || resumeStatus == 3"
>
更新
</el-button>
<el-button
size=
"small"
type=
"text"
@
click=
"disposeResume
(scope.row.apply_id,scope.row.id)
"
v-if=
"resumeStatus == 1"
>
处理
</el-button>
<el-button
size=
"small"
type=
"text"
@
click=
"disposeResume
(scope.row.apply_id,scope.row.id)
"
v-if=
"resumeStatus == 2 || resumeStatus == 3"
>
更新
</el-button>
</div>
</
template
>
</el-table-column>
...
...
@@ -97,25 +113,16 @@
</div>
</template>
<
script
>
import
{
interviewList
,
interviewDispose
}
from
'@/api/interview'
import
{
interviewList
,
interviewDispose
}
from
'@/api/interview'
;
import
{
getAcademicQualifications
,
getWorkExperience
,
getSalaryExpectation
}
from
"@/api/common"
;
import
{
CodeToText
}
from
'element-china-area-data'
;
export
default
{
data
()
{
return
{
queryForm
:{
s
earchContent
:
'
'
,
s
tatus
:
'1
'
,
},
list
:
[
{
position
:
'英语老师'
,
address
:
'西安-雁塔区'
,
education
:
'本科'
,
experience
:
'一年'
,
compensation
:
'4k-5k/月'
,
publishTime
:
'2019-11-12'
,
refreshTime
:
'2019-12-12'
,
status
:
'正在招聘'
}
],
//合伙人列表
list
:
[],
//合伙人列表
currentPage
:
1
,
//当前页
totalPages
:
0
,
//总记录数
page_size
:
10
,
//每页10条记录
...
...
@@ -124,12 +131,26 @@
resumeStatus
:
'1'
,
interview_time
:
''
,
//面试时间
interview_address
:
''
,
//面试地点
eduList
:
[],
workAgesList
:
[],
apply_id
:
''
,
interview_id
:
''
}
},
methods
:
{
//处理简历
sendMessage
()
{
interviewDispose
({
apply_id
:
this
.
apply_id
,
interview_id
:
this
.
interview_id
,
interview_time
:
this
.
interview_time
,
interview_address
:
this
.
interview_address
}).
then
(
res
=>
{
if
(
res
.
error
==
0
)
{
this
.
$message
.
success
(
'邀请成功!'
);
this
.
isShowRefuseResume
=
false
;
}
})
},
//检索
search
()
{
...
...
@@ -139,19 +160,51 @@
return
'header-class-title'
;
},
handleClick
()
{
this
.
queryForm
.
status
=
this
.
resumeStatus
;
this
.
getInterviewList
();
},
checkResume
()
{
checkResume
(
id
,
utoken
)
{
let
routeUrl
=
this
.
$router
.
resolve
({
path
:
this
.
$route
.
path
+
"/detail/"
+
0
,
path
:
this
.
$route
.
path
+
"/detail/"
,
query
:
{
utoken
:
utoken
,
cv_token
:
id
}
});
window
.
open
(
routeUrl
.
href
,
'_blank'
);
},
disposeResume
()
{
disposeResume
(
apply_id
,
id
)
{
this
.
interview_id
=
id
;
this
.
apply_id
=
apply_id
;
this
.
isShowRefuseResume
=
true
;
},
//获取面试邀请列表
getInterviewList
()
{
return
new
Promise
(
resolve
=>
{
let
data
=
{
page
:
this
.
currentPage
,
page_size
:
this
.
page_size
,
status
:
this
.
queryForm
.
status
}
interviewList
(
data
).
then
(
res
=>
{
if
(
res
.
error
==
0
)
{
this
.
list
=
res
.
data
.
info
;
this
.
totalPages
=
res
.
data
.
total
;
this
.
list
=
res
.
data
.
info
.
map
(
item
=>
{
let
obj
=
{
...
item
,
work_city
:
CodeToText
[
item
.
base_area_id
.
slice
(
0
,
4
)
+
'00'
],
work_area
:
CodeToText
[
item
.
base_area_id
],
}
this
.
eduList
.
forEach
(
m
=>
{
if
(
m
.
level
==
item
.
job_require_edu_level
){
obj
.
job_require_edu_level_txt
=
m
.
level_name
}})
this
.
workAgesList
.
forEach
(
m
=>
{
if
(
m
.
level
==
item
.
job_require_work_ages
){
obj
.
job_require_work_ages_txt
=
m
.
level_name
}})
return
obj
;
})
}
})
}).
catch
(
error
=>
{
})
},
handleCurrentChange
(
page
)
{
...
...
@@ -163,9 +216,39 @@
this
.
page_size
=
e
;
this
.
currentPage
=
1
;
this
.
getInterviewList
();
},
//获取学历
getEduLevels
()
{
return
new
Promise
(
resolve
=>
{
getAcademicQualifications
().
then
(
res
=>
{
if
(
res
.
error
==
0
)
{
this
.
eduList
=
res
.
data
;
resolve
();
}
})
}).
catch
(
error
=>
{
})
},
mounted
()
{
//获取工作经验
getWorkAges
()
{
return
new
Promise
(
resolve
=>
{
getWorkExperience
().
then
(
res
=>
{
if
(
res
.
error
==
0
)
{
this
.
workAgesList
=
res
.
data
;
resolve
();
}
})
}).
catch
(
error
=>
{
})
},
},
async
mounted
()
{
await
this
.
getEduLevels
();
await
this
.
getWorkAges
();
this
.
getInterviewList
();
}
}
</
script
>
...
...
src/views/login/login.vue
View file @
2580a21
...
...
@@ -36,7 +36,7 @@
<div
class=
"register-2"
>
<div
class=
"title"
>
基本信息
</div>
<div
class=
"line-style"
>
<div
class=
"label"
>
头像
</div>
<div
class=
"label"
>
企业logo
</div>
<Upload
@
productImgs=
"getPortrait"
:editPics=
"registerInfo.portrait"
></Upload>
</div>
<div
class=
"line-style"
>
...
...
@@ -84,15 +84,12 @@
style=
"width: 400px;"
></el-input>
</div>
<div
class=
"line-style"
>
<div
class=
"label"
>
相关证件
</div>
<div
class=
"zheng-jian"
>
<div
class=
"label"
>
营业执照
</div>
<Upload
@
productImgs=
"getBusiness"
:editPics=
"registerInfo.business_license_pic"
></Upload>
<div
class=
"explain"
>
营业执照
</div>
</div>
<div
class=
"zheng-jian"
>
<div
class=
"line-style"
>
<div
class=
"label"
>
办学许可证
</div>
<Upload
@
productImgs=
"getLicence"
:editPics=
"registerInfo.school_license_pic"
></Upload>
<div
class=
"explain"
>
办学许可证
</div>
</div>
</div>
<el-button
class=
"register-save"
@
click=
"registerBtn"
>
提交注册
</el-button>
</div>
...
...
@@ -204,20 +201,6 @@
phone
:
this
.
loginInfo
.
uname
});
this
.
$router
.
push
(
"/position/list"
);
// switchMallMater({
// mtoken: mtoken?mtoken:"0854089c8fa538ab3dd3d2e311b32c92",
// password: '',
// unique_id: mtoken?mtoken:'0854089c8fa538ab3dd3d2e311b32c92'
// }).then(res => {
//
// setStoreMallInfo(res.data.mallInfo);
// setStoreMallToken(res.data.authorize.token);
//
// // setMallRoles(res.data.encryptString);
// Cookies.set('logType', 1, {domain: domain});
// this.$router.push("/position/list");
// });
});
}
...
...
@@ -442,7 +425,6 @@
business_license_pic
:
this
.
registerInfo
.
get_business_license_pic
[
0
],
school_license_pic
:
this
.
registerInfo
.
get_school_license_pic
[
0
]
}
console
.
log
(
data
);
// return
accountEdit
(
data
).
then
(
res
=>
{
if
(
res
.
error
==
0
)
{
...
...
src/views/message/info.vue
View file @
2580a21
<
template
>
<div
class=
"conatiner"
>
<p>
新建基地
</p>
<p>
企业信息
</p>
<div
class=
"line-style"
>
<div
class=
"label"
>
基地名称
:
</div>
<
el-input
class=
"input"
placeholder=
"请输入基地名称"
size=
"small"
v-model=
"name"
></el-input
>
<div
class=
"label"
>
企业logo
:
</div>
<
uploadimage
@
productImgs=
"getPortrait"
:editPics=
"registerInfo.portrait"
></uploadimage
>
</div>
<div
class=
"line-style"
>
<div
class=
"label"
>
基地编号
:
</div>
<el-input
class=
"input"
placeholder=
"请输入
基地编号"
size=
"small"
v-model=
"cod
e"
></el-input>
<div
class=
"label"
>
企业名称
:
</div>
<el-input
class=
"input"
placeholder=
"请输入
企业名称"
size=
"small"
v-model=
"registerInfo.enterprise_nam
e"
></el-input>
</div>
<div
class=
"line-style"
>
<div
class=
"label"
>
基地面积(亩)
:
</div>
<el-input
class=
"input"
placeholder=
"请输入
基地面积"
size=
"small"
v-model=
"areas
"
></el-input>
<div
class=
"label"
>
企业规模
:
</div>
<el-input
class=
"input"
placeholder=
"请输入
企业人数"
size=
"small"
v-model=
"registerInfo.enterprise_scale
"
></el-input>
</div>
<div
class=
"line-style"
>
<div
class=
"label"
>
基地负责人
:
</div>
<el-input
class=
"input"
placeholder=
"请输入
基地负责人"
size=
"small"
v-model=
"user
"
></el-input>
<div
class=
"label"
>
企业类型
:
</div>
<el-input
class=
"input"
placeholder=
"请输入
企业类型"
size=
"small"
v-model=
"registerInfo.enterprise_type
"
></el-input>
</div>
<div
class=
"line-style"
>
<div
class=
"label"
>
企业:
</div>
<el-select
placeholder=
"请选择生产企业"
size=
"small"
class=
"select-item"
clearable
v-model=
'enterprise_id'
>
<el-option
v-for=
"(item,index) in enterpriseList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
<div
class=
"label"
>
企业区域:
</div>
<el-cascader
class=
"input"
size=
"small"
:options=
"regionData"
v-model=
"registerInfo.enterprise_area"
>
</el-cascader>
</div>
<div
class=
"line-style"
>
<div
class=
"label"
>
基地详情:
</div>
<div
style=
"width: 600px;"
>
<UE
@
callback=
"getEditorHtml"
:richText=
"detail"
v-model=
"detail"
></UE>
<div
class=
"label"
>
企业地址:
</div>
<el-input
class=
"input"
placeholder=
"请输入企业地址"
size=
"small"
v-model=
"registerInfo.enterprise_address"
></el-input>
</div>
<div
class=
"line-style"
>
<div
class=
"label"
>
营业执照:
</div>
<uploadimage
@
productImgs=
"getBusiness"
:editPics=
"registerInfo.business_license_pic"
></uploadimage>
</div>
<div
class=
"line-style"
>
<div
class=
"label"
>
基地位置
:
</div>
<
el-input
class=
"input"
placeholder=
"请输入基地位置"
size=
"small"
v-model=
"address"
></el-input
>
<div
class=
"label"
>
办学许可证
:
</div>
<
uploadimage
@
productImgs=
"getLicence"
:editPics=
"registerInfo.school_license_pic"
></uploadimage
>
</div>
<div
class=
"line-style"
>
<div
class=
"label"
>
备注
:
</div>
<el-input
class=
"input"
placeholder=
"请输入备注"
size=
"small"
v-model=
"remark
"
></el-input>
<div
class=
"label"
>
企业描述
:
</div>
<el-input
style=
"width: 500px"
rows=
"4"
type=
"textarea"
placeholder=
"请输入企业描述"
size=
"small"
v-model=
"registerInfo.enterprise_describe
"
></el-input>
</div>
<div
class=
"opration"
>
<el-button
size=
"small"
@
click=
"cancel"
>
取消
</el-button>
<el-button
size=
"small"
@
click=
"save"
type=
"primary"
class=
"save"
>
保存
</el-button>
</div>
</div>
</
template
>
<
script
>
import
uploadimage
from
'../../components/Upload/
index
'
import
uploadimage
from
'../../components/Upload/
upload
'
import
{
accountGet
,
accountEdit
}
from
"@/api/login"
import
{
provinceAndCityData
,
regionData
,
CodeToText
,
TextToCode
}
from
'element-china-area-data'
;
export
default
{
name
:
"newPoint"
,
components
:
{
...
...
@@ -55,63 +60,70 @@
},
data
()
{
return
{
producerId
:
''
,
name
:
''
,
code
:
''
,
areas
:
''
,
user
:
''
,
detail
:
''
,
address
:
''
,
remark
:
''
,
enterpriseList
:
[],
enterprise_id
:
''
regionData
:
regionData
,
registerInfo
:
{
portrait
:
[],
//头像
getPortrait
:
[],
duty
:
''
,
//职务
email
:
''
,
//邮箱
enterprise_name
:
''
,
//企业名称
enterprise_scale
:
''
,
//企业规模
enterprise_type
:
''
,
//企业类型
enterprise_address
:
''
,
//企业地址
enterprise_describe
:
''
,
//企业描述
enterprise_area
:
''
,
//企业区域
business_license_pic
:
[],
//营业执照
school_license_pic
:
[],
//办学许可证
get_business_license_pic
:
[],
//营业执照
get_school_license_pic
:
[],
//办学许可证
},
}
},
methods
:
{
cancel
()
{
this
.
$router
.
go
(
-
1
);
//获取头像
getPortrait
(
data
)
{
this
.
registerInfo
.
getPortrait
=
data
;
},
//获取富文本编辑器中的内容
getEditorHtml
(
data
)
{
// console.log(data);
this
.
detail
=
data
;
//获取营业执照
getBusiness
(
data
)
{
this
.
registerInfo
.
get_business_license_pic
=
data
;
},
//获取办学许可证
getLicence
(
data
)
{
this
.
registerInfo
.
get_school_license_pic
=
data
;
},
getInfo
()
{
accountGet
({
}).
then
(
res
=>
{
accountGet
().
then
(
res
=>
{
if
(
res
.
error
==
0
)
{
this
.
name
=
res
.
data
.
name
;
this
.
code
=
res
.
data
.
code
;
this
.
areas
=
res
.
data
.
areas
;
this
.
user
=
res
.
data
.
user
;
this
.
detail
=
res
.
data
.
detail
;
this
.
address
=
res
.
data
.
address
;
this
.
remark
=
res
.
data
.
remark
;
this
.
enterprise_id
=
res
.
data
.
enterprise_id
;
this
.
registerInfo
.
portrait
.
push
(
res
.
data
.
logo
);
this
.
registerInfo
.
enterprise_name
=
res
.
data
.
name
;
this
.
registerInfo
.
enterprise_scale
=
res
.
data
.
peoples
;
this
.
registerInfo
.
enterprise_type
=
res
.
data
.
type
;
this
.
registerInfo
.
enterprise_area
=
res
.
data
.
area_id
;
this
.
registerInfo
.
enterprise_address
=
res
.
data
.
address
;
this
.
registerInfo
.
enterprise_describe
=
res
.
data
.
remark
;
this
.
registerInfo
.
business_license_pic
.
push
(
res
.
data
.
business_license_pic
);
this
.
registerInfo
.
school_license_pic
.
push
(
res
.
data
.
school_license_pic
);
}
})
},
save
()
{
let
params
=
{
name
:
this
.
name
,
code
:
this
.
code
,
areas
:
this
.
areas
,
user
:
this
.
user
,
detail
:
this
.
detail
,
address
:
this
.
address
,
remark
:
this
.
remark
,
enterprise_id
:
this
.
enterprise_id
}
if
(
this
.
producerId
)
{
params
.
id
=
this
.
producerId
;
position_name
:
this
.
registerInfo
.
duty
,
email
:
this
.
registerInfo
.
email
,
logo
:
this
.
registerInfo
.
getPortrait
[
0
]
,
name
:
this
.
registerInfo
.
enterprise_name
,
peoples
:
Number
(
this
.
registerInfo
.
enterprise_scale
)
,
type
:
this
.
registerInfo
.
enterprise_type
,
area_id
:
this
.
registerInfo
.
enterprise_area
[
2
]
,
address
:
this
.
registerInfo
.
enterprise_address
,
remark
:
this
.
registerInfo
.
enterprise_describe
,
business_license_pic
:
this
.
registerInfo
.
get_business_license_pic
[
0
],
school_license_pic
:
this
.
registerInfo
.
get_school_license_pic
[
0
]
}
accountEdit
(
params
).
then
(
res
=>
{
if
(
res
.
error
==
0
)
{
this
.
$message
.
success
(
'操作成功!'
);
setTimeout
(()
=>
{
window
.
close
();
},
1000
)
}
})
}
...
...
src/views/position/edit.vue
View file @
2580a21
...
...
@@ -98,7 +98,8 @@
<
script
>
import
{
provinceAndCityData
,
regionData
,
CodeToText
,
TextToCode
}
from
'element-china-area-data'
;
import
{
positionEdit
,
positionDetail
}
from
"@/api/position"
;
import
{
getAcademicQualifications
,
getWorkExperience
,
getJobClassify
}
from
"@/api/common"
import
{
getAcademicQualifications
,
getWorkExperience
,
getJobClassify
}
from
"@/api/common"
;
import
{
positionTtpe
}
from
'@/utils/positionType'
export
default
{
data
()
{
return
{
...
...
@@ -399,41 +400,7 @@
JobClassify
()
{
return
new
Promise
(
resolve
=>
{
getJobClassify
().
then
(
res
=>
{
this
.
position_type
=
[];
for
(
let
item
in
res
.
data
[
'01'
])
{
this
.
position_type
.
push
({
value
:
item
,
label
:
res
.
data
[
'01'
][
item
]
})
}
this
.
position_type
.
forEach
((
v
,
i
)
=>
{
for
(
let
item
in
res
.
data
)
{
if
(
v
.
value
==
item
)
{
v
.
children
=
[];
for
(
let
item_1
in
res
.
data
[
item
])
{
v
.
children
.
push
({
value
:
item_1
,
label
:
res
.
data
[
item
][
item_1
]
})
}
}
}
v
.
children
.
forEach
((
vv
,
ii
)
=>
{
for
(
let
item
in
res
.
data
)
{
if
(
vv
.
value
==
item
)
{
v
.
children
[
ii
].
children
=
[];
for
(
let
item_1
in
res
.
data
[
item
])
{
v
.
children
[
ii
].
children
.
push
({
value
:
item_1
,
label
:
res
.
data
[
item
][
item_1
]
})
}
}
}
})
})
this
.
position_type
=
positionTtpe
(
res
);
})
resolve
();
}).
catch
(
error
=>
{
...
...
@@ -448,7 +415,6 @@
await
this
.
getEduLevels
();
await
this
.
getWorkAges
();
await
this
.
JobClassify
();
console
.
log
(
this
.
$route
.
params
.
id
&&
this
.
$route
.
params
.
id
!=
0
,
'this.$route.params.id'
);
if
(
this
.
$route
.
params
.
id
&&
this
.
$route
.
params
.
id
!=
0
)
{
console
.
log
(
9
);
this
.
id
=
this
.
$route
.
params
.
id
;
...
...
src/views/position/list.vue
View file @
2580a21
...
...
@@ -43,7 +43,7 @@
</el-table-column>
<el-table-column
align=
"center"
prop=
"compensation"
show-overflow-tooltip
label=
"薪资"
>
<
template
slot-scope=
"scope"
>
<div
class=
"compensation"
>
{{
scope
.
row
.
job_require_salary_min
/
100000
}}
-
{{
scope
.
row
.
job_require_salary_max
/
100000
}}
K
</div>
<div
class=
"compensation"
>
{{
(
scope
.
row
.
job_require_salary_min
/
100000
).
toFixed
(
1
)
}}
~
{{
(
scope
.
row
.
job_require_salary_max
/
100000
).
toFixed
(
1
)
}}
K
</div>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
prop=
"publishTime"
show-overflow-tooltip
label=
"发布时间"
>
...
...
src/views/recommend/detail.vue
View file @
2580a21
<
template
>
<div
class=
"contanier"
>
<!--
<div
class=
"search-title"
>
-->
<!--
<div></div>
-->
<!--
<div>
-->
<!--
<el-button
type=
"primary"
size=
"small"
@
click=
"optimizedVisible = true"
>
添加优化建议-->
<!--
</el-button>
-->
<!--
<el-tooltip
effect=
"dark"
placement=
"right-start"
>
-->
<!--
<div
slot=
"content"
class=
"slot"
>
-->
<!--
<p>
注释信息及辅助提示文字内容
</p>
-->
<!--
</div>
-->
<!--
<el-button
type=
"text"
icon=
"el-icon-question"
></el-button>
-->
<!--
</el-tooltip>
-->
<!--
</div>
-->
<!--
</div>
-->
<div
class=
"resume-contanier"
>
<div
class=
"resume-header flex"
>
<div
class=
"flex resume-header_left"
style=
"margin-right:200px;"
>
<img
src=
"https://wx.qlogo.cn/mmopen/vi_32/0nluCqghffPjzhVqMuguxaGFY0dgicfArLZrFGIJo3xL3wZrODiaJR8Znux6w7KhR1HeKTkw7Yw3fqrmcO7cNSWQ/132
"
alt=
""
class=
"resume-avatar"
>
<img
:src=
"detailInfo.photo
"
alt=
""
class=
"resume-avatar"
>
<div
class=
"resume-header_info flex-direct"
>
<div>
<span
class=
"name mr"
>
王富贵
</span>
<span>
先生/27
岁
</span>
<span
class=
"name mr"
>
{{
detailInfo
.
base_name
}}
</span>
<span>
{{
detailInfo
.
base_sex
==
1
?
'男'
:
'女'
}}
/
{{
detailInfo
.
age
}}
岁
</span>
</div>
<div>
<span
class=
"mr"
>
教课老师
</span>
<span
class=
"mr"
>
本科
</span>
<
span
>
3-5年
</span
>
<span
class=
"mr"
>
{{
detailInfo
.
work_experiences
[
0
].
job_name
}}
</span>
<span
class=
"mr"
>
{{
detailInfo
.
edu_experiences
[
0
].
qualifications
}}
</span>
<
!--
<span
>
3-5年
</span>
--
>
</div>
</div>
</div>
...
...
@@ -33,11 +20,13 @@
<div
class=
"resume-header_info flex-direct"
>
<div
class=
"flex-between"
>
<i
class=
'iconfont icon-mobile txtSize'
></i>
<span
class=
'ml'
>
已隐藏
</span>
<span
class=
'ml'
v-if=
"detailInfo.show_status==2"
>
已隐藏
</span>
<span
class=
'ml'
v-else
>
{{
detailInfo
.
base_phone
}}
</span>
</div>
<div
class=
"flex-between"
>
<i
class=
'iconfont icon-dianziyoujian txtSize'
></i>
<span
class=
'ml'
>
已隐藏
</span>
<span
class=
'ml'
v-if=
"detailInfo.show_status==2"
>
已隐藏
</span>
<span
class=
'ml'
v-else
>
{{
detailInfo
.
base_email
}}
</span>
</div>
</div>
</div>
...
...
@@ -46,42 +35,39 @@
<div
class=
"resume-item-title"
>
求职意向
</div>
<div
class=
"resume-icon-style"
>
<i
class=
'iconfont icon-ruzhishijian txtSize'
></i>
<span
class=
'txt_adjust'
>
待业-求职中
</span>
<span
class=
'txt_adjust'
>
{{
detailInfo
.
intention_current_status
==
1
?
'待业-求职中'
:
detailInfo
.
intention_current_status
==
2
?
'正常工作-寻求机会'
:
detailInfo
.
intention_current_status
==
3
?
'在业-暂不考虑机会'
:
'学业中-寻找机会'
}}
</span>
</div>
<div
class=
"flex"
>
<div
class=
"resume-icon-style gap"
>
<i
class=
'iconfont icon-yingpinzhiwei txtSize'
></i>
<span
class=
'txt_adjust'
>
英语教师
</span>
</div>
<div
class=
"resume-icon-style gap"
>
<i
class=
'iconfont icon-xueli txtSizel'
></i>
<span
class=
'txt_adjust'
>
初中
</span>
<span
class=
'txt_adjust'
>
{{
detailInfo
.
job_name
}}
</span>
</div>
<div
class=
"resume-icon-style gap"
>
<i
class=
'iconfont icon-suozaichengshi txtSize'
></i>
<span
class=
'txt_adjust'
>
西安-雁塔
</span>
<span
class=
'txt_adjust'
>
{{
detailInfo
.
work_city
}}
-
{{
detailInfo
.
work_area
}}
</span>
</div>
<div
class=
"resume-icon-style gap"
>
<i
class=
'iconfont icon-xinziyaoqiu txtSize'
></i>
<span
class=
'txt_adjust'
>
5K-10
K
</span>
<span
class=
'txt_adjust'
>
{{
detailInfo
.
intention_salary_min
?(
detailInfo
.
intention_salary_min
/
100000
).
toFixed
(
1
):
0
}}
K-
{{
detailInfo
.
intention_salary_max
?(
detailInfo
.
intention_salary_max
/
100000
).
toFixed
(
1
):
0
}}
K
</span>
</div>
</div>
</div>
<div
class=
"resume-item"
>
<div
class=
"resume-item-title"
>
工作经历
</div>
<div
class=
"resume-experice"
>
<div
class=
"resume-experice-item"
>
<div
class=
"resume-experice-item"
v-for=
"(item,index) in detailInfo.work_experiences"
:key=
"index"
>
<div
class=
"resume-experice-company mb"
>
<span
class=
"resume-experice-txt"
>
陕西当老师教育科技有限公司
</span>
<span>
2019.11 - 至今
</span>
<span
class=
"resume-experice-txt"
>
{{
item
.
organization_name
}}
</span>
<span>
{{
item
.
start_time
}}
-
{{
item
.
end_time
?
item
.
end_time
:
'至今'
}}
</span>
</div>
<div
class=
"resume-experice-job mb"
>
数学教师
</div>
<div
class=
"resume-experice-job mb"
>
{{
item
.
job_name
}}
</div>
<div>
工作内容:
</div>
<div
class=
"resume-content"
>
<p>
1、配合协助班级主班保育教育工作;
</p>
<p>
2、负责幼儿园的家庭教育指导工作;
</p>
<p>
3、负责幼儿园的亲子教育工作;
</p>
<p>
4、收集、整理家园教育资料
</p>
<div
class=
"resume-content"
v-html=
"item.work_content"
>
</div>
</div>
</div>
...
...
@@ -89,20 +75,13 @@
<div
class=
"resume-item"
>
<div
class=
"resume-item-title"
>
教育经历
</div>
<div
class=
"resume-edu"
>
<div
class=
"resume-edu-item"
>
<div
class=
"resume-edu-item"
v-for=
"(item,index) in detailInfo.edu_experiences"
:key=
"index"
>
<div
class=
"resume-edu-school mb"
>
<span
class=
"resume-edu-txt"
>
陕西当老师教育科技有限公司
</span>
<span
class=
"resume-edu-txt"
>
{{
item
.
school_name
}}
</span>
</div>
<div
class=
"resume-edu mb"
>
<span
class=
"resume-edu-course"
>
教育心理学 · 本科
</span>
<span>
2019.11 - 至今
</span>
</div>
<div>
工作内容:
</div>
<div
class=
"resume-content"
>
<p>
1、配合协助班级主班保育教育工作;
</p>
<p>
2、负责幼儿园的家庭教育指导工作;
</p>
<p>
3、负责幼儿园的亲子教育工作;
</p>
<p>
4、收集、整理家园教育资料
</p>
<span
class=
"resume-edu-course"
>
{{
item
.
major_name
}}
·
{{
item
.
qualifications
}}
</span>
<span>
{{
item
.
start_time
}}
-
{{
item
.
end_time
?
item
.
end_time
:
'至今'
}}
</span>
</div>
</div>
</div>
...
...
@@ -110,29 +89,46 @@
<div
class=
"resume-item"
>
<div
class=
"resume-item-title mb"
>
自我评价
</div>
<div>
相关描述:
</div>
<div
class=
"resume-content"
>
<p>
1、配合协助班级主班保育教育工作;
</p>
<p>
2、负责幼儿园的家庭教育指导工作;
</p>
<p>
3、负责幼儿园的亲子教育工作;
</p>
<p>
4、收集、整理家园教育资料
</p>
<div
class=
"resume-content"
v-html=
"detailInfo.self_advantage"
>
</div>
</div>
<div>
<el-button
type=
"primary"
size=
"small"
@
click=
"isShowPassResume = true"
>
通过
</el-button>
<el-button
type=
"danger"
size=
"small"
@
click=
"isShowRefuseResume = true"
>
拒绝
</el-button>
</div>
<!--
优化建议
-->
<el-dialog
title=
"
优化建议"
:visible
.
sync=
"optimizedVisible"
width=
"60
0px"
center
>
</div>
<!--
拒绝简历弹框
-->
<el-dialog
title=
"
拒绝理由"
:visible
.
sync=
"isShowRefuseResume"
width=
"36
0px"
center
>
<div>
<el-input
type=
"textarea"
v-model=
"remarks"
maxlength=
"200"
rows=
"5"
placeholder=
"请输入优化建议,最多200字"
></el-input>
<el-select
v-model=
"refuse_reason"
placeholder=
"请选择"
style=
"width: 100%;margin-bottom: 20px"
>
<el-option
v-for=
"item in reasonList"
:key=
"item.label"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
<div
class=
"operation"
>
<el-button
type=
"primary"
size=
"small"
@
click=
"sureRefuseResume"
>
确定
</el-button>
<el-button
size=
"small"
@
click=
"isShowRefuseResume = false"
>
取消
</el-button>
</div>
</div>
</el-dialog>
<!--通过简历弹框-->
<el-dialog
title=
"确认通过"
:visible
.
sync=
"isShowPassResume"
width=
"300px"
center
>
<div>
<div
style=
"text-align: center;margin-bottom: 40px"
>
该求职者是否符合贵司要求
</div>
<div
class=
"operation"
>
<el-button
type=
"primary"
size=
"small"
@
click=
"surePassResume"
>
确定
</el-button>
<el-button
size=
"small"
@
click=
"isShowPassResume = false"
>
取消
</el-button>
</div>
</div>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"optimizedVisible=false"
size=
"small"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"optimizedVisible=false"
size=
"small"
>
确 认
</el-button>
</span>
</el-dialog>
</div>
</
template
>
<
script
>
import
{
resumeDetail
,
resumePass
,
resumeRefuse
}
from
'@/api/resume'
import
{
getJobClassify
,
applyRefuseReasons
}
from
'@/api/common'
import
{
CodeToText
,
TextToCode
,}
from
'element-china-area-data'
;
import
{
Loading
}
from
'element-ui'
;
export
default
{
props
:
{
...
...
@@ -143,20 +139,153 @@
data
()
{
return
{
optimizedVisible
:
false
,
remarks
:
''
remarks
:
''
,
detailInfo
:
''
,
//获取详情
suggestList
:[],
jobList
:[],
isShowRefuseResume
:
false
,
isShowPassResume
:
false
,
refuse_reason
:
''
,
reasonList
:
[]
};
},
methods
:
{
//获取拒绝原因列表
getResonList
()
{
applyRefuseReasons
().
then
(
res
=>
{
if
(
res
.
error
==
0
)
{
res
.
data
.
forEach
(
v
=>
{
this
.
reasonList
.
push
({
label
:
v
,
value
:
v
})
})
}
})
},
computed
:
{
//确认通过
surePassResume
()
{
resumePass
({
apply_id
:
Number
(
this
.
detailInfo
.
id
),
handle
:
'pass'
}).
then
(
res
=>
{
if
(
res
.
error
==
0
)
{
this
.
$message
.
success
(
'已通过成功!'
);
this
.
isShowPassResume
=
false
;
}
})
},
//确认拒绝简历
sureRefuseResume
()
{
resumeRefuse
({
apply_id
:
Number
(
this
.
detailInfo
.
id
),
handle
:
'refuse'
,
refuse_reason
:
this
.
refuse_reason
}).
then
(
res
=>
{
if
(
res
.
error
==
0
)
{
this
.
$message
.
success
(
'已拒绝成功!'
);
this
.
isShowRefuseResume
=
false
;
}
})
},
watch
:
{
jsGetAge
(
strBirthday
){
var
returnAge
;
var
strBirthdayArr
=
strBirthday
.
split
(
"-"
);
var
birthYear
=
strBirthdayArr
[
0
];
var
birthMonth
=
strBirthdayArr
[
1
];
var
birthDay
=
strBirthdayArr
[
2
];
let
d
=
new
Date
();
var
nowYear
=
d
.
getFullYear
();
var
nowMonth
=
d
.
getMonth
()
+
1
;
var
nowDay
=
d
.
getDate
();
if
(
nowYear
==
birthYear
){
returnAge
=
0
;
//同年 则为0岁
}
else
{
var
ageDiff
=
nowYear
-
birthYear
;
//年之差
if
(
ageDiff
>
0
){
if
(
nowMonth
==
birthMonth
)
{
var
dayDiff
=
nowDay
-
birthDay
;
//日之差
if
(
dayDiff
<
0
)
{
returnAge
=
ageDiff
-
1
;
}
else
{
returnAge
=
ageDiff
;
}
}
else
{
var
monthDiff
=
nowMonth
-
birthMonth
;
//月之差
if
(
monthDiff
<
0
)
{
returnAge
=
ageDiff
-
1
;
}
else
{
returnAge
=
ageDiff
;
}
}
}
else
{
returnAge
=
-
1
;
//返回-1 表示出生日期输入错误 晚于今天
}
}
return
returnAge
;
//返回周岁年龄
},
getDetail
(){
let
loading
=
Loading
.
service
({
target
:
document
.
querySelector
(
'.main-container'
),
text
:
'请求中...'
,
});
// this.$route.query.cv_token
let
data
=
{
utoken
:
this
.
$route
.
query
.
utoken
,
cv_token
:
"CV1577948246894fzJFS"
,
mode
:
0
}
resumeDetail
(
data
).
then
(
res
=>
{
loading
.
close
();
if
(
res
.
error
==
0
){
let
obj
=
{
...
res
.
data
,
age
:
this
.
jsGetAge
(
res
.
data
.
base_birthday
),
work_city
:
CodeToText
[
res
.
data
.
intention_area_id
.
slice
(
0
,
4
)
+
'00'
],
work_area
:
CodeToText
[
res
.
data
.
intention_area_id
],
job_name
:
this
.
jobList
[
res
.
data
.
intention_job
.
slice
(
0
,
6
)
+
'00'
][
res
.
data
.
intention_job
]
}
let
a1
=
this
.
jobList
[
res
.
data
.
intention_job
.
slice
(
0
,
4
)
+
'0000'
]
console
.
log
(
a1
);
console
.
log
(
obj
);
this
.
detailInfo
=
obj
;
}
}).
catch
()
},
created
()
{
//获取职位列表
getJobList
(){
return
new
Promise
((
resolve
,
reject
)
=>
{
getJobClassify
().
then
(
res
=>
{
if
(
res
.
error
==
0
){
this
.
jobList
=
res
.
data
;
resolve
(
true
)
}
}).
catch
();
}).
catch
(
error
=>
{
reject
(
error
)
})
},
},
async
created
()
{
await
this
.
getJobList
();
this
.
getResonList
();
this
.
getDetail
();
this
.
getSysSuggestion
();
},
mounted
()
{
...
...
@@ -173,15 +302,6 @@
width
:
900px
;
margin
:
0
120px
;
}
.search-title
{
width
:
900px
;
/* margin:0 auto 10px; */
margin
:
0
120px
10px
120px
;
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
/* margin-bottom: 10px; */
}
.ml
{
margin-left
:
15px
;
}
...
...
@@ -248,4 +368,14 @@
.resume-edu-course
{
margin-right
:
100px
;
}
.suggest_title
,
.suggest_txt
{
line-height
:
30px
;
}
.suggest_txt
{
color
:
#666
;
}
.operation
{
margin-top
:
20px
;
text-align
:
center
;
}
</
style
>
src/views/recommend/list.vue
View file @
2580a21
...
...
@@ -2,26 +2,23 @@
<div
class=
"partner-supervise-container"
>
<div
class=
"refresh"
>
<el-button
@
click=
"refresh"
type=
"primary"
size=
"small"
>
立即刷新
</el-button>
<span>
今日剩余(0/10)
</span
>
<!--
<span>
今日剩余(0/10)
</span>
--
>
</div>
<el-form
:inline=
"true"
:model=
"queryForm"
size=
"small"
ref=
"queryForm"
class=
"fiter-box"
>
<el-form
:inline=
"true"
:model=
"queryForm"
size=
"small"
ref=
"queryForm"
class=
"fiter-box"
>
<div
class=
"fiter-col"
>
<el-form-item
label=
"搜索内容:"
prop=
"searchContent"
class=
"order-item"
>
<el-input
placeholder=
"请输入内容"
v-model=
"queryForm.searchContent"
class=
"order-input"
>
</el-input>
</el-form-item>
<el-form-item
label=
"状态:"
prop=
"searchContent"
class=
"order-item"
>
<el-select
v-model=
"queryForm.status"
placeholder=
"请选择"
class=
"input-style"
size=
"small"
>
<el-option
label=
"全部"
value=
"0"
></el-option>
<el-option
label=
"正在招聘"
value=
"1"
></el-option>
<el-option
label=
"已关闭"
value=
"2"
></el-option>
<el-option
label=
"全部"
value=
""
></el-option>
<el-option
label=
"刚投递"
value=
"1"
></el-option>
<el-option
label=
"已查看"
value=
"2"
></el-option>
<el-option
label=
"通过初筛"
value=
"3"
></el-option>
<el-option
label=
"已拒绝"
value=
"4"
></el-option>
</el-select>
</el-form-item>
</div>
<div
class=
"fiter-col"
style=
"margin-bottom: 0"
>
<el-button
type=
"primary"
size=
"small"
style=
"margin-left: 20px"
@
click=
"search"
>
搜索
</el-button>
<el-button
type=
"danger"
size=
"small"
@
click=
"reset"
>
清空搜索条件
</el-button>
<el-form-item
label=
""
prop=
"searchContent"
class=
"order-item"
>
<el-button
type=
"primary"
size=
"small"
style=
""
@
click=
"search"
>
搜索
</el-button>
</el-form-item>
</div>
</el-form>
<div
class=
"partner-supervise-table"
>
...
...
@@ -29,39 +26,41 @@
<el-table-column
align=
"center"
prop=
"truename"
label=
"职位信息"
width=
"300"
>
<template
slot-scope=
"scope"
>
<div
class=
"position-info"
>
<div
class=
"position"
><span>
全
</span>
{{
scope
.
row
.
position
}}
</div>
<div
class=
"position"
><span>
{{
scope
.
row
.
job_type
==
1
?
'全'
:
'兼'
}}
</span>
{{
scope
.
row
.
base_name
}}
</div>
<div
class=
"info"
>
<div>
{{
scope
.
row
.
address
}}
</div>
<div>
{{
scope
.
row
.
education
}}
</div>
<div>
{{
scope
.
row
.
experience
}}
</div>
<div>
{{
scope
.
row
.
work_city
}}
-
{{
scope
.
row
.
work_area
}}
</div>
<div>
{{
scope
.
row
.
edu
}}
</div>
</div>
</div>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
prop=
"compensation"
show-overflow-tooltip
label=
"薪资"
>
<
template
slot-scope=
"scope"
>
<div
class=
"compensation"
>
{{
scope
.
row
.
compensation
}}
</div>
<div
class=
"compensation"
>
{{
(
scope
.
row
.
job_require_salary_min
/
100000
).
toFixed
(
1
)
}}
~
{{
(
scope
.
row
.
job_require_salary_max
/
100000
).
toFixed
(
1
)
}}
K
</div>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
prop=
"publishTime"
show-overflow-tooltip
label=
"
发布时间
"
>
<el-table-column
align=
"center"
prop=
"publishTime"
show-overflow-tooltip
label=
"
求职状态
"
>
<
template
slot-scope=
"scope"
>
<span
class=
"table-inf0-h3"
>
{{
scope
.
row
.
publishTime
}}
</span>
<div
class=
"table-inf0-h3"
v-if=
"scope.row.intention_current_status==1"
>
待业-求职中
</div>
<div
class=
"table-inf0-h3"
v-if=
"scope.row.intention_current_status==2"
>
正常工作-寻求机会
</div>
<div
class=
"table-inf0-h3"
v-if=
"scope.row.intention_current_status==3"
>
在业-暂不考虑机会
</div>
<div
class=
"table-inf0-h3"
v-if=
"scope.row.intention_current_status==4"
>
学业中-寻找机会
</div>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
prop=
"refreshTime"
show-overflow-tooltip
label=
"
刷新时间
"
>
<el-table-column
align=
"center"
prop=
"refreshTime"
show-overflow-tooltip
label=
"
职位名称
"
>
<
template
slot-scope=
"scope"
>
<span
class=
"table-inf0-h3"
>
{{
scope
.
row
.
refreshTi
me
}}
</span>
<span
class=
"table-inf0-h3"
>
{{
scope
.
row
.
job_na
me
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
prop=
"status"
show-overflow-tooltip
label=
"
职位状态
"
>
<el-table-column
align=
"center"
prop=
"status"
show-overflow-tooltip
label=
"
处理时间
"
>
<
template
slot-scope=
"scope"
>
<span
class=
"table-inf0-h3"
>
{{
scope
.
row
.
status
}}
</span>
<span
class=
"table-inf0-h3"
>
{{
scope
.
row
.
updated_at
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"操作"
width=
"160"
>
<
template
slot-scope=
"scope"
>
<div>
<el-button
size=
"small"
type=
"text"
@
click=
"checkPosition"
>
查看简历
</el-button>
<el-button
size=
"small"
type=
"text"
@
click=
"checkPosition
(scope.row.cv_token_apply, scope.row.utoken)
"
>
查看简历
</el-button>
</div>
</
template
>
</el-table-column>
...
...
@@ -81,7 +80,8 @@
</div>
</template>
<
script
>
import
{
recommendList
}
from
'@/api/recommend'
import
{
resumeList
,
resumePass
,
resumeRefuse
}
from
"@/api/resume"
import
{
CodeToText
}
from
'element-china-area-data'
;
export
default
{
data
()
{
return
{
...
...
@@ -120,18 +120,44 @@
headerName
()
{
return
'header-class-title'
},
checkPosition
()
{
checkPosition
(
id
,
utoken
)
{
let
routeUrl
=
this
.
$router
.
resolve
({
path
:
this
.
$route
.
path
+
"/detail/"
+
0
,
path
:
this
.
$route
.
path
+
"/detail/"
,
query
:
{
utoken
:
utoken
,
cv_token
:
id
}
});
window
.
open
(
routeUrl
.
href
,
'_blank'
);
},
refresh
()
{
this
.
getRcommendList
();
},
//获取推荐列表
getRcommendList
()
{
let
data
=
{
page
:
this
.
currentPage
,
page_size
:
this
.
page_size
,
apply_type
:
'self'
}
if
(
this
.
queryForm
.
status
)
{
data
.
status
=
this
.
queryForm
.
status
;
}
resumeList
(
data
).
then
(
res
=>
{
if
(
res
.
error
==
0
&&
res
.
data
&&
res
.
data
.
info
)
{
this
.
list
=
res
.
data
.
info
;
this
.
totalPages
=
res
.
data
.
total
;
this
.
list
=
res
.
data
.
info
.
map
(
item
=>
{
let
obj
=
{
...
item
,
work_city
:
CodeToText
[
item
.
base_area_id
.
slice
(
0
,
4
)
+
'00'
],
work_area
:
CodeToText
[
item
.
base_area_id
],
edu
:
item
.
edu_experiences
[
0
].
qualifications
}
return
obj
;
})
}
})
},
handleCurrentChange
(
page
)
{
this
.
currentPage
=
page
;
...
...
@@ -145,7 +171,7 @@
}
},
mounted
()
{
this
.
getRcommendList
();
}
}
</
script
>
...
...
src/views/resume/detail.vue
View file @
2580a21
<
template
>
<div
class=
"contanier"
>
<!--
<div
class=
"search-title"
>
-->
<!--
<div></div>
-->
<!--
<div>
-->
<!--
<el-button
type=
"primary"
size=
"small"
@
click=
"optimizedVisible = true"
>
添加优化建议-->
<!--
</el-button>
-->
<!--
<el-tooltip
effect=
"dark"
placement=
"right-start"
>
-->
<!--
<div
slot=
"content"
class=
"slot"
>
-->
<!--
<p>
注释信息及辅助提示文字内容
</p>
-->
<!--
</div>
-->
<!--
<el-button
type=
"text"
icon=
"el-icon-question"
></el-button>
-->
<!--
</el-tooltip>
-->
<!--
</div>
-->
<!--
</div>
-->
<div
class=
"resume-contanier"
>
<div
class=
"resume-header flex"
>
<div
class=
"flex resume-header_left"
style=
"margin-right:200px;"
>
<img
src=
"https://wx.qlogo.cn/mmopen/vi_32/0nluCqghffPjzhVqMuguxaGFY0dgicfArLZrFGIJo3xL3wZrODiaJR8Znux6w7KhR1HeKTkw7Yw3fqrmcO7cNSWQ/132
"
alt=
""
class=
"resume-avatar"
>
<img
:src=
"detailInfo.photo
"
alt=
""
class=
"resume-avatar"
>
<div
class=
"resume-header_info flex-direct"
>
<div>
<span
class=
"name mr"
>
王富贵
</span>
<span>
先生/27
岁
</span>
<span
class=
"name mr"
>
{{
detailInfo
.
base_name
}}
</span>
<span>
{{
detailInfo
.
base_sex
==
1
?
'男'
:
'女'
}}
/
{{
detailInfo
.
age
}}
岁
</span>
</div>
<div>
<span
class=
"mr"
>
教课老师
</span>
<span
class=
"mr"
>
本科
</span>
<
span
>
3-5年
</span
>
<span
class=
"mr"
>
{{
detailInfo
.
work_experiences
[
0
].
job_name
}}
</span>
<span
class=
"mr"
>
{{
detailInfo
.
edu_experiences
[
0
].
qualifications
}}
</span>
<
!--
<span
>
3-5年
</span>
--
>
</div>
</div>
</div>
...
...
@@ -33,11 +20,13 @@
<div
class=
"resume-header_info flex-direct"
>
<div
class=
"flex-between"
>
<i
class=
'iconfont icon-mobile txtSize'
></i>
<span
class=
'ml'
>
已隐藏
</span>
<span
class=
'ml'
v-if=
"detailInfo.show_status==2"
>
已隐藏
</span>
<span
class=
'ml'
v-else
>
{{
detailInfo
.
base_phone
}}
</span>
</div>
<div
class=
"flex-between"
>
<i
class=
'iconfont icon-dianziyoujian txtSize'
></i>
<span
class=
'ml'
>
已隐藏
</span>
<span
class=
'ml'
v-if=
"detailInfo.show_status==2"
>
已隐藏
</span>
<span
class=
'ml'
v-else
>
{{
detailInfo
.
base_email
}}
</span>
</div>
</div>
</div>
...
...
@@ -46,42 +35,39 @@
<div
class=
"resume-item-title"
>
求职意向
</div>
<div
class=
"resume-icon-style"
>
<i
class=
'iconfont icon-ruzhishijian txtSize'
></i>
<span
class=
'txt_adjust'
>
待业-求职中
</span>
<span
class=
'txt_adjust'
>
{{
detailInfo
.
intention_current_status
==
1
?
'待业-求职中'
:
detailInfo
.
intention_current_status
==
2
?
'正常工作-寻求机会'
:
detailInfo
.
intention_current_status
==
3
?
'在业-暂不考虑机会'
:
'学业中-寻找机会'
}}
</span>
</div>
<div
class=
"flex"
>
<div
class=
"resume-icon-style gap"
>
<i
class=
'iconfont icon-yingpinzhiwei txtSize'
></i>
<span
class=
'txt_adjust'
>
英语教师
</span>
</div>
<div
class=
"resume-icon-style gap"
>
<i
class=
'iconfont icon-xueli txtSizel'
></i>
<span
class=
'txt_adjust'
>
初中
</span>
<span
class=
'txt_adjust'
>
{{
detailInfo
.
job_name
}}
</span>
</div>
<div
class=
"resume-icon-style gap"
>
<i
class=
'iconfont icon-suozaichengshi txtSize'
></i>
<span
class=
'txt_adjust'
>
西安-雁塔
</span>
<span
class=
'txt_adjust'
>
{{
detailInfo
.
work_city
}}
-
{{
detailInfo
.
work_area
}}
</span>
</div>
<div
class=
"resume-icon-style gap"
>
<i
class=
'iconfont icon-xinziyaoqiu txtSize'
></i>
<span
class=
'txt_adjust'
>
5K-10
K
</span>
<span
class=
'txt_adjust'
>
{{
detailInfo
.
intention_salary_min
?(
detailInfo
.
intention_salary_min
/
100000
).
toFixed
(
1
):
0
}}
K-
{{
detailInfo
.
intention_salary_max
?(
detailInfo
.
intention_salary_max
/
100000
).
toFixed
(
1
):
0
}}
K
</span>
</div>
</div>
</div>
<div
class=
"resume-item"
>
<div
class=
"resume-item-title"
>
工作经历
</div>
<div
class=
"resume-experice"
>
<div
class=
"resume-experice-item"
>
<div
class=
"resume-experice-item"
v-for=
"(item,index) in detailInfo.work_experiences"
:key=
"index"
>
<div
class=
"resume-experice-company mb"
>
<span
class=
"resume-experice-txt"
>
陕西当老师教育科技有限公司
</span>
<span>
2019.11 - 至今
</span>
<span
class=
"resume-experice-txt"
>
{{
item
.
organization_name
}}
</span>
<span>
{{
item
.
start_time
}}
-
{{
item
.
end_time
?
item
.
end_time
:
'至今'
}}
</span>
</div>
<div
class=
"resume-experice-job mb"
>
数学教师
</div>
<div
class=
"resume-experice-job mb"
>
{{
item
.
job_name
}}
</div>
<div>
工作内容:
</div>
<div
class=
"resume-content"
>
<p>
1、配合协助班级主班保育教育工作;
</p>
<p>
2、负责幼儿园的家庭教育指导工作;
</p>
<p>
3、负责幼儿园的亲子教育工作;
</p>
<p>
4、收集、整理家园教育资料
</p>
<div
class=
"resume-content"
v-html=
"item.work_content"
>
</div>
</div>
</div>
...
...
@@ -89,20 +75,13 @@
<div
class=
"resume-item"
>
<div
class=
"resume-item-title"
>
教育经历
</div>
<div
class=
"resume-edu"
>
<div
class=
"resume-edu-item"
>
<div
class=
"resume-edu-item"
v-for=
"(item,index) in detailInfo.edu_experiences"
:key=
"index"
>
<div
class=
"resume-edu-school mb"
>
<span
class=
"resume-edu-txt"
>
陕西当老师教育科技有限公司
</span>
<span
class=
"resume-edu-txt"
>
{{
item
.
school_name
}}
</span>
</div>
<div
class=
"resume-edu mb"
>
<span
class=
"resume-edu-course"
>
教育心理学 · 本科
</span>
<span>
2019.11 - 至今
</span>
</div>
<div>
工作内容:
</div>
<div
class=
"resume-content"
>
<p>
1、配合协助班级主班保育教育工作;
</p>
<p>
2、负责幼儿园的家庭教育指导工作;
</p>
<p>
3、负责幼儿园的亲子教育工作;
</p>
<p>
4、收集、整理家园教育资料
</p>
<span
class=
"resume-edu-course"
>
{{
item
.
major_name
}}
·
{{
item
.
qualifications
}}
</span>
<span>
{{
item
.
start_time
}}
-
{{
item
.
end_time
?
item
.
end_time
:
'至今'
}}
</span>
</div>
</div>
</div>
...
...
@@ -110,48 +89,195 @@
<div
class=
"resume-item"
>
<div
class=
"resume-item-title mb"
>
自我评价
</div>
<div>
相关描述:
</div>
<div
class=
"resume-content"
>
<p>
1、配合协助班级主班保育教育工作;
</p>
<p>
2、负责幼儿园的家庭教育指导工作;
</p>
<p>
3、负责幼儿园的亲子教育工作;
</p>
<p>
4、收集、整理家园教育资料
</p>
<div
class=
"resume-content"
v-html=
"detailInfo.self_advantage"
>
</div>
</div>
<div>
<el-button
type=
"primary"
size=
"small"
@
click=
"isShowPassResume = true"
>
通过
</el-button>
<el-button
type=
"danger"
size=
"small"
@
click=
"isShowRefuseResume = true"
>
拒绝
</el-button>
</div>
</div>
<!--
优化建议
-->
<el-dialog
title=
"
优化建议"
:visible
.
sync=
"optimizedVisible"
width=
"60
0px"
center
>
<!--
拒绝简历弹框
-->
<el-dialog
title=
"
拒绝理由"
:visible
.
sync=
"isShowRefuseResume"
width=
"36
0px"
center
>
<div>
<el-input
type=
"textarea"
v-model=
"remarks"
maxlength=
"200"
rows=
"5"
placeholder=
"请输入优化建议,最多200字"
></el-input>
<el-select
v-model=
"refuse_reason"
placeholder=
"请选择"
style=
"width: 100%;margin-bottom: 20px"
>
<el-option
v-for=
"item in reasonList"
:key=
"item.label"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
<div
class=
"operation"
>
<el-button
type=
"primary"
size=
"small"
@
click=
"sureRefuseResume"
>
确定
</el-button>
<el-button
size=
"small"
@
click=
"isShowRefuseResume = false"
>
取消
</el-button>
</div>
</div>
</el-dialog>
<!--通过简历弹框-->
<el-dialog
title=
"确认通过"
:visible
.
sync=
"isShowPassResume"
width=
"300px"
center
>
<div>
<div
style=
"text-align: center;margin-bottom: 40px"
>
该求职者是否符合贵司要求
</div>
<div
class=
"operation"
>
<el-button
type=
"primary"
size=
"small"
@
click=
"surePassResume"
>
确定
</el-button>
<el-button
size=
"small"
@
click=
"isShowPassResume = false"
>
取消
</el-button>
</div>
</div>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"optimizedVisible=false"
size=
"small"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"optimizedVisible=false"
size=
"small"
>
确 认
</el-button>
</span>
</el-dialog>
</div>
</
template
>
<
script
>
import
{
resumeDetail
}
from
'@/api/resume'
import
{
resumeDetail
,
resumePass
,
resumeRefuse
}
from
'@/api/resume'
import
{
getJobClassify
,
applyRefuseReasons
}
from
'@/api/common'
import
{
CodeToText
,
TextToCode
,}
from
'element-china-area-data'
;
import
{
Loading
}
from
'element-ui'
;
export
default
{
data
()
{
return
{
optimizedVisible
:
false
,
remarks
:
''
remarks
:
''
,
detailInfo
:
''
,
//获取详情
suggestList
:[],
jobList
:[],
isShowRefuseResume
:
false
,
isShowPassResume
:
false
,
refuse_reason
:
''
,
reasonList
:
[]
};
},
methods
:
{
//获取拒绝原因列表
getResonList
()
{
applyRefuseReasons
().
then
(
res
=>
{
if
(
res
.
error
==
0
)
{
res
.
data
.
forEach
(
v
=>
{
this
.
reasonList
.
push
({
label
:
v
,
value
:
v
})
})
}
})
},
computed
:
{
//确认通过
surePassResume
()
{
resumePass
({
apply_id
:
Number
(
this
.
detailInfo
.
id
),
handle
:
'pass'
}).
then
(
res
=>
{
if
(
res
.
error
==
0
)
{
this
.
$message
.
success
(
'已通过成功!'
);
this
.
isShowPassResume
=
false
;
}
})
},
//确认拒绝简历
sureRefuseResume
()
{
resumeRefuse
({
apply_id
:
Number
(
this
.
detailInfo
.
id
),
handle
:
'refuse'
,
refuse_reason
:
this
.
refuse_reason
}).
then
(
res
=>
{
if
(
res
.
error
==
0
)
{
this
.
$message
.
success
(
'已拒绝成功!'
);
this
.
isShowRefuseResume
=
false
;
}
})
},
watch
:
{
jsGetAge
(
strBirthday
){
var
returnAge
;
var
strBirthdayArr
=
strBirthday
.
split
(
"-"
);
var
birthYear
=
strBirthdayArr
[
0
];
var
birthMonth
=
strBirthdayArr
[
1
];
var
birthDay
=
strBirthdayArr
[
2
];
let
d
=
new
Date
();
var
nowYear
=
d
.
getFullYear
();
var
nowMonth
=
d
.
getMonth
()
+
1
;
var
nowDay
=
d
.
getDate
();
if
(
nowYear
==
birthYear
){
returnAge
=
0
;
//同年 则为0岁
}
else
{
var
ageDiff
=
nowYear
-
birthYear
;
//年之差
if
(
ageDiff
>
0
){
if
(
nowMonth
==
birthMonth
)
{
var
dayDiff
=
nowDay
-
birthDay
;
//日之差
if
(
dayDiff
<
0
)
{
returnAge
=
ageDiff
-
1
;
}
else
{
returnAge
=
ageDiff
;
}
}
else
{
var
monthDiff
=
nowMonth
-
birthMonth
;
//月之差
if
(
monthDiff
<
0
)
{
returnAge
=
ageDiff
-
1
;
}
else
{
returnAge
=
ageDiff
;
}
}
}
else
{
returnAge
=
-
1
;
//返回-1 表示出生日期输入错误 晚于今天
}
}
return
returnAge
;
//返回周岁年龄
},
getDetail
(){
let
loading
=
Loading
.
service
({
target
:
document
.
querySelector
(
'.main-container'
),
text
:
'请求中...'
,
});
// this.$route.query.cv_token
let
data
=
{
utoken
:
this
.
$route
.
query
.
utoken
,
cv_token
:
"CV1577948246894fzJFS"
,
mode
:
0
}
resumeDetail
(
data
).
then
(
res
=>
{
loading
.
close
();
if
(
res
.
error
==
0
){
let
obj
=
{
...
res
.
data
,
age
:
this
.
jsGetAge
(
res
.
data
.
base_birthday
),
work_city
:
CodeToText
[
res
.
data
.
intention_area_id
.
slice
(
0
,
4
)
+
'00'
],
work_area
:
CodeToText
[
res
.
data
.
intention_area_id
],
job_name
:
this
.
jobList
[
res
.
data
.
intention_job
.
slice
(
0
,
6
)
+
'00'
][
res
.
data
.
intention_job
]
}
let
a1
=
this
.
jobList
[
res
.
data
.
intention_job
.
slice
(
0
,
4
)
+
'0000'
]
this
.
detailInfo
=
obj
;
}
}).
catch
()
},
created
()
{
//获取职位列表
getJobList
(){
return
new
Promise
((
resolve
,
reject
)
=>
{
getJobClassify
().
then
(
res
=>
{
if
(
res
.
error
==
0
){
this
.
jobList
=
res
.
data
;
resolve
(
true
)
}
}).
catch
();
}).
catch
(
error
=>
{
reject
(
error
)
})
},
},
async
created
()
{
await
this
.
getJobList
();
this
.
getResonList
();
this
.
getDetail
();
},
mounted
()
{
...
...
@@ -168,15 +294,6 @@
width
:
900px
;
margin
:
0
120px
;
}
.search-title
{
width
:
900px
;
/* margin:0 auto 10px; */
margin
:
0
120px
10px
120px
;
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
/* margin-bottom: 10px; */
}
.ml
{
margin-left
:
15px
;
}
...
...
@@ -243,4 +360,14 @@
.resume-edu-course
{
margin-right
:
100px
;
}
.suggest_title
,
.suggest_txt
{
line-height
:
30px
;
}
.suggest_txt
{
color
:
#666
;
}
.operation
{
margin-top
:
20px
;
text-align
:
center
;
}
</
style
>
src/views/resume/list.vue
View file @
2580a21
...
...
@@ -27,8 +27,8 @@
<div
class=
"position"
><span>
{{
scope
.
row
.
job_type
==
1
?
'全'
:
'兼'
}}
</span>
{{
scope
.
row
.
base_name
}}
</div>
<div
class=
"info"
>
<div>
{{
scope
.
row
.
work_city
}}
-
{{
scope
.
row
.
work_area
}}
</div>
<div>
{{
scope
.
row
.
edu
cation
}}
</div>
<div>
{{
scope
.
row
.
experience
}}
</div
>
<div>
{{
scope
.
row
.
edu
_experiences
[
0
].
qualifications
}}
</div>
<!--
<div>
{{
scope
.
row
.
experience
}}
</div>
--
>
</div>
</div>
</
template
>
...
...
@@ -43,24 +43,27 @@
</el-table-column>
<el-table-column
align=
"center"
prop=
"compensation"
show-overflow-tooltip
label=
"求职状态"
>
<
template
slot-scope=
"scope"
>
<div
class=
"table-inf0-h3"
>
{{
scope
.
row
.
compensation
}}
</div>
<div
class=
"table-inf0-h3"
v-if=
"scope.row.intention_current_status==1"
>
待业-求职中
</div>
<div
class=
"table-inf0-h3"
v-if=
"scope.row.intention_current_status==2"
>
正常工作-寻求机会
</div>
<div
class=
"table-inf0-h3"
v-if=
"scope.row.intention_current_status==3"
>
在业-暂不考虑机会
</div>
<div
class=
"table-inf0-h3"
v-if=
"scope.row.intention_current_status==4"
>
学业中-寻找机会
</div>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
prop=
"publishTime"
show-overflow-tooltip
label=
"职位名称"
>
<
template
slot-scope=
"scope"
>
<div
class=
"
compensation
"
>
{{
scope
.
row
.
job_name
}}
</div>
<div
class=
"
table-inf0-h3
"
>
{{
scope
.
row
.
job_name
}}
</div>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
prop=
"refreshTime"
show-overflow-tooltip
label=
"处理时间"
>
<
template
slot-scope=
"scope"
>
<div
class=
"table-inf0-h3"
>
{{
scope
.
row
.
publishTime
}}
</div>
<div
class=
"table-inf0-h3"
>
{{
scope
.
row
.
updated_at
}}
</div>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"操作"
width=
"200"
fixed=
"right"
>
<
template
slot-scope=
"scope"
>
<div>
<el-button
size=
"small"
type=
"text"
@
click=
"checkResume(scope.row.
id
)"
>
查看简历
</el-button>
<el-button
size=
"small"
type=
"text"
@
click=
"checkResume(scope.row.
cv_token_apply, scope.row.utoken
)"
>
查看简历
</el-button>
<span
class=
"segmenting-line"
>
|
</span>
<el-button
size=
"small"
type=
"text"
@
click=
"passResume(scope.row.id)"
>
通过
</el-button>
<span
class=
"segmenting-line"
>
|
</span>
...
...
@@ -85,11 +88,7 @@
<el-dialog
title=
"拒绝理由"
:visible
.
sync=
"isShowRefuseResume"
width=
"360px"
center
>
<div>
<el-select
v-model=
"refuse_reason"
placeholder=
"请选择"
style=
"width: 100%;margin-bottom: 20px"
>
<el-option
label=
"简历与职位不相符"
value=
"简历与职位不相符"
></el-option>
<el-option
label=
"过往履历与职位不相符"
value=
"过往履历与职位不相符"
></el-option>
<el-option
label=
"工作经验不足"
value=
"工作经验不足"
></el-option>
<el-option
label=
"学历未达到职位要求"
value=
"学历未达到职位要求"
></el-option>
<el-option
label=
"已招到合适人选"
value=
"已招到合适人选"
></el-option>
<el-option
v-for=
"item in reasonList"
:key=
"item.label"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
<div
class=
"operation"
>
<el-button
type=
"primary"
size=
"small"
@
click=
"sureRefuseResume"
>
确定
</el-button>
...
...
@@ -111,6 +110,8 @@
</template>
<
script
>
import
{
resumeList
,
resumePass
,
resumeRefuse
}
from
"@/api/resume"
import
{
applyRefuseReasons
}
from
"@/api/common"
;
import
{
CodeToText
}
from
'element-china-area-data'
;
export
default
{
data
()
{
return
{
...
...
@@ -125,10 +126,24 @@
isShowPassResume
:
false
,
isShowRefuseResume
:
false
,
refuse_reason
:
''
,
checked_id
:
''
checked_id
:
''
,
reasonList
:
[]
}
},
methods
:
{
//获取拒绝原因列表
getResonList
()
{
applyRefuseReasons
().
then
(
res
=>
{
if
(
res
.
error
==
0
)
{
res
.
data
.
forEach
(
v
=>
{
this
.
reasonList
.
push
({
label
:
v
,
value
:
v
})
})
}
})
},
//清空搜索条件
reset
()
{
this
.
queryForm
.
searchContent
=
''
;
...
...
@@ -143,9 +158,13 @@
return
'header-class-title'
},
checkResume
()
{
checkResume
(
id
,
utoken
)
{
let
routeUrl
=
this
.
$router
.
resolve
({
path
:
this
.
$route
.
path
+
"/detail/"
+
0
,
path
:
this
.
$route
.
path
+
"/detail/"
,
query
:
{
utoken
:
utoken
,
cv_token
:
id
}
});
window
.
open
(
routeUrl
.
href
,
'_blank'
);
},
...
...
@@ -173,7 +192,7 @@
sureRefuseResume
()
{
resumeRefuse
({
apply_id
:
Number
(
this
.
checked_id
),
handle
:
'
pass
'
,
handle
:
'
refuse
'
,
refuse_reason
:
this
.
refuse_reason
}).
then
(
res
=>
{
if
(
res
.
error
==
0
)
{
...
...
@@ -187,6 +206,7 @@
let
data
=
{
page
:
this
.
currentPage
,
page_size
:
this
.
page_size
,
apply_type
:
'self'
}
if
(
this
.
queryForm
.
status
)
{
data
.
status
=
this
.
queryForm
.
status
;
...
...
@@ -219,6 +239,7 @@
}
},
mounted
()
{
this
.
getResonList
();
this
.
getResumeList
();
}
}
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment