diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..dffa32c
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,35 @@
+{
+ "workbench.colorCustomizations": {
+ "activityBar.background": "#1D3137",
+ "titleBar.activeBackground": "#28444C",
+ "titleBar.activeForeground": "#F8FAFB",
+ "terminal.background": "#231F20",
+ "terminal.foreground": "#D9D8D8",
+ "terminalCursor.background": "#D9D8D8",
+ "terminalCursor.foreground": "#D9D8D8",
+ "terminal.ansiBlack": "#231F20",
+ "terminal.ansiBlue": "#009DDC",
+ "terminal.ansiBrightBlack": "#737171",
+ "terminal.ansiBrightBlue": "#009DDC",
+ "terminal.ansiBrightCyan": "#85CEBC",
+ "terminal.ansiBrightGreen": "#00853E",
+ "terminal.ansiBrightMagenta": "#98005D",
+ "terminal.ansiBrightRed": "#EE2E24",
+ "terminal.ansiBrightWhite": "#FFFFFF",
+ "terminal.ansiBrightYellow": "#FFD204",
+ "terminal.ansiCyan": "#85CEBC",
+ "terminal.ansiGreen": "#00853E",
+ "terminal.ansiMagenta": "#98005D",
+ "terminal.ansiRed": "#EE2E24",
+ "terminal.ansiWhite": "#D9D8D8",
+ "terminal.ansiYellow": "#FFD204",
+ "titleBar.inactiveBackground": "#1D3136",
+ "titleBar.inactiveForeground": "#F7FAFB",
+ "statusBar.background": "#1D3136",
+ "statusBar.foreground": "#F7FAFB",
+ "statusBar.debuggingBackground": "#1D3136",
+ "statusBar.debuggingForeground": "#F7FAFB",
+ "statusBar.noFolderBackground": "#1D3136",
+ "statusBar.noFolderForeground": "#F7FAFB"
+ }
+}
\ No newline at end of file
diff --git a/README.md b/README.md
index 0d191ae..31d834a 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,107 @@
-# TUIKit_Vue3
+# Tencent Cloud RTC TUIKit for Vue 3
+
+[English](./README.md) | [简体中文](./README_ZH.md)
+
+A **core Vue 3 component library** for Tencent Cloud RTC TUIKit, designed for three major real-time scenarios: **Chat** (instant messaging), **Live** (interactive live streaming), and **Room** (multi-user audio/video rooms).
+
+It provides production-ready UI components together with reactive state modules, so you can either use components independently or compose them into complete scenario-based experiences.
+
+## Key Features
+
+| Feature | Description |
+| ------ | ------ |
+| **Scenario-oriented UI components** | Covers Chat, Live, and Room scenarios. Components can be used individually or freely composed. |
+| **Reactive state management** | Each component is backed by fine-grained reactive data and action methods. |
+| **Scenario-based exports** | Import only what you need through `./chat`, `./live`, and `./room` sub-entries to reduce bundle size. |
+| **Internationalization** | Built-in multi-language support based on i18next. |
+| **Type safety** | Ships with complete TypeScript type definitions. |
+
+## Component Structure (`src/components/`)
+
+### Chat
+
+| Component | Description |
+| ------ | ------ |
+| `ConversationList/` | Conversation list with conversation preview, search, and actions. |
+| `MessageList/` | Message list with message rendering and custom message support. |
+| `MessageInput/` | Message input box with emoji, image, file, video, and audio/video call pickers. |
+| `ChatSetting/` | Conversation settings panel for C2C and group chats. |
+| `ContactList/` | Contact list and contact detail modules. |
+| `Search/` | Global search and message search. |
+
+### Live
+
+| Component | Description |
+| ------ | ------ |
+| `LiveView/` | Live streaming view for pushing and playing streams. |
+| `LiveList/` | Live room list. |
+| `LiveScenePanel/` | Aggregated panel for live-scene feature entry points. |
+| `BarrageInput/` | Barrage input. |
+| `BarrageList/` | Barrage message list. |
+| `LiveGift/` | Gift panel and gift animation effects. |
+| `LiveAudienceList/` | Audience list. |
+| `LiveMonitorView/` | Live monitoring view. |
+| `CoGuestPanel/` | Co-guest panel. |
+| `CoHostPanel/` | Host PK panel. |
+| `StreamMixer/` | Stream mixing control. |
+
+### Room
+
+| Component | Description |
+| ------ | ------ |
+| `RoomView/` | Main audio/video room view. |
+| `RoomParticipantList/` | Participant list. |
+| `RoomParticipantView/` | Participant video view. |
+| `ScheduleRoomPanel/` | Scheduled meeting panel. |
+| `VirtualBackgroundPanel/` | Virtual background settings. |
+| `FreeBeautyPanel/` | Beauty effect settings panel. |
+| `ASRTools/` | Speech recognition tools, including subtitles and real-time transcription. |
+
+### Common
+
+| Component | Description |
+| ------ | ------ |
+| `Avatar/` | Avatar component. |
+| `UserPicker/` | User picker. |
+
+## State Management (`src/states/`)
+
+Each business domain maps to an independent state module. Every module exposes reactive data and action methods through `useXxxState()` hooks.
+
+- **Common**: `LoginState`
+- **Chat**: `ConversationListState`, `MessageListState`, `MessageInputState`, `ContactListState`, `SearchState`, `C2CSettingState`, `GroupSettingState`, `MessageActionState`
+- **Live**: `LiveListState`, `LivePlayerState`, `LiveSeatState`, `LiveGiftState`, `BarrageState`, `BattleState`, `CoGuestState`, `CoHostState`, `LiveAudienceState`, `LiveMonitorState`, `VideoMixerState`
+- **Room**: `RoomState`, `RoomParticipantState`, `DeviceState`, `AITranscriberState`, `FreeBeautyState`, `VirtualBackgroundState`
+
+## Export Strategy (`src/subEntry/`)
+
+```text
+subEntry/
+├── common/ # shared exports: LoginState, Avatar, UserPicker
+├── chat/ # chat exports: conversation, message, contact, search components and states
+├── live/ # live exports: live view, barrage, gifts, co-guest, and related states
+└── room/ # room exports: room view, participants, virtual background, and related states
+```
+
+The upper-level packages can selectively re-export modules by scenario. For example, `@tencentcloud/chat-uikit-vue3` only re-exports `common` and `chat`.
+
+## Package Entry Overview
+
+The core package in this repository is `tuikit-atomicx-vue3`, which exposes the following entry points:
+
+- `tuikit-atomicx-vue3`
+- `tuikit-atomicx-vue3/chat`
+- `tuikit-atomicx-vue3/live`
+- `tuikit-atomicx-vue3/room`
+
+This makes it easier to build scenario-specific applications while keeping imports explicit and tree-shakable.
+
+## Demo Projects (`demos/`)
+
+The `demos/` directory contains runnable sample applications and scenario showcases built on top of this component library.
+
+| Demo | Description |
+| ------ | ------ |
+| `rtcube-vite-vue3/` | A comprehensive RTC experience demo that combines multiple Tencent Cloud RTC scenarios and products, including Chat, Call, and other experience-oriented pages. It is the best starting point if you want to see how different capabilities work together in one app. |
+| `live-monitor-vue3/` | A real-time live stream monitoring demo for viewing and managing multiple live rooms concurrently. It includes both a Vue 3 frontend and a lightweight `server/` backend for monitoring-related workflows. |
+| `industry-showcase/` | A directory for vertical-industry showcases. It currently includes a medical consultation demo and shows how Chat UIKit can be customized with industry-specific UI, cards, quick replies, patient information panels, and call integration. |
diff --git a/README_ZH.md b/README_ZH.md
new file mode 100644
index 0000000..e51728f
--- /dev/null
+++ b/README_ZH.md
@@ -0,0 +1,93 @@
+# UIKit Component Vue3
+
+腾讯云 RTC UIKit 的 **Vue 3 核心组件库**,为 Chat(即时通信)、Live(互动直播)、Room(多人音视频房间)三大场景提供开箱即用的 UI 组件与响应式状态管理。
+
+## 核心能力
+
+| 能力 | 说明 |
+|------|------|
+| **场景化 UI 组件** | 覆盖 Chat、Live、Room 三大场景,每个组件可独立使用或自由组合 |
+| **响应式状态管理** | 每个组件提供细粒度的响应式数据与操作方法 |
+| **按场景导出** | 通过 `subEntry/chat`、`subEntry/live`、`subEntry/room` 按需引入,减小打包体积 |
+| **国际化** | 内置 i18next 多语言支持 |
+| **类型安全** | 完整的 TypeScript 类型定义 |
+
+## 组件目录结构 (`src/components/`)
+
+### Chat 场景
+
+| 组件 | 说明 |
+|------|------|
+| `ConversationList/` | 会话列表,包含会话预览、会话搜索、会话操作等子组件 |
+| `MessageList/` | 消息列表,包含消息渲染、自定义消息等子组件 |
+| `MessageInput/` | 消息输入框,包含表情、图片、文件、视频、音视频通话等 Picker |
+| `ChatSetting/` | 会话设置面板(C2C / 群组设置) |
+| `ContactList/` | 联系人列表与联系人详情 |
+| `Search/` | 全局搜索与消息搜索 |
+
+### Live 场景
+
+| 组件 | 说明 |
+|------|------|
+| `LiveView/` | 直播视图(推流 / 拉流) |
+| `LiveList/` | 直播间列表 |
+| `LiveScenePanel/` | 直播场景面板(功能入口聚合) |
+| `BarrageInput/` | 弹幕输入 |
+| `BarrageList/` | 弹幕消息列表 |
+| `LiveGift/` | 礼物面板与礼物动效 |
+| `LiveAudienceList/` | 观众列表 |
+| `LiveMonitorView/` | 直播监控视图 |
+| `CoGuestPanel/` | 连麦面板 |
+| `CoHostPanel/` | 主播 PK 面板 |
+| `StreamMixer/` | 混流控制 |
+
+### Room 场景
+
+| 组件 | 说明 |
+|------|------|
+| `RoomView/` | 音视频房间主视图 |
+| `RoomParticipantList/` | 参会人列表 |
+| `RoomParticipantView/` | 参会人视频视图 |
+| `ScheduleRoomPanel/` | 预约会议面板 |
+| `VirtualBackgroundPanel/` | 虚拟背景设置 |
+| `FreeBeautyPanel/` | 美颜设置面板 |
+| `ASRTools/` | 语音识别工具(字幕、实时消息转写) |
+
+### 通用组件
+
+| 组件 | 说明 |
+|------|------|
+| `Avatar/` | 头像组件 |
+| `UserPicker/` | 用户选择器 |
+
+## 状态管理 (`src/states/`)
+
+每个业务领域对应一个独立的 State 模块,通过 `useXxxState()` Hook 暴露响应式数据和操作方法:
+
+
+- **Common**: `LoginState`
+- **Chat**: `ConversationListState`、`MessageListState`、`MessageInputState`、`ContactListState`、`SearchState`、`C2CSettingState`、`GroupSettingState`、`MessageActionState`
+- **Live**: `LiveListState`、`LivePlayerState`、`LiveSeatState`、`LiveGiftState`、`BarrageState`、`BattleState`、`CoGuestState`、`CoHostState`、`LiveAudienceState`、`LiveMonitorState`、`VideoMixerState`
+- **Room**: `RoomState`、`RoomParticipantState`、`DeviceState`、`AITranscriberState`、`FreeBeautyState`、`VirtualBackgroundState`
+
+## 导出机制 (`src/subEntry/`)
+
+```
+subEntry/
+├── common/ # 通用导出:LoginState、Avatar、UserPicker
+├── chat/ # Chat 场景导出:会话、消息、联系人、搜索等组件和状态
+├── live/ # Live 场景导出:直播视图、弹幕、礼物、连麦等组件和状态
+└── room/ # Room 场景导出:房间视图、参会人、虚拟背景等组件和状态
+```
+
+上层包按场景选择性地 re-export,例如 `@tencentcloud/chat-uikit-vue3` 只导出 `common` + `chat`。
+
+## Demo 目录 (`demos/`)
+
+`demos/` 目录包含基于该组件库构建的可运行示例工程和场景化展示项目。
+
+| Demo | 说明 |
+|------|------|
+| `rtcube-vite-vue3/` | 综合性的 RTC 体验 Demo,聚合了腾讯云 RTC 多种场景与产品能力,包括 Chat、Call 以及其他体验型页面。适合作为理解整体接入方式的首个入口。 |
+| `live-monitor-vue3/` | 实时直播监播 Demo,用于并发查看和管理多个直播间。项目同时包含 Vue 3 前端和轻量级 `server/` 后端,适合参考监播类业务流程。 |
+| `industry-showcase/` | 行业化展示 Demo 目录,当前包含医疗问诊等垂直场景示例,演示如何基于 Chat UIKit 做行业定制,例如主题 UI、自定义卡片、快捷回复、患者信息面板和音视频通话集成。 |
diff --git a/demos/industry-showcase/chat-medical-vue3/README.md b/demos/industry-showcase/chat-medical-vue3/README.md
new file mode 100644
index 0000000..28df866
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/README.md
@@ -0,0 +1,64 @@
+# Medical Chat Showroom
+
+A standalone medical consultation chat demo built with [Tencent Cloud Chat UIKit](https://www.tencentcloud.com/document/product/1047).
+
+This project demonstrates how to customize Chat UIKit for the **medical consultation** vertical industry, featuring:
+
+- 🏥 Medical-themed UI (green primary color)
+- 📋 Medical record cards & prescription cards
+- 💬 Quick reply & rating pickers
+- 🩺 Patient info panel
+- 📞 Audio/Video call integration
+- 🔍 Conversation status filter (Pending / In Progress / Completed)
+
+## Quick Start
+
+### Prerequisites
+
+- Node.js >= 18
+- pnpm (recommended) or npm
+
+### 1. Install dependencies
+
+```bash
+pnpm install
+```
+
+### 2. Get credentials
+
+Go to [IM Console](https://console.cloud.tencent.com/im) to get:
+- **SDKAppID**
+- **UserID**
+- **UserSig** (generate from [UserSig Tool](https://console.cloud.tencent.com/im/tool-usersig))
+
+### 3. Run
+
+```bash
+pnpm dev
+```
+
+Open the browser, enter your credentials, and start chatting!
+
+## Project Structure
+
+```
+src/
+├── App.vue # Login/Chat state machine
+├── MedicalChat.vue # Main medical chat layout
+├── components/
+│ ├── Login.vue # Login form
+│ ├── SideTab/ # Side navigation (conversation/contact tabs)
+│ └── Medical/
+│ ├── cards/ # Custom message cards (record, prescription, rating)
+│ ├── pickers/ # Toolbar pickers (quick reply, prescription, etc.)
+│ ├── ConversationFilterBar.vue
+│ ├── MedicalChatSetting.vue
+│ ├── MedicalConversationPreview.vue
+│ ├── MedicalConversationTitle.vue
+│ ├── MedicalMessageRenderer.vue
+│ └── PatientInfoPanel.vue
+```
+
+## License
+
+MIT
diff --git a/demos/industry-showcase/chat-medical-vue3/index.html b/demos/industry-showcase/chat-medical-vue3/index.html
new file mode 100644
index 0000000..1dd02ff
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+ Medical Chat Showroom
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/package.json b/demos/industry-showcase/chat-medical-vue3/package.json
new file mode 100644
index 0000000..848e12e
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "showroom-chat-medical",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vue-tsc -b && vite build",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "vue": "^3.4.31",
+ "@tencentcloud/chat-uikit-vue3": "^5.5.0",
+ "@tencentcloud/uikit-base-component-vue3": "^1.4.0",
+ "@trtc/calls-uikit-vue": "^4.4.0",
+ "lucide-vue-next": "^1.0.0",
+ "tdesign-vue-next": "^1.18.0"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-vue": "^5.0.5",
+ "sass": "^1.77.8",
+ "typescript": "^5.2.2",
+ "vite": "^5.3.4",
+ "vue-tsc": "^2.0.24"
+ }
+}
diff --git a/demos/industry-showcase/chat-medical-vue3/src/App.vue b/demos/industry-showcase/chat-medical-vue3/src/App.vue
new file mode 100644
index 0000000..dd8a9cf
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/App.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/MedicalChat.vue b/demos/industry-showcase/chat-medical-vue3/src/MedicalChat.vue
new file mode 100644
index 0000000..3cd99c0
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/MedicalChat.vue
@@ -0,0 +1,280 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Login.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Login.vue
new file mode 100644
index 0000000..b23bd0a
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Login.vue
@@ -0,0 +1,252 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('medical.login.hint').split('<1>')[0] }}
+
+ IM Console
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/ConversationFilterBar.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/ConversationFilterBar.vue
new file mode 100644
index 0000000..c18c568
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/ConversationFilterBar.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/MedicalChatSetting.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/MedicalChatSetting.vue
new file mode 100644
index 0000000..7a0626a
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/MedicalChatSetting.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/MedicalConversationPreview.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/MedicalConversationPreview.vue
new file mode 100644
index 0000000..ee9ece0
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/MedicalConversationPreview.vue
@@ -0,0 +1,44 @@
+
+
+
+ emit('selectConversation', c)"
+ />
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/MedicalConversationTitle.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/MedicalConversationTitle.vue
new file mode 100644
index 0000000..c727812
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/MedicalConversationTitle.vue
@@ -0,0 +1,97 @@
+
+
+
+
+ {{ title }}
+ {{ mockData.gender }} {{ mockData.age }}岁
+ {{ mockData.status }}
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/MedicalMessageRenderer.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/MedicalMessageRenderer.vue
new file mode 100644
index 0000000..850ed74
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/MedicalMessageRenderer.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/PatientInfoPanel.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/PatientInfoPanel.vue
new file mode 100644
index 0000000..c2fd541
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/PatientInfoPanel.vue
@@ -0,0 +1,489 @@
+
+
+
+
+
+
+ 患者详情
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 医疗信息
+
+
+
+
+ 血型
+
+
+ {{ patient.bloodType }}
+
+
+
+
+ 就诊次数
+
+
+ {{ patient.visitCount }}次
+
+
+
+
+ 过敏史
+
+
+
+ {{ allergy }}
+
+
+
+
+
+
+
+
+
+ 当前就诊
+
+
+
+
+
+ 就诊科室
+
+ {{ patient.currentVisit.department }}
+
+
+
+
+ 挂号时间
+
+ {{ patient.currentVisit.registrationTime }}
+
+
+ 主诊医生
+ {{ patient.currentVisit.doctor }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/cards/MedicalRateCard.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/cards/MedicalRateCard.vue
new file mode 100644
index 0000000..69d7f5d
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/cards/MedicalRateCard.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/cards/MedicalRecordCard.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/cards/MedicalRecordCard.vue
new file mode 100644
index 0000000..7cfe69d
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/cards/MedicalRecordCard.vue
@@ -0,0 +1,240 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ initial }}
+
+
{{ patientName }}
+
{{ gender }}
+
{{ age }}岁
+
+
+
+
+ {{ department }}
+
+ {{ statusText }}
+
+
+
+
+
+
+
+
+ 主诉
+
+
+ {{ chiefComplaint }}
+
+
+
+
+
+
+ 诊断
+
+
+ {{ diagnosis }}
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/cards/PrescriptionCard.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/cards/PrescriptionCard.vue
new file mode 100644
index 0000000..c092013
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/cards/PrescriptionCard.vue
@@ -0,0 +1,349 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 处方编号:{{ prescriptionNo }}
+
+
+
+
+
+
+
+ 医生:
+ {{ doctorName }}
+
+
+ 科室:
+ {{ department }}
+
+
+
+
+
+
+ 诊断
+
+
+ {{ diagnosis }}
+
+
+
+
+
+
+
+
+ 药品清单
+
+
+
+
+
+ {{ med.dosage }} · {{ med.frequency }} · {{ med.duration }}
+
+
+
+
+
+
+
+
+
+
+ 备注
+
+
+ {{ notes }}
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/constants.ts b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/constants.ts
new file mode 100644
index 0000000..768c3ab
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/constants.ts
@@ -0,0 +1,6 @@
+// Custom message businessID constants
+export const MEDICAL_BUSINESS_ID = {
+ MEDICAL_RECORD: 'medical_record',
+ PRESCRIPTION: 'prescription',
+ RATING: 'consultation_rating',
+} as const;
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalAudioCallPicker.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalAudioCallPicker.vue
new file mode 100644
index 0000000..d1d473d
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalAudioCallPicker.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalEmojiPicker.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalEmojiPicker.vue
new file mode 100644
index 0000000..0dd6ae0
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalEmojiPicker.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalFilePicker.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalFilePicker.vue
new file mode 100644
index 0000000..f9c3f96
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalFilePicker.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalImagePicker.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalImagePicker.vue
new file mode 100644
index 0000000..129105d
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalImagePicker.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalRecordPanel.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalRecordPanel.vue
new file mode 100644
index 0000000..fb93341
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalRecordPanel.vue
@@ -0,0 +1,293 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ record.date }}
+ {{ record.department }}
+
+
+ {{ record.chiefComplaint }}
+
+
+ {{ record.diagnosis }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalRecordPicker.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalRecordPicker.vue
new file mode 100644
index 0000000..c1c3d9c
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalRecordPicker.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalVideoCallPicker.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalVideoCallPicker.vue
new file mode 100644
index 0000000..ab0e5e3
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalVideoCallPicker.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalVideoPicker.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalVideoPicker.vue
new file mode 100644
index 0000000..7563208
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/MedicalVideoPicker.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/PrescriptionPanel.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/PrescriptionPanel.vue
new file mode 100644
index 0000000..9edc289
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/PrescriptionPanel.vue
@@ -0,0 +1,413 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ patientInfo.name }}
+ |
+ {{ patientInfo.gender }}
+ |
+ {{ patientInfo.age }}岁
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/PrescriptionPicker.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/PrescriptionPicker.vue
new file mode 100644
index 0000000..fdb20a9
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/PrescriptionPicker.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/QuickRatePicker.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/QuickRatePicker.vue
new file mode 100644
index 0000000..6824f48
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/QuickRatePicker.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/QuickReplyPanel.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/QuickReplyPanel.vue
new file mode 100644
index 0000000..cbfe9da
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/QuickReplyPanel.vue
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ reply.text }}
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/QuickReplyPicker.vue b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/QuickReplyPicker.vue
new file mode 100644
index 0000000..c200cdb
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/Medical/pickers/QuickReplyPicker.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/SideTab/SideTab.vue b/demos/industry-showcase/chat-medical-vue3/src/components/SideTab/SideTab.vue
new file mode 100644
index 0000000..e29b40d
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/SideTab/SideTab.vue
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+
+
diff --git a/demos/industry-showcase/chat-medical-vue3/src/components/SideTab/index.ts b/demos/industry-showcase/chat-medical-vue3/src/components/SideTab/index.ts
new file mode 100644
index 0000000..d55434c
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/components/SideTab/index.ts
@@ -0,0 +1 @@
+export { default as SideTab } from './SideTab.vue';
diff --git a/demos/industry-showcase/chat-medical-vue3/src/locales.ts b/demos/industry-showcase/chat-medical-vue3/src/locales.ts
new file mode 100644
index 0000000..15a24c6
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/locales.ts
@@ -0,0 +1,47 @@
+// Custom language resources for the medical chat showroom
+export const medicalLanguageResources = [
+ {
+ lng: 'zh-CN',
+ translation: {
+ 'medical.login.title': '医疗问诊',
+ 'medical.login.subtitle': '输入您的凭证以开始',
+ 'medical.login.sdkAppId': 'SDKAppID',
+ 'medical.login.sdkAppIdPlaceholder': '例如 1400000000',
+ 'medical.login.userId': '用户 ID',
+ 'medical.login.userIdPlaceholder': '例如 user0',
+ 'medical.login.userSig': 'UserSig',
+ 'medical.login.userSigPlaceholder': '在此粘贴您的 UserSig',
+ 'medical.login.submit': '登录',
+ 'medical.login.loading': '登录中...',
+ 'medical.login.error.emptyFields': '请填写所有字段',
+ 'medical.login.error.failed': '登录失败',
+ 'medical.login.hint': '从 <1>IM 控制台1> 获取凭证',
+ 'medical.filter.all': '全部',
+ 'medical.filter.pending': '待问诊',
+ 'medical.filter.active': '问诊中',
+ 'medical.filter.done': '已结束',
+ },
+ },
+ {
+ lng: 'en-US',
+ translation: {
+ 'medical.login.title': 'Medical Chat',
+ 'medical.login.subtitle': 'Enter your credentials to start',
+ 'medical.login.sdkAppId': 'SDKAppID',
+ 'medical.login.sdkAppIdPlaceholder': 'e.g. 1400000000',
+ 'medical.login.userId': 'UserID',
+ 'medical.login.userIdPlaceholder': 'e.g. user0',
+ 'medical.login.userSig': 'UserSig',
+ 'medical.login.userSigPlaceholder': 'Paste your UserSig here',
+ 'medical.login.submit': 'Login',
+ 'medical.login.loading': 'Logging in...',
+ 'medical.login.error.emptyFields': 'Please fill in all fields',
+ 'medical.login.error.failed': 'Login failed',
+ 'medical.login.hint': 'Get credentials from <1>IM Console1>',
+ 'medical.filter.all': 'All',
+ 'medical.filter.pending': 'Pending',
+ 'medical.filter.active': 'In Progress',
+ 'medical.filter.done': 'Completed',
+ },
+ },
+];
diff --git a/demos/industry-showcase/chat-medical-vue3/src/main.ts b/demos/industry-showcase/chat-medical-vue3/src/main.ts
new file mode 100644
index 0000000..2425c0f
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/main.ts
@@ -0,0 +1,5 @@
+import { createApp } from 'vue'
+import './style.css'
+import App from './App.vue'
+
+createApp(App).mount('#app')
diff --git a/demos/industry-showcase/chat-medical-vue3/src/style.css b/demos/industry-showcase/chat-medical-vue3/src/style.css
new file mode 100644
index 0000000..b2c7f5c
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/style.css
@@ -0,0 +1,11 @@
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+html, body, #app {
+ width: 100%;
+ height: 100%;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
+}
diff --git a/demos/industry-showcase/chat-medical-vue3/src/vite-env.d.ts b/demos/industry-showcase/chat-medical-vue3/src/vite-env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/demos/industry-showcase/chat-medical-vue3/tsconfig.app.json b/demos/industry-showcase/chat-medical-vue3/tsconfig.app.json
new file mode 100644
index 0000000..b8e9723
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/tsconfig.app.json
@@ -0,0 +1,27 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "module": "ESNext",
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+ "jsx": "preserve",
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"]
+}
diff --git a/demos/industry-showcase/chat-medical-vue3/tsconfig.json b/demos/industry-showcase/chat-medical-vue3/tsconfig.json
new file mode 100644
index 0000000..ea9d0cd
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/tsconfig.json
@@ -0,0 +1,11 @@
+{
+ "files": [],
+ "references": [
+ {
+ "path": "./tsconfig.app.json"
+ },
+ {
+ "path": "./tsconfig.node.json"
+ }
+ ]
+}
diff --git a/demos/industry-showcase/chat-medical-vue3/tsconfig.node.json b/demos/industry-showcase/chat-medical-vue3/tsconfig.node.json
new file mode 100644
index 0000000..3afdd6e
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/tsconfig.node.json
@@ -0,0 +1,13 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
+ "skipLibCheck": true,
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "allowSyntheticDefaultImports": true,
+ "strict": true,
+ "noEmit": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/demos/industry-showcase/chat-medical-vue3/vite.config.ts b/demos/industry-showcase/chat-medical-vue3/vite.config.ts
new file mode 100644
index 0000000..027af1e
--- /dev/null
+++ b/demos/industry-showcase/chat-medical-vue3/vite.config.ts
@@ -0,0 +1,11 @@
+import { defineConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+
+export default defineConfig({
+ plugins: [vue()],
+ resolve: {
+ alias: {
+ '@': '/src',
+ },
+ },
+})