From 4139d1b8d4ef9de055a81cae84be1894afebaf7d Mon Sep 17 00:00:00 2001 From: luosongbai <15272473386@163.com> Date: Thu, 10 Nov 2022 11:31:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=89=8D=E7=AB=AF=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.css | 2 + src/AppLayOut.jsx | 1 - .../AddPosition/PositionResponsble/index.jsx | 2 +- src/components/CandidateTable/index.jsx | 14 +- src/components/Editresume/index.css | 2 +- .../EnclosureTabs/index.jsx | 9 +- .../InterviewerInfoPop/Feedback/index.jsx | 73 +-- .../InterviewTabs/index.jsx | 75 ++- .../InterviewerInfoPop/OfferTabs/index.jsx | 21 +- src/components/InterviewerInfoPop/index.jsx | 29 +- .../StandardResume/index.css | 9 + .../StandardResume/index.jsx | 540 ++++++++++++++++++ src/components/Manualaddcandidate/index.css | 25 + src/components/Manualaddcandidate/index.jsx | 267 +++++++++ src/components/NavHeader/index.jsx | 1 + src/components/Originalresume/index.jsx | 5 +- src/components/ResumeUploadPop/index.jsx | 34 +- src/components/Uploadresume/index.jsx | 12 +- src/pages/ResumeUpload/index.jsx | 2 +- src/pages/admin/Candidate/index.jsx | 5 +- src/pages/admin/Interview/index.jsx | 16 +- src/pages/admin/Overview/index.jsx | 120 ++-- src/pages/admin/Resumescreen/index.css | 4 +- src/pages/admin/Resumescreen/index.jsx | 182 +++--- src/pages/admin/Talent_pool/index.css | 2 + src/pages/admin/Talent_pool/index.jsx | 400 ++++++++----- src/setupProxy.js | 6 +- src/util/request.js | 4 +- src/util/requestURL.js | 9 + 29 files changed, 1509 insertions(+), 362 deletions(-) create mode 100644 src/components/Manualaddcandidate/StandardResume/index.css create mode 100644 src/components/Manualaddcandidate/StandardResume/index.jsx create mode 100644 src/components/Manualaddcandidate/index.css create mode 100644 src/components/Manualaddcandidate/index.jsx diff --git a/src/App.css b/src/App.css index 621fb31..73c9886 100644 --- a/src/App.css +++ b/src/App.css @@ -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; } diff --git a/src/AppLayOut.jsx b/src/AppLayOut.jsx index 5bd67a1..3621981 100644 --- a/src/AppLayOut.jsx +++ b/src/AppLayOut.jsx @@ -49,7 +49,6 @@ function AppLayOut() { // 鼠标移出 const handlMouseLeave = () => { - console.log(11111) setCollapsed(true) } diff --git a/src/components/AddPosition/PositionResponsble/index.jsx b/src/components/AddPosition/PositionResponsble/index.jsx index fe295eb..b8ec83a 100644 --- a/src/components/AddPosition/PositionResponsble/index.jsx +++ b/src/components/AddPosition/PositionResponsble/index.jsx @@ -71,7 +71,7 @@ export default function PositionResponsble({ updataPosition, postdata }) { } else { data['list'] = gatuserlist } - console.log(data) + // console.log(data) setUserlist(data) setVisible(true) }, diff --git a/src/components/CandidateTable/index.jsx b/src/components/CandidateTable/index.jsx index 719b144..f22affd 100644 --- a/src/components/CandidateTable/index.jsx +++ b/src/components/CandidateTable/index.jsx @@ -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,7 +660,10 @@ export default class CandidateTable extends Component { onCancel={() => { this.setState({ interviewerInfo: false, - }) + },()=>{ + this.props.updatainterviewstagenum() + this.PostInterviewwaiteinfind() + }) }} onEditresume={() => { onEditresume() diff --git a/src/components/Editresume/index.css b/src/components/Editresume/index.css index 498e96b..603421f 100644 --- a/src/components/Editresume/index.css +++ b/src/components/Editresume/index.css @@ -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; } diff --git a/src/components/InterviewerInfoPop/EnclosureTabs/index.jsx b/src/components/InterviewerInfoPop/EnclosureTabs/index.jsx index 6068406..b9a502c 100644 --- a/src/components/InterviewerInfoPop/EnclosureTabs/index.jsx +++ b/src/components/InterviewerInfoPop/EnclosureTabs/index.jsx @@ -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) { diff --git a/src/components/InterviewerInfoPop/Feedback/index.jsx b/src/components/InterviewerInfoPop/Feedback/index.jsx index e993b7c..52f562c 100644 --- a/src/components/InterviewerInfoPop/Feedback/index.jsx +++ b/src/components/InterviewerInfoPop/Feedback/index.jsx @@ -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 ( diff --git a/src/components/InterviewerInfoPop/InterviewTabs/index.jsx b/src/components/InterviewerInfoPop/InterviewTabs/index.jsx index 0b55d05..e2af09b 100644 --- a/src/components/InterviewerInfoPop/InterviewTabs/index.jsx +++ b/src/components/InterviewerInfoPop/InterviewTabs/index.jsx @@ -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,29 +18,34 @@ 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') { - record({ uid: data.uid }).then( - (res) => { - // console.log(res) - setdatalist(res.data) - }, - (err) => { - message.error('网络错误,请稍后再试') - } - ) + updatarecord() } }, [Tabsnum]) + const updatarecord = () => { + record({ uid: data.uid }).then( + (res) => { + // console.log(res) + setdatalist(res.data) + }, + (err) => { + message.error('网络错误,请稍后再试') + } + ) + } + const handelFeedback = (record) => { teacherstate({ user_id: [record.interview_id], @@ -134,7 +144,7 @@ export default function InterviewTabs({ />{' '} 未评估 - ) : item.teacher_back === + ) : items.teacher_back === 1 ? (
{' '} 满意
- ) : item.teacher_back === + ) : items.teacher_back === 2 ? (
{' '} 非常满意
- ) : item.teacher_back === + ) : items.teacher_back === 3 ? (
- {item.back_status === - 0 ? ( + {!items.type ? (
- {userinfo.id === - items.user_id || userinfo.name === 'root' ? ( + {userinfo.user_id === + items.user_id || + userinfo.name === + 'root' ? (
) } + +export default forwardRef(InterviewTabs) diff --git a/src/components/InterviewerInfoPop/OfferTabs/index.jsx b/src/components/InterviewerInfoPop/OfferTabs/index.jsx index 762e717..46b2736 100644 --- a/src/components/InterviewerInfoPop/OfferTabs/index.jsx +++ b/src/components/InterviewerInfoPop/OfferTabs/index.jsx @@ -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 }) {
入职记录
- 尚未确定候选人是否入职 + { + data.interview_stage === 7 ? ( + 已入职 + ): data.interview_stage === 11 ? ( + 已淘汰 + ): ( + 尚未确定候选人是否入职 + ) + }
@@ -559,7 +572,7 @@ export default function InterviewerInfoPop({ '' )} - {candidateinfo.teacher_state != 2 ? ( + {/* {candidateinfo.teacher_state != 2 ? ( - )} + )} */}
diff --git a/src/components/Manualaddcandidate/StandardResume/index.css b/src/components/Manualaddcandidate/StandardResume/index.css new file mode 100644 index 0000000..6095842 --- /dev/null +++ b/src/components/Manualaddcandidate/StandardResume/index.css @@ -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%; } diff --git a/src/components/Manualaddcandidate/StandardResume/index.jsx b/src/components/Manualaddcandidate/StandardResume/index.jsx new file mode 100644 index 0000000..77c9cec --- /dev/null +++ b/src/components/Manualaddcandidate/StandardResume/index.jsx @@ -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 ( +
+
+ {/*
*/} + 工作经验 + + {worklist.map((item, key) => { + return ( + + + + { + onValuesChange( + 'work_list', + e.target.value, + 'company_name', + key + ) + }} + /> + + + + { + onValuesChange( + 'work_list', + e.target.value, + 'position_name', + key + ) + }} + /> + + + remove('work_list', key)} + /> + + + +