@zjw-jszn/shared-imsdk 1.0.10 → 1.0.13

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.
@@ -1,4 +1,4 @@
1
- const __SHARED_IMSDK_CSS__ = ".confirm-dialog-mask[data-v-69eaf313] {\n position: fixed;\n z-index: 12000;\n inset: 0;\n\n background: rgba(15, 23, 42, 0.35);\n backdrop-filter: blur(2px);\n}\n.confirm-dialog[data-v-69eaf313] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n width: min(420px, calc(100vw - 32px));\n border: 1px solid #e8edf4;\n border-radius: 12px;\n\n background: #fff;\n box-shadow: 0 18px 48px rgba(15, 23, 42, 0.22);\n}\n.confirm-dialog-header[data-v-69eaf313] {\n padding: 16px 18px 8px;\n}\n.confirm-dialog-title[data-v-69eaf313] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #1f2937;\n}\n.confirm-dialog-body[data-v-69eaf313] {\n padding: 0 18px 10px;\n}\n.confirm-dialog-message[data-v-69eaf313] {\n margin: 0;\n font-size: 14px;\n line-height: 1.55;\n color: #4b5563;\n}\n.confirm-dialog-error[data-v-69eaf313] {\n margin: 10px 0 0;\n font-size: 13px;\n line-height: 1.45;\n color: #cf1322;\n}\n.confirm-dialog-footer[data-v-69eaf313] {\n display: flex;\n gap: 10px;\n justify-content: flex-end;\n padding: 14px 18px 18px;\n}\n.dialog-btn[data-v-69eaf313] {\n cursor: pointer;\n\n min-width: 80px;\n height: 34px;\n padding: 0 14px;\n border: 1px solid transparent;\n border-radius: 8px;\n\n font-size: 14px;\n\n transition: all 0.2s ease;\n}\n.dialog-btn[data-v-69eaf313]:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n.cancel-btn[data-v-69eaf313] {\n border-color: #d9d9d9;\n color: #595959;\n background: #fff;\n}\n.cancel-btn[data-v-69eaf313]:hover:not(:disabled) {\n border-color: #bfbfbf;\n color: #262626;\n background: #fafafa;\n}\n.confirm-btn[data-v-69eaf313] {\n border-color: #0e77cc;\n color: #fff;\n background: linear-gradient(135deg, #0e77cc 0%, #0d6db8 100%);\n}\n.confirm-btn[data-v-69eaf313]:hover:not(:disabled) {\n border-color: #0d6db8;\n filter: brightness(1.03);\n}\n.v3-body-inner{scroll-behavior:smooth;scrollbar-color:#393d3f rgba(0,0,0,.1);scrollbar-width:thin}.v3-body-inner::-webkit-scrollbar{width:8px}.v3-body-inner::-webkit-scrollbar-track{background-color:transparent}.v3-body-inner::-webkit-scrollbar-thumb{display:none;background:rgba(0,0,0,.3);border-radius:5px}.v3-body-inner:hover::-webkit-scrollbar-thumb{display:block}.v3-emoji-picker{height:320px;width:280px;box-shadow:0 2px 10px #0003;border-radius:10px;margin:0 auto;box-sizing:border-box;display:flex;flex-direction:column;text-align:left}.v3-emoji-picker *{box-sizing:border-box}.v3-emoji-picker .v3-header{padding:15px 15px 13px;border-bottom:1px solid}.v3-emoji-picker .v3-header .v3-groups{display:flex}.v3-emoji-picker .v3-header .v3-groups .v3-group{flex-grow:1;padding:0;margin:0;border:none;background:none;font-size:23px;cursor:pointer;position:relative;display:block;opacity:.7;transition:.2s}.v3-emoji-picker .v3-header .v3-groups .v3-group.v3-is-hidden{display:none}.v3-emoji-picker .v3-header .v3-groups .v3-group:first-child,.v3-emoji-picker .v3-header .v3-groups .v3-group:last-child{flex-grow:0}.v3-emoji-picker .v3-header .v3-groups .v3-group:hover{opacity:1}.v3-emoji-picker .v3-header .v3-groups .v3-group span{display:flex;align-items:center;justify-content:center}.v3-emoji-picker .v3-header .v3-groups .v3-group span img{display:block;width:1em;height:auto}.v3-emoji-picker .v3-spacing{height:11px}.v3-emoji-picker .v3-search input{width:100%;display:block;height:26px;padding:0 10px;border:1px solid;border-radius:3px;font-size:12px;transition:.2s}.v3-emoji-picker .v3-search input:focus{outline:none}.v3-emoji-picker .v3-body{padding:0 0 15px 11px;min-height:0;flex-grow:1}.v3-emoji-picker .v3-body .v3-body-inner{flex-grow:1;min-height:0;overflow-y:auto;overflow-x:hidden;height:100%;padding-right:11px}.v3-emoji-picker .v3-body .v3-body-inner .v3-group h5{margin:0;top:0;padding:7px 0 3px 4px;z-index:2}.v3-emoji-picker .v3-body .v3-body-inner .v3-group h5.v3-sticky{position:sticky}.v3-emoji-picker .v3-body .v3-body-inner .v3-group .v3-emojis{display:flex;font-size:18px;flex-wrap:wrap}.v3-emoji-picker .v3-body .v3-body-inner .v3-group .v3-emojis button{cursor:pointer;border:none;background:none;margin:0;text-align:center;display:flex;align-items:center;justify-content:center;flex-basis:12.5%;max-width:12.5%;flex-grow:1;padding:0;font-size:22px;position:relative}.v3-emoji-picker .v3-body .v3-body-inner .v3-group .v3-emojis button:after{content:\"\";width:100%;padding-bottom:100%}.v3-emoji-picker .v3-body .v3-body-inner .v3-group .v3-emojis button span{display:flex;align-items:center;justify-content:center}.v3-emoji-picker .v3-body .v3-body-inner .v3-group .v3-emojis button img{max-width:100%;padding:4px}.v3-emoji-picker .v3-body .v3-body-inner .v3-group .v3-emojis button span,.v3-emoji-picker .v3-body .v3-body-inner .v3-group .v3-emojis button img{position:absolute;top:0;left:0;width:100%;height:100%}.v3-emoji-picker .v3-body .v3-body-inner.is-mac .v3-emojis button{font-family:\"Apple Color Emoji\"}.v3-emoji-picker .v3-footer{font-size:14px;border-top:1px solid #dddddd;padding:15px;display:flex;align-items:center;justify-content:space-between;position:relative}.v3-emoji-picker .v3-footer .v3-tone,.v3-emoji-picker .v3-footer .v3-foot-left{display:flex;align-items:center}.v3-emoji-picker .v3-footer .v3-tone img,.v3-emoji-picker .v3-footer .v3-foot-left img{width:20px;display:block}.v3-emoji-picker .v3-footer .v3-tone>span:first-child,.v3-emoji-picker .v3-footer .v3-foot-left>span:first-child{margin-right:6px}.v3-emoji-picker .v3-footer .v3-foot-left>span.v3-text{max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v3-emoji-picker .v3-footer .v3-tone{border:none;padding:0;background:none;cursor:pointer;display:inline-flex;align-items:center}.v3-emoji-picker .v3-footer .v3-tone>span{display:inline-flex;vertical-align:top}.v3-emoji-picker .v3-footer .v3-tone .v3-text{font-size:13px}.v3-emoji-picker .v3-footer .v3-tone .v3-icon{display:inline-flex;height:15px;width:15px;vertical-align:middle;align-self:center;border:2px solid rgba(0,0,0,.2)}.v3-emoji-picker .v3-footer .v3-tone .v3-icon.v3-tone-neutral{background-color:#ffd225}.v3-emoji-picker .v3-footer .v3-tone .v3-icon.v3-tone-1f3fb{background-color:#ffdfbd}.v3-emoji-picker .v3-footer .v3-tone .v3-icon.v3-tone-1f3fc{background-color:#e9c197}.v3-emoji-picker .v3-footer .v3-tone .v3-icon.v3-tone-1f3fd{background-color:#c88e62}.v3-emoji-picker .v3-footer .v3-tone .v3-icon.v3-tone-1f3fe{background-color:#a86637}.v3-emoji-picker .v3-footer .v3-tone .v3-icon.v3-tone-1f3ff{background-color:#60463a}.v3-emoji-picker .v3-footer .v3-tone .is-mac span{font-family:\"Apple Color Emoji\"}.v3-skin-tones{position:absolute;height:100%;width:60%;top:0;left:0;display:flex;align-items:center;justify-content:flex-end;padding:0 15px;opacity:0;visibility:hidden;transition:.2s;border-radius:0 0 10px 10px}.v3-skin-tones.v3-is-open{opacity:1;visibility:visible}.v3-skin-tones .v3-skin-tone{display:inline-block;height:15px;width:25px;border:none;padding:0;cursor:pointer;transition:0ms}.v3-skin-tones .v3-skin-tone:hover{transform:scale(1.1);transition:.2s}.v3-skin-tones .v3-skin-tone-neutral{color:#ffd225;background-color:#ffd225}.v3-skin-tones .v3-skin-tone-1f3fb{color:#ffdfbd;background-color:#ffdfbd}.v3-skin-tones .v3-skin-tone-1f3fc{color:#e9c197;background-color:#e9c197}.v3-skin-tones .v3-skin-tone-1f3fd{color:#c88e62;background-color:#c88e62}.v3-skin-tones .v3-skin-tone-1f3fe{color:#a86637;background-color:#a86637}.v3-skin-tones .v3-skin-tone-1f3ff{color:#60463a;background-color:#60463a}.v3-input-emoji-picker *{box-sizing:border-box}.v3-input-emoji-picker .v3-input-picker-root{position:relative}.v3-input-emoji-picker .v3-input-picker-root .v3-emoji-picker-input,.v3-input-emoji-picker .v3-input-picker-root .v3-emoji-picker-textarea{width:100%;height:40px;border:1px solid #999;padding-left:15px}.v3-input-emoji-picker .v3-input-picker-root .v3-emoji-picker-textarea{min-height:80px;resize:vertical}.v3-input-emoji-picker .v3-input-picker-root .v3-emoji-picker-textarea+.v3-input-picker-wrap .v3-input-picker-icon{top:auto;bottom:5px}.v3-input-emoji-picker .v3-input-picker-root .v3-input-picker-wrap .v3-input-picker-icon{display:inline-flex;position:absolute;right:5px;top:50%;transform:translateY(-50%);font-size:24px;border:none;background:none;padding:0 5px;cursor:pointer}.v3-input-emoji-picker .v3-input-picker-root .v3-input-picker-wrap .v3-input-picker-icon img{display:block;width:1em;height:1em}.v3-input-emoji-picker .v3-input-picker-root .v3-input-picker-wrap .v3-emoji-picker{opacity:0;visibility:hidden;transition:.2s}.v3-input-emoji-picker .v3-input-picker-root .v3-input-picker-wrap.v3-picker-is-open .v3-emoji-picker{opacity:1;visibility:visible;z-index:999}.v3-emoji-picker{--v3-picker-bg: #ffffff;--v3-picker-fg: #000000;--v3-picker-border: #dddddd;--v3-picker-input-bg: var(--v3-picker-bg);--v3-picker-input-border: #cccccc;--v3-picker-input-focus-border: #000000;--v3-group-image-filter: none;--v3-picker-emoji-hover: #f7f7f7;background:var(--v3-picker-bg);color:var(--v3-picker-fg)}.v3-emoji-picker .v3-footer,.v3-emoji-picker .v3-header{border-color:var(--v3-picker-border)}.v3-emoji-picker .v3-groups{filter:var(--v3-group-image-filter)}.v3-emoji-picker .v3-tone{color:var(--v3-picker-fg)}.v3-emoji-picker .v3-search input{background:var(--v3-picker-input-bg);border-color:var(--v3-picker-input-border);color:inherit}.v3-emoji-picker .v3-search input:focus{border-color:var(--v3-picker-input-focus-border)}.v3-emoji-picker .v3-body .v3-body-inner .v3-group h5,.v3-emoji-picker .v3-skin-tones{background:var(--v3-picker-bg)}.v3-emoji-picker .v3-body .v3-body-inner .v3-group .v3-emojis button:hover{background:var(--v3-picker-emoji-hover, #f7f7f7)}@media (prefers-color-scheme: dark){.v3-emoji-picker.v3-color-theme-auto{--v3-picker-bg: #000000;--v3-picker-fg: #ffffff;--v3-picker-border: #333333;--v3-picker-input-bg: #222222;--v3-picker-input-border: #444444;--v3-picker-input-focus-border: #555555;--v3-group-image-filter: invert(1);--v3-picker-emoji-hover: #222222}}.v3-emoji-picker.v3-color-theme-dark{--v3-picker-bg: #000000;--v3-picker-fg: #ffffff;--v3-picker-border: #333333;--v3-picker-input-bg: #222222;--v3-picker-input-border: #444444;--v3-picker-input-focus-border: #555555;--v3-group-image-filter: invert(1);--v3-picker-emoji-hover: #222222}\n\n.chat-room[data-v-1459079f] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #fff;\n}\n.chat-room-header[data-v-1459079f] {\n display: flex;\n gap: 12px;\n align-items: center;\n\n padding: 8px 20px;\n border-bottom: 1px solid #e8e8e8;\n\n background: linear-gradient(180deg, #fff 0%, #fafafa 100%);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);\n}\n.back-btn[data-v-1459079f] {\n cursor: pointer;\n\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n\n width: 36px;\n height: 36px;\n border: none;\n border-radius: 50%;\n\n font-size: 16px;\n color: #595959;\n\n background: #f0f0f0;\n\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.back-btn[data-v-1459079f]:hover {\n transform: scale(1.05);\n color: #0e77cc;\n background: #e8e8e8;\n}\n.back-btn[data-v-1459079f]:active {\n transform: scale(0.95);\n}\n.title[data-v-1459079f] {\n display: flex;\n flex: 1;\n gap: 12px;\n align-items: center;\n}\n.header-actions[data-v-1459079f] {\n display: flex;\n flex-shrink: 0;\n align-items: flex-end;\n}\n.end-session-btn[data-v-1459079f] {\n cursor: pointer;\n\n min-width: 90px;\n height: 32px;\n padding: 0 12px;\n border: 1px solid #ffd6d6;\n border-radius: 16px;\n\n font-size: 13px;\n font-weight: 500;\n color: #d4380d;\n\n background: #fff2f0;\n\n transition: all 0.2s ease;\n}\n.end-session-btn[data-v-1459079f]:hover:not(:disabled) {\n border-color: #ffb3ad;\n background: #ffe7e2;\n}\n.end-session-btn[data-v-1459079f]:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n.avatar-wrapper[data-v-1459079f] {\n position: relative;\n flex-shrink: 0;\n width: 42px;\n height: 42px;\n}\n.avatar-img[data-v-1459079f] {\n width: 100%;\n height: 100%;\n border: 2px solid white;\n border-radius: 50%;\n\n object-fit: cover;\n background: linear-gradient(135deg, #f0f0f0 0%, #e8e8e8 100%);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n.avatar-text[data-v-1459079f] {\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 42px;\n height: 42px;\n border: 2px solid white;\n border-radius: 50%;\n\n font-size: 16px;\n font-weight: 600;\n color: white;\n\n background: linear-gradient(135deg, #0e77cc 0%, #0d6db8 100%);\n box-shadow: 0 2px 8px rgba(14, 119, 204, 0.3);\n}\n.user-info[data-v-1459079f] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n.name[data-v-1459079f] {\n font-size: 15px;\n font-weight: 600;\n color: #262626;\n letter-spacing: 0.2px;\n}\n.messages[data-v-1459079f] {\n position: relative;\n\n overflow-y: auto;\n flex: 1;\n\n padding: 24px 20px;\n\n background: linear-gradient(180deg, #f5f5f5 0%, #fafafa 100%);\n}\n\n/* 自定义滚动条 */\n.messages[data-v-1459079f]::-webkit-scrollbar {\n width: 6px;\n}\n.messages[data-v-1459079f]::-webkit-scrollbar-track {\n background: transparent;\n}\n.messages[data-v-1459079f]::-webkit-scrollbar-thumb {\n border-radius: 3px;\n background: #d9d9d9;\n}\n.messages[data-v-1459079f]::-webkit-scrollbar-thumb:hover {\n background: #bfbfbf;\n}\n.loading-more[data-v-1459079f] {\n display: flex;\n gap: 8px;\n align-items: center;\n justify-content: center;\n\n padding: 16px;\n\n font-size: 13px;\n color: #8c8c8c;\n}\n.loading-spinner-small[data-v-1459079f] {\n width: 20px;\n height: 20px;\n border: 2px solid #f0f0f0;\n border-top: 2px solid #0e77cc;\n border-radius: 50%;\n\n animation: spin-1459079f 0.8s linear infinite;\n}\n.no-more[data-v-1459079f] {\n padding: 12px;\n font-size: 12px;\n color: #bfbfbf;\n text-align: center;\n}\n.loading-state[data-v-1459079f] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n padding: 60px 20px;\n\n color: #bfbfbf;\n}\n.loading-spinner[data-v-1459079f] {\n width: 40px;\n height: 40px;\n margin-bottom: 16px;\n border: 3px solid #f0f0f0;\n border-top: 3px solid #0e77cc;\n border-radius: 50%;\n\n animation: spin-1459079f 0.8s linear infinite;\n}\n@keyframes spin-1459079f {\n0% { transform: rotate(0deg);\n}\n100% { transform: rotate(360deg);\n}\n}\n.empty-messages[data-v-1459079f] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n height: 100%;\n\n color: #bfbfbf;\n}\n.empty-messages .icon[data-v-1459079f] {\n margin-bottom: 16px;\n font-size: 64px;\n opacity: 0.5;\n}\n.empty-messages p[data-v-1459079f] {\n margin: 0;\n font-size: 14px;\n font-weight: 400;\n}\n.message-item[data-v-1459079f] {\n display: flex;\n gap: 12px;\n margin-bottom: 24px;\n animation: slide-in-1459079f 0.3s ease-out;\n}\n@keyframes slide-in-1459079f {\nfrom {\n transform: translateY(10px);\n opacity: 0;\n}\nto {\n transform: translateY(0);\n opacity: 1;\n}\n}\n.message-item.is-self[data-v-1459079f] {\n justify-content: flex-end;\n}\n.msg-avatar-wrapper[data-v-1459079f] {\n position: relative;\n flex-shrink: 0;\n width: 40px;\n height: 40px;\n}\n.msg-avatar-img[data-v-1459079f] {\n width: 100%;\n height: 100%;\n border: 2px solid white;\n border-radius: 50%;\n\n object-fit: cover;\n background: linear-gradient(135deg, #f0f0f0 0%, #e8e8e8 100%);\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);\n}\n.msg-avatar[data-v-1459079f] {\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 40px;\n height: 40px;\n border: 2px solid white;\n border-radius: 50%;\n\n font-size: 15px;\n font-weight: 600;\n color: white;\n\n background: linear-gradient(135deg, #0e77cc 0%, #0d6db8 100%);\n box-shadow: 0 2px 6px rgba(14, 119, 204, 0.3);\n}\n.message-content-wrapper[data-v-1459079f] {\n display: flex;\n flex-direction: column;\n max-width: 65%;\n}\n.is-self .message-content-wrapper[data-v-1459079f] {\n align-items: flex-end;\n}\n.message-sender[data-v-1459079f] {\n margin-bottom: 6px;\n font-size: 12px;\n font-weight: 400;\n color: #8c8c8c;\n}\n.message-content[data-v-1459079f] {\n padding: 12px 16px;\n border-radius: 12px;\n\n background-color: white;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n\n transition: all 0.2s;\n}\n.message-item.is-self .message-content[data-v-1459079f] {\n color: white;\n background: linear-gradient(135deg, #0e77cc 0%, #0d6db8 100%);\n box-shadow: 0 2px 8px rgba(14, 119, 204, 0.25);\n}\n.message-text[data-v-1459079f] {\n margin-bottom: 6px;\n\n font-size: 14px;\n line-height: 1.6;\n color: #262626;\n overflow-wrap: break-word;\n}\n.message-item.is-self .message-text[data-v-1459079f] {\n color: white;\n}\n\n/* 图片消息 */\n.message-image[data-v-1459079f] {\n margin-bottom: 6px;\n}\n.message-image img[data-v-1459079f] {\n cursor: pointer;\n\n max-width: 300px;\n max-height: 300px;\n border-radius: 8px;\n\n object-fit: cover;\n\n transition: transform 0.2s;\n}\n.message-image img[data-v-1459079f]:hover {\n transform: scale(1.02);\n}\n\n/* 表情消息 */\n.message-emoji[data-v-1459079f] {\n display: flex;\n align-items: center;\n justify-content: center;\n\n min-height: 60px;\n margin-bottom: 6px;\n\n font-size: 48px;\n line-height: 1;\n}\n\n/* 文件消息 */\n.message-file[data-v-1459079f] {\n margin-bottom: 6px;\n}\n.file-link[data-v-1459079f] {\n display: inline-flex;\n gap: 8px;\n align-items: center;\n\n padding: 12px 16px;\n border-radius: 8px;\n\n font-size: 14px;\n font-weight: 500;\n color: #262626;\n text-decoration: none;\n\n background-color: #f5f5f5;\n\n transition: all 0.2s;\n}\n.file-link[data-v-1459079f]:hover {\n color: #0e77cc;\n background-color: #e8e8e8;\n}\n.is-self .file-link[data-v-1459079f] {\n color: white;\n background-color: rgba(255, 255, 255, 0.2);\n}\n.is-self .file-link[data-v-1459079f]:hover {\n background-color: rgba(255, 255, 255, 0.3);\n}\n\n/* 系统通知 */\n.message-system[data-v-1459079f] {\n margin-bottom: 6px;\n padding: 8px 12px;\n border-left: 3px solid #0e77cc;\n border-radius: 6px;\n\n font-size: 13px;\n color: #8c8c8c;\n text-align: center;\n\n background-color: #f5f5f5;\n}\n.is-self .message-system[data-v-1459079f] {\n border-left-color: white;\n color: rgba(255, 255, 255, 0.9);\n background-color: rgba(255, 255, 255, 0.2);\n}\n\n/* 卡片消息 */\n.message-card[data-v-1459079f] {\n margin-bottom: 6px;\n padding: 12px;\n border: 1px solid #bae6fd;\n border-radius: 8px;\n\n background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%);\n}\n.is-self .message-card[data-v-1459079f] {\n border-color: rgba(255, 255, 255, 0.3);\n background: rgba(255, 255, 255, 0.2);\n}\n.message-time[data-v-1459079f] {\n font-size: 11px;\n color: #8c8c8c;\n}\n.message-item.is-self .message-time[data-v-1459079f] {\n color: rgba(255, 255, 255, 0.75);\n}\n.input-area[data-v-1459079f] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n\n padding: 16px 20px;\n border-top: 1px solid #e8e8e8;\n\n background: white;\n box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.04);\n}\n\n/* 工具栏 */\n.input-toolbar[data-v-1459079f] {\n display: flex;\n gap: 8px;\n padding: 4px 0;\n}\n.tool-btn[data-v-1459079f] {\n cursor: pointer;\n\n display: inline-flex;\n gap: 6px;\n align-items: center;\n\n padding: 8px 14px;\n border: 1.5px solid #e8e8e8;\n border-radius: 8px;\n\n font-size: 13px;\n font-weight: 500;\n color: #595959;\n\n background: white;\n outline: none;\n\n transition: all 0.2s;\n}\n.tool-btn[data-v-1459079f]:hover:not(:disabled) {\n border-color: #0e77cc;\n color: #0e77cc;\n background: #f0f9ff;\n}\n.tool-btn[data-v-1459079f]:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n background: #f5f5f5;\n}\n.tool-btn-text[data-v-1459079f] {\n font-size: 13px;\n}\n.tool-btn-icon[data-v-1459079f] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n width: 18px;\n height: 18px;\n}\n.tool-btn-svg[data-v-1459079f] {\n width: 18px;\n height: 18px;\n}\n.image-btn[data-v-1459079f] {\n border-color: #d9d9d9;\n}\n.emoji-container[data-v-1459079f] {\n position: relative;\n}\n.quick-reply-container[data-v-1459079f] {\n position: relative;\n}\n.quick-reply-trigger[data-v-1459079f] {\n border-color: #d9d9d9;\n}\n.quick-reply-trigger.active[data-v-1459079f] {\n border-color: #0e77cc;\n color: #0e77cc;\n background: #f0f9ff;\n}\n.quick-reply-panel[data-v-1459079f] {\n position: absolute;\n z-index: 1001;\n bottom: calc(100% + 8px);\n left: 0;\n\n overflow: hidden;\n\n width: 320px;\n max-width: min(320px, calc(100vw - 80px));\n border: 1px solid #e8e8e8;\n border-radius: 10px;\n\n background: #fff;\n box-shadow: 0 8px 30px rgba(0, 0, 0, 0.12);\n}\n.quick-reply-search[data-v-1459079f] {\n padding: 10px;\n border-bottom: 1px solid #f0f0f0;\n}\n.quick-reply-search input[data-v-1459079f] {\n width: 100%;\n height: 34px;\n padding: 0 10px;\n border: 1px solid #d9d9d9;\n border-radius: 8px;\n\n font-size: 13px;\n color: #595959;\n\n background: #fff;\n outline: none;\n}\n.quick-reply-search input[data-v-1459079f]:focus {\n border-color: #0e77cc;\n box-shadow: 0 0 0 2px rgba(14, 119, 204, 0.08);\n}\n.quick-reply-list[data-v-1459079f] {\n overflow-y: auto;\n max-height: 220px;\n padding: 8px;\n}\n.quick-reply-item[data-v-1459079f] {\n cursor: pointer;\n\n width: 100%;\n margin-bottom: 6px;\n padding: 8px 10px;\n border: 1px solid transparent;\n border-radius: 8px;\n\n font-size: 13px;\n line-height: 1.45;\n color: #595959;\n text-align: left;\n\n background: #f7f8fa;\n}\n.quick-reply-item[data-v-1459079f]:last-child {\n margin-bottom: 0;\n}\n.quick-reply-item[data-v-1459079f]:hover {\n border-color: #b6dcfa;\n color: #0e77cc;\n background: #f0f9ff;\n}\n.quick-reply-empty[data-v-1459079f] {\n padding: 18px 10px;\n font-size: 12px;\n color: #bfbfbf;\n text-align: center;\n}\n.emoji-picker-wrapper[data-v-1459079f] {\n position: absolute;\n z-index: 1000;\n bottom: 100%;\n left: 0;\n\n overflow: hidden;\n\n margin-bottom: 8px;\n border-radius: 8px;\n\n box-shadow: 0 8px 30px rgba(0, 0, 0, 0.15);\n}\n.input-area textarea[data-v-1459079f] {\n resize: none;\n\n width: 100%;\n padding: 12px 14px;\n border: 1.5px solid #e8e8e8;\n border-radius: 8px;\n\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n font-size: 14px;\n line-height: 1.5;\n\n background: #fafafa;\n outline: none;\n\n transition: all 0.2s;\n}\n.input-area textarea[data-v-1459079f]:focus {\n border-color: #0e77cc;\n background: white;\n box-shadow: 0 0 0 3px rgba(14, 119, 204, 0.08);\n}\n.input-area textarea[data-v-1459079f]::placeholder {\n color: #bfbfbf;\n}\n.input-actions[data-v-1459079f] {\n display: flex;\n justify-content: flex-end;\n}\n.send-btn[data-v-1459079f] {\n cursor: pointer;\n\n padding: 10px 28px;\n border: none;\n border-radius: 8px;\n\n font-size: 14px;\n font-weight: 500;\n color: white;\n letter-spacing: 0.3px;\n\n background: linear-gradient(135deg, #0e77cc 0%, #0d6db8 100%);\n box-shadow: 0 2px 6px rgba(14, 119, 204, 0.25);\n\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.send-btn[data-v-1459079f]:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(14, 119, 204, 0.35);\n}\n.send-btn[data-v-1459079f]:active {\n transform: translateY(0);\n box-shadow: 0 2px 6px rgba(14, 119, 204, 0.25);\n}\n\n.conversation-list[data-v-d070a051] {\n overflow-y: auto;\n display: flex;\n flex: 1;\n flex-direction: column;\n\n background: #fff;\n}\n\n/* 自定义滚动条 */\n.conversation-list[data-v-d070a051]::-webkit-scrollbar {\n width: 6px;\n}\n.conversation-list[data-v-d070a051]::-webkit-scrollbar-track {\n background: transparent;\n}\n.conversation-list[data-v-d070a051]::-webkit-scrollbar-thumb {\n border-radius: 3px;\n background: #d9d9d9;\n}\n.conversation-list[data-v-d070a051]::-webkit-scrollbar-thumb:hover {\n background: #bfbfbf;\n}\n.unread-header[data-v-d070a051] {\n padding: 8px 20px;\n border-bottom: 1px solid #e8e8e8;\n background: linear-gradient(180deg, #fafafa 0%, #fff 100%);\n}\n.unread-count[data-v-d070a051] {\n font-size: 15px;\n font-weight: 600;\n color: #262626;\n letter-spacing: 0.3px;\n}\n.loading-state[data-v-d070a051] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n padding: 60px 20px;\n\n color: #bfbfbf;\n}\n.loading-spinner[data-v-d070a051] {\n width: 40px;\n height: 40px;\n margin-bottom: 16px;\n border: 3px solid #f0f0f0;\n border-top: 3px solid #0e77cc;\n border-radius: 50%;\n\n animation: spin-d070a051 0.8s linear infinite;\n}\n@keyframes spin-d070a051 {\n0% { transform: rotate(0deg);\n}\n100% { transform: rotate(360deg);\n}\n}\n.empty-state[data-v-d070a051] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n height: 100%;\n padding: 40px 20px;\n\n color: #bfbfbf;\n}\n.empty-icon[data-v-d070a051] {\n width: 64px;\n height: 64px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n.empty-state p[data-v-d070a051] {\n margin: 0;\n font-size: 14px;\n font-weight: 400;\n}\n.conversation-item[data-v-d070a051] {\n cursor: pointer;\n\n position: relative;\n\n padding: 12px 16px;\n border-bottom: 1px solid #f0f0f0;\n\n background: white;\n\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.conversation-item[data-v-d070a051]:hover {\n background-color: #f5f7fa;\n}\n.conversation-item.active[data-v-d070a051] {\n padding-left: 13px;\n border-left: 3px solid #0e77cc;\n background: linear-gradient(90deg, #ecf5ff 0%, #fff 100%);\n}\n.conversation-item[data-v-d070a051]:last-child {\n border-bottom: none;\n}\n\n/* 会话项内容布局 */\n.conversation-item-content[data-v-d070a051] {\n display: flex;\n gap: 12px;\n align-items: center;\n width: 100%;\n}\n.avatar-wrapper[data-v-d070a051] {\n position: relative;\n flex-shrink: 0;\n width: 44px;\n height: 44px;\n}\n.avatar-img[data-v-d070a051] {\n width: 100%;\n height: 100%;\n border: 2px solid white;\n border-radius: 50%;\n\n object-fit: cover;\n background: linear-gradient(135deg, #f0f0f0 0%, #e8e8e8 100%);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n.avatar-text[data-v-d070a051] {\n position: absolute;\n top: 0;\n left: 0;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 44px;\n height: 44px;\n border: 2px solid white;\n border-radius: 50%;\n\n font-size: 16px;\n font-weight: 600;\n color: white;\n\n background: linear-gradient(135deg, #0e77cc 0%, #0d6db8 100%);\n box-shadow: 0 2px 8px rgba(14, 119, 204, 0.3);\n}\n.session-info[data-v-d070a051] {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: 4px;\n justify-content: center;\n\n min-width: 0;\n}\n.session-name[data-v-d070a051] {\n font-size: 14px;\n font-weight: 600;\n color: #262626;\n letter-spacing: 0.2px;\n}\n.content-text[data-v-d070a051] {\n overflow: hidden;\n display: block;\n\n font-size: 13px;\n line-height: 1.4;\n color: #595959;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.session-meta[data-v-d070a051] {\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n gap: 6px;\n align-items: flex-end;\n}\n.session-time[data-v-d070a051] {\n font-size: 12px;\n font-weight: 400;\n color: #8c8c8c;\n}\n.unread-badge[data-v-d070a051] {\n display: flex;\n align-items: center;\n justify-content: center;\n\n min-width: 20px;\n height: 20px;\n margin-left: 8px;\n padding: 0 7px;\n border-radius: 10px;\n\n font-size: 12px;\n font-weight: 600;\n color: white;\n\n background: linear-gradient(135deg, #ff4d4f 0%, #ff7875 100%);\n box-shadow: 0 2px 6px rgba(255, 77, 79, 0.3);\n\n animation: pulse-d070a051 2s ease-in-out infinite;\n}\n@keyframes pulse-d070a051 {\n0%, 100% {\n transform: scale(1);\n}\n50% {\n transform: scale(1.05);\n}\n}\n\n.chat-window[data-v-00d50ef7] {\n position: fixed;\n z-index: 9998;\n\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n min-width: 380px;\n min-height: 360px;\n border: 1px solid rgba(9, 62, 105, 0.14);\n border-radius: 18px;\n\n background: linear-gradient(180deg, #fff 0%, #f9fcff 100%);\n backdrop-filter: blur(6px);\n box-shadow: 0 24px 80px rgba(11, 58, 106, 0.24);\n\n animation: window-enter-00d50ef7 0.22s ease-out;\n}\n.chat-window.is-dragging[data-v-00d50ef7] {\n cursor: move;\n box-shadow: 0 28px 88px rgba(11, 58, 106, 0.28);\n}\n.chat-window.is-resizing[data-v-00d50ef7] {\n cursor: nwse-resize;\n}\n.chat-header[data-v-00d50ef7] {\n cursor: move;\n user-select: none;\n\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between;\n\n padding: 10px 20px;\n\n color: white;\n\n background: linear-gradient(135deg, #0f83df 0%, #0e6fbe 62%, #0c5fa5 100%);\n box-shadow: 0 2px 12px rgba(14, 119, 204, 0.26);\n}\n\n/* 用户信息区域 */\n.user-info-section[data-v-00d50ef7] {\n display: flex;\n flex: 1;\n gap: 12px;\n align-items: center;\n}\n.user-avatar-wrapper[data-v-00d50ef7] {\n position: relative;\n flex-shrink: 0;\n width: 40px;\n height: 40px;\n}\n.user-avatar[data-v-00d50ef7] {\n width: 100%;\n height: 100%;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-radius: 50%;\n\n object-fit: cover;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n}\n.user-avatar-default[data-v-00d50ef7] {\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 40px;\n height: 40px;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-radius: 50%;\n\n font-size: 16px;\n font-weight: 600;\n color: white;\n\n background: linear-gradient(135deg, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.1) 100%);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n}\n.status-indicator[data-v-00d50ef7] {\n cursor: pointer;\n\n position: absolute;\n right: -2px;\n bottom: -2px;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 14px;\n height: 14px;\n border: 2px solid white;\n border-radius: 50%;\n\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);\n\n transition: transform 0.2s;\n}\n.status-indicator[data-v-00d50ef7]:hover {\n transform: scale(1.15);\n}\n.status-indicator svg[data-v-00d50ef7] {\n width: 8px;\n height: 8px;\n}\n\n/* 状态下拉菜单 */\n.status-dropdown[data-v-00d50ef7] {\n position: absolute;\n z-index: 100;\n top: 100%;\n left: 0;\n\n min-width: 120px;\n margin-top: 8px;\n padding: 6px;\n border: 1px solid #dbe7f5;\n border-radius: 10px;\n\n background: white;\n box-shadow: 0 12px 30px rgba(11, 58, 106, 0.18);\n}\n.status-option[data-v-00d50ef7] {\n cursor: pointer;\n\n display: flex;\n gap: 8px;\n align-items: center;\n\n padding: 8px 10px;\n border-radius: 6px;\n\n color: #262626;\n\n transition: all 0.2s;\n}\n.status-option[data-v-00d50ef7]:hover {\n background: #f5f5f5;\n}\n.status-option.active[data-v-00d50ef7] {\n color: #0e77cc;\n background: #e6f7ff;\n}\n.status-dot[data-v-00d50ef7] {\n flex-shrink: 0;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n}\n.status-option span[data-v-00d50ef7] {\n flex: 1;\n font-size: 13px;\n}\n.check-icon[data-v-00d50ef7] {\n width: 16px;\n height: 16px;\n opacity: 0.8;\n}\n.user-details[data-v-00d50ef7] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n.user-name[data-v-00d50ef7] {\n font-size: 14px;\n font-weight: 600;\n letter-spacing: 0.2px;\n}\n.user-status[data-v-00d50ef7] {\n font-size: 12px;\n font-weight: 400;\n opacity: 0.9;\n}\n.close-btn[data-v-00d50ef7] {\n cursor: pointer;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 32px;\n height: 32px;\n border: none;\n border-radius: 8px;\n\n font-size: 28px;\n line-height: 1;\n color: white;\n\n opacity: 0.8;\n background: none;\n\n transition: all 0.2s;\n}\n.close-btn[data-v-00d50ef7]:hover {\n transform: rotate(90deg);\n opacity: 1;\n background: rgba(255, 255, 255, 0.15);\n}\n.close-btn[data-v-00d50ef7]:active {\n transform: rotate(90deg) scale(0.95);\n}\n.chat-body[data-v-00d50ef7] {\n overflow: hidden;\n display: flex;\n flex: 1;\n\n min-height: 0;\n\n background: linear-gradient(180deg, #fbfdff 0%, #f4f8fc 100%);\n}\n\n/* 第一栏:一级菜单 */\n.first-sidebar[data-v-00d50ef7] {\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n\n width: 76px;\n padding: 0;\n border-right: 1px solid #dce8f3;\n\n background: linear-gradient(180deg, #f5f9ff 0%, #f0f6fd 100%);\n}\n.menu-items-container[data-v-00d50ef7] {\n display: flex;\n flex: 1;\n flex-direction: column;\n align-items: center;\n\n padding: 18px 0;\n}\n.menu-item[data-v-00d50ef7] {\n cursor: pointer;\n\n position: relative;\n\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n\n width: 50px;\n height: 50px;\n margin-bottom: 12px;\n border: 1px solid transparent;\n border-radius: 12px;\n\n font-weight: 400;\n color: #7d8fa3;\n\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.menu-item[data-v-00d50ef7]:last-child {\n margin-bottom: 0;\n}\n.menu-item[data-v-00d50ef7]:hover {\n transform: translateY(-1px);\n border-color: #d2e3f3;\n color: #0e77cc;\n background: #f7fbff;\n}\n.menu-item.active[data-v-00d50ef7] {\n border-color: #0e77cc;\n color: white;\n background: linear-gradient(135deg, #0f83df 0%, #0d6db8 100%);\n box-shadow: 0 8px 20px rgba(14, 119, 204, 0.35);\n}\n.menu-item.active[data-v-00d50ef7]::before {\n content: '';\n\n position: absolute;\n top: 50%;\n left: -11px;\n transform: translateY(-50%);\n\n width: 3px;\n height: 24px;\n border-radius: 2px;\n\n background: #0e77cc;\n}\n.menu-item .icon[data-v-00d50ef7] {\n width: 23px;\n height: 23px;\n}\n.menu-item .label[data-v-00d50ef7] {\n display: none;\n}\n.menu-item .menu-badge[data-v-00d50ef7] {\n position: absolute;\n top: 6px;\n right: 6px;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n min-width: 16px;\n height: 16px;\n padding: 0 5px;\n border: 2px solid white;\n border-radius: 8px;\n\n font-size: 10px;\n font-weight: 600;\n line-height: 1;\n color: white;\n\n background: linear-gradient(135deg, #ff4d4f 0%, #ff7875 100%);\n box-shadow: 0 2px 6px rgba(255, 77, 79, 0.4);\n}\n.menu-item.active .menu-badge[data-v-00d50ef7] {\n border-color: #0e77cc;\n color: #ff4d4f;\n background: linear-gradient(135deg, #fff 0%, #f0f0f0 100%);\n}\n\n/* 第二栏:二级侧边栏 */\n.second-sidebar[data-v-00d50ef7] {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n\n width: 250px;\n border-right: 1px solid #dce8f3;\n\n background: linear-gradient(180deg, #fff 0%, #fbfdff 100%);\n}\n\n/* 第三栏:聊天区域 */\n.chat-area[data-v-00d50ef7] {\n overflow: hidden;\n display: flex;\n flex: 1;\n flex-direction: column;\n\n min-width: 0;\n\n background: radial-gradient(circle at top right, rgba(14, 119, 204, 0.08) 0%, rgba(255, 255, 255, 0) 42%), #fff;\n}\n.empty-chat[data-v-00d50ef7] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n height: 100%;\n\n color: #8ca1b8;\n\n background: linear-gradient(180deg, #f7fbff 0%, #fff 100%);\n}\n.empty-chat .empty-icon[data-v-00d50ef7] {\n width: 72px;\n height: 72px;\n margin-bottom: 18px;\n\n opacity: 0.5;\n filter: drop-shadow(0 8px 20px rgba(11, 58, 106, 0.16));\n}\n.empty-chat p[data-v-00d50ef7] {\n margin: 0;\n font-size: 15px;\n font-weight: 500;\n letter-spacing: 0.3px;\n}\n\n/* 拉伸手柄 */\n.resize-handle[data-v-00d50ef7] {\n cursor: nwse-resize;\n\n position: absolute;\n z-index: 9999;\n right: 0;\n bottom: 0;\n\n width: 24px;\n height: 24px;\n\n opacity: 0.5;\n\n transition: opacity 0.2s;\n}\n.resize-handle[data-v-00d50ef7]:hover {\n opacity: 1;\n}\n.resize-handle[data-v-00d50ef7]::after {\n content: '';\n\n position: absolute;\n right: 6px;\n bottom: 6px;\n\n width: 0;\n height: 0;\n border-top: 10px solid transparent;\n border-right: 10px solid #0e77cc;\n border-bottom: 10px solid #0e77cc;\n border-left: 10px solid transparent;\n\n opacity: 0.6;\n filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1));\n}\n@keyframes window-enter-00d50ef7 {\nfrom {\n transform: translate3d(0, 16px, 0) scale(0.98);\n opacity: 0;\n}\nto {\n transform: translate3d(0, 0, 0) scale(1);\n opacity: 1;\n}\n}\n@media (width <= 960px) {\n.second-sidebar[data-v-00d50ef7] {\n width: 220px;\n}\n}\n\n.float-button[data-v-a60f9c33] {\n touch-action: none;\n cursor: grab;\n user-select: none;\n\n position: fixed;\n z-index: 9999;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 64px;\n height: 64px;\n border: 1px solid #0e77cc;\n border-radius: 50%;\n\n background: #fff;\n box-shadow: 0 4px 20px rgba(14, 119, 204, 0.3);\n\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.float-button.is-hidden[data-v-a60f9c33] {\n pointer-events: none;\n transform: scale(0.88);\n opacity: 0;\n}\n.float-button[data-v-a60f9c33]:hover {\n transform: translateY(-2px);\n box-shadow: 0 6px 30px rgba(14, 119, 204, 0.4);\n}\n.float-button[data-v-a60f9c33]:active {\n transform: translateY(0) scale(0.95);\n}\n.float-button.is-dragging[data-v-a60f9c33] {\n cursor: grabbing;\n transform: scale(1.08);\n box-shadow: 0 8px 35px rgba(14, 119, 204, 0.35);\n}\n.float-button .icon[data-v-a60f9c33] {\n pointer-events: none;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 32px;\n height: 32px;\n\n filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1));\n}\n.float-button .icon img[data-v-a60f9c33] {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n.float-button .badge[data-v-a60f9c33] {\n pointer-events: none;\n\n position: absolute;\n top: 4px;\n right: 4px;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n border: 2.5px solid white;\n border-radius: 10px;\n\n font-size: 11px;\n font-weight: 600;\n line-height: 1;\n color: white;\n\n background: linear-gradient(135deg, #ff4d4f 0%, #ff7875 100%);\n box-shadow: 0 2px 8px rgba(255, 77, 79, 0.4);\n}\n.float-button.has-unread[data-v-a60f9c33] {\n animation: pulse-a60f9c33 2s ease-in-out infinite;\n}\n@keyframes pulse-a60f9c33 {\n0%, 100% {\n box-shadow: 0 4px 20px rgba(14, 119, 204, 0.3),\n 0 0 0 0 rgba(255, 77, 79, 0.4);\n}\n50% {\n box-shadow: 0 4px 20px rgba(14, 119, 204, 0.3),\n 0 0 0 12px rgba(255, 77, 79, 0);\n}\n}\n/*$vite$:1*/"
1
+ const __SHARED_IMSDK_CSS__ = ".confirm-dialog-mask[data-v-69eaf313] {\n position: fixed;\n z-index: 12000;\n inset: 0;\n\n background: rgba(15, 23, 42, 0.35);\n backdrop-filter: blur(2px);\n}\n.confirm-dialog[data-v-69eaf313] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n width: min(420px, calc(100vw - 32px));\n border: 1px solid #e8edf4;\n border-radius: 12px;\n\n background: #fff;\n box-shadow: 0 18px 48px rgba(15, 23, 42, 0.22);\n}\n.confirm-dialog-header[data-v-69eaf313] {\n padding: 16px 18px 8px;\n}\n.confirm-dialog-title[data-v-69eaf313] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #1f2937;\n}\n.confirm-dialog-body[data-v-69eaf313] {\n padding: 0 18px 10px;\n}\n.confirm-dialog-message[data-v-69eaf313] {\n margin: 0;\n font-size: 14px;\n line-height: 1.55;\n color: #4b5563;\n}\n.confirm-dialog-error[data-v-69eaf313] {\n margin: 10px 0 0;\n font-size: 13px;\n line-height: 1.45;\n color: #cf1322;\n}\n.confirm-dialog-footer[data-v-69eaf313] {\n display: flex;\n gap: 10px;\n justify-content: flex-end;\n padding: 14px 18px 18px;\n}\n.dialog-btn[data-v-69eaf313] {\n cursor: pointer;\n\n min-width: 80px;\n height: 34px;\n padding: 0 14px;\n border: 1px solid transparent;\n border-radius: 8px;\n\n font-size: 14px;\n\n transition: all 0.2s ease;\n}\n.dialog-btn[data-v-69eaf313]:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n.cancel-btn[data-v-69eaf313] {\n border-color: #d9d9d9;\n color: #595959;\n background: #fff;\n}\n.cancel-btn[data-v-69eaf313]:hover:not(:disabled) {\n border-color: #bfbfbf;\n color: #262626;\n background: #fafafa;\n}\n.confirm-btn[data-v-69eaf313] {\n border-color: #0e77cc;\n color: #fff;\n background: linear-gradient(135deg, #0e77cc 0%, #0d6db8 100%);\n}\n.confirm-btn[data-v-69eaf313]:hover:not(:disabled) {\n border-color: #0d6db8;\n filter: brightness(1.03);\n}\n.v3-body-inner{scroll-behavior:smooth;scrollbar-color:#393d3f rgba(0,0,0,.1);scrollbar-width:thin}.v3-body-inner::-webkit-scrollbar{width:8px}.v3-body-inner::-webkit-scrollbar-track{background-color:transparent}.v3-body-inner::-webkit-scrollbar-thumb{display:none;background:rgba(0,0,0,.3);border-radius:5px}.v3-body-inner:hover::-webkit-scrollbar-thumb{display:block}.v3-emoji-picker{height:320px;width:280px;box-shadow:0 2px 10px #0003;border-radius:10px;margin:0 auto;box-sizing:border-box;display:flex;flex-direction:column;text-align:left}.v3-emoji-picker *{box-sizing:border-box}.v3-emoji-picker .v3-header{padding:15px 15px 13px;border-bottom:1px solid}.v3-emoji-picker .v3-header .v3-groups{display:flex}.v3-emoji-picker .v3-header .v3-groups .v3-group{flex-grow:1;padding:0;margin:0;border:none;background:none;font-size:23px;cursor:pointer;position:relative;display:block;opacity:.7;transition:.2s}.v3-emoji-picker .v3-header .v3-groups .v3-group.v3-is-hidden{display:none}.v3-emoji-picker .v3-header .v3-groups .v3-group:first-child,.v3-emoji-picker .v3-header .v3-groups .v3-group:last-child{flex-grow:0}.v3-emoji-picker .v3-header .v3-groups .v3-group:hover{opacity:1}.v3-emoji-picker .v3-header .v3-groups .v3-group span{display:flex;align-items:center;justify-content:center}.v3-emoji-picker .v3-header .v3-groups .v3-group span img{display:block;width:1em;height:auto}.v3-emoji-picker .v3-spacing{height:11px}.v3-emoji-picker .v3-search input{width:100%;display:block;height:26px;padding:0 10px;border:1px solid;border-radius:3px;font-size:12px;transition:.2s}.v3-emoji-picker .v3-search input:focus{outline:none}.v3-emoji-picker .v3-body{padding:0 0 15px 11px;min-height:0;flex-grow:1}.v3-emoji-picker .v3-body .v3-body-inner{flex-grow:1;min-height:0;overflow-y:auto;overflow-x:hidden;height:100%;padding-right:11px}.v3-emoji-picker .v3-body .v3-body-inner .v3-group h5{margin:0;top:0;padding:7px 0 3px 4px;z-index:2}.v3-emoji-picker .v3-body .v3-body-inner .v3-group h5.v3-sticky{position:sticky}.v3-emoji-picker .v3-body .v3-body-inner .v3-group .v3-emojis{display:flex;font-size:18px;flex-wrap:wrap}.v3-emoji-picker .v3-body .v3-body-inner .v3-group .v3-emojis button{cursor:pointer;border:none;background:none;margin:0;text-align:center;display:flex;align-items:center;justify-content:center;flex-basis:12.5%;max-width:12.5%;flex-grow:1;padding:0;font-size:22px;position:relative}.v3-emoji-picker .v3-body .v3-body-inner .v3-group .v3-emojis button:after{content:\"\";width:100%;padding-bottom:100%}.v3-emoji-picker .v3-body .v3-body-inner .v3-group .v3-emojis button span{display:flex;align-items:center;justify-content:center}.v3-emoji-picker .v3-body .v3-body-inner .v3-group .v3-emojis button img{max-width:100%;padding:4px}.v3-emoji-picker .v3-body .v3-body-inner .v3-group .v3-emojis button span,.v3-emoji-picker .v3-body .v3-body-inner .v3-group .v3-emojis button img{position:absolute;top:0;left:0;width:100%;height:100%}.v3-emoji-picker .v3-body .v3-body-inner.is-mac .v3-emojis button{font-family:\"Apple Color Emoji\"}.v3-emoji-picker .v3-footer{font-size:14px;border-top:1px solid #dddddd;padding:15px;display:flex;align-items:center;justify-content:space-between;position:relative}.v3-emoji-picker .v3-footer .v3-tone,.v3-emoji-picker .v3-footer .v3-foot-left{display:flex;align-items:center}.v3-emoji-picker .v3-footer .v3-tone img,.v3-emoji-picker .v3-footer .v3-foot-left img{width:20px;display:block}.v3-emoji-picker .v3-footer .v3-tone>span:first-child,.v3-emoji-picker .v3-footer .v3-foot-left>span:first-child{margin-right:6px}.v3-emoji-picker .v3-footer .v3-foot-left>span.v3-text{max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v3-emoji-picker .v3-footer .v3-tone{border:none;padding:0;background:none;cursor:pointer;display:inline-flex;align-items:center}.v3-emoji-picker .v3-footer .v3-tone>span{display:inline-flex;vertical-align:top}.v3-emoji-picker .v3-footer .v3-tone .v3-text{font-size:13px}.v3-emoji-picker .v3-footer .v3-tone .v3-icon{display:inline-flex;height:15px;width:15px;vertical-align:middle;align-self:center;border:2px solid rgba(0,0,0,.2)}.v3-emoji-picker .v3-footer .v3-tone .v3-icon.v3-tone-neutral{background-color:#ffd225}.v3-emoji-picker .v3-footer .v3-tone .v3-icon.v3-tone-1f3fb{background-color:#ffdfbd}.v3-emoji-picker .v3-footer .v3-tone .v3-icon.v3-tone-1f3fc{background-color:#e9c197}.v3-emoji-picker .v3-footer .v3-tone .v3-icon.v3-tone-1f3fd{background-color:#c88e62}.v3-emoji-picker .v3-footer .v3-tone .v3-icon.v3-tone-1f3fe{background-color:#a86637}.v3-emoji-picker .v3-footer .v3-tone .v3-icon.v3-tone-1f3ff{background-color:#60463a}.v3-emoji-picker .v3-footer .v3-tone .is-mac span{font-family:\"Apple Color Emoji\"}.v3-skin-tones{position:absolute;height:100%;width:60%;top:0;left:0;display:flex;align-items:center;justify-content:flex-end;padding:0 15px;opacity:0;visibility:hidden;transition:.2s;border-radius:0 0 10px 10px}.v3-skin-tones.v3-is-open{opacity:1;visibility:visible}.v3-skin-tones .v3-skin-tone{display:inline-block;height:15px;width:25px;border:none;padding:0;cursor:pointer;transition:0ms}.v3-skin-tones .v3-skin-tone:hover{transform:scale(1.1);transition:.2s}.v3-skin-tones .v3-skin-tone-neutral{color:#ffd225;background-color:#ffd225}.v3-skin-tones .v3-skin-tone-1f3fb{color:#ffdfbd;background-color:#ffdfbd}.v3-skin-tones .v3-skin-tone-1f3fc{color:#e9c197;background-color:#e9c197}.v3-skin-tones .v3-skin-tone-1f3fd{color:#c88e62;background-color:#c88e62}.v3-skin-tones .v3-skin-tone-1f3fe{color:#a86637;background-color:#a86637}.v3-skin-tones .v3-skin-tone-1f3ff{color:#60463a;background-color:#60463a}.v3-input-emoji-picker *{box-sizing:border-box}.v3-input-emoji-picker .v3-input-picker-root{position:relative}.v3-input-emoji-picker .v3-input-picker-root .v3-emoji-picker-input,.v3-input-emoji-picker .v3-input-picker-root .v3-emoji-picker-textarea{width:100%;height:40px;border:1px solid #999;padding-left:15px}.v3-input-emoji-picker .v3-input-picker-root .v3-emoji-picker-textarea{min-height:80px;resize:vertical}.v3-input-emoji-picker .v3-input-picker-root .v3-emoji-picker-textarea+.v3-input-picker-wrap .v3-input-picker-icon{top:auto;bottom:5px}.v3-input-emoji-picker .v3-input-picker-root .v3-input-picker-wrap .v3-input-picker-icon{display:inline-flex;position:absolute;right:5px;top:50%;transform:translateY(-50%);font-size:24px;border:none;background:none;padding:0 5px;cursor:pointer}.v3-input-emoji-picker .v3-input-picker-root .v3-input-picker-wrap .v3-input-picker-icon img{display:block;width:1em;height:1em}.v3-input-emoji-picker .v3-input-picker-root .v3-input-picker-wrap .v3-emoji-picker{opacity:0;visibility:hidden;transition:.2s}.v3-input-emoji-picker .v3-input-picker-root .v3-input-picker-wrap.v3-picker-is-open .v3-emoji-picker{opacity:1;visibility:visible;z-index:999}.v3-emoji-picker{--v3-picker-bg: #ffffff;--v3-picker-fg: #000000;--v3-picker-border: #dddddd;--v3-picker-input-bg: var(--v3-picker-bg);--v3-picker-input-border: #cccccc;--v3-picker-input-focus-border: #000000;--v3-group-image-filter: none;--v3-picker-emoji-hover: #f7f7f7;background:var(--v3-picker-bg);color:var(--v3-picker-fg)}.v3-emoji-picker .v3-footer,.v3-emoji-picker .v3-header{border-color:var(--v3-picker-border)}.v3-emoji-picker .v3-groups{filter:var(--v3-group-image-filter)}.v3-emoji-picker .v3-tone{color:var(--v3-picker-fg)}.v3-emoji-picker .v3-search input{background:var(--v3-picker-input-bg);border-color:var(--v3-picker-input-border);color:inherit}.v3-emoji-picker .v3-search input:focus{border-color:var(--v3-picker-input-focus-border)}.v3-emoji-picker .v3-body .v3-body-inner .v3-group h5,.v3-emoji-picker .v3-skin-tones{background:var(--v3-picker-bg)}.v3-emoji-picker .v3-body .v3-body-inner .v3-group .v3-emojis button:hover{background:var(--v3-picker-emoji-hover, #f7f7f7)}@media (prefers-color-scheme: dark){.v3-emoji-picker.v3-color-theme-auto{--v3-picker-bg: #000000;--v3-picker-fg: #ffffff;--v3-picker-border: #333333;--v3-picker-input-bg: #222222;--v3-picker-input-border: #444444;--v3-picker-input-focus-border: #555555;--v3-group-image-filter: invert(1);--v3-picker-emoji-hover: #222222}}.v3-emoji-picker.v3-color-theme-dark{--v3-picker-bg: #000000;--v3-picker-fg: #ffffff;--v3-picker-border: #333333;--v3-picker-input-bg: #222222;--v3-picker-input-border: #444444;--v3-picker-input-focus-border: #555555;--v3-group-image-filter: invert(1);--v3-picker-emoji-hover: #222222}\n\n.chat-room[data-v-6f480f31] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #fff;\n}\n.chat-room-header[data-v-6f480f31] {\n display: flex;\n gap: 12px;\n align-items: center;\n\n padding: 8px 20px;\n border-bottom: 1px solid #e8e8e8;\n\n background: linear-gradient(180deg, #fff 0%, #fafafa 100%);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);\n}\n.back-btn[data-v-6f480f31] {\n cursor: pointer;\n\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n\n width: 36px;\n height: 36px;\n border: none;\n border-radius: 50%;\n\n font-size: 16px;\n color: #595959;\n\n background: #f0f0f0;\n\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.back-btn[data-v-6f480f31]:hover {\n transform: scale(1.05);\n color: #0e77cc;\n background: #e8e8e8;\n}\n.back-btn[data-v-6f480f31]:active {\n transform: scale(0.95);\n}\n.title[data-v-6f480f31] {\n display: flex;\n flex: 1;\n gap: 12px;\n align-items: center;\n}\n.header-actions[data-v-6f480f31] {\n display: flex;\n flex-shrink: 0;\n align-items: flex-end;\n}\n.end-session-btn[data-v-6f480f31] {\n cursor: pointer;\n\n min-width: 90px;\n height: 32px;\n padding: 0 12px;\n border: 1px solid #ffd6d6;\n border-radius: 16px;\n\n font-size: 13px;\n font-weight: 500;\n color: #d4380d;\n\n background: #fff2f0;\n\n transition: all 0.2s ease;\n}\n.end-session-btn[data-v-6f480f31]:hover:not(:disabled) {\n border-color: #ffb3ad;\n background: #ffe7e2;\n}\n.end-session-btn[data-v-6f480f31]:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n.avatar-wrapper[data-v-6f480f31] {\n position: relative;\n flex-shrink: 0;\n width: 42px;\n height: 42px;\n}\n.avatar-img[data-v-6f480f31] {\n width: 100%;\n height: 100%;\n border: 2px solid white;\n border-radius: 50%;\n\n object-fit: cover;\n background: linear-gradient(135deg, #f0f0f0 0%, #e8e8e8 100%);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n.avatar-text[data-v-6f480f31] {\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 42px;\n height: 42px;\n border: 2px solid white;\n border-radius: 50%;\n\n font-size: 16px;\n font-weight: 600;\n color: white;\n\n background: linear-gradient(135deg, #0e77cc 0%, #0d6db8 100%);\n box-shadow: 0 2px 8px rgba(14, 119, 204, 0.3);\n}\n.user-info[data-v-6f480f31] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n.name[data-v-6f480f31] {\n font-size: 15px;\n font-weight: 600;\n color: #262626;\n letter-spacing: 0.2px;\n}\n.messages[data-v-6f480f31] {\n position: relative;\n\n overflow-y: auto;\n flex: 1;\n\n padding: 24px 20px;\n\n background: linear-gradient(180deg, #f5f5f5 0%, #fafafa 100%);\n}\n\n/* 自定义滚动条 */\n.messages[data-v-6f480f31]::-webkit-scrollbar {\n width: 6px;\n}\n.messages[data-v-6f480f31]::-webkit-scrollbar-track {\n background: transparent;\n}\n.messages[data-v-6f480f31]::-webkit-scrollbar-thumb {\n border-radius: 3px;\n background: #d9d9d9;\n}\n.messages[data-v-6f480f31]::-webkit-scrollbar-thumb:hover {\n background: #bfbfbf;\n}\n.loading-more[data-v-6f480f31] {\n display: flex;\n gap: 8px;\n align-items: center;\n justify-content: center;\n\n padding: 16px;\n\n font-size: 13px;\n color: #8c8c8c;\n}\n.loading-spinner-small[data-v-6f480f31] {\n width: 20px;\n height: 20px;\n border: 2px solid #f0f0f0;\n border-top: 2px solid #0e77cc;\n border-radius: 50%;\n\n animation: spin-6f480f31 0.8s linear infinite;\n}\n.no-more[data-v-6f480f31] {\n padding: 12px;\n font-size: 12px;\n color: #bfbfbf;\n text-align: center;\n}\n.loading-state[data-v-6f480f31] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n padding: 60px 20px;\n\n color: #bfbfbf;\n}\n.loading-spinner[data-v-6f480f31] {\n width: 40px;\n height: 40px;\n margin-bottom: 16px;\n border: 3px solid #f0f0f0;\n border-top: 3px solid #0e77cc;\n border-radius: 50%;\n\n animation: spin-6f480f31 0.8s linear infinite;\n}\n@keyframes spin-6f480f31 {\n0% { transform: rotate(0deg);\n}\n100% { transform: rotate(360deg);\n}\n}\n.empty-messages[data-v-6f480f31] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n height: 100%;\n\n color: #bfbfbf;\n}\n.empty-messages .icon[data-v-6f480f31] {\n margin-bottom: 16px;\n font-size: 64px;\n opacity: 0.5;\n}\n.empty-messages p[data-v-6f480f31] {\n margin: 0;\n font-size: 14px;\n font-weight: 400;\n}\n.message-item[data-v-6f480f31] {\n display: flex;\n gap: 12px;\n margin-bottom: 24px;\n animation: slide-in-6f480f31 0.3s ease-out;\n}\n@keyframes slide-in-6f480f31 {\nfrom {\n transform: translateY(10px);\n opacity: 0;\n}\nto {\n transform: translateY(0);\n opacity: 1;\n}\n}\n.message-item.is-self[data-v-6f480f31] {\n justify-content: flex-end;\n}\n.msg-avatar-wrapper[data-v-6f480f31] {\n position: relative;\n flex-shrink: 0;\n width: 40px;\n height: 40px;\n}\n.msg-avatar-img[data-v-6f480f31] {\n width: 100%;\n height: 100%;\n border: 2px solid white;\n border-radius: 50%;\n\n object-fit: cover;\n background: linear-gradient(135deg, #f0f0f0 0%, #e8e8e8 100%);\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);\n}\n.msg-avatar[data-v-6f480f31] {\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 40px;\n height: 40px;\n border: 2px solid white;\n border-radius: 50%;\n\n font-size: 15px;\n font-weight: 600;\n color: white;\n\n background: linear-gradient(135deg, #0e77cc 0%, #0d6db8 100%);\n box-shadow: 0 2px 6px rgba(14, 119, 204, 0.3);\n}\n.message-content-wrapper[data-v-6f480f31] {\n display: flex;\n flex-direction: column;\n max-width: 65%;\n}\n.is-self .message-content-wrapper[data-v-6f480f31] {\n align-items: flex-end;\n}\n.message-sender[data-v-6f480f31] {\n margin-bottom: 6px;\n font-size: 12px;\n font-weight: 400;\n color: #8c8c8c;\n}\n.message-content[data-v-6f480f31] {\n padding: 12px 16px;\n border-radius: 12px;\n\n background-color: white;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n\n transition: all 0.2s;\n}\n.message-item.is-self .message-content[data-v-6f480f31] {\n color: white;\n background: linear-gradient(135deg, #0e77cc 0%, #0d6db8 100%);\n box-shadow: 0 2px 8px rgba(14, 119, 204, 0.25);\n}\n.message-text[data-v-6f480f31] {\n margin-bottom: 6px;\n\n font-size: 14px;\n line-height: 1.6;\n color: #262626;\n overflow-wrap: break-word;\n}\n.message-item.is-self .message-text[data-v-6f480f31] {\n color: white;\n}\n\n/* 图片消息 */\n.message-image[data-v-6f480f31] {\n margin-bottom: 6px;\n}\n.message-image img[data-v-6f480f31] {\n cursor: pointer;\n\n max-width: 300px;\n max-height: 300px;\n border-radius: 8px;\n\n object-fit: cover;\n\n transition: transform 0.2s;\n}\n.message-image img[data-v-6f480f31]:hover {\n transform: scale(1.02);\n}\n\n/* 表情消息 */\n.message-emoji[data-v-6f480f31] {\n display: flex;\n align-items: center;\n justify-content: center;\n\n min-height: 60px;\n margin-bottom: 6px;\n\n font-size: 48px;\n line-height: 1;\n}\n\n/* 文件消息 */\n.message-file[data-v-6f480f31] {\n margin-bottom: 6px;\n}\n.file-link[data-v-6f480f31] {\n display: inline-flex;\n gap: 8px;\n align-items: center;\n\n padding: 12px 16px;\n border-radius: 8px;\n\n font-size: 14px;\n font-weight: 500;\n color: #262626;\n text-decoration: none;\n\n background-color: #f5f5f5;\n\n transition: all 0.2s;\n}\n.file-link[data-v-6f480f31]:hover {\n color: #0e77cc;\n background-color: #e8e8e8;\n}\n.is-self .file-link[data-v-6f480f31] {\n color: white;\n background-color: rgba(255, 255, 255, 0.2);\n}\n.is-self .file-link[data-v-6f480f31]:hover {\n background-color: rgba(255, 255, 255, 0.3);\n}\n\n/* 系统通知 */\n.message-system[data-v-6f480f31] {\n margin-bottom: 6px;\n padding: 8px 12px;\n border-left: 3px solid #0e77cc;\n border-radius: 6px;\n\n font-size: 13px;\n color: #8c8c8c;\n text-align: center;\n\n background-color: #f5f5f5;\n}\n.is-self .message-system[data-v-6f480f31] {\n border-left-color: white;\n color: rgba(255, 255, 255, 0.9);\n background-color: rgba(255, 255, 255, 0.2);\n}\n\n/* 卡片消息 */\n.message-card[data-v-6f480f31] {\n margin-bottom: 6px;\n padding: 12px;\n border: 1px solid #bae6fd;\n border-radius: 8px;\n\n background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%);\n}\n.is-self .message-card[data-v-6f480f31] {\n border-color: rgba(255, 255, 255, 0.3);\n background: rgba(255, 255, 255, 0.2);\n}\n.message-time[data-v-6f480f31] {\n font-size: 11px;\n color: #8c8c8c;\n}\n.message-item.is-self .message-time[data-v-6f480f31] {\n color: rgba(255, 255, 255, 0.75);\n}\n\n/* 视频消息 */\n.message-video[data-v-6f480f31] {\n overflow: hidden;\n margin-bottom: 6px;\n border-radius: 12px;\n background: #000;\n}\n.message-video video[data-v-6f480f31] {\n display: block;\n width: 100%;\n max-width: 280px;\n max-height: 400px;\n}\n.input-area[data-v-6f480f31] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n\n padding: 16px 20px;\n border-top: 1px solid #e8e8e8;\n\n background: white;\n box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.04);\n}\n\n/* 工具栏 */\n.input-toolbar[data-v-6f480f31] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding: 4px 0;\n}\n.tool-btn[data-v-6f480f31] {\n cursor: pointer;\n\n display: inline-flex;\n gap: 6px;\n align-items: center;\n\n padding: 8px 14px;\n border: 1.5px solid #e8e8e8;\n border-radius: 8px;\n\n font-size: 13px;\n font-weight: 500;\n color: #595959;\n\n background: white;\n outline: none;\n\n transition: all 0.2s;\n}\n.tool-btn[data-v-6f480f31]:hover:not(:disabled) {\n border-color: #0e77cc;\n color: #0e77cc;\n background: #f0f9ff;\n}\n.tool-btn[data-v-6f480f31]:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n background: #f5f5f5;\n}\n.tool-btn-text[data-v-6f480f31] {\n font-size: 13px;\n}\n.tool-btn-icon[data-v-6f480f31] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n width: 18px;\n height: 18px;\n}\n.tool-btn-svg[data-v-6f480f31] {\n width: 18px;\n height: 18px;\n}\n.image-btn[data-v-6f480f31] {\n border-color: #d9d9d9;\n}\n.video-btn[data-v-6f480f31] {\n border-color: #d9d9d9;\n}\n.emoji-container[data-v-6f480f31] {\n position: relative;\n}\n.quick-reply-container[data-v-6f480f31] {\n position: relative;\n}\n.quick-reply-trigger[data-v-6f480f31] {\n border-color: #d9d9d9;\n}\n.quick-reply-trigger.active[data-v-6f480f31] {\n border-color: #0e77cc;\n color: #0e77cc;\n background: #f0f9ff;\n}\n.quick-reply-panel[data-v-6f480f31] {\n position: absolute;\n z-index: 1001;\n bottom: calc(100% + 8px);\n left: 0;\n\n overflow: hidden;\n\n width: 320px;\n max-width: min(320px, calc(100vw - 80px));\n border: 1px solid #e8e8e8;\n border-radius: 10px;\n\n background: #fff;\n box-shadow: 0 8px 30px rgba(0, 0, 0, 0.12);\n}\n.quick-reply-search[data-v-6f480f31] {\n padding: 10px;\n border-bottom: 1px solid #f0f0f0;\n}\n.quick-reply-search input[data-v-6f480f31] {\n width: 100%;\n height: 34px;\n padding: 0 10px;\n border: 1px solid #d9d9d9;\n border-radius: 8px;\n\n font-size: 13px;\n color: #595959;\n\n background: #fff;\n outline: none;\n}\n.quick-reply-search input[data-v-6f480f31]:focus {\n border-color: #0e77cc;\n box-shadow: 0 0 0 2px rgba(14, 119, 204, 0.08);\n}\n.quick-reply-list[data-v-6f480f31] {\n overflow-y: auto;\n max-height: 220px;\n padding: 8px;\n}\n.quick-reply-item[data-v-6f480f31] {\n cursor: pointer;\n\n width: 100%;\n margin-bottom: 6px;\n padding: 8px 10px;\n border: 1px solid transparent;\n border-radius: 8px;\n\n font-size: 13px;\n line-height: 1.45;\n color: #595959;\n text-align: left;\n\n background: #f7f8fa;\n}\n.quick-reply-item[data-v-6f480f31]:last-child {\n margin-bottom: 0;\n}\n.quick-reply-item[data-v-6f480f31]:hover {\n border-color: #b6dcfa;\n color: #0e77cc;\n background: #f0f9ff;\n}\n.quick-reply-empty[data-v-6f480f31] {\n padding: 18px 10px;\n font-size: 12px;\n color: #bfbfbf;\n text-align: center;\n}\n.emoji-picker-wrapper[data-v-6f480f31] {\n position: absolute;\n z-index: 1000;\n bottom: 100%;\n left: 0;\n\n overflow: hidden;\n\n margin-bottom: 8px;\n border-radius: 8px;\n\n box-shadow: 0 8px 30px rgba(0, 0, 0, 0.15);\n}\n.input-area textarea[data-v-6f480f31] {\n resize: none;\n\n width: 100%;\n padding: 12px 14px;\n border: 1.5px solid #e8e8e8;\n border-radius: 8px;\n\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n font-size: 14px;\n line-height: 1.5;\n\n background: #fafafa;\n outline: none;\n\n transition: all 0.2s;\n}\n.input-area textarea[data-v-6f480f31]:focus {\n border-color: #0e77cc;\n background: white;\n box-shadow: 0 0 0 3px rgba(14, 119, 204, 0.08);\n}\n.input-area textarea[data-v-6f480f31]::placeholder {\n color: #bfbfbf;\n}\n.input-actions[data-v-6f480f31] {\n display: flex;\n justify-content: flex-end;\n}\n.send-btn[data-v-6f480f31] {\n cursor: pointer;\n\n padding: 10px 28px;\n border: none;\n border-radius: 8px;\n\n font-size: 14px;\n font-weight: 500;\n color: white;\n letter-spacing: 0.3px;\n\n background: linear-gradient(135deg, #0e77cc 0%, #0d6db8 100%);\n box-shadow: 0 2px 6px rgba(14, 119, 204, 0.25);\n\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.send-btn[data-v-6f480f31]:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(14, 119, 204, 0.35);\n}\n.send-btn[data-v-6f480f31]:active {\n transform: translateY(0);\n box-shadow: 0 2px 6px rgba(14, 119, 204, 0.25);\n}\n\n.conversation-list[data-v-66bc5469] {\n overflow-y: auto;\n display: flex;\n flex: 1;\n flex-direction: column;\n\n background: #fff;\n}\n\n/* 自定义滚动条 */\n.conversation-list[data-v-66bc5469]::-webkit-scrollbar {\n width: 6px;\n}\n.conversation-list[data-v-66bc5469]::-webkit-scrollbar-track {\n background: transparent;\n}\n.conversation-list[data-v-66bc5469]::-webkit-scrollbar-thumb {\n border-radius: 3px;\n background: #d9d9d9;\n}\n.conversation-list[data-v-66bc5469]::-webkit-scrollbar-thumb:hover {\n background: #bfbfbf;\n}\n.unread-header[data-v-66bc5469] {\n padding: 8px 20px;\n border-bottom: 1px solid #e8e8e8;\n background: linear-gradient(180deg, #fafafa 0%, #fff 100%);\n}\n.unread-count[data-v-66bc5469] {\n font-size: 15px;\n font-weight: 600;\n color: #262626;\n letter-spacing: 0.3px;\n}\n.search-header[data-v-66bc5469] {\n padding: 10px 16px;\n border-bottom: 1px solid #f0f0f0;\n background: #fff;\n}\n.search-input[data-v-66bc5469] {\n box-sizing: border-box;\n width: 100%;\n height: 36px;\n padding: 0 12px;\n border: 1px solid #d9d9d9;\n border-radius: 8px;\n\n font-size: 13px;\n color: #262626;\n\n background: #fff;\n outline: none;\n\n transition: border-color 0.2s ease, box-shadow 0.2s ease;\n}\n.search-input[data-v-66bc5469]::placeholder {\n color: #bfbfbf;\n}\n.search-input[data-v-66bc5469]:focus {\n border-color: #0e77cc;\n box-shadow: 0 0 0 2px rgb(14 119 204 / 12%);\n}\n.loading-state[data-v-66bc5469] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n padding: 60px 20px;\n\n color: #bfbfbf;\n}\n.loading-spinner[data-v-66bc5469] {\n width: 40px;\n height: 40px;\n margin-bottom: 16px;\n border: 3px solid #f0f0f0;\n border-top: 3px solid #0e77cc;\n border-radius: 50%;\n\n animation: spin-66bc5469 0.8s linear infinite;\n}\n@keyframes spin-66bc5469 {\n0% { transform: rotate(0deg);\n}\n100% { transform: rotate(360deg);\n}\n}\n.empty-state[data-v-66bc5469] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n height: 100%;\n padding: 40px 20px;\n\n color: #bfbfbf;\n}\n.empty-icon[data-v-66bc5469] {\n width: 64px;\n height: 64px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n.empty-state p[data-v-66bc5469] {\n margin: 0;\n font-size: 14px;\n font-weight: 400;\n}\n.conversation-item[data-v-66bc5469] {\n cursor: pointer;\n\n position: relative;\n\n padding: 12px 16px;\n border-bottom: 1px solid #f0f0f0;\n\n background: white;\n\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.conversation-item[data-v-66bc5469]:hover {\n background-color: #f5f7fa;\n}\n.conversation-item.active[data-v-66bc5469] {\n padding-left: 13px;\n border-left: 3px solid #0e77cc;\n background: linear-gradient(90deg, #ecf5ff 0%, #fff 100%);\n}\n.conversation-item[data-v-66bc5469]:last-child {\n border-bottom: none;\n}\n\n/* 会话项内容布局 */\n.conversation-item-content[data-v-66bc5469] {\n display: flex;\n gap: 12px;\n align-items: center;\n width: 100%;\n}\n.avatar-wrapper[data-v-66bc5469] {\n position: relative;\n flex-shrink: 0;\n width: 44px;\n height: 44px;\n}\n.avatar-img[data-v-66bc5469] {\n width: 100%;\n height: 100%;\n border: 2px solid white;\n border-radius: 50%;\n\n object-fit: cover;\n background: linear-gradient(135deg, #f0f0f0 0%, #e8e8e8 100%);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n.avatar-text[data-v-66bc5469] {\n position: absolute;\n top: 0;\n left: 0;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 44px;\n height: 44px;\n border: 2px solid white;\n border-radius: 50%;\n\n font-size: 16px;\n font-weight: 600;\n color: white;\n\n background: linear-gradient(135deg, #0e77cc 0%, #0d6db8 100%);\n box-shadow: 0 2px 8px rgba(14, 119, 204, 0.3);\n}\n.session-info[data-v-66bc5469] {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: 4px;\n justify-content: center;\n\n min-width: 0;\n}\n.session-name[data-v-66bc5469] {\n font-size: 14px;\n font-weight: 600;\n color: #262626;\n letter-spacing: 0.2px;\n}\n.content-text[data-v-66bc5469] {\n overflow: hidden;\n display: block;\n\n font-size: 13px;\n line-height: 1.4;\n color: #595959;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.session-meta[data-v-66bc5469] {\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n gap: 6px;\n align-items: flex-end;\n}\n.session-time[data-v-66bc5469] {\n font-size: 12px;\n font-weight: 400;\n color: #8c8c8c;\n}\n.unread-badge[data-v-66bc5469] {\n display: flex;\n align-items: center;\n justify-content: center;\n\n min-width: 20px;\n height: 20px;\n margin-left: 8px;\n padding: 0 7px;\n border-radius: 10px;\n\n font-size: 12px;\n font-weight: 600;\n color: white;\n\n background: linear-gradient(135deg, #ff4d4f 0%, #ff7875 100%);\n box-shadow: 0 2px 6px rgba(255, 77, 79, 0.3);\n\n animation: pulse-66bc5469 2s ease-in-out infinite;\n}\n@keyframes pulse-66bc5469 {\n0%, 100% {\n transform: scale(1);\n}\n50% {\n transform: scale(1.05);\n}\n}\n\n.chat-window[data-v-00d50ef7] {\n position: fixed;\n z-index: 9998;\n\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n min-width: 380px;\n min-height: 360px;\n border: 1px solid rgba(9, 62, 105, 0.14);\n border-radius: 18px;\n\n background: linear-gradient(180deg, #fff 0%, #f9fcff 100%);\n backdrop-filter: blur(6px);\n box-shadow: 0 24px 80px rgba(11, 58, 106, 0.24);\n\n animation: window-enter-00d50ef7 0.22s ease-out;\n}\n.chat-window.is-dragging[data-v-00d50ef7] {\n cursor: move;\n box-shadow: 0 28px 88px rgba(11, 58, 106, 0.28);\n}\n.chat-window.is-resizing[data-v-00d50ef7] {\n cursor: nwse-resize;\n}\n.chat-header[data-v-00d50ef7] {\n cursor: move;\n user-select: none;\n\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between;\n\n padding: 10px 20px;\n\n color: white;\n\n background: linear-gradient(135deg, #0f83df 0%, #0e6fbe 62%, #0c5fa5 100%);\n box-shadow: 0 2px 12px rgba(14, 119, 204, 0.26);\n}\n\n/* 用户信息区域 */\n.user-info-section[data-v-00d50ef7] {\n display: flex;\n flex: 1;\n gap: 12px;\n align-items: center;\n}\n.user-avatar-wrapper[data-v-00d50ef7] {\n position: relative;\n flex-shrink: 0;\n width: 40px;\n height: 40px;\n}\n.user-avatar[data-v-00d50ef7] {\n width: 100%;\n height: 100%;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-radius: 50%;\n\n object-fit: cover;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n}\n.user-avatar-default[data-v-00d50ef7] {\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 40px;\n height: 40px;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-radius: 50%;\n\n font-size: 16px;\n font-weight: 600;\n color: white;\n\n background: linear-gradient(135deg, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.1) 100%);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n}\n.status-indicator[data-v-00d50ef7] {\n cursor: pointer;\n\n position: absolute;\n right: -2px;\n bottom: -2px;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 14px;\n height: 14px;\n border: 2px solid white;\n border-radius: 50%;\n\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);\n\n transition: transform 0.2s;\n}\n.status-indicator[data-v-00d50ef7]:hover {\n transform: scale(1.15);\n}\n.status-indicator svg[data-v-00d50ef7] {\n width: 8px;\n height: 8px;\n}\n\n/* 状态下拉菜单 */\n.status-dropdown[data-v-00d50ef7] {\n position: absolute;\n z-index: 100;\n top: 100%;\n left: 0;\n\n min-width: 120px;\n margin-top: 8px;\n padding: 6px;\n border: 1px solid #dbe7f5;\n border-radius: 10px;\n\n background: white;\n box-shadow: 0 12px 30px rgba(11, 58, 106, 0.18);\n}\n.status-option[data-v-00d50ef7] {\n cursor: pointer;\n\n display: flex;\n gap: 8px;\n align-items: center;\n\n padding: 8px 10px;\n border-radius: 6px;\n\n color: #262626;\n\n transition: all 0.2s;\n}\n.status-option[data-v-00d50ef7]:hover {\n background: #f5f5f5;\n}\n.status-option.active[data-v-00d50ef7] {\n color: #0e77cc;\n background: #e6f7ff;\n}\n.status-dot[data-v-00d50ef7] {\n flex-shrink: 0;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n}\n.status-option span[data-v-00d50ef7] {\n flex: 1;\n font-size: 13px;\n}\n.check-icon[data-v-00d50ef7] {\n width: 16px;\n height: 16px;\n opacity: 0.8;\n}\n.user-details[data-v-00d50ef7] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n.user-name[data-v-00d50ef7] {\n font-size: 14px;\n font-weight: 600;\n letter-spacing: 0.2px;\n}\n.user-status[data-v-00d50ef7] {\n font-size: 12px;\n font-weight: 400;\n opacity: 0.9;\n}\n.close-btn[data-v-00d50ef7] {\n cursor: pointer;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 32px;\n height: 32px;\n border: none;\n border-radius: 8px;\n\n font-size: 28px;\n line-height: 1;\n color: white;\n\n opacity: 0.8;\n background: none;\n\n transition: all 0.2s;\n}\n.close-btn[data-v-00d50ef7]:hover {\n transform: rotate(90deg);\n opacity: 1;\n background: rgba(255, 255, 255, 0.15);\n}\n.close-btn[data-v-00d50ef7]:active {\n transform: rotate(90deg) scale(0.95);\n}\n.chat-body[data-v-00d50ef7] {\n overflow: hidden;\n display: flex;\n flex: 1;\n\n min-height: 0;\n\n background: linear-gradient(180deg, #fbfdff 0%, #f4f8fc 100%);\n}\n\n/* 第一栏:一级菜单 */\n.first-sidebar[data-v-00d50ef7] {\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n\n width: 76px;\n padding: 0;\n border-right: 1px solid #dce8f3;\n\n background: linear-gradient(180deg, #f5f9ff 0%, #f0f6fd 100%);\n}\n.menu-items-container[data-v-00d50ef7] {\n display: flex;\n flex: 1;\n flex-direction: column;\n align-items: center;\n\n padding: 18px 0;\n}\n.menu-item[data-v-00d50ef7] {\n cursor: pointer;\n\n position: relative;\n\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n\n width: 50px;\n height: 50px;\n margin-bottom: 12px;\n border: 1px solid transparent;\n border-radius: 12px;\n\n font-weight: 400;\n color: #7d8fa3;\n\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.menu-item[data-v-00d50ef7]:last-child {\n margin-bottom: 0;\n}\n.menu-item[data-v-00d50ef7]:hover {\n transform: translateY(-1px);\n border-color: #d2e3f3;\n color: #0e77cc;\n background: #f7fbff;\n}\n.menu-item.active[data-v-00d50ef7] {\n border-color: #0e77cc;\n color: white;\n background: linear-gradient(135deg, #0f83df 0%, #0d6db8 100%);\n box-shadow: 0 8px 20px rgba(14, 119, 204, 0.35);\n}\n.menu-item.active[data-v-00d50ef7]::before {\n content: '';\n\n position: absolute;\n top: 50%;\n left: -11px;\n transform: translateY(-50%);\n\n width: 3px;\n height: 24px;\n border-radius: 2px;\n\n background: #0e77cc;\n}\n.menu-item .icon[data-v-00d50ef7] {\n width: 23px;\n height: 23px;\n}\n.menu-item .label[data-v-00d50ef7] {\n display: none;\n}\n.menu-item .menu-badge[data-v-00d50ef7] {\n position: absolute;\n top: 6px;\n right: 6px;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n min-width: 16px;\n height: 16px;\n padding: 0 5px;\n border: 2px solid white;\n border-radius: 8px;\n\n font-size: 10px;\n font-weight: 600;\n line-height: 1;\n color: white;\n\n background: linear-gradient(135deg, #ff4d4f 0%, #ff7875 100%);\n box-shadow: 0 2px 6px rgba(255, 77, 79, 0.4);\n}\n.menu-item.active .menu-badge[data-v-00d50ef7] {\n border-color: #0e77cc;\n color: #ff4d4f;\n background: linear-gradient(135deg, #fff 0%, #f0f0f0 100%);\n}\n\n/* 第二栏:二级侧边栏 */\n.second-sidebar[data-v-00d50ef7] {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n\n width: 250px;\n border-right: 1px solid #dce8f3;\n\n background: linear-gradient(180deg, #fff 0%, #fbfdff 100%);\n}\n\n/* 第三栏:聊天区域 */\n.chat-area[data-v-00d50ef7] {\n overflow: hidden;\n display: flex;\n flex: 1;\n flex-direction: column;\n\n min-width: 0;\n\n background: radial-gradient(circle at top right, rgba(14, 119, 204, 0.08) 0%, rgba(255, 255, 255, 0) 42%), #fff;\n}\n.empty-chat[data-v-00d50ef7] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n height: 100%;\n\n color: #8ca1b8;\n\n background: linear-gradient(180deg, #f7fbff 0%, #fff 100%);\n}\n.empty-chat .empty-icon[data-v-00d50ef7] {\n width: 72px;\n height: 72px;\n margin-bottom: 18px;\n\n opacity: 0.5;\n filter: drop-shadow(0 8px 20px rgba(11, 58, 106, 0.16));\n}\n.empty-chat p[data-v-00d50ef7] {\n margin: 0;\n font-size: 15px;\n font-weight: 500;\n letter-spacing: 0.3px;\n}\n\n/* 拉伸手柄 */\n.resize-handle[data-v-00d50ef7] {\n cursor: nwse-resize;\n\n position: absolute;\n z-index: 9999;\n right: 0;\n bottom: 0;\n\n width: 24px;\n height: 24px;\n\n opacity: 0.5;\n\n transition: opacity 0.2s;\n}\n.resize-handle[data-v-00d50ef7]:hover {\n opacity: 1;\n}\n.resize-handle[data-v-00d50ef7]::after {\n content: '';\n\n position: absolute;\n right: 6px;\n bottom: 6px;\n\n width: 0;\n height: 0;\n border-top: 10px solid transparent;\n border-right: 10px solid #0e77cc;\n border-bottom: 10px solid #0e77cc;\n border-left: 10px solid transparent;\n\n opacity: 0.6;\n filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1));\n}\n@keyframes window-enter-00d50ef7 {\nfrom {\n transform: translate3d(0, 16px, 0) scale(0.98);\n opacity: 0;\n}\nto {\n transform: translate3d(0, 0, 0) scale(1);\n opacity: 1;\n}\n}\n@media (width <= 960px) {\n.second-sidebar[data-v-00d50ef7] {\n width: 220px;\n}\n}\n\n.float-button[data-v-a60f9c33] {\n touch-action: none;\n cursor: grab;\n user-select: none;\n\n position: fixed;\n z-index: 9999;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 64px;\n height: 64px;\n border: 1px solid #0e77cc;\n border-radius: 50%;\n\n background: #fff;\n box-shadow: 0 4px 20px rgba(14, 119, 204, 0.3);\n\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.float-button.is-hidden[data-v-a60f9c33] {\n pointer-events: none;\n transform: scale(0.88);\n opacity: 0;\n}\n.float-button[data-v-a60f9c33]:hover {\n transform: translateY(-2px);\n box-shadow: 0 6px 30px rgba(14, 119, 204, 0.4);\n}\n.float-button[data-v-a60f9c33]:active {\n transform: translateY(0) scale(0.95);\n}\n.float-button.is-dragging[data-v-a60f9c33] {\n cursor: grabbing;\n transform: scale(1.08);\n box-shadow: 0 8px 35px rgba(14, 119, 204, 0.35);\n}\n.float-button .icon[data-v-a60f9c33] {\n pointer-events: none;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 32px;\n height: 32px;\n\n filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1));\n}\n.float-button .icon img[data-v-a60f9c33] {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n.float-button .badge[data-v-a60f9c33] {\n pointer-events: none;\n\n position: absolute;\n top: 4px;\n right: 4px;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n border: 2.5px solid white;\n border-radius: 10px;\n\n font-size: 11px;\n font-weight: 600;\n line-height: 1;\n color: white;\n\n background: linear-gradient(135deg, #ff4d4f 0%, #ff7875 100%);\n box-shadow: 0 2px 8px rgba(255, 77, 79, 0.4);\n}\n.float-button.has-unread[data-v-a60f9c33] {\n animation: pulse-a60f9c33 2s ease-in-out infinite;\n}\n@keyframes pulse-a60f9c33 {\n0%, 100% {\n box-shadow: 0 4px 20px rgba(14, 119, 204, 0.3),\n 0 0 0 0 rgba(255, 77, 79, 0.4);\n}\n50% {\n box-shadow: 0 4px 20px rgba(14, 119, 204, 0.3),\n 0 0 0 12px rgba(255, 77, 79, 0);\n}\n}\n/*$vite$:1*/"
2
2
  if (typeof document !== 'undefined' && __SHARED_IMSDK_CSS__) {
3
3
  const __SHARED_IMSDK_STYLE_ID__ = 'zjw-jszn-shared-imsdk-style'
4
4
  if (!document.getElementById(__SHARED_IMSDK_STYLE_ID__)) {
@@ -5725,6 +5725,7 @@ Expected function or array of functions, received type ${typeof value}.`);
5725
5725
  resourceBaseURL: "https://resource.api.orchiport.asia",
5726
5726
  prefix: "",
5727
5727
  uploadURL: "https://resource.api.orchiport.asia/system/uploadImage",
5728
+ uploadFileURL: "https://resource.api.orchiport.asia/system/uploadFile",
5728
5729
  signKey: "Z0XYfLbnDpuVqk41",
5729
5730
  suffix: "43cf28",
5730
5731
  groupId: "6",
@@ -5794,11 +5795,11 @@ Expected function or array of functions, received type ${typeof value}.`);
5794
5795
  if (!prefix) return "";
5795
5796
  return `/${prefix.replace(PREFIX_TRIM_REGEXP, "")}`;
5796
5797
  }
