feat: 为岗位面试状态添加可点击下拉栏功能
- 创建InterviewStatusDropdown组件,显示面试状态动画 - 集成Lottie动画播放器,加载对应状态的动画文件 - 点击面试状态按钮后弹出下拉栏,展示动画和状态说明 - 添加11种不同面试状态的动画映射和描述文字 - 下拉栏支持点击遮罩层关闭 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,7 @@ import { Spin, Empty } from "@arco-design/web-react";
|
||||
import InfiniteScroll from "@/components/InfiniteScroll";
|
||||
import toast from "@/components/Toast";
|
||||
import JobList from "./components/JobList";
|
||||
import InterviewStatusDropdown from "./components/InterviewStatusDropdown";
|
||||
import {
|
||||
getCompanyJobsPageData,
|
||||
getJobsList,
|
||||
@@ -25,6 +26,9 @@ const CompanyJobsPage = () => {
|
||||
const [interviewsHasMore, setInterviewsHasMore] = useState(true);
|
||||
const [initialDataLoaded, setInitialDataLoaded] = useState(false);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [dropdownOpen, setDropdownOpen] = useState(false);
|
||||
const [selectedInterview, setSelectedInterview] = useState(null);
|
||||
const [dropdownPosition, setDropdownPosition] = useState({ top: 0, left: 0 });
|
||||
const navigate = useNavigate();
|
||||
|
||||
// 初始化页面数据 - 使用聚合接口
|
||||
@@ -120,6 +124,24 @@ const CompanyJobsPage = () => {
|
||||
}
|
||||
};
|
||||
|
||||
// 处理面试状态点击
|
||||
const handleStatusClick = (e, item) => {
|
||||
e.stopPropagation();
|
||||
const rect = e.currentTarget.getBoundingClientRect();
|
||||
setDropdownPosition({
|
||||
top: rect.bottom + 5,
|
||||
left: rect.left
|
||||
});
|
||||
setSelectedInterview(item);
|
||||
setDropdownOpen(true);
|
||||
};
|
||||
|
||||
// 关闭下拉栏
|
||||
const handleCloseDropdown = () => {
|
||||
setDropdownOpen(false);
|
||||
setSelectedInterview(null);
|
||||
};
|
||||
|
||||
// 获取企业内推岗位 - 用于分页加载更多
|
||||
const fetchJobsList = async () => {
|
||||
// 如果初始数据还没加载完成,或者是第一页且已有初始数据,则跳过
|
||||
@@ -262,6 +284,8 @@ const CompanyJobsPage = () => {
|
||||
item.status !== "COMPLETED" &&
|
||||
"company-jobs-page-interview-item-btn-active"
|
||||
}`}
|
||||
onClick={(e) => handleStatusClick(e, item)}
|
||||
style={{ cursor: 'pointer' }}
|
||||
>
|
||||
{item.statusText}
|
||||
</div>
|
||||
@@ -274,6 +298,14 @@ const CompanyJobsPage = () => {
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
{/* 面试状态下拉栏 */}
|
||||
<InterviewStatusDropdown
|
||||
status={selectedInterview?.status}
|
||||
statusText={selectedInterview?.statusText}
|
||||
isOpen={dropdownOpen}
|
||||
onClose={handleCloseDropdown}
|
||||
position={dropdownPosition}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user