@opendesign-plus-test/components 0.0.1-rc.63 → 0.0.1-rc.64
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/dist/chunk-OElCookieNotice.cjs.js +1 -1
- package/dist/chunk-OElCookieNotice.es.js +2 -2
- package/dist/components/events/types.d.ts +4 -0
- package/dist/components/meeting/types.d.ts +3 -2
- package/dist/components.cjs.js +29 -29
- package/dist/components.css +1 -1
- package/dist/components.es.js +6200 -6166
- package/package.json +2 -2
- package/src/assets/meeting/svg-icons/icon-all.svg +2 -1
- package/src/assets/meeting/svg-icons/icon-event.svg +2 -1
- package/src/assets/meeting/svg-icons/icon-meet.svg +2 -1
- package/src/assets/meeting/svg-icons/icon-summit.svg +2 -1
- package/src/components/activity/OActivityMyCalendar.vue +18 -11
- package/src/components/events/OEventsApply.vue +0 -2
- package/src/components/events/OEventsList.vue +66 -39
- package/src/components/events/types.ts +1 -0
- package/src/components/meeting/OMeetingCalendar.vue +17 -11
- package/src/components/meeting/OMeetingForm.vue +5 -11
- package/src/components/meeting/OMeetingMyCalendar.vue +25 -26
- package/src/components/meeting/OMeetingSigCalendar.vue +43 -20
- package/src/components/meeting/components/OMeetingCalendarList.vue +29 -17
- package/src/components/meeting/components/OMeetingPlaybackSubtitles.vue +1 -1
- package/src/components/meeting/components/OMeetingSigAside.vue +11 -6
- package/src/components/meeting/types.ts +2 -1
- package/src/i18n/en.ts +1 -1
- package/src/i18n/zh.ts +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { ref, onMounted, computed, nextTick, watch } from 'vue';
|
|
3
3
|
import { ODivider, OPopover, OIcon, OTabPane, OTab, OScroller } from '@opensig/opendesign';
|
|
4
|
+
import { ElSelect, ElOption } from 'element-plus';
|
|
4
5
|
import dayjs from 'dayjs';
|
|
5
6
|
import IconTips from '~icons/components/icon-tips.svg';
|
|
6
7
|
import OMeetingSigAside from './components/OMeetingSigAside.vue';
|
|
@@ -8,6 +9,7 @@ import { CalendarDataType, MeetingEventsItemT, MeetingItemT } from './types.ts';
|
|
|
8
9
|
import { useScreen } from '@opendesign-plus/composables';
|
|
9
10
|
import { useMeetingConfig } from './composables/useMeetingConfig';
|
|
10
11
|
import OMeetingCalendarList from '@/components/meeting/components/OMeetingCalendarList.vue';
|
|
12
|
+
import { formatDate } from '@/components/meeting/utils.ts';
|
|
11
13
|
|
|
12
14
|
const props = defineProps<{
|
|
13
15
|
sigName: String;
|
|
@@ -21,7 +23,7 @@ const { lePadV } = useScreen();
|
|
|
21
23
|
const selectDate = ref<string>('');
|
|
22
24
|
|
|
23
25
|
const loading = ref(false); // 数据加载状态
|
|
24
|
-
const
|
|
26
|
+
const meetingData = ref<MeetingItemT[]>([]); // 某天的会议列表
|
|
25
27
|
const calendarRows = computed(() => (lePadV.value ? 100 : 5)); // 日历行数
|
|
26
28
|
|
|
27
29
|
const latestDate = ref<string>('');
|
|
@@ -44,7 +46,7 @@ const clickDateCell = async (date: string) => {
|
|
|
44
46
|
loading.value = true;
|
|
45
47
|
selectDate.value = dayjs(date).format('YYYY-MM-DD');
|
|
46
48
|
const res = await props.getMeetingListRequest(selectDate.value, props.sigName);
|
|
47
|
-
|
|
49
|
+
meetingData.value = res.map((v: MeetingItemT) => {
|
|
48
50
|
return {
|
|
49
51
|
...v,
|
|
50
52
|
time: `${ v.start }-${ v.end }`,
|
|
@@ -54,11 +56,6 @@ const clickDateCell = async (date: string) => {
|
|
|
54
56
|
});
|
|
55
57
|
} finally {
|
|
56
58
|
loading.value = false;
|
|
57
|
-
eventsData.value.forEach((v) => {
|
|
58
|
-
if (v.dates?.includes(selectDate.value)) {
|
|
59
|
-
list.value.push(v);
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
59
|
}
|
|
63
60
|
};
|
|
64
61
|
|
|
@@ -68,7 +65,12 @@ const getDates = async () => {
|
|
|
68
65
|
meetingDates.value = await props.getDateListRequest();
|
|
69
66
|
}
|
|
70
67
|
if (props.getEventsListRequest) {
|
|
71
|
-
eventsData.value = await props.getEventsListRequest()
|
|
68
|
+
eventsData.value = (await props.getEventsListRequest(selectDate.value, props.sigName)).map((v: any) => {
|
|
69
|
+
return {
|
|
70
|
+
...v,
|
|
71
|
+
type: CalendarDataType.EVENTS,
|
|
72
|
+
};
|
|
73
|
+
});
|
|
72
74
|
eventsDates.value = (eventsData.value || []).map(v => v.dates || []).flat();
|
|
73
75
|
}
|
|
74
76
|
};
|
|
@@ -94,13 +96,15 @@ const getMonthAndDay = (date: string) => {
|
|
|
94
96
|
};
|
|
95
97
|
|
|
96
98
|
const dateList = computed(() => {
|
|
97
|
-
let list
|
|
99
|
+
let list: any[];
|
|
98
100
|
if (tabType.value === CalendarDataType.ALL) {
|
|
99
101
|
list = [...(meetingDates.value || []), ...eventsDates.value];
|
|
100
102
|
} else if (tabType.value === CalendarDataType.MEETING) {
|
|
101
103
|
list = meetingDates.value || [];
|
|
104
|
+
} else if (tabType.value === CalendarDataType.EVENTS) {
|
|
105
|
+
list = eventsDates.value || [];
|
|
102
106
|
} else {
|
|
103
|
-
list =
|
|
107
|
+
list = [];
|
|
104
108
|
}
|
|
105
109
|
return [...new Set(list)].sort((a, b) => !dayjs(a).isAfter(dayjs(b)) ? -1 : 1).map(v => dayjs(v).format('YYYY-MM-DD'));
|
|
106
110
|
});
|
|
@@ -235,11 +239,25 @@ const changeMonthIdx = (step: number) => {
|
|
|
235
239
|
onMounted(() => {
|
|
236
240
|
getDates();
|
|
237
241
|
});
|
|
242
|
+
|
|
243
|
+
const list = computed(() => {
|
|
244
|
+
let list: any[];
|
|
245
|
+
if (tabType.value === CalendarDataType.ALL) {
|
|
246
|
+
list = [...(meetingData.value || []), ...eventsData.value];
|
|
247
|
+
} else if (tabType.value === CalendarDataType.MEETING) {
|
|
248
|
+
list = meetingData.value || [];
|
|
249
|
+
} else if (tabType.value === CalendarDataType.EVENTS) {
|
|
250
|
+
list = eventsData.value || [];
|
|
251
|
+
} else {
|
|
252
|
+
list = [];
|
|
253
|
+
}
|
|
254
|
+
return list;
|
|
255
|
+
});
|
|
238
256
|
</script>
|
|
239
257
|
|
|
240
258
|
<template>
|
|
241
259
|
<div class="o-sig-meeting-calendar">
|
|
242
|
-
<div class="meeting-card-header"
|
|
260
|
+
<div class="meeting-card-header">
|
|
243
261
|
<div class="header-left" v-if="latestDate">
|
|
244
262
|
<span>{{ t('meeting.latestMeeting') }} </span>
|
|
245
263
|
<span>{{ dayjs(latestDate).format('YYYY/MM/DD') }}</span>
|
|
@@ -268,12 +286,12 @@ onMounted(() => {
|
|
|
268
286
|
<template v-if="lePadV && dateList.length">
|
|
269
287
|
<div class="date-select">
|
|
270
288
|
<ElSelect v-model="selectDate" @change="changeSelect">
|
|
271
|
-
<template #label>{{ t('meeting.latestMeeting') }} {{ selectDate }}</template>
|
|
289
|
+
<template #label>{{ t('meeting.latestMeeting') }} {{ formatDate(selectDate) }}</template>
|
|
272
290
|
<ElOption
|
|
273
291
|
v-for="date in dateList"
|
|
274
292
|
:key="date"
|
|
275
293
|
:value="date"
|
|
276
|
-
:label="
|
|
294
|
+
:label="formatDate(date)"
|
|
277
295
|
/>
|
|
278
296
|
</ElSelect>
|
|
279
297
|
</div>
|
|
@@ -317,7 +335,7 @@ onMounted(() => {
|
|
|
317
335
|
margin-top: var(--o-gap-5);
|
|
318
336
|
@include respond('phone') {
|
|
319
337
|
.meeting-card-header {
|
|
320
|
-
padding:
|
|
338
|
+
padding: var(--o-gap-3) var(--o-gap-4) 0;
|
|
321
339
|
|
|
322
340
|
.el-input {
|
|
323
341
|
flex-grow: 1;
|
|
@@ -329,7 +347,7 @@ onMounted(() => {
|
|
|
329
347
|
}
|
|
330
348
|
|
|
331
349
|
.date-select {
|
|
332
|
-
padding:
|
|
350
|
+
padding: var(--o-gap-4);
|
|
333
351
|
|
|
334
352
|
.o-select {
|
|
335
353
|
width: 100%;
|
|
@@ -340,10 +358,13 @@ onMounted(() => {
|
|
|
340
358
|
font-weight: 500;
|
|
341
359
|
display: flex;
|
|
342
360
|
align-items: center;
|
|
343
|
-
padding:
|
|
361
|
+
padding: var(--o-gap-3) var(--o-gap-6) 0;
|
|
344
362
|
@include text1;
|
|
345
363
|
@include respond('<=pad') {
|
|
346
|
-
padding:
|
|
364
|
+
padding: var(--o-gap-3) var(--o-gap-4) 0;
|
|
365
|
+
}
|
|
366
|
+
@include respond('<=pad_v') {
|
|
367
|
+
display: none;
|
|
347
368
|
}
|
|
348
369
|
|
|
349
370
|
.date-meeting {
|
|
@@ -353,8 +374,9 @@ onMounted(() => {
|
|
|
353
374
|
|
|
354
375
|
.header-left {
|
|
355
376
|
width: 35%;
|
|
356
|
-
padding-bottom:
|
|
377
|
+
padding-bottom: var(--o-gap-3);
|
|
357
378
|
color: var(--o-color-info1);
|
|
379
|
+
@include text1;
|
|
358
380
|
}
|
|
359
381
|
|
|
360
382
|
.o-tab {
|
|
@@ -365,7 +387,7 @@ onMounted(() => {
|
|
|
365
387
|
position: relative;
|
|
366
388
|
|
|
367
389
|
.o-tab-nav {
|
|
368
|
-
padding-bottom:
|
|
390
|
+
padding-bottom: var(--o-gap-3);
|
|
369
391
|
|
|
370
392
|
svg path {
|
|
371
393
|
fill: currentColor;
|
|
@@ -406,8 +428,9 @@ onMounted(() => {
|
|
|
406
428
|
}
|
|
407
429
|
|
|
408
430
|
.list-content {
|
|
431
|
+
min-width: 0;
|
|
409
432
|
flex-grow: 1;
|
|
410
|
-
height:
|
|
433
|
+
height: 360px;
|
|
411
434
|
@include respond('<=pad_v') {
|
|
412
435
|
height: auto;
|
|
413
436
|
}
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
isClient,
|
|
4
|
+
OCollapse,
|
|
5
|
+
OCollapseItem,
|
|
6
|
+
ODivider,
|
|
7
|
+
OIcon,
|
|
8
|
+
OButton,
|
|
9
|
+
OTag,
|
|
10
|
+
useMessage,
|
|
11
|
+
} from '@opensig/opendesign';
|
|
3
12
|
import OMeetingDetail from './OMeetingDetail.vue';
|
|
4
13
|
import { computed, nextTick, ref, watch } from 'vue';
|
|
5
14
|
import IconCopy from '~icons/meeting/icon-copy.svg';
|
|
@@ -198,8 +207,8 @@ const computedList = computed<any[]>(() => {
|
|
|
198
207
|
<template v-if="item.activity_type">{{ item.activity_type }}</template>
|
|
199
208
|
</div>
|
|
200
209
|
</div>
|
|
201
|
-
<
|
|
202
|
-
|
|
210
|
+
<OButton
|
|
211
|
+
variant="text"
|
|
203
212
|
v-if="item.url"
|
|
204
213
|
:href="item.url"
|
|
205
214
|
target="_blank"
|
|
@@ -211,9 +220,9 @@ const computedList = computed<any[]>(() => {
|
|
|
211
220
|
<IconChevronRight />
|
|
212
221
|
</OIcon>
|
|
213
222
|
</template>
|
|
214
|
-
</
|
|
215
|
-
<
|
|
216
|
-
|
|
223
|
+
</OButton>
|
|
224
|
+
<OButton
|
|
225
|
+
variant="text"
|
|
217
226
|
v-if="item.join_url"
|
|
218
227
|
:href="item.join_url"
|
|
219
228
|
target="_blank"
|
|
@@ -225,9 +234,9 @@ const computedList = computed<any[]>(() => {
|
|
|
225
234
|
<IconChevronRight />
|
|
226
235
|
</OIcon>
|
|
227
236
|
</template>
|
|
228
|
-
</
|
|
229
|
-
<
|
|
230
|
-
|
|
237
|
+
</OButton>
|
|
238
|
+
<OButton
|
|
239
|
+
variant="text"
|
|
231
240
|
v-if="item.content_url"
|
|
232
241
|
:href="item.content_url"
|
|
233
242
|
target="_blank"
|
|
@@ -239,9 +248,9 @@ const computedList = computed<any[]>(() => {
|
|
|
239
248
|
<IconChevronRight />
|
|
240
249
|
</OIcon>
|
|
241
250
|
</template>
|
|
242
|
-
</
|
|
243
|
-
<
|
|
244
|
-
|
|
251
|
+
</OButton>
|
|
252
|
+
<OButton
|
|
253
|
+
variant="text"
|
|
245
254
|
v-if="item.register_url"
|
|
246
255
|
:href="item.register_url"
|
|
247
256
|
target="_blank"
|
|
@@ -253,7 +262,7 @@ const computedList = computed<any[]>(() => {
|
|
|
253
262
|
<IconChevronRight />
|
|
254
263
|
</OIcon>
|
|
255
264
|
</template>
|
|
256
|
-
</
|
|
265
|
+
</OButton>
|
|
257
266
|
</div>
|
|
258
267
|
<OIcon @click.stop="() => copyInfo(index)" class="copy-icon">
|
|
259
268
|
<IconCopy />
|
|
@@ -374,12 +383,13 @@ const computedList = computed<any[]>(() => {
|
|
|
374
383
|
|
|
375
384
|
.o-collapse-item-title {
|
|
376
385
|
flex-grow: 1;
|
|
386
|
+
min-width: 0;
|
|
377
387
|
margin-bottom: 0;
|
|
378
388
|
display: flex;
|
|
379
389
|
align-items: center;
|
|
380
390
|
justify-content: center;
|
|
381
391
|
gap: var(--o-gap-4);
|
|
382
|
-
padding-right: var(--o-gap-
|
|
392
|
+
padding-right: var(--o-gap-5);
|
|
383
393
|
|
|
384
394
|
.meet-title-left {
|
|
385
395
|
flex-grow: 1;
|
|
@@ -457,7 +467,7 @@ const computedList = computed<any[]>(() => {
|
|
|
457
467
|
|
|
458
468
|
.jump-detail-link {
|
|
459
469
|
padding-left: calc(var(--icon-right) + var(--icon-size2));
|
|
460
|
-
margin-top: var(--o-gap-
|
|
470
|
+
margin-top: var(--o-gap-1);
|
|
461
471
|
color: var(--o-color-info2);
|
|
462
472
|
font-weight: 400;
|
|
463
473
|
@include tip1;
|
|
@@ -508,7 +518,7 @@ const computedList = computed<any[]>(() => {
|
|
|
508
518
|
margin-right: var(--icon-right);
|
|
509
519
|
width: var(--icon-size2);
|
|
510
520
|
height: var(--icon-size2);
|
|
511
|
-
font-size: calc(var(--icon-size2) -
|
|
521
|
+
font-size: calc(var(--icon-size2) - 2px);
|
|
512
522
|
|
|
513
523
|
svg path {
|
|
514
524
|
fill: currentColor;
|
|
@@ -518,14 +528,16 @@ const computedList = computed<any[]>(() => {
|
|
|
518
528
|
.text {
|
|
519
529
|
display: block;
|
|
520
530
|
font-weight: 600;
|
|
531
|
+
min-width: 0;
|
|
532
|
+
flex: 1;
|
|
521
533
|
@include text-truncate(1);
|
|
522
534
|
}
|
|
523
535
|
}
|
|
524
536
|
|
|
525
537
|
.meet-info {
|
|
538
|
+
display: flex;
|
|
526
539
|
margin-left: calc(var(--icon-right) + var(--icon-size2));
|
|
527
540
|
margin-top: var(--o-gap-2);
|
|
528
|
-
display: flex;
|
|
529
541
|
flex-wrap: wrap;
|
|
530
542
|
align-items: center;
|
|
531
543
|
color: var(--o-color-info3);
|
|
@@ -333,7 +333,7 @@ watch(
|
|
|
333
333
|
<OTabPane :value="0" :label="t('meeting.audioToText')">
|
|
334
334
|
<OScroller v-if="computedCaptions.length" id="captionsScrollDom" class="captions-scroller" show-type="hover"
|
|
335
335
|
size="small" disabled-x>
|
|
336
|
-
<ORow gap="0
|
|
336
|
+
<ORow gap="0 8px" wrap="wrap">
|
|
337
337
|
<OCol flex="0 0 100%" v-for="(item, i) in computedCaptions" :key="i">
|
|
338
338
|
<div class="captions-item" :class="{ 'captions-item-active': currentIndex === i + 1 }"
|
|
339
339
|
@click="videoPosition(item.start_time)">
|
|
@@ -80,12 +80,14 @@ const changeMonth = (step: number) => {
|
|
|
80
80
|
.o-sig-meeting-aside {
|
|
81
81
|
width: 35%;
|
|
82
82
|
flex-shrink: 0;
|
|
83
|
-
padding: var(--o-gap-4)
|
|
83
|
+
padding: var(--o-gap-4);
|
|
84
84
|
display: flex;
|
|
85
85
|
flex-direction: column;
|
|
86
86
|
border-right: 1px solid var(--o-color-control4);
|
|
87
87
|
@include respond('<=pad') {
|
|
88
88
|
padding: var(--o-gap-4);
|
|
89
|
+
}
|
|
90
|
+
@include respond('<=pad_v') {
|
|
89
91
|
border-right: none;
|
|
90
92
|
}
|
|
91
93
|
@include respond('phone') {
|
|
@@ -104,7 +106,8 @@ const changeMonth = (step: number) => {
|
|
|
104
106
|
.month {
|
|
105
107
|
color: var(--o-color-info3);
|
|
106
108
|
margin-bottom: var(--o-gap-2);
|
|
107
|
-
|
|
109
|
+
font-weight: bold;
|
|
110
|
+
@include text1;
|
|
108
111
|
}
|
|
109
112
|
|
|
110
113
|
.days {
|
|
@@ -124,9 +127,11 @@ const changeMonth = (step: number) => {
|
|
|
124
127
|
cursor: pointer;
|
|
125
128
|
border: 1px solid transparent;
|
|
126
129
|
|
|
127
|
-
&:hover
|
|
128
|
-
&.active {
|
|
130
|
+
&:hover {
|
|
129
131
|
background-color: var(--o-color-control3-light);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
&.active {
|
|
130
135
|
border-color: var(--o-color-primary1);
|
|
131
136
|
}
|
|
132
137
|
|
|
@@ -144,7 +149,8 @@ const changeMonth = (step: number) => {
|
|
|
144
149
|
.o-icon {
|
|
145
150
|
width: 20px;
|
|
146
151
|
height: 20px;
|
|
147
|
-
font-size:
|
|
152
|
+
font-size: 18px;
|
|
153
|
+
padding: 1px;
|
|
148
154
|
line-height: 1em;
|
|
149
155
|
position: relative;
|
|
150
156
|
border-radius: 50%;
|
|
@@ -164,7 +170,6 @@ const changeMonth = (step: number) => {
|
|
|
164
170
|
}
|
|
165
171
|
|
|
166
172
|
.arrow-wrapper {
|
|
167
|
-
margin-top: auto;
|
|
168
173
|
display: flex;
|
|
169
174
|
align-items: center;
|
|
170
175
|
justify-content: space-between;
|
|
@@ -42,7 +42,6 @@ export type PlatformT = 'welink' | 'tencent' | 'zoom' | 'WELINK' | 'TENCENT' | '
|
|
|
42
42
|
export enum MeetingGroupType {
|
|
43
43
|
SIG = 'sig',
|
|
44
44
|
GROUP = 'group',
|
|
45
|
-
NONE = 'none',
|
|
46
45
|
}
|
|
47
46
|
|
|
48
47
|
export interface MeetingCalendarPropsT {
|
|
@@ -62,6 +61,8 @@ export interface MeetingCalendarPropsT {
|
|
|
62
61
|
export interface MeetingPostT {
|
|
63
62
|
id?: number; // 会议id
|
|
64
63
|
topic: string; // 会议主题 128
|
|
64
|
+
name?: string; // 会议主题 128
|
|
65
|
+
title?: string; // 会议主题 128
|
|
65
66
|
sponsor?: string; // 会议发起人 20
|
|
66
67
|
group_name: string; // 所属SIG 64
|
|
67
68
|
platform: PlatformT | string; // 会议平台
|
package/src/i18n/en.ts
CHANGED
|
@@ -115,7 +115,7 @@ export default {
|
|
|
115
115
|
'meeting.meetingDate': 'Date',
|
|
116
116
|
'meeting.startTime': 'Start time',
|
|
117
117
|
'meeting.endTime': 'End time',
|
|
118
|
-
'meeting.meetingRecord': '
|
|
118
|
+
'meeting.meetingRecord': 'Recording',
|
|
119
119
|
'meeting.meetingRecordDesc': 'Enables auto screen recording. This service is provided by {0} Meeting. AI-powered playback will be automatically uploaded within one working day.',
|
|
120
120
|
'meeting.meetingRecordDesc1': '1. Meeting AI recording is now enabled. Turning on Meeting AI Listen automatically activates cloud recording as well. After the meeting, you can replay the recording, and voice-to-text transcripts along with AI meeting minutes will be automatically generated.',
|
|
121
121
|
'meeting.meetingRecordDesc2': '2. The AI-generated meeting replay link will be automatically generated and uploaded within 1 business day.',
|
package/src/i18n/zh.ts
CHANGED
|
@@ -115,7 +115,7 @@ export default {
|
|
|
115
115
|
'meeting.meetingDate': '会议日期',
|
|
116
116
|
'meeting.startTime': '开始时间',
|
|
117
117
|
'meeting.endTime': '结束时间',
|
|
118
|
-
'meeting.meetingRecord': '
|
|
118
|
+
'meeting.meetingRecord': '会议录制',
|
|
119
119
|
'meeting.meetingRecordDesc1': '1、会议AI录制已开启,开启会议AI听即开启云录制,会后可回放会议录制并生成语音文字和AI纪要。',
|
|
120
120
|
'meeting.meetingRecordDesc2': '2、AI生成的会议回放链接将在 1 个工作日内自动生成并上传。',
|
|
121
121
|
'meeting.day0': '天',
|