5797
- var STORE_API_PREFIX = "/cashier/IM";
5798
+ var STORE_API_PREFIX$1 = "/cashier/IM";
5798
5799
  var PLATFORM_API_PREFIX = "/site/IM";
5799
5800
  function isStorePrefix(prefix) {
5800
5801
  const normalized = normalizePrefix(prefix);
5801
- return normalized === STORE_API_PREFIX || normalized.startsWith(`${STORE_API_PREFIX}/`);
5802
+ return normalized === STORE_API_PREFIX$1 || normalized.startsWith(`${STORE_API_PREFIX$1}/`);
5802
5803
  }
5803
5804
  function isPlatformPrefix(prefix) {
5804
5805
  const normalized = normalizePrefix(prefix);
@@ -6219,6 +6220,7 @@ Expected function or array of functions, received type ${typeof value}.`);
6219
6220
  var INTEGER_STRING_REGEXP = /^\d+$/;
6220
6221
  var UPLOAD_TIMEOUT_MS = 3e4;
6221
6222
  var MAX_UPLOAD_IMAGE_SIZE_BYTES = 2 * 1024 * 1024;
6223
+ var MAX_UPLOAD_FILE_SIZE_BYTES = 50 * 1024 * 1024;
6222
6224
  var CUSTOMER_ONLY_TRUE_SET = new Set(["1", "true"]);
6223
6225
  function ensureAuthorized(apiName) {
6224
6226
  if (!httpClient.getAuth()) throw new Error(`未登录,禁止请求 ${apiName},请先完成鉴权`);
@@ -6283,6 +6285,50 @@ Expected function or array of functions, received type ${typeof value}.`);
6283
6285
  });
