瀏覽代碼

feat(招聘): 新增多语言支持和职位卡片功能

- 添加中文、英文和日文的招聘相关翻译内容
- 实现职位卡片的多语言显示功能
- 移除不再使用的产品数据
- 新增招聘页面相关图片资源
master
watermax 2 天之前
父節點
當前提交
ff2c82d0bf
共有 8 個檔案被更改,包括 707 行新增387 行删除
  1. 二進制
      assets/images/careers.webp
  2. 18
    27
      components/JobCard.vue
  3. 67
    7
      i18n/locales/en.ts
  4. 60
    0
      i18n/locales/ja.ts
  5. 26
    1
      i18n/locales/zh.ts
  6. 536
    330
      pages/careers.vue
  7. 0
    1
      prerenderRoutes.json
  8. 0
    21
      public/data/products-en.json

二進制
assets/images/careers.webp 查看文件


+ 18
- 27
components/JobCard.vue 查看文件

@@ -3,11 +3,9 @@
class="job-card group cursor-pointer"
@click="handleClick"
>

<div class="relative p-8 bg-zinc-800/30 backdrop-blur-sm border border-zinc-700/30 rounded-2xl transition-all duration-700 hover:border-[#35F1FF]/50 hover:bg-zinc-800/50 hover:shadow-2xl hover:shadow-[#35F1FF]/10 hover:transform hover:scale-105">
<div class="absolute inset-0 bg-gradient-to-br from-[#35F1FF]/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-700 rounded-2xl"></div>
<div class="absolute -top-2 -right-2 w-4 h-4 bg-[#35F1FF]/20 rounded-full animate-ping group-hover:animate-pulse"></div>
<!-- <div class="absolute inset-0 bg-gradient-to-br from-[#35F1FF]/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-700 rounded-2xl"></div>
<div class="absolute -top-2 -right-2 w-4 h-4 bg-[#35F1FF]/20 rounded-full animate-ping group-hover:animate-pulse"></div> -->
<div class="relative">
<!-- 职位标题 -->
@@ -44,7 +42,7 @@
<svg class="w-4 h-4 mr-2 text-[#35F1FF]" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path>
</svg>
工作职责
{{ t('careers.PositionCard.job') }}
</h5>
<div class="text-zinc-300/80 text-sm leading-relaxed line-clamp-3">
{{ formatJobDescription(job.jobResponsibilities) }}
@@ -57,7 +55,7 @@
<svg class="w-4 h-4 mr-2 text-[#35F1FF]" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1"></path>
</svg>
薪资福利
{{ t('careers.PositionCard.CB') }}
</h5>
<div class="text-zinc-300/80 text-sm leading-relaxed line-clamp-2">
{{ formatBenefits(job.benefits) }}
@@ -70,7 +68,7 @@
<svg class="w-4 h-4 mr-2 text-[#35F1FF]" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path>
</svg>
工作时间
{{ t('careers.PositionCard.workingHours') }}
</h5>
<div class="text-zinc-300/80 text-sm leading-relaxed">
{{ formatWorkTime(job.workTime) }}
@@ -80,13 +78,13 @@
<!-- 申请按钮 -->
<div class="flex justify-between items-center pt-4 border-t border-zinc-700/30">
<div class="text-xs text-zinc-500">
{{ formatDate(job.updateTime) }} 更新
{{ formatDate(job.updateTime) }} {{ t('careers.PositionCard.update') }}
</div>
<button
class="inline-flex items-center px-6 py-2 bg-[#35F1FF]/10 text-[#35F1FF] text-sm font-medium rounded-lg border border-[#35F1FF]/30 hover:bg-[#35F1FF]/20 hover:border-[#35F1FF]/50 transition-all duration-300 group-hover:scale-105"
@click.stop="handleApply"
>
<span class="mr-2">立即申请</span>
<span class="mr-2">{{ t('careers.PositionCard.JobDetails') }}</span>
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"></path>
</svg>
@@ -117,24 +115,24 @@
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path>
</svg>
</div>
<h3 class="text-xl font-semibold text-white mb-2">投递简历</h3>
<p class="text-zinc-400 text-sm">请将您的简历发送至以下邮箱</p>
<h3 class="text-xl font-semibold text-white mb-2">{{ t('careers.jobs.button') }}</h3>
<p class="text-zinc-400 text-sm">{{ t('contact.submit') }}</p>
</div>
<!-- 职位信息 -->
<div class="bg-zinc-800/50 rounded-xl p-4 mb-6">
<div class="text-sm text-zinc-400 mb-2">申请职位</div>
<div class="text-sm text-zinc-400 mb-2">{{ t('careers.jobs.title') }}</div>
<div class="text-white font-medium">{{ job.name }}</div>
<div class="text-xs text-zinc-500 mt-1">ID: {{ job.id }}</div>
</div>
<!-- 邮箱信息 -->
<div class="bg-zinc-800/50 rounded-xl p-4 mb-6">
<div class="text-sm text-zinc-400 mb-2">投递邮箱</div>
<div class="text-sm text-zinc-400 mb-2">{{ t('contact.email') }}</div>
<div class="flex items-center justify-between">
<div class="text-[#35F1FF] font-medium break-all">{{ job.email }}</div>
<button @click="copyEmail" class="ml-3 px-3 py-1 bg-[#35F1FF]/10 text-[#35F1FF] text-xs rounded-lg hover:bg-[#35F1FF]/20 transition-colors flex-shrink-0">
{{ copied ? '已复制' : '复制' }}
{{ copied ? t('common.copied') : t('common.copy') }}
</button>
</div>
</div>
@@ -142,7 +140,7 @@
<!-- 操作按钮 -->
<div class="flex gap-3">
<button @click="closeModal" class="flex-1 px-4 py-2 bg-zinc-800/80 text-zinc-300 rounded-lg hover:bg-zinc-700/80 transition-colors">
关闭
{{ t('common.close') }}
</button>
</div>
</div>
@@ -154,6 +152,9 @@
<script setup lang="ts">
import type { Job } from '~/data/jobs'
import { locationMap, workTypeMap } from '~/data/jobs'
import { useI18n } from 'vue-i18n'

