/** * 工具类页面领域模型(行业技能词云 / 薪资计算器 / 求职进度 / 选择身份 / 入职准备清单)。 * 与有职设计稿中「行业技能词云」「薪资计算器」「求职进度」「选择身份」「入职准备清单」五屏对应。 */ /** 入职准备清单分类 */ 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'; }