6284
6286
  return _uploadImage.apply(this, arguments);
6285
6287
  }
6288
+ /**
6289
+ * 上传文件(视频、文档等)
6290
+ * @param file 文件对象
6291
+ */
6292
+ function uploadFile(_x2) {
6293
+ return _uploadFile.apply(this, arguments);
6294
+ }
6295
+ function _uploadFile() {
6296
+ _uploadFile = _asyncToGenerator(function* (file) {
6297
+ ensureAuthorized("uploadFile");
6298
+ if (file.size > MAX_UPLOAD_FILE_SIZE_BYTES) throw new Error("文件大小不能超过 50MB");
6299
+ const config = getConfig();
6300
+ const formData = new FormData();
6301
+ formData.append("file", file);
6302
+ const controller = new AbortController();
6303
+ const timeoutTimer = setTimeout(() => controller.abort(), UPLOAD_TIMEOUT_MS);
6304
+ try {
6305
+ const response = yield fetch(config.api.uploadFileURL || config.api.uploadURL, {
6306
+ method: "POST",
6307
+ body: formData,
6308
+ signal: controller.signal
6309
+ });
6310
+ if (!response.ok) {
6311
+ let errorPayload;
6312
+ try {
6313
+ errorPayload = yield response.json();
6314
+ } catch (_unused2) {
6315
+ errorPayload = null;
6316
+ }
6317
+ throw new Error(getUploadErrorMessage(response.status, errorPayload));
6318
+ }
6319
+ const result = yield response.json();
6320
+ if (result.code !== 200) throw new Error(result.message || "上传失败");
6321
+ return result;
6322
+ } catch (error) {
6323
+ if (error instanceof DOMException && error.name === "AbortError") throw new Error("上传超时");
6324
+ console.error("上传文件失败:", error);
6325
+ throw error instanceof Error ? error : /* @__PURE__ */ new Error("上传文件失败");
6326
+ } finally {
6327
+ clearTimeout(timeoutTimer);
6328
+ }
6329
+ });
6330
+ return _uploadFile.apply(this, arguments);
6331
+ }
6286
6332
  function unwrapResult(response, apiName) {
6287
6333
  if (response.result === void 0 || response.result === null) throw new Error(`${apiName} 接口返回 result 为空`);
6288
6334
  return response.result;
@@ -6304,7 +6350,7 @@ Expected function or array of functions, received type ${typeof value}.`);
6304
6350
  * - Shared 层固定提交 `phone + site`
6305
6351
  * - 其他扩展参数通过 config.auth.authorizationPayload 注入(如门店的 username/avatar)
6306
6352
  */
6307
- function getAuthorization(_x2) {
6353
+ function getAuthorization(_x3) {
6308
6354
  return _getAuthorization.apply(this, arguments);
6309
6355
  }
6310
6356
  function _getAuthorization() {
@@ -6336,14 +6382,22 @@ Expected function or array of functions, received type ${typeof value}.`);
6336
6382
  * @param data.limit - 每页数量
