@opendesign-plus-test/components 0.0.1-rc.21 → 0.0.1-rc.23

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 (149) hide show
  1. package/dist/chunk-OElCookieNotice.cjs.js +1 -1
  2. package/dist/chunk-OElCookieNotice.es.js +428 -137
  3. package/dist/components/OBanner.vue.d.ts +10 -1
  4. package/dist/components/OFooter.vue.d.ts +1 -1
  5. package/dist/components/OHeaderSearch.vue.d.ts +4 -4
  6. package/dist/components/activity/OActivityApproval.vue.d.ts +277 -0
  7. package/dist/components/activity/OActivityForm.vue.d.ts +140 -0
  8. package/dist/components/activity/OMyActivityCalendar.vue.d.ts +578 -0
  9. package/dist/components/activity/config.d.ts +15 -0
  10. package/dist/components/activity/data.d.ts +51 -0
  11. package/dist/components/activity/index.d.ts +623 -0
  12. package/dist/components/activity/types.d.ts +76 -0
  13. package/dist/components/meeting/OMeetingCalendar.vue.d.ts +309 -0
  14. package/dist/components/meeting/OMeetingForm.vue.d.ts +156 -0
  15. package/dist/components/meeting/OMyMeetingCalendar.vue.d.ts +582 -0
  16. package/dist/components/meeting/OSigMeetingCalendar.vue.d.ts +24 -0
  17. package/dist/components/meeting/components/OMeetingCalendarList.vue.d.ts +27 -0
  18. package/dist/components/meeting/components/OMeetingCalendarSelector.vue.d.ts +664 -0
  19. package/dist/components/meeting/components/OMeetingDetail.vue.d.ts +12 -0
  20. package/dist/components/meeting/components/OMeetingPlaybackSubtitles.vue.d.ts +5 -0
  21. package/dist/components/meeting/components/OMeetingPlaybackVideo.vue.d.ts +17 -0
  22. package/dist/components/meeting/components/OSigMeetingAside.vue.d.ts +16 -0
  23. package/dist/components/meeting/config.d.ts +27 -0
  24. package/dist/components/meeting/types.d.ts +140 -0
  25. package/dist/components/meeting/utils.d.ts +21 -0
  26. package/dist/components.cjs.js +224 -3
  27. package/dist/components.css +1 -1
  28. package/dist/components.es.js +43544 -2307
  29. package/dist/index.d.ts +2 -0
  30. package/package.json +6 -3
  31. package/scripts/generate-components-index.js +4 -0
  32. package/src/assets/meeting/svg-icons/icon-all.svg +3 -0
  33. package/src/assets/meeting/svg-icons/icon-backward.svg +4 -0
  34. package/src/assets/meeting/svg-icons/icon-calendar.svg +3 -0
  35. package/src/assets/meeting/svg-icons/icon-cancel.svg +4 -0
  36. package/src/assets/meeting/svg-icons/icon-captions.svg +4 -0
  37. package/src/assets/meeting/svg-icons/icon-close-captions.svg +6 -0
  38. package/src/assets/meeting/svg-icons/icon-close-fullscreen.svg +6 -0
  39. package/src/assets/meeting/svg-icons/icon-copy.svg +3 -0
  40. package/src/assets/meeting/svg-icons/icon-create.svg +5 -0
  41. package/src/assets/meeting/svg-icons/icon-delete.svg +7 -0
  42. package/src/assets/meeting/svg-icons/icon-empty.svg +31 -0
  43. package/src/assets/meeting/svg-icons/icon-empty_dark.svg +49 -0
  44. package/src/assets/meeting/svg-icons/icon-event.svg +3 -0
  45. package/src/assets/meeting/svg-icons/icon-export.svg +3 -0
  46. package/src/assets/meeting/svg-icons/icon-forward.svg +4 -0
  47. package/src/assets/meeting/svg-icons/icon-fullscreen.svg +6 -0
  48. package/src/assets/meeting/svg-icons/icon-help.svg +3 -0
  49. package/src/assets/meeting/svg-icons/icon-important.svg +4 -0
  50. package/src/assets/meeting/svg-icons/icon-info.svg +3 -0
  51. package/src/assets/meeting/svg-icons/icon-meet.svg +3 -0
  52. package/src/assets/meeting/svg-icons/icon-meeting-message.svg +5 -0
  53. package/src/assets/meeting/svg-icons/icon-meeting.svg +4 -0
  54. package/src/assets/meeting/svg-icons/icon-play.svg +5 -0
  55. package/src/assets/meeting/svg-icons/icon-playing-tip.svg +7 -0
  56. package/src/assets/meeting/svg-icons/icon-playing.svg +5 -0
  57. package/src/assets/meeting/svg-icons/icon-question.svg +4 -0
  58. package/src/assets/meeting/svg-icons/icon-sound.svg +5 -0
  59. package/src/assets/meeting/svg-icons/icon-speaker.svg +3 -0
  60. package/src/assets/meeting/svg-icons/icon-summit.svg +3 -0
  61. package/src/assets/meeting/svg-icons/icon-telligent.svg +3 -0
  62. package/src/assets/meeting/svg-icons/icon-tip.svg +3 -0
  63. package/src/assets/meeting/svg-icons/icon-todo.svg +4 -0
  64. package/src/assets/meeting/transparent.png +0 -0
  65. package/src/assets/svg-icons/icon-chevron-up.svg +3 -0
  66. package/src/assets/svg-icons/icon-filter.svg +3 -0
  67. package/src/assets/svg-icons/icon-loading.svg +4 -0
  68. package/src/assets/svg-icons/icon-search.svg +3 -0
  69. package/src/assets/svg-icons/icon-tips.svg +3 -0
  70. package/src/components/OBanner.vue +11 -3
  71. package/src/components/OFooter.vue +1 -1
  72. package/src/components/activity/OActivityApproval.vue +775 -0
  73. package/src/components/activity/OActivityForm.vue +465 -0
  74. package/src/components/activity/OMyActivityCalendar.vue +1342 -0
  75. package/src/components/activity/config.ts +130 -0
  76. package/src/components/activity/data.ts +365 -0
  77. package/src/components/activity/index.ts +24 -0
  78. package/src/components/activity/types.ts +83 -0
  79. package/src/components/common/MoreText.vue +119 -0
  80. package/src/components/common/ThFilter.vue +326 -0
  81. package/src/components/events/OEventsApply.vue +2 -86
  82. package/src/components/events/OEventsCalendar.vue +0 -25
  83. package/src/components/events/OEventsList.vue +0 -51
  84. package/src/components/events/index.ts +1 -0
  85. package/src/components/meeting/OMeetingCalendar.vue +865 -0
  86. package/src/components/meeting/OMeetingForm.vue +1035 -0
  87. package/src/components/meeting/OMeetingPlayback.vue +439 -0
  88. package/src/components/meeting/OMyMeetingCalendar.vue +1501 -0
  89. package/src/components/meeting/OSigMeetingCalendar.vue +411 -0
  90. package/src/components/meeting/components/OMeetingCalendarList.vue +462 -0
  91. package/src/components/meeting/components/OMeetingCalendarSelector.vue +206 -0
  92. package/src/components/meeting/components/OMeetingDetail.vue +189 -0
  93. package/src/components/meeting/components/OMeetingPlaybackSubtitles.vue +611 -0
  94. package/src/components/meeting/components/OMeetingPlaybackVideo.vue +741 -0
  95. package/src/components/meeting/components/OMyCalendarWrapper.vue +160 -0
  96. package/src/components/meeting/components/OSigMeetingAside.vue +197 -0
  97. package/src/components/meeting/config.ts +110 -0
  98. package/src/components/meeting/index.ts +45 -0
  99. package/src/components/meeting/types.ts +167 -0
  100. package/src/components/meeting/utils.ts +106 -0
  101. package/src/draft/Footer.vue +4 -4
  102. package/src/env.d.ts +15 -0
  103. package/src/i18n/en.ts +140 -0
  104. package/src/i18n/index.ts +18 -4
  105. package/src/i18n/zh.ts +140 -0
  106. package/src/index.ts +2 -0
  107. package/tsconfig.json +6 -2
  108. package/vite.config.ts +25 -9
  109. package/npmcachae/_cacache/content-v2/sha512/05/f7/dd881de8b21208ea65cfce17c65f29964c3897505819f81151b9798a3a6ab1a1114324192354ead15cd2c8d93f76cc9929af168066ec9cc7878d0fd87578 +0 -1
  110. package/npmcachae/_cacache/content-v2/sha512/08/b7/879230f8c2f3765920a6fd6113f4687141f1f645f96af7d95a0dee9113d1095d000fb78a5dd55c1860bbfb9b698ef6281b3874b03b2384222f61fe055fc4 +0 -1
  111. package/npmcachae/_cacache/content-v2/sha512/10/a0/a6626613c03ee052925a762e8675878efdf83dac64fafea43beb2a875f7d7c3907bb0ee30761253cd16021fd58911449594e1d3358675cbb7c48e62f220a +0 -1
  112. package/npmcachae/_cacache/content-v2/sha512/2e/a6/7cbcf55a98bbe2ca881d10e982ebf59211a0ec051eaf46eb1914df66cc35ae502ed6888850e51d8f45cd92695bac16961a642bc41508f8d5160a9ab617ab +0 -1
  113. package/npmcachae/_cacache/content-v2/sha512/92/8d/e5259c5d5cc2a625247f3c4d809192ca9482467e23683d74924a11e91a7997ad890b3d26adaf34df66d5329cc7a5fbde6713110cad05107a0b504e4fd4e8 +0 -1
  114. package/npmcachae/_cacache/content-v2/sha512/e9/45/9597d870127c35681155cec5fe52fde4e1aa0f778b996ee371e856aca850ee4c13aba74b0c3d3a89ff0ea4c9e1d33e64e53c31dc9cede0b31012695ee659 +0 -1
  115. package/npmcachae/_cacache/index-v5/16/4a/7195fcc6857299c4ab7e26014a8ae6e3c396507a2c8db3da1b74b005d574 +0 -3
  116. package/npmcachae/_cacache/index-v5/58/f0/4fe556f104b09be642895a82afa463fe560d9a0dc8f507efeef825a6905e +0 -3
  117. package/npmcachae/_cacache/index-v5/67/7d/0b50dc4c09555fc922ccf43c46994f1a0a5ff47dc0a5d5cf41437ac2d3e6 +0 -3
  118. package/npmcachae/_cacache/index-v5/8f/28/353f8839e030ab11aab3e7d9f1b8c053403e9f593cf6d4aa6ec8fdd7610d +0 -3
  119. package/npmcachae/_cacache/index-v5/97/10/0fcf20eb29d0726bd820822f6729718464b591b0e6901217c956740e943c +0 -3
  120. package/npmcachae/_cacache/index-v5/db/89/a0a4f35f593105624ab39339962d9e9b5cc65ed0c346b0732fb8dd73721d +0 -3
  121. package/npmcachae/_logs/2026-03-26T14_10_35_885Z-debug-0.log +0 -171
  122. package/npmcachae/_logs/2026-03-26T14_10_38_617Z-debug-0.log +0 -4227
  123. package/npmcachae/_logs/2026-03-26T14_10_45_316Z-debug-0.log +0 -4228
  124. package/npmcachae/_logs/2026-03-26T14_10_48_169Z-debug-0.log +0 -4228
  125. package/npmcachae/_logs/2026-03-26T14_10_51_306Z-debug-0.log +0 -464
  126. package/npmcachae/_logs/2026-03-26T14_10_53_911Z-debug-0.log +0 -464
  127. package/npmcachae/_logs/2026-03-26T14_10_56_398Z-debug-0.log +0 -464
  128. package/npmcachae/_logs/2026-03-26T14_10_58_861Z-debug-0.log +0 -464
  129. package/npmcachae/_logs/2026-03-26T14_11_01_337Z-debug-0.log +0 -464
  130. package/npmcachae/_logs/2026-03-26T14_11_03_851Z-debug-0.log +0 -464
  131. package/npmcachae/_logs/2026-03-26T14_11_08_024Z-debug-0.log +0 -464
  132. package/npmcachae/_update-notifier-last-checked +0 -0
  133. package/src/components/meeting/npmcachae/_cacache/content-v2/sha512/3e/17/1865217b9acb9f4921c53a09b5c76587cd2ab748beb2699ff6cfb1341d73b1aa56ed91ffc5ab2c9c9b3fbe626103b35d9a79ff29ff6b8cbb8d89755fe1a2 +0 -1
  134. package/src/components/meeting/npmcachae/_cacache/content-v2/sha512/a6/15/47bb7552ec9248079e839a5feecc1742d4de19524fdf041cf581701cf4760a5025106036145e279ba193b07c8fa5b07ae3d75f1b6032f0cb2219115b6167 +0 -1
  135. package/src/components/meeting/npmcachae/_cacache/content-v2/sha512/d1/4c/133b32e09c97101a27a07cc4432f94e470cff02d120d21babcea77c3f5cd436793516dc1a8e282ee1a568f923c148b1a48f4a43233462a530d35e8b41c67 +0 -1
  136. package/src/components/meeting/npmcachae/_cacache/index-v5/54/0d/a4909047714a0a7198bb9bd37020992464e47c79a791889919b84d90aab0 +0 -3
  137. package/src/components/meeting/npmcachae/_cacache/index-v5/8e/2b/21a79778e2ac08cf5663baf83cb35f951995a496007eb2e2f7fba54021a4 +0 -3
  138. package/src/components/meeting/npmcachae/_cacache/index-v5/eb/a0/b70c8132e5b57a0f1e129b8cc941796420a9c147c0baa680710083740898 +0 -2
  139. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_03_54_955Z-debug-0.log +0 -277
  140. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_03_57_842Z-debug-0.log +0 -277
  141. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_00_016Z-debug-0.log +0 -277
  142. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_02_191Z-debug-0.log +0 -277
  143. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_04_425Z-debug-0.log +0 -277
  144. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_06_642Z-debug-0.log +0 -277
  145. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_08_826Z-debug-0.log +0 -277
  146. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_25_36_140Z-debug-0.log +0 -433
  147. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_25_39_573Z-debug-0.log +0 -433
  148. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_25_42_134Z-debug-0.log +0 -212
  149. package/src/components/meeting/npmcachae/_update-notifier-last-checked +0 -0
