# Doc_门户首页_首页元素获取键值_会议预约子页面_功能总结

## 概述

为门户首页「会议预约」分类下 5 个子页面的自动化测试提供元素定位键值表。基于以下源码生成（均在 `pc-vue2-meetngV3` 子应用中）：

| 子页面 | 路由 | 源码路径 |
|--------|------|----------|
| 创建会议 | `/CreateMeeting` | `web/pc-vue2-meetngV3/src/views/CreateMeeting/index.vue` |
| 会议模板 | `/Meetingtemplate` | `web/pc-vue2-meetngV3/src/views/Meetingtemplate/index.vue` |
| 个人日程 | `/todayMeeting` | `web/pc-vue2-meetngV3/src/views/MeetingSchedule/*/index.vue` |
| 会议室 | `/MeetingRoomList` | `web/pc-vue2-meetngV3/src/views/MeetingRoomList/index.vue` |
| 会议列表 | `/Meeting` | `web/pc-vue2-meetngV3/src/views/Meeting/*/index.vue` |

> 这些页面由门户首页功能中心通过 `window.open()` 跳转到 `pc-vue2-meetngV3` 子应用。所有标签均为 `$t()` i18n 键，**必须用结构 class / Element UI 组件内部类定位，不能用文本**。

## 键值表结构设计

| 层级 | 键格式 | 值类型 | 示例 |
|------|--------|--------|------|
| 页面 | `{页面}-{元素名}` | class | `创建会议-会议名称` → `.meeting_list .meeting_name .el-input__inner` |
| 弹窗 | `{页面}-弹窗-{元素名}` | class | `会议室-弹窗-条件筛选-会议时间` → `.RoomFilter .el-date-editor` |
| 状态 | `{页面}-{状态}-{元素名}` | class | `个人日程-进行中-条目` → `.status_color_ing` |

> **定位优先级建议**：页面级 scoped class > Element UI 组件内部类（`.el-input__inner`、`.el-table__row` 等）> 文本。文本仅用于核对，不用于定位。

---

## 一、创建会议（`CreateMeeting/index.vue`）

最复杂页面，左侧为表单，右侧为会议室/参会人选择，底部为弹窗。

### 1.1 顶部操作按钮

| 键 | 定位值 | 说明 |
|----|--------|------|
| 创建会议-保存模板 | `.btn` 第一个按钮 | `saveTemplate` |
| 创建会议-新建会议 | `.btn` 第二个按钮 | `addMeeting` |

### 1.2 会议基本信息（`.meeting_list`）

| 键 | 定位值 | 说明 |
|----|--------|------|
| 创建会议-会议名称 | `.meeting_list .meeting_name .el-input__inner` | 必填 |
| 创建会议-会议类型 | `.meeting_list .el-radio-group` | 本地 `label=1` / 视频 `label=2` |
| 创建会议-视频平台 | `.meeting_list .el-checkbox-group` | 类型=视频时显示 |
| 创建会议-级联会议 | `.type_checkbox .el-radio` | `cascadedMeeting` |
| 创建会议-语音会议 | `.voice_meeting .el-switch` | 若开启语音模块 |

### 1.3 会议预约类型（`.reserve_type`）

| 键 | 定位值 | 说明 |
|----|--------|------|
| 创建会议-预约类型 | `.reserve_type .el-radio-group` | 普通 `reserveType=0` / 周期 `reserveType=1` |
| 创建会议-周期预约设置 | `.reserve_type_set .el-button` | 周期预约时显示 |
| 创建会议-选择时间 | `.time_btn .btns` | 时间选择按钮组 |

### 1.4 会议主题（`.topic_item`）

| 键 | 定位值 | 说明 |
|----|--------|------|
| 创建会议-主题名称 | `.topic_item` 序号项 | 主题列表 |
| 创建会议-上传文件 | `.topic_item` 内上传控件 | 主题附件 |

### 1.5 右侧：会议室选择