6337
6383
  * @param data.uid - 用户ID
6338
6384
  * @param data.user_type - 用户类型
6385
+ * @param data.username - 用户名(可选,门店场景可用于筛选)
6339
6386
  */
6340
- function getUserChatList(_x3) {
6387
+ function getUserChatList(_x4) {
6341
6388
  return _getUserChatList.apply(this, arguments);
6342
6389
  }
6343
6390
  function _getUserChatList() {
6344
6391
  _getUserChatList = _asyncToGenerator(function* (data) {
6345
6392
  ensureAuthorized("getUserChatList");
6346
- return unwrapResult(yield httpClient.post(buildApiPath("/user/getChatList"), data), "getUserChatList");
6393
+ const payload = {
6394
+ page: data.page,
6395
+ limit: data.limit
6396
+ };
6397
+ if (typeof data.uid === "number") payload.uid = data.uid;
6398
+ if (typeof data.user_type === "number") payload.user_type = data.user_type;
6399
+ if (typeof data.username === "string" && data.username.trim()) payload.username = data.username.trim();
6400
+ return unwrapResult(yield httpClient.post(buildApiPath("/user/getChatList"), payload), "getUserChatList");
6347
6401
  });
6348
6402
  return _getUserChatList.apply(this, arguments);
6349
6403
  }
@@ -6354,7 +6408,7 @@ Expected function or array of functions, received type ${typeof value}.`);
6354
6408
  * @param data.limit - 每页数量
6355
6409
  * @param data.session_id - 会话ID
6356
6410
  */
6357
- function getChatListBySession(_x4) {
6411
+ function getChatListBySession(_x5) {
6358
6412
  return _getChatListBySession.apply(this, arguments);
6359
6413
  }
6360
6414
  function _getChatListBySession() {
@@ -6388,7 +6442,7 @@ Expected function or array of functions, received type ${typeof value}.`);
6388
6442
  * @param data.page - 页码
