(一)员工管理模块
- 导出 Excel 功能
- 深入研究了导出员工接口返回二进制流的处理方式,确保接口的稳定性和数据准确性。
- 成功在 axios 中配置 responseType 为 blob,使其能够正确接收二进制流文件并转换为 Blob 格式,经过多次测试,数据转换无误。
- 完成 file-saver 包的安装,并在代码中实现了点击按钮调用接口后,利用 file-saver 将 blob 转化为文件下载的功能。同时,对下载功能进行了全面测试,包括不同浏览器兼容性测试,确保在主流浏览器(如 Chrome、Firefox、Edge 等)中都能正常下载且文件名显示正确。
- Excel 组件封装
- 按照规范创建了员工导入组件(import-excel.vue),精心设计了组件的模板结构和样式,使其具有良好的用户界面。
- 在员工管理页面(src/views/employee/index.vue)顺利导入并注册了该组件,确保组件能够正确渲染和交互。
- 声明了控制弹层显示的变量,并将其与组件的显示逻辑紧密结合,实现了点击按钮时能够流畅地弹出员工导入弹层,提升了用户操作的便捷性。
- 下载导入模板
- 仔细封装了下载导入模板的 API(src/api/employee.js),确保模板的生成逻辑正确无误。
- 在员工导入组件(src/views/employee/components/import-excel.vue)中成功实现了点击按钮下载模板的功能,经过测试,下载的模板格式和内容均符合预期,能够满足员工数据导入的需求。
- 员工导入 - 上传 Excel
- 高效封装了上传 excel 的 API(src/api/employee.js),确保上传接口的稳定性和数据传输的安全性。
- 实现了点击上传按钮弹出文件选择框的功能(src/views/employee/components/import-excel.vue),并对文件选择框的样式进行了微调,使其更加美观和易用。
- 完成了监听文件改变事件,实现上传 excel 并在上传完成后关闭弹层的功能。同时,理解并优化了无论上传成功或失败都清空文件选择器内容的逻辑,确保每次上传操作都能从新的状态开始,避免了文件选择器状态混乱的问题。
- 删除员工
- 成功封装了删除员工的 API(src/api/employee.js),并对删除接口进行了严格的权限验证,确保只有具备相应权限的用户才能执行删除操作。
- 在员工管理页面(src/views/employee/index.vue)合理放置了气泡框确认框,优化了确认框的提示信息,使其更加明确和友好,有效防止了用户误操作。
- 实现了删除方法,通过与后端接口的紧密协作,确保在用户确认删除后能够及时、准确地删除员工数据,并同步更新页面显示,保持数据的一致性。
(二)员工详情模块
- 页面与路由配置
- 准确拷贝并创建了员工详情页面(src/views/employee/detail.vue),依据设计要求精心搭建了页面的布局结构,包括员工信息的详细展示区域和表单编辑区域,确保页面布局合理、美观。
- 在路由模块(src/router/modules/employee.js)中正确配置了员工详情的路由信息,实现了从员工管理页面到详情页的无缝跳转,无论是点击添加员工还是查看员工详情,都能准确导航到相应页面,提升了用户体验。
- 表单数据校验
- 详细定义了员工详情表单中各字段的数据校验规则,严格按照要求实现了姓名必填且长度限制在 1 - 4 个字符、手机号必填且格式校验准确、部门和聘用形式必填、入职时间和转正时间必填且转正时间不能小于入职时间等校验逻辑。
- 在 detail.vue 文件中成功将定义的数据和校验规则与表单元素进行了精确绑定,通过多次测试,确保用户输入的数据能够得到及时、准确的校验,提高了数据的准确性和完整性。
- 部门级联组件封装与使用
- 成功创建了 select-tree 组件(src/views/employee/components/select-tree.vue),并在组件中合理设置了 Cascader 级联组件的属性,如 options 数据源的格式和结构、props 中 label 和 value 的字段映射等,确保级联组件能够正确展示部门数据。
- 在 utils/index.js 中巧妙解决了转化树形结构中的问题,通过添加判断条件,只有当前节点有子节点时才添加 children 属性,避免了级联组件在末端节点出现异常表现的情况,优化了组件的显示效果。
- 在员工详情页面(src/views/employee/detail.vue)正确引入并注册了 select-tree 组件,实现了部门级联选择功能,提升了用户选择部门的效率和准确性。
- 级联组件 - 双向绑定
- 在 select-tree 组件(src/views/employee/components/select-tree.vue)中准确接收 value 属性,并在级联改变时触发 input 事件,确保数据能够及时更新和传递。
- 在父组件(src/views/employee/detail.vue)中成功使用 v-model 实现了与级联组件的双向绑定,实现了数据的双向同步,优化了用户操作体验。
- 新增员工
- 精心封装了新增员工 API(src/api/employee.js),确保新增接口的安全性和数据传输的稳定性,对传入的数据进行了严格的验证和处理。
- 在员工详情页面(src/views/employee/detail.vue)实现了点击保存按钮进行新增员工的功能,通过与后端接口的协同工作,成功将用户输入的员工信息保存到数据库中,并在保存成功后给出友好的提示信息,引导用户进行下一步操作。
- 编辑员工 - 查看与保存
- 成功封装了获取员工详情的 API(src/api/employee.js),并对接口进行了优化,确保能够快速、准确地获取员工详细信息。
- 在员工管理页面(src/views/employee/index.vue)实现了点击查看按钮跳转到详情页并携带 id 的功能,同时在员工详情页(src/views/employee/detail.vue)中正确判断是否有 id,有 id 时及时查询详情数据并展示在页面上,实现了查看员工详情的功能。
- 封装了更新员工的 API(src/api/employee.js),并在员工详情页面(src/views/employee/detail.vue)的保存方法中准确区分保存和新增场景,根据不同场景调用相应的 API 进行数据处理。在编辑模式下,成功实现了手机号不可编辑的功能,确保用户不能随意修改已注册成功的手机号,同时优化了保存成功后的提示信息和页面跳转逻辑,提升了用户操作的流畅性和数据的安全性。
二、今日遇到的问题及解决方法
(一)技术难题
- 在处理导出 Excel 功能时,遇到了部分浏览器对 Blob 格式文件下载的兼容性问题,如文件名显示乱码。
- 解决方案:通过查阅相关文档和资料,了解到不同浏览器对 Blob 文件名编码的处理方式不同。在代码中针对不同浏览器进行了特殊处理,使用了 encodeURIComponent 函数对文件名进行编码,确保在各种主流浏览器中都能正确显示文件名。
- 在员工导入组件中,文件上传进度显示不准确。
- 解决方案:仔细检查了文件上传过程中的代码逻辑,发现是由于对上传进度事件的监听和处理不够精确。重新优化了进度计算和显示的逻辑,确保能够实时、准确地显示文件上传进度,提升用户体验。
(二)业务逻辑理解
- 在员工详情页编辑员工时,对于手机号在编辑模式下不可编辑的业务逻辑理解不够清晰,导致实现过程中出现一些困惑。
- 解决方案:与产品经理和业务团队进行了深入沟通,详细了解了手机号在新增和编辑场景下的不同处理逻辑。根据业务需求,在代码中通过判断路由参数中的 id 是否存在来确定编辑模式,进而实现了手机号在编辑模式下的不可编辑功能,确保业务逻辑的准确性。
(三)组件协作问题
- 在使用部门级联组件时,发现与其他表单组件的交互存在一些问题,如数据更新不及时。
- 解决方案:仔细检查了组件之间的数据传递和事件触发机制,发现是由于部分事件监听没有正确绑定和处理。对相关代码进行了调整和优化,确保组件之间的数据能够及时、准确地更新和同步,提高了组件协作的稳定性。