@opendesign-plus-test/components 0.0.1-rc.28 → 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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opendesign-plus-test/components",
3
- "version": "0.0.1-rc.28",
3
+ "version": "0.0.1-rc.29",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -168,7 +168,7 @@ const cancel = () => {
168
168
  };
169
169
 
170
170
  const confirmCancel = async () => {
171
- if (!props.deleteActivityRequest || !props.cancelActivityRequest) {
171
+ if (props.deleteActivityRequest && props.cancelActivityRequest) {
172
172
  try {
173
173
  loading.value = true;
174
174
  if (cancelStatus.value === 1) {
@@ -181,7 +181,8 @@ const confirmCancel = async () => {
181
181
  message.success({
182
182
  content: `“${ currentRow.value?.title }”活动${ cancelText.value }成功`,
183
183
  });
184
- } catch {
184
+ } catch (err) {
185
+ console.log(err);
185
186
  loading.value = false;
186
187
  cancelVisible.value = false;
187
188
  message.danger({
@@ -1369,10 +1369,6 @@ const deleteActions = computed<DialogActionT[]>(() => {
1369
1369
  --link-color-active: var(--o-color-primary3);
1370
1370
  }
1371
1371
 
1372
- .o-link + .o-link {
1373
- margin-left: var(--o-gap-section-6);
1374
- }
1375
-
1376
1372
  .o-icon {
1377
1373
  font-size: 16px;
1378
1374
  }
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import { computed, nextTick, onMounted, ref, watch } from 'vue';
3
3
  import {
4
- isClient, OButton,
4
+ isClient,
5
5
  OIcon,
6
6
  OIconChevronLeft,
7
7
  OIconChevronRight,
@@ -12,41 +12,34 @@ import {
12
12
  OTabPane,
13
13
  } from '@opensig/opendesign';
14
14
  import dayjs from 'dayjs';
15
- import { ElCalendar, ElConfigProvider } from 'element-plus';
15
+ import { ElCalendar } from 'element-plus';
16
16
  import OMeetingCalendarList from './components/OMeetingCalendarList.vue';
17
- import elZh from 'element-plus/es/locale/lang/zh-cn';
18
- import elEn from 'element-plus/es/locale/lang/en';
19
17
  import IconEvent from '~icons/meeting/icon-event.svg';
20
18
  import IconSummit from '~icons/meeting/icon-summit.svg';
21
19
  import IconMeeting from '~icons/meeting/icon-meet.svg';
22
20
  import { Locales, useI18n } from '@/i18n';
23
21
  import { MEETING_TABS } from './config';
24
- import { CalendarDataType, GroupItemT } from './types.ts';
22
+ import { CalendarDataType, GroupItemT, MeetingCalendarPropsT, MeetingGroupType } from './types.ts';
25
23
  import { formatDate, getConfig } from './utils.ts';
26
24
 
27
- const props = withDefaults(defineProps<{
28
- getDateListRequest: any;
29
- getMeetingListRequest: any;
30
- getSummitListRequest: any;
31
- getEventsListRequest: any;
32
- hiddenEvents?: boolean;
33
- hiddenSummit?: boolean;
34
- }>(), {
25
+ const props = withDefaults(defineProps<MeetingCalendarPropsT>(), {
35
26
  getSummitListRequest: async () => [],
36
27
  getEventsListRequest: async () => [],
37
28
  hiddenEvents: false,
38
29
  hiddenSummit: false,
30
+ groupType: MeetingGroupType.SIG,
39
31
  });
40
32
 
41
33
  const { t, locale } = useI18n();
42
34
  const isEn = computed(() => locale.value === Locales.EN);
43
- const isZh = computed(() => locale.value === Locales.ZH);
44
35
 
45
36
  // -------------------- 获取存在会议的日期列表 --------------------
46
37
  const latestDay = ref<string>(''); // 截止当天最新的活动日期
47
38
  const dateList = ref([]);
48
39
  const summitData = ref([]);
40
+ const summitDates = ref([]);
49
41
  const eventsData = ref([]);
42
+ const eventsDates = ref([]);
50
43
  const allDates = ref<string[]>([]);
51
44
  const meetingData = ref([]);
52
45
  // 日历展示时间限制
@@ -106,9 +99,19 @@ const getActivityData = async (date) => {
106
99
 
107
100
  const getDateList = async (date) => {
108
101
  if (props.getDateListRequest) {
109
- dateList.value = await props.getDateListRequest(date);
110
- } else {
111
- dateList.value = [];
102
+ props.getDateListRequest(date).then(res => {
103
+ dateList.value = res;
104
+ });
105
+ }
106
+ if (props.getEventsDatesRequest) {
107
+ props.getEventsDatesRequest(date).then(res => {
108
+ eventsDates.value = res;
109
+ });
110
+ }
111
+ if (props.getSummitDatesRequest) {
112
+ props.getSummitDatesRequest(date).then(res => {
113
+ summitDates.value = res;
114
+ });
112
115
  }
113
116
  };
114
117
 
@@ -161,7 +164,7 @@ const getDateData = async (day?: string) => {
161
164
  getActivityData(date);
162
165
  getDateList(date);
163
166
 
164
- allDates.value = [...new Set([...dateList.value, ...summitData.value.map(v => v.dates), ...eventsData.value.map(v => v.dates)])]
167
+ allDates.value = [...new Set([...dateList.value, ...summitDates.value, ...eventsDates.value])]
165
168
  .flat()
166
169
  .sort((a: string, b: string) => dayjs(a).isAfter(dayjs(b)) ? 1 : -1);
167
170
  if (!day) {
@@ -263,6 +266,19 @@ const formatYearMonth = (date: string) => {
263
266
  return date;
264
267
  }
265
268
  };
269
+ // 根据类型校验日历日期是否可选
270
+ const checkSelectedDay = (type: CalendarDataType, date: string) => {
271
+ if (type === CalendarDataType.MEETING) {
272
+ return ([CalendarDataType.ALL, CalendarDataType.MEETING].includes(tabType.value) && dateList.value.includes(date));
273
+ }
274
+ if (type === CalendarDataType.SUMMIT) {
275
+ return ([CalendarDataType.ALL, CalendarDataType.SUMMIT].includes(tabType.value) && summitDates.value.includes(date));
276
+ }
277
+ if (type === CalendarDataType.EVENTS) {
278
+ return ([CalendarDataType.ALL, CalendarDataType.EVENTS].includes(tabType.value) && eventsDates.value.includes(date));
279
+ }
280
+ return false;
281
+ };
266
282
  </script>
267
283
  <template>
268
284
  <div class="o-meeting-calendar">
@@ -279,7 +295,11 @@ const formatYearMonth = (date: string) => {
279
295
  <OIconChevronRight />
280
296
  </OIcon>
281
297
  </div>
282
- <OSelect v-model="sig" :placeholder="t('meeting.allSigs')" clearable>
298
+ <OSelect
299
+ v-model="sig"
300
+ :placeholder="groupType === MeetingGroupType.GROUP ? t('meeting.allGroups') : t('meeting.allSigs')"
301
+ clearable
302
+ >
283
303
  <OOption v-for="t in sigOptions" :value="t.group_name" :key="t.group_name">{{ t.group_name }}</OOption>
284
304
  </OSelect>
285
305
  </div>
@@ -303,7 +323,7 @@ const formatYearMonth = (date: string) => {
303
323
  zIndex: getConfig(CalendarDataType.MEETING, 'zIndex'),
304
324
  backgroundColor: getConfig(CalendarDataType.MEETING, 'color')
305
325
  }"
306
- v-if="(tabType === CalendarDataType.ALL || tabType === CalendarDataType.MEETING) && dateList.includes(data.day)">
326
+ v-if="checkSelectedDay(CalendarDataType.MEETING, data.day)">
307
327
  <IconMeeting />
308
328
  </OIcon>
309
329
  <OIcon
@@ -312,7 +332,7 @@ const formatYearMonth = (date: string) => {
312
332
  zIndex: getConfig(CalendarDataType.EVENTS, 'zIndex'),
313
333
  backgroundColor: getConfig(CalendarDataType.EVENTS, 'color')
314
334
  }"
315
- v-if="(tabType === CalendarDataType.ALL || tabType === CalendarDataType.EVENTS) && eventsData.some(v => v.dates.includes(data.day))">
335
+ v-if="checkSelectedDay(CalendarDataType.EVENTS, data.day)">
316
336
  <IconEvent />
317
337
  </OIcon>
318
338
  <OIcon
@@ -321,7 +341,7 @@ const formatYearMonth = (date: string) => {
321
341
  zIndex: getConfig(CalendarDataType.SUMMIT, 'zIndex'),
322
342
  backgroundColor: getConfig(CalendarDataType.SUMMIT, 'color')
323
343
  }"
324
- v-if="(tabType === CalendarDataType.ALL || tabType === CalendarDataType.SUMMIT) && summitData.some(v => v.dates.includes(data.day))">
344
+ v-if="checkSelectedDay(CalendarDataType.SUMMIT, data.day)">
325
345
  <IconSummit />
326
346
  </OIcon>
327
347
  </div>
@@ -354,7 +374,7 @@ const formatYearMonth = (date: string) => {
354
374
 
355
375
  <div>
356
376
  <OScroller class="meeting-list" show-type="hover" size="small">
357
- <OMeetingCalendarList :list="renderData">
377
+ <OMeetingCalendarList :list="renderData" :groupType="groupType">
358
378
  <template #empty>
359
379
  <slot name="empty"></slot>
360
380
  </template>
@@ -6,6 +6,7 @@ import {
6
6
  OForm,
7
7
  OFormItem,
8
8
  OIcon,
9
+ OIconTime,
9
10
  OInput,
10
11
  OOption,
11
12
  OPopover,
@@ -14,19 +15,18 @@ import {
14
15
  OSelect,
15
16
  OSwitch,
16
17
  OTextarea,
17
- OIconTime,
18
18
  useMessage,
19
19
  } from '@opensig/opendesign';
20
20
  import IconHelp from '~icons/meeting/icon-help.svg';
21
21
  import IconTip from '~icons/meeting/icon-tip.svg';
22
- import { MeetingFormPropsT, MeetingPostT, OptionItemT } from './types';
22
+ import { MeetingFormPropsT, MeetingGroupType, MeetingPostT, OptionItemT } from './types';
23
23
  import dayjs from 'dayjs';
24
24
  import { findLabelFromOptions, formatDateNumber, getDateNumber, getPlatformLabel } from './utils';
25
25
  import {
26
+ CYCLE_TYPE_OPTIONS0,
26
27
  EMAIL_REGEX,
27
28
  INTERVAL_DAY,
28
29
  INTERVAL_MONTH,
29
- CYCLE_TYPE_OPTIONS0,
30
30
  INTERVAL_WEEK,
31
31
  INTERVAL_WEEK_OPTIONS,
32
32
  } from './config';
@@ -40,8 +40,9 @@ const props = withDefaults(defineProps<MeetingFormPropsT>(), {
40
40
  isSub: false,
41
41
  isEdit: false,
42
42
  showBtns: true,
43
+ groupType: MeetingGroupType.SIG,
43
44
  });
44
- const message = useMessage();
45
+ const message = useMessage(null);
45
46
 
46
47
  const cycleTypeOptions = ref(CYCLE_TYPE_OPTIONS0);
47
48
 
@@ -72,161 +73,166 @@ const form = ref<MeetingPostT>(Object.assign({}, initForm) as unknown as Meeting
72
73
  const formRef = ref(null); // 表单实例
73
74
  const loading = ref(false); // 提交状态
74
75
  // 表单校验规则
75
- const rules = ref({
76
- topic: [
77
- { required: true, message: t('meeting.enterMeetingName') },
78
- {
79
- validator: (value: string) => {
80
- if (value.length > 128) {
81
- return {
82
- type: 'danger',
83
- message: t('meeting.meetingNameTooLong'),
84
- };
85
- }
86
- },
87
- },
88
- ],
89
- agenda: [
90
- {
91
- validator: (value: string) => {
92
- if (value.length > 4096) {
93
- return {
94
- type: 'danger',
95
- message: t('meeting.meetingAgendaTooLong'),
96
- };
97
- }
98
- },
99
- },
100
- ],
101
- group_name: [{ required: true, message: t('meeting.selectSig') }],
102
- etherpad: [{ required: true, message: t('meeting.enterEtherpad') }],
103
- date: [{ required: true, message: t('meeting.selectDate') }],
104
- time: [
105
- {
106
- validator: (value: string) => {
107
- const { is_cycle, cycle_type, cycle_interval, cycle_point, date, date_range } = form.value;
108
- if (is_cycle) {
109
- const msg = {
110
- type: 'danger',
111
- message: t('meeting.finishMeetingConfig'),
112
- };
113
- if (cycle_type === INTERVAL_DAY) {
114
- if (!cycle_interval) return msg;
115
- }
116
- if (cycle_type === INTERVAL_WEEK) {
117
- if (!cycle_interval || !cycle_point?.length) return msg;
118
- }
119
- if (cycle_type === INTERVAL_MONTH) {
120
- if (!cycle_interval || !cycle_point?.length) return msg;
76
+ const rules = computed(() => {
77
+ return {
78
+ topic: [
79
+ { required: true, message: t('meeting.enterMeetingName') },
80
+ {
81
+ validator: (value: string) => {
82
+ if (value.length > 128) {
83
+ return {
84
+ type: 'danger',
85
+ message: t('meeting.meetingNameTooLong'),
86
+ };
121
87
  }
122
- if (!date_range?.length) {
88
+ },
89
+ },
90
+ ],
91
+ agenda: [
92
+ {
93
+ validator: (value: string) => {
94
+ if (value.length > 4096) {
123
95
  return {
124
96
  type: 'danger',
125
- message: t('meeting.selectMeetingDate'),
97
+ message: t('meeting.meetingAgendaTooLong'),
126
98
  };
127
99
  }
128
- const NONE_MSG = t('meeting.invalidMeetingDuration');
129
- let start = date_range[0];
130
- const end = date_range[1];
131
- if (cycle_type === INTERVAL_WEEK) {
132
- const weeks = new Set();
133
- while (!dayjs(start).isAfter(dayjs(end))) {
134
- weeks.add(dayjs(start).day());
135
- start = dayjs(start).add(1, 'day');
100
+ },
101
+ },
102
+ ],
103
+ group_name: [{
104
+ required: true,
105
+ message: props.groupType === MeetingGroupType.GROUP ? t('meeting.selectGroup') : t('meeting.selectSig'),
106
+ }],
107
+ etherpad: [{ required: true, message: t('meeting.enterEtherpad') }],
108
+ date: [{ required: true, message: t('meeting.selectDate') }],
109
+ time: [
110
+ {
111
+ validator: (value: string) => {
112
+ const { is_cycle, cycle_type, cycle_interval, cycle_point, date, date_range } = form.value;
113
+ if (is_cycle) {
114
+ const msg = {
115
+ type: 'danger',
116
+ message: t('meeting.finishMeetingConfig'),
117
+ };
118
+ if (cycle_type === INTERVAL_DAY) {
119
+ if (!cycle_interval) return msg;
120
+ }
121
+ if (cycle_type === INTERVAL_WEEK) {
122
+ if (!cycle_interval || !cycle_point?.length) return msg;
136
123
  }
137
- if (cycle_point.every((point) => !weeks.has(point))) {
124
+ if (cycle_type === INTERVAL_MONTH) {
125
+ if (!cycle_interval || !cycle_point?.length) return msg;
126
+ }
127
+ if (!date_range?.length) {
138
128
  return {
139
129
  type: 'danger',
140
- message: NONE_MSG,
130
+ message: t('meeting.selectMeetingDate'),
141
131
  };
142
132
  }
143
- }
144
- if (cycle_type === INTERVAL_MONTH) {
145
- const days = new Set();
146
- while (!dayjs(start).isAfter(dayjs(end))) {
147
- days.add(dayjs(start).date());
148
- start = dayjs(start).add(1, 'day');
133
+ const NONE_MSG = t('meeting.invalidMeetingDuration');
134
+ let start = date_range[0];
135
+ const end = date_range[1];
136
+ if (cycle_type === INTERVAL_WEEK) {
137
+ const weeks = new Set();
138
+ while (!dayjs(start).isAfter(dayjs(end))) {
139
+ weeks.add(dayjs(start).day());
140
+ start = dayjs(start).add(1, 'day');
141
+ }
142
+ if (cycle_point.every((point) => !weeks.has(point))) {
143
+ return {
144
+ type: 'danger',
145
+ message: NONE_MSG,
146
+ };
147
+ }
149
148
  }
150
- if (cycle_point.every((point) => !days.has(point))) {
149
+ if (cycle_type === INTERVAL_MONTH) {
150
+ const days = new Set();
151
+ while (!dayjs(start).isAfter(dayjs(end))) {
152
+ days.add(dayjs(start).date());
153
+ start = dayjs(start).add(1, 'day');
154
+ }
155
+ if (cycle_point.every((point) => !days.has(point))) {
156
+ return {
157
+ type: 'danger',
158
+ message: NONE_MSG,
159
+ };
160
+ }
161
+ }
162
+ } else {
163
+ if (!date) {
151
164
  return {
152
165
  type: 'danger',
153
- message: NONE_MSG,
166
+ message: t('meeting.selectMeetingDate'),
154
167
  };
155
168
  }
156
169
  }
157
- } else {
158
- if (!date) {
159
- return {
160
- type: 'danger',
161
- message: t('meeting.selectMeetingDate'),
162
- };
163
- }
164
- }
165
- if (!value?.trim()?.length) {
166
- return {
167
- type: 'danger',
168
- message: t('meeting.selectMeetingTime'),
169
- };
170
- }
171
- const arr = value.split('-').map((v) => v.split(':').map(Number));
172
- if (arr[0][0] > arr[1][0] || (arr[0][0] === arr[1][0] && arr[0][1] >= arr[1][1])) {
173
- return {
174
- type: 'danger',
175
- message: t('meeting.endTimeAfterStartTime'),
176
- };
177
- }
178
- if (!form.value.is_cycle && form.value.date && form.value.start) {
179
- const start = dayjs(`${ form.value.date } ${ form.value.start }`);
180
- if (new Date(start).getTime() < new Date().getTime()) {
170
+ if (!value?.trim()?.length) {
181
171
  return {
182
172
  type: 'danger',
183
- message: t('meeting.startTimeBeforeEndTime'),
173
+ message: t('meeting.selectMeetingTime'),
184
174
  };
185
175
  }
186
- }
187
- },
188
- triggers: ['blur', 'change'],
189
- },
190
- ],
191
- platform: [{ required: true, message: t('meeting.selectPlatform') }],
192
- email_list: [
193
- {
194
- validator: (value: string) => {
195
- if (props.isEdit) {
196
- return {};
197
- }
198
- const str = value.replaceAll(' ', '') || '';
199
- if (str.length) {
200
- if (str.length > 1020) {
176
+ const arr = value.split('-').map((v) => v.split(':').map(Number));
177
+ if (arr[0][0] > arr[1][0] || (arr[0][0] === arr[1][0] && arr[0][1] >= arr[1][1])) {
201
178
  return {
202
179
  type: 'danger',
203
- message: t('meeting.emailTooLong'),
180
+ message: t('meeting.endTimeAfterStartTime'),
204
181
  };
205
182
  }
206
- const list = str.split(';') || [];
207
- if (list.some((v) => !EMAIL_REGEX.test(v))) {
208
- return {
209
- type: 'danger',
210
- message: t('meeting.emailInvalid'),
211
- };
183
+ if (!form.value.is_cycle && form.value.date && form.value.start) {
184
+ const start = dayjs(`${ form.value.date } ${ form.value.start }`);
185
+ if (new Date(start).getTime() < new Date().getTime()) {
186
+ return {
187
+ type: 'danger',
188
+ message: t('meeting.startTimeBeforeEndTime'),
189
+ };
190
+ }
212
191
  }
213
- if (list.some((v) => v.length > 50)) {
214
- return {
215
- type: 'danger',
216
- message: t('meeting.singleEmailTooLong'),
217
- };
192
+ },
193
+ triggers: ['blur', 'change'],
194
+ },
195
+ ],
196
+ platform: [{ required: true, message: t('meeting.selectPlatform') }],
197
+ email_list: [
198
+ {
199
+ validator: (value: string) => {
200
+ if (props.isEdit) {
201
+ return {};
218
202
  }
219
- if (list.length > 20) {
220
- return {
221
- type: 'danger',
222
- message: t('meeting.emailCountTooLong'),
223
- };
203
+ const str = value.replaceAll(' ', '') || '';
204
+ if (str.length) {
205
+ if (str.length > 1020) {
206
+ return {
207
+ type: 'danger',
208
+ message: t('meeting.emailTooLong'),
209
+ };
210
+ }
211
+ const list = str.split(';') || [];
212
+ if (list.some((v) => !EMAIL_REGEX.test(v))) {
213
+ return {
214
+ type: 'danger',
215
+ message: t('meeting.emailInvalid'),
216
+ };
217
+ }
218
+ if (list.some((v) => v.length > 50)) {
219
+ return {
220
+ type: 'danger',
221
+ message: t('meeting.singleEmailTooLong'),
222
+ };
223
+ }
224
+ if (list.length > 20) {
225
+ return {
226
+ type: 'danger',
227
+ message: t('meeting.emailCountTooLong'),
228
+ };
229
+ }
224
230
  }
225
- }
231
+ },
232
+ triggers: ['blur', 'change'],
226
233
  },
227
- triggers: ['blur', 'change'],
228
- },
229
- ],
234
+ ],
235
+ };
230
236
  });
231
237
 
232
238
  const sigOptions = ref<OptionItemT[]>([]); // sig组选项列表
@@ -459,10 +465,13 @@ defineExpose({
459
465
  style="width: 100%"
460
466
  v-model="form.topic" />
461
467
  </OFormItem>
462
- <OFormItem :rules="rules.group_name" :label="t('meeting.meetingSig')" field="group_name">
468
+ <OFormItem
469
+ :rules="rules.group_name"
470
+ :label="groupType === MeetingGroupType.GROUP ? t('meeting.meetingGroup'):t('meeting.meetingSig')"
471
+ field="group_name">
463
472
  <OSelect
464
473
  :disabled="isEdit"
465
- :placeholder="t('meeting.selectSig')"
474
+ :placeholder="groupType === MeetingGroupType.GROUP ? t('meeting.selectGroup') : t('meeting.selectSig')"
466
475
  size="large"
467
476
  style="width: 100%"
468
477
  v-model="form.group_name"
@@ -20,7 +20,7 @@ import {
20
20
  import { ElCalendar } from 'element-plus';
21
21
  import { computed, nextTick, onMounted, ref, onUnmounted, watch } from 'vue';
22
22
  import OMeetingDetail from './components/OMeetingDetail.vue';
23
- import type { MeetingItemT, PageParamsT } from './types.ts';
23
+ import { MeetingGroupType, MeetingItemT, PageParamsT } from './types.ts';
24
24
  import dayjs from 'dayjs';
25
25
  import IconMeeting from '~icons/meeting/icon-meet.svg';
26
26
  import { INTERVAL_DAY, INTERVAL_MONTH, INTERVAL_WEEK, WEEKDAY } from './config.ts';
@@ -43,11 +43,14 @@ const reloadAll = ref(false); // 是否需要清空数据
43
43
  const { t, locale } = useI18n();
44
44
  const isEn = computed(() => locale.value === Locales.EN);
45
45
 
46
- const props = defineProps<{
46
+ const props = withDefaults(defineProps<{
47
47
  cancelSubMeetingRequest: any;
48
48
  deleteMeetingRequest: any;
49
- getMeetingListRequest: any
50
- }>();
49
+ getMeetingListRequest: any;
50
+ groupType: MeetingGroupType
51
+ }>(), {
52
+ groupType: MeetingGroupType.SIG,
53
+ });
51
54
 
52
55
  const dialogLoading = ref(false); // 弹窗按钮状态
53
56
  const { isPhone } = useScreen();
@@ -648,7 +651,10 @@ const cancelActions = computed<DialogActionT[]>(() => {
648
651
  <div class="meeting-info">
649
652
  <span>{{ row.dateRange }}</span>
650
653
  <ODivider direction="v" />
651
- <span>{{ t('meeting.sigs') }}: {{ row.group_name }}</span>
654
+ <span>
655
+ {{ groupType === MeetingGroupType.GROUP ? t('meeting.groups') : t('meeting.sigs')
656
+ }}: {{ row.group_name }}
657
+ </span>
652
658
  </div>
653
659
  </div>
654
660
  </div>
@@ -1365,11 +1371,6 @@ const cancelActions = computed<DialogActionT[]>(() => {
1365
1371
  font-size: 14px;
1366
1372
  line-height: 21px;
1367
1373
  }
1368
-
1369
- .o-link + .o-link {
1370
- margin-left: var(--o-gap-section-6);
1371
- }
1372
-
1373
1374
  .o-icon {
1374
1375
  font-size: 16px;
1375
1376
  }
@@ -4,7 +4,7 @@ import OMeetingDetail from './OMeetingDetail.vue';
4
4
  import { computed, nextTick, ref, watch } from 'vue';
5
5
  import IconMeetinging from '~icons/meeting/icon-meet.svg';
6
6
  import IconCopy from '~icons/meeting/icon-copy.svg';
7
- import { CalendarDataType, MeetingItemT } from '../types.ts';
7
+ import { CalendarDataType, MeetingGroupType, MeetingItemT } from '../types.ts';
8
8
 
9
9
  import IconAll from '~icons/meeting/icon-all.svg';
10
10
  import IconEvent from '~icons/meeting/icon-event.svg';
@@ -16,7 +16,10 @@ import { CYCLE_TYPE_OPTIONS, INTERVAL_DAY, INTERVAL_MONTH, INTERVAL_WEEK } from
16
16
  import { formatDate, getConfig, getPointStr } from '../utils.ts';
17
17
  import { useI18n } from '@/i18n';
18
18
 
19
- const props = withDefaults(defineProps<{ list: MeetingItemT[] }>(), {
19
+ const props = withDefaults(defineProps<{
20
+ list: MeetingItemT[];
21
+ groupType: MeetingGroupType;
22
+ }>(), {
20
23
  list: () => [],
21
24
  });
22
25
  const { t, locale } = useI18n();
@@ -31,14 +34,16 @@ const copyInfo = async (idx) => {
31
34
  };
32
35
 
33
36
  const collapseNames = ref([]);
34
- const i18n = {
35
- SIG_GROUP: `${ t('meeting.sigs') }: `,
36
- NEW_DATE: t('meeting.latestMeeting'),
37
- EMPTY_TEXT: t('meeting.meetingEmptyText'),
38
- LEARN_MORE: t('common.seeMore'),
39
- JOIN_MEETING: t('meeting.joinMeeting'),
40
- SIGN: t('meeting.sign'),
41
- };
37
+ const i18n = computed(() => {
38
+ return {
39
+ SIG_GROUP: `${ props.groupType === MeetingGroupType.GROUP ? t('meeting.groups') : t('meeting.sigs') }: `,
40
+ NEW_DATE: t('meeting.latestMeeting'),
41
+ EMPTY_TEXT: t('meeting.meetingEmptyText'),
42
+ LEARN_MORE: t('common.seeMore'),
43
+ JOIN_MEETING: t('meeting.joinMeeting'),
44
+ SIGN: t('meeting.sign'),
45
+ };
46
+ });
42
47
 
43
48
  const getCurrentIcon = (item) => {
44
49
  if (item.type === 'summit') return IconSummit;
@@ -38,6 +38,22 @@ export interface OptionItemT {
38
38
 
39
39
  export type PlatformT = 'welink' | 'tencent';
40
40
 
41
+ export enum MeetingGroupType {
42
+ SIG = 'sig',
43
+ GROUP = 'group',
44
+ }
45
+
46
+ export interface MeetingCalendarPropsT {
47
+ getDateListRequest: any;
48
+ getMeetingListRequest: any;
49
+ getSummitListRequest: any;
50
+ getSummitDatesRequest: any;
51
+ getEventsListRequest: any;
52
+ getEventsDatesRequest: any;
53
+ hiddenEvents?: boolean;
54
+ hiddenSummit?: boolean;
55
+ groupType: MeetingGroupType;
56
+ }
41
57
  // 会议新增、修改
42
58
  export interface MeetingPostT {
43
59
  id?: number; // 会议id
@@ -75,7 +91,8 @@ export interface MeetingFormPropsT {
75
91
  editSubMeetingRequest: any;
76
92
  getPlatformsRequest: any;
77
93
  getGroupsRequest: any;
78
- showBtns?: boolean
94
+ showBtns?: boolean;
95
+ groupType: MeetingGroupType;
79
96
  }
80
97
 
81
98
  // 会议详情