@@ -0,0 +1,160 @@
1
+ <script setup lang="ts">
2
+ //
3
+ //import { formatDate } from '@/components/meeting/utils.ts';
4
+ //import dayjs from 'dayjs';
5
+ //import {
6
+ // OIcon,
7
+ // OIconArrowLeft,
8
+ // OIconArrowRight,
9
+ // OIconChevronLeft,
10
+ // OIconChevronRight,
11
+ // OScroller,
12
+ //} from '@opensig/opendesign';
13
+ //import { ElCalendar, useLocale } from 'element-plus';
14
+ //import { Locales, useI18n } from '@/i18n';
15
+ //import { computed, nextTick, onMounted, onUnmounted, ref, ref } from 'vue';
16
+ //
17
+ //const { t, locale } = useI18n();
18
+ //const isEn = computed(() => locale.value === Locales.EN);
19
+ //
20
+ //const props = defineProps<{
21
+ // selectedDate: string;
22
+ // allDateList: string[];
23
+ // list: any[]
24
+ //}>();
25
+ //const emits = defineEmits(['change-month', 'load']);
26
+ //const calendarRef = ref(null);
27
+ //
28
+ //const formatYearMonth = (date) => {
29
+ // date = dayjs(date ? date : undefined);
30
+ // if (isEn.value) {
31
+ // return date.format('MMMM YYYY');
32
+ // } else {
33
+ // return date.format('YYYY MM月');
34
+ // }
35
+ //};
36
+ //
37
+ //const cellClick = (e: PointerEvent & any, clickable: boolean) => {
38
+ // if (!clickable || !e.target?.className.includes('date-cell-text')) {
39
+ // e.stopPropagation();
40
+ // e.preventDefault();
41
+ // }
42
+ //};
43
+ //const changeMonth = (val) => {
44
+ // if (!calendarRef.value) {
45
+ // return;
46
+ // }
47
+ // window.scrollTo({
48
+ // top: 0,
49
+ // behavior: 'smooth',
50
+ // });
51
+ // calendarRef.value.selectDate(val);
52
+ // nextTick(() => {
53
+ // emits('change-month', calendarRef.value.selectedDay);
54
+ //
55
+ // });
56
+ //};
57
+ //
58
+ //const calcIfAllDeleted = (date) => {
59
+ // const meetingsOfDate = props.list?.filter((v) => v.date === date) || [];
60
+ // return meetingsOfDate.length && meetingsOfDate.every((v) => v.is_delete);
61
+ //};
62
+ //const load = () => {
63
+ // emits('load');
64
+ //};
65
+ //
66
+ //onMounted(() => {
67
+ // getList();
68
+ // // 添加滚动事件监听
69
+ // window.addEventListener('scroll', handleScroll);
70
+ // // 添加resize监听器
71
+ // window.addEventListener('resize', handleScroll);
72
+ // getHeaderHeight();
73
+ // window.addEventListener('resize', getHeaderHeight);
74
+ //});
75
+ //
76
+ //onUnmounted(() => {
77
+ // window.removeEventListener('scroll', handleScroll);
78
+ // window.removeEventListener('resize', handleScroll);
79
+ // window.removeEventListener('resize', getHeaderHeight);
80
+ // const scrollerContainerEl = scrollerRef.value?.getContainerEl();
81
+ // scrollerContainerEl?.removeEventListener('scroll', scrollerScroll);
82
+ //});
83
+
84
+ </script>
85
+
86
+ <template>
87
+ <!-- <div class="o-my-calendar-wrapper">-->
88
+ <!-- <div class="list-calendar-mb">-->
89
+ <!-- <span>{{ formatYearMonth(selectedDate) }}</span>-->
90
+ <!-- <span>-->
91
+ <!-- <OIcon @click="changeMonth('prev-month')"><OIconChevronLeft /></OIcon>-->
92
+ <!-- <OIcon @click="changeMonth('next-month')"><OIconChevronRight /></OIcon>-->
93
+ <!-- </span>-->
94
+ <!-- </div>-->
95
+ <!-- <div class="list-calendar">-->
96
+ <!-- <ElCalendar ref="calendarRef" v-model="selectedDate">-->
97
+ <!-- <template #header>-->
98
+ <!-- <span>{{ formatYearMonth(selectedDate) }}</span>-->
99
+ <!-- <div>-->
100
+ <!-- <OIcon @click="changeMonth('prev-month')">-->
101
+ <!-- <OIconChevronLeft />-->
102
+ <!-- </OIcon>-->
103
+ <!-- <OIcon @click="changeMonth('next-month')">-->
104
+ <!-- <OIconChevronRight />-->
105
+ <!-- </OIcon>-->
106
+ <!-- </div>-->
107
+ <!-- </template>-->
108
+ <!-- <template #date-cell="{ data }">-->
109
+ <!-- <div-->
110
+ <!-- @click="(e) => cellClick(e, allDateList.includes(data.day))"-->
111
+ <!-- :class="{-->
112
+ <!-- 'date-cell': true,-->
113
+ <!-- 'is-selected': data.isSelected,-->
114
+ <!-- 'is-today': formatDate(data.day) === formatDate(),-->
115
+ <!-- clickable: allDateList.includes(data.day),-->
116
+ <!-- expired: dayjs(formatDate()).isAfter(dayjs(data.day)),-->
117
+ <!-- 'all-deleted': calcIfAllDeleted(data.day),-->
118
+ <!-- }"-->
119
+ <!-- >-->
120
+ <!-- <div class="date-cell-text">-->
121
+ <!-- {{ Number(data.day.split('-')[2]) }}-->
122
+ <!-- </div>-->
123
+ <!-- </div>-->
124
+ <!-- </template>-->
125
+ <!-- </ElCalendar>-->
126
+ <!-- </div>-->
127
+ <!-- <div class="list-wrapper" :class="!list.length ? 'is-empty' : ''">-->
128
+ <!-- <OScroller-->
129
+ <!-- ref="scrollerRef"-->
130
+ <!-- @scrollend="load"-->
131
+ <!-- v-if="list.length"-->
132
+ <!-- :style="{ '&#45;&#45;header-height': headerHeight }"-->
133
+ <!-- class="scroller-container"-->
134
+ <!-- show-type="hover"-->
135
+ <!-- >-->
136
+ <!-- <div class="list-body">-->
137
+ <!-- <div class="list-month-change prev-month" @click="changeMonth('prev-month')">-->
138
+ <!-- <OIcon>-->
139
+ <!-- <OIconArrowLeft />-->
140
+ <!-- </OIcon>-->
141
+ <!-- <span>{{ t('meeting.preMonth') }}</span>-->
142
+ <!-- </div>-->
143
+
144
+ <!-- <slot></slot>-->
145
+ <!-- <div class="list-month-change next-month" @click="changeMonth('next-month')">-->
146
+ <!-- <OIcon>-->
147
+ <!-- <OIconArrowRight />-->
148
+ <!-- </OIcon>-->
149
+ <!-- <span>{{ t('meeting.nextMonth') }}</span>-->
150
+ <!-- </div>-->
151
+ <!-- </div>-->
152
+ <!-- </OScroller>-->
153
+ <!-- </div>-->
154
+ </template>
155
+
156
+ <style scoped lang="scss">
157
+ .o-my-calendar-wrapper {
158
+
159
+ }
160
+ </style>
@@ -0,0 +1,197 @@
1
+ <script setup lang="ts">
2
+ import { OIcon, OIconArrowLeft, OIconArrowRight } from '@opensig/opendesign';
3
+ import IconMeetinging from '~icons/meeting/icon-meet.svg';
4
+ import { getConfig } from '@/components/meeting/utils.ts';
5
+ import { CalendarDataType } from '@/components/meeting';
6
+
7
+ const props = defineProps<{
8
+ data: any[];
9
+ current: number;
10
+ total: number;
11
+ active: string;
12
+ meetingDates: string[];// 会议日期列表
13
+ eventsDates: string[];// 活动日期列表
14
+ }>();
15
+
16
+ const STEP = 1;
17
+
18
+ const emits = defineEmits(['click-date', 'change-month']);
19
+ const clickDate = (date) => {
20
+ emits('click-date', date);
21
+ };
22
+
23
+ const changeMonth = (step) => {
24
+ if (props.current + step >= props.total || props.current + step < 0) return;
25
+ emits('change-month', step);
26
+ };
27
+ </script>
28
+
29
+ <template>
30
+ <div class="o-sig-meeting-aside">
31
+ <template v-for="(d, dIdx) in data" :key="dIdx">
32
+ <div v-for="m in d" :key="m.month" class="month-item">
33
+ <div class="month">{{ m.month.replace(/-/g, '/') }}</div>
34
+ <div class="days">
35
+ <div
36
+ class="day-item"
37
+ v-for="d in m.days"
38
+ :key="d"
39
+ @click="clickDate(`${m.month}-${d}`)"
40
+ :class="active === `${m.month}-${d}` && 'active'"
41
+ >
42
+ <div class="day-d">{{ d }}</div>
43
+ <div class="day-c">
44
+ <OIcon
45
+ v-if="meetingDates.includes(`${m.month}-${d}`)"
46
+ :style="{
47
+ zIndex: getConfig(CalendarDataType.MEETING, 'zIndex'),
48
+ backgroundColor: getConfig(CalendarDataType.MEETING, 'color'),
49
+ }"
50
+ >
51
+ <component :is="getConfig(CalendarDataType.MEETING, 'icon')" />
52
+ </OIcon>
53
+ <OIcon
54
+ v-if="eventsDates.includes(`${m.month}-${d}`)"
55
+ :style="{
56
+ zIndex: getConfig(CalendarDataType.EVENTS, 'zIndex'),
57
+ backgroundColor: getConfig(CalendarDataType.EVENTS, 'color'),
58
+ }"
59
+ >
60
+ <component :is="getConfig(CalendarDataType.EVENTS, 'icon')" />
61
+ </OIcon>
62
+ </div>
63
+ </div>
64
+ </div>
65
+ </div>
66
+ </template>
67
+ <div class="arrow-wrapper">
68
+ <OIcon @click="changeMonth(0 - STEP)" :class="current - STEP < 0 && 'disabled'">
69
+ <OIconArrowLeft />
70
+ </OIcon>
71
+ <OIcon @click="changeMonth(STEP)" :class="current + STEP >= total && 'disabled'">
72
+ <OIconArrowRight />
73
+ </OIcon>
74
+ </div>
75
+ </div>
76
+ </template>
77
+
78
+ <style lang="scss">
79
+ .o-sig-meeting-aside {
80
+ width: 35%;
81
+ flex-shrink: 0;
82
+ padding: var(--o-gap-4) var(--o-gap-6);
83
+ display: flex;
84
+ flex-direction: column;
85
+ border-right: 1px solid var(--o-color-control4);
86
+ @include respond-to('<=pad') {
87
+ padding: var(--o-gap-4);
88
+ border-right: none;
89
+ }
90
+ @include respond-to('phone') {
91
+ padding: 16px;
92
+ .title {
93
+ margin-bottom: var(--o-gap-2);
94
+ }
95
+ }
96
+ @include respond-to('<=pad_v') {
97
+ width: 100%;
98
+ }
99
+
100
+ .month-item {
101
+ margin-bottom: var(--o-gap-3);
102
+
103
+ .month {
104
+ color: var(--o-color-info3);
105
+ margin-bottom: var(--o-gap-2);
106
+ @include tip1;
107
+ }
108
+
109
+ .days {
110
+ gap: var(--o-gap-2);
111
+ display: grid;
112
+ grid-template-columns: repeat(2, 1fr);
113
+
114
+ @include respond-to('<=pad_v') {
115
+ display: flex;
116
+ }
117
+
118
+ .day-item {
119
+ height: 64px;
120
+ border-radius: 4px;
121
+ background-color: var(--o-color-control2-light);
122
+ padding: 8px 12px;
123
+ cursor: pointer;
124
+ border: 1px solid transparent;
125
+
126
+ &:hover,
127
+ &.active {
128
+ background-color: var(--o-color-control3-light);
129
+ border-color: var(--o-color-primary1);
130
+ }
131
+
132
+ .day-d {
133
+ font-weight: 500;
134
+ margin-bottom: var(--o-gap-1);
135
+ }
136
+
137
+ .day-c {
138
+ color: rgb(var(--o-white));
139
+ display: flex;
140
+ flex-wrap: nowrap;
141
+
142
+ .o-icon {
143
+ width: 20px;
144
+ height: 20px;
145
+ font-size: 20px;
146
+ line-height: 1em;
147
+ position: relative;
148
+ border-radius: 50%;
149
+ margin-left: -6px;
150
+
151
+ &:first-child {
152
+ margin-left: 0;
153
+ }
154
+
155
+ svg path {
156
+ fill: currentColor;
157
+ }
158
+ }
159
+ }
160
+ }
161
+ }
162
+ }
163
+
164
+ .arrow-wrapper {
165
+ margin-top: auto;
166
+ display: flex;
167
+ align-items: center;
168
+ justify-content: space-between;
169
+ color: var(--o-color-primary1);
170
+
171
+ .o-icon {
172
+ font-size: 24px;
173
+ cursor: pointer;
174
+
175
+ &.disabled {
176
+ cursor: not-allowed;
177
+ color: var(--o-color-primary4);
178
+ }
179
+
180
+ &:not(.disabled):hover {
181
+ color: var(--o-color-primary2);
182
+ }
183
+ }
184
+ }
185
+
186
+ @include respond-to('<=pad_v') {
187
+ .day-item {
188
+ }
189
+ }
190
+ @include respond-to('<=pad_v') {
191
+ .day-item {
192
+ width: min(128px, calc((100% - var(--o-gap-2)) / 2));
193
+ }
194
+ }
195
+ }
196
+
197
+ </style>
@@ -0,0 +1,110 @@
1
+ import IconAll from '~icons/meeting/icon-all.svg';
2
+ import IconEvent from '~icons/meeting/icon-event.svg';
3
+ import IconMeeting from '~icons/meeting/icon-meet.svg';
4
+ import IconSummit from '~icons/meeting/icon-summit.svg';
5
+ import { useI18n } from '@/i18n';
6
+ import { CalendarDataType, meetingTabT } from './types.ts';
7
+
8
+ const { t } = useI18n();
9
+
10
+ export const TYPE_COLOR_MAP = {
11
+ summit: 'var(--o-color-warning1)',
12
+ events: 'rgba(var(--o-cyan-6))',
13
+ meeting: 'var(--o-color-primary1)',
14
+ };
15
+ export const MEETING_TABS: meetingTabT[] = [
16
+ {
17
+ label: t('meeting.meetingTypeAll'),
18
+ value: CalendarDataType.ALL,
19
+ icon: IconAll,
20
+ },
21
+ {
22
+ label: t('meeting.meetingTypeMeet'),
23
+ value: CalendarDataType.MEETING,
24
+ icon: IconMeeting,
25
+ color: TYPE_COLOR_MAP.meeting,
26
+ zIndex: 3,
27
+ },
28
+ {
29
+ label: t('meeting.meetingTypeEvents'),
30
+ value: CalendarDataType.EVENTS,
31
+ icon: IconEvent,
32
+ color: TYPE_COLOR_MAP.events,
33
+ zIndex: 2,
34
+ },
35
+ {
36
+ label: t('meeting.meetingTypeSummit'),
37
+ value: CalendarDataType.SUMMIT,
38
+ icon: IconSummit,
39
+ color: TYPE_COLOR_MAP.summit,
40
+ zIndex: 1,
41
+ },
42
+ ];
43
+
44
+
45
+ export const INTERVAL_DAY = 0;
46
+ export const INTERVAL_WEEK = 1;
47
+ export const INTERVAL_MONTH = 2;
48
+
49
+ export const CYCLE_TYPE_OPTIONS0 = [
50
+ {
51
+ label: t('meeting.day0'),
52
+ value: INTERVAL_DAY,
53
+ max: 7,
54
+ },
55
+ {
56
+ label: t('meeting.week0'),
57
+ value: INTERVAL_WEEK,
58
+ max: 2,
59
+ },
60
+ {
61
+ label: t('meeting.month0'),
62
+ value: INTERVAL_MONTH,
63
+ max: 1,
64
+ },
65
+ ];
66
+ export const CYCLE_TYPE_OPTIONS = [
67
+ {
68
+ label: t('meeting.day'),
69
+ value: INTERVAL_DAY,
70
+ max: 7,
71
+ },
72
+ {
73
+ label: t('meeting.week'),
74
+ value: INTERVAL_WEEK,
75
+ max: 2,
76
+ },
77
+ {
78
+ label: t('meeting.month'),
79
+ value: INTERVAL_MONTH,
80
+ max: 1,
81
+ },
82
+ ];
83
+ export const WEEKDAY = [
84
+ t('meeting.sunday'),
85
+ t('meeting.monday'),
86
+ t('meeting.tuesday'),
87
+ t('meeting.wednesday'),
88
+ t('meeting.thursday'),
89
+ t('meeting.friday'),
90
+ t('meeting.saturday'),
91
+ ];
92
+
93
+ const getWeekOptions = () => {
94
+ const list = [];
95
+ for (let i = 1; i <= 7; i++) {
96
+ const idx = i % 7;
97
+ list.push({
98
+ value: idx,
99
+ label: WEEKDAY[idx],
100
+ });
101
+ }
102
+ return list;
103
+ };
104
+
105
+ export const INTERVAL_WEEK_OPTIONS = getWeekOptions();
106
+
107
+
108
+ export const EMAIL_REGEX = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
109
+
110
+ export const PROGRESS_COLORS = ['var(--o-color-primary1)', 'var(--o-color-warning1)', 'var(--o-color-success1)'];
@@ -0,0 +1,45 @@
1
+ import type { App } from 'vue';
2
+ import _OMeetingCalendar from './OMeetingCalendar.vue';
3
+ import _OMeetingForm from './OMeetingForm.vue';
4
+ import _OMeetingPlayback from './OMeetingPlayback.vue';
5
+ import _OSigMeetingCalendar from './OSigMeetingCalendar.vue';
6
+ import _OMyMeetingCalendar from './OMyMeetingCalendar.vue';
7
+
8
+ const OMeetingCalendar = Object.assign(_OMeetingCalendar, {
9
+ install(app: App) {
10
+ app.component('OMeetingCalendar', _OMeetingCalendar);
11
+ },
12
+ });
13
+ const OMeetingForm = Object.assign(_OMeetingForm, {
14
+ install(app: App) {
15
+ app.component('OMeetingCalendar', _OMeetingForm);
16
+ },
17
+ });
18
+
19
+ const OMeetingPlayback = Object.assign(_OMeetingPlayback, {
20
+ install(app: App) {
21
+ app.component('OMeetingPlayback', _OMeetingPlayback);
22
+ },
23
+ });
24
+
25
+ const OSigMeetingCalendar = Object.assign(_OSigMeetingCalendar, {
26
+ install(app: App) {
27
+ app.component('OSigMeetingCalendar', _OSigMeetingCalendar);
28
+ },
29
+ });
30
+
31
+ const OMyMeetingCalendar = Object.assign(_OMyMeetingCalendar, {
32
+ install(app: App) {
33
+ app.component('OMyMeetingCalendar', _OMyMeetingCalendar);
34
+ },
35
+ });
36
+
37
+ export {
38
+ OMeetingCalendar,
39
+ OMeetingForm,
40
+ OMeetingPlayback,
41
+ OSigMeetingCalendar,
42
+ OMyMeetingCalendar,
43
+ };
44
+
45
+ export * from './types';
@@ -0,0 +1,167 @@
1
+ // sig组列表
2
+ import { INTERVAL_DAY, INTERVAL_MONTH, INTERVAL_WEEK } from '@/components/meeting/config.ts';
3
+
4
+ export interface GroupItemT {
5
+ id?: number;
6
+ group_name: string;
7
+ maillist?: string;
8
+ }
9
+
10
+ // 会议日历上额外的数据,活动或者峰会
11
+ export enum CalendarDataType {
12
+ ALL = 'all',
13
+ MEETING = 'meeting',
14
+ EVENTS = 'events',
15
+ SUMMIT = 'summit',
16
+ }
17
+
18
+ export interface CalendarOtherDataT {
19
+ id: string;
20
+ name: string;
21
+ url: string;
22
+ dates: string[];
23
+ location?: string;
24
+ address?: string;
25
+ start_date: string;
26
+ end_date: string;
27
+ activity_type: string;
28
+ type: CalendarDataType.EVENTS | CalendarDataType.SUMMIT;
29
+ }
30
+
31
+ export interface OptionItemT {
32
+ label: string;
33
+ value: string | number;
34
+ }
35
+
36
+
37
+ export type PlatformT = 'welink' | 'tencent';
38
+
39
+ // 会议新增、修改
40
+ export interface MeetingPostT {
41
+ id?: number; // 会议id
42
+ topic: string; // 会议主题 128
43
+ sponsor: string; // 会议发起人 20
44
+ group_name: string; // 所属SIG 64
45
+ platform: PlatformT; // 会议平台
46
+ date: string; // 会议日期
47
+ date_range?: string[]; // 日期返回
48
+ time: string; // 会议时间
49
+ start: string; // 会议开始时间
50
+ end: string; // 会议结束时间
51
+ etherpad: string; // etherpad链接
52
+ agenda: string; // 会议议程
53
+ email_list: string; // 通知邮件列表 1020
54
+ is_record: boolean; // 会议录制
55
+ is_cycle: boolean; // 是否重复
56
+ cycle_start_date: string;
57
+ cycle_end_date: string;
58
+ cycle_start: string;
59
+ cycle_end: string;
60
+ cycle_interval: number; // 重复周期, 当intervalType为month时固定为1
61
+ cycle_type: typeof INTERVAL_DAY | typeof INTERVAL_WEEK | typeof INTERVAL_MONTH; // 重复类型,默认为INTERVAL_DAY
62
+ cycle_point: number[]; // 重复节点,当intervalType为week|month时存在值
63
+ is_notify?: boolean;
64
+ }
65
+
66
+ // sig组列表
67
+ export interface GroupItemT {
68
+ id?: number;
69
+ group_name: string;
70
+ maillist?: string;
71
+ }
72
+
73
+ // 会议详情
74
+ export interface MeetingItemT extends MeetingPostT {
75
+ id: number;
76
+ community: string;
77
+ mid: string;
78
+ m_mid: string;
79
+ join_url: string; // 会议链接
80
+ create_time: string; // 创建时间
81
+ isEnd: boolean; // 是否结束
82
+ is_delete: boolean; // 是否取消
83
+ update_time: string;
84
+ time: string; // 处理一下时间范围
85
+ cycle_sub: any[];
86
+ }
87
+
88
+ export interface PageParamsT {
89
+ page: number;
90
+ size: number;
91
+ }
92
+
93
+ export interface OptionItemT {
94
+ label: string;
95
+ value: string | number;
96
+ }
97
+
98
+ export interface meetingTabT {
99
+ label: string;
100
+ value: string;
101
+ icon: any;
102
+ color?: string;
103
+ zIndex?: number;
104
+ }
105
+
106
+
107
+ // -------------------- 会议回放 --------------------
108
+ interface MeetingPlaybackPropsDetailT {
109
+ topic: string; // 会议主题
110
+ date: string; // 会议日期
111
+ start: string; // 会议开始时间
112
+ end: string; // 会议结束时间
113
+ agenda: string; // 会议详情
114
+ sponsor: string; // 会议创建人
115
+ groupName: string; // 会议所属sig组
116
+ }
117
+
118
+ interface MeetingPlaybackPropsDataT {
119
+ mid: string; // 会议ID
120
+ subId?: string; //子会议ID
121
+ textJson: string; // 字幕json文件
122
+ poster: string; // 封面
123
+ video: string; // 录屏
124
+ textVtt: string; // 字幕文件
125
+ topicJson: string; // 议题分段
126
+ }
127
+
128
+ export interface MeetingPlaybackPropsT {
129
+ dates: string[]; // 如果是周期会议,传入可选的日期
130
+ detail: MeetingPlaybackPropsDetailT; // 会议信息
131
+ data: MeetingPlaybackPropsDataT; // 回放信息
132
+ }
133
+
134
+ export interface SubjectItemT {
135
+ title: string; // 议题
136
+ startTime: string | number; // 议题开始时间 时:分:秒格式
137
+ endTime: string | number; // 议题结束时间 时:分:秒格式
138
+ }
139
+
140
+
141
+ export interface CaptionItemT {
142
+ ID: number; // 字幕id
143
+ start_time: string; // 字幕开始时间
144
+ end_time: string; // 字幕结束时间
145
+ speaker: string; // 发言人
146
+ content: string; // 发言内容
147
+ contentHtml: string; // 发言内容转html
148
+ speakerIdx: number; // 当前发言人索引
149
+ speakerLabel: string; // 发言人文案
150
+ }
151
+
152
+
153
+ export interface MeetingPlaybackVideoPropsT {
154
+ src: string; // 视频资源
155
+ vtt?: string; // 字幕资源
156
+ captions?: CaptionItemT[]; // 语言转文字json
157
+ poster?: string | null; // 封面图片
158
+ posterTitle?: string | null; // 封面文案
159
+ instance?: any; // 播放器实例
160
+ trackIdx: number; // 当前字幕索引
161
+ }
162
+
163
+ export interface MeetingPlaybackSubtitlesPropsT {
164
+ captions?: CaptionItemT[]; // 语言转文字json
165
+ instance?: any; // 播放器实例
166
+ trackIdx: number; // 当前字幕索引
167
+ }