@robot-admin/naive-ui-components 0.12.1 → 0.13.1
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/CHANGELOG.md +20 -0
- package/README.md +60 -1
- package/README_EN.md +59 -0
- package/dist/C_ActionBar.css +60 -60
- package/dist/C_ActionBar2.cjs +1 -1
- package/dist/C_ActionBar2.js +1 -1
- package/dist/C_AntV.css +49 -49
- package/dist/C_AntV2.cjs +3 -3
- package/dist/C_AntV2.js +3 -3
- package/dist/C_AudioPlayer.css +81 -66
- package/dist/C_AudioPlayer2.cjs +1 -1
- package/dist/C_AudioPlayer2.js +1 -1
- package/dist/C_AvatarGroup.css +40 -25
- package/dist/C_AvatarGroup2.cjs +1 -1
- package/dist/C_AvatarGroup2.js +1 -1
- package/dist/C_Barcode.css +6 -6
- package/dist/C_Barcode2.cjs +1 -1
- package/dist/C_Barcode2.js +1 -1
- package/dist/C_Breadcrumb.css +14 -14
- package/dist/C_Breadcrumb2.cjs +1 -1
- package/dist/C_Breadcrumb2.js +1 -1
- package/dist/C_Captcha.css +50 -50
- package/dist/C_Captcha2.cjs +1 -1
- package/dist/C_Captcha2.js +1 -1
- package/dist/C_Cascade.css +2 -2
- package/dist/C_Cascade2.cjs +1 -1
- package/dist/C_Cascade2.js +1 -1
- package/dist/C_Chat.css +96 -78
- package/dist/C_Chat2.cjs +1 -1
- package/dist/C_Chat2.js +1 -1
- package/dist/C_City.css +52 -28
- package/dist/C_City2.cjs +1 -1
- package/dist/C_City2.js +1 -1
- package/dist/C_Code.css +48 -42
- package/dist/C_Code2.cjs +1 -1
- package/dist/C_Code2.js +1 -1
- package/dist/C_CollapsePanel.css +14 -14
- package/dist/C_CollapsePanel2.cjs +1 -1
- package/dist/C_CollapsePanel2.js +1 -1
- package/dist/C_ContextMenu.css +14 -14
- package/dist/C_ContextMenu2.cjs +1 -1
- package/dist/C_ContextMenu2.js +1 -1
- package/dist/C_Cron.css +94 -55
- package/dist/C_Cron2.cjs +1 -1
- package/dist/C_Cron2.js +1 -1
- package/dist/C_Date2.cjs +1 -1
- package/dist/C_Date2.js +1 -1
- package/dist/C_Draggable.css +48 -48
- package/dist/C_Draggable2.cjs +1 -1
- package/dist/C_Draggable2.js +1 -1
- package/dist/C_Editor.css +13 -14
- package/dist/C_Editor2.cjs +1 -1
- package/dist/C_Editor2.js +1 -1
- package/dist/C_FilePreview.css +18 -18
- package/dist/C_FilePreview2.cjs +1 -1
- package/dist/C_FilePreview2.js +1 -1
- package/dist/C_Form.base.css +36 -36
- package/dist/C_Form.css +49 -50
- package/dist/C_Form2.cjs +1 -1
- package/dist/C_Form2.js +1 -1
- package/dist/C_FormModal.css +8 -8
- package/dist/C_FormModal2.cjs +1 -1
- package/dist/C_FormModal2.js +1 -1
- package/dist/C_FormSearch.css +45 -45
- package/dist/C_FormSearch2.cjs +1 -1
- package/dist/C_FormSearch2.js +1 -1
- package/dist/C_FormulaEditor.css +94 -55
- package/dist/C_FormulaEditor2.cjs +2 -2
- package/dist/C_FormulaEditor2.js +2 -2
- package/dist/C_FullCalendar.css +8 -1
- package/dist/C_FullCalendar2.cjs +1 -1
- package/dist/C_FullCalendar2.js +1 -1
- package/dist/C_GlobalSearch2.cjs +1 -1
- package/dist/C_GlobalSearch2.js +1 -1
- package/dist/C_Guide.css +137 -14
- package/dist/C_Guide.d.cts +2 -2
- package/dist/C_Guide.d.ts +2 -2
- package/dist/C_Guide2.cjs +1 -1
- package/dist/C_Guide2.js +1 -1
- package/dist/C_Icon.css +14 -14
- package/dist/C_Icon2.cjs +1 -1
- package/dist/C_Icon2.js +1 -1
- package/dist/C_ImageCropper.css +22 -22
- package/dist/C_ImageCropper2.cjs +1 -1
- package/dist/C_ImageCropper2.js +1 -1
- package/dist/C_Language.css +14 -14
- package/dist/C_Language2.cjs +1 -1
- package/dist/C_Language2.js +1 -1
- package/dist/C_Login.css +134 -134
- package/dist/C_Login2.cjs +1 -1
- package/dist/C_Login2.js +1 -1
- package/dist/C_Map.css +3 -3
- package/dist/C_Map2.cjs +1 -1
- package/dist/C_Map2.js +1 -1
- package/dist/C_Markdown.css +35 -35
- package/dist/C_Markdown2.cjs +1 -1
- package/dist/C_Markdown2.js +1 -1
- package/dist/C_Menu2.cjs +1 -1
- package/dist/C_Menu2.js +1 -1
- package/dist/C_NotificationCenter.css +30 -30
- package/dist/C_NotificationCenter2.cjs +1 -1
- package/dist/C_NotificationCenter2.js +1 -1
- package/dist/C_OrgChart.css +4 -0
- package/dist/C_OrgChart2.cjs +1 -1
- package/dist/C_OrgChart2.js +1 -1
- package/dist/C_Progress2.cjs +1 -1
- package/dist/C_Progress2.js +1 -1
- package/dist/C_QRCode.css +8 -8
- package/dist/C_QRCode2.cjs +1 -1
- package/dist/C_QRCode2.js +1 -1
- package/dist/C_Signature.css +14 -14
- package/dist/C_Signature2.cjs +1 -1
- package/dist/C_Signature2.js +1 -1
- package/dist/C_Skeleton2.cjs +1 -1
- package/dist/C_Skeleton2.js +1 -1
- package/dist/C_SplitPane.css +39 -39
- package/dist/C_SplitPane2.cjs +1 -1
- package/dist/C_SplitPane2.js +1 -1
- package/dist/C_Steps.css +48 -38
- package/dist/C_Steps2.cjs +1 -1
- package/dist/C_Steps2.js +1 -1
- package/dist/C_Table.base.css +160 -160
- package/dist/C_Table.css +173 -174
- package/dist/C_TagsView.css +52 -52
- package/dist/C_TagsView2.cjs +1 -1
- package/dist/C_TagsView2.js +1 -1
- package/dist/C_Theme.css +14 -14
- package/dist/C_Theme2.cjs +1 -1
- package/dist/C_Theme2.js +1 -1
- package/dist/C_Time.css +4 -4
- package/dist/C_Time2.cjs +1 -1
- package/dist/C_Time2.js +1 -1
- package/dist/C_Timeline.css +76 -58
- package/dist/C_Timeline2.cjs +1 -1
- package/dist/C_Timeline2.js +1 -1
- package/dist/C_Transfer.css +51 -51
- package/dist/C_Transfer2.cjs +1 -1
- package/dist/C_Transfer2.js +1 -1
- package/dist/C_Tree.css +35 -32
- package/dist/C_Tree2.cjs +1 -1
- package/dist/C_Tree2.js +1 -1
- package/dist/C_Upload.css +53 -50
- package/dist/C_Upload2.cjs +1 -1
- package/dist/C_Upload2.js +1 -1
- package/dist/C_VideoPlayer.css +17 -13
- package/dist/C_VideoPlayer2.cjs +2 -2
- package/dist/C_VideoPlayer2.js +2 -2
- package/dist/C_VtableGantt.css +19 -19
- package/dist/C_VtableGantt2.cjs +1 -1
- package/dist/C_VtableGantt2.js +1 -1
- package/dist/C_WaterFall.css +19 -15
- package/dist/C_WaterFall2.cjs +1 -1
- package/dist/C_WaterFall2.js +1 -1
- package/dist/C_WorkFlow.css +123 -123
- package/dist/C_WorkFlow2.cjs +1 -1
- package/dist/C_WorkFlow2.js +1 -1
- package/dist/constants.d.cts +3 -3
- package/dist/constants.d.ts +3 -3
- package/dist/constants2.d.cts +2 -2
- package/dist/constants2.d.ts +2 -2
- package/dist/constants3.d.cts +12 -8
- package/dist/constants3.d.ts +12 -8
- package/dist/constants4.d.cts +9 -9
- package/dist/constants4.d.ts +9 -9
- package/dist/constants5.d.cts +4 -4
- package/dist/constants5.d.ts +4 -4
- package/dist/data.d.cts +11 -11
- package/dist/data.d.ts +11 -11
- package/dist/data2.cjs +1 -1
- package/dist/data2.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +2 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.vue.d.cts +7 -5
- package/dist/index.vue.d.ts +7 -5
- package/dist/index10.vue.d.cts +2 -2
- package/dist/index10.vue.d.ts +2 -2
- package/dist/index11.vue.d.cts +2 -2
- package/dist/index11.vue.d.ts +5 -5
- package/dist/index12.vue.d.cts +5 -5
- package/dist/index12.vue.d.ts +2 -2
- package/dist/index13.vue.d.cts +2 -2
- package/dist/index13.vue.d.ts +35 -9
- package/dist/index14.vue.d.cts +35 -9
- package/dist/index14.vue.d.ts +15 -48
- package/dist/index15.vue.d.cts +15 -48
- package/dist/index17.vue.d.ts +4 -4
- package/dist/index18.vue.d.cts +4 -4
- package/dist/index18.vue.d.ts +2 -2
- package/dist/index19.vue.d.cts +2 -2
- package/dist/index19.vue.d.ts +2 -2
- package/dist/index2.vue.d.cts +3 -3
- package/dist/index2.vue.d.ts +3 -3
- package/dist/index20.vue.d.cts +2 -2
- package/dist/index20.vue.d.ts +2 -2
- package/dist/index21.vue.d.cts +3 -3
- package/dist/index21.vue.d.ts +3 -3
- package/dist/index22.vue.d.cts +1 -1
- package/dist/index22.vue.d.ts +1 -1
- package/dist/index24.vue.d.cts +3 -3
- package/dist/index24.vue.d.ts +3 -3
- package/dist/index26.vue.d.cts +1 -1
- package/dist/index26.vue.d.ts +1 -1
- package/dist/index27.vue.d.cts +1 -1
- package/dist/index27.vue.d.ts +1 -1
- package/dist/index3.vue.d.cts +8 -8
- package/dist/index3.vue.d.ts +8 -8
- package/dist/index4.vue.d.cts +2 -2
- package/dist/index6.vue.d.ts +1 -1
- package/dist/index7.vue.d.cts +1 -1
- package/dist/index8.vue.d.ts +3 -3
- package/dist/index9.vue.d.cts +3 -3
- package/dist/index9.vue.d.ts +2 -2
- package/dist/mapUtils.d.cts +4 -4
- package/dist/mapUtils.d.ts +4 -4
- package/dist/style.css +1698 -1365
- package/dist/useCalendarEvents.d.cts +23 -18
- package/dist/useCalendarEvents.d.ts +23 -18
- package/dist/useCollapsePanel.d.cts +1 -0
- package/dist/useCollapsePanel.d.ts +1 -0
- package/dist/useCropperCore.d.cts +32 -17
- package/dist/useCropperCore.d.ts +32 -17
- package/dist/useDraggableLayout.d.cts +3 -3
- package/dist/useDraggableLayout.d.ts +3 -3
- package/dist/useDynamicFormState.d.cts +5 -0
- package/dist/useDynamicFormState.d.ts +5 -0
- package/dist/useEdgeInteraction.d.cts +19 -19
- package/dist/useEdgeInteraction.d.ts +19 -19
- package/dist/useFullscreen.d.cts +6 -6
- package/dist/useFullscreen.d.ts +6 -6
- package/dist/useInfiniteScroll.d.cts +2 -2
- package/dist/useInfiniteScroll.d.ts +2 -2
- package/dist/useQRCode.d.cts +6 -5
- package/dist/useQRCode.d.ts +6 -5
- package/dist/useSearchState.d.cts +7 -7
- package/dist/useSearchState.d.ts +7 -7
- package/dist/useSignatureHistory.d.cts +16 -8
- package/dist/useSignatureHistory.d.ts +16 -8
- package/dist/useSplitResize.d.cts +4 -4
- package/dist/useSplitResize.d.ts +4 -4
- package/dist/useTableQuery.cjs +3 -3
- package/dist/useTableQuery.d.cts +2 -5
- package/dist/useTableQuery.d.ts +2 -5
- package/dist/useTableQuery.js +3 -3
- package/dist/useTimeSelection.d.cts +5 -2
- package/dist/useTimeSelection.d.ts +5 -2
- package/dist/useTreeOperations.d.cts +6 -6
- package/dist/useTreeOperations.d.ts +6 -6
- package/dist/useWorkflowValidation.d.cts +4 -2
- package/dist/useWorkflowValidation.d.ts +4 -2
- package/dist/verification.d.cts +3 -3
- package/dist/verification.d.ts +3 -3
- package/package.json +4 -3
package/dist/C_Chat.css
CHANGED
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
/* unplugin-vue-components disabled */.c-icon[data-v-
|
|
1
|
+
/* unplugin-vue-components disabled */.c-icon[data-v-711aedcd] {
|
|
2
2
|
display: inline-flex;
|
|
3
3
|
align-items: center;
|
|
4
4
|
justify-content: center;
|
|
5
5
|
user-select: none;
|
|
6
6
|
transition: all 0.2s ease-in-out;
|
|
7
7
|
}
|
|
8
|
-
.c-icon--clickable[data-v-
|
|
8
|
+
.c-icon--clickable[data-v-711aedcd] {
|
|
9
9
|
cursor: pointer;
|
|
10
10
|
}
|
|
11
|
-
.c-icon--clickable[data-v-
|
|
11
|
+
.c-icon--clickable[data-v-711aedcd]:hover {
|
|
12
12
|
opacity: 0.8;
|
|
13
13
|
transform: scale(1.05);
|
|
14
14
|
}
|
|
15
|
-
.c-icon--clickable[data-v-
|
|
15
|
+
.c-icon--clickable[data-v-711aedcd]:active {
|
|
16
16
|
transform: scale(0.95);
|
|
17
17
|
}
|
|
18
|
-
.c-icon--clickable[data-v-
|
|
18
|
+
.c-icon--clickable[data-v-711aedcd]:focus-visible {
|
|
19
19
|
outline: 2px solid currentColor;
|
|
20
20
|
outline-offset: 2px;
|
|
21
21
|
border-radius: 4px;
|
|
22
22
|
}
|
|
23
|
-
.c-icon--loading[data-v-
|
|
23
|
+
.c-icon--loading[data-v-711aedcd] {
|
|
24
24
|
opacity: 0.6;
|
|
25
25
|
cursor: wait;
|
|
26
26
|
}
|
|
27
|
-
.c-icon--error[data-v-
|
|
27
|
+
.c-icon--error[data-v-711aedcd] {
|
|
28
28
|
opacity: 0.5;
|
|
29
29
|
}
|
|
30
|
-
.c-icon__loading[data-v-
|
|
30
|
+
.c-icon__loading[data-v-711aedcd] {
|
|
31
31
|
position: relative;
|
|
32
32
|
}
|
|
33
|
-
.c-icon__spinner[data-v-
|
|
33
|
+
.c-icon__spinner[data-v-711aedcd] {
|
|
34
34
|
width: 100%;
|
|
35
35
|
height: 100%;
|
|
36
36
|
border: 2px solid currentColor;
|
|
37
37
|
border-radius: 50%;
|
|
38
38
|
border-top-color: transparent;
|
|
39
|
-
animation: spin-
|
|
39
|
+
animation: spin-711aedcd 1s linear infinite;
|
|
40
40
|
}
|
|
41
|
-
.c-icon__error[data-v-
|
|
41
|
+
.c-icon__error[data-v-711aedcd] {
|
|
42
42
|
font-size: 0.8em;
|
|
43
43
|
opacity: 0.5;
|
|
44
44
|
}
|
|
45
|
-
.c-icon__rotatable[data-v-
|
|
45
|
+
.c-icon__rotatable[data-v-711aedcd] {
|
|
46
46
|
transition: transform 0.3s ease-in-out;
|
|
47
47
|
}
|
|
48
|
-
.c-icon__flippable[data-v-
|
|
48
|
+
.c-icon__flippable[data-v-711aedcd] {
|
|
49
49
|
transition: transform 0.3s ease-in-out;
|
|
50
50
|
}
|
|
51
|
-
@keyframes spin-
|
|
51
|
+
@keyframes spin-711aedcd {
|
|
52
52
|
0% {
|
|
53
53
|
transform: rotate(0deg);
|
|
54
54
|
}
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
/* unplugin-vue-components disabled *//* ─── CSS 变量(基于项目主题变量,自动适配明暗) ───────────────────────── */
|
|
61
|
-
.c-chat[data-v-
|
|
61
|
+
.c-chat[data-v-281bb0dd] {
|
|
62
62
|
--chat-bg: var(--card-color);
|
|
63
63
|
--chat-sidebar-bg: var(--body-color);
|
|
64
64
|
--chat-sidebar-width: 280px;
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
/* ─── 联系人侧栏 ──────────────────────────────────────── */
|
|
99
|
-
.c-chat__sidebar[data-v-
|
|
99
|
+
.c-chat__sidebar[data-v-281bb0dd] {
|
|
100
100
|
display: flex;
|
|
101
101
|
flex-direction: column;
|
|
102
102
|
width: var(--chat-sidebar-width);
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
border-right: 1px solid var(--chat-border);
|
|
106
106
|
box-shadow: 2px 0 8px var(--chat-shadow-light);
|
|
107
107
|
}
|
|
108
|
-
.c-chat__sidebar-header[data-v-
|
|
108
|
+
.c-chat__sidebar-header[data-v-281bb0dd] {
|
|
109
109
|
display: flex;
|
|
110
110
|
align-items: center;
|
|
111
111
|
gap: 8px;
|
|
@@ -115,22 +115,22 @@
|
|
|
115
115
|
font-weight: 600;
|
|
116
116
|
font-size: 15px;
|
|
117
117
|
}
|
|
118
|
-
.c-chat__search[data-v-
|
|
118
|
+
.c-chat__search[data-v-281bb0dd] {
|
|
119
119
|
padding: 8px 12px;
|
|
120
120
|
}
|
|
121
|
-
.c-chat__contact-list[data-v-
|
|
121
|
+
.c-chat__contact-list[data-v-281bb0dd] {
|
|
122
122
|
flex: 1;
|
|
123
123
|
overflow-y: auto;
|
|
124
124
|
overscroll-behavior: contain;
|
|
125
125
|
}
|
|
126
|
-
.c-chat__contact-list[data-v-
|
|
126
|
+
.c-chat__contact-list[data-v-281bb0dd]::-webkit-scrollbar {
|
|
127
127
|
width: 4px;
|
|
128
128
|
}
|
|
129
|
-
.c-chat__contact-list[data-v-
|
|
129
|
+
.c-chat__contact-list[data-v-281bb0dd]::-webkit-scrollbar-thumb {
|
|
130
130
|
background: var(--chat-scrollbar-thumb);
|
|
131
131
|
border-radius: 2px;
|
|
132
132
|
}
|
|
133
|
-
.c-chat__contact[data-v-
|
|
133
|
+
.c-chat__contact[data-v-281bb0dd] {
|
|
134
134
|
display: flex;
|
|
135
135
|
align-items: center;
|
|
136
136
|
gap: 10px;
|
|
@@ -138,24 +138,24 @@
|
|
|
138
138
|
cursor: pointer;
|
|
139
139
|
transition: background 0.15s;
|
|
140
140
|
}
|
|
141
|
-
.c-chat__contact[data-v-
|
|
141
|
+
.c-chat__contact[data-v-281bb0dd]:hover {
|
|
142
142
|
background: color-mix(in srgb, var(--primary-color) 6%, transparent);
|
|
143
143
|
}
|
|
144
|
-
.c-chat__contact.is-active[data-v-
|
|
144
|
+
.c-chat__contact.is-active[data-v-281bb0dd] {
|
|
145
145
|
background: color-mix(in srgb, var(--primary-color) 12%, transparent);
|
|
146
146
|
}
|
|
147
|
-
.c-chat__contact-avatar[data-v-
|
|
147
|
+
.c-chat__contact-avatar[data-v-281bb0dd] {
|
|
148
148
|
position: relative;
|
|
149
149
|
flex-shrink: 0;
|
|
150
150
|
}
|
|
151
|
-
.c-chat__avatar[data-v-
|
|
151
|
+
.c-chat__avatar[data-v-281bb0dd] {
|
|
152
152
|
width: var(--chat-avatar-size);
|
|
153
153
|
height: var(--chat-avatar-size);
|
|
154
154
|
border-radius: 50%;
|
|
155
155
|
object-fit: cover;
|
|
156
156
|
background: color-mix(in srgb, var(--border-color) 50%, transparent);
|
|
157
157
|
}
|
|
158
|
-
.c-chat__avatar-fallback[data-v-
|
|
158
|
+
.c-chat__avatar-fallback[data-v-281bb0dd] {
|
|
159
159
|
width: var(--chat-avatar-size);
|
|
160
160
|
height: var(--chat-avatar-size);
|
|
161
161
|
border-radius: 50%;
|
|
@@ -167,7 +167,7 @@
|
|
|
167
167
|
font-weight: 600;
|
|
168
168
|
color: var(--app-text-primary);
|
|
169
169
|
}
|
|
170
|
-
.c-chat__online-dot[data-v-
|
|
170
|
+
.c-chat__online-dot[data-v-281bb0dd] {
|
|
171
171
|
position: absolute;
|
|
172
172
|
bottom: 0;
|
|
173
173
|
right: 0;
|
|
@@ -177,24 +177,24 @@
|
|
|
177
177
|
background: var(--chat-online-color);
|
|
178
178
|
border: 2px solid var(--chat-sidebar-bg);
|
|
179
179
|
}
|
|
180
|
-
.c-chat__contact-info[data-v-
|
|
180
|
+
.c-chat__contact-info[data-v-281bb0dd] {
|
|
181
181
|
flex: 1;
|
|
182
182
|
min-width: 0;
|
|
183
183
|
}
|
|
184
|
-
.c-chat__contact-name[data-v-
|
|
184
|
+
.c-chat__contact-name[data-v-281bb0dd] {
|
|
185
185
|
display: flex;
|
|
186
186
|
align-items: center;
|
|
187
187
|
justify-content: space-between;
|
|
188
188
|
font-size: 13px;
|
|
189
189
|
font-weight: 500;
|
|
190
190
|
}
|
|
191
|
-
.c-chat__contact-time[data-v-
|
|
191
|
+
.c-chat__contact-time[data-v-281bb0dd] {
|
|
192
192
|
font-size: 11px;
|
|
193
193
|
color: var(--chat-text-secondary);
|
|
194
194
|
margin-left: 8px;
|
|
195
195
|
flex-shrink: 0;
|
|
196
196
|
}
|
|
197
|
-
.c-chat__contact-last[data-v-
|
|
197
|
+
.c-chat__contact-last[data-v-281bb0dd] {
|
|
198
198
|
font-size: 12px;
|
|
199
199
|
color: var(--chat-text-secondary);
|
|
200
200
|
white-space: nowrap;
|
|
@@ -202,7 +202,7 @@
|
|
|
202
202
|
text-overflow: ellipsis;
|
|
203
203
|
margin-top: 2px;
|
|
204
204
|
}
|
|
205
|
-
.c-chat__unread[data-v-
|
|
205
|
+
.c-chat__unread[data-v-281bb0dd] {
|
|
206
206
|
min-width: 18px;
|
|
207
207
|
height: 18px;
|
|
208
208
|
padding: 0 5px;
|
|
@@ -218,13 +218,13 @@
|
|
|
218
218
|
}
|
|
219
219
|
|
|
220
220
|
/* ─── 主聊天区域 ──────────────────────────────────────── */
|
|
221
|
-
.c-chat__main[data-v-
|
|
221
|
+
.c-chat__main[data-v-281bb0dd] {
|
|
222
222
|
flex: 1;
|
|
223
223
|
display: flex;
|
|
224
224
|
flex-direction: column;
|
|
225
225
|
min-width: 0;
|
|
226
226
|
}
|
|
227
|
-
.c-chat__header[data-v-
|
|
227
|
+
.c-chat__header[data-v-281bb0dd] {
|
|
228
228
|
display: flex;
|
|
229
229
|
align-items: center;
|
|
230
230
|
gap: 10px;
|
|
@@ -236,14 +236,14 @@
|
|
|
236
236
|
font-weight: 600;
|
|
237
237
|
font-size: 15px;
|
|
238
238
|
}
|
|
239
|
-
.c-chat__header-status[data-v-
|
|
239
|
+
.c-chat__header-status[data-v-281bb0dd] {
|
|
240
240
|
font-size: 12px;
|
|
241
241
|
font-weight: 400;
|
|
242
242
|
color: var(--chat-text-secondary);
|
|
243
243
|
}
|
|
244
244
|
|
|
245
245
|
/* ─── 消息区域 ────────────────────────────────────────── */
|
|
246
|
-
.c-chat__messages[data-v-
|
|
246
|
+
.c-chat__messages[data-v-281bb0dd] {
|
|
247
247
|
flex: 1;
|
|
248
248
|
overflow-y: auto;
|
|
249
249
|
overscroll-behavior: contain;
|
|
@@ -253,18 +253,18 @@
|
|
|
253
253
|
gap: 12px;
|
|
254
254
|
background: color-mix(in srgb, var(--body-color) 50%, var(--card-color));
|
|
255
255
|
}
|
|
256
|
-
.c-chat__messages[data-v-
|
|
256
|
+
.c-chat__messages[data-v-281bb0dd]::-webkit-scrollbar {
|
|
257
257
|
width: 4px;
|
|
258
258
|
}
|
|
259
|
-
.c-chat__messages[data-v-
|
|
259
|
+
.c-chat__messages[data-v-281bb0dd]::-webkit-scrollbar-thumb {
|
|
260
260
|
background: var(--chat-scrollbar-thumb);
|
|
261
261
|
border-radius: 2px;
|
|
262
262
|
}
|
|
263
|
-
.c-chat__load-more[data-v-
|
|
263
|
+
.c-chat__load-more[data-v-281bb0dd] {
|
|
264
264
|
text-align: center;
|
|
265
265
|
padding: 8px;
|
|
266
266
|
}
|
|
267
|
-
.c-chat__empty[data-v-
|
|
267
|
+
.c-chat__empty[data-v-281bb0dd] {
|
|
268
268
|
flex: 1;
|
|
269
269
|
display: flex;
|
|
270
270
|
align-items: center;
|
|
@@ -274,129 +274,147 @@
|
|
|
274
274
|
}
|
|
275
275
|
|
|
276
276
|
/* ─── 消息气泡 ────────────────────────────────────────── */
|
|
277
|
-
.c-chat__msg[data-v-
|
|
277
|
+
.c-chat__msg[data-v-281bb0dd] {
|
|
278
278
|
display: flex;
|
|
279
279
|
gap: 8px;
|
|
280
280
|
max-width: 75%;
|
|
281
281
|
}
|
|
282
|
-
.c-chat__msg.is-self[data-v-
|
|
282
|
+
.c-chat__msg.is-self[data-v-281bb0dd] {
|
|
283
283
|
margin-left: auto;
|
|
284
284
|
flex-direction: row-reverse;
|
|
285
285
|
}
|
|
286
|
-
.c-chat__msg.is-system[data-v-
|
|
286
|
+
.c-chat__msg.is-system[data-v-281bb0dd] {
|
|
287
287
|
max-width: 100%;
|
|
288
288
|
justify-content: center;
|
|
289
289
|
align-self: center;
|
|
290
290
|
}
|
|
291
|
-
.c-chat__msg-avatar[data-v-
|
|
291
|
+
.c-chat__msg-avatar[data-v-281bb0dd] {
|
|
292
292
|
flex-shrink: 0;
|
|
293
293
|
margin-top: 2px;
|
|
294
294
|
}
|
|
295
|
-
.c-chat__msg-body[data-v-
|
|
295
|
+
.c-chat__msg-body[data-v-281bb0dd] {
|
|
296
296
|
display: flex;
|
|
297
297
|
flex-direction: column;
|
|
298
298
|
}
|
|
299
|
-
.c-chat__msg-username[data-v-
|
|
299
|
+
.c-chat__msg-username[data-v-281bb0dd] {
|
|
300
300
|
font-size: 12px;
|
|
301
301
|
color: var(--chat-text-secondary);
|
|
302
302
|
margin-bottom: 2px;
|
|
303
303
|
}
|
|
304
|
-
.is-self .c-chat__msg-username[data-v-
|
|
304
|
+
.is-self .c-chat__msg-username[data-v-281bb0dd] {
|
|
305
305
|
text-align: right;
|
|
306
306
|
}
|
|
307
|
-
.c-chat__bubble[data-v-
|
|
307
|
+
.c-chat__bubble[data-v-281bb0dd] {
|
|
308
308
|
padding: 10px 14px;
|
|
309
309
|
border-radius: 16px;
|
|
310
310
|
line-height: 1.5;
|
|
311
311
|
word-break: break-word;
|
|
312
312
|
white-space: pre-wrap;
|
|
313
313
|
}
|
|
314
|
-
.is-other .c-chat__bubble[data-v-
|
|
314
|
+
.is-other .c-chat__bubble[data-v-281bb0dd] {
|
|
315
315
|
background: var(--chat-bubble-other);
|
|
316
316
|
border: 1px solid var(--chat-border);
|
|
317
317
|
border-top-left-radius: 4px;
|
|
318
318
|
}
|
|
319
|
-
.is-self .c-chat__bubble[data-v-
|
|
319
|
+
.is-self .c-chat__bubble[data-v-281bb0dd] {
|
|
320
320
|
background: var(--chat-bubble-self);
|
|
321
321
|
color: var(--chat-text-self);
|
|
322
322
|
border-top-right-radius: 4px;
|
|
323
323
|
}
|
|
324
|
-
.is-system .c-chat__bubble[data-v-
|
|
324
|
+
.is-system .c-chat__bubble[data-v-281bb0dd] {
|
|
325
325
|
background: var(--chat-bubble-system);
|
|
326
326
|
color: var(--chat-text-secondary);
|
|
327
327
|
font-size: 12px;
|
|
328
328
|
padding: 4px 12px;
|
|
329
329
|
}
|
|
330
|
-
.c-chat__msg-image[data-v-
|
|
330
|
+
.c-chat__msg-image-button[data-v-281bb0dd] {
|
|
331
|
+
display: inline-flex;
|
|
332
|
+
align-self: flex-start;
|
|
333
|
+
padding: 0;
|
|
334
|
+
border: 0;
|
|
335
|
+
background: none;
|
|
336
|
+
cursor: pointer;
|
|
337
|
+
}
|
|
338
|
+
.c-chat__msg-image[data-v-281bb0dd] {
|
|
331
339
|
max-width: 240px;
|
|
332
340
|
max-height: 180px;
|
|
333
341
|
border-radius: 12px;
|
|
334
342
|
cursor: pointer;
|
|
335
343
|
object-fit: cover;
|
|
336
344
|
}
|
|
337
|
-
.is-self .c-chat__msg-image[data-v-
|
|
345
|
+
.is-self .c-chat__msg-image[data-v-281bb0dd] {
|
|
338
346
|
border-top-right-radius: 4px;
|
|
339
347
|
}
|
|
340
|
-
.is-other .c-chat__msg-image[data-v-
|
|
348
|
+
.is-other .c-chat__msg-image[data-v-281bb0dd] {
|
|
341
349
|
border-top-left-radius: 4px;
|
|
342
350
|
}
|
|
343
|
-
.c-chat__msg-file[data-v-
|
|
351
|
+
.c-chat__msg-file[data-v-281bb0dd] {
|
|
344
352
|
display: flex;
|
|
345
353
|
align-items: center;
|
|
346
354
|
gap: 8px;
|
|
347
355
|
padding: 10px 14px;
|
|
348
356
|
border-radius: 12px;
|
|
349
357
|
cursor: pointer;
|
|
358
|
+
font: inherit;
|
|
359
|
+
text-align: left;
|
|
360
|
+
border: 0;
|
|
350
361
|
}
|
|
351
|
-
.is-other .c-chat__msg-file[data-v-
|
|
362
|
+
.is-other .c-chat__msg-file[data-v-281bb0dd] {
|
|
352
363
|
background: var(--chat-bubble-other);
|
|
353
364
|
border: 1px solid var(--chat-border);
|
|
354
365
|
border-top-left-radius: 4px;
|
|
355
366
|
}
|
|
356
|
-
.is-self .c-chat__msg-file[data-v-
|
|
367
|
+
.is-self .c-chat__msg-file[data-v-281bb0dd] {
|
|
357
368
|
background: var(--chat-bubble-self);
|
|
358
369
|
color: var(--chat-text-self);
|
|
359
370
|
border-top-right-radius: 4px;
|
|
360
371
|
}
|
|
361
|
-
.c-chat__file-info[data-v-
|
|
372
|
+
.c-chat__file-info[data-v-281bb0dd] {
|
|
362
373
|
display: flex;
|
|
363
374
|
flex-direction: column;
|
|
364
375
|
min-width: 0;
|
|
365
376
|
}
|
|
366
|
-
.c-chat__file-name[data-v-
|
|
377
|
+
.c-chat__file-name[data-v-281bb0dd] {
|
|
367
378
|
font-size: 13px;
|
|
368
379
|
font-weight: 500;
|
|
369
380
|
white-space: nowrap;
|
|
370
381
|
overflow: hidden;
|
|
371
382
|
text-overflow: ellipsis;
|
|
372
383
|
}
|
|
373
|
-
.c-chat__file-size[data-v-
|
|
384
|
+
.c-chat__file-size[data-v-281bb0dd] {
|
|
374
385
|
font-size: 11px;
|
|
375
386
|
opacity: 0.6;
|
|
376
387
|
}
|
|
377
|
-
.c-chat__msg-time[data-v-
|
|
388
|
+
.c-chat__msg-time[data-v-281bb0dd] {
|
|
378
389
|
font-size: 11px;
|
|
379
390
|
color: var(--chat-text-secondary);
|
|
380
391
|
margin-top: 4px;
|
|
381
392
|
}
|
|
382
|
-
.is-self .c-chat__msg-time[data-v-
|
|
393
|
+
.is-self .c-chat__msg-time[data-v-281bb0dd] {
|
|
383
394
|
text-align: right;
|
|
384
395
|
}
|
|
385
|
-
.c-chat__msg-status[data-v-
|
|
396
|
+
.c-chat__msg-status[data-v-281bb0dd] {
|
|
386
397
|
font-size: 11px;
|
|
387
398
|
margin-top: 2px;
|
|
388
399
|
text-align: right;
|
|
389
400
|
}
|
|
390
|
-
.c-chat__msg-status
|
|
401
|
+
.c-chat__msg-status[data-v-281bb0dd]:is(button) {
|
|
402
|
+
align-self: flex-end;
|
|
403
|
+
padding: 0;
|
|
404
|
+
border: 0;
|
|
405
|
+
background: none;
|
|
406
|
+
font-family: inherit;
|
|
407
|
+
}
|
|
408
|
+
.c-chat__msg-status.is-sending[data-v-281bb0dd] {
|
|
391
409
|
color: var(--chat-text-secondary);
|
|
392
410
|
}
|
|
393
|
-
.c-chat__msg-status.is-failed[data-v-
|
|
411
|
+
.c-chat__msg-status.is-failed[data-v-281bb0dd] {
|
|
394
412
|
color: var(--chat-failed-color);
|
|
395
413
|
cursor: pointer;
|
|
396
414
|
}
|
|
397
415
|
|
|
398
416
|
/* ─── 时间分割线 ──────────────────────────────────────── */
|
|
399
|
-
.c-chat__time-divider[data-v-
|
|
417
|
+
.c-chat__time-divider[data-v-281bb0dd] {
|
|
400
418
|
text-align: center;
|
|
401
419
|
font-size: 11px;
|
|
402
420
|
color: var(--chat-text-secondary);
|
|
@@ -404,7 +422,7 @@
|
|
|
404
422
|
}
|
|
405
423
|
|
|
406
424
|
/* ─── 输入区域 ────────────────────────────────────────── */
|
|
407
|
-
.c-chat__input-area[data-v-
|
|
425
|
+
.c-chat__input-area[data-v-281bb0dd] {
|
|
408
426
|
display: flex;
|
|
409
427
|
align-items: center;
|
|
410
428
|
gap: 8px;
|
|
@@ -413,21 +431,21 @@
|
|
|
413
431
|
background: var(--chat-input-bg);
|
|
414
432
|
border-top: 1px solid var(--chat-border);
|
|
415
433
|
}
|
|
416
|
-
.c-chat__input-actions[data-v-
|
|
434
|
+
.c-chat__input-actions[data-v-281bb0dd] {
|
|
417
435
|
display: flex;
|
|
418
436
|
gap: 4px;
|
|
419
437
|
flex-shrink: 0;
|
|
420
438
|
}
|
|
421
|
-
.c-chat__input-wrap[data-v-
|
|
439
|
+
.c-chat__input-wrap[data-v-281bb0dd] {
|
|
422
440
|
flex: 1;
|
|
423
441
|
min-width: 0;
|
|
424
442
|
}
|
|
425
|
-
.c-chat__send-btn[data-v-
|
|
443
|
+
.c-chat__send-btn[data-v-281bb0dd] {
|
|
426
444
|
flex-shrink: 0;
|
|
427
445
|
}
|
|
428
446
|
|
|
429
447
|
/* ─── 空态 ────────────────────────────────────────────── */
|
|
430
|
-
.c-chat__no-chat[data-v-
|
|
448
|
+
.c-chat__no-chat[data-v-281bb0dd] {
|
|
431
449
|
flex: 1;
|
|
432
450
|
display: flex;
|
|
433
451
|
flex-direction: column;
|
|
@@ -436,22 +454,22 @@
|
|
|
436
454
|
gap: 12px;
|
|
437
455
|
color: var(--chat-text-secondary);
|
|
438
456
|
}
|
|
439
|
-
.c-chat__no-chat-icon[data-v-
|
|
457
|
+
.c-chat__no-chat-icon[data-v-281bb0dd] {
|
|
440
458
|
font-size: 48px;
|
|
441
459
|
opacity: 0.3;
|
|
442
460
|
}
|
|
443
461
|
|
|
444
462
|
/* ─── 响应式 ──────────────────────────────────────────── */
|
|
445
463
|
@media (max-width: 640px) {
|
|
446
|
-
.c-chat[data-v-
|
|
464
|
+
.c-chat[data-v-281bb0dd] {
|
|
447
465
|
--chat-sidebar-width: 72px;
|
|
448
466
|
}
|
|
449
|
-
.c-chat__contact-info[data-v-
|
|
450
|
-
.c-chat__search[data-v-
|
|
451
|
-
.c-chat__unread[data-v-
|
|
467
|
+
.c-chat__contact-info[data-v-281bb0dd],
|
|
468
|
+
.c-chat__search[data-v-281bb0dd],
|
|
469
|
+
.c-chat__unread[data-v-281bb0dd] {
|
|
452
470
|
display: none;
|
|
453
471
|
}
|
|
454
|
-
.c-chat__contact[data-v-
|
|
472
|
+
.c-chat__contact[data-v-281bb0dd] {
|
|
455
473
|
justify-content: center;
|
|
456
474
|
padding: 10px 8px;
|
|
457
475
|
}
|
package/dist/C_Chat2.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./chunk.cjs`);const e=require(`./C_Icon2.cjs`),t=require(`./export-helper.cjs`);let n=require(`vue`),r=require(`naive-ui`);const i={placeholder:`输入消息...`,showContacts:!0,showTimestamp:!0,showSendBtn:!0,loadingHistory:!1,title:`聊天`},a={class:`c-chat`},o={key:0,class:`c-chat__sidebar`},s={class:`c-chat__sidebar-header`},c={class:`c-chat__search`},l={class:`c-chat__contact-list`},u=[`onClick`],d={class:`c-chat__contact-avatar`},f=[`src`,`alt`],p={key:1,class:`c-chat__avatar-fallback`},m={key:2,class:`c-chat__online-dot`},h={class:`c-chat__contact-info`},g={class:`c-chat__contact-name`},ee={key:0,class:`c-chat__contact-time`},te={key:0,class:`c-chat__contact-last`},ne={key:0,class:`c-chat__unread`},re={key:1,class:`c-chat__main`},ie={class:`c-chat__header`},_={key:0,class:`c-chat__header-status`},v={key:0,class:`c-chat__load-more`},y={key:1,class:`c-chat__empty`},b={key:0,class:`c-chat__time-divider`},x={key:0,class:`c-chat__msg-avatar`},S=[`src`],C={key:1,class:`c-chat__avatar-fallback`},w={class:`c-chat__msg-body`},T={key:0,class:`c-chat__msg-username`},E={key:1,class:`c-chat__bubble`},D=[`src`,`onClick`],O=[`onClick`],k={class:`c-chat__file-info`},A={class:`c-chat__file-name`},j={key:0,class:`c-chat__file-size`},M={key:4,class:`c-chat__msg-time`},N=[`onClick`],P={class:`c-chat__input-area`},F={class:`c-chat__input-actions`},I={class:`c-chat__input-wrap`},ae={class:`c-chat__main c-chat__no-chat`},L=(0,n.defineComponent)({__name:`index`,props:{contacts:{default:()=>[]},messages:{default:()=>[]},currentContactId:{default:``},placeholder:{default:i.placeholder},showContacts:{type:Boolean,default:i.showContacts},showTimestamp:{type:Boolean,default:i.showTimestamp},selfAvatar:{default:``},selfName:{default:``},showSendBtn:{type:Boolean,default:i.showSendBtn},loadingHistory:{type:Boolean,default:i.loadingHistory},title:{default:i.title}},emits:[`send`,`select-contact`,`load-more`,`image-preview`,`file-click`,`file-upload`,`emoji-click`,`resend`],setup(t,{expose:L,emit:R}){let z=t,B=R,V=(0,n.computed)(()=>({...i,...z})),H=(0,n.ref)(``),U=(0,n.ref)(``),W=(0,n.ref)(null),G=(0,n.computed)(()=>z.contacts??[]),K=(0,n.computed)(()=>z.messages??[]),q=(0,n.computed)(()=>z.currentContactId||G.value[0]?.id||``),J=(0,n.computed)(()=>G.value.find(e=>e.id===q.value)),oe=(0,n.computed)(()=>{if(!U.value)return G.value;let e=U.value.toLowerCase();return G.value.filter(t=>t.name.toLowerCase().includes(e))}),se=e=>{B(`select-contact`,e)},Y=()=>{let e=H.value.trim();e&&(B(`send`,e),H.value=``)},X=()=>{(0,n.nextTick)(()=>{W.value&&(W.value.scrollTop=W.value.scrollHeight)})};(0,n.watch)(()=>z.messages?.length,()=>X(),{flush:`post`});let ce=()=>{W.value&&W.value.scrollTop===0&&!V.value.loadingHistory&&B(`load-more`)},Z=e=>e.sender===`self`&&z.selfAvatar||e.avatar,le=e=>e.sender===`self`?z.selfName||e.username||`Me`:e.username||`未知`,Q=e=>{let t=new Date(e);return`${t.getHours().toString().padStart(2,`0`)}:${t.getMinutes().toString().padStart(2,`0`)}`},$=e=>{let t=new Date(e),n=new Date;return t.getFullYear()===n.getFullYear()&&t.getMonth()===n.getMonth()&&t.getDate()===n.getDate()?Q(e):`${t.getMonth()+1}/${t.getDate()} ${Q(e)}`},ue=e=>{let t=new Date(e),n=new Date().getTime()-t.getTime();return n<6e4?`刚刚`:n<36e5?`${Math.floor(n/6e4)}分钟前`:n<864e5?Q(e):`${t.getMonth()+1}/${t.getDate()}`},de=e=>e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`,fe=(e,t)=>{if(t===0)return!0;let n=K.value[t-1];return new Date(e.timestamp).getTime()-new Date(n.timestamp).getTime()>300*1e3};return L({scrollToBottom:X}),(t,i)=>{let L=r.NInput,R=r.NSpin,z=r.NButton;return(0,n.openBlock)(),(0,n.createElementBlock)(`div`,a,[(0,n.createCommentVNode)(` ===== 联系人侧栏 ===== `),V.value.showContacts&&G.value.length?((0,n.openBlock)(),(0,n.createElementBlock)(`aside`,o,[(0,n.createElementVNode)(`div`,s,[(0,n.createVNode)(e.t,{name:`mdi:chat-outline`,size:20}),i[4]||=(0,n.createTextVNode)(` 会话 `,-1)]),(0,n.createCommentVNode)(` 搜索框 `),(0,n.createElementVNode)(`div`,c,[(0,n.createVNode)(L,{value:U.value,"onUpdate:value":i[0]||=e=>U.value=e,placeholder:`搜索联系人`,clearable:``,size:`small`},{prefix:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:magnify`,size:16})]),_:1},8,[`value`])]),(0,n.createCommentVNode)(` 联系人列表 `),(0,n.createElementVNode)(`div`,l,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(oe.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:e.id,class:(0,n.normalizeClass)([`c-chat__contact`,{"is-active":e.id===q.value}]),onClick:t=>se(e.id)},[(0,n.createElementVNode)(`div`,d,[e.avatar?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:e.avatar,alt:e.name,class:`c-chat__avatar`},null,8,f)):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,p,(0,n.toDisplayString)(e.name.charAt(0)),1)),e.online?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,m)):(0,n.createCommentVNode)(`v-if`,!0)]),(0,n.createElementVNode)(`div`,h,[(0,n.createElementVNode)(`div`,g,[(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.name),1),e.lastTime?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,ee,(0,n.toDisplayString)(ue(e.lastTime)),1)):(0,n.createCommentVNode)(`v-if`,!0)]),e.lastMessage?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,te,(0,n.toDisplayString)(e.lastMessage),1)):(0,n.createCommentVNode)(`v-if`,!0)]),e.unread?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,ne,(0,n.toDisplayString)(e.unread>99?`99+`:e.unread),1)):(0,n.createCommentVNode)(`v-if`,!0)],10,u))),128))])])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` ===== 主聊天区域 ===== `),J.value||!V.value.showContacts?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,re,[(0,n.createCommentVNode)(` 顶栏 `),(0,n.createElementVNode)(`div`,ie,[(0,n.renderSlot)(t.$slots,`header`,{},()=>[(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(J.value?.name||V.value.title),1),J.value?.online?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,_,` 在线 `)):(0,n.createCommentVNode)(`v-if`,!0)],!0)]),(0,n.createCommentVNode)(` 消息列表 `),(0,n.createElementVNode)(`div`,{ref_key:`messagesRef`,ref:W,class:`c-chat__messages`,onScroll:ce},[(0,n.createCommentVNode)(` 加载更多 `),V.value.loadingHistory?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,v,[(0,n.createVNode)(R,{size:`small`})])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 消息为空 `),!K.value.length&&!V.value.loadingHistory?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,y,` 暂无消息,发送第一条吧 `)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 消息列表 `),((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(K.value,(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:t.id},[(0,n.createCommentVNode)(` 时间分割 `),fe(t,r)?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,b,(0,n.toDisplayString)($(t.timestamp)),1)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 消息条目 `),(0,n.createElementVNode)(`div`,{class:(0,n.normalizeClass)([`c-chat__msg`,`is-${t.sender}`])},[(0,n.createCommentVNode)(` 头像 `),t.sender===`system`?(0,n.createCommentVNode)(`v-if`,!0):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,x,[Z(t)?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:Z(t),class:`c-chat__avatar`},null,8,S)):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,C,(0,n.toDisplayString)(le(t).charAt(0)),1))])),(0,n.createCommentVNode)(` 消息体 `),(0,n.createElementVNode)(`div`,w,[t.sender===`other`&&t.username?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,T,(0,n.toDisplayString)(t.username),1)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 文本消息 `),t.type===`text`||t.type===`system`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,E,(0,n.toDisplayString)(t.content),1)):t.type===`image`?((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:2},[(0,n.createCommentVNode)(` 图片消息 `),(0,n.createElementVNode)(`img`,{src:t.content,class:`c-chat__msg-image`,onClick:e=>B(`image-preview`,t.content)},null,8,D)],2112)):t.type===`file`?((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:3},[(0,n.createCommentVNode)(` 文件消息 `),(0,n.createElementVNode)(`div`,{class:`c-chat__msg-file`,onClick:e=>B(`file-click`,t)},[(0,n.createVNode)(e.t,{name:`mdi:file-document-outline`,size:28}),(0,n.createElementVNode)(`div`,k,[(0,n.createElementVNode)(`span`,A,(0,n.toDisplayString)(t.fileName||`文件`),1),t.fileSize?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,j,(0,n.toDisplayString)(de(t.fileSize)),1)):(0,n.createCommentVNode)(`v-if`,!0)])],8,O)],2112)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 时间戳 `),V.value.showTimestamp&&t.sender!==`system`?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,M,(0,n.toDisplayString)(Q(t.timestamp)),1)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 发送状态 `),t.sender===`self`&&t.status?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,{key:5,class:(0,n.normalizeClass)([`c-chat__msg-status`,`is-${t.status}`]),onClick:e=>t.status===`failed`&&B(`resend`,t)},(0,n.toDisplayString)(t.status===`sending`?`发送中...`:t.status===`failed`?`发送失败,点击重试`:``),11,N)):(0,n.createCommentVNode)(`v-if`,!0)])],2)],64))),128))],544),(0,n.createCommentVNode)(` 输入区域 `),(0,n.createElementVNode)(`div`,P,[(0,n.createElementVNode)(`div`,F,[(0,n.renderSlot)(t.$slots,`input-actions`,{},()=>[(0,n.createVNode)(z,{quaternary:``,circle:``,size:`small`,onClick:i[1]||=e=>B(`emoji-click`)},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:emoticon-happy-outline`,size:18})]),_:1}),(0,n.createVNode)(z,{quaternary:``,circle:``,size:`small`,onClick:i[2]||=e=>B(`file-upload`)},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:paperclip`,size:18})]),_:1})],!0)]),(0,n.createElementVNode)(`div`,I,[(0,n.createVNode)(L,{value:H.value,"onUpdate:value":i[3]||=e=>H.value=e,placeholder:V.value.placeholder,type:`textarea`,autosize:{minRows:1,maxRows:4},onKeydown:(0,n.withKeys)((0,n.withModifiers)(Y,[`exact`,`prevent`]),[`enter`])},null,8,[`value`,`placeholder`,`onKeydown`])]),V.value.showSendBtn?((0,n.openBlock)(),(0,n.createBlock)(z,{key:0,type:`primary`,disabled:!H.value.trim(),class:`c-chat__send-btn`,onClick:Y},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:send`,size:16})]),_:1},8,[`disabled`])):(0,n.createCommentVNode)(`v-if`,!0)])])):((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:2},[(0,n.createCommentVNode)(` ===== 未选中联系人空态 ===== `),(0,n.createElementVNode)(`div`,ae,[(0,n.createVNode)(e.t,{name:`mdi:chat-processing-outline`,size:48,class:`c-chat__no-chat-icon`}),i[5]||=(0,n.createElementVNode)(`span`,null,`选择一个会话开始聊天`,-1)])],2112))])}}});var R=t.t(L,[[`__scopeId`,`data-v-5b4bf8dc`]]);Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return R}});
|
|
1
|
+
require(`./chunk.cjs`);const e=require(`./C_Icon2.cjs`),t=require(`./export-helper.cjs`);let n=require(`vue`),r=require(`naive-ui`);const i={placeholder:`输入消息...`,showContacts:!0,showTimestamp:!0,showSendBtn:!0,loadingHistory:!1,title:`聊天`},a={class:`c-chat`},o={key:0,class:`c-chat__sidebar`},s={class:`c-chat__sidebar-header`},c={class:`c-chat__search`},l={class:`c-chat__contact-list`},u=[`onClick`],d={class:`c-chat__contact-avatar`},f=[`src`,`alt`],p={key:1,class:`c-chat__avatar-fallback`},m={key:2,class:`c-chat__online-dot`},ee={class:`c-chat__contact-info`},te={class:`c-chat__contact-name`},ne={key:0,class:`c-chat__contact-time`},re={key:0,class:`c-chat__contact-last`},h={key:0,class:`c-chat__unread`},ie={key:1,class:`c-chat__main`},ae={class:`c-chat__header`},oe={key:0,class:`c-chat__header-status`},g={key:0,class:`c-chat__load-more`},_={key:1,class:`c-chat__empty`},v={key:0,class:`c-chat__time-divider`},y={key:0,class:`c-chat__msg-avatar`},b=[`src`],x={key:1,class:`c-chat__avatar-fallback`},S={class:`c-chat__msg-body`},C={key:0,class:`c-chat__msg-username`},w={key:1,class:`c-chat__bubble`},T=[`aria-label`,`onClick`],E=[`src`,`alt`],D=[`onClick`],O={class:`c-chat__file-info`},k={class:`c-chat__file-name`},A={key:0,class:`c-chat__file-size`},j={key:4,class:`c-chat__msg-time`},M=[`onClick`],N={key:6,class:`c-chat__msg-status is-sending`},P={class:`c-chat__input-area`},F={class:`c-chat__input-actions`},I={class:`c-chat__input-wrap`},L={class:`c-chat__main c-chat__no-chat`},R=(0,n.defineComponent)({__name:`index`,props:{contacts:{default:()=>[]},messages:{default:()=>[]},currentContactId:{default:``},placeholder:{default:i.placeholder},showContacts:{type:Boolean,default:i.showContacts},showTimestamp:{type:Boolean,default:i.showTimestamp},selfAvatar:{default:``},selfName:{default:``},showSendBtn:{type:Boolean,default:i.showSendBtn},loadingHistory:{type:Boolean,default:i.loadingHistory},title:{default:i.title}},emits:[`send`,`select-contact`,`load-more`,`image-preview`,`file-click`,`file-upload`,`emoji-click`,`resend`],setup(t,{expose:R,emit:z}){let B=t,V=z,H=(0,n.computed)(()=>({...i,...B})),U=(0,n.ref)(``),W=(0,n.ref)(``),G=(0,n.ref)(null),K=(0,n.computed)(()=>B.contacts??[]),q=(0,n.computed)(()=>B.messages??[]),J=(0,n.computed)(()=>B.currentContactId||K.value[0]?.id||``),Y=(0,n.computed)(()=>K.value.find(e=>e.id===J.value)),se=(0,n.computed)(()=>{if(!W.value)return K.value;let e=W.value.toLowerCase();return K.value.filter(t=>t.name.toLowerCase().includes(e))}),ce=e=>{V(`select-contact`,e)},X=()=>{let e=U.value.trim();e&&(V(`send`,e),U.value=``)},Z=()=>{(0,n.nextTick)(()=>{G.value&&(G.value.scrollTop=G.value.scrollHeight)})};(0,n.watch)(()=>B.messages?.length,()=>Z(),{flush:`post`});let le=()=>{G.value&&G.value.scrollTop===0&&!H.value.loadingHistory&&V(`load-more`)},Q=e=>e.sender===`self`&&B.selfAvatar||e.avatar,ue=e=>e.sender===`self`?B.selfName||e.username||`Me`:e.username||`未知`,$=e=>{let t=new Date(e);return`${t.getHours().toString().padStart(2,`0`)}:${t.getMinutes().toString().padStart(2,`0`)}`},de=e=>{let t=new Date(e),n=new Date;return t.getFullYear()===n.getFullYear()&&t.getMonth()===n.getMonth()&&t.getDate()===n.getDate()?$(e):`${t.getMonth()+1}/${t.getDate()} ${$(e)}`},fe=e=>{let t=new Date(e),n=new Date().getTime()-t.getTime();return n<6e4?`刚刚`:n<36e5?`${Math.floor(n/6e4)}分钟前`:n<864e5?$(e):`${t.getMonth()+1}/${t.getDate()}`},pe=e=>e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`,me=(e,t)=>{if(t===0)return!0;let n=q.value[t-1];return new Date(e.timestamp).getTime()-new Date(n.timestamp).getTime()>300*1e3};return R({scrollToBottom:Z}),(t,i)=>{let R=r.NInput,z=r.NSpin,B=r.NButton;return(0,n.openBlock)(),(0,n.createElementBlock)(`div`,a,[(0,n.createCommentVNode)(` ===== 联系人侧栏 ===== `),H.value.showContacts&&K.value.length?((0,n.openBlock)(),(0,n.createElementBlock)(`aside`,o,[(0,n.createElementVNode)(`div`,s,[(0,n.createVNode)(e.t,{name:`mdi:chat-outline`,size:20}),i[4]||=(0,n.createTextVNode)(` 会话 `,-1)]),(0,n.createCommentVNode)(` 搜索框 `),(0,n.createElementVNode)(`div`,c,[(0,n.createVNode)(R,{value:W.value,"onUpdate:value":i[0]||=e=>W.value=e,placeholder:`搜索联系人`,clearable:``,size:`small`},{prefix:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:magnify`,size:16})]),_:1},8,[`value`])]),(0,n.createCommentVNode)(` 联系人列表 `),(0,n.createElementVNode)(`div`,l,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(se.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:e.id,class:(0,n.normalizeClass)([`c-chat__contact`,{"is-active":e.id===J.value}]),onClick:t=>ce(e.id)},[(0,n.createElementVNode)(`div`,d,[e.avatar?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:e.avatar,alt:e.name,class:`c-chat__avatar`},null,8,f)):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,p,(0,n.toDisplayString)(e.name.charAt(0)),1)),e.online?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,m)):(0,n.createCommentVNode)(`v-if`,!0)]),(0,n.createElementVNode)(`div`,ee,[(0,n.createElementVNode)(`div`,te,[(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.name),1),e.lastTime?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,ne,(0,n.toDisplayString)(fe(e.lastTime)),1)):(0,n.createCommentVNode)(`v-if`,!0)]),e.lastMessage?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,re,(0,n.toDisplayString)(e.lastMessage),1)):(0,n.createCommentVNode)(`v-if`,!0)]),e.unread?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,h,(0,n.toDisplayString)(e.unread>99?`99+`:e.unread),1)):(0,n.createCommentVNode)(`v-if`,!0)],10,u))),128))])])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` ===== 主聊天区域 ===== `),Y.value||!H.value.showContacts?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,ie,[(0,n.createCommentVNode)(` 顶栏 `),(0,n.createElementVNode)(`div`,ae,[(0,n.renderSlot)(t.$slots,`header`,{},()=>[(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(Y.value?.name||H.value.title),1),Y.value?.online?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,oe,` 在线 `)):(0,n.createCommentVNode)(`v-if`,!0)],!0)]),(0,n.createCommentVNode)(` 消息列表 `),(0,n.createElementVNode)(`div`,{ref_key:`messagesRef`,ref:G,class:`c-chat__messages`,onScroll:le},[(0,n.createCommentVNode)(` 加载更多 `),H.value.loadingHistory?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,g,[(0,n.createVNode)(z,{size:`small`})])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 消息为空 `),!q.value.length&&!H.value.loadingHistory?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,_,` 暂无消息,发送第一条吧 `)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 消息列表 `),((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(q.value,(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:t.id},[(0,n.createCommentVNode)(` 时间分割 `),me(t,r)?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,v,(0,n.toDisplayString)(de(t.timestamp)),1)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 消息条目 `),(0,n.createElementVNode)(`div`,{class:(0,n.normalizeClass)([`c-chat__msg`,`is-${t.sender}`])},[(0,n.createCommentVNode)(` 头像 `),t.sender===`system`?(0,n.createCommentVNode)(`v-if`,!0):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,y,[Q(t)?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:Q(t),class:`c-chat__avatar`},null,8,b)):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,x,(0,n.toDisplayString)(ue(t).charAt(0)),1))])),(0,n.createCommentVNode)(` 消息体 `),(0,n.createElementVNode)(`div`,S,[t.sender===`other`&&t.username?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,C,(0,n.toDisplayString)(t.username),1)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 文本消息 `),t.type===`text`||t.type===`system`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,w,(0,n.toDisplayString)(t.content),1)):t.type===`image`?((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:2},[(0,n.createCommentVNode)(` 图片消息 `),(0,n.createElementVNode)(`button`,{type:`button`,class:`c-chat__msg-image-button`,"aria-label":`预览${t.username||`聊天`}的图片`,onClick:e=>V(`image-preview`,t.content)},[(0,n.createElementVNode)(`img`,{src:t.content,alt:t.fileName||`聊天图片`,class:`c-chat__msg-image`},null,8,E)],8,T)],2112)):t.type===`file`?((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:3},[(0,n.createCommentVNode)(` 文件消息 `),(0,n.createElementVNode)(`button`,{type:`button`,class:`c-chat__msg-file`,onClick:e=>V(`file-click`,t)},[(0,n.createVNode)(e.t,{name:`mdi:file-document-outline`,size:28}),(0,n.createElementVNode)(`div`,O,[(0,n.createElementVNode)(`span`,k,(0,n.toDisplayString)(t.fileName||`文件`),1),t.fileSize?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,A,(0,n.toDisplayString)(pe(t.fileSize)),1)):(0,n.createCommentVNode)(`v-if`,!0)])],8,D)],2112)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 时间戳 `),H.value.showTimestamp&&t.sender!==`system`?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,j,(0,n.toDisplayString)($(t.timestamp)),1)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 发送状态 `),t.sender===`self`&&t.status===`failed`?((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:5,type:`button`,class:`c-chat__msg-status is-failed`,onClick:e=>V(`resend`,t)},` 发送失败,点击重试 `,8,M)):t.sender===`self`&&t.status===`sending`?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,N,`发送中...`)):(0,n.createCommentVNode)(`v-if`,!0)])],2)],64))),128))],544),(0,n.createCommentVNode)(` 输入区域 `),(0,n.createElementVNode)(`div`,P,[(0,n.createElementVNode)(`div`,F,[(0,n.renderSlot)(t.$slots,`input-actions`,{},()=>[(0,n.createVNode)(B,{quaternary:``,circle:``,size:`small`,onClick:i[1]||=e=>V(`emoji-click`)},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:emoticon-happy-outline`,size:18})]),_:1}),(0,n.createVNode)(B,{quaternary:``,circle:``,size:`small`,onClick:i[2]||=e=>V(`file-upload`)},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:paperclip`,size:18})]),_:1})],!0)]),(0,n.createElementVNode)(`div`,I,[(0,n.createVNode)(R,{value:U.value,"onUpdate:value":i[3]||=e=>U.value=e,placeholder:H.value.placeholder,type:`textarea`,autosize:{minRows:1,maxRows:4},onKeydown:(0,n.withKeys)((0,n.withModifiers)(X,[`exact`,`prevent`]),[`enter`])},null,8,[`value`,`placeholder`,`onKeydown`])]),H.value.showSendBtn?((0,n.openBlock)(),(0,n.createBlock)(B,{key:0,type:`primary`,disabled:!U.value.trim(),class:`c-chat__send-btn`,onClick:X},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:send`,size:16})]),_:1},8,[`disabled`])):(0,n.createCommentVNode)(`v-if`,!0)])])):((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:2},[(0,n.createCommentVNode)(` ===== 未选中联系人空态 ===== `),(0,n.createElementVNode)(`div`,L,[(0,n.createVNode)(e.t,{name:`mdi:chat-processing-outline`,size:48,class:`c-chat__no-chat-icon`}),i[5]||=(0,n.createElementVNode)(`span`,null,`选择一个会话开始聊天`,-1)])],2112))])}}});var z=t.t(R,[[`__scopeId`,`data-v-281bb0dd`]]);Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return z}});
|
package/dist/C_Chat2.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{Fragment as n,computed as r,createBlock as ee,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createTextVNode as te,createVNode as s,defineComponent as c,nextTick as l,normalizeClass as u,openBlock as d,ref as f,renderList as p,renderSlot as m,resolveComponent as ne,toDisplayString as h,watch as re,withCtx as g,withKeys as ie,withModifiers as ae}from"vue";import{NButton as oe,NInput as se,NSpin as ce}from"naive-ui";const _={placeholder:`输入消息...`,showContacts:!0,showTimestamp:!0,showSendBtn:!0,loadingHistory:!1,title:`聊天`},le={class:`c-chat`},ue={key:0,class:`c-chat__sidebar`},de={class:`c-chat__sidebar-header`},fe={class:`c-chat__search`},pe={class:`c-chat__contact-list`},me=[`onClick`],he={class:`c-chat__contact-avatar`},v=[`src`,`alt`],y={key:1,class:`c-chat__avatar-fallback`},b={key:2,class:`c-chat__online-dot`},x={class:`c-chat__contact-info`},S={class:`c-chat__contact-name`},C={key:0,class:`c-chat__contact-time`},w={key:0,class:`c-chat__contact-last`},T={key:0,class:`c-chat__unread`},E={key:1,class:`c-chat__main`},D={class:`c-chat__header`},O={key:0,class:`c-chat__header-status`},k={key:0,class:`c-chat__load-more`},A={key:1,class:`c-chat__empty`},j={key:0,class:`c-chat__time-divider`},M={key:0,class:`c-chat__msg-avatar`},N=[`src`],P={key:1,class:`c-chat__avatar-fallback`},F={class:`c-chat__msg-body`},I={key:0,class:`c-chat__msg-username`},L={key:1,class:`c-chat__bubble`},R=[`
|
|
1
|
+
import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{Fragment as n,computed as r,createBlock as ee,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createTextVNode as te,createVNode as s,defineComponent as c,nextTick as l,normalizeClass as u,openBlock as d,ref as f,renderList as p,renderSlot as m,resolveComponent as ne,toDisplayString as h,watch as re,withCtx as g,withKeys as ie,withModifiers as ae}from"vue";import{NButton as oe,NInput as se,NSpin as ce}from"naive-ui";const _={placeholder:`输入消息...`,showContacts:!0,showTimestamp:!0,showSendBtn:!0,loadingHistory:!1,title:`聊天`},le={class:`c-chat`},ue={key:0,class:`c-chat__sidebar`},de={class:`c-chat__sidebar-header`},fe={class:`c-chat__search`},pe={class:`c-chat__contact-list`},me=[`onClick`],he={class:`c-chat__contact-avatar`},v=[`src`,`alt`],y={key:1,class:`c-chat__avatar-fallback`},b={key:2,class:`c-chat__online-dot`},x={class:`c-chat__contact-info`},S={class:`c-chat__contact-name`},C={key:0,class:`c-chat__contact-time`},w={key:0,class:`c-chat__contact-last`},T={key:0,class:`c-chat__unread`},E={key:1,class:`c-chat__main`},D={class:`c-chat__header`},O={key:0,class:`c-chat__header-status`},k={key:0,class:`c-chat__load-more`},A={key:1,class:`c-chat__empty`},j={key:0,class:`c-chat__time-divider`},M={key:0,class:`c-chat__msg-avatar`},N=[`src`],P={key:1,class:`c-chat__avatar-fallback`},F={class:`c-chat__msg-body`},I={key:0,class:`c-chat__msg-username`},L={key:1,class:`c-chat__bubble`},R=[`aria-label`,`onClick`],ge=[`src`,`alt`],_e=[`onClick`],ve={class:`c-chat__file-info`},ye={class:`c-chat__file-name`},be={key:0,class:`c-chat__file-size`},xe={key:4,class:`c-chat__msg-time`},Se=[`onClick`],Ce={key:6,class:`c-chat__msg-status is-sending`},we={class:`c-chat__input-area`},Te={class:`c-chat__input-actions`},Ee={class:`c-chat__input-wrap`},De={class:`c-chat__main c-chat__no-chat`};var z=t(c({__name:`index`,props:{contacts:{default:()=>[]},messages:{default:()=>[]},currentContactId:{default:``},placeholder:{default:_.placeholder},showContacts:{type:Boolean,default:_.showContacts},showTimestamp:{type:Boolean,default:_.showTimestamp},selfAvatar:{default:``},selfName:{default:``},showSendBtn:{type:Boolean,default:_.showSendBtn},loadingHistory:{type:Boolean,default:_.loadingHistory},title:{default:_.title}},emits:[`send`,`select-contact`,`load-more`,`image-preview`,`file-click`,`file-upload`,`emoji-click`,`resend`],setup(t,{expose:c,emit:ne}){let z=t,B=ne,V=r(()=>({..._,...z})),H=f(``),U=f(``),W=f(null),G=r(()=>z.contacts??[]),K=r(()=>z.messages??[]),q=r(()=>z.currentContactId||G.value[0]?.id||``),J=r(()=>G.value.find(e=>e.id===q.value)),Oe=r(()=>{if(!U.value)return G.value;let e=U.value.toLowerCase();return G.value.filter(t=>t.name.toLowerCase().includes(e))}),ke=e=>{B(`select-contact`,e)},Y=()=>{let e=H.value.trim();e&&(B(`send`,e),H.value=``)},X=()=>{l(()=>{W.value&&(W.value.scrollTop=W.value.scrollHeight)})};re(()=>z.messages?.length,()=>X(),{flush:`post`});let Z=()=>{W.value&&W.value.scrollTop===0&&!V.value.loadingHistory&&B(`load-more`)},Q=e=>e.sender===`self`&&z.selfAvatar||e.avatar,Ae=e=>e.sender===`self`?z.selfName||e.username||`Me`:e.username||`未知`,$=e=>{let t=new Date(e);return`${t.getHours().toString().padStart(2,`0`)}:${t.getMinutes().toString().padStart(2,`0`)}`},je=e=>{let t=new Date(e),n=new Date;return t.getFullYear()===n.getFullYear()&&t.getMonth()===n.getMonth()&&t.getDate()===n.getDate()?$(e):`${t.getMonth()+1}/${t.getDate()} ${$(e)}`},Me=e=>{let t=new Date(e),n=new Date().getTime()-t.getTime();return n<6e4?`刚刚`:n<36e5?`${Math.floor(n/6e4)}分钟前`:n<864e5?$(e):`${t.getMonth()+1}/${t.getDate()}`},Ne=e=>e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`,Pe=(e,t)=>{if(t===0)return!0;let n=K.value[t-1];return new Date(e.timestamp).getTime()-new Date(n.timestamp).getTime()>300*1e3};return c({scrollToBottom:X}),(t,r)=>{let c=se,l=ce,f=oe;return d(),a(`div`,le,[i(` ===== 联系人侧栏 ===== `),V.value.showContacts&&G.value.length?(d(),a(`aside`,ue,[o(`div`,de,[s(e,{name:`mdi:chat-outline`,size:20}),r[4]||=te(` 会话 `,-1)]),i(` 搜索框 `),o(`div`,fe,[s(c,{value:U.value,"onUpdate:value":r[0]||=e=>U.value=e,placeholder:`搜索联系人`,clearable:``,size:`small`},{prefix:g(()=>[s(e,{name:`mdi:magnify`,size:16})]),_:1},8,[`value`])]),i(` 联系人列表 `),o(`div`,pe,[(d(!0),a(n,null,p(Oe.value,e=>(d(),a(`div`,{key:e.id,class:u([`c-chat__contact`,{"is-active":e.id===q.value}]),onClick:t=>ke(e.id)},[o(`div`,he,[e.avatar?(d(),a(`img`,{key:0,src:e.avatar,alt:e.name,class:`c-chat__avatar`},null,8,v)):(d(),a(`div`,y,h(e.name.charAt(0)),1)),e.online?(d(),a(`span`,b)):i(`v-if`,!0)]),o(`div`,x,[o(`div`,S,[o(`span`,null,h(e.name),1),e.lastTime?(d(),a(`span`,C,h(Me(e.lastTime)),1)):i(`v-if`,!0)]),e.lastMessage?(d(),a(`div`,w,h(e.lastMessage),1)):i(`v-if`,!0)]),e.unread?(d(),a(`span`,T,h(e.unread>99?`99+`:e.unread),1)):i(`v-if`,!0)],10,me))),128))])])):i(`v-if`,!0),i(` ===== 主聊天区域 ===== `),J.value||!V.value.showContacts?(d(),a(`div`,E,[i(` 顶栏 `),o(`div`,D,[m(t.$slots,`header`,{},()=>[o(`span`,null,h(J.value?.name||V.value.title),1),J.value?.online?(d(),a(`span`,O,` 在线 `)):i(`v-if`,!0)],!0)]),i(` 消息列表 `),o(`div`,{ref_key:`messagesRef`,ref:W,class:`c-chat__messages`,onScroll:Z},[i(` 加载更多 `),V.value.loadingHistory?(d(),a(`div`,k,[s(l,{size:`small`})])):i(`v-if`,!0),i(` 消息为空 `),!K.value.length&&!V.value.loadingHistory?(d(),a(`div`,A,` 暂无消息,发送第一条吧 `)):i(`v-if`,!0),i(` 消息列表 `),(d(!0),a(n,null,p(K.value,(t,r)=>(d(),a(n,{key:t.id},[i(` 时间分割 `),Pe(t,r)?(d(),a(`div`,j,h(je(t.timestamp)),1)):i(`v-if`,!0),i(` 消息条目 `),o(`div`,{class:u([`c-chat__msg`,`is-${t.sender}`])},[i(` 头像 `),t.sender===`system`?i(`v-if`,!0):(d(),a(`div`,M,[Q(t)?(d(),a(`img`,{key:0,src:Q(t),class:`c-chat__avatar`},null,8,N)):(d(),a(`div`,P,h(Ae(t).charAt(0)),1))])),i(` 消息体 `),o(`div`,F,[t.sender===`other`&&t.username?(d(),a(`span`,I,h(t.username),1)):i(`v-if`,!0),i(` 文本消息 `),t.type===`text`||t.type===`system`?(d(),a(`div`,L,h(t.content),1)):t.type===`image`?(d(),a(n,{key:2},[i(` 图片消息 `),o(`button`,{type:`button`,class:`c-chat__msg-image-button`,"aria-label":`预览${t.username||`聊天`}的图片`,onClick:e=>B(`image-preview`,t.content)},[o(`img`,{src:t.content,alt:t.fileName||`聊天图片`,class:`c-chat__msg-image`},null,8,ge)],8,R)],2112)):t.type===`file`?(d(),a(n,{key:3},[i(` 文件消息 `),o(`button`,{type:`button`,class:`c-chat__msg-file`,onClick:e=>B(`file-click`,t)},[s(e,{name:`mdi:file-document-outline`,size:28}),o(`div`,ve,[o(`span`,ye,h(t.fileName||`文件`),1),t.fileSize?(d(),a(`span`,be,h(Ne(t.fileSize)),1)):i(`v-if`,!0)])],8,_e)],2112)):i(`v-if`,!0),i(` 时间戳 `),V.value.showTimestamp&&t.sender!==`system`?(d(),a(`span`,xe,h($(t.timestamp)),1)):i(`v-if`,!0),i(` 发送状态 `),t.sender===`self`&&t.status===`failed`?(d(),a(`button`,{key:5,type:`button`,class:`c-chat__msg-status is-failed`,onClick:e=>B(`resend`,t)},` 发送失败,点击重试 `,8,Se)):t.sender===`self`&&t.status===`sending`?(d(),a(`span`,Ce,`发送中...`)):i(`v-if`,!0)])],2)],64))),128))],544),i(` 输入区域 `),o(`div`,we,[o(`div`,Te,[m(t.$slots,`input-actions`,{},()=>[s(f,{quaternary:``,circle:``,size:`small`,onClick:r[1]||=e=>B(`emoji-click`)},{icon:g(()=>[s(e,{name:`mdi:emoticon-happy-outline`,size:18})]),_:1}),s(f,{quaternary:``,circle:``,size:`small`,onClick:r[2]||=e=>B(`file-upload`)},{icon:g(()=>[s(e,{name:`mdi:paperclip`,size:18})]),_:1})],!0)]),o(`div`,Ee,[s(c,{value:H.value,"onUpdate:value":r[3]||=e=>H.value=e,placeholder:V.value.placeholder,type:`textarea`,autosize:{minRows:1,maxRows:4},onKeydown:ie(ae(Y,[`exact`,`prevent`]),[`enter`])},null,8,[`value`,`placeholder`,`onKeydown`])]),V.value.showSendBtn?(d(),ee(f,{key:0,type:`primary`,disabled:!H.value.trim(),class:`c-chat__send-btn`,onClick:Y},{icon:g(()=>[s(e,{name:`mdi:send`,size:16})]),_:1},8,[`disabled`])):i(`v-if`,!0)])])):(d(),a(n,{key:2},[i(` ===== 未选中联系人空态 ===== `),o(`div`,De,[s(e,{name:`mdi:chat-processing-outline`,size:48,class:`c-chat__no-chat-icon`}),r[5]||=o(`span`,null,`选择一个会话开始聊天`,-1)])],2112))])}}}),[[`__scopeId`,`data-v-281bb0dd`]]);export{_ as n,z as t};
|