@opendesign-plus-test/components 0.0.1-rc.82 → 0.0.1-rc.84

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.
Files changed (210) hide show
  1. package/dist/chunk-OElCookieNotice.cjs.js +1 -1
  2. package/dist/chunk-OElCookieNotice.es.js +10 -10
  3. package/dist/components/config-provider/OPlusConfigProvider.vue.d.ts +2 -2
  4. package/dist/components/config-provider/index.d.ts +3 -3
  5. package/dist/components/meeting/composables/useMeetingConfig.d.ts +1 -1
  6. package/dist/components.cjs.js +33 -33
  7. package/dist/components.css +1 -1
  8. package/dist/components.es.js +1511 -1504
  9. package/dist/treeshaking/components/banner/OBanner.css +37 -37
  10. package/dist/treeshaking/components/banner/OBanner.vue.mjs +1 -1
  11. package/dist/treeshaking/components/banner/OBanner.vue2.mjs +2 -1
  12. package/dist/treeshaking/components/banner/OBanner2.css +10 -10
  13. package/dist/treeshaking/components/config-provider/OPlusConfigProvider.vue.d.ts +2 -2
  14. package/dist/treeshaking/components/config-provider/index.d.ts +3 -3
  15. package/dist/treeshaking/components/cookie-notice/OCookieNotice.vue.mjs +1 -1
  16. package/dist/treeshaking/components/cookie-notice/OCookieNotice.vue2.mjs +1 -1
  17. package/dist/treeshaking/components/cookie-notice/OCookieNotice2.css +62 -62
  18. package/dist/treeshaking/components/events/OEventsApply.vue.mjs +1 -1
  19. package/dist/treeshaking/components/header/OHeader.css +12 -12
  20. package/dist/treeshaking/components/header/OHeader.vue.mjs +1 -1
  21. package/dist/treeshaking/components/header/OHeader.vue2.mjs +1 -1
  22. package/dist/treeshaking/components/header/components/HeaderContent.css +235 -235
  23. package/dist/treeshaking/components/header/components/HeaderContent.vue.mjs +1 -1
  24. package/dist/treeshaking/components/header/components/HeaderContent.vue2.mjs +3 -2
  25. package/dist/treeshaking/components/header/components/HeaderNav.css +26 -26
  26. package/dist/treeshaking/components/header/components/HeaderNav.vue.mjs +1 -1
  27. package/dist/treeshaking/components/header/components/HeaderNav.vue2.mjs +1 -1
  28. package/dist/treeshaking/components/meeting/composables/useMeetingConfig.d.ts +1 -1
  29. package/dist/treeshaking/i18n/index.mjs +1 -1
  30. package/dist/treeshaking/shared/theme.mjs +13 -0
  31. package/package.json +4 -1
  32. package/docs/design.md +0 -27
  33. package/docs/design_banner.md +0 -41
  34. package/docs/design_section.md +0 -27
  35. package/plugins/css-inject-plugin.ts +0 -37
  36. package/scripts/build.js +0 -17
  37. package/scripts/generate-components-index.js +0 -62
  38. package/src/assets/events/svg-icons/icon-checked.svg +0 -3
  39. package/src/assets/events/svg-icons/icon-competition.svg +0 -7
  40. package/src/assets/events/svg-icons/icon-events.svg +0 -4
  41. package/src/assets/events/svg-icons/icon-release.svg +0 -4
  42. package/src/assets/events/svg-icons/icon-summit.svg +0 -4
  43. package/src/assets/meeting/empty.png +0 -0
  44. package/src/assets/meeting/svg-icons/icon-all.svg +0 -4
  45. package/src/assets/meeting/svg-icons/icon-backward.svg +0 -4
  46. package/src/assets/meeting/svg-icons/icon-calendar.svg +0 -3
  47. package/src/assets/meeting/svg-icons/icon-cancel.svg +0 -4
  48. package/src/assets/meeting/svg-icons/icon-captions.svg +0 -4
  49. package/src/assets/meeting/svg-icons/icon-close-captions.svg +0 -6
  50. package/src/assets/meeting/svg-icons/icon-close-fullscreen.svg +0 -6
  51. package/src/assets/meeting/svg-icons/icon-copy.svg +0 -4
  52. package/src/assets/meeting/svg-icons/icon-create.svg +0 -5
  53. package/src/assets/meeting/svg-icons/icon-delete.svg +0 -7
  54. package/src/assets/meeting/svg-icons/icon-empty.svg +0 -65
  55. package/src/assets/meeting/svg-icons/icon-event.svg +0 -4
  56. package/src/assets/meeting/svg-icons/icon-export.svg +0 -3
  57. package/src/assets/meeting/svg-icons/icon-forward.svg +0 -4
  58. package/src/assets/meeting/svg-icons/icon-fullscreen.svg +0 -6
  59. package/src/assets/meeting/svg-icons/icon-help.svg +0 -3
  60. package/src/assets/meeting/svg-icons/icon-important.svg +0 -4
  61. package/src/assets/meeting/svg-icons/icon-info.svg +0 -3
  62. package/src/assets/meeting/svg-icons/icon-meet.svg +0 -4
  63. package/src/assets/meeting/svg-icons/icon-meeting-message.svg +0 -5
  64. package/src/assets/meeting/svg-icons/icon-meeting.svg +0 -4
  65. package/src/assets/meeting/svg-icons/icon-play.svg +0 -5
  66. package/src/assets/meeting/svg-icons/icon-playing-tip.svg +0 -7
  67. package/src/assets/meeting/svg-icons/icon-playing.svg +0 -5
  68. package/src/assets/meeting/svg-icons/icon-question.svg +0 -4
  69. package/src/assets/meeting/svg-icons/icon-sound.svg +0 -5
  70. package/src/assets/meeting/svg-icons/icon-speaker.svg +0 -3
  71. package/src/assets/meeting/svg-icons/icon-summit.svg +0 -4
  72. package/src/assets/meeting/svg-icons/icon-telligent.svg +0 -3
  73. package/src/assets/meeting/svg-icons/icon-tip.svg +0 -3
  74. package/src/assets/meeting/svg-icons/icon-todo.svg +0 -4
  75. package/src/assets/meeting/transparent.png +0 -0
  76. package/src/assets/styles/element-plus.scss +0 -283
  77. package/src/assets/svg-icons/icon-arrow-left.svg +0 -3
  78. package/src/assets/svg-icons/icon-avatar-line.svg +0 -3
  79. package/src/assets/svg-icons/icon-caret-left.svg +0 -3
  80. package/src/assets/svg-icons/icon-caret-right.svg +0 -3
  81. package/src/assets/svg-icons/icon-chevron-down.svg +0 -3
  82. package/src/assets/svg-icons/icon-chevron-right.svg +0 -3
  83. package/src/assets/svg-icons/icon-chevron-up.svg +0 -3
  84. package/src/assets/svg-icons/icon-close.svg +0 -3
  85. package/src/assets/svg-icons/icon-delete-hover.svg +0 -4
  86. package/src/assets/svg-icons/icon-delete.svg +0 -7
  87. package/src/assets/svg-icons/icon-filter.svg +0 -3
  88. package/src/assets/svg-icons/icon-header-back.svg +0 -3
  89. package/src/assets/svg-icons/icon-header-delete.svg +0 -3
  90. package/src/assets/svg-icons/icon-header-menu.svg +0 -3
  91. package/src/assets/svg-icons/icon-header-person.svg +0 -3
  92. package/src/assets/svg-icons/icon-header-search.svg +0 -4
  93. package/src/assets/svg-icons/icon-image-close.svg +0 -4
  94. package/src/assets/svg-icons/icon-image-upload.svg +0 -3
  95. package/src/assets/svg-icons/icon-image-zoomin.svg +0 -3
  96. package/src/assets/svg-icons/icon-loading.svg +0 -4
  97. package/src/assets/svg-icons/icon-locale.svg +0 -3
  98. package/src/assets/svg-icons/icon-log-off.svg +0 -3
  99. package/src/assets/svg-icons/icon-message.svg +0 -3
  100. package/src/assets/svg-icons/icon-moon.svg +0 -3
  101. package/src/assets/svg-icons/icon-outlink.svg +0 -3
  102. package/src/assets/svg-icons/icon-overview.svg +0 -3
  103. package/src/assets/svg-icons/icon-refresh.svg +0 -3
  104. package/src/assets/svg-icons/icon-search.svg +0 -3
  105. package/src/assets/svg-icons/icon-setting.svg +0 -3
  106. package/src/assets/svg-icons/icon-sun.svg +0 -3
  107. package/src/assets/svg-icons/icon-tips.svg +0 -3
  108. package/src/components/activity/OActivityApproval.vue +0 -868
  109. package/src/components/activity/OActivityForm.vue +0 -548
  110. package/src/components/activity/OActivityMyCalendar.vue +0 -1540
  111. package/src/components/activity/composables/useActivityConfig.ts +0 -141
  112. package/src/components/activity/config.ts +0 -1
  113. package/src/components/activity/index.ts +0 -24
  114. package/src/components/activity/types.ts +0 -95
  115. package/src/components/banner/OBanner.vue +0 -288
  116. package/src/components/banner/OBannerContent.vue +0 -175
  117. package/src/components/banner/index.ts +0 -18
  118. package/src/components/banner/types.ts +0 -39
  119. package/src/components/common/AppAvatar.vue +0 -83
  120. package/src/components/common/ClientOnly.vue +0 -13
  121. package/src/components/common/ContentWrapper.vue +0 -82
  122. package/src/components/common/MoreText.vue +0 -124
  123. package/src/components/common/ThFilter.vue +0 -330
  124. package/src/components/config-provider/OPlusConfigProvider.vue +0 -32
  125. package/src/components/config-provider/index.ts +0 -10
  126. package/src/components/cookie-notice/OCookieNotice.vue +0 -575
  127. package/src/components/cookie-notice/index.ts +0 -10
  128. package/src/components/element-plus/OElCookieNotice.vue +0 -603
  129. package/src/components/element-plus/index.ts +0 -3
  130. package/src/components/events/OEventsApply.vue +0 -509
  131. package/src/components/events/OEventsCalendar.vue +0 -600
  132. package/src/components/events/OEventsList.vue +0 -461
  133. package/src/components/events/config.ts +0 -35
  134. package/src/components/events/index.ts +0 -24
  135. package/src/components/events/types.ts +0 -84
  136. package/src/components/events/utils.ts +0 -9
  137. package/src/components/footer/OFooter.vue +0 -577
  138. package/src/components/footer/index.ts +0 -10
  139. package/src/components/header/OHeader.vue +0 -157
  140. package/src/components/header/OHeaderMobile.vue +0 -184
  141. package/src/components/header/components/HeaderContent.vue +0 -1125
  142. package/src/components/header/components/HeaderNav.vue +0 -278
  143. package/src/components/header/components/HeaderNavMobile.vue +0 -380
  144. package/src/components/header/index.ts +0 -18
  145. package/src/components/header/types.ts +0 -96
  146. package/src/components/header-language-switcher/OHeaderLanguageSwitcher.vue +0 -249
  147. package/src/components/header-language-switcher/index.ts +0 -10
  148. package/src/components/header-search/OHeaderSearch.vue +0 -628
  149. package/src/components/header-search/index.ts +0 -10
  150. package/src/components/header-source-code/OHeaderSourceCode.vue +0 -151
  151. package/src/components/header-source-code/index.ts +0 -10
  152. package/src/components/header-theme/OHeaderTheme.vue +0 -132
  153. package/src/components/header-theme/index.ts +0 -10
  154. package/src/components/header-user/OHeaderUser.vue +0 -249
  155. package/src/components/header-user/index.ts +0 -10
  156. package/src/components/meeting/OMeetingCalendar.vue +0 -943
  157. package/src/components/meeting/OMeetingForm.vue +0 -1131
  158. package/src/components/meeting/OMeetingMyCalendar.vue +0 -1628
  159. package/src/components/meeting/OMeetingPlayback.vue +0 -469
  160. package/src/components/meeting/OMeetingSigCalendar.vue +0 -500
  161. package/src/components/meeting/components/OMeetingCalendarList.vue +0 -626
  162. package/src/components/meeting/components/OMeetingCalendarSelector.vue +0 -213
  163. package/src/components/meeting/components/OMeetingDetail.vue +0 -285
  164. package/src/components/meeting/components/OMeetingPlaybackSubtitles.vue +0 -615
  165. package/src/components/meeting/components/OMeetingPlaybackVideo.vue +0 -741
  166. package/src/components/meeting/components/OMeetingSigAside.vue +0 -205
  167. package/src/components/meeting/composables/useMeetingConfig.ts +0 -108
  168. package/src/components/meeting/config.ts +0 -48
  169. package/src/components/meeting/index.ts +0 -45
  170. package/src/components/meeting/types.ts +0 -270
  171. package/src/components/meeting/utils.ts +0 -70
  172. package/src/components/search/OSearchInput.vue +0 -526
  173. package/src/components/search/composables/useImageSearch.ts +0 -157
  174. package/src/components/search/composables/useKeywordHighlight.ts +0 -30
  175. package/src/components/search/composables/useSearchHistory.ts +0 -75
  176. package/src/components/search/index.ts +0 -23
  177. package/src/components/search/internal/HighlightText.vue +0 -37
  178. package/src/components/search/internal/SearchImageInput.vue +0 -498
  179. package/src/components/search/internal/SearchPanel.vue +0 -431
  180. package/src/components/search/types.ts +0 -25
  181. package/src/components/section/OSection.vue +0 -178
  182. package/src/components/section/index.ts +0 -10
  183. package/src/draft/Banner.vue +0 -265
  184. package/src/draft/ButtonCards.vue +0 -106
  185. package/src/draft/Feature.vue +0 -134
  186. package/src/draft/Footer.vue +0 -519
  187. package/src/draft/HorizontalAnchor.vue +0 -165
  188. package/src/draft/ItemSwiper.vue +0 -133
  189. package/src/draft/Logo.vue +0 -141
  190. package/src/draft/LogoCard.vue +0 -75
  191. package/src/draft/LogoV2.vue +0 -19
  192. package/src/draft/MainCard.vue +0 -38
  193. package/src/draft/MultiCard.vue +0 -95
  194. package/src/draft/MultiIconCard.vue +0 -74
  195. package/src/draft/OInfoCard.vue +0 -176
  196. package/src/draft/Process.vue +0 -81
  197. package/src/draft/Section.vue +0 -167
  198. package/src/draft/SingleTabCard.vue +0 -85
  199. package/src/draft/SliderCard.vue +0 -111
  200. package/src/env.d.ts +0 -16
  201. package/src/i18n/en.ts +0 -278
  202. package/src/i18n/index.ts +0 -56
  203. package/src/i18n/zh.ts +0 -268
  204. package/src/index.ts +0 -18
  205. package/src/shared/provide.ts +0 -6
  206. package/src/shims-vue-dompurify-html.d.ts +0 -17
  207. package/src/vue.d.ts +0 -10
  208. package/tsconfig.json +0 -37
  209. package/vite.config.ts +0 -123
  210. package/vite.treeshaking.config.ts +0 -127
@@ -1,943 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed, nextTick, onMounted, ref, watch } from 'vue';
3
- import {
4
- isClient,
5
- OFigure,
6
- OIcon,
7
- OIconChevronLeft,
8
- OIconChevronRight,
9
- OOption, OResult,
10
- OScroller,
11
- OSelect,
12
- OTab,
13
- OTabPane,
14
- } from '@opensig/opendesign';
15
- import dayjs from 'dayjs';
16
- import { ElCalendar } from 'element-plus';
17
- import OMeetingCalendarList from './components/OMeetingCalendarList.vue';
18
- import IconEvent from '~icons/meeting/icon-event.svg';
19
- import IconSummit from '~icons/meeting/icon-summit.svg';
20
- import IconMeeting from '~icons/meeting/icon-meet.svg';
21
- import emptyDefaultImg from '@/assets/meeting/empty.png';
22
- import { Locales } from '@/i18n';
23
- import { useMeetingConfig } from './composables/useMeetingConfig';
24
- import {
25
- CalendarDataType,
26
- MeetingEventsItemT,
27
- MeetingCalendarPropsT,
28
- MeetingGroupType, MeetingItemT,
29
- meetingTabT,
30
- SummitItemT,
31
- } from './types.ts';
32
- import { formatDate } from './utils.ts';
33
- import { useDebounceFn } from '@vueuse/core';
34
-
35
- const props = withDefaults(defineProps<MeetingCalendarPropsT>(), {
36
- getSummitListRequest: async () => [],
37
- getEventsListRequest: async () => [],
38
- hiddenEvents: false,
39
- hiddenSummit: false,
40
- groupType: MeetingGroupType.SIG,
41
- groups: () => [],
42
- });
43
- const { t, locale, meetingTabs, getConfig } = useMeetingConfig();
44
- const isEn = computed(() => locale.value === Locales.EN);
45
-
46
- const dateList = ref<string[]>([]);
47
- const summitData = ref<SummitItemT[]>([]);
48
- const summitDates = ref<string[]>([]);
49
- const eventsData = ref<MeetingEventsItemT[]>([]);
50
- const eventsDates = ref<string[]>([]);
51
- const meetingData = ref<MeetingItemT[]>([]);
52
- const limitTime = '2021-01-01';
53
- const tabType = ref<CalendarDataType>(CalendarDataType.ALL);
54
- const tabs = computed<meetingTabT[]>(() => {
55
- let list = meetingTabs.value;
56
- if (props.hiddenEvents) {
57
- list = list.filter((item) => item.value !== CalendarDataType.EVENTS);
58
- }
59
- if (props.hiddenSummit) {
60
- list = list.filter((item) => item.value !== CalendarDataType.SUMMIT);
61
- }
62
- if (list.filter(v => v.value !== CalendarDataType.ALL).length === 1) {
63
- return [];
64
- }
65
- return list;
66
- });
67
-
68
- watch(() => tabs.value, () => {
69
- tabType.value = tabs.value[0]?.value ?? CalendarDataType.MEETING;
70
- });
71
- const calendar = ref();
72
- const calendarHeight = ref<string>('407px');
73
- const isLimit = ref(false);
74
- const currentDay = ref('');
75
- const isAutoClick = ref(false);
76
- // sig组列表
77
- const group = ref('');
78
- const getSummitData = async (date: string) => {
79
- if (props.getSummitListRequest) {
80
- summitData.value = [];
81
- const list = await props.getSummitListRequest(date);
82
- summitData.value = (list || []).map((v: SummitItemT) => {
83
- return {
84
- ...v,
85
- type: CalendarDataType.SUMMIT,
86
- };
87
- });
88
- } else {
89
- summitData.value = [];
90
- }
91
- };
92
- const getActivityData = async (date: string) => {
93
- if (props.getEventsListRequest) {
94
- eventsData.value = [];
95
- const list = await props.getEventsListRequest(date);
96
- eventsData.value = (list || []).map((v: MeetingEventsItemT) => {
97
- return {
98
- ...v,
99
- type: CalendarDataType.EVENTS,
100
- };
101
- });
102
- } else {
103
- eventsData.value = [];
104
- }
105
- };
106
-
107
- const getDateList = async (date: string) => {
108
- if (props.getDateListRequest) {
109
- props.getDateListRequest(date, group.value || '').then((res: string[]) => {
110
- dateList.value = res;
111
- });
112
- }
113
- if (props.getEventsDatesRequest) {
114
- props.getEventsDatesRequest(date).then((res: string[]) => {
115
- eventsDates.value = res;
116
- });
117
- }
118
- if (props.getSummitDatesRequest) {
119
- props.getSummitDatesRequest(date).then((res: string[]) => {
120
- summitDates.value = res;
121
- });
122
- }
123
- };
124
-
125
- const paramGetDaysData = async (params: { date: string; type: string }) => {
126
- if (!props.getMeetingListRequest) {
127
- return;
128
- }
129
- if (!params.date) {
130
- return;
131
- }
132
- try {
133
- meetingData.value = [];
134
- const res: MeetingItemT[] = await props.getMeetingListRequest(params.date, group.value, '');
135
- meetingData.value = res.map((v) => {
136
- return {
137
- ...v,
138
- time: `${ v.start }-${ v.end }`,
139
- type: CalendarDataType.MEETING,
140
- date: v.date || params.date,
141
- };
142
- }).sort((a: any, b: any) => {
143
- return parseInt((a.start || a.cycle_start)?.replace(':', '')) - parseInt(b.end || b.cycle_end?.replace(':', ''));
144
- });
145
- } catch {
146
- meetingData.value = [];
147
- }
148
- };
149
-
150
- const renderData = computed(() => {
151
- return [
152
- ...meetingData.value,
153
- ...eventsData.value,
154
- ...summitData.value,
155
- ].filter((v) => {
156
- if (tabType.value === CalendarDataType.ALL) {
157
- return true;
158
- }
159
- return v.type === tabType.value;
160
- });
161
- });
162
-
163
- const getDateData = async (day?: string) => {
164
- const date = dayjs(day).format('YYYY-MM-DD');
165
- currentDay.value = date;
166
- getSummitData(date);
167
- getActivityData(date);
168
- getDateList(date);
169
-
170
- paramGetDaysData({
171
- date: date,
172
- type: tabType.value,
173
- });
174
- };
175
- const allDates = computed<string[]>(() => {
176
- return [...new Set([...dateList.value, ...summitDates.value, ...eventsDates.value])]
177
- .flat()
178
- .sort((a: string, b: string) => dayjs(a).isAfter(dayjs(b)) ? 1 : -1);
179
- });
180
-
181
- const latestDay = computed(() => {
182
- if (!allDates.value.length) {
183
- return formatDate(new Date());
184
- } else {
185
- let find = allDates.value.find((v) => dayjs(v).isAfter(dayjs()));
186
- if (!find) {
187
- find = [...allDates.value].reverse().find((v) => dayjs().isAfter(dayjs(v)));
188
- }
189
- return formatDate(find);
190
- }
191
- });
192
-
193
- const changeMeetingDay = useDebounceFn((day: string, event?: Event) => {
194
- if (isAutoClick.value) {
195
- isAutoClick.value = false;
196
- return;
197
- }
198
- if (new Date(day).getTime() / 1000 < 1610380800) {
199
- event?.stopPropagation();
200
- return;
201
- }
202
- getDateData(day);
203
- }, 300)
204
-
205
-
206
- watch(() => latestDay.value,
207
- () => {
208
- calendar.value?.pickDay(dayjs(latestDay.value));
209
- changeMeetingDay(latestDay.value);
210
- },
211
- {
212
- immediate: true,
213
- },
214
- );
215
-
216
- const selectDate = (val: string, date: string) => {
217
- if (formatDate(date) === formatDate(limitTime) && val === 'prev-month') {
218
- isLimit.value = true;
219
- return;
220
- }
221
- isLimit.value = false;
222
- calendar.value.selectDate(val);
223
- changeMeetingDay(formatDate(calendar.value.selectedDay));
224
- };
225
- const changeGroup = () => {
226
- nextTick(() => {
227
- paramGetDaysData({
228
- date: currentDay.value,
229
- type: tabType.value,
230
- });
231
- getDateList(currentDay.value);
232
- });
233
- };
234
-
235
- const removeLeadingZero = (str: string) => {
236
- // 使用正则表达式匹配以 0 开头的字符串,然后去除开头的 0
237
- return str.replace(/^0+(?=\d)/, '');
238
- };
239
-
240
- const watchChange = (element: HTMLElement) => {
241
- const observe = new MutationObserver(function() {
242
- calendarHeight.value = `${ element.offsetHeight - 2 }px`;
243
- });
244
- observe.observe(element, {
245
- childList: true,
246
- subtree: true,
247
- characterData: true,
248
- });
249
- };
250
-
251
- const getCalendarHeight = async () => {
252
- // 设置右侧 日程列表高度
253
- const tbody = document.querySelector('.calendar-body .el-calendar__body') as HTMLElement;
254
- if (tbody) {
255
- watchChange(tbody);
256
- calendarHeight.value = `${ tbody.offsetHeight - 2 }px`;
257
- }
258
- };
259
-
260
- onMounted(() => {
261
- getCalendarHeight();
262
- });
263
-
264
- const stopWatchData = watch(
265
- () => allDates.value.length,
266
- () => {
267
- if (isClient && !currentDay.value) {
268
- nextTick(() => {
269
- const activeBoxes = document.querySelector('.is-today .out-box') as HTMLElement;
270
- if (activeBoxes) {
271
- isAutoClick.value = true;
272
- activeBoxes.click();
273
- stopWatchData();
274
- }
275
- });
276
- }
277
- },
278
- );
279
-
280
- const formatYearMonth = (date: string) => {
281
- if (isEn.value) {
282
- return date.split(' ').reverse().join(' ');
283
- } else {
284
- return date;
285
- }
286
- };
287
- // 根据类型校验日历日期是否可选
288
- const checkSelectedDay = (type: CalendarDataType, date: string) => {
289
- if (type === CalendarDataType.MEETING) {
290
- return ([CalendarDataType.ALL, CalendarDataType.MEETING].includes(tabType.value) && dateList.value.includes(date));
291
- }
292
- if (type === CalendarDataType.SUMMIT) {
293
- return ([CalendarDataType.ALL, CalendarDataType.SUMMIT].includes(tabType.value) && summitDates.value.includes(date));
294
- }
295
- if (type === CalendarDataType.EVENTS) {
296
- return ([CalendarDataType.ALL, CalendarDataType.EVENTS].includes(tabType.value) && eventsDates.value.includes(date));
297
- }
298
- return false;
299
- };
300
-
301
- defineExpose({
302
- refresh: getDateData,
303
- });
304
- </script>
305
- <template>
306
- <div class="o-meeting-calendar">
307
- <div class="calendar-body">
308
- <ElCalendar ref="calendar" class="calender">
309
- <template #header="{ date }">
310
- <div class="calender-header-left">
311
- <div class="left-title">
312
- <OIcon @click="selectDate('prev-month', date)">
313
- <OIconChevronLeft :class="{ disable: isLimit }" />
314
- </OIcon>
315
- <span class="month-date">{{ formatYearMonth(date) }}</span>
316
- <OIcon @click="selectDate('next-month', date)">
317
- <OIconChevronRight />
318
- </OIcon>
319
- </div>
320
- <OSelect
321
- v-if="groups?.length > 0"
322
- v-model="group"
323
- :placeholder="t(groupType === MeetingGroupType.GROUP ? 'meeting.allGroups' : 'meeting.allSigs')"
324
- clearable
325
- @change="changeGroup"
326
- >
327
- <OOption v-for="t in groups" :value="t" :key="t">{{ t }}</OOption>
328
- </OSelect>
329
- </div>
330
-
331
- <div class="right-title">
332
- <span>{{ t('meeting.latestMeeting') }}&nbsp;</span>
333
- <span>{{ formatDate(dayjs(latestDay)) }}</span>
334
- </div>
335
- </template>
336
- <template #date-cell="{ data }">
337
- <div class="out-box" :class="{ 'has-calender': allDates.includes(data.day) }"
338
- @click="changeMeetingDay(data.day, $event)">
339
- <div class="day-box">
340
- <p :class="data.isSelected ? 'is-selected' : ''" class="date-calender">
341
- {{ removeLeadingZero(data.day.split('-').at(-1) || '') }}
342
- </p>
343
- <div class="icon-box">
344
- <OIcon
345
- class="meeting"
346
- :style="{
347
- zIndex: getConfig(CalendarDataType.MEETING, 'zIndex'),
348
- backgroundColor: getConfig(CalendarDataType.MEETING, 'color')
349
- }"
350
- v-if="checkSelectedDay(CalendarDataType.MEETING, data.day)">
351
- <IconMeeting />
352
- </OIcon>
353
- <OIcon
354
- class="events"
355
- :style="{
356
- zIndex: getConfig(CalendarDataType.EVENTS, 'zIndex'),
357
- backgroundColor: getConfig(CalendarDataType.EVENTS, 'color')
358
- }"
359
- v-if="checkSelectedDay(CalendarDataType.EVENTS, data.day)">
360
- <IconEvent />
361
- </OIcon>
362
- <OIcon
363
- class="summit"
364
- :style="{
365
- zIndex: getConfig(CalendarDataType.SUMMIT, 'zIndex'),
366
- backgroundColor: getConfig(CalendarDataType.SUMMIT, 'color')
367
- }"
368
- v-if="checkSelectedDay(CalendarDataType.SUMMIT, data.day)">
369
- <IconSummit />
370
- </OIcon>
371
- </div>
372
- </div>
373
- </div>
374
- </template>
375
- </ElCalendar>
376
- <div class="detail-list">
377
- <div class="current-day">
378
- {{ t('meeting.latestMeeting') }}&nbsp;
379
- <span>{{ formatDate(dayjs(latestDay)) }}</span>
380
- </div>
381
- <div class="right-title">
382
- <div class="title-list">
383
- <OSelect
384
- v-model="group"
385
- :placeholder="t(groupType === MeetingGroupType.GROUP ? 'meeting.allGroups' : 'meeting.allSigs')"
386
- clearable
387
- @change="changeGroup"
388
- >
389
- <OOption v-for="t in groups" :value="t" :key="t">{{ t }}</OOption>
390
- </OSelect>
391
- <OTab v-model="tabType" :line="false" :max-show="9999">
392
- <OTabPane v-for="item in tabs" :key="item.value" :value="item.value">
393
- <template #nav>
394
- <OIcon>
395
- <component :is="item.icon" />
396
- </OIcon>
397
- {{ item.label }}
398
- </template>
399
- </OTabPane>
400
- </OTab>
401
- </div>
402
- </div>
403
-
404
- <div>
405
- <OScroller class="meeting-list" show-type="hover" size="small" :style="{
406
- '--height': calendarHeight
407
- }">
408
- <OMeetingCalendarList
409
- :list="renderData as unknown as MeetingItemT[]"
410
- :groupType="groupType"
411
- :disableFormat="disableFormat"
412
- >
413
- <template #empty>
414
- <slot name="empty">
415
- <OResult class="empty-result">
416
- <template #image>
417
- <OFigure class="img" :src="emptyImg ?? emptyDefaultImg" />
418
- </template>
419
- <template #description>{{ emptyText ?? t('meeting.meetingEmptyText') }}</template>
420
- </OResult>
421
- </slot>
422
- </template>
423
- </OMeetingCalendarList>
424
- </OScroller>
425
- </div>
426
- </div>
427
- </div>
428
- </div>
429
- </template>
430
- <style lang="scss">
431
- .o-meeting-calendar {
432
- --meeting-card-radius: var(--o-radius-xs);
433
- --meeting-input-radius: var(--o-radius-xs);
434
- --meeting-cell-radius: var(--o-radius-xs);
435
-
436
- .o-select {
437
- flex-grow: 1;
438
- max-width: 320px;
439
- --select-radius: var(--meeting-input-radius);
440
- }
441
-
442
- .el-calendar-table {
443
- margin-bottom: 0;
444
- display: table;
445
- width: 100%;
446
- }
447
-
448
- .calendar-body {
449
- display: flex;
450
- border-radius: var(--meeting-card-radius);
451
- background-color: var(--o-color-fill2);
452
- overflow: hidden;
453
- @include respond('<=pad_v') {
454
- background-color: transparent;
455
- flex-direction: column;
456
- }
457
-
458
- .calender {
459
- width: 56%;
460
- --el-calendar-borde: none;
461
- --el-calendar-selected-bg-color: none;
462
- @include respond('<=pad_v') {
463
- width: 100%;
464
- flex-direction: column;
465
- background-color: var(--o-color-fill2);
466
- border-radius: var(--meeting-card-radius);
467
- }
468
-
469
- .el-calendar__header {
470
- display: flex;
471
- align-items: center;
472
- justify-content: space-between;
473
- height: 58px;
474
- padding: 0 var(--o-gap-6);
475
- gap: var(--o-gap-6);
476
- border-bottom: 1px solid var(--o-color-control4);
477
- background: var(--o-color-fill2);
478
- @include respond('<=pad_v') {
479
- justify-content: center;
480
- border-bottom: none;
481
- height: 52px;
482
- }
483
-
484
- .calender-header-left {
485
- display: flex;
486
- align-items: center;
487
- justify-content: center;
488
- gap: var(--o-gap-6);
489
- @include respond('<=pad') {
490
- gap: var(--o-gap-4);
491
- }
492
-
493
- .o-select {
494
- max-width: 240px;
495
- @include respond('<=pad_v') {
496
- display: none;
497
- }
498
- }
499
- }
500
-
501
- .left-title {
502
- display: flex;
503
- align-items: center;
504
- flex-shrink: 0;
505
- color: var(--o-color-info1);
506
- @include text2;
507
- @include respond('<=pad_v') {
508
- @include h3;
509
- }
510
-
511
- .o-icon {
512
- cursor: pointer;
513
- font-size: 24px;
514
- }
515
-
516
- .month-date {
517
- font-weight: 500;
518
- margin: 0;
519
- }
520
- }
521
-
522
- .right-title {
523
- display: flex;
524
- align-items: center;
525
- color: var(--o-color-info2);
526
- word-break: keep-all;
527
- @include text2;
528
- @include respond('<=pad_v') {
529
- display: none;
530
- }
531
- }
532
- }
533
-
534
- .el-calendar__body {
535
- padding: 0 var(--o-gap-6) var(--o-gap-6);
536
- border-right: 1px solid var(--o-color-control4);
537
- margin-bottom: 0;
538
- background: var(--o-color-fill2);
539
-
540
- thead {
541
- th {
542
- padding: var(--o-gap-4) var(--o-gap-3);
543
- text-align: left;
544
- color: var(--o-color-info3);
545
- background: none;
546
- border: none;
547
- @include text1;
548
- @include respond('<=pad_v') {
549
- padding: 0;
550
- text-align: center;
551
- }
552
- }
553
- }
554
-
555
- td {
556
- border: none;
557
- padding: 0;
558
- }
559
-
560
- td:first-child {
561
- .el-calendar-day {
562
- margin-left: 0 !important;
563
- }
564
- }
565
-
566
- tr:last-child {
567
- .el-calendar-day {
568
- margin-bottom: 0 !important;
569
- }
570
- }
571
-
572
- @include respond('<=pad_v') {
573
- border: none;
574
- padding: 0 16px 16px;
575
- thead {
576
- background-color: var(--o-color-control4-light);
577
- overflow: hidden;
578
-
579
- th {
580
- padding: 9px 0;
581
- }
582
-
583
- th:first-child {
584
- border-top-left-radius: var(--meeting-cell-radius);
585
- border-bottom-left-radius: var(--meeting-cell-radius);
586
- }
587
-
588
- th:last-child {
589
- border-top-right-radius: var(--meeting-cell-radius);
590
- border-bottom-right-radius: var(--meeting-cell-radius);
591
- }
592
- }
593
- tr:last-child {
594
- .out-box {
595
- margin-bottom: 0 !important;
596
- }
597
- }
598
- }
599
- }
600
-
601
- td {
602
- border: none;
603
- }
604
-
605
- .el-calendar-day {
606
- padding: 0;
607
- margin-left: var(--o-gap-2);
608
- margin-bottom: var(--o-gap-2);
609
- height: 64px;
610
- color: var(--o-color-info1);
611
- @include respond('<=pad_v') {
612
- display: flex;
613
- justify-content: center;
614
- padding: 0;
615
- height: fit-content;
616
- }
617
-
618
- .out-box {
619
- position: relative;
620
- border-radius: var(--meeting-cell-radius);
621
- padding: 8px 12px;
622
- width: 100%;
623
- height: 100%;
624
- background-color: var(--o-color-control2-light);
625
- border: 1px solid transparent;
626
- @include tip1;
627
- @include hover {
628
- background-color: var(--o-color-control3-light);
629
- @include respond('<=pad_v') {
630
- @include hover {
631
- background-color: inherit;
632
- border: 1px solid transparent;
633
- }
634
- }
635
- }
636
-
637
- .day-box {
638
- display: flex;
639
- flex-direction: column;
640
- justify-content: space-between;
641
- height: 100%;
642
- }
643
-
644
- .icon-box {
645
- display: flex;
646
- margin-top: 4px;
647
- color: var(--o-color-white);
648
- height: 16px;
649
-
650
- .o-icon {
651
- flex-shrink: 0;
652
- position: relative;
653
- border-radius: 50%;
654
- width: 16px;
655
- height: 16px;
656
- font-size: 14px;
657
- padding: 1px;
658
- margin-left: -4px;
659
- margin-top: 0;
660
- @include respond('<=pad_v') {
661
- height: 6px;
662
- width: 6px;
663
- margin-left: -2px;
664
- }
665
-
666
- &:first-child {
667
- margin: 0;
668
- }
669
- }
670
-
671
- .o-icon {
672
- svg path {
673
- fill: currentColor;
674
- }
675
- }
676
- }
677
-
678
- @include respond('<=pad_v') {
679
- background-color: transparent;
680
- padding: 0;
681
- margin: 6px 8px;
682
- text-align: center;
683
- width: 24px;
684
- height: 24px;
685
- .day-box {
686
- display: flex;
687
- flex-direction: column;
688
- justify-content: center;
689
- align-items: center;
690
- font-size: 14px;
691
- line-height: 22px;
692
- }
693
- .icon-box {
694
- display: flex;
695
- justify-content: center;
696
- margin-top: 0;
697
- position: absolute;
698
- left: 50%;
699
- bottom: -2px;
700
- height: 6px;
701
- transform: translate(-50%, 100%);
702
- }
703
- .o-icon {
704
- width: 6px;
705
- height: 6px;
706
-
707
- svg {
708
- display: none;
709
- }
710
- }
711
- }
712
- }
713
- }
714
-
715
- .date-calender {
716
- position: relative;
717
- margin-bottom: 0;
718
-
719
- &::after {
720
- content: '';
721
- position: absolute;
722
- top: 50%;
723
- left: 50%;
724
- transform: translate(-50%, -50%);
725
- z-index: -1;
726
- }
727
- }
728
-
729
- .is-selected {
730
- .out-box {
731
- background-color: var(--o-color-control3-light);
732
- border: 1px solid var(--o-color-primary1);
733
- @include respond('<=pad_v') {
734
- background-color: transparent;
735
- border: 1px solid transparent;
736
- .date-calender {
737
- color: var(--o-color-primary1);
738
- font-weight: 600;
739
- z-index: 1;
740
-
741
- &::after {
742
- height: 24px;
743
- width: 40px;
744
- background-color: var(--o-color-control3-light);
745
- border-radius: var(--meeting-cell-radius);
746
- border: 1px solid var(--o-color-primary1);
747
- }
748
- }
749
- }
750
- }
751
- }
752
-
753
- .is-today {
754
- .date-calender {
755
- --num-size: 22px;
756
- width: fit-content;
757
- height: var(--num-size);
758
- line-height: var(--num-size);
759
- z-index: 1;
760
- font-weight: 600;
761
- color: var(--o-color-primary1);
762
-
763
- &::after {
764
- width: var(--num-size);
765
- height: var(--num-size);
766
- background-color: var(--o-color-control3-light);
767
- border-radius: 50%;
768
- }
769
-
770
- @include respond('<=pad_v') {
771
- height: auto;
772
- width: auto;
773
- &::after {
774
- content: '';
775
- position: absolute;
776
- top: 50%;
777
- left: 50%;
778
- transform: translate(-50%, -50%);
779
- height: 24px;
780
- width: 40px;
781
- border-radius: var(--meeting-cell-radius);
782
- z-index: -1;
783
- }
784
- }
785
- }
786
- }
787
- }
788
-
789
- .detail-list {
790
- width: 44%;
791
-
792
-
793
- @include respond('<=pad_v') {
794
- margin-top: 12px;
795
- padding-top: 16px;
796
- background-color: var(--o-color-fill2);
797
- width: 100%;
798
- border-radius: var(--meeting-card-radius);
799
- }
800
- @include respond('phone') {
801
-
802
- margin-top: 16px;
803
- padding-top: 12px;
804
- }
805
-
806
- .current-day {
807
- color: var(--o-color-info2);
808
- @include respond('>pad_v') {
809
- display: none;
810
- }
811
- @include respond('<=pad_v') {
812
- display: flex;
813
- margin: 16px 16px 12px;
814
- padding: 7px 12px;
815
- justify-content: center;
816
- border-radius: var(--meeting-card-radius);
817
- background-color: var(--o-color-control4-light);
818
- @include text2;
819
- }
820
- }
821
-
822
- .title-list {
823
- padding: 16px 0;
824
- position: relative;
825
- height: 58px;
826
-
827
- @include respond('<=pad_v') {
828
- justify-content: space-between;
829
- padding: 0 16px;
830
- gap: var(--o-gap-4);
831
- height: auto;
832
- align-items: flex-start;
833
- display: flex;
834
- }
835
- @include respond('phone') {
836
- flex-direction: column;
837
- align-items: center;
838
- gap: var(--o-gap-2);
839
- }
840
-
841
- &::after {
842
- content: '';
843
- position: absolute;
844
- bottom: 0;
845
- left: 0;
846
- width: 100%;
847
- height: 1px;
848
- background-color: var(--o-color-control4);
849
- }
850
-
851
- .o-select {
852
- display: none;
853
- margin-bottom: var(--o-gap-2);
854
- @include respond('<=pad_v') {
855
- display: inline-flex;
856
- }
857
- @include respond('pad_v') {
858
- max-width: 160px;
859
- }
860
- @include respond('phone') {
861
- display: flex;
862
- width: 100%;
863
- max-width: 100%;
864
- margin-bottom: 0;
865
- }
866
- }
867
-
868
- }
869
-
870
- .o-tab {
871
- --tab-nav-padding: 0 0 16px;
872
- @include respond('laptop') {
873
- --tab-nav-padding: 0 0 18px;
874
- }
875
- @include respond('pad_h') {
876
- --tab-nav-gap: 24px;
877
- --tab-nav-padding: 0 0 18px;
878
- }
879
-
880
- @include respond('<=pad_v') {
881
- border-bottom: none;
882
- height: auto;
883
- .o-icon {
884
- display: none;
885
- }
886
- }
887
- @include respond('pad_v') {
888
- --tab-nav-justify: flex-end;
889
- width: 50%;
890
- --tab-nav-padding: 0 0 14px;
891
- }
892
-
893
- @include respond('phone') {
894
- --tab-nav-padding: 0 0 4px;
895
- }
896
-
897
- .o-icon {
898
- svg path {
899
- fill: currentColor;
900
- }
901
- }
902
- .o-tab-nav-anchor {
903
- .o-tab-nav-anchor-line {
904
- width: 100%;
905
- @include respond('<=pad_v') {
906
- width: 16px;
907
- }
908
- }
909
- }
910
- }
911
- }
912
-
913
- .meeting-list {
914
- height: var(--height);
915
- @include respond('<=pad_v') {
916
- height: auto;
917
- }
918
- }
919
- }
920
-
921
- .empty-result {
922
- --result-image-width: 240px;
923
- --result-image-height: 210px;
924
- --result-desc-gap: var(--o-gap-4);
925
-
926
- @include respond('laptop') {
927
- --result-image-width: 200px;
928
- --result-image-height: 175px;
929
- --result-desc-gap: var(--o-gap-3);
930
- }
931
-
932
- @include respond('<=pad') {
933
- --result-image-width: 160px;
934
- --result-image-height: 140px;
935
- --result-desc-gap: var(--o-gap-2);
936
- }
937
-
938
- .o-result-description {
939
- @include tip1;
940
- }
941
- }
942
- }
943
- </style>