@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,213 +0,0 @@
1
- <script setup lang="ts">
2
- import { OButton } from '@opensig/opendesign';
3
- import { ElSelect, ElOption } from 'element-plus';
4
- import { computed, ref, watchEffect } from 'vue';
5
- import { useI18n } from '@/i18n';
6
-
7
- const { t } = useI18n();
8
- const props = withDefaults(
9
- defineProps<{
10
- modelValue: number[];
11
- multiple?: boolean;
12
- }>(),
13
- {
14
- modelValue: () => [],
15
- multiple: false,
16
- },
17
- );
18
- const emits = defineEmits(['update:modelValue']);
19
- // 默认31天
20
- const getList = () => {
21
- let res = [];
22
- for (let i = 1; i <= 31; i++) {
23
- res.push(i);
24
- }
25
- return res;
26
- };
27
-
28
- const list = computed(() => getList());
29
- const checked = ref<number[]>([]);
30
- const temp = ref<number[]>([]);
31
- const selectorRef = ref<InstanceType<typeof ElSelect> | null>(null);
32
-
33
- const init = () => {
34
- checked.value = [...props.modelValue];
35
- temp.value = [...props.modelValue];
36
- };
37
-
38
- watchEffect(() => {
39
- init();
40
- });
41
-
42
- const confirm = () => {
43
- emits('update:modelValue', temp.value);
44
- if (selectorRef.value) {
45
- selectorRef.value.expanded = false;
46
- }
47
- };
48
-
49
- const cancel = () => {
50
- init();
51
- if (selectorRef.value) {
52
- selectorRef.value.expanded = false;
53
- }
54
- };
55
-
56
- const clickItem = (val: number) => {
57
- if (props.multiple) {
58
- const idx = temp.value.indexOf(val);
59
- if (idx === -1) {
60
- temp.value.push(val);
61
- } else {
62
- temp.value.splice(idx, 1);
63
- }
64
- temp.value.sort();
65
- } else {
66
- temp.value = [val];
67
- confirm();
68
- }
69
- };
70
-
71
- const removeTag = (val: number) => {
72
- if (props.multiple) {
73
- clickItem(val);
74
- } else {
75
- temp.value = [];
76
- }
77
- confirm();
78
- };
79
- </script>
80
-
81
- <template>
82
- <div class="o-meeting-calendar-selector" :class="!multiple && 'is-single'">
83
- <ElSelect
84
- ref="selectorRef"
85
- popper-class="o-meeting-calendar-selector-popper"
86
- :placeholder="t('meeting.selectRepeatDate')"
87
- size="large"
88
- multiple
89
- collapseTags
90
- :maxCollapseTags="3"
91
- :modelValue="checked"
92
- @remove-tag="removeTag"
93
- >
94
- <ElOption
95
- v-for="t in list"
96
- :key="t"
97
- :label="t"
98
- :value="t"
99
- @click="clickItem(t)"
100
- :class="temp.includes(t) && 'is-checked'" />
101
- <template #footer v-if="multiple">
102
- <OButton round="pill" color="primary" variant="outline" @click="confirm">{{ t('common.confirm') }}</OButton>
103
- <OButton variant="text" @click="cancel">{{ t('common.cancel') }}</OButton>
104
- </template>
105
- </ElSelect>
106
- </div>
107
- </template>
108
-
109
- <style lang="scss">
110
- .o-meeting-calendar-selector {
111
- width: 100%;
112
-
113
- .el-select {
114
- .el-select__placeholder {
115
- @include text1;
116
- }
117
-
118
- .el-select__icon {
119
- height: 24px;
120
- font-size: 24px;
121
- margin-right: 2px;
122
- color: var(--o-color-info1);
123
- background-color: var(--o-color-info2);
124
- mask: url(@/assets/meeting/svg-icons/icon-calendar.svg) no-repeat center;
125
- background-size: 24px;
126
- background-repeat: no-repeat;
127
- background-position: center center;
128
- transform: rotateZ(0deg);
129
-
130
- svg {
131
- display: none;
132
- }
133
- }
134
- }
135
-
136
- &.is-single {
137
- .el-select {
138
- .el-select__selection {
139
- margin-left: 0;
140
- }
141
-
142
- .el-tag {
143
- padding: 0;
144
- background-color: transparent;
145
- color: var(--o-color-info1);
146
- @include text1;
147
-
148
- .el-tag__close {
149
- display: none;
150
- }
151
- }
152
- }
153
- }
154
- }
155
- </style>
156
- <style lang="scss">
157
- .o-meeting-calendar-selector-popper {
158
- --meeting-card-radius: var(--o-radius-xs);
159
- --meeting-input-radius: var(--o-radius-xs);
160
- --meeting-cell-radius: var(--o-radius-xs);
161
- padding: 0 var(--o-gap-5);
162
-
163
- .el-select-dropdown__list {
164
- padding: 16px 0;
165
- display: flex;
166
- gap: 12px 8px;
167
- flex-wrap: wrap;
168
- width: 272px;
169
-
170
- .el-select-dropdown__item {
171
- padding: 0;
172
- width: 32px;
173
- height: 24px;
174
- display: flex;
175
- align-items: center;
176
- justify-content: center;
177
- background-color: var(--o-color-fill2);
178
- color: var(--o-color-info1);
179
- border-radius: var(--meeting-cell-radius);
180
-
181
- &:hover,
182
- &.is-checked {
183
- background-color: var(--o-color-primary1);
184
- color: #fff;
185
- font-weight: inherit;
186
- }
187
-
188
- &.is-selected {
189
- font-weight: inherit;
190
-
191
- &::after {
192
- content: none;
193
- }
194
- }
195
- }
196
- }
197
-
198
- .el-select-dropdown__footer {
199
- padding: 16px 0;
200
- display: flex;
201
- align-items: center;
202
- justify-content: space-between;
203
-
204
- .o-btn {
205
- min-width: fit-content;
206
-
207
- &:last-child {
208
- padding: 0;
209
- }
210
- }
211
- }
212
- }
213
- </style>
@@ -1,285 +0,0 @@
1
- <script setup lang="ts">
2
- import { OLink } from '@opensig/opendesign';
3
- import { computed, ref } from 'vue';
4
- import { CalendarDataType, MeetingItemT } from '../types.ts';
5
- import MoreText from '@/components/common/MoreText.vue';
6
- import { formatDate } from '@/components/meeting/utils.ts';
7
- import { useMeetingConfig } from '../composables/useMeetingConfig';
8
- import { useI18n } from '@/i18n';
9
-
10
- const props = defineProps<{
11
- data: MeetingItemT;
12
- from?: string;
13
- show: boolean;
14
- page?: CalendarDataType
15
- }>();
16
- const { t, getPlatformLabel } = useMeetingConfig();
17
- const { locale } = useI18n();
18
- const isEn = computed(() => locale.value === 'en');
19
- // 会议详情配置
20
- const infoList = computed(() =>
21
- [
22
- { label: t('meeting.meetingDetail'), key: 'agenda', ellipsis: true },
23
- { label: t('meeting.meetingCreator'), key: 'sponsor' },
24
- { label: t('meeting.meetingDate2'), key: 'timeRange', extra: 'date' },
25
- { label: t('meeting.meetingId'), key: 'mid' },
26
- { label: t('meeting.meetingPlatform'), key: 'platform' },
27
- { label: t('meeting.meetingLink'), key: 'join_url', isLink: true },
28
- { label: t('meeting.meetingEtherpad'), key: 'etherpad', isLink: true },
29
- { label: t('meeting.meetingReplay'), key: 'replay_url', isLink: true },
30
- ].slice(0, props.from === 'my' ? 7 : 8),
31
- );
32
-
33
-
34
- const activityInfoList = computed(() => {
35
- const isLive = !!props.data.live_url?.length;
36
- return [
37
- { label: t('meeting.activityDetail2'), key: 'agenda', ellipsis: true },
38
- { label: t('meeting.startDate'), key: 'start_date_time' },
39
- { label: t('meeting.endDate'), key: 'end_date_time' },
40
- { label: t('meeting.registrationDeadline'), key: 'register_end_date' },
41
- { label: isLive ? t('meeting.livePlatform') : t('meeting.activityAddress'), key: isLive ? 'live_url' : 'address' },
42
- { label: t('meeting.activityDetailUrl'), key: 'content_url', isLink: true },
43
- { label: t('meeting.activityApprover'), key: 'approver' },
44
- { label: t('meeting.reviewNotesLabel'), key: 'approve_record', isRecord: true },
45
- ].slice(0, props.from === 'home' ? 5 : 8);
46
- });
47
- const activityInfoApprovalList = computed(() => {
48
- const isLive = !!props.data.live_url?.length;
49
- return [
50
- { label: t('meeting.activityType'), key: 'activity_type', isType: true },
51
- { label: isLive ? t('meeting.livePlatform') : t('meeting.activityAddress'), key: isLive ? 'live_url' : 'address' },
52
- { label: t('meeting.startDate'), key: 'start_date_time' },
53
- { label: t('meeting.endDate'), key: 'end_date_time' },
54
- { label: t('meeting.registrationDeadline'), key: 'register_end_date' },
55
- { label: t('meeting.registrationUrl'), key: 'register_url', isLink: true },
56
- { label: t('meeting.activityDetailUrl'), key: 'content_url', isLink: true },
57
- { label: t('meeting.activityApprover'), key: 'approver' },
58
- { label: t('meeting.reviewNotesLabel'), key: 'approve_record', isRecord: true },
59
- ];
60
- });
61
-
62
- interface ColumnItemT {
63
- label: string;
64
- key: string;
65
- ellipsis?: boolean;
66
- isLink?: boolean;
67
- isRecord?: boolean;
68
- isType?: boolean;
69
- extra?: string;
70
- }
71
-
72
- const getField = (key: string) => {
73
- const val = (props.data as Record<string, any>)[key];
74
- if (key === 'register_end_date' && val) {
75
- return formatDate(val, 'YYYY/MM/DD HH:mm');
76
- }
77
- if (key === 'date' && val) {
78
- if (props.data.is_cycle) {
79
- return '';
80
- }
81
- return formatDate(val);
82
- }
83
- return val;
84
- };
85
-
86
- const columns = computed<ColumnItemT[]>(() => {
87
- if (props.data.type === CalendarDataType.EVENTS) {
88
- if (props.page === CalendarDataType.APPROVAL) {
89
- return activityInfoApprovalList.value;
90
- }
91
- return activityInfoList.value;
92
- }
93
- if (props.data.type === CalendarDataType.SUMMIT) {
94
- return activityInfoList.value;
95
- }
96
- return infoList.value;
97
- });
98
-
99
- const domRef = ref([]);
100
- const SPLIT_MARK = '|';
101
-
102
- const titleMap = ref<Record<CalendarDataType, string>>({
103
- [CalendarDataType.ALL]: t('meeting.meetingTopic'),
104
- [CalendarDataType.MEETING]: t('meeting.meetingTopic'),
105
- [CalendarDataType.EVENTS]: t('meeting.eventsTitle'),
106
- [CalendarDataType.APPROVAL]: t('meeting.eventsTitle'),
107
- [CalendarDataType.SUMMIT]: t('meeting.summitTitle'),
108
- });
109
- // 复制会议内容
110
- const copyInfo = () => {
111
- try {
112
- const colon = !isEn.value ? ':' : ': ';
113
- let text = `${ titleMap.value[props.data.type] ?? t('meeting.meetingTopic') }${ colon }${ props.data.topic || props.data.name || props.data.title }\n`;
114
- text += [...domRef.value].reduce((pre, cur: HTMLDivElement) => {
115
- if (cur.textContent) {
116
- return `${ pre }${ cur.textContent ? cur.textContent.replace(SPLIT_MARK, colon) : '' }\n`;
117
- }
118
- return pre;
119
- }, '');
120
- navigator.clipboard.writeText(text);
121
- return Promise.resolve();
122
- } catch (e) {
123
- return Promise.reject(e);
124
- }
125
- };
126
- defineExpose({ copyInfo });
127
- </script>
128
-
129
- <template>
130
- <div class="o-meeting-detail">
131
- <div
132
- ref="domRef"
133
- class="label-item"
134
- v-for="(info, infoIdx) in columns"
135
- :key="infoIdx"
136
- :class="{
137
- 'record-item': info.isRecord && getField(info.key)?.length,
138
- 'link-item': info.isLink,
139
- 'is-empty':!getField(info.key)?.length,
140
- [`label-item_${data.id}`]: true,
141
- [`type_${data.type}`]: true,
142
- 'is-en': isEn,
143
- }"
144
- >
145
- <template v-if="getField(info.key) && !info.isRecord">
146
- <span class="label">{{ info.label }}</span>
147
- <span class="split-mark">{{ SPLIT_MARK }}</span>
148
- <MoreText :show="show" v-if="info.ellipsis" :text="getField(info.key) || '-'" />
149
- <OLink
150
- v-else-if="info.isLink"
151
- target="_blank"
152
- class="value"
153
- color="primary"
154
- hover-underline
155
- :href="getField(info.key)"
156
- >
157
- {{ getField(info.key) }}
158
- </OLink>
159
- <span v-else-if="info.key === 'platform'">{{ getPlatformLabel(getField(info.key)) }}</span>
160
- <span v-else class="value">
161
- <i v-if="info.extra && getField(info.extra)" class="extra">{{ getField(info.extra) }}</i>
162
- <span class="value-text">{{ getField(info.key) || '-' }}</span>
163
- </span>
164
- </template>
165
- <template v-if="info.isRecord && getField(info.key)?.length">
166
- <span class="label">{{ info.label }}</span>
167
- <div>
168
- <p v-for="re in getField(info.key)" :key="re.create_time" class="value">
169
- {{ re.reason }}&nbsp;&nbsp;
170
- {{ formatDate(re.create_time, 'YYYY/MM/DD HH:mm:ss') }}
171
- {{ re.action === 1 ? t('meeting.approveReview') : t('meeting.rejectReview') }}
172
- </p>
173
- </div>
174
- </template>
175
- </div>
176
- </div>
177
-
178
- </template>
179
-
180
- <style lang="scss">
181
- .o-meeting-detail {
182
- position: relative;
183
- display: grid;
184
- grid-template-columns: auto 1fr;
185
- row-gap: var(--o-gap-2);
186
- column-gap: var(--o-gap-4);
187
-
188
- @include respond('pad_v') {
189
- row-gap: var(--o-gap-2);
190
- column-gap: var(--o-gap-2);
191
- }
192
- @include respond('phone') {
193
- row-gap: var(--o-gap-2);
194
- column-gap: var(--o-gap-4);
195
- }
196
-
197
- .label-item {
198
- color: var(--o-color-info3);
199
- display: grid;
200
- grid-template-columns: auto 1fr;
201
- grid-template-columns: subgrid;
202
- grid-column: 1 / -1;
203
- align-items: start;
204
- font-size: 14px;
205
- line-height: 22px;
206
- @include respond('<=pad_v') {
207
- font-size: 12px;
208
- line-height: 18px;
209
- }
210
-
211
- &.record-item {
212
- align-items: start;
213
-
214
- .value {
215
- margin-bottom: 0;
216
- }
217
- }
218
-
219
- .label {
220
- white-space: nowrap;
221
- flex-shrink: 0;
222
- display: flex;
223
-
224
- i {
225
- width: 0;
226
- height: 0;
227
- opacity: 0;
228
- overflow: hidden;
229
- }
230
- }
231
-
232
- .split-mark {
233
- display: none;
234
- }
235
-
236
- .o-link {
237
- font-size: 14px;
238
- line-height: 22px;
239
- @include respond('<=pad_v') {
240
- font-size: 12px;
241
- line-height: 18px;
242
- }
243
- .o-link-main {
244
- word-wrap: break-word;
245
- @include text-truncate(3);
246
- }
247
- }
248
-
249
- .value {
250
- display: flex;
251
- align-items: flex-start;
252
-
253
- &.link {
254
- color: var(--o-color-primary1);
255
- cursor: pointer;
256
- }
257
-
258
- .extra {
259
- width: 0;
260
- height: 0;
261
- opacity: 0;
262
- overflow: hidden;
263
- }
264
- }
265
- }
266
-
267
- .label-item.is-empty {
268
- display: none;
269
- }
270
-
271
- .meeting-action {
272
- display: flex;
273
- align-items: center;
274
- justify-content: flex-end;
275
- gap: var(--o-gap-2);
276
-
277
- @include respond('phone') {
278
- border-top: 1px solid var(--o-color-control4);
279
- padding-top: var(--o-gap-2);
280
- position: static;
281
- margin-top: var(--o-gap-2);
282
- }
283
- }
284
- }
285
- </style>