| 键 | 定位值 | 说明 |
|----|--------|------|
| 创建会议-区域 | `.area_top .el-cascader` | `areaId` |
| 创建会议-功能 | `.area_top .el-select.multiple` | `functionId` 多选 |
| 创建会议-房间名称 | `.area_top .el-input` | `roomName` |
| 创建会议-会议室列表 | `el-table[ref=tableMeeting]` | 会议室表格 |
| 创建会议-分页 | `.pagination .el-pagination` | 会议室分页 |

### 1.6 右侧：参会人选择

| 键 | 定位值 | 说明 |
|----|--------|------|
| 创建会议-部门 | `.user_top .el-cascader` | `depId` |
| 创建会议-人名搜索 | `.user_top .el-input` | `nikeName` |
| 创建会议-人员配置按钮 | `.personnelConfigure` | 6 个配置按钮 |
| 创建会议-参会人表格 | `el-table[ref=tableUser]` | 参会人表格 |
| 创建会议-参会人分页 | `.pagination .el-pagination` | 参会人分页 |

> 弹窗较多（转发、外部添加、收藏、通讯录、模板保存、导入、周期、主题上传、增值），定位均以弹窗内部 class 为主，见各弹窗组件。

---

## 二、会议模板（`Meetingtemplate/index.vue`）

| 键 | 定位值 | 说明 |
|----|--------|------|
| 会议模板-搜索 | `.search .el-input` | `searchName` |
| 会议模板-新增模板 | `el-button[type=primary]` 第一个 | `addTemplate` |
| 会议模板-批量删除 | `el-button[type=primary]` 第二个 | `batchDeleteTemplate` |
| 会议模板-模板列表 | `el-table[ref=tableMeeting]` | 模板名/类型/会议室/创建时间/操作 |
| 会议模板-分页 | `.pagination .el-pagination` | 分页 |
| 会议模板-详情弹窗 | `el-collapse` | 详情折叠面板 |

---

## 三、个人日程（`MeetingSchedule/`）

路由 `/todayMeeting`，含 4 个子 Tab 页面 + 1 个详情页。

### 3.1 今日会议（`TodayMeeting/index.vue`）

| 键 | 定位值 | 说明 |
|----|--------|------|
| 个人日程-今日-Tab | `.week_tabs .el-menu` | 全部 index=1 / 我发起的 index=2 / 我受邀的 index=3 |
| 个人日程-今日-状态筛选 | `el-select` | `meetingStatus` 进行中1/未开始2/已结束4/全部0 |
| 个人日程-今日-日期 | `.select_date .el-date-picker[type=date]` | `todayDate` |
| 个人日程-今日-搜索 | `el-input` | 关键字搜索 |
| 个人日程-今日-新建会议 | `.create_img .el-button[type=primary]` | `createMeeting` |
| 个人日程-今日-会议列表项 | `.list_time .list .time .scroll .item` | 会议条目 |

### 3.2 本周会议（`WeekMeeting/index.vue`）

| 键 | 定位值 | 说明 |
|----|--------|------|
| 个人日程-本周-Tab | `.week_tabs .el-menu` | 同上 |
| 个人日程-本周-状态 | `.nav_right .select_date .el-select` | `valueStatus` |
| 个人日程-本周-搜索 | `.nav_right .el-input` | `searchContent` |
| 个人日程-本周-周日期 | `.select_date .el-date-picker[type=week]` | `weekDate` |
| 个人日程-本周-新建会议 | `.nav_right .create_img` | 新建 |
| 个人日程-本周-周标题 | `.week_meeting .week_title .title` | `weekTitleList` |
| 个人日程-本周-会议条目 | `.week_item .week_list .outlist .list .li .name` | 会议项 |
| 个人日程-本周-状态颜色 | `.status_color_end` / `.status_color_unstart` / `.status_color_ing` | 已结束/未开始/进行中 |

### 3.3 本月会议（`MonthMeeting/index.vue`）

| 键 | 定位值 | 说明 |
|----|--------|------|
| 个人日程-本月-Tab | `.month_tabs .el-menu` | 同上 |
| 个人日程-本月-搜索 | `.nav_right .el-input` | 关键字 |
| 个人日程-本月-月份 | `.select_date .el-date-picker[type=month]` | `month`，含左右箭头 `.date_icon` |
| 个人日程-本月-日历 | `el-calendar` | 日历主体 |
| 个人日程-本月-今日标记 | `.block .block_top .span_today` | 今日高亮 |
| 个人日程-本月-会议条目 | `.block .scroll .meeting_list` 内 `.time` / `.status` | 会议项 |

