@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.
@@ -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 list = ref<(MeetingItemT | MeetingEventsItemT)[]>([]); // 某天的会议列表
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
- list.value = res.map((v: MeetingItemT) => {
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 = eventsDates.value;
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" v-if="!lePadV">
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="dayjs(date).format('YYYY/MM/DD')"
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: 12px 16px 0;
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: 16px;
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: 12px 32px 0;
361
+ padding: var(--o-gap-3) var(--o-gap-6) 0;
344
362
  @include text1;
345
363
  @include respond('<=pad') {
346
- padding: 12px 16px 0;
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: 12px;
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: 12px;
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: 400px;
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 { isClient, OCollapse, OCollapseItem, ODivider, OIcon, OLink, OTag, useMessage } from '@opensig/opendesign';
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
- <OLink
202
- :hover-underline="false"
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
- </OLink>
215
- <OLink
216
- :hover-underline="false"
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
- </OLink>
229
- <OLink
230
- :hover-underline="false"
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
- </OLink>
243
- <OLink
244
- :hover-underline="false"
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
- </OLink>
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-4);
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-2);
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) - 4px);
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 12px" wrap="wrap">
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) var(--o-gap-6);
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
- @include tip1;
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: 20px;
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': 'AI Recording',
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': '会议AI录制',
118
+ 'meeting.meetingRecord': '会议录制',
119
119
  'meeting.meetingRecordDesc1': '1、会议AI录制已开启,开启会议AI听即开启云录制,会后可回放会议录制并生成语音文字和AI纪要。',
120
120
  'meeting.meetingRecordDesc2': '2、AI生成的会议回放链接将在 1 个工作日内自动生成并上传。',
121
121
  'meeting.day0': '天',