You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
362 lines
8.7 KiB
362 lines
8.7 KiB
/**
|
|
* 工具类页面领域模型(行业技能词云 / 薪资计算器 / 求职进度 / 选择身份 / 入职准备清单)。
|
|
* 与有职设计稿中「行业技能词云」「薪资计算器」「求职进度」「选择身份」「入职准备清单」五屏对应。
|
|
*/
|
|
|
|
/** 入职准备清单分类 */
|
|
export type ChecklistCategory = 'material' | 'procedure' | 'study' | 'life' | 'daily';
|
|
|
|
/** 入职准备清单单项 */
|
|
export interface ChecklistItem {
|
|
id: string;
|
|
/** 待办标题 */
|
|
title: string;
|
|
/** 是否已完成 */
|
|
done: boolean;
|
|
/** 是否必填 */
|
|
required?: boolean;
|
|
}
|
|
|
|
/** 入职准备清单分组 */
|
|
export interface ChecklistGroup {
|
|
id: ChecklistCategory;
|
|
/** 分组标题 */
|
|
title: string;
|
|
/** Ionicons 图标名 */
|
|
icon: string;
|
|
/** 是否展开 */
|
|
expanded: boolean;
|
|
/** 分组待办 */
|
|
items: ChecklistItem[];
|
|
}
|
|
|
|
/** 入职小贴士 */
|
|
export interface OnboardingTip {
|
|
id: string;
|
|
/** 标题 */
|
|
title: string;
|
|
/** 描述 */
|
|
desc: string;
|
|
/** Ionicons 图标名 */
|
|
icon: string;
|
|
}
|
|
|
|
/** 入职准备清单数据 */
|
|
export interface OnboardingChecklist {
|
|
/** 距离入职天数 */
|
|
daysLeft: number;
|
|
/** 岗位名 */
|
|
position: string;
|
|
/** 公司名 */
|
|
company: string;
|
|
/** 总待办数 */
|
|
total: number;
|
|
/** 已完成数 */
|
|
completed: number;
|
|
/** 分组清单 */
|
|
groups: ChecklistGroup[];
|
|
/** 入职日期 */
|
|
onboardingDate: string;
|
|
/** 每日提醒 */
|
|
dailyReminder: {
|
|
enabled: boolean;
|
|
time: string;
|
|
};
|
|
/** 入职小贴士 */
|
|
tips: OnboardingTip[];
|
|
}
|
|
|
|
/** 行业技能词云:单个技能词(权重决定字号与色深) */
|
|
export interface SkillWord {
|
|
/** 唯一 id */
|
|
id: string;
|
|
/** 技能名称(如 React、数据分析) */
|
|
text: string;
|
|
/** 热度权重 0-100,决定字号与色深 */
|
|
weight: number;
|
|
/** 所属技能分组(用于配色区分) */
|
|
group: 'tech' | 'soft' | 'domain' | 'tool';
|
|
}
|
|
|
|
/** 技能分类 */
|
|
export interface SkillCategory {
|
|
id: string;
|
|
label: string;
|
|
}
|
|
|
|
/** 热门技能 TOP N */
|
|
export interface TopSkill {
|
|
id: string;
|
|
/** 技能名 */
|
|
name: string;
|
|
/** 排名 */
|
|
rank: number;
|
|
/** 热度变化百分比 */
|
|
change: number;
|
|
/** 需求热度 0-100 */
|
|
demand: number;
|
|
}
|
|
|
|
/** 词云筛选标签 */
|
|
export interface SkillCloudFilter {
|
|
/** 行业选项 */
|
|
industries: string[];
|
|
/** 岗位选项 */
|
|
positions: string[];
|
|
/** 城市选项 */
|
|
cities: string[];
|
|
/** 经验选项 */
|
|
experiences: string[];
|
|
}
|
|
|
|
/** 行业技能词云数据 */
|
|
export interface SkillCloudData {
|
|
/** 行业名称 */
|
|
industry: string;
|
|
/** 岗位名称(展示用) */
|
|
position: string;
|
|
/** 城市 */
|
|
city: string;
|
|
/** 经验要求 */
|
|
experience: string;
|
|
/** 当前选中的技能分类 id */
|
|
activeCategoryId: string;
|
|
/** 筛选可选项 */
|
|
filters: SkillCloudFilter;
|
|
/** 技能分类 */
|
|
categories: SkillCategory[];
|
|
/** 技能词列表 */
|
|
words: SkillWord[];
|
|
/** 热门技能 TOP 10 */
|
|
topSkills: TopSkill[];
|
|
/** 个人技能匹配度 0-100 */
|
|
matchPercent: number;
|
|
/** 数据更新时间(展示用) */
|
|
updatedAt: string;
|
|
}
|
|
|
|
/** 薪资计算器输入参数 */
|
|
export interface SalaryCalcInput {
|
|
/** 税前月薪(元) */
|
|
monthlyGross: number;
|
|
/** 所在城市(决定社保/公积金缴费基数上下限,选择后实际参与计算) */
|
|
city: string;
|
|
/** 社保缴费基数(元) */
|
|
socialBase: number;
|
|
/** 公积金缴纳比例 0-1(如 0.12) */
|
|
providentFundRate: number;
|
|
/** 专项附加扣除(元/月) */
|
|
specialDeduction: number;
|
|
/** 年终奖月数 */
|
|
bonusMonths: number;
|
|
}
|
|
|
|
/** 城市社保/公积金缴费基数上下限(mock 阶段内置,真实后端按城市下发) */
|
|
export interface CitySocialProfile {
|
|
/** 城市名(与 CITIES 常量对应) */
|
|
city: string;
|
|
/** 社保缴费基数上限(元/月) */
|
|
socialBaseUpper: number;
|
|
/** 社保缴费基数下限(元/月) */
|
|
socialBaseLower: number;
|
|
/** 公积金缴存基数上限(元/月) */
|
|
providentBaseUpper: number;
|
|
/** 公积金缴存基数下限(元/月) */
|
|
providentBaseLower: number;
|
|
}
|
|
|
|
/** 五险一金单项明细 */
|
|
export interface SalaryInsuranceItem {
|
|
/** 险种名称 */
|
|
label: string;
|
|
/** 个人缴纳比例(0-1) */
|
|
rate: number;
|
|
/** 个人缴纳金额(元/月) */
|
|
amount: number;
|
|
}
|
|
|
|
/** 个人所得税明细项 */
|
|
export interface SalaryTaxItem {
|
|
/** 税项名称 */
|
|
label: string;
|
|
/** 金额(元) */
|
|
amount: number;
|
|
/** 适用税率(可选) */
|
|
rate?: number;
|
|
}
|
|
|
|
/** 薪资结构饼图单项 */
|
|
export interface SalaryStructureItem {
|
|
/** 分类名称 */
|
|
label: string;
|
|
/** 金额(元) */
|
|
value: number;
|
|
/** 占比 0-100 */
|
|
percent: number;
|
|
/** 主题色 token(页面中映射为 colors[color]) */
|
|
color: string;
|
|
}
|
|
|
|
/** 薪资计算器更多工具入口 */
|
|
export interface SalaryToolLink {
|
|
id: string;
|
|
/** 工具名称 */
|
|
title: string;
|
|
/** 工具描述 */
|
|
desc: string;
|
|
/** Ionicons 图标名 */
|
|
icon: string;
|
|
/** 跳转路由 */
|
|
route?: string;
|
|
}
|
|
|
|
/** 薪资计算器结果(接口层计算,页面只渲染) */
|
|
export interface SalaryCalcResult {
|
|
/** 输入参数快照 */
|
|
input: SalaryCalcInput;
|
|
/** 税前月薪(元) */
|
|
monthlyGross: number;
|
|
/** 年终奖月数 */
|
|
bonusMonths: number;
|
|
/** 月度税前合计(月薪 + 年终摊入) */
|
|
monthlyTotal: number;
|
|
/** 月度五险一金个人缴纳合计(元) */
|
|
monthlySocial: number;
|
|
/** 月度个人所得税(元) */
|
|
monthlyTax: number;
|
|
/** 月到手(元) */
|
|
monthlyNet: number;
|
|
/** 年税前合计(元) */
|
|
annualGross: number;
|
|
/** 年到手合计(元) */
|
|
annualNet: number;
|
|
/** 五险一金明细 */
|
|
insuranceItems: SalaryInsuranceItem[];
|
|
/** 个税明细 */
|
|
taxItems: SalaryTaxItem[];
|
|
/** 薪资结构(税前/五险一金/个税/到手) */
|
|
structure: SalaryStructureItem[];
|
|
}
|
|
|
|
/** 行业薪资参考(计算器对比用) */
|
|
export interface SalaryBracket {
|
|
/** 行业名称 */
|
|
industry: string;
|
|
/** 该行业平均月薪(K) */
|
|
avgMonthly: number;
|
|
/** 样本量 */
|
|
sampleCount: number;
|
|
}
|
|
|
|
/** 求职进度统计卡 */
|
|
export interface JobProgressStats {
|
|
/** 投递总数 */
|
|
total: number;
|
|
/** 待反馈数 */
|
|
pending: number;
|
|
/** 面试中 */
|
|
interviewing: number;
|
|
/** Offer 数 */
|
|
offer: number;
|
|
/** 已结束 */
|
|
ended: number;
|
|
}
|
|
|
|
/** 求职进度:即将到期 Offer */
|
|
export interface JobProgressOffer {
|
|
id: string;
|
|
/** 公司名 */
|
|
companyName: string;
|
|
/** 岗位名 */
|
|
positionName: string;
|
|
/** 薪资 */
|
|
salary: string;
|
|
/** 截止日期展示文本 */
|
|
deadline: string;
|
|
/** 剩余天数 */
|
|
daysLeft: number;
|
|
}
|
|
|
|
/** 求职进度:公司流程条目 */
|
|
export type JobProgressStage = '投递' | '待反馈' | '面试中' | 'Offer' | '已结束';
|
|
|
|
export interface JobProgressCompany {
|
|
id: string;
|
|
/** 公司名 */
|
|
companyName: string;
|
|
/** 岗位名 */
|
|
positionName: string;
|
|
/** 薪资 */
|
|
salary: string;
|
|
/** 当前阶段 */
|
|
stage: JobProgressStage;
|
|
/** 阶段展示标签 */
|
|
stageLabel: string;
|
|
/** 下一步动作或状态 */
|
|
nextAction: string;
|
|
/** 更新时间 */
|
|
date: string;
|
|
/** 未读数 */
|
|
unread?: number;
|
|
}
|
|
|
|
/** 求职进度:月度统计 */
|
|
export interface JobProgressMonthly {
|
|
/** 月份,如「8月」 */
|
|
month: string;
|
|
/** 投递数 */
|
|
deliveries: number;
|
|
/** 面试数 */
|
|
interviews: number;
|
|
/** Offer 数 */
|
|
offers: number;
|
|
}
|
|
|
|
/** 求职进度步骤状态(派生联合类型,禁止页面硬编码判断) */
|
|
export type ProgressStatus = 'done' | 'active' | 'todo';
|
|
|
|
/** 求职进度单个步骤 */
|
|
export interface ProgressStep {
|
|
id: string;
|
|
/** 阶段标题(如 已投递) */
|
|
title: string;
|
|
/** 阶段描述 */
|
|
desc: string;
|
|
/** 状态:已完成 / 进行中 / 未开始 */
|
|
status: ProgressStatus;
|
|
/** 完成时间(已完成步骤展示,进行中/未开始为空) */
|
|
date?: string;
|
|
}
|
|
|
|
/** 求职进度数据 */
|
|
export interface JobProgress {
|
|
/** 统计概览 */
|
|
stats: JobProgressStats;
|
|
/** 即将到期 Offer */
|
|
offers: JobProgressOffer[];
|
|
/** 公司流程列表 */
|
|
companies: JobProgressCompany[];
|
|
/** 月度统计 */
|
|
monthlyStats: JobProgressMonthly[];
|
|
/** 时间轴步骤(可选,保留旧结构) */
|
|
steps?: ProgressStep[];
|
|
/** 面试中数 */
|
|
interviewCount?: number;
|
|
/** 总投递数 */
|
|
deliveryCount?: number;
|
|
/** 已拿 Offer 数 */
|
|
offerCount?: number;
|
|
}
|
|
|
|
/** 身份选项(C 端求职者 / 企业端 HR) */
|
|
export interface IdentityOption {
|
|
id: string;
|
|
/** 身份标题 */
|
|
title: string;
|
|
/** 身份描述 */
|
|
desc: string;
|
|
/** 图标名(Ionicons) */
|
|
icon: string;
|
|
/** 角色:求职者 / 企业(HR) */
|
|
role: 'candidate' | 'enterprise';
|
|
}
|
|
|