6389
6443
  * @param data.limit - 每页数量
6390
6444
  */
6391
- function getUnReadList(_x5) {
6445
+ function getUnReadList(_x6) {
6392
6446
  return _getUnReadList.apply(this, arguments);
6393
6447
  }
6394
6448
  function _getUnReadList() {
@@ -6406,7 +6460,7 @@ Expected function or array of functions, received type ${typeof value}.`);
6406
6460
  * @param data.limit - 每页数量
6407
6461
  * @param data.session_id - 会话ID
6408
6462
  */
6409
- function getChatRewordBySession(_x6) {
6463
+ function getChatRewordBySession(_x7) {
6410
6464
  return _getChatRewordBySession.apply(this, arguments);
6411
6465
  }
6412
6466
  function _getChatRewordBySession() {
@@ -6429,7 +6483,7 @@ Expected function or array of functions, received type ${typeof value}.`);
6429
6483
  * @param data.friend_type - 对话对象类型
6430
6484
  * @param data.customeronly - 平台客服模式标记(1/true)
6431
6485
  */
6432
- function getChatList(_x7) {
6486
+ function getChatList(_x8) {
6433
6487
  return _getChatList.apply(this, arguments);
6434
6488
  }
6435
6489
  function _getChatList() {
@@ -16757,8 +16811,8 @@ Expected function or array of functions, received type ${typeof value}.`);
16757
16811
  class: "msg-avatar"
16758
16812
  };
16759
16813
  var _hoisted_17$2 = { class: "message-content-wrapper" };
16760
- var _hoisted_18$1 = { class: "message-sender" };
16761
- var _hoisted_19$1 = { class: "message-content" };
16814
+ var _hoisted_18$2 = { class: "message-sender" };
16815
+ var _hoisted_19$2 = { class: "message-content" };
16762
16816
  var _hoisted_20$1 = {
16763
16817
  key: 0,
16764
16818
  class: "message-text"
@@ -16787,84 +16841,106 @@ Expected function or array of functions, received type ${typeof value}.`);
16787
16841
  };
16788
16842
  var _hoisted_28 = {
16789
16843
  key: 6,
16844
+ class: "message-video"
16845
+ };
16846
+ var _hoisted_29 = ["src"];
16847
+ var _hoisted_30 = {
16848
+ key: 7,
16790
16849
  class: "message-text"
16791
16850
  };
16792
- var _hoisted_29 = { class: "message-time" };
16793
- var _hoisted_30 = { class: "message-content-wrapper" };
16794
- var _hoisted_31 = { class: "message-content" };
16795
- var _hoisted_32 = {
16851
+ var _hoisted_31 = { class: "message-time" };
16852
+ var _hoisted_32 = { class: "message-content-wrapper" };
16853
+ var _hoisted_33 = { class: "message-content" };
16854
+ var _hoisted_34 = {
16796
16855
  key: 0,
16797
16856
  class: "message-text"
16798
16857
  };
16799
- var _hoisted_33 = {
16858
+ var _hoisted_35 = {
16800
16859
  key: 1,
16801
16860
  class: "message-image"
16802
16861
  };
16803
- var _hoisted_34 = ["src", "onLoad"];
16804
- var _hoisted_35 = {
16862
+ var _hoisted_36 = ["src", "onLoad"];
16863
+ var _hoisted_37 = {
16805
16864
  key: 2,
16806
16865
  class: "message-emoji"
16807
16866
  };
16808
- var _hoisted_36 = {
16867
+ var _hoisted_38 = {
16809
16868
  key: 3,
16810
16869
  class: "message-file"
16811
16870
  };
16812
- var _hoisted_37 = ["href"];
16813
- var _hoisted_38 = {
16871
+ var _hoisted_39 = ["href"];
16872
+ var _hoisted_40 = {
16814
16873
  key: 4,
16815
16874
  class: "message-system"
16816
16875
  };
16817
- var _hoisted_39 = {
16876
+ var _hoisted_41 = {
16818
16877
  key: 5,
16819
16878
  class: "message-card"
16820
16879
  };
16821
- var _hoisted_40 = {
16880
+ var _hoisted_42 = {
16822
16881
  key: 6,
16823
- class: "message-text"
16882
+ class: "message-video"
16824
16883
  };
16825
- var _hoisted_41 = { class: "message-time" };
16826
- var _hoisted_42 = { class: "msg-avatar-wrapper" };
16827
- var _hoisted_43 = ["src", "alt"];
16884
+ var _hoisted_43 = ["src"];
16828
16885
  var _hoisted_44 = {
16886
+ key: 7,
16887
+ class: "message-text"
16888
+ };
16889
+ var _hoisted_45 = { class: "message-time" };
16890
+ var _hoisted_46 = { class: "msg-avatar-wrapper" };
16891
+ var _hoisted_47 = ["src", "alt"];
16892
+ var _hoisted_48 = {
16829
16893
  key: 1,
16830
16894
  class: "msg-avatar"
16831
16895
  };
16832
- var _hoisted_45 = {
16896
+ var _hoisted_49 = {
16833
16897
  key: 3,
16834
16898
  class: "empty-messages"
16835
16899
  };
16836
- var _hoisted_46 = ["src"];
16837
- var _hoisted_47 = { class: "input-area" };
16838
- var _hoisted_48 = { class: "input-toolbar" };
16839
- var _hoisted_49 = ["disabled"];
16840
- var _hoisted_50 = {
16900
+ var _hoisted_50 = ["src"];
16901
+ var _hoisted_51 = { class: "input-area" };
16902
+ var _hoisted_52 = { class: "input-toolbar" };
16903
+ var _hoisted_53 = ["disabled"];
16904
+ var _hoisted_54 = {
16841
16905
  class: "tool-btn-icon",
16842
16906
  "aria-hidden": "true"
16843
16907
  };
16844
- var _hoisted_51 = {
16908
+ var _hoisted_55 = {
16845
16909
  key: 0,
16846
16910
  class: "tool-btn-svg",
16847
16911
  viewBox: "0 0 1024 1024"
16848
16912
  };
16849
- var _hoisted_52 = { key: 1 };
16850
- var _hoisted_53 = { class: "tool-btn-text" };
16851
- var _hoisted_54 = { class: "emoji-container" };
16852
- var _hoisted_55 = {
16913
+ var _hoisted_56 = { key: 1 };
16914
+ var _hoisted_57 = { class: "tool-btn-text" };
16915
+ var _hoisted_58 = ["disabled"];
16916
+ var _hoisted_59 = {
16917
+ class: "tool-btn-icon",
16918
+ "aria-hidden": "true"
16919
+ };
16920
+ var _hoisted_60 = {
16921
+ key: 0,
16922
+ class: "tool-btn-svg",
16923
+ viewBox: "0 0 1024 1024"
16924
+ };
16925
+ var _hoisted_61 = { key: 1 };
16926
+ var _hoisted_62 = { class: "tool-btn-text" };
16927
+ var _hoisted_63 = { class: "emoji-container" };
16928
+ var _hoisted_64 = {
16853
16929
  key: 0,
16854
16930
  class: "emoji-picker-wrapper"
16855
16931
  };
16856
- var _hoisted_56 = {
16932
+ var _hoisted_65 = {
16857
16933
  key: 0,
16858
16934
  class: "quick-reply-panel"
16859
16935
  };
16860
- var _hoisted_57 = { class: "quick-reply-search" };
16861
- var _hoisted_58 = { class: "quick-reply-list" };
16862
- var _hoisted_59 = ["onClick"];
16863
- var _hoisted_60 = {
16936
+ var _hoisted_66 = { class: "quick-reply-search" };
16937
+ var _hoisted_67 = { class: "quick-reply-list" };
16938
+ var _hoisted_68 = ["onClick"];
16939
+ var _hoisted_69 = {
16864
16940
  key: 0,
16865
16941
  class: "quick-reply-empty"
16866
16942
  };
16867
- var _hoisted_61 = ["onKeydown"];
16943
+ var _hoisted_70 = ["onKeydown"];
16868
16944
  var pageSize = 20;
16869
16945
  //#endregion
16870
16946
  //#region src/components/ChatRoom.vue
@@ -16905,6 +16981,7 @@ Expected function or array of functions, received type ${typeof value}.`);
16905
16981
  let tempMessageSeed = 0;
16906
16982
  const HTTP_URL_REGEXP = /^https?:\/\//i;
16907
16983
  const isUploading = /* @__PURE__ */ ref(false);
16984
+ const isUploadingVideo = /* @__PURE__ */ ref(false);
16908
16985
  const showEmojiPicker = /* @__PURE__ */ ref(false);
16909
16986
  function toggleEmojiPicker() {
16910
16987
  if (!showEmojiPicker.value) showQuickReplyPanel.value = false;
@@ -17280,6 +17357,23 @@ Expected function or array of functions, received type ${typeof value}.`);
17280
17357
  }();
17281
17358
  input.click();
17282
17359
  }
17360
+ function handleVideoSelect() {
17361
+ const input = document.createElement("input");
17362
+ input.type = "file";
17363
+ input.accept = "video/*";
17364
+ input.onchange = function() {
17365
+ var _ref2 = _asyncToGenerator(function* (e) {
17366
+ var _target$files2;
17367
+ const file = (_target$files2 = e.target.files) === null || _target$files2 === void 0 ? void 0 : _target$files2[0];
17368
+ if (!file) return;
17369
+ yield uploadAndSendVideo(file);
17370
+ });
17371
+ return function(_x2) {
17372
+ return _ref2.apply(this, arguments);
17373
+ };
17374
+ }();
17375
+ input.click();
17376
+ }
17283
17377
  function resolveUploadedImageUrl(resourceBaseURL, uploadURL, fileUrl) {
17284
17378
  const normalizedFileUrl = typeof fileUrl === "string" ? fileUrl.trim() : "";
17285
17379
  if (!normalizedFileUrl) return "";
@@ -17293,7 +17387,7 @@ Expected function or array of functions, received type ${typeof value}.`);
17293
17387
  return normalizedFileUrl;
17294
17388
  }
17295
17389
  }
17296
- function uploadAndSendImage(_x2) {
17390
+ function uploadAndSendImage(_x3) {
17297
17391
  return _uploadAndSendImage.apply(this, arguments);
17298
17392
  }
17299
17393
  function _uploadAndSendImage() {
@@ -17342,6 +17436,55 @@ Expected function or array of functions, received type ${typeof value}.`);
17342
17436
  });
17343
17437
  return _uploadAndSendImage.apply(this, arguments);
17344
17438
  }
17439
+ function uploadAndSendVideo(_x4) {
17440
+ return _uploadAndSendVideo.apply(this, arguments);
17441
+ }
17442
+ function _uploadAndSendVideo() {
17443
+ _uploadAndSendVideo = _asyncToGenerator(function* (file) {
17444
+ var _props$conversationDa13;
17445
+ if (!getUserInfo()) {
17446
+ console.warn("用户未登录");
17447
+ return;
17448
+ }
17449
+ if (!((_props$conversationDa13 = props.conversationData) === null || _props$conversationDa13 === void 0 ? void 0 : _props$conversationDa13.friend)) {
17450
+ console.warn("会话信息不完整");
17451
+ return;
17452
+ }
17453
+ try {
17454
+ var _response$data2, _props$conversationDa14, _props$conversationDa15, _props$conversationDa16;
17455
+ isUploadingVideo.value = true;
17456
+ const response = yield uploadFile(file);
17457
+ if (!response.success || !((_response$data2 = response.data) === null || _response$data2 === void 0 ? void 0 : _response$data2.url)) throw new Error(response.message || "上传失败");
17458
+ const config = getConfig();
17459
+ const videoUrl = resolveUploadedImageUrl(config.api.resourceBaseURL, config.api.uploadFileURL || config.api.uploadURL, response.data.url);
17460
+ if (!videoUrl) throw new Error("上传返回视频地址为空");
17461
+ const tempMessageId = createTempMessageId();
17462
+ const messageData = {
17463
+ fid: (_props$conversationDa14 = props.conversationData.friend) === null || _props$conversationDa14 === void 0 ? void 0 : _props$conversationDa14.id,
17464
+ receiveId: (_props$conversationDa15 = props.conversationData.friend) === null || _props$conversationDa15 === void 0 ? void 0 : _props$conversationDa15.id,
17465
+ friend_type: props.conversationData.friend_type,
17466
+ session_id: props.conversationId,
17467
+ msg_type: 7,
17468
+ content: videoUrl
17469
+ };
17470
+ wsClient.sendBusinessMessage("send", messageData);
17471
+ const tempMessage = createTempMessage({
17472
+ id: tempMessageId,
17473
+ content: videoUrl,
17474
+ msgType: 7,
17475
+ receiverId: (_props$conversationDa16 = props.conversationData) === null || _props$conversationDa16 === void 0 || (_props$conversationDa16 = _props$conversationDa16.friend) === null || _props$conversationDa16 === void 0 ? void 0 : _props$conversationDa16.id
17476
+ });
17477
+ messages.value.push(tempMessage);
17478
+ emit("messageSent", tempMessage);
17479
+ scrollToBottomAfterRender();
17480
+ } catch (error) {
17481
+ console.error("上传视频失败:", error);
17482
+ } finally {
17483
+ isUploadingVideo.value = false;
17484
+ }
17485
+ });
17486
+ return _uploadAndSendVideo.apply(this, arguments);
17487
+ }
17345
17488
  function handleWebSocketMessage(data) {
17346
17489
  const message = normalizeWSMessage(data);
17347
17490
  if (!message) return;
@@ -17373,9 +17516,9 @@ Expected function or array of functions, received type ${typeof value}.`);
17373
17516
  if (existingMessageIndex !== -1) return;
17374
17517
  }
17375
17518
  if (!isSelf) {
17376
- var _props$conversationDa13;
17519
+ var _props$conversationDa17;
17377
17520
  if (existingMessageIndex !== -1) return;
17378
- const friendInfo = ((_props$conversationDa13 = props.conversationData) === null || _props$conversationDa13 === void 0 ? void 0 : _props$conversationDa13.friend) || {};
17521
+ const friendInfo = ((_props$conversationDa17 = props.conversationData) === null || _props$conversationDa17 === void 0 ? void 0 : _props$conversationDa17.friend) || {};
17379
17522
  const senderName = (friendInfo === null || friendInfo === void 0 ? void 0 : friendInfo.username) || (friendInfo === null || friendInfo === void 0 ? void 0 : friendInfo.name) || (friendInfo === null || friendInfo === void 0 ? void 0 : friendInfo.phone) || (message.senderId ? `ID:${message.senderId}` : "");
17380
17523
  const newMessage = {
17381
17524
  id: message.id || Date.now(),
@@ -17395,13 +17538,13 @@ Expected function or array of functions, received type ${typeof value}.`);
17395
17538
  }
17396
17539
  }
17397
17540
  function sendReadReceipt() {
17398
- var _props$conversationDa14, _props$conversationDa15;
17399
- if (!((_props$conversationDa14 = props.conversationData) === null || _props$conversationDa14 === void 0 ? void 0 : _props$conversationDa14.friend)) {
17541
+ var _props$conversationDa18, _props$conversationDa19;
17542
+ if (!((_props$conversationDa18 = props.conversationData) === null || _props$conversationDa18 === void 0 ? void 0 : _props$conversationDa18.friend)) {
17400
17543
  console.warn("无法发送已读回执:缺少 conversationData 或 friend 信息");
17401
17544
  return;
17402
17545
  }
17403
17546
  const readReceiptData = {
17404
- fid: (_props$conversationDa15 = props.conversationData.friend) === null || _props$conversationDa15 === void 0 ? void 0 : _props$conversationDa15.id,
17547
+ fid: (_props$conversationDa19 = props.conversationData.friend) === null || _props$conversationDa19 === void 0 ? void 0 : _props$conversationDa19.id,
17405
17548
  friend_type: props.conversationData.friend_type,
17406
17549
  session_id: props.conversationId
17407
17550
  };
@@ -17462,7 +17605,7 @@ Expected function or array of functions, received type ${typeof value}.`);
17462
17605
  alt: msg.sender,
17463
17606
  class: "msg-avatar-img",
17464
17607
  onError: handleImageError
17465
- }, null, 40, _hoisted_15$2)) : (openBlock(), createElementBlock("div", _hoisted_16$2, toDisplayString(((_msg$sender = msg.sender) === null || _msg$sender === void 0 ? void 0 : _msg$sender.charAt(0)) || "?"), 1))]), createBaseVNode("div", _hoisted_17$2, [createBaseVNode("div", _hoisted_18$1, toDisplayString(msg.sender), 1), createBaseVNode("div", _hoisted_19$1, [msg.msgType === 1 ? (openBlock(), createElementBlock("div", _hoisted_20$1, toDisplayString(msg.content), 1)) : msg.msgType === 2 ? (openBlock(), createElementBlock("div", _hoisted_21, [createBaseVNode("img", {
17608
+ }, null, 40, _hoisted_15$2)) : (openBlock(), createElementBlock("div", _hoisted_16$2, toDisplayString(((_msg$sender = msg.sender) === null || _msg$sender === void 0 ? void 0 : _msg$sender.charAt(0)) || "?"), 1))]), createBaseVNode("div", _hoisted_17$2, [createBaseVNode("div", _hoisted_18$2, toDisplayString(msg.sender), 1), createBaseVNode("div", _hoisted_19$2, [msg.msgType === 1 ? (openBlock(), createElementBlock("div", _hoisted_20$1, toDisplayString(msg.content), 1)) : msg.msgType === 2 ? (openBlock(), createElementBlock("div", _hoisted_21, [createBaseVNode("img", {
17466
17609
  src: msg.content,
17467
17610
  alt: "图片",
17468
17611
  onLoad: ($event) => handleMessageImageLoad(msg.id),
@@ -17471,48 +17614,67 @@ Expected function or array of functions, received type ${typeof value}.`);
17471
17614
  href: msg.content,
17472
17615
  target: "_blank",
17473
17616
  class: "file-link"
17474
- }, " 📎 点击下载文件 ", 8, _hoisted_25)])) : msg.msgType === 5 ? (openBlock(), createElementBlock("div", _hoisted_26, toDisplayString(msg.content), 1)) : msg.msgType === 6 ? (openBlock(), createElementBlock("div", _hoisted_27, toDisplayString(msg.content), 1)) : (openBlock(), createElementBlock("div", _hoisted_28, toDisplayString(msg.content), 1)), createBaseVNode("div", _hoisted_29, toDisplayString(msg.time), 1)])])], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createBaseVNode("div", _hoisted_30, [createBaseVNode("div", _hoisted_31, [msg.msgType === 1 ? (openBlock(), createElementBlock("div", _hoisted_32, toDisplayString(msg.content), 1)) : msg.msgType === 2 ? (openBlock(), createElementBlock("div", _hoisted_33, [createBaseVNode("img", {
17617
+ }, " 📎 点击下载文件 ", 8, _hoisted_25)])) : msg.msgType === 5 ? (openBlock(), createElementBlock("div", _hoisted_26, toDisplayString(msg.content), 1)) : msg.msgType === 6 ? (openBlock(), createElementBlock("div", _hoisted_27, toDisplayString(msg.content), 1)) : msg.msgType === 7 ? (openBlock(), createElementBlock("div", _hoisted_28, [createBaseVNode("video", {
17618
+ src: msg.content,
17619
+ controls: "",
17620
+ preload: "metadata",
17621
+ onLoadedmetadata: scrollToBottomAfterRender
17622
+ }, null, 40, _hoisted_29)])) : (openBlock(), createElementBlock("div", _hoisted_30, toDisplayString(msg.content), 1)), createBaseVNode("div", _hoisted_31, toDisplayString(msg.time), 1)])])], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createBaseVNode("div", _hoisted_32, [createBaseVNode("div", _hoisted_33, [msg.msgType === 1 ? (openBlock(), createElementBlock("div", _hoisted_34, toDisplayString(msg.content), 1)) : msg.msgType === 2 ? (openBlock(), createElementBlock("div", _hoisted_35, [createBaseVNode("img", {
17475
17623
  src: msg.content,
17476
17624
  alt: "图片",
17477
17625
  onLoad: ($event) => handleMessageImageLoad(msg.id),
17478
17626
  onError: handleImageError
17479
- }, null, 40, _hoisted_34)])) : msg.msgType === 3 ? (openBlock(), createElementBlock("div", _hoisted_35, toDisplayString(msg.content), 1)) : msg.msgType === 4 ? (openBlock(), createElementBlock("div", _hoisted_36, [createBaseVNode("a", {
17627
+ }, null, 40, _hoisted_36)])) : msg.msgType === 3 ? (openBlock(), createElementBlock("div", _hoisted_37, toDisplayString(msg.content), 1)) : msg.msgType === 4 ? (openBlock(), createElementBlock("div", _hoisted_38, [createBaseVNode("a", {
17480
17628
  href: msg.content,
17481
17629
  target: "_blank",
17482
17630
  class: "file-link"
17483
- }, " 📎 点击下载文件 ", 8, _hoisted_37)])) : msg.msgType === 5 ? (openBlock(), createElementBlock("div", _hoisted_38, toDisplayString(msg.content), 1)) : msg.msgType === 6 ? (openBlock(), createElementBlock("div", _hoisted_39, toDisplayString(msg.content), 1)) : (openBlock(), createElementBlock("div", _hoisted_40, toDisplayString(msg.content), 1)), createBaseVNode("div", _hoisted_41, toDisplayString(msg.time), 1)])]), createBaseVNode("div", _hoisted_42, [msg.avatar ? (openBlock(), createElementBlock("img", {
17631
+ }, " 📎 点击下载文件 ", 8, _hoisted_39)])) : msg.msgType === 5 ? (openBlock(), createElementBlock("div", _hoisted_40, toDisplayString(msg.content), 1)) : msg.msgType === 6 ? (openBlock(), createElementBlock("div", _hoisted_41, toDisplayString(msg.content), 1)) : msg.msgType === 7 ? (openBlock(), createElementBlock("div", _hoisted_42, [createBaseVNode("video", {
17632
+ src: msg.content,
17633
+ controls: "",
17634
+ preload: "metadata",
17635
+ onLoadedmetadata: scrollToBottomAfterRender
17636
+ }, null, 40, _hoisted_43)])) : (openBlock(), createElementBlock("div", _hoisted_44, toDisplayString(msg.content), 1)), createBaseVNode("div", _hoisted_45, toDisplayString(msg.time), 1)])]), createBaseVNode("div", _hoisted_46, [msg.avatar ? (openBlock(), createElementBlock("img", {
17484
17637
  key: 0,
17485
17638
  src: msg.avatar,
17486
17639
  alt: msg.sender || "用户",
17487
17640
  class: "msg-avatar-img",
17488
17641
  onError: handleImageError
17489
- }, null, 40, _hoisted_43)) : (openBlock(), createElementBlock("div", _hoisted_44, toDisplayString(((_msg$sender2 = msg.sender) === null || _msg$sender2 === void 0 ? void 0 : _msg$sender2.charAt(0)) || "#"), 1))])], 64))], 2);
17642
+ }, null, 40, _hoisted_47)) : (openBlock(), createElementBlock("div", _hoisted_48, toDisplayString(((_msg$sender2 = msg.sender) === null || _msg$sender2 === void 0 ? void 0 : _msg$sender2.charAt(0)) || "#"), 1))])], 64))], 2);
17490
17643
  }), 128)),
