1
This commit is contained in:
parent
2117b9ae6f
commit
64311d8e06
9
config-overrides.js
Normal file
9
config-overrides.js
Normal file
@ -0,0 +1,9 @@
|
||||
const { override, fixBabelImports } = require('customize-cra')
|
||||
|
||||
module.exports = override(
|
||||
fixBabelImports('import', {
|
||||
libraryName: 'antd',
|
||||
libraryDirectory: 'es',
|
||||
style: 'css',
|
||||
})
|
||||
)
|
13
package.json
13
package.json
@ -6,15 +6,22 @@
|
||||
"@testing-library/jest-dom": "^5.14.1",
|
||||
"@testing-library/react": "^13.0.0",
|
||||
"@testing-library/user-event": "^13.2.1",
|
||||
"antd": "^4.20.7",
|
||||
"babel-plugin-import": "^1.13.5",
|
||||
"customize-cra": "^1.0.0",
|
||||
"less": "^4.1.2",
|
||||
"less-loader": "^11.0.0",
|
||||
"react": "^18.1.0",
|
||||
"react-app-rewired": "^2.2.1",
|
||||
"react-dom": "^18.1.0",
|
||||
"react-router-dom": "^6.3.0",
|
||||
"react-scripts": "5.0.1",
|
||||
"web-vitals": "^2.1.0"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "react-scripts start",
|
||||
"build": "react-scripts build",
|
||||
"test": "react-scripts test",
|
||||
"start": "react-app-rewired start",
|
||||
"build": "react-app-rewired build",
|
||||
"test": "react-app-rewired test",
|
||||
"eject": "react-scripts eject"
|
||||
},
|
||||
"eslintConfig": {
|
||||
|
BIN
public/images/jiantou.png
Normal file
BIN
public/images/jiantou.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
@ -9,35 +9,11 @@
|
||||
name="description"
|
||||
content="Web site created using create-react-app"
|
||||
/>
|
||||
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
|
||||
<!--
|
||||
manifest.json provides metadata used when your web app is installed on a
|
||||
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
||||
-->
|
||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
||||
<!--
|
||||
Notice the use of %PUBLIC_URL% in the tags above.
|
||||
It will be replaced with the URL of the `public` folder during the build.
|
||||
Only files inside the `public` folder can be referenced from the HTML.
|
||||
|
||||
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
|
||||
work correctly both with client-side routing and a non-root public URL.
|
||||
Learn how to configure a non-root public URL by running `npm run build`.
|
||||
-->
|
||||
<title>React App</title>
|
||||
<title>乐谷人事管理系统</title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
<div id="root"></div>
|
||||
<!--
|
||||
This HTML file is a template.
|
||||
If you open it directly in the browser, you will see an empty page.
|
||||
|
||||
You can add webfonts, meta tags, or analytics to this file.
|
||||
The build step will place the bundled scripts into the <body> tag.
|
||||
|
||||
To begin the development, run `npm start` or `yarn start`.
|
||||
To create a production bundle, use `npm run build` or `yarn build`.
|
||||
-->
|
||||
</body>
|
||||
</html>
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 5.2 KiB |
Binary file not shown.
Before Width: | Height: | Size: 9.4 KiB |
@ -1,25 +0,0 @@
|
||||
{
|
||||
"short_name": "React App",
|
||||
"name": "Create React App Sample",
|
||||
"icons": [
|
||||
{
|
||||
"src": "favicon.ico",
|
||||
"sizes": "64x64 32x32 24x24 16x16",
|
||||
"type": "image/x-icon"
|
||||
},
|
||||
{
|
||||
"src": "logo192.png",
|
||||
"type": "image/png",
|
||||
"sizes": "192x192"
|
||||
},
|
||||
{
|
||||
"src": "logo512.png",
|
||||
"type": "image/png",
|
||||
"sizes": "512x512"
|
||||
}
|
||||
],
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"theme_color": "#000000",
|
||||
"background_color": "#ffffff"
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
# https://www.robotstxt.org/robotstxt.html
|
||||
User-agent: *
|
||||
Disallow:
|
140
src/App.css
140
src/App.css
@ -1,38 +1,120 @@
|
||||
.App {
|
||||
text-align: center;
|
||||
#root {
|
||||
height: 100%;
|
||||
}
|
||||
.trigger {
|
||||
padding: 0 24px;
|
||||
font-size: 18px;
|
||||
line-height: 64px;
|
||||
cursor: pointer;
|
||||
transition: color 0.3s;
|
||||
}
|
||||
|
||||
.App-logo {
|
||||
height: 40vmin;
|
||||
pointer-events: none;
|
||||
.trigger:hover {
|
||||
color: #1890ff;
|
||||
}
|
||||
.appcontent { min-height: 280px; overflow-y: auto;}
|
||||
.divdisplay { display: flex; }
|
||||
.logo_box {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin: 16px;
|
||||
}
|
||||
.logo_box .logo {
|
||||
height: 40px;
|
||||
width: 40px;
|
||||
border-radius: 50%;
|
||||
background: rgba(255, 255, 255, 0.3);
|
||||
}
|
||||
.logo_box .logo_txt {
|
||||
height: 40px;
|
||||
}
|
||||
.logo_box .logo_txt p {
|
||||
margin-bottom: 0;
|
||||
margin-left: 10px;
|
||||
}
|
||||
.logo_box .introduction {
|
||||
font-size: 12px;
|
||||
color: #c1c5cc;
|
||||
}
|
||||
.logo_box .role {
|
||||
font-size: 16px;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
.App-logo {
|
||||
animation: App-logo-spin infinite 20s linear;
|
||||
}
|
||||
.ant-layout {
|
||||
height: 100%;
|
||||
}
|
||||
.site-layout .site-layout-background {
|
||||
background: #fff;
|
||||
}
|
||||
.ant-layout-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
border-bottom: 1px solid rgba(217, 217, 217, 0.75);
|
||||
}
|
||||
.ant-modal {
|
||||
overflow: hidden;
|
||||
max-height: calc(100% - 100px);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.App-header {
|
||||
background-color: #282c34;
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: calc(10px + 2vmin);
|
||||
color: white;
|
||||
::-webkit-scrollbar {
|
||||
width:8px;
|
||||
height:8px;
|
||||
background-color:#F5F5F5;
|
||||
}
|
||||
/* 滚动条上的按钮 (上下箭头). */
|
||||
::-webkit-scrollbar-button {
|
||||
height: 0px;
|
||||
width: 0px;
|
||||
}
|
||||
/* 滚动条上的滚动滑块. */
|
||||
::-webkit-scrollbar-thumb {
|
||||
background-color:#e6e6e6;
|
||||
border-radius: 50px;
|
||||
}
|
||||
/* 滚动条轨道. */
|
||||
::-webkit-scrollbar-track {
|
||||
-webkit-box-shadow:inset 0 0 6px rgba(0, 142, 255, 1);
|
||||
box-shadow:inset 0 0 6px rgba(0, 142, 255, 1, 1);
|
||||
background-color:#F5F5F5;
|
||||
}
|
||||
/* 滚动条没有滑块的轨道部分 */
|
||||
::-webkit-scrollbar-track-piece {
|
||||
background-color: #fff;
|
||||
}
|
||||
/* 当同时有垂直滚动条和水平滚动条时交汇的部分. */
|
||||
::-webkit-scrollbar-corner {
|
||||
background:transparent;
|
||||
}
|
||||
|
||||
.App-link {
|
||||
color: #61dafb;
|
||||
}
|
||||
.fontweight{font-weight: bold;}
|
||||
.margintop5{ margin-top: 5px; }
|
||||
.margintop20{ margin-top: 20px; }
|
||||
.margintop50 { margin-top: 50px; }
|
||||
.marginright5 { margin-right: 5px;}
|
||||
.marginright10{ margin-right: 10px; }
|
||||
.marginright24{ margin-right: 24px; }
|
||||
.cursor { cursor: pointer; }
|
||||
.font-size12 { font-size: 12px; margin-bottom: 0;}
|
||||
.font-size14 {font-size: 14px;}
|
||||
.fontsize28 { font-size: 28px; }
|
||||
.fontsize24 { font-size: 24px; }
|
||||
.lineheight24{line-height: 24px;}
|
||||
.color0 { color: #575d6a; }
|
||||
.color1 { color: #75777d; }
|
||||
.color2 { color: #5c5f6c; }
|
||||
.color3 { color: #f49300; }
|
||||
.color4 { color: #0c8cf6; }
|
||||
.coloc5 { color: #312b2e; }
|
||||
.color6 { color: #f47f76; }
|
||||
.color7 { color: #5b524b; }
|
||||
.border3 { border-color: #f49300 !important; }
|
||||
.border6 { border-color: #f47f76 !important; }
|
||||
|
||||
@keyframes App-logo-spin {
|
||||
from {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
37
src/App.js
37
src/App.js
@ -1,25 +1,16 @@
|
||||
import logo from './logo.svg';
|
||||
import './App.css';
|
||||
import React from 'react'
|
||||
import GlobalRouter from './routes/GlobalRouter'
|
||||
import './App.css'
|
||||
|
||||
function App() {
|
||||
return (
|
||||
<div className="App">
|
||||
<header className="App-header">
|
||||
<img src={logo} className="App-logo" alt="logo" />
|
||||
<p>
|
||||
Edit <code>src/App.js</code> and save to reload.
|
||||
</p>
|
||||
<a
|
||||
className="App-link"
|
||||
href="https://reactjs.org"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Learn React
|
||||
</a>
|
||||
</header>
|
||||
</div>
|
||||
);
|
||||
// const App = () => {
|
||||
// return <GlobalRouter/>
|
||||
// }
|
||||
|
||||
// export default App
|
||||
|
||||
class App extends React.Component{
|
||||
render(){
|
||||
return <GlobalRouter/>
|
||||
}
|
||||
}
|
||||
|
||||
export default App;
|
||||
export default App
|
153
src/AppLayOut.jsx
Normal file
153
src/AppLayOut.jsx
Normal file
@ -0,0 +1,153 @@
|
||||
import React, { useState, useEffect } from 'react'
|
||||
import { Layout, Menu } from 'antd'
|
||||
import { Outlet, useNavigate, useLocation } from 'react-router-dom'
|
||||
import NavHeader from './components/NavHeader'
|
||||
import HeadLeftTtile from './components/HeadLeftTtile'
|
||||
import './App.css'
|
||||
import {
|
||||
AppstoreOutlined,
|
||||
UsergroupAddOutlined,
|
||||
CalendarOutlined,
|
||||
RestOutlined,
|
||||
ShoppingOutlined,
|
||||
PieChartOutlined,
|
||||
SettingOutlined,
|
||||
} from '@ant-design/icons'
|
||||
// import GlobalRouter from './routes/GlobalRouter'
|
||||
const { Header, Sider, Content } = Layout
|
||||
|
||||
function AppLayOut() {
|
||||
const location = useLocation()
|
||||
const navigate = useNavigate()
|
||||
const [collapsed, setCollapsed] = useState(true)
|
||||
const [headtitle, setHeadtitle] = useState('总览')
|
||||
const [headnav,setHeadnav] = useState('')
|
||||
const [defaultSelectedKeys,setdefaultSelectedKeys] = useState('/')
|
||||
|
||||
// 单击侧边栏跳转路由
|
||||
const click = (e) => {
|
||||
navigate(e.key)
|
||||
}
|
||||
|
||||
const select = (e) => {
|
||||
const { title } = e.item.props
|
||||
// console.log(title)
|
||||
setHeadtitle(title)
|
||||
}
|
||||
|
||||
// 鼠标移入
|
||||
const handlMouseEnter = () => {
|
||||
setCollapsed(false)
|
||||
}
|
||||
|
||||
// 鼠标移出
|
||||
const handlMouseLeave = () => {
|
||||
setCollapsed(true)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
// return ()=>{
|
||||
const pathname = location.pathname;
|
||||
const pathurl = pathname.split('/')[2];
|
||||
setHeadnav(pathurl)
|
||||
setdefaultSelectedKeys(pathname)
|
||||
// }
|
||||
// const routes = matchRoutes(GlobalRouter, location.pathname);
|
||||
// console.log(routes);
|
||||
}, [location.pathname])
|
||||
|
||||
return (
|
||||
<Layout>
|
||||
<Sider
|
||||
trigger={null}
|
||||
collapsible
|
||||
collapsed={collapsed}
|
||||
onMouseLeave={handlMouseLeave}
|
||||
onMouseEnter={handlMouseEnter}
|
||||
>
|
||||
{/* <div className="logo" /> */}
|
||||
<div className="logo_box">
|
||||
<div className="logo" />
|
||||
<div
|
||||
className="logo_txt"
|
||||
style={{ display: collapsed ? 'none' : 'block' }}
|
||||
>
|
||||
<p className="introduction">Moka</p>
|
||||
<p className="role">用人经理端</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Menu
|
||||
theme="dark"
|
||||
mode="inline"
|
||||
selectedKeys={defaultSelectedKeys}
|
||||
defaultSelectedKeys={defaultSelectedKeys}
|
||||
items={[
|
||||
{
|
||||
key: '/',
|
||||
icon: <AppstoreOutlined />,
|
||||
label: '总览',
|
||||
title: '总览',
|
||||
},
|
||||
{
|
||||
key: '/admin/candidate',
|
||||
icon: <UsergroupAddOutlined />,
|
||||
label: '候选人管理',
|
||||
title: '候选人管理',
|
||||
},
|
||||
{
|
||||
key: '/admin/interview',
|
||||
icon: <CalendarOutlined />,
|
||||
label: '面试安排',
|
||||
title: '面试安排',
|
||||
},
|
||||
{
|
||||
key: '/admin/position',
|
||||
icon: <ShoppingOutlined />,
|
||||
label: '职位管理',
|
||||
title: '职位管理',
|
||||
},
|
||||
{
|
||||
key: '/admin/talentpool',
|
||||
icon: <RestOutlined />,
|
||||
label: '人才库',
|
||||
title: '人才库',
|
||||
},
|
||||
{
|
||||
key: '/admin/reportforms',
|
||||
icon: <PieChartOutlined />,
|
||||
label: '报表中心',
|
||||
title: '报表中心',
|
||||
},
|
||||
{
|
||||
key: '/admin/setup',
|
||||
icon: <SettingOutlined />,
|
||||
label: '设置',
|
||||
title: '设置',
|
||||
},
|
||||
]}
|
||||
onClick={click}
|
||||
onSelect={select}
|
||||
/>
|
||||
</Sider>
|
||||
<Layout className="site-layout">
|
||||
<Header
|
||||
className="site-layout-background"
|
||||
style={{
|
||||
padding: 0,
|
||||
}}
|
||||
>
|
||||
<HeadLeftTtile headtitle={headtitle} />
|
||||
<NavHeader headnav={headnav}/>
|
||||
</Header>
|
||||
<Content
|
||||
className='appcontent'
|
||||
>
|
||||
<Outlet />
|
||||
</Content>
|
||||
</Layout>
|
||||
</Layout>
|
||||
)
|
||||
}
|
||||
|
||||
export default AppLayOut
|
15
src/components/CandidateTable/index.css
Normal file
15
src/components/CandidateTable/index.css
Normal file
@ -0,0 +1,15 @@
|
||||
.CandidateTable-box {}
|
||||
.CandidateTable-list-box { width: 100%; padding: 14px; border-bottom: 1px solid #f4f4f5; display: flex; justify-content: space-between; }
|
||||
.CandidateTable-list-box:hover { background-color: #f9f9fa; }
|
||||
|
||||
.CandidateTable-info-box { width: 510px; display: flex;}
|
||||
.CandidateTable-info { margin-left: 45px; color: #575d6a; }
|
||||
.CandidateTable-action { width: 420px; position: relative; }
|
||||
|
||||
.CandidateTable-info .name { font-size: 16px; font-weight: bold; color: #000; margin-right: 5px; }
|
||||
.CandidateTable-info div { height: 28px; line-height: 28px; }
|
||||
.but-box { width: 100%; display: flex; position: absolute; bottom: 0; }
|
||||
|
||||
.qxcheck-box { color: #c1c5cc; border: 1px solid #c1c5cc; width: 46px; text-align: center; margin-left: 14px; }
|
||||
.qxcheck-box .ant-checkbox + span { padding-right: 0; }
|
||||
.CandidateTable-table-action { border-bottom: 1px solid #f4f4f5; padding: 10px 0;}
|
122
src/components/CandidateTable/index.jsx
Normal file
122
src/components/CandidateTable/index.jsx
Normal file
@ -0,0 +1,122 @@
|
||||
import React from 'react'
|
||||
import './index.css'
|
||||
import { Checkbox, Tag, Button } from 'antd'
|
||||
import {
|
||||
ShoppingFilled,
|
||||
BankOutlined,
|
||||
SendOutlined,
|
||||
RightOutlined,
|
||||
} from '@ant-design/icons'
|
||||
|
||||
export default function CandidateTable() {
|
||||
const onChange = (e) => {
|
||||
console.log(`checked = ${e.target.checked}`)
|
||||
}
|
||||
|
||||
const data = [
|
||||
{
|
||||
interview_name: '张四',
|
||||
interview_type: 0,
|
||||
interview_sign: 1,
|
||||
feedback: 0,
|
||||
interview_round: 1,
|
||||
star_time: '2022-07-11T10:30:00',
|
||||
end_time: '2022-07-11T11:00:00',
|
||||
event_time: '2022-07-01T10:00:00',
|
||||
uid: '1234567890',
|
||||
name: '李五',
|
||||
phone: '13789923799',
|
||||
job_name: 'python开发',
|
||||
hr_name: '王六',
|
||||
work_exp: '2年',
|
||||
interview_stage: 1,
|
||||
owner_name: 2,
|
||||
education: 1,
|
||||
work_undergo: '',
|
||||
school: '武汉大学',
|
||||
specialty: '计算机专业',
|
||||
mmended_state: 0,
|
||||
mail: '250213000@qq.com',
|
||||
account: '湖北武汉',
|
||||
id_card: '421202199986750339',
|
||||
gender: '男',
|
||||
interview_state: 2,
|
||||
graduate_time: '2022-07-01T08:00:00',
|
||||
counts: 1,
|
||||
},
|
||||
]
|
||||
|
||||
return (
|
||||
<div className="CandidateTable-box">
|
||||
<div className="CandidateTable-table-action">
|
||||
<div className="qxcheck-box">
|
||||
<Checkbox onChange={onChange}>
|
||||
|
||||
<RightOutlined style={{ color: '#c1c5cc' }} />
|
||||
</Checkbox>
|
||||
</div>
|
||||
{/* <div>
|
||||
|
||||
</div> */}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
{data.map((item, key) => {
|
||||
return (
|
||||
<div className="CandidateTable-list-box">
|
||||
<div className="CandidateTable-info-box">
|
||||
<div>
|
||||
<Checkbox onChange={onChange}></Checkbox>
|
||||
</div>
|
||||
<div className="CandidateTable-info">
|
||||
<div>
|
||||
<span className="time">
|
||||
2022-05-16申请 |
|
||||
</span>
|
||||
<span> {item.job_name}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span className="name">{item.name}</span>
|
||||
<span> {item.gender} |</span> <span> 25 |</span>
|
||||
<span> {item.work_exp}工作经验</span>
|
||||
</div>
|
||||
<div>
|
||||
<ShoppingFilled />
|
||||
<span>{item.account} |</span>
|
||||
<span> 2021-06至2022-05</span>
|
||||
</div>
|
||||
<div>
|
||||
<BankOutlined /> <span> {item.school} |</span>
|
||||
<span> {item.specialty} | </span> <span> 硕士 |</span>
|
||||
<span> {item.graduate_time}</span>
|
||||
</div>
|
||||
<div>
|
||||
<Tag color="processing">硕士</Tag>
|
||||
<Tag color="warning">空白经历</Tag>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="CandidateTable-owner">
|
||||
候选人所有者:<span>张三</span>
|
||||
</div>
|
||||
<div className="CandidateTable-action">
|
||||
推荐状态:
|
||||
<Tag icon={<SendOutlined />} color="default">
|
||||
未推荐
|
||||
</Tag>
|
||||
<div className="but-box">
|
||||
<Button type="primary">
|
||||
进入 下一阶段
|
||||
</Button>
|
||||
<Button>淘汰</Button>
|
||||
<Button>备注</Button>
|
||||
<Button>推荐给用人部门</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
38
src/components/Editresume/index.css
Normal file
38
src/components/Editresume/index.css
Normal file
@ -0,0 +1,38 @@
|
||||
.upload-box{
|
||||
background-color: #f0f0f0;
|
||||
padding: 24px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.upload-head-box {
|
||||
/* text-align: center; */
|
||||
}
|
||||
/* .upload-head { text-align: center; } */
|
||||
.upload-head-box span {
|
||||
font-size: 12px;
|
||||
color: #75777d;
|
||||
}
|
||||
.upload-head-title {
|
||||
display: inline-block;
|
||||
width: 104px;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
.upload-head-box div{
|
||||
/* width: 60px;
|
||||
height: 60px;
|
||||
border-radius: 50%;
|
||||
border: 1px solid #d9d9d9; */
|
||||
}
|
||||
|
||||
.upload-head-box label { color: #75777d; font-size: 12px; margin-top: 5px; }
|
||||
.Editresume-box .ant-tabs-content-holder {
|
||||
max-height: 557px !important;
|
||||
}
|
||||
.upload-button-box {
|
||||
margin: 24px;
|
||||
}
|
||||
.upload-button-box .ant-upload {width: 100%;}
|
||||
.upload-button-box .ant-upload-list {display: none;}
|
||||
|
894
src/components/Editresume/index.jsx
Normal file
894
src/components/Editresume/index.jsx
Normal file
@ -0,0 +1,894 @@
|
||||
import React, { useState } from 'react'
|
||||
import {
|
||||
Form,
|
||||
Input,
|
||||
Modal,
|
||||
Radio,
|
||||
Row,
|
||||
Col,
|
||||
Select,
|
||||
DatePicker,
|
||||
Tabs,
|
||||
Divider,
|
||||
Button,
|
||||
message,
|
||||
Upload,
|
||||
Space,
|
||||
Checkbox,
|
||||
} from 'antd'
|
||||
import {
|
||||
MinusCircleOutlined,
|
||||
LoadingOutlined,
|
||||
PlusOutlined,
|
||||
} from '@ant-design/icons'
|
||||
import 'moment/locale/zh-cn'
|
||||
import locale from 'antd/es/date-picker/locale/zh_CN'
|
||||
import './index.css'
|
||||
|
||||
const { Option } = Select
|
||||
const { TabPane } = Tabs
|
||||
const { RangePicker } = DatePicker
|
||||
const { TextArea } = Input
|
||||
|
||||
const getBase64 = (img, callback) => {
|
||||
const reader = new FileReader()
|
||||
reader.addEventListener('load', () => callback(reader.result))
|
||||
reader.readAsDataURL(img)
|
||||
}
|
||||
|
||||
const beforeUpload = (file) => {
|
||||
const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png'
|
||||
|
||||
if (!isJpgOrPng) {
|
||||
message.error('You can only upload JPG/PNG file!')
|
||||
}
|
||||
|
||||
const isLt2M = file.size / 1024 / 1024 < 2
|
||||
|
||||
if (!isLt2M) {
|
||||
message.error('Image must smaller than 2MB!')
|
||||
}
|
||||
|
||||
return isJpgOrPng && isLt2M
|
||||
}
|
||||
|
||||
export default function Editresume({ visible, onCreate, onCancel }) {
|
||||
console.log(visible)
|
||||
const [form] = Form.useForm()
|
||||
const onChange = (key) => {
|
||||
console.log(key)
|
||||
}
|
||||
|
||||
const onTimeChange = (date, dateString) => {
|
||||
console.log(date, dateString)
|
||||
}
|
||||
|
||||
const onSoFarChange = (e) => {
|
||||
console.log(`checked = ${e.target.checked}`)
|
||||
}
|
||||
|
||||
const [loading, setLoading] = useState(false)
|
||||
const [imageUrl, setImageUrl] = useState()
|
||||
|
||||
const handleChange = (info) => {
|
||||
if (info.file.status === 'uploading') {
|
||||
setLoading(true)
|
||||
return
|
||||
}
|
||||
|
||||
if (info.file.status === 'done') {
|
||||
// Get this url from response in real world.
|
||||
getBase64(info.file.originFileObj, (url) => {
|
||||
setLoading(false)
|
||||
setImageUrl(url)
|
||||
})
|
||||
}
|
||||
}
|
||||
const uploadButton = (
|
||||
<div>
|
||||
{loading ? <LoadingOutlined /> : <PlusOutlined />}
|
||||
<div
|
||||
style={{
|
||||
marginTop: 8,
|
||||
}}
|
||||
>
|
||||
上传照片
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
||||
const props = {
|
||||
action: 'https://www.mocky.io/v2/5cc8019d300000980a055e76',
|
||||
|
||||
onChange({ file, fileList }) {
|
||||
if (file.status !== 'uploading') {
|
||||
console.log(file, fileList);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Modal
|
||||
visible={visible}
|
||||
onCancel={onCancel}
|
||||
closable={false}
|
||||
okText="确定"
|
||||
cancelText="取消"
|
||||
width={1200}
|
||||
>
|
||||
<div className="Editresume-box">
|
||||
<Form
|
||||
form={form}
|
||||
layout="vertical"
|
||||
name="form_in_modal"
|
||||
initialValues={{
|
||||
modifier: 'public',
|
||||
}}
|
||||
>
|
||||
<Row gutter={24}>
|
||||
<Col span={6}>
|
||||
<Form.Item
|
||||
name="title"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: '填写姓名',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Input placeholder="填写姓名" />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
<Col span={6}>
|
||||
<Form.Item name="position">
|
||||
<Input
|
||||
type="textarea"
|
||||
placeholder="填写岗位"
|
||||
/>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={6}>
|
||||
<Form.Item name="sex">
|
||||
<Select
|
||||
placeholder="选择性别"
|
||||
optionFilterProp="children"
|
||||
>
|
||||
<Option value="1">男</Option>
|
||||
<Option value="2">女</Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
<Col span={6}>
|
||||
<Form.Item name="age">
|
||||
<DatePicker locale={locale} />
|
||||
</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="email"
|
||||
rules={[
|
||||
{
|
||||
type: 'email',
|
||||
message: '邮箱格式错误!',
|
||||
},
|
||||
{
|
||||
required: true,
|
||||
message: '请输入邮箱!',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={4}>
|
||||
<Form.Item name="workingyears">
|
||||
<Select
|
||||
placeholder="选择工作年限"
|
||||
optionFilterProp="children"
|
||||
>
|
||||
<Option value="1">应届生</Option>
|
||||
<Option value="2">1-3年</Option>
|
||||
<Option value="3">3-5年</Option>
|
||||
<Option value="4">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>
|
||||
<Option value="5">博士</Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
<Col span={4}>
|
||||
<Form.Item
|
||||
name="address"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: '填写现住地址',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Input placeholder="填写现住地址" />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
|
||||
<div className="resume-energy-box">
|
||||
<Tabs defaultActiveKey="2" onChange={onChange}>
|
||||
<TabPane tab="原始简历" key="1">
|
||||
原始简历
|
||||
</TabPane>
|
||||
<TabPane tab="标准简历" key="2">
|
||||
{/* <StandardResume /> */}
|
||||
<div className="marginright24">
|
||||
<Divider orientation="left">
|
||||
上传
|
||||
</Divider>
|
||||
<div className="upload-box">
|
||||
<div className="upload-head-box">
|
||||
<div className="upload-head">
|
||||
<span className="upload-head-title">
|
||||
上传照片
|
||||
</span>
|
||||
<Upload
|
||||
name="avatar"
|
||||
listType="picture-card"
|
||||
className="avatar-uploader"
|
||||
showUploadList={false}
|
||||
action="https://www.mocky.io/v2/5cc8019d300000980a055e76"
|
||||
beforeUpload={
|
||||
beforeUpload
|
||||
}
|
||||
onChange={handleChange}
|
||||
>
|
||||
{imageUrl ? (
|
||||
<img
|
||||
src={imageUrl}
|
||||
alt="avatar"
|
||||
style={{
|
||||
width: '100%',
|
||||
}}
|
||||
/>
|
||||
) : (
|
||||
uploadButton
|
||||
)}
|
||||
</Upload>
|
||||
</div>
|
||||
<label>
|
||||
支持JPG,JPEG,PNG等图片格式不超过2M
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Divider orientation="left">
|
||||
个人信息
|
||||
</Divider>
|
||||
|
||||
<Row gutter={24}>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="最近公司"
|
||||
required
|
||||
>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
|
||||
<Divider orientation="left">
|
||||
求职意向
|
||||
</Divider>
|
||||
<Row gutter={24}>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="当前薪资"
|
||||
name="xingz"
|
||||
required
|
||||
>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="期望薪资"
|
||||
required
|
||||
>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="期望城市"
|
||||
required
|
||||
>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
|
||||
<Divider orientation="left">
|
||||
工作经历
|
||||
</Divider>
|
||||
|
||||
<Form.List name="users">
|
||||
{(fields, { add, remove }) => (
|
||||
<>
|
||||
{fields.map(
|
||||
({
|
||||
key,
|
||||
name,
|
||||
...restField
|
||||
}) => (
|
||||
<div
|
||||
key={key}
|
||||
name
|
||||
align="baseline"
|
||||
>
|
||||
<Row
|
||||
gutter={24}
|
||||
>
|
||||
<Col
|
||||
span={
|
||||
24
|
||||
}
|
||||
>
|
||||
<Form.Item
|
||||
{...restField}
|
||||
name={[
|
||||
name,
|
||||
'time',
|
||||
]}
|
||||
label="起止时间"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message:
|
||||
'请输入起止时间',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<RangePicker
|
||||
picker="month"
|
||||
locale={
|
||||
locale
|
||||
}
|
||||
onChange={
|
||||
onTimeChange
|
||||
}
|
||||
/>
|
||||
<div
|
||||
style={{
|
||||
float: 'right',
|
||||
}}
|
||||
>
|
||||
<Checkbox
|
||||
onChange={
|
||||
onSoFarChange
|
||||
}
|
||||
>
|
||||
至今
|
||||
</Checkbox>
|
||||
|
||||
<MinusCircleOutlined
|
||||
onClick={() =>
|
||||
remove(
|
||||
name
|
||||
)
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
<Row
|
||||
gutter={24}
|
||||
>
|
||||
<Col
|
||||
span={
|
||||
12
|
||||
}
|
||||
>
|
||||
<Form.Item
|
||||
{...restField}
|
||||
name={[
|
||||
name,
|
||||
'name',
|
||||
]}
|
||||
label="项目名称"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message:
|
||||
'请填写项目名称',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col
|
||||
span={
|
||||
12
|
||||
}
|
||||
>
|
||||
<Form.Item
|
||||
{...restField}
|
||||
name={[
|
||||
name,
|
||||
'post',
|
||||
]}
|
||||
label="职务"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message:
|
||||
'请填写职务',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
|
||||
<Form.Item
|
||||
{...restField}
|
||||
name={[
|
||||
name,
|
||||
'describe',
|
||||
]}
|
||||
label="项目描述"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message:
|
||||
'请填写职务',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<TextArea
|
||||
rows={4}
|
||||
placeholder="内容"
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item
|
||||
{...restField}
|
||||
name={[
|
||||
name,
|
||||
'duty',
|
||||
]}
|
||||
label="项目中职责"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message:
|
||||
'项目中职责',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<TextArea
|
||||
rows={4}
|
||||
placeholder="内容"
|
||||
/>
|
||||
</Form.Item>
|
||||
</div>
|
||||
)
|
||||
)}
|
||||
<Form.Item>
|
||||
<Button
|
||||
type="dashed"
|
||||
onClick={() =>
|
||||
add()
|
||||
}
|
||||
block
|
||||
icon={
|
||||
<PlusOutlined />
|
||||
}
|
||||
>
|
||||
添加
|
||||
</Button>
|
||||
</Form.Item>
|
||||
</>
|
||||
)}
|
||||
</Form.List>
|
||||
|
||||
<Divider orientation="left">
|
||||
语言能力
|
||||
</Divider>
|
||||
|
||||
<Form.List name="language">
|
||||
{(fields, { add, remove }) => (
|
||||
<>
|
||||
{fields.map(
|
||||
({
|
||||
key,
|
||||
name,
|
||||
...restField
|
||||
}) => (
|
||||
<div
|
||||
key={key}
|
||||
name
|
||||
align="baseline"
|
||||
>
|
||||
<Row
|
||||
gutter={24}
|
||||
>
|
||||
<Col
|
||||
span={
|
||||
12
|
||||
}
|
||||
>
|
||||
<Form.Item
|
||||
{...restField}
|
||||
name={[
|
||||
name,
|
||||
'languagetype',
|
||||
]}
|
||||
label="语言类型"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message:
|
||||
'语言类型不能为空',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Input placeholder="请输入掌握语言类型" />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
<Col
|
||||
span={
|
||||
12
|
||||
}
|
||||
>
|
||||
<Form.Item
|
||||
{...restField}
|
||||
name={[
|
||||
name,
|
||||
'proficiency',
|
||||
]}
|
||||
label="掌握程度"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message:
|
||||
'熟练度不能为空',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Select
|
||||
placeholder="请选择"
|
||||
optionFilterProp="children"
|
||||
>
|
||||
<Option value="1">
|
||||
初级
|
||||
</Option>
|
||||
<Option value="2">
|
||||
中级
|
||||
</Option>
|
||||
<Option value="3">
|
||||
高级
|
||||
</Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
<Col
|
||||
span={
|
||||
12
|
||||
}
|
||||
>
|
||||
<Form.Item
|
||||
{...restField}
|
||||
name={[
|
||||
name,
|
||||
'hear',
|
||||
]}
|
||||
label="听说"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message:
|
||||
'听说类型不能为空',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Select
|
||||
placeholder="请选择"
|
||||
optionFilterProp="children"
|
||||
>
|
||||
<Option value="1">
|
||||
初级
|
||||
</Option>
|
||||
<Option value="2">
|
||||
中级
|
||||
</Option>
|
||||
<Option value="3">
|
||||
高级
|
||||
</Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col
|
||||
span={
|
||||
12
|
||||
}
|
||||
>
|
||||
<Form.Item
|
||||
{...restField}
|
||||
name={[
|
||||
name,
|
||||
'Readwrit',
|
||||
]}
|
||||
label="读写"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message:
|
||||
'读写类型不能为空',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Select
|
||||
placeholder="请选择"
|
||||
optionFilterProp="children"
|
||||
>
|
||||
<Option value="1">
|
||||
初级
|
||||
</Option>
|
||||
<Option value="2">
|
||||
中级
|
||||
</Option>
|
||||
<Option value="3">
|
||||
高级
|
||||
</Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
<div
|
||||
style={{
|
||||
textAlign:
|
||||
'right',
|
||||
}}
|
||||
>
|
||||
<MinusCircleOutlined
|
||||
onClick={() => {
|
||||
remove(
|
||||
name
|
||||
)
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
)}
|
||||
<Form.Item>
|
||||
<Button
|
||||
type="dashed"
|
||||
onClick={() =>
|
||||
add()
|
||||
}
|
||||
block
|
||||
icon={
|
||||
<PlusOutlined />
|
||||
}
|
||||
>
|
||||
添加
|
||||
</Button>
|
||||
</Form.Item>
|
||||
</>
|
||||
)}
|
||||
</Form.List>
|
||||
|
||||
<Divider orientation="left">
|
||||
自我描述
|
||||
</Divider>
|
||||
|
||||
<Form.Item
|
||||
name="mydescribe"
|
||||
label="自我描述"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: '请填写自我描述',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<TextArea
|
||||
rows={4}
|
||||
placeholder="自我描述"
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
<Divider orientation="left">
|
||||
获奖经历
|
||||
</Divider>
|
||||
|
||||
<Form.List name="award">
|
||||
{(fields, { add, remove }) => (
|
||||
<>
|
||||
{fields.map(
|
||||
({
|
||||
key,
|
||||
name,
|
||||
...restField
|
||||
}) => (
|
||||
<div
|
||||
key={key}
|
||||
name
|
||||
align="baseline"
|
||||
>
|
||||
<Row
|
||||
gutter={24}
|
||||
>
|
||||
<Col
|
||||
span={8}
|
||||
>
|
||||
<Form.Item
|
||||
{...restField}
|
||||
name={[
|
||||
name,
|
||||
'year',
|
||||
]}
|
||||
label="语言类型"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message:
|
||||
'语言类型不能为空',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<DatePicker
|
||||
onChange={
|
||||
onChange
|
||||
}
|
||||
picker="year"
|
||||
locale={
|
||||
locale
|
||||
}
|
||||
/>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
<Col
|
||||
span={8}
|
||||
>
|
||||
<Form.Item
|
||||
{...restField}
|
||||
name={[
|
||||
name,
|
||||
'month',
|
||||
]}
|
||||
label="掌握程度"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message:
|
||||
'熟练度不能为空',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<DatePicker
|
||||
onChange={
|
||||
onChange
|
||||
}
|
||||
picker="month"
|
||||
locale={
|
||||
locale
|
||||
}
|
||||
/>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
<Col
|
||||
span={8}
|
||||
>
|
||||
<Form.Item
|
||||
{...restField}
|
||||
name={[
|
||||
name,
|
||||
'awardname',
|
||||
]}
|
||||
label="奖项名称"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message:
|
||||
'请输入奖项名称',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Input placeholder="请输入奖项名称" />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
<div
|
||||
style={{
|
||||
textAlign:
|
||||
'right',
|
||||
}}
|
||||
>
|
||||
<MinusCircleOutlined
|
||||
onClick={() => {
|
||||
remove(
|
||||
name
|
||||
)
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
)}
|
||||
<Form.Item>
|
||||
<Button
|
||||
type="dashed"
|
||||
onClick={() =>
|
||||
add()
|
||||
}
|
||||
block
|
||||
icon={
|
||||
<PlusOutlined />
|
||||
}
|
||||
>
|
||||
添加
|
||||
</Button>
|
||||
</Form.Item>
|
||||
</>
|
||||
)}
|
||||
</Form.List>
|
||||
</div>
|
||||
</TabPane>
|
||||
</Tabs>
|
||||
<div className="resume-right-box">
|
||||
|
||||
<div className='upload-button-box'>
|
||||
<Upload {...props}>
|
||||
<Button type="primary">
|
||||
重新上传简历
|
||||
</Button>
|
||||
</Upload>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</Form>
|
||||
</div>
|
||||
</Modal>
|
||||
</div>
|
||||
)
|
||||
}
|
4
src/components/ExportForm/index.css
Normal file
4
src/components/ExportForm/index.css
Normal file
@ -0,0 +1,4 @@
|
||||
.exportform-time-box {
|
||||
width: 88px;
|
||||
margin: 24px auto 0 auto;
|
||||
}
|
103
src/components/ExportForm/index.jsx
Normal file
103
src/components/ExportForm/index.jsx
Normal file
@ -0,0 +1,103 @@
|
||||
import React, { useState, useEffect } from 'react'
|
||||
import { Modal, DatePicker, Form, Radio, Button } from 'antd'
|
||||
import './index.css'
|
||||
import moment from 'moment'
|
||||
import 'moment/locale/zh-cn'
|
||||
import locale from 'antd/es/date-picker/locale/zh_CN'
|
||||
const { RangePicker } = DatePicker
|
||||
const dateFormat = 'YYYY/MM/DD'
|
||||
|
||||
export default function ExportForm({ visible, onCreate, onCancel }) {
|
||||
const today = [
|
||||
moment(
|
||||
moment(Math.round(new Date() / 1000) * 1000).format('YYYY-MM-DD'),
|
||||
dateFormat
|
||||
),
|
||||
moment(
|
||||
moment(Math.round(new Date() / 1000) * 1000).format('YYYY-MM-DD'),
|
||||
dateFormat
|
||||
),
|
||||
]
|
||||
const yestoday = [
|
||||
moment(
|
||||
moment((Math.round(new Date() / 1000) + 86400) * 1000).format(
|
||||
'YYYY-MM-DD'
|
||||
),
|
||||
dateFormat
|
||||
),
|
||||
moment(
|
||||
moment((Math.round(new Date() / 1000) + 86400) * 1000).format(
|
||||
'YYYY-MM-DD'
|
||||
),
|
||||
dateFormat
|
||||
),
|
||||
]
|
||||
//当天日期年月日
|
||||
const day = [
|
||||
moment(Math.round(new Date() / 1000) * 1000).format('YYYY-MM-DD'),
|
||||
moment(Math.round(new Date() / 1000) * 1000).format('YYYY-MM-DD')
|
||||
]
|
||||
//昨天日期年月日
|
||||
const yesday = [
|
||||
moment((Math.round(new Date() / 1000) + 86400) * 1000).format(
|
||||
'YYYY-MM-DD'
|
||||
),
|
||||
moment((Math.round(new Date() / 1000) + 86400) * 1000).format(
|
||||
'YYYY-MM-DD'
|
||||
),
|
||||
]
|
||||
const [date, setDate] = useState('today')
|
||||
const [dataArr, setdataArr] = useState(today)
|
||||
const [time,setTime] = useState(day)
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Modal
|
||||
visible={visible}
|
||||
title="导出全部面试安排"
|
||||
okText="确定"
|
||||
cancelText="取消"
|
||||
onCancel={onCancel}
|
||||
onOk={() => {
|
||||
console.log(time)
|
||||
}}
|
||||
>
|
||||
<h5>最多可导出连续7天的面试</h5>
|
||||
<div>
|
||||
<label>选择时间段(包括起止日)</label>
|
||||
<RangePicker
|
||||
format={dateFormat}
|
||||
locale={locale}
|
||||
value={dataArr}
|
||||
onChange={(dates, dateStrings) => {
|
||||
setdataArr(dates)
|
||||
console.log(dateStrings)
|
||||
setTime(dateStrings)
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="exportform-time-box">
|
||||
<Radio.Group
|
||||
value={date}
|
||||
onChange={(e) => {
|
||||
setDate(e.target.value)
|
||||
if (e.target.value === 'today') {
|
||||
setdataArr(today)
|
||||
setTime(day)
|
||||
} else {
|
||||
setdataArr(yestoday)
|
||||
setTime(yesday)
|
||||
}
|
||||
}}
|
||||
size="small"
|
||||
buttonStyle="solid"
|
||||
>
|
||||
<Radio.Button value="today">今天</Radio.Button>
|
||||
<Radio.Button value="tomorrow">明天</Radio.Button>
|
||||
</Radio.Group>
|
||||
</div>
|
||||
</Modal>
|
||||
</div>
|
||||
)
|
||||
}
|
5
src/components/HeadLeftTtile/index.css
Normal file
5
src/components/HeadLeftTtile/index.css
Normal file
@ -0,0 +1,5 @@
|
||||
.HeadLeftTitle-box {
|
||||
font-size: 17px;
|
||||
font-weight: bold;
|
||||
padding: 0 18px;
|
||||
}
|
13
src/components/HeadLeftTtile/index.jsx
Normal file
13
src/components/HeadLeftTtile/index.jsx
Normal file
@ -0,0 +1,13 @@
|
||||
import React,{Component} from 'react'
|
||||
import "./index.css"
|
||||
// import { withRouter } from 'react-router-dom'
|
||||
|
||||
|
||||
class HeadLeftTtile extends Component {
|
||||
render() {
|
||||
const { headtitle } = this.props
|
||||
return <div className="HeadLeftTitle-box">{headtitle}</div>
|
||||
}
|
||||
}
|
||||
|
||||
export default HeadLeftTtile
|
27
src/components/InterviewUploadPop/index.jsx
Normal file
27
src/components/InterviewUploadPop/index.jsx
Normal file
@ -0,0 +1,27 @@
|
||||
import React, { useState } from 'react'
|
||||
import { Button } from 'antd'
|
||||
import ResumeUpload from '../../pages/ResumeUpload'
|
||||
import {PlusOutlined} from '@ant-design/icons'
|
||||
|
||||
export default function InterviewUploadPop() {
|
||||
return (
|
||||
<div>
|
||||
<Button
|
||||
type="primary"
|
||||
// onClick={() => {
|
||||
// setVisible(true)
|
||||
// }}
|
||||
>
|
||||
<PlusOutlined />上传
|
||||
</Button>
|
||||
|
||||
{/* <ResumeUpload
|
||||
visible={visible}
|
||||
onCreate={onCreate}
|
||||
onCancel={() => {
|
||||
setVisible(false)
|
||||
}}
|
||||
/> */}
|
||||
</div>
|
||||
)
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
.EnclosureTabs-box {
|
||||
margin: 24px 24px 24px 0;
|
||||
}
|
49
src/components/InterviewerInfoPop/EnclosureTabs/index.jsx
Normal file
49
src/components/InterviewerInfoPop/EnclosureTabs/index.jsx
Normal file
@ -0,0 +1,49 @@
|
||||
import React from 'react'
|
||||
import './index.css'
|
||||
import { UploadOutlined } from '@ant-design/icons'
|
||||
import { Button, message, Upload,Input } from 'antd'
|
||||
|
||||
const props = {
|
||||
name: 'file',
|
||||
action: 'https://www.mocky.io/v2/5cc8019d300000980a055e76',
|
||||
headers: {
|
||||
authorization: 'authorization-text',
|
||||
},
|
||||
|
||||
onChange(info) {
|
||||
if (info.file.status !== 'uploading') {
|
||||
console.log(info.file, info.fileList)
|
||||
}
|
||||
|
||||
if (info.file.status === 'done') {
|
||||
message.success(`${info.file.name} file uploaded successfully`)
|
||||
} else if (info.file.status === 'error') {
|
||||
message.error(`${info.file.name} file upload failed.`)
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
export default function EnclosureTabs() {
|
||||
return (
|
||||
<div className="EnclosureTabs-box">
|
||||
<h2>附件</h2>
|
||||
<Upload {...props}>
|
||||
<Button icon={<UploadOutlined />}>附件上传</Button>
|
||||
</Upload>
|
||||
<p>
|
||||
支持文档,图片,压缩包,视频,音频,设计文件等格式文件。单次上传文件总量请小于50MB。
|
||||
</p>
|
||||
|
||||
<h2>个人链接</h2>
|
||||
<Input.Group compact>
|
||||
<Input
|
||||
style={{
|
||||
width: 'calc(100% - 70px)',
|
||||
}}
|
||||
defaultValue="请输入"
|
||||
/>
|
||||
<Button type="primary">保存</Button>
|
||||
</Input.Group>
|
||||
</div>
|
||||
)
|
||||
}
|
19
src/components/InterviewerInfoPop/InterviewTabs/index.css
Normal file
19
src/components/InterviewerInfoPop/InterviewTabs/index.css
Normal file
@ -0,0 +1,19 @@
|
||||
.InterviewTabs-box {margin-right: 24px;}
|
||||
.InterviewTabs-box .InterviewTabs-top-buttom-box {
|
||||
text-align: center;
|
||||
}
|
||||
.InterviewTabs-box .InterviewTabs-top-buttom-box label{ float: right; }
|
||||
|
||||
.InterviewTabs-content-box { margin-top: 24px; }
|
||||
|
||||
.InterviewTabs-content-list-box {
|
||||
display: flex;
|
||||
height: 35px;
|
||||
line-height: 35px;
|
||||
}
|
||||
.InterviewTabs-content-list-box label { width: 160px; }
|
||||
.InterviewTabs-content-list-actionbar { margin-top: 10px; padding: 0 10px; display: flex; justify-content: space-between; align-items: center; background-color: #f0f0f0; height: 35px; line-height: 35px; }
|
||||
|
||||
|
||||
|
||||
|
127
src/components/InterviewerInfoPop/InterviewTabs/index.jsx
Normal file
127
src/components/InterviewerInfoPop/InterviewTabs/index.jsx
Normal file
@ -0,0 +1,127 @@
|
||||
import React from 'react'
|
||||
import { Button, Collapse, Divider, Tag } from 'antd'
|
||||
import './index.css'
|
||||
import {
|
||||
CalendarFilled,
|
||||
SettingOutlined,
|
||||
WarningFilled,
|
||||
} from '@ant-design/icons'
|
||||
|
||||
const { Panel } = Collapse
|
||||
|
||||
export default function InterviewTabs() {
|
||||
const onChange = (key) => {
|
||||
console.log(key)
|
||||
}
|
||||
const data = [
|
||||
{
|
||||
title: '2022年5月16日 星期一·现场面试',
|
||||
place: '武汉市洪山区野芷湖西路创意天地5号楼2层',
|
||||
pic: '张三',
|
||||
rounds: 0,
|
||||
time: '12:00',
|
||||
duration: '30分钟',
|
||||
},
|
||||
{
|
||||
title: '2022年5月16日 星期一·现场面试',
|
||||
place: '武汉市洪山区野芷湖西路创意天地5号楼2层',
|
||||
pic: '张三',
|
||||
rounds: 0,
|
||||
time: '12:00',
|
||||
duration: '30分钟',
|
||||
},
|
||||
{
|
||||
title: '2022年5月16日 星期一·现场面试',
|
||||
place: '武汉市洪山区野芷湖西路创意天地5号楼2层',
|
||||
pic: '张三',
|
||||
rounds: 0,
|
||||
time: '12:00',
|
||||
duration: '30分钟',
|
||||
},
|
||||
{
|
||||
title: '2022年5月16日 星期一·现场面试',
|
||||
place: '武汉市洪山区野芷湖西路创意天地5号楼2层',
|
||||
pic: '张三',
|
||||
rounds: 0,
|
||||
time: '12:00',
|
||||
duration: '30分钟',
|
||||
},
|
||||
{
|
||||
title: '2022年5月16日 星期一·现场面试',
|
||||
place: '武汉市洪山区野芷湖西路创意天地5号楼2层',
|
||||
pic: '张三',
|
||||
rounds: 0,
|
||||
time: '12:00',
|
||||
duration: '30分钟',
|
||||
},
|
||||
{
|
||||
title: '2022年5月16日 星期一·现场面试',
|
||||
place: '武汉市洪山区野芷湖西路创意天地5号楼2层',
|
||||
pic: '张三',
|
||||
rounds: 0,
|
||||
time: '12:00',
|
||||
duration: '30分钟',
|
||||
},
|
||||
]
|
||||
const genExtra = () => (
|
||||
<SettingOutlined
|
||||
onClick={(event) => {
|
||||
// If you don't want click extra trigger collapse, you can prevent this:
|
||||
event.stopPropagation()
|
||||
}}
|
||||
/>
|
||||
)
|
||||
|
||||
return (
|
||||
<div className="InterviewTabs-box">
|
||||
<div className="InterviewTabs-top-buttom-box">
|
||||
<Button size="Large">添加面试</Button>
|
||||
<label>导出面试反馈</label>
|
||||
</div>
|
||||
|
||||
<div className="InterviewTabs-content-box">
|
||||
<Collapse defaultActiveKey="0" onChange={onChange}>
|
||||
{data.map((item, key) => {
|
||||
return (
|
||||
<Panel
|
||||
header={item.title}
|
||||
key={key}
|
||||
extra={genExtra()}
|
||||
>
|
||||
<div className="InterviewTabs-content-list-box">
|
||||
<label className="color2">面试地点</label>
|
||||
<span>{item.place}</span>
|
||||
</div>
|
||||
<div className="InterviewTabs-content-list-box">
|
||||
<label className="color2">面试负责人</label>
|
||||
<span>{item.pic}</span>
|
||||
</div>
|
||||
<Divider />
|
||||
<div className="InterviewTabs-content-list-box">
|
||||
<label className="color2">面试信息</label>
|
||||
<span>
|
||||
{' '}
|
||||
<Tag color="#22b8cf">初试</Tag>{' '}
|
||||
{item.time} 时长:{item.duration}
|
||||
</span>
|
||||
</div>
|
||||
<div className="InterviewTabs-content-list-actionbar">
|
||||
<div>{item.pic}</div>
|
||||
<div>
|
||||
<WarningFilled style={{color:'#f57527'}}/>
|
||||
为评估
|
||||
</div>
|
||||
<div>
|
||||
<Button type="link">催促反馈</Button>
|
||||
<Button type="link">填写反馈</Button>
|
||||
<Button type="link">面试未进行</Button>
|
||||
</div>
|
||||
</div>
|
||||
</Panel>
|
||||
)
|
||||
})}
|
||||
</Collapse>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
18
src/components/InterviewerInfoPop/OfferTabs/index.css
Normal file
18
src/components/InterviewerInfoPop/OfferTabs/index.css
Normal file
@ -0,0 +1,18 @@
|
||||
.OfferTabs-box { margin-right: 24px; }
|
||||
.OfferTabs-title-box { font-size: 16px; font-weight: bold; border-left: 4px solid #0c8cf6; text-align: left; text-indent: 10px; margin-top: 30px; }
|
||||
.OfferTabs-title-box span { color: #0c8cf6; font-size: 14px; cursor: pointer; font-weight: 400; }
|
||||
|
||||
.OfferTabs-border-box { border: 1px solid #dddfe3; padding: 16px; margin-top: 16px; text-align: left; }
|
||||
.display { display: flex; justify-content: space-between; align-items: center; }
|
||||
.Approval-box { text-align: left; }
|
||||
.Approval-box .title {font-weight: bold;}
|
||||
.Approval-box span { color: #0c8cf6; }
|
||||
.but-box { display: flex; justify-content: space-between; align-items: center; margin-top: 16px;}
|
||||
|
||||
.Offer-info-top-box { display: flex; justify-content: space-between; align-items: center; text-align: left; }
|
||||
.Offer-info-box { text-align: left; margin: 16px 24px; }
|
||||
|
||||
.label-box { background-color: #dddfe3; padding: 8px 5px; color: #6e7686; }
|
||||
.generate-box { display: flex; justify-content: space-between; align-items: center; margin: 16px 0; }
|
||||
.generate-box span { margin-left: 10px; color: #0c8cf6; cursor: pointer; }
|
||||
|
159
src/components/InterviewerInfoPop/OfferTabs/index.jsx
Normal file
159
src/components/InterviewerInfoPop/OfferTabs/index.jsx
Normal file
@ -0,0 +1,159 @@
|
||||
import React from 'react'
|
||||
import './index.css'
|
||||
import { Button, Dropdown, Menu, Tag } from 'antd'
|
||||
import {
|
||||
RightOutlined,
|
||||
EllipsisOutlined,
|
||||
DownOutlined,
|
||||
} from '@ant-design/icons'
|
||||
|
||||
export default function OfferTabs() {
|
||||
const onMenuClick = (e) => {
|
||||
console.log('click', e)
|
||||
}
|
||||
|
||||
const menu = (
|
||||
<Menu
|
||||
onClick={onMenuClick}
|
||||
items={[
|
||||
{
|
||||
key: '1',
|
||||
label: '操作一',
|
||||
},
|
||||
{
|
||||
key: '2',
|
||||
label: '操作二',
|
||||
},
|
||||
{
|
||||
key: '3',
|
||||
label: '操作三',
|
||||
},
|
||||
]}
|
||||
/>
|
||||
)
|
||||
|
||||
return (
|
||||
<div className="OfferTabs-box">
|
||||
<div style={{ textAlign: 'center' }}>
|
||||
<Dropdown.Button overlay={menu}>导出offer信息</Dropdown.Button>
|
||||
|
||||
<div className="OfferTabs-title-box">入职记录</div>
|
||||
<div className="OfferTabs-border-box display">
|
||||
<span>尚未确定候选人是否入职</span>
|
||||
<div className="">
|
||||
<Button>确认入职</Button>
|
||||
<Button>放弃入职</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="OfferTabs-title-box">Offer审批</div>
|
||||
<div className="but-box">
|
||||
<Button>重新发起审批</Button>
|
||||
<Button>修改审批流程</Button>
|
||||
</div>
|
||||
<div className="OfferTabs-border-box display">
|
||||
<div className="Approval-box">
|
||||
<div className="title">通用审批流程</div>
|
||||
<div>
|
||||
2022-05-16 发起 · <span>查看Offer详情</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="">
|
||||
<Tag color="#37b24d">已通过</Tag>
|
||||
<RightOutlined />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="OfferTabs-title-box">Offer发送记录</div>
|
||||
<div className="but-box">
|
||||
<Button>重新发送</Button>
|
||||
</div>
|
||||
|
||||
<div className="OfferTabs-border-box display">
|
||||
<div className="Approval-box">
|
||||
<div className="title">杨女士的Offer(邮件)</div>
|
||||
<div>2022-05-16 发起</div>
|
||||
</div>
|
||||
|
||||
<div className="">
|
||||
<Tag color="#f79f00">候选人未决定Offer</Tag>
|
||||
<EllipsisOutlined />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="OfferTabs-title-box display">
|
||||
Offer详情
|
||||
<span>编辑</span>
|
||||
</div>
|
||||
|
||||
<div className="OfferTabs-border-box">
|
||||
<div className="Offer-info-top-box">
|
||||
<span>杨女士的Offer</span>
|
||||
<DownOutlined />
|
||||
</div>
|
||||
<div className="Offer-info-box">
|
||||
<h4 className="fontweight">offer详情</h4>
|
||||
|
||||
{/* <div>
|
||||
<span>薪资待遇</span>
|
||||
|
||||
</div> */}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="OfferTabs-title-box display">
|
||||
Offer邮件及短信
|
||||
<span>编辑</span>
|
||||
</div>
|
||||
<h4 className="fontweight">邮件信息</h4>
|
||||
<div className="OfferTabs-border-box">
|
||||
<p>
|
||||
<label className='label-box'>杨女士</label>,你好
|
||||
</p>
|
||||
<p>
|
||||
感谢关注<label className='label-box'>武汉乐谷在线科技有限公司</label>!
|
||||
跟高兴的通知您通过了我们的面试,真诚的邀请您加入我们的团队
|
||||
<br />
|
||||
</p>
|
||||
<p>
|
||||
职位: <label className='label-box'>高级游戏测试工程师</label>
|
||||
</p>
|
||||
<p>
|
||||
入职时间:<label className='label-box'>2022-05-26</label>
|
||||
</p>
|
||||
<p>
|
||||
薪酬:<label className='label-box'>月薪</label>
|
||||
</p>
|
||||
<p>
|
||||
<label className='label-box'>111111</label>
|
||||
</p>
|
||||
<p>
|
||||
入职地点:<label className='label-box'>xxx</label>
|
||||
</p>
|
||||
<p>
|
||||
联系人:<label className='label-box'>张三</label>
|
||||
</p>
|
||||
<p>
|
||||
联系电话:<label className='label-box'>123568875145</label>
|
||||
</p>
|
||||
<p>
|
||||
联系邮箱:<label className='label-box'>123659@163.com</label>
|
||||
</p>
|
||||
<p>如有问题请用以上联系方式及时与我们沟通,谢谢!</p>
|
||||
<p>(系统邮件,请勿直接回复)</p>
|
||||
</div>
|
||||
|
||||
<div className='generate-box'>
|
||||
<label>生成Offer附件</label>
|
||||
<a href='#'>杨女士录用通知函.pdf</a>
|
||||
<div>
|
||||
<span>下载</span>
|
||||
<span>预览</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
.OperatiolistTabs-box {
|
||||
margin: 24px 24px 24px 0;
|
||||
}
|
36
src/components/InterviewerInfoPop/OperatiolistTabs/index.jsx
Normal file
36
src/components/InterviewerInfoPop/OperatiolistTabs/index.jsx
Normal file
@ -0,0 +1,36 @@
|
||||
import React from 'react'
|
||||
import './index.css'
|
||||
import { Timeline, Divider } from 'antd'
|
||||
|
||||
export default function OperatiolistTabs() {
|
||||
return (
|
||||
<div className="OperatiolistTabs-box ">
|
||||
<Timeline>
|
||||
<Timeline.Item>
|
||||
<p className="fontweight">2022-05-15 16:06:35</p>
|
||||
<p className="">候选人更新信息</p>
|
||||
<p className="color1">由管理员 王二狗操作</p>
|
||||
<Divider />
|
||||
</Timeline.Item>
|
||||
<Timeline.Item>
|
||||
<p className="fontweight">2022-05-15 16:06:35</p>
|
||||
<p className="">候选人更新信息</p>
|
||||
<p className="color1">由管理员 王二狗操作</p>
|
||||
<Divider />
|
||||
</Timeline.Item>
|
||||
<Timeline.Item>
|
||||
<p className="fontweight">2022-05-15 16:06:35</p>
|
||||
<p className="">候选人更新信息</p>
|
||||
<p className="color1">由管理员 王二狗操作</p>
|
||||
<Divider />
|
||||
</Timeline.Item>
|
||||
<Timeline.Item>
|
||||
<p className="fontweight">2022-05-15 16:06:35</p>
|
||||
<p className="">候选人更新信息</p>
|
||||
<p className="color1">由管理员 王二狗操作</p>
|
||||
<Divider />
|
||||
</Timeline.Item>
|
||||
</Timeline>
|
||||
</div>
|
||||
)
|
||||
}
|
17
src/components/InterviewerInfoPop/RemarksTabs/index.css
Normal file
17
src/components/InterviewerInfoPop/RemarksTabs/index.css
Normal file
@ -0,0 +1,17 @@
|
||||
.RemarksTabs-top-box { display: flex; justify-content: space-between; align-items: center; margin-right: 24px; }
|
||||
.remarks-title { font-size: 18px; font-weight: bold; margin-top: 30px; }
|
||||
|
||||
.remarks-list-box { border: 1px solid #f0f0f0; border-radius: 10px; margin: 24px 24px 0 0; }
|
||||
.remarks-list { display: flex; margin: 8px; padding: 6px 10px; border-radius: 8px;
|
||||
/* border: 1px solid #000; */
|
||||
justify-content: space-between; }
|
||||
.remarks-list .head-box { width: 30px; height: 30px; border-radius: 50%; background-color: #f06595; text-align: center; line-height: 30px; color: #fff; }
|
||||
.remarks-list-userinfo-box { display: flex; justify-content: space-between; align-items: center; }
|
||||
.remarks-list-right-box { width: calc(100% - 40px); }
|
||||
.remarks-list-name { font-weight: bold; height: 32px; line-height: 32px;}
|
||||
.remarks-list-time { color: #75777d; height: 32px; line-height: 32px; }
|
||||
.operation-box { display: flex; align-items: center; }
|
||||
.remarks-list-userinfo-box p { margin-bottom: 0; }
|
||||
.operation-box button{ display: none; }
|
||||
.remarks-list:hover { background-color: #f9f9fa; }
|
||||
.remarks-list:hover .operation-box button{ display: block !important; }
|
70
src/components/InterviewerInfoPop/RemarksTabs/index.jsx
Normal file
70
src/components/InterviewerInfoPop/RemarksTabs/index.jsx
Normal file
@ -0,0 +1,70 @@
|
||||
import React from 'react'
|
||||
import './index.css'
|
||||
import { Checkbox, Button } from 'antd'
|
||||
|
||||
export default function RemarksTabs() {
|
||||
const onChange=(e)=>{
|
||||
console.log(e);
|
||||
}
|
||||
return (
|
||||
<div>
|
||||
<div className="RemarksTabs-top-box">
|
||||
<Checkbox onChange={onChange}>设为私密</Checkbox>
|
||||
<Button type="primary">添加</Button>
|
||||
</div>
|
||||
|
||||
<div className='remarks-title'>查看备注</div>
|
||||
<div className='remarks-list-box'>
|
||||
<div className='remarks-list'>
|
||||
<div className='head-box'>刘</div>
|
||||
<div className='remarks-list-right-box'>
|
||||
<div className='remarks-list-userinfo-box'>
|
||||
<p className='remarks-list-name'>刘大哥 (我) </p>
|
||||
<div className='operation-box'>
|
||||
<Button type="link" danger>删除</Button>
|
||||
<p className='remarks-list-time'>2022-07-07</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className='color1'>
|
||||
呵呵哈哈哈或或
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='remarks-list'>
|
||||
<div className='head-box'>刘</div>
|
||||
<div className='remarks-list-right-box'>
|
||||
<div className='remarks-list-userinfo-box'>
|
||||
<p className='remarks-list-name'>刘大哥 (我) </p>
|
||||
<div className='operation-box'>
|
||||
<Button type="link" danger>删除</Button>
|
||||
<p className='remarks-list-time'>2022-07-07</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className='color1'>
|
||||
呵呵哈哈哈或或
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='remarks-list'>
|
||||
<div className='head-box'>刘</div>
|
||||
<div className='remarks-list-right-box'>
|
||||
<div className='remarks-list-userinfo-box'>
|
||||
<p className='remarks-list-name'>刘大哥 (我) </p>
|
||||
<div className='operation-box'>
|
||||
<Button type="link" danger>删除</Button>
|
||||
<p className='remarks-list-time'>2022-07-07</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className='color1'>
|
||||
呵呵哈哈哈或或
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
)
|
||||
}
|
38
src/components/InterviewerInfoPop/index.css
Normal file
38
src/components/InterviewerInfoPop/index.css
Normal file
@ -0,0 +1,38 @@
|
||||
.InterviewerInfoPop-top-box { display: flex; justify-content: space-between; }
|
||||
.InterviewerInfoPop-top-box .divdisplay{
|
||||
align-items: center;
|
||||
}
|
||||
.InterviewerInfoPop-name { font-size: 22px; font-weight: bold; }
|
||||
.InterviewerInfoPop-label { border: 1px solid #000; font-size: 14px; margin-left: 10px; width: 24px; height: 24px; text-align: center; line-height: 24px; }
|
||||
.InterviewerInfoPop-apply-num { margin-left: 10px; background-color: #0086ff; height: 24px; line-height: 24px; font-size: 14px; color: #fff; padding: 0 6px; border-radius: 4px; }
|
||||
.operationbutton div{ font-size: 18px; cursor: pointer; margin-left: 20px; color: #91989f; }
|
||||
.operationbutton { display: flex; }
|
||||
|
||||
|
||||
.resume-top-info{
|
||||
width: 98%;
|
||||
border: 1px solid #eee;
|
||||
border-radius: 20px;
|
||||
display: flex;
|
||||
padding: 50px 0 10px 0;
|
||||
}
|
||||
.resume-head { width: 90px; height: 90px; overflow: hidden; border-radius: 50%; border: 1px solid #000; margin-left: 24px; box-shadow: 0 0px 10px rgba(000, 000, 000, 0.2); }
|
||||
.resume-info { margin-left: 14px; }
|
||||
.resume-info-name { font-size: 22px; font-weight: bold; margin-bottom: 30px; }
|
||||
.xian { width: 60px; height: 4px; background-color: #dddfe0; }
|
||||
.personal-information-box {margin: 20px 100px; }
|
||||
/* .personal-info-box { padding-bottom: 30px; } */
|
||||
.personal-information-box label{ white-space: nowrap; }
|
||||
/* .information-box { overflow-y: auto; } */
|
||||
.work-experience-box { width: 98%; border-left: 2px solid #a4a5a7; background-color: #f0f0f0; padding: 12px 48px; }
|
||||
.side-action-bar-box {width: calc(100% - 850px); height: auto; background-color: #f4f4f4; margin-top: 45px; border-top: 1px solid #f0f0f0;}
|
||||
.InterviewerInfoPop-box .ant-tabs { width: 100% !important; }
|
||||
|
||||
.side-action-bar-box .button-box {padding: 0 24px;}
|
||||
.button-box button {margin-top: 16px;}
|
||||
|
||||
.InterviewerInfoPop-box .ant-tabs-content-holder {
|
||||
overflow-y: auto;
|
||||
height: 33vw;
|
||||
}
|
||||
|
265
src/components/InterviewerInfoPop/index.jsx
Normal file
265
src/components/InterviewerInfoPop/index.jsx
Normal file
@ -0,0 +1,265 @@
|
||||
import React, { useState, useEffect } from 'react'
|
||||
import { Button, Form, Input, Modal, Tabs, Badge } from 'antd'
|
||||
import Steptone from '../Steptone'
|
||||
import InterviewTabs from './InterviewTabs'
|
||||
import OperatiolistTabs from './OperatiolistTabs'
|
||||
import EnclosureTabs from './EnclosureTabs'
|
||||
import RemarksTabs from './RemarksTabs'
|
||||
import OfferTabs from './OfferTabs'
|
||||
import './index.css'
|
||||
import {
|
||||
UserOutlined,
|
||||
PhoneOutlined,
|
||||
MailOutlined,
|
||||
ShoppingOutlined,
|
||||
ReadOutlined,
|
||||
SendOutlined,
|
||||
DeleteOutlined,
|
||||
EditOutlined,
|
||||
CloseOutlined,
|
||||
} from '@ant-design/icons'
|
||||
|
||||
export default function InterviewerInfoPop({
|
||||
visible,
|
||||
onCreate,
|
||||
data,
|
||||
onCancel,
|
||||
onEditresume,
|
||||
}) {
|
||||
const [form] = Form.useForm()
|
||||
const { TabPane } = Tabs
|
||||
|
||||
const onChange = (key) => {
|
||||
console.log(key)
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Modal
|
||||
visible={visible}
|
||||
onCancel={onCancel}
|
||||
footer={null}
|
||||
closable={false}
|
||||
width={1200}
|
||||
>
|
||||
<div className="InterviewerInfoPop-box">
|
||||
<div className="InterviewerInfoPop-top-box">
|
||||
<div className="">
|
||||
<div className="divdisplay">
|
||||
<span className="InterviewerInfoPop-name coloc5">
|
||||
张三
|
||||
</span>
|
||||
<div className="InterviewerInfoPop-label color6 border6">
|
||||
重
|
||||
</div>
|
||||
<div className="InterviewerInfoPop-label color3 border3">
|
||||
<UserOutlined />
|
||||
</div>
|
||||
<div className="InterviewerInfoPop-apply-num">
|
||||
已申请1次
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
className="divdisplay"
|
||||
style={{ marginTop: 10 }}
|
||||
>
|
||||
<div className="color1 font-size14 marginright10">
|
||||
<UserOutlined /> 女 · 24岁
|
||||
</div>
|
||||
<div className="color1 font-size14 marginright10">
|
||||
<PhoneOutlined /> 15369874569(上海)
|
||||
</div>
|
||||
<div className="color1 font-size14 marginright10">
|
||||
<MailOutlined /> 212365748@qq.com
|
||||
</div>
|
||||
<div className="color1 font-size14 marginright10">
|
||||
<ShoppingOutlined /> 1年
|
||||
</div>
|
||||
<div className="color1 font-size14 marginright10">
|
||||
<ReadOutlined /> 硕士
|
||||
</div>
|
||||
<div className="color1 font-size14 marginright10">
|
||||
<SendOutlined /> 湖北省-武汉市
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="operationbutton">
|
||||
<div className="">
|
||||
<DeleteOutlined />
|
||||
</div>
|
||||
<div className="">
|
||||
<EditOutlined
|
||||
onClick={() => onEditresume({ data })}
|
||||
/>
|
||||
</div>
|
||||
<div className="">
|
||||
<CloseOutlined onClick={onCreate} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="divdisplay">
|
||||
<div style={{ width: '850px' }}>
|
||||
<Tabs defaultActiveKey="1" onChange={onChange}>
|
||||
<TabPane tab="基本信息" key="1">
|
||||
<div className="information-box">
|
||||
<div className="resume-top-info">
|
||||
<div className="resume-head"></div>
|
||||
|
||||
<div className="resume-info">
|
||||
<div className="resume-info-name coloc5">
|
||||
张三
|
||||
</div>
|
||||
<div>
|
||||
<span className="fontsize14 color1 marginright10">
|
||||
{' '}
|
||||
<PhoneOutlined className="marginright5" />{' '}
|
||||
<span>
|
||||
15369874569(上海)
|
||||
</span>{' '}
|
||||
</span>
|
||||
|
||||
<span className="fontsize14 color1">
|
||||
{' '}
|
||||
<MailOutlined className="marginright5" />{' '}
|
||||
<span>
|
||||
212365748@qq.com
|
||||
</span>{' '}
|
||||
</span>
|
||||
</div>
|
||||
<div className="fontsize14 color1 margintop5">
|
||||
女·24岁·1年工作经验·硕士·湖北-武汉
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="fontsize24 fontweight margintop50 coloc5">
|
||||
个人信息
|
||||
<div className="xian margintop20"></div>
|
||||
</div>
|
||||
<div className="personal-info-box">
|
||||
<div className="divdisplay personal-information-box lineheight24">
|
||||
<label className="color1 marginright24">
|
||||
最近公司
|
||||
</label>
|
||||
<p className="coloc5">
|
||||
武汉掌游科技有限公司
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="fontsize24 fontweight margintop50 coloc5">
|
||||
工作经历
|
||||
<div className="xian margintop20"></div>
|
||||
</div>
|
||||
<div className="personal-info-box">
|
||||
<div>
|
||||
<div className="work-experience-box margintop20 divdisplay">
|
||||
<label className="color7 marginright24">
|
||||
2122-11 - 2022-02
|
||||
</label>
|
||||
<div className="coloc5 fontweight">
|
||||
武汉xxx有限公司
|
||||
</div>
|
||||
</div>
|
||||
<div className="divdisplay personal-information-box lineheight24">
|
||||
<label className="color1 marginright24">
|
||||
职位名称
|
||||
</label>
|
||||
<p className="coloc5">
|
||||
计算会计
|
||||
</p>
|
||||
</div>
|
||||
<div className="divdisplay personal-information-box lineheight24">
|
||||
<label className="color1 marginright24">
|
||||
工作职责
|
||||
</label>
|
||||
<p className="coloc5">
|
||||
安守本分挥洒的回访客户萨迪克返回空上岛咖啡哈师大放开手大富科技阿士大夫卡啥打开就发生接口黄卡就收到回复交换空间撒大黄蜂尽快哈萨克东方红卡上的反馈
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div className="work-experience-box margintop20 divdisplay">
|
||||
<label className="color7 marginright24">
|
||||
2122-11 - 2022-02
|
||||
</label>
|
||||
<div className="coloc5 fontweight">
|
||||
武汉xxx有限公司
|
||||
</div>
|
||||
</div>
|
||||
<div className="divdisplay personal-information-box lineheight24">
|
||||
<label className="color1 marginright24">
|
||||
职位名称
|
||||
</label>
|
||||
<p className="coloc5">
|
||||
计算会计
|
||||
</p>
|
||||
</div>
|
||||
<div className="divdisplay personal-information-box lineheight24">
|
||||
<label className="color1 marginright24">
|
||||
工作职责
|
||||
</label>
|
||||
<p className="coloc5">
|
||||
安守本分挥洒的回访客户萨迪克返回空上岛咖啡哈师大放开手大富科技阿士大夫卡啥打开就发生接口黄卡就收到回复交换空间撒大黄蜂尽快哈萨克东方红卡上的反馈
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</TabPane>
|
||||
<TabPane tab="面试" key="2">
|
||||
<div className="information-box">
|
||||
<InterviewTabs />
|
||||
</div>
|
||||
</TabPane>
|
||||
<TabPane tab="考试/测评" key="3">
|
||||
考试/测评
|
||||
</TabPane>
|
||||
<TabPane tab="Offer/录用" key="4">
|
||||
<OfferTabs/>
|
||||
</TabPane>
|
||||
|
||||
<TabPane
|
||||
tab={
|
||||
<Badge
|
||||
size="small"
|
||||
count="2"
|
||||
color={'blue'}
|
||||
>
|
||||
<span>备注</span>
|
||||
</Badge>
|
||||
}
|
||||
key="5"
|
||||
>
|
||||
<RemarksTabs/>
|
||||
</TabPane>
|
||||
|
||||
<TabPane tab="附加信息" key="6">
|
||||
<EnclosureTabs/>
|
||||
</TabPane>
|
||||
<TabPane tab="操作记录" key="7">
|
||||
<OperatiolistTabs />
|
||||
</TabPane>
|
||||
</Tabs>
|
||||
</div>
|
||||
<div className="side-action-bar-box">
|
||||
<div className="progress-bar-box">
|
||||
{/* 步骤条组件 */}
|
||||
<Steptone data="1" />
|
||||
</div>
|
||||
|
||||
<div className="button-box">
|
||||
<Button type="primary" block>
|
||||
进入下一阶段
|
||||
</Button>
|
||||
<Button block>淘汰</Button>
|
||||
<Button block>关注</Button>
|
||||
<Button block>备注</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Modal>
|
||||
</div>
|
||||
)
|
||||
}
|
4
src/components/NavHeader/index.css
Normal file
4
src/components/NavHeader/index.css
Normal file
@ -0,0 +1,4 @@
|
||||
.navheader-box { height: 32px; margin-right: 24px; display: flex; align-items: center; }
|
||||
.navheader-box .ant-space-item{ line-height: 0; }
|
||||
.navheader-box .navheader-biv{ margin-right: 16px; line-height: 0; cursor: pointer;}
|
||||
.navheader-box .navheader-biv .headimg { width: 32px; height: 32px; border-radius: 50%; text-align: center; line-height: 32px; background-color: #0c8cf6; color: #fff; font-size: 12px; }
|
103
src/components/NavHeader/index.jsx
Normal file
103
src/components/NavHeader/index.jsx
Normal file
@ -0,0 +1,103 @@
|
||||
import React, { Component, useState } from 'react'
|
||||
import ResumeUploadPop from '../ResumeUploadPop'
|
||||
import InterviewUploadPop from '../InterviewUploadPop'
|
||||
import './index.css'
|
||||
import { Input, Space, Button, Badge, Menu, Dropdown } from 'antd'
|
||||
import {
|
||||
ShopOutlined,
|
||||
QuestionCircleOutlined,
|
||||
AlertOutlined,
|
||||
} from '@ant-design/icons'
|
||||
|
||||
const { Search } = Input
|
||||
// const suffix = (
|
||||
// <AudioOutlined
|
||||
// style={{
|
||||
// fontSize: 16,
|
||||
// color: '#1890ff',
|
||||
// }}
|
||||
// />
|
||||
// )
|
||||
|
||||
const menu = (
|
||||
<Menu
|
||||
items={[
|
||||
{
|
||||
key: '1',
|
||||
label: <p>1st menu item</p>,
|
||||
},
|
||||
{
|
||||
key: '2',
|
||||
label: <p>2nd menu item</p>,
|
||||
},
|
||||
{
|
||||
key: '3',
|
||||
label: <p>退出登录</p>,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
)
|
||||
const onSearch = (value) => console.log(value)
|
||||
export default class NavHeader extends Component {
|
||||
state = { component: '' }
|
||||
|
||||
componentDidMount(){
|
||||
|
||||
}
|
||||
|
||||
componentWillUpdate(){
|
||||
const { headnav } = this.props
|
||||
// console.log('NavHeader')
|
||||
// switch (headnav) {
|
||||
// case 'position':
|
||||
// this.setState({
|
||||
// component: <ResumeUploadPop />,
|
||||
// })
|
||||
// break
|
||||
// case 'interview':
|
||||
// this.setState({
|
||||
// component: <InterviewUploadPop />,
|
||||
// })
|
||||
// break
|
||||
// }
|
||||
}
|
||||
|
||||
render() {
|
||||
const { headnav } = this.props
|
||||
return (
|
||||
<div className="navheader-box">
|
||||
<div className="navheader-biv">
|
||||
<Space direction="vertical">
|
||||
<Search
|
||||
placeholder="搜索候选人"
|
||||
onSearch={onSearch}
|
||||
style={{
|
||||
width: 200,
|
||||
}}
|
||||
/>
|
||||
</Space>
|
||||
</div>
|
||||
<div className="navheader-biv">{headnav== 'position'? <ResumeUploadPop />: <InterviewUploadPop />}</div>
|
||||
<div className="navheader-biv">
|
||||
<ShopOutlined
|
||||
style={{ fontSize: '20px', color: '#ff6b6b' }}
|
||||
/>
|
||||
</div>
|
||||
<div className="navheader-biv">
|
||||
<QuestionCircleOutlined style={{ fontSize: '20px' }} />
|
||||
</div>
|
||||
<div className="navheader-biv">
|
||||
<Badge count={5} size={'small'}>
|
||||
{/* <Avatar shape="square" size="large" /> */}
|
||||
<AlertOutlined style={{ fontSize: '20px' }} />
|
||||
</Badge>
|
||||
</div>
|
||||
<div className="navheader-biv">
|
||||
<Dropdown overlay={menu} placement="bottomLeft" arrow>
|
||||
<div className="headimg">罗</div>
|
||||
</Dropdown>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
31
src/components/ResumeUploadPop/index.jsx
Normal file
31
src/components/ResumeUploadPop/index.jsx
Normal file
@ -0,0 +1,31 @@
|
||||
import React, { useState } from 'react'
|
||||
import { Button } from 'antd'
|
||||
import ResumeUpload from '../../pages/ResumeUpload'
|
||||
|
||||
export default function ResumeUploadPop() {
|
||||
const [visible, setVisible] = useState(false)
|
||||
const onCreate = (values) => {
|
||||
console.log('Received values of form: ', values)
|
||||
setVisible(false)
|
||||
}
|
||||
return (
|
||||
<div>
|
||||
<Button
|
||||
type="primary"
|
||||
onClick={() => {
|
||||
setVisible(true)
|
||||
}}
|
||||
>
|
||||
上传简历
|
||||
</Button>
|
||||
|
||||
<ResumeUpload
|
||||
visible={visible}
|
||||
onCreate={onCreate}
|
||||
onCancel={() => {
|
||||
setVisible(false)
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
7
src/components/Steptone/index.css
Normal file
7
src/components/Steptone/index.css
Normal file
@ -0,0 +1,7 @@
|
||||
.progress-bar-box { background-color: #edeff1; height: 70px; padding: 24px; position: relative; }
|
||||
.progress-bar-bg { width: 100%; height: 6px; background-color: #fff; }
|
||||
.progress-bar-yuan-mr { width: 100%; display: flex; justify-content: space-between; position: relative; top: -13px; }
|
||||
.progress-bar-yuan-mr div { width: 20px; height: 20px; border-radius: 50%; background-color: #fff; text-align: center; line-height: 20px; color: #75777d; }
|
||||
.progress-bar-complete { width: 23%; height: 6px; background-color: #40a9ff; }
|
||||
.progress-bar-yuan-complete { background-color: #40a9ff !important; color: #fff !important; }
|
||||
.progress-bar-complete-title { width: 60px; text-align: center; position: relative; left: -20px; top: -10px; font-size: 12px; color: #75777d; }
|
45
src/components/Steptone/index.jsx
Normal file
45
src/components/Steptone/index.jsx
Normal file
@ -0,0 +1,45 @@
|
||||
import React, { Component } from 'react'
|
||||
import './index.css'
|
||||
|
||||
export class Steptone extends Component {
|
||||
render() {
|
||||
const { data } = this.props //当前处于第几步
|
||||
const dataArr = [1, 2, 3, 4, 5] //步骤总数
|
||||
const completetitlearr = [-20, 33, 84, 133, 185] //步骤标题移动距离
|
||||
return (
|
||||
<div>
|
||||
<div className="progress-bar-bg">
|
||||
<div
|
||||
className="progress-bar-complete"
|
||||
style={{ width: (data - 1) * 23 + '%' }}
|
||||
></div>
|
||||
</div>
|
||||
<div className="progress-bar-yuan-mr">
|
||||
{dataArr.map((i) => {
|
||||
return (
|
||||
<div
|
||||
className={
|
||||
data >= i
|
||||
? 'progress-bar-yuan-complete'
|
||||
: ''
|
||||
}
|
||||
key={i}
|
||||
>
|
||||
{i}
|
||||
</div>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
{/* -20 40 155 210 */}
|
||||
<div
|
||||
className="progress-bar-complete-title"
|
||||
style={{ left: completetitlearr[data - 1] }}
|
||||
>
|
||||
沟通Offer
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default Steptone
|
26
src/index.js
26
src/index.js
@ -1,17 +1,15 @@
|
||||
import React from 'react';
|
||||
import ReactDOM from 'react-dom/client';
|
||||
import './index.css';
|
||||
import App from './App';
|
||||
import reportWebVitals from './reportWebVitals';
|
||||
import React from 'react'
|
||||
import ReactDOM from 'react-dom/client'
|
||||
import './index.css'
|
||||
import App from './App'
|
||||
import reportWebVitals from './reportWebVitals'
|
||||
import { BrowserRouter } from 'react-router-dom'
|
||||
|
||||
const root = ReactDOM.createRoot(document.getElementById('root'));
|
||||
const root = ReactDOM.createRoot(document.getElementById('root'))
|
||||
root.render(
|
||||
<React.StrictMode>
|
||||
<App />
|
||||
</React.StrictMode>
|
||||
);
|
||||
<BrowserRouter>
|
||||
<App />
|
||||
</BrowserRouter>
|
||||
)
|
||||
|
||||
// If you want to start measuring performance in your app, pass a function
|
||||
// to log results (for example: reportWebVitals(console.log))
|
||||
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
|
||||
reportWebVitals();
|
||||
reportWebVitals()
|
||||
|
@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg>
|
Before Width: | Height: | Size: 2.6 KiB |
80
src/pages/Login.jsx
Normal file
80
src/pages/Login.jsx
Normal file
@ -0,0 +1,80 @@
|
||||
import React from 'react';
|
||||
import { Form, Input, Button, Checkbox } from 'antd';
|
||||
import {useNavigate} from 'react-router-dom';
|
||||
import { UserOutlined, LockOutlined } from '@ant-design/icons';
|
||||
import './login.css'
|
||||
|
||||
export default function Login() {
|
||||
const navigator = useNavigate();
|
||||
const onFinish = (values) => {
|
||||
localStorage.setItem('token',"asdasdasd");
|
||||
navigator('/')
|
||||
// console.log('Received values of form: ', values);
|
||||
};
|
||||
return (
|
||||
<div className='components-form-demo-normal-login'>
|
||||
<Form
|
||||
name="normal_login"
|
||||
className="login-form"
|
||||
initialValues={{
|
||||
remember: true,
|
||||
}}
|
||||
onFinish={onFinish}
|
||||
>
|
||||
<Form.Item
|
||||
name="username"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: '请输入用户名!',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Input
|
||||
prefix={
|
||||
<UserOutlined className="site-form-item-icon" />
|
||||
}
|
||||
placeholder="用户名"
|
||||
/>
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
name="password"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: '请输入密码!',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Input
|
||||
prefix={
|
||||
<LockOutlined className="site-form-item-icon" />
|
||||
}
|
||||
type="password"
|
||||
placeholder="密码"
|
||||
/>
|
||||
</Form.Item>
|
||||
<Form.Item>
|
||||
<Form.Item name="remember" valuePropName="checked" noStyle>
|
||||
<Checkbox>记住我</Checkbox>
|
||||
</Form.Item>
|
||||
|
||||
{/* <a className="login-form-forgot" href="#">
|
||||
忘记密码
|
||||
</a> */}
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item>
|
||||
<Button
|
||||
type="primary"
|
||||
htmlType="submit"
|
||||
className="login-form-button"
|
||||
>
|
||||
登录
|
||||
</Button>
|
||||
|
||||
</Form.Item>
|
||||
</Form>
|
||||
</div>
|
||||
)
|
||||
}
|
7
src/pages/PageNotFound.jsx
Normal file
7
src/pages/PageNotFound.jsx
Normal file
@ -0,0 +1,7 @@
|
||||
import React from 'react'
|
||||
|
||||
export default function PageNotFound() {
|
||||
return (
|
||||
<div>404</div>
|
||||
)
|
||||
}
|
10
src/pages/ResumeUpload/StandardResume/index.jsx
Normal file
10
src/pages/ResumeUpload/StandardResume/index.jsx
Normal file
@ -0,0 +1,10 @@
|
||||
import React from 'react'
|
||||
|
||||
export default function StandardResume() {
|
||||
return (
|
||||
<div>
|
||||
StandardResume
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
23
src/pages/ResumeUpload/index.css
Normal file
23
src/pages/ResumeUpload/index.css
Normal file
@ -0,0 +1,23 @@
|
||||
.resume-pop-box {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.resume-img-box {
|
||||
width: 40%;
|
||||
}
|
||||
.resume-content-box {
|
||||
width: 55%;
|
||||
}
|
||||
.resume-energy-box {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
}
|
||||
.ant-tabs {
|
||||
width: 80%;
|
||||
}
|
||||
.resume-right-box {
|
||||
width: 20%;
|
||||
background-color: #eee;
|
||||
margin-top: 46px;
|
||||
}
|
195
src/pages/ResumeUpload/index.jsx
Normal file
195
src/pages/ResumeUpload/index.jsx
Normal file
@ -0,0 +1,195 @@
|
||||
import React from 'react';
|
||||
import { Form, Input, Modal, Radio, Row ,Col, Select, DatePicker, Tabs } from 'antd';
|
||||
import 'moment/locale/zh-cn';
|
||||
import locale from 'antd/es/date-picker/locale/zh_CN';
|
||||
import StandardResume from './StandardResume'
|
||||
import './index.css'
|
||||
const {Option} = Select
|
||||
const { TabPane } = Tabs
|
||||
|
||||
|
||||
export default function ResumeUpload({visible,onCancel,onCreate}) {
|
||||
const [form] = Form.useForm();
|
||||
const onChange = (key) => {
|
||||
console.log(key);
|
||||
};
|
||||
return (
|
||||
<div>
|
||||
<Modal
|
||||
width={'96%'}
|
||||
visible={visible}
|
||||
okText="确定"
|
||||
cancelText="取消"
|
||||
onCancel={onCancel}
|
||||
closable= {false}
|
||||
onOk={() => {
|
||||
form
|
||||
.validateFields()
|
||||
.then((values) => {
|
||||
form.resetFields();
|
||||
onCreate(values);
|
||||
})
|
||||
.catch((info) => {
|
||||
console.log('Validate Failed:', info);
|
||||
});
|
||||
}}
|
||||
>
|
||||
<div className='resume-pop-box'>
|
||||
<div className='resume-img-box'>
|
||||
|
||||
</div>
|
||||
<div className='resume-content-box'>
|
||||
<Form
|
||||
form={form}
|
||||
layout="vertical"
|
||||
name="form_in_modal"
|
||||
initialValues={{
|
||||
modifier: 'public',
|
||||
}}
|
||||
>
|
||||
<Row gutter={24}>
|
||||
|
||||
<Col span={6}>
|
||||
<Form.Item
|
||||
name="title"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: '填写姓名',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Input placeholder='填写姓名'/>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
<Col span={6}>
|
||||
<Form.Item name="position">
|
||||
<Input type="textarea" placeholder='填写岗位'/>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={6}>
|
||||
<Form.Item name="sex">
|
||||
<Select
|
||||
placeholder="选择性别"
|
||||
optionFilterProp="children"
|
||||
>
|
||||
<Option value="1">男</Option>
|
||||
<Option value="2">女</Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
<Col span={6}>
|
||||
<Form.Item name="age">
|
||||
<DatePicker locale={locale} />
|
||||
</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="email"
|
||||
rules={[
|
||||
{
|
||||
type: 'email',
|
||||
message: '邮箱格式错误!',
|
||||
},
|
||||
{
|
||||
required: true,
|
||||
message: '请输入邮箱!',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={4}>
|
||||
<Form.Item name="workingyears">
|
||||
<Select
|
||||
placeholder="选择工作年限"
|
||||
optionFilterProp="children"
|
||||
>
|
||||
<Option value="1">应届生</Option>
|
||||
<Option value="2">1-3年</Option>
|
||||
<Option value="3">3-5年</Option>
|
||||
<Option value="4">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>
|
||||
<Option value="5">博士</Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
<Col span={4}>
|
||||
<Form.Item
|
||||
name="address"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: '填写现住地址',
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Input placeholder='填写现住地址'/>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
</Row>
|
||||
|
||||
</Form>
|
||||
|
||||
<div className='resume-energy-box'>
|
||||
<Tabs defaultActiveKey="2" onChange={onChange}>
|
||||
<TabPane tab="原始简历" key="1">
|
||||
原始简历
|
||||
</TabPane>
|
||||
<TabPane tab="标准简历" key="2">
|
||||
<StandardResume />
|
||||
</TabPane>
|
||||
</Tabs>
|
||||
<div className='resume-right-box'>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</Modal>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
|
54
src/pages/admin/Candidate/index.css
Normal file
54
src/pages/admin/Candidate/index.css
Normal file
@ -0,0 +1,54 @@
|
||||
.Candidate-box {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.Candidate-left-box {
|
||||
width: 250px;
|
||||
height: 100%;
|
||||
}
|
||||
.Candidate-right-box {
|
||||
width: calc(100% - 250px);
|
||||
background-color: #fff;
|
||||
height: 100%;
|
||||
}
|
||||
.Candidate-tabs-box {
|
||||
/* margin: 0 24px; */
|
||||
}
|
||||
.Candidate-tabs-box .ant-tabs {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.Candidate-tabs-box .tabs-box {
|
||||
width: 128px;
|
||||
padding: 20px 56px 18px 25px;
|
||||
color: #575d6a;
|
||||
}
|
||||
.tabs-border {
|
||||
background: url('../../../../public/images/jiantou.png') no-repeat;
|
||||
background-position-x: right;
|
||||
}
|
||||
.border0 { border: 0 !important; }
|
||||
.Candidate-tabs-box .ant-tabs-tab-btn .tabs-box {
|
||||
color: #121316 !important;
|
||||
}
|
||||
.Candidate-tabs-box .ant-tabs-tab + .ant-tabs-tab {
|
||||
margin: 0;
|
||||
}
|
||||
.Candidate-tabs-box .ant-tabs-tab {
|
||||
padding: 0;
|
||||
}
|
||||
.Candidate-tabs-box .ant-tabs-ink-bar {
|
||||
width: 25px !important;
|
||||
margin-left: 25px;
|
||||
}
|
||||
.shadowright{
|
||||
box-shadow: 0 0 10px rgba(000, 000, 000, 0.3);
|
||||
}
|
||||
.Candidate-table-box {
|
||||
margin: 24px;
|
||||
|
||||
}
|
||||
|
||||
|
99
src/pages/admin/Candidate/index.jsx
Normal file
99
src/pages/admin/Candidate/index.jsx
Normal file
@ -0,0 +1,99 @@
|
||||
import React, { Component } from 'react'
|
||||
import { Button, Form, Input, Modal, Radio, Tabs } from 'antd'
|
||||
import './index.css'
|
||||
import CandidateTable from '../../../components/CandidateTable'
|
||||
const { TabPane } = Tabs
|
||||
|
||||
export default class Candidate extends Component {
|
||||
state = {
|
||||
tjnum: 0,
|
||||
csnum: 2,
|
||||
fsnum: 3,
|
||||
msnum: 4,
|
||||
gtnum: 5,
|
||||
drznum: 2,
|
||||
}
|
||||
render() {
|
||||
return (
|
||||
<div className="Candidate-box">
|
||||
<div className="Candidate-left-box"></div>
|
||||
<div className="Candidate-right-box">
|
||||
<div className="Candidate-tabs-box">
|
||||
<Tabs defaultActiveKey="1">
|
||||
<TabPane
|
||||
tab={
|
||||
<div className='tabs-box shadowright'>
|
||||
<div>{this.state.tjnum}</div>
|
||||
<div>人才推荐</div>
|
||||
</div>
|
||||
}
|
||||
key="1"
|
||||
>
|
||||
|
||||
</TabPane>
|
||||
<TabPane
|
||||
tab={
|
||||
<div className='tabs-box tabs-border'>
|
||||
<div>{this.state.csnum}</div>
|
||||
<div>处筛</div>
|
||||
</div>
|
||||
}
|
||||
key="2"
|
||||
>
|
||||
</TabPane>
|
||||
|
||||
<TabPane
|
||||
tab={
|
||||
<div className='tabs-box tabs-border'>
|
||||
<div>{this.state.fsnum}</div>
|
||||
<div>用人部门复筛</div>
|
||||
</div>
|
||||
}
|
||||
key="3"
|
||||
>
|
||||
</TabPane>
|
||||
|
||||
<TabPane
|
||||
tab={
|
||||
<div className='tabs-box tabs-border'>
|
||||
<div>{this.state.msnum}</div>
|
||||
<div>面试</div>
|
||||
</div>
|
||||
}
|
||||
key="4"
|
||||
>
|
||||
</TabPane>
|
||||
<TabPane
|
||||
tab={
|
||||
<div className='tabs-box tabs-border'>
|
||||
<div>{this.state.gtnum}</div>
|
||||
<div>沟通offer</div>
|
||||
</div>
|
||||
}
|
||||
key="5"
|
||||
>
|
||||
</TabPane>
|
||||
<TabPane
|
||||
tab={
|
||||
<div className='tabs-box border0'>
|
||||
<div>{this.state.drznum}</div>
|
||||
<div>待入职</div>
|
||||
</div>
|
||||
}
|
||||
key="6"
|
||||
>
|
||||
</TabPane>
|
||||
</Tabs>
|
||||
</div>
|
||||
|
||||
<div className='Candidate-table-box'>
|
||||
|
||||
<CandidateTable/>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
11
src/pages/admin/Interview/index.css
Normal file
11
src/pages/admin/Interview/index.css
Normal file
@ -0,0 +1,11 @@
|
||||
.Interview-bj { width: 100%; background-color: #fff;}
|
||||
.Interview-box {
|
||||
margin: 0px 180px;
|
||||
padding-top: 45px;
|
||||
}
|
||||
.Interview-top-box { display: flex; justify-content: space-between; align-items: center; }
|
||||
.allposition { background-color: #22b8cf; color: #fff; border-color: #22b8cf; }
|
||||
.ant-radio-button-wrapper-checked {color: #fff !important; background-color: #1890ff !important;}
|
||||
|
||||
.Interview-querycriteria-box { margin-top: 25px; width: 80%; }
|
||||
.Interview-table-title { font-size: 17px; font-weight: bold; color: #575d6a; margin: 20px 0; }
|
424
src/pages/admin/Interview/index.jsx
Normal file
424
src/pages/admin/Interview/index.jsx
Normal file
@ -0,0 +1,424 @@
|
||||
import React, { useState } from 'react'
|
||||
import ExportForm from '../../../components/ExportForm'
|
||||
import InterviewerInfoPop from '../../../components/InterviewerInfoPop'
|
||||
import Editresume from '../../../components/Editresume'
|
||||
import './index.css'
|
||||
import {
|
||||
Button,
|
||||
Radio,
|
||||
Space,
|
||||
Dropdown,
|
||||
Menu,
|
||||
Form,
|
||||
Select,
|
||||
Row,
|
||||
Col,
|
||||
Table,
|
||||
Tag,
|
||||
} from 'antd'
|
||||
import {
|
||||
UnorderedListOutlined,
|
||||
CalendarOutlined,
|
||||
RightOutlined,
|
||||
TeamOutlined,
|
||||
CheckCircleTwoTone,
|
||||
LikeOutlined,
|
||||
WarningOutlined,
|
||||
} from '@ant-design/icons'
|
||||
const { Option } = Select
|
||||
function Interview() {
|
||||
const [tabPosition, setTabPosition] = useState('list')
|
||||
const [visible, setVisible] = useState(false) //导出面试安排弹窗
|
||||
const [interviewerInfo, setInterviewerInfo] = useState(false) //弹出面试人信息弹窗
|
||||
const [editresume, setEditresume] = useState(false) //编辑候选人信息弹窗
|
||||
const [candidateid,setcandidateid] = useState(0)
|
||||
const [form] = Form.useForm()
|
||||
const todaynum = 0
|
||||
const tomorrow = 0
|
||||
const yesterday = 0
|
||||
|
||||
|
||||
const changeTabPosition = (e) => {
|
||||
setTabPosition(e.target.value)
|
||||
}
|
||||
const onMenuClick = (e) => {
|
||||
console.log('click', e)
|
||||
}
|
||||
|
||||
const onExportFormCreate = (values) => {
|
||||
console.log('Received values of form: ', values)
|
||||
setVisible(false)
|
||||
}
|
||||
const handelFeedback = (record,index)=>{
|
||||
console.log("催促反馈")
|
||||
}
|
||||
const handelInterviewerInfo = (record,index)=>{
|
||||
console.log("查看信息")
|
||||
setcandidateid(record.key)
|
||||
setInterviewerInfo(true)
|
||||
}
|
||||
|
||||
const onInterviewerInfo = (values) =>{
|
||||
setInterviewerInfo(false)
|
||||
}
|
||||
|
||||
const onEditresumeCreate = () =>{
|
||||
setEditresume(false)
|
||||
}
|
||||
|
||||
// 查看详情里面编辑按钮
|
||||
const onEditresume = (data)=>{
|
||||
setInterviewerInfo(false)
|
||||
console.log(data);
|
||||
setTimeout(()=>{
|
||||
setEditresume(true)
|
||||
},500)
|
||||
|
||||
}
|
||||
|
||||
const menu = (
|
||||
<Menu
|
||||
onClick={onMenuClick}
|
||||
items={[
|
||||
{
|
||||
key: '1',
|
||||
label: '面试签到二维码',
|
||||
},
|
||||
{
|
||||
key: '2',
|
||||
label: '显示已取消的面试',
|
||||
}
|
||||
]}
|
||||
/>
|
||||
)
|
||||
|
||||
const columns = [
|
||||
{
|
||||
title: '面试信息',
|
||||
dataIndex: 'info',
|
||||
render: (text, record, index) => {
|
||||
return (
|
||||
<div className="basicdata-box">
|
||||
<Tag color="#00d1db">
|
||||
{text.rounds === 0
|
||||
? '初试'
|
||||
: text.rounds === 1
|
||||
? '复试'
|
||||
: '终试'}
|
||||
</Tag>
|
||||
<Tag color={text.type === 0 ? 'gold' : 'purple'}>
|
||||
{text.type === 0 ? '视频' : '现场'}
|
||||
</Tag>
|
||||
<span>{text.time}</span>
|
||||
</div>
|
||||
)
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '候选人',
|
||||
dataIndex: 'candidate',
|
||||
render: (text, record, index) => (
|
||||
<div className="font-size14 color0">
|
||||
{text.type ? (
|
||||
<CheckCircleTwoTone twoToneColor="#51cf66" />
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
<span style={{ marginLeft: 2 }}>{text.name}</span>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '联系方式',
|
||||
dataIndex: 'tel',
|
||||
render: (text, record, index) => (
|
||||
<div className="font-size14 color0">
|
||||
<span>{text}</span>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '应聘职位',
|
||||
dataIndex: 'position',
|
||||
render: (text, record, index) => (
|
||||
<div className="font-size14 color1">{text}</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '面试地点',
|
||||
dataIndex: 'address',
|
||||
render: (text, record, index) => (
|
||||
<div className="font-size14 color1">{text}</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '面试负责人',
|
||||
dataIndex: 'principal',
|
||||
render: (text, record, index) => (
|
||||
<div className="font-size14 color1">{text}</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '状态',
|
||||
dataIndex: 'type',
|
||||
render: (text, record, index) => (
|
||||
<div className="font-size14 color1">
|
||||
{text.type === 0 ? (
|
||||
<LikeOutlined style={{ color: '#51cf66' }} />
|
||||
) : (
|
||||
<WarningOutlined style={{ color: '#f59f00' }} />
|
||||
)}
|
||||
{text.name}
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '',
|
||||
dataIndex: 'setup',
|
||||
render: (text, record, index) => (
|
||||
<div className="font-size14 color4 ">
|
||||
<span className='cursor' style={{'margin':'0px 5px'}} onClick={()=>handelInterviewerInfo(record,index)}>查看详情</span>
|
||||
<span className='cursor' style={{'margin':'0px 5px'}} onClick={()=>handelFeedback(record,index)}>{text.type === 0 ? '催促反馈' : ''}</span>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
]
|
||||
|
||||
const data = [
|
||||
{
|
||||
key: 0,
|
||||
info: {
|
||||
rounds: 0,
|
||||
type: 0,
|
||||
time: '5云17日 09:30 - 10:00',
|
||||
},
|
||||
candidate: {
|
||||
type: true,
|
||||
name: '张三',
|
||||
},
|
||||
tel: 18563265489,
|
||||
position: '前端工程师',
|
||||
address: '武汉 创意天地',
|
||||
principal: '李四',
|
||||
type: {
|
||||
type: 0,
|
||||
name: '王五',
|
||||
},
|
||||
setup: {
|
||||
type: 0,
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 1,
|
||||
info: {
|
||||
rounds: 1,
|
||||
type: 1,
|
||||
time: '5云17日 09:30 - 10:00',
|
||||
},
|
||||
candidate: {
|
||||
type: false,
|
||||
name: '张三',
|
||||
},
|
||||
tel: 18563265489,
|
||||
position: '前端工程师',
|
||||
address: '武汉 创意天地',
|
||||
principal: '李四',
|
||||
type: {
|
||||
type: 1,
|
||||
name: '王五',
|
||||
},
|
||||
setup: {
|
||||
type: 1,
|
||||
},
|
||||
},
|
||||
]
|
||||
const [hasData, setHasData] = useState(true)
|
||||
const tableColumns = columns.map((item) => ({ ...item }))
|
||||
return (
|
||||
<div className="Interview-bj">
|
||||
<div className="Interview-box">
|
||||
<div className="Interview-top-box">
|
||||
<div>
|
||||
<Space size={10}>
|
||||
<Radio.Group
|
||||
value={tabPosition}
|
||||
onChange={changeTabPosition}
|
||||
>
|
||||
<Radio.Button value="list" size="large">
|
||||
<UnorderedListOutlined />
|
||||
</Radio.Button>
|
||||
<Radio.Button value="bottom" size="large">
|
||||
<CalendarOutlined />
|
||||
</Radio.Button>
|
||||
</Radio.Group>
|
||||
|
||||
<Button className="allposition">
|
||||
<TeamOutlined /> 全部职位
|
||||
<RightOutlined />
|
||||
</Button>
|
||||
</Space>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<Dropdown.Button
|
||||
overlay={menu}
|
||||
onClick={() => {
|
||||
setVisible(true)
|
||||
}}
|
||||
>
|
||||
导出面试安排
|
||||
</Dropdown.Button>
|
||||
<ExportForm
|
||||
visible={visible}
|
||||
onCreate={onExportFormCreate}
|
||||
onCancel={() => {
|
||||
setVisible(false)
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="Interview-querycriteria-box">
|
||||
<Form form={form} layout="vertical">
|
||||
<Row gutter={12}>
|
||||
<Col span={4}>
|
||||
<Form.Item label="职位">
|
||||
<Select defaultValue="0">
|
||||
<Option value="0">全部职位</Option>
|
||||
<Option value="1">职位一</Option>
|
||||
<Option value="2">职位二</Option>
|
||||
<Option value="3">职位三</Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={4}>
|
||||
<Form.Item label="面试负责人">
|
||||
<Select defaultValue="0">
|
||||
<Option value="0">全部职位</Option>
|
||||
<Option value="1">职位一</Option>
|
||||
<Option value="2">职位二</Option>
|
||||
<Option value="3">职位三</Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={4}>
|
||||
<Form.Item label="面试官">
|
||||
<Select defaultValue="0">
|
||||
<Option value="0">全部职位</Option>
|
||||
<Option value="1">职位一</Option>
|
||||
<Option value="2">职位二</Option>
|
||||
<Option value="3">职位三</Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={4}>
|
||||
<Form.Item label="面试类型">
|
||||
<Select defaultValue="0">
|
||||
<Option value="0">全部职位</Option>
|
||||
<Option value="1">职位一</Option>
|
||||
<Option value="2">职位二</Option>
|
||||
<Option value="3">职位三</Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={4}>
|
||||
<Form.Item label="面试地点">
|
||||
<Select defaultValue="0">
|
||||
<Option value="0">全部职位</Option>
|
||||
<Option value="1">职位一</Option>
|
||||
<Option value="2">职位二</Option>
|
||||
<Option value="3">职位三</Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={4}>
|
||||
<Form.Item label="面试签到">
|
||||
<Select defaultValue="0">
|
||||
<Option value="0">全部职位</Option>
|
||||
<Option value="1">职位一</Option>
|
||||
<Option value="2">职位二</Option>
|
||||
<Option value="3">职位三</Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
<Col span={4}>
|
||||
<Form.Item label="面反馈">
|
||||
<Select defaultValue="0">
|
||||
<Option value="0">全部职位</Option>
|
||||
<Option value="1">职位一</Option>
|
||||
<Option value="2">职位二</Option>
|
||||
<Option value="3">职位三</Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
<Col span={4}>
|
||||
<Form.Item label="面试轮次">
|
||||
<Select defaultValue="0">
|
||||
<Option value="0">全部轮次</Option>
|
||||
<Option value="1">初试</Option>
|
||||
<Option value="2">复试</Option>
|
||||
<Option value="3">终试</Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
</Form>
|
||||
</div>
|
||||
|
||||
{/* 今天面试 */}
|
||||
<div className="Interview-table-title">
|
||||
今天的面试({todaynum})
|
||||
</div>
|
||||
<Table
|
||||
bordered
|
||||
columns={tableColumns}
|
||||
dataSource={hasData ? data : []}
|
||||
/>
|
||||
|
||||
{/* 明天及之后的面试 */}
|
||||
<div className="Interview-table-title">
|
||||
明天及之后的面试({tomorrow})
|
||||
</div>
|
||||
<Table
|
||||
bordered
|
||||
columns={tableColumns}
|
||||
dataSource={hasData ? data : []}
|
||||
/>
|
||||
|
||||
{/* 昨天及之前的面试 */}
|
||||
<div className="Interview-table-title">
|
||||
昨天及之前的面试({yesterday})
|
||||
</div>
|
||||
<Table
|
||||
bordered
|
||||
columns={tableColumns}
|
||||
dataSource={hasData ? data : []}
|
||||
/>
|
||||
|
||||
{/* 查看面试人信息弹窗 */}
|
||||
<InterviewerInfoPop
|
||||
visible={interviewerInfo}
|
||||
onCreate={onInterviewerInfo}
|
||||
data={candidateid}
|
||||
onCancel={() => {
|
||||
setInterviewerInfo(false);
|
||||
}}
|
||||
onEditresume={onEditresume}
|
||||
/>
|
||||
|
||||
{/* 编辑候选人信息弹窗 */}
|
||||
<Editresume
|
||||
visible={editresume}
|
||||
onCreate={onEditresumeCreate}
|
||||
onCancel={()=>{
|
||||
setEditresume(false)
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default Interview
|
9
src/pages/admin/Overview/index.jsx
Normal file
9
src/pages/admin/Overview/index.jsx
Normal file
@ -0,0 +1,9 @@
|
||||
import React from 'react'
|
||||
|
||||
function Overview() {
|
||||
return (
|
||||
<div>总览</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default Overview
|
3
src/pages/admin/Position/Endrecruitment/index.css
Normal file
3
src/pages/admin/Position/Endrecruitment/index.css
Normal file
@ -0,0 +1,3 @@
|
||||
.Endrecruitment {
|
||||
margin: 16px;
|
||||
}
|
123
src/pages/admin/Position/Endrecruitment/index.jsx
Normal file
123
src/pages/admin/Position/Endrecruitment/index.jsx
Normal file
@ -0,0 +1,123 @@
|
||||
import React, { useState } from 'react'
|
||||
import { Table, } from 'antd'
|
||||
import './index.css'
|
||||
const columns = [
|
||||
{
|
||||
title: '基本资料',
|
||||
dataIndex: 'basicdata',
|
||||
render: (text, record, index) => (
|
||||
<div className='basicdata-box'>
|
||||
<p className='basicdata-post'>
|
||||
{text.post}
|
||||
<span>({text.id})</span>
|
||||
</p>
|
||||
<p className='basicdata-des'> {text.des} </p>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '招聘负责人',
|
||||
dataIndex: 'principal',
|
||||
render: (text, record, index) => (
|
||||
<p className='font-size12 color1'>{text}</p>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '招聘渠道',
|
||||
dataIndex: 'channel',
|
||||
render: (text, record, index) => (
|
||||
// console.log(text)
|
||||
text.map((item,key)=>{
|
||||
return <span key={key} className='font-size12 color1 '>{item}</span>
|
||||
})
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '职位来源',
|
||||
dataIndex: 'source',
|
||||
render: (text, record, index) => (
|
||||
<p className='font-size12 color1'>{text}</p>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '候选人总数',
|
||||
dataIndex: 'candidatenum',
|
||||
render: (text, record, index) => (
|
||||
<p className='font-size12 color1'>{text}</p>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '入职人数',
|
||||
dataIndex: 'inductionnum',
|
||||
render: (text, record, index) => (
|
||||
<p className='font-size12 color1'>{text}</p>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '招聘人数',
|
||||
dataIndex: 'recruitingnumbers',
|
||||
render: (text, record, index) => (
|
||||
<p className='font-size12 color1'>{text}</p>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '候选人满意度',
|
||||
dataIndex: 'satisfaction',
|
||||
render: (text, record, index) => (
|
||||
<div className='satisfaction-box'>
|
||||
<p className='font-size12 color1'> <span className='font-size14 color3'>{text.satisfaction}</span>/5</p>
|
||||
<p className='font-size12 color2'>{text.des}条评价</p>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
]
|
||||
const data = []
|
||||
|
||||
for (let i = 1; i <= 3; i++) {
|
||||
data.push({
|
||||
key: i,
|
||||
basicdata: {
|
||||
post: '高级游戏测试工程师',
|
||||
id: 'MJ0000005',
|
||||
des: '海外其他·技术部',
|
||||
},
|
||||
principal: '张三',
|
||||
channel: ['BOSS'],
|
||||
source: '手动添加',
|
||||
candidatenum: '13',
|
||||
inductionnum: '0',
|
||||
recruitingnumbers: '3',
|
||||
satisfaction: { satisfaction: 0, des: 0 },
|
||||
})
|
||||
}
|
||||
|
||||
const Endrecruitment = () => {
|
||||
const [hasData, setHasData] = useState(true)
|
||||
|
||||
const tableColumns = columns.map((item) => ({ ...item }))
|
||||
|
||||
const tableProps = {
|
||||
showHeader: true,
|
||||
rowSelection: true,
|
||||
Size: 'Small',
|
||||
}
|
||||
|
||||
const handleClickRows = (index)=>{
|
||||
console.log(index);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='Endrecruitment'>
|
||||
<Table
|
||||
{...tableProps}
|
||||
columns={tableColumns}
|
||||
dataSource={hasData ? data : []}
|
||||
onRow={(record,index)=>{return {
|
||||
onClick:event=>{handleClickRows(index)}
|
||||
}}}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default Endrecruitment
|
22
src/pages/admin/Position/Inrecruitment/index.css
Normal file
22
src/pages/admin/Position/Inrecruitment/index.css
Normal file
@ -0,0 +1,22 @@
|
||||
.Inrecruitment {
|
||||
margin: 16px;
|
||||
}
|
||||
.basicdata-box .basicdata-post {
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
color: #292b28;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.basicdata-box .basicdata-post span{
|
||||
font-size: 12px;
|
||||
font-weight: bolder;
|
||||
color: #75777d;
|
||||
}
|
||||
.basicdata-des {
|
||||
font-size: 12px;
|
||||
color: #736f6a;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.satisfaction-box p {
|
||||
margin-bottom: 0;
|
||||
}
|
115
src/pages/admin/Position/Inrecruitment/index.jsx
Normal file
115
src/pages/admin/Position/Inrecruitment/index.jsx
Normal file
@ -0,0 +1,115 @@
|
||||
import React, { useState } from 'react'
|
||||
import { Table, } from 'antd'
|
||||
import './index.css'
|
||||
const columns = [
|
||||
{
|
||||
title: '基本资料',
|
||||
dataIndex: 'basicdata',
|
||||
render: (text, record, index) => (
|
||||
<div className='basicdata-box'>
|
||||
<p className='basicdata-post'>
|
||||
{text.post}
|
||||
<span>({text.id})</span>
|
||||
</p>
|
||||
<p className='basicdata-des'> {text.des} </p>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '招聘负责人',
|
||||
dataIndex: 'principal',
|
||||
render: (text, record, index) => (
|
||||
<p className='font-size12 color1'>{text}</p>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '招聘渠道',
|
||||
dataIndex: 'channel',
|
||||
render: (text, record, index) => (
|
||||
// console.log(text)
|
||||
text.map((item,key)=>{
|
||||
return <span key={key} className='font-size12 color1 '>{item}</span>
|
||||
})
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '职位来源',
|
||||
dataIndex: 'source',
|
||||
render: (text, record, index) => (
|
||||
<p className='font-size12 color1'>{text}</p>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '候选人总数',
|
||||
dataIndex: 'candidatenum',
|
||||
render: (text, record, index) => (
|
||||
<p className='font-size12 color1'>{text}</p>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '入职人数',
|
||||
dataIndex: 'inductionnum',
|
||||
render: (text, record, index) => (
|
||||
<p className='font-size12 color1'>{text}</p>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '招聘人数',
|
||||
dataIndex: 'recruitingnumbers',
|
||||
render: (text, record, index) => (
|
||||
<p className='font-size12 color1'>{text}</p>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '候选人满意度',
|
||||
dataIndex: 'satisfaction',
|
||||
render: (text, record, index) => (
|
||||
<div className='satisfaction-box'>
|
||||
<p className='font-size12 color1'> <span className='font-size14 color3'>{text.satisfaction}</span>/5</p>
|
||||
<p className='font-size12 color2'>{text.des}条评价</p>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
]
|
||||
const data = []
|
||||
|
||||
for (let i = 1; i <= 3; i++) {
|
||||
data.push({
|
||||
key: i,
|
||||
basicdata: {
|
||||
post: '高级游戏测试工程师',
|
||||
id: 'MJ0000005',
|
||||
des: '海外其他·技术部',
|
||||
},
|
||||
principal: '张三',
|
||||
channel: ['BOSS'],
|
||||
source: '手动添加',
|
||||
candidatenum: '13',
|
||||
inductionnum: '0',
|
||||
recruitingnumbers: '3',
|
||||
satisfaction: { satisfaction: 0, des: 0 },
|
||||
})
|
||||
}
|
||||
|
||||
const Inrecruitment = () => {
|
||||
const [hasData, setHasData] = useState(true)
|
||||
|
||||
const tableColumns = columns.map((item) => ({ ...item }))
|
||||
console.log(tableColumns)
|
||||
const tableProps = {
|
||||
showHeader: true,
|
||||
rowSelection: true,
|
||||
Size: 'Small',
|
||||
}
|
||||
return (
|
||||
<div className='Inrecruitment'>
|
||||
<Table
|
||||
{...tableProps}
|
||||
columns={tableColumns}
|
||||
dataSource={hasData ? data : []}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default Inrecruitment
|
63
src/pages/admin/Position/index.css
Normal file
63
src/pages/admin/Position/index.css
Normal file
@ -0,0 +1,63 @@
|
||||
.Position-box {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
height: 100%;
|
||||
}
|
||||
.Position-left-box {
|
||||
width: 250px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.Position-right-box {
|
||||
width: calc(100% - 250px);
|
||||
background-color: #fff;
|
||||
height: 100%;
|
||||
}
|
||||
.Position-menu-box {
|
||||
margin: 16px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.Position-menu-box div {
|
||||
width: 100px;
|
||||
height: 60px;
|
||||
background-color: #fff;
|
||||
color: #928f92;
|
||||
border-radius: 4px;
|
||||
text-align: center;
|
||||
padding: 0 15px;
|
||||
border-bottom: 3px solid #e0e0e0;
|
||||
cursor: pointer;
|
||||
}
|
||||
.Position-left-box div p {
|
||||
font-size: 20px;
|
||||
margin-bottom: 0;
|
||||
text-align: left;
|
||||
}
|
||||
.Position-menu-box div a {
|
||||
color: #928f92;
|
||||
font-size: 13px;
|
||||
}
|
||||
.Position-menu-box .on-menu-box{
|
||||
color: #001529;
|
||||
border-bottom: 3px solid #1a5e92;
|
||||
}
|
||||
.Position-left-box .on-menu-box p{
|
||||
color: #001529;
|
||||
}
|
||||
.Position-menu-box .on-menu-box a {
|
||||
color: #001529;
|
||||
}
|
||||
.Position-left-box .screen-form-box {
|
||||
margin: 16px;
|
||||
}
|
||||
.Position-left-box .screen-form-box .title {
|
||||
font-size: 12px;
|
||||
margin: .5rem 0 .2rem 0;
|
||||
}
|
||||
.screen-form-box h4 {
|
||||
font-weight: bold;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.screen-form-box .setfilteritem { margin-top: 1.5rem; }
|
||||
|
130
src/pages/admin/Position/index.jsx
Normal file
130
src/pages/admin/Position/index.jsx
Normal file
@ -0,0 +1,130 @@
|
||||
import React, { useState, useEffect } from 'react'
|
||||
import { Outlet, useNavigate, useLocation } from 'react-router-dom'
|
||||
import { Input, Space, Select, Button } from 'antd'
|
||||
import './index.css'
|
||||
const { Search } = Input
|
||||
const { Option } = Select
|
||||
|
||||
export default function Position() {
|
||||
const [onmenu, setonmenu] = useState(true)
|
||||
|
||||
const navigate = useNavigate()
|
||||
const location = useLocation()
|
||||
const handelSwitchNav = (e, path) => {
|
||||
navigate(path)
|
||||
setonmenu((onmenu) => !onmenu)
|
||||
}
|
||||
|
||||
const onSearch = (value) => {
|
||||
console.log(value)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
|
||||
if (location.pathname.indexOf('Endrecruitment') >= 0) {
|
||||
setonmenu((onmenu) => false)
|
||||
} else {
|
||||
setonmenu((onmenu) => true)
|
||||
}
|
||||
}, [location.pathname])
|
||||
return (
|
||||
<div className="Position-box">
|
||||
<div className="Position-left-box">
|
||||
<div className="Position-menu-box">
|
||||
<div
|
||||
className={onmenu ? 'on-menu-box' : ''}
|
||||
onClick={(e) => handelSwitchNav(e, '/admin/position')}
|
||||
>
|
||||
{/* <Link to="/admin/position"> */}
|
||||
<p>1</p>
|
||||
<span>招聘中职位</span>
|
||||
{/* </Link> */}
|
||||
</div>
|
||||
<div
|
||||
className={onmenu ? '' : 'on-menu-box'}
|
||||
onClick={(e) =>
|
||||
handelSwitchNav(e, '/admin/position/Endrecruitment')
|
||||
}
|
||||
>
|
||||
{/* <Link to="/admin/position/Endrecruitment"> */}
|
||||
<p>2</p>
|
||||
<span>已关闭职位</span>
|
||||
{/* </Link> */}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="screen-form-box">
|
||||
<h4>职位信息</h4>
|
||||
<p className="title">职位名称筛选</p>
|
||||
<Space direction="vertical">
|
||||
<Search
|
||||
placeholder="根据职位名称或职位编码搜索"
|
||||
onSearch={onSearch}
|
||||
style={{
|
||||
width: 219,
|
||||
}}
|
||||
/>
|
||||
</Space>
|
||||
<p className="title">职位部门筛选</p>
|
||||
<Select
|
||||
style={{ width: 219 }}
|
||||
showSearch
|
||||
defaultValue="all"
|
||||
optionFilterProp="children"
|
||||
filterOption={(input, option) =>
|
||||
option.children
|
||||
.toLowerCase()
|
||||
.includes(input.toLowerCase())
|
||||
}
|
||||
>
|
||||
<Option value="all">全部负责人</Option>
|
||||
<Option value="jack">Jack</Option>
|
||||
<Option value="lucy">Lucy</Option>
|
||||
<Option value="tom">Tom</Option>
|
||||
</Select>
|
||||
<p className="title">渠道筛选</p>
|
||||
<Select
|
||||
style={{ width: 219 }}
|
||||
showSearch
|
||||
defaultValue="all"
|
||||
optionFilterProp="children"
|
||||
filterOption={(input, option) =>
|
||||
option.children
|
||||
.toLowerCase()
|
||||
.includes(input.toLowerCase())
|
||||
}
|
||||
>
|
||||
<Option value="all">全部负责人</Option>
|
||||
<Option value="jack">Jack</Option>
|
||||
<Option value="lucy">Lucy</Option>
|
||||
<Option value="tom">Tom</Option>
|
||||
</Select>
|
||||
<p className="title">负责人筛选</p>
|
||||
<Select
|
||||
style={{ width: 219 }}
|
||||
showSearch
|
||||
defaultValue="all"
|
||||
optionFilterProp="children"
|
||||
filterOption={(input, option) =>
|
||||
option.children
|
||||
.toLowerCase()
|
||||
.includes(input.toLowerCase())
|
||||
}
|
||||
>
|
||||
<Option value="all">全部负责人</Option>
|
||||
<Option value="jack">Jack</Option>
|
||||
<Option value="lucy">Lucy</Option>
|
||||
<Option value="tom">Tom</Option>
|
||||
</Select>
|
||||
|
||||
<Button className='setfilteritem' block>设置筛选项</Button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="Position-right-box">
|
||||
<Outlet />
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
9
src/pages/admin/Report_forms/index.jsx
Normal file
9
src/pages/admin/Report_forms/index.jsx
Normal file
@ -0,0 +1,9 @@
|
||||
import React from 'react'
|
||||
|
||||
function Report_forms() {
|
||||
return (
|
||||
<div>报表中心</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default Report_forms
|
9
src/pages/admin/Set_up/index.jsx
Normal file
9
src/pages/admin/Set_up/index.jsx
Normal file
@ -0,0 +1,9 @@
|
||||
import React from 'react'
|
||||
|
||||
function Set_up() {
|
||||
return (
|
||||
<div>设置</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default Set_up
|
9
src/pages/admin/Talent_pool/index.jsx
Normal file
9
src/pages/admin/Talent_pool/index.jsx
Normal file
@ -0,0 +1,9 @@
|
||||
import React from 'react'
|
||||
|
||||
function Talent_pool() {
|
||||
return (
|
||||
<div>人才库</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default Talent_pool
|
14
src/pages/login.css
Normal file
14
src/pages/login.css
Normal file
@ -0,0 +1,14 @@
|
||||
.components-form-demo-normal-login { width: 300px; height: 222px; position: fixed; top: 0; bottom: 0; left: 0; right: 0; margin: auto; }
|
||||
|
||||
.components-form-demo-normal-login .login-form {
|
||||
max-width: 300px;
|
||||
}
|
||||
.components-form-demo-normal-login .login-form-forgot {
|
||||
float: right;
|
||||
}
|
||||
.components-form-demo-normal-login .ant-col-rtl .login-form-forgot {
|
||||
float: left;
|
||||
}
|
||||
.components-form-demo-normal-login .login-form-button {
|
||||
width: 100%;
|
||||
}
|
8
src/routes/AuthComponent.jsx
Normal file
8
src/routes/AuthComponent.jsx
Normal file
@ -0,0 +1,8 @@
|
||||
// 实现路由拦截,看有没有token,有token正常访问,没有进入登录页面
|
||||
import React from 'react'
|
||||
import Redirect from './Redirect'
|
||||
|
||||
export default function AuthComponent({children }) {
|
||||
const islogin = localStorage.getItem("token");
|
||||
return islogin ? children : <Redirect to="/login" />
|
||||
}
|
42
src/routes/GlobalRouter.jsx
Normal file
42
src/routes/GlobalRouter.jsx
Normal file
@ -0,0 +1,42 @@
|
||||
import React from 'react'
|
||||
import {useRoutes, Navigate} from 'react-router-dom'
|
||||
import AppLayOut from '../AppLayOut'
|
||||
import AuthComponent from './AuthComponent'
|
||||
import Login from '../pages/Login'
|
||||
import Candidate from '../pages/admin/Candidate'
|
||||
import Interview from '../pages/admin/Interview'
|
||||
import Overview from '../pages/admin/Overview'
|
||||
import Position from '../pages/admin/Position'
|
||||
import ReportForms from '../pages/admin/Report_forms'
|
||||
import SetUp from '../pages/admin/Set_up'
|
||||
import TalentPool from '../pages/admin/Talent_pool'
|
||||
import Endrecruitment from '../pages/admin/Position/Endrecruitment'
|
||||
import Inrecruitment from '../pages/admin/Position/Inrecruitment'
|
||||
|
||||
// import PageNotFound from '../pages/PageNotFound'
|
||||
|
||||
|
||||
function GlobalRouter() {
|
||||
|
||||
return useRoutes([
|
||||
{
|
||||
path: '/',
|
||||
element: <AuthComponent> <AppLayOut /> </AuthComponent> ,
|
||||
children: [
|
||||
{ path: '/', element: <Overview /> },
|
||||
{ path: '/admin/candidate',element: <Candidate />,},
|
||||
{ path: '/admin/interview', element: <Interview /> },
|
||||
{ path: '/admin/position', element: <Position />, children:[
|
||||
{ index:true, element: <Inrecruitment /> },
|
||||
{ path: '/admin/position/Endrecruitment', element: <Endrecruitment /> }
|
||||
]},
|
||||
{ path: '/admin/reportforms', element: <ReportForms /> },
|
||||
{ path: '/admin/setup', element: <SetUp /> },
|
||||
{ path: '/admin/talentPool', element: <TalentPool /> },
|
||||
],
|
||||
},
|
||||
{ path: '/login', element: <Login /> },
|
||||
])
|
||||
}
|
||||
|
||||
export default GlobalRouter
|
12
src/routes/Redirect.jsx
Normal file
12
src/routes/Redirect.jsx
Normal file
@ -0,0 +1,12 @@
|
||||
import {useEffect} from "react";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
|
||||
function Redirect({to}){
|
||||
const navigate = useNavigate();
|
||||
useEffect(()=>{
|
||||
navigate(to,{replace: true})
|
||||
})
|
||||
return null;
|
||||
}
|
||||
|
||||
export default Redirect
|
691
yarn.lock
691
yarn.lock
@ -10,6 +10,40 @@
|
||||
"@jridgewell/gen-mapping" "^0.1.0"
|
||||
"@jridgewell/trace-mapping" "^0.3.9"
|
||||
|
||||
"@ant-design/colors@^6.0.0":
|
||||
version "6.0.0"
|
||||
resolved "https://registry.npmmirror.com/@ant-design/colors/-/colors-6.0.0.tgz#9b9366257cffcc47db42b9d0203bb592c13c0298"
|
||||
integrity sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==
|
||||
dependencies:
|
||||
"@ctrl/tinycolor" "^3.4.0"
|
||||
|
||||
"@ant-design/icons-svg@^4.2.1":
|
||||
version "4.2.1"
|
||||
resolved "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz#8630da8eb4471a4aabdaed7d1ff6a97dcb2cf05a"
|
||||
integrity sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==
|
||||
|
||||
"@ant-design/icons@^4.7.0":
|
||||
version "4.7.0"
|
||||
resolved "https://registry.npmmirror.com/@ant-design/icons/-/icons-4.7.0.tgz#8c3cbe0a556ba92af5dc7d1e70c0b25b5179af0f"
|
||||
integrity sha512-aoB4Z7JA431rt6d4u+8xcNPPCrdufSRMUOpxa1ab6mz1JCQZOEVolj2WVs/tDFmN62zzK30mNelEsprLYsSF3g==
|
||||
dependencies:
|
||||
"@ant-design/colors" "^6.0.0"
|
||||
"@ant-design/icons-svg" "^4.2.1"
|
||||
"@babel/runtime" "^7.11.2"
|
||||
classnames "^2.2.6"
|
||||
rc-util "^5.9.4"
|
||||
|
||||
"@ant-design/react-slick@~0.28.1":
|
||||
version "0.28.4"
|
||||
resolved "https://registry.npmmirror.com/@ant-design/react-slick/-/react-slick-0.28.4.tgz#8b296b87ad7c7ae877f2a527b81b7eebd9dd29a9"
|
||||
integrity sha512-j9eAHTn7GxbXUFNknJoHS2ceAsqrQi2j8XykjZE1IXCD8kJF+t28EvhBLniDpbOsBk/3kjalnhriTfZcjBHNqg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.4"
|
||||
classnames "^2.2.5"
|
||||
json2mq "^0.2.0"
|
||||
lodash "^4.17.21"
|
||||
resize-observer-polyfill "^1.5.0"
|
||||
|
||||
"@apideck/better-ajv-errors@^0.3.1":
|
||||
version "0.3.4"
|
||||
resolved "https://registry.yarnpkg.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.4.tgz#f89924dd4efd04a51835db7eb549a7177e0ca727"
|
||||
@ -164,7 +198,7 @@
|
||||
dependencies:
|
||||
"@babel/types" "^7.17.0"
|
||||
|
||||
"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7":
|
||||
"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7":
|
||||
version "7.16.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437"
|
||||
integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==
|
||||
@ -1026,7 +1060,7 @@
|
||||
core-js-pure "^3.20.2"
|
||||
regenerator-runtime "^0.13.4"
|
||||
|
||||
"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
|
||||
"@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
|
||||
version "7.18.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4"
|
||||
integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==
|
||||
@ -1161,6 +1195,11 @@
|
||||
resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-1.0.0.tgz#91c560df2ed8d9700e4c7ed4ac21a3a322c9d975"
|
||||
integrity sha512-RkYG5KiGNX0fJ5YoI0f4Wfq2Yo74D25Hru4fxTOioYdQvHBxcrrtTTyT5Ozzh2ejcNrhFy7IEts2WyEY7yi5yw==
|
||||
|
||||
"@ctrl/tinycolor@^3.4.0":
|
||||
version "3.4.1"
|
||||
resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz#75b4c27948c81e88ccd3a8902047bcd797f38d32"
|
||||
integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==
|
||||
|
||||
"@eslint/eslintrc@^1.3.0":
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f"
|
||||
@ -2422,6 +2461,56 @@ ansi-styles@^5.0.0:
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
|
||||
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
|
||||
|
||||
antd@^4.20.7:
|
||||
version "4.20.7"
|
||||
resolved "https://registry.npmmirror.com/antd/-/antd-4.20.7.tgz#7f4e2f5f3620044323355386091967045cfe2c24"
|
||||
integrity sha512-X2lP1AiN9K9se9ZuQvgpeku7Z1G7KqKTuJVt0lpwWzei4aRReG+hJWMSOAsy0HonRWI2nDc9XMIK+o/kul8EXQ==
|
||||
dependencies:
|
||||
"@ant-design/colors" "^6.0.0"
|
||||
"@ant-design/icons" "^4.7.0"
|
||||
"@ant-design/react-slick" "~0.28.1"
|
||||
"@babel/runtime" "^7.12.5"
|
||||
"@ctrl/tinycolor" "^3.4.0"
|
||||
classnames "^2.2.6"
|
||||
copy-to-clipboard "^3.2.0"
|
||||
lodash "^4.17.21"
|
||||
memoize-one "^6.0.0"
|
||||
moment "^2.29.2"
|
||||
rc-cascader "~3.5.0"
|
||||
rc-checkbox "~2.3.0"
|
||||
rc-collapse "~3.1.0"
|
||||
rc-dialog "~8.8.1"
|
||||
rc-drawer "~4.4.2"
|
||||
rc-dropdown "~3.5.0"
|
||||
rc-field-form "~1.26.1"
|
||||
rc-image "~5.6.0"
|
||||
rc-input "~0.0.1-alpha.5"
|
||||
rc-input-number "~7.3.0"
|
||||
rc-mentions "~1.7.0"
|
||||
rc-menu "~9.5.5"
|
||||
rc-motion "^2.5.1"
|
||||
rc-notification "~4.6.0"
|
||||
rc-pagination "~3.1.9"
|
||||
rc-picker "~2.6.4"
|
||||
rc-progress "~3.2.1"
|
||||
rc-rate "~2.9.0"
|
||||
rc-resize-observer "^1.2.0"
|
||||
rc-segmented "~2.1.0 "
|
||||
rc-select "~14.1.1"
|
||||
rc-slider "~10.0.0"
|
||||
rc-steps "~4.1.0"
|
||||
rc-switch "~3.2.0"
|
||||
rc-table "~7.24.0"
|
||||
rc-tabs "~11.13.0"
|
||||
rc-textarea "~0.3.0"
|
||||
rc-tooltip "~5.1.1"
|
||||
rc-tree "~5.5.0"
|
||||
rc-tree-select "~5.3.0"
|
||||
rc-trigger "^5.2.10"
|
||||
rc-upload "~4.3.0"
|
||||
rc-util "^5.20.0"
|
||||
scroll-into-view-if-needed "^2.2.25"
|
||||
|
||||
anymatch@^3.0.3, anymatch@~3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
|
||||
@ -2481,6 +2570,11 @@ array-includes@^3.1.4, array-includes@^3.1.5:
|
||||
get-intrinsic "^1.1.1"
|
||||
is-string "^1.0.7"
|
||||
|
||||
array-tree-filter@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190"
|
||||
integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==
|
||||
|
||||
array-union@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
|
||||
@ -2527,6 +2621,11 @@ ast-types-flow@^0.0.7:
|
||||
resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
|
||||
integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==
|
||||
|
||||
async-validator@^4.1.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.1.1.tgz#3cd1437faa2de64743f7d56649dd904c946a18fe"
|
||||
integrity sha512-p4DO/JXwjs8klJyJL8Q2oM4ks5fUTze/h5k10oPPKMiLe1fj3G1QMzPHNmN1Py4ycOk7WlO2DcGXv1qiESJCZA==
|
||||
|
||||
async@^3.2.3:
|
||||
version "3.2.3"
|
||||
resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9"
|
||||
@ -2600,6 +2699,13 @@ babel-plugin-dynamic-import-node@^2.3.3:
|
||||
dependencies:
|
||||
object.assign "^4.1.0"
|
||||
|
||||
babel-plugin-import@^1.13.5:
|
||||
version "1.13.5"
|
||||
resolved "https://registry.npmmirror.com/babel-plugin-import/-/babel-plugin-import-1.13.5.tgz#42eed1c5afd9a35ee1b1f8fe922b07c44077d753"
|
||||
integrity sha512-IkqnoV+ov1hdJVofly9pXRJmeDm9EtROfrc5i6eII0Hix2xMs5FEm8FG3ExMvazbnZBbgHIt6qdO8And6lCloQ==
|
||||
dependencies:
|
||||
"@babel/helper-module-imports" "^7.0.0"
|
||||
|
||||
babel-plugin-istanbul@^6.1.1:
|
||||
version "6.1.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73"
|
||||
@ -2976,6 +3082,11 @@ cjs-module-lexer@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40"
|
||||
integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==
|
||||
|
||||
classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.npmmirror.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e"
|
||||
integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==
|
||||
|
||||
clean-css@^5.2.2:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.0.tgz#ad3d8238d5f3549e83d5f87205189494bc7cbb59"
|
||||
@ -3102,6 +3213,11 @@ compression@^1.7.4:
|
||||
safe-buffer "5.1.2"
|
||||
vary "~1.1.2"
|
||||
|
||||
compute-scroll-into-view@^1.0.17:
|
||||
version "1.0.17"
|
||||
resolved "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz#6a88f18acd9d42e9cf4baa6bec7e0522607ab7ab"
|
||||
integrity sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg==
|
||||
|
||||
concat-map@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
@ -3146,6 +3262,20 @@ cookie@0.5.0:
|
||||
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
|
||||
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
|
||||
|
||||
copy-anything@^2.0.1:
|
||||
version "2.0.6"
|
||||
resolved "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480"
|
||||
integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==
|
||||
dependencies:
|
||||
is-what "^3.14.1"
|
||||
|
||||
copy-to-clipboard@^3.2.0:
|
||||
version "3.3.1"
|
||||
resolved "https://registry.npmmirror.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae"
|
||||
integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==
|
||||
dependencies:
|
||||
toggle-selection "^1.0.6"
|
||||
|
||||
core-js-compat@^3.21.0, core-js-compat@^3.22.1:
|
||||
version "3.22.7"
|
||||
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.22.7.tgz#8359eb66ecbf726dd0cfced8e48d5e73f3224239"
|
||||
@ -3409,6 +3539,13 @@ csstype@^3.0.2:
|
||||
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2"
|
||||
integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==
|
||||
|
||||
customize-cra@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmmirror.com/customize-cra/-/customize-cra-1.0.0.tgz#73286563631aa08127ad4d30a2e3c89cf4e93c8d"
|
||||
integrity sha512-DbtaLuy59224U+xCiukkxSq8clq++MOtJ1Et7LED1fLszWe88EoblEYFBJ895sB1mC6B4uu3xPT/IjClELhMbA==
|
||||
dependencies:
|
||||
lodash.flow "^3.5.0"
|
||||
|
||||
damerau-levenshtein@^1.0.7:
|
||||
version "1.0.8"
|
||||
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
|
||||
@ -3423,6 +3560,16 @@ data-urls@^2.0.0:
|
||||
whatwg-mimetype "^2.3.0"
|
||||
whatwg-url "^8.0.0"
|
||||
|
||||
date-fns@2.x:
|
||||
version "2.28.0"
|
||||
resolved "https://registry.npmmirror.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2"
|
||||
integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==
|
||||
|
||||
dayjs@1.x:
|
||||
version "1.11.2"
|
||||
resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.2.tgz#fa0f5223ef0d6724b3d8327134890cfe3d72fbe5"
|
||||
integrity sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw==
|
||||
|
||||
debug@2.6.9, debug@^2.6.0, debug@^2.6.9:
|
||||
version "2.6.9"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||
@ -3437,7 +3584,7 @@ debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
|
||||
dependencies:
|
||||
ms "2.1.2"
|
||||
|
||||
debug@^3.2.7:
|
||||
debug@^3.2.6, debug@^3.2.7:
|
||||
version "3.2.7"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
|
||||
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
|
||||
@ -3594,6 +3741,11 @@ dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9:
|
||||
resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz#56082f71b1dc7aac69d83c4285eef39c15d93f56"
|
||||
integrity sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==
|
||||
|
||||
dom-align@^1.7.0:
|
||||
version "1.12.3"
|
||||
resolved "https://registry.npmmirror.com/dom-align/-/dom-align-1.12.3.tgz#a36d02531dae0eefa2abb0c4db6595250526f103"
|
||||
integrity sha512-Gj9hZN3a07cbR6zviMUBOMPdWxYhbMI+x+WS0NAIu2zFZmbK8ys9R79g+iG9qLnlCwpFoaB+fKy8Pdv470GsPA==
|
||||
|
||||
dom-converter@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
|
||||
@ -3742,6 +3894,13 @@ entities@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
|
||||
integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
|
||||
|
||||
errno@^0.1.1:
|
||||
version "0.1.8"
|
||||
resolved "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
|
||||
integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
|
||||
dependencies:
|
||||
prr "~1.0.1"
|
||||
|
||||
error-ex@^1.3.1:
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
|
||||
@ -4617,6 +4776,13 @@ he@^1.2.0:
|
||||
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
||||
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
|
||||
|
||||
history@^5.2.0:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.npmmirror.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b"
|
||||
integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.6"
|
||||
|
||||
hoopy@^0.1.4:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d"
|
||||
@ -4756,7 +4922,7 @@ human-signals@^2.1.0:
|
||||
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
|
||||
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
|
||||
|
||||
iconv-lite@0.4.24:
|
||||
iconv-lite@0.4.24, iconv-lite@^0.4.4:
|
||||
version "0.4.24"
|
||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
||||
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
|
||||
@ -4792,6 +4958,11 @@ ignore@^5.2.0:
|
||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
|
||||
integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
|
||||
|
||||
image-size@~0.5.0:
|
||||
version "0.5.5"
|
||||
resolved "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
|
||||
integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==
|
||||
|
||||
immer@^9.0.7:
|
||||
version "9.0.14"
|
||||
resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.14.tgz#e05b83b63999d26382bb71676c9d827831248a48"
|
||||
@ -5031,6 +5202,11 @@ is-weakref@^1.0.2:
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
|
||||
is-what@^3.14.1:
|
||||
version "3.14.1"
|
||||
resolved "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1"
|
||||
integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==
|
||||
|
||||
is-wsl@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
|
||||
@ -5661,6 +5837,13 @@ json-stable-stringify-without-jsonify@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
|
||||
integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
|
||||
|
||||
json2mq@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.npmmirror.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a"
|
||||
integrity sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==
|
||||
dependencies:
|
||||
string-convert "^0.2.0"
|
||||
|
||||
json5@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
|
||||
@ -5722,6 +5905,30 @@ language-tags@^1.0.5:
|
||||
dependencies:
|
||||
language-subtag-registry "~0.3.2"
|
||||
|
||||
less-loader@^11.0.0:
|
||||
version "11.0.0"
|
||||
resolved "https://registry.npmmirror.com/less-loader/-/less-loader-11.0.0.tgz#a31b2bc5cdfb62f1c7de9b2d01cd944c22b1a024"
|
||||
integrity sha512-9+LOWWjuoectIEx3zrfN83NAGxSUB5pWEabbbidVQVgZhN+wN68pOvuyirVlH1IK4VT1f3TmlyvAnCXh8O5KEw==
|
||||
dependencies:
|
||||
klona "^2.0.4"
|
||||
|
||||
less@^4.1.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.npmmirror.com/less/-/less-4.1.2.tgz#6099ee584999750c2624b65f80145f8674e4b4b0"
|
||||
integrity sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==
|
||||
dependencies:
|
||||
copy-anything "^2.0.1"
|
||||
parse-node-version "^1.0.1"
|
||||
tslib "^2.3.0"
|
||||
optionalDependencies:
|
||||
errno "^0.1.1"
|
||||
graceful-fs "^4.1.2"
|
||||
image-size "~0.5.0"
|
||||
make-dir "^2.1.0"
|
||||
mime "^1.4.1"
|
||||
needle "^2.5.2"
|
||||
source-map "~0.6.0"
|
||||
|
||||
leven@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
|
||||
@ -5807,6 +6014,11 @@ lodash.debounce@^4.0.8:
|
||||
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
|
||||
integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
|
||||
|
||||
lodash.flow@^3.5.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.npmmirror.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a"
|
||||
integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==
|
||||
|
||||
lodash.memoize@^4.1.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
|
||||
@ -5865,6 +6077,14 @@ magic-string@^0.25.0, magic-string@^0.25.7:
|
||||
dependencies:
|
||||
sourcemap-codec "^1.4.8"
|
||||
|
||||
make-dir@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
|
||||
integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
|
||||
dependencies:
|
||||
pify "^4.0.1"
|
||||
semver "^5.6.0"
|
||||
|
||||
make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
|
||||
@ -5901,6 +6121,11 @@ memfs@^3.1.2, memfs@^3.4.3:
|
||||
dependencies:
|
||||
fs-monkey "1.0.3"
|
||||
|
||||
memoize-one@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045"
|
||||
integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
|
||||
|
||||
merge-descriptors@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
|
||||
@ -5941,7 +6166,7 @@ mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17,
|
||||
dependencies:
|
||||
mime-db "1.52.0"
|
||||
|
||||
mime@1.6.0:
|
||||
mime@1.6.0, mime@^1.4.1:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
|
||||
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
|
||||
@ -6001,6 +6226,11 @@ mkdirp@~0.5.1:
|
||||
dependencies:
|
||||
minimist "^1.2.6"
|
||||
|
||||
moment@^2.24.0, moment@^2.29.2:
|
||||
version "2.29.3"
|
||||
resolved "https://registry.npmmirror.com/moment/-/moment-2.29.3.tgz#edd47411c322413999f7a5940d526de183c031f3"
|
||||
integrity sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==
|
||||
|
||||
ms@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||
@ -6034,6 +6264,15 @@ natural-compare@^1.4.0:
|
||||
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
|
||||
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
|
||||
|
||||
needle@^2.5.2:
|
||||
version "2.9.1"
|
||||
resolved "https://registry.npmmirror.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684"
|
||||
integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==
|
||||
dependencies:
|
||||
debug "^3.2.6"
|
||||
iconv-lite "^0.4.4"
|
||||
sax "^1.2.4"
|
||||
|
||||
negotiator@0.6.3:
|
||||
version "0.6.3"
|
||||
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
|
||||
@ -6339,6 +6578,11 @@ parse-json@^5.0.0, parse-json@^5.2.0:
|
||||
json-parse-even-better-errors "^2.3.0"
|
||||
lines-and-columns "^1.1.6"
|
||||
|
||||
parse-node-version@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
|
||||
integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
|
||||
|
||||
parse5@6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
|
||||
@ -6412,6 +6656,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatc
|
||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
|
||||
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||
|
||||
pify@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
|
||||
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
|
||||
|
||||
pirates@^4.0.4:
|
||||
version "4.0.5"
|
||||
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
|
||||
@ -7046,6 +7295,11 @@ proxy-addr@~2.0.7:
|
||||
forwarded "0.2.0"
|
||||
ipaddr.js "1.9.1"
|
||||
|
||||
prr@~1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
|
||||
integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==
|
||||
|
||||
psl@^1.1.33:
|
||||
version "1.8.0"
|
||||
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
|
||||
@ -7107,6 +7361,373 @@ raw-body@2.5.1:
|
||||
iconv-lite "0.4.24"
|
||||
unpipe "1.0.0"
|
||||
|
||||
rc-align@^4.0.0:
|
||||
version "4.0.12"
|
||||
resolved "https://registry.npmmirror.com/rc-align/-/rc-align-4.0.12.tgz#065b5c68a1cc92a00800c9239320d9fdf5f16207"
|
||||
integrity sha512-3DuwSJp8iC/dgHzwreOQl52soj40LchlfUHtgACOUtwGuoFIOVh6n/sCpfqCU8kO5+iz6qR0YKvjgB8iPdE3aQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "2.x"
|
||||
dom-align "^1.7.0"
|
||||
lodash "^4.17.21"
|
||||
rc-util "^5.3.0"
|
||||
resize-observer-polyfill "^1.5.1"
|
||||
|
||||
rc-cascader@~3.5.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.npmmirror.com/rc-cascader/-/rc-cascader-3.5.0.tgz#a49b632bc2d0c8ef31b212c8ddd0bea346e64877"
|
||||
integrity sha512-rpXnWCfvk7Frh2dBzMoA0c7i0nn6aJU7L2NZo8R8pNkrT0sKgytQSpdtPWP+Pq8IkvwbEd8BU8Z8OnOljcqgZg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.12.5"
|
||||
array-tree-filter "^2.1.0"
|
||||
classnames "^2.3.1"
|
||||
rc-select "~14.1.0"
|
||||
rc-tree "~5.5.0"
|
||||
rc-util "^5.6.1"
|
||||
|
||||
rc-checkbox@~2.3.0:
|
||||
version "2.3.2"
|
||||
resolved "https://registry.npmmirror.com/rc-checkbox/-/rc-checkbox-2.3.2.tgz#f91b3678c7edb2baa8121c9483c664fa6f0aefc1"
|
||||
integrity sha512-afVi1FYiGv1U0JlpNH/UaEXdh6WUJjcWokj/nUN2TgG80bfG+MDdbfHKlLcNNba94mbjy2/SXJ1HDgrOkXGAjg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.1"
|
||||
|
||||
rc-collapse@~3.1.0:
|
||||
version "3.1.4"
|
||||
resolved "https://registry.npmmirror.com/rc-collapse/-/rc-collapse-3.1.4.tgz#063e33fcc427a378e63da757898cd1fba6269679"
|
||||
integrity sha512-WayrhswKMwuJab9xbqFxXTgV0m6X8uOPEO6zm/GJ5YJiJ/wIh/Dd2VtWeI06HYUEnTFv0HNcYv+zWbB+p6OD2A==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "2.x"
|
||||
rc-motion "^2.3.4"
|
||||
rc-util "^5.2.1"
|
||||
shallowequal "^1.1.0"
|
||||
|
||||
rc-dialog@~8.8.0, rc-dialog@~8.8.1:
|
||||
version "8.8.1"
|
||||
resolved "https://registry.npmmirror.com/rc-dialog/-/rc-dialog-8.8.1.tgz#cd8897fbee1de0eab6d237a6abe1e4db8d09dd72"
|
||||
integrity sha512-7M1WKZCjfIABKEaJVskdYvb80z+RX7I11PeSjPVfLOOaJAmIepvDEd0alBtOZvOL3fZFWlMs4JVZtp9LZgONxA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.6"
|
||||
rc-motion "^2.3.0"
|
||||
rc-util "^5.21.0"
|
||||
|
||||
rc-drawer@~4.4.2:
|
||||
version "4.4.3"
|
||||
resolved "https://registry.npmmirror.com/rc-drawer/-/rc-drawer-4.4.3.tgz#2094937a844e55dc9644236a2d9fba79c344e321"
|
||||
integrity sha512-FYztwRs3uXnFOIf1hLvFxIQP9MiZJA+0w+Os8dfDh/90X7z/HqP/Yg+noLCIeHEbKln1Tqelv8ymCAN24zPcfQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.6"
|
||||
rc-util "^5.7.0"
|
||||
|
||||
rc-dropdown@~3.5.0:
|
||||
version "3.5.2"
|
||||
resolved "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-3.5.2.tgz#2f1f4eeb36c07fb67cd599c0cb8e861da3de5527"
|
||||
integrity sha512-Ty4LsXjkspZuFJSRx3blCLLCDicXM5qds6F1odgEa+jcjC+OJKHQGnvE4FqtoljPaqWm4wG78pbgXH6Ddh2DkA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.6"
|
||||
rc-trigger "^5.0.4"
|
||||
rc-util "^5.17.0"
|
||||
|
||||
rc-field-form@~1.26.1:
|
||||
version "1.26.6"
|
||||
resolved "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-1.26.6.tgz#00c526831db287421ae761a6fae079b68e9f3229"
|
||||
integrity sha512-N7nx/9Zk3innxZWTa4GPUV3j78OCgXacl2Lgi6agmP7ziz6BHoZYZ1djOt5UW50kK7UoVMAPtue5I1XgQO24MA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.18.0"
|
||||
async-validator "^4.1.0"
|
||||
rc-util "^5.8.0"
|
||||
|
||||
rc-image@~5.6.0:
|
||||
version "5.6.2"
|
||||
resolved "https://registry.npmmirror.com/rc-image/-/rc-image-5.6.2.tgz#31892b0b22aa5122fd9b1a067e9a4ba627004214"
|
||||
integrity sha512-qhKOVvivCZkd6CrzS/4ST2+Auu16mtPSFVqVzwE7sELWfuvzcLGTzGv8UsVvm6qRNIz6SeaueUetqi4Ii16XQA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.11.2"
|
||||
classnames "^2.2.6"
|
||||
rc-dialog "~8.8.0"
|
||||
rc-util "^5.0.6"
|
||||
|
||||
rc-input-number@~7.3.0:
|
||||
version "7.3.4"
|
||||
resolved "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-7.3.4.tgz#674aea98260250287d36e330a7e065b174486e9d"
|
||||
integrity sha512-W9uqSzuvJUnz8H8vsVY4kx+yK51SsAxNTwr8SNH4G3XqQNocLVmKIibKFRjocnYX1RDHMND9FFbgj2h7E7nvGA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.5"
|
||||
rc-util "^5.9.8"
|
||||
|
||||
rc-input@~0.0.1-alpha.5:
|
||||
version "0.0.1-alpha.7"
|
||||
resolved "https://registry.npmmirror.com/rc-input/-/rc-input-0.0.1-alpha.7.tgz#53e3f13871275c21d92b51f80b698f389ad45dd3"
|
||||
integrity sha512-eozaqpCYWSY5LBMwlHgC01GArkVEP+XlJ84OMvdkwUnJBSv83Yxa15pZpn7vACAj84uDC4xOA2CoFdbLuqB08Q==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.11.1"
|
||||
classnames "^2.2.1"
|
||||
rc-util "^5.18.1"
|
||||
|
||||
rc-mentions@~1.7.0:
|
||||
version "1.7.1"
|
||||
resolved "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-1.7.1.tgz#480ad04af4460ee01b6ccd9137fcea23067aa9be"
|
||||
integrity sha512-JbCS9bTqt6BYN2vfTPythlScLuc42rIlX85n7975RnkfawXlJjskHOlR3o8EpD4asl4KuA2jKTy0dj39DtSVqg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.6"
|
||||
rc-menu "~9.5.1"
|
||||
rc-textarea "^0.3.0"
|
||||
rc-trigger "^5.0.4"
|
||||
rc-util "^5.0.1"
|
||||
|
||||
rc-menu@~9.5.1, rc-menu@~9.5.5:
|
||||
version "9.5.5"
|
||||
resolved "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.5.5.tgz#aa2f151d4191ed089dc1a8141fe365c9b77d61a9"
|
||||
integrity sha512-wj2y2BAKwSMyWXO3RBf9sNN5V+DFWxFl45Ma6qQEHA5nwwh7p07bNgc6AAJc+L1+LAz+rWz3AU8PYyT17hMHCw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "2.x"
|
||||
rc-motion "^2.4.3"
|
||||
rc-overflow "^1.2.0"
|
||||
rc-trigger "^5.1.2"
|
||||
rc-util "^5.12.0"
|
||||
shallowequal "^1.1.0"
|
||||
|
||||
rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.2.0, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.3, rc-motion@^2.4.4, rc-motion@^2.5.1:
|
||||
version "2.6.0"
|
||||
resolved "https://registry.npmmirror.com/rc-motion/-/rc-motion-2.6.0.tgz#c60c3e7f15257f55a8cd7794a539f0e2cc751399"
|
||||
integrity sha512-1MDWA9+i174CZ0SIDenSYm2Wb9YbRkrexjZWR0CUFu7D6f23E8Y0KsTgk9NGOLJsGak5ELZK/Y5lOlf5wQdzbw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.11.1"
|
||||
classnames "^2.2.1"
|
||||
rc-util "^5.21.0"
|
||||
|
||||
rc-notification@~4.6.0:
|
||||
version "4.6.0"
|
||||
resolved "https://registry.npmmirror.com/rc-notification/-/rc-notification-4.6.0.tgz#4e76fc2d0568f03cc93ac18c9e20763ebe29fa46"
|
||||
integrity sha512-xF3MKgIoynzjQAO4lqsoraiFo3UXNYlBfpHs0VWvwF+4pimen9/H1DYLN2mfRWhHovW6gRpla73m2nmyIqAMZQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "2.x"
|
||||
rc-motion "^2.2.0"
|
||||
rc-util "^5.20.1"
|
||||
|
||||
rc-overflow@^1.0.0, rc-overflow@^1.2.0:
|
||||
version "1.2.6"
|
||||
resolved "https://registry.npmmirror.com/rc-overflow/-/rc-overflow-1.2.6.tgz#e99fabea04ce4fb13f0dd8835aef4e4cdd4c15a2"
|
||||
integrity sha512-YqbocgzuQxfq2wZy72vdAgrgzzEuM/5d4gF9TBEodCpXPbUeXGrUXNm1J6G1MSkCU2N0ePIgCEu5qD/0Ldi63Q==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.11.1"
|
||||
classnames "^2.2.1"
|
||||
rc-resize-observer "^1.0.0"
|
||||
rc-util "^5.19.2"
|
||||
|
||||
rc-pagination@~3.1.9:
|
||||
version "3.1.16"
|
||||
resolved "https://registry.npmmirror.com/rc-pagination/-/rc-pagination-3.1.16.tgz#b0082108cf027eded18ed61d818d31897c343e81"
|
||||
integrity sha512-GFcHXJ7XxeJDf9B+ndP4PRDt46maSSgYhiwofBMiIGKIlBhJ0wfu8DMCEvaWJJLpI2u4Gb6zF1dHpiqPFrosPg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.1"
|
||||
|
||||
rc-picker@~2.6.4:
|
||||
version "2.6.9"
|
||||
resolved "https://registry.npmmirror.com/rc-picker/-/rc-picker-2.6.9.tgz#2f2f82c5340adbe3b30875a25e015c120eb88c9c"
|
||||
integrity sha512-yH3UYXCADf7REtOAB5cwe1cyFKtB0p204RCN8JdZGG4uuSOZ1IPTkk/GJS6HOpxspZeJCLGzzajuQMDwck9dsw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.1"
|
||||
date-fns "2.x"
|
||||
dayjs "1.x"
|
||||
moment "^2.24.0"
|
||||
rc-trigger "^5.0.4"
|
||||
rc-util "^5.4.0"
|
||||
shallowequal "^1.1.0"
|
||||
|
||||
rc-progress@~3.2.1:
|
||||
version "3.2.4"
|
||||
resolved "https://registry.npmmirror.com/rc-progress/-/rc-progress-3.2.4.tgz#4036acdae2566438545bc4df2203248babaf7549"
|
||||
integrity sha512-M9WWutRaoVkPUPIrTpRIDpX0SPSrVHzxHdCRCbeoBFrd9UFWTYNWRlHsruJM5FH1AZI+BwB4wOJUNNylg/uFSw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.6"
|
||||
rc-util "^5.16.1"
|
||||
|
||||
rc-rate@~2.9.0:
|
||||
version "2.9.2"
|
||||
resolved "https://registry.npmmirror.com/rc-rate/-/rc-rate-2.9.2.tgz#4a58965d1ecf91896ebae01d458b59056df0b4ea"
|
||||
integrity sha512-SaiZFyN8pe0Fgphv8t3+kidlej+cq/EALkAJAc3A0w0XcPaH2L1aggM8bhe1u6GAGuQNAoFvTLjw4qLPGRKV5g==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.5"
|
||||
rc-util "^5.0.1"
|
||||
|
||||
rc-resize-observer@^1.0.0, rc-resize-observer@^1.1.0, rc-resize-observer@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.npmmirror.com/rc-resize-observer/-/rc-resize-observer-1.2.0.tgz#9f46052f81cdf03498be35144cb7c53fd282c4c7"
|
||||
integrity sha512-6W+UzT3PyDM0wVCEHfoW3qTHPTvbdSgiA43buiy8PzmeMnfgnDeb9NjdimMXMl3/TcrvvWl5RRVdp+NqcR47pQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.1"
|
||||
rc-util "^5.15.0"
|
||||
resize-observer-polyfill "^1.5.1"
|
||||
|
||||
"rc-segmented@~2.1.0 ":
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmmirror.com/rc-segmented/-/rc-segmented-2.1.0.tgz#0e0afe646c1a0e44a0e18785f518c42633ec8efc"
|
||||
integrity sha512-hUlonro+pYoZcwrH6Vm56B2ftLfQh046hrwif/VwLIw1j3zGt52p5mREBwmeVzXnSwgnagpOpfafspzs1asjGw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.11.1"
|
||||
classnames "^2.2.1"
|
||||
rc-motion "^2.4.4"
|
||||
rc-util "^5.17.0"
|
||||
|
||||
rc-select@~14.1.0, rc-select@~14.1.1:
|
||||
version "14.1.4"
|
||||
resolved "https://registry.npmmirror.com/rc-select/-/rc-select-14.1.4.tgz#486b632dfcaee36a3f0ba6a214e2d546f9d3666b"
|
||||
integrity sha512-vU2DlROjv33nbYxcPrT/3yk1m53qsxVXhLv1u9lD7H2G5XkUR1p75KMiHU/5l/1VSw9I2IfMsFJoHkpUGNAkdQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "2.x"
|
||||
rc-motion "^2.0.1"
|
||||
rc-overflow "^1.0.0"
|
||||
rc-trigger "^5.0.4"
|
||||
rc-util "^5.16.1"
|
||||
rc-virtual-list "^3.2.0"
|
||||
|
||||
rc-slider@~10.0.0:
|
||||
version "10.0.0"
|
||||
resolved "https://registry.npmmirror.com/rc-slider/-/rc-slider-10.0.0.tgz#8ffe1dd3c8799c9d1f81ac808976f18af3dca206"
|
||||
integrity sha512-Bk54UIKWW4wyhHcL8ehAxt+wX+n69dscnHTX6Uv0FMxSke/TGrlkZz1LSIWblCpfE2zr/dwR2Ca8nZGk3U+Tbg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.5"
|
||||
rc-tooltip "^5.0.1"
|
||||
rc-util "^5.18.1"
|
||||
shallowequal "^1.1.0"
|
||||
|
||||
rc-steps@~4.1.0:
|
||||
version "4.1.4"
|
||||
resolved "https://registry.npmmirror.com/rc-steps/-/rc-steps-4.1.4.tgz#0ba82db202d59ca52d0693dc9880dd145b19dc23"
|
||||
integrity sha512-qoCqKZWSpkh/b03ASGx1WhpKnuZcRWmvuW+ZUu4mvMdfvFzVxblTwUM+9aBd0mlEUFmt6GW8FXhMpHkK3Uzp3w==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.2"
|
||||
classnames "^2.2.3"
|
||||
rc-util "^5.0.1"
|
||||
|
||||
rc-switch@~3.2.0:
|
||||
version "3.2.2"
|
||||
resolved "https://registry.npmmirror.com/rc-switch/-/rc-switch-3.2.2.tgz#d001f77f12664d52595b4f6fb425dd9e66fba8e8"
|
||||
integrity sha512-+gUJClsZZzvAHGy1vZfnwySxj+MjLlGRyXKXScrtCTcmiYNPzxDFOxdQ/3pK1Kt/0POvwJ/6ALOR8gwdXGhs+A==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.1"
|
||||
rc-util "^5.0.1"
|
||||
|
||||
rc-table@~7.24.0:
|
||||
version "7.24.2"
|
||||
resolved "https://registry.npmmirror.com/rc-table/-/rc-table-7.24.2.tgz#fbccf5ef4b84cdb38c8a0b416365de157483bf51"
|
||||
integrity sha512-yefqhtc4V3BeWG2bnDhWYxWX1MOckvW2KU1J55pntZmIGrov5Hx8tQn2gcs6OM0fJ6NgEwUvVEknsCsWI24zUg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.5"
|
||||
rc-resize-observer "^1.1.0"
|
||||
rc-util "^5.14.0"
|
||||
shallowequal "^1.1.0"
|
||||
|
||||
rc-tabs@~11.13.0:
|
||||
version "11.13.0"
|
||||
resolved "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-11.13.0.tgz#083eed578f8ad02dc0d462d73da487fe32e3a573"
|
||||
integrity sha512-aUw1Pq0B1a2zGX4o/m3yrQycZcCLgDp6gKwn8IAU07q148RRONsVGxi0oLVVe5SE51kOB+j0bk1RX43ZBdZNgA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.11.2"
|
||||
classnames "2.x"
|
||||
rc-dropdown "~3.5.0"
|
||||
rc-menu "~9.5.1"
|
||||
rc-resize-observer "^1.0.0"
|
||||
rc-util "^5.5.0"
|
||||
|
||||
rc-textarea@^0.3.0, rc-textarea@~0.3.0:
|
||||
version "0.3.7"
|
||||
resolved "https://registry.npmmirror.com/rc-textarea/-/rc-textarea-0.3.7.tgz#987142891efdedb774883c07e2f51b318fde5a11"
|
||||
integrity sha512-yCdZ6binKmAQB13hc/oehh0E/QRwoPP1pjF21aHBxlgXO3RzPF6dUu4LG2R4FZ1zx/fQd2L1faktulrXOM/2rw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.1"
|
||||
rc-resize-observer "^1.0.0"
|
||||
rc-util "^5.7.0"
|
||||
shallowequal "^1.1.0"
|
||||
|
||||
rc-tooltip@^5.0.1, rc-tooltip@~5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.npmmirror.com/rc-tooltip/-/rc-tooltip-5.1.1.tgz#94178ed162d0252bc4993b725f5dc2ac0fccf154"
|
||||
integrity sha512-alt8eGMJulio6+4/uDm7nvV+rJq9bsfxFDCI0ljPdbuoygUscbsMYb6EQgwib/uqsXQUvzk+S7A59uYHmEgmDA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.11.2"
|
||||
rc-trigger "^5.0.0"
|
||||
|
||||
rc-tree-select@~5.3.0:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-5.3.0.tgz#6edd19d1066ad2bfa212f043c3ff701b93828026"
|
||||
integrity sha512-UN6CUBulmch+CsihnJ73+DtWijEB1hVTC8sdVxq6E0teVAkHQZUvDj+cwZShtShAKvWwXy73PZ1hIHEUrmVcKw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "2.x"
|
||||
rc-select "~14.1.0"
|
||||
rc-tree "~5.5.0"
|
||||
rc-util "^5.16.1"
|
||||
|
||||
rc-tree@~5.5.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.5.0.tgz#ba7c8aea2ad29f40a9c7168e490300f7a50c0f22"
|
||||
integrity sha512-vpKeFsDyj7weik8UPseCTaSNAPt939qn1dQd8goSbRDajbjJEja0v/WFXyRhOiF1HLemNTfqMz4MYc9qlqyNXg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "2.x"
|
||||
rc-motion "^2.0.1"
|
||||
rc-util "^5.16.1"
|
||||
rc-virtual-list "^3.4.2"
|
||||
|
||||
rc-trigger@^5.0.0, rc-trigger@^5.0.4, rc-trigger@^5.1.2, rc-trigger@^5.2.10:
|
||||
version "5.3.1"
|
||||
resolved "https://registry.npmmirror.com/rc-trigger/-/rc-trigger-5.3.1.tgz#acafadf3eaf384e7f466c303bfa0f34c8137d7b8"
|
||||
integrity sha512-5gaFbDkYSefZ14j2AdzucXzlWgU2ri5uEjkHvsf1ynRhdJbKxNOnw4PBZ9+FVULNGFiDzzlVF8RJnR9P/xrnKQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.18.3"
|
||||
classnames "^2.2.6"
|
||||
rc-align "^4.0.0"
|
||||
rc-motion "^2.0.0"
|
||||
rc-util "^5.19.2"
|
||||
|
||||
rc-upload@~4.3.0:
|
||||
version "4.3.4"
|
||||
resolved "https://registry.npmmirror.com/rc-upload/-/rc-upload-4.3.4.tgz#83ff7d3867631c37adbfd72ea3d1fd7e97ca84af"
|
||||
integrity sha512-uVbtHFGNjHG/RyAfm9fluXB6pvArAGyAx8z7XzXXyorEgVIWj6mOlriuDm0XowDHYz4ycNK0nE0oP3cbFnzxiQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.18.3"
|
||||
classnames "^2.2.5"
|
||||
rc-util "^5.2.0"
|
||||
|
||||
rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.12.0, rc-util@^5.14.0, rc-util@^5.15.0, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.19.2, rc-util@^5.2.0, rc-util@^5.2.1, rc-util@^5.20.0, rc-util@^5.20.1, rc-util@^5.21.0, rc-util@^5.3.0, rc-util@^5.4.0, rc-util@^5.5.0, rc-util@^5.6.1, rc-util@^5.7.0, rc-util@^5.8.0, rc-util@^5.9.4, rc-util@^5.9.8:
|
||||
version "5.21.5"
|
||||
resolved "https://registry.npmmirror.com/rc-util/-/rc-util-5.21.5.tgz#6e2a5699f820ba915f43f11a4b7dfb0b0672d0fa"
|
||||
integrity sha512-ip7HqX37Cy/RDl9MlrFp+FbcKnsWZ22sF5MS5eSpYLtg5MpC0TMqGb5ukBatoOhgjnLL+eJGR6e7YAJ/dhK09A==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.18.3"
|
||||
react-is "^16.12.0"
|
||||
shallowequal "^1.1.0"
|
||||
|
||||
rc-virtual-list@^3.2.0, rc-virtual-list@^3.4.2:
|
||||
version "3.4.8"
|
||||
resolved "https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.4.8.tgz#c24c10c6940546b7e2a5e9809402c6716adfd26c"
|
||||
integrity sha512-qSN+Rv4i/E7RCTvTMr1uZo7f3crJJg/5DekoCagydo9zsXrxj07zsFSxqizqW+ldGA16lwa8So/bIbV9Ofjddg==
|
||||
dependencies:
|
||||
classnames "^2.2.6"
|
||||
rc-resize-observer "^1.0.0"
|
||||
rc-util "^5.15.0"
|
||||
|
||||
react-app-polyfill@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz#95221e0a9bd259e5ca6b177c7bb1cb6768f68fd7"
|
||||
@ -7119,6 +7740,13 @@ react-app-polyfill@^3.0.0:
|
||||
regenerator-runtime "^0.13.9"
|
||||
whatwg-fetch "^3.6.2"
|
||||
|
||||
react-app-rewired@^2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.npmmirror.com/react-app-rewired/-/react-app-rewired-2.2.1.tgz#84901ee1e3f26add0377ebec0b41bcdfce9fc211"
|
||||
integrity sha512-uFQWTErXeLDrMzOJHKp0h8P1z0LV9HzPGsJ6adOtGlA/B9WfT6Shh4j2tLTTGlXOfiVx6w6iWpp7SOC5pvk+gA==
|
||||
dependencies:
|
||||
semver "^5.6.0"
|
||||
|
||||
react-dev-utils@^12.0.1:
|
||||
version "12.0.1"
|
||||
resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73"
|
||||
@ -7162,7 +7790,7 @@ react-error-overlay@^6.0.11:
|
||||
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb"
|
||||
integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==
|
||||
|
||||
react-is@^16.13.1:
|
||||
react-is@^16.12.0, react-is@^16.13.1:
|
||||
version "16.13.1"
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
||||
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
||||
@ -7182,6 +7810,21 @@ react-refresh@^0.11.0:
|
||||
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046"
|
||||
integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==
|
||||
|
||||
react-router-dom@^6.3.0:
|
||||
version "6.3.0"
|
||||
resolved "https://registry.npmmirror.com/react-router-dom/-/react-router-dom-6.3.0.tgz#a0216da813454e521905b5fa55e0e5176123f43d"
|
||||
integrity sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==
|
||||
dependencies:
|
||||
history "^5.2.0"
|
||||
react-router "6.3.0"
|
||||
|
||||
react-router@6.3.0:
|
||||
version "6.3.0"
|
||||
resolved "https://registry.npmmirror.com/react-router/-/react-router-6.3.0.tgz#3970cc64b4cb4eae0c1ea5203a80334fdd175557"
|
||||
integrity sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==
|
||||
dependencies:
|
||||
history "^5.2.0"
|
||||
|
||||
react-scripts@5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-5.0.1.tgz#6285dbd65a8ba6e49ca8d651ce30645a6d980003"
|
||||
@ -7386,6 +8029,11 @@ requires-port@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
|
||||
integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
|
||||
|
||||
resize-observer-polyfill@^1.5.0, resize-observer-polyfill@^1.5.1:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
|
||||
integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
|
||||
|
||||
resolve-cwd@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
|
||||
@ -7505,7 +8153,7 @@ sass-loader@^12.3.0:
|
||||
klona "^2.0.4"
|
||||
neo-async "^2.6.2"
|
||||
|
||||
sax@~1.2.4:
|
||||
sax@^1.2.4, sax@~1.2.4:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
||||
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
||||
@ -7561,6 +8209,13 @@ schema-utils@^4.0.0:
|
||||
ajv-formats "^2.1.1"
|
||||
ajv-keywords "^5.0.0"
|
||||
|
||||
scroll-into-view-if-needed@^2.2.25:
|
||||
version "2.2.29"
|
||||
resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.29.tgz#551791a84b7e2287706511f8c68161e4990ab885"
|
||||
integrity sha512-hxpAR6AN+Gh53AdAimHM6C8oTN1ppwVZITihix+WqalywBeFcQ6LdQP5ABNl26nX8GTEL7VT+b8lKpdqq65wXg==
|
||||
dependencies:
|
||||
compute-scroll-into-view "^1.0.17"
|
||||
|
||||
select-hose@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
|
||||
@ -7578,6 +8233,11 @@ semver@7.0.0:
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
|
||||
integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
|
||||
|
||||
semver@^5.6.0:
|
||||
version "5.7.1"
|
||||
resolved "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
||||
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
||||
|
||||
semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
|
||||
version "6.3.0"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
|
||||
@ -7656,6 +8316,11 @@ setprototypeof@1.2.0:
|
||||
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
|
||||
integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
|
||||
|
||||
shallowequal@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.npmmirror.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
|
||||
integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
|
||||
|
||||
shebang-command@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
|
||||
@ -7823,6 +8488,11 @@ statuses@2.0.1:
|
||||
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
|
||||
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
|
||||
|
||||
string-convert@^0.2.0:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.npmmirror.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97"
|
||||
integrity sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==
|
||||
|
||||
string-length@^4.0.1:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"
|
||||
@ -8165,6 +8835,11 @@ to-regex-range@^5.0.1:
|
||||
dependencies:
|
||||
is-number "^7.0.0"
|
||||
|
||||
toggle-selection@^1.0.6:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.npmmirror.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32"
|
||||
integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==
|
||||
|
||||
toidentifier@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
|
||||
@ -8213,7 +8888,7 @@ tslib@^1.8.1:
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
|
||||
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
|
||||
|
||||
tslib@^2.0.3:
|
||||
tslib@^2.0.3, tslib@^2.3.0:
|
||||
version "2.4.0"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
|
||||
integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
|
||||
|
Loading…
Reference in New Issue
Block a user