@opendesign-plus-test/components 0.0.1-rc.18 → 0.0.1-rc.19

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 (54) hide show
  1. package/dist/components/OSourceCode.vue.d.ts +0 -2
  2. package/dist/components/events/config.d.ts +12 -12
  3. package/dist/components.cjs.js +3 -3
  4. package/dist/components.css +1 -1
  5. package/dist/components.es.js +1828 -1836
  6. package/package.json +1 -1
  7. package/src/components/OFooter.vue +19 -45
  8. package/src/components/OHeader.vue +1 -2
  9. package/src/components/OHeaderMoblie.vue +3 -3
  10. package/src/components/OSourceCode.vue +6 -35
  11. package/src/components/common/HeaderEulerNav.vue +10 -16
  12. package/src/components/common/HeaderNavMoblie.vue +9 -9
  13. package/src/components/common/HeaderUbmcNav.vue +1 -1
  14. package/src/components/events/OEventsList.vue +1 -1
  15. package/src/components/events/config.ts +12 -26
  16. package/npmcachae/_cacache/content-v2/sha512/bd/56/25079ffb18446953f88fc063c3d6eaf7191772851b8477c118f113b920a7f357b67b9006181af58c9f68b0059b899ad0f2c86fe0a6490958d138cb063afd +0 -1
  17. package/npmcachae/_cacache/index-v5/d8/49/af4c6bb8f580edbd7b6e18db381844403e5f689a9849c5ffcdd2dd95d735 +0 -3
  18. package/npmcachae/_logs/2026-03-17T09_38_12_009Z-debug-0.log +0 -157
  19. package/npmcachae/_logs/2026-03-17T09_38_14_370Z-debug-0.log +0 -157
  20. package/npmcachae/_logs/2026-03-17T09_38_16_516Z-debug-0.log +0 -157
  21. package/npmcachae/_logs/2026-03-17T09_38_18_616Z-debug-0.log +0 -157
  22. package/npmcachae/_logs/2026-03-17T09_38_20_859Z-debug-0.log +0 -157
  23. package/npmcachae/_logs/2026-03-17T09_38_23_182Z-debug-0.log +0 -157
  24. package/npmcachae/_logs/2026-03-17T09_38_25_452Z-debug-0.log +0 -157
  25. package/npmcachae/_logs/2026-03-17T09_38_27_865Z-debug-0.log +0 -157
  26. package/npmcachae/_logs/2026-03-17T09_38_30_082Z-debug-0.log +0 -157
  27. package/npmcachae/_logs/2026-03-17T09_38_32_219Z-debug-0.log +0 -157
  28. package/npmcachae/_logs/2026-03-17T09_38_34_308Z-debug-0.log +0 -157
  29. package/npmcachae/_update-notifier-last-checked +0 -0
  30. package/src/assets/events/city/default-cover.png +0 -0
  31. package/src/assets/events/city//344/270/212/346/265/267.png +0 -0
  32. package/src/assets/events/city//345/214/227/344/272/254.png +0 -0
  33. package/src/assets/events/city//345/215/227/344/272/254.png +0 -0
  34. package/src/assets/events/city//345/244/251/346/264/245.png +0 -0
  35. package/src/assets/events/city//345/271/277/345/267/236.png +0 -0
  36. package/src/assets/events/city//346/210/220/351/203/275.png +0 -0
  37. package/src/assets/events/city//346/227/240/351/224/241.png +0 -0
  38. package/src/assets/events/city//346/235/255/345/267/236.png +0 -0
  39. package/src/assets/events/city//346/255/246/346/261/211.png +0 -0
  40. package/src/assets/events/city//346/267/261/345/234/2631.png +0 -0
  41. package/src/assets/events/city//346/267/261/345/234/2632.png +0 -0
  42. package/src/assets/events/city//350/213/217/345/267/236.png +0 -0
  43. package/src/assets/events/city//350/245/277/345/256/211.png +0 -0
  44. package/src/assets/events/city//351/203/221/345/267/236.png +0 -0
  45. package/src/components/events/npmcachae/_cacache/content-v2/sha512/2c/4f/a4140bfbf374a43f7dfe71880c051f79149cd259fb1a154fb692802c7489ef2317b737e7e690a627714ba19317971f29051b3798c246297b425a626a5b7a +0 -1
  46. package/src/components/events/npmcachae/_cacache/index-v5/8e/86/70dc69f1b1592fe14da10d2516ddfaa609af0cd9054a6ebde664acc6ab12 +0 -2
  47. package/src/components/events/npmcachae/_logs/2026-03-25T09_58_33_134Z-debug-0.log +0 -105
  48. package/src/components/events/npmcachae/_update-notifier-last-checked +0 -0
  49. package/src/npmcachae/_cacache/content-v2/sha512/bd/56/25079ffb18446953f88fc063c3d6eaf7191772851b8477c118f113b920a7f357b67b9006181af58c9f68b0059b899ad0f2c86fe0a6490958d138cb063afd +0 -1
  50. package/src/npmcachae/_cacache/index-v5/d8/49/af4c6bb8f580edbd7b6e18db381844403e5f689a9849c5ffcdd2dd95d735 +0 -3
  51. package/src/npmcachae/_logs/2026-03-17T10_53_33_398Z-debug-0.log +0 -156
  52. package/src/npmcachae/_logs/2026-03-17T10_53_35_464Z-debug-0.log +0 -156
  53. package/src/npmcachae/_logs/2026-03-17T10_53_37_852Z-debug-0.log +0 -156
  54. package/src/npmcachae/_update-notifier-last-checked +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opendesign-plus-test/components",
