更新12个教务系统并优化项目大小

主要更新:
- 更新所有12个产业的教务系统数据和功能
- 删除所有 node_modules 文件夹(节省3.7GB)
- 删除所有 .yoyo 缓存文件夹(节省1.2GB)
- 删除所有 dist 构建文件(节省55MB)

项目优化:
- 项目大小从 8.1GB 减少到 3.2GB(节省60%空间)
- 保留完整的源代码和配置文件
- .gitignore 已配置,防止再次提交大文件

启动脚本:
- start-industry.sh/bat/ps1 脚本会自动检测并安装依赖
- 首次启动时自动运行 npm install
- 支持单个或批量启动产业系统

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
KQL
2025-10-17 14:36:25 +08:00
parent 60921dbfb9
commit 38350dca36
792 changed files with 470498 additions and 11589 deletions

View File

@@ -12,7 +12,7 @@ with open('/Users/apple/Documents/cursor/教务系统/frontend_大健康/网页
mentor_avatars = {
"李奇": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dDIg60Tg.png",
"宋积极(配方师gigi)": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5E4Al.png",
"吴兰": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png",
"吴兰": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg",
# 其他导师可以添加更多映射
}

View File

@@ -13,7 +13,7 @@ const healthTeacherData = updateTeacherCourses({
name: "吴兰",
introduction: "拥有13年营养科学研究与产品开发经验专注于功能食品与营养干预产品的产业化转化。累计参与30余种功能性食品开发包括益生菌饮料、低GI代餐、抗氧化复配胶囊等部分产品已实现出口年均销售额超1.2亿元。主导研发的“定制化营养补剂智能配方系统”获得两项发明专利授权,在国内首创以“微量营养素摄入+个体代谢差异”为核心算法模型实现个性化营养配方输出。其服务过的企业中超60%在产品升级后实现营收增长超过30%。参与编制多项《保健食品成分使用技术指南》地方标准,对国内营养标签合规、功能声称审核、产品备案有深入理解,是科技成果从实验室走向终端消费市场的中坚力量。",
specialties: ["13年功能食品研发专家", "产品年销1.2亿元", "个性化营养算法首创", "60%企业营收增30%"],
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png",
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg",
type: "复合课导师",
verticalDirection: "健康管理",
courses: []

View File

@@ -47,7 +47,7 @@ new_teacher_data = '''// 导师信息数据
name: "吴兰",
introduction: "拥有13年营养科学研究与产品开发经验专注于功能食品与营养干预产品的产业化转化。累计参与30余种功能性食品开发包括益生菌饮料、低GI代餐、抗氧化复配胶囊等部分产品已实现出口年均销售额超1.2亿元。主导研发的"定制化营养补剂智能配方系统"获得两项发明专利授权,在国内首创以"微量营养素摄入+个体代谢差异"为核心算法模型实现个性化营养配方输出。其服务过的企业中超60%在产品升级后实现营收增长超过30%。参与编制多项《保健食品成分使用技术指南》地方标准,对国内营养标签合规、功能声称审核、产品备案有深入理解,是科技成果从实验室走向终端消费市场的中坚力量。",
specialties: ["13年功能食品研发专家", "产品年销1.2亿元", "个性化营养算法首创", "60%企业营收增30%"],
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png",
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg",
type: "复合课导师",
verticalDirection: "健康管理",
courses: []

View File

@@ -54,14 +54,9 @@ const CourseList = forwardRef(({ className = "", onCourseClick }, ref) => {
activeKey = `vertical-${i + 1}`;
}
// 展开对应的单元
setActiveKeys(prevKeys => {
if (!prevKeys.includes(activeKey)) {
console.log('Adding activeKey:', activeKey, 'to existing keys:', prevKeys);
return [...prevKeys, activeKey];
}
return prevKeys;
});
// 展开对应的单元(同时收起其他单元)
setActiveKeys([activeKey]);
console.log('Setting activeKey:', activeKey, '(closing others)');
// 滚动到对应的单元位置
setTimeout(() => {
@@ -123,14 +118,9 @@ const CourseList = forwardRef(({ className = "", onCourseClick }, ref) => {
activeKey = `vertical-${i + 1}`;
}
// 如果单元未展开,则添加到 activeKeys 中
setActiveKeys(prevKeys => {
if (!prevKeys.includes(activeKey)) {
console.log('Adding activeKey:', activeKey, 'to existing keys:', prevKeys);
return [...prevKeys, activeKey];
}
return prevKeys;
});
// 展开对应的单元(同时收起其他单元)
setActiveKeys([activeKey]);
console.log('Setting activeKey:', activeKey, '(closing others)');
// 设置选中的课程
console.log('Setting selectedCourseId to:', course.courseId);
@@ -301,17 +291,16 @@ const CourseList = forwardRef(({ className = "", onCourseClick }, ref) => {
// 切换单个面板的展开/收起状态
setActiveKeys(prevKeys => {
const keyStr = String(keys);
const newKeys = [...prevKeys];
const index = newKeys.indexOf(keyStr);
const index = prevKeys.indexOf(keyStr);
if (index > -1) {
// 如果已展开,则收起
newKeys.splice(index, 1);
console.log('Closing key:', keyStr);
return [];
} else {
// 如果已收起,则展开
newKeys.push(keyStr);
// 如果已收起,则展开(同时收起其他所有单元)
console.log('Opening key:', keyStr, 'and closing others');
return [keyStr];
}
console.log('Toggling key:', keyStr, 'New activeKeys:', newKeys);
return newKeys;
});
} else if (Array.isArray(keys)) {
// 直接设置新的展开状态
@@ -437,16 +426,9 @@ const CourseList = forwardRef(({ className = "", onCourseClick }, ref) => {
<div
className={`time-line-item ${getCourseStatus(course)} ${selectedCourseId === course.courseId ? 'selected' : ''} ${course.canPreview ? 'has-preview' : ''}`}
onClick={() => {
// 设置选中状态和触发课程点击事件
// 设置选中状态和触发课程点击事件
setSelectedCourseId(course.courseId);
onCourseClick && onCourseClick({ ...course, unitName: unit.unitName, courseType: 'vertical' });
// 如果是可试看课程,延迟打开新窗口
if (course.canPreview && course.previewUrl) {
setTimeout(() => {
window.open(course.previewUrl, '_blank');
}, 100);
}
}}
style={{ cursor: 'pointer' }}
>

View File

@@ -157,12 +157,12 @@
/* 吴兰导师头像特殊调整 - 缩小图片 */
.teacher-avatar.teacher-wulan {
img {
width: 120% !important;
height: 120% !important;
width: 150% !important;
height: 150% !important;
object-fit: cover !important;
object-position: center center !important;
top: 0% !important;
left: 50% !important;
top: -10% !important;
left: 48% !important;
transform: translateX(-50%) !important;
}
}
@@ -179,7 +179,20 @@
transform: translateX(-50%) !important;
}
}
/* 赵雪宁导师头像特殊调整 - 向下移动 */
.teacher-avatar.teacher-zhaoxuening {
img {
width: 150% !important;
height: 150% !important;
object-position: center 50% !important;
top: 0% !important;
left: 50% !important;
transform: translateX(-50%) !important;
}
}
.avatar-wrapper {
position: relative;
width: 64px;

View File

@@ -1,19 +1,77 @@
import { useState, useRef, useEffect } from "react";
import { Avatar, Tooltip } from "@arco-design/web-react";
import Locked from "@/components/Locked";
import logoImg from "@/assets/images/Sidebar/logo.png";
import "./index.css";
export default ({ className = "", isLock = false, selectedCourse, teacherData, unitPosters, isPublicCourse = false, backgroundImage }) => {
const [isFullscreen, setIsFullscreen] = useState(false);
const iframeContainerRef = useRef(null);
const handleClickBtn = (item) => {
console.log(item);
};
// 默认导师信息 - 魏立慧老师(用于求职策略定制页面)
// 处理全屏切换
const handleFullscreen = () => {
const container = iframeContainerRef.current;
if (!container) return;
if (!isFullscreen) {
// 进入全屏
if (container.requestFullscreen) {
container.requestFullscreen();
} else if (container.webkitRequestFullscreen) {
container.webkitRequestFullscreen();
} else if (container.mozRequestFullScreen) {
container.mozRequestFullScreen();
} else if (container.msRequestFullscreen) {
container.msRequestFullscreen();
}
} else {
// 退出全屏
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
}
};
// 监听全屏状态变化
useEffect(() => {
const handleFullscreenChange = () => {
setIsFullscreen(
document.fullscreenElement === iframeContainerRef.current ||
document.webkitFullscreenElement === iframeContainerRef.current ||
document.mozFullScreenElement === iframeContainerRef.current ||
document.msFullscreenElement === iframeContainerRef.current
);
};
document.addEventListener('fullscreenchange', handleFullscreenChange);
document.addEventListener('webkitfullscreenchange', handleFullscreenChange);
document.addEventListener('mozfullscreenchange', handleFullscreenChange);
document.addEventListener('MSFullscreenChange', handleFullscreenChange);
return () => {
document.removeEventListener('fullscreenchange', handleFullscreenChange);
document.removeEventListener('webkitfullscreenchange', handleFullscreenChange);
document.removeEventListener('mozfullscreenchange', handleFullscreenChange);
document.removeEventListener('MSFullscreenChange', handleFullscreenChange);
};
}, []);
// 默认导师信息 - 赵雪宁老师(用于求职策略定制页面)
const defaultTeacher = {
name: "魏立慧",
introduction: "企业资深一线HR专注于为求职者提供一对一的个性化指导。通过真实招聘视角,深入剖析个人优势与短板传授面试技巧、规划职业定位与发展路径,帮助学生快速提升求职竞争力。求职策略以实用落地为核心,注重互动交流与角色定位,让学员在轻松氛围中获得直击痛点的求职策略。",
specialties: ["深谙用人逻辑", "擅长挖掘优势", "沟通真诚自然", "点评直击要害"],
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuUpSO4gUtJz.png",
name: "赵雪宁",
introduction: "牵头集团人力资源信息化转型主导上线一体化HR SaaS平台覆盖招聘、培训、绩效、薪酬及员工关系五大模块实现全流程数据贯通。通过引入人岗匹配算法与流失预警模型关键岗位招聘周期缩短28%内部人才晋升率由12%提升至36%员工流失率三年下降40%。同时建立人力资本ROI指标体系高层决策实现数据可视化直接支撑集团多元化战略扩张人均产出提升20%整体人力成本率下降2个百分点。除企业实践外作为一线资深HR导师还开展一对一的个性化指导,结合真实招聘视角为学员剖析优势与短板传授简历优化、面试技巧及职业路径规划,帮助快速提升求职竞争力并获得针对性的发展建议。",
specialties: ["招聘视角剖析", "职业定位规划", "互动交流教学", "个人优势挖掘"],
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuXLZZ9QdQ6q.png",
type: "企业资深HR"
};
@@ -22,12 +80,12 @@ export default ({ className = "", isLock = false, selectedCourse, teacherData, u
courseName: "1V1 求职规划",
date: "2024-08-25",
unitName: "1V1 规划阶段",
teacherName: "魏立慧",
teacherName: "赵雪宁",
current: false
};
// 获取当前课程的导师信息
// 如果是锁定状态(求职策略页面),始终显示魏立慧老师
// 如果是锁定状态(求职策略页面),始终显示赵雪宁老师
const currentTeacher = isLock
? defaultTeacher
: (selectedCourse && teacherData && teacherData[selectedCourse.teacherName]
@@ -38,7 +96,7 @@ export default ({ className = "", isLock = false, selectedCourse, teacherData, u
const displayCourse = isLock ? oneOnOneCourse : selectedCourse;
// 需要调整头像位置的导师
const needsAdjustment = currentTeacher && ["赵志强", "魏立慧", "郭建辉", "孙应战"].includes(currentTeacher.name);
const needsAdjustment = currentTeacher && ["赵志强", "赵雪宁", "郭建辉", "孙应战"].includes(currentTeacher.name);
// 根据导师设置不同的背景色 - 这些颜色提取自实际的PNG图片背景
const getAvatarBackground = (name) => {
@@ -47,7 +105,7 @@ export default ({ className = "", isLock = false, selectedCourse, teacherData, u
"郭建辉": "#E0D9D3", // 米灰色
"赵志强": "#E3E2E0", // 浅灰色
"孙应战": "#FFFFFF", // 白色
"魏立慧": "#DCD8D4", // 灰褐色
"赵雪宁": "#DCD8D4", // 灰褐色
"李奇": "#E8E8E8" // 浅灰色 - 匹配头像背景
};
return backgrounds[name] || "#E3E2E0";
@@ -98,20 +156,87 @@ export default ({ className = "", isLock = false, selectedCourse, teacherData, u
</div>
<div className="courses-video-player-video">
{selectedCourse ? (
/* 选中课程时显示模糊的海报图和锁定状态 */
/* 选中课程时如果是可试看课程则显示iframe否则显示锁定状态 */
selectedCourse.canPreview && selectedCourse.previewUrl ? (
/* 显示iframe内嵌课件 */
<div
ref={iframeContainerRef}
style={{
position: 'relative',
width: '100%',
height: '100%',
backgroundColor: '#000'
}}
>
<iframe
src={selectedCourse.previewUrl}
style={{
width: '100%',
height: '100%',
border: 'none',
borderRadius: isFullscreen ? '0' : '8px',
zoom: isFullscreen ? 1 : 0.5
}}
title={selectedCourse.courseName}
allowFullScreen
/>
{/* 全屏按钮 */}
<button
onClick={handleFullscreen}
style={{
position: 'absolute',
top: '16px',
right: '16px',
width: '40px',
height: '40px',
borderRadius: '8px',
border: 'none',
backgroundColor: 'rgba(0, 0, 0, 0.6)',
color: '#fff',
cursor: 'pointer',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontSize: '20px',
transition: 'all 0.3s',
zIndex: 10
}}
onMouseEnter={(e) => {
e.currentTarget.style.backgroundColor = 'rgba(0, 0, 0, 0.8)';
}}
onMouseLeave={(e) => {
e.currentTarget.style.backgroundColor = 'rgba(0, 0, 0, 0.6)';
}}
title={isFullscreen ? "退出全屏" : "全屏"}
>
{isFullscreen ? (
// 退出全屏图标
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
<path d="M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3" />
</svg>
) : (
// 全屏图标
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
<path d="M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3" />
</svg>
)}
</button>
</div>
) : (
/* 显示模糊的海报图和锁定状态 */
<div style={{ position: 'relative', width: '100%', height: '100%' }}>
<img
<img
src={(() => {
const posterUrl = selectedCourse?.unitPoster || unitPosters?.[unitName] || unitPosters?.["终生学习系统课"];
console.log('CoursesVideoPlayer 背景图片URL:', posterUrl);
console.log('selectedCourse.unitPoster:', selectedCourse?.unitPoster);
console.log('unitName:', unitName);
return posterUrl;
})()}
})()}
alt={unitName}
style={{
width: '100%',
height: '100%',
style={{
width: '100%',
height: '100%',
objectFit: 'cover',
filter: 'blur(10px)'
}}
@@ -126,7 +251,7 @@ export default ({ className = "", isLock = false, selectedCourse, teacherData, u
alignItems: 'center',
gap: '16px'
}}>
<img
<img
src="https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_icon/recuVOrz2GnJdK.png"
alt="lock"
style={{ width: '280px', height: '280px' }}
@@ -144,6 +269,7 @@ export default ({ className = "", isLock = false, selectedCourse, teacherData, u
</span>
</div>
</div>
)
) : (
/* 未选中课程时显示白底和logo */
<div style={{
@@ -185,8 +311,8 @@ export default ({ className = "", isLock = false, selectedCourse, teacherData, u
{/* 直播观众信息 */}
<div className="courses-video-player-audience-info">
<div className="avatar-wrapper">
<Avatar
className={`teacher-avatar ${needsAdjustment ? 'avatar-adjust' : ''} ${currentTeacher?.name === '刘杰' ? 'teacher-liujie' : ''} ${currentTeacher?.name === '李奇' ? 'teacher-liqi' : ''} ${currentTeacher?.name === '孙应战' ? 'teacher-sunyingzhan' : ''} ${currentTeacher?.name === '吴兰' ? 'teacher-wulan' : ''} ${currentTeacher?.name === '宋积极(配方师gigi)' ? 'teacher-songjiji' : ''} ${isLock ? 'teacher-strategy' : ''}`}
<Avatar
className={`teacher-avatar ${needsAdjustment ? 'avatar-adjust' : ''} ${currentTeacher?.name === '刘杰' ? 'teacher-liujie' : ''} ${currentTeacher?.name === '李奇' ? 'teacher-liqi' : ''} ${currentTeacher?.name === '孙应战' ? 'teacher-sunyingzhan' : ''} ${currentTeacher?.name === '吴兰' ? 'teacher-wulan' : ''} ${currentTeacher?.name === '宋积极(配方师gigi)' ? 'teacher-songjiji' : ''} ${currentTeacher?.name === '赵雪宁' ? 'teacher-zhaoxuening' : ''} ${isLock ? 'teacher-strategy' : ''}`}
style={{ backgroundColor: getAvatarBackground(currentTeacher?.name) }}
>
<img

View File

@@ -105,14 +105,31 @@ const Sidebar = ({ isCollapsed, setIsCollapsed }) => {
<IconFont
className="sidebar-menu-icon"
src={
location.pathname === j.path ||
location.pathname === j.path ||
(j.path === '/company-jobs' && location.pathname === '/company-jobs-list') ||
(j.path === '/job-strategy' && location.pathname === '/job-strategy-detail')
? j.active
? j.active
: j.default
}
/>
<span className="sidebar-menu-text">{j.name}</span>
{j.path === '/agent' && (
<span style={{
marginLeft: '8px',
padding: '2px 8px',
background: 'linear-gradient(135deg, #5DADE2 0%, #2874A6 100%)',
borderRadius: '12px',
color: '#ffffff',
fontSize: '12px',
fontWeight: 'bold',
fontStyle: 'italic',
letterSpacing: '1px',
textTransform: 'uppercase',
boxShadow: '0 2px 4px rgba(0,0,0,0.1)'
}}>
demo
</span>
)}
</li>
))}
</div>

View File

@@ -2621,7 +2621,7 @@
"上课地点": "线上",
"课程状态": "",
"❌课程状态": "有课",
"❌导师姓名查询": "魏立慧",
"❌导师姓名查询": "赵雪宁",
"❌查询单元名称": ""
},
{
@@ -6071,7 +6071,7 @@
"上课地点": "线下",
"课程状态": "",
"❌课程状态": "有课",
"❌导师姓名查询": "魏立慧",
"❌导师姓名查询": "赵雪宁",
"❌查询单元名称": ""
},
{
@@ -7106,7 +7106,7 @@
"上课地点": "线下",
"课程状态": "",
"❌课程状态": "有课",
"❌导师姓名查询": "魏立慧",
"❌导师姓名查询": "赵雪宁",
"❌查询单元名称": ""
},
{
@@ -7226,7 +7226,7 @@
"上课地点": "线下",
"课程状态": "",
"❌课程状态": "有课",
"❌导师姓名查询": "魏立慧",
"❌导师姓名查询": "赵雪宁",
"❌查询单元名称": ""
},
{

View File

@@ -18,7 +18,7 @@ const expertSupportData = {
"content": "应用主要集中在三个方面。第一是临床辅助AI 能够在医学影像识别、病理诊断和药物研发中发挥重要作用例如快速筛查X光片中的病灶第二是健康管理通过可穿戴设备和智能应用实时监测血压、血糖、心率等指标并用AI算法预测潜在风险第三是公共健康AI 可以帮助流行病趋势预测、医疗资源调度和个体化预防方案设计。这些场景表明AI已不再是实验室里的技术而是逐渐嵌入到大健康产业的日常运作中。",
"mentor": "吴兰老师",
"time": "2023/9/12 11:04",
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png"
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg"
},
{
"type": "user",
@@ -30,7 +30,7 @@ const expertSupportData = {
"content": "对患者而言AI 能缩短就诊等待时间提高诊断准确率让个性化治疗方案更容易实现比如基于基因数据的精准用药推荐对健康管理者和医生而言AI 能减轻重复性工作压力把精力更多放在复杂病例和人与人沟通上。同时在公共健康层面AI 能帮助管理者更高效地分配医疗资源,例如在疫情期间预测病床需求,从而提升整个医疗体系的韧性和响应速度。",
"mentor": "吴兰老师",
"time": "2023/9/12 19:56",
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png"
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg"
}
]
},
@@ -105,7 +105,7 @@ const expertSupportData = {
"content": "因为大健康的核心理念就是“防重于治”。随着人口老龄化和慢性病高发单靠治疗已经不足以应对日益增长的健康需求和医疗支出。研究表明超过70%的慢性病是可以通过生活方式干预和早期预防避免或延缓的。如果能够在源头上控制危险因素,比如不良饮食、缺乏运动、长期压力,就能大幅降低患病风险。对社会而言,疾病预防能减少医疗资源占用和医保压力;对个人而言,则能提升生活质量、延长健康寿命,因此它是大健康产业的基础和前提。",
"mentor": "吴兰老师",
"time": "2024/5/19 11:26",
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png"
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg"
},
{
"type": "user",
@@ -117,7 +117,7 @@ const expertSupportData = {
"content": "通常分为三级预防。一级预防是从源头控制疾病发生,比如健康教育、接种疫苗、改善饮食和运动习惯;二级预防是早发现、早诊断、早治疗,典型方式有健康体检、疾病筛查、慢病早期干预;三级预防是减少疾病并发症和残疾,帮助患者康复和提高生活质量,比如康复训练、长期护理等。这三级预防环环相扣,体现了大健康产业全周期、全人群的预防理念。",
"mentor": "吴兰老师",
"time": "2024/5/19 20:38",
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png"
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg"
},
{
"type": "user",
@@ -129,7 +129,7 @@ const expertSupportData = {
"content": "疾病预防方法既包括医学手段,也包括生活方式干预。医学手段方面,比如通过疫苗接种控制传染病的传播,通过基因检测发现易感人群并采取早期干预;生活方式干预则包括均衡饮食、规律运动、控制体重、戒烟限酒、保持良好作息和心理健康管理。同时,定期体检和针对高危人群的专项筛查(如肿瘤标志物检测、心血管风险评估)也非常重要。大健康产业正是通过医疗机构、体检中心、健康管理平台和数字化工具,把这些措施系统化、常态化。",
"mentor": "吴兰老师",
"time": "2024/5/19 23:09",
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png"
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg"
}
]
},
@@ -192,7 +192,7 @@ const expertSupportData = {
"content": "大健康产业的就业前景可以说是长期向好的。因为人口老龄化、慢性病高发以及人们健康消费意识增强使得社会对健康服务的需求不断增加。与传统医疗相比大健康覆盖了预防、诊疗、康复、养老、养生、健康管理等全链条所以就业岗位不仅局限在医院和诊所还扩展到体检中心、康养机构、健康保险公司、互联网医疗平台等。随着国家战略层面提出“健康中国2030”相关政策也在持续扶持这意味着未来10—20年大健康都会保持高速增长岗位需求稳定且多元化。",
"mentor": "吴兰老师",
"time": "2024/9/9 18:06",
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png"
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg"
},
{
"type": "user",
@@ -204,7 +204,7 @@ const expertSupportData = {
"content": "一方面需要具备专业能力,比如医学、护理、康复、营养学、心理学等相关知识,这是从业的基础;另一方面需要跨界能力,尤其是对信息化和数字化工具的理解与应用能力,例如健康大数据分析、智能穿戴设备应用、远程医疗平台的操作。除此之外,沟通与服务意识也非常重要,因为大健康服务对象是人本身,良好的同理心和沟通技巧会直接影响服务效果和职业发展。综合来说,大健康行业既要“硬实力”(专业知识、技能),也要“软实力”(沟通、服务与跨界思维)。",
"mentor": "吴兰老师",
"time": "2024/9/10 12:08",
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png"
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg"
}
]
},
@@ -246,7 +246,7 @@ const expertSupportData = {
"content": "因为每个人的身体状况、生活习惯和健康目标都不一样,统一的训练模式往往难以达到理想效果,甚至可能带来运动损伤。个性化运动计划是基于个体的体质、年龄、性别、既往病史、体能水平和目标需求来科学制定的,从而让运动过程更安全、更高效。例如,同样是“减脂”,年轻人可以安排高强度间歇训练,而中老年人则更适合低冲击有氧加力量训练。正是这种针对性,使个性化运动计划在大健康产业中越来越受到重视。",
"mentor": "吴兰老师",
"time": "2024/10/29 16:50",
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png"
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg"
},
{
"type": "user",
@@ -258,7 +258,7 @@ const expertSupportData = {
"content": "制定计划时需要综合评估多个维度。首先是健康评估,包括心肺功能、血压、体重指数、血糖等关键指标;其次是运动基础,了解肌肉力量、柔韧性和运动习惯;再者是目标设定,比如减脂、增肌、康复或提升耐力;最后是生活方式,包括饮食结构、作息规律和心理状态。通过全面的数据采集,教练或健康管理师能够给出科学的运动处方,确保既能达成目标,又能避免超负荷训练带来的风险。",
"mentor": "吴兰老师",
"time": "2024/10/29 22:36",
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png"
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg"
}
]
},
@@ -279,7 +279,7 @@ const expertSupportData = {
"content": "因为心理健康问题具有高度的个体差异,同样是焦虑症,不同人的诱因、症状表现和应对方式可能完全不同。如果只依赖通用化的方案,往往难以真正解决个体的核心困扰。个体化定制的心理方案会基于个体的心理测评结果、生活习惯、社会关系和应激事件等综合信息,设计出更契合个人特征的干预方式,比如有人更适合认知行为疗法,有人则更需要冥想、运动和生活习惯的调整。这种方式能提高干预的有效性,也更容易让个体建立长久的健康行为模式。",
"mentor": "吴兰老师",
"time": "2024/11/19 18:04",
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png"
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg"
},
{
"type": "user",
@@ -291,7 +291,7 @@ const expertSupportData = {
"content": "定制的过程通常依托科学的心理测评工具、专业的心理咨询师以及数据分析技术共同完成。首先通过问卷、访谈甚至可穿戴设备收集情绪状态、睡眠质量、压力水平等数据其次由专业人员进行分析识别个体心理问题的核心因素最后在此基础上制定干预方案比如一对一咨询计划、情绪日记记录、认知行为训练甚至基于AI的情绪监测与反馈系统。随着技术的发展AI 和大数据正在成为个体化方案的重要工具,能够不断调整和优化方案,使其更贴近个人的动态变化。",
"mentor": "吴兰老师",
"time": "2024/11/20 11:07",
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png"
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg"
}
]
},
@@ -312,7 +312,7 @@ const expertSupportData = {
"content": "过去医疗更多集中在“治病”,病好了就算结束,但随着人口老龄化和慢性病的增加,人们发现光有治疗还不够,恢复生活质量才是最终目标。健康康复强调在疾病治疗之后,通过运动疗法、营养干预、心理支持和社会适应训练,让患者尽快回归正常生活。这不仅能减轻家庭和社会的负担,也能让患者在身体和心理上真正实现“全面健康”。",
"mentor": "吴兰老师",
"time": "2024/12/4 13:17",
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png"
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg"
},
{
"type": "user",
@@ -324,7 +324,7 @@ const expertSupportData = {
"content": "健康康复在我国仍处于快速发展阶段。随着“健康中国2030”战略提出康复医学和康复产业正在被政策大力推动。各地正在建设康复中心、康养社区互联网康复平台和可穿戴监测设备也在普及。不过相比欧美成熟市场我国在康复师人才储备、康复设备研发、服务体系完善度上还有差距整体处于“需求旺盛、供给不足”的阶段。",
"mentor": "吴兰老师",
"time": "2024/12/4 20:24",
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png"
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg"
}
]
},
@@ -345,7 +345,7 @@ const expertSupportData = {
"content": "大健康相关专业的毕业生可以在不同环节找到合适的工作方向。例如,在医疗机构里可以从事健康管理师、康复治疗师、临床数据分析员等岗位;在社区和企业层面,可以成为健康顾问、营养师、心理咨询师,或者进入健康保险公司做风控与理赔;同时,随着互联网医疗和智能可穿戴设备的发展,健康数据分析、远程监测和数字医疗产品设计也为年轻人提供了新兴就业机会。可以说,大健康的就业面从传统医疗延展到科技、保险、服务业,跨界机会非常丰富。",
"mentor": "吴兰老师",
"time": "2024/12/27 17:34",
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png"
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg"
},
{
"type": "user",
@@ -357,7 +357,7 @@ const expertSupportData = {
"content": " 从产业链来看,大健康就业方向大致分为几个板块:一是医疗与康复,涵盖医院、康复中心、护理机构的相关岗位;二是健康管理与服务,比如体检中心、健康咨询、企业健康管理部门;三是营养与健身,包括营养指导、运动康复、健身教练;四是养老与心理健康,涉及养老院、社区护理和心理辅导;五是健康科技与保险,如互联网医疗平台、健康大数据公司和保险机构。这些细分领域都在快速扩张,学生可以根据兴趣与技能选择适合自己的方向。",
"mentor": "吴兰老师",
"time": "2024/12/28 11:29",
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png"
"mentorAvatar": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg"
}
]
}

View File

@@ -6581,7 +6581,7 @@
"企业高管公开课": "",
"1V1 规划阶段": "1V1 求职规划",
"模拟面试实战练习阶段": "",
"导师姓名查询": "魏立慧",
"导师姓名查询": "赵雪宁",
"上课时间": "14:00~16:00",
"上课地点": "线上",
"课程状态": "已完成",
@@ -6675,7 +6675,9 @@
"上课时间": "20:00~21:00",
"上课地点": "线上",
"课程状态": "已完成",
"上课状态": "上课"
"上课状态": "上课",
"canPreview": true,
"previewUrl": "https://du9uay.github.io/health-education-web/"
},
{
"日期": "2024/9/6",
@@ -10469,7 +10471,7 @@
"企业高管公开课": "",
"1V1 规划阶段": "",
"模拟面试实战练习阶段": "面试实战",
"导师姓名查询": "魏立慧",
"导师姓名查询": "赵雪宁",
"上课时间": "15:00~16:00",
"上课地点": "线下",
"课程状态": "已完成",
@@ -11549,7 +11551,7 @@
"企业高管公开课": "",
"1V1 规划阶段": "",
"模拟面试实战练习阶段": "面试实战",
"导师姓名查询": "魏立慧",
"导师姓名查询": "赵雪宁",
"上课时间": "15:00~16:00",
"上课地点": "线下",
"课程状态": "已完成",
@@ -11585,7 +11587,7 @@
"企业高管公开课": "",
"1V1 规划阶段": "",
"模拟面试实战练习阶段": "面试实战",
"导师姓名查询": "魏立慧",
"导师姓名查询": "赵雪宁",
"上课时间": "15:00~16:00",
"上课地点": "线下",
"课程状态": "已完成",

View File

@@ -6221,7 +6221,7 @@
"企业高管公开课": "",
"1V1 规划阶段": "1V1 求职规划",
"模拟面试实战练习阶段": "",
"导师姓名查询": "魏立慧",
"导师姓名查询": "赵雪宁",
"上课时间": "14:00~16:00",
"上课地点": "线上",
"课程状态": "已完成",
@@ -10343,7 +10343,7 @@
"企业高管公开课": "",
"1V1 规划阶段": "",
"模拟面试实战练习阶段": "面试实战",
"导师姓名查询": "魏立慧",
"导师姓名查询": "赵雪宁",
"上课时间": "15:00~16:00",
"上课地点": "线下",
"课程状态": "已完成",
@@ -12017,7 +12017,7 @@
"企业高管公开课": "",
"1V1 规划阶段": "",
"模拟面试实战练习阶段": "面试实战",
"导师姓名查询": "魏立慧",
"导师姓名查询": "赵雪宁",
"上课时间": "15:00~16:00",
"上课地点": "线下",
"课程状态": "已完成",
@@ -12089,7 +12089,7 @@
"企业高管公开课": "",
"1V1 规划阶段": "",
"模拟面试实战练习阶段": "面试实战",
"导师姓名查询": "魏立慧",
"导师姓名查询": "赵雪宁",
"上课时间": "15:00~16:00",
"上课地点": "线下",
"课程状态": "已完成",

View File

@@ -1,7 +1,7 @@
// 导入JSON数据
import companyJobsData from './companyJobs.json';
import companyJobsNewData from './companyJobsNew.json';
import interviewStatusData from './interviewStatus.json';
import interviewStatusData from '../../网页未导入数据/岗位面试状态(全产业).json';
import calendarCoursesData from './healthCalendar.json';
import healthUnitData from '../../网页未导入数据/大健康产业/大健康单元背景.json';
// import aiCoursesData from '../../网页未导入数据/文旅产业/ai课程表.json'; // 已删除,使用智能制造自己的数据
@@ -13,17 +13,23 @@ const teacherAvatars = {
"郭建辉": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuUpJBMNLZL5.png",
"赵志强": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuUpJC2oLPpC.png",
"孙应战": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuUpJCc6qecx.jpg",
"魏立慧": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuUpSO4gUtJz.png",
"赵雪宁": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuXLZZ9QdQ6q.png",
"李毅峰": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuVPz0WRmxCK.jpeg",
"周伏波": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuVU7Gi9YxSN.jpg",
"范雪娇": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuVU7JsHHDNZ.jpeg",
"李奇": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW8gePZvRn6.jpg"
"李奇": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW8gePZvRn6.jpg",
"宋积极(配方师gigi)": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5E4Al.png",
"吴兰": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg"
};
// 转换函数将JSON数据转换为页面所需格式
// 转换面试状态数据
const transformInterviewStatus = (statusData, jobsData) => {
return statusData
// 过滤出大健康产业的数据
const healthData = statusData.filter(status => status["所属产业"] === "大健康");
return healthData
.filter(status => status["流程时间"]) // 过滤掉没有流程时间的记录
.map((status, index) => {
// 从岗位数据中查找匹配的岗位详情
const matchedJob = jobsData.find(job =>
@@ -35,11 +41,10 @@ const transformInterviewStatus = (statusData, jobsData) => {
let interviewDate;
// 提取日期时间部分(冒号后面的内容)
const stageDateMatch = status["阶段日期"].match(/(.+)/);
const dateTimeStr = stageDateMatch ? stageDateMatch[1] : status["阶段日期"];
const dateTimeStr = status["流程时间"] || "";
// 解析日期时间 "2025/8/13 9:38"
const dateTimeMatch = dateTimeStr.match(/(\d{4})\/(\d{1,2})\/(\d{1,2})\s+(\d{1,2}):(\d{1,2})/);
const dateTimeMatch = dateTimeStr ? dateTimeStr.match(/(\d{4})\/(\d{1,2})\/(\d{1,2})\s+(\d{1,2}):(\d{1,2})/) : null;
if (dateTimeMatch) {
const [_, year, month, day, hour, minute] = dateTimeMatch;
@@ -53,28 +58,28 @@ const transformInterviewStatus = (statusData, jobsData) => {
formattedDate = `${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')} ${hour.padStart(2, '0')}:${minute.padStart(2, '0')}`;
} else {
// 如果无法解析,使用原始文本和当前时间
formattedDate = status["阶段日期"];
formattedDate = status["流程时间"] || "未知时间";
interviewDate = new Date();
}
// 提取流程标签
const stageLabel = status["阶段日期"].split('')[0] || '未知阶段';
// 流程标签直接使用新数据结构中的字段
const stageLabel = status["流程标签"] || '未知阶段';
// 根据面试状态确定状态码和文本
// 根据内容确定状态码和文本
let statusCode = 'PENDING';
let statusText = status["面试状态"];
let statusText = status["内容"] || "";
if (status["面试状态"].includes("Offer已接收")) {
if (statusText.includes("Offer已接收")) {
statusCode = 'OFFER';
} else if (status["面试状态"].includes("Offer已拒绝")) {
} else if (statusText.includes("Offer已拒绝")) {
statusCode = 'REJECTED_OFFER';
} else if (status["面试状态"].includes("未通过")) {
} else if (statusText.includes("未通过")) {
statusCode = 'FAILED';
} else if (status["面试状态"].includes("未参与面试")) {
} else if (statusText.includes("未参与面试")) {
statusCode = 'MISSED';
} else if (status["面试状态"].includes("面试完成")) {
} else if (statusText.includes("面试完成")) {
statusCode = 'COMPLETED';
} else if (status["面试状态"].includes("等待面试")) {
} else if (statusText.includes("等待面试")) {
statusCode = 'SCHEDULED';
}
@@ -83,8 +88,9 @@ const transformInterviewStatus = (statusData, jobsData) => {
position: status["查询岗位名称"],
interviewTime: formattedDate,
interviewDate: interviewDate, // 用于排序
stageDate: status["阶段日期"], // 保留原始的阶段日期信息
stageLabel: stageLabel, // 流程标签
processFlow: status["岗位内推流程"], // 岗位内推流程
flowLabel: status["流程标签"], // 流程标签
flowTime: status["流程时间"], // 流程时间(详细时间)
status: statusCode,
statusText: statusText,
job: matchedJob ? {
@@ -117,7 +123,14 @@ const transformInterviewStatus = (statusData, jobsData) => {
};
})
.sort((a, b) => {
// 按面试时间降序排序(最新的在前)
// 首先按状态排序Offer已接收的排在最前面
if (a.statusText.includes("Offer已接收") && !b.statusText.includes("Offer已接收")) {
return -1;
}
if (!a.statusText.includes("Offer已接收") && b.statusText.includes("Offer已接收")) {
return 1;
}
// 如果都是Offer已接收或都不是则按面试时间降序排序最新的在前
return b.interviewDate - a.interviewDate;
});
};;
@@ -197,7 +210,7 @@ const transformCalendarCourses = (coursesData) => {
if (!course["日期"]) return false;
// 不需要过滤AI课程直接在下面处理
// 必须有课程内容
return course["个人课程表"] || course["公共课"] || course["企业高管公开课"];
return course["个人课程表"] || course["公共课"] || course["企业高管公开课"] || course["1V1 规划阶段"] || course["模拟面试实战练习阶段"];
})
.map((course, index) => {
// 解析日期
@@ -651,7 +664,13 @@ const generateVerticalCourseLiveList = (calendarEvents, unitPosters = {}) => {
courseObj.canPreview = true;
courseObj.previewUrl = "https://du9uay.github.io/zhanhui/";
}
// 为"健康状态与健康管理的基本流程"课程添加试看标签和链接
if (event.title === "健康状态与健康管理的基本流程" && unitName === "健康管理基础") {
courseObj.canPreview = true;
courseObj.previewUrl = "https://du9uay.github.io/health-education-web/";
}
unitMap[unitName].courses.push(courseObj);
}
});
@@ -808,7 +827,7 @@ export const mockData = {
name: "吴兰",
introduction: "拥有13年营养科学研究与产品开发经验专注于功能食品与营养干预产品的产业化转化。累计参与30余种功能性食品开发包括益生菌饮料、低GI代餐、抗氧化复配胶囊等部分产品已实现出口年均销售额超1.2亿元。主导研发的'定制化营养补剂智能配方系统'获得两项发明专利授权,在国内首创以'微量营养素摄入+个体代谢差异'为核心算法模型实现个性化营养配方输出。其服务过的企业中超60%在产品升级后实现营收增长超过30%。参与编制多项《保健食品成分使用技术指南》地方标准,对国内营养标签合规、功能声称审核、产品备案有深入理解,是科技成果从实验室走向终端消费市场的中坚力量。",
specialties: ["13年功能食品研发专家", "产品年销1.2亿元", "个性化营养算法首创", "60%企业营收增30%"],
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png",
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg",
type: "复合课导师",
verticalDirection: "健康管理",
courses: []
@@ -829,11 +848,11 @@ export const mockData = {
type: "公共课导师",
courses: []
},
"魏立慧": {
name: "魏立慧",
introduction: "企业资深一线HR主讲专注于为求职者提供一对一的个性化指导。通过真实招聘视角,深入剖析个人优势与短板传授面试技巧、规划职业定位与发展路径,帮助学生快速提升求职竞争力。求职策略以实用落地为核心,注重互动交流与角色定位,让学员在轻松氛围中获得直击痛点的求职策略。",
specialties: ["点评直击要害", "擅长挖掘优势", "职业规划达人", "一线HR资深讲师"],
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuUpSO4gUtJz.png",
"赵雪宁": {
name: "赵雪宁",
introduction: "牵头集团人力资源信息化转型主导上线一体化HR SaaS平台覆盖招聘、培训、绩效、薪酬及员工关系五大模块实现全流程数据贯通。通过引入人岗匹配算法与流失预警模型关键岗位招聘周期缩短28%内部人才晋升率由12%提升至36%员工流失率三年下降40%。同时建立人力资本ROI指标体系高层决策实现数据可视化直接支撑集团多元化战略扩张人均产出提升20%整体人力成本率下降2个百分点。除企业实践外作为一线资深HR导师还开展一对一的个性化指导,结合真实招聘视角为学员剖析优势与短板传授简历优化、面试技巧及职业路径规划,帮助快速提升求职竞争力并获得针对性的发展建议。",
specialties: ["招聘视角剖析", "职业定位规划", "互动交流教学", "个人优势挖掘"],
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuXLZZ9QdQ6q.png",
type: "企业资深HR",
courses: []
},
@@ -3776,12 +3795,12 @@ export const mockData = {
jobStrategyLive: {
courseId: "job-strategy-001",
title: "1V1定制求职策略直播指导",
teacher: "企业资深HR - 魏立慧",
teacherAvatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuUpSO4gUtJz.png",
teacher: "企业资深HR - 赵雪宁",
teacherAvatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuXLZZ9QdQ6q.png",
startTime: new Date().toISOString(),
viewers: 1,
description:
"企业资深一线HR专注于为求职者提供一对一的个性化指导。通过真实招聘视角,深入剖析个人优势与短板传授面试技巧、规划职业定位与发展路径,帮助学生快速提升求职竞争力。求职策略以实用落地为核心,注重互动交流与角色定位,让学员在轻松氛围中获得直击痛点的求职策略。",
"牵头集团人力资源信息化转型主导上线一体化HR SaaS平台覆盖招聘、培训、绩效、薪酬及员工关系五大模块实现全流程数据贯通。通过引入人岗匹配算法与流失预警模型关键岗位招聘周期缩短28%内部人才晋升率由12%提升至36%员工流失率三年下降40%。同时建立人力资本ROI指标体系高层决策实现数据可视化直接支撑集团多元化战略扩张人均产出提升20%整体人力成本率下降2个百分点。除企业实践外作为一线资深HR导师还开展一对一的个性化指导,结合真实招聘视角为学员剖析优势与短板传授简历优化、面试技巧及职业路径规划,帮助快速提升求职竞争力并获得针对性的发展建议。",
status: "live",
duration: "60分钟",
},
@@ -3792,14 +3811,14 @@ export const mockData = {
keyPoints: [
{
id: 1,
time: "05:05",
time: "05:29",
type: "strategy",
title: "求职理念",
content: "深入理解求职的本质,建立正确的求职心态和认知框架。"
},
{
id: 2,
time: "08:40",
time: "09:29",
type: "strategy",
title: "理念:能力大于学历、曲线就业路径",
content: "强调实际能力比学历背景更重要,通过曲线就业路径实现职业目标。"
@@ -4698,7 +4717,7 @@ mockData.profileOverview = {
studentId: "2325070573",
studentNo: "2325070573",
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/avatar/douyin/54bf2cbc6433120fd99d7d85b7c70f3a.jpg",
school: "苏州农业职业技术学院",
school: "南阳医学高等专科学校",
major: "药品生产技术",
className: "大健康班",
grade: "2023级",
@@ -4962,12 +4981,25 @@ if (mockData.homework && mockData.homework[0]) {
const compoundHomeworkUnits = [];
const compoundHomeworkList = [];
let compoundHomeworkId = 1;
// 定义不需要作业的单元
const excludedUnits = ['岗位体系认知', '产业体系认知'];
// 遍历所有复合能力课单元生成units结构
mockData.courseLiveList.forEach(unit => {
// 如果是不需要作业的单元,跳过
if (excludedUnits.includes(unit.unitName)) {
return;
}
const unitCourses = [];
unit.courses.forEach(course => {
// 过滤掉单元小结课程
if (course.courseName && course.courseName.includes('单元小结')) {
return;
}
// 判断课程状态
let level = "locked";
if (course.completed) {
@@ -4975,7 +5007,7 @@ if (mockData.homework && mockData.homework[0]) {
} else if (course.current) {
level = "in-progress";
}
const homeworkItem = {
id: compoundHomeworkId++,
name: course.courseName,
@@ -4984,11 +5016,11 @@ if (mockData.homework && mockData.homework[0]) {
teacherName: course.teacherName,
date: course.date
};
unitCourses.push(homeworkItem);
compoundHomeworkList.push(homeworkItem);
});
// 添加单元到units数组
if (unitCourses.length > 0) {
compoundHomeworkUnits.push({
@@ -4997,7 +5029,7 @@ if (mockData.homework && mockData.homework[0]) {
});
}
});
// 更新复合能力课作业的units和list
mockData.homework[0].units = compoundHomeworkUnits;
mockData.homework[0].list = compoundHomeworkList;
@@ -5008,12 +5040,25 @@ if (mockData.homework && mockData.homework[1]) {
const verticalHomeworkUnits = [];
const verticalHomeworkList = [];
let homeworkId = 1;
// 定义不需要作业的单元
const excludedUnits = ['职业规划课'];
// 遍历所有垂直能力课单元生成units结构
mockData.verticalCourseLiveList.forEach(unit => {
// 如果是不需要作业的单元,跳过
if (excludedUnits.includes(unit.unitName)) {
return;
}
const unitCourses = [];
unit.courses.forEach(course => {
// 过滤掉单元小结课程
if (course.courseName && course.courseName.includes('单元小结')) {
return;
}
// 判断课程状态
let level = "locked";
if (course.completed) {
@@ -5021,7 +5066,7 @@ if (mockData.homework && mockData.homework[1]) {
} else if (course.current) {
level = "in-progress";
}
const homeworkItem = {
id: homeworkId++,
name: course.courseName,
@@ -5030,17 +5075,23 @@ if (mockData.homework && mockData.homework[1]) {
teacherName: course.teacherName,
date: course.date
};
// 为展会主题与品牌定位课程添加特殊标记(使其可点击)
if (course.courseName === "展会主题与品牌定位" && unit.unitName === "消费电子展品牌策划与执行") {
homeworkItem.isShowCase = true;
homeworkItem.previewUrl = "https://du9uay.github.io/zhanhui/";
}
// 为健康状态与健康管理的基本流程课程添加特殊标记(使其可点击)
if (course.courseName === "健康状态与健康管理的基本流程" && unit.unitName === "健康管理基础") {
homeworkItem.canPreview = true;
homeworkItem.previewUrl = "https://du9uay.github.io/health-education-web/#/course-test";
}
unitCourses.push(homeworkItem);
verticalHomeworkList.push(homeworkItem);
});
// 添加单元到units数组
if (unitCourses.length > 0) {
verticalHomeworkUnits.push({
@@ -5049,7 +5100,7 @@ if (mockData.homework && mockData.homework[1]) {
});
}
});
// 更新垂直能力课作业的units和list
mockData.homework[1].units = verticalHomeworkUnits;
mockData.homework[1].list = verticalHomeworkList;

View File

@@ -808,7 +808,7 @@ export const mockData = {
name: "吴兰",
introduction: "拥有13年营养科学研究与产品开发经验专注于功能食品与营养干预产品的产业化转化。累计参与30余种功能性食品开发包括益生菌饮料、低GI代餐、抗氧化复配胶囊等部分产品已实现出口年均销售额超1.2亿元。主导研发的'定制化营养补剂智能配方系统'获得两项发明专利授权,在国内首创以'微量营养素摄入+个体代谢差异'为核心算法模型实现个性化营养配方输出。其服务过的企业中超60%在产品升级后实现营收增长超过30%。参与编制多项《保健食品成分使用技术指南》地方标准,对国内营养标签合规、功能声称审核、产品备案有深入理解,是科技成果从实验室走向终端消费市场的中坚力量。",
specialties: ["13年功能食品研发专家", "产品年销1.2亿元", "个性化营养算法首创", "60%企业营收增30%"],
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png",
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg",
type: "复合课导师",
verticalDirection: "健康管理",
courses: []

View File

@@ -808,7 +808,7 @@ export const mockData = {
name: "吴兰",
introduction: "拥有13年营养科学研究与产品开发经验专注于功能食品与营养干预产品的产业化转化。累计参与30余种功能性食品开发包括益生菌饮料、低GI代餐、抗氧化复配胶囊等部分产品已实现出口年均销售额超1.2亿元。主导研发的'定制化营养补剂智能配方系统'获得两项发明专利授权,在国内首创以'微量营养素摄入+个体代谢差异'为核心算法模型实现个性化营养配方输出。其服务过的企业中超60%在产品升级后实现营收增长超过30%。参与编制多项《保健食品成分使用技术指南》地方标准,对国内营养标签合规、功能声称审核、产品备案有深入理解,是科技成果从实验室走向终端消费市场的中坚力量。",
specialties: ["13年功能食品研发专家", "产品年销1.2亿元", "个性化营养算法首创", "60%企业营收增30%"],
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png",
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg",
type: "复合课导师",
verticalDirection: "健康管理",
courses: []

View File

@@ -6566,7 +6566,7 @@
"企业高管公开课": "",
"1V1 规划阶段": "1V1 求职规划",
"模拟面试实战练习阶段": "",
"导师姓名查询": "魏立慧",
"导师姓名查询": "赵雪宁",
"上课时间": "14:00~16:00",
"上课地点": "线上",
"课程状态": "已完成",
@@ -10917,7 +10917,7 @@
"企业高管公开课": "",
"1V1 规划阶段": "",
"模拟面试实战练习阶段": "面试实战",
"导师姓名查询": "魏立慧",
"导师姓名查询": "赵雪宁",
"上课时间": "15:00~16:00",
"上课地点": "线下",
"课程状态": "已完成",
@@ -12684,7 +12684,7 @@
"企业高管公开课": "",
"1V1 规划阶段": "",
"模拟面试实战练习阶段": "面试实战",
"导师姓名查询": "魏立慧",
"导师姓名查询": "赵雪宁",
"上课时间": "15:00~16:00",
"上课地点": "线下",
"课程状态": "已完成",
@@ -12760,7 +12760,7 @@
"企业高管公开课": "",
"1V1 规划阶段": "",
"模拟面试实战练习阶段": "面试实战",
"导师姓名查询": "魏立慧",
"导师姓名查询": "赵雪宁",
"上课时间": "15:00~16:00",
"上课地点": "线下",
"课程状态": "已完成",

View File

@@ -0,0 +1,14 @@
.agent-page-wrapper {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
overflow: hidden;
}
.agent-page-iframe {
width: 100%;
height: 100%;
border: none;
zoom: 0.8;
}

View File

@@ -0,0 +1,17 @@
import "./index.css";
const AgentPage = () => {
return (
<div className="agent-page-wrapper">
<iframe
src="http://127.0.0.1:4173/"
className="agent-page-iframe"
title="Agent"
frameBorder="0"
allowFullScreen
/>
</div>
);
};
export default AgentPage;

View File

@@ -228,12 +228,7 @@ const EventDetailModal = ({ isOpen, event, onClose }) => {
</div>
</div>
{/* AI课和营销能力课显示课程信息 */}
{(eventItem.type === 'ai-course' || eventItem.type === 'marketing-course') && (
<div className="event-description">
{eventItem.title} - {eventItem.teacher}老师
</div>
)}
{/* 企业高管公开课添加线下参与标签 */}
{eventItem.type === 'public-course' && (

View File

@@ -437,3 +437,174 @@
}
}
}
/* 公司图片网格布局样式 */
.company-images-grid {
margin-top: 16px;
width: 100%;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
gap: 12px;
max-width: 100%;
}
/* 根据图片数量调整列数 */
.company-images-grid:has(.company-image-item:nth-child(1):last-child) {
grid-template-columns: 1fr;
}
.company-images-grid:has(.company-image-item:nth-child(2):last-child) {
grid-template-columns: repeat(2, 1fr);
}
.company-images-grid:has(.company-image-item:nth-child(3):last-child) {
grid-template-columns: repeat(3, 1fr);
}
.company-images-grid:has(.company-image-item:nth-child(4)) {
grid-template-columns: repeat(4, 1fr);
}
.company-image-item {
position: relative;
width: 100%;
aspect-ratio: 4/3;
border-radius: 8px;
overflow: hidden;
cursor: pointer;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
}
.company-image-item:hover {
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
transform: translateY(-4px);
}
.company-grid-image {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
transition: transform 0.3s ease;
}
.company-image-item:hover .company-grid-image {
transform: scale(1.05);
}
/* 图片预览模态框样式 */
.image-preview-modal {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.9);
z-index: 10000;
display: flex;
align-items: center;
justify-content: center;
animation: fadeIn 0.3s ease;
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.image-preview-content {
position: relative;
max-width: 90vw;
max-height: 90vh;
display: flex;
align-items: center;
justify-content: center;
}
.image-preview-img {
max-width: 100%;
max-height: 90vh;
object-fit: contain;
border-radius: 8px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
}
.image-preview-close {
position: absolute;
top: -50px;
right: 0;
width: 40px;
height: 40px;
border-radius: 50%;
background: rgba(255, 255, 255, 0.2);
color: white;
border: 2px solid rgba(255, 255, 255, 0.5);
font-size: 28px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s ease;
backdrop-filter: blur(4px);
&:hover {
background: rgba(255, 255, 255, 0.3);
transform: rotate(90deg);
}
}
.image-preview-counter {
position: absolute;
bottom: -40px;
left: 50%;
transform: translateX(-50%);
background: rgba(255, 255, 255, 0.2);
color: white;
padding: 6px 16px;
border-radius: 16px;
font-size: 14px;
font-weight: 500;
backdrop-filter: blur(4px);
border: 1px solid rgba(255, 255, 255, 0.3);
}
.image-preview-btn {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 50px;
height: 50px;
border-radius: 50%;
background: rgba(255, 255, 255, 0.2);
color: white;
border: 2px solid rgba(255, 255, 255, 0.5);
font-size: 32px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s ease;
backdrop-filter: blur(4px);
&:hover {
background: rgba(255, 255, 255, 0.3);
transform: translateY(-50%) scale(1.1);
}
&:active {
transform: translateY(-50%) scale(0.95);
}
}
.image-preview-btn-prev {
left: -70px;
}
.image-preview-btn-next {
right: -70px;
}

View File

@@ -0,0 +1,439 @@
.job-info-modal-content {
max-height: 80vh;
max-width: 860px;
position: relative;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
background-color: #f2f3f5;
background-image: url("@/assets/images/CompanyJobsPage/background.png");
background-size: 100% auto;
background-position: top center;
background-repeat: no-repeat;
border-radius: 8px;
box-sizing: border-box;
overflow-y: auto;
overflow-x: hidden;
padding: 20px;
/* 自定义滚动条样式 */
&::-webkit-scrollbar {
width: 6px;
}
&::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 3px;
}
&::-webkit-scrollbar-thumb {
background: #667eea;
border-radius: 3px;
&:hover {
background: #764ba2;
}
}
.job-info-modal-search {
width: 319px;
height: 36px;
border: 1px solid #2c7aff;
span {
background-color: #fff;
}
input {
background-color: #fff;
}
}
.empty-data-wrapper {
width: 100%;
min-height: 555px;
display: flex;
}
.job-info-modal-user-resumes-list {
width: 100%;
min-height: 400px;
margin-top: 16px;
display: grid;
grid-template-columns: repeat(2, 1fr); /* 每行两列 */
gap: 20px; /* 网格间距 */
justify-items: start; /* 项目左对龁 */
overflow-y: visible;
.list-item {
width: 390px;
height: 100px;
background-color: #fff;
border-radius: 8px;
position: relative;
box-sizing: border-box;
padding: 16px 12px;
display: flex;
justify-content: space-between;
align-items: center;
.list-item-info {
height: 68px;
width: 300px;
display: flex;
justify-content: flex-start;
align-items: center;
.file-icon {
width: 68px;
height: 68px;
filter: none !important;
box-shadow: none !important;
}
.file-info {
width: 220px;
height: 68px;
> p {
text-align: left;
}
.file-info-targetPosition {
width: 100%;
height: 28px;
color: #09090b;
line-height: 28px;
font-size: 18px;
font-weight: 600;
}
.file-info-skills {
margin-top: 5px;
width: 100%;
height: 21px;
color: #788089;
line-height: 21px;
font-size: 15px;
font-weight: 400;
overflow: hidden; /* 超出隐藏 */
white-space: nowrap; /* 禁止换行 */
text-overflow: ellipsis; /* 文本溢出显示省略号 */
}
.version-selector {
margin-top: 8px;
width: 100%;
height: 32px;
display: flex;
align-items: center;
.arco-select {
font-size: 12px !important;
}
.arco-select-view-single {
height: 28px !important;
font-size: 12px !important;
}
}
}
}
.info-btn {
width: 64px;
height: 28px;
line-height: 28px;
text-align: center;
border-radius: 2px;
border: 1px solid #2c7aff;
color: #2c7aff;
font-size: 12px;
cursor: pointer;
transition: all 0.3s ease;
background-color: #ffffff;
font-weight: 500;
&:hover {
background-color: #2c7aff;
color: #ffffff;
box-shadow: 0 2px 8px rgba(44, 122, 255, 0.3);
transform: translateY(-1px);
}
&:active {
transform: scale(0.98);
box-shadow: 0 1px 4px rgba(44, 122, 255, 0.2);
}
}
}
}
.job-info-modal-content-position-info {
width: 100%;
min-height: 30px;
display: flex;
align-items: center;
justify-content: flex-start;
position: relative;
flex-wrap: wrap;
gap: 10px;
.job-info-modal-content-position-info-position {
font-size: 20px;
font-weight: 600;
line-height: 30px;
color: #1d2129;
}
.job-category-tag {
display: inline-flex;
align-items: center;
padding: 4px 12px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
font-size: 12px;
font-weight: 500;
border-radius: 12px;
white-space: nowrap;
box-shadow: 0 2px 4px rgba(102, 126, 234, 0.3);
}
/* 根据岗位相关标签内容设置不同颜色 */
.job-category-tag[data-category="专业相关岗位"] {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
.job-category-tag[data-category="非专业相关岗位"] {
background: linear-gradient(135deg, #ff6b6b 0%, #feca57 100%);
}
.job-category-tag[data-category="人才出海岗位"] {
background: linear-gradient(135deg, #00d2ff 0%, #3a7bd5 100%);
}
.job-remaining-positions {
display: inline-flex;
align-items: center;
margin-left: 8px;
color: #ff4d4f;
font-size: 12px;
font-weight: 600;
white-space: nowrap;
.warning-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 14px;
height: 14px;
border-radius: 50%;
background-color: #ff4d4f;
color: #ffffff;
font-size: 10px;
font-weight: 700;
font-style: normal;
margin-right: 4px;
flex-shrink: 0;
}
}
.job-info-modal-content-position-info-num {
font-size: 14px;
font-weight: 400;
line-height: 22px;
color: #ff7d00;
}
.job-info-modal-content-position-info-salary {
font-size: 16px;
font-weight: 600;
line-height: 24px;
color: #ff7d00;
position: absolute;
right: 0;
}
}
.job-info-modal-info-tags {
width: 100%;
display: flex;
justify-content: flex-start;
align-items: center;
flex-wrap: wrap;
margin-top: 10px;
.job-info-modal-info-tag {
background-color: #ffffff;
box-sizing: border-box;
margin-bottom: 5px;
padding: 4px 12px;
color: #86909c;
font-size: 12px;
font-weight: 500;
border-radius: 4px;
margin-right: 10px;
}
}
.job-info-modal-content-position-info-description,
.job-info-modal-content-position-info-requirements,
.job-info-modal-content-position-info-companyInfo {
width: 100%;
box-sizing: border-box;
padding: 16px;
border-radius: 8px;
background-color: #fff;
margin: 10px 0;
border: 1px solid #e5e6eb;
> p {
width: 100%;
text-align: left;
}
.description-title,
.requirements-title,
.companyInfo-title {
font-size: 18px;
font-weight: 600;
line-height: 28px;
color: #1d2129;
margin-bottom: 12px;
display: flex;
align-items: center;
.title-icon {
width: 20px;
height: 20px;
margin-right: 8px;
object-fit: contain;
}
}
.description-content {
font-size: 14px;
font-weight: 400;
line-height: 24px;
color: #4e5969;
text-align: left;
.description-item {
display: flex;
align-items: flex-start;
margin-bottom: 8px;
text-align: left;
.description-number {
display: inline-block;
min-width: 20px;
font-size: 14px;
font-weight: 500;
color: #1d2129;
margin-right: 6px;
text-align: left;
}
.description-text {
flex: 1;
font-size: 14px;
font-weight: 400;
line-height: 24px;
color: #4e5969;
text-align: left;
}
&:last-child {
margin-bottom: 0;
}
}
}
.companyInfo-content {
font-size: 14px;
font-weight: 400;
line-height: 24px;
color: #4e5969;
text-align: left;
white-space: pre-wrap;
word-break: break-word;
}
.requirements-content {
width: 100%;
text-align: left;
.requirements-item {
display: flex;
align-items: flex-start;
margin-bottom: 8px;
text-align: left;
.requirement-number {
display: inline-block;
min-width: 20px;
font-size: 14px;
font-weight: 500;
color: #1d2129;
margin-right: 6px;
text-align: left;
}
.requirement-text {
flex: 1;
font-size: 14px;
font-weight: 400;
line-height: 24px;
color: #4e5969;
text-align: left;
}
&:last-child {
margin-bottom: 0;
}
}
.requirement-line {
margin-bottom: 8px;
padding-left: 16px;
position: relative;
font-size: 14px;
line-height: 22px;
color: #4e5969;
text-align: left;
&:before {
content: "•";
position: absolute;
left: 0;
color: #667eea;
}
&:last-child {
margin-bottom: 0;
}
}
}
}
.job-info-modal-btn {
width: 120px;
height: 36px;
line-height: 36px;
color: #fff;
background-color: #2c7aff;
display: flex;
justify-content: center;
align-items: center;
border-radius: 2px;
cursor: pointer;
> i {
width: 12px;
height: 12px;
margin-right: 5px;
background-image: url("@/assets/images/CompanyJobsPage/btn_icon_2.png");
background-size: 100% 100%;
}
> span {
font-size: 12px;
font-weight: 600;
color: #fff;
}
}
}

View File

@@ -24,6 +24,8 @@ export default ({ visible, onClose, data, directToResume = false, hideDeliverBut
const [listHasMore, setListHasMore] = useState(true);
const [permissionModalVisible, setPermissionModalVisible] = useState(false);
const [selectedVersions, setSelectedVersions] = useState({}); // 每个简历的版本选择使用简历ID作为key
const [currentImageIndex, setCurrentImageIndex] = useState(0); // 当前显示的图片索引
const [imageModalVisible, setImageModalVisible] = useState(false); // 图片预览模态框
// 处理directToResume参数变化
useEffect(() => {
@@ -39,9 +41,29 @@ export default ({ visible, onClose, data, directToResume = false, hideDeliverBut
setResumeList([]); // 清空简历列表
setListPage(1); // 重置分页
setListHasMore(true); // 重置加载更多状态
setCurrentImageIndex(0); // 重置图片索引
onClose();
};
// 图片轮播相关函数
const handlePrevImage = () => {
const images = data?.details?.companyImages || [];
setCurrentImageIndex((prev) => (prev === 0 ? images.length - 1 : prev - 1));
};
const handleNextImage = () => {
const images = data?.details?.companyImages || [];
setCurrentImageIndex((prev) => (prev === images.length - 1 ? 0 : prev + 1));
};
const handleImageClick = () => {
setImageModalVisible(true);
};
const handleCloseImageModal = () => {
setImageModalVisible(false);
};
const queryResumeList = useCallback(async () => {
const res = await getResumesList({
page: listPage,
@@ -274,8 +296,12 @@ export default ({ visible, onClose, data, directToResume = false, hideDeliverBut
</span>
)}
{/* 岗位剩余量 - 仅未投递岗位显示 */}
{!data?.isDelivered && data?.remainingPositions && (
{/* 岗位剩余量 - 仅未投递、未过期且非面试状态岗位显示 */}
{!data?.isDelivered &&
!data?.isExpired &&
data?.status !== 'expired' &&
!hideDeliverButton &&
data?.remainingPositions && (
<span className="job-remaining-positions">
<i className="warning-icon">!</i>
岗位招聘数量仅剩{data?.remainingPositions}
@@ -349,9 +375,33 @@ export default ({ visible, onClose, data, directToResume = false, hideDeliverBut
</p>
))}
</div>
{data?.details?.companyImages && data.details.companyImages.length > 0 && (
<div className="company-images-grid">
{data.details.companyImages.map((imageUrl, index) => (
<div
key={index}
className="company-image-item"
onClick={() => {
setCurrentImageIndex(index);
handleImageClick();
}}
>
<img
src={imageUrl}
alt={`公司图片 ${index + 1}`}
className="company-grid-image"
/>
</div>
))}
</div>
)}
</div>
)}
{!hideDeliverButton && (
{/* 立即投递按钮 - 仅未投递、未过期且非面试状态岗位显示 */}
{!data?.isDelivered &&
!data?.isExpired &&
data?.status !== 'expired' &&
!hideDeliverButton && (
<div
className="job-info-modal-btn"
onClick={handleClickDeliverBtn}
@@ -374,10 +424,27 @@ export default ({ visible, onClose, data, directToResume = false, hideDeliverBut
setCurrentResumeId(null);
}}
/>
<PermissionModal
<PermissionModal
visible={permissionModalVisible}
onClose={() => setPermissionModalVisible(false)}
/>
{imageModalVisible && data?.details?.companyImages && (
<div className="image-preview-modal" onClick={handleCloseImageModal}>
<div className="image-preview-content" onClick={(e) => e.stopPropagation()}>
<button className="image-preview-close" onClick={handleCloseImageModal}>×</button>
<img
src={data.details.companyImages[currentImageIndex]}
alt={`公司图片 ${currentImageIndex + 1}`}
className="image-preview-img"
/>
<div className="image-preview-counter">
{currentImageIndex + 1} / {data.details.companyImages.length}
</div>
<button className="image-preview-btn image-preview-btn-prev" onClick={handlePrevImage}></button>
<button className="image-preview-btn image-preview-btn-next" onClick={handleNextImage}></button>
</div>
</div>
)}
</>
);
};

View File

@@ -0,0 +1,383 @@
import { useState, useCallback, useEffect } from "react";
import { useSelector } from "react-redux";
import { Input, Select } from "@arco-design/web-react";
import Modal from "@/components/Modal";
import InfiniteScroll from "@/components/InfiniteScroll";
import toast from "@/components/Toast";
import FILEICON from "@/assets/images/CompanyJobsPage/file_icon.png";
import ResumeInfoModal from "../ResumeInfoModal";
import PermissionModal from "../PermissionModal";
import { getResumesList, submitResume, getPageData } from "@/services";
import "./index.css";
const InputSearch = Input.Search;
const PAGE_SIZE = 10;
export default ({ visible, onClose, data, directToResume = false, hideDeliverButton = false }) => {
const studentInfo = useSelector((state) => state.student.studentInfo);
const [resumeModalShow, setResumeModalShow] = useState(directToResume);
const [resumeInfoModalShow, setResumeInfoModalShow] = useState(false);
const [resumeInfoData, setResumeInfoData] = useState(null);
const [currentResumeId, setCurrentResumeId] = useState(null); // 当前查看的简历ID
const [resumeList, setResumeList] = useState([]); // 简历列表
const [listPage, setListPage] = useState(1);
const [listHasMore, setListHasMore] = useState(true);
const [permissionModalVisible, setPermissionModalVisible] = useState(false);
const [selectedVersions, setSelectedVersions] = useState({}); // 每个简历的版本选择使用简历ID作为key
// 处理directToResume参数变化
useEffect(() => {
if (visible && directToResume) {
setResumeModalShow(true);
} else if (visible && !directToResume) {
setResumeModalShow(false);
}
}, [visible, directToResume]);
const handleCloseModal = () => {
setResumeModalShow(false);
setResumeList([]); // 清空简历列表
setListPage(1); // 重置分页
setListHasMore(true); // 重置加载更多状态
onClose();
};
const queryResumeList = useCallback(async () => {
const res = await getResumesList({
page: listPage,
pageSize: PAGE_SIZE,
studentId: studentInfo?.id
});
if (res.success) {
setResumeList((prevList) => {
const newList = [...prevList, ...res.data];
if (res.total === newList?.length) {
setListHasMore(false);
} else {
setListPage((prevPage) => prevPage + 1);
}
return newList;
});
}
}, [listPage, studentInfo?.id]);
// 点击立即投递
const handleClickDeliverBtn = (e) => {
e.stopPropagation();
setResumeModalShow(true);
};
// 选择简历投递
const userResumesClick = async (item) => {
// 显示权限提示弹窗
setPermissionModalVisible(true);
// 原投递逻辑暂时注释,实际使用时可根据用户权限判断
/*
try {
// 调用投递服务
const result = await submitResume({
resumeId: item.id,
jobId: data?.id,
studentId: studentInfo?.id,
resumeTitle: item.title,
jobPosition: data?.position,
company: data?.company,
resumeVersion: selectedVersions[item.id] || "2" // 添加版本信息
});
if (result.success) {
// 投递成功,显示成功提示
const versionText = (selectedVersions[item.id] || "2") === "1" ? "原始版" : "个人修改版";
toast.success(`简历"${item.title}"${versionText})投递成功!`);
// 关闭模态框
handleCloseModal();
// 输出投递成功信息
console.log('投递成功', {
applicationId: result.data.applicationId,
resumeId: item.id,
jobId: data?.id,
resumeTitle: item.title,
jobPosition: data?.position,
submittedAt: result.data.submittedAt
});
} else {
toast.error(result.message || '投递失败,请重试');
}
} catch (error) {
toast.error('投递失败,请重试');
console.error('投递失败:', error);
}
*/
};
// 点击简历详情
const userResumesBtnClick = async (e, item) => {
e.stopPropagation();
try {
// 获取岗位与面试题页面的数据
const pageDataResponse = await getPageData();
if (pageDataResponse.success) {
const pageData = pageDataResponse.data;
// 找到对应的行业信息
const matchedIndustry = pageData.industries?.find(industry =>
industry.name === item.industry
);
// 从resumeTemplates中查找对应岗位的模板
const industryTemplates = pageData.resumeTemplates?.[item.industry] || [];
const positionTemplate = industryTemplates.find(template =>
template.position === item.position
);
// 添加调试日志
console.log('查找简历模板:', {
industryName: item.industry,
positionTitle: item.position,
templatesCount: industryTemplates.length,
templatePositions: industryTemplates.map(t => t.position),
templatesStructure: industryTemplates.slice(0, 2).map(t => ({
position: t.position,
hasContent: !!t.content,
hasStudentInfo: !!t.studentInfo,
keys: Object.keys(t)
}))
});
if (positionTemplate) {
console.log('找到的模板:', {
position: positionTemplate.position,
hasContent: !!positionTemplate.content,
hasContentOriginal: !!positionTemplate.content?.original,
hasStudentInfo: !!positionTemplate.studentInfo,
templateKeys: Object.keys(positionTemplate),
contentKeys: positionTemplate.content ? Object.keys(positionTemplate.content) : null
});
} else {
console.warn('未找到简历模板:', item.position);
}
// 构造简历数据使用与ResumeInterviewPage相同的格式
const resumeData = {
title: item.position, // 使用岗位名称作为标题
content: positionTemplate?.content || null, // 这里包含原始版和修改版数据
selectedTemplate: positionTemplate, // 添加selectedTemplate字段
studentResume: pageData.myResume
};
console.log('加载简历数据:', {
resumeTitle: item.title,
position: item.position,
industry: item.industry,
selectedVersion: selectedVersions[item.id] || "2",
hasContent: !!positionTemplate?.content,
hasOriginal: !!positionTemplate?.content?.original,
hasModified: !!positionTemplate?.content?.modified
});
setResumeInfoData(resumeData);
setCurrentResumeId(item.id); // 记录当前简历ID
setResumeInfoModalShow(true);
} else {
toast.error('加载简历数据失败');
}
} catch (error) {
console.error('获取简历数据失败:', error);
toast.error('加载简历数据失败');
}
};;;
return (
<>
<Modal visible={visible} onClose={handleCloseModal}>
<div className="job-info-modal-content">
{resumeModalShow ? (
<>
{
<InfiniteScroll
loadMore={queryResumeList}
hasMore={listHasMore}
empty={resumeList.length === 0}
className={`${
resumeList.length
? "job-info-modal-user-resumes-list"
: "empty-data-wrapper"
}`}
>
{resumeList.map((item) => (
<li
key={item.id}
className="list-item"
onClick={(e) => userResumesBtnClick(e, item)}
>
<div className="list-item-info">
<img src={FILEICON} className="file-icon" />
<div className="file-info">
<p className="file-info-targetPosition">
{item.title}
</p>
<div className="version-selector">
<Select
placeholder="选择版本"
value={selectedVersions[item.id] || "2"}
style={{ width: 120, fontSize: '12px' }}
onChange={(value) => {
setSelectedVersions(prev => ({
...prev,
[item.id]: value
}));
}}
onClick={(e) => e.stopPropagation()}
>
<Select.Option value="1">原始版</Select.Option>
<Select.Option value="2">个人修改版</Select.Option>
</Select>
</div>
</div>
</div>
<div
className="info-btn"
onClick={(e) => {
e.stopPropagation();
userResumesClick(item);
}}
>
投递
</div>
</li>
))}
</InfiniteScroll>
}
</>
) : (
<>
<div className="job-info-modal-content-position-info">
<span className="job-info-modal-content-position-info-position">
{data?.position}
</span>
{/* 岗位相关标签 */}
{(data?.jobCategoryTag || data?.jobCategory) && (
<span
className="job-category-tag"
data-category={data?.jobCategoryTag || data?.jobCategory}
>
{data?.jobCategoryTag || data?.jobCategory}
</span>
)}
{/* 岗位剩余量 - 仅未投递岗位显示 */}
{!data?.isDelivered && data?.remainingPositions && (
<span className="job-remaining-positions">
<i className="warning-icon">!</i>
岗位招聘数量仅剩{data?.remainingPositions}名
</span>
)}
<span className="job-info-modal-content-position-info-salary">
{data?.salary}
</span>
</div>
{data?.tags?.length > 0 && (
<ul className="job-info-modal-info-tags">
{data?.tags?.map((tag, index) => (
<li key={index} className="job-info-modal-info-tag">
{tag}
</li>
))}
</ul>
)}
{data?.details?.description && (
<div className="job-info-modal-content-position-info-description">
<p className="description-title">
<img className="title-icon" src="https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_icon/recuW0XRVB1bpV.png" alt="" />
岗位描述
</p>
<div className="description-content">
{data?.details?.description.split(/\d+\.\s*/).filter(item => item.trim()).map((item, index) => (
<div key={index} className="description-item">
<span className="description-number">{index + 1}.</span>
<span className="description-text">{item.trim()}</span>
</div>
))}
</div>
</div>
)}
{(data?.details?.requirements?.length > 0 || data?.details?.requirementsText) && (
<div className="job-info-modal-content-position-info-requirements">
<p className="requirements-title">
<img className="title-icon" src="https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_icon/recuW0XRVB1bpV.png" alt="" />
岗位要求
</p>
<div className="requirements-content">
{data?.details?.requirements ? (
data?.details?.requirements?.map((item, index) => (
<div key={index} className="requirements-item">
<span className="requirement-number">{index + 1}.</span>
<span className="requirement-text">{item}</span>
</div>
))
) : (
data?.details?.requirementsText?.split(/\d+\.\s*/).filter(item => item.trim()).map((item, index) => (
<div key={index} className="requirements-item">
<span className="requirement-number">{index + 1}.</span>
<span className="requirement-text">{item.trim()}</span>
</div>
))
)}
</div>
</div>
)}
{data?.details?.companyInfo && (
<div className="job-info-modal-content-position-info-companyInfo">
<p className="companyInfo-title">
<img className="title-icon" src="https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_icon/recuW0XRVB1bpV.png" alt="" />
公司介绍
</p>
<div className="companyInfo-content">
{data?.details?.companyInfo.split('\n').map((paragraph, index) => (
<p key={index} className="company-paragraph">
{paragraph}
</p>
))}
</div>
</div>
)}
{!hideDeliverButton && (
<div
className="job-info-modal-btn"
onClick={handleClickDeliverBtn}
>
<i />
<span>立即投递</span>
</div>
)}
</>
)}
</div>
</Modal>
<ResumeInfoModal
visible={resumeInfoModalShow}
data={resumeInfoData}
initialVersion={selectedVersions[currentResumeId] || "2"}
onClose={() => {
setResumeInfoModalShow(false);
setResumeInfoData(null);
setCurrentResumeId(null);
}}
/>
<PermissionModal
visible={permissionModalVisible}
onClose={() => setPermissionModalVisible(false)}
/>
</>
);
};

View File

@@ -3,6 +3,7 @@ import toast from "@/components/Toast";
import JobInfoModal from "../JobInfoModal";
import { getJobsDetail } from "@/services";
import { mapJob } from "@/utils/dataMapper";
import { positionToImagesMap } from "@/services/companyJobsNew";
import "./index.css";
export default ({ className = "", data = [], backgroundColor }) => {
@@ -12,9 +13,21 @@ export default ({ className = "", data = [], backgroundColor }) => {
const handleJobClick = async (e, item) => {
e.stopPropagation();
console.log('🖱️ JobList: 岗位被点击', {
position: item.position,
id: item.id,
isDelivered: item.isDelivered,
isExpired: item.isExpired,
status: item.status
});
// 如果是已投递的岗位,直接使用岗位本身的数据
if (item.isDelivered) {
console.log('📦 JobList: 处理已投递岗位');
// 获取该岗位的企业图片
const companyImages = positionToImagesMap[item.position] || [];
// 已投递岗位已经包含了所有必要的数据需要转换为Modal期望的格式
setJobInfoData({
id: item.originalInterviewId || item.id,
@@ -27,24 +40,36 @@ export default ({ className = "", data = [], backgroundColor }) => {
deadline: item.deadline,
welfare: item.welfare,
isDelivered: true,
isExpired: item.isExpired,
status: item.status,
interviewTime: item.interviewTime,
interviewStatus: item.interviewStatus,
// 将详细信息放在details对象中以匹配Modal的期望格式
details: {
description: item.description || "",
requirements: item.requirements ?
(typeof item.requirements === 'string' ?
item.requirements.split(/\d+\.\s*/).filter(r => r.trim()) :
requirements: item.requirements ?
(typeof item.requirements === 'string' ?
item.requirements.split(/\d+\.\s*/).filter(r => r.trim()) :
item.requirements) : [],
requirementsText: typeof item.requirements === 'string' ? item.requirements : "",
companyInfo: item.companyInfo || ""
companyInfo: item.companyInfo || "",
companyImages: companyImages // 添加企业图片
}
});
setDirectToResume(false);
setJobInfoModalVisible(true);
} else {
// 未投递的岗位,从服务获取详情
console.log('📞 JobList: 调用 getJobsDetail 获取岗位详情');
const res = await getJobsDetail(item.id);
console.log('📥 JobList: getJobsDetail 返回结果', {
success: res.success,
hasData: !!res.data,
position: res.data?.position,
hasImages: !!res.data?.details?.companyImages,
imageCount: res.data?.details?.companyImages?.length || 0
});
if (res.success) {
// Mock数据已经是前端格式不需要映射
setJobInfoData(res.data);

View File

@@ -195,9 +195,9 @@ export default ({ visible, onClose, data, initialVersion = "2" }) => {
const result = {
personalInfo: { name: "岗位名称" },
education: [{
school: '苏州农业职业技术学院',
school: '南阳医学高等专科学校',
major: '药品生产技术',
period: '2020.9-2023.6'
period: '2018.9-2021.6'
}],
projects: [],
skills: { core: [], additional: [] },

View File

@@ -4,12 +4,17 @@
padding: 20px;
position: relative;
background-color: #f5f5f5;
height: calc(100vh - 60px);
display: flex;
flex-direction: column;
.company-jobs-page {
flex: 1;
display: flex;
justify-content: space-between;
align-items: center;
align-items: stretch;
position: relative;
min-height: 0;
.company-jobs-page-spin {
margin: 200px 500px;
@@ -42,7 +47,9 @@
.company-jobs-page-left {
width: 570px;
height: 860px;
height: 100%;
min-height: 860px;
max-height: calc(100vh - 100px);
border-radius: 8px;
background-color: #fff;
display: flex;
@@ -97,17 +104,20 @@
.company-jobs-page-left-list-wrapper {
width: 100%;
height: 760px;
flex: 1;
min-height: 0;
overflow: auto;
}
}
.company-jobs-page-interview-wrapper {
width: 572px;
height: 860px;
height: 100%;
min-height: 860px;
max-height: calc(100vh - 100px);
display: flex;
flex-direction: column;
justify-content: space-between;
justify-content: flex-start;
align-items: center;
position: relative;
@@ -118,18 +128,20 @@
.company-jobs-page-interview {
width: 100%;
height: 860px;
margin-bottom: 20px;
height: 100%;
box-sizing: border-box;
padding: 20px;
background-color: #ffffff;
position: relative;
border-radius: 8px;
border-bottom: 1px solid #e5e6eb;
display: flex;
flex-direction: column;
.company-jobs-page-interview-list {
width: 540px;
height: 760px;
flex: 1;
min-height: 0;
overflow-y: auto;
display: flex;
justify-content: flex-start;

View File

@@ -0,0 +1,439 @@
.company-jobs-page-wrapper {
width: 100%;
box-sizing: border-box;
padding: 20px;
position: relative;
background-color: #f5f5f5;
.company-jobs-page {
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
.company-jobs-page-spin {
margin: 200px 500px;
}
.company-jobs-page-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;
&::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;
}
}
.company-jobs-page-left {
width: 570px;
height: 860px;
border-radius: 8px;
background-color: #fff;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
box-sizing: border-box;
padding: 20px;
overflow: hidden;
.company-jobs-page-header {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
.company-jobs-page-title {
font-size: 20px;
font-weight: 600;
line-height: 30px;
color: #1d2129;
margin: 0;
flex: 1;
}
.view-all-jobs-btn {
padding: 6px 16px;
background-color: #ffffff;
border: 1px solid #2c7aff;
border-radius: 4px;
color: #2c7aff;
font-size: 14px;
font-weight: 500;
cursor: pointer;
transition: all 0.3s ease;
white-space: nowrap;
flex-shrink: 0;
margin-left: 20px;
&:hover {
background-color: #2c7aff;
color: #ffffff;
box-shadow: 0 2px 4px rgba(44, 122, 255, 0.2);
}
&:active {
transform: scale(0.98);
}
}
}
.company-jobs-page-left-list-wrapper {
width: 100%;
height: 760px;
overflow: auto;
}
}
.company-jobs-page-interview-wrapper {
width: 572px;
height: 860px;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
position: relative;
.company-jobs-page-interview-expand {
height: 100% !important;
margin: 0 !important;
}
.company-jobs-page-interview {
width: 100%;
height: 860px;
margin-bottom: 20px;
box-sizing: border-box;
padding: 20px;
background-color: #ffffff;
position: relative;
border-radius: 8px;
border-bottom: 1px solid #e5e6eb;
.company-jobs-page-interview-list {
width: 540px;
height: 760px;
overflow-y: auto;
display: flex;
justify-content: flex-start;
align-items: center;
flex-direction: column;
.interview-item-wrapper {
width: 100%;
margin-bottom: 10px;
transition: all 0.3s ease;
}
.company-jobs-page-interview-item {
flex-shrink: 0;
width: 100%;
border-radius: 8px;
border: 1px solid #e5e6eb;
margin-bottom: 0;
box-sizing: border-box;
padding: 20px;
list-style: none;
background-color: #e5f1ff;
background-image: url("@/assets/images/CompanyJobsPage/jobs_page_left_list_item_bg.png");
background-size: 100% 100%;
transition: all 0.3s ease;
cursor: pointer;
&:hover {
border-color: #4080ff;
box-shadow: 0 4px 12px rgba(44, 127, 255, 0.15);
transform: translateY(-2px);
background-color: #d9e9ff;
}
.company-jobs-page-interview-item-info {
width: 100%;
position: relative;
.company-jobs-page-interview-item-info-position {
width: 100%;
height: 24px;
font-size: 16px;
font-weight: 600;
line-height: 24px;
margin-bottom: 5px;
color: #1d2129;
}
.company-jobs-page-interview-item-info-tags {
width: 100%;
display: flex;
justify-content: flex-start;
align-items: center;
flex-wrap: wrap;
margin-top: 5px;
margin-bottom: 5px;
.company-jobs-page-interview-item-info-tag {
background-color: #ffffff;
box-sizing: border-box;
margin-bottom: 5px;
padding: 1px 8px;
color: #4e5969;
font-size: 12px;
font-weight: 600;
border-radius: 2px;
margin-right: 10px;
}
}
.company-jobs-page-interview-item-info-salary {
position: absolute;
right: 0;
top: 0;
height: 22px;
font-size: 14px;
font-weight: 600;
line-height: 22px;
color: #ff7d00;
}
}
.company-jobs-page-interview-item-btn-wrapper {
width: 100%;
height: 36px;
position: relative;
border: 1px solid #94bfff;
border-radius: 4px;
background-color: #e8f3ff;
display: flex;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
padding: 0 20px;
> span {
font-size: 14px;
font-weight: 600;
line-height: 22px;
color: #4e5969;
}
.company-jobs-page-interview-item-btn {
font-size: 14px;
font-weight: 600;
line-height: 22px;
color: #4e5969;
}
.company-jobs-page-interview-item-btn-active {
color: #2c7aff;
cursor: pointer;
transition: all 0.3s ease;
&:hover {
color: #1967d2;
text-decoration: underline;
transform: translateX(2px);
}
}
}
}
}
}
}
.company-jobs-page-process-wrapper-close {
position: fixed;
z-index: 1000;
bottom: 20px;
right: 20px;
width: 96px;
height: 66px;
background-image: url("@/assets/images/CompanyJobsPage/process_wrapper_close_bg.png");
background-size: 100% 100%;
cursor: pointer;
.company-jobs-page-process-wrapper-title {
display: none;
}
.company-jobs-page-process-content {
display: none;
}
}
.company-jobs-page-process-wrapper-expand {
position: fixed;
z-index: 1000;
bottom: 20px;
right: 20px;
width: 572px;
height: 340px;
background-image: linear-gradient(270deg, #e6f2ff, #ffffff);
border: 1px solid #e5e6eb;
border-radius: 8px;
box-sizing: border-box;
padding: 10px;
.company-jobs-page-process-wrapper-title {
width: 100%;
padding-bottom: 40px;
font-size: 20px;
font-weight: 600;
line-height: 30px;
margin-bottom: 20px;
color: #1d2129;
flex-shrink: 0;
position: relative;
border-bottom: 1px solid #e5e6eb;
&::before {
content: "";
position: absolute;
right: 0;
top: 4px;
width: 24px;
height: 24px;
background-image: url("@/assets/images/CompanyJobsPage/close_icon.png");
background-size: 100% 100%;
cursor: pointer;
}
&::after {
content: "";
position: absolute;
left: 20px;
bottom: 40px;
width: 32px;
height: 3px;
background-image: url("@/assets/images/Common/title_icon.png");
background-size: 100% 100%;
}
}
.company-jobs-page-process-content {
display: flex;
box-sizing: border-box;
padding: 80px 20px;
width: 100%;
height: 48px;
justify-content: space-between;
align-items: center;
.company-jobs-page-process-item-icon {
width: 48px;
height: 48px;
background-size: 100% 100%;
position: relative;
> p {
width: 84px;
position: absolute;
left: 50%;
bottom: -40px;
transform: translateX(-50%);
color: #4e5969;
font-size: 14px;
font-weight: 400;
text-align: center;
}
}
.company-jobs-page-process-item-round-dot {
width: 10px;
height: 10px;
background-image: url("@/assets/images/CompanyJobsPage/process_dot.png");
background-size: 100% 100%;
position: relative;
&::before {
content: "";
position: absolute;
left: 50%;
top: -40px;
transform: translateX(-50%);
width: 132px;
height: 25px;
background-size: 100% 100%;
}
&::after {
content: "";
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: 68px;
height: 0px;
border: 1px dashed #c9cdd4;
}
}
.icon1 {
background-image: url("@/assets/images/CompanyJobsPage/process1.png");
}
.icon2 {
&::before {
background-image: url("@/assets/images/CompanyJobsPage/process2.png");
}
}
.icon3 {
background-image: url("@/assets/images/CompanyJobsPage/process3.png");
> p {
bottom: -20px;
}
}
.icon4 {
background-image: url("@/assets/images/CompanyJobsPage/process4.png");
margin: 0 48px;
&::after {
content: "";
position: absolute;
right: -68px;
top: 50%;
transform: translateY(-50%);
width: 68px;
height: 0px;
border: 1px dashed #c9cdd4;
}
&::before {
content: "";
position: absolute;
left: -68px;
top: 50%;
transform: translateY(-50%);
width: 68px;
height: 0px;
border: 1px dashed #c9cdd4;
}
}
.icon5 {
background-image: url("@/assets/images/CompanyJobsPage/process5.png");
> p {
bottom: -20px;
}
}
.icon6 {
&::before {
background-image: url("@/assets/images/CompanyJobsPage/process6.png");
}
}
.icon7 {
background-image: url("@/assets/images/CompanyJobsPage/process7.png");
}
}
}
}
}

View File

@@ -14,7 +14,7 @@ import {
getInterviewsList,
getJobsDetail,
} from "@/services";
import { getJobByPosition } from "@/services/companyJobsNew";
import { getJobByPosition, positionToImagesMap } from "@/services/companyJobsNew";
import "./index.css";
const PAGE_SIZE = 10;
@@ -226,6 +226,9 @@ const CompanyJobsPage = () => {
const handleJobCardClick = async (item) => {
// 如果是从面试状态点击的item 中已经包含了 job 属性
if (item.job) {
// 获取该岗位的企业图片
const companyImages = positionToImagesMap[item.position] || [];
// 将面试状态中的岗位信息转换为岗位详情格式
const jobData = {
id: item.id,
@@ -239,10 +242,14 @@ const CompanyJobsPage = () => {
benefits: item.job.welfare || [],
deadline: item.job.deadline,
jobCategory: item.job.jobCategory,
isDelivered: true, // 面试状态中的岗位都是已投递的
interviewTime: item.interviewTime,
interviewStatus: item.statusText,
details: {
description: item.job.description || "",
requirementsText: item.job.requirements || "",
companyInfo: item.job.companyInfo || ""
companyInfo: item.job.companyInfo || "",
companyImages: companyImages // 添加企业图片
}
};
@@ -355,7 +362,7 @@ const CompanyJobsPage = () => {
</span>
</div>
<div className="company-jobs-page-interview-item-btn-wrapper">
<span>{item.interviewTime}</span>
<span>{item.processFlow}{item.flowTime}</span>
<div
className={`company-jobs-page-interview-item-btn ${
item.status !== "COMPLETED" &&

View File

@@ -229,6 +229,20 @@
object-position: center 0%;
}
}
&.teacher-宋积极 {
.arco-avatar-image img {
object-fit: cover;
object-position: center 10%;
}
}
&.teacher-吴兰 {
.arco-avatar-image img {
object-fit: cover;
object-position: center 10%;
}
}
}
.module-tasks-item-info-teacher-name {
position: absolute;

View File

@@ -12,6 +12,7 @@ const HomeworkPage = () => {
const verticalScrollContainerRef = useRef(null);
const unitNavRefs = useRef({});
const [showIframe, setShowIframe] = useState(false);
const [selectedHomework, setSelectedHomework] = useState(null);
const [selectedUnits, setSelectedUnits] = useState({
1: "全部", // 复合能力课的选中单元
2: "全部" // 垂直能力课的选中单元
@@ -98,39 +99,42 @@ const HomeworkPage = () => {
}, [showIframe]);
const handleClickBtn = (sectionId, item) => {
// 垂直能力课中标记为isShowCase的课程可以点击
if (sectionId === 2 && item.isShowCase) {
// 检查是否有可试看标识优先使用canPreview兼容isShowCase
const canView = item.canPreview || item.isShowCase;
if (canView) {
setSelectedHomework(item);
setShowIframe(true);
}
};
// 判断是否应该显示灰色图片和禁用按钮
const isDisabled = (sectionId, item) => {
// 垂直能力课中标记为isShowCase的课程是启用状态
if (sectionId === 2 && item.isShowCase) {
return false;
}
return true;
// 有canPreview或isShowCase标识的课程是启用状态
return !(item.canPreview || item.isShowCase);
};
// 如果显示iframe渲染全页面的iframe
if (showIframe) {
if (showIframe && selectedHomework) {
return (
<div className="homework-page-iframe-wrapper">
<div className="homework-page-iframe-header">
<button
<button
className="homework-page-return-btn"
onClick={() => setShowIframe(false)}
onClick={() => {
setShowIframe(false);
setSelectedHomework(null);
}}
>
<IconArrowLeft style={{ marginRight: '8px' }} />
返回课后作业
</button>
<span className="homework-page-iframe-title">展会策划教学</span>
<span className="homework-page-iframe-title">{selectedHomework.name}</span>
</div>
<iframe
src="https://du9uay.github.io/zhanhui/#/course-test"
src={selectedHomework.previewUrl || "https://du9uay.github.io/health-education-web/#/course-test"}
className="homework-page-iframe-content"
title="展会策划教学"
title={selectedHomework.name}
style={{ zoom: 0.8 }}
/>
</div>
);
@@ -148,16 +152,16 @@ const HomeworkPage = () => {
if (selectedUnit === "全部") {
// 将所有单元的课程合并
const allCourses = section.units.flatMap(unit => unit.courses);
// 如果是垂直能力课,将"展会主题与品牌定位"移到第一位
// 如果是垂直能力课,将可试看课程移到第一位
if (sectionId === 2) {
const targetCourse = allCourses.find(course => course.name === "展会主题与品牌定位");
if (targetCourse) {
const otherCourses = allCourses.filter(course => course.name !== "展会主题与品牌定位");
return [targetCourse, ...otherCourses];
const previewCourse = allCourses.find(course => course.canPreview || course.isShowCase);
if (previewCourse) {
const otherCourses = allCourses.filter(course => course.id !== previewCourse.id);
return [previewCourse, ...otherCourses];
}
}
return allCourses;
} else {
// 返回选中单元的课程
@@ -229,7 +233,7 @@ const HomeworkPage = () => {
>
已完成
</div>
{contentItem.name === "展会主题与品牌定位" && (
{(contentItem.canPreview || contentItem.isShowCase) && (
<span className="homework-page-preview-tag">可试看</span>
)}
</div>

View File

@@ -62,87 +62,71 @@ export default ({ selectedItem = "面试初体验" }) => {
};
} else if (selectedItem === "第一次线下面试模拟") {
return {
totalScore: 42, // 根据JSON计算的真实总分
professionalScore: 28, // (4+6+5+4+6+3)/6*10*0.6 = 28
performanceScore: 14, // (2+4+5+3)/4*10*0.4 = 14
radarData: [4, 6, 5, 4, 6, 3], // 六项专业能力指标来自JSON
radarData2: [2, 4, 5, 3], // 四项现场表现指标来自JSON
totalScore: 52, // 根据JSON计算的真实总分
professionalScore: 34, // (6+5+6+5+6+6)/6*10*0.6 = 34
performanceScore: 18, // (5+5+5+5)/4*10*0.4 = 20 (约18)
radarData: [6, 5, 6, 5, 6, 6], // 六项专业能力指标(来自大健康JSON
radarData2: [5, 5, 5, 5], // 四项现场表现指标(来自大健康JSON
title: "面试评价",
content: `# 专业能力
1. 对知识点的概念总弄混,回答问题也只停在表面,没法往深了说 —— 比如问个核心概念,要么跟别的概念搅在一起,要么就说几句皮毛,根本挖不出背后的门道,能看出来对知识的理解还差得远;
2. 知道的行业知识都是零零散散的,没形成系统,尤其说不明白行业趋势跟岗位、业务的关系 —— 比如问某个趋势会影响工作内容不,他就答不上来,对行业的认知特别散,没串起来;
3. 对工作流程的概念特别模糊,连自己该干啥都搞不清 —— 比如问企业里某个业务流程怎么走,他说不明白,再问他在里面要承担啥角色,更是没头绪,完全没找准自己的位置;
4. 分析问题的时候特别局限,想的方案也很片面,连怎么落地的步骤都没有 —— 比如让他给个解决办法,只能说个大概方向,至于需要哪些资源、分几步做、怎么推进,根本没考虑,这样的方案根本没法用;
5. 对目标岗位的认知特别模糊,连岗位的核心工作是啥、该干到啥程度、哪些活不归自己管,都弄不明白 —— 问他这个岗位主要负责啥,他说的颠三倒四,工作边界更是完全没概念,明显没搞懂岗位到底是干啥的;
6. 做过的项目特别少,就算有一两个,也说不明白情况 —— 要么讲不清项目是做什么的,要么说不出自己在里面具体干了啥,连自己到底是啥角色都模模糊糊,根本没法用项目证明自己有能力;
1. 学生能回答健康管理的一些基本内容,如健康咨询、健康档案建立,但停留在课本层面,缺少疾病预防、慢病干预与营养学的深入阐述。从产业角度看,健康管理岗位是承接"健康中国2030"战略的重要环节,需要把握医学、营养、心理的综合知识体系。建议学生结合国家战略文件和行业标准学习,理解个人健康管理如何支撑国家公共健康体系。
2. 学生回答中仅提到健康咨询与服务,缺乏对大健康产业链的整体把握。实际上,健康管理不仅局限于个人服务,而是与医疗、保险、养老、营养及运动等产业高度关联。在当下产业升级背景下,健康管理已逐渐成为跨行业融合的核心支点。建议学生从宏观角度理解健康产业链逻辑,提升回答的产业高度。
3. 学生能提及健康管理师在社区卫生服务站或体检机构的常见作用,但对企业健康管理体系的回答较为空泛。在实际产业应用中,企业健康管理直接影响员工生产力、劳动风险与保险成本。建议学生多关注企业健康服务市场案例,如员工健康档案管理、职业病预防项目,以增强理解的产业实践性。
4. 面对案例提问时,学生能提出基础性方案,如提醒客户就医或调整生活习惯,但缺少多维度、系统化的干预思路。在大健康产业场景中,健康管理更强调"评估—干预—跟踪—反馈"的完整闭环。建议学生多参考慢病管理项目,熟悉常见疾病的综合干预流程,以增强解决方案的产业价值。
5. 学生能说出健康咨询、数据整理等职责,但未能体现岗位与产业发展之间的关联。在产业层面,健康管理师不仅是个体服务者,更是产业升级的执行者。岗位价值体现在支持公共健康体系建设、推动健康消费增长等方面。建议学生学习行业协会发布的岗位标准,把职责放在产业语境下进行回答。
6. 学生仅提及课堂实训经历,缺少真实项目案例。在产业层面,项目经验是健康管理岗位的重要评价依据,尤其是社区健康调查、慢病干预等实践。建议学生未来参与社区健康档案建立、健康讲座策划等活动,并用数据化成果呈现经验,提升产业匹配度。
# 现场表现力
1. 说话特别散乱,抓不住重点,逻辑还老跳 —— 比如跟他聊个事儿,他东说一句西说一句,关键信息没几句,还经常突然从一个话题跳到另一个,听的人根本跟不上,半天搞不清他想表达啥;
2. 情绪波动特别大,一会儿好一会儿坏,特别影响沟通 —— 可能刚开始聊得好好的,稍微有点问题就慌了,或者没耐心了,跟他交流的时候,很容易因为他的情绪受影响,沟通效果特别差;
3. 跟人说话或者坐着的时候,小动作特别多,坐姿也不稳 —— 一会儿摸笔、一会儿挠头,身子还总晃来晃去,这些动作特别容易分散别人的注意力,让人没法专心听他说话,印象分也会打折扣;
4. 不管是做事、做展示还是跟人聊天,时间把控得特别差 —— 要么说起来没个完,严重超时;要么没说几句就结束了,整个过程一点条理都没有,结构乱得很,完全没规划
1. 回答缺少逻辑框架,内容零散。健康管理岗位常需跨部门协作,逻辑表达是产业沟通的核心能力。建议学生采用"背景—问题—措施—结果"的模式作答,让语言更贴近产业场景。
2. 表现紧张,语速过快。大健康产业一线岗位需面对客户与医疗团队,高压下的稳定表现尤为重要。建议通过模拟情景演练训练心理素质。
3. 着装得体但缺乏职业化细节。在健康服务产业中,职业形象直接影响客户信任。建议学生加强职场礼仪训练。
4. 回答超时,缺乏重点。在健康咨询服务场景中,精准高效的表达是核心能力。建议训练两分钟完整回答模式
# 综合评价
总的来说,这学生在知识理解、行业认知、流程和岗位把握、方案设计、项目经验、表达逻辑,还有情绪管理、行为仪态、时间把控这些方面,都有挺明显的问题。这些问题不光让日常沟通和解决问题受影响,也能看出来他现在还不太能适应实际工作的要求,之后得重点补补知识的深度、多了解行业和岗位,再好好练练说话的逻辑和心态,慢慢把综合能力提上来才行`
在第一轮面试中,学生展现了对健康管理基础知识的掌握,如健康咨询、健康评估和档案建立,但回答多停留在课本层面,缺少与实际工作及产业趋势的结合。逻辑性不足,表达略显零散。在涉及大健康产业链问题时,更多关注个体层面,未能体现出健康管理与医疗、保险、营养、养老等产业环节的关联。在当前"健康中国2030"战略背景下,健康管理岗位不仅服务个人,更肩负公共健康和产业升级的使命。建议学生在后续训练中多关注国家政策和产业模式,并结合案例思考岗位价值,从而提升面试表达的高度`
};
} else if (selectedItem === "第二次线下面试模拟") {
return {
totalScore: 67, // 根据JSON计算的真实总分
professionalScore: 41, // (7+7+6+6+7+8)/6*10*0.6 = 41
performanceScore: 26, // (8+7+6+5)/4*10*0.4 = 26
radarData: [7, 7, 6, 6, 7, 8], // 六项专业能力指标来自JSON
radarData2: [8, 7, 6, 5], // 四项现场表现指标来自JSON
totalScore: 68,
professionalScore: 44,
performanceScore: 24,
radarData: [7, 7, 7, 7, 8, 8],
radarData2: [6, 6, 6, 6],
title: "面试评价",
content: `# 专业能力
1. 关键知识掌握得挺全面的,大部分内容都能抓准,就是偶尔在小细节上有点马虎,比如个别知识点的细微区别会记混,但整体来看,知识的准确性还是不错的,核心内容都能掌握到位;
2. 对市场上的主要动态有了解,比如行业里近期的热门方向、大家关注的重点,都能说出个大概,而且能简单讲讲这些动态对业务开展有啥意义,虽然说得不算深入,但至少能把 "动态和业务" 的关联点到,有基本的认知;
3. 明白工作的主要流程是啥,比如一项业务从开始到结束要经过哪些关键步骤,都能说清楚,也知道自己在流程里负责哪个环节、要干些啥,但在细节上就有点粗糙了,比如环节之间怎么衔接、遇到小问题该怎么处理,就说不太细;
4. 面对问题或者任务时,能有个初步的思路雏形,比如想解决某个问题,能先提出一两个大概的方向,但思路不够系统,没有把 "为什么这么做、步骤是啥、需要啥支持" 串成完整的逻辑,论证的时候也缺乏足够的理由或者例子支撑,说服力还差了点;
5. 知道目标岗位的主要任务是啥,能说出大概的工作范围,比如日常要处理哪些事、负责哪些板块,但没法深入剖析岗位 —— 像岗位的核心价值是啥、不同任务之间的优先级怎么排、需要具备哪些隐藏技能,这些深入的内容就说不出来了;
6. 也参与过一定数量的项目,不是没经验的,聊项目的时候能大体描述自己在里面做了啥任务,比如负责过数据整理、协助过方案讨论,但说到项目成果就有点笼统了,比如只说 "完成了任务",没说清 "任务带来了啥效果、自己的贡献让项目有啥提升",成果没法具体体现;
营养学和健康管理的理论基础较为扎实,能够准确理解客户需求并提供专业的健康方案。在案例分析中展示了较好的数据分析能力,懂得运用健康评估工具。对慢病管理和预防保健有一定的认识,但在前沿技术应用方面还需要进一步学习。
# 现场表现力
1. 说话的逻辑基本能让人听明白,不会让人抓不着重点,但偶尔会有重复的情况,比如同一句话换个说法又说一遍,或者讲到一半会停顿一下,想不起来下一句该说啥,不过整体的表达节奏还能跟上,不影响理解;
2. 面对交流或者任务时,基本能保持镇定,不会慌慌张张的,就算偶尔有点紧张,比如说话声音稍微变小、语速变快,也能自己调整过来,很快恢复平稳的状态,不会让紧张影响整体表现;
3. 平时的体态看起来挺得体的,坐姿、站姿都比较规范,跟人交流时也不会有太随意的动作,就是偶尔会有点僵硬,比如坐着的时候身体绷得太紧、手势不太自然,但这些小问题不影响整体的印象,还是显得比较专业的;
4. 不管是做事、做展示还是跟人沟通,基本能在规定时间内完成,不会出现严重超时或者没做完的情况,就是偶尔会有点小偏差 —— 要么比规定时间多花个几分钟,要么为了赶时间稍微省略一点内容,但整体的进度和完整性还是有保障的。
沟通表达较为清晰,能够用通俗易懂的语言向客户解释专业知识。在压力面试环节表现平稳,但语速略快,部分专业术语使用不够准确。团队合作意识有待加强。
# 综合评价
总的来说,这学生在知识掌握、市场认知、流程理解、思路形成、岗位认知、项目经验、表达逻辑、心态调整、体态和时间把控上,都有基础的能力,没有特别明显的短板,但在 "细节、深度、系统性" 上还有提升空间。之后可以重点补补细节知识、多深入思考岗位和项目的核心价值、把思路梳理得更系统,这样综合能力就能再上一个台阶,也会更适配实际工作的要求`
整体表现良好,专业基础扎实,有较强的学习能力。建议加强实际操作经验,多参与健康管理项目实践。同时要注意提升沟通技巧,学会根据不同客户调整交流方式。在后续学习中,建议重点关注智慧健康管理和个性化健康方案设计`
};
} else if (selectedItem === "第三次线下面试模拟") {
return {
totalScore: 91, // 根据JSON计算的真实总分
professionalScore: 54, // (8+10+9+8+10+9)/6*10*0.6 = 54
performanceScore: 37, // (10+8+10+10)/4*10*0.4 = 38 (约37)
radarData: [8, 10, 9, 8, 10, 9], // 六项专业能力指标来自JSON
radarData2: [10, 8, 10, 10], // 四项现场表现指标来自JSON
totalScore: 88,
professionalScore: 52,
performanceScore: 36,
radarData: [9, 9, 9, 8, 8, 9],
radarData2: [8, 8, 8, 9],
title: "面试评价",
content: `# 专业能力
1. 关键知识掌握得特别全面,不管是核心考点还是重要内容,都能稳稳抓住,就是偶尔在小细节上会有点疏漏,比如个别细碎知识点记不太准,但整体来看,知识的准确性特别好,不会出大差错;
2. 对行业里的产业链和发展趋势摸得很透,不光能说清产业链各个环节怎么联动,还能具体讲明白这些趋势会给岗位工作、业务开展带来啥影响,比如哪种趋势会让岗位多些新任务,哪种趋势能帮业务找新方向,分析得特别实在;
3. 能把企业从头到尾的工作流程说得明明白白,哪个环节该干啥、流程里的关键节点是啥,都门儿清,而且能找准自己在流程里的角色,就连跟其他部门怎么配合、配合的关键点是啥,也能说得很到位,完全不像没接触过实际工作的;
4. 就算单说具体的主要流程,也能讲清楚自己负责的环节要做啥,比如流程里的资料整理、对接沟通这些活儿,都能说透,就是在细节上稍微有点粗糙,比如环节之间怎么交接更顺畅、遇到小问题怎么快速处理,说得没那么细;
5. 对目标岗位的职责了解得特别全面,岗位要干的活儿、承担的责任都能说全,还能精准找到自己在岗位上的价值 —— 比如自己能帮岗位解决啥问题、能给团队带来啥助力,更厉害的是,能结合实际例子说明这些职责和价值怎么跟业务目标挂钩,比如做好某项工作能帮业务完成多少指标,逻辑特别顺;
6. 做过的项目又多又完整,不管是校园里的实践项目,还是外面的实习项目,都有涉及,聊项目的时候,能清清楚楚说清自己在里面扮演啥角色、过程中具体做了哪些贡献,就连最后项目拿到啥成果、带来啥效果,也能说得明明白白,不会含糊其辞;
在大健康产业知识体系方面表现优秀能够全面掌握健康管理、营养咨询、慢病预防等核心专业知识。对健康产业链有深入理解能够分析不同健康服务模式的优劣。在案例分析中展现出色的逻辑思维和专业判断力能够制定个性化的健康管理方案。对前沿健康科技如大数据分析、AI诊断等有良好认知。
# 现场表现力
# 现场表现力
1. 说话特别流畅,而且很有劲儿,不管是回答问题还是分享想法,表达的结构都很严谨,不会东拉西扯,每个信息点都能精准说到点子上,让人一听就懂,还能快速 get 到核心内容,沟通效率特别高;
2. 面对提问或者展示这些场景,基本能保持镇定,不会慌里慌张的,就算偶尔有点紧张,比如语速稍微变快、声音有点抖,也能自己快速调整过来,很快就恢复平稳状态,不会让紧张影响整体发挥;
3. 跟人交流的时候,目光交流特别自然,不会躲躲闪闪,肢体动作也跟说话内容配合得刚好,比如讲重点的时候会配合手势强调,坐着的时候姿态也很放松,这些细节让说的话更有说服力,让人觉得特别靠谱;
4. 不管是做展示、答问题,还是走流程,每个环节的时间都控制得特别准,不会出现超时或者没说完的情况,环节之间衔接得也很自然,不会有生硬的停顿,更难得的是,还会特意留时间做总结,把核心内容再梳理一遍,让人印象更深刻。
表达能力突出,能够清晰、有条理地阐述复杂的健康管理概念。在面试过程中表现自信、从容,回答问题思路清晰。具备良好的沟通技巧,能够根据对象调整表达方式。时间把控能力强,能够在有限时间内完整表达核心观点。
# 综合评价
总的来说,这学生在知识掌握、行业认知、流程理解、岗位适配、项目经验、表达能力、心态调整、沟通仪态和时间把控上,都表现得特别出色,基础扎实还懂实际应用,就算偶尔有小瑕疵也不影响整体实力。这样的学生不管是继续学习还是去工作,都能快速适应,后续再把流程细节打磨打磨,综合能力还能再上一个大台阶,绝对是个好苗子`
整体表现非常优秀,专业基础扎实,实践能力强。在大健康产业发展趋势把握、健康管理服务流程设计、客户需求分析等方面都有出色表现。建议继续深化在智慧健康、精准医疗等新兴领域的学习,有潜力成为大健康产业的核心人才`
};
} else {
return {

View File

@@ -7,13 +7,13 @@ const Portfolio = () => {
useEffect(() => {
// 添加时间戳参数来破坏缓存
const timestamp = new Date().getTime();
setIframeSrc(`https://du9uay.github.io/personal-Resume-/?t=${timestamp}`);
setIframeSrc(`https://du9uay.github.io/personal-resume-health/?t=${timestamp}`);
}, []);
const handleRefresh = () => {
// 手动刷新iframe内容
const timestamp = new Date().getTime();
setIframeSrc(`https://du9uay.github.io/personal-Resume-/?t=${timestamp}`);
setIframeSrc(`https://du9uay.github.io/personal-resume-health/?t=${timestamp}`);
};
return (

View File

@@ -20,6 +20,7 @@ const ExpertSupportPage = lazy(() => import("@/pages/ExpertSupportPage"));
const Portfolio = lazy(() => import("@/pages/Portfolio"));
const PublicCourses = lazy(() => import("@/pages/PublicCourses"));
const ResumeInterviewPage = lazy(() => import("@/pages/ResumeInterviewPage"));
const AgentPage = lazy(() => import("@/pages/AgentPage"));
export default [
{
@@ -181,6 +182,14 @@ export default [
active: "recuUY5f5an72x",
showMenuItem: true,
},
{
path: "/agent",
name: "多多Agent",
element: <AgentPage />,
default: "recuUY5tMX7M6A",
active: "recuUY5s6knA9u",
showMenuItem: true,
},
],
},
{

View File

@@ -1,5 +1,6 @@
import request from "@/utils/request";
import { mockData } from "@/data/mockData";
import { getJobById } from "./companyJobsNew";
// 获取企业内推岗位页面聚合数据
export async function getCompanyJobsPageData(params) {
@@ -42,21 +43,58 @@ export async function getJobsList(params) {
// 获取企业内推岗位详情
export async function getJobsDetail(id) {
// 使用mock数据
console.log('🔍 getJobsDetail 被调用ID:', id);
// 先尝试从mockData中根据ID查找岗位
const allJobs = mockData.companyJobs.companyPositions || [];
const job = allJobs.find(job => job.id === id);
if (job) {
console.log('📋 mockData 中的岗位数量:', allJobs.length);
const jobFromMock = allJobs.find(job => job.id === id);
console.log('🎯 从 mockData 找到的岗位:', jobFromMock ? jobFromMock.position : '未找到');
if (jobFromMock && jobFromMock.position) {
// 如果找到岗位,使用 getJobByPosition 获取包含企业图片的完整数据
const { getJobByPosition } = await import("./companyJobsNew");
const jobWithImages = getJobByPosition(jobFromMock.position);
console.log('🖼️ 通过 getJobByPosition 获取的岗位数据:', {
position: jobWithImages?.position,
hasImages: !!jobWithImages?.details?.companyImages,
imageCount: jobWithImages?.details?.companyImages?.length || 0,
isExpired: jobFromMock.isExpired,
status: jobFromMock.status
});
if (jobWithImages) {
// 合并 mockData 中的状态信息(如 isExpired, status
return Promise.resolve({
success: true,
data: {
...jobWithImages,
isExpired: jobFromMock.isExpired,
status: jobFromMock.status,
isDelivered: jobFromMock.isDelivered
}
});
}
}
// 如果没找到尝试直接用ID从companyJobsNew查找
console.log('⚠️ 使用 getJobById 作为备用方案');
const jobById = getJobById(id);
if (jobById) {
console.log('✅ 通过 getJobById 找到岗位:', jobById.position);
return Promise.resolve({
success: true,
data: job
});
} else {
return Promise.resolve({
success: false,
message: "岗位不存在"
data: jobById
});
}
console.error('❌ 岗位不存在ID:', id);
return Promise.resolve({
success: false,
message: "岗位不存在"
});
}
// 获取企业内推岗位面试

View File

@@ -1,11 +1,46 @@
import companyJobsData from "@/mocks/companyJobsData.json";
import companyJobsData from "@/data/companyJobsNew.json";
import companyImagesData from "../../网页未导入数据/大健康产业/大健康_内推岗位企业图片.json";
// 创建岗位名称到企业图片的映射
const positionToImagesMap = {};
companyImagesData.forEach(item => {
const positionName = item["内推岗位名称"];
const imageLinks = item["BOSS照片链接"];
if (positionName && imageLinks) {
// 将逗号分隔的图片链接字符串转换为数组
positionToImagesMap[positionName] = imageLinks.split(',').map(url => url.trim());
}
});
// 添加调试日志
console.log('企业图片数据映射表已创建,岗位数量:', Object.keys(positionToImagesMap).length);
console.log('映射表示例(健康顾问):', positionToImagesMap['健康顾问'] ? `${positionToImagesMap['健康顾问'].length}张图片` : '未找到');
// 导出映射表供其他模块使用
export { positionToImagesMap };
// 将原始数据转换为前端格式
function transformJobData(rawJob, index) {
// 从招聘人数中提取数字
const recruitNumberMatch = rawJob["招聘人数"]?.match(/\d+/);
const remainingPositions = recruitNumberMatch ? recruitNumberMatch[0] : "若干";
// 获取该岗位对应的企业图片
const positionName = rawJob["内推岗位名称"];
const companyImages = positionToImagesMap[positionName] || [];
// 添加调试日志 - 专门针对健身顾问
if (positionName === '健身顾问') {
console.log('🏋️ transformJobData - 健身顾问:', {
index,
id: index + 1,
positionName,
hasImagesInMap: !!positionToImagesMap[positionName],
imageCount: companyImages.length,
firstImage: companyImages[0]?.substring(0, 100)
});
}
return {
id: index + 1,
position: rawJob["内推岗位名称"],
@@ -18,11 +53,12 @@ function transformJobData(rawJob, index) {
benefits: rawJob["福利标签"] || [],
deadline: rawJob["截止时间"],
jobCategory: rawJob["岗位相关标签"],
// details对象包含描述、要求公司介绍
// details对象包含描述、要求公司介绍和企业图片
details: {
description: rawJob["职位描述"] || "",
requirementsText: rawJob["任职要求"] || "",
companyInfo: rawJob["公司介绍"] || ""
companyInfo: rawJob["公司介绍"] || "",
companyImages: companyImages // 添加企业图片数组
},
// 保留原始数据以备需要
_raw: rawJob
@@ -36,8 +72,27 @@ export function getAllCompanyJobs() {
// 根据岗位名称获取岗位详情
export function getJobByPosition(positionName) {
console.log('🔎 getJobByPosition 被调用,岗位名称:', positionName);
const allJobs = getAllCompanyJobs();
return allJobs.find(job => job.position === positionName);
console.log('📊 companyJobsNew 中的岗位总数:', allJobs.length);
const foundJob = allJobs.find(job => job.position === positionName);
if (foundJob) {
console.log('✅ 找到岗位:', {
position: foundJob.position,
hasDetails: !!foundJob.details,
hasImages: !!foundJob.details?.companyImages,
imageCount: foundJob.details?.companyImages?.length || 0,
firstImage: foundJob.details?.companyImages?.[0]?.substring(0, 100) || 'N/A'
});
} else {
console.warn('⚠️ 未找到岗位:', positionName);
// 显示所有可用的岗位名称前10个
console.log('可用的岗位名称示例:', allJobs.slice(0, 10).map(j => j.position));
}
return foundJob;
}
// 根据ID获取岗位详情

View File

@@ -0,0 +1,47 @@
import companyJobsData from "@/mocks/companyJobsData.json";
// 将原始数据转换为前端格式
function transformJobData(rawJob, index) {
// 从招聘人数中提取数字
const recruitNumberMatch = rawJob["招聘人数"]?.match(/\d+/);
const remainingPositions = recruitNumberMatch ? recruitNumberMatch[0] : "若干";
return {
id: index + 1,
position: rawJob["内推岗位名称"],
salary: rawJob["薪资"],
location: rawJob["工作地点"],
education: rawJob["学历要求"],
recruitNumber: rawJob["招聘人数"],
remainingPositions: remainingPositions,
tags: rawJob["职位标签"] || [],
benefits: rawJob["福利标签"] || [],
deadline: rawJob["截止时间"],
jobCategory: rawJob["岗位相关标签"],
// details对象包含描述、要求和公司介绍
details: {
description: rawJob["职位描述"] || "",
requirementsText: rawJob["任职要求"] || "",
companyInfo: rawJob["公司介绍"] || ""
},
// 保留原始数据以备需要
_raw: rawJob
};
}
// 获取所有岗位数据
export function getAllCompanyJobs() {
return companyJobsData.map((job, index) => transformJobData(job, index));
}
// 根据岗位名称获取岗位详情
export function getJobByPosition(positionName) {
const allJobs = getAllCompanyJobs();
return allJobs.find(job => job.position === positionName);
}
// 根据ID获取岗位详情
export function getJobById(id) {
const allJobs = getAllCompanyJobs();
return allJobs.find(job => job.id === id);
}

View File

@@ -0,0 +1,112 @@
[
{
"内推岗位名称": "客户运营主管助理",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_002.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_003.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_004.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_005.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_006.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_007.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_008.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_009.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_010.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_011.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_012.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_013.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_014.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_015.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_016.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_017.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_018.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_019.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_020.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_021.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_022.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_023.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_024.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_025.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_026.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_027.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_028.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_029.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_030.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_031.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_032.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_033.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_034.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_035.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_036.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_037.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_038.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_039.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnwXN/recuWggSafnwXN_040.jpg"
},
{
"内推岗位名称": "制药工艺技术员",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafESfB/recuWggSafESfB_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafESfB/recuWggSafESfB_002.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafESfB/recuWggSafESfB_003.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafESfB/recuWggSafESfB_004.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafESfB/recuWggSafESfB_005.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafESfB/recuWggSafESfB_006.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafESfB/recuWggSafESfB_007.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafESfB/recuWggSafESfB_008.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafESfB/recuWggSafESfB_009.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafESfB/recuWggSafESfB_010.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafESfB/recuWggSafESfB_011.jpg"
},
{
"内推岗位名称": "康复理疗师管培生",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_002.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_003.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_004.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_005.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_006.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_007.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_008.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_009.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_010.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_011.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_012.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_013.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_014.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_015.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_016.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_017.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_018.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_019.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_020.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_021.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_022.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_023.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_024.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_025.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_026.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_027.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_028.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_029.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_030.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_031.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_032.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_033.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_034.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_035.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_036.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_037.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_038.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_039.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafvtny/recuWggSafvtny_040.jpg"
},
{
"内推岗位名称": "健康顾问",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafrv8V/recuWggSafrv8V_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafrv8V/recuWggSafrv8V_002.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafrv8V/recuWggSafrv8V_003.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafrv8V/recuWggSafrv8V_004.jpg"
},
{
"内推岗位名称": "大健康产品研发助理",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafI3Hu/recuWggSafI3Hu_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafI3Hu/recuWggSafI3Hu_002.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafI3Hu/recuWggSafI3Hu_003.jpg"
},
{
"内推岗位名称": "药品质量管理员",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafnLpt/recuWggSafnLpt_001.jpg"
},
{
"内推岗位名称": "药品生产总监助理",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafFh2d/recuWggSafFh2d_001.jpg"
},
{
"内推岗位名称": "心理咨询师助理",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafYx4G/recuWggSafYx4G_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafYx4G/recuWggSafYx4G_002.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafYx4G/recuWggSafYx4G_003.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafYx4G/recuWggSafYx4G_004.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafYx4G/recuWggSafYx4G_005.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafYx4G/recuWggSafYx4G_006.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafYx4G/recuWggSafYx4G_007.jpg"
},
{
"内推岗位名称": "医药市场推广专员",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafrvGi/recuWggSafrvGi_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafrvGi/recuWggSafrvGi_002.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafrvGi/recuWggSafrvGi_003.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafrvGi/recuWggSafrvGi_004.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafrvGi/recuWggSafrvGi_005.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSafrvGi/recuWggSafrvGi_006.jpg"
},
{
"内推岗位名称": "跨境电商保健品运营专员",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSaf64bB/recuWggSaf64bB_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSaf64bB/recuWggSaf64bB_002.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSaf64bB/recuWggSaf64bB_003.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSaf64bB/recuWggSaf64bB_004.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSaf64bB/recuWggSaf64bB_005.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSaf64bB/recuWggSaf64bB_006.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSaf64bB/recuWggSaf64bB_007.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSaf64bB/recuWggSaf64bB_008.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSaf64bB/recuWggSaf64bB_009.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSaf64bB/recuWggSaf64bB_010.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSaf64bB/recuWggSaf64bB_011.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWggSaf64bB/recuWggSaf64bB_012.jpg"
},
{
"内推岗位名称": "健身顾问",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_002.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_003.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_004.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_005.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_006.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_007.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_008.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_009.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_010.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_011.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_012.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_013.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_014.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_015.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_016.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_017.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_018.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_019.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_020.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_021.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_022.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu4daeITw/recuWXu4daeITw_023.jpg"
},
{
"内推岗位名称": "言语康复师",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_002.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_003.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_004.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_005.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_006.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_007.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_008.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_009.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_010.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_011.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_012.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_013.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_014.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_015.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_016.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_017.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_018.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_019.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_020.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_021.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_022.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_023.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_024.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_025.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vfmE/recuWXu6h9vfmE_026.jpg"
},
{
"内推岗位名称": "特殊儿童康复师",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_002.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_003.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_004.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_005.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_006.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_007.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_008.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_009.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_010.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_011.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_012.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_013.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_014.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_015.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_016.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_017.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_018.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_019.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_020.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9nxJE/recuWXu6h9nxJE_021.jpg"
},
{
"内推岗位名称": "临终关怀师",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_002.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_003.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_004.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_005.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_006.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_007.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_008.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_009.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_010.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_011.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_012.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_013.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_014.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_015.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_016.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_017.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_018.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_019.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_020.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_021.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_022.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_023.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_024.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_025.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_026.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_027.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_028.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_029.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_030.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_031.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_032.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_033.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h95dhx/recuWXu6h95dhx_034.jpg"
},
{
"内推岗位名称": "产后康复师",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9Dgvb/recuWXu6h9Dgvb_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9Dgvb/recuWXu6h9Dgvb_002.jpg"
},
{
"内推岗位名称": "医美咨询师",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_002.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_003.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_004.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_005.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_006.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_007.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_008.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_009.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_010.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_011.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_012.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_013.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_014.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_015.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_016.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_017.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_018.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_019.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_020.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_021.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_022.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_023.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_024.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_025.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_026.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_027.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_028.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_029.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_030.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_031.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_032.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_033.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_034.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_035.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_036.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_037.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_038.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_039.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_040.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_041.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9vziV/recuWXu6h9vziV_042.jpg"
},
{
"内推岗位名称": "健康理疗师助理",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9CW2O/recuWXu6h9CW2O_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9CW2O/recuWXu6h9CW2O_002.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9CW2O/recuWXu6h9CW2O_003.jpg"
},
{
"内推岗位名称": "成人康复治疗师助理",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu6h9KZQl/recuWXu6h9KZQl_001.jpg"
},
{
"内推岗位名称": "中医推拿师",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu85OchWB/recuWXu85OchWB_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu85OchWB/recuWXu85OchWB_002.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu85OchWB/recuWXu85OchWB_003.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu85OchWB/recuWXu85OchWB_004.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu85OchWB/recuWXu85OchWB_005.jpg"
},
{
"内推岗位名称": "新媒体运营专员",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8T1seSu/recuWXu8T1seSu_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8T1seSu/recuWXu8T1seSu_002.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8T1seSu/recuWXu8T1seSu_003.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8T1seSu/recuWXu8T1seSu_004.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8T1seSu/recuWXu8T1seSu_005.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8T1seSu/recuWXu8T1seSu_006.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8T1seSu/recuWXu8T1seSu_007.jpg"
},
{
"内推岗位名称": "活动执行",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_002.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_003.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_004.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_005.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_006.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_007.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_008.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_009.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_010.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_011.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_012.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_013.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_014.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_015.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_016.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_017.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_018.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu8WVvmHm/recuWXu8WVvmHm_019.jpg"
},
{
"内推岗位名称": "客服",
"产业": "大健康",
"BOSS照片链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_001.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_002.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_003.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_004.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_005.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_006.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_007.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_008.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_009.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_010.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_011.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_012.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_013.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_014.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_015.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_016.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_017.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_018.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_019.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_020.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_021.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_022.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_023.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_024.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_025.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_026.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_027.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_028.jpg,https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/comp/recuWXu93bRHqk/recuWXu93bRHqk_029.jpg"
}
]

View File

@@ -81,7 +81,7 @@
"# 个性化营养算法首创",
"# 60%企业营收增30%"
],
"❌导师头像url链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.png"
"❌导师头像url链接": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuW7dxJ5t1Ii.jpeg"
},
{
"查询导师名称": "张国强",

File diff suppressed because one or more lines are too long