const { t } = useI18n()

/**
* 组件属性
@@ -186,7 +187,8 @@ const getLocationName = (location: number): string => {
* @returns 工作类型
*/
const getWorkType = (webSite: number): string => {
return workTypeMap[webSite] || '全职'
// 假设 1 代表全职,其他值可以扩展
return workTypeMap[webSite] || t('careers.workType.fullTime')
}

/**
@@ -305,17 +307,6 @@ const copyEmail = async () => {
}, 2000)
}
}

/**
* 打开邮箱客户端
*/
const openEmailClient = () => {
const subject = encodeURIComponent(`应聘申请 - ${props.job.name}`)
const body = encodeURIComponent(`您好,我对贵公司的${props.job.name}职位很感兴趣,希望能够申请这个职位。\n\n职位ID: ${props.job.id}\n职位名称: ${props.job.name}\n\n请查收我的简历,期待您的回复。`)
window.open(`mailto:${props.job.email}?subject=${subject}&body=${body}`)
closeModal()
}
</script>

<style scoped>

+ 67
- 7
i18n/locales/en.ts 查看文件

@@ -16,6 +16,9 @@ export default {
noResults: "No results found",
searching: "Searching...",
backToTop: "Back to Top",
copy: "Copy",
copied: "Copied",
close: "Close",
breadcrumb: {
home: "Home",
privacy: "Privacy Policy",
@@ -288,13 +291,13 @@ export default {
"Introduction to Hanye's company overview, business philosophy, and corporate information.",
keywords:
"Hanye, company overview, business philosophy, corporate information",
overview: {
companyName: "Company Name",
location: "Location",
tel: "Tel",
email: "Email",
businessHours: "Business Hours"
},
overview: {
companyName: "Company Name",
location: "Location",
tel: "Tel",
email: "Email",
businessHours: "Business Hours"
},
companyInfo: {
name: "Hanye",
companyName: "Hanye",
@@ -445,4 +448,61 @@ export default {
submitSuccess: "Submitted successfully! We will get back to you soon.",
submitError: "Failed to submit. Please try again later or contact us directly."
},
careers: {
title: "Careers",
subtitle: "Join us to create the future of storage technology together. We are looking for passionate talents to drive technological innovation with us.",
CompanyHistory: "Years of Corporate History",
TeamMembers: "Team Members",
ProductModel: "Product Model",
technicalSupport: "Technical Support",
keywords: "Hanye, Careers, Job Opportunities, Talent Recruitment, Technical Positions",
sectionTitle: "Talent Recruitment",
CurrentlyOpen: "Currently Open",
Aposition: "positions",
workType: {
fullTime: "Full-time",
partTime: "Part-time",
internship: "Internship"
},
culture: {
sectionTitle: "Corporate Culture",
title: "Our Values",
innovation: {
title: "Innovation-Driven",
description: "Continuously innovate in technology, pursue excellence in product design and solutions, and advance storage technology."
},
teamwork: {
title: "Teamwork",
description: "We advocate for open communication and win-win collaboration to create a positive and supportive team atmosphere."
},
quality: {
title: "Quality First",
description: "We always adhere to high-quality standards to provide customers with reliable and stable products and services."
},
growth: {
title: "Mutual Growth",
description: "We provide an excellent platform for career development, growing together with our employees to realize their personal value."
}
},
PositionCard: {
job: "Job Responsibilities",
CB: "Compensation & Benefits",
workingHours: "Working Hours",
update: "Updated",
JobDetails: "View Job Details"
},
jobs: {
sectionTitle: "Job Listings",
title: "Open Positions",
description: "We are looking for talented individuals to join our team. Browse the positions below to find the right opportunity for you.",
button: "Apply Now",
noPositions: "No Open Positions Currently",
checkLater: "Please check back later or contact us for the latest job information."
},
cta: {
title: "Didn't find a suitable position?",
description: "We are always open to talented individuals. If you believe you are a good fit for our team, please feel free to contact us.",
button: "Contact Us"
}
}
};

+ 60
- 0
i18n/locales/ja.ts 查看文件

@@ -16,6 +16,9 @@ export default {
noResults: "関連する結果はありません",
searching: "検索中...",
backToTop: "トップに戻る",
copy: "コピー",
copied: "コピーしました",
close: "閉じる",
breadcrumb: {
home: "ホーム",
privacy: "プライバシーポリシー",
@@ -436,4 +439,61 @@ export default {
submitError:
"送信に失敗しました。後ほど再試行するか、直接お問い合わせください。",
},
careers: {
title: "採用情報",
subtitle: "私たちと共に、ストレージ技術の未来を創造しませんか。技術革新を推進するため、情熱ある人材を募集しています。",
CompanyHistory: "年の企業沿革",
TeamMembers: "チームメンバー",
ProductModel: "製品モデル",
technicalSupport: "技術サポート",
keywords: "Hanye, 採用, 求人, 人材募集, 技術職",
sectionTitle: "人材募集",
CurrentlyOpen: "現在募集中",
Aposition: "ポジション",
workType: {
fullTime: "フルタイム",
partTime: "パートタイム",
internship: "インターンシップ"
},
culture: {
sectionTitle: "企業文化",
title: "私たちの価値観",
innovation: {
title: "イノベーション駆動",
description: "継続的な技術革新、卓越した製品設計とソリューションの追求を通じて、ストレージ技術の発展を推進します。"
},
teamwork: {
title: "チームワーク",
description: "オープンなコミュニケーションと協力的なウィンウィン関係を提唱し、ポジティブなチームの雰囲気を作り出します。"
},
quality: {
title: "品質第一",
description: "常に高品質基準を堅持し、お客様に信頼性の高い安定した製品とサービスを提供します。"
},
growth: {
title: "共に成長",
description: "良好なキャリア開発プラットフォームを提供し、従業員と共に成長し、個人の価値実現をサポートします。"
}
},
PositionCard: {
job: "仕事内容",
CB: "給与・福利厚生",
workingHours: "勤務時間",
update: "更新日",
JobDetails: "求人詳細を見る"
},
jobs: {
sectionTitle: "募集職種一覧",
title: "募集中の職種",
description: "私たちは優秀な人材をチームに迎えることを楽しみにしています。以下の職種をご覧になり、あなたに合った機会を見つけてください。",
button: "応募する",
noPositions: "現在募集中の職種はありません",
checkLater: "しばらくしてから再度ご確認いただくか、最新の求人情報についてお問い合わせください。"
},
cta: {
title: "希望の職種が見つからない場合",
description: "私たちは常に優秀な人材を歓迎しています。私たちのチームに適していると思われる方は、お気軽にご連絡ください。",
button: "お問い合わせ"
}
}
};

+ 26
- 1
i18n/locales/zh.ts 查看文件

@@ -16,6 +16,11 @@ export default {
noResults: "没有找到相关结果",
searching: "搜索中...",
backToTop: "返回顶部",
// --- 新增 ---
copy: "复制",
copied: "已复制",
close: "关闭",
// --- 新增结束 ---
footer: {
productsLinks: {
personal: "个人产品",
@@ -434,8 +439,21 @@ export default {
careers: {
title: "招聘信息",
subtitle: "加入我们,共同创造存储技术的未来。我们寻找有激情的人才,与我们一起推动技术创新。",
CompanyHistory:"年企业历程",
TeamMembers:"团队成员",
ProductModel:"产品型号",
technicalSupport:"技术支持",
keywords: "Hanye, 招聘, 工作机会, 人才招聘, 技术岗位",
sectionTitle: "人才招聘",
CurrentlyOpen:"当前开放",
Aposition:"个职位",
// --- 新增 ---
workType: {
fullTime: "全职",
partTime: "兼职",
internship: "实习",
},
// --- 新增结束 ---
culture: {
sectionTitle: "企业文化",
title: "我们的价值观",
@@ -456,6 +474,13 @@ export default {
description: "提供良好的职业发展平台,与员工共同成长,实现个人价值。"
}
},
PositionCard:{
job:"工作职责",
CB:"薪资福利",
workingHours:"工作时间",
update:"更新",
JobDetails:"查看职位详情",
},
jobs: {
sectionTitle: "职位列表",
title: "开放职位",
@@ -471,4 +496,4 @@ export default {
}
},
};
};

+ 536
- 330
pages/careers.vue
文件差異過大導致無法顯示
查看文件


+ 0
- 1
prerenderRoutes.json 查看文件

@@ -187,7 +187,6 @@
"/en/products/230.DDR3-UDIMM-8GB-1.5V",
"/en/products/231.DDR3-SODIMM-8GB-1.35V",
"/en/products/CR-201BK",
"/en/products/DDR3-SODIMM-8GB-1.5V",
"/en/products/HSE-M20GRC01",
"/en/products/HSE-M40GRC01",
"/en/products/HSE-M4IN1GRC01",

+ 0
- 21
public/data/products-en.json 查看文件

@@ -1920,27 +1920,6 @@
"recommend": false,
"recommendIndex": -1
},
{
"id": "DDR3-SODIMM-8GB-1.5V",
"title": "DDR3-SODIMM-8GB-1.5V",
"name": "DDR3-SODIMM-8GB-1.5V",
"usage": [
"Memory Upgrade/Performance Enhancement"
],
"category": 3,
"image": "/images/products/DDR/DDR3-SODIMM-8GB-1.5V/ddr3-sodimm-8gb-1.5v.webp",
"description": "",
"summary": "Easy to install, no computer skills required",
"series": [
"DDR3"
],
"gallery": [],
"capacities": [
"8GB"
],
"recommend": false,
"recommendIndex": -1
},
{
"id": "HSE-M20GRC01",
"title": "HSE-M20GRC01",

Loading…
取消
儲存