@opendesign-plus-test/components 0.0.1-rc.56 → 0.0.1-rc.58

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 (47) hide show
  1. package/dist/chunk-OElCookieNotice.cjs.js +1 -1
  2. package/dist/chunk-OElCookieNotice.es.js +72 -69
  3. package/dist/components/OHeaderSearch.vue.d.ts +22 -22
  4. package/dist/components/OHeaderUser.vue.d.ts +1 -1
  5. package/dist/components/OLanguageSwitcher.vue.d.ts +49 -0
  6. package/dist/components/OThemeSwitcher.vue.d.ts +1 -1
  7. package/dist/components/activity/OActivityMyCalendar.vue.d.ts +4 -4
  8. package/dist/components/activity/index.d.ts +2 -2
  9. package/dist/components/banner/OBanner.vue.d.ts +13 -0
  10. package/dist/components/banner/OBannerContent.vue.d.ts +7 -0
  11. package/dist/components/banner/index.d.ts +68 -0
  12. package/dist/components/banner/types.d.ts +31 -0
  13. package/dist/components/header/types.d.ts +1 -0
  14. package/dist/components/meeting/OMeetingCalendar.vue.d.ts +2 -2
  15. package/dist/components/meeting/OMeetingForm.vue.d.ts +0 -2
  16. package/dist/components/meeting/OMeetingMyCalendar.vue.d.ts +4 -4
  17. package/dist/components/meeting/components/OMeetingCalendarSelector.vue.d.ts +1 -1
  18. package/dist/components/meeting/index.d.ts +3 -9
  19. package/dist/components/meeting/types.d.ts +0 -2
  20. package/dist/components/search/OSearchInput.vue.d.ts +22 -22
  21. package/dist/components/search/index.d.ts +11 -11
  22. package/dist/components/search/internal/SearchImageInput.vue.d.ts +17 -17
  23. package/dist/components.cjs.js +39 -39
  24. package/dist/components.css +1 -1
  25. package/dist/components.es.js +8470 -8296
  26. package/dist/index.d.ts +3 -2
  27. package/package.json +1 -1
  28. package/scripts/generate-components-index.js +1 -1
  29. package/src/components/OLanguageSwitcher.vue +211 -0
  30. package/src/components/OPlusConfigProvider.vue +2 -2
  31. package/src/components/activity/OActivityMyCalendar.vue +1 -1
  32. package/src/components/banner/OBanner.vue +288 -0
  33. package/src/components/banner/OBannerContent.vue +175 -0
  34. package/src/components/banner/index.ts +18 -0
  35. package/src/components/banner/types.ts +39 -0
  36. package/src/components/header/OHeader.vue +1 -1
  37. package/src/components/header/types.ts +1 -0
  38. package/src/components/meeting/OMeetingCalendar.vue +4 -4
  39. package/src/components/meeting/OMeetingForm.vue +30 -14
  40. package/src/components/meeting/components/OMeetingCalendarList.vue +6 -2
  41. package/src/components/meeting/components/OMeetingDetail.vue +17 -3
  42. package/src/components/meeting/types.ts +0 -2
  43. package/src/i18n/en.ts +4 -2
  44. package/src/i18n/zh.ts +4 -3
  45. package/src/index.ts +4 -3
  46. package/dist/components/OBanner.vue.d.ts +0 -11
  47. package/src/components/OBanner.vue +0 -398
package/dist/index.d.ts CHANGED
@@ -1,14 +1,15 @@
1
- import { default as OBanner } from './components/OBanner.vue';
2
1
  import { default as OCookieNotice } from './components/OCookieNotice.vue';
3
2
  import { default as OFooter } from './components/OFooter.vue';
4
3
  import { default as OHeaderSearch } from './components/OHeaderSearch.vue';
5
4
  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 { OBanner, OCookieNotice, OFooter, OHeaderSearch, OHeaderUser, OPlusConfigProvider, OSection, OSourceCode, OThemeSwitcher };
10
+ export { OCookieNotice, OFooter, OHeaderSearch, OHeaderUser, OLanguageSwitcher, OPlusConfigProvider, OSection, OSourceCode, OThemeSwitcher };
11
11
  export * from './components/activity';
