@opendesign-plus-test/components 0.0.1-rc.60 → 0.0.1-rc.62
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 +150 -150
- package/dist/components/activity/OActivityApproval.vue.d.ts +8 -8
- package/dist/components/activity/OActivityForm.vue.d.ts +6 -6
- package/dist/components/activity/OActivityMyCalendar.vue.d.ts +2 -2
- package/dist/components/activity/index.d.ts +14 -14
- package/dist/components/banner/OBanner.vue.d.ts +13 -0
- package/dist/components/banner/OBannerContent.vue.d.ts +7 -0
- package/dist/components/banner/index.d.ts +68 -0
- package/dist/components/banner/types.d.ts +31 -0
- package/dist/components/{OPlusConfigProvider.vue.d.ts → config-provider/OPlusConfigProvider.vue.d.ts} +2 -2
- package/dist/components/config-provider/index.d.ts +27 -0
- package/dist/components/cookie-notice/OCookieNotice.vue.d.ts +17 -0
- package/dist/components/cookie-notice/index.d.ts +53 -0
- package/dist/components/{OFooter.vue.d.ts → footer/OFooter.vue.d.ts} +3 -3
- package/dist/components/footer/index.d.ts +89 -0
- package/dist/components/header/OHeaderLanguageSwitcher.vue.d.ts +49 -0
- package/dist/components/{OHeaderSearch.vue.d.ts → header/OHeaderSearch.vue.d.ts} +145 -145
- package/dist/components/header/OHeaderSourceCode.vue.d.ts +18 -0
- package/dist/components/header/OHeaderTheme.vue.d.ts +25 -0
- package/dist/components/{OHeaderUser.vue.d.ts → header/OHeaderUser.vue.d.ts} +6 -6
- package/dist/components/header/index.d.ts +805 -1
- package/dist/components/header/types.d.ts +1 -0
- package/dist/components/meeting/OMeetingForm.vue.d.ts +4 -6
- package/dist/components/meeting/OMeetingMyCalendar.vue.d.ts +2 -2
- package/dist/components/meeting/OMeetingPlayback.vue.d.ts +4 -4
- package/dist/components/meeting/components/OMeetingCalendarSelector.vue.d.ts +1 -1
- package/dist/components/meeting/components/OMeetingPlaybackVideo.vue.d.ts +1 -1
- package/dist/components/meeting/index.d.ts +7 -13
- package/dist/components/meeting/types.d.ts +2 -4
- package/dist/components/search/OSearchInput.vue.d.ts +34 -34
- package/dist/components/search/index.d.ts +22 -22
- package/dist/components/search/internal/SearchImageInput.vue.d.ts +21 -21
- package/dist/components/search/internal/SearchPanel.vue.d.ts +1 -1
- package/dist/components/{OSection.vue.d.ts → section/OSection.vue.d.ts} +4 -4
- package/dist/components/section/index.d.ts +47 -0
- package/dist/components.cjs.js +38 -38
- package/dist/components.css +1 -1
- package/dist/components.es.js +16822 -16615
- package/dist/index.d.ts +5 -14
- package/docs/design.md +2 -2
- package/package.json +3 -3
- package/scripts/generate-components-index.js +2 -44
- package/src/components/activity/OActivityMyCalendar.vue +1 -1
- package/src/components/banner/OBanner.vue +288 -0
- package/src/components/banner/OBannerContent.vue +175 -0
- package/src/components/banner/index.ts +18 -0
- package/src/components/banner/types.ts +39 -0
- package/src/components/common/ClientOnly.vue +13 -0
- package/src/components/{OPlusConfigProvider.vue → config-provider/OPlusConfigProvider.vue} +2 -2
- package/src/components/config-provider/index.ts +10 -0
- package/src/components/{OCookieNotice.vue → cookie-notice/OCookieNotice.vue} +1 -1
- package/src/components/cookie-notice/index.ts +10 -0
- package/src/components/element-plus/OElCookieNotice.vue +1 -1
- package/src/components/events/OEventsApply.vue +87 -1
- package/src/components/events/OEventsList.vue +47 -2
- package/src/components/{OFooter.vue → footer/OFooter.vue} +4 -4
- package/src/components/footer/index.ts +10 -0
- package/src/components/header/OHeaderLanguageSwitcher.vue +211 -0
- package/src/components/{OHeaderSearch.vue → header/OHeaderSearch.vue} +5 -5
- package/src/components/{OSourceCode.vue → header/OHeaderSourceCode.vue} +2 -2
- package/src/components/{OThemeSwitcher.vue → header/OHeaderTheme.vue} +4 -4
- package/src/components/{OHeaderUser.vue → header/OHeaderUser.vue} +4 -4
- package/src/components/header/index.ts +38 -1
- package/src/components/header/types.ts +1 -0
- package/src/components/meeting/OMeetingCalendar.vue +23 -4
- package/src/components/meeting/OMeetingForm.vue +21 -13
- package/src/components/meeting/OMeetingMyCalendar.vue +3 -9
- package/src/components/meeting/components/OMeetingCalendarList.vue +7 -2
- package/src/components/meeting/components/OMeetingDetail.vue +17 -3
- package/src/components/meeting/types.ts +2 -4
- package/src/components/search/OSearchInput.vue +1 -1
- package/src/components/{OSection.vue → section/OSection.vue} +1 -1
- package/src/components/section/index.ts +10 -0
- package/src/i18n/en.ts +1 -1
- package/src/i18n/zh.ts +3 -1
- package/src/index.ts +5 -38
- package/dist/components/OBanner.vue.d.ts +0 -11
- package/dist/components/OCookieNotice.vue.d.ts +0 -17
- package/dist/components/OSourceCode.vue.d.ts +0 -18
- package/dist/components/OThemeSwitcher.vue.d.ts +0 -25
- package/src/components/OBanner.vue +0 -398
- package/src/components/common/ClientOnlyWrapper.ts +0 -21
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
2
|
import { ref, onMounted, computed, nextTick, watch } from 'vue';
|
|
3
|
-
import ClientOnly from '
|
|
3
|
+
import ClientOnly from '../common/ClientOnly.vue';
|
|
4
4
|
import { useScreen } from '@opendesign-plus/composables';
|
|
5
5
|
import { useI18n } from '@/i18n';
|
|
6
6
|
import { DialogActionT, OButton, ODialog, OIcon, OIconClose, OSwitch } from '@opensig/opendesign';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
2
|
import { ref, onMounted, computed, nextTick, watch } from 'vue';
|
|
3
|
-
import ClientOnly from '../common/
|
|
3
|
+
import ClientOnly from '../common/ClientOnly.vue';
|
|
4
4
|
import { useScreen } from '@opendesign-plus/composables';
|
|
5
5
|
import { useI18n } from '@/i18n';
|
|
6
6
|
import { ElButton, ElDialog, ElSwitch, ElIcon, ElDivider } from 'element-plus';
|
|
@@ -103,6 +103,18 @@ defineProps<EventsApplyPropsT>();
|
|
|
103
103
|
--height: var(--o-gap-6);
|
|
104
104
|
height: calc(100% + var(--height) - 40px); // 延伸到下一个元素
|
|
105
105
|
background-color: var(--o-color-control4);
|
|
106
|
+
@include respond('laptop') {
|
|
107
|
+
--height: var(--o-gap-5);
|
|
108
|
+
}
|
|
109
|
+
@include respond('pad_h') {
|
|
110
|
+
--height: var(--o-gap-4);
|
|
111
|
+
}
|
|
112
|
+
@include respond('pad_v') {
|
|
113
|
+
--height: var(--o-gap-5);
|
|
114
|
+
}
|
|
115
|
+
@include respond('phone') {
|
|
116
|
+
--height: var(--o-gap-5);
|
|
117
|
+
}
|
|
106
118
|
}
|
|
107
119
|
|
|
108
120
|
// 最后一个序号不显示连接线(倒数第2个子元素,因为最后一个是step-item)
|
|
@@ -117,12 +129,38 @@ defineProps<EventsApplyPropsT>();
|
|
|
117
129
|
grid-template-columns: repeat(3, 1fr); // 桌面端:3列
|
|
118
130
|
grid-template-rows: repeat(3, auto); // 桌面端:3行
|
|
119
131
|
gap: var(--o-gap-6);
|
|
132
|
+
@include respond('laptop') {
|
|
133
|
+
gap: var(--o-gap-5);
|
|
134
|
+
}
|
|
135
|
+
@include respond('pad_h') {
|
|
136
|
+
gap: var(--o-gap-4);
|
|
137
|
+
}
|
|
138
|
+
@include respond('pad_v') {
|
|
139
|
+
gap: var(--o-gap-5);
|
|
140
|
+
}
|
|
141
|
+
@include respond('phone') {
|
|
142
|
+
gap: var(--o-gap-5);
|
|
143
|
+
}
|
|
120
144
|
|
|
121
145
|
// 移动端:2列布局(序号列 + 内容列)
|
|
122
146
|
@include respond('<=pad_v') {
|
|
123
147
|
grid-template-columns: auto 1fr; // 第1列自适应,第2列占满
|
|
124
148
|
grid-template-rows: auto; // 行数自动
|
|
125
149
|
gap: var(--o-gap-3); // 列间距12px,行间距12px
|
|
150
|
+
row-gap: var(--o-gap-6); // 行间距
|
|
151
|
+
|
|
152
|
+
@include respond('laptop') {
|
|
153
|
+
row-gap: var(--o-gap-5);
|
|
154
|
+
}
|
|
155
|
+
@include respond('pad_h') {
|
|
156
|
+
row-gap: var(--o-gap-4);
|
|
157
|
+
}
|
|
158
|
+
@include respond('pad_v') {
|
|
159
|
+
row-gap: var(--o-gap-3);
|
|
160
|
+
}
|
|
161
|
+
@include respond('phone') {
|
|
162
|
+
row-gap: var(--o-gap-3);
|
|
163
|
+
}
|
|
126
164
|
}
|
|
127
165
|
|
|
128
166
|
.step-item {
|
|
@@ -132,6 +170,12 @@ defineProps<EventsApplyPropsT>();
|
|
|
132
170
|
flex-direction: column; // 垂直排列子元素
|
|
133
171
|
--idx-size: 20px;
|
|
134
172
|
--idx-gap: var(--o-gap-3);
|
|
173
|
+
@include respond('laptop') {
|
|
174
|
+
--idx-gap: var(--o-gap-2);
|
|
175
|
+
}
|
|
176
|
+
@include respond('pad_h') {
|
|
177
|
+
--idx-gap: var(--o-gap-2);
|
|
178
|
+
}
|
|
135
179
|
// 移动端:强制在第2列显示
|
|
136
180
|
@include respond('<=pad_v') {
|
|
137
181
|
grid-column: 2 !important;
|
|
@@ -146,6 +190,14 @@ defineProps<EventsApplyPropsT>();
|
|
|
146
190
|
display: flex;
|
|
147
191
|
align-items: center;
|
|
148
192
|
@include h2;
|
|
193
|
+
@include respond('laptop') {
|
|
194
|
+
margin-bottom: var(--o-gap-3);
|
|
195
|
+
padding: var(--o-gap-4) var(--o-gap-5) 0 var(--o-gap-5);
|
|
196
|
+
}
|
|
197
|
+
@include respond('pad_h') {
|
|
198
|
+
margin-bottom: var(--o-gap-2);
|
|
199
|
+
padding: var(--o-gap-3) var(--o-gap-4) 0 var(--o-gap-4);
|
|
200
|
+
}
|
|
149
201
|
@include respond('pad_v') {
|
|
150
202
|
margin-bottom: 0;
|
|
151
203
|
padding: var(--o-gap-3) var(--o-gap-4);
|
|
@@ -183,6 +235,12 @@ defineProps<EventsApplyPropsT>();
|
|
|
183
235
|
color: var(--o-color-info2);
|
|
184
236
|
padding: 0 var(--o-gap-6) var(--o-gap-4) var(--o-gap-6);
|
|
185
237
|
@include tip1;
|
|
238
|
+
@include respond('laptop') {
|
|
239
|
+
padding: 0 var(--o-gap-5) var(--o-gap-3) var(--o-gap-5);
|
|
240
|
+
}
|
|
241
|
+
@include respond('pad_h') {
|
|
242
|
+
padding: 0 var(--o-gap-4) var(--o-gap-3) var(--o-gap-4);
|
|
243
|
+
}
|
|
186
244
|
@include respond('pad_v') {
|
|
187
245
|
padding: var(--o-gap-3) var(--o-gap-4);
|
|
188
246
|
}
|
|
@@ -215,6 +273,12 @@ defineProps<EventsApplyPropsT>();
|
|
|
215
273
|
font-size: 16px;
|
|
216
274
|
margin-right: var(--o-gap-4);
|
|
217
275
|
color: #fff;
|
|
276
|
+
@include respond('laptop') {
|
|
277
|
+
margin-right: var(--o-gap-3);
|
|
278
|
+
}
|
|
279
|
+
@include respond('pad_h') {
|
|
280
|
+
margin-right: var(--o-gap-2);
|
|
281
|
+
}
|
|
218
282
|
@include respond('pad_v') {
|
|
219
283
|
margin-right: var(--o-gap-2);
|
|
220
284
|
}
|
|
@@ -237,11 +301,19 @@ defineProps<EventsApplyPropsT>();
|
|
|
237
301
|
--padding-left: var(--o-gap-4);
|
|
238
302
|
padding-left: calc(var(--o-gap-4) + var(--o-gap-4));
|
|
239
303
|
color: rgba(255, 255, 255, 0.8);
|
|
304
|
+
@include respond('laptop') {
|
|
305
|
+
--padding-left: var(--o-gap-3);
|
|
306
|
+
}
|
|
307
|
+
@include respond('pad_h') {
|
|
308
|
+
--padding-left: var(--o-gap-2);
|
|
309
|
+
}
|
|
240
310
|
@include respond('pad_v') {
|
|
241
311
|
padding-left: var(--o-gap-5);
|
|
312
|
+
color: var(--o-color-info2);
|
|
242
313
|
}
|
|
243
314
|
@include respond('phone') {
|
|
244
315
|
padding-left: var(--o-gap-5);
|
|
316
|
+
color: var(--o-color-info2);
|
|
245
317
|
}
|
|
246
318
|
}
|
|
247
319
|
}
|
|
@@ -335,9 +407,23 @@ defineProps<EventsApplyPropsT>();
|
|
|
335
407
|
|
|
336
408
|
.img-wrapper {
|
|
337
409
|
height: 280px;
|
|
338
|
-
width:
|
|
410
|
+
--width: var(--o-gap-6);
|
|
411
|
+
width: calc(100% - var(--width) * 2);
|
|
339
412
|
margin-left: auto;
|
|
340
413
|
margin-right: auto;
|
|
414
|
+
@include respond('laptop') {
|
|
415
|
+
--width: var(--o-gap-5);
|
|
416
|
+
}
|
|
417
|
+
@include respond('pad_h') {
|
|
418
|
+
--width: var(--o-gap-4);
|
|
419
|
+
height: 220px;
|
|
420
|
+
}
|
|
421
|
+
@include respond('pad_v') {
|
|
422
|
+
--width: var(--o-gap-5);
|
|
423
|
+
}
|
|
424
|
+
@include respond('phone') {
|
|
425
|
+
--width: var(--o-gap-5);
|
|
426
|
+
}
|
|
341
427
|
}
|
|
342
428
|
|
|
343
429
|
.img-wrapper-phone {
|
|
@@ -198,7 +198,16 @@ const list = computed(() => {
|
|
|
198
198
|
padding: var(--o-gap-5) var(--o-gap-6);
|
|
199
199
|
gap: var(--o-gap-3) var(--o-gap-2);
|
|
200
200
|
@include text1;
|
|
201
|
-
@include respond('
|
|
201
|
+
@include respond('laptop') {
|
|
202
|
+
padding: var(--o-gap-4) var(--o-gap-5);
|
|
203
|
+
}
|
|
204
|
+
@include respond('pad_h') {
|
|
205
|
+
padding: var(--o-gap-4) var(--o-gap-5);
|
|
206
|
+
}
|
|
207
|
+
@include respond('pad_v') {
|
|
208
|
+
padding: var(--o-gap-3) var(--o-gap-4);
|
|
209
|
+
}
|
|
210
|
+
@include respond('phone') {
|
|
202
211
|
padding: var(--o-gap-3) var(--o-gap-4);
|
|
203
212
|
}
|
|
204
213
|
|
|
@@ -212,6 +221,12 @@ const list = computed(() => {
|
|
|
212
221
|
flex-shrink: 0;
|
|
213
222
|
margin-right: var(--o-gap-5);
|
|
214
223
|
font-weight: 500;
|
|
224
|
+
@include respond('laptop') {
|
|
225
|
+
margin-right: var(--o-gap-4);
|
|
226
|
+
}
|
|
227
|
+
@include respond('pad_h') {
|
|
228
|
+
margin-right: var(--o-gap-3);
|
|
229
|
+
}
|
|
215
230
|
@include respond('pad_v') {
|
|
216
231
|
margin-right: var(--o-gap-4);
|
|
217
232
|
}
|
|
@@ -219,7 +234,6 @@ const list = computed(() => {
|
|
|
219
234
|
margin-right: var(--o-gap-4);
|
|
220
235
|
}
|
|
221
236
|
}
|
|
222
|
-
|
|
223
237
|
.o-toggle {
|
|
224
238
|
--toggle-size: 32px;
|
|
225
239
|
--toggle-padding: 3px 15px;
|
|
@@ -253,6 +267,14 @@ const list = computed(() => {
|
|
|
253
267
|
grid-template-columns: repeat(1, 1fr);
|
|
254
268
|
container-type: inline-size;
|
|
255
269
|
}
|
|
270
|
+
@include respond('laptop') {
|
|
271
|
+
margin-top: var(--o-gap-5);
|
|
272
|
+
gap: var(--o-gap-5);
|
|
273
|
+
}
|
|
274
|
+
@include respond('pad_h') {
|
|
275
|
+
margin-top: var(--o-gap-4);
|
|
276
|
+
gap: var(--o-gap-4);
|
|
277
|
+
}
|
|
256
278
|
@include respond('pad_v') {
|
|
257
279
|
margin-top: var(--o-gap-4);
|
|
258
280
|
gap: var(--o-gap-3);
|
|
@@ -322,6 +344,10 @@ const list = computed(() => {
|
|
|
322
344
|
@include respond('<=pad_v') {
|
|
323
345
|
--tag-padding: var(--o-gap-1);
|
|
324
346
|
}
|
|
347
|
+
@include respond('phone') {
|
|
348
|
+
top: var(--o-gap-2);
|
|
349
|
+
right: var(--o-gap-2);
|
|
350
|
+
}
|
|
325
351
|
}
|
|
326
352
|
|
|
327
353
|
.event-name {
|
|
@@ -351,6 +377,12 @@ const list = computed(() => {
|
|
|
351
377
|
}
|
|
352
378
|
|
|
353
379
|
@include text1;
|
|
380
|
+
@include respond('laptop') {
|
|
381
|
+
margin-top: var(--o-gap-4);
|
|
382
|
+
}
|
|
383
|
+
@include respond('pad_h') {
|
|
384
|
+
margin-top: var(--o-gap-3);
|
|
385
|
+
}
|
|
354
386
|
@include respond('pad_v') {
|
|
355
387
|
margin-top: var(--o-gap-2);
|
|
356
388
|
}
|
|
@@ -382,6 +414,19 @@ const list = computed(() => {
|
|
|
382
414
|
--pagination-item-bg-color-current: var(--o-color-primary1);
|
|
383
415
|
--pagination-item-color-current: #fff;
|
|
384
416
|
|
|
417
|
+
@include respond('laptop') {
|
|
418
|
+
margin-top: var(--o-gap-5);
|
|
419
|
+
}
|
|
420
|
+
@include respond('pad_h') {
|
|
421
|
+
margin-top: var(--o-gap-4);
|
|
422
|
+
}
|
|
423
|
+
@include respond('pad_v') {
|
|
424
|
+
margin-top: var(--o-gap-4);
|
|
425
|
+
}
|
|
426
|
+
@include respond('phone') {
|
|
427
|
+
margin-top: var(--o-gap-4);
|
|
428
|
+
}
|
|
429
|
+
|
|
385
430
|
.o-pagination-wrap {
|
|
386
431
|
justify-content: flex-end;
|
|
387
432
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { ODivider } from '@opensig/opendesign';
|
|
3
3
|
|
|
4
|
-
import ContentWrapper from '
|
|
4
|
+
import ContentWrapper from '../common/ContentWrapper.vue';
|
|
5
5
|
|
|
6
6
|
const props = withDefaults(defineProps<{
|
|
7
7
|
simple: any;
|
|
@@ -34,9 +34,9 @@ const props = withDefaults(defineProps<{
|
|
|
34
34
|
<ContentWrapper v-if="$slots.atom || props.atom">
|
|
35
35
|
<slot name="atom">
|
|
36
36
|
<div v-if="props.atom" class="atom">
|
|
37
|
-
<p class="atom-text">{{ props.atom[props.lang]
|
|
38
|
-
<a :href="props.atom[props.lang]
|
|
39
|
-
<img :src="props.atom[props.lang]
|
|
37
|
+
<p class="atom-text">{{ props.atom[props.lang]?.title }}</p>
|
|
38
|
+
<a :href="props.atom[props.lang]?.href" target="_blank">
|
|
39
|
+
<img :src="props.atom[props.lang]?.img" class="atom-logo" alt="" />
|
|
40
40
|
</a>
|
|
41
41
|
</div>
|
|
42
42
|
<ODivider class="atom-divider" />
|
|
@@ -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>
|
|
@@ -4,15 +4,15 @@ import { OIcon } from '@opensig/opendesign';
|
|
|
4
4
|
import { onClickOutside, useDebounceFn } from '@vueuse/core';
|
|
5
5
|
import { useScreen } from '@opendesign-plus/composables';
|
|
6
6
|
|
|
7
|
-
import SearchImageInput from '
|
|
8
|
-
import SearchPanel from '
|
|
9
|
-
import { useSearchHistory } from '
|
|
7
|
+
import SearchImageInput from '../search/internal/SearchImageInput.vue';
|
|
8
|
+
import SearchPanel from '../search/internal/SearchPanel.vue';
|
|
9
|
+
import { useSearchHistory } from '../search/composables/useSearchHistory';
|
|
10
10
|
import { useI18n } from '@/i18n';
|
|
11
11
|
import type {
|
|
12
12
|
OSearchPayload,
|
|
13
13
|
OSearchRecommendItem,
|
|
14
14
|
OSearchUploadImageFn,
|
|
15
|
-
} from '
|
|
15
|
+
} from '../search/types';
|
|
16
16
|
|
|
17
17
|
import IconSearch from '~icons/components/icon-header-search.svg';
|
|
18
18
|
import IconBack from '~icons/components/icon-header-back.svg';
|
|
@@ -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(item.key);
|
|
217
|
+
runSearch(item.key ?? '');
|
|
218
218
|
};
|
|
219
219
|
|
|
220
220
|
const handleRecommendClick = (val: string) => {
|
|
@@ -4,14 +4,14 @@ import { OIcon, ODropdown, ODropdownItem } from '@opensig/opendesign';
|
|
|
4
4
|
|
|
5
5
|
import IconChevronDown from '~icons/components/icon-chevron-down.svg';
|
|
6
6
|
|
|
7
|
-
interface CodeItemT {
|
|
7
|
+
export interface CodeItemT {
|
|
8
8
|
label: string;
|
|
9
9
|
href: string;
|
|
10
10
|
icon?: string;
|
|
11
11
|
target?: string;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
interface CodePropsT {
|
|
14
|
+
export interface CodePropsT {
|
|
15
15
|
title?: string;
|
|
16
16
|
options?: CodeItemT[];
|
|
17
17
|
href?: string;
|
|
@@ -6,7 +6,7 @@ import { useScreen } from '@opendesign-plus/composables';
|
|
|
6
6
|
import IconSun from '~icons/components/icon-sun.svg';
|
|
7
7
|
import IconMoon from '~icons/components/icon-moon.svg';
|
|
8
8
|
|
|
9
|
-
export interface
|
|
9
|
+
export interface OHeaderThemePropsT {
|
|
10
10
|
theme?: string;
|
|
11
11
|
type?: 'auto' | 'common' | 'mobile';
|
|
12
12
|
lightValue?: string;
|
|
@@ -14,12 +14,12 @@ export interface OThemeSwitcherPropsT {
|
|
|
14
14
|
disabled?: boolean;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
export interface
|
|
17
|
+
export interface OHeaderThemeEmitsT {
|
|
18
18
|
(e: 'update:theme', value: string): void;
|
|
19
19
|
(e: 'change', val: string): void;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
const props = withDefaults(defineProps<
|
|
22
|
+
const props = withDefaults(defineProps<OHeaderThemePropsT>(), {
|
|
23
23
|
theme: 'light',
|
|
24
24
|
type: 'auto',
|
|
25
25
|
lightValue: 'light',
|
|
@@ -27,7 +27,7 @@ const props = withDefaults(defineProps<OThemeSwitcherPropsT>(), {
|
|
|
27
27
|
disabled: false,
|
|
28
28
|
});
|
|
29
29
|
|
|
30
|
-
const emit = defineEmits<
|
|
30
|
+
const emit = defineEmits<OHeaderThemeEmitsT>();
|
|
31
31
|
|
|
32
32
|
const { gtPhone } = useScreen();
|
|
33
33
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { OIcon, OBadge, ODropdown, ODropdownItem } from '@opensig/opendesign';
|
|
3
3
|
|
|
4
|
-
import AppAvatar from '
|
|
4
|
+
import AppAvatar from '../common/AppAvatar.vue';
|
|
5
5
|
|
|
6
6
|
import IconAvatar from '~icons/components/icon-avatar-line.svg';
|
|
7
7
|
import IconChevronDown from '~icons/components/icon-chevron-down.svg';
|
|
@@ -10,12 +10,12 @@ import { useScreen } from '@opendesign-plus/composables';
|
|
|
10
10
|
|
|
11
11
|
const { lePadV } = useScreen();
|
|
12
12
|
|
|
13
|
-
interface UserInfoT {
|
|
13
|
+
export interface UserInfoT {
|
|
14
14
|
photo: string;
|
|
15
15
|
username: string;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
interface OptionsItemT {
|
|
18
|
+
export interface OptionsItemT {
|
|
19
19
|
id: string; // id
|
|
20
20
|
label: string; // 标题
|
|
21
21
|
icon?: string; // icon
|
|
@@ -25,7 +25,7 @@ interface OptionsItemT {
|
|
|
25
25
|
logout: boolean; // 是否是退出登录 item
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
interface UserPropsT {
|
|
28
|
+
export interface UserPropsT {
|
|
29
29
|
token?: string;
|
|
30
30
|
lang?: string;
|
|
31
31
|
noticeTotal?: number;
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import _OHeader from './OHeader.vue';
|
|
2
2
|
import _OHeaderMobile from './OHeaderMobile.vue';
|
|
3
|
+
import _OHeaderUser from './OHeaderUser.vue';
|
|
4
|
+
import _OHeaderSearch from './OHeaderSearch.vue';
|
|
5
|
+
import _OHeaderTheme from './OHeaderTheme.vue';
|
|
6
|
+
import _OHeaderSourceCode from './OHeaderSourceCode.vue';
|
|
7
|
+
import _OHeaderLanguageSwitcher from './OHeaderLanguageSwitcher.vue';
|
|
3
8
|
import type { App } from 'vue';
|
|
4
9
|
|
|
5
10
|
const OHeader = Object.assign(_OHeader, {
|
|
@@ -7,10 +12,42 @@ const OHeader = Object.assign(_OHeader, {
|
|
|
7
12
|
app.component('OHeader', _OHeader);
|
|
8
13
|
},
|
|
9
14
|
});
|
|
15
|
+
|
|
10
16
|
const OHeaderMobile = Object.assign(_OHeaderMobile, {
|
|
11
17
|
install(app: App) {
|
|
12
18
|
app.component('OHeaderMobile', _OHeaderMobile);
|
|
13
19
|
},
|
|
14
20
|
});
|
|
15
21
|
|
|
16
|
-
|
|
22
|
+
const OHeaderUser = Object.assign(_OHeaderUser, {
|
|
23
|
+
install(app: App) {
|
|
24
|
+
app.component('OHeaderUser', _OHeaderUser);
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const OHeaderSearch = Object.assign(_OHeaderSearch, {
|
|
29
|
+
install(app: App) {
|
|
30
|
+
app.component('OHeaderSearch', _OHeaderSearch);
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const OHeaderTheme = Object.assign(_OHeaderTheme, {
|
|
35
|
+
install(app: App) {
|
|
36
|
+
app.component('OHeaderTheme', _OHeaderTheme);
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
const OHeaderSourceCode = Object.assign(_OHeaderSourceCode, {
|
|
41
|
+
install(app: App) {
|
|
42
|
+
app.component('OHeaderSourceCode', _OHeaderSourceCode);
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
const OHeaderLanguageSwitcher = Object.assign(_OHeaderLanguageSwitcher, {
|
|
47
|
+
install(app: App) {
|
|
48
|
+
app.component('OHeaderLanguageSwitcher', _OHeaderLanguageSwitcher);
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
export * from './types';
|
|
53
|
+
export { OHeader, OHeaderMobile, OHeaderUser, OHeaderSearch, OHeaderTheme, OHeaderSourceCode, OHeaderLanguageSwitcher };
|