17491
- !loading.value && messages.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_45, [createBaseVNode("img", {
17644
+ !loading.value && messages.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_49, [createBaseVNode("img", {
17492
17645
  class: "empty-icon",
17493
17646
  src: unref(message_default),
17494
17647
  alt: "暂无消息"
17495
- }, null, 8, _hoisted_46), _cache[5] || (_cache[5] = createBaseVNode("p", null, "暂无消息", -1))])) : createCommentVNode("", true)
17648
+ }, null, 8, _hoisted_50), _cache[5] || (_cache[5] = createBaseVNode("p", null, "暂无消息", -1))])) : createCommentVNode("", true)
17496
17649
  ], 544),
17497
- createBaseVNode("div", _hoisted_47, [
17498
- createBaseVNode("div", _hoisted_48, [
17650
+ createBaseVNode("div", _hoisted_51, [
17651
+ createBaseVNode("div", _hoisted_52, [
17499
17652
  createBaseVNode("button", {
17500
17653
  class: "tool-btn image-btn",
17501
17654
  disabled: isUploading.value,
17502
17655
  title: "发送图片",
17503
17656
  onClick: handleImageSelect
17504
- }, [createBaseVNode("span", _hoisted_50, [!isUploading.value ? (openBlock(), createElementBlock("svg", _hoisted_51, [..._cache[6] || (_cache[6] = [createBaseVNode("path", {
17657
+ }, [createBaseVNode("span", _hoisted_54, [!isUploading.value ? (openBlock(), createElementBlock("svg", _hoisted_55, [..._cache[6] || (_cache[6] = [createBaseVNode("path", {
17505
17658
  fill: "currentColor",
17506
17659
  d: "M160 160v704h704V160zm-32-64h768a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H128a32 32 0 0 1-32-32V128a32 32 0 0 1 32-32"
17507
17660
  }, null, -1), createBaseVNode("path", {
17508
17661
  fill: "currentColor",
17509
17662
  d: "M384 288q64 0 64 64t-64 64-64-64 64-64M185.408 876.992l-50.816-38.912L350.72 556.032a96 96 0 0 1 134.592-17.856l1.856 1.472 122.88 99.136a32 32 0 0 0 44.992-4.864l216-269.888 49.92 39.936-215.808 269.824-.256.32a96 96 0 0 1-135.04 14.464l-122.88-99.072-.64-.512a32 32 0 0 0-44.8 5.952z"
17510
- }, null, -1)])])) : (openBlock(), createElementBlock("span", _hoisted_52, "⏳"))]), createBaseVNode("span", _hoisted_53, toDisplayString(isUploading.value ? "上传中..." : "图片"), 1)], 8, _hoisted_49),
17511
- createBaseVNode("div", _hoisted_54, [createBaseVNode("button", {
17663
+ }, null, -1)])])) : (openBlock(), createElementBlock("span", _hoisted_56, "⏳"))]), createBaseVNode("span", _hoisted_57, toDisplayString(isUploading.value ? "上传中..." : "图片"), 1)], 8, _hoisted_53),
17664
+ createBaseVNode("button", {
17665
+ class: "tool-btn video-btn",
17666
+ disabled: isUploadingVideo.value,
17667
+ title: "发送视频",
17668
+ onClick: handleVideoSelect
17669
+ }, [createBaseVNode("span", _hoisted_59, [!isUploadingVideo.value ? (openBlock(), createElementBlock("svg", _hoisted_60, [..._cache[7] || (_cache[7] = [createBaseVNode("path", {
17670
+ fill: "currentColor",
17671
+ d: "M832 192H192c-35.2 0-64 28.8-64 64v512c0 35.2 28.8 64 64 64h640c35.2 0 64-28.8 64-64V256c0-35.2-28.8-64-64-64m0 64v512H192V256zM320 320l320 192-320 192z"
17672
+ }, null, -1)])])) : (openBlock(), createElementBlock("span", _hoisted_61, "⏳"))]), createBaseVNode("span", _hoisted_62, toDisplayString(isUploadingVideo.value ? "上传中..." : "视频"), 1)], 8, _hoisted_58),
17673
+ createBaseVNode("div", _hoisted_63, [createBaseVNode("button", {
17512
17674
  class: "tool-btn emoji-btn",
17513
17675
  title: "选择表情",
17514
17676
  onClick: toggleEmojiPicker
17515
- }, [..._cache[7] || (_cache[7] = [createStaticVNode("<span class=\"tool-btn-icon\" aria-hidden=\"true\" data-v-1459079f><svg class=\"tool-btn-svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" data-v-1459079f><circle cx=\"12\" cy=\"12\" r=\"10\" data-v-1459079f></circle><path d=\"M8 14s1.5 2 4 2 4-2 4-2\" data-v-1459079f></path><line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\" data-v-1459079f></line><line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\" data-v-1459079f></line></svg></span><span class=\"tool-btn-text\" data-v-1459079f>表情</span>", 2)])]), showEmojiPicker.value ? (openBlock(), createElementBlock("div", _hoisted_55, [createVNode(unref(Picker), {
17677
+ }, [..._cache[8] || (_cache[8] = [createStaticVNode("<span class=\"tool-btn-icon\" aria-hidden=\"true\" data-v-6f480f31><svg class=\"tool-btn-svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" data-v-6f480f31><circle cx=\"12\" cy=\"12\" r=\"10\" data-v-6f480f31></circle><path d=\"M8 14s1.5 2 4 2 4-2 4-2\" data-v-6f480f31></path><line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\" data-v-6f480f31></line><line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\" data-v-6f480f31></line></svg></span><span class=\"tool-btn-text\" data-v-6f480f31>表情</span>", 2)])]), showEmojiPicker.value ? (openBlock(), createElementBlock("div", _hoisted_64, [createVNode(unref(Picker), {
17516
17678
  native: true,
17517
17679
  theme: "light",
17518
17680
  "group-names": {
@@ -17542,7 +17704,7 @@ Expected function or array of functions, received type ${typeof value}.`);
17542
17704
  class: normalizeClass(["tool-btn quick-reply-trigger", { active: showQuickReplyPanel.value }]),
17543
17705
  title: "快捷回复",
17544
17706
  onClick: toggleQuickReplyPanel
17545
- }, [..._cache[8] || (_cache[8] = [createBaseVNode("span", {
17707
+ }, [..._cache[9] || (_cache[9] = [createBaseVNode("span", {
17546
17708
  class: "tool-btn-icon",
17547
17709
  "aria-hidden": "true"
17548
17710
  }, [createBaseVNode("svg", {
@@ -17553,18 +17715,18 @@ Expected function or array of functions, received type ${typeof value}.`);
17553
17715
  "stroke-width": "2",
17554
17716
  "stroke-linecap": "round",
17555
17717
  "stroke-linejoin": "round"
17556
- }, [createBaseVNode("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" })])], -1), createBaseVNode("span", { class: "tool-btn-text" }, "快捷回复", -1)])], 2), showQuickReplyPanel.value ? (openBlock(), createElementBlock("div", _hoisted_56, [createBaseVNode("div", _hoisted_57, [withDirectives(createBaseVNode("input", {
17718
+ }, [createBaseVNode("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" })])], -1), createBaseVNode("span", { class: "tool-btn-text" }, "快捷回复", -1)])], 2), showQuickReplyPanel.value ? (openBlock(), createElementBlock("div", _hoisted_65, [createBaseVNode("div", _hoisted_66, [withDirectives(createBaseVNode("input", {
17557
17719
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => quickReplyKeyword.value = $event),
17558
17720
  type: "text",
17559
17721
  placeholder: "搜索快捷回复"
17560
- }, null, 512), [[vModelText, quickReplyKeyword.value]])]), createBaseVNode("div", _hoisted_58, [(openBlock(true), createElementBlock(Fragment, null, renderList(filteredQuickReplyList.value, (item, index) => {
17722
+ }, null, 512), [[vModelText, quickReplyKeyword.value]])]), createBaseVNode("div", _hoisted_67, [(openBlock(true), createElementBlock(Fragment, null, renderList(filteredQuickReplyList.value, (item, index) => {
17561
17723
  return openBlock(), createElementBlock("button", {
17562
17724
  key: `${item}-${index}`,
17563
17725
  type: "button",
17564
17726
  class: "quick-reply-item",
17565
17727
  onClick: ($event) => applyQuickReply(item)
17566
- }, toDisplayString(item), 9, _hoisted_59);
17567
- }), 128)), !filteredQuickReplyList.value.length ? (openBlock(), createElementBlock("div", _hoisted_60, " 暂无匹配快捷回复 ")) : createCommentVNode("", true)])])) : createCommentVNode("", true)], 512)) : createCommentVNode("", true)
17728
+ }, toDisplayString(item), 9, _hoisted_68);
17729
+ }), 128)), !filteredQuickReplyList.value.length ? (openBlock(), createElementBlock("div", _hoisted_69, " 暂无匹配快捷回复 ")) : createCommentVNode("", true)])])) : createCommentVNode("", true)], 512)) : createCommentVNode("", true)
17568
17730
  ]),
