@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,548 +0,0 @@
1
- <script setup lang="ts">
2
-
3
- import {
4
- OButton,
5
- OForm,
6
- OFormItem,
7
- OInput,
8
- OOption,
9
- OSelect,
10
- OTextarea,
11
- RulesT, SelectValueT,
12
- useMessage,
13
- } from '@opensig/opendesign';
14
- import { computed, ref, watch } from 'vue';
15
- import { ActivityFormPropsT, ParamsItemT } from './types';
16
- import { useScreen } from '@opendesign-plus/composables';
17
- import { dayjs, ElDatePicker } from 'element-plus';
18
- import { WEBSITE_REGEXP } from './config';
19
- import { EMAIL_REGEX } from '@/components/meeting/config.ts';
20
- import { useI18n } from '@/i18n';
21
- import { useActivityConfig } from './composables/useActivityConfig';
22
-
23
- const emits = defineEmits(['confirm', 'close']);
24
-
25
- const message = useMessage(null);
26
- const { lePadV } = useScreen();
27
- const { t } = useI18n();
28
- const $t = t;
29
- const { activityTypeMap } = useActivityConfig();
30
-
31
- interface TypeOptionT {
32
- label: string;
33
- value: number;
34
- }
35
-
36
- const props = withDefaults(defineProps<ActivityFormPropsT>(), {});
37
- const isEdit = computed(() => !!props.data);
38
- const form = ref<ParamsItemT>({
39
- title: '',
40
- organizer: '',
41
- start_date: '',
42
- end_date: '',
43
- register_end_date: '',
44
- activity_type: '',
45
- synopsis: '',
46
- register_url: '',
47
- content_url: '',
48
- address: '',
49
- start: '',
50
- end: '',
51
- is_publish: 'true',
52
- email_list: '',
53
- approver: '',
54
- });
55
-
56
- const formRef = ref(); // 表单实例
57
- const loading = ref(false); // 提交状态
58
-
59
-
60
- // 表单校验规则
61
- const rules = ref<Record<string, RulesT[]>>({
62
- title: [
63
- { required: true, message: t('meeting.enterActivityName') },
64
- {
65
- validator: (value: string) => {
66
- if (value.length > 50) {
67
- return {
68
- type: 'danger',
69
- message: t('meeting.activityNameMaxLength'),
70
- };
71
- }
72
- },
73
- },
74
- ],
75
- activity_type: [{ required: true, message: t('meeting.selectActivityType') }],
76
- organizer: [{ required: true, message: t('meeting.selectActivityOrganizer') }],
77
- start_date: [
78
- { required: true, message: t('meeting.selectActivityTime') },
79
- {
80
- validator: () => {
81
- const { start_date, end_date } = form.value;
82
- const startDate = start_date.split(' ');
83
- const endDate = end_date.split(' ');
84
- if (!start_date || !end_date) {
85
- return {
86
- type: 'danger',
87
- message: t('meeting.selectActivityDate'),
88
- };
89
- }
90
-
91
- const startArr = startDate[1].split(':').map(Number);
92
- const endArr = endDate[1].split(':').map(Number);
93
- if (startArr[0] < 8 || startArr[0] > 21 || endArr[0] < 8 || endArr[0] > 21) {
94
- return {
95
- type: 'danger',
96
- message: t('meeting.activityTimeRange'),
97
- };
98
- }
99
-
100
- if (dayjs(start_date).valueOf() > dayjs(end_date).valueOf()) {
101
- return {
102
- type: 'danger',
103
- message: t('meeting.endDateAfterStartDate'),
104
- };
105
- }
106
-
107
- form.value.start_date = startDate[0];
108
- form.value.end_date = endDate[0];
109
- form.value.start = startDate[1];
110
- form.value.end = endDate[1];
111
- },
112
- triggers: ['blur', 'change'],
113
- },
114
- ],
115
- register_end_date: [
116
- {
117
- validator: () => {
118
- const { register_end_date, end_date, end } = form.value;
119
- if (register_end_date && dayjs(`${ end_date } ${ end }`).valueOf() < dayjs(register_end_date).valueOf()) {
120
- return {
121
- type: 'danger',
122
- message: t('meeting.registerDeadlineBeforeEnd'),
123
- };
124
- }
125
- },
126
- triggers: ['blur', 'change'],
127
- },
128
- ],
129
- address: [
130
- { required: true, message: t('meeting.enterActivityAddress') },
131
- {
132
- validator: (value: string) => {
133
- if (value.length > 255) {
134
- return {
135
- type: 'danger',
136
- message: t('meeting.activityAddressMaxLength'),
137
- };
138
- }
139
- },
140
- },
141
- ],
142
- register_url: [
143
- {
144
- validator: (value: string) => {
145
- const str = value.replaceAll(' ', '') || '';
146
- if (str.length) {
147
- const list = str.split(';') || [];
148
- if (list.some((v) => !WEBSITE_REGEXP.test(v))) {
149
- return {
150
- type: 'danger',
151
- message: t('meeting.invalidRegistrationUrl'),
152
- };
153
- }
154
- }
155
- },
156
- triggers: ['blur', 'change'],
157
- },
158
- ],
159
- content_url: [
160
- {
161
- validator: (value: string) => {
162
- const str = value.replaceAll(' ', '') || '';
163
- if (str.length) {
164
- const list = str.split(';') || [];
165
- if (list.some((v) => !WEBSITE_REGEXP.test(v))) {
166
- return {
167
- type: 'danger',
168
- message: t('meeting.invalidActivityDetailUrl'),
169
- };
170
- }
171
- }
172
- },
173
- triggers: ['blur', 'change'],
174
- },
175
- ],
176
- synopsis: [{
177
- validator: (value: string) => {
178
- if (value.length > 1000) {
179
- return {
180
- type: 'danger',
181
- message: t('meeting.activityContentMaxLength'),
182
- };
183
- }
184
- },
185
- }],
186
- email_list: [{
187
- validator: (value: string) => {
188
- const str = value.replaceAll(' ', '').replaceAll(',', ';') || '';
189
- if (str.length) {
190
- if (str.length > 1020) {
191
- return {
192
- type: 'danger',
193
- message: t('meeting.emailTooLong'),
194
- };
195
- }
196
- const list = str.split(';') || [];
197
- if (list.some((v) => !EMAIL_REGEX.test(v))) {
198
- return {
199
- type: 'danger',
200
- message: t('meeting.emailInvalid'),
201
- };
202
- }
203
- if (list.some((v) => v.length > 50)) {
204
- return {
205
- type: 'danger',
206
- message: t('meeting.singleEmailTooLong'),
207
- };
208
- }
209
- if (list.length > 20) {
210
- return {
211
- type: 'danger',
212
- message: t('meeting.emailCountTooLong'),
213
- };
214
- }
215
- }
216
- },
217
- triggers: ['blur', 'change'],
218
- }],
219
- approver: [{ required: true, message: t('meeting.selectActivityApprover') }],
220
- });
221
-
222
-
223
- // -------------------- 活动管理员 ---------------------
224
- const approverList = computed(() => {
225
- return props.admins || [];
226
- });
227
-
228
- const typeValue = ref<string | undefined>('');
229
- const typeOptions = ref<TypeOptionT[]>([]); // 活动类型
230
- activityTypeMap.value.forEach((item) => {
231
- typeOptions.value.push(item);
232
- });
233
- const changeType = (val: SelectValueT) => {
234
- const item = typeOptions.value.find((v) => v.label === val);
235
- form.value.activity_type = item?.value as number;
236
- };
237
-
238
- const disabledDate = (date: Date) => {
239
- return date.getTime() < Date.now() - 24 * 60 * 60 * 1000;
240
- };
241
-
242
- watch(
243
- () => props.data,
244
- (val) => {
245
- if (val) {
246
- const {
247
- title,
248
- start_date,
249
- end_date,
250
- register_end_date,
251
- activity_type,
252
- register_url,
253
- content_url,
254
- address,
255
- start,
256
- end,
257
- is_publish,
258
- approver,
259
- update_activity_id,
260
- synopsis,
261
- email_list,
262
- organizer,
263
- } = val;
264
- let params = {
265
- title,
266
- start_date,
267
- end_date,
268
- register_end_date,
269
- activity_type,
270
- register_url,
271
- content_url,
272
- address,
273
- start,
274
- end,
275
- is_publish,
276
- approver,
277
- update_activity_id,
278
- synopsis,
279
- email_list,
280
- organizer,
281
- } as ParamsItemT;
282
- form.value = { ...params };
283
- typeValue.value = activityTypeMap.value.get(Number(val.activity_type))?.label;
284
- form.value.start_date = `${ form.value.start_date } ${ form.value.start }`;
285
- form.value.end_date = `${ form.value.end_date } ${ form.value.end }`;
286
- }
287
- },
288
- { immediate: true, deep: true },
289
- );
290
-
291
- const confirm = async (val: boolean) => {
292
- let type = isEdit.value ? t('meeting.modifyActivity') : val ? t('meeting.create') : t('meeting.saveDraft');
293
- try {
294
- const valid = await formRef.value?.validate();
295
- if (valid.some((v: any) => !!v)) {
296
- return;
297
- }
298
- loading.value = true;
299
- form.value.is_publish = `${ val }`;
300
- let flag = undefined;
301
- if (isEdit.value && props.data?.status === 3) {
302
- form.value.update_activity_id = props.data?.id;
303
- flag = await props.creatActivity?.(form.value);
304
- } else if (isEdit.value) {
305
- flag = await props.editActivity?.(props.data?.id, form.value);
306
- } else {
307
- flag = await props.creatActivity?.(form.value);
308
- }
309
- if (typeof flag === 'boolean' && !flag) {
310
- return;
311
- }
312
- message.success({
313
- content: t('meeting.activityActionSuccess', [form.value.title, type.toLowerCase()]),
314
- });
315
- close();
316
- emits('confirm');
317
- } finally {
318
- loading.value = false;
319
- }
320
- };
321
- const close = () => {
322
- form.value = {} as ParamsItemT;
323
- emits('close');
324
- };
325
-
326
-
327
- defineExpose({
328
- confirm,
329
- });
330
- </script>
331
-
332
- <template>
333
- <div class="o-activity-form">
334
- <OForm
335
- :model="form"
336
- ref="formRef"
337
- has-required
338
- label-width="108px"
339
- :layout="lePadV ? 'v' : 'h'"
340
- class="form-wrapper"
341
- >
342
- <OFormItem :rules="rules.title" :label="t('meeting.activityName')" field="title">
343
- <OInput size="large" :placeholder="t('meeting.enterActivityName')" v-model="form.title" />
344
- </OFormItem>
345
- <OFormItem :rules="rules.organizer" :label="t('meeting.activityOrganizer')" field="organizer">
346
- <OSelect :placeholder="t('meeting.selectActivityOrganizer')" size="large" v-model="form.organizer">
347
- <OOption v-for="t in organizers" :key="t.name" :value="t.name">{{ t.name }}</OOption>
348
- </OSelect>
349
- </OFormItem>
350
- <OFormItem :rules="rules.activity_type" :label="t('meeting.activityType')" field="activity_type">
351
- <OSelect :placeholder="t('meeting.selectActivityType')" size="large" v-model="typeValue" @change="changeType">
352
- <OOption v-for="t in typeOptions" :key="t.value" :value="t.label">{{ t.label }}</OOption>
353
- </OSelect>
354
- </OFormItem>
355
- <OFormItem
356
- v-if="form.activity_type === 1 || form.activity_type === 3"
357
- :rules="rules.address"
358
- :label="t('meeting.activityAddress')"
359
- field="address"
360
- >
361
- <OInput size="large" :placeholder="t('meeting.enterActivityAddress')" v-model="form.address" />
362
- </OFormItem>
363
- <OFormItem :rules="rules.start_date" :label="t('meeting.activityTime')" field="start_date" required>
364
- <div class="time-config">
365
- <OFormItem :label="t('meeting.startDate')" field="start_date">
366
- <ElDatePicker
367
- size="large"
368
- v-model="form.start_date"
369
- type="datetime"
370
- :placeholder="t('meeting.selectDate')"
371
- format="YYYY/MM/DD HH:mm"
372
- value-format="YYYY-MM-DD HH:mm"
373
- :disabled-date="disabledDate"
374
- :clearable="false"
375
- class="date-activity"
376
- />
377
- </OFormItem>
378
- <OFormItem :label="t('meeting.endDate')" field="end_date">
379
- <ElDatePicker
380
- size="large"
381
- v-model="form.end_date"
382
- type="datetime"
383
- :placeholder="t('meeting.selectDate')"
384
- format="YYYY/MM/DD HH:mm"
385
- value-format="YYYY-MM-DD HH:mm"
386
- :disabled-date="disabledDate"
387
- :clearable="false"
388
- class="date-activity"
389
- />
390
- </OFormItem>
391
- </div>
392
- </OFormItem>
393
- <OFormItem :rules="rules.register_end_date" :label="t('meeting.registrationDeadline')" field="register_end_date">
394
- <ElDatePicker
395
- size="large"
396
- v-model="form.register_end_date"
397
- type="datetime"
398
- :placeholder="t('meeting.selectActivityDeadline')"
399
- format="YYYY/MM/DD HH:mm"
400
- value-format="YYYY-MM-DD HH:mm"
401
- :clearable="false"
402
- class="date-activity"
403
- />
404
- </OFormItem>
405
- <OFormItem :rules="rules.register_url" :label="t('meeting.registrationUrl')" field="register_url">
406
- <OInput size="large" :placeholder="t('meeting.enterActivityRegistrationUrl')" v-model="form.register_url" />
407
- </OFormItem>
408
- <OFormItem :rules="rules.content_url" :label="t('meeting.activityDetailUrl')" field="content_url">
409
- <OInput size="large" :placeholder="t('meeting.enterActivityDetailUrl')" v-model="form.content_url" />
410
- </OFormItem>
411
- <OFormItem :rules="rules.synopsis" :label="t('meeting.activityContent')" field="synopsis">
412
- <OTextarea size="large" :placeholder="t('meeting.enterActivityContent')" v-model="form.synopsis" />
413
- </OFormItem>
414
- <OFormItem field="email_list" :rules="rules.email_list" :label="t('meeting.email')">
415
- <OTextarea
416
- :disabled="isEdit"
417
- size="large"
418
- :placeholder="$t('meeting.enterEmail')"
419
- :rows="4"
420
- v-model="form.email_list" />
421
- </OFormItem>
422
- <OFormItem :rules="rules.approver" :label="t('meeting.activityApprover')" field="approver">
423
- <OSelect :placeholder="t('meeting.selectActivityApprover')" size="large" v-model="form.approver">
424
- <OOption v-for="t in approverList" :key="t" :value="t">{{ t }}</OOption>
425
- </OSelect>
426
- </OFormItem>
427
- </OForm>
428
- <div class="form-btns">
429
- <OButton color="primary" variant="solid" size="large" round="pill" @click="confirm(true)" :loading="loading">
430
- {{ isEdit ? t('common.save') : t('meeting.create') }}
431
- </OButton>
432
- <OButton
433
- v-if="!isEdit"
434
- color="primary"
435
- variant="outline"
436
- round="pill"
437
- size="large"
438
- @click="confirm(false)"
439
- :loading="loading"
440
- >
441
- {{ t('meeting.saveDraft') }}
442
- </OButton>
443
- <OButton color="primary" variant="outline" size="large" round="pill" @click="close">{{ t('meeting.cancelBtn') }}
444
- </OButton>
445
- </div>
446
- </div>
447
- </template>
448
-
449
- <style lang="scss">
450
- .o-activity-form {
451
- --activity-card-radius: var(--o-radius-xs);
452
- --activity-input-radius: var(--o-radius-xs);
453
- .form-wrapper {
454
- & > .o-form-item {
455
- max-width: 620px;
456
- }
457
- }
458
-
459
- .o-form {
460
- --o-input-color: var(--o-color-info2);
461
- --o-placeholder-color: var(--o-color-info4);
462
-
463
- &.o-form-layout-h {
464
- .o-form-item-label {
465
- height: var(--o-control_size-l);
466
- margin: 0;
467
- }
468
- }
469
-
470
- &.o-form-layout-v {
471
- .o-form-item-label {
472
- margin-bottom: var(--o-gap-2);
473
- }
474
-
475
- .o-form-item-main {
476
- margin-left: 0;
477
- }
478
- }
479
-
480
- .o-select {
481
- width: 100%;
482
- }
483
-
484
- .o-input {
485
- width: 100%;
486
- }
487
-
488
- .o-textarea {
489
- --_box-radius: var(--activity-input-radius);
490
- width: 100%;
491
- }
492
-
493
- .el-input {
494
- width: 100%;
495
- }
496
-
497
- .el-input__wrapper {
498
- border-radius: var(--activity-input-radius);
499
- }
500
-
501
- .time-config {
502
- width: 100%;
503
- background-color: color-mix(in srgb, var(--o-color-control2-light) 40%, transparent);
504
- padding: var(--o-gap-5);
505
- padding-right: calc(var(--o-gap-4) + var(--o-gap-5));
506
- border-radius: var(--activity-card-radius);
507
- @include respond('<=pad_v') {
508
- padding: var(--o-gap-4);
509
- }
510
-
511
- .o-form-item {
512
- align-items: center;
513
- }
514
-
515
- .o-form-item-label {
516
- flex: 0 0 88px;
517
- }
518
- }
519
- }
520
- }
521
-
522
- .form-btns {
523
- margin-top: var(--o-gap-5);
524
- display: flex;
525
- align-items: center;
526
-
527
- .o-btn + .o-btn {
528
- margin-left: var(--o-gap-4);
529
- }
530
-
531
- @include respond('<=pad_v') {
532
- .o-btn {
533
- --btn-min-width: 74px;
534
- }
535
- }
536
- }
537
- </style>
538
- <style lang="scss">
539
- .date-activity {
540
- .el-input__inner {
541
- @include text1;
542
- }
543
-
544
- .el-input__inner::placeholder {
545
- color: var(--o-color-info4);
546
- }
547
- }
548
- </style>