@opendesign-plus-test/components 0.0.1-rc.59 → 0.0.1-rc.60
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.
- package/dist/chunk-OElCookieNotice.cjs.js +1 -1
- package/dist/chunk-OElCookieNotice.es.js +28 -28
- package/dist/components/OBanner.vue.d.ts +11 -0
- package/dist/components/OHeaderSearch.vue.d.ts +22 -22
- package/dist/components/OHeaderUser.vue.d.ts +1 -1
- package/dist/components/OThemeSwitcher.vue.d.ts +1 -1
- package/dist/components/activity/OActivityMyCalendar.vue.d.ts +4 -4
- package/dist/components/activity/index.d.ts +2 -2
- package/dist/components/header/types.d.ts +0 -1
- package/dist/components/meeting/OMeetingCalendar.vue.d.ts +2 -2
- package/dist/components/meeting/OMeetingForm.vue.d.ts +2 -0
- package/dist/components/meeting/OMeetingMyCalendar.vue.d.ts +4 -4
- package/dist/components/meeting/components/OMeetingCalendarSelector.vue.d.ts +1 -1
- package/dist/components/meeting/index.d.ts +9 -3
- package/dist/components/meeting/types.d.ts +4 -2
- package/dist/components/search/OSearchInput.vue.d.ts +22 -22
- package/dist/components/search/index.d.ts +11 -11
- package/dist/components/search/internal/SearchImageInput.vue.d.ts +17 -17
- package/dist/components.cjs.js +39 -39
- package/dist/components.css +1 -1
- package/dist/components.es.js +8558 -8725
- package/dist/index.d.ts +2 -3
- package/package.json +3 -3
- package/scripts/generate-components-index.js +1 -1
- package/src/components/OBanner.vue +398 -0
- package/src/components/OHeaderSearch.vue +1 -1
- package/src/components/activity/OActivityMyCalendar.vue +1 -1
- package/src/components/header/types.ts +0 -1
- package/src/components/meeting/OMeetingCalendar.vue +4 -4
- package/src/components/meeting/OMeetingForm.vue +13 -21
- package/src/components/meeting/components/OMeetingCalendarList.vue +2 -6
- package/src/components/meeting/components/OMeetingDetail.vue +3 -17
- package/src/components/meeting/types.ts +4 -2
- package/src/components/search/OSearchInput.vue +2 -2
- package/src/i18n/en.ts +1 -1
- package/src/i18n/zh.ts +1 -1
- package/src/index.ts +3 -4
- package/dist/components/OLanguageSwitcher.vue.d.ts +0 -49
- package/dist/components/banner/OBanner.vue.d.ts +0 -13
- package/dist/components/banner/OBannerContent.vue.d.ts +0 -7
- package/dist/components/banner/index.d.ts +0 -68
- package/dist/components/banner/types.d.ts +0 -31
- package/src/components/OLanguageSwitcher.vue +0 -211
- package/src/components/banner/OBanner.vue +0 -288
- package/src/components/banner/OBannerContent.vue +0 -175
- package/src/components/banner/index.ts +0 -18
- package/src/components/banner/types.ts +0 -39
package/dist/index.d.ts
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
|
+
import { default as OBanner } from './components/OBanner.vue';
|
|
1
2
|
import { default as OCookieNotice } from './components/OCookieNotice.vue';
|
|
2
3
|
import { default as OFooter } from './components/OFooter.vue';
|
|
3
4
|
import { default as OHeaderSearch } from './components/OHeaderSearch.vue';
|
|
4
5
|
import { default as OHeaderUser } from './components/OHeaderUser.vue';
|
|
5
|
-
import { default as OLanguageSwitcher } from './components/OLanguageSwitcher.vue';
|
|
6
6
|
import { default as OPlusConfigProvider } from './components/OPlusConfigProvider.vue';
|
|
7
7
|
import { default as OSection } from './components/OSection.vue';
|
|
8
8
|
import { default as OSourceCode } from './components/OSourceCode.vue';
|
|
9
9
|
import { default as OThemeSwitcher } from './components/OThemeSwitcher.vue';
|
|
10
|
-
export { OCookieNotice, OFooter, OHeaderSearch, OHeaderUser,
|
|
10
|
+
export { OBanner, OCookieNotice, OFooter, OHeaderSearch, OHeaderUser, OPlusConfigProvider, OSection, OSourceCode, OThemeSwitcher };
|
|
11
11
|
export * from './components/activity';
|
|
12
|
-
export * from './components/banner';
|
|
13
12
|
export * from './components/element-plus';
|
|
14
13
|
export * from './components/events';
|
|
15
14
|
export * from './components/header';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opendesign-plus-test/components",
|
|
3
|
-
"version": "0.0.1-rc.
|
|
3
|
+
"version": "0.0.1-rc.60",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"dayjs": "^1.11.13",
|
|
33
33
|
"video.js": "^8.23.7",
|
|
34
34
|
"vue-dompurify-html": "^3.1.2",
|
|
35
|
-
"@opendesign-plus/
|
|
36
|
-
"@opendesign-plus/
|
|
35
|
+
"@opendesign-plus/styles": "0.0.1-rc.2",
|
|
36
|
+
"@opendesign-plus/composables": "0.0.1-rc.8"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@vitejs/plugin-vue": "^5.1.0",
|
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { OButton, OCarousel, OCarouselItem, OFigure } from '@opensig/opendesign';
|
|
3
|
+
import { computed, ref } from 'vue';
|
|
4
|
+
|
|
5
|
+
import { useScreen, useTheme } from '@opendesign-plus/composables';
|
|
6
|
+
import ContentWrapper from './common/ContentWrapper.vue';
|
|
7
|
+
|
|
8
|
+
const props = withDefaults(defineProps<{
|
|
9
|
+
options: any;
|
|
10
|
+
size: string;
|
|
11
|
+
contentJustifyCenter: boolean;
|
|
12
|
+
}>(), {
|
|
13
|
+
options: undefined,
|
|
14
|
+
size: 'large',
|
|
15
|
+
contentJustifyCenter: false,
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
const { isLight } = useTheme('opendesignplus', document.domain || 'localhost');
|
|
19
|
+
const { isPhone } = useScreen();
|
|
20
|
+
|
|
21
|
+
const bannerInfo = computed(() => props.options);
|
|
22
|
+
|
|
23
|
+
// 主题切换
|
|
24
|
+
const theme = ref('');
|
|
25
|
+
const onBeforeChange = (idx: number) => {
|
|
26
|
+
setTimeout(() => {
|
|
27
|
+
theme.value = bannerInfo.value[idx].bg_theme ?? 'light';
|
|
28
|
+
}, 100);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
// banner跳转
|
|
32
|
+
const onClick = (href: string, hasBtn: boolean | undefined) => {
|
|
33
|
+
if (href && !hasBtn) {
|
|
34
|
+
window.open(href);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<template>
|
|
40
|
+
<div :class="['home-banner', size]">
|
|
41
|
+
<div v-if="size === 'tiny'">
|
|
42
|
+
{{ bannerInfo[1].title }}
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
<OCarousel
|
|
46
|
+
v-else-if="!isPhone"
|
|
47
|
+
class="banner-carousel"
|
|
48
|
+
effect="toggle"
|
|
49
|
+
active-class="current-slide"
|
|
50
|
+
indicator-click
|
|
51
|
+
:auto-play="true"
|
|
52
|
+
:data-o-theme="theme"
|
|
53
|
+
@before-change="onBeforeChange"
|
|
54
|
+
>
|
|
55
|
+
<OCarouselItem v-for="(info, index) in bannerInfo" :key="index" class="banner-item" :class="`banner-item${index}`">
|
|
56
|
+
<OFigure
|
|
57
|
+
class="banner-bg"
|
|
58
|
+
:src="info.bg"
|
|
59
|
+
:class="{
|
|
60
|
+
'with-sticky-bg': info.withStickyBg,
|
|
61
|
+
'in-dark': !isLight,
|
|
62
|
+
'cursor-pointer': info.href && !info.btn,
|
|
63
|
+
}"
|
|
64
|
+
:style="{
|
|
65
|
+
'--pad-offset': info.pad_offset,
|
|
66
|
+
}"
|
|
67
|
+
@click="onClick(info.href, info.btn)"
|
|
68
|
+
>
|
|
69
|
+
<ContentWrapper class="banner-wrapper" :class="['banner-wrapper', contentJustifyCenter ? 'content-center' : '']">
|
|
70
|
+
<div class="banner-content">
|
|
71
|
+
<img v-if="!isPhone && info.attach" :src="info.attach" class="banner-attach" />
|
|
72
|
+
|
|
73
|
+
<!-- 标题 -->
|
|
74
|
+
<div class="banner-title" v-if="info.title">{{ info.title }}</div>
|
|
75
|
+
<!-- 副标题 -->
|
|
76
|
+
<div class="banner-subtitle" v-if="info.subtitle">{{ info.subtitle }}</div>
|
|
77
|
+
<div
|
|
78
|
+
class="banner-text"
|
|
79
|
+
v-if="info.bg_text"
|
|
80
|
+
:style="{
|
|
81
|
+
backgroundImage: `url(${info.bg_text})`,
|
|
82
|
+
'--pc-width': info.pc_text_width,
|
|
83
|
+
'--pc-height': info.pc_text_height,
|
|
84
|
+
'--pad-width': info.pad_text_width,
|
|
85
|
+
'--pad-height': info.pad_text_height,
|
|
86
|
+
}"
|
|
87
|
+
></div>
|
|
88
|
+
<!-- 操作按钮 -->
|
|
89
|
+
<div v-if="info.btn" class="banner-opts">
|
|
90
|
+
<OButton :href="info.href" target="_blank" variant="solid" color="primary" :size="size">
|
|
91
|
+
{{ info.btn }}
|
|
92
|
+
</OButton>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
</ContentWrapper>
|
|
96
|
+
</OFigure>
|
|
97
|
+
</OCarouselItem>
|
|
98
|
+
</OCarousel>
|
|
99
|
+
|
|
100
|
+
<OCarousel
|
|
101
|
+
v-else-if="isPhone"
|
|
102
|
+
class="banner-carousel"
|
|
103
|
+
effect="gallery"
|
|
104
|
+
indicator-click
|
|
105
|
+
:data-o-theme="theme"
|
|
106
|
+
arrow="never"
|
|
107
|
+
:auto-play="true"
|
|
108
|
+
@before-change="onBeforeChange"
|
|
109
|
+
>
|
|
110
|
+
<OCarouselItem
|
|
111
|
+
v-for="(info, index) in bannerInfo"
|
|
112
|
+
class="banner-item"
|
|
113
|
+
:class="`banner-item${index}`"
|
|
114
|
+
:key="index">
|
|
115
|
+
<ContentWrapper class="banner-wrapper">
|
|
116
|
+
<OFigure class="banner-bg" :src="info.bg" @click="onClick(info.href)" />
|
|
117
|
+
</ContentWrapper>
|
|
118
|
+
</OCarouselItem>
|
|
119
|
+
</OCarousel>
|
|
120
|
+
</div>
|
|
121
|
+
</template>
|
|
122
|
+
|
|
123
|
+
<style lang="scss" scoped>
|
|
124
|
+
.home-banner {
|
|
125
|
+
overflow: hidden;
|
|
126
|
+
position: relative;
|
|
127
|
+
|
|
128
|
+
&.tiny {
|
|
129
|
+
@include display2;
|
|
130
|
+
font-weight: 500;
|
|
131
|
+
margin: var(--o-gap-8) 0;
|
|
132
|
+
color: var(--o-color-info1);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.banner-title {
|
|
136
|
+
color: var(--o-color-info1);
|
|
137
|
+
font-weight: 500;
|
|
138
|
+
font-size: 48px; // 基础字体大小
|
|
139
|
+
margin-bottom: 8px;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.banner-subtitle {
|
|
143
|
+
color: var(--o-color-info1);
|
|
144
|
+
margin-top: 8px;
|
|
145
|
+
font-size: 16px;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.banner-text {
|
|
149
|
+
height: var(--pc-height);
|
|
150
|
+
width: var(--pc-width);
|
|
151
|
+
background-size: contain;
|
|
152
|
+
background-repeat: no-repeat;
|
|
153
|
+
|
|
154
|
+
@include respond('pad') {
|
|
155
|
+
height: var(--pad-height);
|
|
156
|
+
width: var(--pad-width);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
&.large {
|
|
161
|
+
--banner-height: 460px;
|
|
162
|
+
height: var(--banner-height);
|
|
163
|
+
|
|
164
|
+
.banner-title {
|
|
165
|
+
@include display1;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.banner-subtitle {
|
|
169
|
+
@include h4;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
@include respond('laptop-pc_s') {
|
|
173
|
+
--banner-height: 400px;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
@include respond('pad_h') {
|
|
177
|
+
--banner-height: 360px;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
@include respond('<=pad_v') {
|
|
181
|
+
--banner-height: 184px;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
&.medium {
|
|
186
|
+
--banner-height: 360px;
|
|
187
|
+
height: var(--banner-height);
|
|
188
|
+
|
|
189
|
+
.banner-title {
|
|
190
|
+
@include display2;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.banner-subtitle {
|
|
194
|
+
@include text2;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
@include respond('laptop-pc_s') {
|
|
198
|
+
--banner-height: 280px;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
@include respond('pad_h') {
|
|
202
|
+
--banner-height: 220px;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
@include respond('<=pad_v') {
|
|
206
|
+
--banner-height: 120px;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.banner-text {
|
|
210
|
+
--pc-height: 100px !important;
|
|
211
|
+
--pc-width: 500px !important;
|
|
212
|
+
|
|
213
|
+
@include respond('pad') {
|
|
214
|
+
--pc-height: 60px !important;
|
|
215
|
+
--pc-width: 300px !important;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
&.small {
|
|
221
|
+
--banner-height: 280px;
|
|
222
|
+
height: var(--banner-height);
|
|
223
|
+
|
|
224
|
+
.banner-title {
|
|
225
|
+
@include display2;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.banner-subtitle {
|
|
229
|
+
@include text2;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
@include respond('laptop-pc_s') {
|
|
233
|
+
--banner-height: 220px;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
@include respond('pad_h') {
|
|
237
|
+
--banner-height: 180px;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
@include respond('<=pad_v') {
|
|
241
|
+
display: none;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.banner-text {
|
|
245
|
+
--pc-height: 80px !important;
|
|
246
|
+
--pc-width: 400px !important;
|
|
247
|
+
|
|
248
|
+
@include respond('pad') {
|
|
249
|
+
--pc-height: 50px !important;
|
|
250
|
+
--pc-width: 250px !important;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
:deep(.o-btn) {
|
|
256
|
+
border-radius: var(--btn-height);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.banner-carousel {
|
|
261
|
+
width: 100%;
|
|
262
|
+
height: 100%;
|
|
263
|
+
@include respond('>pad_v') {
|
|
264
|
+
--carousel-indicator-offset: 53px;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
@include respond('<=pad_v') {
|
|
268
|
+
--carousel-indicator-offset: 1px;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
:deep(.o-carousel-indicator-bar) {
|
|
272
|
+
height: 24px;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
.banner-item {
|
|
277
|
+
width: 100%;
|
|
278
|
+
height: 100%;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
.banner-bg {
|
|
282
|
+
width: 100%;
|
|
283
|
+
height: 100%;
|
|
284
|
+
|
|
285
|
+
:deep(.o-figure-img) {
|
|
286
|
+
width: 100%;
|
|
287
|
+
height: 100%;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
@include respond('pad') {
|
|
291
|
+
:deep(.o-figure-img) {
|
|
292
|
+
transition: object-position 0.3s ease;
|
|
293
|
+
object-position: var(--pad-offset);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
@include respond('phone') {
|
|
298
|
+
--figure-radius: 4px;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.banner-wrapper {
|
|
303
|
+
height: 100%;
|
|
304
|
+
|
|
305
|
+
&.content-center {
|
|
306
|
+
display: flex;
|
|
307
|
+
justify-content: center;
|
|
308
|
+
|
|
309
|
+
& .banner-content {
|
|
310
|
+
align-items: center;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
.banner-content {
|
|
316
|
+
height: 100%;
|
|
317
|
+
display: inline-flex;
|
|
318
|
+
flex-direction: column;
|
|
319
|
+
justify-content: center;
|
|
320
|
+
position: relative;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
.banner-opts {
|
|
324
|
+
margin-top: 24px;
|
|
325
|
+
--d: 20px;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
@keyframes fade-up {
|
|
329
|
+
from {
|
|
330
|
+
transform: translateY(var(--d));
|
|
331
|
+
opacity: 0;
|
|
332
|
+
}
|
|
333
|
+
to {
|
|
334
|
+
transform: translateY(0);
|
|
335
|
+
opacity: 1;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
.current-slide {
|
|
340
|
+
.banner-title {
|
|
341
|
+
animation: fade-up 400ms ease-in;
|
|
342
|
+
}
|
|
343
|
+
.banner-subtitle {
|
|
344
|
+
animation: fade-up 400ms ease-in;
|
|
345
|
+
}
|
|
346
|
+
.banner-text {
|
|
347
|
+
animation: fade-up 400ms ease-in;
|
|
348
|
+
}
|
|
349
|
+
.banner-opts {
|
|
350
|
+
animation: fade-up 400ms ease-in;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
.in-dark.with-sticky-bg {
|
|
355
|
+
:deep(.o-figure-img) {
|
|
356
|
+
@include img-in-dark;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
.cursor-pointer {
|
|
360
|
+
cursor: pointer;
|
|
361
|
+
}
|
|
362
|
+
</style>
|
|
363
|
+
|
|
364
|
+
<style lang="scss" scoped>
|
|
365
|
+
// 定制修改item1
|
|
366
|
+
.banner-item0 {
|
|
367
|
+
.banner-attach {
|
|
368
|
+
height: 120px;
|
|
369
|
+
|
|
370
|
+
@include respond('pad') {
|
|
371
|
+
height: 80px;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
.banner-item1 {
|
|
377
|
+
.banner-attach {
|
|
378
|
+
height: 156px;
|
|
379
|
+
|
|
380
|
+
@include respond('pad') {
|
|
381
|
+
height: 120px;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
// 定制修改item2
|
|
387
|
+
.banner-item2 {
|
|
388
|
+
.banner-content {
|
|
389
|
+
width: 100%;
|
|
390
|
+
justify-content: center;
|
|
391
|
+
}
|
|
392
|
+
.banner-attach {
|
|
393
|
+
height: 38%;
|
|
394
|
+
margin-top: -60px;
|
|
395
|
+
object-fit: contain;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
</style>
|
|
@@ -214,7 +214,7 @@ const handleClear = () => {
|
|
|
214
214
|
const handleSuggestClick = (item: OSearchRecommendItem) => {
|
|
215
215
|
emit('recommend-click', item);
|
|
216
216
|
innerValue.value = item.key;
|
|
217
|
-
runSearch();
|
|
217
|
+
runSearch(item.key);
|
|
218
218
|
};
|
|
219
219
|
|
|
220
220
|
const handleRecommendClick = (val: string) => {
|
|
@@ -82,8 +82,8 @@ const getSummitData = async (date: string) => {
|
|
|
82
82
|
return {
|
|
83
83
|
...v,
|
|
84
84
|
type: CalendarDataType.SUMMIT,
|
|
85
|
-
start_date_time: `${ formatDate(v.start_date) } ${ v.start
|
|
86
|
-
end_date_time: `${ formatDate(v.end_date) } ${ v.end
|
|
85
|
+
start_date_time: `${ formatDate(v.start_date) } ${ v.start }`,
|
|
86
|
+
end_date_time: `${ formatDate(v.end_date) } ${ v.end }`,
|
|
87
87
|
};
|
|
88
88
|
});
|
|
89
89
|
} else {
|
|
@@ -97,8 +97,8 @@ const getActivityData = async (date: string) => {
|
|
|
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
|
|
100
|
+
start_date_time: `${ formatDate(v.start_date) } ${ v.start }`,
|
|
101
|
+
end_date_time: `${ formatDate(v.end_date) } ${ v.end }`,
|
|
102
102
|
};
|
|
103
103
|
});
|
|
104
104
|
} else {
|
|
@@ -19,15 +19,7 @@ import {
|
|
|
19
19
|
} from '@opensig/opendesign';
|
|
20
20
|
import IconHelp from '~icons/meeting/icon-help.svg';
|
|
21
21
|
import IconTip from '~icons/meeting/icon-tip.svg';
|
|
22
|
-
import {
|
|
23
|
-
CycleSubItemT,
|
|
24
|
-
MeetingFormPropsT,
|
|
25
|
-
MeetingGroupType,
|
|
26
|
-
MeetingItemT,
|
|
27
|
-
MeetingPostT,
|
|
28
|
-
OptionItemT,
|
|
29
|
-
PlatformT,
|
|
30
|
-
} from './types';
|
|
22
|
+
import { CycleSubItemT, MeetingFormPropsT, MeetingGroupType, MeetingPostT, OptionItemT, PlatformT } from './types';
|
|
31
23
|
import dayjs from 'dayjs';
|
|
32
24
|
import { findLabelFromOptions, formatDateNumber, getDateNumber } from './utils';
|
|
33
25
|
import { EMAIL_REGEX, INTERVAL_DAY, INTERVAL_MONTH, INTERVAL_WEEK } from './config';
|
|
@@ -39,6 +31,8 @@ import { ValidatorResultT } from '@opensig/opendesign/lib/form/types';
|
|
|
39
31
|
const { t, locale, cycleTypeOptions0, intervalWeekOptions, getPlatformLabel } = useMeetingConfig();
|
|
40
32
|
|
|
41
33
|
const props = withDefaults(defineProps<MeetingFormPropsT>(), {
|
|
34
|
+
isSub: false,
|
|
35
|
+
isEdit: false,
|
|
42
36
|
showBtns: true,
|
|
43
37
|
groupType: MeetingGroupType.SIG,
|
|
44
38
|
});
|
|
@@ -47,8 +41,6 @@ const message = useMessage(null);
|
|
|
47
41
|
const cycleTypeOptions = cycleTypeOptions0;
|
|
48
42
|
const weekOptions = intervalWeekOptions;
|
|
49
43
|
|
|
50
|
-
const isEdit = computed(() => Object.keys(props?.data || {}).length > 0);
|
|
51
|
-
const isSub = computed(() => !!props.subId);
|
|
52
44
|
const intervalTypeMax = computed(() => {
|
|
53
45
|
return findLabelFromOptions(form.value.cycle_type, cycleTypeOptions.value, 'max');
|
|
54
46
|
});
|
|
@@ -210,7 +202,7 @@ const rules = computed<Record<string, RulesT[]>>(() => {
|
|
|
210
202
|
email_list: [
|
|
211
203
|
{
|
|
212
204
|
validator: (value: any) => {
|
|
213
|
-
if (isEdit
|
|
205
|
+
if (props.isEdit) {
|
|
214
206
|
return {} as unknown as ValidatorResultT;
|
|
215
207
|
}
|
|
216
208
|
const str = value.replaceAll(' ', '').replaceAll(',', ';') || '';
|
|
@@ -295,7 +287,7 @@ const getPropData = () => {
|
|
|
295
287
|
...(is_cycle
|
|
296
288
|
? {
|
|
297
289
|
date_range: [cycle_start_date, cycle_end_date],
|
|
298
|
-
cycle_point: cycle_point?.map((v) => parseInt(v
|
|
290
|
+
cycle_point: cycle_point?.map((v) => parseInt(v)) || [],
|
|
299
291
|
cycle_interval: cycle_interval || 1,
|
|
300
292
|
time: `${ cycle_start }-${ cycle_end }`,
|
|
301
293
|
start: cycle_start,
|
|
@@ -309,13 +301,13 @@ watch(
|
|
|
309
301
|
() => props.data,
|
|
310
302
|
(data) => {
|
|
311
303
|
if (data) {
|
|
312
|
-
const propData = getPropData() as unknown as
|
|
313
|
-
const sub = propData?.cycle_sub?.find((v) => v.sub_id === (props.subId)) || {} as unknown as CycleSubItemT;
|
|
304
|
+
const propData = getPropData() as unknown as CycleSubItemT;
|
|
305
|
+
const sub = propData?.cycle_sub?.find((v) => v.sub_id === (props.subId || propData.sub_id)) || {} as unknown as CycleSubItemT;
|
|
314
306
|
const { mid, date, start, end, sub_id } = sub;
|
|
315
307
|
Object.assign(
|
|
316
308
|
form.value,
|
|
317
309
|
propData,
|
|
318
|
-
isSub
|
|
310
|
+
props.isSub
|
|
319
311
|
? {
|
|
320
312
|
is_cycle: false,
|
|
321
313
|
mid,
|
|
@@ -376,12 +368,12 @@ const changeIntervalType = () => {
|
|
|
376
368
|
};
|
|
377
369
|
|
|
378
370
|
const changeIsCycle = () => {
|
|
379
|
-
form.value.platform =
|
|
371
|
+
form.value.platform = 'WELINK';
|
|
380
372
|
};
|
|
381
373
|
|
|
382
374
|
const { lePadV } = useScreen();
|
|
383
375
|
const confirm = async () => {
|
|
384
|
-
let type = isEdit
|
|
376
|
+
let type = props.isEdit ? t('meeting.editSuccess') : t('meeting.booSuccess');
|
|
385
377
|
try {
|
|
386
378
|
loading.value = true;
|
|
387
379
|
const valid = await formRef.value.validate();
|
|
@@ -439,8 +431,8 @@ const confirm = async () => {
|
|
|
439
431
|
end,
|
|
440
432
|
};
|
|
441
433
|
}
|
|
442
|
-
if (isEdit
|
|
443
|
-
if (isSub
|
|
434
|
+
if (props.isEdit) {
|
|
435
|
+
if (props.isSub) {
|
|
444
436
|
const { mid, sub_id } = form.value;
|
|
445
437
|
const { date, start, end } = params;
|
|
446
438
|
flag = await props?.editSubMeetingRequest(sub_id, {
|
|
@@ -490,7 +482,7 @@ onMounted(() => {
|
|
|
490
482
|
|
|
491
483
|
const changeSig = (sig: any) => {
|
|
492
484
|
const find = sigOptions.value.find((v) => v.value === sig);
|
|
493
|
-
if (!isEdit
|
|
485
|
+
if (!props.isEdit) {
|
|
494
486
|
form.value.etherpad = find?.etherpad || '';
|
|
495
487
|
form.value.email_list = find?.email_list || '';
|
|
496
488
|
}
|
|
@@ -90,11 +90,7 @@ const computedList = computed<any[]>(() => {
|
|
|
90
90
|
dateRange = `${ formatDate(v.start_date) } ${ v.start }-${ formatDate(v.end_date) } ${ v.end }`;
|
|
91
91
|
}
|
|
92
92
|
} else {
|
|
93
|
-
|
|
94
|
-
dateRange = formatDate(v.start_date, 'YYYY/MM/DD');
|
|
95
|
-
} else {
|
|
96
|
-
dateRange = `${ formatDate(v.start_date, 'YYYY/MM/DD') }-${ formatDate(v.end_date, 'YYYY/MM/DD') }`;
|
|
97
|
-
}
|
|
93
|
+
dateRange = `${ formatDate(v.start_date, 'YYYY/MM/DD HH:mm') } ${ formatDate(v.end_date, 'YYYY/MM/DD HH:mm') }`;
|
|
98
94
|
}
|
|
99
95
|
|
|
100
96
|
return {
|
|
@@ -173,7 +169,7 @@ const computedList = computed<any[]>(() => {
|
|
|
173
169
|
<OCollapseItem v-for="(item, index) in computedList" :key="item.id" :value="item.id">
|
|
174
170
|
<template #title>
|
|
175
171
|
<div class="meet-title-left">
|
|
176
|
-
<div class="meet-title" :title="item.topic || item.name
|
|
172
|
+
<div class="meet-title" :title="item.topic || item.name">
|
|
177
173
|
<OIcon
|
|
178
174
|
:style="{
|
|
179
175
|
backgroundColor: `${getConfig(item.type, 'color')}`
|
|
@@ -5,7 +5,6 @@ import { CalendarDataType, MeetingItemT } from '../types.ts';
|
|
|
5
5
|
import MoreText from '@/components/common/MoreText.vue';
|
|
6
6
|
import { formatDate } from '@/components/meeting/utils.ts';
|
|
7
7
|
import { useMeetingConfig } from '../composables/useMeetingConfig';
|
|
8
|
-
import { useI18n } from '@/i18n';
|
|
9
8
|
|
|
10
9
|
const props = defineProps<{
|
|
11
10
|
data: MeetingItemT;
|
|
@@ -14,8 +13,7 @@ const props = defineProps<{
|
|
|
14
13
|
page?: CalendarDataType
|
|
15
14
|
}>();
|
|
16
15
|
const { t, getPlatformLabel } = useMeetingConfig();
|
|
17
|
-
|
|
18
|
-
const isZh = computed(() => locale.value === 'zh');
|
|
16
|
+
|
|
19
17
|
// 会议详情配置
|
|
20
18
|
const infoList = computed(() =>
|
|
21
19
|
[
|
|
@@ -85,15 +83,11 @@ const columns = computed<ColumnItemT[]>(() => {
|
|
|
85
83
|
});
|
|
86
84
|
|
|
87
85
|
const domRef = ref([]);
|
|
88
|
-
const SPLIT_MARK = '|';
|
|
89
86
|
// 复制会议内容
|
|
90
87
|
const copyInfo = () => {
|
|
91
88
|
try {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
text += [...domRef.value].reduce((pre, cur: HTMLDivElement) => {
|
|
95
|
-
return `${ pre }${ cur.textContent ? cur.textContent.replace(SPLIT_MARK, colon) : '' }\n`;
|
|
96
|
-
}, '');
|
|
89
|
+
let text = `${ t('meeting.meetingTopic') + props.data.topic }\n`;
|
|
90
|
+
text += [...domRef.value].reduce((pre, cur: HTMLDivElement) => `${ pre }${ cur.textContent }\n`, '');
|
|
97
91
|
navigator.clipboard.writeText(text);
|
|
98
92
|
return Promise.resolve();
|
|
99
93
|
} catch (e) {
|
|
@@ -120,7 +114,6 @@ defineExpose({ copyInfo });
|
|
|
120
114
|
>
|
|
121
115
|
<template v-if="getField(info.key) && !info.isRecord">
|
|
122
116
|
<span class="label">{{ info.label }}</span>
|
|
123
|
-
<span class="split-mark">{{ SPLIT_MARK }}</span>
|
|
124
117
|
<MoreText :show="show" v-if="info.ellipsis" :text="getField(info.key) || '-'" />
|
|
125
118
|
<OLink
|
|
126
119
|
v-else-if="info.isLink"
|
|
@@ -197,13 +190,6 @@ defineExpose({ copyInfo });
|
|
|
197
190
|
}
|
|
198
191
|
}
|
|
199
192
|
|
|
200
|
-
.split-mark {
|
|
201
|
-
width: 0;
|
|
202
|
-
height: 0;
|
|
203
|
-
opacity: 0;
|
|
204
|
-
overflow: hidden;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
193
|
&.type_events {
|
|
208
194
|
.label {
|
|
209
195
|
width: 6em;
|