17569
17731
  withDirectives(createBaseVNode("textarea", {
17570
17732
  ref_key: "inputTextarea",
@@ -17573,7 +17735,7 @@ Expected function or array of functions, received type ${typeof value}.`);
17573
17735
  placeholder: "请输入消息...",
17574
17736
  rows: "3",
17575
17737
  onKeydown: withKeys(withModifiers(sendMessage, ["exact", "prevent"]), ["enter"])
17576
- }, null, 40, _hoisted_61), [[vModelText, inputMessage.value]]),
17738
+ }, null, 40, _hoisted_70), [[vModelText, inputMessage.value]]),
17577
17739
  createBaseVNode("div", { class: "input-actions" }, [createBaseVNode("button", {
17578
17740
  class: "send-btn",
17579
17741
  onClick: sendMessage
@@ -17598,7 +17760,7 @@ Expected function or array of functions, received type ${typeof value}.`);
17598
17760
  ]);
17599
17761
  };
17600
17762
  }
17601
- }), [["__scopeId", "data-v-1459079f"]]);
17763
+ }), [["__scopeId", "data-v-6f480f31"]]);
17602
17764
  //#endregion
17603
17765
  //#region src/assets/img/list.png?url
17604
17766
  var list_default = "data:image/png;base64,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";
@@ -17630,31 +17792,37 @@ Expected function or array of functions, received type ${typeof value}.`);
17630
17792
  var _hoisted_3$2 = { class: "unread-count" };
17631
17793
  var _hoisted_4$1 = {
17632
17794
  key: 1,
17633
- class: "loading-state"
17795
+ class: "search-header"
17634
17796
  };
17635
- var _hoisted_5$1 = {
17797
+ var _hoisted_5$1 = ["onKeydown"];
17798
+ var _hoisted_6$1 = {
17636
17799
  key: 2,
17800
+ class: "loading-state"
17801
+ };
17802
+ var _hoisted_7$1 = {
17803
+ key: 3,
17637
17804
  class: "empty-state"
17638
17805
  };
17639
- var _hoisted_6$1 = ["src"];
17640
- var _hoisted_7$1 = ["onClick"];
17641
- var _hoisted_8$1 = { class: "conversation-item-content" };
17642
- var _hoisted_9$1 = { class: "avatar-wrapper" };
17643
- var _hoisted_10$1 = ["src", "alt"];
17644
- var _hoisted_11$1 = {
17806
+ var _hoisted_8$1 = ["src"];
17807
+ var _hoisted_9$1 = ["onClick"];
17808
+ var _hoisted_10$1 = { class: "conversation-item-content" };
17809
+ var _hoisted_11$1 = { class: "avatar-wrapper" };
17810
+ var _hoisted_12$1 = ["src", "alt"];
17811
+ var _hoisted_13$1 = {
17645
17812
  key: 1,
17646
17813
  class: "avatar-text"
17647
17814
  };
17648
- var _hoisted_12$1 = { class: "session-info" };
17649
- var _hoisted_13$1 = { class: "session-name" };
17650
- var _hoisted_14$1 = { class: "content-text" };
17651
- var _hoisted_15$1 = { class: "session-meta" };
17652
- var _hoisted_16$1 = { class: "session-time" };
17653
- var _hoisted_17$1 = {
17815
+ var _hoisted_14$1 = { class: "session-info" };
17816
+ var _hoisted_15$1 = { class: "session-name" };
17817
+ var _hoisted_16$1 = { class: "content-text" };
17818
+ var _hoisted_17$1 = { class: "session-meta" };
17819
+ var _hoisted_18$1 = { class: "session-time" };
17820
+ var _hoisted_19$1 = {
17654
17821
  key: 0,
17655
17822
  class: "unread-badge"
17656
17823
  };
17657
17824
  var WS_RELOAD_DEBOUNCE_MS = 200;
17825
+ var STORE_API_PREFIX = "/cashier/IM";
17658
17826
  //#endregion
17659
17827
  //#region src/components/ConversationList.vue
17660
17828
  var ConversationList_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -17673,8 +17841,11 @@ Expected function or array of functions, received type ${typeof value}.`);