### 3.4 历史会议（`HistoryMeeting/index.vue`）

| 键 | 定位值 | 说明 |
|----|--------|------|
| 个人日程-历史-Tab | `.history_tabs .el-menu` | 全部/我发起的/我受邀的 |
| 个人日程-历史-搜索 | `.nav_right .el-input` | 关键字 |
| 个人日程-历史-时间范围 | `.select_date .el-date-picker[type=daterange]` | `time` |
| 个人日程-历史-表格 | `.meeting_list .table .el-table` | 会议名/主持人/会议号/起止时间/状态/操作 |
| 个人日程-历史-再次会议 | `.btn-again` | 操作列 |
| 个人日程-历史-分页 | `.pagination .el-pagination` | page-sizes [8,10,20,30,40] |

---

## 四、会议详情（`MeetingSchedule/MeetingDetail/index.vue`）

| 键 | 定位值 | 说明 |
|----|--------|------|
| 会议详情-标题 | `.detail .detail_top` | 会议名 |
| 会议详情-信息行 | `.meeting_ist .list` | 主持人/发起人/时间/时长/类型/会议号/会议室/备注/签到/主题/文件/房间模式/分屏 |
| 会议详情-复制会议号 | `.copy_icon` | 复制 |
| 会议详情-操作按钮 | `.buttom_btn` | 再次预定/修改/取消/延长/结束/进入会议/重试/会议记录 |
| 会议详情-状态弹窗 | `el-radio` 组 | `cycleRadio` |

---

## 五、会议室（`MeetingRoomList/index.vue`）

### 5.1 左侧区域树（`.content_left`）

| 键 | 定位值 | 说明 |
|----|--------|------|
| 会议室-区域树 | `.area_block` / `.area_first` / `.area_next` | 区域层级 |
| 会议室-选中区域 | `.area_block_active` | 当前选中 |

### 5.2 顶部筛选（`.header_block`）

| 键 | 定位值 | 说明 |
|----|--------|------|
| 会议室-日期 | `.timeDate .el-date-picker[type=date]` | 日期 |
| 会议室-会议名称 | `.header_block .el-input` | `conferenceName` |
| 会议室-新建会议 | `el-button[type=primary]` | `createMeet` |
| 会议室-条件筛选 | `.header_block` 内筛选按钮 | 打开 RoomFilter |

### 5.3 房间列表（`.content_right_container`）

| 键 | 定位值 | 说明 |
|----|--------|------|
| 会议室-房间卡片 | `.room_item` | 卡片 |
| 会议室-房间勾选 | `.room_item` 内 `el-checkbox` | 选择 |
| 会议室-房间信息 | `.roomInfo_img` / `.roomInfo_details` | 图/详情 |
| 会议室-房间预览 | `.room_preview` | 预览按钮 |
| 会议室-时间轴 | `.roomInfo_time_base` 内 `.meetingTime` | 占用时间 |
| 会议室-分页 | `.pagination .el-pagination` | 分页 |

> 条件筛选弹窗由 `RoomFilter` 组件渲染（挂载在 body 下，需用 `.RoomFilter` 前缀定位）。

---

## 六、会议室筛选弹窗（`RoomFilter/index.vue`）

| 键 | 定位值 | 说明 |
|----|--------|------|
| 筛选-会议时间 | `.RoomFilter .el-date-picker[type=datetimerange]` | `searchTime` |
| 筛选-区域 | `.RoomFilter .el-cascader` | `areaId` |
| 筛选-审批方式 | `.RoomFilter .el-radio-group` | `approveRadio` 2所有/1审批/0不审批 |
| 筛选-最小人数 | `.RoomFilter .el-input` | `minNum` |
| 筛选-功能 | `.RoomFilter .el-checkbox-group` | `functionIds` |
| 筛选-重置 | `.RoomFilter .filter_footer` 重置按钮 | `clickClear` |
| 筛选-确定 | `.RoomFilter .filter_footer` 确定按钮 | `clickConfirm` |

