@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.
- package/README.md +1 -0
- package/dist/api/index.d.ts +7 -0
- package/dist/config/index.d.ts +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/shared-imsdk.css +166 -120
- package/dist/shared-imsdk.es.js +329 -101
- package/dist/shared-imsdk.umd.cjs +330 -100
- package/dist/types/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -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(
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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$
|
|
16761
|
-
var _hoisted_19$
|
|
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
|
|
16793
|
-
var
|
|
16794
|
-
var
|
|
16795
|
-
var
|
|
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
|
|
16858
|
+
var _hoisted_35 = {
|
|
16800
16859
|
key: 1,
|
|
16801
16860
|
class: "message-image"
|
|
16802
16861
|
};
|
|
16803
|
-
var
|
|
16804
|
-
var
|
|
16862
|
+
var _hoisted_36 = ["src", "onLoad"];
|
|
16863
|
+
var _hoisted_37 = {
|
|
16805
16864
|
key: 2,
|
|
16806
16865
|
class: "message-emoji"
|
|
16807
16866
|
};
|
|
16808
|
-
var
|
|
16867
|
+
var _hoisted_38 = {
|
|
16809
16868
|
key: 3,
|
|
16810
16869
|
class: "message-file"
|
|
16811
16870
|
};
|
|
16812
|
-
var
|
|
16813
|
-
var
|
|
16871
|
+
var _hoisted_39 = ["href"];
|
|
16872
|
+
var _hoisted_40 = {
|
|
16814
16873
|
key: 4,
|
|
16815
16874
|
class: "message-system"
|
|
16816
16875
|
};
|
|
16817
|
-
var
|
|
16876
|
+
var _hoisted_41 = {
|
|
16818
16877
|
key: 5,
|
|
16819
16878
|
class: "message-card"
|
|
16820
16879
|
};
|
|
16821
|
-
var
|
|
16880
|
+
var _hoisted_42 = {
|
|
16822
16881
|
key: 6,
|
|
16823
|
-
class: "message-
|
|
16882
|
+
class: "message-video"
|
|
16824
16883
|
};
|
|
16825
|
-
var
|
|
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
|
|
16896
|
+
var _hoisted_49 = {
|
|
16833
16897
|
key: 3,
|
|
16834
16898
|
class: "empty-messages"
|
|
16835
16899
|
};
|
|
16836
|
-
var
|
|
16837
|
-
var
|
|
16838
|
-
var
|
|
16839
|
-
var
|
|
16840
|
-
var
|
|
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
|
|
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
|
|
16850
|
-
var
|
|
16851
|
-
var
|
|
16852
|
-
var
|
|
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
|
|
16932
|
+
var _hoisted_65 = {
|
|
16857
16933
|
key: 0,
|
|
16858
16934
|
class: "quick-reply-panel"
|
|
16859
16935
|
};
|
|
16860
|
-
var
|
|
16861
|
-
var
|
|
16862
|
-
var
|
|
16863
|
-
var
|
|
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
|
|
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(
|
|
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$
|
|
17519
|
+
var _props$conversationDa17;
|
|
17377
17520
|
if (existingMessageIndex !== -1) return;
|
|
17378
|
-
const friendInfo = ((_props$
|
|
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$
|
|
17399
|
-
if (!((_props$
|
|
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$
|
|
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$
|
|
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)) :
|
|
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,
|
|
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,
|
|
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,
|
|
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",
|
|
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,
|
|
17648
|
+
}, null, 8, _hoisted_50), _cache[5] || (_cache[5] = createBaseVNode("p", null, "暂无消息", -1))])) : createCommentVNode("", true)
|
|
17496
17649
|
], 544),
|
|
17497
|
-
createBaseVNode("div",
|
|
17498
|
-
createBaseVNode("div",
|
|
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",
|
|
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",
|
|
17511
|
-
createBaseVNode("
|
|
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[
|
|
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[
|
|
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",
|
|
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",
|
|
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,
|
|
17567
|
-
}), 128)), !filteredQuickReplyList.value.length ? (openBlock(), createElementBlock("div",
|
|
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,
|
|
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-
|
|
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: "
|
|
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
|
|
17640
|
-
var
|
|
17641
|
-
var
|
|
17642
|
-
var
|
|
17643
|
-
var
|
|
17644
|
-
var
|
|
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
|
|
17649
|
-
var
|
|
17650
|
-
var
|
|
17651
|
-
var
|
|
17652
|
-
var
|
|
17653
|
-
var
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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",
|
|
17939
|
-
createBaseVNode("div",
|
|
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,
|
|
17946
|
-
createBaseVNode("div",
|
|
17947
|
-
createBaseVNode("div",
|
|
17948
|
-
])], 10,
|
|
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-
|
|
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
|
-
|
|
19270
|
-
if (!
|
|
19271
|
-
|
|
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(
|
|
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
|
});
|