@opendesign-plus/components 0.0.1-rc.27 → 0.0.1-rc.29
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 +152 -152
- package/dist/components/activity/OActivityApproval.vue.d.ts +8 -8
- package/dist/components/activity/OActivityForm.vue.d.ts +6 -6
- package/dist/components/activity/OActivityMyCalendar.vue.d.ts +8 -4
- package/dist/components/activity/index.d.ts +17 -15
- package/dist/components/config-provider/OPlusConfigProvider.vue.d.ts +24 -0
- package/dist/components/config-provider/index.d.ts +30 -0
- package/dist/components/cookie-notice/OCookieNotice.vue.d.ts +17 -0
- package/dist/components/cookie-notice/index.d.ts +53 -0
- package/dist/components/events/types.d.ts +4 -0
- package/dist/components/{OFooter.vue.d.ts → footer/OFooter.vue.d.ts} +2 -2
- package/dist/components/footer/index.d.ts +89 -0
- package/dist/components/header/index.d.ts +1 -0
- package/dist/components/header/types.d.ts +1 -0
- package/dist/components/{OLanguageSwitcher.vue.d.ts → header-language-switcher/OHeaderLanguageSwitcher.vue.d.ts} +5 -5
- package/dist/components/header-language-switcher/index.d.ts +90 -0
- package/dist/components/{OHeaderSearch.vue.d.ts → header-search/OHeaderSearch.vue.d.ts} +165 -145
- package/dist/components/header-search/index.d.ts +607 -0
- package/dist/components/header-source-code/OHeaderSourceCode.vue.d.ts +18 -0
- package/dist/components/header-source-code/index.d.ts +23 -0
- package/dist/components/header-theme/OHeaderTheme.vue.d.ts +25 -0
- package/dist/components/header-theme/index.d.ts +50 -0
- package/dist/components/{OHeaderUser.vue.d.ts → header-user/OHeaderUser.vue.d.ts} +7 -7
- package/dist/components/header-user/index.d.ts +53 -0
- package/dist/components/meeting/OMeetingCalendar.vue.d.ts +2 -2
- package/dist/components/meeting/OMeetingForm.vue.d.ts +4 -6
- package/dist/components/meeting/OMeetingMyCalendar.vue.d.ts +8 -4
- package/dist/components/meeting/OMeetingPlayback.vue.d.ts +4 -4
- package/dist/components/meeting/components/OMeetingCalendarList.vue.d.ts +1 -0
- package/dist/components/meeting/components/OMeetingPlaybackVideo.vue.d.ts +1 -1
- package/dist/components/meeting/index.d.ts +11 -15
- package/dist/components/meeting/types.d.ts +6 -4
- package/dist/components/meeting/utils.d.ts +2 -1
- package/dist/components/search/OSearchInput.vue.d.ts +54 -34
- package/dist/components/search/index.d.ts +32 -22
- package/dist/components/search/internal/SearchImageInput.vue.d.ts +41 -21
- package/dist/components/search/internal/SearchPanel.vue.d.ts +1 -1
- package/dist/components/{OSection.vue.d.ts → section/OSection.vue.d.ts} +4 -4
- package/dist/components/section/index.d.ts +47 -0
- package/dist/components.cjs.js +40 -40
- package/dist/components.css +1 -1
- package/dist/components.es.js +16758 -16562
- package/dist/index.d.ts +9 -14
- package/docs/design.md +2 -2
- package/package.json +8 -8
- package/scripts/generate-components-index.js +2 -44
- 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/assets/styles/element-plus.scss +24 -0
- package/src/components/activity/OActivityMyCalendar.vue +19 -12
- package/src/components/common/ClientOnly.vue +13 -0
- package/src/components/{OPlusConfigProvider.vue → config-provider/OPlusConfigProvider.vue} +5 -5
- package/src/components/config-provider/index.ts +10 -0
- package/src/components/{OCookieNotice.vue → cookie-notice/OCookieNotice.vue} +1 -1
- package/src/components/cookie-notice/index.ts +10 -0
- package/src/components/element-plus/OElCookieNotice.vue +1 -1
- package/src/components/events/OEventsApply.vue +85 -1
- package/src/components/events/OEventsList.vue +112 -40
- package/src/components/events/types.ts +1 -0
- package/src/components/{OFooter.vue → footer/OFooter.vue} +4 -4
- package/src/components/footer/index.ts +10 -0
- package/src/components/header/index.ts +2 -0
- package/src/components/header/types.ts +1 -0
- package/src/components/header-language-switcher/index.ts +10 -0
- package/src/components/{OHeaderSearch.vue → header-search/OHeaderSearch.vue} +4 -4
- package/src/components/header-search/index.ts +10 -0
- package/src/components/{OSourceCode.vue → header-source-code/OHeaderSourceCode.vue} +2 -2
- package/src/components/header-source-code/index.ts +10 -0
- package/src/components/{OThemeSwitcher.vue → header-theme/OHeaderTheme.vue} +4 -4
- package/src/components/header-theme/index.ts +10 -0
- package/src/components/{OHeaderUser.vue → header-user/OHeaderUser.vue} +4 -4
- package/src/components/header-user/index.ts +10 -0
- package/src/components/meeting/OMeetingCalendar.vue +32 -21
- package/src/components/meeting/OMeetingForm.vue +44 -37
- package/src/components/meeting/OMeetingMyCalendar.vue +28 -38
- package/src/components/meeting/OMeetingSigCalendar.vue +43 -20
- package/src/components/meeting/components/OMeetingCalendarList.vue +80 -29
- package/src/components/meeting/components/OMeetingDetail.vue +29 -10
- package/src/components/meeting/components/OMeetingPlaybackSubtitles.vue +1 -1
- package/src/components/meeting/components/OMeetingSigAside.vue +11 -6
- package/src/components/meeting/types.ts +7 -5
- package/src/components/meeting/utils.ts +4 -4
- package/src/components/{OSection.vue → section/OSection.vue} +1 -1
- package/src/components/section/index.ts +10 -0
- package/src/i18n/en.ts +2 -2
- package/src/i18n/zh.ts +4 -2
- package/src/index.ts +9 -38
- package/dist/components/OCookieNotice.vue.d.ts +0 -17
- package/dist/components/OPlusConfigProvider.vue.d.ts +0 -23
- package/dist/components/OSourceCode.vue.d.ts +0 -18
- package/dist/components/OThemeSwitcher.vue.d.ts +0 -25
- package/dist/components/meeting/components/OMeetingCalendarSelector.vue.d.ts +0 -664
- package/src/components/common/ClientOnlyWrapper.ts +0 -21
- /package/src/components/{OLanguageSwitcher.vue → header-language-switcher/OHeaderLanguageSwitcher.vue} +0 -0
|
@@ -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';
|
|
@@ -15,6 +24,7 @@ const { activityTypeMap } = useActivityConfig();
|
|
|
15
24
|
const props = withDefaults(defineProps<{
|
|
16
25
|
list: MeetingItemT[];
|
|
17
26
|
groupType?: MeetingGroupType;
|
|
27
|
+
disableFormat?: boolean;
|
|
18
28
|
}>(), {
|
|
19
29
|
list: () => [],
|
|
20
30
|
});
|
|
@@ -81,22 +91,44 @@ const computedList = computed<any[]>(() => {
|
|
|
81
91
|
return props.list.map((v: any) => {
|
|
82
92
|
const type = v.type;
|
|
83
93
|
let dateRange = '';
|
|
94
|
+
let start_date_time = '';
|
|
95
|
+
let end_date_time = '';
|
|
84
96
|
if (type !== CalendarDataType.MEETING) {
|
|
85
97
|
let activity_type = activityTypeMap.value.get(v.activity_type)?.label;
|
|
86
|
-
if (v.
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
98
|
+
if (v.start_date) {
|
|
99
|
+
dateRange = props.disableFormat ? v.start_date : formatDate(v.start_date);
|
|
100
|
+
}
|
|
101
|
+
if (v.start) {
|
|
102
|
+
dateRange += `${ dateRange ? ' ' : '' }${ v.start }`;
|
|
103
|
+
}
|
|
104
|
+
if (v.end_date || v.end) {
|
|
105
|
+
dateRange += `${ dateRange ? ' -' : '' }`;
|
|
106
|
+
if (v.end_date && v.end_date !== v.start_date) {
|
|
107
|
+
dateRange += `${ dateRange ? ' ' : '' }${ props.disableFormat ? v.end_date : formatDate(v.end_date) }`;
|
|
108
|
+
}
|
|
109
|
+
if (v.end) {
|
|
110
|
+
dateRange += `${ dateRange ? ' ' : '' }${ v.end }`;
|
|
91
111
|
}
|
|
92
|
-
}
|
|
93
|
-
|
|
112
|
+
}
|
|
113
|
+
if (v.start_date) {
|
|
114
|
+
start_date_time = props.disableFormat ? v.start_date : formatDate(v.start_date);
|
|
115
|
+
}
|
|
116
|
+
if (v.start) {
|
|
117
|
+
start_date_time += `${ start_date_time ? ' ' : '' }${ v.start }`;
|
|
118
|
+
}
|
|
119
|
+
if (v.end_date) {
|
|
120
|
+
end_date_time = props.disableFormat ? v.end_date : formatDate(v.end_date);
|
|
121
|
+
}
|
|
122
|
+
if (v.end) {
|
|
123
|
+
end_date_time += `${ end_date_time ? ' ' : '' }${ v.end }`;
|
|
94
124
|
}
|
|
95
125
|
|
|
96
126
|
return {
|
|
97
127
|
...v,
|
|
98
128
|
activity_type,
|
|
99
129
|
dateRange,
|
|
130
|
+
start_date_time,
|
|
131
|
+
end_date_time,
|
|
100
132
|
};
|
|
101
133
|
}
|
|
102
134
|
const {
|
|
@@ -112,12 +144,27 @@ const computedList = computed<any[]>(() => {
|
|
|
112
144
|
cycle_interval,
|
|
113
145
|
cycle_point,
|
|
114
146
|
} = v;
|
|
115
|
-
dateRange =
|
|
147
|
+
dateRange = props.disableFormat ? date : formatDate(date);
|
|
148
|
+
if (start && end) {
|
|
149
|
+
dateRange += `${ dateRange ? ' ' : '' }${ start } - ${ end }`;
|
|
150
|
+
} else if (start || end) {
|
|
151
|
+
dateRange += `${ dateRange ? ' ' : '' }${ start || end }`;
|
|
152
|
+
}
|
|
116
153
|
if (is_cycle) {
|
|
117
|
-
dateRange = `${ formatDate(cycle_start_date) } - ${ formatDate(cycle_end_date) }`;
|
|
154
|
+
dateRange = `${ props.disableFormat ? cycle_start_date : formatDate(cycle_start_date) } - ${ props.disableFormat ? cycle_end_date : formatDate(cycle_end_date) }`;
|
|
118
155
|
}
|
|
119
156
|
|
|
120
|
-
let timeRange =
|
|
157
|
+
let timeRange = '';
|
|
158
|
+
if (start && end) {
|
|
159
|
+
timeRange = `${ start } - ${ end }`;
|
|
160
|
+
} else {
|
|
161
|
+
if (start) {
|
|
162
|
+
timeRange = start;
|
|
163
|
+
}
|
|
164
|
+
if (end) {
|
|
165
|
+
timeRange = end;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
121
168
|
let replay_url = null;
|
|
122
169
|
let hasObsData = false;
|
|
123
170
|
const obsData = v.obs_data?.filter((v: ObsDataItemT) => v.text_video_url) || [];
|
|
@@ -169,7 +216,7 @@ const computedList = computed<any[]>(() => {
|
|
|
169
216
|
<OCollapseItem v-for="(item, index) in computedList" :key="item.id" :value="item.id">
|
|
170
217
|
<template #title>
|
|
171
218
|
<div class="meet-title-left">
|
|
172
|
-
<div class="meet-title" :title="item.topic || item.name">
|
|
219
|
+
<div class="meet-title" :title="item.topic || item.name || item.title">
|
|
173
220
|
<OIcon
|
|
174
221
|
:style="{
|
|
175
222
|
backgroundColor: `${getConfig(item.type, 'color')}`
|
|
@@ -188,14 +235,14 @@ const computedList = computed<any[]>(() => {
|
|
|
188
235
|
<span class="start-time">
|
|
189
236
|
<span>{{ item.dateRange }}</span>
|
|
190
237
|
</span>
|
|
191
|
-
<ODivider direction="v" />
|
|
238
|
+
<ODivider v-if="item.group_name || item.activity_type" direction="v" />
|
|
192
239
|
<div>
|
|
193
240
|
<template v-if="item.group_name">{{ i18n.SIG_GROUP }} {{ item.group_name }}</template>
|
|
194
241
|
<template v-if="item.activity_type">{{ item.activity_type }}</template>
|
|
195
242
|
</div>
|
|
196
243
|
</div>
|
|
197
|
-
<
|
|
198
|
-
|
|
244
|
+
<OButton
|
|
245
|
+
variant="text"
|
|
199
246
|
v-if="item.url"
|
|
200
247
|
:href="item.url"
|
|
201
248
|
target="_blank"
|
|
@@ -207,9 +254,9 @@ const computedList = computed<any[]>(() => {
|
|
|
207
254
|
<IconChevronRight />
|
|
208
255
|
</OIcon>
|
|
209
256
|
</template>
|
|
210
|
-
</
|
|
211
|
-
<
|
|
212
|
-
|
|
257
|
+
</OButton>
|
|
258
|
+
<OButton
|
|
259
|
+
variant="text"
|
|
213
260
|
v-if="item.join_url"
|
|
214
261
|
:href="item.join_url"
|
|
215
262
|
target="_blank"
|
|
@@ -221,9 +268,9 @@ const computedList = computed<any[]>(() => {
|
|
|
221
268
|
<IconChevronRight />
|
|
222
269
|
</OIcon>
|
|
223
270
|
</template>
|
|
224
|
-
</
|
|
225
|
-
<
|
|
226
|
-
|
|
271
|
+
</OButton>
|
|
272
|
+
<OButton
|
|
273
|
+
variant="text"
|
|
227
274
|
v-if="item.content_url"
|
|
228
275
|
:href="item.content_url"
|
|
229
276
|
target="_blank"
|
|
@@ -235,9 +282,9 @@ const computedList = computed<any[]>(() => {
|
|
|
235
282
|
<IconChevronRight />
|
|
236
283
|
</OIcon>
|
|
237
284
|
</template>
|
|
238
|
-
</
|
|
239
|
-
<
|
|
240
|
-
|
|
285
|
+
</OButton>
|
|
286
|
+
<OButton
|
|
287
|
+
variant="text"
|
|
241
288
|
v-if="item.register_url"
|
|
242
289
|
:href="item.register_url"
|
|
243
290
|
target="_blank"
|
|
@@ -249,7 +296,7 @@ const computedList = computed<any[]>(() => {
|
|
|
249
296
|
<IconChevronRight />
|
|
250
297
|
</OIcon>
|
|
251
298
|
</template>
|
|
252
|
-
</
|
|
299
|
+
</OButton>
|
|
253
300
|
</div>
|
|
254
301
|
<OIcon @click.stop="() => copyInfo(index)" class="copy-icon">
|
|
255
302
|
<IconCopy />
|
|
@@ -370,12 +417,13 @@ const computedList = computed<any[]>(() => {
|
|
|
370
417
|
|
|
371
418
|
.o-collapse-item-title {
|
|
372
419
|
flex-grow: 1;
|
|
420
|
+
min-width: 0;
|
|
373
421
|
margin-bottom: 0;
|
|
374
422
|
display: flex;
|
|
375
423
|
align-items: center;
|
|
376
424
|
justify-content: center;
|
|
377
425
|
gap: var(--o-gap-4);
|
|
378
|
-
padding-right: var(--o-gap-
|
|
426
|
+
padding-right: var(--o-gap-5);
|
|
379
427
|
|
|
380
428
|
.meet-title-left {
|
|
381
429
|
flex-grow: 1;
|
|
@@ -453,7 +501,7 @@ const computedList = computed<any[]>(() => {
|
|
|
453
501
|
|
|
454
502
|
.jump-detail-link {
|
|
455
503
|
padding-left: calc(var(--icon-right) + var(--icon-size2));
|
|
456
|
-
margin-top: var(--o-gap-
|
|
504
|
+
margin-top: var(--o-gap-1);
|
|
457
505
|
color: var(--o-color-info2);
|
|
458
506
|
font-weight: 400;
|
|
459
507
|
@include tip1;
|
|
@@ -492,6 +540,7 @@ const computedList = computed<any[]>(() => {
|
|
|
492
540
|
.o-tag {
|
|
493
541
|
background-color: var(--o-color-control2-light);
|
|
494
542
|
border: none;
|
|
543
|
+
font-weight: 400;
|
|
495
544
|
}
|
|
496
545
|
}
|
|
497
546
|
|
|
@@ -503,7 +552,7 @@ const computedList = computed<any[]>(() => {
|
|
|
503
552
|
margin-right: var(--icon-right);
|
|
504
553
|
width: var(--icon-size2);
|
|
505
554
|
height: var(--icon-size2);
|
|
506
|
-
font-size: calc(var(--icon-size2) -
|
|
555
|
+
font-size: calc(var(--icon-size2) - 2px);
|
|
507
556
|
|
|
508
557
|
svg path {
|
|
509
558
|
fill: currentColor;
|
|
@@ -513,14 +562,16 @@ const computedList = computed<any[]>(() => {
|
|
|
513
562
|
.text {
|
|
514
563
|
display: block;
|
|
515
564
|
font-weight: 600;
|
|
565
|
+
min-width: 0;
|
|
566
|
+
flex: 1;
|
|
516
567
|
@include text-truncate(1);
|
|
517
568
|
}
|
|
518
569
|
}
|
|
519
570
|
|
|
520
571
|
.meet-info {
|
|
572
|
+
display: flex;
|
|
521
573
|
margin-left: calc(var(--icon-right) + var(--icon-size2));
|
|
522
574
|
margin-top: var(--o-gap-2);
|
|
523
|
-
display: flex;
|
|
524
575
|
flex-wrap: wrap;
|
|
525
576
|
align-items: center;
|
|
526
577
|
color: var(--o-color-info3);
|
|
@@ -5,6 +5,7 @@ import { CalendarDataType, MeetingItemT } from '../types.ts';
|
|
|
5
5
|
import MoreText from '@/components/common/MoreText.vue';
|
|
6
6
|
import { formatDate } from '@/components/meeting/utils.ts';
|
|
7
7
|
import { useMeetingConfig } from '../composables/useMeetingConfig';
|
|
8
|
+
import { useI18n } from '@/i18n';
|
|
8
9
|
|
|
9
10
|
const props = defineProps<{
|
|
10
11
|
data: MeetingItemT;
|
|
@@ -13,7 +14,8 @@ const props = defineProps<{
|
|
|
13
14
|
page?: CalendarDataType
|
|
14
15
|
}>();
|
|
15
16
|
const { t, getPlatformLabel } = useMeetingConfig();
|
|
16
|
-
|
|
17
|
+
const { locale } = useI18n();
|
|
18
|
+
const isZh = computed(() => locale.value === 'zh');
|
|
17
19
|
// 会议详情配置
|
|
18
20
|
const infoList = computed(() =>
|
|
19
21
|
[
|
|
@@ -67,7 +69,13 @@ interface ColumnItemT {
|
|
|
67
69
|
extra?: string;
|
|
68
70
|
}
|
|
69
71
|
|
|
70
|
-
const getField = (key: string) =>
|
|
72
|
+
const getField = (key: string) => {
|
|
73
|
+
const val = (props.data as Record<string, any>)[key];
|
|
74
|
+
if (key === 'register_end_date' && val) {
|
|
75
|
+
return formatDate(val, 'YYYY/MM/DD HH:mm');
|
|
76
|
+
}
|
|
77
|
+
return val;
|
|
78
|
+
};
|
|
71
79
|
|
|
72
80
|
const columns = computed<ColumnItemT[]>(() => {
|
|
73
81
|
if (props.data.type === CalendarDataType.EVENTS) {
|
|
@@ -83,11 +91,15 @@ const columns = computed<ColumnItemT[]>(() => {
|
|
|
83
91
|
});
|
|
84
92
|
|
|
85
93
|
const domRef = ref([]);
|
|
94
|
+
const SPLIT_MARK = '|';
|
|
86
95
|
// 复制会议内容
|
|
87
96
|
const copyInfo = () => {
|
|
88
97
|
try {
|
|
89
|
-
|
|
90
|
-
text
|
|
98
|
+
const colon = isZh.value ? ':' : ': ';
|
|
99
|
+
let text = `${ t('meeting.meetingTopic') }${ colon }${ props.data.topic || props.data.name || props.data.title }\n`;
|
|
100
|
+
text += [...domRef.value].reduce((pre, cur: HTMLDivElement) => {
|
|
101
|
+
return `${ pre }${ cur.textContent ? cur.textContent.replace(SPLIT_MARK, colon) : '' }\n`;
|
|
102
|
+
}, '');
|
|
91
103
|
navigator.clipboard.writeText(text);
|
|
92
104
|
return Promise.resolve();
|
|
93
105
|
} catch (e) {
|
|
@@ -114,6 +126,7 @@ defineExpose({ copyInfo });
|
|
|
114
126
|
>
|
|
115
127
|
<template v-if="getField(info.key) && !info.isRecord">
|
|
116
128
|
<span class="label">{{ info.label }}</span>
|
|
129
|
+
<span class="split-mark">{{ SPLIT_MARK }}</span>
|
|
117
130
|
<MoreText :show="show" v-if="info.ellipsis" :text="getField(info.key) || '-'" />
|
|
118
131
|
<OLink
|
|
119
132
|
v-else-if="info.isLink"
|
|
@@ -154,11 +167,11 @@ defineExpose({ copyInfo });
|
|
|
154
167
|
display: flex;
|
|
155
168
|
align-items: flex-start;
|
|
156
169
|
font-size: 14px;
|
|
157
|
-
gap: var(--o-gap-
|
|
170
|
+
gap: var(--o-gap-2);
|
|
158
171
|
|
|
159
172
|
@include respond('<=pad_v') {
|
|
160
173
|
font-size: 12px;
|
|
161
|
-
gap: var(--o-gap-
|
|
174
|
+
gap: var(--o-gap-1);
|
|
162
175
|
}
|
|
163
176
|
|
|
164
177
|
&:not(.is-empty) {
|
|
@@ -190,10 +203,16 @@ defineExpose({ copyInfo });
|
|
|
190
203
|
}
|
|
191
204
|
}
|
|
192
205
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
206
|
+
.split-mark {
|
|
207
|
+
width: 0;
|
|
208
|
+
height: 0;
|
|
209
|
+
opacity: 0;
|
|
210
|
+
overflow: hidden;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.more-text-wrapper {
|
|
214
|
+
position: relative;
|
|
215
|
+
top: -2px;
|
|
197
216
|
}
|
|
198
217
|
|
|
199
218
|
.o-link {
|
|
@@ -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;
|
|
@@ -37,7 +37,7 @@ export interface OptionItemT {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
|
|
40
|
-
export type PlatformT = 'welink' | 'tencent' | 'zoom' | 'WELINK' | 'TENCENT' | 'ZOOM';
|
|
40
|
+
export type PlatformT = 'welink' | 'tencent' | 'zoom' | 'WELINK' | 'TENCENT' | 'ZOOM' | 'WeLink' | 'Tencent';
|
|
41
41
|
|
|
42
42
|
export enum MeetingGroupType {
|
|
43
43
|
SIG = 'sig',
|
|
@@ -55,15 +55,18 @@ export interface MeetingCalendarPropsT {
|
|
|
55
55
|
hiddenSummit?: boolean;
|
|
56
56
|
groupType: MeetingGroupType;
|
|
57
57
|
groups: string[];
|
|
58
|
+
disableFormat?: boolean; //是否禁用日期格式化
|
|
58
59
|
}
|
|
59
60
|
|
|
60
61
|
// 会议新增、修改
|
|
61
62
|
export interface MeetingPostT {
|
|
62
63
|
id?: number; // 会议id
|
|
63
64
|
topic: string; // 会议主题 128
|
|
65
|
+
name?: string; // 会议主题 128
|
|
66
|
+
title?: string; // 会议主题 128
|
|
64
67
|
sponsor?: string; // 会议发起人 20
|
|
65
68
|
group_name: string; // 所属SIG 64
|
|
66
|
-
platform: PlatformT; // 会议平台
|
|
69
|
+
platform: PlatformT | string; // 会议平台
|
|
67
70
|
date: string; // 会议日期
|
|
68
71
|
date_range?: string[]; // 日期返回
|
|
69
72
|
time: string; // 会议时间
|
|
@@ -88,8 +91,6 @@ export interface MeetingPostT {
|
|
|
88
91
|
|
|
89
92
|
export interface MeetingFormPropsT {
|
|
90
93
|
data?: MeetingItemT;
|
|
91
|
-
isSub?: boolean;
|
|
92
|
-
isEdit?: boolean;
|
|
93
94
|
subId?: string;
|
|
94
95
|
createMeetingRequest: any,
|
|
95
96
|
editMeetingRequest: any;
|
|
@@ -98,7 +99,8 @@ export interface MeetingFormPropsT {
|
|
|
98
99
|
getGroupsRequest: any;
|
|
99
100
|
showBtns?: boolean;
|
|
100
101
|
groupType: MeetingGroupType;
|
|
101
|
-
confirmText?: string
|
|
102
|
+
confirmText?: string;
|
|
103
|
+
labelMap?: Record<string, string>;
|
|
102
104
|
}
|
|
103
105
|
|
|
104
106
|
export interface ObsDataItemT {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import dayjs from 'dayjs';
|
|
1
|
+
import dayjs, { Dayjs } from 'dayjs';
|
|
2
2
|
import { OptionItemT } from './types';
|
|
3
3
|
|
|
4
|
-
export const formatDate = (date: string | Date = new Date(), format: string = 'YYYY
|
|
5
|
-
let dateStr = date;
|
|
4
|
+
export const formatDate = (date: undefined | string | Date | Dayjs = new Date(), format: string = 'YYYY/MM/DD'): string => {
|
|
5
|
+
let dateStr: any = date;
|
|
6
6
|
if (!dateStr) {
|
|
7
|
-
dateStr =
|
|
7
|
+
dateStr = undefined;
|
|
8
8
|
}
|
|
9
9
|
if (!dayjs(new Date(dateStr)).isValid()) {
|
|
10
10
|
return dateStr as string;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { isArray, OLink, OIcon } from '@opensig/opendesign';
|
|
3
3
|
import IconChevronRight from '~icons/components/icon-chevron-right.svg';
|
|
4
4
|
|
|
5
|
-
interface SectionPropsT {
|
|
5
|
+
export interface SectionPropsT {
|
|
6
6
|
title?: string | Array<string>;
|
|
7
7
|
subtitle?: string;
|
|
8
8
|
full?: boolean;
|
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.',
|
|
@@ -146,7 +146,7 @@ export default {
|
|
|
146
146
|
'meeting.groups': 'Groups',
|
|
147
147
|
'meeting.activityAddress': 'Address',
|
|
148
148
|
'meeting.livePlatform': 'Live Platform',
|
|
149
|
-
'meeting.meetingTopic': 'Topics
|
|
149
|
+
'meeting.meetingTopic': 'Topics',
|
|
150
150
|
'meeting.meetingDetail': 'Details',
|
|
151
151
|
'meeting.meetingEtherpad': 'Etherpad',
|
|
152
152
|
'meeting.meetingReplay': 'Playback',
|
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': '天',
|
|
@@ -145,7 +145,7 @@ export default {
|
|
|
145
145
|
'meeting.groups': '工作组',
|
|
146
146
|
'meeting.activityAddress': '活动地点',
|
|
147
147
|
'meeting.livePlatform': '直播平台',
|
|
148
|
-
'meeting.meetingTopic': '
|
|
148
|
+
'meeting.meetingTopic': '会议主题',
|
|
149
149
|
'meeting.meetingDetail': '会议详情',
|
|
150
150
|
'meeting.meetingEtherpad': '会议纪要',
|
|
151
151
|
'meeting.meetingReplay': '智能回放',
|
|
@@ -165,6 +165,8 @@ export default {
|
|
|
165
165
|
'common.more': '更多',
|
|
166
166
|
'cookie.desc': '我们使用cookie来确保您的高速浏览体验。继续浏览本站,即表示您同意我们使用cookie。',
|
|
167
167
|
'cookie.about': '查看详情',
|
|
168
|
+
'cookie.acceptAll': '全部接受',
|
|
169
|
+
'cookie.saveSetting': '保存设置',
|
|
168
170
|
'meeting.create': '创建',
|
|
169
171
|
'meeting.createMeeting': '创建会议',
|
|
170
172
|
'meeting.createActivity': '创建活动',
|
package/src/index.ts
CHANGED
|
@@ -1,47 +1,18 @@
|
|
|
1
1
|
// OpenDesignPlus Components 库入口文件
|
|
2
2
|
// 此文件由 scripts/generate-components-index.js 自动生成
|
|
3
|
-
|
|
4
|
-
import OCookieNotice from './components/OCookieNotice.vue';
|
|
5
|
-
import OFooter from './components/OFooter.vue';
|
|
6
|
-
import OHeaderSearch from './components/OHeaderSearch.vue';
|
|
7
|
-
import OHeaderUser from './components/OHeaderUser.vue';
|
|
8
|
-
import OLanguageSwitcher from './components/OLanguageSwitcher.vue';
|
|
9
|
-
import OPlusConfigProvider from './components/OPlusConfigProvider.vue';
|
|
10
|
-
import OSection from './components/OSection.vue';
|
|
11
|
-
import OSourceCode from './components/OSourceCode.vue';
|
|
12
|
-
import OThemeSwitcher from './components/OThemeSwitcher.vue';
|
|
13
|
-
|
|
14
|
-
// 导出组件
|
|
15
|
-
const components = {
|
|
16
|
-
OCookieNotice,
|
|
17
|
-
OFooter,
|
|
18
|
-
OHeaderSearch,
|
|
19
|
-
OHeaderUser,
|
|
20
|
-
OLanguageSwitcher,
|
|
21
|
-
OPlusConfigProvider,
|
|
22
|
-
OSection,
|
|
23
|
-
OSourceCode,
|
|
24
|
-
OThemeSwitcher
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
// 导出单个组件
|
|
28
|
-
export { OCookieNotice, OFooter, OHeaderSearch, OHeaderUser, OLanguageSwitcher, OPlusConfigProvider, OSection, OSourceCode, OThemeSwitcher };
|
|
29
|
-
|
|
30
|
-
// 重新导出子目录中的组件
|
|
31
3
|
export * from './components/activity';
|
|
32
4
|
export * from './components/banner';
|
|
5
|
+
export * from './components/config-provider';
|
|
6
|
+
export * from './components/cookie-notice';
|
|
33
7
|
export * from './components/element-plus';
|
|
34
8
|
export * from './components/events';
|
|
9
|
+
export * from './components/footer';
|
|
35
10
|
export * from './components/header';
|
|
11
|
+
export * from './components/header-language-switcher';
|
|
12
|
+
export * from './components/header-search';
|
|
13
|
+
export * from './components/header-source-code';
|
|
14
|
+
export * from './components/header-theme';
|
|
15
|
+
export * from './components/header-user';
|
|
36
16
|
export * from './components/meeting';
|
|
37
17
|
export * from './components/search';
|
|
38
|
-
|
|
39
|
-
// 默认导出(用于Vue插件安装)
|
|
40
|
-
export default {
|
|
41
|
-
install: (app: any) => {
|
|
42
|
-
// 注册所有组件
|
|
43
|
-
Object.entries(components).forEach(([name, component]) => {
|
|
44
|
-
app.component(name, component);
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
};
|
|
18
|
+
export * from './components/section';
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
type __VLS_Props = {
|
|
2
|
-
visible?: boolean;
|
|
3
|
-
community: string;
|
|
4
|
-
detailUrl: string;
|
|
5
|
-
wrapper?: string | HTMLElement;
|
|
6
|
-
cookieDomain: string;
|
|
7
|
-
};
|
|
8
|
-
declare const _default: import('../../vue/dist/vue.esm-bundler.js').DefineComponent<__VLS_Props, {
|
|
9
|
-
check(): void;
|
|
10
|
-
}, {}, {}, {}, import('../../vue/dist/vue.esm-bundler.js').ComponentOptionsMixin, import('../../vue/dist/vue.esm-bundler.js').ComponentOptionsMixin, {} & {
|
|
11
|
-
"update:visible": (value: boolean) => any;
|
|
12
|
-
}, string, import('../../vue/dist/vue.esm-bundler.js').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
13
|
-
"onUpdate:visible"?: ((value: boolean) => any) | undefined;
|
|
14
|
-
}>, {}, {}, {}, {}, string, import('../../vue/dist/vue.esm-bundler.js').ComponentProvideOptions, false, {
|
|
15
|
-
cookieNoticeRef: HTMLDivElement;
|
|
16
|
-
}, any>;
|
|
17
|
-
export default _default;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export interface OPlusConfigProviderPropsT {
|
|
2
|
-
locale: 'zh' | 'en';
|
|
3
|
-
theme: 'light' | 'dark';
|
|
4
|
-
}
|
|
5
|
-
declare function __VLS_template(): {
|
|
6
|
-
attrs: Partial<{}>;
|
|
7
|
-
slots: {
|
|
8
|
-
default?(_: {}): any;
|
|
9
|
-
};
|
|
10
|
-
refs: {};
|
|
11
|
-
rootEl: any;
|
|
12
|
-
};
|
|
13
|
-
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
14
|
-
declare const __VLS_component: import('../../vue/dist/vue.esm-bundler.js').DefineComponent<OPlusConfigProviderPropsT, {}, {}, {}, {}, import('../../vue/dist/vue.esm-bundler.js').ComponentOptionsMixin, import('../../vue/dist/vue.esm-bundler.js').ComponentOptionsMixin, {}, string, import('../../vue/dist/vue.esm-bundler.js').PublicProps, Readonly<OPlusConfigProviderPropsT> & Readonly<{}>, {
|
|
15
|
-
theme: "light" | "dark";
|
|
16
|
-
}, {}, {}, {}, string, import('../../vue/dist/vue.esm-bundler.js').ComponentProvideOptions, false, {}, any>;
|
|
17
|
-
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
18
|
-
export default _default;
|
|
19
|
-
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
20
|
-
new (): {
|
|
21
|
-
$slots: S;
|
|
22
|
-
};
|
|
23
|
-
};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
interface CodeItemT {
|
|
2
|
-
label: string;
|
|
3
|
-
href: string;
|
|
4
|
-
icon?: string;
|
|
5
|
-
target?: string;
|
|
6
|
-
}
|
|
7
|
-
interface CodePropsT {
|
|
8
|
-
title?: string;
|
|
9
|
-
options?: CodeItemT[];
|
|
10
|
-
href?: string;
|
|
11
|
-
target?: string;
|
|
12
|
-
icon?: string;
|
|
13
|
-
justify?: string;
|
|
14
|
-
}
|
|
15
|
-
declare const _default: import('../../vue/dist/vue.esm-bundler.js').DefineComponent<CodePropsT, {}, {}, {}, {}, import('../../vue/dist/vue.esm-bundler.js').ComponentOptionsMixin, import('../../vue/dist/vue.esm-bundler.js').ComponentOptionsMixin, {}, string, import('../../vue/dist/vue.esm-bundler.js').PublicProps, Readonly<CodePropsT> & Readonly<{}>, {
|
|
16
|
-
justify: string;
|
|
17
|
-
}, {}, {}, {}, string, import('../../vue/dist/vue.esm-bundler.js').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
18
|
-
export default _default;
|