3
- "version": "0.0.1-rc.18",
3
+ "version": "0.0.1-rc.19",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -29,7 +29,7 @@ const props = defineProps({
29
29
  <img :src="props.atom[props.lang].img" class="atom-logo" alt="" />
30
30
  </a>
31
31
  </div>
32
- <ODivider class="atom-divider" />
32
+ <ODivider :style="{ '--o-divider-bd-color': 'rgba(229, 229, 229, 0.12)', '--o-divider-gap': '16px' }" />
33
33
  </slot>
34
34
  </ContentWrapper>
35
35
  <div class="footer-content" :style="{ backgroundImage: `url(${props.footerBg})` }">
@@ -81,7 +81,7 @@ const props = defineProps({
81
81
  <ODivider
82
82
  v-if="index !== props.footerOption[props.lang].link.length - 1"
83
83
  :style="{
84
- '--o-divider-bd-color': 'var(--o-color-info3-inverse)',
84
+ '--o-divider-bd-color': 'var(--o-color-white)',
85
85
  '--o-divider-label-gap': '0 8px',
86
86
  }"
87
87
  direction="v"
@@ -191,26 +191,12 @@ const props = defineProps({
191
191
  height: 32px;
192
192
  margin-top: 12px;
193
193
 
194
- @include respond-to('<=laptop') {
195
- margin-top: 8px;
196
- }
197
-
198
194
  @include respond-to('<=pad_v') {
199
195
  height: 30px;
200
- margin-top: 12px;
196
+ margin-top: 16px;
201
197
  }
202
198
  }
203
199
  }
204
- .atom-divider {
205
- --o-divider-bd-color: rgba(229, 229, 229, 0.12);
206
- --o-divider-gap: 16px;
207
- @include respond-to('laptop') {
208
- --o-divider-gap: 12px;
209
- }
210
- @include respond-to('pad_h') {
211
- --o-divider-gap: 8px;
212
- }
213
- }
214
200
  .footer-content {
215
201
  @include tip1;
216
202
  background-position: bottom;
@@ -258,12 +244,11 @@ const props = defineProps({
258
244
  margin-top: 16px;
259
245
  padding-bottom: 12px;
260
246
  display: flex;
261
- justify-content: center;
262
247
  border-bottom: 1px solid rgba(229, 229, 229, 0.12);
263
248
  @include tip2;
264
249
  .friendship-link-title {
265
250
  color: var(--o-color-white);
266
- margin-right: 32px;
251
+ margin-right: 38px;
267
252
  flex-shrink: 0;
268
253
  }
269
254
  a:not(:last-of-type) {
@@ -281,7 +266,13 @@ const props = defineProps({
281
266
  }
282
267
 
283
268
  @include respond-to('<=pad_v') {
284
- display: none;
269
+ flex-direction: column;
270
+ padding-bottom: 16px;
271
+ .friendship-link-box {
272
+ margin-top: 12px;
273
+ display: flex;
274
+ flex-wrap: wrap;
275
+ }
285
276
  }
286
277
  }
287
278
  .inner {
@@ -293,7 +284,7 @@ const props = defineProps({
293
284
 
294
285
  @include respond-to('<=pad_v') {
295
286
  margin: 0 auto;
296
- padding: 0 0 24px;
287
+ padding: 12px 0 24px;
297
288
  flex-direction: column;
298
289
  }
299
290
  }
@@ -337,12 +328,7 @@ const props = defineProps({
337
328
  display: inline-block;
338
329
  }
339
330
  .footer-option-item {
340
- display: flex;
341
- justify-content: center;
342
331
  align-items: center;
343
- .o-divider {
344
- height: 12px;
345
- }
346
332
  }
347
333
 
348
334
  @include respond-to('<=pad_v') {
@@ -351,10 +337,14 @@ const props = defineProps({
351
337
  }
352
338
  .license {
353
339
  color: var(--o-color-white);
354
- margin-top: 8px;
340
+ margin-top: 6px;
355
341
  span {
356
342
  color: rgba(var(--o-white), 0.6);
357
343
  }
344
+
345
+ @include respond-to('<=pad_v') {
346
+ margin-top: 4px;
347
+ }
358
348
  }
359
349
  .copyright {
360
350
  margin-top: 6px;
@@ -400,7 +390,7 @@ const props = defineProps({
400
390
  }
401
391
  }
402
392
  .footer-right {
403
- flex: 1;
393
+ flex-shrink: 0;
404
394
  .code-box {
405
395
  display: flex;
406
396
  justify-content: right;
@@ -452,10 +442,7 @@ const props = defineProps({
452
442
  }
453
443
  }
454
444
  .code-pop + .code-pop {
455
- margin-left: 80px;
456
- @include respond-to('<=pad_v') {
457
- margin-left: 64px;
458
- }
445
+ margin-left: 16px;
459
446
  }
460
447
  }
461
448
 
@@ -517,11 +504,6 @@ const props = defineProps({
517
504
  .footer-right {
518
505
  flex-shrink: 0;
519
506
  margin-left: 16px;
520
- display: flex;
521
- align-items: center;
522
- .o-divider-v {
523
- height: 12px;
524
- }
525
507
  }
526
508
  }
527
509
  .app-footer-mb {
@@ -530,14 +512,6 @@ const props = defineProps({
530
512
  text-align: center;
531
513
  color: var(--o-color-info4);
532
514
  @include tip1;
533
- .links {
534
- display: flex;
535
- align-items: center;
536
- justify-content: center;
537
- .o-divider-v {
538
- height: 12px;
539
- }
540
- }
541
515
  .copyright {
542
516
  margin-top: 4px;
543
517
  }
@@ -60,12 +60,11 @@ const goHome = () => {
60
60
  z-index: 999;
61
61
  box-shadow: 0 3px 9px 0 rgba(0, 18, 85, 0.08);
62
62
  backdrop-filter: blur(5px);
63
- --o-header-height: 72px;
64
63
  }
65
64
  .header-wrap {
66
65
  display: flex;
67
66
  align-items: center;
68
- height: var(--o-header-height);
67
+ height: 72px;
69
68
  }
70
69
  .header-logo {
71
70
  height: 100%;
@@ -94,12 +94,11 @@ const mobileClick = () => {
94
94
  z-index: 999;
95
95
  box-shadow: 0 3px 9px 0 rgba(0, 18, 85, 0.08);
96
96
  backdrop-filter: blur(5px);
97
- --o-header-height: 56px;
98
97
  }
99
98
  .header-wrap {
100
99
  display: flex;
101
100
  align-items: center;
102
- height: var(--o-header-height);
101
+ height: 48px;
103
102
  justify-content: space-between;
104
103
  position: relative;
105
104
  }
@@ -120,10 +119,11 @@ const mobileClick = () => {
120
119
  .header-title {
121
120
  color: var(--o-color-info1);
122
121
  font-weight: 500;
122
+ font-size: 16px;
123
+ line-height: 24px;
123
124
  overflow: hidden;
124
125
  white-space: nowrap;
125
126
  text-overflow: ellipsis;
126
- @include text2;
127
127
  }
128
128
  }
129
129
  .simple-header-right {
@@ -1,5 +1,4 @@
1
1
  <script setup lang="ts">
2
- import { ref } from 'vue';
3
2
  import { OIcon, ODropdown, ODropdownItem } from '@opensig/opendesign';
4
3
 
5
4
  import IconChevronDown from '~icons/components/icon-chevron-down.svg';
@@ -15,7 +14,6 @@ interface CodePropsT {
15
14
  options?: CodeItemT[];
16
15
  url?: string;
17
16
  icon?: string;
18
- justify?: string;
19
17
  }
20
18
 
21
19
  withDefaults(defineProps<CodePropsT>(), {
@@ -23,17 +21,11 @@ withDefaults(defineProps<CodePropsT>(), {
23
21
  options: undefined,
24
22
  url: undefined,
25
23
  icon: undefined,
26
- justify: 'center',
27
24
  });
28
25
 
29
26
  const itemChange = (data: any) => {
30
27
  window.open(data.url, '_blank');
31
28
  };
32
-
33
- const dropdownVisible = ref(false);
34
- const visibleChange = (val: boolean) => {
35
- dropdownVisible.value = val;
36
- };
37
29
  </script>
38
30
 
39
31
  <template>
@@ -44,20 +36,13 @@ const visibleChange = (val: boolean) => {
44
36
  <component :is="icon" class="icon" />
45
37
  </OIcon>
46
38
  </div>
47
- <ODropdown
48
- v-else
49
- trigger="hover"
50
- optionPosition="bottom"
51
- option-wrap-class="dropdown"
52
- :class="{ 'dropdown-active': dropdownVisible }"
53
- @visible-change="visibleChange"
54
- >
39
+ <ODropdown v-else trigger="hover" optionPosition="bottom" option-wrap-class="dropdown">
55
40
  <div class="info-wrap hover-icon-rotate">
56
41
  <span class="title">{{ title }}</span>
57
42
  <OIcon class="icon"><IconChevronDown /></OIcon>
58
43
  </div>
59
44
  <template #dropdown>
60
- <ODropdownItem v-for="item in options" @click="itemChange(item)" :key="item.url" class="list" :style="{ '--dropdown-item-justify': justify }">
45
+ <ODropdownItem v-for="item in options" @click="itemChange(item)" :key="item.url" class="list">
61
46
  {{ item.label }}
62
47
  <OIcon v-if="item.icon">
63
48
  <component :is="item.icon" class="icon" />
@@ -80,7 +65,7 @@ const visibleChange = (val: boolean) => {
80
65
  color: var(--o-color-info1);
81
66
  cursor: pointer;
82
67
 
83
- @include hover {
68
+ &:hover {
84
69
  color: var(--o-color-primary1);
85
70
  }
86
71
 
@@ -120,31 +105,17 @@ const visibleChange = (val: boolean) => {
120
105
  .o-dropdown {
121
106
  height: 100%;
122
107
  }
123
- .dropdown-active {
124
- .info-wrap {
125
- color: var(--o-color-primary1);
126
- }
127
- .o-icon {
128
- transform: rotate(-180deg);
129
- }
130
- }
131
108
  .o-dropdown-item {
132
109
  background: var(--o-color-fill2);
133
110
  cursor: pointer;
134
111
  border-radius: var(--o-radius_control-xs);
135
- padding: var(--o-gap-1) 12px;
112
+ padding: var(--o-gap-1);
136
113
  min-width: 144px;
137
- height: 32px;
138
- @include tip1;
114
+ height: 40px;
139
115
 
140
116
  @include hover {
141
- background: var(--o-color-control2-light);
142
- }
143
-
144
- &:active {
145
117
  color: var(--o-color-primary1);
146
- background: var(--o-color-control3-light);
147
- font-weight: 600;
118
+ background: var(--o-color-control2-light);
148
119
  }
149
120
  }
150
121
  .dropdown {
@@ -16,7 +16,7 @@ const props = defineProps({
16
16
  });
17
17
 
18
18
  const { locale } = useLocale();
19
- const { theme, isDark } = useTheme();
19
+ const { theme } = useTheme();
20
20
 
21
21
  const navRef = ref();
22
22
  const navListRef = ref();
@@ -32,9 +32,9 @@ const navShortcut = ref<any>([]);
32
32
  const isPicture = ref(false);
33
33
  const toggleDebounced = useDebounceFn(function (item: any | null) {
34
34
  if (item === null) {
35
- navActive.value = '';
36
- isShow.value = false;
37
- isPicture.value = false;
35
+ // navActive.value = '';
36
+ // isShow.value = false;
37
+ // isPicture.value = false;
38
38
  } else {
39
39
  navActive.value = item.id;
40
40
  isShow.value = true;
@@ -103,7 +103,7 @@ onUnmounted(() => {
103
103
  <div class="right-icon" v-if="navVisibleLeft">
104
104
  <OIcon @click="scrollNavLeft"><IconCaretLeft /></OIcon>
105
105
  </div>
106
- <nav ref="navRef" class="o-nav" :class="{ 'o-nav-scroll': navVisibleLeft || !navVisibleRight, dark: isDark }">
106
+ <nav ref="navRef" class="o-nav" :class="{ 'o-nav-scroll': navVisibleLeft || !navVisibleRight }">
107
107
  <ul ref="navListRef" class="o-nav-list">
108
108
  <li v-for="item in navData" :key="item.id" @mouseenter="toggleDebounced(item)" @mouseleave="toggleDebounced(null)">
109
109
  <span :id="'tour_headerNav_' + item.ID" class="nav-item">{{ item.label }}</span>
@@ -126,7 +126,7 @@ onUnmounted(() => {
126
126
  </OIcon>
127
127
  <OTag v-if="subItem.tag" round="pill" color="danger" size="small" class="content-tag">{{ subItem.tag }}</OTag>
128
128
  </a>
129
- <div v-if="subItem.description" class="desc-container">
129
+ <div class="desc-container">
130
130
  <p class="item-desc" :title="showDesc ? subItem.description : null" @mouseenter="descMouseenter($event)">
131
131
  {{ subItem.description }}
132
132
  </p>
@@ -214,11 +214,6 @@ onUnmounted(() => {
214
214
  &::-webkit-scrollbar {
215
215
  display: none;
216
216
  }
217
- &.dark {
218
- &::after {
219
- background-image: linear-gradient(90deg, rgba(var(--o-mixedgray-4), 0) 0%, rgba(var(--o-mixedgray-4), 1) 100%);
220
- }
221
- }
222
217
 
223
218
  .o-nav-list {
224
219
  display: flex;
@@ -290,7 +285,7 @@ onUnmounted(() => {
290
285
  }
291
286
  .nav-dropdown {
292
287
  position: fixed;
293
- top: var(--o-header-height);
288
+ top: 72px;
294
289
  left: 0;
295
290
  right: 0;
296
291
  background: var(--o-color-fill2);
@@ -363,7 +358,6 @@ onUnmounted(() => {
363
358
  }
364
359
  .content-tag {
365
360
  margin-left: var(--o-gap-2);
366
- border-radius: var(--o-radius-xs);
367
361
  @include respond-to('<=laptop') {
368
362
  display: none;
369
363
  }
@@ -924,9 +918,9 @@ onUnmounted(() => {
924
918
  }
925
919
 
926
920
  .icon {
927
- width: 24px;
928
- height: 24px;
929
- padding-left: 8px;
921
+ height: 16px;
922
+ width: 16px;
923
+ padding-left: 6px;
930
924
  }
931
925
  }
932
926
  .content-label {
@@ -132,6 +132,7 @@ watch(
132
132
  justify-content: center;
133
133
  height: 48px;
134
134
  color: var(--o-color-info1);
135
+ font-weight: 500;
135
136
 
136
137
  &.active {
137
138
  color: var(--o-color-primary1);
@@ -141,7 +142,7 @@ watch(
141
142
 
142
143
  .header-content-mb {
143
144
  position: fixed;
144
- top: var(--o-header-height);
145
+ top: 48px;
145
146
  bottom: 0;
146
147
  left: 0;
147
148
  right: 0;
@@ -156,8 +157,8 @@ watch(
156
157
  position: fixed;
157
158
  left: 0;
158
159
  overflow: hidden;
159
- top: var(--o-header-height);
160
- height: calc(100vh - var(--o-header-height));
160
+ top: 48px;
161
+ height: calc(100vh - 48px);
161
162
  transform: translateX(-130%);
162
163
 
163
164
  transition-duration: 0.333s;
@@ -185,12 +186,12 @@ watch(
185
186
  padding: 0;
186
187
  margin: 0;
187
188
  height: auto;
189
+ @include h4;
188
190
 
189
191
  > li {
190
192
  position: relative;
191
- text-align: center;
192
- @include tip1;
193
193
  @include nav-item;
194
+ text-align: center;
194
195
  }
195
196
  }
196
197
  }
@@ -227,7 +228,7 @@ watch(
227
228
  .content-label {
228
229
  color: var(--o-color-info3);
229
230
  font-weight: 500;
230
- @include tip1;
231
+ @include text1;
231
232
  }
232
233
 
233
234
  .item-not-children {
@@ -276,7 +277,6 @@ watch(
276
277
 
277
278
  .container-mobile {
278
279
  color: var(--o-color-primary1);
279
- margin-top: 8px;
280
280
  @include text2;
281
281
 
282
282
  .icon {
@@ -299,7 +299,7 @@ watch(
299
299
  color: var(--o-color-primary1);
300
300
  display: flex;
301
301
  align-items: center;
302
- @include tip1;
302
+ @include text2;
303
303
  }
304
304
 
305
305
  .content-tag {
@@ -316,7 +316,7 @@ watch(
316
316
  margin-top: var(--o-gap-1);
317
317
  text-align: justify;
318
318
  word-break: normal;
319
- @include tip2;
319
+ @include text1;
320
320
  @include text-truncate(2);
321
321
  }
322
322
  }
@@ -419,7 +419,7 @@ const handelHref = (href: string) => {
419
419
  align-items: center;
420
420
  height: 100%;
421
421
  padding: 0 var(--o-gap-4);
422
- color: var(--o-color-info1);
422
+ color: var(--o-color-info2);
423
423
  word-break: keep-all;
424
424
  position: relative;
425
425
  font-weight: normal;
@@ -14,7 +14,7 @@ import { computed, ref } from 'vue';
14
14
  import { type EventsCardItemT, EventsStatusT, type EventsListPropsT, SearchParamsT } from './types';
15
15
  import { compareDate } from './utils.ts';
16
16
  import { useI18n } from '@/i18n';
17
- import defaultCover from '@/assets/events/city/default-cover.png';
17
+ import defaultCover from 'https://infrastructure-website.osinfra.cn/picture/city/default-cover.jpg';
18
18
  import { CITY_MAP } from './config.ts';
19
19
  import { useScreen } from '@opendesign-plus/composables';
20
20
 
@@ -3,20 +3,6 @@ import IconEvents from '~icons/events/icon-events.svg';
3
3
  import IconCompetition from '~icons/events/icon-competition.svg';
4
4
  import IconRelease from '~icons/events/icon-release.svg';
5
5
 
6
- import 上海 from '@/assets/events/city/上海.png';
7
- import 北京 from '@/assets/events/city/北京.png';
8
- import 南京 from '@/assets/events/city/南京.png';
9
- import 天津 from '@/assets/events/city/天津.png';
10
- import 成都 from '@/assets/events/city/成都.png';
11
- import 无锡 from '@/assets/events/city/无锡.png';
12
- import 杭州 from '@/assets/events/city/杭州.png';
13
- import 深圳1 from '@/assets/events/city/深圳1.png';
14
- import 深圳2 from '@/assets/events/city/深圳2.png';
15
- import 苏州 from '@/assets/events/city/苏州.png';
16
- import 西安 from '@/assets/events/city/西安.png';
17
- import 郑州 from '@/assets/events/city/郑州.png';
18
- import 武汉 from '@/assets/events/city/武汉.png';
19
-
20
6
  export const EVENTS_COLOR_MAP = {
21
7
  summit: '--o-orange-6',
22
8
  events: '--o-cyan-6',
@@ -32,16 +18,16 @@ export const EVENTS_ICON_MAP = {
32
18
  };
33
19
 
34
20
  export const CITY_MAP = {
35
- 上海,
36
- 北京,
37
- 南京,
38
- 天津,
39
- 成都,
40
- 无锡,
41
- 杭州,
42
- 深圳: [深圳1, 深圳2],
43
- 苏州,
44
- 西安,
45
- 郑州,
46
- 武汉,
21
+ 上海: 'https://infrastructure-website.osinfra.cn/picture/city/shanghai.jpg',
22
+ 北京: 'https://infrastructure-website.osinfra.cn/picture/city/beijing.jpg',
23
+ 南京: 'https://infrastructure-website.osinfra.cn/picture/city/nanjing.jpg',
24
+ 天津: 'https://infrastructure-website.osinfra.cn/picture/city/tianjin.jpg',
25
+ 成都: 'https://infrastructure-website.osinfra.cn/picture/city/chengdu.jpg',
26
+ 无锡: 'https://infrastructure-website.osinfra.cn/picture/city/wuxi.jpg',
27
+ 杭州: 'https://infrastructure-website.osinfra.cn/picture/city/hangzhou.jpg',
28
+ 深圳: ['https://infrastructure-website.osinfra.cn/picture/city/shenzhen1.jpg', 'https://infrastructure-website.osinfra.cn/picture/city/shenzhen2.jpg'],
29
+ 苏州: 'https://infrastructure-website.osinfra.cn/picture/city/suzhou.jpg',
30
+ 西安: 'https://infrastructure-website.osinfra.cn/picture/city/xian.jpg',
31
+ 郑州: 'https://infrastructure-website.osinfra.cn/picture/city/zhengzhou.jpg',
32
+ 武汉: 'https://infrastructure-website.osinfra.cn/picture/city/wuhan.jpg',
47
33
  };