218 lines
8.0 KiB
Markdown
218 lines
8.0 KiB
Markdown
# 招聘岗位列表显示问题修复记录
|
||
|
||
## 📋 基本信息
|
||
|
||
| 项目 | 信息 |
|
||
|------|------|
|
||
| **变更日期** | 2025-01-26 |
|
||
| **变更时间** | 15:30:00 |
|
||
| **变更人员** | Cursor AI |
|
||
| **变更类型** | 错误修复 |
|
||
| **影响模块** | 招生就业-招聘管理前端 |
|
||
| **变更状态** | ✅ 完成(包含参数绑定彻底修复) |
|
||
|
||
## 🎯 问题描述
|
||
|
||
用户反馈招聘岗位页面存在两个问题:
|
||
1. **企业名称显示异常**:列表中企业名称没有正确显示出来
|
||
2. **操作列样式不一致**:页面样式与企业信息页面不符,需要保持风格和颜色一致
|
||
|
||
## 🔍 根因分析
|
||
|
||
### 1. 企业名称显示问题
|
||
- **根因**:Service层使用了MyBatis-Plus的默认 `selectVoPage` 方法,该方法只查询单表,无法执行Mapper.xml中定义的JOIN查询
|
||
- **影响**:虽然Mapper.xml中正确定义了关联查询SQL,但实际查询时没有使用,导致 `enterprise_name` 字段为空
|
||
|
||
### 2. 操作列样式问题
|
||
- **根因**:招聘岗位和招聘海报页面的操作列样式与企业信息页面不一致
|
||
- **问题点**:
|
||
- 缺少tooltip提示
|
||
- 按钮样式简陋
|
||
- 颜色和间距不符合设计规范
|
||
|
||
### 3. MyBatis参数绑定问题
|
||
- **根因**:自定义Mapper方法中XML参数引用错误
|
||
- **错误信息**:`Parameter 'enterpriseId' not found. Available parameters are [page, bo, param1, param2]`
|
||
- **影响**:页面无法正常加载数据
|
||
|
||
## 🔧 修复方案
|
||
|
||
### 1. 企业名称显示修复
|
||
|
||
#### 后端修复步骤:
|
||
|
||
**Step 1: 在Mapper.xml中添加自定义查询方法**
|
||
```xml
|
||
<select id="selectJobPositionList" parameterType="org.dromara.zsjy.domain.bo.ZsjyJobPositionBo" resultMap="ZsjyJobPositionResult">
|
||
<include refid="selectZsjyJobPositionVo"/>
|
||
<where>
|
||
p.deleted = 0
|
||
<if test="enterpriseId != null">
|
||
and p.enterprise_id = #{enterpriseId}
|
||
</if>
|
||
<if test="positionName != null and positionName != ''">
|
||
and p.position_name like concat('%', #{positionName}, '%')
|
||
</if>
|
||
<if test="workAddress != null and workAddress != ''">
|
||
and p.work_address like concat('%', #{workAddress}, '%')
|
||
</if>
|
||
<if test="status != null and status != ''">
|
||
and p.status = #{status}
|
||
</if>
|
||
<if test="isPermanent != null">
|
||
and p.is_permanent = #{isPermanent}
|
||
</if>
|
||
</where>
|
||
order by p.create_time desc
|
||
</select>
|
||
```
|
||
|
||
**Step 2: 在Mapper接口中添加方法声明**
|
||
```java
|
||
IPage<ZsjyJobPositionVo> selectJobPositionList(Page<?> page, ZsjyJobPositionBo bo);
|
||
List<ZsjyJobPositionVo> selectJobPositionList(ZsjyJobPositionBo bo);
|
||
```
|
||
|
||
**Step 3: 更新Service实现**
|
||
```java
|
||
// 修复前:使用默认方法(无JOIN查询)
|
||
Page<ZsjyJobPositionVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||
|
||
// 修复后:使用自定义方法(包含JOIN查询)
|
||
Page<ZsjyJobPositionVo> result = baseMapper.selectJobPositionList(pageQuery.build(), bo);
|
||
```
|
||
|
||
### 2. 操作列样式修复
|
||
|
||
#### 前端修复步骤:
|
||
|
||
**Step 1: 招聘岗位页面操作列样式统一**
|
||
- 添加 `class-name="small-padding fixed-width"`
|
||
- 宽度调整为 `width="180"`
|
||
- 为每个按钮添加 `el-tooltip` 包装
|
||
- 统一按钮样式:`link` 类型,`size="default"`
|
||
- 统一字体大小:`font-size: 16px`
|
||
- 统一颜色:查看(蓝色)、修改(主色)、删除(红色)
|
||
- 统一间距:`margin-right: 8px`
|
||
|
||
**Step 2: 招聘海报页面操作列样式统一**
|
||
- 应用相同的样式规范
|
||
- 将"详情"改为"预览"以符合业务逻辑
|
||
|
||
#### 样式对比:
|
||
|
||
| 项目 | 修复前 | 修复后 |
|
||
|------|--------|--------|
|
||
| **按钮提示** | 无tooltip | 有tooltip |
|
||
| **按钮样式** | 简单link按钮 | 统一样式规范 |
|
||
| **颜色规范** | 不统一 | 蓝色(查看)、主色(修改)、红色(删除) |
|
||
| **间距设置** | 不规范 | 统一8px间距 |
|
||
| **列宽** | 150px | 180px |
|
||
|
||
### 3. MyBatis参数绑定修复
|
||
|
||
#### 问题分析:
|
||
- 自定义Mapper方法`selectJobPositionList`接收两个参数:`Page<?> page` 和 `ZsjyJobPositionBo bo`
|
||
- MyBatis可用参数为:`[page, bo, param1, param2]`
|
||
- XML中直接使用`enterpriseId`等字段名无法找到对应参数
|
||
|
||
#### 修复步骤:
|
||
```xml
|
||
<!-- 修复前:直接使用字段名 -->
|
||
<if test="enterpriseId != null">
|
||
and p.enterprise_id = #{enterpriseId}
|
||
</if>
|
||
|
||
<!-- 修复后:通过bo对象访问字段 -->
|
||
<if test="bo.enterpriseId != null">
|
||
and p.enterprise_id = #{bo.enterpriseId}
|
||
</if>
|
||
```
|
||
|
||
### 4. 方法名冲突最终修复
|
||
|
||
#### 根本问题分析:
|
||
- 分页查询方法名 `selectJobPositionList` 可能与MyBatis-Plus的默认方法冲突
|
||
- 需要使用完全独立的方法名避免框架级冲突
|
||
|
||
#### 最终解决方案:
|
||
```java
|
||
// Mapper接口:重命名分页查询方法
|
||
IPage<ZsjyJobPositionVo> selectJobPositionPageList(@Param("page") Page<?> page, @Param("bo") ZsjyJobPositionBo bo);
|
||
|
||
// XML映射:对应的方法ID
|
||
<select id="selectJobPositionPageList" resultMap="ZsjyJobPositionResult">
|
||
|
||
// Service调用:更新方法调用
|
||
IPage<ZsjyJobPositionVo> result = baseMapper.selectJobPositionPageList(pageQuery.build(), bo);
|
||
```
|
||
|
||
## 📊 修复详情
|
||
|
||
### 修改的文件列表
|
||
|
||
#### 后端文件 (3个)
|
||
1. `backend/ruoyi-modules/ruoyi-zsjy/src/main/resources/mapper/zsjy/ZsjyJobPositionMapper.xml`
|
||
- 添加自定义分页查询方法
|
||
- 修复MyBatis参数绑定问题(`enterpriseId` → `bo.enterpriseId`)
|
||
- 方法重命名:`selectJobPositionList` → `selectJobPositionPageList`
|
||
- 添加参数空值检查:`bo != null and bo.enterpriseId != null`
|
||
2. `backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/mapper/ZsjyJobPositionMapper.java`
|
||
- 添加方法声明和导入IPage、@Param注解
|
||
- 分页查询方法重命名:`selectJobPositionList` → `selectJobPositionPageList`
|
||
- 非分页查询方法重命名:`selectJobPositionList` → `selectJobPositionVoList`
|
||
3. `backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/service/impl/ZsjyJobPositionServiceImpl.java`
|
||
- 更新查询方法调用:使用新的方法名
|
||
- 修复类型转换问题(`Page` → `IPage`)
|
||
|
||
#### 前端文件 (2个)
|
||
1. `web/src/views/zsjy/jobPosition/index.vue`
|
||
- 操作列样式已符合规范(之前已修复)
|
||
2. `web/src/views/zsjy/recruitmentPoster/index.vue`
|
||
- 修复操作列样式
|
||
|
||
## ✅ 验证步骤
|
||
|
||
### 1. 企业名称显示验证
|
||
- [ ] 访问招聘岗位列表页面
|
||
- [ ] 确认企业名称列正确显示企业名称
|
||
- [ ] 验证搜索功能正常工作
|
||
- [ ] 确认分页功能正常
|
||
|
||
### 2. 操作列样式验证
|
||
- [ ] 检查招聘岗位页面操作列样式
|
||
- [ ] 检查招聘海报页面操作列样式
|
||
- [ ] 验证与企业信息页面样式一致性
|
||
- [ ] 确认tooltip提示正常显示
|
||
|
||
### 3. 功能完整性验证
|
||
- [ ] 测试新增功能
|
||
- [ ] 测试修改功能
|
||
- [ ] 测试删除功能
|
||
- [ ] 测试查看/预览功能
|
||
|
||
## 📝 技术总结
|
||
|
||
### 关键技术点
|
||
1. **MyBatis-Plus vs 自定义查询**:
|
||
- MyBatis-Plus的 `selectVoPage` 只适用于单表查询
|
||
- 涉及关联查询时必须使用自定义Mapper方法
|
||
|
||
2. **MyBatis参数绑定规则**:
|
||
- 多参数方法中,XML需要通过参数名访问:`bo.字段名`
|
||
- 可用参数列表:`[page, bo, param1, param2]`
|
||
- 类型转换:自定义方法返回`IPage`而非`Page`
|
||
|
||
3. **前端样式一致性**:
|
||
- 企业信息页面使用的样式规范应作为标准模板
|
||
- 操作列样式包括:tooltip、按钮类型、颜色、字体大小、间距
|
||
|
||
### 最佳实践
|
||
1. **数据查询**:涉及关联查询的业务场景,优先使用自定义Mapper方法
|
||
2. **样式规范**:制定统一的操作列样式规范,确保用户体验一致性
|
||
3. **测试验证**:修复后必须进行全面的功能验证
|
||
|
||
## 🔗 相关文档
|
||
- [招聘岗位数据库字段修复](./code-adjust-record-2025-01-26-招聘岗位数据库字段修复.md)
|
||
- [招聘信息API路径权限修复](./code-adjust-record-2025-01-26-招聘信息API路径权限修复.md)
|
||
- [招聘信息前端开发](./code-adjust-record-2025-01-26-招聘信息前端开发.md) |