--- inclusion: always --- # 项目开发规范与注意事项 ## 技术栈 - Plasmo + React + TypeScript - 样式:SCSS ## 项目结构 ``` src/ ├── background/ │ └── index.ts # 插件后台脚本(Service Worker) ├── components/ │ ├── SidebarPanel.tsx # 侧边栏面板组件(主操作界面,自动填写入口) │ └── SidebarPanel.scss # 侧边栏样式 ├── contents/ │ └── sidebar.tsx # Content Script 入口(注入侧边栏到页面) ├── lib/ │ ├── types.ts # 所有共享类型定义(简历接口、表单标签、匹配字段、UI组件库配置) │ ├── constants.ts # 常量数据(JOB_FORM_LABELS标签数组、TEST_FILL_DATA测试数据、UI_LIB_PICKER_CONFIGS组件库配置、SPECIAL_LABEL_PLACEHOLDERS特殊标签修正配置) │ ├── dom.ts # DOM工具(extractDomStructure提取DOM树、detectPageLanguage语言检测、isJobApplicationForm表单页判断、buildSelector选择器生成) │ ├── formMatcher.ts # 表单字段匹配(matchFormFields在DOM中匹配标签对应的input、findNearestInput查找input、fixSpecialLabelInput特殊标签修正) │ ├── pickerDetector.ts # 选择器识别(detectPickerField检测字段是否为选择器类型,通过UI组件库类名/提示文字/主动点击DOM差异对比三种方式) │ ├── pickerFill.ts # 选择器选项匹配与点击(fuzzyMatchScore模糊匹配、clickBestOptionInDropdown弹出层选项点击、findAndClickOptionInVisiblePopups全局弹出层搜索) │ ├── datePicker.ts # 日期选择器填写(fillDatePicker日期填写、tryClickMonth月份点击、tryClickDay日期点击) │ ├── autofill.ts # 自动填写核心(delay/forceSetValue工具函数、fillMatchedField字段填写入口、fillPickerField选择器填写含DOM差异对比、closePopup弹窗关闭、fillAllFields批量填写) │ ├── resumeUpload.ts # 简历上传(detectAndUploadResume检测上传按钮并从OSS下载注入文件) │ └── api.ts # API接口模块 └── assets/ ├── icon.png # 插件图标 └── icon1.png # 备用图标 ``` ## 编码规范 - 页面结构和ts的常量变量和方法都要加中文注释 - 重要逻辑加【注意】标记防止误删(如fillPickerField的DOM差异对比逻辑) ## 注意事项 - 项目接口有Java后端和Python AI后端两种,如果是联调加入新接口,一定要确认有没有说是哪个后端的 - fillPickerField中的DOM差异对比弹出层检测是核心机制,不要简化或删除 - detectPickerField的方式3(主动点击检测DOM变化)是自建组件选择器识别的关键,不要删除 - UI_LIB_PICKER_CONFIGS里不要加容易误匹配的配置(如之前Beisen Phoenix被误匹配到新东方自建网站)