12
+ export * from './components/banner';
12
13
  export * from './components/element-plus';
13
14
  export * from './components/events';
14
15
  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.56",
3
+ "version": "0.0.1-rc.58",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -77,7 +77,7 @@ export default {
77
77
  }
78
78
  };
79
79
  `;
80
-
80
+
81
81
  // 写入文件
82
82
  fs.writeFileSync(indexFilePath, indexContent, 'utf-8');
83
83
  console.log(`组件索引文件已生成: ${indexFilePath}`);
@@ -0,0 +1,211 @@
1
+ <script lang="ts" setup>
2
+ import { computed } from 'vue';
3
+ import { useLocale, useScreen } from '@opendesign-plus/composables';
4
+ import { OIcon, ODropdown, ODropdownItem } from '@opensig/opendesign';
5
+
6
+ import IconLocale from '~icons/components/icon-locale.svg';
7
+
8
+ export interface LanguageOptionT {
9
+ id: string;
10
+ label: string;
11
+ simple: string;
12
+ }
13
+
14
+ const props = defineProps({
15
+ options: {
16
+ type: Array as () => LanguageOptionT[],
17
+ default() {
18
+ return [
19
+ { id: 'zh', label: '简体中文', simple: '中' },
20
+ { id: 'en', label: 'English', simple: 'EN' },
21
+ ];
22
+ },
23
+ },
24
+ type: {
25
+ type: String as () => 'auto' | 'common' | 'mobile',
26
+ default: 'auto',
27
+ },
28
+ auto: {
29
+ type: Boolean,
30
+ default: true,
31
+ },
32
+ });
33
+
34
+ const { changeLocale, locale } = useLocale();
35
+
36
+ const { lePadV } = useScreen();
37
+ const lang = computed(() => {
38
+ return locale.value;
39
+ });
40
+
41
+
42
+ // 选择语言
43
+ const emits = defineEmits(['change']);
44
+ const changeLanguage = (newlang: LanguageOptionT) => {
45
+ if (props.auto) {
46
+ changeLocale();
47
+ }
48
+ emits('change', newlang);
49
+ };
50
+
51
+ const getLang = (lang: String, simple?: boolean) => {
52
+ const item = props.options.find((el: LanguageOptionT) => el.id === lang);
53
+ if (item) {
54
+ return simple ? item.simple : item.label;
55
+ }
56
+
57
+ const defaultLang = props.options[0];
58
+ return simple ? defaultLang.simple : defaultLang.label;
59
+ };
60
+
61
+ const isCommon = computed(() => {
62
+ return props.type === 'common' || (props.type === 'auto' && !lePadV.value);
63
+ });
64
+ </script>
65
+
66
+ <template>
67
+ <div
68
+ v-if="isCommon"
69
+ :class="options.length <= 1 ? 'hide-lang' : 'header-lang'"
70
+ >
71
+ <ODropdown
72
+ trigger="hover"
73
+ optionPosition="bottom"
74
+ option-wrap-class="dropdown"
75
+ >
76
+ <div class="info-wrap">
77
+ <OIcon class="icon">
78
+ <IconLocale />
79
+ <div :class="['locale-tag', { 'is-en': lang === 'en' }]">{{ getLang(lang, true) }}</div>
80
+ </OIcon>
81
+ </div>
82
+
83
+ <template #dropdown>
84
+ <ODropdownItem
85
+ v-for="item in options"
86
+ @click="changeLanguage(item)"
87
+ :key="item.id"
88
+ :class="['list', { 'is-active': lang === item.id }]"
89
+ >
90
+ {{ getLang(item.id) }}
91
+ </ODropdownItem>
92
+ </template>
93
+ </ODropdown>
94
+ </div>
95
+
96
+ <div
97
+ v-else
98
+ :class="options.length <= 1 ? 'hide-lang' : 'mobile-change-language'"
99
+ >
100
+ <span
101
+ v-for="item in options"
102
+ :key="item.id"
103
+ :class="{ active: lang === item.id }"
104
+ @click.stop="changeLanguage(item)"
105
+ >{{ getLang(item.id, true) }}</span
106
+ >
107
+ </div>
108
+ </template>
109
+
110
+ <style lang="scss" scoped>
111
+ .hide-lang {
112
+ display: none;
113
+ }
114
+
115
+ .header-lang {
116
+ height: calc(100% + 10px);
117
+ display: flex;
118
+ align-items: center;
119
+
120
+ .info-wrap {
121
+ height: 100%;
122
+ display: flex;
123
+ align-items: center;
124
+ cursor: pointer;
125
+
126
+ .icon {
127
+ font-size: var(--o-icon_size_control-m);
128
+ position: relative;
129
+ color: var(--o-color-info1);
130
+
131
+ &:hover {
132
+ color: var(--o-color-primary1);
133
+ }
134
+ }
135
+ .locale-tag {
136
+ position: absolute;
137
+ font-size: 10px;
138
+ height: 12px;
139
+ width: 12px;
140
+ background-color: var(--o-color-fill2);
141
+
142
+ display: flex;
143
+ justify-content: center;
144
+ align-items: center;
145
+ left: 12px;
146
+ top: 11px;
147
+
148
+ &.is-en {
149
+ width: 16px;
150
+ }
151
+ }
152
+ }
153
+ .list {
154
+ background: var(--o-color-fill2);
155
+ cursor: pointer;
156
+ box-shadow: var(--o-shadow-1);
157
+ border-radius: var(--o-radius_control-xs);
158
+ padding: var(--o-gap-1);
159
+ width: 144px;
160
+ }
161
+ }
162
+
163
+ .o-dropdown {
164
+ height: 100%;
165
+ }
166
+ .o-dropdown-item {
167
+ background: var(--o-color-fill2);
168
+ cursor: pointer;
169
+ border-radius: var(--o-radius_control-xs);
170
+ padding: var(--o-gap-1);
171
+ min-width: 144px;
172
+ height: 40px;
173
+ color: var(--o-color-info1);
174
+
175
+ @include hover {
176
+ background: var(--o-color-control2-light);
177
+ }
178
+
179
+ &.is-active {
180
+ color: var(--o-color-primary1);
181
+ background: var(--o-color-control3-light);
182
+ }
183
+ }
184
+ .dropdown {
185
+ --dropdown-list-radius: var(--o-radius-xs);
186
+ }
187
+
188
+ .mobile-change-language {
189
+ display: flex;
190
+ align-items: center;
191
+ height: 36px;
192
+ span {
193
+ color: var(--o-color-info1);
194
+ margin-right: var(--o-gap-1);
195
+ text-align: center;
196
+ @include text1;
197
+ cursor: pointer;
198
+ &.active {
199
+ color: var(--o-color-primary1);
200
+ font-weight: 500;
201
+ }
202
+ &:not(:last-child) {
203
+ &:after {
204
+ content: '|';
205
+ margin-left: var(--o-gap-1);
206
+ color: var(--o-color-info1);
207
+ }
208
+ }
209
+ }
210
+ }
211
+ </style>
@@ -2,8 +2,8 @@
2
2
  import { computed, provide, reactive } from 'vue';
3
3
 
4
4
  import { OConfigProvider } from '@opensig/opendesign';
5
- import zhCN from '@opensig/opendesign/es/locale/lang/zh-cn';
6
- import enUS from '@opensig/opendesign/es/locale/lang/en-us';
5
+ import zhCN from '@opensig/opendesign/es/locale/lang/zh-cn.mjs';
6
+ import enUS from '@opensig/opendesign/es/locale/lang/en-us.mjs';
7
7
 
8
8
  import { configProviderInjectKey } from '@/shared/provide';
9
9
 
@@ -410,7 +410,7 @@ const confirmDelete = () => {
410
410
  }
411
411
  dialogLoading.value = true;
412
412
  props.deleteActivityRequest(currentRow.value?.id)
413
- .then((flag) => {
413
+ .then((flag: any) => {
414
414
  if (typeof flag === 'boolean' && !flag) {
415
415
  return;
416
416
  }
@@ -0,0 +1,288 @@
1
+ <script setup lang="ts">
2
+ import { OCarousel, OCarouselItem, OFigure } from '@opensig/opendesign';
3
+ import { computed } from 'vue';
4
+
5
+ import { useScreen, useTheme } from '@opendesign-plus/composables';
6
+ import ContentWrapper from '../common/ContentWrapper.vue';
7
+ import BannerContent from './OBannerContent.vue';
8
+ import type { BannerItem } from './types';
9
+
10
+ const props = defineProps<{
11
+ options?: BannerItem | BannerItem[];
12
+ size?: 'large' | 'medium' | 'small' | 'tiny';
13
+ contentJustifyCenter?: boolean;
14
+ autoPlay?: boolean;
15
+ }>();
16
+
17
+ const emit = defineEmits<{
18
+ (e: 'click', href: string | undefined): void;
19
+ }>();
20
+
21
+ const { isLight } = useTheme();
22
+ const { isPhone } = useScreen();
23
+
24
+ // 单个 Banner(非数组,或仅含一项的数组)
25
+ const singleBanner = computed((): BannerItem | undefined => {
26
+ if (!props.options) return undefined;
27
+ if (Array.isArray(props.options)) {
28
+ return props.options.length === 1 ? props.options[0] : undefined;
29
+ }
30
+ return props.options;
31
+ });
32
+
33
+ // 多个 Banner(数组且超过一项)
34
+ const multiBanner = computed((): BannerItem[] | undefined => {
35
+ if (!Array.isArray(props.options) || props.options.length <= 1) return undefined;
36
+ return props.options;
37
+ });
38
+ </script>
39
+
40
+ <template>
41
+ <div :class="['home-banner', size]">
42
+ <!-- 单个 Banner 的情况 -->
43
+ <div v-if="singleBanner" class="content-height">
44
+ <div v-if="size === 'tiny'">
45
+ {{ singleBanner.title }}
46
+ </div>
47
+
48
+ <BannerContent
49
+ v-else-if="!isPhone"
50
+ :info="singleBanner"
51
+ :size="size"
52
+ :content-justify-center="contentJustifyCenter"
53
+ :is-phone="isPhone"
54
+ :is-light="isLight"
55
+ @click="emit('click', $event)"
56
+ />
57
+
58
+ <ContentWrapper v-else class="banner-wrapper">
59
+ <OFigure
60
+ class="banner-bg"
61
+ :src="singleBanner.bg"
62
+ fit="cover"
63
+ />
64
+ </ContentWrapper>
65
+ </div>
66
+
67
+ <!-- 多个 Banner 轮播的情况 -->
68
+ <div v-else-if="multiBanner" class="content-height">
69
+ <OCarousel
70
+ v-if="!isPhone"
71
+ class="banner-carousel"
72
+ effect="toggle"
73
+ active-class="current-slide"
74
+ indicator-click
75
+ :auto-play="autoPlay"
76
+ >
77
+ <OCarouselItem
78
+ v-for="(info, index) in multiBanner"
79
+ :key="index"
80
+ class="banner-item"
81
+ :class="`banner-item${index}`"
82
+ >
83
+ <BannerContent
84
+ :info="info"
85
+ :size="size"
86
+ :content-justify-center="contentJustifyCenter"
87
+ :is-phone="isPhone"
88
+ :is-light="isLight"
89
+ @click="emit('click', $event)"
90
+ />
91
+ </OCarouselItem>
92
+ </OCarousel>
93
+
94
+ <OCarousel
95
+ v-else
96
+ class="banner-carousel"
97
+ effect="gallery"
98
+ indicator-click
99
+ arrow="never"
100
+ :auto-play="autoPlay"
101
+ >
102
+ <OCarouselItem
103
+ v-for="(info, index) in multiBanner"
104
+ :key="index"
105
+ class="banner-item"
106
+ :class="`banner-item${index}`"
107
+ >
108
+ <ContentWrapper class="banner-wrapper">
109
+ <OFigure
110
+ class="banner-bg"
111
+ :src="info.bg"
112
+ @click="emit('click', info.href)"
113
+ />
114
+ </ContentWrapper>
115
+ </OCarouselItem>
116
+ </OCarousel>
117
+ </div>
118
+
119
+ <!-- 没有 Banner 数据的情况 -->
120
+ <div v-else class="content-height">
121
+ <p>No data.</p>
122
+ </div>
123
+ </div>
124
+ </template>
125
+
126
+ <style lang="scss" scoped>
127
+ .home-banner {
128
+ overflow: hidden;
129
+ position: relative;
130
+
131
+ &.tiny {
132
+ @include display2;
133
+ font-weight: 500;
134
+ margin: var(--o-gap-8) 0;
135
+ color: var(--o-color-info1);
136
+ }
137
+
138
+ .content-height {
139
+ height: 100%;
140
+ }
141
+
142
+ &.large {
143
+ --banner-height: 460px;
144
+ height: var(--banner-height);
145
+
146
+ @include respond-to('laptop-pc_s') {
147
+ --banner-height: 400px;
148
+ }
149
+
150
+ @include respond-to('pad_h') {
151
+ --banner-height: 360px;
152
+ }
153
+
154
+ @include respond-to('<=pad_v') {
155
+ --banner-height: 184px;
156
+ }
157
+ }
158
+
159
+ &.medium {
160
+ --banner-height: 360px;
161
+ height: var(--banner-height);
162
+
163
+ @include respond-to('laptop-pc_s') {
164
+ --banner-height: 280px;
165
+ }
166
+
167
+ @include respond-to('pad_h') {
168
+ --banner-height: 220px;
169
+ }
170
+
171
+ @include respond-to('<=pad_v') {
172
+ --banner-height: 120px;
173
+ }
174
+ }
175
+
176
+ &.small {
177
+ --banner-height: 280px;
178
+ height: var(--banner-height);
179
+
180
+ @include respond-to('laptop-pc_s') {
181
+ --banner-height: 220px;
182
+ }
183
+
184
+ @include respond-to('pad_h') {
185
+ --banner-height: 180px;
186
+ }
187
+
188
+ @include respond-to('<=pad_v') {
189
+ display: none;
190
+ }
191
+ }
192
+
193
+ :deep(.o-btn) {
194
+ border-radius: var(--btn-height);
195
+ }
196
+ }
197
+
198
+ .banner-carousel {
199
+ width: 100%;
200
+ height: 100%;
201
+ @include respond-to('>pad_v') {
202
+ --carousel-indicator-offset: 53px;
203
+ }
204
+
205
+ @include respond-to('<=pad_v') {
206
+ --carousel-indicator-offset: 1px;
207
+ }
208
+
209
+ :deep(.o-carousel-indicator-bar) {
210
+ height: 24px;
211
+ }
212
+ }
213
+
214
+ .banner-item {
215
+ width: 100%;
216
+ height: 100%;
217
+ }
218
+
219
+ @keyframes fade-up {
220
+ from {
221
+ transform: translateY(var(--d));
222
+ opacity: 0;
223
+ }
224
+ to {
225
+ transform: translateY(0);
226
+ opacity: 1;
227
+ }
228
+ }
229
+
230
+ .current-slide {
231
+ .banner-title {
232
+ animation: fade-up 400ms ease-in;
233
+ }
234
+ .banner-subtitle {
235
+ animation: fade-up 400ms ease-in;
236
+ }
237
+ .banner-text {
238
+ animation: fade-up 400ms ease-in;
239
+ }
240
+ .banner-opts {
241
+ animation: fade-up 400ms ease-in;
242
+ }
243
+ }
244
+ </style>
245
+
246
+ <style lang="scss" scoped>
247
+ // 定制修改item1
248
+ .banner-item0 {
249
+ .banner-attach {
250
+ height: 120px;
251
+
252
+ @include respond-to('pad') {
253
+ height: 80px;
254
+ }
255
+ }
256
+ }
257
+
258
+ .banner-item1 {
259
+ .banner-attach {
260
+ height: 156px;
261
+
262
+ @include respond-to('pad') {
263
+ height: 120px;
264
+ }
265
+ }
266
+ }
267
+
268
+ // 定制修改item2
269
+ .banner-item2 {
270
+ .banner-content {
271
+ width: 100%;
272
+ justify-content: center;
273
+ }
274
+ .banner-attach {
275
+ height: 38%;
276
+ margin-top: -60px;
277
+ object-fit: contain;
278
+ }
279
+ }
280
+
281
+ .banner-wrapper {
282
+ height: 100%;
283
+
284
+ .banner-bg {
285
+ height: 100%;
286
+ }
287
+ }
288
+ </style>