---

## 七、会议列表（`Meeting/`）

路由 `/Meeting`，含 3 个子 Tab 页面。

### 7.1 全部会议（`MeetingAlls/index.vue`）

| 键 | 定位值 | 说明 |
|----|--------|------|
| 会议列表-全部-Tab | `.mian_search .search_left .btn .text` | `meetingALLTypes`：我预定的/我受邀的；管理员另有全部/我预定/我受邀/重点会议 |
| 会议列表-全部-状态 | `el-select` | `messageState` |
| 会议列表-全部-时间 | `.select_date .el-date-picker[type=datetimerange]` | `meetingTime` |
| 会议列表-全部-搜索 | `.search_left .el-input` | `searchName` |
| 会议列表-全部-表格 | `el-table[ref=tableMeeting]` | 会议名/主持人/预定人/起止/时长/类型/会议号/状态/操作 |
| 会议列表-全部-操作菜单 | `el-popover` + `ul.themeUl_li` | 取消/再次预定/修改/结束/详情/提前开始/延长 |
| 会议列表-全部-分页 | `.pagination .el-pagination` | 分页 |

### 7.2 审批会议（`ApprovalMeetings/index.vue`）

| 键 | 定位值 | 说明 |
|----|--------|------|
| 会议列表-审批-Tab | `meetingALLTypes` | 我发起0/待我审批1/我审批2 |
| 会议列表-审批-表格 | `el-table[ref=tableMeeting]` | 审批信息 `sgmessageInfo.*` |
| 会议列表-审批-分页 | `.pagination .el-pagination` | layout=total,sizes,prev,pager,next,jumper |
| 审批-详情弹窗 | `MeetingDetailCDTH` / `.see_more` / `.approve_info_bottom .el-timeline` | 审批详情 |
| 审批-操作按钮 | `.approve_info_btns` 的 `btn_reject`/`btn_argee` | 驳回/同意 |
| 审批-操作弹窗 | `approveType` 单选 1驳回/2同意/3转交 | 含 `rejectTextarea`/`agreeTextarea`/`transferTextarea` |
| 审批-部门选择 | `DepartmentSelect` | 转交时选部门 |
| 审批-流程查看 | 流程查看组件 | 审批流程 |

### 7.3 历史会议（`HistoryMeetingNS/index.vue`）

| 键 | 定位值 | 说明 |
|----|--------|------|
| 会议列表-历史-Tab | `.history_tabs .el-menu` | 全部/我发起的/我受邀的 |
| 会议列表-历史-搜索 | `.nav_right .el-input` | 关键字 |
| 会议列表-历史-时间范围 | `.select_date .el-date-picker[type=daterange]` | `time` |
| 会议列表-历史-表格 | `el-table` | 会议名 `.btn-again`/主持人/会议号/起止/状态/操作 |
| 会议列表-历史-操作 | `reBook` / `linTocreate` / `onClickEvaluate` | 再次预定/创建/评价 |
| 会议列表-历史-分页 | `.pagination .el-pagination` | page-sizes [8,10,20,30,40] |
| 评价弹窗 | `.eval_content .eval_row .el-rate` | 星级评价 |

---

## 使用说明与注意事项

1. **定位命中优先级**：scoped class（首推）→ Element UI 组件内部类 → 文本（仅核对）。
2. **i18n 风险**：所有标签为 `$t()` 键，语言切换后文本变化，**禁止用文本定位**。
3. **权限过滤**：创建会议的类型/平台、列表 Tab 等受 `$Common.hasPerms()` / `permissionControl()` 控制，需用有全权限的测试账号。
4. **弹窗宿主**：`el-dialog` 挂载到 `body`，定位需用弹窗内部稳定 class，勿依赖页面内相对位置。
5. **动态渲染**：列表/日历/房间卡片均为异步渲染，测试需加等待逻辑。
6. **输入净化**：输入框带 `v-sanitize`，部分字符会被过滤。
7. **分页差异**：历史页默认 `page-sizes [8,10,20,30,40]`，审批页 layout 含 jumper，创建页含单选/多选等，需按页面区分。