@tencent-rtc/trtc-agent-skills 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +172 -0
- package/README.zh.md +173 -0
- package/bin/cli.js +434 -0
- package/knowledge-base/index.yaml +454 -0
- package/knowledge-base/platform-slice-template.md +233 -0
- package/knowledge-base/scenario-spec.md +350 -0
- package/knowledge-base/scenarios/conference/base/general-conference.md +365 -0
- package/knowledge-base/scenarios/conference/base/webinar-conference.md +130 -0
- package/knowledge-base/scenarios/conference/medical/1v1-video-consultation.md +145 -0
- package/knowledge-base/scenarios/conference/medical/medical-multidoctor-consultation.md +113 -0
- package/knowledge-base/scenarios/live/entertainment-live-room.md +118 -0
- package/knowledge-base/slice-spec.md +546 -0
- package/knowledge-base/slices/conference/web/ai-tools.md +225 -0
- package/knowledge-base/slices/conference/web/beauty-effects.md +188 -0
- package/knowledge-base/slices/conference/web/device-control.md +338 -0
- package/knowledge-base/slices/conference/web/login-auth.md +261 -0
- package/knowledge-base/slices/conference/web/network-quality.md +190 -0
- package/knowledge-base/slices/conference/web/official-roomkit-api.md +298 -0
- package/knowledge-base/slices/conference/web/official-roomkit-login-ui.md +246 -0
- package/knowledge-base/slices/conference/web/participant-list.md +238 -0
- package/knowledge-base/slices/conference/web/participant-management.md +718 -0
- package/knowledge-base/slices/conference/web/prejoin-check.md +293 -0
- package/knowledge-base/slices/conference/web/room-call.md +213 -0
- package/knowledge-base/slices/conference/web/room-chat.md +426 -0
- package/knowledge-base/slices/conference/web/room-lifecycle.md +534 -0
- package/knowledge-base/slices/conference/web/room-schedule.md +281 -0
- package/knowledge-base/slices/conference/web/screen-share.md +211 -0
- package/knowledge-base/slices/conference/web/video-layout.md +675 -0
- package/knowledge-base/slices/conference/web/virtual-background.md +197 -0
- package/knowledge-base/slices/conference/web/webinar-interaction.md +206 -0
- package/knowledge-base/slices/live/anchor-lifecycle.md +122 -0
- package/knowledge-base/slices/live/anchor-preview.md +90 -0
- package/knowledge-base/slices/live/anchor-room-config.md +104 -0
- package/knowledge-base/slices/live/audience-list.md +86 -0
- package/knowledge-base/slices/live/audience-manage.md +92 -0
- package/knowledge-base/slices/live/audience-watch.md +85 -0
- package/knowledge-base/slices/live/audio.md +116 -0
- package/knowledge-base/slices/live/barrage.md +88 -0
- package/knowledge-base/slices/live/beauty.md +99 -0
- package/knowledge-base/slices/live/coguest-apply.md +105 -0
- package/knowledge-base/slices/live/device-control.md +91 -0
- package/knowledge-base/slices/live/error-codes.md +167 -0
- package/knowledge-base/slices/live/gift.md +84 -0
- package/knowledge-base/slices/live/ios/.gitkeep +0 -0
- package/knowledge-base/slices/live/ios/anchor-lifecycle.md +313 -0
- package/knowledge-base/slices/live/ios/anchor-preview.md +228 -0
- package/knowledge-base/slices/live/ios/anchor-room-config.md +257 -0
- package/knowledge-base/slices/live/ios/audience-list.md +353 -0
- package/knowledge-base/slices/live/ios/audience-manage.md +381 -0
- package/knowledge-base/slices/live/ios/audience-watch.md +286 -0
- package/knowledge-base/slices/live/ios/audio.md +373 -0
- package/knowledge-base/slices/live/ios/barrage.md +285 -0
- package/knowledge-base/slices/live/ios/beauty.md +323 -0
- package/knowledge-base/slices/live/ios/coguest-apply.md +506 -0
- package/knowledge-base/slices/live/ios/device-control.md +286 -0
- package/knowledge-base/slices/live/ios/error-codes.md +270 -0
- package/knowledge-base/slices/live/ios/gift.md +315 -0
- package/knowledge-base/slices/live/ios/live-list.md +269 -0
- package/knowledge-base/slices/live/ios/login-auth.md +247 -0
- package/knowledge-base/slices/live/live-list.md +82 -0
- package/knowledge-base/slices/live/login-auth.md +78 -0
- package/package.json +34 -0
- package/skills/trtc/SKILL.md +326 -0
- package/skills/trtc/room-builder/SKILL.md +138 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/README.md +108 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/docs/backend-contract.zh-CN.md +162 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/docs/integration.zh-CN.md +154 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/docs/theme.zh-CN.md +78 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/index.html +12 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/package.json +28 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/postcss.config.js +5 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/App.vue +25 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/ConsultationManagePanel.vue +838 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/LanguageSwitch.vue +102 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/LoadingSpinner.vue +6 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/MedicalAlert.vue +34 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/MedicalBusinessPanel.vue +148 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/MedicalButton.vue +49 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/MedicalConfirmDialog.vue +68 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/MedicalDataPanel.vue +196 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/MedicalRecordPanel.vue +270 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/PrescriptionPanel.vue +363 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/config/basic-info-config.ts +29 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/config/lib-generate-test-usersig-es.min.d.ts +4 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/config/lib-generate-test-usersig-es.min.js +2 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/config/runtime-config.ts +12 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/env.d.ts +32 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/components/ConsultationChatPanel.vue +123 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/components/ConsultationMembersPanel.vue +230 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/components/ConsultationTranscriptionPanel.vue +135 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/components/ConsultationVideoStage.vue +113 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/components/InviteDoctorDialog.vue +132 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/components/KickMemberConfirmDialog.vue +50 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/types.ts +77 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/useConsultationChat.ts +97 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/useConsultationDevices.ts +48 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/useConsultationParticipants.ts +121 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/useConsultationPermissions.ts +25 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/utils.ts +70 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/i18n/en-US/index.ts +553 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/i18n/index.ts +25 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/i18n/medicalTranslate.ts +85 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/i18n/state.ts +49 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/i18n/zh-CN/index.ts +463 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/main.ts +12 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/mock/appointments.ts +96 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/mock/users.ts +79 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/router/index.ts +63 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/index.ts +25 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/integration/appointmentService.ts +77 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/integration/authService.ts +38 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/integration/launchContext.ts +31 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/integration/userService.ts +35 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/mock/appointmentService.ts +43 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/mock/authService.ts +33 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/mock/userService.ts +43 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/types.ts +135 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/shared/icons.ts +53 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/styles/index.css +106 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/styles/tailwind.css +3 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/styles/theme.css +209 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/utils/auth.ts +50 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/utils/format.ts +24 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/utils/navigation.ts +12 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/utils/session.ts +28 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/DoctorConsultationView.vue +777 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/DoctorDashboardView.vue +678 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/LoginView.vue +441 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/PatientConsultationFinishedView.vue +185 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/PatientConsultationView.vue +1003 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/PatientSelectDoctorView.vue +317 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/PatientWaitingView.vue +454 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/tsconfig.json +21 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/tsconfig.node.json +8 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/vite.config.ts +17 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation//346/216/245/345/205/245/350/257/264/346/230/216.md +6 -0
- package/skills/trtc/room-builder/tools/render_ai_instructions.py +226 -0
- package/skills/trtc-apply/SKILL.md +97 -0
- package/skills/trtc-apply/guardrails/apply_lib/__init__.py +0 -0
- package/skills/trtc-apply/guardrails/apply_lib/__pycache__/__init__.cpython-313.pyc +0 -0
- package/skills/trtc-apply/guardrails/apply_lib/__pycache__/rule_parser.cpython-313.pyc +0 -0
- package/skills/trtc-apply/guardrails/apply_lib/rule_parser.py +268 -0
- package/skills/trtc-docs/SKILL.md +207 -0
- package/skills/trtc-onboarding/SKILL.md +839 -0
- package/skills/trtc-onboarding/reference/path-a1-demo.md +103 -0
- package/skills/trtc-onboarding/reference/path-a2-integrate.md +693 -0
- package/skills/trtc-onboarding/reference/path-b-troubleshoot.md +115 -0
- package/skills/trtc-onboarding/reference/path-c-expand.md +43 -0
- package/skills/trtc-onboarding/reference/reporting-protocol.md +174 -0
- package/skills/trtc-onboarding/reference/supported-matrix.md +100 -0
- package/skills/trtc-onboarding/reference/usersig-handling.md +140 -0
- package/skills/trtc-search/SKILL.md +221 -0
- package/skills/trtc-topic/SKILL.md +638 -0
- package/skills/trtc-topic/guardrails/__pycache__/gate_slice_read.cpython-313.pyc +0 -0
- package/skills/trtc-topic/guardrails/__pycache__/gate_slice_write.cpython-313.pyc +0 -0
- package/skills/trtc-topic/guardrails/__pycache__/stop_require_apply_evidence.cpython-313.pyc +0 -0
- package/skills/trtc-topic/guardrails/gate_slice_read.py +133 -0
- package/skills/trtc-topic/guardrails/gate_slice_write.py +169 -0
- package/skills/trtc-topic/guardrails/stop_require_apply_evidence.py +97 -0
- package/skills/trtc-topic/references/execution-units.yaml +58 -0
- package/skills/trtc-topic/runtime/README.md +50 -0
- package/skills/trtc-topic/runtime/RUNTIME.md +128 -0
- package/skills/trtc-topic/runtime/lib/__init__.py +0 -0
- package/skills/trtc-topic/runtime/lib/platforms.py +194 -0
- package/skills/trtc-topic/runtime/package-lock.json +1211 -0
- package/skills/trtc-topic/runtime/package.json +13 -0
- package/skills/trtc-topic/runtime/telemetry-bridge.mjs +339 -0
- package/skills/trtc-topic/runtime/telemetry_collector.py +293 -0
- package/skills/trtc-topic/scripts/STATE-MACHINE-GUIDE.md +186 -0
- package/skills/trtc-topic/scripts/__pycache__/apply.cpython-313.pyc +0 -0
- package/skills/trtc-topic/scripts/apply.py +581 -0
- package/skills/trtc-topic/scripts/finalize_session.py +113 -0
- package/skills/trtc-topic/scripts/init_slice_queue.py +96 -0
- package/skills/trtc-topic/scripts/lib/__pycache__/state_machine.cpython-313.pyc +0 -0
- package/skills/trtc-topic/scripts/lib/state_machine.py +328 -0
- package/skills/trtc-topic/scripts/next_slice.py +137 -0
- package/skills/trtc-topic/tests/README.md +70 -0
- package/skills/trtc-topic/tests/__pycache__/conftest.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/conftest.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_apply_cli.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_apply_cli.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_end_to_end.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_end_to_end.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_finalize_session.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_finalize_session.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_gates.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_gates.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_session_resolver.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_session_resolver.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_state_machine.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_state_machine.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_stop_require_apply.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_stop_require_apply.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_topic_skill_invariants.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_topic_skill_invariants.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/conftest.py +72 -0
- package/skills/trtc-topic/tests/test_apply_cli.py +480 -0
- package/skills/trtc-topic/tests/test_end_to_end.py +305 -0
- package/skills/trtc-topic/tests/test_finalize_session.py +51 -0
- package/skills/trtc-topic/tests/test_gates.py +316 -0
- package/skills/trtc-topic/tests/test_session_resolver.py +260 -0
- package/skills/trtc-topic/tests/test_state_machine.py +414 -0
- package/skills/trtc-topic/tests/test_stop_require_apply.py +99 -0
- package/skills/trtc-topic/tests/test_topic_skill_invariants.py +130 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: conference/official-roomkit-login-ui
|
|
3
|
+
platform: web
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 官方 RoomKit 登录页 UI 规范 — Web 实现
|
|
7
|
+
|
|
8
|
+
> 本文件定义 `ui_mode = official-roomkit` 模式下,AI 生成登录页时应遵循的 UI 结构和风格约束。
|
|
9
|
+
|
|
10
|
+
## 1. 页面级布局约束
|
|
11
|
+
|
|
12
|
+
### 1.1 窗口
|
|
13
|
+
|
|
14
|
+
| 项 | 取值 |
|
|
15
|
+
|---|---|
|
|
16
|
+
| 最小窗口尺寸 | 960 × 640 |
|
|
17
|
+
| 推荐窗口尺寸 | 1280 × 800 |
|
|
18
|
+
| 整体栅格 | 12 列,左右各 24px 安全边距 |
|
|
19
|
+
| 整体结构 | 顶栏(64px)→ 主体区(自适应)→ 底栏(56px) |
|
|
20
|
+
|
|
21
|
+
### 1.2 表单居中
|
|
22
|
+
|
|
23
|
+
- 登录表单(卡片)在主体区**水平居中 + 垂直居中**。
|
|
24
|
+
- 卡片固定宽度 **400px**;窗口宽度 < 480px 时按 `100% - 48px` 自适应,最大不超过 400px。
|
|
25
|
+
- 卡片到顶栏的最小垂直距离 ≥ 80px,到底栏 ≥ 64px;空间不足时主体区可滚动,卡片不变形。
|
|
26
|
+
|
|
27
|
+
### 1.3 背景
|
|
28
|
+
|
|
29
|
+
- 整页纯色背景(推荐 `#FFFFFF` 或 `#F7F9FA`);不做装饰图、不分左右栏。
|
|
30
|
+
- 顶栏与底栏背景与主体一致,仅以分割(透明)区分层次。
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 2. 顶栏 / 底栏布局约束
|
|
35
|
+
|
|
36
|
+
### 2.1 顶栏(高度 64px)
|
|
37
|
+
|
|
38
|
+
- 左侧内边距 56px:放 Logo(高度 24~28px)。
|
|
39
|
+
- 右侧内边距 56px:可放语言切换、帮助等次要入口;间距 24px。
|
|
40
|
+
- 顶栏内所有元素垂直居中。
|
|
41
|
+
|
|
42
|
+
### 2.2 底栏(高度 56px)
|
|
43
|
+
|
|
44
|
+
- 内容居中或左对齐;放法律链接、版本号等。
|
|
45
|
+
- 字号 12px;多个链接之间间距 16px。
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 3. 登录卡片内部布局
|
|
50
|
+
|
|
51
|
+
卡片内边距:**上下 40px / 左右 32px**
|
|
52
|
+
|
|
53
|
+
自上而下顺序与垂直间距:
|
|
54
|
+
|
|
55
|
+
| # | 元素 | 与下一项的间距 |
|
|
56
|
+
|---|---|---|
|
|
57
|
+
| 1 | 标题 `<h1>加入会议</h1>` | 32px |
|
|
58
|
+
| 2 | 输入框:用户 ID | 16px |
|
|
59
|
+
| 3 | 输入框:会议 ID(placeholder: "输入会议 ID(创建时可留空)") | 16px |
|
|
60
|
+
| 4 | 输入框:SDKAppID | 16px |
|
|
61
|
+
| 5 | 输入框:UserSig | 16px |
|
|
62
|
+
| 6 | 凭证说明区(见下方规范) | 24px |
|
|
63
|
+
| 7 | 主按钮「创建并加入」 | 24px |
|
|
64
|
+
| 8 | 分割提示行:1px 横线 + 居中「或」 | 16px |
|
|
65
|
+
| 9 | 次级按钮「加入已有会议」(outline 样式) | — |
|
|
66
|
+
|
|
67
|
+
### 3.1 凭证说明区规范
|
|
68
|
+
|
|
69
|
+
在 SDKAppID 和 UserSig 输入框下方,以信息提示卡片形式展示(非折叠、非 tooltip):
|
|
70
|
+
|
|
71
|
+
- 容器:背景 `#F0F6FF`,圆角 8px,内边距 12px 16px
|
|
72
|
+
- 图标:左侧 ℹ️ 信息图标,颜色 `#0D6BDE`
|
|
73
|
+
- 文字:12px,颜色 `#444`,行高 1.6
|
|
74
|
+
|
|
75
|
+
内容(固定文案,不可省略):
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
SDKAppID 和 UserSig 可从控制台获取:
|
|
79
|
+
• 国际站:https://console.trtc.io
|
|
80
|
+
• 国内站:https://console.cloud.tencent.com
|
|
81
|
+
|
|
82
|
+
⚠️ 测试 UserSig 约 24 小时后失效,生产环境请由服务端签发。
|
|
83
|
+
「服务端签发」链接指向:https://trtc.io/document/34385
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
链接使用主色 `#0D6BDE`,hover 加下划线,`target="_blank"`。
|
|
87
|
+
|
|
88
|
+
### 3.2 输入框要求
|
|
89
|
+
|
|
90
|
+
- 四个输入框(用户 ID、会议 ID、SDKAppID、UserSig)均为**平铺展示**,不使用折叠/展开/高级设置等隐藏形式。
|
|
91
|
+
- 若通过 MCP 获取到 SDKAppID 和 UserSig,可预填值但仍保持输入框可见可编辑。
|
|
92
|
+
- UserSig 输入框使用 `type="password"` 遮罩显示。
|
|
93
|
+
|
|
94
|
+
约束要点:
|
|
95
|
+
- 卡片内每个表单元素**宽度 100%**(撑满卡片内边距宽度)。
|
|
96
|
+
- 单卡片最多容纳 1 个主按钮,避免多个 CTA 平级。
|
|
97
|
+
- 文字按钮一律使用与主按钮相同色相的链接色,不带边框、不占块宽。
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 4. 表单元素约束
|
|
102
|
+
|
|
103
|
+
### 4.1 输入框 Input
|
|
104
|
+
|
|
105
|
+
| 属性 | 取值 |
|
|
106
|
+
|---|---|
|
|
107
|
+
| 宽度 | 100% |
|
|
108
|
+
| 高度 | 48px |
|
|
109
|
+
| 内边距 | 上 18px / 下 0 / 左右 12px(为浮动 label 预留上边距) |
|
|
110
|
+
| 圆角 | 12px |
|
|
111
|
+
| 边框 | 1px solid,默认色 `#C1C6CE`;聚焦时切换为主色并加 `0 0 0 3px` 半透明外发光 |
|
|
112
|
+
| 占位 / Label | 浮动 label 模式:默认居中,聚焦或有值时上移并缩小到 12px |
|
|
113
|
+
| 字号 | 16px / 行高 1.5 / 常规字重 |
|
|
114
|
+
| 文字颜色 | 主文本 `#222325`;占位 `#A0A6AE` |
|
|
115
|
+
| 错误态 | 边框换为错误色,下方 4px 间距出现 12px 错误说明 |
|
|
116
|
+
| 禁用态 | 背景 `#F4F5F7`,文字 `#A0A6AE` |
|
|
117
|
+
|
|
118
|
+
### 4.2 主按钮(确认 / 登录)—— 沿用 Zoom 实测值,不改
|
|
119
|
+
|
|
120
|
+
| 属性 | 取值 |
|
|
121
|
+
|---|---|
|
|
122
|
+
| 宽度 | 100% |
|
|
123
|
+
| 高度 | **40px** |
|
|
124
|
+
| 内边距 | 6px 16px |
|
|
125
|
+
| 背景色 | **`#0D6BDE`** |
|
|
126
|
+
| 文字颜色 | `#FFFFFF` |
|
|
127
|
+
| 字号 | **14px** |
|
|
128
|
+
| 字重 | **500** |
|
|
129
|
+
| 圆角 | 12px |
|
|
130
|
+
| 边框 | 无 |
|
|
131
|
+
| Hover | 背景变深至 `#0A58BD`,可叠加阴影 `0 4px 12px rgba(13,107,222,.18)` |
|
|
132
|
+
| Active | 背景 `#084CA3` |
|
|
133
|
+
| Disabled | 背景 `#A8C7F0`,文字白色 70%,不可点击 |
|
|
134
|
+
| Loading | 文字替换为 16px 白色 spinner,按钮保持点亮 |
|
|
135
|
+
|
|
136
|
+
### 4.3 辅助文字按钮 / 链接
|
|
137
|
+
|
|
138
|
+
| 属性 | 取值 |
|
|
139
|
+
|---|---|
|
|
140
|
+
| 字号 | 14px / 字重 500 |
|
|
141
|
+
| 颜色 | 主色 `#0D6BDE`(与主按钮同色相) |
|
|
142
|
+
| 高度 | 行高自适应,不占块宽 |
|
|
143
|
+
| Hover | 加下划线,颜色不变 |
|
|
144
|
+
| 间距 | 与上方元素 24px |
|
|
145
|
+
|
|
146
|
+
### 4.4 微文字(法律 / 帮助 / 提示)
|
|
147
|
+
|
|
148
|
+
| 属性 | 取值 |
|
|
149
|
+
|---|---|
|
|
150
|
+
| 字号 | 12px / 行高 1.4 |
|
|
151
|
+
| 颜色 | `#686F79` |
|
|
152
|
+
| 链接色 | 主色 `#0D6BDE`,hover 加下划线 |
|
|
153
|
+
| 间距 | 多链接之间 16px |
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 5. 字体约束(全局)
|
|
158
|
+
|
|
159
|
+
| Token | 值 |
|
|
160
|
+
|---|---|
|
|
161
|
+
| 字体栈 | `system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", "Hiragino Sans GB", sans-serif` |
|
|
162
|
+
| 标题 H1 | **32px / 行高 1.25 / 字重 500** |
|
|
163
|
+
| 正文 / 输入 | 16px / 行高 1.5 / 字重 400 |
|
|
164
|
+
| 按钮 | **14px / 字重 500**(与主按钮一致) |
|
|
165
|
+
| 辅助说明 | 12px / 行高 1.4 / 字重 400 |
|
|
166
|
+
| 字间距 | 中文 0;英文 0.2px |
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## 6. 间距与圆角
|
|
171
|
+
|
|
172
|
+
### 6.1 间距规则(8px 网格)
|
|
173
|
+
|
|
174
|
+
`4 / 8 / 12 / 16 / 24 / 32 / 40 / 56 / 64`
|
|
175
|
+
|
|
176
|
+
关键纵向节奏:
|
|
177
|
+
- 标题 → 表单:32px
|
|
178
|
+
- 表单元素之间:16px
|
|
179
|
+
- 表单 → 主按钮:16px
|
|
180
|
+
- 主按钮 → 辅助操作:24px
|
|
181
|
+
- 区块之间(含分割线):24px
|
|
182
|
+
|
|
183
|
+
### 6.2 圆角规则
|
|
184
|
+
|
|
185
|
+
| Token | 值 | 用途 |
|
|
186
|
+
|---|---|---|
|
|
187
|
+
| `--radius-md` | 12px | input、主按钮、所有可点击块 |
|
|
188
|
+
| `--radius-lg` | 16px | 登录卡片本身 |
|
|
189
|
+
| `--radius-sm` | 8px | 小标签、提示条 |
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## 7. 状态与反馈布局约束
|
|
194
|
+
|
|
195
|
+
| 场景 | 布局处理 |
|
|
196
|
+
|---|---|
|
|
197
|
+
| 字段校验失败 | 在对应 input 下方 4px 间距,左对齐显示 12px 错误说明,不挤占按钮位置 |
|
|
198
|
+
| 全局错误(网络、账号不存在) | 顶部 toast:高度 48px,距窗口顶部 24px,水平居中,最大宽 480px |
|
|
199
|
+
| 多次失败需要图形验证 | 在主按钮上方 16px 处插入验证控件,整体高度增加,卡片可向上扩展,但仍保持垂直居中 |
|
|
200
|
+
| 加载中 | 主按钮内显示 spinner;卡片其余区域仍可读,禁用所有可交互项 |
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## 8. 无障碍布局要求
|
|
205
|
+
|
|
206
|
+
- 标题 `<h1>` 唯一存在,作为页面主标题。
|
|
207
|
+
- 所有可聚焦元素必须有 2px 主色 focus ring;禁止使用 `outline:none`。
|
|
208
|
+
- Tab 顺序:顶栏(左→右)→ 卡片(标题忽略)→ 输入框 → 主按钮 → 辅助文字按钮 → 底栏。
|
|
209
|
+
- 触控/点击目标最小 40 × 40px(主按钮、辅助按钮均满足)。
|
|
210
|
+
- 文字与背景对比度 ≥ 4.5:1(主按钮白字 on `#0D6BDE` ≈ 5.0:1 ✅)。
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 9. PC 桌面端附加约束
|
|
215
|
+
|
|
216
|
+
在以上 Web 通用规范基础上,桌面端(Electron / 原生壳)需额外满足:
|
|
217
|
+
|
|
218
|
+
1. **自绘标题栏**:左上预留 32px 拖动区;登录页隐藏「最大化」按钮,避免空白被拉伸。
|
|
219
|
+
2. **DPI 自适应**:所有像素单位以 `rem` 或 `devicePixelRatio` 缩放,至少支持 100% / 125% / 150% / 200% 四档,元素布局不破。
|
|
220
|
+
3. **离线提示**:检测无网络时,顶栏被替换为 24px 红色提示条,内容下移;卡片仍保持垂直居中(基于剩余可视区)。
|
|
221
|
+
4. **保持登录**:在主按钮上方插入 16px 间距 + checkbox「在此设备上保持登录」,checkbox 高度 16px,文字 14px,不破坏现有间距节奏。
|
|
222
|
+
5. **版本号**:底栏左侧 12px 灰色文字 `v X.Y.Z`,不参与居中对齐。
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## 附录:核心数值速查
|
|
227
|
+
|
|
228
|
+
| 类别 | 取值 |
|
|
229
|
+
|---|---|
|
|
230
|
+
| 卡片宽度 | 400px |
|
|
231
|
+
| 卡片内边距 | 40px / 32px |
|
|
232
|
+
| 卡片圆角 | 16px |
|
|
233
|
+
| input 高度 | 48px |
|
|
234
|
+
| input / 按钮 圆角 | 12px |
|
|
235
|
+
| 主按钮高度 | 40px |
|
|
236
|
+
| 主按钮背景 | `#0D6BDE` |
|
|
237
|
+
| 主按钮字号 | 14px / 500 |
|
|
238
|
+
| H1 字号 | 32px / 500 |
|
|
239
|
+
| 正文字号 | 16px |
|
|
240
|
+
| 微文字字号 | 12px |
|
|
241
|
+
| 主色 | `#0D6BDE` |
|
|
242
|
+
| 主文本 | `#222325` |
|
|
243
|
+
| 次文本 | `#686F79` |
|
|
244
|
+
| 边框默认 | `#C1C6CE` |
|
|
245
|
+
| 字体栈 | `system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", "Hiragino Sans GB", sans-serif` |
|
|
246
|
+
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: conference/participant-list
|
|
3
|
+
name: 参会人列表与状态
|
|
4
|
+
product: conference
|
|
5
|
+
platform: web
|
|
6
|
+
tags: [participant, list, state, speakingUsers, pendingParticipantList]
|
|
7
|
+
platforms: [web]
|
|
8
|
+
related: [conference/participant-management, conference/video-layout, conference/room-lifecycle, conference/network-quality]
|
|
9
|
+
api_docs:
|
|
10
|
+
- title: 成员管理
|
|
11
|
+
url: https://cloud.tencent.com/document/product/647/126927
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# 参会人列表与状态
|
|
15
|
+
|
|
16
|
+
## 功能说明
|
|
17
|
+
|
|
18
|
+
参会人列表与状态负责会议内“谁在房间内、每个人当前是什么状态、这些状态如何被展示”的统一数据基础,覆盖在线成员、待入会成员、角色、音视频设备状态、屏幕共享、发言态、网络质量、禁言态以及业务扩展字段的展示与同步。布局、会控、聊天、网络诊断等能力都可以直接基于这份成员数据组织自己的界面和状态展示。
|
|
19
|
+
|
|
20
|
+
在产品层,成员面板既要满足基础成员信息展示,也可能承载更强的业务定制诉求;当业务需要自定义成员界面、排序规则、业务身份展示或扩展操作菜单时,应围绕同一份成员状态数据组织列表、分组、排序和状态展示,避免不同模块各自维护一套成员信息。
|
|
21
|
+
|
|
22
|
+
## 核心概念
|
|
23
|
+
|
|
24
|
+
### 角色与关注点
|
|
25
|
+
|
|
26
|
+
| 角色 | 关键关注点 | 说明 |
|
|
27
|
+
|------|------------|------|
|
|
28
|
+
| 当前参会人 | 查看成员状态 | 关注谁在会里、谁是房主 / 管理员、谁正在发言、谁正在共享或处于弱网 |
|
|
29
|
+
| 待入会成员 | 展示入会前状态 | 关注预约、呼叫中、未入会等状态;可展示在独立分区,但不参与在线成员统计、布局和会控判断 |
|
|
30
|
+
| 房主 / 管理员 | 查看成员情况 | 可在列表里看成员当前状态;真正的设管理员、踢人、转移房主等操作不在当前 slice 内完成 |
|
|
31
|
+
| 布局与挂件模块 | 消费成员读模型 | 使用成员状态驱动画面编排、角标、共享标识、发言高亮与状态挂件 |
|
|
32
|
+
| 业务扩展模块 | 投影业务信息 | 可把职务、业务身份、购买状态、标签等信息同步进参会人展示模型 |
|
|
33
|
+
|
|
34
|
+
> **边界说明:** `participant-list` 负责成员信息展示、状态同步与读模型消费,不负责定义或承接操作码;如果需要踢人、设管理员、转移房主、禁麦、禁聊等治理动作,应交给 `participant-management`。
|
|
35
|
+
|
|
36
|
+
### 事件流
|
|
37
|
+
|
|
38
|
+
| 阶段 | 参与方 | 关键动作 |
|
|
39
|
+
|------|--------|----------|
|
|
40
|
+
| 初始入会 | 客户端 | 建立房间后首次拉取在线成员列表,并初始化本地成员视角 |
|
|
41
|
+
| 待入会展示 | 客户端 | 展示预约、呼叫中或尚未进房的成员,但不把它们当作在线成员 |
|
|
42
|
+
| 状态同步 | 房间状态 | 成员加入、离开、角色变化、开关设备、屏幕共享、发言、禁言或网络质量变化时刷新读模型 |
|
|
43
|
+
| 列表扩展 | 客户端 | 大房间场景下按游标继续分页拉取更多成员,并做好去重与合并 |
|
|
44
|
+
| 业务投影 | 业务层 | 将名片、自定义元数据等业务字段映射到成员展示字段 |
|
|
45
|
+
| 退出清理 | 客户端 | 离房或房间结束后清理成员列表、待入会列表与相关派生状态 |
|
|
46
|
+
|
|
47
|
+
### 状态与数据
|
|
48
|
+
|
|
49
|
+
| 数据 / 状态 | 说明 |
|
|
50
|
+
|-------------|------|
|
|
51
|
+
| `participantList` | 当前已加载的在线成员列表,是判断“谁在房间内”的主来源 |
|
|
52
|
+
| `participantListCursor` | 分页继续拉取在线成员时使用的游标;非空表示仍可能有更多成员 |
|
|
53
|
+
| `pendingParticipantList` | 待入会、呼叫中、预约等尚未进房的成员集合,不等同于在线成员列表 |
|
|
54
|
+
| `localParticipant` | 当前用户在会议中的成员视角数据,可用于展示“我”和判断本地角色 |
|
|
55
|
+
| `speakingUsers` | 当前正在发言的成员集合及音量信息,用于发言高亮、音量波纹或闭麦说话提醒 |
|
|
56
|
+
| `networkQualities` | 成员网络质量信息,用于展示弱网标识或辅助管理员诊断 |
|
|
57
|
+
| `participantListWithVideo` | 当前开启摄像头的成员集合,可用于视频成员筛选和宫格排序 |
|
|
58
|
+
| `participantWithScreen` | 当前正在屏幕共享的成员,可用于共享中标识、共享画面置顶和布局切换 |
|
|
59
|
+
| `participant.role` / `localParticipant.role` | 成员角色状态,是判断房主、管理员、普通成员的推荐来源 |
|
|
60
|
+
| `participant.isMessageDisabled` | 成员是否被单独禁言,可用于展示禁言状态和聊天入口可用态 |
|
|
61
|
+
| `participant.metaData` / `nameCard` | 业务自定义数据和成员名片,可用于展示职务、业务身份、等级、购买状态等扩展信息 |
|
|
62
|
+
|
|
63
|
+
### 成员展示字段
|
|
64
|
+
|
|
65
|
+
| 字段 | 说明 | 展示建议 |
|
|
66
|
+
|------|------|----------|
|
|
67
|
+
| `userId` | 用户 ID | 作为列表 key 和成员定位标识;若后续进入治理链路,也可作为目标用户标识 |
|
|
68
|
+
| `userName` | 用户昵称 | 优先展示昵称;为空时可兜底展示 `userId` |
|
|
69
|
+
| `avatarUrl` | 头像地址 | 用于展示成员头像;在摄像头关闭时,也应作为视频挂件占位层的首选素材 |
|
|
70
|
+
| `role` | 成员角色 | 展示房主、管理员、普通成员等角色标签 |
|
|
71
|
+
| `roomStatus` | 成员在房间内状态 | 区分在房、呼叫中、预约等状态 |
|
|
72
|
+
| `microphoneStatus` | 麦克风状态 | 展示开麦、闭麦或被关闭状态 |
|
|
73
|
+
| `cameraStatus` | 摄像头状态 | 展示开摄像头、关摄像头或被关闭状态 |
|
|
74
|
+
| `screenShareStatus` | 屏幕分享状态 | 展示屏幕分享中标识 |
|
|
75
|
+
| `isMessageDisabled` | 消息禁用状态 | 展示禁言标识或禁用聊天入口 |
|
|
76
|
+
| `metaData` | 业务自定义数据 | 展示职务、部门、会员等级、购买状态等业务信息 |
|
|
77
|
+
|
|
78
|
+
### 成员排序建议
|
|
79
|
+
|
|
80
|
+
| 排序维度 | 推荐处理 |
|
|
81
|
+
|----------|----------|
|
|
82
|
+
| 本地用户 | 通常置顶,并展示“我”标识 |
|
|
83
|
+
| 房主和管理员 | 优先展示,便于用户识别管理者 |
|
|
84
|
+
| 屏幕共享成员 | 可置顶或展示“共享中”标识 |
|
|
85
|
+
| 正在发言成员 | 可短暂前置或高亮展示 |
|
|
86
|
+
| 开启摄像头成员 | 视频会议场景可优先展示 |
|
|
87
|
+
| 开启麦克风成员 | 可优先展示 |
|
|
88
|
+
| 普通成员 | 可按昵称、入会时间或业务字段排序 |
|
|
89
|
+
|
|
90
|
+
### 状态机
|
|
91
|
+
|
|
92
|
+
```text
|
|
93
|
+
empty
|
|
94
|
+
→ initial-loading
|
|
95
|
+
→ synced
|
|
96
|
+
→ paginating
|
|
97
|
+
→ synced
|
|
98
|
+
→ cleared
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## 前置条件
|
|
102
|
+
**通用依赖**:见 [login-auth 平台 slice](login-auth.md)。
|
|
103
|
+
|
|
104
|
+
**额外依赖**:
|
|
105
|
+
- 已安装 `tuikit-atomicx-vue3@latest`
|
|
106
|
+
|
|
107
|
+
**前置状态**:
|
|
108
|
+
- 已阅读 `conference/participant-list`,明确当前能力的产品边界。
|
|
109
|
+
- 已完成 `conference/login-auth`,确保当前页面具备稳定登录态。
|
|
110
|
+
- 已根据业务流程接入会议上下文;需要房间状态时,优先通过 `conference/room-lifecycle` 统一承接。
|
|
111
|
+
|
|
112
|
+
## 最佳实践
|
|
113
|
+
|
|
114
|
+
### ✅ ALWAYS
|
|
115
|
+
|
|
116
|
+
1. **把参会人列表当作会议读模型,而不是管理指令入口** —— 它负责展示和同步,不负责定义权限本身。
|
|
117
|
+
2. **在大房间场景中显式处理分页与游标** —— 首次拉取不应默认视为全量,首次最多可能只自动获取约 300 名成员,需要根据 `participantListCursor` 继续分页。
|
|
118
|
+
3. **区分在线成员和待入会成员** —— `participantList` 表示在线成员,`pendingParticipantList` 只适合展示“未入会”“呼叫中”“预约”等成员区。
|
|
119
|
+
4. **用真实角色字段判断房主和管理员** —— 通用会议中应优先使用 `participant.role` 或 `localParticipant.role`,不要依赖 `adminList`。
|
|
120
|
+
5. **把发言态、角色态、设备态、共享态和网络态同时投影到 UI** —— 成员列表、画面挂件、侧栏和诊断入口最好消费同一份成员状态来源。
|
|
121
|
+
6. **给成员展示信息准备稳定兜底字段** —— 昵称优先用 `nameCard` / `userName`,头像优先用 `avatarUrl`,缺失时至少要能回退到 `userId` 首字母,供成员列表和“关摄像头占位层”共用。
|
|
122
|
+
7. **把成员排序交给业务层明确生成** —— 按本地用户、房主/管理员、屏幕共享、发言、开摄像头和业务字段组合排序,避免不同模块顺序不一致。
|
|
123
|
+
8. **离房时清空成员列表及其派生状态** —— 防止下一场会议仍看到上一场会议的成员、发言态、共享态或弱网标识。
|
|
124
|
+
|
|
125
|
+
### ❌ NEVER
|
|
126
|
+
|
|
127
|
+
1. **不要直接根据显示文案推断权限** —— 房主、管理员等身份应来自真实成员状态,而不是列表上的文本。
|
|
128
|
+
2. **不要依赖 `adminList` 判断通用会议管理员身份** —— 通用会议不单独维护管理员列表,该状态通常为空数组。
|
|
129
|
+
3. **不要把 `pendingParticipantList` 当作在线成员列表** —— 待入会、呼叫中或预约成员不能直接参与在线成员统计、布局和会控判断。
|
|
130
|
+
4. **不要把成员列表的展示操作误当成权限修改成功** —— 真正的角色治理和踢人动作应回到 `participant-management`。
|
|
131
|
+
5. **不要忽略分页去重与离房清理** —— 否则很容易出现成员重复、幽灵成员或跨房间残留。
|
|
132
|
+
6. **不要使用旧版 `hasAudioStream` / `hasVideoStream` 字段判断设备状态** —— 当前 AtomicX `RoomParticipant` 类型没有这些字段。成员列表、远端画面挂件等成员读模型应读取 `participant.microphoneStatus`、`participant.cameraStatus`、`participant.screenShareStatus`;本地工具栏、会前预览和本地设备开关按钮应优先从 `useDeviceState().microphoneStatus` / `cameraStatus` / `screenStatus` 派生,避免本地设备状态与成员读模型短暂不同步。
|
|
133
|
+
|
|
134
|
+
## 代码示例
|
|
135
|
+
### 基础接入:拉取参会人列表并按游标分页
|
|
136
|
+
|
|
137
|
+
```ts
|
|
138
|
+
import { useRoomParticipantState } from 'tuikit-atomicx-vue3/room';
|
|
139
|
+
|
|
140
|
+
const { participantList, participantListCursor, getParticipantList, speakingUsers } = useRoomParticipantState();
|
|
141
|
+
|
|
142
|
+
await getParticipantList({ cursor: '' });
|
|
143
|
+
if (participantListCursor.value) {
|
|
144
|
+
await getParticipantList({ cursor: participantListCursor.value });
|
|
145
|
+
}
|
|
146
|
+
console.log(participantList.value, speakingUsers.value);
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## 调用时序
|
|
150
|
+
```
|
|
151
|
+
完成 login-auth 并进入会议
|
|
152
|
+
│
|
|
153
|
+
▼
|
|
154
|
+
调用 getParticipantList({ cursor: '' })
|
|
155
|
+
│
|
|
156
|
+
├─ 首次成功 → 渲染 participantList
|
|
157
|
+
├─ 存在下一页 → 使用 participantListCursor 继续拉取
|
|
158
|
+
└─ 失败 → 提示加载失败并允许重试
|
|
159
|
+
│
|
|
160
|
+
▼
|
|
161
|
+
结合 speakingUsers / metaData / 角色态更新列表 UI
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## 平台特有注意事项
|
|
165
|
+
### 1. 成员列表与管理动作应分层
|
|
166
|
+
成员列表负责展示“谁在会里、状态如何”;踢人、设管理员、转移房主等动作应继续交给 `conference/participant-management`。
|
|
167
|
+
|
|
168
|
+
### 2. 分页游标需要持续复用
|
|
169
|
+
当参会人数较多时,列表不应假设一次性全量返回;应根据 `participantListCursor` 持续分页拉取。
|
|
170
|
+
|
|
171
|
+
### 3. 业务扩展字段建议走 `metaData`
|
|
172
|
+
如果要展示身份标签、业务等级或组织信息,建议通过 `metaData` 同步,而不是在 UI 层拼接一套旁路数据源。
|
|
173
|
+
|
|
174
|
+
## 代码生成约束
|
|
175
|
+
### 编译必要条件
|
|
176
|
+
- **通用条件**:见 [login-auth 平台 slice](login-auth.md)。
|
|
177
|
+
- **额外导入**:至少需要导入 `useRoomParticipantState`。
|
|
178
|
+
- **运行前提**:已进入会议,房间上下文可用。
|
|
179
|
+
|
|
180
|
+
### 生成规则
|
|
181
|
+
#### MUST(生成时必须包含)
|
|
182
|
+
|
|
183
|
+
1. **通过 `useRoomParticipantState` 承接成员列表数据** — 可以保持列表、发言态与角色信息同源。
|
|
184
|
+
**Verify**: 检查是否存在 `useRoomParticipantState()`。
|
|
185
|
+
2. **支持首屏加载与游标续拉** — 成员列表在多人场景下不能只写死首屏一次调用。
|
|
186
|
+
**Verify**: 检查是否存在 `getParticipantList({ cursor })` 与 `participantListCursor` 逻辑。
|
|
187
|
+
|
|
188
|
+
#### MUST NOT(生成时绝不能出现)
|
|
189
|
+
|
|
190
|
+
1. **不要把成员列表组件直接耦合管理操作权限** — 会让展示层和治理层边界混乱。
|
|
191
|
+
**Verify**: 检查踢人/转移房主逻辑是否放在独立治理能力中。
|
|
192
|
+
2. **不要忽略分页游标** — 在大房间场景会导致成员显示不完整。
|
|
193
|
+
**Verify**: 检查是否读取 `participantListCursor` 或提供加载更多逻辑。
|
|
194
|
+
|
|
195
|
+
### 集成检查点
|
|
196
|
+
- 当前 slice 常与 `conference/participant-management`、`conference/video-layout` 联动。
|
|
197
|
+
- 集成侵入性较低,通常新增一个侧栏、抽屉或列表区域即可。
|
|
198
|
+
- 若业务已有企业通讯录或组织树,需要明确“在线成员列表”和“组织架构列表”的来源边界。
|
|
199
|
+
|
|
200
|
+
## 验证矩阵
|
|
201
|
+
| 层级 | 检查项 | 验证手段 | 预期结果 |
|
|
202
|
+
|------|--------|----------|---------|
|
|
203
|
+
| 1. 编译级 | 已导入 `useRoomParticipantState` | 检查 `import` 语句 | 成员状态 Hook 可解析 |
|
|
204
|
+
| 2. 静态规则级 | 存在首屏加载与分页逻辑 | 搜索 `getParticipantList` 与 `participantListCursor` | 形成分页加载链路 |
|
|
205
|
+
| 3. 运行时级 | 成员列表能正常展示与刷新 | 进房后打开成员列表 | 可看到参会人和状态信息 |
|
|
206
|
+
| 4. 业务行为级 | 人数增多时列表仍完整 | 多人会议中滚动加载更多 | 列表可持续补齐更多成员 |
|
|
207
|
+
|
|
208
|
+
## 排障指南
|
|
209
|
+
|
|
210
|
+
### 常见问题
|
|
211
|
+
|
|
212
|
+
| 问题 | 表现 | 处理建议 |
|
|
213
|
+
|------|------|----------|
|
|
214
|
+
| 成员列表不完整 | 房间里明明有成员,但列表只显示部分数据 | 检查首次拉取后是否继续基于 `participantListCursor` 分页获取更多成员 |
|
|
215
|
+
| 首次拉取后仍有游标 | 调用首屏加载后 `participantListCursor` 仍非空 | 这是大房间正常现象,不要把首次拉取当作全量,按需继续加载 |
|
|
216
|
+
| 管理员判断错误 | 通用会议中 `adminList` 为空,导致管理员入口不显示 | 改用 `participant.role` 或 `localParticipant.role` 判断角色 |
|
|
217
|
+
| 待入会成员被当作在线成员 | 呼叫中或预约成员进入在线人数、布局或会控判断 | 检查是否误用 `pendingParticipantList`,在线成员应以 `participantList` 为准 |
|
|
218
|
+
| 发言态显示异常 | 成员正在发言,但列表角标或布局挂件没有变化 | 检查 `speakingUsers` 是否与成员读模型联动,而不是独立维护另一份状态 |
|
|
219
|
+
| 网络或共享状态异常 | 弱网标识、共享中标识和实际状态不一致 | 检查 `networkQualities`、`participantWithScreen`、`participantListWithVideo` 是否与成员列表使用同一份状态源 |
|
|
220
|
+
| 离房后仍看到旧成员 | 切换到新房间后,列表残留上一场会议成员 | 检查离房和房间结束时是否统一清空成员列表与派生缓存 |
|
|
221
|
+
|
|
222
|
+
### 排障流程
|
|
223
|
+
|
|
224
|
+
```text
|
|
225
|
+
发现 参会人列表与状态 相关问题
|
|
226
|
+
├── 第 1 步:确认问题属于成员展示读模型,而不是权限治理或会控动作
|
|
227
|
+
├── 第 2 步:检查首屏加载、游标分页、成员去重和待入会成员分区是否完整
|
|
228
|
+
├── 第 3 步:确认 speakingUsers、角色态、设备态、共享态、网络态是否从同一份成员状态源派生
|
|
229
|
+
├── 第 4 步:检查角色判断是否使用 participant.role / localParticipant.role,而不是 adminList 或展示文案
|
|
230
|
+
└── 第 5 步:若仍异常,再回查 participant-management / video-layout / room-lifecycle / network-quality 的衔接是否正确
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## 关联知识
|
|
234
|
+
|
|
235
|
+
- **[conference/participant-management](participant-management.md)** —— 成员角色治理、踢人和房主转移等写操作入口。
|
|
236
|
+
- **[conference/video-layout](video-layout.md)** —— 成员状态会驱动画面布局与单元挂件展示。
|
|
237
|
+
- **[conference/room-lifecycle](room-lifecycle.md)** —— 成员列表随入房、离房和房间结束而建立或清空。
|
|
238
|
+
- **[conference/network-quality](network-quality.md)** —— 成员网络质量可投影到成员列表和诊断入口。
|