From 27cd042df9aca0383a49f3514bc21958dd890912 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 29 六月 2026 15:42:23 +0800
Subject: [PATCH] 银川 1.联调产品维护页面 2.添加IM即时通讯模块
---
src/views/im/utils/constants.ts | 296 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 296 insertions(+), 0 deletions(-)
diff --git a/src/views/im/utils/constants.ts b/src/views/im/utils/constants.ts
new file mode 100644
index 0000000..895571e
--- /dev/null
+++ b/src/views/im/utils/constants.ts
@@ -0,0 +1,296 @@
+/** IM 鍐呭绫诲瀷鏋氫妇锛堝榻愬悗绔� ImContentTypeEnum锛� */
+export const ImContentType = {
+ // ========== 鐢ㄦ埛鑱婂ぉ娑堟伅锛�101-105 鐩存帴澶嶇敤 OpenIM 娈典綅缂栧彿锛� ==========
+ TEXT: 101, // 鏂囨湰锛堝搴� OpenIM Text=101锛�
+ IMAGE: 102, // 鍥剧墖锛堝搴� OpenIM Picture=102锛�
+ VOICE: 103, // 璇煶锛堝搴� OpenIM Sound=103锛�
+ VIDEO: 104, // 瑙嗛锛堝搴� OpenIM Video=104锛�
+ FILE: 105, // 鏂囦欢锛堝搴� OpenIM File=105锛�
+ MERGE: 107, // 鍚堝苟杞彂锛堝搴� OpenIM Merger=107锛沺ayload 鍐呭祵瀹屾暣蹇収锛�
+ CARD: 108, // 鍚嶇墖锛堝搴� OpenIM Card=108锛�
+ FACE: 115, // 琛ㄦ儏璐村浘锛堝搴� OpenIM Face=115锛沀nicode emoji 浠嶈蛋 TEXT锛�
+ // ========== 棰戦亾娑堟伅鎵╁睍娈碉紙125+锛汷penIM 122 涔嬪悗鏈崰鐢紝浣滀负棰戦亾 / 鍏紬鍙风被娑堟伅鎵╁睍锛� ==========
+ MATERIAL: 125, // 棰戦亾绱犳潗锛堝浘鏂囧崱鐗囷細title + coverUrl + summary + url锛涜鎯呮媺 get-content锛�
+ // ========== 淇″彿绫伙紙2101 / 2200 鐩存帴澶嶇敤 OpenIM 娈典綅缂栧彿锛�2201 鑷湁鎵╁睍锛� ==========
+ RECALL: 2101, // 鎾ゅ洖锛堝搴� OpenIM RevokeNotification=2101锛�
+ RECEIPT: 2200, // 鍥炴墽锛堝搴� OpenIM HasReadReceipt=2200锛�
+ READ: 2201, // 宸茶锛堝绔悓姝ワ紝OpenIM 鏃犲搴旓紱鑷湁鎵╁睍锛�
+ // ========== 瀹炴椂閫氳瘽淇′护锛�1601-1605 娈典綅涓� OpenIM 瀵归綈锛�1610+ 鑷湁鎵╁睍锛� ==========
+ RTC_CALL: 1601, // 閫氳瘽淇′护缁熶竴鍏ュ彛锛堝搴� OpenIM SignalingNotification=1601锛�
+ RTC_PARTICIPANT_CONNECTED: 1602, // 閫氳瘽鍙備笌鑰呭姞鍏ワ紙瀵瑰簲 OpenIM RoomParticipantsConnectedNotification=1602锛�
+ RTC_PARTICIPANT_DISCONNECTED: 1603, // 閫氳瘽鍙備笌鑰呯寮�锛堝搴� OpenIM RoomParticipantsDisconnectedNotification=1603锛�
+ // 1604-1609 OpenIM 宸茬敤 / 鐣欎綔鎵╁睍锛屾湰绯荤粺鏆備笉浣跨敤
+ RTC_CALL_START: 1610, // 閫氳瘽寮�濮嬶紙鑷湁鎵╁睍锛孫penIM 鏃狅紱浠呯兢鑱婏紱涓� END 涓ゆ寮忛厤瀵癸級
+ RTC_CALL_END: 1611, // 閫氳瘽缁撴潫锛堣嚜鏈夋墿灞曪紝OpenIM 鏃狅紱绉佽亰 / 缇よ亰锛�
+ // ========== 濂藉弸閫氱煡锛�1201-1210 鐩存帴澶嶇敤 OpenIM 娈典綅缂栧彿锛� ==========
+ FRIEND_REQUEST_APPROVED: 1201, // 濂藉弸鐢宠琚悓鎰�
+ FRIEND_REQUEST_REJECTED: 1202, // 濂藉弸鐢宠琚嫆缁�
+ FRIEND_REQUEST_RECEIVED: 1203, // 鏀跺埌鏂扮殑濂藉弸鐢宠
+ FRIEND_ADD: 1204, // 鏂板濂藉弸锛堝弻鏂瑰缓绔嬪叧绯伙級
+ FRIEND_DELETE: 1205, // 濂藉弸琚垹闄�
+ // 1206 瀵瑰簲 OpenIM FriendRemarkSetNotification锛涙湰绯荤粺骞跺叆 FRIEND_UPDATE(1210) 缁熶竴鎺ㄩ�侊紝鍗曚竴瀛楁鍙樻洿涓嶅啀鐙珛閫氶亾
+ FRIEND_BLOCK: 1207, // 鍔犲叆榛戝悕鍗�
+ FRIEND_UNBLOCK: 1208, // 绉诲嚭榛戝悕鍗�
+ FRIEND_INFO_UPDATED: 1209, // 濂藉弸璧勬枡鍙樻洿锛堟樀绉� / 澶村儚锛�
+ FRIEND_UPDATE: 1210, // 濂藉弸淇℃伅鎵归噺鏇存柊锛坰ilent / pinned锛�
+ // ========== 缇や簨浠讹紙1501-1520 鐩存帴澶嶇敤 OpenIM 娈典綅缂栧彿锛�1530+ 鑷湁鎵╁睍娈碉級 ==========
+ GROUP_CREATE: 1501, // 缇ゅ垱寤�
+ GROUP_INFO_UPDATE: 1502, // 缇や俊鎭彉鏇达紙NAME / NOTICE 涔嬪瀛楁鍏滃簳锛�
+ GROUP_REQUEST_RECEIVED: 1503, // 鏀跺埌鏂扮殑鍏ョ兢鐢宠锛堢鑱婂畾鍚戞帹閫佺粰缇や富 + 鍏ㄩ儴绠$悊鍛橈級
+ GROUP_MEMBER_QUIT: 1504, // 鎴愬憳閫�缇�
+ GROUP_REQUEST_APPROVED: 1505, // 鍏ョ兢鐢宠琚悓鎰忥紙绉佽亰鎺ㄧ粰鐢宠浜� + 缇や富 + 鍏ㄩ儴绠$悊鍛橈級
+ GROUP_REQUEST_REJECTED: 1506, // 鍏ョ兢鐢宠琚嫆缁濓紙鍚屼笂锛�
+ GROUP_OWNER_TRANSFER: 1507, // 缇や富杞
+ GROUP_MEMBER_KICK: 1508, // 鎴愬憳琚Щ鍑�
+ GROUP_MEMBER_INVITE: 1509, // 鎴愬憳鍔犲叆
+ GROUP_MEMBER_ENTER: 1510, // 鑷敱杩涚兢锛團REE 妯″紡鎴栫敵璇烽�氳繃鍚庯紱鍏ㄥ憳骞挎挱锛�
+ GROUP_DISSOLVE: 1511, // 缇よВ鏁�
+ GROUP_MEMBER_MUTED: 1512, // 鍗曟垚鍛樼瑷�
+ GROUP_MEMBER_CANCEL_MUTED: 1513, // 鍗曟垚鍛樺彇娑堢瑷�
+ GROUP_MUTED: 1514, // 鍏ㄧ兢绂佽█
+ GROUP_CANCEL_MUTED: 1515, // 鍏ㄧ兢鍙栨秷绂佽█
+ GROUP_MEMBER_NICKNAME_UPDATE: 1516, // 鎴愬憳鏄电О鍙樻洿锛堢獎鍖栧埌 displayUserName锛�
+ GROUP_ADMIN_ADD: 1517, // 娣诲姞绠$悊鍛�
+ GROUP_ADMIN_REMOVE: 1518, // 鎾ら攢绠$悊鍛�
+ GROUP_NOTICE_UPDATE: 1519, // 缇ゅ叕鍛婂彉鏇�
+ GROUP_NAME_UPDATE: 1520, // 缇ゅ悕鍙樻洿
+ // ========== 鑷湁鎵╁睍娈碉紙1530+锛孫penIM 1500-1520 娈典綅鏃犲搴旂墿锛� ==========
+ GROUP_MEMBER_SETTING_UPDATE: 1530, // 缇ゆ垚鍛樹釜浜鸿缃彉鏇达細silent / groupRemark 涓汉澶氱鍚屾
+ GROUP_MESSAGE_PIN: 1531, // 缇ゆ秷鎭疆椤讹紙鑷湁鎵╁睍锛孫penIM 鏃狅級
+ GROUP_MESSAGE_UNPIN: 1532, // 缇ゆ秷鎭彇娑堢疆椤讹紙鑷湁鎵╁睍锛孫penIM 鏃狅級
+ GROUP_BANNED: 1533 // 缇ゅ皝绂佸彉鏇达紙鑷湁鎵╁睍锛孫penIM 鏃狅級
+} as const
+
+/** 鍒ゆ柇鏄惁銆岀兢骞挎挱浜嬩欢銆嶏細[GROUP_CREATE, GROUP_BANNED] 娈典綅閮界畻锛屼粎 GROUP_MEMBER_SETTING_UPDATE 鏄釜浜轰俊鍙锋帓闄� */
+export function isGroupNotification(type: number): boolean {
+ return (
+ type >= ImContentType.GROUP_CREATE &&
+ type <= ImContentType.GROUP_BANNED &&
+ type !== ImContentType.GROUP_MEMBER_SETTING_UPDATE
+ )
+}
+
+/** 鍒ゆ柇鏄惁銆屽ソ鍙嬮�氱煡浜嬩欢銆嶏細1201-1210 娈典綅 */
+export function isFriendNotification(type: number): boolean {
+ return type >= ImContentType.FRIEND_REQUEST_APPROVED && type <= ImContentType.FRIEND_UPDATE
+}
+
+/** 鍒ゆ柇鏄惁銆屽姞缇ょ敵璇烽�氱煡浜嬩欢銆嶏細1503/1505/1506 */
+export function isGroupRequestNotification(type: number): boolean {
+ return (
+ type === ImContentType.GROUP_REQUEST_RECEIVED ||
+ type === ImContentType.GROUP_REQUEST_APPROVED ||
+ type === ImContentType.GROUP_REQUEST_REJECTED
+ )
+}
+
+/** 鍒ゆ柇鏄惁銆屼細璇濆唴鐨勫ソ鍙嬩簨浠舵皵娉°�嶏細FRIEND_ADD / FRIEND_DELETE 鐩存帴娓叉煋鎴愮伆鑹叉彁绀猴紝涓庣兢浜嬩欢鍚屽鐞� */
+export function isFriendChatTip(type: number): boolean {
+ return type === ImContentType.FRIEND_ADD || type === ImContentType.FRIEND_DELETE
+}
+
+/** 鍒ゆ柇鏄惁銆屼細璇濆唴鐨勯�氳瘽浜嬩欢姘旀场銆嶏細RTC_CALL_START / RTC_CALL_END 娓叉煋鎴愮伆鑹叉彁绀� */
+export function isRtcCallTip(type: number): boolean {
+ return type === ImContentType.RTC_CALL_START || type === ImContentType.RTC_CALL_END
+}
+
+/**
+ * IM 鏅�氬唴瀹圭被鍨嬮泦鍚堬紙normal vs event 浜屽垎锛涗笌鍚庣 ImContentTypeEnum.normal 瀛楁璇箟涓�鑷达級
+ *
+ * 杩欎釜闆嗗悎鍦ㄥ澶勮澶嶇敤锛屾柊澧炵被鍨嬪墠鍏堢‘璁ゆ墍鏈夊壇浣滅敤閮界鍚堥鏈燂細
+ * 1. 鍚庣鍙戦�佸叆鍙f牎楠岋紙Im{Private,Group}MessageSendReqVO.isNormalType锛夆�斺�� 鐢ㄦ埛鍙戦�佺殑鍐呭绫诲瀷蹇呴』 normal=true
+ * 2. 鍓嶇鎺ユ敹渚ф湭璇� / 鎻愮ず闊筹紙websocketStore锛夆�斺�� normal 娑堟伅璁″叆浼氳瘽鏈鏁� + 瑙﹀彂澹伴煶
+ * 3. 鍓嶇浼氳瘽鍒楄〃 lastType / @ 鏍囩锛圕onversationItem锛夆�斺�� 鍙湁 normal 鎵嶇畻銆屾渶鍚庝竴鏉¤亰澶╂秷鎭��
+ * 4. 鍓嶇缇ゆ秷鎭疆椤惰彍鍗曪紙message-item.vue 鐨� canPin锛夆�斺�� normal 鎵嶅厑璁哥兢涓� / 绠$悊鍛樼疆椤�
+ *
+ * 鍚嶇墖锛圕ARD锛�/ 琛ㄦ儏锛團ACE锛夐兘鏄�岀敤鎴蜂富鍔ㄥ彂鐨勮亰澶╂秷鎭�嶏紝1/2/3 閮界鍚堥鏈燂紱4 鍚屾椂鏀惧紑 = 缇や富鍙疆椤讹紝璇箟鍚堢悊
+ */
+const ImContentTypeNormals = new Set<number>([
+ ImContentType.CARD,
+ ImContentType.FACE,
+ ImContentType.FILE,
+ ImContentType.IMAGE,
+ ImContentType.MATERIAL, // 棰戦亾绱犳潗璁″叆鏈鏁� + 杩涗細璇濆垪琛�
+ ImContentType.MERGE,
+ ImContentType.TEXT,
+ ImContentType.VIDEO,
+ ImContentType.VOICE
+])
+
+/** 鍒ゆ柇鏄惁"鏅�氭秷鎭�" */
+export function isNormalMessage(type: number): boolean {
+ return ImContentTypeNormals.has(type)
+}
+
+/** IM 濯掍綋鍐呭绫诲瀷闆嗗悎锛氬彂閫佷緷璧栨湰鍦� File 涓婁紶锛屽埛鏂板悗 _localFile 涓㈠け鍗充笉鍙仮澶� */
+const ImContentTypeMedia = new Set<number>([
+ ImContentType.FILE,
+ ImContentType.IMAGE,
+ ImContentType.VIDEO,
+ ImContentType.VOICE
+])
+
+/** 鍒ゆ柇鏄惁銆屽獟浣撴秷鎭�嶏細鍥剧墖 / 鏂囦欢 / 璇煶 / 瑙嗛 */
+export function isMediaMessageType(type: number): boolean {
+ return ImContentTypeMedia.has(type)
+}
+
+/**
+ * IM 娑堟伅鐘舵�佹灇涓撅紙瀵归綈鍚庣 ImMessageStatusEnum锛屽墠绔墿灞� SENDING + FAILED锛�
+ *
+ * 鐢熷懡鍛ㄦ湡锛欶AILED(-2) 鈫� SENDING(-1) 鈫� NORMAL(0) 鈫� RECALL(2)
+ */
+export const ImMessageStatus = {
+ FAILED: -2, // 鍙戦�佸け璐ワ紙鍓嶇鐙湁锛�
+ SENDING: -1, // 鍙戦�佷腑锛堝墠绔嫭鏈夛級
+ NORMAL: 0, // 姝e父
+ RECALL: 2 // 宸叉挙鍥�
+} as const
+
+/** IM 浼氳瘽绫诲瀷鏋氫妇 */
+export const ImConversationType = {
+ NONE: 0, // 鏃犱細璇�
+ PRIVATE: 1, // 绉佽亰
+ GROUP: 2, // 缇よ亰
+ CHANNEL: 3 // 棰戦亾 / 鍏紬鍙�
+} as const
+
+/** ImConversationType 鍙栧�硷紙鐢ㄤ簬娑堟伅 payload 瀛楁绫诲瀷鏀剁獎锛� */
+export type ImConversationTypeValue = (typeof ImConversationType)[keyof typeof ImConversationType]
+
+/** 鏄惁绉佽亰浼氳瘽锛涘悓鏃舵敹绐勭被鍨� */
+export function isPrivateConversation(type: number | undefined): boolean {
+ return type === ImConversationType.PRIVATE
+}
+
+/** 鏄惁缇よ亰浼氳瘽锛涘悓鏃舵敹绐勭被鍨� */
+export function isGroupConversation(type: number | undefined): boolean {
+ return type === ImConversationType.GROUP
+}
+
+/** 鏄惁棰戦亾浼氳瘽锛涘悓鏃舵敹绐勭被鍨� */
+export function isChannelConversation(type: number | undefined): boolean {
+ return type === ImConversationType.CHANNEL
+}
+
+/** IM 閫氳瘽濯掍綋绫诲瀷锛堝榻愬悗绔� ImRtcCallMediaTypeEnum锛� */
+export const ImRtcCallMediaType = {
+ VOICE: 1,
+ VIDEO: 2
+} as const
+
+/** IM 閫氳瘽鐘舵�侊紙瀵归綈鍚庣 ImRtcCallStatusEnum锛� */
+export const ImRtcCallStatus = {
+ CREATED: 10, // 鍒涘缓锛氱鑱婄瓑琚彨鎺ュ惉锛涚兢鑱婂彂璧蜂汉宸茶繘鎴跨瓑鍏朵粬浜哄姞鍏�
+ RUNNING: 20, // 杩涜涓細绗竴涓潪鍙戣捣浜烘帴閫氬悗杩涘叆
+ ENDED: 30 // 宸茬粨鏉�
+} as const
+
+/** IM 閫氳瘽缁撴潫鍘熷洜锛堝榻愬悗绔� ImRtcCallEndReasonEnum锛� */
+export const ImRtcCallEndReason = {
+ HANGUP: 1, // 鎺ラ�氬悗浠讳竴鏂逛富鍔ㄦ寕鏂�
+ REJECT: 2, // 琚彨鎺ラ�氬墠鐐规嫆鎺�
+ CANCEL: 3, // 涓诲彨鎺ラ�氬墠涓诲姩鍙栨秷
+ NO_ANSWER: 4, // 鎸搩瓒呮椂鏈帴閫�
+ BUSY: 5, // 绉佽亰鍛煎彨鏃跺鏂规蹇�
+ ERROR: 9 // 缃戠粶涓柇 / 璁惧澶辫触
+} as const
+
+/** ImRtcCallEndReason 鍙栧�肩被鍨� */
+export type ImRtcCallEndReasonValue = (typeof ImRtcCallEndReason)[keyof typeof ImRtcCallEndReason]
+
+/** IM 閫氳瘽鍙備笌鑰呯姸鎬侊紙瀵归綈鍚庣 ImRtcParticipantStatusEnum锛夛紱鍚屾椂浣滀负 RTC_CALL 淇′护 status 瀛楁鍙栧�� */
+export const ImRtcParticipantStatus = {
+ INVITING: 10, // 鏉ョ數閭�璇�
+ JOINED: 20, // 鎺ュ惉 / 宸插姞鍏�
+ REJECTED: 30, // 鎷掓帴
+ NO_ANSWER: 40, // 涓诲彨鍙栨秷锛岃閭�璇锋柟鏈簲绛�
+ LEFT: 50 // 鎸傛柇绂诲紑
+} as const
+
+/** ImRtcParticipantStatus 鍙栧�肩被鍨� */
+export type ImRtcParticipantStatusValue =
+ (typeof ImRtcParticipantStatus)[keyof typeof ImRtcParticipantStatus]
+
+/**
+ * IM 閫氳瘽 UI 闃舵锛涘墠绔嫭鏈夛紝鐢ㄤ簬椹卞姩 inviting / incoming / running 涓夌寮圭獥鍒囨崲锛�
+ * 璺熷悗绔� ImRtcCallStatus 涓嶆槸 1:1 鏄犲皠锛宻tage 澶氫簡銆岃嚜宸辨槸涓诲彨杩樻槸琚彨銆嶇殑瑙掕壊缁村害
+ */
+export const ImRtcCallStage = {
+ IDLE: 'idle', // 绌洪棽锛涘悗绔棤瀵瑰簲锛堟湰绔棤娲昏穬閫氳瘽锛�
+ INVITING: 'inviting', // 涓诲彨绛夊緟瀵规柟鎺ュ彈锛涘搴斿悗绔� ImRtcCallStatus.CREATED锛堣嚜宸辨槸涓诲彨锛�
+ INCOMING: 'incoming', // 琚彨鏉ョ數鍝嶉搩锛涘搴斿悗绔� ImRtcCallStatus.CREATED锛堣嚜宸辨槸琚彨锛�
+ RUNNING: 'running' // 閫氳瘽涓紱瀵瑰簲鍚庣 ImRtcCallStatus.RUNNING
+} as const
+
+/** ImRtcCallStage 鍙栧�肩被鍨� */
+export type ImRtcCallStageValue = (typeof ImRtcCallStage)[keyof typeof ImRtcCallStage]
+
+/** IM WebSocket 澶栧眰甯х被鍨� */
+export const ImWebSocketMessageType = {
+ NOTIFICATION: 'im-notification' // IM 閫氱煡
+} as const
+
+/** IM 娑堟伅鍥炴墽鐘舵�佹灇涓撅紙瀵归綈鍚庣 ImMessageReceiptStatusEnum锛� */
+export const ImMessageReceiptStatus = {
+ NO_RECEIPT: 0, // 涓嶉渶瑕佸洖鎵�
+ PENDING: 1, // 寰呭畬鎴�
+ DONE: 2 // 宸插畬鎴�
+} as const
+
+/** 缇ゆ垚鍛樿鑹诧紙瀵归綈鍚庣 ImGroupMemberRoleEnum锛� */
+export const ImGroupMemberRole = {
+ OWNER: 1, // 缇や富
+ ADMIN: 2, // 绠$悊鍛�
+ NORMAL: 3 // 鏅�氭垚鍛�
+} as const
+
+/** 鍔犵兢鏉ユ簮锛堝榻愬悗绔� ImGroupAddSourceEnum锛� */
+export const ImGroupAddSource = {
+ SEARCH: 1, // 鎼滅储
+ INVITE: 2, // 閭�璇�
+ QR_CODE: 3, // 鎵爜
+ SHARE_LINK: 4 // 鍒嗕韩閾炬帴
+} as const
+
+/** 鍔犵兢鐢宠澶勭悊缁撴灉锛堝榻愬悗绔� ImGroupRequestHandleResultEnum锛� */
+export const ImGroupRequestHandleResult = {
+ UNHANDLED: 0, // 鏈鐞�
+ AGREED: 1, // 鍚屾剰
+ REFUSED: 2 // 鎷掔粷
+} as const
+
+/** 濂藉弸娣诲姞鏉ユ簮锛堝榻愬悗绔� ImFriendAddSourceEnum锛� */
+export const ImFriendAddSource = {
+ SEARCH: 1, // 鎼滅储
+ GROUP: 2, // 缇よ亰
+ QR_CODE: 3, // 鎵爜
+ CARD: 4 // 鍚嶇墖
+} as const
+
+/** 濂藉弸鐢宠澶勭悊缁撴灉锛堝榻愬悗绔� ImFriendRequestHandleResultEnum锛� */
+export const ImFriendRequestHandleResult = {
+ UNHANDLED: 0, // 鏈鐞�
+ AGREED: 1, // 鍚屾剰
+ REFUSED: 2 // 鎷掔粷
+} as const
+
+/**
+ * @鍏ㄤ綋鎴愬憳 鐨勭壒娈� userId 鏍囪瘑锛歛tUserIds 涓寘鍚� -1 琛ㄧず @ 鍏ㄤ綋鎴愬憳
+ *
+ * 涓庡悗绔害瀹氾細缇ゆ秷鎭� atUserIds 鏁扮粍閲屽嚭鐜� -1 鏃讹紝鎵�鏈夋垚鍛橀兘鏀跺埌鎻愰啋
+ * MentionPicker 娓叉煋铏氭嫙椤� + conversationStore.applyAt 鍒ゅ畾 atAll 閮介潬杩欎釜鍊�
+ */
+export const IM_AT_ALL_USER_ID = -1
+
+/** @鍏ㄤ綋鎴愬憳 鐨勫睍绀哄悕锛堝榻愬井淇� PC锛� */
+export const IM_AT_ALL_NICKNAME = '鎵�鏈変汉'
+
+/** 杞彂妯″紡锛歋INGLE 閫愭潯鍘熸牱杞� / MERGE 鎵撳寘鎴� MergeMessage */
+export const ImForwardMode = {
+ SINGLE: 'single',
+ MERGE: 'merge'
+} as const
+
+/** ImForwardMode 鍙栧�肩被鍨� */
+export type ImForwardModeValue = (typeof ImForwardMode)[keyof typeof ImForwardMode]
--
Gitblit v1.9.3