前端提交
This commit is contained in:
parent
c2696e5b1c
commit
4139d1b8d4
@ -114,6 +114,8 @@
|
||||
|
||||
.backgroundcolor .ant-tree{ background-color: rgba(255, 255, 255, 0) !important; }
|
||||
|
||||
.textindent7{text-indent: 7px;}
|
||||
|
||||
.fontweight{font-weight: bold;}
|
||||
.padding24 { padding: 24px; }
|
||||
.margin24 { margin: 24px; }
|
||||
|
@ -49,7 +49,6 @@ function AppLayOut() {
|
||||
|
||||
// 鼠标移出
|
||||
const handlMouseLeave = () => {
|
||||
console.log(11111)
|
||||
setCollapsed(true)
|
||||
}
|
||||
|
||||
|
@ -71,7 +71,7 @@ export default function PositionResponsble({ updataPosition, postdata }) {
|
||||
} else {
|
||||
data['list'] = gatuserlist
|
||||
}
|
||||
console.log(data)
|
||||
// console.log(data)
|
||||
setUserlist(data)
|
||||
setVisible(true)
|
||||
},
|
||||
|
@ -20,6 +20,7 @@ import {
|
||||
interviewupdate,
|
||||
sendinterviewee,
|
||||
} from '../../util/requestURL'
|
||||
import PubSub from 'pubsub-js'
|
||||
const { confirm } = Modal
|
||||
|
||||
export default class CandidateTable extends Component {
|
||||
@ -100,6 +101,14 @@ export default class CandidateTable extends Component {
|
||||
}
|
||||
componentDidMount() {
|
||||
this.PostInterviewwaiteinfind()
|
||||
this.updatacandidate = PubSub.subscribe('updatacandidate',(_,stateObj)=>{
|
||||
this.props.updatainterviewstagenum()
|
||||
this.PostInterviewwaiteinfind()
|
||||
})
|
||||
}
|
||||
|
||||
componentWillUnmount(){
|
||||
PubSub.unsubscribe(this.updatacandidate)
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
@ -651,6 +660,9 @@ export default class CandidateTable extends Component {
|
||||
onCancel={() => {
|
||||
this.setState({
|
||||
interviewerInfo: false,
|
||||
},()=>{
|
||||
this.props.updatainterviewstagenum()
|
||||
this.PostInterviewwaiteinfind()
|
||||
})
|
||||
}}
|
||||
onEditresume={() => {
|
||||
|
@ -39,5 +39,5 @@
|
||||
.upload-button-box button { width: 100%; }
|
||||
.upload-button-box .ant-upload-list {display: none;}
|
||||
.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; }
|
||||
|
@ -1,10 +1,12 @@
|
||||
import React,{useEffect} from 'react'
|
||||
import './index.css'
|
||||
import { UploadOutlined } from '@ant-design/icons'
|
||||
import memoryUtils from '../../../util/memoryUtils'
|
||||
import { Button, message, Upload,Input } from 'antd'
|
||||
|
||||
export default function EnclosureTabs({data, Tabsnum}) {
|
||||
|
||||
let userInfo = memoryUtils.userInfo
|
||||
const token = userInfo.token_type + ' ' + userInfo.token || ''
|
||||
useEffect(() => {
|
||||
if (Tabsnum === '6') {
|
||||
// getoperatelog({ user_id: data }).then(
|
||||
@ -21,13 +23,14 @@ export default function EnclosureTabs({data, Tabsnum}) {
|
||||
|
||||
const props = {
|
||||
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://10.0.0.4:7800/api/v1/itr/resume_affix',
|
||||
data:{
|
||||
uid: data.uid
|
||||
uid: data
|
||||
},
|
||||
headers: {
|
||||
authorization: 'authorization-text',
|
||||
Authorization: token,
|
||||
},
|
||||
|
||||
onChange(info) {
|
||||
|
@ -9,31 +9,30 @@ import storageUtils from '../../../util/storageUtils'
|
||||
import './index.css'
|
||||
const { TextArea } = Input
|
||||
|
||||
export default function Feedback({ visible, onClose, uid }) {
|
||||
export default function Feedback({ visible, onClose, uid,setuserid }) {
|
||||
var userInfo = storageUtils.getUser()
|
||||
const [voice, setvoice] = useState(1)
|
||||
const [thought, setthought] = useState(1)
|
||||
const [diathesis, setdiathesis] = useState(1)
|
||||
const [evaluate, setevaluate] = useState('')
|
||||
const [teacherback, setteacherback] = useState(1)
|
||||
const [isupdata, setisupdata] = useState(0)
|
||||
|
||||
// const [isupdata, setisupdata] = useState(0)
|
||||
useEffect(() => {
|
||||
if (uid) {
|
||||
getteacher({ uid: uid }).then(
|
||||
(res) => {
|
||||
if (res.msg === 'ok') {
|
||||
if (res.data.uid) {
|
||||
const user_id = userInfo.user_id
|
||||
if (res.data['survey']['']) {
|
||||
setisupdata(1)
|
||||
setvoice(res.data['survey'][user_id].voice || 1)
|
||||
setthought(res.data['survey'][user_id].thought || 1)
|
||||
if (res.data[0].uid) {
|
||||
const user_id = setuserid.user_id
|
||||
if (res.data[0]['survey'][user_id]) {
|
||||
// setisupdata(1)
|
||||
setvoice(res.data[0]['survey'][user_id].voice || 1)
|
||||
setthought(res.data[0]['survey'][user_id].thought || 1)
|
||||
setdiathesis(
|
||||
res.data['survey'][user_id].diathesis || 1
|
||||
res.data[0]['survey'][user_id].diathesis || 1
|
||||
)
|
||||
setevaluate(res.data['survey'][user_id].evaluate)
|
||||
setteacherback(res.data['survey'][user_id].teacher_back)
|
||||
setevaluate(res.data[0]['survey'][user_id].evaluate)
|
||||
setteacherback(res.data[0]['survey'][user_id].teacher_back)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -47,47 +46,51 @@ export default function Feedback({ visible, onClose, uid }) {
|
||||
|
||||
const handelFeedback = () => {
|
||||
const date = {
|
||||
name: userInfo.name,
|
||||
user_id:setuserid.user_id,
|
||||
name: setuserid.name,
|
||||
voice,
|
||||
thought,
|
||||
diathesis,
|
||||
evaluate,
|
||||
teacher_back: teacherback,
|
||||
teacher_back: teacherback
|
||||
}
|
||||
|
||||
if (isupdata === 0) {
|
||||
interviewteacher({
|
||||
uid: uid,
|
||||
survey: {
|
||||
[userInfo.user_id]: date,
|
||||
},
|
||||
}).then(
|
||||
(res) => {
|
||||
if (res.msg === 'ok') {
|
||||
message.success('添加成功')
|
||||
onClose()
|
||||
}
|
||||
},
|
||||
(err) => {
|
||||
message.error('网络加载失败,请稍后再试')
|
||||
}
|
||||
)
|
||||
} else {
|
||||
// if (isupdata === 0) {
|
||||
// interviewteacher({
|
||||
// uid: uid,
|
||||
// survey: {
|
||||
// [setuserid.user_id]: date,
|
||||
// },
|
||||
// }).then(
|
||||
// (res) => {
|
||||
// if (res.msg === 'ok') {
|
||||
// message.success('添加成功')
|
||||
// onClose()
|
||||
// }
|
||||
// },
|
||||
// (err) => {
|
||||
// message.error('网络加载失败,请稍后再试')
|
||||
// }
|
||||
// )
|
||||
// } else {
|
||||
upteacher({
|
||||
uid: uid,
|
||||
[userInfo.user_id]: date,
|
||||
survey: date,
|
||||
relevancy_id: setuserid.relevancy_id
|
||||
}).then(
|
||||
(res) => {
|
||||
if (res.msg === 'ok') {
|
||||
message.success('修改成功')
|
||||
onClose()
|
||||
}else {
|
||||
message.success(res.msg)
|
||||
}
|
||||
},
|
||||
(err) => {
|
||||
message.error('网络加载失败,请稍后再试')
|
||||
}
|
||||
)
|
||||
}
|
||||
// }
|
||||
}
|
||||
|
||||
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 Enterthenextstage from '../../Enterthenextstage'
|
||||
import { record, teacherstate } from '../../../util/requestURL'
|
||||
@ -13,17 +18,23 @@ import {
|
||||
|
||||
const { Panel } = Collapse
|
||||
|
||||
export default function InterviewTabs({
|
||||
data,
|
||||
Tabsnum,
|
||||
setisfeedback,
|
||||
seefeedback,
|
||||
}) {
|
||||
const InterviewTabs = ({ data, Tabsnum, setisfeedback, seefeedback },ref) => {
|
||||
const [isenterthenextstage, setisenterthenextstage] = useState(false)
|
||||
const [datalist, setdatalist] = useState([])
|
||||
let userinfo = storageUtils.getUser()
|
||||
|
||||
console.log(ref)
|
||||
useImperativeHandle(ref, () => ({
|
||||
getData: updatarecord
|
||||
}))
|
||||
|
||||
useEffect(() => {
|
||||
if (Tabsnum === '2') {
|
||||
updatarecord()
|
||||
}
|
||||
}, [Tabsnum])
|
||||
|
||||
const updatarecord = () => {
|
||||
record({ uid: data.uid }).then(
|
||||
(res) => {
|
||||
// console.log(res)
|
||||
@ -34,7 +45,6 @@ export default function InterviewTabs({
|
||||
}
|
||||
)
|
||||
}
|
||||
}, [Tabsnum])
|
||||
|
||||
const handelFeedback = (record) => {
|
||||
teacherstate({
|
||||
@ -134,7 +144,7 @@ export default function InterviewTabs({
|
||||
/>{' '}
|
||||
未评估
|
||||
</div>
|
||||
) : item.teacher_back ===
|
||||
) : items.teacher_back ===
|
||||
1 ? (
|
||||
<div>
|
||||
<LikeOutlined
|
||||
@ -144,7 +154,7 @@ export default function InterviewTabs({
|
||||
/>{' '}
|
||||
满意
|
||||
</div>
|
||||
) : item.teacher_back ===
|
||||
) : items.teacher_back ===
|
||||
2 ? (
|
||||
<div>
|
||||
<LikeOutlined
|
||||
@ -154,7 +164,7 @@ export default function InterviewTabs({
|
||||
/>{' '}
|
||||
非常满意
|
||||
</div>
|
||||
) : item.teacher_back ===
|
||||
) : items.teacher_back ===
|
||||
3 ? (
|
||||
<div>
|
||||
<DislikeOutlined
|
||||
@ -178,8 +188,7 @@ export default function InterviewTabs({
|
||||
</div>
|
||||
|
||||
<div>
|
||||
{item.back_status ===
|
||||
0 ? (
|
||||
{!items.type ? (
|
||||
<div>
|
||||
<Button
|
||||
type="link"
|
||||
@ -191,12 +200,20 @@ export default function InterviewTabs({
|
||||
>
|
||||
催促反馈
|
||||
</Button>
|
||||
{userinfo.id ===
|
||||
items.user_id || userinfo.name === 'root' ? (
|
||||
{userinfo.user_id ===
|
||||
items.user_id ||
|
||||
userinfo.name ===
|
||||
'root' ? (
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
setisfeedback()
|
||||
setisfeedback(
|
||||
{
|
||||
...items,
|
||||
relevancy_id:
|
||||
item.relevancy_id,
|
||||
}
|
||||
)
|
||||
}}
|
||||
>
|
||||
填写反馈
|
||||
@ -210,7 +227,13 @@ export default function InterviewTabs({
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
seefeedback()
|
||||
seefeedback(
|
||||
{
|
||||
...items,
|
||||
relevancy_id:
|
||||
item.relevancy_id,
|
||||
}
|
||||
)
|
||||
}}
|
||||
>
|
||||
查看反馈
|
||||
@ -255,3 +278,5 @@ export default function InterviewTabs({
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default forwardRef(InterviewTabs)
|
||||
|
@ -31,7 +31,7 @@ import {
|
||||
const { Option } = Select
|
||||
const dateFormat = 'YYYY/MM/DD'
|
||||
|
||||
export default function OfferTabs({ data }) {
|
||||
export default function OfferTabs({ data , updata }) {
|
||||
const [OfferPostList, setOfferPostList] = useState([]) //offer发送记录
|
||||
const [Offerstate, setOfferstate] = useState(false)
|
||||
const [offerdata, setoffdata] = useState({
|
||||
@ -92,8 +92,11 @@ export default function OfferTabs({ data }) {
|
||||
job_id: data.job_id,
|
||||
}).then(
|
||||
(res) => {
|
||||
console.log(res.data)
|
||||
// setOfferPostList(res.data)
|
||||
|
||||
if(res.msg === 'ok'){
|
||||
message.success('操作成功')
|
||||
updata();
|
||||
}
|
||||
},
|
||||
(err) => {
|
||||
message.error('网络加载错误,请稍后再试')
|
||||
@ -153,7 +156,15 @@ export default function OfferTabs({ data }) {
|
||||
|
||||
<div className="OfferTabs-title-box">入职记录</div>
|
||||
<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="">
|
||||
<Button
|
||||
onClick={() => {
|
||||
@ -164,7 +175,7 @@ export default function OfferTabs({ data }) {
|
||||
</Button>
|
||||
<Button
|
||||
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 Steptone from '../Steptone'
|
||||
import InterviewTabs from './InterviewTabs'
|
||||
@ -37,6 +37,8 @@ export default function InterviewerInfoPop({
|
||||
const [isremarks, setisremarks] = useState(false)
|
||||
const [Tabsnum, setTabsnum] = useState(0)
|
||||
const [isfeedback, setisfeedback] = useState(false)
|
||||
const [userid , setuserid] = useState();
|
||||
const updatarecord = useRef()
|
||||
|
||||
const onChange = (key) => {
|
||||
// console.log(key)
|
||||
@ -88,6 +90,11 @@ export default function InterviewerInfoPop({
|
||||
setisremarks(false)
|
||||
}
|
||||
|
||||
//添加反馈后更新面试信息
|
||||
const updatarecordlist = ()=>{
|
||||
updatarecord.current.getData();
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Modal
|
||||
@ -492,18 +499,24 @@ export default function InterviewerInfoPop({
|
||||
<InterviewTabs
|
||||
data={candidateinfo}
|
||||
Tabsnum={Tabsnum}
|
||||
setisfeedback={() => {
|
||||
setuserid= {userid}
|
||||
ref={updatarecord}
|
||||
setisfeedback={(userid) => {
|
||||
setisfeedback(true)
|
||||
setuserid(userid)
|
||||
}}
|
||||
seefeedback={() => {
|
||||
seefeedback={(userid) => {
|
||||
setisfeedback(true)
|
||||
postfindcriterion()
|
||||
setuserid(userid)
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</TabPane>
|
||||
<TabPane tab="Offer/录用" key="4">
|
||||
<OfferTabs data={candidateinfo} />
|
||||
<OfferTabs data={candidateinfo} updata={()=>{
|
||||
postfindcriterion()
|
||||
}}/>
|
||||
</TabPane>
|
||||
|
||||
<TabPane
|
||||
@ -551,7 +564,7 @@ export default function InterviewerInfoPop({
|
||||
type="primary"
|
||||
block
|
||||
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>
|
||||
@ -559,7 +572,7 @@ export default function InterviewerInfoPop({
|
||||
''
|
||||
)}
|
||||
|
||||
{candidateinfo.teacher_state != 2 ? (
|
||||
{/* {candidateinfo.teacher_state != 2 ? (
|
||||
<Button
|
||||
block
|
||||
onClick={() => {
|
||||
@ -579,7 +592,7 @@ export default function InterviewerInfoPop({
|
||||
>
|
||||
修改反馈
|
||||
</Button>
|
||||
)}
|
||||
)} */}
|
||||
|
||||
<Button
|
||||
block
|
||||
@ -629,9 +642,11 @@ export default function InterviewerInfoPop({
|
||||
<Feedback
|
||||
visible={isfeedback}
|
||||
uid={candidateinfo.uid}
|
||||
setuserid= {userid}
|
||||
onClose={() => {
|
||||
setisfeedback(false)
|
||||
postfindcriterion()
|
||||
updatarecordlist()
|
||||
}}
|
||||
/>
|
||||
</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,
|
||||
} from '@ant-design/icons'
|
||||
|
||||
|
||||
const { Search } = Input
|
||||
// const suffix = (
|
||||
// <AudioOutlined
|
||||
|
@ -18,11 +18,10 @@ export default class Originalresume extends Component {
|
||||
var url = ""
|
||||
if(JSON.stringify(data) != "{}"){
|
||||
const urlarr = data.file_url.split('hrms/')
|
||||
// url = 'http://localhost:3000/pdf/hrms/' + decodeURIComponent(urlarr[1])
|
||||
url = 'http://10.0.0.4/pdf/hrms/' + decodeURIComponent(urlarr[1])
|
||||
// url = './pdf/hrms/' + decodeURIComponent(urlarr[1])
|
||||
url = data.file_url
|
||||
}
|
||||
|
||||
|
||||
return (
|
||||
<div>
|
||||
{
|
||||
|
@ -1,24 +1,29 @@
|
||||
import React, { useState } from 'react'
|
||||
import ResumeUpload from '../../pages/ResumeUpload'
|
||||
import Uploadresume from '../Uploadresume'
|
||||
import Manualaddcandidate from '../Manualaddcandidate'
|
||||
import { Button, Dropdown, Menu } from 'antd'
|
||||
import { useNavigate } from 'react-router-dom'
|
||||
|
||||
import { PlusOutlined } from '@ant-design/icons'
|
||||
import PubSub from 'pubsub-js'
|
||||
|
||||
export default function ResumeUploadPop() {
|
||||
const navigate = useNavigate()
|
||||
const [visible, setVisible] = useState(false)
|
||||
const [usvisible, setusvisible] = useState(false)
|
||||
const [Manualvisible,setManualvisible] = useState(false)
|
||||
|
||||
//上传简历导出的数据
|
||||
const [data, setdata] = useState([])
|
||||
|
||||
const onCreate = (values) => {
|
||||
console.log('Received values of form: ', values)
|
||||
setVisible(false)
|
||||
}
|
||||
|
||||
const ManualonCreate = () =>{
|
||||
setManualvisible(false)
|
||||
}
|
||||
|
||||
const UsonCreate = (values) => {
|
||||
setusvisible(false)
|
||||
}
|
||||
@ -26,7 +31,8 @@ export default function ResumeUploadPop() {
|
||||
const onMenuClick = (e) => {
|
||||
console.log('click', e)
|
||||
if (e.key == 1) {
|
||||
setVisible(true)
|
||||
// setVisible(true)
|
||||
setManualvisible(true)
|
||||
} else if (e.key == 2) {
|
||||
//跳转到添加职位界面
|
||||
navigate('/admin/position/addposition')
|
||||
@ -39,10 +45,10 @@ export default function ResumeUploadPop() {
|
||||
<Menu
|
||||
onClick={onMenuClick}
|
||||
items={[
|
||||
// {
|
||||
// key: '1',
|
||||
// label: '添加简历',
|
||||
// },
|
||||
{
|
||||
key: '1',
|
||||
label: '添加候选人',
|
||||
},
|
||||
{
|
||||
key: '4',
|
||||
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
|
||||
visible={usvisible}
|
||||
onCreate={UsonCreate}
|
||||
@ -89,6 +108,7 @@ export default function ResumeUploadPop() {
|
||||
setusvisible(false)
|
||||
setVisible(true)
|
||||
setdata(data)
|
||||
PubSub.publish('updatacandidate', {isupdata: true})
|
||||
}}
|
||||
onCancel={() => {
|
||||
setusvisible(false)
|
||||
|
@ -37,9 +37,9 @@ export default class Candidate extends Component {
|
||||
const props = {
|
||||
name: 'file',
|
||||
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://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: {
|
||||
Authorization: token,
|
||||
},
|
||||
@ -66,9 +66,9 @@ export default class Candidate extends Component {
|
||||
candidatedata.data['uid'] =
|
||||
info.file.response.data.uid
|
||||
candidatedata.data['owner_name'] =
|
||||
this.state.owner_name
|
||||
that.state.owner_name
|
||||
candidatedata.data['resume_affix_id'] =
|
||||
this.state.resume_affix_id
|
||||
that.state.resume_affix_id
|
||||
that.props.onResumeUpload(candidatedata)
|
||||
}
|
||||
} else {
|
||||
@ -115,9 +115,9 @@ export default class Candidate extends Component {
|
||||
const propss = {
|
||||
name: 'file',
|
||||
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://10.0.0.4:7800/api/v1/itr/resume_affix',
|
||||
action: 'http://10.0.0.4:7800/api/v1/itr/resume_affix',
|
||||
headers: {
|
||||
Authorization: token,
|
||||
},
|
||||
|
@ -40,7 +40,7 @@ export default class ResumeUpload extends Component {
|
||||
|
||||
render(){
|
||||
const { visible, onCancel, onCreate,onReupload, data } = this.props
|
||||
|
||||
// console.log(data)
|
||||
return(
|
||||
<div className="ResumeUpload-box">
|
||||
<Modal
|
||||
|
@ -38,6 +38,8 @@ export default class Candidate extends Component {
|
||||
componentDidMount() {
|
||||
PubSub.publish('headtitle', { headtitle: '候选人管理' })
|
||||
|
||||
|
||||
|
||||
getsection().then(
|
||||
(res) => {
|
||||
const data = res.data
|
||||
@ -93,8 +95,6 @@ export default class Candidate extends Component {
|
||||
const onSelect = (selectedKeys, info) => {
|
||||
// console.log(selectedKeys)
|
||||
if(selectedKeys[0].length > 3){
|
||||
console.log(selectedKeys)
|
||||
console.log(info.node.title)
|
||||
this.setState({
|
||||
job_names:info.node.title
|
||||
})
|
||||
@ -106,6 +106,7 @@ export default class Candidate extends Component {
|
||||
this.setState({
|
||||
step: key,
|
||||
})
|
||||
this.updatainterviewstagenum()
|
||||
}
|
||||
|
||||
const treeSeletData = [
|
||||
|
@ -151,7 +151,7 @@ function Interview() {
|
||||
// 查看详情里面编辑按钮
|
||||
const onEditresume = (data) => {
|
||||
setInterviewerInfo(false)
|
||||
console.log(data)
|
||||
// console.log(data)
|
||||
setTimeout(() => {
|
||||
setEditresume(true)
|
||||
}, 500)
|
||||
@ -318,11 +318,15 @@ function Interview() {
|
||||
render: (text, record, index) => (
|
||||
<div className="font-size14 color1">
|
||||
{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>
|
||||
),
|
||||
},
|
||||
@ -338,13 +342,13 @@ function Interview() {
|
||||
>
|
||||
查看详情
|
||||
</span>
|
||||
<span
|
||||
{/* <span
|
||||
className="cursor"
|
||||
style={{ margin: '0px 5px' }}
|
||||
onClick={() => handelFeedback(record, index)}
|
||||
>
|
||||
{text.type === 0 ? '催促反馈' : ''}
|
||||
</span>
|
||||
</span> */}
|
||||
</div>
|
||||
),
|
||||
},
|
||||
|
@ -23,16 +23,11 @@ import {
|
||||
} from '@ant-design/icons'
|
||||
import { interviewstagenu } from '../../../util/requestURL'
|
||||
import { Link } from 'react-router-dom'
|
||||
import storageUtils from '../../../util/storageUtils'
|
||||
import './index.css'
|
||||
const { TabPane } = Tabs
|
||||
const { CheckableTag } = Tag
|
||||
const tagsData = [
|
||||
'面试反馈',
|
||||
'安排面试',
|
||||
'通讯记录',
|
||||
'面试官拒绝面试',
|
||||
'其它',
|
||||
]
|
||||
const tagsData = ['面试反馈', '安排面试', '通讯记录', '面试官拒绝面试', '其它']
|
||||
|
||||
export default class Overview extends Component {
|
||||
state = {
|
||||
@ -52,14 +47,17 @@ export default class Overview extends Component {
|
||||
},
|
||||
],
|
||||
data: [],
|
||||
userinfo:{rank:1}
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
PubSub.publish('headtitle', { headtitle: '总览' })
|
||||
let userinfo = storageUtils.getUser()
|
||||
interviewstagenu({ date: {} }).then(
|
||||
(res) => {
|
||||
this.setState({
|
||||
data: res.data,
|
||||
userinfo: userinfo,
|
||||
})
|
||||
},
|
||||
(err) => {
|
||||
@ -69,7 +67,7 @@ export default class Overview extends Component {
|
||||
}
|
||||
|
||||
render() {
|
||||
const { data } = this.state
|
||||
const { data, userinfo } = this.state
|
||||
|
||||
const onChange = (key) => {
|
||||
console.log(key)
|
||||
@ -115,11 +113,19 @@ export default class Overview extends Component {
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="Overview-card-list">
|
||||
{userinfo.rank === 1 ? (
|
||||
<Link to={'/admin/candidate'}>
|
||||
<p>{data[1]}</p>
|
||||
<span>今日待筛选申请</span>
|
||||
</Link>
|
||||
) : (
|
||||
<Link to={'/admin/Interview_manager'}>
|
||||
<p>{data[1]}</p>
|
||||
<span>今日待筛选申请</span>
|
||||
</Link>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
<div className="xian"></div>
|
||||
@ -133,10 +139,17 @@ export default class Overview extends Component {
|
||||
/>
|
||||
</div>
|
||||
<div className="Overview-card-list">
|
||||
{userinfo.rank === 1 ? (
|
||||
<Link to={'/admin/interview'}>
|
||||
<p>{data.now}</p>
|
||||
<span>今日面试</span>
|
||||
</Link>
|
||||
) : (
|
||||
<Link to={'/admin/Interview_manager'}>
|
||||
<p>{data.now}</p>
|
||||
<span>今日面试</span>
|
||||
</Link>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -147,16 +160,30 @@ export default class Overview extends Component {
|
||||
</div>
|
||||
<div className="Overview-card-list-box2">
|
||||
<div className="Overview-card-list2">
|
||||
{userinfo.rank === 1 ? (
|
||||
<Link to={'/admin/candidate'}>
|
||||
<p>{data.offer}</p>
|
||||
<span>待发送Offer</span>
|
||||
</Link>
|
||||
) : (
|
||||
<Link to={'/admin/Interview_manager'}>
|
||||
<p>{data.offer}</p>
|
||||
<span>待发送Offer</span>
|
||||
</Link>
|
||||
)}
|
||||
</div>
|
||||
<div className="Overview-card-list2">
|
||||
{userinfo.rank === 1 ? (
|
||||
<Link to={'/admin/candidate'}>
|
||||
<p>{data[6]}</p>
|
||||
<span>待入职</span>
|
||||
</Link>
|
||||
) : (
|
||||
<Link to={'/admin/Interview_manager'}>
|
||||
<p>{data[6]}</p>
|
||||
<span>待入职</span>
|
||||
</Link>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -167,22 +194,43 @@ export default class Overview extends Component {
|
||||
</div>
|
||||
<div className="Overview-card-list-box2">
|
||||
<div className="color8 Overview-card-list2">
|
||||
{userinfo.rank === 1 ? (
|
||||
<Link to={'/admin/interview'}>
|
||||
<p>0</p>
|
||||
<span>待面试</span>
|
||||
</Link>
|
||||
) : (
|
||||
<Link to={'/admin/Interview_manager'}>
|
||||
<p>0</p>
|
||||
<span>待面试</span>
|
||||
</Link>
|
||||
)}
|
||||
</div>
|
||||
<div className="Overview-card-list2">
|
||||
{userinfo.rank === 1 ? (
|
||||
<Link to={'/admin/interview'}>
|
||||
<p>0</p>
|
||||
<span>待反馈</span>
|
||||
</Link>
|
||||
) : (
|
||||
<Link to={'/admin/Interview_manager'}>
|
||||
<p>0</p>
|
||||
<span>待反馈</span>
|
||||
</Link>
|
||||
)}
|
||||
</div>
|
||||
<div className="Overview-card-list2">
|
||||
{userinfo.rank === 1 ? (
|
||||
<Link to={'/admin/candidate'}>
|
||||
<p>0</p>
|
||||
<span>待处理</span>
|
||||
</Link>
|
||||
) : (
|
||||
<Link to={'/admin/Interview_manager'}>
|
||||
<p>0</p>
|
||||
<span>待处理</span>
|
||||
</Link>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -19,5 +19,5 @@
|
||||
.Resumescreen-list-data-box .CandidateTable-owner { width: 10%; }
|
||||
.Resumescreen-list-data-box .CandidateTable-list-box { align-items: center; }
|
||||
.Resumescreen-list-data-box .CandidateTable-info { margin-left: 0; }
|
||||
|
||||
|
||||
.tongyi { color: rgb(12, 140, 246); }
|
||||
.jvj { color: #ff4d4f; }
|
||||
|
@ -37,7 +37,8 @@ export default class Resumescreen extends Component {
|
||||
hr_manner: 2,
|
||||
userInfo: storageUtils.getUser(),
|
||||
interviewerInfo: false,
|
||||
uid: 0
|
||||
uid: 0,
|
||||
types: true,
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
@ -55,15 +56,27 @@ export default class Resumescreen extends Component {
|
||||
}
|
||||
|
||||
Updatalist = () => {
|
||||
const { name, job_id, hr_manner, userInfo } = this.state
|
||||
interviewfind({
|
||||
interview_query: {
|
||||
const { name, job_id, hr_manner, userInfo, types } = this.state
|
||||
const interview_query = types === "true" ? (
|
||||
{
|
||||
interview_stage: 1,
|
||||
department: userInfo.user_id,
|
||||
name: name,
|
||||
job_id: job_id,
|
||||
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: {},
|
||||
}).then(
|
||||
(res) => {
|
||||
@ -75,19 +88,18 @@ export default class Resumescreen extends Component {
|
||||
)
|
||||
|
||||
interviewmannernum({
|
||||
interview_query: {
|
||||
interview_stage: 1,
|
||||
department: userInfo.user_id,
|
||||
data: {
|
||||
name: name,
|
||||
job_id: job_id
|
||||
job_id: job_id,
|
||||
hr_manner: hr_manner,
|
||||
department: userInfo.user_id,
|
||||
},
|
||||
data_in: {},
|
||||
types: types,
|
||||
}).then(
|
||||
(res) => {
|
||||
console.log(res.data)
|
||||
this.setState({
|
||||
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) => {}
|
||||
@ -101,8 +113,9 @@ export default class Resumescreen extends Component {
|
||||
}
|
||||
|
||||
handeleditstate = (uid, hr_manner) => {
|
||||
const interview_stage = hr_manner === 1 ? 2 : 11
|
||||
interviewupdate({
|
||||
data_in: { hr_manner: hr_manner, interview_stage:2 },
|
||||
data_in: { hr_manner: hr_manner, interview_stage: interview_stage },
|
||||
interview_query: { uid: uid },
|
||||
}).then(
|
||||
(res) => {
|
||||
@ -120,9 +133,21 @@ export default class Resumescreen extends Component {
|
||||
}
|
||||
|
||||
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(
|
||||
{
|
||||
hr_manner: e,
|
||||
types: e,
|
||||
hr_manner: newhr_manner,
|
||||
},
|
||||
() => {
|
||||
this.Updatalist()
|
||||
@ -131,15 +156,15 @@ export default class Resumescreen extends Component {
|
||||
}
|
||||
|
||||
handelCandidateClick = (uid) => {
|
||||
console.log(uid)
|
||||
this.setState({
|
||||
interviewerInfo: true,
|
||||
uid : uid
|
||||
uid: uid,
|
||||
})
|
||||
}
|
||||
|
||||
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)
|
||||
return (
|
||||
<div className="Resumescreen-box">
|
||||
@ -193,7 +218,7 @@ export default class Resumescreen extends Component {
|
||||
<div className="Resumescreen-list-data-box">
|
||||
<div className="Resumescreen-list-tab-box">
|
||||
<Tabs
|
||||
defaultActiveKey="2"
|
||||
defaultActiveKey={true}
|
||||
onChange={(e) => this.handelonChange(e)}
|
||||
>
|
||||
<Tabs.TabPane
|
||||
@ -205,7 +230,7 @@ export default class Resumescreen extends Component {
|
||||
<div>待筛选的候选人</div>
|
||||
</div>
|
||||
}
|
||||
key={2}
|
||||
key={true}
|
||||
></Tabs.TabPane>
|
||||
<Tabs.TabPane
|
||||
tab={
|
||||
@ -216,7 +241,7 @@ export default class Resumescreen extends Component {
|
||||
<div>筛选记录</div>
|
||||
</div>
|
||||
}
|
||||
key=""
|
||||
key={false}
|
||||
></Tabs.TabPane>
|
||||
</Tabs>
|
||||
</div>
|
||||
@ -241,7 +266,9 @@ export default class Resumescreen extends Component {
|
||||
className="CandidateTable-list-box"
|
||||
key={item.uid}
|
||||
onClick={() =>
|
||||
this.handelCandidateClick(item.uid)
|
||||
this.handelCandidateClick(
|
||||
item.uid
|
||||
)
|
||||
}
|
||||
>
|
||||
<div className="CandidateTable-info-box">
|
||||
@ -354,10 +381,13 @@ export default class Resumescreen extends Component {
|
||||
{item.interview_stage}
|
||||
</span>
|
||||
</div>
|
||||
<div className="CandidateTable-owner">
|
||||
{hr_manner === 2 ? (
|
||||
<div className="CandidateTable-owner textindent7">
|
||||
<Button
|
||||
type="text"
|
||||
style={{ color: '#0c8cf6' }}
|
||||
style={{
|
||||
color: '#0c8cf6',
|
||||
}}
|
||||
onClick={(e) => {
|
||||
e.stopPropagation()
|
||||
this.handeleditstate(
|
||||
@ -370,7 +400,9 @@ export default class Resumescreen extends Component {
|
||||
</Button>
|
||||
<Button
|
||||
type="text"
|
||||
style={{ color: '#0c8cf6' }}
|
||||
style={{
|
||||
color: '#0c8cf6',
|
||||
}}
|
||||
onClick={(e) => {
|
||||
e.stopPropagation()
|
||||
this.handeleditstate(
|
||||
@ -382,6 +414,19 @@ export default class Resumescreen extends Component {
|
||||
拒绝
|
||||
</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>
|
||||
)
|
||||
})
|
||||
@ -407,7 +452,6 @@ export default class Resumescreen extends Component {
|
||||
interviewerInfo: false,
|
||||
})
|
||||
}}
|
||||
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
|
@ -124,6 +124,8 @@
|
||||
|
||||
.talentpool-table-action {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
border-bottom: 1px solid #f4f4f5; padding: 10px 0;
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,7 @@ import {
|
||||
message,
|
||||
Pagination,
|
||||
Modal,
|
||||
Button,
|
||||
} from 'antd'
|
||||
import Addscreen from './Addscreen'
|
||||
import {
|
||||
@ -14,7 +15,8 @@ import {
|
||||
talent_pool,
|
||||
talent_pool_nu,
|
||||
option,
|
||||
get_number
|
||||
get_number,
|
||||
send_talent_pool,
|
||||
} from '../../../util/requestURL'
|
||||
import {
|
||||
PrinterFilled,
|
||||
@ -40,21 +42,23 @@ export default class Talent_pool extends Component {
|
||||
pages: 1,
|
||||
total: 0,
|
||||
candidate: 0,
|
||||
now:0
|
||||
now: 0,
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
PubSub.publish('headtitle', { headtitle: '人才库' })
|
||||
get_number().then((res)=>{
|
||||
get_number().then(
|
||||
(res) => {
|
||||
console.log(res)
|
||||
this.setState({
|
||||
candidate: res.data.candidate,
|
||||
now: res.data.now
|
||||
now: res.data.now,
|
||||
})
|
||||
},
|
||||
(err) => {
|
||||
message.error('网络错误,请稍后再试')
|
||||
})
|
||||
}
|
||||
)
|
||||
this.handelupdatascreen()
|
||||
this.posttalentpool()
|
||||
}
|
||||
@ -152,6 +156,67 @@ export default class Talent_pool extends Component {
|
||||
|
||||
render() {
|
||||
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 (
|
||||
<div className="talentpool-box">
|
||||
{/* <Empty description="该功能暂未开放" className='talentpool-Empty-box'/> */}
|
||||
@ -293,15 +358,32 @@ export default class Talent_pool extends Component {
|
||||
<div className="talentpool-list-box">
|
||||
<div className="talentpool-table-action">
|
||||
<div className="qxcheck-box">
|
||||
<Checkbox>
|
||||
<Checkbox
|
||||
onChange={onAllChange}
|
||||
checked={
|
||||
choiceCount === todata
|
||||
? true
|
||||
: false
|
||||
}
|
||||
>
|
||||
<CaretDownFilled
|
||||
style={{ color: '#424954' }}
|
||||
/>
|
||||
</Checkbox>
|
||||
</div>
|
||||
<div>
|
||||
<Button
|
||||
type="primary"
|
||||
onClick={handeladdCandidate}
|
||||
>
|
||||
{' '}
|
||||
+ 添加到候选人
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
{datalist.map((item, key) => {
|
||||
{datalist.length > 0 ? (
|
||||
datalist.map((item, key) => {
|
||||
return (
|
||||
<div
|
||||
className="talentpool-info-box"
|
||||
@ -309,7 +391,13 @@ export default class Talent_pool extends Component {
|
||||
>
|
||||
<div className="talentpool-list-left">
|
||||
<div>
|
||||
<Checkbox></Checkbox>
|
||||
<Checkbox
|
||||
checked={
|
||||
item.choice
|
||||
}
|
||||
onChange={onChange}
|
||||
value={item.id_card}
|
||||
></Checkbox>
|
||||
</div>
|
||||
<div className="talentpool-info">
|
||||
<div>
|
||||
@ -323,7 +411,8 @@ export default class Talent_pool extends Component {
|
||||
| {item.age}
|
||||
</span>
|
||||
<span className="exp">
|
||||
{item.work_exp === 0
|
||||
{item.work_exp ===
|
||||
0
|
||||
? '| 实习生'
|
||||
: item.work_exp ===
|
||||
1
|
||||
@ -337,7 +426,9 @@ export default class Talent_pool extends Component {
|
||||
<BlockOutlined />{' '}
|
||||
</span>{' '}
|
||||
<span className="similar-num">
|
||||
{item.similarity}
|
||||
{
|
||||
item.similarity
|
||||
}
|
||||
位相似候选人
|
||||
</span>
|
||||
</div>
|
||||
@ -346,7 +437,9 @@ export default class Talent_pool extends Component {
|
||||
return (
|
||||
<div
|
||||
className="work-exp-box"
|
||||
key={index}
|
||||
key={
|
||||
index
|
||||
}
|
||||
>
|
||||
<CalendarFilled />
|
||||
<span>
|
||||
@ -377,13 +470,16 @@ export default class Talent_pool extends Component {
|
||||
{item.school}
|
||||
</span>
|
||||
<span>
|
||||
| {item.specialty}
|
||||
|{' '}
|
||||
{item.specialty}
|
||||
</span>
|
||||
<span>
|
||||
| {item.education}
|
||||
|{' '}
|
||||
{item.education}
|
||||
</span>
|
||||
<span>
|
||||
|{item.at_school}
|
||||
|
|
||||
{item.at_school}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@ -398,11 +494,15 @@ export default class Talent_pool extends Component {
|
||||
</div>
|
||||
<div className="margintop5">
|
||||
应聘职位:
|
||||
<span>{item.job_name}</span>
|
||||
<span>
|
||||
{item.job_name}
|
||||
</span>
|
||||
</div>
|
||||
<div className="margintop5">
|
||||
归档人才库:
|
||||
<span>系统公共人才库</span>
|
||||
<span>
|
||||
系统公共人才库
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -438,7 +538,12 @@ export default class Talent_pool extends Component {
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
})}
|
||||
})
|
||||
) : (
|
||||
<div className="margintop30 Empty-box">
|
||||
<Empty description="暂无数据" />
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
<div className="page-box">
|
||||
@ -458,11 +563,14 @@ export default class Talent_pool extends Component {
|
||||
visible={this.state.isaddscreen}
|
||||
data={this.state.data}
|
||||
onCancel={() => {
|
||||
this.setState({
|
||||
this.setState(
|
||||
{
|
||||
isaddscreen: false,
|
||||
},()=>{
|
||||
},
|
||||
() => {
|
||||
this.handelupdatascreen()
|
||||
})
|
||||
}
|
||||
)
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
|
@ -1,12 +1,12 @@
|
||||
const { createProxyMiddleware } = require('http-proxy-middleware')
|
||||
// https://legu-cdn-source.obs.cn-east-2.myhuaweicloud.com
|
||||
module.exports = function(app){
|
||||
debugger
|
||||
app.use(
|
||||
createProxyMiddleware('/pdf',{ //遇见/api1前缀的请求,就会触发该代理配置
|
||||
createProxyMiddleware('/pdf',{ //遇见/pdf前缀的请求,就会触发该代理配置
|
||||
target:'https://legu-cdn-source.obs.cn-east-2.myhuaweicloud.com', //请求转发给谁
|
||||
changeOrigin:true,//控制服务器收到的请求头中Host的值
|
||||
pathRewrite:{'^/pdf':''} //重写请求路径(必须)
|
||||
pathRewrite:{'^/pdf':''}, //重写请求路径(必须)
|
||||
logLevel: "debug",
|
||||
}),
|
||||
)
|
||||
}
|
@ -28,9 +28,9 @@ import memoryUtils from './memoryUtils'
|
||||
import storageUtils from './storageUtils'
|
||||
|
||||
// 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://10.0.0.4:7800/api/v1'
|
||||
const baseURL = 'http://10.0.0.4:7800/api/v1'
|
||||
|
||||
axios.defaults.timeout = 600000
|
||||
axios.defaults.baseURL = baseURL
|
||||
|
@ -17,6 +17,11 @@ export function resumeaffix(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)
|
||||
}
|
||||
|
||||
export function send_talent_pool(params){
|
||||
return request('post','/itr/send_talent_pool',params)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user