Files
SMANAGE/backup/www/Invite/RecruitingTalentedIndividuals/index.html
T
TermiNexus 14902a404d chore(ccgo): 以 Vue3 做题站替换 TempLate/CCGO 原生页面并清理 www 残留
CCGO 构建产物部署至 TempLate/CCGO(旧文件移至 backup/ccgo);GVSite 已迁移残留的 Invite/Errors 旧页移至 backup/www;.gitignore 排除新工程
2026-08-11 01:41:39 +08:00

460 lines
23 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<div class="min-h-screen bg-gradient-to-br from-slate-50 via-blue-50 to-slate-50 py-20 px-4">
<div class="text-center mb-16">
<div class="inline-flex items-center gap-2 bg-blue-500/10 border border-blue-500/20 text-blue-600 text-sm px-4 py-1.5 rounded-full mb-6">
<span class="w-1.5 h-1.5 bg-blue-500 rounded-full animate-pulse"></span> 我们正在招募优秀人才
</div>
<h1 class="text-5xl font-bold text-slate-900 mb-4 tracking-tight"> 招贤 <span class="text-transparent bg-clip-text bg-gradient-to-r from-blue-600 to-cyan-600">纳士</span></h1>
<p class="text-slate-600 text-lg max-w-xl mx-auto leading-relaxed"> 加入我们,与一群有理想、有激情的伙伴共同构建项目 </p>
</div>
<div class="flex justify-center gap-12 mb-20">
<div class="text-center">
<div class="text-3xl font-bold text-slate-900">20+</div>
<div class="text-slate-500 text-sm mt-1">团队成员</div>
</div>
<!--div class="w-px bg-slate-200"></div>
<div class="text-center">
<div class="text-3xl font-bold text-slate-900">30+</div>
<div class="text-slate-500 text-sm mt-1">开放职位</div>
</div>
<div class="w-px bg-slate-200"></div>
<div class="text-center">
<div class="text-3xl font-bold text-slate-900">12</div>
<div class="text-slate-500 text-sm mt-1">城市分部</div>
</div-->
</div>
<div class="flex justify-center gap-2 mb-10 flex-wrap" id="filter-tabs"></div>
<div class="max-w-4xl mx-auto space-y-4" id="job-list"></div>
<div class="text-center mb-20 mt-20">
<div class="inline-flex items-center gap-2 bg-emerald-500/10 border border-emerald-500/20 text-emerald-600 text-sm px-4 py-1.5 rounded-full mb-6">
<span class="w-1.5 h-1.5 bg-emerald-500 rounded-full animate-pulse"></span> 为什么选择我们
</div>
<h2 class="text-5xl font-bold text-slate-900 mb-4 tracking-tight"> 加入我们, <span class="text-transparent bg-clip-text bg-gradient-to-r from-emerald-600 to-cyan-600">能获得什么</span>
</h2>
<p class="text-slate-600 text-lg max-w-xl mx-auto"> 我们相信每一位成员都值得被看见、被支持、被表扬 </p>
</div>
<div class="max-w-6xl mx-auto grid grid-cols-1 md:grid-cols-2 gap-6 mb-8" id="benefits-grid"></div>
<div class="max-w-6xl mx-auto mt-6">
<div class="relative rounded-3xl overflow-hidden border border-slate-200 bg-white p-10 text-center shadow-sm">
<div class="absolute inset-0 pointer-events-none">
<div class="absolute -top-20 left-1/2 -translate-x-1/2 w-96 h-40 bg-blue-500/5 rounded-full blur-3xl"></div>
<div class="absolute -bottom-10 left-1/4 w-64 h-32 bg-emerald-500/5 rounded-full blur-3xl"></div>
<div class="absolute -bottom-10 right-1/4 w-64 h-32 bg-cyan-500/5 rounded-full blur-3xl"></div>
</div>
<div class="relative z-10">
<div class="text-4xl mb-4">🚀</div>
<h3 class="text-2xl font-bold text-slate-900 mb-3"> 还在等什么? </h3>
<p class="text-slate-600 text-sm max-w-md mx-auto mb-8 leading-relaxed"> GVSDS 工作室欢迎每一位有想法、有热情的你。<br />不论你是前端、后端、设计还是运营,这里都有你的位置。 </p>
<div class="flex justify-center gap-10 mb-8">
<div class="text-center">
<div class="text-2xl font-bold text-emerald-600">2019</div>
<div class="text-slate-500 text-xs mt-1">创立年份</div>
</div>
<div class="w-px bg-slate-200"></div>
<div class="text-center">
<div class="text-2xl font-bold text-blue-600">8+</div>
<div class="text-slate-500 text-xs mt-1">合作工作室</div>
</div>
<div class="w-px bg-slate-200"></div>
<div class="text-center">
<div class="text-2xl font-bold text-cyan-600">∞</div>
<div class="text-slate-500 text-xs mt-1">发展可能</div>
</div>
</div>
<div class="flex justify-center gap-3 flex-wrap">
<button class="bg-gradient-to-r from-emerald-500 to-cyan-500 hover:from-emerald-600 hover:to-cyan-600 text-white font-medium px-8 py-3 rounded-xl transition-all duration-200 text-sm shadow-md shadow-emerald-500/10 cursor-pointer" onclick="window.location.href='mailto:hr@gvsds.com'"> 立即加入我们 </button>
<button class="border border-slate-200 hover:border-slate-400 text-slate-700 hover:text-slate-900 px-8 py-3 rounded-xl transition-all duration-200 text-sm cursor-pointer" onclick="window.location.href='https://www.gvsds.com/'"> 了解更多 </button>
</div>
</div>
</div>
</div>
</div>
<script>
const jobs = [{
id: 1,
title: "前端程序员(原生)",
department: "技术",
location: "网络",
type: "远程",
salary: "非营利",
tags: ["JavaScript", "HTML/CSS", "TailwindCSS"],
desc: "负责核心产品前端架构设计与开发,推动前端工程化建设,参与技术选型与方案评审。",
requirements: ["14岁+", "至少有 3 年前端开发经验", "熟悉原生生态", "有大型项目架构经验优先"],
hot: true,
},
{
id: 2,
title: "前端程序员(React)",
department: "技术",
location: "网络",
type: "远程",
salary: "非营利",
tags: ["React", "JavaScript", "HTML/CSS"],
desc: "负责较边缘前端架构设计与开发,推动前端工程化建设,参与技术选型与方案评审。",
requirements: ["14岁+", "至少有 3 年前端开发经验", "熟悉 React 生态", "有大型项目架构经验优先"],
hot: false,
},
{
id: 3,
title: "前端程序员(Node.js)",
department: "技术",
location: "网络",
type: "远程",
salary: "非营利",
tags: ["Node.js", "JavaScript", "HTML/CSS"],
desc: "负责 Node.js 项目前端架构设计与开发,可能涉及部分桌面端应用开发,参与技术选型与方案评审。",
requirements: ["14岁+", "至少有 3 年前端开发经验", "熟悉 Node.js 生态", "有大型项目架构经验优先"],
hot: true,
},
{
id: 4,
title: "后端程序员(Python Flask)",
department: "技术",
location: "网络",
type: "远程",
salary: "非营利",
tags: ["Python", "Flask", "SQLAlchemy"],
desc: "负责 Python Flask 项目后端架构设计与开发,参与技术选型与方案评审。",
requirements: ["14岁+", "至少有 3 年后端开发经验", "熟悉 Python Flask 生态", "有大型项目架构经验优先"],
hot: true,
},
{
id: 5,
title: "后端程序员(Python Django)",
department: "技术",
location: "网络",
type: "远程",
salary: "非营利",
tags: ["Python", "Django", "SQLAlchemy"],
desc: "负责 Python Django 企业级项目后端架构设计与开发,参与技术选型与方案评审。",
requirements: ["14岁+", "至少有 4 年后端开发经验", "熟悉 Python Django 生态", "有大型项目架构经验优先"],
hot: true,
},
{
id: 6,
title: "后端程序员(C/C++)(服务器优化)",
department: "技术",
location: "网络",
type: "远程",
salary: "非营利",
tags: ["C/C++", "GCC", "Makefile", "Clang", "AsyncIO"],
desc: "负责后端项目核心设计(重写异步库,优化服务器 QPS 性能),参与技术选型与方案评审。",
requirements: ["14岁+", "至少有 4 年后端开发经验", "熟悉 C/C++ 生态", "有大型项目架构经验优先"],
hot: true,
},
{
id: 7,
title: "程序员(C/C++/NASM)(操作系统)",
department: "技术",
location: "网络",
type: "远程",
salary: "非营利",
tags: ["C/C++", "Linux_ELF", "x86_64", "ARM", "GCC", "Makefile", "Clang", "操作系统架构设计"],
desc: "负责后端项目核心设计(重写异步库,优化服务器 QPS 性能),参与技术选型与方案评审。",
requirements: ["14岁+", "至少有 3 年 C/C++ 开发经验", "熟悉 C/C++ 生态", "有大型项目架构经验优先", "从其它类似项目跳岗优先"],
hot: true,
},
{
id: 8,
title: "程序员(C/C++/Python/Qt/Node.js)(桌面应用)",
department: "技术",
location: "网络",
type: "远程",
salary: "非营利",
tags: ["C/C++", "Python", "Qt", "Node.js", "GCC", "Makefile", "Clang"],
desc: "负责桌面端应用(如文件管理器、文本编辑器、ERP 系统、桌宠等)的前端架构设计与开发,参与技术选型与方案评审。",
requirements: ["14岁+", "至少有 3 年 C/C++ 开发经验", "熟悉 Qt/WebView 生态", "有大型项目架构经验优先"],
hot: true,
},
{
id: 9,
title: "美术师(Photoshop/Illustrator)(UI/UX设计)",
department: "设计",
location: "网络",
type: "远程",
salary: "非营利",
tags: ["Photoshop", "Illustrator", "UI/UX设计"],
desc: "负责设计用户界面(如应用程序、网站)的视觉元素,参与用户体验优化。",
requirements: ["14岁+", "至少有 3 年 UI/UX 设计经验", "熟悉 Photoshop/Illustrator 工具"],
hot: true,
},
{
id: 10,
title: "美术师(Photoshop/Illustrator/画世界等)(Furry 吉祥物 / 艺术插画设计)",
department: "设计",
location: "网络",
type: "远程",
salary: "非营利",
tags: ["Photoshop", "Illustrator", "Furry 吉祥物", "艺术插画设计"],
desc: "负责设计 Furry 吉祥物(如猫、狗、鸟、人等)的视觉元素,参与用户体验优化。",
requirements: ["14岁+", "至少有 3 年 绘画经验(画龄)", "熟悉 2D/3D 绘画工具(如 Photoshop、Illustrator)", "熟悉人体解剖结构"],
hot: true,
},
{
id: 11,
title: "3D 建模设计师",
department: "设计",
location: "网络",
type: "远程",
salary: "非营利",
tags: ["Photoshop", "Illustrator", "Blender", "3DMax", "等"],
desc: "负责使用 Blender、3DMax 等 3D 建模工具设计 游戏 的 3D 模型,参与用户体验优化。",
requirements: ["14岁+", "至少有 3 年 3D 建模经验", "熟悉 Blender、3DMax 等 3D 建模工具"],
hot: true,
},
{
id: 12,
title: "项目经理",
department: "产品",
location: "网络",
type: "远程",
salary: "非营利",
tags: ["C/C++", "Python", "Node.js", "GCC", "Makefile", "Clang", "Node.js", "Photoshop", "Illustrator", "Blender", "3DMax", "Git", "等"],
desc: "负责项目管理(需求分析、项目计划、任务分配、进度监控、风险管理),参与技术选型与方案评审。",
requirements: ["14岁+", "至少经手过 2 个中大型项目或 10 余个小型项目", "熟悉 Git 等版本控制工具"],
hot: true,
},
{
id: 13,
title: "人力资源部负责人/成员",
department: "市场",
location: "网络",
type: "远程",
salary: "非营利",
tags: ["微信", "企业微信", "QQ", "等"],
desc: "负责公司人力资源管理(员工招聘、培训、发展规划、绩效评估等),能说会道能挖人,能精准选取需要或预备需要的人才,参与公司人力资源策略制定。",
requirements: ["14岁+", "至少经手过 2 个中大型项目或 10 余个小型项目", "熟悉 Git 等版本控制工具"],
hot: true,
},
{
id: 14,
title: "剪辑师",
department: "产品",
location: "网络",
type: "远程",
salary: "非营利",
tags: ["剪辑", "视频编辑"],
desc: "负责视频剪辑(如视频编辑、视频拼接、视频剪辑等),参与视频内容创作。",
requirements: ["14岁+", "至少有 1 年 视频剪辑经验"],
hot: true,
},
];
const departments = ["全部", ...new Set(jobs.map(j => j.department))];
let activeTab = "全部";
let expandedId = null;
const tabColors = {
"全部": "bg-blue-500 text-white border-blue-500",
default: "bg-transparent text-slate-700 border-slate-200 hover:border-slate-400 hover:text-slate-900",
};
function renderTabs() {
const container = document.getElementById("filter-tabs");
container.innerHTML = departments.map(dep => `
<button
onclick="setTab('${dep}')"
class="px-5 py-2 rounded-full border text-sm font-medium transition-all duration-200 cursor-pointer
${activeTab === dep
? "bg-blue-500 text-white border-blue-500"
: "bg-transparent text-slate-700 border-slate-200 hover:border-slate-400 hover:text-slate-900"
}"
>
${dep}
</button>
`).join("");
}
function renderJobs() {
const filtered = activeTab === "全部" ? jobs : jobs.filter(j => j.department === activeTab);
const container = document.getElementById("job-list");
container.innerHTML = filtered.map(job => {
const isOpen = expandedId === job.id;
return `
<div class="group bg-white border ${isOpen ? "border-blue-500/50" : "border-slate-200 hover:border-slate-300"} rounded-2xl overflow-hidden transition-all duration-300 shadow-sm">
<div onclick="toggleJob(${job.id})" class="flex items-center justify-between p-6 cursor-pointer">
<div class="flex items-center gap-4">
<div class="w-11 h-11 rounded-xl flex items-center justify-center text-lg flex-shrink-0
${job.department === '技术' ? 'bg-blue-500/10 text-blue-600' :
job.department === '产品' ? 'bg-purple-500/10 text-purple-600' :
job.department === '设计' ? 'bg-pink-500/10 text-pink-600' :
job.department === '运营' ? 'bg-green-500/10 text-green-600' :
'bg-orange-500/10 text-orange-600'}">
${job.department === '技术' ? '⚡' :
job.department === '产品' ? '🧩' :
job.department === '设计' ? '🎨' :
job.department === '运营' ? '📈' : '📣'}
</div>
<div>
<div class="flex items-center gap-2 mb-1">
<span class="text-slate-900 font-semibold text-base">${job.title}</span>
${job.hot ? `<span class="text-xs bg-red-500/10 text-red-600 border border-red-500/20 px-2 py-0.5 rounded-full">热招</span>` : ""}
</div>
<div class="flex items-center gap-3 text-slate-500 text-xs">
<span>📍 ${job.location}</span>
<span>🏷 ${job.department}</span>
<span>⏱ ${job.type}</span>
</div>
</div>
</div>
<div class="flex items-center gap-6">
<div class="text-right hidden sm:block">
<div class="text-blue-600 font-bold text-sm">${job.salary}</div>
<div class="text-slate-400 text-xs">月薪</div>
</div>
<div class="w-8 h-8 rounded-lg bg-slate-100 flex items-center justify-center transition-transform duration-300 ${isOpen ? "rotate-180" : ""}">
<svg class="w-4 h-4 text-slate-600" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
</svg>
</div>
</div>
</div>
${isOpen ? `
<div class="px-6 pb-6 border-t border-slate-200 pt-5">
<div class="flex flex-wrap gap-2 mb-5">
${job.tags.map(tag => `
<span class="text-xs bg-slate-100 text-slate-700 px-3 py-1 rounded-md border border-slate-200">${tag}</span>
`).join("")}
</div>
<div class="grid md:grid-cols-2 gap-6 mb-6">
<div>
<h4 class="text-slate-800 font-medium text-sm mb-2 flex items-center gap-1.5"><span class="w-1 h-3.5 bg-blue-500 rounded-full inline-block"></span>岗位描述</h4>
<p class="text-slate-600 text-sm leading-relaxed">${job.desc}</p>
</div>
<div>
<h4 class="text-slate-800 font-medium text-sm mb-2 flex items-center gap-1.5"><span class="w-1 h-3.5 bg-cyan-500 rounded-full inline-block"></span>任职要求</h4>
<ul class="space-y-1.5">${job.requirements.map(r => `<li class="text-slate-600 text-sm flex items-start gap-2"><span class="text-cyan-600 mt-0.5 flex-shrink-0">✓</span>${r}</li>`).join("")}</ul>
</div>
</div>
<div class="flex items-center gap-3">
<button class="bg-gradient-to-r from-blue-500 to-cyan-500 hover:from-blue-600 hover:to-cyan-600 text-white text-sm font-medium px-6 py-2.5 rounded-lg transition-all duration-200 cursor-pointer">立即申请</button>
<button class="border border-slate-200 hover:border-slate-400 text-slate-700 hover:text-slate-900 text-sm px-5 py-2.5 rounded-lg transition-all duration-200 cursor-pointer">转发给朋友</button>
<div class="ml-auto sm:hidden text-blue-600 font-bold text-sm">${job.salary}<span class="text-slate-400 text-xs font-normal"> /月</span></div>
</div>
</div>` : ""}
</div>`;
}).join("");
}
function setTab(dep) {
activeTab = dep;
expandedId = null;
renderTabs();
renderJobs();
}
function toggleJob(id) {
expandedId = expandedId === id ? null : id;
renderJobs();
}
renderTabs();
renderJobs();
const benefits = [
{
icon: "📦",
title: "成员福利",
badge: "免费申请",
badgeColor: "bg-emerald-500/10 text-emerald-600 border-emerald-500/20",
accentColor: "from-emerald-500/10 to-transparent",
borderColor: "hover:border-emerald-500/30",
glowColor: "bg-emerald-500/5",
items: [
{ icon: "📧", text: "免费申请专属工作室邮箱,彰显你的身份" },
{ icon: "🖥️", text: "每位成员均可申请一台免费云服务器" },
{ icon: "💰", text: "表现出色?每个项目都有机会拿到专项奖金" },
{ icon: "💻", text: "项目条件允许时,我们可能为你配备一台电脑" },
{ icon: "🎖️", text: "贡献突出的成员将在下期视频中被点名表扬!" },
],
},
{
icon: "🕐",
title: "极其人性的作息",
badge: "弹性自由",
badgeColor: "bg-yellow-500/10 text-yellow-600 border-yellow-500/20",
accentColor: "from-yellow-500/10 to-transparent",
borderColor: "hover:border-yellow-500/30",
glowColor: "bg-yellow-500/5",
items: [
{ icon: "😅", text: "说实话,作息制度……视情况而定" },
{ icon: "🌙", text: "不强制打卡,不强制在线,随缘就好" },
{ icon: "🧘", text: "核心宗旨只有一条:活着就行" },
{ icon: "☕", text: "最重要的是心态放平,开心最重要" },
{ icon: "🎯", text: "只要产出到位,过程你说了算" },
],
},
{
icon: "🏆",
title: "全国顶尖的工作室",
badge: "历史悠久",
badgeColor: "bg-blue-500/10 text-blue-600 border-blue-500/20",
accentColor: "from-blue-500/10 to-transparent",
borderColor: "hover:border-blue-500/30",
glowColor: "bg-blue-500/5",
items: [
{ icon: "📅", text: "GVSDS 工作室创立于 2019 年,至今已走过数载风雨" },
{ icon: "🌟", text: "历史悠久,积淀深厚,在同类工作室中首屈一指" },
{ icon: "🏅", text: "工作室已取得多项卓越成就,实力有目共睹" },
{ icon: "🤝", text: "加入一个有历史、有底蕴的团队,你不会后悔" },
{ icon: "✨", text: "下一个被写进历史的,就是你!" },
],
},
{
icon: "🌐",
title: "丰富的资源",
badge: "8所合作",
badgeColor: "bg-purple-500/10 text-purple-600 border-purple-500/20",
accentColor: "from-purple-500/10 to-transparent",
borderColor: "hover:border-purple-500/30",
glowColor: "bg-purple-500/5",
items: [
{ icon: "🤝", text: "已与全国 8 所工作室 / 社区正式达成战略合作" },
{ icon: "📚", text: "海量学习资源、项目资源随时共享,应有尽有" },
{ icon: "🔗", text: "跨工作室交流机会,拓宽你的视野与人脉" },
{ icon: "💡", text: "多元化资源加持,让你的创意不再受限" },
{ icon: "🚀", text: "来这里,体验全网最丰富的成员资源体系" },
],
},
];
const grid = document.getElementById("benefits-grid");
grid.innerHTML = benefits.map((b, i) => `
<div class="group relative rounded-2xl border border-slate-200 ${b.borderColor} bg-white overflow-hidden transition-all duration-300 hover:-translate-y-1 hover:shadow-md hover:shadow-slate-100">
<!-- 顶部渐变光带 -->
<div class="absolute top-0 left-0 right-0 h-px bg-gradient-to-r ${b.accentColor}"></div>
<!-- 背景微光 -->
<div class="absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity duration-500 ${b.glowColor} pointer-events-none"></div>
<!-- 卡片内容 -->
<div class="relative z-10 p-7">
<!-- 头部 -->
<div class="flex items-start justify-between mb-6">
<div class="flex items-center gap-3">
<div class="w-12 h-12 rounded-2xl bg-slate-100 flex items-center justify-center text-2xl flex-shrink-0 border border-slate-200">
${b.icon}
</div>
<div>
<h3 class="text-slate-900 font-bold text-base leading-snug">${b.title}</h3>
<span class="inline-block mt-1 text-xs border px-2.5 py-0.5 rounded-full ${b.badgeColor}">
${b.badge}
</span>
</div>
</div>
<span class="text-slate-300 text-xs font-mono mt-1">0${i + 1}</span>
</div>
<!-- 条目列表 -->
<ul class="space-y-3">
${b.items.map(item => `
<li class="flex items-start gap-3 group/item">
<span class="text-base flex-shrink-0 mt-0.5 transition-transform duration-200 group-hover/item:scale-110">${item.icon}</span>
<span class="text-slate-600 text-sm leading-relaxed group-hover/item:text-slate-800 transition-colors duration-200">${item.text}</span>
</li>
`).join("")}
</ul>
</div>
</div>
`).join("");
</script>