17673
17841
  const emit = __emit;
17674
17842
  const conversations = /* @__PURE__ */ ref([]);
17675
17843
  const loading = /* @__PURE__ */ ref(false);
17844
+ const searchInputUsername = /* @__PURE__ */ ref("");
17845
+ const searchUsername = /* @__PURE__ */ ref("");
17676
17846
  let latestLoadRequestId = 0;
17677
17847
  let wsReloadTimer = null;
17848
+ const TRAILING_SLASH_REGEXP = /\/+$/;
17678
17849
  const stableMessageDedupe = createStableMessageDedupe();
17679
17850
  const { unreadCount } = useUnreadStore();
17680
17851
  function getUserType() {
@@ -17682,6 +17853,17 @@ Expected function or array of functions, received type ${typeof value}.`);
17682
17853
  const userType = Number(config.api.userType);
17683
17854
  return Number.isFinite(userType) ? userType : void 0;
17684
17855
  }
17856
+ function isStoreMode() {
17857
+ const prefix = String(getConfig().api.prefix || "").trim().replace(TRAILING_SLASH_REGEXP, "");
17858
+ return prefix === STORE_API_PREFIX || prefix.startsWith(`${STORE_API_PREFIX}/`);
17859
+ }
17860
+ const showStoreUsernameSearch = computed(() => {
17861
+ return isStoreMode() && props.type === "conversation";
17862
+ });
17863
+ const emptyStateText = computed(() => {
17864
+ if (showStoreUsernameSearch.value && searchUsername.value) return "未找到匹配用户";
17865
+ return "暂无消息";
17866
+ });
17685
17867
  const MsgType = {
17686
17868
  TEXT: 1,
17687
17869
  IMAGE: 2,
@@ -17763,11 +17945,14 @@ Expected function or array of functions, received type ${typeof value}.`);
17763
17945
  if (!userInfo) return;
17764
17946
  try {
17765
17947
  loading.value = true;
17948
+ const keyword = searchUsername.value.trim();
17949
+ const shouldSearchByUsername = showStoreUsernameSearch.value && !!keyword;
17766
17950
  const result = yield getUserChatList({
17767
17951
  page: 1,
17768
17952
  limit: 50,
17769
17953
  uid: userInfo.id,
17770
- user_type: getUserType()
17954
+ user_type: getUserType(),
17955
+ username: shouldSearchByUsername ? keyword : void 0
17771
17956
  });
17772
17957
  if (requestId !== latestLoadRequestId) return;
17773
17958
  conversations.value = result.list.map((session) => transformSession(session));
@@ -17885,6 +18070,13 @@ Expected function or array of functions, received type ${typeof value}.`);
17885
18070
  loadData();
17886
18071
  }, WS_RELOAD_DEBOUNCE_MS);
17887
18072
  }
18073
+ function handleSearchEnter() {
18074
+ if (!showStoreUsernameSearch.value) return;
18075
+ const nextKeyword = searchInputUsername.value.trim();
18076
+ const changed = nextKeyword !== searchUsername.value;
18077
+ if (changed) searchUsername.value = nextKeyword;
18078
+ if (changed || nextKeyword) loadData();
18079
+ }
17888
18080
  function handleWebSocketMessage(data) {
17889
18081
  const message = normalizeWSMessage(data);
17890
18082
  if (!message) return;
@@ -17910,7 +18102,13 @@ Expected function or array of functions, received type ${typeof value}.`);
17910
18102
  }
17911
18103
  }
17912
18104
  __expose({ reload });
17913
- watch(() => props.type, loadData);
18105
+ watch(() => props.type, (nextType, prevType) => {
18106
+ if (prevType === "conversation" && nextType !== "conversation" && (searchInputUsername.value || searchUsername.value)) {
18107
+ searchInputUsername.value = "";
18108
+ searchUsername.value = "";
18109
+ }
18110
+ loadData();
18111
+ });
17914
18112
  onMounted(() => {
17915
18113
  loadData();
17916
18114
  wsClient.on("message", handleWebSocketMessage);
@@ -17925,32 +18123,40 @@ Expected function or array of functions, received type ${typeof value}.`);
17925
18123
  return (_ctx, _cache) => {
17926
18124
  return openBlock(), createElementBlock("div", _hoisted_1$3, [
17927
18125
  props.type === "unread" ? (openBlock(), createElementBlock("div", _hoisted_2$2, [createBaseVNode("span", _hoisted_3$2, "未读消息 (" + toDisplayString(unref(unreadCount)) + ")", 1)])) : createCommentVNode("", true),
17928
- loading.value ? (openBlock(), createElementBlock("div", _hoisted_4$1, [..._cache[0] || (_cache[0] = [createBaseVNode("div", { class: "loading-spinner" }, null, -1), createBaseVNode("p", null, "加载中...", -1)])])) : filteredConversations.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_5$1, [createBaseVNode("img", {
18126
+ showStoreUsernameSearch.value ? (openBlock(), createElementBlock("div", _hoisted_4$1, [withDirectives(createBaseVNode("input", {
18127
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchInputUsername.value = $event),
18128
+ class: "search-input",
18129
+ type: "text",
18130
+ placeholder: "输入用户名后回车搜索",
18131
+ maxlength: "32",
18132
+ onKeydown: withKeys(withModifiers(handleSearchEnter, ["prevent"]), ["enter"])
18133
+ }, null, 40, _hoisted_5$1), [[vModelText, searchInputUsername.value]])])) : createCommentVNode("", true),
18134
+ loading.value ? (openBlock(), createElementBlock("div", _hoisted_6$1, [..._cache[1] || (_cache[1] = [createBaseVNode("div", { class: "loading-spinner" }, null, -1), createBaseVNode("p", null, "加载中...", -1)])])) : filteredConversations.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_7$1, [createBaseVNode("img", {
17929
18135
  class: "empty-icon",
17930
18136
  src: unref(list_default),
17931
18137
  alt: "暂无消息"
17932
- }, null, 8, _hoisted_6$1), _cache[1] || (_cache[1] = createBaseVNode("p", null, "暂无消息", -1))])) : createCommentVNode("", true),
18138
+ }, null, 8, _hoisted_8$1), createBaseVNode("p", null, toDisplayString(emptyStateText.value), 1)])) : createCommentVNode("", true),
17933
18139
  (openBlock(true), createElementBlock(Fragment, null, renderList(filteredConversations.value, (conversation) => {
17934
18140
  return openBlock(), createElementBlock("div", {
17935
18141
  key: conversation.id,
17936
18142
  class: normalizeClass(["conversation-item", { active: conversation.id === props.selectedId }]),
17937
18143
  onClick: ($event) => handleSelect(conversation.id)
17938
- }, [createBaseVNode("div", _hoisted_8$1, [
17939
- createBaseVNode("div", _hoisted_9$1, [conversation.avatar ? (openBlock(), createElementBlock("img", {
18144
+ }, [createBaseVNode("div", _hoisted_10$1, [
18145
+ createBaseVNode("div", _hoisted_11$1, [conversation.avatar ? (openBlock(), createElementBlock("img", {
17940
18146
  key: 0,
17941
18147
  src: conversation.avatar,
17942
18148
  alt: conversation.name,
17943
18149
  class: "avatar-img",
17944
18150
  onError: handleImageError
17945
- }, null, 40, _hoisted_10$1)) : (openBlock(), createElementBlock("div", _hoisted_11$1, toDisplayString(conversation.avatarText), 1))]),
17946
- createBaseVNode("div", _hoisted_12$1, [createBaseVNode("div", _hoisted_13$1, toDisplayString(conversation.name), 1), createBaseVNode("span", _hoisted_14$1, toDisplayString(conversation.lastMessage), 1)]),
17947
- createBaseVNode("div", _hoisted_15$1, [createBaseVNode("div", _hoisted_16$1, toDisplayString(formatTime(conversation.lastTime)), 1), conversation.unreadCount > 0 ? (openBlock(), createElementBlock("span", _hoisted_17$1, toDisplayString(conversation.unreadCount > 99 ? "99+" : conversation.unreadCount), 1)) : createCommentVNode("", true)])
17948
- ])], 10, _hoisted_7$1);
18151
+ }, null, 40, _hoisted_12$1)) : (openBlock(), createElementBlock("div", _hoisted_13$1, toDisplayString(conversation.avatarText), 1))]),
18152
+ createBaseVNode("div", _hoisted_14$1, [createBaseVNode("div", _hoisted_15$1, toDisplayString(conversation.name), 1), createBaseVNode("span", _hoisted_16$1, toDisplayString(conversation.lastMessage), 1)]),
18153
+ createBaseVNode("div", _hoisted_17$1, [createBaseVNode("div", _hoisted_18$1, toDisplayString(formatTime(conversation.lastTime)), 1), conversation.unreadCount > 0 ? (openBlock(), createElementBlock("span", _hoisted_19$1, toDisplayString(conversation.unreadCount > 99 ? "99+" : conversation.unreadCount), 1)) : createCommentVNode("", true)])
18154
+ ])], 10, _hoisted_9$1);
17949
18155
  }), 128))
17950
18156
  ]);
17951
18157
  };
17952
18158
  }
17953
- }), [["__scopeId", "data-v-d070a051"]]);
18159
+ }), [["__scopeId", "data-v-66bc5469"]]);
17954
18160
  //#endregion
17955
18161
  //#region src/components/ChatWindow.vue?vue&type=script&setup=true&lang.ts
17956
18162
  var _hoisted_1$2 = { class: "user-info-section" };
@@ -19196,6 +19402,25 @@ Expected function or array of functions, received type ${typeof value}.`);
19196
19402
  if (wsPlatform !== wsPlatform.toLowerCase()) throw new Error(`IMSDK 初始化失败:ws.platform 必须为小写,当前为 ${wsPlatform}`);
19197
19403
  if (wsController.toLowerCase() !== wsPlatform) throw new Error(`IMSDK 初始化失败:ws.controller (${wsController}) 与 ws.platform (${wsPlatform}) 不匹配`);
19198
19404
  }
19405
+ function normalizeText(value) {
19406
+ return typeof value === "string" ? value.trim() : "";
19407
+ }
19408
+ function mergeAuthorizedUserInfo(authData, inputPhone) {
19409
+ var _config$auth;
19410
+ const authorizationPayload = ((_config$auth = getConfig().auth) === null || _config$auth === void 0 ? void 0 : _config$auth.authorizationPayload) || {};
19411
+ const payloadUsername = normalizeText(authorizationPayload.username);
19412
+ const payloadAvatar = normalizeText(authorizationPayload.avatar);
19413
+ const resolvedPhone = normalizeText(authData.phone) || inputPhone;
19414
+ const resolvedUsername = normalizeText(authData.username) || payloadUsername;
19415
+ const resolvedName = normalizeText(authData.name) || resolvedUsername;
19416
+ const resolvedAvatar = normalizeText(authData.avatar) || normalizeText(authData.cover) || payloadAvatar;
19417
+ return _objectSpread2(_objectSpread2({}, authData), {}, {
19418
+ phone: resolvedPhone,
19419
+ username: resolvedUsername,
19420
+ name: resolvedName,
19421
+ avatar: resolvedAvatar
19422
+ });
19423
+ }
19199
19424
  function initIM() {
19200
19425
  return _initIM.apply(this, arguments);
19201
19426
  }
@@ -19266,11 +19491,14 @@ Expected function or array of functions, received type ${typeof value}.`);
19266
19491
  if (!normalizedPhone) throw new Error("IMSDK 初始化失败:缺少鉴权参数 phone");
19267
19492
  try {
19268
19493
  const authData = yield getAuthorization({ phone: normalizedPhone });
19269
- userInfo.value = authData;
19270
- if (!authData.token) throw new Error("鉴权返回 token 为空");
19271
- httpClient.setAuth(authData.token, "");
19494
+ const normalizedToken = normalizeText(authData.token);
19495
+ if (!normalizedToken) throw new Error("鉴权返回 token 为空");
19496
+ const mergedAuthData = mergeAuthorizedUserInfo(authData, normalizedPhone);
19497
+ mergedAuthData.token = normalizedToken;
19498
+ userInfo.value = mergedAuthData;
19499
+ httpClient.setAuth(normalizedToken, "");
19272
19500
  const sdkConfig = getConfig();
19273
- wsClient.connect(authData.token, authData.id, authData.phone, sdkConfig.api.siteId).catch((error) => {
19501
+ wsClient.connect(normalizedToken, mergedAuthData.id, mergedAuthData.phone, sdkConfig.api.siteId).catch((error) => {
19274
19502
  console.error("WebSocket连接失败:", error);
19275
19503
  });
19276
19504
  } catch (error) {
@@ -19347,6 +19575,8 @@ Expected function or array of functions, received type ${typeof value}.`);
19347
19575
  exports.isStoreMode = isStoreMode;
19348
19576
  exports.resetConfig = resetConfig;
19349
19577
  exports.updateConfig = updateConfig;
19578
+ exports.uploadFile = uploadFile;
19579
+ exports.uploadImage = uploadImage;
19350
19580
  exports.warnModeOverrides = warnModeOverrides;
19351
19581
  exports.wsClient = wsClient;
19352
19582
  });