diff --git a/.claude/settings.local.json b/.claude/settings.local.json index ce6b272..fb68354 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -46,7 +46,8 @@ "Bash(git branch:*)", "Bash(git clone:*)", "Bash(git restore:*)", - "Bash(git init:*)" + "Bash(git init:*)", + "Bash(pkill:*)" ], "deny": [], "ask": [] diff --git a/src/assets/images/CompanyJobsPage/background.png b/src/assets/images/CompanyJobsPage/background.png new file mode 100644 index 0000000..7692b51 Binary files /dev/null and b/src/assets/images/CompanyJobsPage/background.png differ diff --git a/src/assets/images/CompanyJobsPage/file_icon.png b/src/assets/images/CompanyJobsPage/file_icon.png index 1c6fc77..e4ef85e 100644 Binary files a/src/assets/images/CompanyJobsPage/file_icon.png and b/src/assets/images/CompanyJobsPage/file_icon.png differ diff --git a/src/assets/images/JobStrategyDetailPage/bar_chart.png b/src/assets/images/JobStrategyDetailPage/bar_chart.png index f5b39ee..64a941b 100644 Binary files a/src/assets/images/JobStrategyDetailPage/bar_chart.png and b/src/assets/images/JobStrategyDetailPage/bar_chart.png differ diff --git a/src/assets/images/JobStrategyDetailPage/batch.png b/src/assets/images/JobStrategyDetailPage/batch.png index aa8091d..5c88218 100644 Binary files a/src/assets/images/JobStrategyDetailPage/batch.png and b/src/assets/images/JobStrategyDetailPage/batch.png differ diff --git a/src/assets/images/ResumeInterviewPage/Tag.png b/src/assets/images/ResumeInterviewPage/Tag.png new file mode 100644 index 0000000..81dccee Binary files /dev/null and b/src/assets/images/ResumeInterviewPage/Tag.png differ diff --git a/src/assets/images/ResumeInterviewPage/Tag2.png b/src/assets/images/ResumeInterviewPage/Tag2.png new file mode 100644 index 0000000..0eb4276 Binary files /dev/null and b/src/assets/images/ResumeInterviewPage/Tag2.png differ diff --git a/src/assets/images/ResumeInterviewPage/Tag3.png b/src/assets/images/ResumeInterviewPage/Tag3.png new file mode 100644 index 0000000..505e66f Binary files /dev/null and b/src/assets/images/ResumeInterviewPage/Tag3.png differ diff --git a/src/assets/images/ResumeInterviewPage/icon_1.png b/src/assets/images/ResumeInterviewPage/icon_1.png index 82d2cc6..91a4523 100644 Binary files a/src/assets/images/ResumeInterviewPage/icon_1.png and b/src/assets/images/ResumeInterviewPage/icon_1.png differ diff --git a/src/assets/images/ResumeInterviewPage/icon_2.png b/src/assets/images/ResumeInterviewPage/icon_2.png index db01767..9331e0f 100644 Binary files a/src/assets/images/ResumeInterviewPage/icon_2.png and b/src/assets/images/ResumeInterviewPage/icon_2.png differ diff --git a/src/assets/images/ResumeInterviewPage/question_icon2.png b/src/assets/images/ResumeInterviewPage/question_icon2.png new file mode 100644 index 0000000..23191ae Binary files /dev/null and b/src/assets/images/ResumeInterviewPage/question_icon2.png differ diff --git a/src/components/CourseList/index.css b/src/components/CourseList/index.css index 74807da..2ea3189 100644 --- a/src/components/CourseList/index.css +++ b/src/components/CourseList/index.css @@ -69,31 +69,71 @@ box-sizing: border-box; } - /* 自定义时间轴元素 */ + /* 自定义时间轴元素 - 统一使用CSS样式 */ .time-line-dot-icon { - width: 20px; - height: 20px; - background-image: url("@/assets/images/Common/time_line_dot_icon.png"); - background-size: 100% 100%; + width: 12px; + height: 12px; + background-color: #10b981; + border-radius: 50%; + position: relative; + + &::before { + content: ""; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 6px; + height: 6px; + background-color: #fff; + border-radius: 50%; + } } .time-line-clock-icon { width: 12px; height: 12px; - background-image: url("@/assets/images/Common/time_line_clock_icon.png"); - background-size: 100% 100%; + background-color: #3b82f6; + border-radius: 50%; + position: relative; + + &::before { + content: ""; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 6px; + height: 6px; + background-color: #fff; + border-radius: 50%; + } } .time-line-lock-icon { width: 12px; height: 12px; - background-image: url("@/assets/images/Common/time_line_lock_icon.png"); - background-size: 100% 100%; - opacity: 0.5; + background-color: #c9cdd4; + border-radius: 50%; + position: relative; + opacity: 0.6; + + &::before { + content: ""; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 6px; + height: 6px; + background-color: #fff; + border-radius: 50%; + } } .time-line-item { width: 248px; - height: 74px; + min-height: 74px !important; + height: auto !important; background-color: #f2f3f5; border-radius: 8px; position: relative; @@ -101,25 +141,39 @@ padding: 10px; > p { - width: 100%; - height: 22px; + width: calc(100% - 70px) !important; + min-height: 22px !important; + height: auto !important; font-size: 14px; font-weight: 600; line-height: 22px; color: #1d2129; + word-wrap: break-word !important; + word-break: break-word !important; + white-space: normal !important; + overflow-wrap: break-word !important; + display: block !important; + text-overflow: unset !important; + overflow: visible !important; + max-width: none !important; + -webkit-line-clamp: unset !important; + -webkit-box-orient: unset !important; + text-rendering: auto !important; } > .time-line-item-info { margin-top: 10px; width: 100%; - height: 20px; + min-height: 20px; font-size: 12px; font-weight: 400; line-height: 20px; color: #4e5969; display: flex; justify-content: space-between; - align-items: center; + align-items: flex-start; + flex-wrap: wrap; + gap: 5px; } } @@ -225,3 +279,24 @@ } } } + +/* 强制覆盖Arco Timeline文本省略 */ +.course-list .arco-timeline-item-content p { + text-overflow: unset !important; + overflow: visible !important; + white-space: normal !important; + display: block !important; + -webkit-line-clamp: unset !important; + -webkit-box-orient: unset !important; + word-break: break-word !important; + max-width: calc(100% - 70px) !important; +} + +.course-list .time-line-item p { + text-overflow: unset !important; + overflow: visible !important; + white-space: normal !important; + display: block !important; + -webkit-line-clamp: unset !important; + -webkit-box-orient: unset !important; +} \ No newline at end of file diff --git a/src/components/CourseList/index.jsx b/src/components/CourseList/index.jsx index 9baf648..c0095b8 100644 --- a/src/components/CourseList/index.jsx +++ b/src/components/CourseList/index.jsx @@ -147,7 +147,16 @@ const CourseList = ({ className = "", onCourseClick }) => { }} style={{ cursor: 'pointer' }} > -
{course.courseName}
+{course.courseName}
{isCollapsed && (
企业内推岗位库
+
+
+ 企业内推岗位库
+
内推岗位面试
+
+
+ 岗位面试状态
+
{item.name}
-- {contentItem.name} -
++ {contentItem.name} +
+
+ ) : (
+
+ )}
+
- ) : (
-
- )}
- 面试模拟
+
+
@@ -33,7 +37,24 @@ export default ({ onItemSelect }) => { onClick={() => handleItemClick("求职面试初体验")} style={{ cursor: "pointer" }} > -
求职面试初体验
++ 求职面试初体验 + + demo + +
未来的自己
++ 未来的自己 + + demo + +
第三次线下面试模拟
第四次线下面试模拟
-第五次线下面试模拟
-
-
{data?.title}
{pos.position}
diff --git a/src/pages/ProjectLibraryPage/index.css b/src/pages/ProjectLibraryPage/index.css index 1a89bca..53f0033 100644 --- a/src/pages/ProjectLibraryPage/index.css +++ b/src/pages/ProjectLibraryPage/index.css @@ -1,111 +1,177 @@ -.project-library-page { - width: 100%; - height: 100%; - box-sizing: border-box; - padding: 20px; - position: relative; - - .project-library-wrapper { - width: 100%; - height: 790px; - background-color: #fff; - border-radius: 8px; - box-sizing: border-box; - padding: 20px; - overflow: hidden; - display: flex; - flex-direction: column; - - .project-library-search-area { - width: 100%; - height: 36px; - - .ser-portfolio-searc { - width: 100%; - height: 36px; - border: 1px solid #2c7aff; - - span { - background-color: #fff; - } - input { - background-color: #fff; - } - } - } - .project-library-list { - overflow-y: auto; - box-sizing: border-box; - display: flex; - justify-content: flex-start; - align-items: flex-start; - flex-wrap: wrap; - padding: 20px 0; - - .project-library-item:nth-child(3n) { - margin-right: 0; - } - - .project-library-item { - flex-shrink: 0; - width: 340px; - height: 82px; - box-sizing: border-box; - padding: 15px 20px; - border-radius: 8px; - background-color: #f7f8fa; - border: 1px solid #e5e6eb; - margin-right: 20px; - margin-bottom: 20px; - overflow: hidden; - display: flex; - justify-content: flex-start; - align-items: flex-start; - flex-direction: column; - - .project-library-item-title { - width: fit-content; - max-width: 100%; - border: 1px solid #2c7aff; - background-color: #e8f3ff; - height: 20px; - border-radius: 2px; - padding: 0 8px; - box-sizing: border-box; - color: #2c7aff; - font-size: 12px; - font-weight: 600; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - - > div { - width: 100%; - height: 24px; - display: flex; - justify-content: space-between; - align-items: center; - margin-top: 5px; - - > p { - width: 80%; - height: 100%; - font-size: 16px; - font-weight: 600; - color: #1d2129; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - > span { - cursor: pointer; - font-size: 12px; - font-weight: 400; - color: #2c7aff; - } - } - } - } - } -} +.project-library-page { + width: 100%; + height: 100%; + box-sizing: border-box; + padding: 20px; + position: relative; + + .project-library-wrapper { + width: 1120px; + /* height: 790px; */ + background-color: #fff; + border-radius: 8px; + box-sizing: border-box; + padding: 20px; + overflow: hidden; + + .project-library-title { + width: 100%; + height: 42px; + font-size: 20px; + font-weight: 600; + line-height: 30px; + margin-bottom: 20px; + color: #1d2129; + flex-shrink: 0; + position: relative; + border-bottom: 1px solid #e5e6eb; + padding-bottom: 10px; + + &::after { + content: ""; + position: absolute; + left: 20px; + bottom: 10px; + width: 32px; + height: 6px; + background-image: url("@/assets/images/Common/title_icon.png"); + background-size: contain; + background-repeat: no-repeat; + } + } + + .project-library-search-area { + width: 100%; + height: 36px; + + .ser-portfolio-searc { + width: 100%; + height: 36px; + border: 1px solid #2c7aff; + + span { + background-color: #fff; + } + input { + background-color: #fff; + } + } + } + .project-library-list { + width: 100%; + overflow-y: auto; + box-sizing: border-box; + display: flex; + justify-content: flex-start; + align-items: flex-start; + flex-wrap: wrap; + padding: 20px 0; + + .project-library-item:nth-child(3n) { + margin-right: 0; + } + + .project-library-item { + flex-shrink: 0; + width: 340px; + height: 100px; + box-sizing: border-box; + padding: 15px 20px; + border-radius: 8px; + background-color: #e5f1ff; + background-image: url("@/assets/images/CompanyJobsPage/jobs_page_left_list_item_bg.png"); + background-size: 100% 100%; + background-repeat: no-repeat; + border: 1px solid #e5e6eb; + margin-right: 20px; + margin-bottom: 20px; + position: relative; + overflow: hidden; + + transition: all 0.3s ease; + cursor: pointer; + + &:hover { + border-color: #4080ff; + box-shadow: 0 4px 12px rgba(44, 127, 255, 0.2); + transform: translateY(-2px); + background-color: #f0f7ff; + } + + display: flex; + justify-content: flex-start; + align-items: flex-start; + flex-direction: column; + + .project-library-item-title { + display: inline-block; + border: 1px solid #4080ff; + background-color: #ffffff; + min-height: 22px; + height: 22px; + border-radius: 3px; + padding: 0 10px; + box-sizing: border-box; + color: #4080ff; + font-size: 12px; + font-weight: 500; + line-height: 22px; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin: 0 0 4px 0; + width: fit-content; + } + + > div { + width: 100%; + height: 48px; + display: flex; + justify-content: space-between; + align-items: center; + margin-top: 5px; + + > p { + width: 80%; + font-size: 16px; + font-weight: 600; + color: #1d2129; + line-height: 1.5; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; + } + > span { + cursor: pointer; + font-size: 12px; + font-weight: 400; + color: #2c7aff; + flex-shrink: 0; + margin-left: 10px; + align-self: center; + } + } + } + } + } + + .my-project-library { + margin-top: 20px; + + .project-library-empty { + width: 100%; + height: 200px; + display: flex; + justify-content: center; + align-items: center; + + p { + color: #86909c; + font-size: 14px; + } + } + } +} diff --git a/src/pages/ProjectLibraryPage/index.css.bak b/src/pages/ProjectLibraryPage/index.css.bak new file mode 100644 index 0000000..1a89bca --- /dev/null +++ b/src/pages/ProjectLibraryPage/index.css.bak @@ -0,0 +1,111 @@ +.project-library-page { + width: 100%; + height: 100%; + box-sizing: border-box; + padding: 20px; + position: relative; + + .project-library-wrapper { + width: 100%; + height: 790px; + background-color: #fff; + border-radius: 8px; + box-sizing: border-box; + padding: 20px; + overflow: hidden; + display: flex; + flex-direction: column; + + .project-library-search-area { + width: 100%; + height: 36px; + + .ser-portfolio-searc { + width: 100%; + height: 36px; + border: 1px solid #2c7aff; + + span { + background-color: #fff; + } + input { + background-color: #fff; + } + } + } + .project-library-list { + overflow-y: auto; + box-sizing: border-box; + display: flex; + justify-content: flex-start; + align-items: flex-start; + flex-wrap: wrap; + padding: 20px 0; + + .project-library-item:nth-child(3n) { + margin-right: 0; + } + + .project-library-item { + flex-shrink: 0; + width: 340px; + height: 82px; + box-sizing: border-box; + padding: 15px 20px; + border-radius: 8px; + background-color: #f7f8fa; + border: 1px solid #e5e6eb; + margin-right: 20px; + margin-bottom: 20px; + overflow: hidden; + display: flex; + justify-content: flex-start; + align-items: flex-start; + flex-direction: column; + + .project-library-item-title { + width: fit-content; + max-width: 100%; + border: 1px solid #2c7aff; + background-color: #e8f3ff; + height: 20px; + border-radius: 2px; + padding: 0 8px; + box-sizing: border-box; + color: #2c7aff; + font-size: 12px; + font-weight: 600; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + > div { + width: 100%; + height: 24px; + display: flex; + justify-content: space-between; + align-items: center; + margin-top: 5px; + + > p { + width: 80%; + height: 100%; + font-size: 16px; + font-weight: 600; + color: #1d2129; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + > span { + cursor: pointer; + font-size: 12px; + font-weight: 400; + color: #2c7aff; + } + } + } + } + } +} diff --git a/src/pages/ProjectLibraryPage/index.jsx b/src/pages/ProjectLibraryPage/index.jsx index 81ffacd..c2e1c4d 100644 --- a/src/pages/ProjectLibraryPage/index.jsx +++ b/src/pages/ProjectLibraryPage/index.jsx @@ -1,105 +1,101 @@ -import { useState } from "react"; -import { Input } from "@arco-design/web-react"; -import toast from "@/components/Toast"; -import InfiniteScroll from "@/components/InfiniteScroll"; -import ProjectCasesModal from "./components/ProjectCasesModal"; -import { getProjectsList, getProjectsdetail } from "@/services/projectLibrary"; -import "./index.css"; - -const InputSearch = Input.Search; -const PAGE_SIZE = 10; - -const ProjectLibrary = () => { - const [modalData, setModalData] = useState(undefined); - const [projectList, setProjectList] = useState([]); - const [projectCasesModalVisible, setProjectCasesModalVisible] = - useState(false); - const [page, setPage] = useState(1); - const [hasMore, setHasMore] = useState(true); - - const onSearch = (value) => { - setProjectList([]); - setHasMore(true); - setPage(1); - fetchProjects(value, 1); - }; - - const handleProjectClick = async (item) => { - if (item?.id) { - const res = await getProjectsdetail(item.id); - if (res.success) { - setModalData(res.data); - setProjectCasesModalVisible(true); - } else { - toast.error(res.message); - } - } else { - toast.error("加载数据失败,请刷新重试"); - } - }; - - const handleCloseModal = () => { - setProjectCasesModalVisible(false); - setModalData(undefined); - }; - - const fetchProjects = async (searchValue = "", pageNum) => { - try { - const res = await getProjectsList({ - search: searchValue, - page: pageNum ?? page, - pageSize: PAGE_SIZE, - }); - if (res.success) { - setProjectList((prevList) => { - const newList = [...prevList, ...res.data]; - if (res.total === newList?.length) { - setHasMore(false); - } else { - setPage((prevPage) => prevPage + 1); - } - return newList; - }); - } - } catch (error) { - console.error("Failed to fetch projects:", error); - } - }; - - return ( -{item.description}
-{item.name}
- handleProjectClick(item)}>详情 > -文旅班级项目库
+{item.description}
+{item.name}
+ handleProjectClick(item)}>详情 > +我完成的项目库
+暂无项目
+简历与面试题
{position.title}
- 详情 > -岗位名称:{position.title}
+ › +{question.question}
))} diff --git a/src/routes/index.jsx b/src/routes/index.jsx index 4dbea90..a2bc0a8 100644 --- a/src/routes/index.jsx +++ b/src/routes/index.jsx @@ -93,7 +93,7 @@ export default [ }, { path: "/homework", - name: "课后作业", + name: "课堂作业", element: