@opendesign-plus/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.
Files changed (96) hide show
  1. package/dist/chunk-OElCookieNotice.cjs.js +1 -1
  2. package/dist/chunk-OElCookieNotice.es.js +152 -152
  3. package/dist/components/activity/OActivityApproval.vue.d.ts +8 -8
  4. package/dist/components/activity/OActivityForm.vue.d.ts +6 -6
  5. package/dist/components/activity/OActivityMyCalendar.vue.d.ts +8 -4
  6. package/dist/components/activity/index.d.ts +17 -15
  7. package/dist/components/config-provider/OPlusConfigProvider.vue.d.ts +24 -0
  8. package/dist/components/config-provider/index.d.ts +30 -0
  9. package/dist/components/cookie-notice/OCookieNotice.vue.d.ts +17 -0
  10. package/dist/components/cookie-notice/index.d.ts +53 -0
  11. package/dist/components/events/types.d.ts +4 -0
  12. package/dist/components/{OFooter.vue.d.ts → footer/OFooter.vue.d.ts} +2 -2
  13. package/dist/components/footer/index.d.ts +89 -0
  14. package/dist/components/header/index.d.ts +1 -0
  15. package/dist/components/header/types.d.ts +1 -0
  16. package/dist/components/{OLanguageSwitcher.vue.d.ts → header-language-switcher/OHeaderLanguageSwitcher.vue.d.ts} +5 -5
  17. package/dist/components/header-language-switcher/index.d.ts +90 -0
  18. package/dist/components/{OHeaderSearch.vue.d.ts → header-search/OHeaderSearch.vue.d.ts} +165 -145
  19. package/dist/components/header-search/index.d.ts +607 -0
  20. package/dist/components/header-source-code/OHeaderSourceCode.vue.d.ts +18 -0
  21. package/dist/components/header-source-code/index.d.ts +23 -0
  22. package/dist/components/header-theme/OHeaderTheme.vue.d.ts +25 -0
  23. package/dist/components/header-theme/index.d.ts +50 -0
  24. package/dist/components/{OHeaderUser.vue.d.ts → header-user/OHeaderUser.vue.d.ts} +7 -7
  25. package/dist/components/header-user/index.d.ts +53 -0
  26. package/dist/components/meeting/OMeetingCalendar.vue.d.ts +2 -2
  27. package/dist/components/meeting/OMeetingForm.vue.d.ts +4 -6
  28. package/dist/components/meeting/OMeetingMyCalendar.vue.d.ts +8 -4
  29. package/dist/components/meeting/OMeetingPlayback.vue.d.ts +4 -4
  30. package/dist/components/meeting/components/OMeetingCalendarList.vue.d.ts +1 -0
  31. package/dist/components/meeting/components/OMeetingPlaybackVideo.vue.d.ts +1 -1
  32. package/dist/components/meeting/index.d.ts +11 -15
  33. package/dist/components/meeting/types.d.ts +6 -4
  34. package/dist/components/meeting/utils.d.ts +2 -1
  35. package/dist/components/search/OSearchInput.vue.d.ts +54 -34
  36. package/dist/components/search/index.d.ts +32 -22
  37. package/dist/components/search/internal/SearchImageInput.vue.d.ts +41 -21
  38. package/dist/components/search/internal/SearchPanel.vue.d.ts +1 -1
  39. package/dist/components/{OSection.vue.d.ts → section/OSection.vue.d.ts} +4 -4
  40. package/dist/components/section/index.d.ts +47 -0
  41. package/dist/components.cjs.js +40 -40
  42. package/dist/components.css +1 -1
  43. package/dist/components.es.js +16758 -16562
  44. package/dist/index.d.ts +9 -14
  45. package/docs/design.md +2 -2
  46. package/package.json +8 -8
  47. package/scripts/generate-components-index.js +2 -44
  48. package/src/assets/meeting/svg-icons/icon-all.svg +2 -1
  49. package/src/assets/meeting/svg-icons/icon-event.svg +2 -1
  50. package/src/assets/meeting/svg-icons/icon-meet.svg +2 -1
  51. package/src/assets/meeting/svg-icons/icon-summit.svg +2 -1
  52. package/src/assets/styles/element-plus.scss +24 -0
  53. package/src/components/activity/OActivityMyCalendar.vue +19 -12
  54. package/src/components/common/ClientOnly.vue +13 -0
  55. package/src/components/{OPlusConfigProvider.vue → config-provider/OPlusConfigProvider.vue} +5 -5
  56. package/src/components/config-provider/index.ts +10 -0
  57. package/src/components/{OCookieNotice.vue → cookie-notice/OCookieNotice.vue} +1 -1
  58. package/src/components/cookie-notice/index.ts +10 -0
  59. package/src/components/element-plus/OElCookieNotice.vue +2 -2
  60. package/src/components/events/OEventsApply.vue +85 -1
  61. package/src/components/events/OEventsList.vue +112 -40
  62. package/src/components/events/types.ts +1 -0
  63. package/src/components/{OFooter.vue → footer/OFooter.vue} +4 -4
  64. package/src/components/footer/index.ts +10 -0
  65. package/src/components/header/index.ts +2 -0
  66. package/src/components/header/types.ts +1 -0
  67. package/src/components/header-language-switcher/index.ts +10 -0
  68. package/src/components/{OHeaderSearch.vue → header-search/OHeaderSearch.vue} +4 -4
  69. package/src/components/header-search/index.ts +10 -0
  70. package/src/components/{OSourceCode.vue → header-source-code/OHeaderSourceCode.vue} +2 -2
  71. package/src/components/header-source-code/index.ts +10 -0
  72. package/src/components/{OThemeSwitcher.vue → header-theme/OHeaderTheme.vue} +4 -4
  73. package/src/components/header-theme/index.ts +10 -0
  74. package/src/components/{OHeaderUser.vue → header-user/OHeaderUser.vue} +4 -4
  75. package/src/components/header-user/index.ts +10 -0
  76. package/src/components/meeting/OMeetingCalendar.vue +32 -21
  77. package/src/components/meeting/OMeetingForm.vue +44 -37
  78. package/src/components/meeting/OMeetingMyCalendar.vue +28 -38
  79. package/src/components/meeting/OMeetingSigCalendar.vue +43 -20
  80. package/src/components/meeting/components/OMeetingCalendarList.vue +80 -29
  81. package/src/components/meeting/components/OMeetingDetail.vue +29 -10
  82. package/src/components/meeting/components/OMeetingPlaybackSubtitles.vue +1 -1
  83. package/src/components/meeting/components/OMeetingSigAside.vue +11 -6
  84. package/src/components/meeting/types.ts +7 -5
  85. package/src/components/meeting/utils.ts +4 -4
  86. package/src/components/{OSection.vue → section/OSection.vue} +1 -1
  87. package/src/components/section/index.ts +10 -0
  88. package/src/i18n/en.ts +2 -2
  89. package/src/i18n/zh.ts +4 -2
  90. package/src/index.ts +9 -38
  91. package/dist/components/OCookieNotice.vue.d.ts +0 -17
  92. package/dist/components/OPlusConfigProvider.vue.d.ts +0 -23
  93. package/dist/components/OSourceCode.vue.d.ts +0 -18
  94. package/dist/components/OThemeSwitcher.vue.d.ts +0 -25
  95. package/src/components/common/ClientOnlyWrapper.ts +0 -21
  96. /package/src/components/{OLanguageSwitcher.vue → header-language-switcher/OHeaderLanguageSwitcher.vue} +0 -0
@@ -131,35 +131,50 @@ const list = computed(() => {
131
131
 
132
132
  <template>
133
133
  <div class="o-events-list">
134
- <div class="filter-wrapper">
135
- <div class="filter-left">
136
- <span>{{ t('events.status') }}</span>
137
- <ORadioGroup v-model="status" :style="{ '--radio-group-gap': '8px' }" @change="changeStatus">
138
- <ORadio v-for="t in statusOptions" :key="t.value" :value="t.value">
139
- <template #radio="{ checked }">
140
- <OToggle :checked="checked">{{ t.label }}</OToggle>
134
+ <div class="filter-slot-wrapper">
135
+ <slot name="filter">
136
+ <div class="filter-wrapper">
137
+ <div class="filter-left">
138
+ <span>{{ t('events.status') }}</span>
139
+ <ORadioGroup v-model="status" :style="{ '--radio-group-gap': '8px' }" @change="changeStatus">
140
+ <ORadio v-for="t in statusOptions" :key="t.value" :value="t.value">
141
+ <template #radio="{ checked }">
142
+ <OToggle :checked="checked">{{ t.label }}</OToggle>
143
+ </template>
144
+ </ORadio>
145
+ </ORadioGroup>
146
+ </div>
147
+ <OInput
148
+ size="large"
149
+ v-model="input"
150
+ :placeholder="t('events.searchPlaceholder')"
151
+ @pressEnter="changeKeyword"
152
+ @clear="changeKeyword"
153
+ clearable>
154
+ <template #prefix>
155
+ <OIcon class="input-icon">
156
+ <OIconSearch />
157
+ </OIcon>
141
158
  </template>
142
- </ORadio>
143
- </ORadioGroup>
144
- </div>
145
- <OInput
146
- v-model="input"
147
- :placeholder="t('events.searchPlaceholder')"
148
- @pressEnter="changeKeyword"
149
- @clear="changeKeyword"
150
- clearable>
151
- <template #prefix>
152
- <OIcon class="input-icon">
153
- <OIconSearch />
154
- </OIcon>
155
- </template>
156
- </OInput>
159
+ </OInput>
160
+ </div>
161
+ </slot>
157
162
  </div>
158
163
  <div class="list-content">
159
164
  <OCard v-for="item in list" :key="item.name" :cover="item.cover" :href="item.link">
160
- <OTag class="event-status">
161
- {{ item.status === EventsStatusT.ING ? t('events.statusIng') : t('events.statusFinish') }}
162
- </OTag>
165
+ <div class="tags-wrapper">
166
+ <template v-if="item.tags?.length">
167
+ <OTag v-for="tag in item.tags" :key="tag.title" size="medium">
168
+ <span>{{ tag.title }}</span>
169
+ <template #icon v-if="tag.icon">
170
+ <component :is="tag.icon"></component>
171
+ </template>
172
+ </OTag>
173
+ </template>
174
+ <OTag class="event-status">
175
+ {{ item.status === EventsStatusT.ING ? t('events.statusIng') : t('events.statusFinish') }}
176
+ </OTag>
177
+ </div>
163
178
  <div class="event-name">{{ item.name }}</div>
164
179
  <div class="event-desc">
165
180
  <div class="event-date">{{ item.dateStr }}</div>
@@ -188,19 +203,32 @@ const list = computed(() => {
188
203
  .o-events-list {
189
204
  --events-card-radius: var(--o-radius-xs);
190
205
  --events-tag-radius: var(--o-radius-xs);
191
- .filter-wrapper {
192
- display: flex;
193
- align-items: center;
194
- flex-wrap: wrap;
195
- justify-content: space-between;
206
+
207
+ .filter-slot-wrapper {
196
208
  background-color: var(--o-color-fill2);
197
209
  border-radius: var(--events-card-radius);
198
210
  padding: var(--o-gap-5) var(--o-gap-6);
199
211
  gap: var(--o-gap-3) var(--o-gap-2);
200
212
  @include text1;
201
- @include respond('<=pad_v') {
213
+ @include respond('laptop') {
214
+ padding: var(--o-gap-4) var(--o-gap-5);
215
+ }
216
+ @include respond('pad_h') {
217
+ padding: var(--o-gap-4) var(--o-gap-5);
218
+ }
219
+ @include respond('pad_v') {
202
220
  padding: var(--o-gap-3) var(--o-gap-4);
203
221
  }
222
+ @include respond('phone') {
223
+ padding: var(--o-gap-3) var(--o-gap-4);
224
+ }
225
+ }
226
+
227
+ .filter-wrapper {
228
+ display: flex;
229
+ align-items: center;
230
+ flex-wrap: wrap;
231
+ justify-content: space-between;
204
232
 
205
233
  .filter-left {
206
234
  display: flex;
@@ -212,6 +240,12 @@ const list = computed(() => {
212
240
  flex-shrink: 0;
213
241
  margin-right: var(--o-gap-5);
214
242
  font-weight: 500;
243
+ @include respond('laptop') {
244
+ margin-right: var(--o-gap-4);
245
+ }
246
+ @include respond('pad_h') {
247
+ margin-right: var(--o-gap-3);
248
+ }
215
249
  @include respond('pad_v') {
216
250
  margin-right: var(--o-gap-4);
217
251
  }
@@ -219,7 +253,6 @@ const list = computed(() => {
219
253
  margin-right: var(--o-gap-4);
220
254
  }
221
255
  }
222
-
223
256
  .o-toggle {
224
257
  --toggle-size: 32px;
225
258
  --toggle-padding: 3px 15px;
@@ -253,6 +286,14 @@ const list = computed(() => {
253
286
  grid-template-columns: repeat(1, 1fr);
254
287
  container-type: inline-size;
255
288
  }
289
+ @include respond('laptop') {
290
+ margin-top: var(--o-gap-5);
291
+ gap: var(--o-gap-5);
292
+ }
293
+ @include respond('pad_h') {
294
+ margin-top: var(--o-gap-4);
295
+ gap: var(--o-gap-4);
296
+ }
256
297
  @include respond('pad_v') {
257
298
  margin-top: var(--o-gap-4);
258
299
  gap: var(--o-gap-3);
@@ -310,17 +351,29 @@ const list = computed(() => {
310
351
  margin-top: var(--o-gap-4);
311
352
  }
312
353
 
313
- .event-status {
314
- --tag-color: rgb(var(--o-white));
315
- --tag-bg-color: rgba(var(--o-black), 0.25);
316
- --tag-padding: var(--o-gap-1) var(--o-gap-3);
317
- border: none;
354
+ .tags-wrapper {
318
355
  position: absolute;
319
356
  top: var(--o-gap-3);
320
357
  right: var(--o-gap-3);
321
- border-radius: var(--events-tag-radius);
322
- @include respond('<=pad_v') {
323
- --tag-padding: var(--o-gap-1);
358
+ display: flex;
359
+ align-items: center;
360
+ column-gap: var(--o-gap-2);
361
+ flex-wrap: wrap;
362
+ justify-content: flex-end;
363
+ @include respond('phone') {
364
+ top: var(--o-gap-2);
365
+ right: var(--o-gap-2);
366
+ }
367
+
368
+ .o-tag {
369
+ --tag-color: rgb(var(--o-white));
370
+ --tag-bg-color: rgba(var(--o-black), 0.25);
371
+ --tag-padding: var(--o-gap-1) var(--o-gap-3);
372
+ border: none;
373
+ border-radius: var(--events-tag-radius);
374
+ @include respond('<=pad') {
375
+ --tag-padding: var(--o-gap-1);
376
+ }
324
377
  }
325
378
  }
326
379
 
@@ -351,6 +404,12 @@ const list = computed(() => {
351
404
  }
352
405
 
353
406
  @include text1;
407
+ @include respond('laptop') {
408
+ margin-top: var(--o-gap-4);
409
+ }
410
+ @include respond('pad_h') {
411
+ margin-top: var(--o-gap-3);
412
+ }
354
413
  @include respond('pad_v') {
355
414
  margin-top: var(--o-gap-2);
356
415
  }
@@ -382,6 +441,19 @@ const list = computed(() => {
382
441
  --pagination-item-bg-color-current: var(--o-color-primary1);
383
442
  --pagination-item-color-current: #fff;
384
443
 
444
+ @include respond('laptop') {
445
+ margin-top: var(--o-gap-5);
446
+ }
447
+ @include respond('pad_h') {
448
+ margin-top: var(--o-gap-4);
449
+ }
450
+ @include respond('pad_v') {
451
+ margin-top: var(--o-gap-4);
452
+ }
453
+ @include respond('phone') {
454
+ margin-top: var(--o-gap-4);
455
+ }
456
+
385
457
  .o-pagination-wrap {
386
458
  justify-content: flex-end;
387
459
  }
@@ -55,6 +55,7 @@ export interface EventsCardItemT {
55
55
  cover?: string; // 卡片封面,如果不传递,组件内部通过date计算得出
56
56
  status?: EventsStatusT; // 事件状态,不传递,组件内部通过date计算得出
57
57
  link: string; // 跳转链接
58
+ tags?: { icon?: any; title: string }[];
58
59
  }
59
60
 
60
61
 
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import { ODivider } from '@opensig/opendesign';
3
3
 
4
- import ContentWrapper from './common/ContentWrapper.vue';
4
+ import ContentWrapper from '../common/ContentWrapper.vue';
5
5
 
6
6
  const props = withDefaults(defineProps<{
7
7
  simple: any;
@@ -34,9 +34,9 @@ const props = withDefaults(defineProps<{
34
34
  <ContentWrapper v-if="$slots.atom || props.atom">
35
35
  <slot name="atom">
36
36
  <div v-if="props.atom" class="atom">
37
- <p class="atom-text">{{ props.atom[props.lang].title }}</p>
38
- <a :href="props.atom[props.lang].href" target="_blank">
39
- <img :src="props.atom[props.lang].img" class="atom-logo" alt="" />
37
+ <p class="atom-text">{{ props.atom[props.lang]?.title }}</p>
38
+ <a :href="props.atom[props.lang]?.href" target="_blank">
39
+ <img :src="props.atom[props.lang]?.img" class="atom-logo" alt="" />
40
40
  </a>
41
41
  </div>
42
42
  <ODivider class="atom-divider" />
@@ -0,0 +1,10 @@
1
+ import _OFooter from './OFooter.vue';
2
+ import type { App } from 'vue';
3
+
4
+ const OFooter = Object.assign(_OFooter, {
5
+ install(app: App) {
6
+ app.component('OFooter', _OFooter);
7
+ },
8
+ });
9
+
10
+ export { OFooter };
@@ -7,10 +7,12 @@ const OHeader = Object.assign(_OHeader, {
7
7
  app.component('OHeader', _OHeader);
8
8
  },
9
9
  });
10
+
10
11
  const OHeaderMobile = Object.assign(_OHeaderMobile, {
11
12
  install(app: App) {
12
13
  app.component('OHeaderMobile', _OHeaderMobile);
13
14
  },
14
15
  });
15
16
 
17
+ export * from './types';
16
18
  export { OHeader, OHeaderMobile };
@@ -35,6 +35,7 @@ export interface NavItemT {
35
35
  withPicture: boolean; // 快捷链接是否显示缩略图
36
36
  children: ChildrenItemT[]; // 导航子项
37
37
  shortcut: ShortcutItemT[]; // 右侧快捷链接
38
+ tag?: string; // 标签
38
39
  }
39
40
 
40
41
  export interface CodeItemT {
@@ -0,0 +1,10 @@
1
+ import _OHeaderLanguageSwitcher from './OHeaderLanguageSwitcher.vue';
2
+ import type { App } from 'vue';
3
+
4
+ const OHeaderLanguageSwitcher = Object.assign(_OHeaderLanguageSwitcher, {
5
+ install(app: App) {
6
+ app.component('OHeaderLanguageSwitcher', _OHeaderLanguageSwitcher);
7
+ },
8
+ });
9
+
10
+ export { OHeaderLanguageSwitcher };
@@ -4,15 +4,15 @@ import { OIcon } from '@opensig/opendesign';
4
4
  import { onClickOutside, useDebounceFn } from '@vueuse/core';
5
5
  import { useScreen } from '@opendesign-plus/composables';
6
6
 
7
- import SearchImageInput from './search/internal/SearchImageInput.vue';
8
- import SearchPanel from './search/internal/SearchPanel.vue';
9
- import { useSearchHistory } from './search/composables/useSearchHistory';
7
+ import SearchImageInput from '../search/internal/SearchImageInput.vue';
8
+ import SearchPanel from '../search/internal/SearchPanel.vue';
9
+ import { useSearchHistory } from '../search/composables/useSearchHistory';
10
10
  import { useI18n } from '@/i18n';
11
11
  import type {
12
12
  OSearchPayload,
13
13
  OSearchRecommendItem,
14
14
  OSearchUploadImageFn,
15
- } from './search/types';
15
+ } from '../search/types';
16
16
 
17
17
  import IconSearch from '~icons/components/icon-header-search.svg';
18
18
  import IconBack from '~icons/components/icon-header-back.svg';
@@ -0,0 +1,10 @@
1
+ import _OHeaderSearch from './OHeaderSearch.vue';
2
+ import type { App } from 'vue';
3
+
4
+ const OHeaderSearch = Object.assign(_OHeaderSearch, {
5
+ install(app: App) {
6
+ app.component('OHeaderSearch', _OHeaderSearch);
7
+ },
8
+ });
9
+
10
+ export { OHeaderSearch };
@@ -4,14 +4,14 @@ import { OIcon, ODropdown, ODropdownItem } from '@opensig/opendesign';
4
4
 
5
5
  import IconChevronDown from '~icons/components/icon-chevron-down.svg';
6
6
 
7
- interface CodeItemT {
7
+ export interface CodeItemT {
8
8
  label: string;
9
9
  href: string;
10
10
  icon?: string;
11
11
  target?: string;
12
12
  }
13
13
 
14
- interface CodePropsT {
14
+ export interface CodePropsT {
15
15
  title?: string;
16
16
  options?: CodeItemT[];
17
17
  href?: string;
@@ -0,0 +1,10 @@
1
+ import _OHeaderSourceCode from './OHeaderSourceCode.vue';
2
+ import type { App } from 'vue';
3
+
4
+ const OHeaderSourceCode = Object.assign(_OHeaderSourceCode, {
5
+ install(app: App) {
6
+ app.component('OHeaderSourceCode', _OHeaderSourceCode);
7
+ },
8
+ });
9
+
10
+ export { OHeaderSourceCode };
@@ -6,7 +6,7 @@ import { useScreen } from '@opendesign-plus/composables';
6
6
  import IconSun from '~icons/components/icon-sun.svg';
7
7
  import IconMoon from '~icons/components/icon-moon.svg';
8
8
 
9
- export interface OThemeSwitcherPropsT {
9
+ export interface OHeaderThemePropsT {
10
10
  theme?: string;
11
11
  type?: 'auto' | 'common' | 'mobile';
12
12
  lightValue?: string;
@@ -14,12 +14,12 @@ export interface OThemeSwitcherPropsT {
14
14
  disabled?: boolean;
15
15
  }
16
16
 
17
- export interface OThemeSwitcherEmitsT {
17
+ export interface OHeaderThemeEmitsT {
18
18
  (e: 'update:theme', value: string): void;
19
19
  (e: 'change', val: string): void;
20
20
  }
21
21
 
22
- const props = withDefaults(defineProps<OThemeSwitcherPropsT>(), {
22
+ const props = withDefaults(defineProps<OHeaderThemePropsT>(), {
23
23
  theme: 'light',
24
24
  type: 'auto',
25
25
  lightValue: 'light',
@@ -27,7 +27,7 @@ const props = withDefaults(defineProps<OThemeSwitcherPropsT>(), {
27
27
  disabled: false,
28
28
  });
29
29
 
30
- const emit = defineEmits<OThemeSwitcherEmitsT>();
30
+ const emit = defineEmits<OHeaderThemeEmitsT>();
31
31
 
32
32
  const { gtPhone } = useScreen();
33
33
 
@@ -0,0 +1,10 @@
1
+ import _OHeaderTheme from './OHeaderTheme.vue';
2
+ import type { App } from 'vue';
3
+
4
+ const OHeaderTheme = Object.assign(_OHeaderTheme, {
5
+ install(app: App) {
6
+ app.component('OHeaderTheme', _OHeaderTheme);
7
+ },
8
+ });
9
+
10
+ export { OHeaderTheme };
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import { OIcon, OBadge, ODropdown, ODropdownItem } from '@opensig/opendesign';
3
3
 
4
- import AppAvatar from './common/AppAvatar.vue';
4
+ import AppAvatar from '../common/AppAvatar.vue';
5
5
 
6
6
  import IconAvatar from '~icons/components/icon-avatar-line.svg';
7
7
  import IconChevronDown from '~icons/components/icon-chevron-down.svg';
@@ -10,12 +10,12 @@ import { useScreen } from '@opendesign-plus/composables';
10
10
 
11
11
  const { lePadV } = useScreen();
12
12
 
13
- interface UserInfoT {
13
+ export interface UserInfoT {
14
14
  photo: string;
15
15
  username: string;
16
16
  }
17
17
 
18
- interface OptionsItemT {
18
+ export interface OptionsItemT {
19
19
  id: string; // id
20
20
  label: string; // 标题
21
21
  icon?: string; // icon
@@ -25,7 +25,7 @@ interface OptionsItemT {
25
25
  logout: boolean; // 是否是退出登录 item
26
26
  }
27
27
 
28
- interface UserPropsT {
28
+ export interface UserPropsT {
29
29
  token?: string;
30
30
  lang?: string;
31
31
  noticeTotal?: number;
@@ -0,0 +1,10 @@
1
+ import _OHeaderUser from './OHeaderUser.vue';
2
+ import type { App } from 'vue';
3
+
4
+ const OHeaderUser = Object.assign(_OHeaderUser, {
5
+ install(app: App) {
6
+ app.component('OHeaderUser', _OHeaderUser);
7
+ },
8
+ });
9
+
10
+ export { OHeaderUser };
@@ -77,13 +77,12 @@ const isAutoClick = ref(false);
77
77
  const group = ref('');
78
78
  const getSummitData = async (date: string) => {
79
79
  if (props.getSummitListRequest) {
80
+ summitData.value = [];
80
81
  const list = await props.getSummitListRequest(date);
81
82
  summitData.value = (list || []).map((v: SummitItemT) => {
82
83
  return {
83
84
  ...v,
84
85
  type: CalendarDataType.SUMMIT,
85
- start_date_time: `${ formatDate(v.start_date) } ${ v.start }`,
86
- end_date_time: `${ formatDate(v.end_date) } ${ v.end }`,
87
86
  };
88
87
  });
89
88
  } else {
@@ -92,13 +91,12 @@ const getSummitData = async (date: string) => {
92
91
  };
93
92
  const getActivityData = async (date: string) => {
94
93
  if (props.getEventsListRequest) {
94
+ eventsData.value = [];
95
95
  const list = await props.getEventsListRequest(date);
96
96
  eventsData.value = (list || []).map((v: MeetingEventsItemT) => {
97
97
  return {
98
98
  ...v,
99
99
  type: CalendarDataType.EVENTS,
100
- start_date_time: `${ formatDate(v.start_date) } ${ v.start }`,
101
- end_date_time: `${ formatDate(v.end_date) } ${ v.end }`,
102
100
  };
103
101
  });
104
102
  } else {
@@ -132,6 +130,7 @@ const paramGetDaysData = async (params: { date: string; type: string }) => {
132
130
  return;
133
131
  }
134
132
  try {
133
+ meetingData.value = [];
135
134
  const res: MeetingItemT[] = await props.getMeetingListRequest(params.date, group.value, '');
136
135
  meetingData.value = res.map((v) => {
137
136
  return {
@@ -151,8 +150,8 @@ const paramGetDaysData = async (params: { date: string; type: string }) => {
151
150
  const renderData = computed(() => {
152
151
  return [
153
152
  ...meetingData.value,
154
- ...eventsData.value.filter(v => (!dayjs(v.start_date).isAfter(dayjs(currentDay.value)) && !dayjs(currentDay.value).isAfter(dayjs(v.end_date))) || v.dates?.includes(currentDay.value)),
155
- ...summitData.value.filter(v => v.dates?.includes(currentDay.value)),
153
+ ...eventsData.value,
154
+ ...summitData.value,
156
155
  ].filter((v) => {
157
156
  if (tabType.value === CalendarDataType.ALL) {
158
157
  return true;
@@ -307,6 +306,7 @@ defineExpose({
307
306
  </OIcon>
308
307
  </div>
309
308
  <OSelect
309
+ v-if="groups?.length > 0"
310
310
  v-model="group"
311
311
  :placeholder="t(groupType === MeetingGroupType.GROUP ? 'meeting.allGroups' : 'meeting.allSigs')"
312
312
  clearable
@@ -317,8 +317,8 @@ defineExpose({
317
317
  </div>
318
318
 
319
319
  <div class="right-title">
320
- {{ t('meeting.latestMeeting') }}&nbsp;
321
- <span>{{ dayjs(latestDay).format('YYYY/MM/DD') }}</span>
320
+ <span>{{ t('meeting.latestMeeting') }}&nbsp;</span>
321
+ <span>{{ formatDate(dayjs(latestDay)) }}</span>
322
322
  </div>
323
323
  </template>
324
324
  <template #date-cell="{ data }">
@@ -364,7 +364,7 @@ defineExpose({
364
364
  <div class="detail-list">
365
365
  <div class="current-day">
366
366
  {{ t('meeting.latestMeeting') }}&nbsp;
367
- <span>{{ dayjs(currentDay).format('YYYY/MM/DD') }}</span>
367
+ <span>{{ formatDate(dayjs(currentDay)) }}</span>
368
368
  </div>
369
369
  <div class="right-title">
370
370
  <div class="title-list">
@@ -393,7 +393,11 @@ defineExpose({
393
393
  <OScroller class="meeting-list" show-type="hover" size="small" :style="{
394
394
  '--height': calendarHeight
395
395
  }">
396
- <OMeetingCalendarList :list="renderData as unknown as MeetingItemT[]" :groupType="groupType">
396
+ <OMeetingCalendarList
397
+ :list="renderData as unknown as MeetingItemT[]"
398
+ :groupType="groupType"
399
+ :disableFormat="disableFormat"
400
+ >
397
401
  <template #empty>
398
402
  <slot name="empty"></slot>
399
403
  </template>
@@ -463,6 +467,9 @@ defineExpose({
463
467
  align-items: center;
464
468
  justify-content: center;
465
469
  gap: var(--o-gap-6);
470
+ @include respond('<=pad') {
471
+ gap: var(--o-gap-4);
472
+ }
466
473
 
467
474
  .o-select {
468
475
  max-width: 240px;
@@ -489,7 +496,7 @@ defineExpose({
489
496
 
490
497
  .month-date {
491
498
  font-weight: 500;
492
- margin: 0 var(--o-gap-1);
499
+ margin: 0;
493
500
  }
494
501
  }
495
502
 
@@ -619,16 +626,16 @@ defineExpose({
619
626
  display: flex;
620
627
  margin-top: 4px;
621
628
  color: var(--o-color-white);
622
- height: 20px;
629
+ height: 16px;
623
630
 
624
631
  .o-icon {
625
632
  flex-shrink: 0;
626
633
  position: relative;
627
634
  border-radius: 50%;
628
- padding: 2px;
629
635
  width: 16px;
630
636
  height: 16px;
631
- font-size: 12px;
637
+ font-size: 14px;
638
+ padding: 1px;
632
639
  margin-left: -4px;
633
640
  margin-top: 0;
634
641
  @include respond('<=pad_v') {
@@ -845,13 +852,12 @@ defineExpose({
845
852
  justify-content: center;
846
853
  align-items: flex-end;
847
854
  height: 60px;
848
- }
849
-
850
- .o-tab {
851
- .o-icon {
852
- svg path {
853
- fill: currentColor;
854
- }
855
+ @include respond('pad_h') {
856
+ --tab-nav-gap: 24px;
857
+ }
858
+
859
+ @include respond-to('pad_v') {
860
+ --tab-nav-justify: flex-end;
855
861
  }
856
862
 
857
863
  @include respond('pad_v-laptop') {
@@ -876,6 +882,11 @@ defineExpose({
876
882
  }
877
883
  }
878
884
 
885
+ .o-icon {
886
+ svg path {
887
+ fill: currentColor;
888
+ }
889
+ }
879
890
  .o-tab-nav-anchor {
880
891
  .o-tab-nav-anchor-line {
881
892
  width: 100%;