前端提交
This commit is contained in:
parent
c2696e5b1c
commit
4139d1b8d4
@ -114,6 +114,8 @@
|
|||||||
|
|
||||||
.backgroundcolor .ant-tree{ background-color: rgba(255, 255, 255, 0) !important; }
|
.backgroundcolor .ant-tree{ background-color: rgba(255, 255, 255, 0) !important; }
|
||||||
|
|
||||||
|
.textindent7{text-indent: 7px;}
|
||||||
|
|
||||||
.fontweight{font-weight: bold;}
|
.fontweight{font-weight: bold;}
|
||||||
.padding24 { padding: 24px; }
|
.padding24 { padding: 24px; }
|
||||||
.margin24 { margin: 24px; }
|
.margin24 { margin: 24px; }
|
||||||
|
@ -49,7 +49,6 @@ function AppLayOut() {
|
|||||||
|
|
||||||
// 鼠标移出
|
// 鼠标移出
|
||||||
const handlMouseLeave = () => {
|
const handlMouseLeave = () => {
|
||||||
console.log(11111)
|
|
||||||
setCollapsed(true)
|
setCollapsed(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ export default function PositionResponsble({ updataPosition, postdata }) {
|
|||||||
} else {
|
} else {
|
||||||
data['list'] = gatuserlist
|
data['list'] = gatuserlist
|
||||||
}
|
}
|
||||||
console.log(data)
|
// console.log(data)
|
||||||
setUserlist(data)
|
setUserlist(data)
|
||||||
setVisible(true)
|
setVisible(true)
|
||||||
},
|
},
|
||||||
|
@ -20,6 +20,7 @@ import {
|
|||||||
interviewupdate,
|
interviewupdate,
|
||||||
sendinterviewee,
|
sendinterviewee,
|
||||||
} from '../../util/requestURL'
|
} from '../../util/requestURL'
|
||||||
|
import PubSub from 'pubsub-js'
|
||||||
const { confirm } = Modal
|
const { confirm } = Modal
|
||||||
|
|
||||||
export default class CandidateTable extends Component {
|
export default class CandidateTable extends Component {
|
||||||
@ -100,6 +101,14 @@ export default class CandidateTable extends Component {
|
|||||||
}
|
}
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
this.PostInterviewwaiteinfind()
|
this.PostInterviewwaiteinfind()
|
||||||
|
this.updatacandidate = PubSub.subscribe('updatacandidate',(_,stateObj)=>{
|
||||||
|
this.props.updatainterviewstagenum()
|
||||||
|
this.PostInterviewwaiteinfind()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
componentWillUnmount(){
|
||||||
|
PubSub.unsubscribe(this.updatacandidate)
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidUpdate() {
|
componentDidUpdate() {
|
||||||
@ -651,7 +660,10 @@ export default class CandidateTable extends Component {
|
|||||||
onCancel={() => {
|
onCancel={() => {
|
||||||
this.setState({
|
this.setState({
|
||||||
interviewerInfo: false,
|
interviewerInfo: false,
|
||||||
})
|
},()=>{
|
||||||
|
this.props.updatainterviewstagenum()
|
||||||
|
this.PostInterviewwaiteinfind()
|
||||||
|
})
|
||||||
}}
|
}}
|
||||||
onEditresume={() => {
|
onEditresume={() => {
|
||||||
onEditresume()
|
onEditresume()
|
||||||
|
@ -39,5 +39,5 @@
|
|||||||
.upload-button-box button { width: 100%; }
|
.upload-button-box button { width: 100%; }
|
||||||
.upload-button-box .ant-upload-list {display: none;}
|
.upload-button-box .ant-upload-list {display: none;}
|
||||||
.resume-energy-box { display: flex; justify-content: space-between; }
|
.resume-energy-box { display: flex; justify-content: space-between; }
|
||||||
.resume-xq-box { height: 625px; overflow-x: hidden; overflow-y: auto; }
|
.resume-xq-box { width: 50%; height: 625px; overflow-x: hidden; overflow-y: auto; }
|
||||||
.width700 { width: 700px; }
|
.width700 { width: 700px; }
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
import React,{useEffect} from 'react'
|
import React,{useEffect} from 'react'
|
||||||
import './index.css'
|
import './index.css'
|
||||||
import { UploadOutlined } from '@ant-design/icons'
|
import { UploadOutlined } from '@ant-design/icons'
|
||||||
|
import memoryUtils from '../../../util/memoryUtils'
|
||||||
import { Button, message, Upload,Input } from 'antd'
|
import { Button, message, Upload,Input } from 'antd'
|
||||||
|
|
||||||
export default function EnclosureTabs({data, Tabsnum}) {
|
export default function EnclosureTabs({data, Tabsnum}) {
|
||||||
|
let userInfo = memoryUtils.userInfo
|
||||||
|
const token = userInfo.token_type + ' ' + userInfo.token || ''
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (Tabsnum === '6') {
|
if (Tabsnum === '6') {
|
||||||
// getoperatelog({ user_id: data }).then(
|
// getoperatelog({ user_id: data }).then(
|
||||||
@ -21,13 +23,14 @@ export default function EnclosureTabs({data, Tabsnum}) {
|
|||||||
|
|
||||||
const props = {
|
const props = {
|
||||||
name: 'file',
|
name: 'file',
|
||||||
|
// action: 'http://10.0.0.240:7800/api/v1/itr/resume_affix',
|
||||||
// action: 'http://myip.legu.cc:7800/api/v1/itr/resume_affix',
|
// action: 'http://myip.legu.cc:7800/api/v1/itr/resume_affix',
|
||||||
action: 'http://10.0.0.4:7800/api/v1/itr/resume_affix',
|
action: 'http://10.0.0.4:7800/api/v1/itr/resume_affix',
|
||||||
data:{
|
data:{
|
||||||
uid: data.uid
|
uid: data
|
||||||
},
|
},
|
||||||
headers: {
|
headers: {
|
||||||
authorization: 'authorization-text',
|
Authorization: token,
|
||||||
},
|
},
|
||||||
|
|
||||||
onChange(info) {
|
onChange(info) {
|
||||||
|
@ -9,31 +9,30 @@ import storageUtils from '../../../util/storageUtils'
|
|||||||
import './index.css'
|
import './index.css'
|
||||||
const { TextArea } = Input
|
const { TextArea } = Input
|
||||||
|
|
||||||
export default function Feedback({ visible, onClose, uid }) {
|
export default function Feedback({ visible, onClose, uid,setuserid }) {
|
||||||
var userInfo = storageUtils.getUser()
|
var userInfo = storageUtils.getUser()
|
||||||
const [voice, setvoice] = useState(1)
|
const [voice, setvoice] = useState(1)
|
||||||
const [thought, setthought] = useState(1)
|
const [thought, setthought] = useState(1)
|
||||||
const [diathesis, setdiathesis] = useState(1)
|
const [diathesis, setdiathesis] = useState(1)
|
||||||
const [evaluate, setevaluate] = useState('')
|
const [evaluate, setevaluate] = useState('')
|
||||||
const [teacherback, setteacherback] = useState(1)
|
const [teacherback, setteacherback] = useState(1)
|
||||||
const [isupdata, setisupdata] = useState(0)
|
// const [isupdata, setisupdata] = useState(0)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (uid) {
|
if (uid) {
|
||||||
getteacher({ uid: uid }).then(
|
getteacher({ uid: uid }).then(
|
||||||
(res) => {
|
(res) => {
|
||||||
if (res.msg === 'ok') {
|
if (res.msg === 'ok') {
|
||||||
if (res.data.uid) {
|
if (res.data[0].uid) {
|
||||||
const user_id = userInfo.user_id
|
const user_id = setuserid.user_id
|
||||||
if (res.data['survey']['']) {
|
if (res.data[0]['survey'][user_id]) {
|
||||||
setisupdata(1)
|
// setisupdata(1)
|
||||||
setvoice(res.data['survey'][user_id].voice || 1)
|
setvoice(res.data[0]['survey'][user_id].voice || 1)
|
||||||
setthought(res.data['survey'][user_id].thought || 1)
|
setthought(res.data[0]['survey'][user_id].thought || 1)
|
||||||
setdiathesis(
|
setdiathesis(
|
||||||
res.data['survey'][user_id].diathesis || 1
|
res.data[0]['survey'][user_id].diathesis || 1
|
||||||
)
|
)
|
||||||
setevaluate(res.data['survey'][user_id].evaluate)
|
setevaluate(res.data[0]['survey'][user_id].evaluate)
|
||||||
setteacherback(res.data['survey'][user_id].teacher_back)
|
setteacherback(res.data[0]['survey'][user_id].teacher_back)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -47,47 +46,51 @@ export default function Feedback({ visible, onClose, uid }) {
|
|||||||
|
|
||||||
const handelFeedback = () => {
|
const handelFeedback = () => {
|
||||||
const date = {
|
const date = {
|
||||||
name: userInfo.name,
|
user_id:setuserid.user_id,
|
||||||
|
name: setuserid.name,
|
||||||
voice,
|
voice,
|
||||||
thought,
|
thought,
|
||||||
diathesis,
|
diathesis,
|
||||||
evaluate,
|
evaluate,
|
||||||
teacher_back: teacherback,
|
teacher_back: teacherback
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isupdata === 0) {
|
// if (isupdata === 0) {
|
||||||
interviewteacher({
|
// interviewteacher({
|
||||||
uid: uid,
|
// uid: uid,
|
||||||
survey: {
|
// survey: {
|
||||||
[userInfo.user_id]: date,
|
// [setuserid.user_id]: date,
|
||||||
},
|
// },
|
||||||
}).then(
|
// }).then(
|
||||||
(res) => {
|
// (res) => {
|
||||||
if (res.msg === 'ok') {
|
// if (res.msg === 'ok') {
|
||||||
message.success('添加成功')
|
// message.success('添加成功')
|
||||||
onClose()
|
// onClose()
|
||||||
}
|
// }
|
||||||
},
|
// },
|
||||||
(err) => {
|
// (err) => {
|
||||||
message.error('网络加载失败,请稍后再试')
|
// message.error('网络加载失败,请稍后再试')
|
||||||
}
|
// }
|
||||||
)
|
// )
|
||||||
} else {
|
// } else {
|
||||||
upteacher({
|
upteacher({
|
||||||
uid: uid,
|
uid: uid,
|
||||||
[userInfo.user_id]: date,
|
survey: date,
|
||||||
|
relevancy_id: setuserid.relevancy_id
|
||||||
}).then(
|
}).then(
|
||||||
(res) => {
|
(res) => {
|
||||||
if (res.msg === 'ok') {
|
if (res.msg === 'ok') {
|
||||||
message.success('修改成功')
|
message.success('修改成功')
|
||||||
onClose()
|
onClose()
|
||||||
}
|
}else {
|
||||||
|
message.success(res.msg)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
message.error('网络加载失败,请稍后再试')
|
message.error('网络加载失败,请稍后再试')
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -1,4 +1,9 @@
|
|||||||
import React, { useState, useEffect } from 'react'
|
import React, {
|
||||||
|
useState,
|
||||||
|
useEffect,
|
||||||
|
forwardRef,
|
||||||
|
useImperativeHandle,
|
||||||
|
} from 'react'
|
||||||
import { Button, Collapse, Divider, message, Tag, Empty } from 'antd'
|
import { Button, Collapse, Divider, message, Tag, Empty } from 'antd'
|
||||||
import Enterthenextstage from '../../Enterthenextstage'
|
import Enterthenextstage from '../../Enterthenextstage'
|
||||||
import { record, teacherstate } from '../../../util/requestURL'
|
import { record, teacherstate } from '../../../util/requestURL'
|
||||||
@ -13,29 +18,34 @@ import {
|
|||||||
|
|
||||||
const { Panel } = Collapse
|
const { Panel } = Collapse
|
||||||
|
|
||||||
export default function InterviewTabs({
|
const InterviewTabs = ({ data, Tabsnum, setisfeedback, seefeedback },ref) => {
|
||||||
data,
|
|
||||||
Tabsnum,
|
|
||||||
setisfeedback,
|
|
||||||
seefeedback,
|
|
||||||
}) {
|
|
||||||
const [isenterthenextstage, setisenterthenextstage] = useState(false)
|
const [isenterthenextstage, setisenterthenextstage] = useState(false)
|
||||||
const [datalist, setdatalist] = useState([])
|
const [datalist, setdatalist] = useState([])
|
||||||
let userinfo = storageUtils.getUser()
|
let userinfo = storageUtils.getUser()
|
||||||
|
|
||||||
|
console.log(ref)
|
||||||
|
useImperativeHandle(ref, () => ({
|
||||||
|
getData: updatarecord
|
||||||
|
}))
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (Tabsnum === '2') {
|
if (Tabsnum === '2') {
|
||||||
record({ uid: data.uid }).then(
|
updatarecord()
|
||||||
(res) => {
|
|
||||||
// console.log(res)
|
|
||||||
setdatalist(res.data)
|
|
||||||
},
|
|
||||||
(err) => {
|
|
||||||
message.error('网络错误,请稍后再试')
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}, [Tabsnum])
|
}, [Tabsnum])
|
||||||
|
|
||||||
|
const updatarecord = () => {
|
||||||
|
record({ uid: data.uid }).then(
|
||||||
|
(res) => {
|
||||||
|
// console.log(res)
|
||||||
|
setdatalist(res.data)
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
message.error('网络错误,请稍后再试')
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
const handelFeedback = (record) => {
|
const handelFeedback = (record) => {
|
||||||
teacherstate({
|
teacherstate({
|
||||||
user_id: [record.interview_id],
|
user_id: [record.interview_id],
|
||||||
@ -134,7 +144,7 @@ export default function InterviewTabs({
|
|||||||
/>{' '}
|
/>{' '}
|
||||||
未评估
|
未评估
|
||||||
</div>
|
</div>
|
||||||
) : item.teacher_back ===
|
) : items.teacher_back ===
|
||||||
1 ? (
|
1 ? (
|
||||||
<div>
|
<div>
|
||||||
<LikeOutlined
|
<LikeOutlined
|
||||||
@ -144,7 +154,7 @@ export default function InterviewTabs({
|
|||||||
/>{' '}
|
/>{' '}
|
||||||
满意
|
满意
|
||||||
</div>
|
</div>
|
||||||
) : item.teacher_back ===
|
) : items.teacher_back ===
|
||||||
2 ? (
|
2 ? (
|
||||||
<div>
|
<div>
|
||||||
<LikeOutlined
|
<LikeOutlined
|
||||||
@ -154,7 +164,7 @@ export default function InterviewTabs({
|
|||||||
/>{' '}
|
/>{' '}
|
||||||
非常满意
|
非常满意
|
||||||
</div>
|
</div>
|
||||||
) : item.teacher_back ===
|
) : items.teacher_back ===
|
||||||
3 ? (
|
3 ? (
|
||||||
<div>
|
<div>
|
||||||
<DislikeOutlined
|
<DislikeOutlined
|
||||||
@ -178,8 +188,7 @@ export default function InterviewTabs({
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
{item.back_status ===
|
{!items.type ? (
|
||||||
0 ? (
|
|
||||||
<div>
|
<div>
|
||||||
<Button
|
<Button
|
||||||
type="link"
|
type="link"
|
||||||
@ -191,12 +200,20 @@ export default function InterviewTabs({
|
|||||||
>
|
>
|
||||||
催促反馈
|
催促反馈
|
||||||
</Button>
|
</Button>
|
||||||
{userinfo.id ===
|
{userinfo.user_id ===
|
||||||
items.user_id || userinfo.name === 'root' ? (
|
items.user_id ||
|
||||||
|
userinfo.name ===
|
||||||
|
'root' ? (
|
||||||
<Button
|
<Button
|
||||||
type="link"
|
type="link"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setisfeedback()
|
setisfeedback(
|
||||||
|
{
|
||||||
|
...items,
|
||||||
|
relevancy_id:
|
||||||
|
item.relevancy_id,
|
||||||
|
}
|
||||||
|
)
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
填写反馈
|
填写反馈
|
||||||
@ -210,7 +227,13 @@ export default function InterviewTabs({
|
|||||||
<Button
|
<Button
|
||||||
type="link"
|
type="link"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
seefeedback()
|
seefeedback(
|
||||||
|
{
|
||||||
|
...items,
|
||||||
|
relevancy_id:
|
||||||
|
item.relevancy_id,
|
||||||
|
}
|
||||||
|
)
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
查看反馈
|
查看反馈
|
||||||
@ -255,3 +278,5 @@ export default function InterviewTabs({
|
|||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export default forwardRef(InterviewTabs)
|
||||||
|
@ -31,7 +31,7 @@ import {
|
|||||||
const { Option } = Select
|
const { Option } = Select
|
||||||
const dateFormat = 'YYYY/MM/DD'
|
const dateFormat = 'YYYY/MM/DD'
|
||||||
|
|
||||||
export default function OfferTabs({ data }) {
|
export default function OfferTabs({ data , updata }) {
|
||||||
const [OfferPostList, setOfferPostList] = useState([]) //offer发送记录
|
const [OfferPostList, setOfferPostList] = useState([]) //offer发送记录
|
||||||
const [Offerstate, setOfferstate] = useState(false)
|
const [Offerstate, setOfferstate] = useState(false)
|
||||||
const [offerdata, setoffdata] = useState({
|
const [offerdata, setoffdata] = useState({
|
||||||
@ -92,8 +92,11 @@ export default function OfferTabs({ data }) {
|
|||||||
job_id: data.job_id,
|
job_id: data.job_id,
|
||||||
}).then(
|
}).then(
|
||||||
(res) => {
|
(res) => {
|
||||||
console.log(res.data)
|
|
||||||
// setOfferPostList(res.data)
|
if(res.msg === 'ok'){
|
||||||
|
message.success('操作成功')
|
||||||
|
updata();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
message.error('网络加载错误,请稍后再试')
|
message.error('网络加载错误,请稍后再试')
|
||||||
@ -153,7 +156,15 @@ export default function OfferTabs({ data }) {
|
|||||||
|
|
||||||
<div className="OfferTabs-title-box">入职记录</div>
|
<div className="OfferTabs-title-box">入职记录</div>
|
||||||
<div className="OfferTabs-border-box display">
|
<div className="OfferTabs-border-box display">
|
||||||
<span>尚未确定候选人是否入职</span>
|
{
|
||||||
|
data.interview_stage === 7 ? (
|
||||||
|
<span className=''>已入职</span>
|
||||||
|
): data.interview_stage === 11 ? (
|
||||||
|
<span className=''>已淘汰</span>
|
||||||
|
): (
|
||||||
|
<span className=''>尚未确定候选人是否入职</span>
|
||||||
|
)
|
||||||
|
}
|
||||||
<div className="">
|
<div className="">
|
||||||
<Button
|
<Button
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
@ -164,7 +175,7 @@ export default function OfferTabs({ data }) {
|
|||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
postupdataentry(6)
|
postupdataentry(11)
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
放弃入职
|
放弃入职
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import React, { useState, useEffect } from 'react'
|
import React, { useState, useEffect, useRef } from 'react'
|
||||||
import { Button, Form, Input, Modal, Tabs, Badge, message, Avatar } from 'antd'
|
import { Button, Form, Input, Modal, Tabs, Badge, message, Avatar } from 'antd'
|
||||||
import Steptone from '../Steptone'
|
import Steptone from '../Steptone'
|
||||||
import InterviewTabs from './InterviewTabs'
|
import InterviewTabs from './InterviewTabs'
|
||||||
@ -37,6 +37,8 @@ export default function InterviewerInfoPop({
|
|||||||
const [isremarks, setisremarks] = useState(false)
|
const [isremarks, setisremarks] = useState(false)
|
||||||
const [Tabsnum, setTabsnum] = useState(0)
|
const [Tabsnum, setTabsnum] = useState(0)
|
||||||
const [isfeedback, setisfeedback] = useState(false)
|
const [isfeedback, setisfeedback] = useState(false)
|
||||||
|
const [userid , setuserid] = useState();
|
||||||
|
const updatarecord = useRef()
|
||||||
|
|
||||||
const onChange = (key) => {
|
const onChange = (key) => {
|
||||||
// console.log(key)
|
// console.log(key)
|
||||||
@ -87,6 +89,11 @@ export default function InterviewerInfoPop({
|
|||||||
const onClose = () => {
|
const onClose = () => {
|
||||||
setisremarks(false)
|
setisremarks(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//添加反馈后更新面试信息
|
||||||
|
const updatarecordlist = ()=>{
|
||||||
|
updatarecord.current.getData();
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
@ -492,18 +499,24 @@ export default function InterviewerInfoPop({
|
|||||||
<InterviewTabs
|
<InterviewTabs
|
||||||
data={candidateinfo}
|
data={candidateinfo}
|
||||||
Tabsnum={Tabsnum}
|
Tabsnum={Tabsnum}
|
||||||
setisfeedback={() => {
|
setuserid= {userid}
|
||||||
|
ref={updatarecord}
|
||||||
|
setisfeedback={(userid) => {
|
||||||
setisfeedback(true)
|
setisfeedback(true)
|
||||||
|
setuserid(userid)
|
||||||
}}
|
}}
|
||||||
seefeedback={() => {
|
seefeedback={(userid) => {
|
||||||
setisfeedback(true)
|
setisfeedback(true)
|
||||||
postfindcriterion()
|
postfindcriterion()
|
||||||
|
setuserid(userid)
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</TabPane>
|
</TabPane>
|
||||||
<TabPane tab="Offer/录用" key="4">
|
<TabPane tab="Offer/录用" key="4">
|
||||||
<OfferTabs data={candidateinfo} />
|
<OfferTabs data={candidateinfo} updata={()=>{
|
||||||
|
postfindcriterion()
|
||||||
|
}}/>
|
||||||
</TabPane>
|
</TabPane>
|
||||||
|
|
||||||
<TabPane
|
<TabPane
|
||||||
@ -551,7 +564,7 @@ export default function InterviewerInfoPop({
|
|||||||
type="primary"
|
type="primary"
|
||||||
block
|
block
|
||||||
onClick={handelNextstage}
|
onClick={handelNextstage}
|
||||||
disabled={candidateinfo.interview_stage === 3 && candidateinfo.teacher_state !== 2? true:false}
|
disabled={candidateinfo.interview_stage === 3 && candidateinfo.teacher_state !== 2? true: candidateinfo.interview_stage === 7 || candidateinfo.interview_stage === 11 ? true : false}
|
||||||
>
|
>
|
||||||
进入下一阶段
|
进入下一阶段
|
||||||
</Button>
|
</Button>
|
||||||
@ -559,7 +572,7 @@ export default function InterviewerInfoPop({
|
|||||||
''
|
''
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{candidateinfo.teacher_state != 2 ? (
|
{/* {candidateinfo.teacher_state != 2 ? (
|
||||||
<Button
|
<Button
|
||||||
block
|
block
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
@ -579,7 +592,7 @@ export default function InterviewerInfoPop({
|
|||||||
>
|
>
|
||||||
修改反馈
|
修改反馈
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)} */}
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
block
|
block
|
||||||
@ -629,9 +642,11 @@ export default function InterviewerInfoPop({
|
|||||||
<Feedback
|
<Feedback
|
||||||
visible={isfeedback}
|
visible={isfeedback}
|
||||||
uid={candidateinfo.uid}
|
uid={candidateinfo.uid}
|
||||||
|
setuserid= {userid}
|
||||||
onClose={() => {
|
onClose={() => {
|
||||||
setisfeedback(false)
|
setisfeedback(false)
|
||||||
postfindcriterion()
|
postfindcriterion()
|
||||||
|
updatarecordlist()
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
.StandardResume-box .ant-row { margin-left: 0 !important; margin-right: 0 !important; }
|
||||||
|
|
||||||
|
.resume-pop-box .ant-tabs-content-holder { overflow-y: scroll; max-height: calc( 100vh - 375px); }
|
||||||
|
.from-label {padding: 0 0 8px; line-height: 1.5715; white-space: initial; text-align: left; display: inline-block; margin-top: 12px;}
|
||||||
|
.textalignright { text-align: right; }
|
||||||
|
.select-box div {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.StandardResume-box { width: 100%; }
|
540
src/components/Manualaddcandidate/StandardResume/index.jsx
Normal file
540
src/components/Manualaddcandidate/StandardResume/index.jsx
Normal file
@ -0,0 +1,540 @@
|
|||||||
|
import React, { useState, useEffect } from 'react'
|
||||||
|
import {
|
||||||
|
Form,
|
||||||
|
Input,
|
||||||
|
Row,
|
||||||
|
Col,
|
||||||
|
Divider,
|
||||||
|
Button,
|
||||||
|
Space,
|
||||||
|
DatePicker,
|
||||||
|
Select,
|
||||||
|
} from 'antd'
|
||||||
|
import { PlusOutlined, MinusCircleOutlined } from '@ant-design/icons'
|
||||||
|
import 'moment/locale/zh-cn'
|
||||||
|
import locale from 'antd/es/date-picker/locale/zh_CN'
|
||||||
|
import moment from 'moment'
|
||||||
|
import './index.css'
|
||||||
|
const dateFormat = 'YYYY-MM-DD'
|
||||||
|
|
||||||
|
export default function StandardResume({ data, updataPosition }) {
|
||||||
|
const [form] = Form.useForm()
|
||||||
|
const { TextArea } = Input
|
||||||
|
const { Option } = Select
|
||||||
|
const { RangePicker } = DatePicker
|
||||||
|
const typelist = {
|
||||||
|
work_list: {
|
||||||
|
company_name: '',
|
||||||
|
duty: '',
|
||||||
|
position_name: '',
|
||||||
|
},
|
||||||
|
project_undergo: {
|
||||||
|
time: '',
|
||||||
|
name: '',
|
||||||
|
work: '',
|
||||||
|
comment: '',
|
||||||
|
duty: '',
|
||||||
|
},
|
||||||
|
language: {
|
||||||
|
language_name: '',
|
||||||
|
has_sleep: 1,
|
||||||
|
reading: 1,
|
||||||
|
writing: 1,
|
||||||
|
},
|
||||||
|
remembrance: {
|
||||||
|
prize_name: '',
|
||||||
|
prize_time: '',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const [worklist, setworklist] = useState([])
|
||||||
|
const [projectundergo, setprojectundergo] = useState([])
|
||||||
|
const [language, setlanguage] = useState([])
|
||||||
|
const [remembrance, setremembrance] = useState([])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
// updataPosition({...data.data,work_list:worklist,project_undergo:projectundergo,language_list:language,remembrance_list:remembrance})
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
const onValuesChange = (type, e, valuestype, index) => {
|
||||||
|
switch (type) {
|
||||||
|
case 'work_list':
|
||||||
|
const newworklist = worklist.map((item, key) => {
|
||||||
|
if (index === key) return { ...item, [valuestype]: e }
|
||||||
|
else return item
|
||||||
|
})
|
||||||
|
setworklist(newworklist)
|
||||||
|
updataPosition({ work_list: newworklist })
|
||||||
|
break
|
||||||
|
case 'project_undergo':
|
||||||
|
const newprojectundergo = projectundergo.map((item, key) => {
|
||||||
|
if (index === key)
|
||||||
|
return valuestype !== 'time'
|
||||||
|
? { ...item, [valuestype]: e }
|
||||||
|
: { ...item, [valuestype]: e }
|
||||||
|
else return item
|
||||||
|
})
|
||||||
|
setprojectundergo(newprojectundergo)
|
||||||
|
updataPosition({ project_undergo: newprojectundergo })
|
||||||
|
break
|
||||||
|
case 'language':
|
||||||
|
const newlanguage = language.map((item, key) => {
|
||||||
|
if (index === key) return { ...item, [valuestype]: e }
|
||||||
|
else return item
|
||||||
|
})
|
||||||
|
setlanguage(newlanguage)
|
||||||
|
updataPosition({ language_list: newlanguage })
|
||||||
|
break
|
||||||
|
case 'remembrance':
|
||||||
|
const newremembrance = remembrance.map((item, key) => {
|
||||||
|
if (index === key)
|
||||||
|
return valuestype !== 'prize_time'
|
||||||
|
? { ...item, [valuestype]: e }
|
||||||
|
: { ...item, [valuestype]: e }
|
||||||
|
else return item
|
||||||
|
})
|
||||||
|
setremembrance(newremembrance)
|
||||||
|
updataPosition({ remembrance_list: newremembrance })
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const add = (type) => {
|
||||||
|
switch (type) {
|
||||||
|
case 'work_list':
|
||||||
|
const newworklist = [...worklist, typelist[type]]
|
||||||
|
setworklist(newworklist)
|
||||||
|
break
|
||||||
|
case 'project_undergo':
|
||||||
|
const newprojectundergo = [...projectundergo, typelist[type]]
|
||||||
|
setprojectundergo(newprojectundergo)
|
||||||
|
break
|
||||||
|
case 'language':
|
||||||
|
const newlanguage = [...language, typelist[type]]
|
||||||
|
setlanguage(newlanguage)
|
||||||
|
break
|
||||||
|
case 'remembrance':
|
||||||
|
const newremembrance = [...remembrance, typelist[type]]
|
||||||
|
setremembrance(newremembrance)
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const remove = (type, index) => {
|
||||||
|
switch (type) {
|
||||||
|
case 'work_list':
|
||||||
|
const newworklist = worklist.filter((item, key) => {
|
||||||
|
return key !== index
|
||||||
|
})
|
||||||
|
setworklist(newworklist)
|
||||||
|
break
|
||||||
|
case 'project_undergo':
|
||||||
|
const newprojectundergo = projectundergo.filter((item, key) => {
|
||||||
|
return key !== index
|
||||||
|
})
|
||||||
|
setprojectundergo(newprojectundergo)
|
||||||
|
break
|
||||||
|
case 'language':
|
||||||
|
const newlanguage = language.filter((item, key) => {
|
||||||
|
return key !== index
|
||||||
|
})
|
||||||
|
setlanguage(newlanguage)
|
||||||
|
break
|
||||||
|
case 'remembrance':
|
||||||
|
const newremembrance = remembrance.filter((item, key) => {
|
||||||
|
return key !== index
|
||||||
|
})
|
||||||
|
setremembrance(newremembrance)
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<div className="StandardResume-box">
|
||||||
|
{/* <Form layout="vertical" onValuesChange={onValuesChange}> */}
|
||||||
|
<Divider orientation="left">工作经验</Divider>
|
||||||
|
|
||||||
|
{worklist.map((item, key) => {
|
||||||
|
return (
|
||||||
|
<Row gutter={24} align="baseline" key={key}>
|
||||||
|
<Col span={11} className="marginbottom10">
|
||||||
|
<label className="from-label">公司名称</label>
|
||||||
|
<Input
|
||||||
|
placeholder="请输入公司名称"
|
||||||
|
value={item.company_name}
|
||||||
|
onChange={(e) => {
|
||||||
|
onValuesChange(
|
||||||
|
'work_list',
|
||||||
|
e.target.value,
|
||||||
|
'company_name',
|
||||||
|
key
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
<Col span={11} className="marginbottom10">
|
||||||
|
<label className="from-label">职位名称</label>
|
||||||
|
<Input
|
||||||
|
placeholder="请输入职位名称"
|
||||||
|
value={item.position_name}
|
||||||
|
onChange={(e) => {
|
||||||
|
onValuesChange(
|
||||||
|
'work_list',
|
||||||
|
e.target.value,
|
||||||
|
'position_name',
|
||||||
|
key
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
<Col span={2} className="textalignright">
|
||||||
|
<MinusCircleOutlined
|
||||||
|
onClick={() => remove('work_list', key)}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
<Col span={24} className="marginbottom10">
|
||||||
|
<label className="from-label">工作职责</label>
|
||||||
|
<TextArea
|
||||||
|
rows={4}
|
||||||
|
placeholder="请输入工作职责"
|
||||||
|
value={item.duty}
|
||||||
|
onChange={(e) => {
|
||||||
|
onValuesChange(
|
||||||
|
'work_list',
|
||||||
|
e.target.value,
|
||||||
|
'duty',
|
||||||
|
key
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
)
|
||||||
|
})}
|
||||||
|
<Col span={24}>
|
||||||
|
<Form.Item>
|
||||||
|
<Button
|
||||||
|
type="dashed"
|
||||||
|
onClick={() => add('work_list')}
|
||||||
|
block
|
||||||
|
icon={<PlusOutlined />}
|
||||||
|
>
|
||||||
|
添加
|
||||||
|
</Button>
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
|
||||||
|
<Divider orientation="left">项目经验</Divider>
|
||||||
|
{projectundergo.map((item, key) => {
|
||||||
|
return (
|
||||||
|
<Row key={key} gutter={24} align="baseline">
|
||||||
|
<Col span={12} className="marginbottom10">
|
||||||
|
<label className="from-label">起止时间 </label>
|
||||||
|
<div>
|
||||||
|
<RangePicker
|
||||||
|
locale={locale}
|
||||||
|
picker="month"
|
||||||
|
allowClear={false}
|
||||||
|
value={
|
||||||
|
item.time.length > 0
|
||||||
|
? [
|
||||||
|
moment(
|
||||||
|
item.time.split(
|
||||||
|
'/'
|
||||||
|
)[0],
|
||||||
|
dateFormat
|
||||||
|
),
|
||||||
|
moment(
|
||||||
|
item.time.split(
|
||||||
|
'/'
|
||||||
|
)[1],
|
||||||
|
dateFormat
|
||||||
|
),
|
||||||
|
]
|
||||||
|
: ''
|
||||||
|
}
|
||||||
|
onChange={(date, dateString) => {
|
||||||
|
console.log(dateString)
|
||||||
|
onValuesChange(
|
||||||
|
'project_undergo',
|
||||||
|
dateString[0] +
|
||||||
|
'/' +
|
||||||
|
dateString[1],
|
||||||
|
'time',
|
||||||
|
key
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</Col>
|
||||||
|
<Col span={12} className="textalignright">
|
||||||
|
<MinusCircleOutlined
|
||||||
|
onClick={() =>
|
||||||
|
remove('project_undergo', key)
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
|
||||||
|
<Col span={12} className="marginbottom10">
|
||||||
|
<label className="from-label">项目名称</label>
|
||||||
|
<Input
|
||||||
|
placeholder="参与项目"
|
||||||
|
onChange={(e) => {
|
||||||
|
onValuesChange(
|
||||||
|
'project_undergo',
|
||||||
|
e.target.value,
|
||||||
|
'name',
|
||||||
|
key
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
|
||||||
|
<Col span={12} className="marginbottom10">
|
||||||
|
<label className="from-label">职务</label>
|
||||||
|
<Input
|
||||||
|
placeholder="请输入职务名称"
|
||||||
|
onChange={(e) => {
|
||||||
|
onValuesChange(
|
||||||
|
'project_undergo',
|
||||||
|
e.target.value,
|
||||||
|
'work',
|
||||||
|
key
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
|
||||||
|
<Col span={24} className="marginbottom10">
|
||||||
|
<label className="from-label">项目介绍</label>
|
||||||
|
<TextArea
|
||||||
|
rows={4}
|
||||||
|
placeholder="内容"
|
||||||
|
onChange={(e) => {
|
||||||
|
onValuesChange(
|
||||||
|
'project_undergo',
|
||||||
|
e.target.value,
|
||||||
|
'comment',
|
||||||
|
key
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
|
||||||
|
<Col span={24} className="marginbottom10">
|
||||||
|
<label className="from-label">项目中职责</label>
|
||||||
|
<TextArea
|
||||||
|
rows={4}
|
||||||
|
placeholder="项目中职责"
|
||||||
|
onChange={(e) => {
|
||||||
|
onValuesChange(
|
||||||
|
'project_undergo',
|
||||||
|
e.target.value,
|
||||||
|
'duty',
|
||||||
|
key
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
)
|
||||||
|
})}
|
||||||
|
<Col span={24}>
|
||||||
|
<Form.Item>
|
||||||
|
<Button
|
||||||
|
type="dashed"
|
||||||
|
onClick={() => add('project_undergo')}
|
||||||
|
block
|
||||||
|
icon={<PlusOutlined />}
|
||||||
|
>
|
||||||
|
添加
|
||||||
|
</Button>
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
|
||||||
|
<Divider orientation="left">语言能力</Divider>
|
||||||
|
{language.map((item, key) => {
|
||||||
|
return (
|
||||||
|
<Row key={key} gutter={24} align="baseline">
|
||||||
|
<Col span={11} className="marginbottom10">
|
||||||
|
<label className="from-label">语言类型</label>
|
||||||
|
<Input
|
||||||
|
placeholder="请输入掌握语言类型"
|
||||||
|
onChange={(e) => {
|
||||||
|
onValuesChange(
|
||||||
|
'language',
|
||||||
|
e.target.value,
|
||||||
|
'language_name',
|
||||||
|
key
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
|
||||||
|
<Col span={11} className="marginbottom10">
|
||||||
|
<label className="from-label">掌握程度</label>
|
||||||
|
<div className="select-box">
|
||||||
|
<Select
|
||||||
|
placeholder="请选择"
|
||||||
|
onChange={(e) => {
|
||||||
|
onValuesChange(
|
||||||
|
'language',
|
||||||
|
e,
|
||||||
|
'has_sleep',
|
||||||
|
key
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Option value={'初级'}>初级</Option>
|
||||||
|
<Option value={'中级'}>中级</Option>
|
||||||
|
<Option value={'高级'}>高级</Option>
|
||||||
|
</Select>
|
||||||
|
</div>
|
||||||
|
</Col>
|
||||||
|
|
||||||
|
<Col span={2} className="textalignright">
|
||||||
|
<MinusCircleOutlined
|
||||||
|
onClick={() => remove('language', key)}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
|
||||||
|
<Col span={11} className="marginbottom10">
|
||||||
|
<label className="from-label">听说</label>
|
||||||
|
<div className="select-box">
|
||||||
|
<Select
|
||||||
|
placeholder="请选择"
|
||||||
|
onChange={(e) => {
|
||||||
|
onValuesChange(
|
||||||
|
'language',
|
||||||
|
e,
|
||||||
|
'reading',
|
||||||
|
key
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Option value={'初级'}>初级</Option>
|
||||||
|
<Option value={'中级'}>中级</Option>
|
||||||
|
<Option value={'高级'}>高级</Option>
|
||||||
|
</Select>
|
||||||
|
</div>
|
||||||
|
</Col>
|
||||||
|
<Col span={11} className="marginbottom10">
|
||||||
|
<label className="from-label">读写</label>
|
||||||
|
<div className="select-box">
|
||||||
|
<Select
|
||||||
|
placeholder="请选择"
|
||||||
|
onChange={(e) => {
|
||||||
|
onValuesChange(
|
||||||
|
'language',
|
||||||
|
e,
|
||||||
|
'writing',
|
||||||
|
key
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Option value={'初级'}>初级</Option>
|
||||||
|
<Option value={'中级'}>中级</Option>
|
||||||
|
<Option value={'高级'}>高级</Option>
|
||||||
|
</Select>
|
||||||
|
</div>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
)
|
||||||
|
})}
|
||||||
|
<Col span={24}>
|
||||||
|
<Form.Item>
|
||||||
|
<Button
|
||||||
|
type="dashed"
|
||||||
|
onClick={() => add('language')}
|
||||||
|
block
|
||||||
|
icon={<PlusOutlined />}
|
||||||
|
>
|
||||||
|
添加
|
||||||
|
</Button>
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
<Divider orientation="left">自我描述</Divider>
|
||||||
|
<Row gutter={24} align="baseline">
|
||||||
|
<Col span={24}>
|
||||||
|
<label className="from-label">自我描述</label>
|
||||||
|
<TextArea
|
||||||
|
rows={4}
|
||||||
|
placeholder="请输入自我描述"
|
||||||
|
onChange={(e) => {
|
||||||
|
updataPosition({ review: e.target.value })
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
<Divider orientation="left">获奖经历</Divider>
|
||||||
|
{remembrance.map((item, key) => {
|
||||||
|
return (
|
||||||
|
<Row key={key} gutter={24} align="baseline">
|
||||||
|
<Col span={11} className="marginbottom10">
|
||||||
|
<label className="from-label">获奖时间</label>
|
||||||
|
<div className="select-box">
|
||||||
|
<DatePicker
|
||||||
|
locale={locale}
|
||||||
|
onChange={(date, dateString) => {
|
||||||
|
onValuesChange(
|
||||||
|
'remembrance',
|
||||||
|
dateString[0],
|
||||||
|
'prize_time',
|
||||||
|
key
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</Col>
|
||||||
|
|
||||||
|
<Col span={11} className="marginbottom10">
|
||||||
|
<label className="from-label">奖项名称</label>
|
||||||
|
<Input
|
||||||
|
placeholder="请输入奖项名称"
|
||||||
|
onChange={(e) => {
|
||||||
|
onValuesChange(
|
||||||
|
'remembrance',
|
||||||
|
e.target.value,
|
||||||
|
'prize_name',
|
||||||
|
key
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
|
||||||
|
<Col span={2} className="textalignright">
|
||||||
|
<Form.Item label=" ">
|
||||||
|
<MinusCircleOutlined
|
||||||
|
onClick={() =>
|
||||||
|
remove('remembrance', key)
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
)
|
||||||
|
})}
|
||||||
|
|
||||||
|
<Col span={24}>
|
||||||
|
<Form.Item>
|
||||||
|
<Button
|
||||||
|
type="dashed"
|
||||||
|
onClick={() => add('remembrance')}
|
||||||
|
block
|
||||||
|
icon={<PlusOutlined />}
|
||||||
|
>
|
||||||
|
添加
|
||||||
|
</Button>
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
25
src/components/Manualaddcandidate/index.css
Normal file
25
src/components/Manualaddcandidate/index.css
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
.resume-pop-box {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
.resume-img-box {
|
||||||
|
width: 40%;
|
||||||
|
}
|
||||||
|
.resume-content-box {
|
||||||
|
/* width: 55%; */
|
||||||
|
}
|
||||||
|
.resume-energy-box2 {
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
}
|
||||||
|
.ant-tabs {
|
||||||
|
width: 80%;
|
||||||
|
}
|
||||||
|
.resume-right-box {
|
||||||
|
width: 20%;
|
||||||
|
background-color: #eee;
|
||||||
|
margin-top: 46px;
|
||||||
|
}
|
||||||
|
.resume-xq-box2 { width: 100%; height: 625px; overflow-x: hidden; overflow-y: auto; }
|
||||||
|
.resume-energy-box2 .ant-tabs { width: 100%; display: flex; justify-content: space-between; }
|
||||||
|
.ResumeUpload-box .resume-pop-box .ant-tabs-content-holder{overflow-y:scroll; max-height: calc( 100vh - 375px);}
|
267
src/components/Manualaddcandidate/index.jsx
Normal file
267
src/components/Manualaddcandidate/index.jsx
Normal file
@ -0,0 +1,267 @@
|
|||||||
|
import React, { useState, Component } from 'react'
|
||||||
|
import {
|
||||||
|
Form,
|
||||||
|
Input,
|
||||||
|
Modal,
|
||||||
|
Radio,
|
||||||
|
Row,
|
||||||
|
Col,
|
||||||
|
Select,
|
||||||
|
DatePicker,
|
||||||
|
Tabs,
|
||||||
|
Button,
|
||||||
|
message,
|
||||||
|
} from 'antd'
|
||||||
|
import 'moment/locale/zh-cn'
|
||||||
|
import moment from 'moment'
|
||||||
|
import locale from 'antd/es/date-picker/locale/zh_CN'
|
||||||
|
import StandardResume from './StandardResume'
|
||||||
|
import { manual_resume } from '../../util/requestURL'
|
||||||
|
import './index.css'
|
||||||
|
const { Option } = Select
|
||||||
|
const dateFormat = 'YYYY-MM-DD'
|
||||||
|
|
||||||
|
export default class Manualaddcandidate extends Component {
|
||||||
|
state = {
|
||||||
|
hope_money: '',
|
||||||
|
feedback: 0,
|
||||||
|
name: '',
|
||||||
|
phone: '',
|
||||||
|
job_name: '',
|
||||||
|
work_exp: 0,
|
||||||
|
work_undergo: [],
|
||||||
|
project_undergo: [],
|
||||||
|
work_list: [],
|
||||||
|
school: '',
|
||||||
|
at_school: '',
|
||||||
|
specialty: '',
|
||||||
|
specialty_do: [],
|
||||||
|
mail: '',
|
||||||
|
gender: '',
|
||||||
|
age: 0,
|
||||||
|
nation: '',
|
||||||
|
review: '',
|
||||||
|
pass_text: '',
|
||||||
|
file_url: '',
|
||||||
|
now_address: '',
|
||||||
|
birthday: '',
|
||||||
|
accounts: '',
|
||||||
|
remembrance: [],
|
||||||
|
language: [],
|
||||||
|
}
|
||||||
|
|
||||||
|
updataPosition = (item) => {
|
||||||
|
this.setState(item, () => {
|
||||||
|
// console.log(this.state)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
onValuesChange = (item) => {
|
||||||
|
this.setState(item, () => {
|
||||||
|
// console.log(this.state)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const { visible, onCancel } = this.props
|
||||||
|
return (
|
||||||
|
<div className="ResumeUpload-box">
|
||||||
|
<Modal
|
||||||
|
width={'1600px'}
|
||||||
|
visible={visible}
|
||||||
|
closable={false}
|
||||||
|
maskClosable={false}
|
||||||
|
destroyOnClose={true}
|
||||||
|
footer={[
|
||||||
|
<Button key={'cancel'} onClick={onCancel}>
|
||||||
|
取消
|
||||||
|
</Button>,
|
||||||
|
<Button
|
||||||
|
key={'ok'}
|
||||||
|
type="primary"
|
||||||
|
onClick={() => {
|
||||||
|
var data = this.state
|
||||||
|
console.log(data)
|
||||||
|
if(data.name === "" || data.job_name === "" || data.phone === "" || data.mail ===""){
|
||||||
|
message.warning('姓名,职位,电话,邮箱必填')
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
manual_resume({data_in:this.state}).then((res)=>{
|
||||||
|
if(res.msg === "ok"){
|
||||||
|
message.success("添加成功!")
|
||||||
|
onCancel();
|
||||||
|
}
|
||||||
|
},(err)=>{
|
||||||
|
message.error('网络加载错误,请稍后再试')
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
保存
|
||||||
|
</Button>,
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<div className="resume-pop-box">
|
||||||
|
{/* <div className='resume-img-box'>
|
||||||
|
|
||||||
|
</div> */}
|
||||||
|
<div className="resume-content-box">
|
||||||
|
<Form
|
||||||
|
onValuesChange={this.onValuesChange}
|
||||||
|
layout="vertical"
|
||||||
|
name="form_in_modal"
|
||||||
|
>
|
||||||
|
<Row gutter={24}>
|
||||||
|
<Col span={6}>
|
||||||
|
<Form.Item
|
||||||
|
name="name"
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '填写姓名',
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<Input placeholder="填写姓名" />
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
|
||||||
|
<Col span={6}>
|
||||||
|
<Form.Item
|
||||||
|
name="job_name"
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请填写岗位',
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<Input
|
||||||
|
type="textarea"
|
||||||
|
placeholder="填写岗位"
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
<Col span={6}>
|
||||||
|
<Form.Item name="gender">
|
||||||
|
<Select
|
||||||
|
placeholder="选择性别"
|
||||||
|
optionFilterProp="children"
|
||||||
|
>
|
||||||
|
<Option value={0}>男</Option>
|
||||||
|
<Option value={1}>女</Option>
|
||||||
|
</Select>
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
|
||||||
|
<Col span={6}>
|
||||||
|
<Form.Item name="birthday">
|
||||||
|
<DatePicker
|
||||||
|
placeholder="请选择出生年月"
|
||||||
|
locale={locale}
|
||||||
|
onChange={(
|
||||||
|
dates,
|
||||||
|
dateStrings
|
||||||
|
) => {
|
||||||
|
this.updataPosition({
|
||||||
|
birthday: dateStrings,
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
<Col span={6}>
|
||||||
|
<Form.Item
|
||||||
|
name="phone"
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入手机号',
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<Input
|
||||||
|
addonBefore={'+86'}
|
||||||
|
style={{
|
||||||
|
width: '100%',
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
<Col span={6}>
|
||||||
|
<Form.Item
|
||||||
|
name="mail"
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
type: 'email',
|
||||||
|
message: '邮箱格式错误!',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入邮箱!',
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<Input placeholder="请填写邮箱"/>
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
<Col span={4}>
|
||||||
|
<Form.Item name="work_exp">
|
||||||
|
<Select
|
||||||
|
placeholder="选择工作年限"
|
||||||
|
optionFilterProp="children"
|
||||||
|
>
|
||||||
|
<Option value={0}>
|
||||||
|
应届生
|
||||||
|
</Option>
|
||||||
|
<Option value={1}>1-3年</Option>
|
||||||
|
<Option value={2}>3-5年</Option>
|
||||||
|
<Option value={3}>
|
||||||
|
5年以上
|
||||||
|
</Option>
|
||||||
|
</Select>
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
<Col span={4}>
|
||||||
|
<Form.Item name="education">
|
||||||
|
<Select
|
||||||
|
placeholder="选择学历"
|
||||||
|
optionFilterProp="children"
|
||||||
|
>
|
||||||
|
<Option value={1}>大专</Option>
|
||||||
|
<Option value={2}>本科</Option>
|
||||||
|
<Option value={3}>硕士</Option>
|
||||||
|
<Option value={4}>博士</Option>
|
||||||
|
</Select>
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
|
||||||
|
<Col span={4}>
|
||||||
|
<Form.Item
|
||||||
|
name="now_address"
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
message: '填写现住地址',
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<Input placeholder="填写现住地址" />
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
|
||||||
|
<div className="resume-energy-box2">
|
||||||
|
<div className="resume-xq-box2">
|
||||||
|
<StandardResume
|
||||||
|
data = {this.state}
|
||||||
|
updataPosition={this.updataPosition}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Modal>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
@ -9,6 +9,7 @@ import {
|
|||||||
AlertOutlined,
|
AlertOutlined,
|
||||||
} from '@ant-design/icons'
|
} from '@ant-design/icons'
|
||||||
|
|
||||||
|
|
||||||
const { Search } = Input
|
const { Search } = Input
|
||||||
// const suffix = (
|
// const suffix = (
|
||||||
// <AudioOutlined
|
// <AudioOutlined
|
||||||
|
@ -18,10 +18,9 @@ export default class Originalresume extends Component {
|
|||||||
var url = ""
|
var url = ""
|
||||||
if(JSON.stringify(data) != "{}"){
|
if(JSON.stringify(data) != "{}"){
|
||||||
const urlarr = data.file_url.split('hrms/')
|
const urlarr = data.file_url.split('hrms/')
|
||||||
// url = 'http://localhost:3000/pdf/hrms/' + decodeURIComponent(urlarr[1])
|
// url = './pdf/hrms/' + decodeURIComponent(urlarr[1])
|
||||||
url = 'http://10.0.0.4/pdf/hrms/' + decodeURIComponent(urlarr[1])
|
url = data.file_url
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
|
@ -1,24 +1,29 @@
|
|||||||
import React, { useState } from 'react'
|
import React, { useState } from 'react'
|
||||||
import ResumeUpload from '../../pages/ResumeUpload'
|
import ResumeUpload from '../../pages/ResumeUpload'
|
||||||
import Uploadresume from '../Uploadresume'
|
import Uploadresume from '../Uploadresume'
|
||||||
|
import Manualaddcandidate from '../Manualaddcandidate'
|
||||||
import { Button, Dropdown, Menu } from 'antd'
|
import { Button, Dropdown, Menu } from 'antd'
|
||||||
import { useNavigate } from 'react-router-dom'
|
import { useNavigate } from 'react-router-dom'
|
||||||
|
|
||||||
import { PlusOutlined } from '@ant-design/icons'
|
import { PlusOutlined } from '@ant-design/icons'
|
||||||
|
import PubSub from 'pubsub-js'
|
||||||
|
|
||||||
export default function ResumeUploadPop() {
|
export default function ResumeUploadPop() {
|
||||||
const navigate = useNavigate()
|
const navigate = useNavigate()
|
||||||
const [visible, setVisible] = useState(false)
|
const [visible, setVisible] = useState(false)
|
||||||
const [usvisible, setusvisible] = useState(false)
|
const [usvisible, setusvisible] = useState(false)
|
||||||
|
const [Manualvisible,setManualvisible] = useState(false)
|
||||||
|
|
||||||
//上传简历导出的数据
|
//上传简历导出的数据
|
||||||
const [data, setdata] = useState([])
|
const [data, setdata] = useState([])
|
||||||
|
|
||||||
const onCreate = (values) => {
|
const onCreate = (values) => {
|
||||||
console.log('Received values of form: ', values)
|
|
||||||
setVisible(false)
|
setVisible(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const ManualonCreate = () =>{
|
||||||
|
setManualvisible(false)
|
||||||
|
}
|
||||||
|
|
||||||
const UsonCreate = (values) => {
|
const UsonCreate = (values) => {
|
||||||
setusvisible(false)
|
setusvisible(false)
|
||||||
}
|
}
|
||||||
@ -26,7 +31,8 @@ export default function ResumeUploadPop() {
|
|||||||
const onMenuClick = (e) => {
|
const onMenuClick = (e) => {
|
||||||
console.log('click', e)
|
console.log('click', e)
|
||||||
if (e.key == 1) {
|
if (e.key == 1) {
|
||||||
setVisible(true)
|
// setVisible(true)
|
||||||
|
setManualvisible(true)
|
||||||
} else if (e.key == 2) {
|
} else if (e.key == 2) {
|
||||||
//跳转到添加职位界面
|
//跳转到添加职位界面
|
||||||
navigate('/admin/position/addposition')
|
navigate('/admin/position/addposition')
|
||||||
@ -39,10 +45,10 @@ export default function ResumeUploadPop() {
|
|||||||
<Menu
|
<Menu
|
||||||
onClick={onMenuClick}
|
onClick={onMenuClick}
|
||||||
items={[
|
items={[
|
||||||
// {
|
{
|
||||||
// key: '1',
|
key: '1',
|
||||||
// label: '添加简历',
|
label: '添加候选人',
|
||||||
// },
|
},
|
||||||
{
|
{
|
||||||
key: '4',
|
key: '4',
|
||||||
label: '上传简历',
|
label: '上传简历',
|
||||||
@ -82,6 +88,19 @@ export default function ResumeUploadPop() {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<Manualaddcandidate
|
||||||
|
visible={Manualvisible}
|
||||||
|
onCreate={ManualonCreate}
|
||||||
|
onCancel={() => {
|
||||||
|
PubSub.publish('updatacandidate', {isupdata: true})
|
||||||
|
setManualvisible(false)
|
||||||
|
}}
|
||||||
|
onReupload={() => {
|
||||||
|
//重新上传
|
||||||
|
setManualvisible(false)
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
<Uploadresume
|
<Uploadresume
|
||||||
visible={usvisible}
|
visible={usvisible}
|
||||||
onCreate={UsonCreate}
|
onCreate={UsonCreate}
|
||||||
@ -89,6 +108,7 @@ export default function ResumeUploadPop() {
|
|||||||
setusvisible(false)
|
setusvisible(false)
|
||||||
setVisible(true)
|
setVisible(true)
|
||||||
setdata(data)
|
setdata(data)
|
||||||
|
PubSub.publish('updatacandidate', {isupdata: true})
|
||||||
}}
|
}}
|
||||||
onCancel={() => {
|
onCancel={() => {
|
||||||
setusvisible(false)
|
setusvisible(false)
|
||||||
|
@ -37,9 +37,9 @@ export default class Candidate extends Component {
|
|||||||
const props = {
|
const props = {
|
||||||
name: 'file',
|
name: 'file',
|
||||||
multiple: true,
|
multiple: true,
|
||||||
action: 'http://10.0.0.240:7800/api/v1/itr/file_to_hw',
|
// action: 'http://10.0.0.240:7800/api/v1/itr/file_to_hw',
|
||||||
// action: 'http://myip.legu.cc:7800/api/v1/itr/file_to_hw',
|
// action: 'http://myip.legu.cc:7800/api/v1/itr/file_to_hw',
|
||||||
// action: 'http://10.0.0.4:7800/api/v1/itr/file_to_hw',
|
action: 'http://10.0.0.4:7800/api/v1/itr/file_to_hw',
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: token,
|
Authorization: token,
|
||||||
},
|
},
|
||||||
@ -66,9 +66,9 @@ export default class Candidate extends Component {
|
|||||||
candidatedata.data['uid'] =
|
candidatedata.data['uid'] =
|
||||||
info.file.response.data.uid
|
info.file.response.data.uid
|
||||||
candidatedata.data['owner_name'] =
|
candidatedata.data['owner_name'] =
|
||||||
this.state.owner_name
|
that.state.owner_name
|
||||||
candidatedata.data['resume_affix_id'] =
|
candidatedata.data['resume_affix_id'] =
|
||||||
this.state.resume_affix_id
|
that.state.resume_affix_id
|
||||||
that.props.onResumeUpload(candidatedata)
|
that.props.onResumeUpload(candidatedata)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -115,9 +115,9 @@ export default class Candidate extends Component {
|
|||||||
const propss = {
|
const propss = {
|
||||||
name: 'file',
|
name: 'file',
|
||||||
multiple: true,
|
multiple: true,
|
||||||
action: 'http://10.0.0.240:7800/api/v1/itr/resume_affix',
|
// action: 'http://10.0.0.240:7800/api/v1/itr/resume_affix',
|
||||||
// action: 'http://myip.legu.cc:7800/api/v1/itr/resume_affix',
|
// action: 'http://myip.legu.cc:7800/api/v1/itr/resume_affix',
|
||||||
// action: 'http://10.0.0.4:7800/api/v1/itr/resume_affix',
|
action: 'http://10.0.0.4:7800/api/v1/itr/resume_affix',
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: token,
|
Authorization: token,
|
||||||
},
|
},
|
||||||
|
@ -40,7 +40,7 @@ export default class ResumeUpload extends Component {
|
|||||||
|
|
||||||
render(){
|
render(){
|
||||||
const { visible, onCancel, onCreate,onReupload, data } = this.props
|
const { visible, onCancel, onCreate,onReupload, data } = this.props
|
||||||
|
// console.log(data)
|
||||||
return(
|
return(
|
||||||
<div className="ResumeUpload-box">
|
<div className="ResumeUpload-box">
|
||||||
<Modal
|
<Modal
|
||||||
|
@ -38,6 +38,8 @@ export default class Candidate extends Component {
|
|||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
PubSub.publish('headtitle', { headtitle: '候选人管理' })
|
PubSub.publish('headtitle', { headtitle: '候选人管理' })
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
getsection().then(
|
getsection().then(
|
||||||
(res) => {
|
(res) => {
|
||||||
const data = res.data
|
const data = res.data
|
||||||
@ -93,8 +95,6 @@ export default class Candidate extends Component {
|
|||||||
const onSelect = (selectedKeys, info) => {
|
const onSelect = (selectedKeys, info) => {
|
||||||
// console.log(selectedKeys)
|
// console.log(selectedKeys)
|
||||||
if(selectedKeys[0].length > 3){
|
if(selectedKeys[0].length > 3){
|
||||||
console.log(selectedKeys)
|
|
||||||
console.log(info.node.title)
|
|
||||||
this.setState({
|
this.setState({
|
||||||
job_names:info.node.title
|
job_names:info.node.title
|
||||||
})
|
})
|
||||||
@ -106,6 +106,7 @@ export default class Candidate extends Component {
|
|||||||
this.setState({
|
this.setState({
|
||||||
step: key,
|
step: key,
|
||||||
})
|
})
|
||||||
|
this.updatainterviewstagenum()
|
||||||
}
|
}
|
||||||
|
|
||||||
const treeSeletData = [
|
const treeSeletData = [
|
||||||
|
@ -151,7 +151,7 @@ function Interview() {
|
|||||||
// 查看详情里面编辑按钮
|
// 查看详情里面编辑按钮
|
||||||
const onEditresume = (data) => {
|
const onEditresume = (data) => {
|
||||||
setInterviewerInfo(false)
|
setInterviewerInfo(false)
|
||||||
console.log(data)
|
// console.log(data)
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
setEditresume(true)
|
setEditresume(true)
|
||||||
}, 500)
|
}, 500)
|
||||||
@ -318,11 +318,15 @@ function Interview() {
|
|||||||
render: (text, record, index) => (
|
render: (text, record, index) => (
|
||||||
<div className="font-size14 color1">
|
<div className="font-size14 color1">
|
||||||
{text.type === 0 ? (
|
{text.type === 0 ? (
|
||||||
<WarningOutlined style={{ color: '#f59f00' }} />
|
<div>
|
||||||
|
<WarningOutlined style={{ color: '#f59f00' }} /> 未全部反馈
|
||||||
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<LikeOutlined style={{ color: '#51cf66' }} />
|
<div>
|
||||||
|
<LikeOutlined style={{ color: '#51cf66' }} /> 已全部反馈
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
{text.name}
|
|
||||||
</div>
|
</div>
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
@ -338,13 +342,13 @@ function Interview() {
|
|||||||
>
|
>
|
||||||
查看详情
|
查看详情
|
||||||
</span>
|
</span>
|
||||||
<span
|
{/* <span
|
||||||
className="cursor"
|
className="cursor"
|
||||||
style={{ margin: '0px 5px' }}
|
style={{ margin: '0px 5px' }}
|
||||||
onClick={() => handelFeedback(record, index)}
|
onClick={() => handelFeedback(record, index)}
|
||||||
>
|
>
|
||||||
{text.type === 0 ? '催促反馈' : ''}
|
{text.type === 0 ? '催促反馈' : ''}
|
||||||
</span>
|
</span> */}
|
||||||
</div>
|
</div>
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
@ -23,16 +23,11 @@ import {
|
|||||||
} from '@ant-design/icons'
|
} from '@ant-design/icons'
|
||||||
import { interviewstagenu } from '../../../util/requestURL'
|
import { interviewstagenu } from '../../../util/requestURL'
|
||||||
import { Link } from 'react-router-dom'
|
import { Link } from 'react-router-dom'
|
||||||
|
import storageUtils from '../../../util/storageUtils'
|
||||||
import './index.css'
|
import './index.css'
|
||||||
const { TabPane } = Tabs
|
const { TabPane } = Tabs
|
||||||
const { CheckableTag } = Tag
|
const { CheckableTag } = Tag
|
||||||
const tagsData = [
|
const tagsData = ['面试反馈', '安排面试', '通讯记录', '面试官拒绝面试', '其它']
|
||||||
'面试反馈',
|
|
||||||
'安排面试',
|
|
||||||
'通讯记录',
|
|
||||||
'面试官拒绝面试',
|
|
||||||
'其它',
|
|
||||||
]
|
|
||||||
|
|
||||||
export default class Overview extends Component {
|
export default class Overview extends Component {
|
||||||
state = {
|
state = {
|
||||||
@ -52,14 +47,17 @@ export default class Overview extends Component {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
data: [],
|
data: [],
|
||||||
|
userinfo:{rank:1}
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
PubSub.publish('headtitle', { headtitle: '总览' })
|
PubSub.publish('headtitle', { headtitle: '总览' })
|
||||||
|
let userinfo = storageUtils.getUser()
|
||||||
interviewstagenu({ date: {} }).then(
|
interviewstagenu({ date: {} }).then(
|
||||||
(res) => {
|
(res) => {
|
||||||
this.setState({
|
this.setState({
|
||||||
data: res.data,
|
data: res.data,
|
||||||
|
userinfo: userinfo,
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
@ -69,7 +67,7 @@ export default class Overview extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { data } = this.state
|
const { data, userinfo } = this.state
|
||||||
|
|
||||||
const onChange = (key) => {
|
const onChange = (key) => {
|
||||||
console.log(key)
|
console.log(key)
|
||||||
@ -115,11 +113,19 @@ export default class Overview extends Component {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="Overview-card-list">
|
<div className="Overview-card-list">
|
||||||
<Link to={'/admin/candidate'}>
|
{userinfo.rank === 1 ? (
|
||||||
<p>{data[1]}</p>
|
<Link to={'/admin/candidate'}>
|
||||||
<span>今日待筛选申请</span>
|
<p>{data[1]}</p>
|
||||||
</Link>
|
<span>今日待筛选申请</span>
|
||||||
|
</Link>
|
||||||
|
) : (
|
||||||
|
<Link to={'/admin/Interview_manager'}>
|
||||||
|
<p>{data[1]}</p>
|
||||||
|
<span>今日待筛选申请</span>
|
||||||
|
</Link>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="xian"></div>
|
<div className="xian"></div>
|
||||||
@ -133,10 +139,17 @@ export default class Overview extends Component {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="Overview-card-list">
|
<div className="Overview-card-list">
|
||||||
<Link to={'/admin/interview'}>
|
{userinfo.rank === 1 ? (
|
||||||
<p>{data.now}</p>
|
<Link to={'/admin/interview'}>
|
||||||
<span>今日面试</span>
|
<p>{data.now}</p>
|
||||||
</Link>
|
<span>今日面试</span>
|
||||||
|
</Link>
|
||||||
|
) : (
|
||||||
|
<Link to={'/admin/Interview_manager'}>
|
||||||
|
<p>{data.now}</p>
|
||||||
|
<span>今日面试</span>
|
||||||
|
</Link>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -147,16 +160,30 @@ export default class Overview extends Component {
|
|||||||
</div>
|
</div>
|
||||||
<div className="Overview-card-list-box2">
|
<div className="Overview-card-list-box2">
|
||||||
<div className="Overview-card-list2">
|
<div className="Overview-card-list2">
|
||||||
<Link to={'/admin/candidate'}>
|
{userinfo.rank === 1 ? (
|
||||||
<p>{data.offer}</p>
|
<Link to={'/admin/candidate'}>
|
||||||
<span>待发送Offer</span>
|
<p>{data.offer}</p>
|
||||||
</Link>
|
<span>待发送Offer</span>
|
||||||
|
</Link>
|
||||||
|
) : (
|
||||||
|
<Link to={'/admin/Interview_manager'}>
|
||||||
|
<p>{data.offer}</p>
|
||||||
|
<span>待发送Offer</span>
|
||||||
|
</Link>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="Overview-card-list2">
|
<div className="Overview-card-list2">
|
||||||
<Link to={'/admin/candidate'}>
|
{userinfo.rank === 1 ? (
|
||||||
<p>{data[6]}</p>
|
<Link to={'/admin/candidate'}>
|
||||||
<span>待入职</span>
|
<p>{data[6]}</p>
|
||||||
</Link>
|
<span>待入职</span>
|
||||||
|
</Link>
|
||||||
|
) : (
|
||||||
|
<Link to={'/admin/Interview_manager'}>
|
||||||
|
<p>{data[6]}</p>
|
||||||
|
<span>待入职</span>
|
||||||
|
</Link>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -167,22 +194,43 @@ export default class Overview extends Component {
|
|||||||
</div>
|
</div>
|
||||||
<div className="Overview-card-list-box2">
|
<div className="Overview-card-list-box2">
|
||||||
<div className="color8 Overview-card-list2">
|
<div className="color8 Overview-card-list2">
|
||||||
<Link to={'/admin/interview'}>
|
{userinfo.rank === 1 ? (
|
||||||
<p>0</p>
|
<Link to={'/admin/interview'}>
|
||||||
<span>待面试</span>
|
<p>0</p>
|
||||||
</Link>
|
<span>待面试</span>
|
||||||
|
</Link>
|
||||||
|
) : (
|
||||||
|
<Link to={'/admin/Interview_manager'}>
|
||||||
|
<p>0</p>
|
||||||
|
<span>待面试</span>
|
||||||
|
</Link>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="Overview-card-list2">
|
<div className="Overview-card-list2">
|
||||||
<Link to={'/admin/interview'}>
|
{userinfo.rank === 1 ? (
|
||||||
<p>0</p>
|
<Link to={'/admin/interview'}>
|
||||||
<span>待反馈</span>
|
<p>0</p>
|
||||||
</Link>
|
<span>待反馈</span>
|
||||||
|
</Link>
|
||||||
|
) : (
|
||||||
|
<Link to={'/admin/Interview_manager'}>
|
||||||
|
<p>0</p>
|
||||||
|
<span>待反馈</span>
|
||||||
|
</Link>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="Overview-card-list2">
|
<div className="Overview-card-list2">
|
||||||
<Link to={'/admin/candidate'}>
|
{userinfo.rank === 1 ? (
|
||||||
<p>0</p>
|
<Link to={'/admin/candidate'}>
|
||||||
<span>待处理</span>
|
<p>0</p>
|
||||||
</Link>
|
<span>待处理</span>
|
||||||
|
</Link>
|
||||||
|
) : (
|
||||||
|
<Link to={'/admin/Interview_manager'}>
|
||||||
|
<p>0</p>
|
||||||
|
<span>待处理</span>
|
||||||
|
</Link>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -19,5 +19,5 @@
|
|||||||
.Resumescreen-list-data-box .CandidateTable-owner { width: 10%; }
|
.Resumescreen-list-data-box .CandidateTable-owner { width: 10%; }
|
||||||
.Resumescreen-list-data-box .CandidateTable-list-box { align-items: center; }
|
.Resumescreen-list-data-box .CandidateTable-list-box { align-items: center; }
|
||||||
.Resumescreen-list-data-box .CandidateTable-info { margin-left: 0; }
|
.Resumescreen-list-data-box .CandidateTable-info { margin-left: 0; }
|
||||||
|
.tongyi { color: rgb(12, 140, 246); }
|
||||||
|
.jvj { color: #ff4d4f; }
|
||||||
|
@ -36,8 +36,9 @@ export default class Resumescreen extends Component {
|
|||||||
job_id: '',
|
job_id: '',
|
||||||
hr_manner: 2,
|
hr_manner: 2,
|
||||||
userInfo: storageUtils.getUser(),
|
userInfo: storageUtils.getUser(),
|
||||||
interviewerInfo: false,
|
interviewerInfo: false,
|
||||||
uid: 0
|
uid: 0,
|
||||||
|
types: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
@ -55,15 +56,27 @@ export default class Resumescreen extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Updatalist = () => {
|
Updatalist = () => {
|
||||||
const { name, job_id, hr_manner, userInfo } = this.state
|
const { name, job_id, hr_manner, userInfo, types } = this.state
|
||||||
interviewfind({
|
const interview_query = types === "true" ? (
|
||||||
interview_query: {
|
{
|
||||||
interview_stage: 1,
|
interview_stage: 1,
|
||||||
department: userInfo.user_id,
|
department: userInfo.user_id,
|
||||||
name: name,
|
name: name,
|
||||||
job_id: job_id,
|
job_id: job_id,
|
||||||
hr_manner: hr_manner,
|
hr_manner: hr_manner,
|
||||||
},
|
}
|
||||||
|
):(
|
||||||
|
{
|
||||||
|
department: userInfo.user_id,
|
||||||
|
name: name,
|
||||||
|
job_id: job_id,
|
||||||
|
hr_manner: hr_manner,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
interviewfind({
|
||||||
|
interview_query: interview_query,
|
||||||
data_in: {},
|
data_in: {},
|
||||||
}).then(
|
}).then(
|
||||||
(res) => {
|
(res) => {
|
||||||
@ -75,34 +88,34 @@ export default class Resumescreen extends Component {
|
|||||||
)
|
)
|
||||||
|
|
||||||
interviewmannernum({
|
interviewmannernum({
|
||||||
interview_query: {
|
data: {
|
||||||
interview_stage: 1,
|
|
||||||
department: userInfo.user_id,
|
|
||||||
name: name,
|
name: name,
|
||||||
job_id: job_id
|
job_id: job_id,
|
||||||
|
hr_manner: hr_manner,
|
||||||
|
department: userInfo.user_id,
|
||||||
},
|
},
|
||||||
data_in: {},
|
types: types,
|
||||||
}).then(
|
}).then(
|
||||||
(res) => {
|
(res) => {
|
||||||
console.log(res.data)
|
this.setState({
|
||||||
this.setState({
|
manner_2_num: res.data.manner_2_num,
|
||||||
manner_2_num : res.data.manner_2_num,
|
manner_01_num: res.data.manner_01_num,
|
||||||
manner_01_num : res.data.manner_01_num
|
})
|
||||||
})
|
},
|
||||||
},
|
|
||||||
(err) => {}
|
(err) => {}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
onValuesChange = (e) => {
|
onValuesChange = (e) => {
|
||||||
// console.log(e)
|
// console.log(e)
|
||||||
this.setState(e,()=>{
|
this.setState(e, () => {
|
||||||
this.Updatalist()
|
this.Updatalist()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
handeleditstate = (uid, hr_manner) => {
|
handeleditstate = (uid, hr_manner) => {
|
||||||
|
const interview_stage = hr_manner === 1 ? 2 : 11
|
||||||
interviewupdate({
|
interviewupdate({
|
||||||
data_in: { hr_manner: hr_manner, interview_stage:2 },
|
data_in: { hr_manner: hr_manner, interview_stage: interview_stage },
|
||||||
interview_query: { uid: uid },
|
interview_query: { uid: uid },
|
||||||
}).then(
|
}).then(
|
||||||
(res) => {
|
(res) => {
|
||||||
@ -120,9 +133,21 @@ export default class Resumescreen extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
handelonChange = (e) => {
|
handelonChange = (e) => {
|
||||||
|
const { hr_manner } = this.state
|
||||||
|
var newhr_manner = 0;
|
||||||
|
if(hr_manner === 2 && e === "true"){
|
||||||
|
newhr_manner = 2
|
||||||
|
}else if(hr_manner !== 2 && e === "true"){
|
||||||
|
newhr_manner = 2
|
||||||
|
}else if(hr_manner === 2 && e === "false" ){
|
||||||
|
newhr_manner = ""
|
||||||
|
}else {
|
||||||
|
newhr_manner = hr_manner
|
||||||
|
}
|
||||||
this.setState(
|
this.setState(
|
||||||
{
|
{
|
||||||
hr_manner: e,
|
types: e,
|
||||||
|
hr_manner: newhr_manner,
|
||||||
},
|
},
|
||||||
() => {
|
() => {
|
||||||
this.Updatalist()
|
this.Updatalist()
|
||||||
@ -130,16 +155,16 @@ export default class Resumescreen extends Component {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
handelCandidateClick = (uid) =>{
|
handelCandidateClick = (uid) => {
|
||||||
console.log(uid)
|
this.setState({
|
||||||
this.setState({
|
interviewerInfo: true,
|
||||||
interviewerInfo: true,
|
uid: uid,
|
||||||
uid : uid
|
})
|
||||||
})
|
}
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { getjoblist, data, manner_2_num, manner_01_num } = this.state
|
const { getjoblist, data, manner_2_num, manner_01_num, hr_manner } =
|
||||||
|
this.state
|
||||||
const onSearch = (value) => console.log(value)
|
const onSearch = (value) => console.log(value)
|
||||||
return (
|
return (
|
||||||
<div className="Resumescreen-box">
|
<div className="Resumescreen-box">
|
||||||
@ -193,7 +218,7 @@ export default class Resumescreen extends Component {
|
|||||||
<div className="Resumescreen-list-data-box">
|
<div className="Resumescreen-list-data-box">
|
||||||
<div className="Resumescreen-list-tab-box">
|
<div className="Resumescreen-list-tab-box">
|
||||||
<Tabs
|
<Tabs
|
||||||
defaultActiveKey="2"
|
defaultActiveKey={true}
|
||||||
onChange={(e) => this.handelonChange(e)}
|
onChange={(e) => this.handelonChange(e)}
|
||||||
>
|
>
|
||||||
<Tabs.TabPane
|
<Tabs.TabPane
|
||||||
@ -205,7 +230,7 @@ export default class Resumescreen extends Component {
|
|||||||
<div>待筛选的候选人</div>
|
<div>待筛选的候选人</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
key={2}
|
key={true}
|
||||||
></Tabs.TabPane>
|
></Tabs.TabPane>
|
||||||
<Tabs.TabPane
|
<Tabs.TabPane
|
||||||
tab={
|
tab={
|
||||||
@ -216,7 +241,7 @@ export default class Resumescreen extends Component {
|
|||||||
<div>筛选记录</div>
|
<div>筛选记录</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
key=""
|
key={false}
|
||||||
></Tabs.TabPane>
|
></Tabs.TabPane>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
</div>
|
</div>
|
||||||
@ -241,7 +266,9 @@ export default class Resumescreen extends Component {
|
|||||||
className="CandidateTable-list-box"
|
className="CandidateTable-list-box"
|
||||||
key={item.uid}
|
key={item.uid}
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
this.handelCandidateClick(item.uid)
|
this.handelCandidateClick(
|
||||||
|
item.uid
|
||||||
|
)
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<div className="CandidateTable-info-box">
|
<div className="CandidateTable-info-box">
|
||||||
@ -354,34 +381,52 @@ export default class Resumescreen extends Component {
|
|||||||
{item.interview_stage}
|
{item.interview_stage}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="CandidateTable-owner">
|
{hr_manner === 2 ? (
|
||||||
<Button
|
<div className="CandidateTable-owner textindent7">
|
||||||
type="text"
|
<Button
|
||||||
style={{ color: '#0c8cf6' }}
|
type="text"
|
||||||
onClick={(e) => {
|
style={{
|
||||||
e.stopPropagation()
|
color: '#0c8cf6',
|
||||||
this.handeleditstate(
|
}}
|
||||||
item.uid,
|
onClick={(e) => {
|
||||||
1
|
e.stopPropagation()
|
||||||
)
|
this.handeleditstate(
|
||||||
}}
|
item.uid,
|
||||||
>
|
1
|
||||||
同意
|
)
|
||||||
</Button>
|
}}
|
||||||
<Button
|
>
|
||||||
type="text"
|
同意
|
||||||
style={{ color: '#0c8cf6' }}
|
</Button>
|
||||||
onClick={(e) => {
|
<Button
|
||||||
e.stopPropagation()
|
type="text"
|
||||||
this.handeleditstate(
|
style={{
|
||||||
item.uid,
|
color: '#0c8cf6',
|
||||||
0
|
}}
|
||||||
)
|
onClick={(e) => {
|
||||||
}}
|
e.stopPropagation()
|
||||||
>
|
this.handeleditstate(
|
||||||
拒绝
|
item.uid,
|
||||||
</Button>
|
0
|
||||||
</div>
|
)
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
拒绝
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
) : item.hr_manner === 1 ? (
|
||||||
|
<div className="CandidateTable-owner">
|
||||||
|
<span className="tongyi">
|
||||||
|
同意
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<div className="CandidateTable-owner">
|
||||||
|
<span className="jvj">
|
||||||
|
拒绝
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
@ -393,7 +438,7 @@ export default class Resumescreen extends Component {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/* 查看面试人信息弹窗 */}
|
{/* 查看面试人信息弹窗 */}
|
||||||
<InterviewerInfoPop
|
<InterviewerInfoPop
|
||||||
visible={this.state.interviewerInfo}
|
visible={this.state.interviewerInfo}
|
||||||
onCreate={() => {
|
onCreate={() => {
|
||||||
@ -407,7 +452,6 @@ export default class Resumescreen extends Component {
|
|||||||
interviewerInfo: false,
|
interviewerInfo: false,
|
||||||
})
|
})
|
||||||
}}
|
}}
|
||||||
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
@ -124,6 +124,8 @@
|
|||||||
|
|
||||||
.talentpool-table-action {
|
.talentpool-table-action {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
border-bottom: 1px solid #f4f4f5; padding: 10px 0;
|
border-bottom: 1px solid #f4f4f5; padding: 10px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@ import {
|
|||||||
message,
|
message,
|
||||||
Pagination,
|
Pagination,
|
||||||
Modal,
|
Modal,
|
||||||
|
Button,
|
||||||
} from 'antd'
|
} from 'antd'
|
||||||
import Addscreen from './Addscreen'
|
import Addscreen from './Addscreen'
|
||||||
import {
|
import {
|
||||||
@ -14,7 +15,8 @@ import {
|
|||||||
talent_pool,
|
talent_pool,
|
||||||
talent_pool_nu,
|
talent_pool_nu,
|
||||||
option,
|
option,
|
||||||
get_number
|
get_number,
|
||||||
|
send_talent_pool,
|
||||||
} from '../../../util/requestURL'
|
} from '../../../util/requestURL'
|
||||||
import {
|
import {
|
||||||
PrinterFilled,
|
PrinterFilled,
|
||||||
@ -39,23 +41,25 @@ export default class Talent_pool extends Component {
|
|||||||
datalist: [],
|
datalist: [],
|
||||||
pages: 1,
|
pages: 1,
|
||||||
total: 0,
|
total: 0,
|
||||||
candidate:0,
|
candidate: 0,
|
||||||
now:0
|
now: 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
PubSub.publish('headtitle', { headtitle: '人才库' })
|
PubSub.publish('headtitle', { headtitle: '人才库' })
|
||||||
get_number().then((res)=>{
|
get_number().then(
|
||||||
console.log(res)
|
(res) => {
|
||||||
this.setState({
|
console.log(res)
|
||||||
candidate: res.data.candidate,
|
this.setState({
|
||||||
now: res.data.now
|
candidate: res.data.candidate,
|
||||||
})
|
now: res.data.now,
|
||||||
},
|
})
|
||||||
(err)=>{
|
},
|
||||||
message.error('网络错误,请稍后再试')
|
(err) => {
|
||||||
})
|
message.error('网络错误,请稍后再试')
|
||||||
this.handelupdatascreen()
|
}
|
||||||
|
)
|
||||||
|
this.handelupdatascreen()
|
||||||
this.posttalentpool()
|
this.posttalentpool()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,7 +155,68 @@ export default class Talent_pool extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { data, datalist,candidate,now } = this.state
|
const { data, datalist, candidate, now } = this.state
|
||||||
|
//数据个数
|
||||||
|
const todata = datalist.length
|
||||||
|
// 全选框
|
||||||
|
const onAllChange = (e) => {
|
||||||
|
const type = e.target.checked
|
||||||
|
const { datalist } = this.state
|
||||||
|
const newData = datalist.map((dataObj) => {
|
||||||
|
return { ...dataObj, choice: type }
|
||||||
|
})
|
||||||
|
this.setState({ datalist: newData })
|
||||||
|
}
|
||||||
|
|
||||||
|
//已勾选个数
|
||||||
|
let choiceCount = 0
|
||||||
|
if (datalist.length > 0) {
|
||||||
|
choiceCount = datalist.reduce(
|
||||||
|
(pre, item) => pre + (item.choice ? 1 : 0),
|
||||||
|
0
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
//单个选择框
|
||||||
|
const onChange = (e) => {
|
||||||
|
const type = e.target.checked
|
||||||
|
const id = e.target.value
|
||||||
|
const { datalist } = this.state
|
||||||
|
const newData = datalist.map((dataObj) => {
|
||||||
|
if (dataObj.id_card === id) return { ...dataObj, choice: type }
|
||||||
|
else return dataObj
|
||||||
|
})
|
||||||
|
this.setState({
|
||||||
|
datalist: newData,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const handeladdCandidate = (e) => {
|
||||||
|
const { datalist } = this.state
|
||||||
|
const newdatalist = []
|
||||||
|
for (let i in datalist) {
|
||||||
|
if (datalist[i].choice) {
|
||||||
|
newdatalist.push(datalist[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (newdatalist.length > 0) {
|
||||||
|
send_talent_pool({ send: newdatalist }).then(
|
||||||
|
(res) => {
|
||||||
|
console.log(res)
|
||||||
|
if (res.msg === 'ok') {
|
||||||
|
message.success('操作成功')
|
||||||
|
this.handelupdatascreen()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
message.error('网络错误,请稍后再试')
|
||||||
|
}
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
message.warning('选择候选人')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="talentpool-box">
|
<div className="talentpool-box">
|
||||||
{/* <Empty description="该功能暂未开放" className='talentpool-Empty-box'/> */}
|
{/* <Empty description="该功能暂未开放" className='talentpool-Empty-box'/> */}
|
||||||
@ -293,152 +358,192 @@ export default class Talent_pool extends Component {
|
|||||||
<div className="talentpool-list-box">
|
<div className="talentpool-list-box">
|
||||||
<div className="talentpool-table-action">
|
<div className="talentpool-table-action">
|
||||||
<div className="qxcheck-box">
|
<div className="qxcheck-box">
|
||||||
<Checkbox>
|
<Checkbox
|
||||||
|
onChange={onAllChange}
|
||||||
|
checked={
|
||||||
|
choiceCount === todata
|
||||||
|
? true
|
||||||
|
: false
|
||||||
|
}
|
||||||
|
>
|
||||||
<CaretDownFilled
|
<CaretDownFilled
|
||||||
style={{ color: '#424954' }}
|
style={{ color: '#424954' }}
|
||||||
/>
|
/>
|
||||||
</Checkbox>
|
</Checkbox>
|
||||||
</div>
|
</div>
|
||||||
|
<div>
|
||||||
|
<Button
|
||||||
|
type="primary"
|
||||||
|
onClick={handeladdCandidate}
|
||||||
|
>
|
||||||
|
{' '}
|
||||||
|
+ 添加到候选人
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
{datalist.map((item, key) => {
|
{datalist.length > 0 ? (
|
||||||
return (
|
datalist.map((item, key) => {
|
||||||
<div
|
return (
|
||||||
className="talentpool-info-box"
|
<div
|
||||||
key={key}
|
className="talentpool-info-box"
|
||||||
>
|
key={key}
|
||||||
<div className="talentpool-list-left">
|
>
|
||||||
<div>
|
<div className="talentpool-list-left">
|
||||||
<Checkbox></Checkbox>
|
|
||||||
</div>
|
|
||||||
<div className="talentpool-info">
|
|
||||||
<div>
|
<div>
|
||||||
<span className="name">
|
<Checkbox
|
||||||
{item.name}
|
checked={
|
||||||
</span>
|
item.choice
|
||||||
<span className="sex">
|
}
|
||||||
{item.gander}
|
onChange={onChange}
|
||||||
</span>
|
value={item.id_card}
|
||||||
<span className="age">
|
></Checkbox>
|
||||||
| {item.age}
|
</div>
|
||||||
</span>
|
<div className="talentpool-info">
|
||||||
<span className="exp">
|
<div>
|
||||||
{item.work_exp === 0
|
<span className="name">
|
||||||
? '| 实习生'
|
{item.name}
|
||||||
: item.work_exp ===
|
</span>
|
||||||
1
|
<span className="sex">
|
||||||
? '1-3年'
|
{item.gander}
|
||||||
: item.work_exp ===
|
</span>
|
||||||
2
|
<span className="age">
|
||||||
? '3-5年'
|
| {item.age}
|
||||||
: '5年以上'}
|
</span>
|
||||||
</span>
|
<span className="exp">
|
||||||
<span className="similar">
|
{item.work_exp ===
|
||||||
<BlockOutlined />{' '}
|
0
|
||||||
</span>{' '}
|
? '| 实习生'
|
||||||
<span className="similar-num">
|
: item.work_exp ===
|
||||||
{item.similarity}
|
1
|
||||||
位相似候选人
|
? '1-3年'
|
||||||
|
: item.work_exp ===
|
||||||
|
2
|
||||||
|
? '3-5年'
|
||||||
|
: '5年以上'}
|
||||||
|
</span>
|
||||||
|
<span className="similar">
|
||||||
|
<BlockOutlined />{' '}
|
||||||
|
</span>{' '}
|
||||||
|
<span className="similar-num">
|
||||||
|
{
|
||||||
|
item.similarity
|
||||||
|
}
|
||||||
|
位相似候选人
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
{item.work_list.map(
|
||||||
|
(items, index) => {
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className="work-exp-box"
|
||||||
|
key={
|
||||||
|
index
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<CalendarFilled />
|
||||||
|
<span>
|
||||||
|
{
|
||||||
|
items.company_name
|
||||||
|
}
|
||||||
|
</span>
|
||||||
|
<span>
|
||||||
|
|{' '}
|
||||||
|
{
|
||||||
|
items.position_name
|
||||||
|
}
|
||||||
|
</span>
|
||||||
|
<span>
|
||||||
|
|
|
||||||
|
{
|
||||||
|
items.time
|
||||||
|
}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)}
|
||||||
|
|
||||||
|
<div className="work-exp-box">
|
||||||
|
<BankFilled />
|
||||||
|
<span>
|
||||||
|
{item.school}
|
||||||
|
</span>
|
||||||
|
<span>
|
||||||
|
|{' '}
|
||||||
|
{item.specialty}
|
||||||
|
</span>
|
||||||
|
<span>
|
||||||
|
|{' '}
|
||||||
|
{item.education}
|
||||||
|
</span>
|
||||||
|
<span>
|
||||||
|
|
|
||||||
|
{item.at_school}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="apply_info-box">
|
||||||
|
<div>
|
||||||
|
申请日期:
|
||||||
|
<span>
|
||||||
|
{item.event_time}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
{item.work_list.map(
|
<div className="margintop5">
|
||||||
(items, index) => {
|
应聘职位:
|
||||||
return (
|
<span>
|
||||||
<div
|
{item.job_name}
|
||||||
className="work-exp-box"
|
</span>
|
||||||
key={index}
|
</div>
|
||||||
>
|
<div className="margintop5">
|
||||||
<CalendarFilled />
|
归档人才库:
|
||||||
<span>
|
<span>
|
||||||
{
|
系统公共人才库
|
||||||
items.company_name
|
</span>
|
||||||
}
|
</div>
|
||||||
</span>
|
</div>
|
||||||
<span>
|
|
||||||
|{' '}
|
|
||||||
{
|
|
||||||
items.position_name
|
|
||||||
}
|
|
||||||
</span>
|
|
||||||
<span>
|
|
||||||
|
|
|
||||||
{
|
|
||||||
items.time
|
|
||||||
}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)}
|
|
||||||
|
|
||||||
<div className="work-exp-box">
|
<div className="apply_info-box">
|
||||||
<BankFilled />
|
<div>
|
||||||
|
归档日期:
|
||||||
<span>
|
<span>
|
||||||
{item.school}
|
{item.pass_time}
|
||||||
</span>
|
</span>
|
||||||
|
</div>
|
||||||
|
<div className="margintop5">
|
||||||
|
归档前阶段:
|
||||||
<span>
|
<span>
|
||||||
| {item.specialty}
|
{item.ago === 0
|
||||||
|
? '人才推荐'
|
||||||
|
: item.ago === 1
|
||||||
|
? '初筛'
|
||||||
|
: item.ago === 2
|
||||||
|
? '复筛'
|
||||||
|
: item.ago === 3
|
||||||
|
? '面试'
|
||||||
|
: item.ago === 4
|
||||||
|
? '沟通Offer'
|
||||||
|
: '待入职'}
|
||||||
</span>
|
</span>
|
||||||
|
</div>
|
||||||
|
<div className="margintop5">
|
||||||
|
归档原因:
|
||||||
<span>
|
<span>
|
||||||
| {item.education}
|
{item.pass_why}
|
||||||
</span>
|
|
||||||
<span>
|
|
||||||
|{item.at_school}
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
)
|
||||||
<div className="apply_info-box">
|
})
|
||||||
<div>
|
) : (
|
||||||
申请日期:
|
<div className="margintop30 Empty-box">
|
||||||
<span>
|
<Empty description="暂无数据" />
|
||||||
{item.event_time}
|
</div>
|
||||||
</span>
|
)}
|
||||||
</div>
|
|
||||||
<div className="margintop5">
|
|
||||||
应聘职位:
|
|
||||||
<span>{item.job_name}</span>
|
|
||||||
</div>
|
|
||||||
<div className="margintop5">
|
|
||||||
归档人才库:
|
|
||||||
<span>系统公共人才库</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="apply_info-box">
|
|
||||||
<div>
|
|
||||||
归档日期:
|
|
||||||
<span>
|
|
||||||
{item.pass_time}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div className="margintop5">
|
|
||||||
归档前阶段:
|
|
||||||
<span>
|
|
||||||
{item.ago === 0
|
|
||||||
? '人才推荐'
|
|
||||||
: item.ago === 1
|
|
||||||
? '初筛'
|
|
||||||
: item.ago === 2
|
|
||||||
? '复筛'
|
|
||||||
: item.ago === 3
|
|
||||||
? '面试'
|
|
||||||
: item.ago === 4
|
|
||||||
? '沟通Offer'
|
|
||||||
: '待入职'}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div className="margintop5">
|
|
||||||
归档原因:
|
|
||||||
<span>
|
|
||||||
{item.pass_why}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
})}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="page-box">
|
<div className="page-box">
|
||||||
@ -458,11 +563,14 @@ export default class Talent_pool extends Component {
|
|||||||
visible={this.state.isaddscreen}
|
visible={this.state.isaddscreen}
|
||||||
data={this.state.data}
|
data={this.state.data}
|
||||||
onCancel={() => {
|
onCancel={() => {
|
||||||
this.setState({
|
this.setState(
|
||||||
isaddscreen: false,
|
{
|
||||||
},()=>{
|
isaddscreen: false,
|
||||||
this.handelupdatascreen()
|
},
|
||||||
})
|
() => {
|
||||||
|
this.handelupdatascreen()
|
||||||
|
}
|
||||||
|
)
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
const { createProxyMiddleware } = require('http-proxy-middleware')
|
const { createProxyMiddleware } = require('http-proxy-middleware')
|
||||||
// https://legu-cdn-source.obs.cn-east-2.myhuaweicloud.com
|
// https://legu-cdn-source.obs.cn-east-2.myhuaweicloud.com
|
||||||
module.exports = function(app){
|
module.exports = function(app){
|
||||||
debugger
|
|
||||||
app.use(
|
app.use(
|
||||||
createProxyMiddleware('/pdf',{ //遇见/api1前缀的请求,就会触发该代理配置
|
createProxyMiddleware('/pdf',{ //遇见/pdf前缀的请求,就会触发该代理配置
|
||||||
target:'https://legu-cdn-source.obs.cn-east-2.myhuaweicloud.com', //请求转发给谁
|
target:'https://legu-cdn-source.obs.cn-east-2.myhuaweicloud.com', //请求转发给谁
|
||||||
changeOrigin:true,//控制服务器收到的请求头中Host的值
|
changeOrigin:true,//控制服务器收到的请求头中Host的值
|
||||||
pathRewrite:{'^/pdf':''} //重写请求路径(必须)
|
pathRewrite:{'^/pdf':''}, //重写请求路径(必须)
|
||||||
|
logLevel: "debug",
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
}
|
}
|
@ -28,9 +28,9 @@ import memoryUtils from './memoryUtils'
|
|||||||
import storageUtils from './storageUtils'
|
import storageUtils from './storageUtils'
|
||||||
|
|
||||||
// const baseURL = 'http://10.0.0.94:7800/api/v1'
|
// const baseURL = 'http://10.0.0.94:7800/api/v1'
|
||||||
const baseURL = 'http://10.0.0.240:7800/api/v1'
|
// const baseURL = 'http://10.0.0.240:7800/api/v1'
|
||||||
// const baseURL = 'http://myip.legu.cc:7800/api/v1'
|
// const baseURL = 'http://myip.legu.cc:7800/api/v1'
|
||||||
// const baseURL = 'http://10.0.0.4:7800/api/v1'
|
const baseURL = 'http://10.0.0.4:7800/api/v1'
|
||||||
|
|
||||||
axios.defaults.timeout = 600000
|
axios.defaults.timeout = 600000
|
||||||
axios.defaults.baseURL = baseURL
|
axios.defaults.baseURL = baseURL
|
||||||
|
@ -17,6 +17,11 @@ export function resumeaffix(params){
|
|||||||
return request('post','/itr/resume_affix',params)
|
return request('post','/itr/resume_affix',params)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 手动添加候选人
|
||||||
|
export function manual_resume(params){
|
||||||
|
return request('post','/forms/manual_resume',params)
|
||||||
|
}
|
||||||
|
|
||||||
//面试安排
|
//面试安排
|
||||||
|
|
||||||
//获取用户名
|
//获取用户名
|
||||||
@ -243,5 +248,9 @@ export function get_number(params){
|
|||||||
return request('get','/itr/get_number',params)
|
return request('get','/itr/get_number',params)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function send_talent_pool(params){
|
||||||
|
return request('post','/itr/send_talent_pool',params)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user