修复招聘会详情图片与展位数据契约
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
# BUG-001:招聘会标题年份与举办日期不一致
|
||||
|
||||
- 严重级别:P2(数据展示不一致,可能误导求职者)
|
||||
- 状态:历史数据待确认;代码处理结果见 [FIX-STATUS.md](./FIX-STATUS.md)
|
||||
- 环境:test
|
||||
- 角色:PC 求职者(未登录)
|
||||
- 入口:`/shihezi/job-portal/job-fair`
|
||||
- 发现时间:2026-07-25(页面响应时间为 2026-07-24 17:06:09 GMT)
|
||||
|
||||
## 前置条件
|
||||
|
||||
使用测试环境公开求职者入口,当前日期为 2026-07-25,进入招聘会列表,保持默认“线上招聘会”和 2026 年 7 月视图。
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 打开 `https://test.xjshzly.longbiosphere.com/shihezi`。
|
||||
2. 点击顶部“招聘会”。
|
||||
3. 在“本月招聘会”区域查看 07 月 31 日的第一条招聘会。
|
||||
4. 对照页面标题和页面展示的举办日期。
|
||||
|
||||
## 预期结果
|
||||
|
||||
招聘会标题中的年份、列表日期和详情中的举办日期应指向同一场次/同一年度;如果标题是业务名称,应至少不能与举办日期产生明确矛盾。
|
||||
|
||||
## 实际结果
|
||||
|
||||
页面展示标题为“2028年‘百日千万招聘专项行动’暨第五场人才夜市——退役军人(军属)专场招聘会”,但该条目接口字段 `jobFairStartTime` 和 `jobFairEndTime` 均为 `2026-07-31`。页面因此把“2028 年”标题放在 2026 年 7 月的招聘会安排中。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-PO-001-public-list-baseline.png](../screenshots/JF-PO-001-public-list-baseline.png)
|
||||
- `GET /api/shihezi/app/jobfair/public/jobfair/currentMonth`:HTTP 200
|
||||
- 响应中同一对象的关键字段:
|
||||
|
||||
```json
|
||||
{
|
||||
"jobFairId": "1032",
|
||||
"jobFairTitle": "2028年“百日千万招聘专项行动”暨第五场人才夜市——退役军人(军属)专场招聘会",
|
||||
"jobFairStartTime": "2026-07-31 20:00:00",
|
||||
"jobFairEndTime": "2026-07-31 23:00:00"
|
||||
}
|
||||
```
|
||||
|
||||
- 页面“本月招聘会”同时显示“07月31日”和上述标题。
|
||||
- 控制台无 JavaScript 异常;该问题是业务数据/展示一致性问题,不是请求失败。
|
||||
|
||||
### 企业端户外列表的同类复现
|
||||
|
||||
在企业端户外招聘会列表中还观察到同类数据矛盾:`id=8` 的标题为“2028年石河子市文旅商贸户外招聘会”,但列表返回 `holdTime=2026-10-24 10:00:00`、`endTime=2026-10-24 17:00:00`。该记录通过 `GET /api/shihezi/cms/outdoor-fair/list?current=1&pageSize=20` 返回,页面在“开始时间/结束时间”列显示为 2026 年。
|
||||
|
||||
该观察扩大了问题影响范围:同类标题年度错误同时出现在公开线上招聘会和企业端户外招聘会数据中。
|
||||
|
||||
## 影响范围
|
||||
|
||||
公开求职者可能误以为活动发生在 2028 年,造成报名/参会时间判断错误;管理端、企业端若复用同一条数据,也可能出现同样的不一致。
|
||||
|
||||
## 初步定位
|
||||
|
||||
从浏览器响应看,标题和时间在服务端返回时已经不一致,优先检查测试环境招聘会 `1032` 的基础数据或管理端编辑保存逻辑;前端目前直接展示服务端标题,没有做年份一致性校验。
|
||||
|
||||
## 建议
|
||||
|
||||
核对该招聘会真实年度并修正数据;同时在管理端新增/编辑时增加标题年度与举办时间年度的校验或提示,避免再次产生矛盾。跨管理端、企业端和公开端复验同一 `jobFairId` 的标题与时间。
|
||||
@@ -0,0 +1,38 @@
|
||||
# BUG-002:招聘会筛选表单字段缺少 id/name
|
||||
|
||||
- 严重级别:P3(可访问性与自动填充兼容性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 求职者(未登录)
|
||||
- 入口:`/shihezi/job-portal/job-fair`
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 打开测试环境 PC 求职者入口并进入“招聘会”。
|
||||
2. 保持默认“线上招聘会”页签。
|
||||
3. 查看招聘会筛选区域的搜索输入框和年月下拉字段。
|
||||
4. 在 Chrome DevTools 控制台消息中查看页面加载后的 Issue。
|
||||
|
||||
## 预期结果
|
||||
|
||||
表单控件应具备稳定的 `id` 或 `name`,并与可见标签/辅助文本建立关联,便于键盘用户、读屏软件和浏览器自动填充识别。
|
||||
|
||||
## 实际结果
|
||||
|
||||
Chrome DevTools 报告:`A form field element should have an id or name attribute (count: 1)`。招聘会页面的筛选区包含搜索框和年月选择控件,其中至少一个原生表单字段没有 `id` 或 `name`。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-PO-001-public-list-baseline.png](../screenshots/JF-PO-001-public-list-baseline.png)
|
||||
- 页面 accessibility snapshot 显示筛选区域包含“搜索招聘会名称”搜索框以及年月 combobox。
|
||||
- 控制台消息:`msgid=9 [issue] A form field element should have an id or name attribute (count: 1)`。
|
||||
- 相关接口均返回 HTTP 200;问题不影响本次数据请求,但影响表单语义和辅助技术。
|
||||
|
||||
## 影响范围
|
||||
|
||||
使用读屏、自动填充、浏览器表单识别或自动化测试的用户可能无法稳定定位该字段;也会降低招聘会页面的无障碍质量。
|
||||
|
||||
## 建议
|
||||
|
||||
为对应原生控件补充唯一 `id/name`,并使用 `label` 或 `aria-labelledby` 与可见字段名称关联;修复后重新运行 DevTools accessibility/issue 检查。
|
||||
@@ -0,0 +1,46 @@
|
||||
# BUG-003:线上招聘会详情缺少列表已有的主办单位
|
||||
|
||||
- 严重级别:P2(同一业务对象页面信息不一致)
|
||||
- 状态:后端契约已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 求职者(未登录)
|
||||
- 入口:`/shihezi/job-portal/job-fair`
|
||||
- 招聘会:`jobFairId=1050`
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 打开测试环境 PC 求职者端的“招聘会”页面。
|
||||
2. 在“线上招聘会”列表找到“2026年师市高校毕业生等青年就业服务专项行动直播带岗”。
|
||||
3. 观察列表卡片的主办/组织单位字段。
|
||||
4. 点击该场招聘会进入详情页。
|
||||
5. 对照详情页“主办单位”字段。
|
||||
|
||||
## 预期结果
|
||||
|
||||
同一 `jobFairId` 的列表和详情应展示一致的主办单位;详情接口应返回该字段,或前端使用列表上下文中的同值回填。
|
||||
|
||||
## 实际结果
|
||||
|
||||
列表展示“石河子人力资源产业园创新创业基地”,详情页展示“主办单位:暂未公布”。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 列表/详情截图:[JF-PO-004-online-detail.png](../screenshots/JF-PO-004-online-detail.png)
|
||||
- 详情截图中“主办单位:暂未公布”。
|
||||
- `GET /api/shihezi/app/jobfair/public/jobfair/detail?jobFairId=1050`:HTTP 200,响应包含标题、地址、简介、起止时间、类型、经纬度、`isSignUp`,但没有 `jobFairHostUnit` 或 `jobFairOrganizeUnit`。
|
||||
- 列表接口 `GET /api/shihezi/app/jobfair/public/jobfair/page?pageNum=1&pageSize=9` 同一场次返回 `jobFairHostUnit` 与 `jobFairOrganizeUnit`。
|
||||
- `GET /api/shihezi/app/jobfair/public/jobfair/enterprises-with-jobs-by-job-fair-id?jobFairId=1050`:HTTP 200,岗位展示正常。
|
||||
- 控制台无 JavaScript 异常,仅有 CSS preload 警告。
|
||||
|
||||
## 影响范围
|
||||
|
||||
求职者从列表进入详情时会丢失重要的主办单位信息,降低可信度;管理端或分享深链接直接打开详情时同样可能出现信息缺失。
|
||||
|
||||
## 初步定位
|
||||
|
||||
前端详情组件优先读取 `jobFairHostUnit` / `jobFairOrganizeUnit`,但详情接口响应未提供这两个字段;列表接口字段完整。优先检查公共招聘会详情 DTO/查询 SQL 的字段映射和公开详情接口序列化。
|
||||
|
||||
## 建议
|
||||
|
||||
统一列表与详情返回模型;补齐详情接口主办单位字段,并用同一 `jobFairId` 验证列表、详情和管理端数据一致性。
|
||||
@@ -0,0 +1,48 @@
|
||||
# BUG-004:企业端线上招聘会筛选表单缺少字段语义关联
|
||||
|
||||
- 严重级别:P3(可访问性与自动填充兼容性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 企业端(已登录测试企业角色)
|
||||
- 入口:`/shihezi/jobfair/public-job-fair`
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 使用测试企业角色进入企业管理端。
|
||||
2. 打开“招聘会管理 → 线上招聘会”。
|
||||
3. 保持默认查询条件,观察“时间范围”和“招聘会标题”筛选控件。
|
||||
4. 打开 Chrome DevTools 的 Issues/Console 信息,查看页面加载后的表单问题。
|
||||
|
||||
## 预期结果
|
||||
|
||||
筛选区的原生表单字段应具备稳定且唯一的 `id` 或 `name`,并与可见标签建立语义关联;读屏软件、键盘用户、浏览器自动填充和自动化测试应能明确识别“时间范围”和“招聘会标题”。
|
||||
|
||||
## 实际结果
|
||||
|
||||
Chrome DevTools 报告:
|
||||
|
||||
- `No label associated with a form field (count: 1)`
|
||||
- `A form field element should have an id or name attribute (count: 2)`
|
||||
|
||||
页面可正常加载列表和查询接口,但至少两个筛选字段没有稳定的字段标识,且至少一个字段没有与标签关联。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-EN-004-enterprise-filter-form.png](../screenshots/JF-EN-004-enterprise-filter-form.png)
|
||||
- accessibility snapshot 显示筛选字段为“时间范围 :”文本框、“请选择”文本框和“招聘会标题 :”文本框,但未显示对应的稳定 `id/name` 语义信息。
|
||||
- 控制台 Issue:`msgid=26 [issue] No label associated with a form field (count: 1)`。
|
||||
- 控制台 Issue:`msgid=27 [issue] A form field element should have an id or name attribute (count: 2)`。
|
||||
- `GET /api/shihezi/cms/publicJobFair/list?pageNum=1&pageSize=20`:HTTP 200,列表返回 56 条数据;问题发生在页面表单 DOM 语义层,不是接口加载失败。
|
||||
|
||||
## 影响范围
|
||||
|
||||
使用读屏、浏览器自动填充、键盘辅助技术或表单自动化的企业用户可能无法稳定定位或理解筛选字段;也会使企业端招聘会页面无法通过基础无障碍检查。
|
||||
|
||||
## 初步定位
|
||||
|
||||
企业端线上招聘会列表页的筛选表单渲染了时间范围 DatePicker/Input 和招聘会标题 Input,但页面运行时没有为全部原生字段输出可识别的 `id/name`,且至少一个字段没有对应 `<label>` 关联。该问题与 `publicJobFair` 列表请求无关,优先检查 `shz-admin/src/pages/Jobfair/PublicJobFair` 的查询表单配置和 Ant Design 字段属性透传。
|
||||
|
||||
## 建议
|
||||
|
||||
为时间范围起止字段和招聘会标题字段补充唯一 `id/name`,使用 `Form.Item label` 或显式 `htmlFor`/`aria-labelledby` 关联可见标签;修复后重新运行 Chrome DevTools Issues 与 accessibility snapshot 检查。
|
||||
@@ -0,0 +1,48 @@
|
||||
# BUG-005:企业端户外招聘会筛选表单字段缺少语义关联
|
||||
|
||||
- 严重级别:P3(可访问性与自动填充兼容性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 企业端(已登录测试企业角色)
|
||||
- 入口:`/shihezi/jobfair/jobfair/outdoorfair`
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 使用测试企业角色进入企业管理端。
|
||||
2. 打开“招聘会管理 → 户外招聘会”。
|
||||
3. 保持默认查询条件,观察“招聘会标题”和“举办单位”筛选字段。
|
||||
4. 查看 Chrome DevTools Issues/Console 中页面加载后的 Issue。
|
||||
|
||||
## 预期结果
|
||||
|
||||
筛选表单中的原生字段应有唯一的 `id/name`,并与“招聘会标题”“举办单位”等可见标签建立关联,保证读屏、自动填充和表单自动化可用。
|
||||
|
||||
## 实际结果
|
||||
|
||||
Chrome DevTools 报告:
|
||||
|
||||
- `No label associated with a form field (count: 1)`
|
||||
- `A form field element should have an id or name attribute (count: 1)`
|
||||
|
||||
户外招聘会列表和接口均能正常加载,但筛选表单未通过基础字段语义检查。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-EN-005-outdoor-list-baseline.png](../screenshots/JF-EN-005-outdoor-list-baseline.png)
|
||||
- accessibility snapshot 显示筛选字段为“招聘会标题 :”和“举办单位 :”文本框,但未输出稳定的字段标识/完整 label 关联。
|
||||
- 控制台 Issue:`msgid=41 [issue] No label associated with a form field (count: 1)`。
|
||||
- 控制台 Issue:`msgid=42 [issue] A form field element should have an id or name attribute (count: 1)`。
|
||||
- `GET /api/shihezi/cms/outdoor-fair/list?current=1&pageSize=20`:HTTP 200,返回 12 条数据;问题发生在筛选表单 DOM 语义层。
|
||||
|
||||
## 影响范围
|
||||
|
||||
读屏用户、依赖浏览器自动填充或使用表单自动化的企业用户可能无法稳定识别和定位户外招聘会筛选字段。
|
||||
|
||||
## 初步定位
|
||||
|
||||
优先检查 `shz-admin/src/pages/Jobfair/Outdoorfair` 列表查询表单的 Input/Form.Item 配置,确认 `id/name` 是否透传以及可见 label 是否通过 `htmlFor`、`aria-labelledby` 或 Ant Design Form 语义关联到原生控件。
|
||||
|
||||
## 建议
|
||||
|
||||
为“招聘会标题”和“举办单位”补充唯一 `id/name`,使用显式 label 关联;修复后重新检查 Chrome DevTools Issues 和 accessibility snapshot。
|
||||
@@ -0,0 +1,61 @@
|
||||
# BUG-006:企业端户外招聘会列表返回本机 HTTP 图片地址并触发混合内容失败
|
||||
|
||||
- 严重级别:P2(线上页面资源不可用且存在安全配置问题)
|
||||
- 状态:代码已修复;历史图片数据待数据管理员确认/清理
|
||||
- 环境:test
|
||||
- 角色:PC 企业端(已登录测试企业角色)
|
||||
- 入口:`/shihezi/jobfair/jobfair/outdoorfair`
|
||||
- 招聘会:`id=14`,标题“测试”
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 使用测试企业角色进入企业管理端。
|
||||
2. 打开“招聘会管理 → 户外招聘会”。
|
||||
3. 在列表中找到标题为“测试”的招聘会记录。
|
||||
4. 观察“招聘会照片”列,并查看 Chrome DevTools Console/Network。
|
||||
|
||||
## 预期结果
|
||||
|
||||
招聘会照片应使用测试环境可访问的 HTTPS 资源(或同源安全资源),页面应能正常展示图片,不应把本机回环地址暴露给浏览器。
|
||||
|
||||
## 实际结果
|
||||
|
||||
列表接口返回图片地址:
|
||||
|
||||
`http://127.0.0.1:9091/profile/upload/2026/07/22/Snipaste_2026-07-20_10-50-27_20260722203721A001.png`
|
||||
|
||||
当前页面为 HTTPS,Chrome 将其判定为 Mixed Content;图片请求失败,DevTools 记录 `net::ERR_CONNECTION_REFUSED`。页面截图中该记录的图片未正常加载。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-EN-005-outdoor-list-baseline.png](../screenshots/JF-EN-005-outdoor-list-baseline.png)
|
||||
- `GET /api/shihezi/cms/outdoor-fair/list?current=1&pageSize=20`:HTTP 200;响应对象 `id=14` 的 `photoUrl` 为上述 `http://127.0.0.1:9091/...` 地址。
|
||||
- Chrome Console:`Mixed Content: The page at 'https://test.xjshzly.longbiosphere.com/shihezi/jobfair/jobfair/outdoorfair' was loaded over HTTPS, but requested an insecure element 'http://127.0.0.1:9091/...'.`
|
||||
- Chrome Console:`Failed to load resource: net::ERR_CONNECTION_REFUSED`。
|
||||
- Chrome DevTools Issues:`Mixed content: load all resources via HTTPS to improve the security of your site (count: 1)`。
|
||||
- 页面只读 DOM 检查:该图片 `complete=true`,但 `naturalWidth=0`、`naturalHeight=0`,证实资源没有成功加载。
|
||||
|
||||
### 管理端同一资源的复现
|
||||
|
||||
监管管理员打开 `/shihezi/jobfair/jobfair/outdoorfair` 时,`测试` 招聘会同样返回并渲染该本机地址:
|
||||
|
||||
```text
|
||||
http://127.0.0.1:9091/profile/upload/2026/07/22/Snipaste_2026-07-20_10-50-27_20260722203721A001.png
|
||||
```
|
||||
|
||||
管理端 Network request `209` 返回 `net::ERR_CONNECTION_REFUSED`,Console 报告 HTTPS 页面请求不安全 HTTP 元素的 Mixed Content 警告。该问题因此同时影响企业端和管理端展示。
|
||||
|
||||
- 管理端截图:[JF-AD-005-admin-outdoor-list.png](../screenshots/JF-AD-005-admin-outdoor-list.png)
|
||||
|
||||
## 影响范围
|
||||
|
||||
该招聘会照片在测试环境企业端不可见;如果相同数据进入公开端、管理端或分享页面,可能造成多个端图片缺失。`127.0.0.1` 还会让不同访问者请求各自设备的本地服务,属于环境地址污染;HTTPS 页面加载 HTTP 资源也降低传输安全性。
|
||||
|
||||
## 初步定位
|
||||
|
||||
问题已出现在户外招聘会列表接口返回的 `photoUrl` 数据中,而非前端图片组件拼接错误。优先检查上传文件 URL 生成配置、历史数据迁移/清洗以及反向代理下的公网资源地址转换。
|
||||
|
||||
## 建议
|
||||
|
||||
清理 `id=14` 及同类记录中的本机地址,重新绑定可访问的 HTTPS 图片;上传服务统一生成环境无关的相对路径或 HTTPS 公网地址,并在接口/管理端保存前拒绝 `localhost`、`127.0.0.1` 等回环主机。
|
||||
@@ -0,0 +1,64 @@
|
||||
# BUG-007:企业端户外招聘会点击“报名”直接提交,未显示确认步骤
|
||||
|
||||
- 严重级别:P2(跨模块交互不一致,存在误操作风险)
|
||||
- 状态:代码已修复;复现产生的测试报名记录待数据管理员处理
|
||||
- 环境:test
|
||||
- 角色:PC 企业端(已登录测试企业角色)
|
||||
- 入口:`/shihezi/jobfair/jobfair/outdoorfair`
|
||||
- 招聘会:`id=12`,“2026年第八师石河子市年末就业帮扶户外招聘会”
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 使用测试企业角色进入企业管理端。
|
||||
2. 打开“招聘会管理 → 户外招聘会”。
|
||||
3. 在 `id=12` 的未报名记录中点击“报名”。
|
||||
4. 观察页面是否出现确认弹窗,并检查对应网络请求和列表状态。
|
||||
|
||||
## 预期结果
|
||||
|
||||
户外招聘会报名应与企业端线上招聘会保持一致:先显示确认/风险提示,明确报名会提交并进入管理员审核;只有用户再次确认后才发出报名写入请求。若产品设计确实采用单击直提交流程,也应在按钮文案或页面提示中明确告知并保持线上、户外流程一致。
|
||||
|
||||
## 实际结果
|
||||
|
||||
点击“报名”后没有出现确认弹窗,页面直接发出 POST 请求并刷新列表;该记录的报名审核状态由“--”变为“待审核”。接口响应返回 `signedUp=true`、`reviewStatus=\"0\"`。
|
||||
|
||||
与企业端线上招聘会对照:线上端点击“报名”时会先打开确认对话框,提示需要管理员审核,点击取消不会产生写入请求。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-EN-007-outdoor-signup-immediate-status.png](../screenshots/JF-EN-007-outdoor-signup-immediate-status.png)
|
||||
- `POST /api/shihezi/cms/outdoor-fair/12/company/signup`:HTTP 200。
|
||||
- 响应正文(脱敏后):
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"data": {
|
||||
"fairId": 12,
|
||||
"companyId": 4414,
|
||||
"signedUp": true,
|
||||
"reviewStatus": "0",
|
||||
"h5Url": "https://test.xjshzly.longbiosphere.com/h5/outdoor-fair/company.html?fairId=12&companyId=4414"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- 随后 `GET /api/shihezi/cms/outdoor-fair/list?current=1&pageSize=20`:HTTP 200,`id=12` 的列表状态显示“待审核”。
|
||||
- 控制台新增请求日志:`/api/cms/outdoor-fair/12/company/signup`,未观察到确认弹窗相关 DOM。
|
||||
|
||||
## 影响范围
|
||||
|
||||
企业用户点击按钮后会立即提交报名,容易在误触时产生待审核业务记录;同一企业端线上/户外报名流程不同,培训、验收和客服说明难以统一。跨端闭环还会受到该状态变更影响:管理端将看到新增待审核报名,公开/企业页面也可能显示已报名状态。
|
||||
|
||||
## 测试数据变更说明
|
||||
|
||||
本次复现意外触发了测试环境 `companyId=4414` 对 `fairId=12` 的报名写入,当前状态为“待审核”。根据本轮只读边界未执行撤销/退订或其他写操作;需由有权限的测试数据管理员决定是否清理该测试记录。
|
||||
|
||||
## 初步定位
|
||||
|
||||
户外列表组件的“报名”按钮直接调用 `POST /cms/outdoor-fair/{fairId}/company/signup` 并刷新列表;线上列表组件则在写请求前打开确认对话框。问题优先位于企业端户外招聘会列表的报名交互,而非接口返回异常。
|
||||
|
||||
## 建议
|
||||
|
||||
统一线上与户外报名流程:报名按钮先打开二次确认,说明审核状态和提交影响;确认后再发送 POST。若保留单击提交,应至少增加明确的提交反馈、撤销入口和防误触设计,并与产品/运营确认状态写入边界。
|
||||
@@ -0,0 +1,50 @@
|
||||
# BUG-008:企业端户外招聘会“报名岗位”弹窗筛选字段缺少语义关联
|
||||
|
||||
- 严重级别:P3(弹窗表单可访问性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 企业端(已登录测试企业角色)
|
||||
- 入口:`/shihezi/jobfair/jobfair/outdoorfair`
|
||||
- 招聘会:`id=7`,“2026年石河子市金秋就业援助户外招聘会”
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 在企业端户外招聘会列表中找到已通过报名的 `id=7`。
|
||||
2. 点击“查看报名岗位”。
|
||||
3. 在弹出的“2026年石河子市金秋就业援助户外招聘会 - 报名岗位”窗口中查看“岗位名称”“学历要求”“工作经验”筛选字段。
|
||||
4. 查看 Chrome DevTools Issues/Console。
|
||||
|
||||
## 预期结果
|
||||
|
||||
弹窗内每个筛选字段都应有唯一 `id/name`,并与可见标签正确关联;读屏用户应能在弹窗中明确知道输入框和两个下拉框各自的用途。
|
||||
|
||||
## 实际结果
|
||||
|
||||
打开弹窗后 Chrome DevTools Issue 计数从列表基线的 1 个未关联标签/1 个无 `id/name` 字段增加为:
|
||||
|
||||
- `No label associated with a form field (count: 2)`
|
||||
- `A form field element should have an id or name attribute (count: 2)`
|
||||
|
||||
只读 DOM 检查显示弹窗中的岗位名称原生 `input` 没有 `id`、`name`、`aria-label` 或 `aria-labelledby`;学历和工作经验下拉原生控件虽有 `id=education/experience`,但没有 `name` 或显式 `aria` 字段关联。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-EN-009-outdoor-registered-jobs-empty.png](../screenshots/JF-EN-009-outdoor-registered-jobs-empty.png)
|
||||
- accessibility snapshot 显示弹窗标题“报名岗位”,以及“岗位名称 :”“学历要求 :”“工作经验 :”字段。
|
||||
- `GET /api/shihezi/cms/outdoor-fair/7/jobs?current=1&pageSize=10`:HTTP 200,返回 `total=0`、`rows=[]`;数据为空不是请求失败,但空结果弹窗仍显示可用的筛选和“添加岗位”控件。
|
||||
- 控制台 Issue:`No label associated with a form field (count: 2)`。
|
||||
- 控制台 Issue:`A form field element should have an id or name attribute (count: 2)`。
|
||||
- 页面只读 DOM 检查确认岗位名称输入字段没有 `id/name/aria-label/aria-labelledby`。
|
||||
|
||||
## 影响范围
|
||||
|
||||
企业用户在维护户外招聘会报名岗位时,读屏和自动化工具无法稳定识别弹窗中的岗位名称筛选字段;该问题也会增加企业端招聘会功能的无障碍问题总量。
|
||||
|
||||
## 初步定位
|
||||
|
||||
问题位于户外招聘会报名岗位弹窗的查询表单字段配置,与 [BUG-005](./BUG-005-enterprise-outdoor-filter-accessibility.md) 的列表筛选表单是不同组件,但表现同属字段属性/label 透传缺失。优先检查 `shz-admin/src/pages/Jobfair/Outdoorfair` 的报名岗位弹窗组件。
|
||||
|
||||
## 建议
|
||||
|
||||
为岗位名称、学历要求、工作经验字段补充稳定 `id/name`,并通过 Form.Item label、`htmlFor` 或 `aria-labelledby` 形成显式关联;空数据场景下保留筛选没有问题,但应同时给出清晰的空状态说明和维护权限提示。
|
||||
@@ -0,0 +1,55 @@
|
||||
# BUG-009:企业端户外招聘会展位数量与展位图实际展位数不一致
|
||||
|
||||
- 严重级别:P2(容量信息与可用展位视图不一致)
|
||||
- 状态:代码已增加双口径展示;历史容量口径待确认
|
||||
- 环境:test
|
||||
- 角色:PC 企业端(已登录测试企业角色)、PC 监管管理员
|
||||
- 入口:企业端 `/shihezi/jobfair/jobfair/outdoorfair`;管理端 `/shihezi/jobfair/outdoor-fair/detail?id=6`
|
||||
- 招聘会:`id=6`,“2026年第八师团场农业技术人才户外招聘会”
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 在企业端户外招聘会列表中找到 `id=6` 的招聘会。
|
||||
2. 对照列表字段“展位数量”和“已预定摊位数”。
|
||||
3. 对已通过报名的企业记录点击“查看展位图”。
|
||||
4. 统计展位图接口返回的 `booths` 数量,并对照列表展示值。
|
||||
|
||||
## 预期结果
|
||||
|
||||
列表“展位数量”应与该招聘会展位图的实际可用/已预定展位总数一致;如果列表数量代表另一种容量,应明确标注含义,并由接口同时返回可对照的展位图总数。
|
||||
|
||||
## 实际结果
|
||||
|
||||
列表显示 `展位数量=80`、`已预定摊位数=0`;展位图接口只返回 20 个展位(`KJ01` 至 `KJ20`),且全部 `status=available`。弹窗标题说明“红色为本企业展位”,但响应中没有当前企业展位,页面只显示 20 个未预定展位。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-EN-011-outdoor-booth-map-count-mismatch.png](../screenshots/JF-EN-011-outdoor-booth-map-count-mismatch.png)
|
||||
- 列表 `GET /api/shihezi/cms/outdoor-fair/list?current=1&pageSize=20`:`id=6` 返回 `boothCount=80`、`reservedBoothCount=0`、`signedUp=true`、`reviewStatus=\"1\"`。
|
||||
- 展位图 `GET /api/shihezi/cms/outdoor-fair/6/company/booth-map`:HTTP 200,响应 `data.booths` 长度为 20,编号为 `KJ01`–`KJ20`,全部状态为 `available`,`companyId=null`。
|
||||
- accessibility snapshot 显示弹窗文案“本企业展位 / 其他已预定展位 / 未预定展位”和“展位图仅供查看,不能编辑或调整”,但没有显示总展位数量或当前企业展位编号。
|
||||
|
||||
### 管理端同一招聘会的复现
|
||||
|
||||
在监管管理员端打开同一 `id=6` 的户外招聘会详情:
|
||||
|
||||
- 招聘会基本信息显示“展位数量:80”。
|
||||
- 绑定场地“石河子市人民广场户外招聘区”的场地信息显示“展位数量:10”。
|
||||
- “展位图 → 展位列表”展示 `KJ01`–`KJ20` 共 20 个展位,全部为“未预定”。
|
||||
- `GET /api/shihezi/cms/venue-info/fair/6/booth-map`:HTTP 200,响应 `data` 长度为 20,所有记录 `status="available"`、`companyId=null`。
|
||||
- 管理端截图:[JF-AD-014-admin-outdoor-booth-mismatch.png](../screenshots/JF-AD-014-admin-outdoor-booth-mismatch.png)。
|
||||
|
||||
管理端同时暴露了招聘会容量 80、绑定场地容量 10 和实际展位图 20 三种口径,说明该问题不仅是企业端弹窗展示问题,还影响监管端容量配置和现场展位管理。
|
||||
|
||||
## 影响范围
|
||||
|
||||
企业无法可靠判断本场招聘会真实可预定展位数量、已占用数量和自身展位分配状态;管理端、企业端和现场参会安排可能依据不同数量产生容量误判。对已通过报名企业,展位图没有红色本企业展位也会造成“报名通过但未分配展位”的状态疑问。
|
||||
|
||||
## 初步定位
|
||||
|
||||
列表的 `boothCount` 与展位图接口返回的 `booths` 似乎来自不同数据源或不同模板:列表记录显示 80 个展位,而当前场地图生成 20 个展位。需要进一步核对场地模板、招聘会展位数量字段、预定关系和企业报名审核后的分配逻辑。
|
||||
|
||||
## 建议
|
||||
|
||||
统一展位数量的业务口径和接口来源;展位图加载后显示总数、已预定数、当前企业展位编号;如果企业审核通过但尚未分配展位,明确显示“已通过,待分配展位”,不要只用“本企业展位”图例造成误解。
|
||||
@@ -0,0 +1,43 @@
|
||||
# BUG-010:企业端跨域联合招聘会统计日期字段缺少 id/name
|
||||
|
||||
- 严重级别:P3(统计查询表单可访问性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 企业端(已登录测试企业角色)
|
||||
- 入口:`/shihezi/jobfair/jobfair/crosscityfair`
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 使用测试企业角色进入企业管理端。
|
||||
2. 打开“招聘会管理 → 跨域联合招聘会管理”。
|
||||
3. 保持默认“数据统计”页签,观察“统计时间”的开始日期和结束日期字段。
|
||||
4. 查看 Chrome DevTools Issues/Console。
|
||||
|
||||
## 预期结果
|
||||
|
||||
统计时间的起止日期控件应具备稳定、唯一的 `id/name` 和可识别的标签关联,便于键盘、读屏、自动填充和自动化测试使用。
|
||||
|
||||
## 实际结果
|
||||
|
||||
页面加载后 Chrome DevTools 报告:`A form field element should have an id or name attribute (count: 2)`。两个统计日期字段可见且查询功能正常,但没有满足基础字段标识检查。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-EN-012-crosscity-baseline.png](../screenshots/JF-EN-012-crosscity-baseline.png)
|
||||
- accessibility snapshot 显示“开始日期”和“结束日期”两个 textbox,默认值为 `2025-07-25`、`2026-07-25`。
|
||||
- `GET /api/shihezi/cms/publicJobFair/cross-domain-statistics?startDate=2025-07-25&endDate=2026-07-25`:HTTP 200,统计结果正常返回 1 场招聘会。
|
||||
- `GET /api/shihezi/cms/cross-city-alliance/list?pageSize=1000`:HTTP 200,联盟城市数据正常返回 9 条。
|
||||
- 控制台 Issue:`msgid=57 [issue] A form field element should have an id or name attribute (count: 2)`。
|
||||
|
||||
## 影响范围
|
||||
|
||||
依赖读屏、自动填充或表单自动化的企业用户无法稳定识别统计日期字段;统计本身不受影响,但页面无障碍检查和自动化定位会失败。
|
||||
|
||||
## 初步定位
|
||||
|
||||
优先检查 `shz-admin/src/pages/Jobfair/Crosscityfair` 数据统计页签的 RangePicker/日期表单字段配置,确保字段属性和标签语义透传到原生输入控件。
|
||||
|
||||
## 建议
|
||||
|
||||
为开始日期、结束日期提供唯一 `id/name`,并通过显式 label 或 `aria-labelledby` 建立关联;修复后重新执行默认查询和 DevTools Issues 检查。
|
||||
@@ -0,0 +1,49 @@
|
||||
# BUG-011:企业端跨域联合招聘会联盟城市管理弹窗存在字段无障碍问题
|
||||
|
||||
- 严重级别:P3(管理弹窗可访问性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 企业端(已登录测试企业角色)
|
||||
- 入口:`/shihezi/jobfair/jobfair/crosscityfair` → “区域管理” → “管理”
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 打开企业端“跨域联合招聘会管理”。
|
||||
2. 切换到“区域管理”页签。
|
||||
3. 点击“管理”,打开“联盟城市管理”弹窗。
|
||||
4. 观察“城市名称”查询字段,并查看 Chrome DevTools Issues/Console。
|
||||
|
||||
## 预期结果
|
||||
|
||||
弹窗中的“城市名称”字段应有唯一 `id/name`,与可见标签关联,并设置适当的 `autocomplete` 值;已有城市列表、编辑和删除按钮应保持键盘/读屏可识别。
|
||||
|
||||
## 实际结果
|
||||
|
||||
打开弹窗后 Chrome DevTools 记录:
|
||||
|
||||
- `A form field element should have an id or name attribute (count: 3)`,相较统计页基线的 2 个增加 1 个;
|
||||
- `No label associated with a form field (count: 1)`;
|
||||
- `An element doesn't have an autocomplete attribute (count: 1)`。
|
||||
|
||||
只读 DOM 检查显示弹窗“城市名称”原生输入存在 `id=name`,但没有 `name`、`aria-label`、`aria-labelledby` 或 `autocomplete` 属性,且没有形成稳定的 label 关联。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-EN-013-crosscity-region-management.png](../screenshots/JF-EN-013-crosscity-region-management.png)
|
||||
- `GET /api/shihezi/cms/cross-city-alliance/list?current=1&pageSize=10`:HTTP 200,弹窗显示 9 个联盟城市,列表和分页正常。
|
||||
- 控制台 Issue:`msgid=57 [issue] A form field element should have an id or name attribute (count: 3)`。
|
||||
- 控制台 Issue:`msgid=59 [issue] No label associated with a form field (count: 1)`。
|
||||
- 控制台 Issue:`msgid=60 [issue] An element doesn't have an autocomplete attribute (count: 1)`。
|
||||
|
||||
## 影响范围
|
||||
|
||||
企业用户在跨域城市维护中使用读屏或自动化工具时,无法可靠识别城市查询输入框;缺失 autocomplete 也会影响浏览器表单行为和质量检查。
|
||||
|
||||
## 初步定位
|
||||
|
||||
问题位于 `shz-admin/src/pages/Jobfair/Crosscityfair` 的联盟城市管理弹窗查询表单字段,与数据接口无关;城市列表接口 HTTP 200 且返回 9 条记录。
|
||||
|
||||
## 建议
|
||||
|
||||
补充“城市名称”字段的 `name`、显式 label/`aria-labelledby` 和合适的 `autocomplete`(例如 `off` 或符合产品语义的值),并确保编辑/新增弹窗沿用同一字段规范。
|
||||
@@ -0,0 +1,50 @@
|
||||
# BUG-012:管理端线上招聘会筛选表单缺少字段语义关联
|
||||
|
||||
- 严重级别:P3(可访问性与表单自动化兼容性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 监管管理员
|
||||
- 入口:`/shihezi/jobfair/public-job-fair`
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 前置条件
|
||||
|
||||
使用测试环境监管管理员角色登录,进入管理端“招聘会管理 → 线上招聘会”。
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 打开管理端线上招聘会列表页。
|
||||
2. 保持默认查询条件,观察“时间范围”和“招聘会标题”筛选控件。
|
||||
3. 在 Chrome DevTools 中查看页面加载后的 Console/Issues 信息,或使用无障碍树检查筛选字段。
|
||||
|
||||
## 预期结果
|
||||
|
||||
每个筛选控件都应有唯一、稳定的 `id` 或 `name`,并通过可见标签或 `aria-labelledby` 与字段建立语义关联。读屏软件、键盘辅助技术、浏览器自动填充和测试自动化应能明确识别时间范围及招聘会标题。
|
||||
|
||||
## 实际结果
|
||||
|
||||
Chrome DevTools 报告:
|
||||
|
||||
- `No label associated with a form field (count: 1)`
|
||||
- `A form field element should have an id or name attribute (count: 2)`
|
||||
|
||||
列表页面可以正常显示数据,但筛选区域至少两个字段缺少稳定字段标识,且至少一个字段没有关联标签。该问题与企业端线上招聘会筛选表单的 BUG-004 在管理员角色下出现同类表现。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-AD-001-public-jobfair-list-baseline.png](../screenshots/JF-AD-001-public-jobfair-list-baseline.png)
|
||||
- 页面可见筛选项:时间范围、招聘会标题;页面同时显示“新增”“导出”以及详情、编辑、删除入口。
|
||||
- 控制台/Issues:`No label associated with a form field (count: 1)`、`A form field element should have an id or name attribute (count: 2)`。
|
||||
- `GET /api/shihezi/cms/publicJobFair/list?pageNum=1&pageSize=20`:HTTP 200,返回 56 条记录;问题发生在筛选表单 DOM 语义层,不是列表接口失败。
|
||||
|
||||
## 影响范围
|
||||
|
||||
监管管理员使用读屏、键盘辅助技术、浏览器自动填充或表单自动化工具时,可能无法稳定定位和理解筛选字段;也会导致管理端招聘会列表无法通过基础无障碍检查。
|
||||
|
||||
## 初步定位
|
||||
|
||||
管理员线上招聘会列表的查询表单渲染了时间范围 DatePicker/Input 和标题 Input,但运行时没有向全部原生字段输出可识别的 `id/name`,且至少一个字段未与可见标签关联。该现象与企业端同类组件应进行统一检查。
|
||||
|
||||
## 建议
|
||||
|
||||
为时间范围起止字段和招聘会标题字段补充唯一 `id/name`,通过 `Form.Item`、显式 `htmlFor` 或 `aria-labelledby` 关联标签;修复后分别以管理员和企业角色复查 Console Issues、无障碍树及键盘焦点顺序。
|
||||
@@ -0,0 +1,53 @@
|
||||
# BUG-013:管理端全局管理员头像资源重复返回 404
|
||||
|
||||
- 严重级别:P3(管理端 UI 资源加载问题)
|
||||
- 状态:代码已增加本地默认图和回退;待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 监管管理员
|
||||
- 入口:`/shihezi/jobfair/public-job-fair`
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 前置条件
|
||||
|
||||
使用测试环境监管管理员角色登录,进入管理端线上招聘会列表。
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 打开管理端线上招聘会列表页。
|
||||
2. 等待页面首屏及列表请求完成。
|
||||
3. 在 Chrome DevTools Network 中筛选头像图片请求,查看页面右上角管理员头像加载情况及失败请求。
|
||||
|
||||
## 预期结果
|
||||
|
||||
管理员头像应从可访问的 HTTPS 资源加载成功;若头像不存在,页面应使用稳定的默认头像,且不应重复产生失败请求或在 Console 中产生资源错误。
|
||||
|
||||
## 实际结果
|
||||
|
||||
页面加载时向以下地址请求头像:
|
||||
|
||||
```text
|
||||
GET https://test.xjshzly.longbiosphere.com/profile/avatar/2025/07/24/blob_20250724114512a002.png
|
||||
```
|
||||
|
||||
请求返回 HTTP 404,响应正文为 Nginx 404 HTML。该请求在页面加载过程中重复出现(已观察到请求 ID `96`、`97`、`131`),Console 同时报告 `Failed to load resource: the server responded with a status of 404 (Not Found)`。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-AD-001-public-jobfair-list-baseline.png](../screenshots/JF-AD-001-public-jobfair-list-baseline.png)
|
||||
- 请求 URL:`/profile/avatar/2025/07/24/blob_20250724114512a002.png`
|
||||
- HTTP 状态:404
|
||||
- 响应类型:Nginx 404 HTML
|
||||
- 重复请求:Network request ID `96`、`97`、`131`
|
||||
- 控制台:`Failed to load resource: the server responded with a status of 404 (Not Found)`
|
||||
|
||||
## 影响范围
|
||||
|
||||
管理员在招聘会管理页面看不到真实头像,页面持续产生失败资源请求;如果公共头像组件被多个管理端页面复用,可能扩散到其他监管功能,并增加无意义的网络错误噪音。
|
||||
|
||||
## 初步定位
|
||||
|
||||
管理员用户资料返回或前端头像组件保存了一个当前不可访问的历史头像路径,页面未在 404 时可靠回退到默认头像,且组件/布局刷新导致同一资源重复请求。需要同时核对头像文件存储、静态资源映射和默认头像回退逻辑。
|
||||
|
||||
## 建议
|
||||
|
||||
确认该用户头像文件是否应恢复;若资源已失效,服务端返回默认头像或前端在 `onerror` 后替换为内置默认图,并避免重复请求。修复后在管理端多个招聘会页面复查 Network 与 Console。
|
||||
@@ -0,0 +1,53 @@
|
||||
# BUG-014:同一线上招聘会在求职者端与管理端显示为不同类型
|
||||
|
||||
- 严重级别:P2(跨端业务类型语义冲突)
|
||||
- 状态:待产品确认真实招聘会类型和统一口径
|
||||
- 环境:test
|
||||
- 角色:PC 求职者、PC 监管管理员
|
||||
- 入口:求职者端 `/shihezi/job-portal/job-fair/detail?channel=online&jobFairId=1050`;管理端 `/shihezi/jobfair/public-job-fair/detail?id=1050`
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 前置数据
|
||||
|
||||
同一招聘会 `jobFairId=1050`:`2026年师市高校毕业生等青年就业服务专项行动直播带岗`。
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 在求职者端打开线上招聘会频道,进入 `jobFairId=1050` 的详情页。
|
||||
2. 观察页面标题、频道文案及岗位区域。
|
||||
3. 在监管管理员端打开同一 `id=1050` 的招聘会详情页。
|
||||
4. 对照管理端“类型”字段,并在 DevTools Network 检查公开详情接口和管理端类型字典。
|
||||
|
||||
## 预期结果
|
||||
|
||||
同一 `jobFairId` 的线上/线下类型应由同一套业务语义决定。求职者端频道、管理端详情、接口字段和类型字典应保持一致,不能一端按线上加载、另一端按线下展示。
|
||||
|
||||
## 实际结果
|
||||
|
||||
- 求职者端路由带有 `channel=online`,页面显示“线上招聘会”,并加载 4 个岗位。
|
||||
- 公开详情接口 `GET /api/shihezi/app/jobfair/public/jobfair/detail?jobFairId=1050` 返回 `jobFairType: 2`。
|
||||
- 管理端字典接口 `GET /api/shihezi/system/dict/data/type/job_fair_type` 返回:`1=线上`、`2=线下`。
|
||||
- 管理端详情对同一 `id=1050` 显示“类型:线下”。
|
||||
|
||||
因此,求职者端把该招聘会放入线上频道并展示线上岗位,而管理端按当前字典将接口值 `2` 展示为线下,跨端类型语义冲突。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 求职者端截图:[JF-PO-004-online-detail.png](../screenshots/JF-PO-004-online-detail.png)
|
||||
- 管理端截图:[JF-AD-002-public-jobfair-detail.png](../screenshots/JF-AD-002-public-jobfair-detail.png)
|
||||
- 求职者端公开详情接口:HTTP 200,关键字段 `jobFairId=1050`、`jobFairType=2`。
|
||||
- 管理端字典接口:HTTP 200,关键映射 `1=线上`、`2=线下`。
|
||||
- 管理端详情接口:`GET /api/shihezi/cms/publicJobFair/1050`,HTTP 200。
|
||||
- 线上岗位接口返回 4 个岗位,页面可见岗位列表;这不是只有标题文案错误,而是影响频道与内容加载的跨端语义问题。
|
||||
|
||||
## 影响范围
|
||||
|
||||
求职者可能把线下活动当作线上活动,或反之;管理人员可能按错误类型维护招聘会。类型分流错误还可能影响岗位展示、报名入口、场地信息和后续统计,属于需要优先核对的数据契约问题。
|
||||
|
||||
## 初步定位
|
||||
|
||||
至少存在一种类型值解释不一致:公开端频道逻辑、管理端字典 `job_fair_type` 与 `jobFairType=2` 的组合无法同时成立。需要核对 `jobFairType` 的数据库枚举、公开端线上/线下接口筛选条件、管理端字典配置,以及 `1050` 的实际业务配置。
|
||||
|
||||
## 建议
|
||||
|
||||
先确认 `jobFairId=1050` 的真实业务类型,再统一字典、接口契约和两端路由筛选;增加同一招聘会在管理端、企业端和公开端的类型一致性校验,并为线上/线下详情增加接口级回归用例。
|
||||
@@ -0,0 +1,57 @@
|
||||
# BUG-015:管理端参会企业岗位显示原始学历与经验编码
|
||||
|
||||
- 严重级别:P2(管理信息可读性与审核准确性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 监管管理员;对照 PC 求职者
|
||||
- 入口:管理端 `/shihezi/jobfair/public-job-fair/detail?id=1050`
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 前置数据
|
||||
|
||||
招聘会 `jobFairId=1050` 的参会企业“辉煌数智科技有限公司”有 4 个岗位。管理端详情接口返回岗位学历字段 `education="4"`、经验字段 `experience="5"`。
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 使用监管管理员打开 `id=1050` 的招聘会详情。
|
||||
2. 在“参会企业及岗位”区域展开“辉煌数智科技有限公司”。
|
||||
3. 查看任一岗位(例如“前端开发”)的学历和工作经验信息。
|
||||
4. 在求职者端打开同一招聘会的岗位展示,对照同一岗位的标签。
|
||||
|
||||
## 预期结果
|
||||
|
||||
管理端面向监管人员展示的学历、工作经验应经过字典转换,显示可读的中文标签;同一岗位在管理端、企业端和求职者端的字段语义应一致。
|
||||
|
||||
## 实际结果
|
||||
|
||||
管理端展开岗位后直接显示:
|
||||
|
||||
```text
|
||||
前端开发
|
||||
8000-12000 元/月
|
||||
4
|
||||
5
|
||||
招 1 人
|
||||
```
|
||||
|
||||
其中 `4` 和 `5` 是接口返回的学历/经验编码,而不是中文标签。求职者端同一岗位已显示为“10年以上”“博士”,说明公开端存在字典转换,管理端展示链路未完成同等转换。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 管理端截图:[JF-AD-003-public-jobfair-expanded-company-jobs.png](../screenshots/JF-AD-003-public-jobfair-expanded-company-jobs.png)
|
||||
- 求职者端对照截图:[JF-PO-004-online-detail.png](../screenshots/JF-PO-004-online-detail.png)
|
||||
- 管理端详情接口:`GET /api/shihezi/cms/publicJobFair/1050`,HTTP 200;岗位对象关键字段为 `education="4"`、`experience="5"`。
|
||||
- 管理端页面可见原始值 `4`、`5`,未显示对应中文字典标签。
|
||||
- 求职者端同一岗位显示“10年以上”“博士”,形成跨端展示差异。
|
||||
|
||||
## 影响范围
|
||||
|
||||
监管人员审核岗位时需要额外查字典才能理解学历与经验要求,容易误判岗位条件;导出、审核备注和问题沟通也可能携带不可读编码。企业端或其他管理端岗位组件若复用同一字段,也可能存在同类问题。
|
||||
|
||||
## 初步定位
|
||||
|
||||
管理端岗位列表直接渲染 `education`、`experience` 接口值,没有复用公开端的学历/经验字典映射,或管理端使用的映射字典不完整。接口并非没有字段,而是展示层未完成编码到标签的转换。
|
||||
|
||||
## 建议
|
||||
|
||||
在管理端岗位展示统一接入学历和工作经验字典,未知编码显示明确的“未知/待配置”而不是裸值;同时补充与公开端同一岗位的跨端字段映射回归用例,覆盖详情、列表和导出。
|
||||
@@ -0,0 +1,51 @@
|
||||
# BUG-016:管理端户外招聘会筛选表单缺少字段语义关联
|
||||
|
||||
- 严重级别:P3(可访问性与表单自动化兼容性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 监管管理员
|
||||
- 入口:`/shihezi/jobfair/jobfair/outdoorfair`
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 前置条件
|
||||
|
||||
使用测试环境监管管理员角色登录,进入管理端“招聘会管理 → 户外招聘会”。
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 打开管理端户外招聘会列表页。
|
||||
2. 保持默认查询条件,观察“招聘会标题”和“举办单位”筛选控件。
|
||||
3. 在 Chrome DevTools Console/Issues 或无障碍树中检查页面表单字段。
|
||||
|
||||
## 预期结果
|
||||
|
||||
筛选表单中的招聘会标题和举办单位字段应有稳定、唯一的 `id/name`,并与可见标签建立语义关联,使读屏、键盘辅助技术、自动填充和自动化工具可以正确识别字段。
|
||||
|
||||
## 实际结果
|
||||
|
||||
页面加载后 Chrome DevTools 报告:
|
||||
|
||||
- `No label associated with a form field (count: 1)`
|
||||
- `A form field element should have an id or name attribute (count: 1)`
|
||||
|
||||
户外列表和查询接口均能正常加载,但筛选区域至少一个字段没有标签关联,至少一个字段缺少稳定字段标识。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-AD-005-admin-outdoor-list.png](../screenshots/JF-AD-005-admin-outdoor-list.png)
|
||||
- accessibility snapshot 显示“招聘会标题 :”和“举办单位 :”文本框,但未呈现完整的原生字段语义信息。
|
||||
- 控制台 Issue:`msgid=62 [issue] No label associated with a form field (count: 1)`。
|
||||
- 控制台 Issue:`msgid=63 [issue] A form field element should have an id or name attribute (count: 1)`。
|
||||
- `GET /api/shihezi/cms/outdoor-fair/list?current=1&pageSize=20`:HTTP 200,返回 12 条记录;问题发生在筛选表单 DOM 语义层。
|
||||
|
||||
## 影响范围
|
||||
|
||||
监管管理员使用读屏、键盘辅助技术、浏览器自动填充或表单自动化工具时,可能无法稳定定位或理解户外招聘会筛选字段;同时说明公共招聘会和户外招聘会管理页面存在重复的表单实现质量问题。
|
||||
|
||||
## 初步定位
|
||||
|
||||
户外招聘会列表查询表单渲染了标题和举办单位 Input,但运行时没有为全部原生字段输出可识别的 `id/name`,且至少一个字段未与可见标签关联。列表接口响应正常,问题集中在前端表单语义层。
|
||||
|
||||
## 建议
|
||||
|
||||
为标题和举办单位字段补充唯一 `id/name`,通过显式 `htmlFor` 或 `aria-labelledby` 关联可见标签;修复后以管理员角色复查 Console Issues、无障碍树和键盘焦点顺序,并与企业端户外筛选组件统一规范。
|
||||
@@ -0,0 +1,51 @@
|
||||
# BUG-017:管理端户外招聘会参会企业筛选字段缺少语义关联
|
||||
|
||||
- 严重级别:P3(可访问性与表单自动化兼容性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 监管管理员
|
||||
- 入口:`/shihezi/jobfair/outdoor-fair/detail?id=12` → “参会企业”
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 前置条件
|
||||
|
||||
使用测试环境监管管理员角色打开户外招聘会 `id=12` 的详情,并切换到“参会企业”页签。
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 在户外招聘会详情页点击“参会企业”。
|
||||
2. 观察“企业名称”和“报名开始时间”筛选控件。
|
||||
3. 在 Chrome DevTools Console/Issues 或无障碍树中检查表单字段。
|
||||
|
||||
## 预期结果
|
||||
|
||||
企业名称和报名开始时间字段应具备唯一、稳定的 `id/name`,并与可见标签建立关联;读屏、键盘辅助技术、自动填充及自动化测试应能准确识别字段。
|
||||
|
||||
## 实际结果
|
||||
|
||||
页面加载后 Chrome DevTools 报告:
|
||||
|
||||
- `No label associated with a form field (count: 1)`
|
||||
- `A form field element should have an id or name attribute (count: 1)`
|
||||
|
||||
参会企业列表能够正常显示,但筛选表单存在字段语义缺失。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-AD-007-admin-outdoor-companies.png](../screenshots/JF-AD-007-admin-outdoor-companies.png)
|
||||
- accessibility snapshot 显示“企业名称 :”和“报名开始时间 :”文本框,但未呈现完整的原生字段语义信息。
|
||||
- 控制台 Issue:`msgid=79 [issue] No label associated with a form field (count: 1)`。
|
||||
- 控制台 Issue:`msgid=80 [issue] A form field element should have an id or name attribute (count: 1)`。
|
||||
- `GET /api/shihezi/cms/outdoor-fair/12/companies?current=1&pageSize=10`:HTTP 200,返回 1 家参会企业;接口数据正常,问题位于详情筛选表单 DOM 语义层。
|
||||
|
||||
## 影响范围
|
||||
|
||||
监管管理员使用辅助技术或表单自动化时,可能无法稳定定位企业名称和报名时间筛选条件;类似问题在管理端户外列表、公共招聘会列表以及企业端多个招聘会页面重复出现。
|
||||
|
||||
## 初步定位
|
||||
|
||||
参会企业页签的查询表单未向全部原生 Input/DatePicker 字段输出可识别的 `id/name`,或未通过标签属性建立关联。后端企业列表接口返回正常,优先检查该页签查询表单组件配置。
|
||||
|
||||
## 建议
|
||||
|
||||
为企业名称和报名开始时间字段补充唯一 `id/name`,使用 `htmlFor`、`aria-labelledby` 或框架表单标签机制建立关联;修复后在所有招聘会详情页签复查无障碍检查结果。
|
||||
@@ -0,0 +1,52 @@
|
||||
# BUG-018:管理端户外招聘会企业签到页筛选字段缺少语义关联
|
||||
|
||||
- 严重级别:P3(可访问性与表单自动化兼容性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 监管管理员
|
||||
- 入口:`/shihezi/jobfair/outdoor-fair/detail?id=12` → “企业签到”
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 前置条件
|
||||
|
||||
使用测试环境监管管理员角色打开户外招聘会 `id=12` 详情,并切换到“企业签到”页签。
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 打开“企业签到”页签。
|
||||
2. 观察“已签到企业”和“未签到企业”两个列表各自的企业名称筛选输入框。
|
||||
3. 在 Chrome DevTools Console/Issues 或无障碍树中检查两个筛选表单。
|
||||
|
||||
## 预期结果
|
||||
|
||||
已签到和未签到列表的企业名称字段应分别具备稳定、唯一的 `id/name`,并与可见标签建立语义关联;辅助技术和自动化工具应能区分两个筛选表单。
|
||||
|
||||
## 实际结果
|
||||
|
||||
页面加载后 Chrome DevTools 报告:
|
||||
|
||||
- `No label associated with a form field (count: 3)`
|
||||
- `A form field element should have an id or name attribute (count: 3)`
|
||||
|
||||
页面把企业签到分成“已签到”和“未签到”两个区块,两个列表及其查询框都能渲染,但筛选字段存在语义缺失。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-AD-008-admin-outdoor-attendance.png](../screenshots/JF-AD-008-admin-outdoor-attendance.png)
|
||||
- accessibility snapshot 显示两个“企业名称”输入框,均仅以“请输入”作为控件名称,缺少完整的表单字段语义。
|
||||
- 控制台 Issue:`msgid=79 [issue] No label associated with a form field (count: 3)`。
|
||||
- 控制台 Issue:`msgid=80 [issue] A form field element should have an id or name attribute (count: 3)`。
|
||||
- `GET /api/shihezi/cms/outdoor-fair/12/company-attendance?current=1&pageSize=8&checkedIn=true`:HTTP 200。
|
||||
- `GET /api/shihezi/cms/outdoor-fair/12/company-attendance?current=1&pageSize=8&checkedIn=false`:HTTP 200;当前测试数据两侧均显示“暂无数据”。
|
||||
|
||||
## 影响范围
|
||||
|
||||
监管管理员无法通过辅助技术明确区分已签到和未签到筛选字段;在页面存在多个相同“企业名称”输入框时,浏览器自动填充和自动化定位也可能选错字段。
|
||||
|
||||
## 初步定位
|
||||
|
||||
签到页的两个企业列表查询表单复用了未提供完整字段属性的 Input 组件,至少三个原生字段缺少标签关联或 `id/name`。签到接口本身正常返回,问题集中于前端筛选表单语义。
|
||||
|
||||
## 建议
|
||||
|
||||
为两个区块的企业名称输入框分别设置唯一 `id/name`,为标签补充 `htmlFor` 或 `aria-labelledby`,并为“已签到/未签到”建立清晰的表单分组名称;修复后复查无障碍树和重复字段自动化定位。
|
||||
@@ -0,0 +1,50 @@
|
||||
# BUG-019:管理端户外招聘会企业退订页筛选字段缺少语义关联
|
||||
|
||||
- 严重级别:P3(可访问性与表单自动化兼容性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 监管管理员
|
||||
- 入口:`/shihezi/jobfair/outdoor-fair/detail?id=12` → “企业退订”
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 前置条件
|
||||
|
||||
使用测试环境监管管理员角色打开户外招聘会 `id=12` 详情,并切换到“企业退订”页签。
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 打开“企业退订”页签。
|
||||
2. 观察企业名称查询输入框及退订记录表格。
|
||||
3. 在 Chrome DevTools Console/Issues 或无障碍树中检查该页签表单字段。
|
||||
|
||||
## 预期结果
|
||||
|
||||
企业名称输入框应具备唯一、稳定的 `id/name`,并与可见标签建立语义关联;辅助技术和自动化工具应能明确识别该查询字段。
|
||||
|
||||
## 实际结果
|
||||
|
||||
页面加载后,Chrome DevTools 的表单 Issue 统计继续增加,并报告:
|
||||
|
||||
- `No label associated with a form field`
|
||||
- `A form field element should have an id or name attribute`
|
||||
|
||||
退订记录接口正常返回,页面显示“暂无数据”,但查询字段缺少完整 DOM 语义。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-AD-009-admin-outdoor-unsubscribes.png](../screenshots/JF-AD-009-admin-outdoor-unsubscribes.png)
|
||||
- accessibility snapshot 显示“企业名称”文本和“请输入”输入框,未呈现对应的稳定字段标识/标签关联。
|
||||
- Console 页面累计 Issue:`No label associated with a form field (count: 4)`、`A form field element should have an id or name attribute (count: 4)`;其中本页新增企业退订查询字段。
|
||||
- `GET /api/shihezi/cms/outdoor-fair/12/company-unsubscribes?current=1&pageSize=10`:HTTP 200,当前测试数据返回空列表。
|
||||
|
||||
## 影响范围
|
||||
|
||||
监管管理员使用读屏、键盘辅助技术或自动化工具时,无法稳定定位企业退订查询字段;退订记录为空时,用户也缺少可验证的筛选字段语义。
|
||||
|
||||
## 初步定位
|
||||
|
||||
企业退订页签的查询表单未提供完整 `id/name` 或标签关联,属于与参会企业、企业签到页签相同的前端表单实现缺陷。接口数据加载正常,问题不在退订记录查询 API。
|
||||
|
||||
## 建议
|
||||
|
||||
为企业名称字段补充唯一 `id/name`,通过 `htmlFor` 或 `aria-labelledby` 绑定标签,并在户外详情全部页签统一复用经过无障碍验证的查询表单组件。
|
||||
@@ -0,0 +1,45 @@
|
||||
# BUG-020:管理端户外招聘会参会岗位筛选字段缺少语义关联
|
||||
|
||||
- 严重级别:P3(可访问性与表单自动化兼容性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 监管管理员
|
||||
- 入口:`/shihezi/jobfair/outdoor-fair/detail?id=12` → “参会岗位”
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 前置条件
|
||||
|
||||
使用测试环境监管管理员角色打开户外招聘会 `id=12` 详情,并切换到“参会岗位”页签。
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 打开“参会岗位”页签。
|
||||
2. 观察岗位名称、企业名称、学历要求和工作经验筛选控件。
|
||||
3. 在 Chrome DevTools Console/Issues 或无障碍树中检查这些字段。
|
||||
|
||||
## 预期结果
|
||||
|
||||
每个岗位筛选字段都应有唯一、稳定的 `id/name`,并与可见标签建立语义关联;企业名称、学历要求和工作经验等下拉字段还应保留清晰的可访问名称。
|
||||
|
||||
## 实际结果
|
||||
|
||||
页面加载后 Chrome DevTools 的表单 Issue 统计继续增加,并报告缺少标签关联和字段标识。岗位接口能够正常返回,但筛选表单的原生字段语义不完整。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-AD-010-admin-outdoor-jobs.png](../screenshots/JF-AD-010-admin-outdoor-jobs.png)
|
||||
- accessibility snapshot 显示“岗位名称”“企业名称”“学历要求”“工作经验”四个筛选控件,部分控件依赖占位文案“请选择或搜索企业/请选择”,未呈现稳定字段标识。
|
||||
- Console 页面累计 Issue:`No label associated with a form field (count: 5)`、`A form field element should have an id or name attribute (count: 5)`;本页新增岗位名称、企业名称、学历要求和工作经验字段。
|
||||
- `GET /api/shihezi/cms/outdoor-fair/12/jobs?current=1&pageSize=10`:HTTP 200,当前测试数据返回空列表;相关字典和企业选项接口也均 HTTP 200。
|
||||
|
||||
## 影响范围
|
||||
|
||||
监管管理员使用读屏或自动化工具时难以准确定位岗位筛选条件,尤其是同一表单中存在多个下拉字段时,可能无法区分企业、学历和经验条件。
|
||||
|
||||
## 初步定位
|
||||
|
||||
户外详情参会岗位页签的 Input、企业选择器和字典选择器没有统一传递 `id/name` 或标签关联属性。岗位查询接口正常,问题集中在前端筛选表单 DOM 语义层。
|
||||
|
||||
## 建议
|
||||
|
||||
为四个筛选字段设置唯一 `id/name`,通过 `htmlFor` 或 `aria-labelledby` 关联标签,并为下拉选择器提供明确的可访问名称;修复后复查岗位列表、企业端岗位弹窗和管理端其他岗位查询页。
|
||||
@@ -0,0 +1,45 @@
|
||||
# BUG-021:管理端户外招聘会参会人员姓名字段缺少 autocomplete 属性
|
||||
|
||||
- 严重级别:P3(表单自动填充与可访问性兼容性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 监管管理员
|
||||
- 入口:`/shihezi/jobfair/outdoor-fair/detail?id=12` → “参会人员管理”
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 前置条件
|
||||
|
||||
使用测试环境监管管理员角色打开户外招聘会 `id=12` 详情,并切换到“参会人员管理”页签。
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 打开“参会人员管理”页签。
|
||||
2. 观察姓名筛选输入框及参会人员列表。
|
||||
3. 在 Chrome DevTools Issues 中检查表单自动填充提示。
|
||||
|
||||
## 预期结果
|
||||
|
||||
姓名筛选输入框应具有明确的 `autocomplete` 属性(例如适合该业务场景的 `name` 或 `off`),避免浏览器错误填充或无法识别字段用途;同时应与“姓名”标签建立语义关联。
|
||||
|
||||
## 实际结果
|
||||
|
||||
Chrome DevTools 报告:`An element doesn't have an autocomplete attribute (count: 1)`。页面仍能显示参会人员列表,但姓名字段没有声明自动填充用途。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-AD-011-admin-outdoor-attendees.png](../screenshots/JF-AD-011-admin-outdoor-attendees.png)
|
||||
- accessibility snapshot 显示“姓名 :”筛选输入框以及“录入签到人员”按钮。
|
||||
- 控制台 Issue:`msgid=91 [issue] An element doesn't have an autocomplete attribute (count: 1)`。
|
||||
- `GET /api/shihezi/cms/outdoor-fair-attendee/list?fairId=12¤t=1&pageSize=10`:HTTP 200,当前测试数据返回 1 条参会人员记录。
|
||||
|
||||
## 影响范围
|
||||
|
||||
浏览器可能对姓名筛选框进行不符合预期的自动填充;使用辅助技术或自动化测试时,字段用途不够明确。参会人员管理属于涉及个人信息的页面,错误自动填充还可能造成误筛选或信息误操作风险。
|
||||
|
||||
## 初步定位
|
||||
|
||||
参会人员管理查询表单中的姓名 Input 未传递 `autocomplete` 属性。接口响应正常,问题位于前端表单属性配置。
|
||||
|
||||
## 建议
|
||||
|
||||
根据该字段仅用于查询的用途显式设置合适的 `autocomplete` 值,并补充标签关联;修复后复查招聘会详情其他人员/企业查询表单。
|
||||
@@ -0,0 +1,48 @@
|
||||
# BUG-022:管理端户外招聘会设备管理筛选字段缺少语义关联
|
||||
|
||||
- 严重级别:P3(可访问性与表单自动化兼容性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 监管管理员
|
||||
- 入口:`/shihezi/jobfair/outdoor-fair/detail?id=12` → “设备管理”
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 前置条件
|
||||
|
||||
使用测试环境监管管理员角色打开户外招聘会 `id=12` 详情,并切换到“设备管理”页签。
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 打开“设备管理”页签。
|
||||
2. 观察设备码查询输入框、设备列表及“新增设备码”入口。
|
||||
3. 在 Chrome DevTools Console/Issues 或无障碍树中检查设备码字段。
|
||||
|
||||
## 预期结果
|
||||
|
||||
设备码查询输入框应有唯一、稳定的 `id/name`,并与“设备码”可见标签建立语义关联;辅助技术和自动化工具应能明确识别查询字段。
|
||||
|
||||
## 实际结果
|
||||
|
||||
页面可以加载设备列表,但表单 Issue 统计显示设备码字段未完整关联标签或字段标识:
|
||||
|
||||
- `No label associated with a form field`
|
||||
- `A form field element should have an id or name attribute`
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-AD-012-admin-outdoor-devices.png](../screenshots/JF-AD-012-admin-outdoor-devices.png)
|
||||
- accessibility snapshot 显示“设备码 :”文本框和“新增设备码”按钮,未呈现完整的原生字段标识。
|
||||
- Console 页面累计 Issue:`No label associated with a form field (count: 7)`、`A form field element should have an id or name attribute (count: 7)`;本页新增设备码查询字段。
|
||||
- `GET /api/shihezi/cms/outdoor-fair-device/list?fairId=12¤t=1&pageSize=10`:HTTP 200,当前测试数据返回空列表。
|
||||
|
||||
## 影响范围
|
||||
|
||||
监管管理员使用读屏、键盘辅助技术或自动化工具时,无法稳定定位设备码筛选字段;设备列表为空时,问题更难通过视觉反馈发现。
|
||||
|
||||
## 初步定位
|
||||
|
||||
设备管理页签的设备码查询 Input 没有传递完整 `id/name` 或标签关联属性。设备列表接口正常,问题位于前端筛选表单语义层。
|
||||
|
||||
## 建议
|
||||
|
||||
为设备码字段补充唯一 `id/name`,通过 `htmlFor` 或 `aria-labelledby` 绑定标签,并在新增设备码表单中复用同一字段规范;修复后复查设备查询和新增弹窗的无障碍属性。
|
||||
@@ -0,0 +1,51 @@
|
||||
# BUG-023:管理端场地信息维护筛选表单缺少字段语义关联
|
||||
|
||||
- 严重级别:P3(可访问性与表单自动化兼容性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 监管管理员
|
||||
- 入口:`/shihezi/jobfair/jobfair/venueinfo`
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 前置条件
|
||||
|
||||
使用测试环境监管管理员角色登录,进入“招聘会管理 → 场地信息维护”。
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 打开场地信息维护列表。
|
||||
2. 观察“场地类型”和“场地名称”筛选控件。
|
||||
3. 在 Chrome DevTools Console/Issues 或无障碍树中检查表单字段。
|
||||
|
||||
## 预期结果
|
||||
|
||||
场地类型下拉框和场地名称输入框应有稳定、唯一的 `id/name`,并通过可见标签建立语义关联;读屏、键盘辅助技术、浏览器自动填充和自动化工具应能明确识别两个筛选条件。
|
||||
|
||||
## 实际结果
|
||||
|
||||
页面加载后 Chrome DevTools 报告:
|
||||
|
||||
- `No label associated with a form field (count: 1)`
|
||||
- `A form field element should have an id or name attribute (count: 1)`
|
||||
|
||||
列表接口正常返回 4 条场地记录,但筛选表单字段语义不完整。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-AD-015-venue-list.png](../screenshots/JF-AD-015-venue-list.png)
|
||||
- accessibility snapshot 显示“场地类型 :”下拉框和“场地名称 :”文本框,但未呈现完整的稳定字段标识/标签关联。
|
||||
- 控制台 Issue:`msgid=113 [issue] No label associated with a form field (count: 1)`。
|
||||
- 控制台 Issue:`msgid=114 [issue] A form field element should have an id or name attribute (count: 1)`。
|
||||
- `GET /api/shihezi/cms/venue-info/list?current=1&pageSize=20`:HTTP 200,返回 4 条场地记录。
|
||||
|
||||
## 影响范围
|
||||
|
||||
监管管理员使用辅助技术或表单自动化时,无法稳定定位场地类型和场地名称筛选字段;场地维护是招聘会展位容量的基础配置,筛选不可用会增加配置和核对成本。
|
||||
|
||||
## 初步定位
|
||||
|
||||
场地列表查询表单中的类型 Select 和名称 Input 未完整传递 `id/name` 或标签关联属性。场地、线路和机构选项接口均正常,问题位于前端筛选表单 DOM 语义层。
|
||||
|
||||
## 建议
|
||||
|
||||
为场地类型和场地名称字段补充唯一 `id/name`,通过 `htmlFor` 或 `aria-labelledby` 建立关联;修复后复查场地编辑、新增和展位管理入口的表单语义。
|
||||
@@ -0,0 +1,46 @@
|
||||
# BUG-024:管理端新增场地弹窗存在字段语义关联缺失
|
||||
|
||||
- 严重级别:P3(可访问性与表单自动化兼容性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 监管管理员
|
||||
- 入口:`/shihezi/jobfair/jobfair/venueinfo` → “新增”
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 前置条件
|
||||
|
||||
使用测试环境监管管理员角色进入场地信息维护列表,打开“新增场地”弹窗;不提交表单。
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 打开场地信息维护页面。
|
||||
2. 点击“新增”。
|
||||
3. 观察场地类型、场地名称、面积、展位数量、联系电话、地址、线路、机构、备注和经办信息控件。
|
||||
4. 在 Chrome DevTools Console/Issues 或无障碍树中检查弹窗字段。
|
||||
|
||||
## 预期结果
|
||||
|
||||
弹窗内每个字段都应有明确的可访问名称、稳定的 `id/name` 和适当的表单属性;必填项应让辅助技术识别必填状态,数值输入应明确单位和范围。
|
||||
|
||||
## 实际结果
|
||||
|
||||
打开弹窗后,表单 Issue 统计从列表页的 `A form field element should have an id or name attribute (count: 1)` 增加为 `count: 2`。无障碍树中“场地类型”下拉框仅呈现为空的 combobox,“场地名称”输入框主要依赖占位文案“请输入场地名称”,说明新增表单至少有字段缺少稳定语义属性。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-AD-017-venue-add-dialog.png](../screenshots/JF-AD-017-venue-add-dialog.png)
|
||||
- accessibility snapshot 显示“添加场地”弹窗、必填字段、面积/展位数量 spinbutton、地址和线路等控件;场地类型 combobox 未呈现可访问名称。
|
||||
- Console Issue:`msgid=114 [issue] A form field element should have an id or name attribute (count: 2)`;列表页同一 Issue 为 `count: 1`,打开弹窗后新增字段触发。
|
||||
- 场地类型、线路、机构等选项来源请求均 HTTP 200;本轮未点击“确定”,没有产生写请求。
|
||||
|
||||
## 影响范围
|
||||
|
||||
管理员使用读屏或自动化工具新增场地时,可能无法识别场地类型等字段;必填项、数值范围和单位提示不充分也会增加错误配置场地面积/展位数量的风险。
|
||||
|
||||
## 初步定位
|
||||
|
||||
新增场地弹窗的 Select/Input/Number 控件没有统一传递 `id/name` 或标签关联属性,部分字段仅依赖占位符。问题位于前端弹窗表单语义层,不是选项接口失败。
|
||||
|
||||
## 建议
|
||||
|
||||
为所有弹窗控件补充唯一 `id/name`、显式标签和 `aria-required`/范围说明;给面积和展位数量补充单位及合理的最小值/最大值提示。修复后仅用空表单执行前端校验复查,并避免在未授权时提交真实数据。
|
||||
@@ -0,0 +1,45 @@
|
||||
# BUG-025:管理端招聘会统计日期字段缺少语义关联
|
||||
|
||||
- 严重级别:P3(可访问性与统计筛选自动化兼容性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 监管管理员
|
||||
- 入口:`/shihezi/jobfair/jobfair/fair-statistics`
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 前置条件
|
||||
|
||||
使用测试环境监管管理员角色登录,进入“招聘会管理 → 招聘会数据统计”,保持默认“线上招聘会”和“按起始时间统计”。
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 打开招聘会数据统计页面。
|
||||
2. 观察“起始日期”和“结束日期”两个日期输入框。
|
||||
3. 在 Chrome DevTools Console/Issues 或无障碍树中检查日期字段。
|
||||
|
||||
## 预期结果
|
||||
|
||||
起始日期和结束日期应有唯一、稳定的 `id/name`,并通过标签或 `aria-labelledby` 建立语义关联;辅助技术和自动化工具应能区分日期范围两端。
|
||||
|
||||
## 实际结果
|
||||
|
||||
页面加载后 Chrome DevTools 报告:`A form field element should have an id or name attribute (count: 2)`。两个日期字段能显示默认日期并触发统计请求,但均缺少稳定的字段标识。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-AD-018-admin-fair-statistics-online.png](../screenshots/JF-AD-018-admin-fair-statistics-online.png)
|
||||
- accessibility snapshot 显示“起始日期”和“结束日期”两个 textbox,但未呈现对应 `id/name`。
|
||||
- 控制台 Issue:`msgid=124 [issue] A form field element should have an id or name attribute (count: 2)`。
|
||||
- `GET /api/shihezi/cms/fair-statistics/summary?fairType=online&startDate=2025-07-25&endDate=2026-07-25`:HTTP 200,页面显示统计结果;问题发生在日期筛选表单 DOM 语义层。
|
||||
|
||||
## 影响范围
|
||||
|
||||
监管管理员使用读屏、键盘辅助技术或自动化工具时,无法稳定定位统计区间起止日期;日期范围是统计结果的核心筛选条件,字段不可区分会增加误查统计的风险。
|
||||
|
||||
## 初步定位
|
||||
|
||||
统计页日期 DatePicker/Input 组件只输出了可见名称,未为两个原生字段提供稳定 `id/name` 或关联属性。统计接口和线上统计结果正常返回。
|
||||
|
||||
## 建议
|
||||
|
||||
为起始日期和结束日期补充唯一 `id/name`,使用显式标签或 `aria-labelledby` 建立关联;线上/户外切换及“统计单场”模式应共用同一字段规范,并复查 Console Issues 和键盘焦点顺序。
|
||||
@@ -0,0 +1,51 @@
|
||||
# BUG-026:管理端机构管理筛选字段缺少语义关联
|
||||
|
||||
- 严重级别:P3(可访问性与表单自动化兼容性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 监管管理员
|
||||
- 入口:`/shihezi/jobfair/institution`
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 前置条件
|
||||
|
||||
使用测试环境监管管理员角色登录,进入“招聘会管理 → 机构管理”。
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 打开机构管理列表。
|
||||
2. 观察“机构名称”筛选输入框以及空列表状态。
|
||||
3. 在 Chrome DevTools Console/Issues 或无障碍树中检查机构名称字段。
|
||||
|
||||
## 预期结果
|
||||
|
||||
机构名称输入框应有唯一、稳定的 `id/name`,并与可见标签建立语义关联;即使列表为空,也应能通过辅助技术和自动化工具准确定位查询字段。
|
||||
|
||||
## 实际结果
|
||||
|
||||
页面加载后 Chrome DevTools 报告:
|
||||
|
||||
- `No label associated with a form field (count: 1)`
|
||||
- `A form field element should have an id or name attribute (count: 1)`
|
||||
|
||||
机构列表接口返回 HTTP 200,但当前数据为空并显示“暂无数据”;筛选字段仍存在 DOM 语义缺失。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 页面截图:[JF-AD-022-admin-institution-list-empty.png](../screenshots/JF-AD-022-admin-institution-list-empty.png)
|
||||
- accessibility snapshot 显示“机构名称 :”文本框、重置和查询按钮,未呈现完整的稳定字段语义信息。
|
||||
- 控制台 Issue:`msgid=171 [issue] No label associated with a form field (count: 1)`。
|
||||
- 控制台 Issue:`msgid=172 [issue] A form field element should have an id or name attribute (count: 1)`。
|
||||
- `GET /api/shihezi/cms/job-fair-institution/list?current=1&pageSize=20`:HTTP 200,当前测试数据返回空列表。
|
||||
|
||||
## 影响范围
|
||||
|
||||
监管管理员使用读屏、键盘辅助技术或自动化工具时,无法稳定定位机构名称查询字段;机构数据为空时,用户也缺少其他可见反馈来判断筛选是否生效。
|
||||
|
||||
## 初步定位
|
||||
|
||||
机构管理查询表单的机构名称 Input 未完整传递 `id/name` 或标签关联属性。机构列表 API 正常返回,问题位于前端筛选表单 DOM 语义层。
|
||||
|
||||
## 建议
|
||||
|
||||
为机构名称字段补充唯一 `id/name`,使用 `htmlFor` 或 `aria-labelledby` 建立标签关联;同时为空列表补充明确的查询结果说明,并在新增机构弹窗复查同一表单规范。
|
||||
@@ -0,0 +1,55 @@
|
||||
# BUG-027:管理端跨域联合招聘会联盟城市管理弹窗存在字段无障碍问题
|
||||
|
||||
- 严重级别:P3(管理弹窗可访问性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 监管管理员(超级管理员)
|
||||
- 入口:`/shihezi/jobfair/jobfair/crosscityfair` → “区域管理” → “管理”
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 前置条件
|
||||
|
||||
使用测试环境监管管理员进入招聘会管理页面;当前数据中联盟城市接口可返回 9 条城市记录。本问题只涉及查看和查询,没有新增、编辑或删除城市。
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 打开监管管理端“跨域联合招聘会管理”。
|
||||
2. 保持“区域管理”页签,点击“管理”。
|
||||
3. 观察“联盟城市管理”弹窗中的“城市名称”查询输入框。
|
||||
4. 在 Chrome DevTools 查看 Console/Issues 以及输入框 DOM 属性。
|
||||
5. 可选:输入“石”并点击“查询”,验证问题不影响接口返回;再点击“重置”恢复 9 条列表。
|
||||
|
||||
## 预期结果
|
||||
|
||||
“城市名称”查询字段应有稳定的 `id` 或 `name`,可见标签应通过 `for`/`aria-labelledby` 与输入框关联,并设置合理的 `autocomplete`;读屏、键盘和浏览器辅助检查应能识别该字段。查询和重置仍应正常工作。
|
||||
|
||||
## 实际结果
|
||||
|
||||
弹窗能正常显示 9 个联盟城市,输入“石”后返回 1 条“石河子市”,重置后恢复 9 条;但 DevTools 记录了字段质量问题:
|
||||
|
||||
- `A form field element should have an id or name attribute (count: 3)`;
|
||||
- `No label associated with a form field (count: 1)`;
|
||||
- `An element doesn't have an autocomplete attribute`。
|
||||
|
||||
只读 DOM 检查显示弹窗输入为 `type=text`,有 `id="name"`,但没有 `name`、`aria-label`、`aria-labelledby` 或 `autocomplete`。可见“城市名称”在视觉上存在,但没有形成稳定的原生标签关联;同页日期输入也没有完整的 `id/name` 语义,因此 DevTools 汇总出的无 id/name 数量为 3。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 弹窗全页截图:[JF-AD-024-admin-crosscity-region-dialog.png](../screenshots/JF-AD-024-admin-crosscity-region-dialog.png)。
|
||||
- 查询结果截图:[JF-AD-025-admin-crosscity-city-search.png](../screenshots/JF-AD-025-admin-crosscity-city-search.png)。
|
||||
- 初始联盟城市请求:`GET /api/shihezi/cms/cross-city-alliance/list?current=1&pageSize=10`,HTTP 200。
|
||||
- 条件查询请求:`GET /api/shihezi/cms/cross-city-alliance/list?name=%E7%9F%B3¤t=1&pageSize=10`,HTTP 200,响应列表为 1 条。
|
||||
- 重置请求:`GET /api/shihezi/cms/cross-city-alliance/list?current=1&pageSize=10`,HTTP 200,响应列表为 9 条。
|
||||
- Console/Issues:`msgid=181` 的无 id/name 问题、`msgid=183` 的标签关联问题、`msgid=184` 的 autocomplete 问题。
|
||||
|
||||
## 影响范围
|
||||
|
||||
管理员可以用鼠标查询城市,但读屏用户、键盘用户和依赖表单语义的自动化/质量工具无法可靠识别该字段。该问题与企业端同一功能的 [BUG-011](./BUG-011-enterprise-crosscity-region-dialog-accessibility.md) 对应,说明同一实现至少在两个角色入口复现。
|
||||
|
||||
## 初步定位
|
||||
|
||||
前端 `shz-admin/src/pages/Jobfair/Crosscityfair/index.tsx` 的 `AllianceManageModal` 在约第 170–200 行使用 `ProTable` 查询,在第 232–237 行使用 `ProFormText name="name" label="城市名称"`。当前构建生成的原生输入未补齐 DevTools 所需的表单语义属性;城市列表接口本身返回正常,不是数据接口故障。
|
||||
|
||||
## 建议
|
||||
|
||||
为查询输入补充稳定的 `id/name`、显式 `label`/`aria-labelledby` 和符合语义的 `autocomplete`,并统一检查新增/编辑城市表单。修复后应在管理员和企业角色分别重新检查 Console/Issues、无障碍树和键盘焦点。
|
||||
@@ -0,0 +1,49 @@
|
||||
# BUG-028:跨域联合招聘会区域城市选择标签不是可访问交互控件
|
||||
|
||||
- 严重级别:P3(区域筛选控件可访问性问题)
|
||||
- 状态:代码已修复,待测试环境浏览器复验
|
||||
- 环境:test
|
||||
- 角色:PC 监管管理员、PC 企业端
|
||||
- 入口:`/shihezi/jobfair/jobfair/crosscityfair` → “区域管理”
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 分别以监管管理员和企业角色打开“跨域联合招聘会管理”。
|
||||
2. 进入“区域管理”页签,观察 9 个城市标签。
|
||||
3. 用鼠标点击“石河子市”。
|
||||
4. 观察页面显示“已选择 1 个区域”,再用键盘 Tab 键遍历页面或查看 Chrome DevTools 无障碍树和 DOM。
|
||||
|
||||
## 预期结果
|
||||
|
||||
城市筛选项应表现为可聚焦、可键盘操作、可被读屏识别的多选控件,并暴露当前选中状态(例如按钮/复选框语义和 `aria-pressed`/`aria-checked`)。
|
||||
|
||||
## 实际结果
|
||||
|
||||
鼠标点击可以改变页面状态为“已选择 1 个区域”,但城市标签在 DOM 中是:
|
||||
|
||||
```html
|
||||
<span class="ant-tag ant-tag-checkable ..."><span>石河子市</span></span>
|
||||
```
|
||||
|
||||
该元素没有 `role`、没有 `tabindex`(DOM `tabIndex=-1`)、没有 `aria-checked`/`aria-pressed`,在 DevTools 无障碍树中只显示为 `StaticText`,不能作为键盘焦点或标准选择控件使用。管理员和企业端均可复现同样结构。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 管理端选择后截图:[JF-AD-027-admin-crosscity-region-selected.png](../screenshots/JF-AD-027-admin-crosscity-region-selected.png)。
|
||||
- 企业端选择后截图:[JF-EN-014-crosscity-region-selected-no-job-tab.png](../screenshots/JF-EN-014-crosscity-region-selected-no-job-tab.png)。
|
||||
- 管理端无障碍快照在城市标签处显示 `StaticText "石河子市"`,而不是 button/checkbox。
|
||||
- 只读 DOM 检查结果:`SPAN.ant-tag-checkable` 的 `role=null`、`tabIndex=-1`、`aria-checked=null`。
|
||||
- 点击城市没有发起筛选请求;页面只更新本地“已选择 1 个区域”文本。
|
||||
|
||||
## 影响范围
|
||||
|
||||
鼠标用户可以完成选择,但键盘用户和读屏用户无法可靠发现、聚焦或切换城市,区域筛选不满足可访问交互控件的基本语义要求。问题同时影响监管管理员和企业端。
|
||||
|
||||
## 初步定位
|
||||
|
||||
`shz-admin/src/pages/Jobfair/Crosscityfair/index.tsx` 约第 279–291 行使用 `Tag.CheckableTag` 渲染城市标签,只提供 `onChange` 和视觉样式,没有补充可访问的交互语义。该组件实现应在两个角色入口统一修复和验证。
|
||||
|
||||
## 建议
|
||||
|
||||
将城市选择项改为原生按钮/复选框,或为标签补充可聚焦、键盘事件和选中状态语义;同时确保焦点样式、批量选择和“清除筛选”操作对键盘/读屏可用。
|
||||
@@ -0,0 +1,44 @@
|
||||
# BUG-029:跨域联合招聘会区域选择后没有岗位/就业信息下游闭环
|
||||
|
||||
- 严重级别:P2(功能链路未闭环)
|
||||
- 状态:待产品确认是否恢复“各地市就业信息”功能
|
||||
- 环境:test
|
||||
- 角色:PC 监管管理员、PC 企业端
|
||||
- 入口:`/shihezi/jobfair/jobfair/crosscityfair` → “区域管理”
|
||||
- 发现时间:2026-07-25
|
||||
|
||||
## 前置数据
|
||||
|
||||
联盟城市接口返回 9 个城市;跨域统计默认返回 1 场线上招聘会、2 家参会企业和 0 个岗位。选择“石河子市”作为区域筛选条件。
|
||||
|
||||
## 复现步骤
|
||||
|
||||
1. 分别以监管管理员和企业角色打开“跨域联合招聘会管理”。
|
||||
2. 进入“区域管理”页签。
|
||||
3. 点击“石河子市”。
|
||||
4. 观察页面是否出现按区域筛选的岗位/就业信息列表、数量、请求或跳转入口。
|
||||
5. 点击“清除筛选”,确认是否仅恢复“全部区域”文本。
|
||||
|
||||
## 预期结果
|
||||
|
||||
选择区域后应进入可理解的下游结果:展示对应城市的跨域岗位/就业信息、发起带城市参数的查询,或明确提示当前筛选只影响哪个页面;清除筛选应恢复该下游结果。
|
||||
|
||||
## 实际结果
|
||||
|
||||
两个角色的页面都只把状态文字从“全部区域”更新为“已选择 1 个区域”,没有显示岗位/就业信息、岗位数量、筛选结果或下一步入口;点击选择和清除均没有发起 `cross-domain-jobs` 请求。用户无法判断区域选择是否真正影响业务数据,功能链路停留在前端状态层。
|
||||
|
||||
## 浏览器证据
|
||||
|
||||
- 管理端选择后截图:[JF-AD-027-admin-crosscity-region-selected.png](../screenshots/JF-AD-027-admin-crosscity-region-selected.png)。
|
||||
- 企业端选择后截图:[JF-EN-014-crosscity-region-selected-no-job-tab.png](../screenshots/JF-EN-014-crosscity-region-selected-no-job-tab.png)。
|
||||
- 两个角色的无障碍快照均只有“已选择 1 个区域”,没有“各地市就业信息”页签或岗位列表。
|
||||
- 选择/清除操作期间没有发出岗位查询请求;岗位接口在前端服务中定义为 `GET /api/cms/publicJobFair/cross-domain-jobs`,但本次实际操作未调用。
|
||||
- CodeGraph/源代码证据:`Crosscityfair/index.tsx` 约第 293–304 行注释“暂时隐藏各地市就业信息栏目”;第 630 行附近的 `tabItems` 中,`city-jobs` 项目被整段注释,当前只渲染“数据统计”和“区域管理”。
|
||||
|
||||
## 影响范围
|
||||
|
||||
区域选择看起来像招聘会岗位筛选入口,但没有结果反馈或业务动作,管理员和企业无法据此完成跨域岗位查看、核对或后续招聘会运营工作,容易造成“筛选已生效但不知道结果在哪里”的误判。
|
||||
|
||||
## 建议
|
||||
|
||||
产品确认该功能应当提供“各地市就业信息”页签后,恢复或重做岗位列表并在选择城市时刷新 `cross-domain-jobs`;如果该能力已废弃,应移除城市选择筛选交互或在页面明确说明其用途,避免保留无效入口。修复后应验证管理员、企业和求职者端的城市、岗位、招聘会数据口径一致。
|
||||
84
docs/test-reports/job-fair/2026-07-25/bugs/FIX-STATUS.md
Normal file
84
docs/test-reports/job-fair/2026-07-25/bugs/FIX-STATUS.md
Normal file
@@ -0,0 +1,84 @@
|
||||
# 2026-07-25 招聘会缺陷处理状态
|
||||
|
||||
更新时间:2026-07-25
|
||||
|
||||
本文件汇总本目录 29 项缺陷的代码处理结果。表单语义、键盘交互和展示层修复已写入 `shz-admin`;接口契约、图片地址和展位图数量修复已写入 `shz-backend`。测试数据库本轮只能走受保护只读流程,但 HighGo 客户端路径不可用,因此没有执行任何数据清理或写入 SQL。
|
||||
|
||||
## 已完成代码修复
|
||||
|
||||
| 缺陷 | 处理结果 |
|
||||
| --- | --- |
|
||||
| BUG-002 | 求职者招聘会搜索框补充稳定 `id/name/aria-label/autocomplete`。 |
|
||||
| BUG-003 | 公共线上招聘会详情 DTO、MyBatis 映射和查询补齐主办、协办、承办单位及详情页依赖的公开字段。 |
|
||||
| BUG-004 | 企业端线上招聘会时间范围和标题查询字段补充稳定语义属性。 |
|
||||
| BUG-005 | 企业端户外招聘会标题、举办单位及其他查询字段补充稳定语义属性。 |
|
||||
| BUG-007 | 户外招聘会报名改为二次确认后才发送写请求,与线上报名流程一致。 |
|
||||
| BUG-008 | 户外“报名岗位”弹窗的岗位名称、学历和经验筛选字段补充稳定语义属性。 |
|
||||
| BUG-010 | 跨域统计 RangePicker 的开始、结束输入补充独立 `id` 和可访问名称。 |
|
||||
| BUG-011 | 企业端联盟城市管理查询字段补充 `id/name/aria-label/autocomplete`。 |
|
||||
| BUG-012 | 管理端线上招聘会时间范围和标题查询字段补充稳定语义属性。 |
|
||||
| BUG-013 | 管理端空头像改用仓库内置默认头像,并为头像加载失败提供本地回退,避免继续依赖已失效的外部默认图。 |
|
||||
| BUG-015 | 管理端线上招聘会详情的岗位学历和经验字段改用字典中文标签;未知编码显示“待配置”,不再显示裸编码。 |
|
||||
| BUG-016 | 管理端户外招聘会筛选字段补充稳定语义属性。 |
|
||||
| BUG-017 | 管理端户外参会企业名称、报名时间和审核状态筛选字段补充稳定语义属性。 |
|
||||
| BUG-018 | 已签到/未签到两个企业列表使用独立且可区分的企业名称字段标识。 |
|
||||
| BUG-019 | 企业退订查询字段补充稳定语义属性。 |
|
||||
| BUG-020 | 参会岗位名称、企业、学历和经验筛选字段补充稳定语义属性。 |
|
||||
| BUG-021 | 参会人员姓名查询字段声明 `autocomplete="off"`,并补充稳定字段标识。 |
|
||||
| BUG-022 | 设备码查询和新增设备码字段补充稳定语义属性。 |
|
||||
| BUG-023 | 场地类型、场地名称筛选字段补充稳定语义属性。 |
|
||||
| BUG-024 | 新增场地弹窗的类型、名称、面积、展位数量、联系电话、地址、线路、机构、备注和经办信息字段补充稳定语义属性及单位提示。 |
|
||||
| BUG-025 | 管理端统计日期 RangePicker 的开始、结束输入补充独立 `id` 和可访问名称。 |
|
||||
| BUG-026 | 机构列表及新增/编辑表单补充稳定字段标识。 |
|
||||
| BUG-027 | 管理端联盟城市管理查询和编辑字段补充稳定语义属性。 |
|
||||
| BUG-028 | 跨域城市选择改为可聚焦按钮,支持 Tab、Enter、Space,并通过 `aria-pressed` 暴露选中状态。 |
|
||||
|
||||
## 已做代码防护,但历史数据或业务口径待确认
|
||||
|
||||
### BUG-001:标题年份与举办日期不一致
|
||||
|
||||
历史线上招聘会和户外招聘会记录中的真实年度不能从现有接口事实推断。本轮没有擅自修改标题或日期。请确认以下事项后再决定是否生成测试数据修正 SQL:
|
||||
|
||||
1. 线上 `jobFairId=1032` 的真实年度和应保留的标题;
|
||||
2. 户外 `id=8` 的真实年度和应保留的标题;
|
||||
3. 是否允许管理端新增/编辑时对标题中显式四位年份与举办日期年份不一致进行阻止,还是只提示并允许保存。
|
||||
|
||||
### BUG-006:户外招聘会图片回环地址
|
||||
|
||||
前端所有 PC 图片入口已通过 `normalizePublicUrl` 处理;后端 CMS 列表、详情和公共 H5 接口也会把历史回环地址替换为当前公开 origin。新增/编辑接口拒绝 `localhost`、`127.0.0.1`、`0.0.0.0` 和 `::1` 图片地址,避免继续污染数据。
|
||||
|
||||
测试库中的历史 `id=14` 图片字段仍未执行清理,因为本轮未获得测试数据库写入授权且受保护 HighGo 客户端路径不可用。请确认是否由数据管理员重新上传/清理该记录,并确认公开图片代理路径。
|
||||
|
||||
### BUG-009:展位数量口径不一致
|
||||
|
||||
后端列表和详情新增 `boothMapCount`,返回实际招聘会展位图数量;管理端同时显示“展位数量”(配置容量)和“展位图数量”(实际展位图),并继续显示已预定数量。这样不会用未经确认的方式覆盖历史 `boothCount`。
|
||||
|
||||
请确认历史场地/招聘会配置容量的业务口径:
|
||||
|
||||
1. `boothCount` 应表示场地配置容量,保留历史值;
|
||||
2. `boothCount` 应与展位图数量一致,由数据管理员按实际模板修正;
|
||||
3. 另定义“可报名容量”字段,配置容量和展位图数量均保留。
|
||||
|
||||
### BUG-013:头像历史地址
|
||||
|
||||
代码已提供本地默认图和加载失败回退,但如果用户资料本身保存了失效的自定义头像,浏览器仍可能先发起一次该地址请求。是否清理历史用户头像地址需要数据管理员确认,本轮不修改用户数据。
|
||||
|
||||
## 必须产品确认后继续的功能/数据问题
|
||||
|
||||
### BUG-014:线上/线下招聘会类型冲突
|
||||
|
||||
求职者端入口、公开详情字段和管理端字典对同一招聘会的类型语义不一致。不能在没有业务确认时把 `jobFairId=1050` 的类型值改为线上或线下,也不能擅自修改全局字典。请确认真实类型及统一规则后,再继续修改数据或接口契约。
|
||||
|
||||
### BUG-029:跨域区域选择后的岗位/就业信息闭环
|
||||
|
||||
当前代码已有 `JobsTab` 和 `GET /api/cms/publicJobFair/cross-domain-jobs`,但“各地市就业信息”页签被明确注释隐藏;城市选择目前只更新本地状态。恢复岗位页签并让选择/清除触发岗位查询属于功能恢复,会改变管理员和企业端页面结构。请确认:
|
||||
|
||||
1. 恢复“各地市就业信息”页签,并按所选城市调用现有接口;或
|
||||
2. 废弃城市筛选入口,改为统计用途说明;或
|
||||
3. 采用新的产品交互和接口口径。
|
||||
|
||||
## 测试数据与环境说明
|
||||
|
||||
- BUG-007 复现阶段曾对测试企业与户外招聘会产生一条“待审核”报名写入;本轮没有擅自撤销或删除,需测试数据管理员按业务流程处理。
|
||||
- 测试 HighGo 只读查询脚本无法找到服务器上的 HighGo `psql` 客户端,因此历史数据状态未通过数据库重新核对。
|
||||
- 正式环境 SQL 未执行,生产环境未部署。
|
||||
Reference in New Issue
Block a user